@leanandmean/coding-agent 0.74.1-scramjet.6 → 0.74.1-scramjet.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +32 -0
- package/LICENSE +202 -0
- package/README.md +21 -9
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -0
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js +3 -0
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts +2 -0
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +4 -1
- package/dist/cli/list-models.js.map +1 -1
- package/dist/config.d.ts +9 -2
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +33 -22
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +12 -3
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +64 -38
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +86 -16
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +865 -181
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +21 -17
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +3 -5
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +43 -10
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/exec.d.ts +12 -0
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +74 -28
- package/dist/core/exec.js.map +1 -1
- package/dist/core/export-html/template.js +4 -0
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +7 -0
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +9 -5
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +162 -3
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +110 -6
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/keybindings.d.ts +8 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/model-registry.d.ts +4 -0
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +179 -28
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +24 -6
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/output-throughput-history.d.ts +25 -0
- package/dist/core/output-throughput-history.d.ts.map +1 -0
- package/dist/core/output-throughput-history.js +240 -0
- package/dist/core/output-throughput-history.js.map +1 -0
- package/dist/core/output-throughput.d.ts +43 -0
- package/dist/core/output-throughput.d.ts.map +1 -0
- package/dist/core/output-throughput.js +161 -0
- package/dist/core/output-throughput.js.map +1 -0
- package/dist/core/resource-loader.d.ts +6 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +76 -21
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/scramjet-command-parser.d.ts +4 -0
- package/dist/core/scramjet-command-parser.d.ts.map +1 -1
- package/dist/core/scramjet-command-parser.js +72 -1
- package/dist/core/scramjet-command-parser.js.map +1 -1
- package/dist/core/sdk.d.ts +2 -0
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +61 -10
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +11 -3
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +46 -11
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +18 -6
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +84 -16
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +6 -2
- package/dist/core/skills.js.map +1 -1
- package/dist/core/system-prompt.d.ts +2 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +5 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +4 -3
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +16 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +38 -10
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +4 -2
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js +14 -8
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +3 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +19 -8
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts +4 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js +14 -6
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +5 -3
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +4 -3
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +4 -0
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +22 -18
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +3 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +9 -3
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +3 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +8 -2
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +17 -3
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +87 -16
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +2 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +19 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +129 -36
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +3 -2
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js +2 -2
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +37 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +876 -175
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/spellcheck.d.ts +26 -0
- package/dist/modes/interactive/spellcheck.d.ts.map +1 -0
- package/dist/modes/interactive/spellcheck.js +144 -0
- package/dist/modes/interactive/spellcheck.js.map +1 -0
- package/dist/modes/interactive/theme/{dark.json → pi-dark.json} +3 -2
- package/dist/modes/interactive/theme/{light.json → pi-light.json} +27 -26
- package/dist/modes/interactive/theme/theme-schema.json +6 -1
- package/dist/modes/interactive/theme/theme.d.ts +24 -4
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +123 -22
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +5 -0
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +3 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +6 -1
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +33 -14
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts +1 -0
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.d.ts +6 -0
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +278 -10
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/tools-manager.d.ts +1 -1
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +7 -6
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts +17 -5
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +88 -21
- package/dist/utils/version-check.js.map +1 -1
- package/docs/compaction.md +9 -3
- package/docs/custom-provider.md +13 -4
- package/docs/extensions.md +139 -21
- package/docs/keybindings.md +25 -1
- package/docs/models.md +34 -2
- package/docs/packages.md +2 -0
- package/docs/prompt-templates.md +2 -0
- package/docs/quickstart.md +1 -4
- package/docs/rpc.md +8 -6
- package/docs/sdk.md +22 -3
- package/docs/session-format.md +2 -1
- package/docs/settings.md +13 -3
- package/docs/skills.md +7 -5
- package/docs/terminal-setup.md +79 -2
- package/docs/terminal-verification.md +71 -0
- package/docs/themes.md +63 -10
- package/docs/tui.md +120 -25
- package/docs/usage.md +6 -4
- package/examples/extensions/border-status-editor.ts +2 -3
- package/examples/extensions/doom-overlay/doom-component.ts +3 -3
- package/examples/extensions/mac-system-theme.ts +3 -2
- package/examples/extensions/modal-editor.ts +13 -8
- package/examples/extensions/overlay-qa-tests.ts +22 -9
- package/examples/extensions/overlay-test.ts +5 -3
- package/examples/extensions/snake.ts +3 -1
- package/examples/extensions/space-invaders.ts +6 -3
- package/examples/extensions/subagent/index.ts +20 -17
- package/package.json +69 -58
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* - Interact with the user via UI primitives
|
|
9
9
|
*/
|
|
10
10
|
import type { AgentMessage, AgentToolResult, AgentToolUpdateCallback, ThinkingLevel, ToolExecutionMode } from "@leanandmean/agent";
|
|
11
|
-
import type { Api, AssistantMessageEvent, AssistantMessageEventStream, Context, ImageContent, Model, OAuthCredentials, OAuthLoginCallbacks, SimpleStreamOptions, SystemPromptSection, TextContent, ToolResultMessage } from "@leanandmean/ai";
|
|
11
|
+
import type { Api, AssistantMessageEvent, AssistantMessageEventStream, Context, ImageContent, Model, OAuthCredentials, OAuthLoginCallbacks, ProviderRequestToolInventory, SimpleStreamOptions, SystemPromptSection, TextContent, ToolResultMessage } from "@leanandmean/ai";
|
|
12
12
|
import type { AutocompleteItem, AutocompleteProvider, Component, EditorComponent, EditorTheme, KeyId, OverlayHandle, OverlayOptions, TUI } from "@leanandmean/tui";
|
|
13
13
|
import type { Static, TSchema } from "typebox";
|
|
14
14
|
import type { Theme } from "../../modes/interactive/theme/theme.js";
|
|
@@ -112,6 +112,8 @@ export interface ExtensionUIContext {
|
|
|
112
112
|
}) | undefined): void;
|
|
113
113
|
/** Set the terminal window/tab title. */
|
|
114
114
|
setTitle(title: string): void;
|
|
115
|
+
/** Register a callback that supplies the terminal title. When set, updateTerminalTitle() delegates to this provider; if the provider returns undefined, the default title is used. Pass undefined to clear. */
|
|
116
|
+
setTitleProvider(provider: (() => string | undefined) | undefined): void;
|
|
115
117
|
/** Show a custom component with keyboard focus. */
|
|
116
118
|
custom<T>(factory: (tui: TUI, theme: Theme, keybindings: KeybindingsManager, done: (result: T) => void) => (Component & {
|
|
117
119
|
dispose?(): void;
|
|
@@ -119,10 +121,17 @@ export interface ExtensionUIContext {
|
|
|
119
121
|
dispose?(): void;
|
|
120
122
|
}>, options?: {
|
|
121
123
|
overlay?: boolean;
|
|
124
|
+
/** Install visual context at a pending tool row and flush before focusing; retained mode also guards visibility. Not persisted. */
|
|
125
|
+
toolAttachedContext?: {
|
|
126
|
+
toolCallId: string;
|
|
127
|
+
render: (tui: TUI, theme: Theme) => Component;
|
|
128
|
+
};
|
|
122
129
|
/** Overlay positioning/sizing options. Can be static or a function for dynamic updates. */
|
|
123
130
|
overlayOptions?: OverlayOptions | (() => OverlayOptions);
|
|
124
131
|
/** Called with the overlay handle after the overlay is shown. Use to control visibility. */
|
|
125
132
|
onHandle?: (handle: OverlayHandle) => void;
|
|
133
|
+
/** Ordinary input-slot allocation before rendering; undefined on initialization/release. Not a visibility guarantee. */
|
|
134
|
+
onAvailableHeight?: (rows: number | undefined) => void;
|
|
126
135
|
}): Promise<T>;
|
|
127
136
|
/** Paste text into the editor, triggering paste handling (collapse for large content). */
|
|
128
137
|
pasteToEditor(text: string): void;
|
|
@@ -192,8 +201,9 @@ export interface ExtensionUIContext {
|
|
|
192
201
|
export interface ContextUsage {
|
|
193
202
|
/** Estimated context tokens, or null if unknown (e.g. right after compaction, before next LLM response). */
|
|
194
203
|
tokens: number | null;
|
|
204
|
+
/** Maximum supported total context in tokens. */
|
|
195
205
|
contextWindow: number;
|
|
196
|
-
/** Context usage as percentage of context
|
|
206
|
+
/** Context usage as percentage of total context, or null if tokens is unknown. */
|
|
197
207
|
percent: number | null;
|
|
198
208
|
}
|
|
199
209
|
export interface CompactOptions {
|
|
@@ -221,7 +231,7 @@ export interface DispatchUserInputOptions {
|
|
|
221
231
|
export interface ExtensionContext {
|
|
222
232
|
/** UI methods for user interaction */
|
|
223
233
|
ui: ExtensionUIContext;
|
|
224
|
-
/** Whether UI is available (
|
|
234
|
+
/** Whether some UI transport is available; individual methods may still be unsupported (for example custom() in RPC). */
|
|
225
235
|
hasUI: boolean;
|
|
226
236
|
/** Current working directory */
|
|
227
237
|
cwd: string;
|
|
@@ -231,6 +241,11 @@ export interface ExtensionContext {
|
|
|
231
241
|
modelRegistry: ModelRegistry;
|
|
232
242
|
/** Current model (may be undefined) */
|
|
233
243
|
model: Model<any> | undefined;
|
|
244
|
+
/** Scoped models when a model scope is active (via --models or /scoped-models), empty when no scope is configured */
|
|
245
|
+
scopedModels: ReadonlyArray<{
|
|
246
|
+
model: Model<any>;
|
|
247
|
+
thinkingLevel?: ThinkingLevel;
|
|
248
|
+
}>;
|
|
234
249
|
/** Whether the agent is idle (not streaming) */
|
|
235
250
|
isIdle(): boolean;
|
|
236
251
|
/** The current abort signal, or undefined when the agent is not streaming. */
|
|
@@ -328,7 +343,7 @@ export interface ToolRenderContext<TState = any, TArgs = any> {
|
|
|
328
343
|
args: TArgs;
|
|
329
344
|
/** Unique id for this tool execution. Stable across call/result renders for the same tool call. */
|
|
330
345
|
toolCallId: string;
|
|
331
|
-
/** Invalidate
|
|
346
|
+
/** Invalidate this tool execution component. Stale lifecycle callbacks are ignored. */
|
|
332
347
|
invalidate: () => void;
|
|
333
348
|
/** Previously returned component for this render slot, if any. */
|
|
334
349
|
lastComponent: Component | undefined;
|
|
@@ -367,6 +382,17 @@ export interface ToolDefinition<TParams extends TSchema = TSchema, TDetails = un
|
|
|
367
382
|
parameters: TParams;
|
|
368
383
|
/** Controls whether ToolExecutionComponent renders the standard colored shell or the tool renders its own framing. */
|
|
369
384
|
renderShell?: "default" | "self";
|
|
385
|
+
/**
|
|
386
|
+
* Controls whether the tool can be auto-activated into the LLM-visible tool set.
|
|
387
|
+
*
|
|
388
|
+
* - `"default"` (or omitted): the tool participates in normal activation and can be sent to the
|
|
389
|
+
* provider and called by the model.
|
|
390
|
+
* - `"harness-only"`: the tool is never placed in `agent.state.tools` and is therefore never
|
|
391
|
+
* provider-visible or model-callable. It stays registered and resolvable (via the full tool
|
|
392
|
+
* registry) so the harness can execute it through `pi.invokeHarnessTool`. This is the
|
|
393
|
+
* structural guarantee that a system-generated tool cannot masquerade as a model-callable one.
|
|
394
|
+
*/
|
|
395
|
+
activation?: "default" | "harness-only";
|
|
370
396
|
/** Optional compatibility shim to prepare raw tool call arguments before schema validation. Must return an object conforming to TParams. */
|
|
371
397
|
prepareArguments?: (args: unknown) => Static<TParams>;
|
|
372
398
|
/**
|
|
@@ -480,11 +506,34 @@ export interface ContextEvent {
|
|
|
480
506
|
type: "context";
|
|
481
507
|
messages: AgentMessage[];
|
|
482
508
|
}
|
|
509
|
+
export type DeepReadonly<T> = T extends (...args: any[]) => any ? T : T extends object ? {
|
|
510
|
+
readonly [K in keyof T]: DeepReadonly<T[K]>;
|
|
511
|
+
} : T;
|
|
512
|
+
export type RoutedModelSnapshot = DeepReadonly<Model<any>>;
|
|
513
|
+
export interface RoutedModelIdentitySnapshot {
|
|
514
|
+
readonly provider: Model<any>["provider"];
|
|
515
|
+
readonly id: Model<any>["id"];
|
|
516
|
+
readonly api: Api;
|
|
517
|
+
}
|
|
518
|
+
/** Fired after context transformation and before provider serialization. Can replace the request-local system prompt. */
|
|
519
|
+
export interface BeforeProviderCallEvent {
|
|
520
|
+
type: "before_provider_call";
|
|
521
|
+
model: RoutedModelSnapshot;
|
|
522
|
+
systemPrompt: Context["systemPrompt"];
|
|
523
|
+
}
|
|
483
524
|
/** Fired before a provider request is sent. Can replace the payload. */
|
|
484
525
|
export interface BeforeProviderRequestEvent {
|
|
485
526
|
type: "before_provider_request";
|
|
527
|
+
model: RoutedModelSnapshot;
|
|
486
528
|
payload: unknown;
|
|
487
529
|
}
|
|
530
|
+
/** Fired after all provider payload rewrites and before transport. Observation only. */
|
|
531
|
+
export interface ProviderRequestToolInventoryEvent {
|
|
532
|
+
type: "provider_request_tool_inventory";
|
|
533
|
+
readonly model: RoutedModelIdentitySnapshot;
|
|
534
|
+
readonly requestContextToolNames: readonly string[];
|
|
535
|
+
readonly inventory: DeepReadonly<ProviderRequestToolInventory>;
|
|
536
|
+
}
|
|
488
537
|
/** Fired after a provider response is received and before the response stream is consumed. */
|
|
489
538
|
export interface AfterProviderResponseEvent {
|
|
490
539
|
type: "after_provider_response";
|
|
@@ -602,6 +651,16 @@ export interface InputEvent {
|
|
|
602
651
|
/** Where the input came from */
|
|
603
652
|
source: InputSource;
|
|
604
653
|
}
|
|
654
|
+
export interface InputSessionEntry {
|
|
655
|
+
customType: string;
|
|
656
|
+
/**
|
|
657
|
+
* Extension-defined payload. Must be JSON-serializable: it is persisted with
|
|
658
|
+
* JSON.stringify and restored with JSON.parse, so non-JSON values (Date, Map,
|
|
659
|
+
* class instances) round-trip lossily and `undefined` properties are dropped.
|
|
660
|
+
* The requirement is enforced only at persist time, not by this type.
|
|
661
|
+
*/
|
|
662
|
+
data?: unknown;
|
|
663
|
+
}
|
|
605
664
|
/** Result from input event handler */
|
|
606
665
|
export type InputEventResult = {
|
|
607
666
|
action: "continue";
|
|
@@ -609,6 +668,8 @@ export type InputEventResult = {
|
|
|
609
668
|
action: "transform";
|
|
610
669
|
text: string;
|
|
611
670
|
images?: ImageContent[];
|
|
671
|
+
sessionEntries?: InputSessionEntry[];
|
|
672
|
+
onAccepted?: () => void;
|
|
612
673
|
} | {
|
|
613
674
|
action: "handled";
|
|
614
675
|
};
|
|
@@ -735,10 +796,13 @@ export declare function isToolCallEventType<TName extends string, TInput extends
|
|
|
735
796
|
input: TInput;
|
|
736
797
|
};
|
|
737
798
|
/** Union of all event types */
|
|
738
|
-
export type ExtensionEvent = ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeProviderRequestEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ModelSelectEvent | ThinkingLevelSelectEvent | UserBashEvent | InputEvent | ToolCallEvent | ToolResultEvent;
|
|
799
|
+
export type ExtensionEvent = ResourcesDiscoverEvent | SessionEvent | ContextEvent | BeforeProviderCallEvent | BeforeProviderRequestEvent | ProviderRequestToolInventoryEvent | AfterProviderResponseEvent | BeforeAgentStartEvent | AgentStartEvent | AgentEndEvent | TurnStartEvent | TurnEndEvent | MessageStartEvent | MessageUpdateEvent | MessageEndEvent | ToolExecutionStartEvent | ToolExecutionUpdateEvent | ToolExecutionEndEvent | ModelSelectEvent | ThinkingLevelSelectEvent | UserBashEvent | InputEvent | ToolCallEvent | ToolResultEvent;
|
|
739
800
|
export interface ContextEventResult {
|
|
740
801
|
messages?: AgentMessage[];
|
|
741
802
|
}
|
|
803
|
+
export interface BeforeProviderCallEventResult {
|
|
804
|
+
systemPrompt?: Context["systemPrompt"];
|
|
805
|
+
}
|
|
742
806
|
export type BeforeProviderRequestEventResult = unknown;
|
|
743
807
|
export interface ToolCallEventResult {
|
|
744
808
|
/** Block tool execution. To modify arguments, mutate `event.input` in place instead. */
|
|
@@ -822,7 +886,9 @@ export interface ExtensionAPI {
|
|
|
822
886
|
on(event: "session_before_tree", handler: ExtensionHandler<SessionBeforeTreeEvent, SessionBeforeTreeResult>): void;
|
|
823
887
|
on(event: "session_tree", handler: ExtensionHandler<SessionTreeEvent>): void;
|
|
824
888
|
on(event: "context", handler: ExtensionHandler<ContextEvent, ContextEventResult>): void;
|
|
889
|
+
on(event: "before_provider_call", handler: ExtensionHandler<BeforeProviderCallEvent, BeforeProviderCallEventResult>): void;
|
|
825
890
|
on(event: "before_provider_request", handler: ExtensionHandler<BeforeProviderRequestEvent, BeforeProviderRequestEventResult>): void;
|
|
891
|
+
on(event: "provider_request_tool_inventory", handler: ExtensionHandler<ProviderRequestToolInventoryEvent>): void;
|
|
826
892
|
on(event: "after_provider_response", handler: ExtensionHandler<AfterProviderResponseEvent>): void;
|
|
827
893
|
on(event: "before_agent_start", handler: ExtensionHandler<BeforeAgentStartEvent, BeforeAgentStartEventResult>): void;
|
|
828
894
|
on(event: "agent_start", handler: ExtensionHandler<AgentStartEvent>): void;
|
|
@@ -888,6 +954,28 @@ export interface ExtensionAPI {
|
|
|
888
954
|
getAllTools(): ToolInfo[];
|
|
889
955
|
/** Set the active tools by name. */
|
|
890
956
|
setActiveTools(toolNames: string[]): void;
|
|
957
|
+
/**
|
|
958
|
+
* Execute a registered tool as a harness-originated call, without the model requesting it.
|
|
959
|
+
*
|
|
960
|
+
* The tool is resolved from the full tool registry (so `"harness-only"` tools that are never
|
|
961
|
+
* provider-visible can still be executed) and run through the real execution pipeline: it
|
|
962
|
+
* produces the same live `tool_execution_*`/message events, persisted session entries, and
|
|
963
|
+
* `tool_call`/`tool_result` extension hooks as a normal tool call, but emits no run/turn
|
|
964
|
+
* framing. When idle the call executes immediately; when a run is active it is queued and
|
|
965
|
+
* drained before the next intra-run LLM call.
|
|
966
|
+
*
|
|
967
|
+
* The returned promise resolves only after the resulting tool-result message has been persisted
|
|
968
|
+
* to the session (#341) — a strictly stronger guarantee than Agent-core execution alone — so a
|
|
969
|
+
* consumer that must not replace or tear down the session until the record row exists can safely
|
|
970
|
+
* `await` it. It rejects if no tool with `name` is registered, if a matching event fails to
|
|
971
|
+
* process/persist, if the session is disposed before it settles or is called after disposal, or if
|
|
972
|
+
* an explicit {@link InvokeHarnessToolOptions.toolCallId} is malformed or already pending.
|
|
973
|
+
* **Rejection means the pipeline
|
|
974
|
+
* did not complete — it does not prove the artifact is absent** (state and persistence may have
|
|
975
|
+
* partially completed), so do not blindly retry. A tool's own `execute()` error resolves normally
|
|
976
|
+
* as an `isError` result.
|
|
977
|
+
*/
|
|
978
|
+
invokeHarnessTool(name: string, args: unknown, options?: InvokeHarnessToolOptions): Promise<void>;
|
|
891
979
|
/** Get available slash commands in the current session. */
|
|
892
980
|
getCommands(): SlashCommandInfo[];
|
|
893
981
|
/** Set the current model. Returns false if no API key available. */
|
|
@@ -1028,8 +1116,10 @@ export interface ProviderModelConfig {
|
|
|
1028
1116
|
cacheRead: number;
|
|
1029
1117
|
cacheWrite: number;
|
|
1030
1118
|
};
|
|
1031
|
-
/** Maximum
|
|
1119
|
+
/** Maximum supported total context in tokens. */
|
|
1032
1120
|
contextWindow: number;
|
|
1121
|
+
maxInputTokens?: number;
|
|
1122
|
+
requestLimits?: Model<Api>["requestLimits"];
|
|
1033
1123
|
/** Maximum output tokens. */
|
|
1034
1124
|
maxTokens: number;
|
|
1035
1125
|
/** Custom headers for this model. */
|
|
@@ -1078,6 +1168,15 @@ export type GetCommandsHandler = () => SlashCommandInfo[];
|
|
|
1078
1168
|
export type SetActiveToolsHandler = (toolNames: string[]) => void;
|
|
1079
1169
|
export type RefreshToolsHandler = () => void;
|
|
1080
1170
|
export type SetModelHandler = (model: Model<any>) => Promise<boolean>;
|
|
1171
|
+
/** Options for {@link ExtensionAPI.invokeHarnessTool}. */
|
|
1172
|
+
export interface InvokeHarnessToolOptions {
|
|
1173
|
+
/**
|
|
1174
|
+
* Explicit tool-call id — must be provider-safe (1-64 characters of `[a-zA-Z0-9_-]`); an invalid
|
|
1175
|
+
* id is rejected. Defaults to a provider-safe generated id when omitted.
|
|
1176
|
+
*/
|
|
1177
|
+
toolCallId?: string;
|
|
1178
|
+
}
|
|
1179
|
+
export type InvokeHarnessToolHandler = (name: string, args: unknown, options?: InvokeHarnessToolOptions) => Promise<void>;
|
|
1081
1180
|
export type GetThinkingLevelHandler = () => ThinkingLevel;
|
|
1082
1181
|
export type SetThinkingLevelHandler = (level: ThinkingLevel) => void;
|
|
1083
1182
|
export type SetLabelHandler = (entryId: string, label: string | undefined) => void;
|
|
@@ -1120,6 +1219,7 @@ export interface ExtensionActions {
|
|
|
1120
1219
|
getActiveTools: GetActiveToolsHandler;
|
|
1121
1220
|
getAllTools: GetAllToolsHandler;
|
|
1122
1221
|
setActiveTools: SetActiveToolsHandler;
|
|
1222
|
+
invokeHarnessTool: InvokeHarnessToolHandler;
|
|
1123
1223
|
refreshTools: RefreshToolsHandler;
|
|
1124
1224
|
getCommands: GetCommandsHandler;
|
|
1125
1225
|
setModel: SetModelHandler;
|
|
@@ -1132,6 +1232,10 @@ export interface ExtensionActions {
|
|
|
1132
1232
|
*/
|
|
1133
1233
|
export interface ExtensionContextActions {
|
|
1134
1234
|
getModel: () => Model<any> | undefined;
|
|
1235
|
+
getScopedModels: () => ReadonlyArray<{
|
|
1236
|
+
model: Model<any>;
|
|
1237
|
+
thinkingLevel?: ThinkingLevel;
|
|
1238
|
+
}>;
|
|
1135
1239
|
isIdle: () => boolean;
|
|
1136
1240
|
getSignal: () => AbortSignal | undefined;
|
|
1137
1241
|
abort: () => void;
|