## Public feature reference

This chapter is the compact index to the entire supplied public inventory\.&#32;It is intentionally grouped by purpose rather than presented as one giant type dump\.

### `ExtensionAPI`\:&#32;registration and module access

| Members | Practical contract | Worked example |
| --- | --- | --- |
| `logger` | File logging\;&#32;avoid console output that corrupts TUI\/RPC channels and avoid logging secrets | Lab status\;&#32;native delegation |
| `typebox`\,&#32;`arktype`\,&#32;`zod` | Injected compatible schema authoring | Seed Desk\;&#32;Package Lab |
| `pi` | Injected coding\-agent package exports\;&#32;availability still follows the matching host | SDK\-oriented integrations |
| `on` | Subscribe using the exact supported event name and return shape | [Event reference](<https://present-sketch-tp94.here.now/chapters/extensions-all-46-extension-events#extensions-all-46-extension-events>) |
| `registerTool` | Register a schema\-shaped machine capability | Seed Desk\;&#32;Review Desk |
| `registerCommand` | Register a human\/host slash\-command handler | All principal stories |
| `registerShortcut` | Register a nonreserved operator key binding | Phrase\-key exercise |
| `registerFlag`\,&#32;`getFlag` | Declare\/read a boolean or string flag\;&#32;read your own registered name | `seed-quiet` |
| `setLabel` | Set the extension’s display label in the supplied concrete implementation | Lab status |
| `registerMessageRenderer` | Render a named custom message type | Review Desk |
| `registerAssistantThinkingRenderer` | Add supplemental UI after visible thinking blocks | Thinking\-length exercise |
| `registerComposerShape` | Register a complete composer rendering contract | Workbook Field Dock |
| `registerFileWriteFallback`\,&#32;`registerFileDeleteFallback` | Register separate native permission\-denied mutation seams | [File fallbacks](<https://present-sketch-tp94.here.now/chapters/extensions-permission-denied-file-fallbacks#extensions-permission-denied-file-fallbacks>) |
| `registerProvider`\,&#32;`unregisterProvider` | Register\/remove runtime model\-provider overrides | [Providers](<https://present-sketch-tp94.here.now/chapters/extensions-models-providers-credentials-and-memory#extensions-models-providers-credentials-and-memory>) |
| `events` | Shared runtime event bus with&#32;`on`\,&#32;`emit`\,&#32;`clear` | Field events |

**`setLabel`&#32;compatibility edge\:**&#32;the public type advertises both extension\-label and entry\-label usage\,&#32;but&#32;`ConcreteExtensionAPI.setLabel(label)`&#32;only assigns the extension label in this snapshot\.&#32;Do not claim that the two\-argument form labels a journal entry here\.&#32;Do not cast the read\-only session manager to bypass the public boundary\.

### `ExtensionAPI`\:&#32;live actions

| Members | Practical contract |
| --- | --- |
| `sendMessage` | Custom conversation\/context message\;&#32;optional steer\/follow\-up\/next\-turn and turn trigger |
| `captureSessionTarget`\,&#32;`deliverMessage` | Persistent owner anchor and deduplicated complete delivery with a receipt |
| `sendUserMessage` | User\-style prompt\/queue\;&#32;no slash\-command dispatch |
| `appendEntry` | Custom state entry\,&#32;not model\-visible content |
| `exec` | Program\/argv execution with cwd\,&#32;timeout and cancellation |
| `getActiveTools`\,&#32;`getAllTools`\,&#32;`setActiveTools` | Enabled\-set inspection\,&#32;full registry metadata and asynchronous selection |
| `getCommands` | Dynamic command metadata\,&#32;not a universal list of built\-ins |
| `setModel` | Credential\-aware model selection |
| `getThinkingLevel`\,&#32;`setThinkingLevel` | Effective thinking\-level control |
| `getServiceTiers`\,&#32;`setServiceTier` | Detached per\-family tier snapshot and subsequent\-request override |
| `getSessionName`\,&#32;`setSessionName` | Read\/set persisted session naming\,&#32;distinct from terminal title |

`getCommands()`&#32;aggregates extension commands\,&#32;loaded custom\/MCP prompt commands and enabled skill commands through&#32;`getSessionSlashCommands()`\.&#32;Built\-ins are intentionally excluded from that helper\.&#32;Frontends may advertise a larger command list\.

`RegisteredCommand`&#32;contains&#32;`name`\,&#32;optional&#32;`description`\,&#32;optional&#32;`getArgumentCompletions`\,&#32;and&#32;`handler`\.&#32;Completion values represent the complete argument text\,&#32;not just an appended fragment\.

### `ExtensionContext`

| Members | What to remember |
| --- | --- |
| `ui`\,&#32;`mode`\,&#32;`hasUI` | Mode and actual method support matter\;&#32;`hasUI`&#32;is not “all TUI methods work” |
| `cwd` | Current at context creation\;&#32;do not retain it as a permanent workspace identity |
| `sessionManager` | Read\-oriented session\/journal access |
| `modelRegistry` | Host registry and credential\-resolution access\;&#32;prefer&#32;`models`&#32;for selection queries |
| `model`\,&#32;`models` | Current\/request\-specific model and read\-only query facade |
| `localProtocolOptions` | Calling\-session&#32;`local://`&#32;mapping for compatible bridges |
| `getContextUsage` | Estimated context tokens\/window\/percentage\;&#32;can be undefined |
| `getAsyncJobSnapshot` | Read\-only owner\-scoped job state\;&#32;can be null |
| `isIdle`\,&#32;`hasPendingMessages` | Snapshot predicates\,&#32;not locks |
| `abort` | Request cancellation of the current agent operation |
| `shutdown` | Request host shutdown\;&#32;host\-specific and not an immediate&#32;`process.exit`&#32;guarantee |
| `getSystemPrompt` | Effective prompt blocks\;&#32;treat returned content as sensitive |
| `compact` | Request host maintenance at a safe boundary |
| `memory` | Optional status\/search\/save runtime |
| `setInterval`\,&#32;`setTimeout`\,&#32;`clearTimer` | Managed timer lifecycle |
| `invokeTool` | Optional same\-name native built\-in delegation |
| `isProjectTrusted` | Compatibility method returning true\,&#32;not isolation |

The read\-oriented session manager exposes identity\/cwd\/header\/leaf\/entry\/branch\/tree\/label\/usage queries\.&#32;It also includes artifact\/blob helpers such as&#32;`allocateArtifactPath`\,&#32;`saveArtifact`\,&#32;`getArtifactPath`\,&#32;`putBlob`&#32;and&#32;`putBlobSync`\.

“Readonly” here does not mean every helper is side\-effect\-free\:&#32;artifact\/blob helpers can store data\.&#32;It means extensions are not handed the journal’s general navigation\/mutation API\.

Use\:

- `getBranch()`&#32;for branch\-derived state\;
- `getEntries()`&#32;for deliberately whole\-journal inspection\;
- `getEntry()`&#32;and&#32;`getTree()`&#32;for stable navigation targets\.

Do not mutate returned session records in place\.

### `ExtensionCommandContext`

Commands inherit the general context and additionally expose\:

- `getContextUsage`\;
- `waitForIdle`\;
- `newSession`\;
- `branch`\;
- `navigateTree`\;
- `switchSession`\;
- `reload`\;
- `compact`\.

The duplicated usage\/compaction members remain the same public concepts\.&#32;The navigation methods are command\-only\.

The supplied ACP shutdown action is inert\.&#32;Other hosts request deferred graceful shutdown\.&#32;Do not build essential durable cleanup around an assumption that&#32;`ctx.shutdown()`&#32;terminates every embedding\.

### Tool metadata and provenance

`ToolInfo`&#32;contains\:

- `name`\;
- `description`\;
- `parameters`\;
- optional&#32;`promptGuidelines`\;
- `sourceInfo`\.

`SourceInfo`&#32;contains\:

- `path`\;
- `source`\,&#32;such as builtin\,&#32;SDK\,&#32;MCP or extension\;
- `scope`\:&#32;user\,&#32;project or temporary\;
- `origin`\:&#32;package or top\-level\;
- optional&#32;`baseDir`\.

This metadata answers “where did the tool come from\?” It is not an authorization certificate\.

`ToolRenderResultOptions`&#32;contains&#32;`expanded`\,&#32;`isPartial`\,&#32;`spinnerFrame`\.

`ToolSessionEvent`&#32;contains&#32;`reason`&#32;and&#32;`previousSessionFile`\.

`ToolShellEnvironmentContext`&#32;contains&#32;`command`\,&#32;`cwd`&#32;and&#32;`env`\.

All&#32;`ToolDefinition`&#32;fields are explained in&#32;[Tools\,&#32;interception and native delegation](<https://present-sketch-tp94.here.now/chapters/extensions-tools-interception-and-native-delegation#extensions-tools-interception-and-native-delegation>)\.

### UI inventory index

Every supplied&#32;`ExtensionUIContext`&#32;member belongs to one of these families\:

- Dialogs\:&#32;`timeoutStartsOnPresentation`\,&#32;`select`\,&#32;`confirm`\,&#32;`input`\,&#32;optional&#32;`askDialog`\,&#32;`editor`\.
- Notices and layout\:&#32;`notify`\,&#32;`setStatus`\,&#32;`setWorkingMessage`\,&#32;`setWidget`\,&#32;`setFooter`\,&#32;`setHeader`\,&#32;`setTitle`\.
- Native components\/input\:&#32;`custom`\,&#32;`onTerminalInput`\.
- Composer editing\:&#32;`setEditorText`\,&#32;`pasteToEditor`\,&#32;`getEditorText`\,&#32;`addAutocompleteProvider`\,&#32;`setEditorComponent`\.
- Appearance\:&#32;`theme`\,&#32;`getAllThemes`\,&#32;`getTheme`\,&#32;`setTheme`\,&#32;`getToolsExpanded`\,&#32;`setToolsExpanded`\.

The complete dialog\/select\/ask\/custom option shapes are explained in&#32;[Review Desk’s UI chapter](<https://present-sketch-tp94.here.now/chapters/extensions-review-desk-a-native-panel-and-portable-dialogs#extensions-review-desk-a-native-panel-and-portable-dialogs>)\.&#32;Composer shape fields are explained in&#32;[Editors\,&#32;themes and composer shapes](<https://present-sketch-tp94.here.now/chapters/extensions-editors-themes-and-composer-shapes#extensions-editors-themes-and-composer-shapes>)\.

### Named\-interface coverage index

The supplied inventory’s 27 named interfaces are covered as follows\:

| Family | Interfaces |
| --- | --- |
| Core | `ExtensionAPI`\,&#32;`ExtensionContext`\,&#32;`ExtensionCommandContext`\,&#32;`ExtensionModelQuery` |
| Tools | `ToolDefinition`\,&#32;`ToolRenderResultOptions`\,&#32;`ToolSessionEvent`\,&#32;`ToolShellEnvironmentContext`\,&#32;`ToolInfo`\,&#32;`SourceInfo` |
| Commands | `RegisteredCommand` |
| UI | `ExtensionUIContext`\,&#32;`ExtensionUIDialogOptions`\,&#32;`ExtensionCustomOptions`\,&#32;`ComposerShapeDefinition`\,&#32;`ExtensionUISelectOption` |
| Rich ask | `ExtensionAskDialogOption`\,&#32;`ExtensionAskDialogQuestion`\,&#32;`ExtensionAskDialogResultItem`\,&#32;`ExtensionAskDialogSubmitResult` |
| Maintenance | `CompactOptions` |
| Providers | `ProviderConfig`\,&#32;`ProviderModelConfig` |
| Durable delivery | `ExtensionSessionTarget`\,&#32;`CaptureSessionTargetOptions`\,&#32;`ExtensionDeliveryReceipt`\,&#32;`DeliverExtensionMessageOptions` |

### Reserved shortcuts

The supplied runner rejects these effective extension shortcuts\:

`ctrl+c`\,&#32;`ctrl+d`\,&#32;`ctrl+z`\,&#32;`ctrl+k`\,&#32;`ctrl+p`\,&#32;`ctrl+l`\,&#32;`ctrl+o`\,&#32;`ctrl+t`\,&#32;`ctrl+g`\,&#32;`ctrl+q`\,&#32;`alt+m`\,&#32;`shift+tab`\,&#32;`shift+ctrl+p`\,&#32;`alt+enter`\,&#32;`escape`\,&#32;`enter`\.

Other host keybindings can still conflict\.&#32;Test the actual chord in the actual terminal\.

Built\-in command names are filtered by the host’s reserved command set\.&#32;Do not assume a name is available merely because an older example registered it\.

*Source\,&#32;snapshot 2026\-08\-29\:&#32;`packages/coding-agent/src/extensibility/extensions/types.ts`\,&#32;supplied public inventory\;&#32;`loader.ts`\,&#32;`ConcreteExtensionAPI`\;&#32;`runner.ts`\;&#32;`get-commands-handler.ts`\;&#32;`packages/coding-agent/src/session/session-manager.ts`\,&#32;`ReadonlySessionManager`\.*
