Extension API 0.4
Current extension API 0.4 and retained wire reference.
Manual for v0.9.5. Stable release: v0.9.5.
API 0.4 is the current working-tree extension API version, using the feature-negotiated JSON-RPC wire retained from API 0.2. Extensions add tools and bounded host-shaped integrations to a small coding host; this is not a promise of Pi execution parity or a general extension platform. Exact host offers and frontend bindings determine product availability. This reference targets octet 0.9.5; native publication does not publish SDK registries.
Version policy#
| API | Status | Wire | Runtime | Installable bundles |
|---|---|---|---|---|
0.1 |
frozen | legacy-json-rpc |
supported | unavailable |
0.2 |
supported | legacy-json-rpc |
supported | supported |
0.3 |
supported | canonical-json-rpc |
supported | supported |
0.4 |
current | legacy-json-rpc |
supported | supported |
API 0.1 remains frozen at its legacy wire. API 0.2 and 0.3 remain runtime and bundle supported; API 0.4 is current and is the version new extensions must declare. Selection is exact and never silently upgrades a legacy manifest. The tables and canonical models below are generated from the retained API 0.3 schema, not a replacement API 0.4 handshake. For the feature-negotiated wire, including commands, status/presentation, dynamic tools, artifacts, agent_sessions, and conditional approvals, see the protocol reference. Existing runtime contracts, SDKs, and conformance tests remain live; documenting a service does not promise that every product host exposes it. On the canonical wire, required host-offer sets are fixed; optional services are omitted when they cannot be safely bound.
Optional API 0.4 cache-warming advice#
On the feature-negotiated API 0.4 wire only, a manifest declaring hooks = ["cache_warming_decision"] is offered the matching optional feature. Declaring the hook requires selecting that feature. This does not add a canonical API 0.3 capability or method.
hook/run carries payload: {decision, model} and the ordinary owner-fenced execution context. decision contains phase (streaming or idle), warm_cost_microdollars, miss_cost_microdollars, continuation_probability, signed expected_savings_microdollars, economics_available, and the host action (warm or stop). No prompt, credentials, provider transport, or mutable session is exposed. The response field is cache_warming_decision: "warm" | "stop" | null; absence is also no opinion.
Hooks run in registration order before every due refresh; the last returned action wins. Failure, malformed output, stale generation, timeout or no opinion preserves the preceding decision. Each process wait is capped at 200 ms and the host additionally enforces its aggregate hook budget within the original refresh deadline. Advice cannot change eligibility, spending/attempt budgets, cancellation or replay safety. See the full hook contract and typed Python authoring.
Canonical framing and JSON-RPC envelopes#
This section describes the retained API 0.3 canonical wire. API 0.4 keeps feature-negotiated JSON-RPC framing instead; do not retag canonical messages. Canonical frames are UTF-8 canonical JSON followed by exactly one LF. max_frame_bytes excludes that delimiter. After initialization the selected bound replaces the offered bound atomically for both stdin writes and stdout reads. A frame exactly at the bound is accepted; one byte over terminates the protocol stream.
JSON-RPC envelopes have no unknown fields. Requests require id, method, and params; notifications require method and params but forbid id; responses require a valid non-null ID and exactly one of result or error. Error-response code/message pairs must exactly match the generated API 0.3 error table. IDs are bounded strings or non-negative portable integers. Duplicate keys, noncanonical whitespace/escapes, malformed UTF-16 surrogate escapes, nonportable numbers, and depth violations are rejected before dispatch.
Bounds#
| Name | Maximum | Negotiated | Meaning |
|---|---|---|---|
max_frame_bytes |
1048576 | yes | Maximum UTF-8 JSON-RPC payload bytes, excluding the line delimiter. |
max_concurrent_requests |
64 | yes | Maximum concurrently admitted host-to-extension requests. |
max_tools |
256 | yes | Maximum complete tool catalog entries. |
max_extension_flags |
64 | no | Maximum manifest-declared CLI flag values delivered during initialization. |
max_capabilities |
32 | no | Maximum requested or selected capability names in one contract. |
max_methods |
64 | no | Maximum requested or selected method names in one contract. |
max_capability_name_bytes |
64 | no | Maximum UTF-8 bytes in one capability name. |
max_method_name_bytes |
128 | no | Maximum UTF-8 bytes in one method name. |
max_reason_bytes |
4096 | no | Maximum UTF-8 bytes in an inspectable disposition reason. |
max_json_depth |
32 | no | Maximum nested JSON container depth for canonical protocol values. |
max_portable_json_integer |
9007199254740991 | no | Largest exactly portable JSON integer accepted by canonical encoding. |
max_content_parts |
256 | no | Maximum ordered API 0.3 tool-result content parts. |
max_tool_name_bytes |
128 | no | Maximum UTF-8 bytes in an API 0.3 tool name. |
max_tool_description_bytes |
4096 | no | Maximum UTF-8 bytes in an API 0.3 tool description. |
max_json_rpc_id_bytes |
256 | no | Maximum UTF-8 bytes in a string JSON-RPC identifier. |
max_migration_items |
128 | no | Maximum source items in one migration adapter category. |
max_migration_path_bytes |
4096 | no | Maximum UTF-8 bytes in a migration source-root or source-relative path. |
max_migration_name_bytes |
128 | no | Maximum UTF-8 bytes in one migration model, skill, or server name. |
max_migration_skill_bytes |
131072 | no | Maximum UTF-8 bytes in one migrated skill payload. |
max_migration_command_bytes |
4096 | no | Maximum UTF-8 bytes in one migrated stdio command. |
max_migration_argument_bytes |
16384 | no | Maximum UTF-8 bytes in one migrated stdio argument. |
max_migration_diagnostic_bytes |
4096 | no | Maximum UTF-8 bytes in one migration diagnostic reason. |
max_providers |
32 | no | Maximum live extension-provider declarations across one host registry. |
max_provider_models |
256 | no | Maximum live extension-provider model declarations across one host registry. |
max_provider_id_bytes |
64 | no | Maximum UTF-8 bytes in an extension provider or model identifier. |
max_provider_label_bytes |
128 | no | Maximum UTF-8 bytes in an extension provider or model display label. |
max_provider_auth_scopes |
32 | no | Maximum OAuth or credential scopes in one host-policy request. |
max_provider_auth_lease_bytes |
256 | no | Maximum UTF-8 bytes in an opaque host-issued authorization lease. |
max_provider_stream_event_bytes |
65536 | no | Maximum canonical bytes in one provider stream event payload. |
max_provider_stream_events |
100000 | no | Maximum events accepted for one extension-provider stream. |
max_session_hook_id_bytes |
256 | no | Maximum UTF-8 bytes in one opaque session-hook binding identifier. |
max_theme_id_bytes |
128 | no | Maximum UTF-8 bytes in one host-advertised theme id. |
max_bus_topics |
128 | no | Maximum declared topics per session-isolated host bus. |
max_bus_peers |
64 | no | Maximum process generations attached to one session-isolated bus. |
max_bus_fields |
24 | no | Maximum scalar fields in one declared bus topic. |
max_bus_identifier_bytes |
64 | no | Maximum bytes in a bus publisher, topic segment, or field name. |
max_bus_topic_bytes |
96 | no | Maximum bytes in one exact bus topic. |
max_bus_string_bytes |
1024 | no | Maximum bytes in a bus string or enumeration value. |
max_bus_enum_values |
32 | no | Maximum alternatives in one bus enumeration field. |
max_bus_message_bytes |
8192 | no | Maximum encoded bus event bytes excluding LF. |
max_bus_queue_messages |
64 | no | Maximum queued bus events per subscriber process. |
max_bus_queue_bytes |
262144 | no | Maximum queued bus event bytes per subscriber process. |
max_bus_subscriptions |
16 | no | Maximum exact-topic subscriptions per process. |
max_bus_message_age_ms |
30000 | no | Maximum time a queued bus event may wait before delivery; expired events are discarded. |
Capabilities#
| Capability | Default offer | Status | Meaning |
|---|---|---|---|
content_parts |
required | foundation | Typed text/media tool-result parts and structured result details. |
core |
required | foundation | Versioned initialization, explicit errors, bounds, and canonical encoding. |
dynamic_tools |
unavailable | deferred | Live transactional tool-catalog mutation. |
lifecycle_events |
optional | foundation | Declared SessionStart/SessionEnd hooks for host-owned session lifecycle cleanup. |
migration.adapter.v1 |
optional | foundation | Bounded read-only setup detection and import conversion for host-owned migration ingestion. |
provider_auth |
optional | foundation | Explicit host-policy OAuth and credential authorization requests with opaque leases only. |
provider_catalog |
optional | foundation | Lifecycle-owned registration of secret-free extension provider and model catalogs. |
provider_stream |
optional | foundation | Bounded host-mediated inference stream proxying for registered extension models. |
request_cancellation |
required | foundation | Cooperative cancellation with explicit terminal disposition. |
session_lifecycle |
optional | foundation | Bounded extension requests to create, fork, switch, or reload a host session. |
tool_call |
required | foundation | Bounded host-to-extension model tool invocation. |
theme_selection |
optional | foundation | Host-mediated, extension-namespaced presentation theme selection over host-resolved non-widening themes. |
event_bus |
optional | foundation | Optional session-isolated bus. Selection MUST include bus/lifecycle; subscriptions also require bus/event. No compatibility claim for earlier draft bus contracts. |
Methods and terminal semantics#
| Method | Direction | Params | Result | Terminal | Notification | Status |
|---|---|---|---|---|---|---|
$/cancelRequest |
bidirectional |
CancelRequestParams |
CancelRequestResult |
original_request_cancelled |
yes | foundation |
context/collect |
host_to_extension |
— |
— |
deferred |
no | deferred |
hook/run |
host_to_extension |
SessionHookParams |
SessionHookResult |
result_or_error |
no | foundation |
initialize |
host_to_extension |
InitializeRequest |
InitializeResponse |
initialized |
no | foundation |
migration/detect |
host_to_extension |
MigrationDetectParams |
MigrationDetectResult |
result_or_error |
no | foundation |
migration/import |
host_to_extension |
MigrationImportParams |
MigrationImportResult |
result_or_error |
no | foundation |
provider/auth/request |
extension_to_host |
ProviderAuthorizationRequest |
ProviderAuthorizationResult |
result_or_error |
no | foundation |
provider/auth/revoke |
extension_to_host |
ProviderAuthorizationRequest |
ProviderAuthorizationResult |
result_or_error |
no | foundation |
provider/cancel |
host_to_extension |
ProviderStreamCancelParams |
— |
stream_event |
yes | foundation |
provider/event |
extension_to_host |
ProviderStreamEvent |
— |
stream_event |
yes | foundation |
provider/stream |
host_to_extension |
ProviderStreamRequest |
ProviderStreamAccepted |
result_or_error |
no | foundation |
providers/complete |
extension_to_host |
ProviderCatalogCompleteParams |
— |
catalog_complete |
yes | foundation |
providers/register |
extension_to_host |
ProviderRegisterParams |
ProviderCatalogResult |
result_or_error |
no | foundation |
providers/unregister |
extension_to_host |
ProviderUnregisterParams |
ProviderCatalogResult |
result_or_error |
no | foundation |
providers/update |
extension_to_host |
ProviderUpdateParams |
ProviderCatalogResult |
result_or_error |
no | foundation |
session/create |
extension_to_host |
SessionCreateParams |
SessionLifecycleResult |
result_or_error |
no | foundation |
session/fork |
extension_to_host |
SessionForkParams |
SessionLifecycleResult |
result_or_error |
no | foundation |
session/reload |
extension_to_host |
SessionReloadParams |
SessionLifecycleResult |
result_or_error |
no | foundation |
session/switch |
extension_to_host |
SessionSwitchParams |
SessionLifecycleResult |
result_or_error |
no | foundation |
shutdown |
host_to_extension |
ShutdownParams |
ShutdownResult |
shutdown |
no | foundation |
tool/call |
host_to_extension |
ToolCallParams |
ToolCallResult |
result_or_error |
no | foundation |
tools/register |
extension_to_host |
— |
— |
deferred |
no | deferred |
tools/unregister |
extension_to_host |
— |
— |
deferred |
no | deferred |
theme/select |
extension_to_host |
ThemeSelectParams |
ThemeSelectResult |
result_or_error |
no | foundation |
bus/declare |
extension_to_host |
BusDeclareParams |
BusAck |
result_or_error |
no | foundation |
bus/subscribe |
extension_to_host |
BusTopicParams |
BusSubscribeResult |
result_or_error |
no | foundation |
bus/unsubscribe |
extension_to_host |
BusTopicParams |
BusAck |
result_or_error |
no | foundation |
bus/publish |
extension_to_host |
BusPublishParams |
BusPublishResult |
result_or_error |
no | foundation |
bus/event |
host_to_extension |
BusEventParams |
— |
stream_event |
yes | foundation |
bus/lifecycle |
host_to_extension |
BusLifecycleParams |
— |
stream_event |
yes | foundation |
Deferred capabilities and methods remain unavailable on this canonical API 0.3 wire; only the listed foundation methods and capabilities may be negotiated there. In particular, this does not withdraw dynamic tools used by MCP or other retained API 0.2/0.4 services.
Errors#
| Name | Code | Message | Meaning |
|---|---|---|---|
parse_error |
-32700 |
parse error | Invalid JSON was received. |
invalid_request |
-32600 |
invalid request | The JSON-RPC envelope is invalid. |
unknown_method |
-32601 |
unknown or unnegotiated method | The method is absent from the negotiated API 0.3 contract. |
invalid_params |
-32602 |
invalid params | Parameters violate a canonical wire type or bound. |
internal_error |
-32603 |
internal error | The implementation could not complete a valid request. |
version_mismatch |
-32010 |
extension API version mismatch | The peer did not select exactly API 0.3 and this wire cannot be adapted. |
capability_mismatch |
-32011 |
extension capability mismatch | A required capability or method is missing, duplicated, unknown, or not offered. |
resource_exhausted |
-32012 |
extension resource exhausted | A declared aggregate or per-contract bound was exhausted. |
request_cancelled |
-32800 |
request cancelled | Cooperative cancellation won the terminal race. |
Dispositions#
| Kind | Reason | Meaning |
|---|---|---|
continue |
optional | Continue the operation without a veto. |
deny |
required | Deny an interceptable operation with an inspectable reason. |
defer |
required | Defer a supported operation until a host-owned boundary resolves. |
Generated wire models#
ProtocolLimits#
Negotiated maxima selected by the extension and capped by the host.
| Field | Type | Presence | Nullable |
|---|---|---|---|
max_frame_bytes |
integer |
required | no |
max_concurrent_requests |
integer |
required | no |
max_tools |
integer |
required | no |
ContractOffer#
Host offer for the API 0.3 capability and method contract.
| Field | Type | Presence | Nullable |
|---|---|---|---|
schema |
string |
required | no |
encoding |
string |
required | no |
required_capabilities |
string[] |
required | no |
optional_capabilities |
string[] |
required | no |
required_methods |
string[] |
required | no |
optional_methods |
string[] |
required | no |
limits |
ProtocolLimits |
required | no |
ContractSelection#
Extension selection from one API 0.3 contract offer.
| Field | Type | Presence | Nullable |
|---|---|---|---|
schema |
string |
required | no |
encoding |
string |
required | no |
capabilities |
string[] |
required | no |
methods |
string[] |
required | no |
limits |
ProtocolLimits |
required | no |
ToolDefinition#
A complete API 0.3 model tool definition returned at initialization.
| Field | Type | Presence | Nullable |
|---|---|---|---|
name |
string |
required | no |
description |
string |
required | no |
parameters |
json |
required | no |
output_schema |
json |
optional | no |
ContentPart#
One ordered, typed API 0.3 tool-result content part.
| Variant | Wire tag | Status | Fields |
|---|---|---|---|
Text |
text |
foundation | text: string |
Image |
image |
deferred | artifact_id: string, mime_type: string, alt: string |
Audio |
audio |
deferred | artifact_id: string, mime_type: string, transcript: string |
ToolCallParams#
Host-to-extension bounded API 0.3 tool invocation parameters.
| Field | Type | Presence | Nullable |
|---|---|---|---|
name |
string |
required | no |
arguments |
json |
required | no |
context |
json |
required | no |
ToolCallResult#
Terminal successful API 0.3 tool-call result; failures use the generated JSON-RPC error envelope.
| Field | Type | Presence | Nullable |
|---|---|---|---|
content |
ContentPart[] |
required | no |
is_error |
boolean |
required | no |
metadata |
json |
required | yes |
structured_content |
json |
optional | yes |
SessionBinding#
Opaque, host-owned session and extension-generation identity for one declared session-hook binding.
| Field | Type | Presence | Nullable |
|---|---|---|---|
session_id |
string |
required | no |
extension_instance_id |
string |
required | no |
process_generation |
integer |
required | no |
SessionStart#
Sanitized payload delivered once when an eligible declared session-hook binding becomes active.
| Field | Type | Presence | Nullable |
|---|---|---|---|
binding |
SessionBinding |
required | no |
SessionEnd#
Sanitized terminal payload delivered once when an eligible declared session-hook binding settles.
| Field | Type | Presence | Nullable |
|---|---|---|---|
binding |
SessionBinding |
required | no |
outcome |
string |
required | no |
reason |
string |
required | no |
duration_ms |
integer |
required | no |
SessionHookParams#
Typed host-to-extension parameters for one declared session lifecycle hook; no mutable session state is exposed.
| Variant | Wire tag | Status | Fields |
|---|---|---|---|
SessionStart |
session_start |
foundation | payload: SessionStart |
SessionEnd |
session_end |
foundation | payload: SessionEnd |
SessionHookResult#
Terminal result for a declared session hook. Non-continue dispositions are recorded but never veto host lifecycle ownership.
| Field | Type | Presence | Nullable |
|---|---|---|---|
disposition |
Disposition |
required | no |
CancelRequestParams#
Idempotent cancellation notification parameters for an active request.
| Field | Type | Presence | Nullable |
|---|---|---|---|
id |
rpc_id |
required | no |
reason |
string |
optional | no |
CancelRequestResult#
The terminal cancellation fact attached to the original request outcome.
| Field | Type | Presence | Nullable |
|---|---|---|---|
terminal |
string |
required | no |
reason |
string |
optional | no |
SessionCreateParams#
Empty parameters for creating one durable host session without switching to it.
| Field | Type | Presence | Nullable |
|---|
SessionForkParams#
Empty parameters for forking the active host session at its current durable head without switching to it.
| Field | Type | Presence | Nullable |
|---|
SessionSwitchParams#
Bounded opaque identifier of a session in the active workspace to make active.
| Field | Type | Presence | Nullable |
|---|---|---|---|
session_id |
string |
required | no |
SessionReloadParams#
Empty parameters for reopening the active host session from disk.
| Field | Type | Presence | Nullable |
|---|
SessionLifecycleResult#
Terminal successful session-lifecycle result containing the affected session identifier.
| Field | Type | Presence | Nullable |
|---|---|---|---|
session_id |
string |
required | no |
ShutdownParams#
Empty graceful-shutdown parameters; unknown fields are rejected.
| Field | Type | Presence | Nullable |
|---|
ShutdownResult#
Terminal graceful-shutdown acknowledgement.
| Field | Type | Presence | Nullable |
|---|---|---|---|
terminal |
string |
required | no |
InitializeFlagValue#
One host-parsed value for a manifest-declared extension CLI flag.
| Field | Type | Presence | Nullable |
|---|---|---|---|
name |
string |
required | no |
value |
json |
required | no |
InitializeRequest#
Canonical API 0.3 initialize parameters. Host-owned metadata values remain explicitly opaque JSON boundaries.
| Field | Type | Presence | Nullable |
|---|---|---|---|
api_version |
string |
required | no |
octet_version |
string |
required | no |
extension |
json |
required | no |
workspace |
string |
required | no |
capabilities |
json |
required | no |
contributes |
json |
required | no |
flag_values |
InitializeFlagValue[] |
required | no |
host |
json |
required | no |
contract |
ContractOffer |
required | no |
InitializeResponse#
Canonical API 0.3 initialize result with the complete selected tool catalog.
| Field | Type | Presence | Nullable |
|---|---|---|---|
api_version |
string |
required | no |
tools |
ToolDefinition[] |
required | no |
contract |
ContractSelection |
required | no |
MigrationDiagnostic#
A bounded non-secret diagnostic emitted while a migration adapter reads a source setup.
| Field | Type | Presence | Nullable |
|---|---|---|---|
path |
string |
required | no |
severity |
string |
required | no |
reason |
string |
required | no |
MigrationDetectParams#
Host-authorized source root for read-only migration detection.
| Field | Type | Presence | Nullable |
|---|---|---|---|
source_root |
string |
required | no |
MigrationDetectResult#
Bounded result of read-only migration source detection. Config paths are source-relative.
| Field | Type | Presence | Nullable |
|---|---|---|---|
detected |
boolean |
required | no |
config_paths |
string[] |
required | no |
diagnostics |
MigrationDiagnostic[] |
required | no |
MigrationImportParams#
Host-authorized source root and previously detected source-relative config paths for read-only conversion.
| Field | Type | Presence | Nullable |
|---|---|---|---|
source_root |
string |
required | no |
config_paths |
string[] |
required | no |
MigrationModel#
A non-secret source model selection with its source-relative provenance path.
| Field | Type | Presence | Nullable |
|---|---|---|---|
path |
string |
required | no |
provider |
string |
required | no |
model |
string |
required | no |
MigrationSkill#
A bounded source skill payload with its source-relative provenance path.
| Field | Type | Presence | Nullable |
|---|---|---|---|
path |
string |
required | no |
name |
string |
required | no |
content |
string |
required | no |
MigrationMcpServer#
A non-secret local stdio MCP declaration. Environment variables, headers, credentials, and working directories are intentionally absent.
| Field | Type | Presence | Nullable |
|---|---|---|---|
path |
string |
required | no |
name |
string |
required | no |
command |
string |
required | no |
args |
string[] |
required | no |
MigrationImportResult#
Bounded typed migration conversion. The adapter never returns credentials, environment values, headers, or permission grants.
| Field | Type | Presence | Nullable |
|---|---|---|---|
models |
MigrationModel[] |
required | no |
skills |
MigrationSkill[] |
required | no |
mcp_servers |
MigrationMcpServer[] |
required | no |
diagnostics |
MigrationDiagnostic[] |
required | no |
ErrorObject#
Bounded JSON-RPC error object using an API 0.3 error-table code. Its data field preserves absent versus explicit null.
| Field | Type | Presence | Nullable |
|---|---|---|---|
code |
signed_integer |
required | no |
message |
string |
required | no |
data |
json |
optional | yes |
Disposition#
Explicit API 0.3 operation disposition. Reason is optional but never nullable when present.
| Field | Type | Presence | Nullable |
|---|---|---|---|
kind |
disposition |
required | no |
reason |
string |
optional | no |
JsonRpcRequest#
Strict JSON-RPC 2.0 request envelope.
| Field | Type | Presence | Nullable |
|---|---|---|---|
jsonrpc |
string |
required | no |
id |
rpc_id |
required | no |
method |
string |
required | no |
params |
json |
required | no |
JsonRpcNotification#
Strict JSON-RPC 2.0 notification envelope.
| Field | Type | Presence | Nullable |
|---|---|---|---|
jsonrpc |
string |
required | no |
method |
string |
required | no |
params |
json |
required | no |
JsonRpcSuccessResponse#
Strict JSON-RPC 2.0 successful response envelope.
| Field | Type | Presence | Nullable |
|---|---|---|---|
jsonrpc |
string |
required | no |
id |
rpc_id |
required | no |
result |
json |
required | no |
JsonRpcErrorResponse#
Strict JSON-RPC 2.0 error response envelope.
| Field | Type | Presence | Nullable |
|---|---|---|---|
jsonrpc |
string |
required | no |
id |
rpc_id |
required | no |
error |
ErrorObject |
required | no |
ProviderAuthRequirement#
Secret-free authentication class requested by an extension provider. Credential values and authorization URLs are never protocol fields.
| Field | Type | Presence | Nullable |
|---|---|---|---|
kind |
string |
required | no |
subject |
string |
optional | no |
scopes |
string[] |
optional | no |
ProviderDefinition#
One secret-free provider declaration owned by the current extension process generation.
| Field | Type | Presence | Nullable |
|---|---|---|---|
id |
string |
required | no |
label |
string |
required | no |
auth |
ProviderAuthRequirement |
required | no |
ProviderModelCapabilities#
Capability subset advertised for a provider-owned model. Media and endpoint configuration remain host policy.
| Field | Type | Presence | Nullable |
|---|---|---|---|
tools |
boolean |
required | no |
parallel_tool_calls |
boolean |
required | no |
structured_output |
boolean |
required | no |
reasoning |
boolean |
required | no |
ProviderModelDefinition#
A model in a provider-owned catalog. It contains no endpoint, header, credential, or URL material.
| Field | Type | Presence | Nullable |
|---|---|---|---|
id |
string |
required | no |
api_name |
string |
required | no |
protocol |
string |
required | no |
context_window |
integer |
required | no |
max_output_tokens |
integer |
required | no |
capabilities |
ProviderModelCapabilities |
required | no |
display_name |
string |
optional | no |
ProviderRegisterParams#
Atomic initial registration of one provider and its complete current model set.
| Field | Type | Presence | Nullable |
|---|---|---|---|
provider |
ProviderDefinition |
required | no |
models |
ProviderModelDefinition[] |
required | no |
ProviderUpdateParams#
Atomic replacement of one owned provider and its complete current model set.
| Field | Type | Presence | Nullable |
|---|---|---|---|
provider |
ProviderDefinition |
required | no |
models |
ProviderModelDefinition[] |
required | no |
ProviderUnregisterParams#
Removal of a provider owned by the current extension process generation.
| Field | Type | Presence | Nullable |
|---|---|---|---|
provider_id |
string |
required | no |
ProviderCatalogCompleteParams#
Idempotent empty notification emitted after an extension has settled its complete initial provider-registration batch, including an empty catalog. Later catalog mutations remain permitted.
| Field | Type | Presence | Nullable |
|---|
ProviderCatalogResult#
Acknowledgement of an atomic provider catalog mutation. IDs are inspectable only; no secret data is retained.
| Field | Type | Presence | Nullable |
|---|---|---|---|
revision |
integer |
required | no |
provider_ids |
string[] |
required | no |
model_ids |
string[] |
required | no |
ProviderStreamRequest#
Host-to-extension inference request using canonical request JSON and an optional opaque host authorization lease.
| Field | Type | Presence | Nullable |
|---|---|---|---|
stream_id |
string |
required | no |
provider_id |
string |
required | no |
model_id |
string |
required | no |
request |
json |
required | no |
authorization_lease |
string |
optional | no |
ProviderStreamAccepted#
Explicit acceptance fact for a provider stream. Acceptance ambiguity never authorizes an automatic replay.
| Field | Type | Presence | Nullable |
|---|---|---|---|
stream_id |
string |
required | no |
accepted |
boolean |
required | no |
reason |
string |
optional | no |
ProviderStreamEvent#
One ordered, bounded canonical provider stream event. Payload shape is selected by kind and decoded by the host.
| Field | Type | Presence | Nullable |
|---|---|---|---|
stream_id |
string |
required | no |
sequence |
integer |
required | no |
kind |
string |
required | no |
payload |
json |
required | no |
ProviderStreamCancelParams#
Best-effort cancellation notification for an accepted provider stream.
| Field | Type | Presence | Nullable |
|---|---|---|---|
stream_id |
string |
required | no |
reason |
string |
optional | no |
ProviderAuthorizationRequest#
Explicit extension request for host-policy authorization. It never carries credential values, URLs, or callback endpoints.
| Field | Type | Presence | Nullable |
|---|---|---|---|
provider_id |
string |
required | no |
action |
string |
required | no |
interactive |
boolean |
required | no |
scopes |
string[] |
optional | no |
ProviderAuthorizationResult#
Host-policy authorization state and an optional opaque, non-secret request-scoped lease.
| Field | Type | Presence | Nullable |
|---|---|---|---|
status |
string |
required | no |
lease |
string |
optional | no |
ThemeSelectParams#
Bounded extension-scoped theme selection request. Scope is fixed to the requesting extension so a selection can never widen project trust.
| Field | Type | Presence | Nullable |
|---|---|---|---|
namespace |
string |
required | no |
theme_id |
string |
required | no |
role |
string |
required | no |
scope |
string |
required | no |
ThemeSelectResult#
Terminal host decision for one theme selection. Only the host names a resolved non-widening theme id.
| Field | Type | Presence | Nullable |
|---|---|---|---|
status |
string |
required | no |
theme_id |
string |
optional | no |
reason |
string |
optional | no |
BusFieldSpec#
One scalar-only bus field. Host runtime additionally screens names, values and conditional bounds.
| Field | Type | Presence | Nullable |
|---|---|---|---|
name |
string |
required | no |
kind |
string |
required | no |
required |
boolean |
required | no |
max_bytes |
integer |
required | no |
values |
string[] |
required | no |
minimum |
signed_integer |
optional | no |
maximum |
signed_integer |
optional | no |
BusDeclareParams#
Declare one immutable typed topic owned by the host-derived requesting process principal.
| Field | Type | Presence | Nullable |
|---|---|---|---|
binding_id |
string |
required | no |
topic |
string |
required | no |
fields |
BusFieldSpec[] |
required | no |
BusTopicParams#
Exact topic interest. Subscribe explicitly acknowledges pending interest or active subscription; unknown topics are never active.
| Field | Type | Presence | Nullable |
|---|---|---|---|
binding_id |
string |
required | no |
topic |
string |
required | no |
BusAck#
Binding-scoped successful declaration or unsubscribe acknowledgement.
| Field | Type | Presence | Nullable |
|---|---|---|---|
binding_id |
string |
required | no |
BusPublishParams#
Typed inert payload; publisher identity, generation, sequence and time are host-owned.
| Field | Type | Presence | Nullable |
|---|---|---|---|
binding_id |
string |
required | no |
topic |
string |
required | no |
payload |
json |
required | no |
BusPublishResult#
Host-owned monotonic sequence of an atomically admitted publication.
| Field | Type | Presence | Nullable |
|---|---|---|---|
binding_id |
string |
required | no |
sequence |
integer |
required | no |
published_at_ms |
integer |
required | no |
BusEventParams#
In-memory event delivered only to a subscribed process of this host session.
| Field | Type | Presence | Nullable |
|---|---|---|---|
binding_id |
string |
required | no |
topic |
string |
required | no |
publisher |
string |
required | no |
publisher_instance_id |
string |
required | no |
process_generation |
integer |
required | no |
sequence |
integer |
required | no |
published_at_ms |
integer |
required | no |
payload |
json |
required | no |
BusSubscribeResult#
Explicit bounded interest admission. Pending is not an active subscription; activation requires a new subscribe ACK with host provenance.
| Variant | Wire tag | Status | Fields |
|---|---|---|---|
Pending |
pending |
foundation | binding_id: string, topic_revision: integer |
Active |
active |
foundation | binding_id: string, topic_revision: integer, publisher_instance_id: string, process_generation: integer |
BusLifecycleParams#
Mandatory negotiated bus control notification. Monotonic host revisions order bindings and exact-topic availability; no authority or publication replay.
| Variant | Wire tag | Status | Fields |
|---|---|---|---|
Binding |
binding |
foundation | binding_id: string, binding_revision: integer |
TopicAvailable |
topic_available |
foundation | binding_id: string, topic: string, topic_revision: integer, publisher_instance_id: string, process_generation: integer |
TopicUnavailable |
topic_unavailable |
foundation | binding_id: string, topic: string, topic_revision: integer, publisher_instance_id: string, process_generation: integer |
Generated artifacts and conformance#
This live schema generates Rust, Python, TypeScript ESM/runtime declarations, canonical golden fixtures, independent hostile negative fixtures, and this reference. Keep generation and conformance checks when qualifying the bounded authoring path; these artifacts are not archived parity scaffolding. Optional nullable fields preserve absent versus explicit null; optional non-null fields reject explicit null in all three SDKs.
python3 scripts/generate-extension-api-v03.py --checkThe TypeScript package exports ESM runtime at @skaft-software/octet-extension-api-v03 and declarations without registry dependencies. Do not hand-edit generated artifacts.