Skip to content

Re-export ModelPolicyState and ModelPickerCategory from the crate root alongside Model/ModelPolicy #1674

@colbylwilliams

Description

@colbylwilliams

Summary

The crate-root prelude (pub use types::*) surfaces a curated set of
generated protocol types, but omits two enums that are the field types
of structs already re-exported there. This makes the model-info surface
inconsistent: you can name the container struct at the crate root but
must reach through copilot::rpc for the enum that one of its fields
holds.

Details

types.rs curates the public re-export block:

/// Re-exports of generated protocol types that are part of the SDK's
/// public API surface. ...
pub use crate::generated::api_types::{
    Model, ModelBilling, ModelCapabilities, ModelCapabilitiesLimits, ModelCapabilitiesLimitsVision,
    ModelCapabilitiesSupports, ModelList, ModelPolicy, PermissionDecision,
    PermissionDecisionApproveOnce, PermissionDecisionReject, PermissionDecisionUserNotAvailable,
};

Two enums are missing from that list even though they are the declared
field types of structs that are in it:

  • ModelPolicy.state: ModelPolicyStateModelPolicy is re-exported; ModelPolicyState is not.
  • Model.model_picker_category: Option<ModelPickerCategory>Model is re-exported; ModelPickerCategory is not.

Consequence

A consumer that pattern-matches on policy.state or reads
model.model_picker_category can refer to copilot::Model /
copilot::ModelPolicy from the crate root, but has to import the field
enums from a different path:

use copilot::{Model, ModelPolicy};            // crate root
use copilot::rpc::{ModelPolicyState, ModelPickerCategory}; // only here

Because the curated list looks complete, it's easy to assume the whole
model-info surface lives at the crate root and be surprised these two
don't. It's a small ergonomics/consistency papercut, not a correctness
issue (both are reachable via copilot::rpc).

Suggested fix

Add ModelPolicyState and ModelPickerCategory to the curated
pub use crate::generated::api_types::{ ... } block in types.rs, so
the full model-info type set is reachable from the crate root alongside
Model and ModelPolicy.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions