@astralyn/pi 0.85.3 → 0.86.0
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 +35 -0
- package/dist/bundle/chunks/anthropic-messages-R2LYJUDD.js +6 -0
- package/dist/bundle/chunks/azure-openai-responses-HS35BQV6.js +2 -0
- package/dist/bundle/chunks/bedrock-converse-stream.js +36 -32
- package/dist/bundle/chunks/{chunk-S2DJQQI2.js → chunk-2IO5GDBS.js} +10 -1
- package/dist/bundle/chunks/{chunk-7LO5Z4WE.js → chunk-I5IVW2WS.js} +1 -1
- package/dist/bundle/chunks/chunk-JI4WGISU.js +2 -0
- package/dist/bundle/chunks/chunk-LPQCB2VJ.js +44 -0
- package/dist/bundle/chunks/chunk-M2YWW37K.js +2 -0
- package/dist/bundle/chunks/{chunk-LB4P77SH.js → chunk-MSHHFVMD.js} +776 -762
- package/dist/bundle/chunks/chunk-NW5FIDD7.js +11 -0
- package/dist/bundle/chunks/chunk-PJVFYVHE.js +42 -0
- package/dist/bundle/chunks/github-copilot.js +1 -1
- package/dist/bundle/chunks/google-generative-ai-NOVAJBFC.js +2 -0
- package/dist/bundle/chunks/google-vertex-4VHCZJV5.js +2 -0
- package/dist/bundle/chunks/https-proxy-agent-JOOPB4RE.js +16 -0
- package/dist/bundle/chunks/jiti-loader-BFSSLU7G.js +21 -0
- package/dist/bundle/chunks/jiti-static-loader-CLT3YR3B.js +2 -0
- package/dist/bundle/chunks/mistral-conversations-WC6A2WCJ.js +5 -0
- package/dist/bundle/chunks/{node-G4XOIDPH.js → node-CXWYTK2I.js} +1 -1
- package/dist/bundle/chunks/openai-codex-responses-XCDG75W2.js +10 -0
- package/dist/bundle/chunks/openai-completions-WJIA7NEB.js +7 -0
- package/dist/bundle/chunks/openai-responses-UT6XFKC7.js +2 -0
- package/dist/bundle/chunks/{pi-messages-PE6B42TG.js → pi-messages-MQMPIPNC.js} +1 -1
- package/dist/bundle/chunks/virtual-modules-B4BILEXT.js +2 -0
- package/dist/bundle/cli.js +1 -1
- package/dist/bundle/index.js +1 -1
- package/dist/bundle/rpc-entry.js +1 -1
- package/dist/cli/session-picker.d.ts +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +13 -11
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +56 -14
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +305 -176
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bug-report-upload.d.ts +12 -0
- package/dist/core/bug-report-upload.d.ts.map +1 -0
- package/dist/core/bug-report-upload.js +22 -0
- package/dist/core/bug-report-upload.js.map +1 -0
- package/dist/core/bug-report.d.ts +176 -0
- package/dist/core/bug-report.d.ts.map +1 -0
- package/dist/core/bug-report.js +292 -0
- package/dist/core/bug-report.js.map +1 -0
- package/dist/core/cache-stats.d.ts.map +1 -1
- package/dist/core/cache-stats.js +12 -1
- package/dist/core/cache-stats.js.map +1 -1
- package/dist/core/cache-warmer.d.ts +102 -0
- package/dist/core/cache-warmer.d.ts.map +1 -0
- package/dist/core/cache-warmer.js +333 -0
- package/dist/core/cache-warmer.js.map +1 -0
- package/dist/core/compaction/branch-summarization.js +2 -2
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +14 -9
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +30 -23
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/settings.d.ts +17 -20
- package/dist/core/compaction/settings.d.ts.map +1 -1
- package/dist/core/compaction/settings.js +19 -26
- package/dist/core/compaction/settings.js.map +1 -1
- package/dist/core/context-snapshot.d.ts +16 -5
- package/dist/core/context-snapshot.d.ts.map +1 -1
- package/dist/core/context-snapshot.js +20 -10
- package/dist/core/context-snapshot.js.map +1 -1
- package/dist/core/crash-log.d.ts +22 -0
- package/dist/core/crash-log.d.ts.map +1 -0
- package/dist/core/crash-log.js +71 -0
- package/dist/core/crash-log.js.map +1 -0
- package/dist/core/experimental.d.ts +0 -4
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js +0 -4
- package/dist/core/experimental.js.map +1 -1
- 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/jiti-loader.d.ts +2 -0
- package/dist/core/extensions/jiti-loader.d.ts.map +1 -0
- package/dist/core/extensions/jiti-loader.js +4 -0
- package/dist/core/extensions/jiti-loader.js.map +1 -0
- package/dist/core/extensions/jiti-static-loader.d.ts +2 -0
- package/dist/core/extensions/jiti-static-loader.d.ts.map +1 -0
- package/dist/core/extensions/jiti-static-loader.js +4 -0
- package/dist/core/extensions/jiti-static-loader.js.map +1 -0
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +38 -51
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +10 -7
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +85 -67
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +60 -50
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/virtual-modules.d.ts +3 -0
- package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
- package/dist/core/extensions/virtual-modules.js +39 -0
- package/dist/core/extensions/virtual-modules.js.map +1 -0
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js +1 -20
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/keybindings.d.ts +1 -1
- package/dist/core/keybindings.js +1 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +1 -0
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-config.d.ts +101 -20
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +25 -18
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts +5 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +8 -0
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +5 -3
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/provider-composer.d.ts +3 -2
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +2 -0
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/radius.d.ts +3 -0
- package/dist/core/radius.d.ts.map +1 -1
- package/dist/core/radius.js +6 -0
- package/dist/core/radius.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +46 -18
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-export.d.ts +6 -2
- package/dist/core/session-export.d.ts.map +1 -1
- package/dist/core/session-export.js +14 -13
- package/dist/core/session-export.js.map +1 -1
- package/dist/core/session-manager.d.ts +29 -6
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +159 -96
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +31 -4
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +65 -8
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts +49 -6
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +121 -92
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +2 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +6 -3
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +1 -2
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +1 -2
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/shell-execution.js +2 -2
- package/dist/core/tools/shell-execution.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +1 -2
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/usage-totals.d.ts +1 -1
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js +4 -1
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/extensions/background/schema.d.ts +1 -1
- package/dist/extensions/btw/agent.d.ts.map +1 -1
- package/dist/extensions/btw/agent.js +3 -2
- package/dist/extensions/btw/agent.js.map +1 -1
- package/dist/extensions/llama/client.d.ts +2 -0
- package/dist/extensions/llama/client.d.ts.map +1 -1
- package/dist/extensions/llama/client.js +7 -3
- package/dist/extensions/llama/client.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +20 -5
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/provider/compat-fields.d.ts.map +1 -1
- package/dist/extensions/provider/compat-fields.js +5 -2
- package/dist/extensions/provider/compat-fields.js.map +1 -1
- package/dist/extensions/provider/ui/app.js +2 -2
- package/dist/extensions/provider/ui/app.js.map +1 -1
- package/dist/extensions/todo/schema.d.ts +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +13 -9
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +2 -2
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/bug-report.d.ts +14 -0
- package/dist/modes/interactive/bug-report.d.ts.map +1 -0
- package/dist/modes/interactive/bug-report.js +209 -0
- package/dist/modes/interactive/bug-report.js.map +1 -0
- package/dist/modes/interactive/chat-viewport.js +1 -1
- package/dist/modes/interactive/chat-viewport.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js +0 -5
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +0 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +2 -3
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +12 -5
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +12 -5
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts +6 -13
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js +15 -51
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +3 -3
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +2 -0
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +6 -0
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +1 -2
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +4 -2
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts +5 -8
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +72 -95
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +11 -0
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +11 -4
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts +2 -2
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +7 -7
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/components/tool-chrome.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-chrome.js +4 -1
- package/dist/modes/interactive/components/tool-chrome.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +4 -3
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +1 -10
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +4 -51
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +13 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +227 -91
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/session-share.d.ts +2 -0
- package/dist/modes/interactive/session-share.d.ts.map +1 -1
- package/dist/modes/interactive/session-share.js +8 -4
- package/dist/modes/interactive/session-share.js.map +1 -1
- package/dist/modes/interactive/tui-renderer.js +2 -2
- package/dist/modes/interactive/tui-renderer.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +2 -2
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/utils/clipboard-command.d.ts +7 -0
- package/dist/utils/clipboard-command.d.ts.map +1 -0
- package/dist/utils/clipboard-command.js +45 -0
- package/dist/utils/clipboard-command.js.map +1 -0
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +52 -69
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +61 -125
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/zip.d.ts +7 -0
- package/dist/utils/zip.d.ts.map +1 -0
- package/dist/utils/zip.js +60 -0
- package/dist/utils/zip.js.map +1 -0
- package/docs/compaction.md +32 -11
- package/docs/custom-provider.md +19 -8
- package/docs/environment-variables.md +1 -0
- package/docs/extensions.md +50 -34
- package/docs/models.md +38 -3
- package/docs/providers.md +1 -1
- package/docs/sdk.md +4 -2
- package/docs/session-format.md +63 -24
- package/docs/sessions.md +28 -1
- package/docs/settings.md +58 -4
- package/docs/termux.md +0 -1
- package/docs/tui.md +2 -0
- package/docs/usage.md +1 -0
- package/examples/extensions/README.md +0 -1
- package/examples/extensions/custom-provider-anthropic/index.ts +18 -12
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -2
- package/examples/extensions/prompt-customizer.ts +19 -67
- package/npm-shrinkwrap.json +275 -1028
- package/package.json +17 -23
- package/dist/bundle/chunks/anthropic-messages-IHRRITCV.js +0 -6
- package/dist/bundle/chunks/azure-openai-responses-QXBIDYXO.js +0 -2
- package/dist/bundle/chunks/chunk-JSJPY26N.js +0 -2
- package/dist/bundle/chunks/chunk-KI6LC764.js +0 -42
- package/dist/bundle/chunks/chunk-OWESLY5T.js +0 -11
- package/dist/bundle/chunks/chunk-RRBI7OUG.js +0 -50
- package/dist/bundle/chunks/chunk-YZJWMPUI.js +0 -2
- package/dist/bundle/chunks/google-generative-ai-NBOR3IQR.js +0 -2
- package/dist/bundle/chunks/google-vertex-VTHX3SUB.js +0 -2
- package/dist/bundle/chunks/https-proxy-agent-2VXB7436.js +0 -13
- package/dist/bundle/chunks/mistral-conversations-NO4ANAA5.js +0 -5
- package/dist/bundle/chunks/openai-codex-responses-5S3T3HMA.js +0 -10
- package/dist/bundle/chunks/openai-completions-CXRRTRWE.js +0 -7
- package/dist/bundle/chunks/openai-responses-CV3MH6VP.js +0 -2
- package/dist/utils/clipboard-native.d.ts +0 -11
- package/dist/utils/clipboard-native.d.ts.map +0 -1
- package/dist/utils/clipboard-native.js +0 -20
- package/dist/utils/clipboard-native.js.map +0 -1
- package/examples/extensions/kimi-deferred-tools.ts +0 -61
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { theme } from "../../modes/interactive/theme/theme.js";
|
|
5
5
|
import { BackgroundService } from "../background/service.js";
|
|
6
|
+
import { buildSystemPrompt, normalizeBuildSystemPromptOptions, } from "../system-prompt.js";
|
|
6
7
|
// Extension shortcuts compete with canonical keybinding ids from keybindings.json.
|
|
7
8
|
// Only editor-global shortcuts are reserved here. Picker-specific bindings are not.
|
|
8
9
|
const RESERVED_KEYBINDINGS_FOR_EXTENSION_CONFLICTS = [
|
|
@@ -48,6 +49,31 @@ const buildBuiltinKeybindings = (resolvedKeybindings) => {
|
|
|
48
49
|
}
|
|
49
50
|
return builtinKeybindings;
|
|
50
51
|
};
|
|
52
|
+
function isUserBashEventResult(value) {
|
|
53
|
+
if (typeof value !== "object" || value === null)
|
|
54
|
+
return false;
|
|
55
|
+
const candidate = value;
|
|
56
|
+
const hasOperations = candidate.operations !== undefined;
|
|
57
|
+
const hasResult = candidate.result !== undefined;
|
|
58
|
+
if (hasOperations === hasResult)
|
|
59
|
+
return false;
|
|
60
|
+
if (hasOperations) {
|
|
61
|
+
const operations = candidate.operations;
|
|
62
|
+
if (typeof operations !== "object" || operations === null)
|
|
63
|
+
return false;
|
|
64
|
+
return typeof operations.exec === "function";
|
|
65
|
+
}
|
|
66
|
+
const result = candidate.result;
|
|
67
|
+
if (typeof result !== "object" || result === null)
|
|
68
|
+
return false;
|
|
69
|
+
const resultRecord = result;
|
|
70
|
+
return (typeof resultRecord.output === "string" &&
|
|
71
|
+
"exitCode" in resultRecord &&
|
|
72
|
+
(resultRecord.exitCode === undefined || typeof resultRecord.exitCode === "number") &&
|
|
73
|
+
typeof resultRecord.cancelled === "boolean" &&
|
|
74
|
+
typeof resultRecord.truncated === "boolean" &&
|
|
75
|
+
(resultRecord.fullOutputPath === undefined || typeof resultRecord.fullOutputPath === "string"));
|
|
76
|
+
}
|
|
51
77
|
/**
|
|
52
78
|
* Helper function to emit session_shutdown event to extensions.
|
|
53
79
|
* Returns true if the event was emitted, false if there were no handlers.
|
|
@@ -59,14 +85,14 @@ export async function emitSessionShutdownEvent(extensionRunner, event) {
|
|
|
59
85
|
}
|
|
60
86
|
return false;
|
|
61
87
|
}
|
|
88
|
+
function snapshotEventHandlers(extensions, event) {
|
|
89
|
+
return extensions.map((ext) => ({ ext, handlers: ext.handlers.get(event)?.slice() ?? [] }));
|
|
90
|
+
}
|
|
62
91
|
export async function emitProjectTrustEvent(extensionsResult, event, ctx) {
|
|
63
92
|
const errors = [];
|
|
64
|
-
for (const ext of extensionsResult.extensions) {
|
|
93
|
+
for (const { ext, handlers } of snapshotEventHandlers(extensionsResult.extensions, "project_trust")) {
|
|
65
94
|
// A single extension may register multiple handlers for the same event.
|
|
66
95
|
// The first project_trust handler that returns yes/no wins; undecided falls through.
|
|
67
|
-
const handlers = ext.handlers.get("project_trust");
|
|
68
|
-
if (!handlers || handlers.length === 0)
|
|
69
|
-
continue;
|
|
70
96
|
for (const handler of handlers) {
|
|
71
97
|
try {
|
|
72
98
|
const handlerResult = (await handler(event, ctx));
|
|
@@ -141,7 +167,7 @@ export class ExtensionRunner {
|
|
|
141
167
|
};
|
|
142
168
|
this.compactFn = () => { };
|
|
143
169
|
this.getSystemPromptFn = () => "";
|
|
144
|
-
this.getSystemPromptOptionsFn = () => ({ cwd: this.cwd });
|
|
170
|
+
this.getSystemPromptOptionsFn = () => normalizeBuildSystemPromptOptions({ cwd: this.cwd });
|
|
145
171
|
this.newSessionHandler = async () => ({ cancelled: false });
|
|
146
172
|
this.forkHandler = async () => ({ cancelled: false });
|
|
147
173
|
this.navigateTreeHandler = async () => ({ cancelled: false });
|
|
@@ -189,7 +215,8 @@ export class ExtensionRunner {
|
|
|
189
215
|
this.getContextSnapshotFn = contextActions.getContextSnapshot;
|
|
190
216
|
this.compactFn = contextActions.compact;
|
|
191
217
|
this.getSystemPromptFn = contextActions.getSystemPrompt;
|
|
192
|
-
this.getSystemPromptOptionsFn =
|
|
218
|
+
this.getSystemPromptOptionsFn =
|
|
219
|
+
contextActions.getSystemPromptOptions ?? (() => normalizeBuildSystemPromptOptions({ cwd: this.cwd }));
|
|
193
220
|
// Flush provider registrations queued during extension loading
|
|
194
221
|
for (const { name, config, extensionPath } of this.runtime.pendingProviderRegistrations) {
|
|
195
222
|
try {
|
|
@@ -640,10 +667,7 @@ export class ExtensionRunner {
|
|
|
640
667
|
async emit(event) {
|
|
641
668
|
const ctx = this.createContext();
|
|
642
669
|
let result;
|
|
643
|
-
for (const ext of this.extensions) {
|
|
644
|
-
const handlers = ext.handlers.get(event.type);
|
|
645
|
-
if (!handlers || handlers.length === 0)
|
|
646
|
-
continue;
|
|
670
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, event.type)) {
|
|
647
671
|
for (const handler of handlers) {
|
|
648
672
|
try {
|
|
649
673
|
const handlerResult = await handler(event, ctx);
|
|
@@ -668,14 +692,34 @@ export class ExtensionRunner {
|
|
|
668
692
|
}
|
|
669
693
|
return result;
|
|
670
694
|
}
|
|
695
|
+
/** Returns the event's own action unless a handler overrides it; the last override wins. */
|
|
696
|
+
async emitCacheWarmingDecision(event) {
|
|
697
|
+
const ctx = this.createContext();
|
|
698
|
+
let action = event.action;
|
|
699
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, event.type)) {
|
|
700
|
+
for (const handler of handlers) {
|
|
701
|
+
try {
|
|
702
|
+
const result = (await handler(event, ctx));
|
|
703
|
+
if (result?.action !== undefined)
|
|
704
|
+
action = result.action;
|
|
705
|
+
}
|
|
706
|
+
catch (err) {
|
|
707
|
+
this.emitError({
|
|
708
|
+
extensionPath: ext.path,
|
|
709
|
+
event: event.type,
|
|
710
|
+
error: err instanceof Error ? err.message : String(err),
|
|
711
|
+
stack: err instanceof Error ? err.stack : undefined,
|
|
712
|
+
});
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
return action;
|
|
717
|
+
}
|
|
671
718
|
async emitMessageEnd(event) {
|
|
672
719
|
const ctx = this.createContext();
|
|
673
720
|
let currentMessage = event.message;
|
|
674
721
|
let modified = false;
|
|
675
|
-
for (const ext of this.extensions) {
|
|
676
|
-
const handlers = ext.handlers.get("message_end");
|
|
677
|
-
if (!handlers || handlers.length === 0)
|
|
678
|
-
continue;
|
|
722
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "message_end")) {
|
|
679
723
|
for (const handler of handlers) {
|
|
680
724
|
try {
|
|
681
725
|
const currentEvent = { ...event, message: currentMessage };
|
|
@@ -711,10 +755,7 @@ export class ExtensionRunner {
|
|
|
711
755
|
const ctx = this.createContext();
|
|
712
756
|
const currentEvent = { ...event };
|
|
713
757
|
let modified = false;
|
|
714
|
-
for (const ext of this.extensions) {
|
|
715
|
-
const handlers = ext.handlers.get("tool_result");
|
|
716
|
-
if (!handlers || handlers.length === 0)
|
|
717
|
-
continue;
|
|
758
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "tool_result")) {
|
|
718
759
|
for (const handler of handlers) {
|
|
719
760
|
try {
|
|
720
761
|
const handlerResult = (await handler(currentEvent, ctx));
|
|
@@ -762,10 +803,7 @@ export class ExtensionRunner {
|
|
|
762
803
|
async emitToolCall(event) {
|
|
763
804
|
const ctx = this.createContext();
|
|
764
805
|
let result;
|
|
765
|
-
for (const
|
|
766
|
-
const handlers = ext.handlers.get("tool_call");
|
|
767
|
-
if (!handlers || handlers.length === 0)
|
|
768
|
-
continue;
|
|
806
|
+
for (const { handlers } of snapshotEventHandlers(this.extensions, "tool_call")) {
|
|
769
807
|
for (const handler of handlers) {
|
|
770
808
|
const handlerResult = await handler(event, ctx);
|
|
771
809
|
if (handlerResult) {
|
|
@@ -780,16 +818,16 @@ export class ExtensionRunner {
|
|
|
780
818
|
}
|
|
781
819
|
async emitUserBash(event) {
|
|
782
820
|
const ctx = this.createContext();
|
|
783
|
-
for (const ext of this.extensions) {
|
|
784
|
-
const handlers = ext.handlers.get("user_bash");
|
|
785
|
-
if (!handlers || handlers.length === 0)
|
|
786
|
-
continue;
|
|
821
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "user_bash")) {
|
|
787
822
|
for (const handler of handlers) {
|
|
788
823
|
try {
|
|
789
824
|
const handlerResult = await handler(event, ctx);
|
|
790
|
-
if (handlerResult)
|
|
791
|
-
|
|
825
|
+
if (handlerResult === undefined)
|
|
826
|
+
continue;
|
|
827
|
+
if (!isUserBashEventResult(handlerResult)) {
|
|
828
|
+
throw new Error("Invalid user_bash handler result: return undefined for local execution or exactly one valid { operations } or { result } object");
|
|
792
829
|
}
|
|
830
|
+
return handlerResult;
|
|
793
831
|
}
|
|
794
832
|
catch (err) {
|
|
795
833
|
const message = err instanceof Error ? err.message : String(err);
|
|
@@ -800,6 +838,7 @@ export class ExtensionRunner {
|
|
|
800
838
|
error: message,
|
|
801
839
|
stack,
|
|
802
840
|
});
|
|
841
|
+
throw err;
|
|
803
842
|
}
|
|
804
843
|
}
|
|
805
844
|
}
|
|
@@ -808,10 +847,7 @@ export class ExtensionRunner {
|
|
|
808
847
|
async emitContext(messages) {
|
|
809
848
|
const ctx = this.createContext();
|
|
810
849
|
let currentMessages = structuredClone(messages);
|
|
811
|
-
for (const ext of this.extensions) {
|
|
812
|
-
const handlers = ext.handlers.get("context");
|
|
813
|
-
if (!handlers || handlers.length === 0)
|
|
814
|
-
continue;
|
|
850
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "context")) {
|
|
815
851
|
for (const handler of handlers) {
|
|
816
852
|
try {
|
|
817
853
|
const event = { type: "context", messages: currentMessages };
|
|
@@ -837,10 +873,7 @@ export class ExtensionRunner {
|
|
|
837
873
|
async emitBeforeProviderRequest(payload) {
|
|
838
874
|
const ctx = this.createContext();
|
|
839
875
|
let currentPayload = payload;
|
|
840
|
-
for (const ext of this.extensions) {
|
|
841
|
-
const handlers = ext.handlers.get("before_provider_request");
|
|
842
|
-
if (!handlers || handlers.length === 0)
|
|
843
|
-
continue;
|
|
876
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "before_provider_request")) {
|
|
844
877
|
for (const handler of handlers) {
|
|
845
878
|
try {
|
|
846
879
|
const event = {
|
|
@@ -868,10 +901,7 @@ export class ExtensionRunner {
|
|
|
868
901
|
}
|
|
869
902
|
async emitBeforeProviderHeaders(headers) {
|
|
870
903
|
const ctx = this.createContext();
|
|
871
|
-
for (const ext of this.extensions) {
|
|
872
|
-
const handlers = ext.handlers.get("before_provider_headers");
|
|
873
|
-
if (!handlers || handlers.length === 0)
|
|
874
|
-
continue;
|
|
904
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "before_provider_headers")) {
|
|
875
905
|
for (const handler of handlers) {
|
|
876
906
|
try {
|
|
877
907
|
// Handlers mutate `headers` in place; the return value is ignored.
|
|
@@ -895,37 +925,34 @@ export class ExtensionRunner {
|
|
|
895
925
|
}
|
|
896
926
|
return headers;
|
|
897
927
|
}
|
|
898
|
-
async emitBeforeAgentStart(prompt, images,
|
|
899
|
-
|
|
928
|
+
async emitBeforeAgentStart(prompt, images, systemPromptOptions) {
|
|
929
|
+
const currentOptions = normalizeBuildSystemPromptOptions(systemPromptOptions);
|
|
930
|
+
const renderCurrentSystemPrompt = () => buildSystemPrompt(currentOptions);
|
|
900
931
|
const ctx = Object.defineProperties({}, Object.getOwnPropertyDescriptors(this.createContext()));
|
|
901
932
|
ctx.getSystemPrompt = () => {
|
|
902
933
|
this.assertActive();
|
|
903
|
-
return
|
|
934
|
+
return renderCurrentSystemPrompt();
|
|
904
935
|
};
|
|
905
936
|
const messages = [];
|
|
906
|
-
|
|
907
|
-
for (const ext of this.extensions) {
|
|
908
|
-
const handlers = ext.handlers.get("before_agent_start");
|
|
909
|
-
if (!handlers || handlers.length === 0)
|
|
910
|
-
continue;
|
|
937
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "before_agent_start")) {
|
|
911
938
|
for (const handler of handlers) {
|
|
912
939
|
try {
|
|
913
940
|
const event = {
|
|
914
941
|
type: "before_agent_start",
|
|
915
942
|
prompt,
|
|
916
943
|
images,
|
|
917
|
-
systemPrompt
|
|
918
|
-
|
|
944
|
+
get systemPrompt() {
|
|
945
|
+
return renderCurrentSystemPrompt();
|
|
946
|
+
},
|
|
947
|
+
systemPromptOptions: currentOptions,
|
|
919
948
|
};
|
|
920
949
|
const handlerResult = await handler(event, ctx);
|
|
921
950
|
if (handlerResult) {
|
|
922
951
|
const result = handlerResult;
|
|
923
|
-
if (result.message)
|
|
952
|
+
if (result.message)
|
|
924
953
|
messages.push(result.message);
|
|
925
|
-
}
|
|
926
954
|
if (result.systemPrompt !== undefined) {
|
|
927
|
-
|
|
928
|
-
systemPromptModified = true;
|
|
955
|
+
currentOptions.forceSystemPrompt = result.systemPrompt;
|
|
929
956
|
}
|
|
930
957
|
}
|
|
931
958
|
}
|
|
@@ -941,23 +968,14 @@ export class ExtensionRunner {
|
|
|
941
968
|
}
|
|
942
969
|
}
|
|
943
970
|
}
|
|
944
|
-
|
|
945
|
-
return {
|
|
946
|
-
messages: messages.length > 0 ? messages : undefined,
|
|
947
|
-
systemPrompt: systemPromptModified ? currentSystemPrompt : undefined,
|
|
948
|
-
};
|
|
949
|
-
}
|
|
950
|
-
return undefined;
|
|
971
|
+
return { messages, systemPromptOptions: currentOptions };
|
|
951
972
|
}
|
|
952
973
|
async emitResourcesDiscover(cwd, reason) {
|
|
953
974
|
const ctx = this.createContext();
|
|
954
975
|
const skillPaths = [];
|
|
955
976
|
const promptPaths = [];
|
|
956
977
|
const themePaths = [];
|
|
957
|
-
for (const ext of this.extensions) {
|
|
958
|
-
const handlers = ext.handlers.get("resources_discover");
|
|
959
|
-
if (!handlers || handlers.length === 0)
|
|
960
|
-
continue;
|
|
978
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "resources_discover")) {
|
|
961
979
|
for (const handler of handlers) {
|
|
962
980
|
try {
|
|
963
981
|
const event = { type: "resources_discover", cwd, reason };
|
|
@@ -992,8 +1010,8 @@ export class ExtensionRunner {
|
|
|
992
1010
|
const ctx = this.createContext();
|
|
993
1011
|
let currentText = text;
|
|
994
1012
|
let currentImages = images;
|
|
995
|
-
for (const ext of this.extensions) {
|
|
996
|
-
for (const handler of
|
|
1013
|
+
for (const { ext, handlers } of snapshotEventHandlers(this.extensions, "input")) {
|
|
1014
|
+
for (const handler of handlers) {
|
|
997
1015
|
try {
|
|
998
1016
|
const event = {
|
|
999
1017
|
type: "input",
|