@astralyn/pi 0.84.8 → 0.84.10
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 +17 -2
- package/README.md +3 -2
- package/dist/cli/args.d.ts +1 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +29 -9
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +2 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/config.d.ts +4 -3
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +22 -14
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +26 -7
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +83 -64
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +6 -7
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js +3 -0
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +4 -3
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js +41 -32
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction-controller.d.ts +2 -1
- package/dist/core/compaction-controller.d.ts.map +1 -1
- package/dist/core/compaction-controller.js +64 -21
- package/dist/core/compaction-controller.js.map +1 -1
- package/dist/core/defaults.d.ts +1 -0
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/defaults.js +9 -0
- package/dist/core/defaults.js.map +1 -1
- package/dist/core/extensions/index.d.ts +2 -2
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +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 +115 -48
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/types.d.ts +38 -9
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js +3 -0
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +1 -1
- package/dist/core/footer-data-provider.js +1 -1
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/keybindings.d.ts +20 -19
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +26 -5
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-config.d.ts +5 -0
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +3 -1
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -0
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +14 -8
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js +2 -1
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +22 -14
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/pi-manifest.d.ts.map +1 -1
- package/dist/core/pi-manifest.js +2 -1
- package/dist/core/pi-manifest.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +2 -1
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +3 -2
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +2 -2
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +10 -3
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-export.d.ts +4 -0
- package/dist/core/session-export.d.ts.map +1 -0
- package/dist/core/session-export.js +32 -0
- package/dist/core/session-export.js.map +1 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +4 -3
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-diagnostics.d.ts +9 -0
- package/dist/core/settings-diagnostics.d.ts.map +1 -0
- package/dist/core/settings-diagnostics.js +21 -0
- package/dist/core/settings-diagnostics.js.map +1 -0
- package/dist/core/settings-manager.d.ts +9 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +51 -10
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +51 -33
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +2 -1
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +11 -2
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tools/bash.d.ts +19 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +59 -37
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +0 -5
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +2 -5
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +20 -4
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/index.d.ts +4 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +18 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/powershell.d.ts +16 -0
- package/dist/core/tools/powershell.d.ts.map +1 -0
- package/dist/core/tools/powershell.js +39 -0
- package/dist/core/tools/powershell.js.map +1 -0
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +2 -1
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/extensions/background/registry.d.ts +2 -3
- package/dist/extensions/background/registry.d.ts.map +1 -1
- package/dist/extensions/background/registry.js +2 -6
- package/dist/extensions/background/registry.js.map +1 -1
- package/dist/extensions/llama/index.d.ts.map +1 -1
- package/dist/extensions/llama/index.js +2 -0
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +6 -2
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/question/types.d.ts +0 -1
- package/dist/extensions/question/types.d.ts.map +1 -1
- package/dist/extensions/question/types.js +1 -1
- package/dist/extensions/question/types.js.map +1 -1
- package/dist/extensions/router/register.d.ts +0 -1
- package/dist/extensions/router/register.d.ts.map +1 -1
- package/dist/extensions/router/register.js +0 -3
- package/dist/extensions/router/register.js.map +1 -1
- package/dist/extensions/router/stream.d.ts +0 -2
- package/dist/extensions/router/stream.d.ts.map +1 -1
- package/dist/extensions/router/stream.js +1 -12
- package/dist/extensions/router/stream.js.map +1 -1
- package/dist/extensions/subagent/index.js +2 -2
- package/dist/extensions/subagent/index.js.map +1 -1
- package/dist/extensions/subagent/render.d.ts +6 -2
- package/dist/extensions/subagent/render.d.ts.map +1 -1
- package/dist/extensions/subagent/render.js +143 -132
- package/dist/extensions/subagent/render.js.map +1 -1
- package/dist/extensions/subagent/text.d.ts +0 -1
- package/dist/extensions/subagent/text.d.ts.map +1 -1
- package/dist/extensions/subagent/text.js +1 -30
- package/dist/extensions/subagent/text.js.map +1 -1
- package/dist/extensions/subagent/ui/model-list.d.ts +0 -3
- package/dist/extensions/subagent/ui/model-list.d.ts.map +1 -1
- package/dist/extensions/subagent/ui/model-list.js +1 -10
- package/dist/extensions/subagent/ui/model-list.js.map +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +4 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +18 -15
- package/dist/main.js.map +1 -1
- package/dist/migrations.js +5 -5
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +0 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +0 -1
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +9 -3
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +54 -11
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +7 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +118 -55
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-submenu.d.ts +72 -0
- package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -0
- package/dist/modes/interactive/components/settings-submenu.js +151 -0
- package/dist/modes/interactive/components/settings-submenu.js.map +1 -0
- package/dist/modes/interactive/components/thinking-selector.d.ts +15 -3
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +68 -17
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +2 -1
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +11 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +167 -105
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/session-share.d.ts +16 -0
- package/dist/modes/interactive/session-share.d.ts.map +1 -0
- package/dist/modes/interactive/session-share.js +188 -0
- package/dist/modes/interactive/session-share.js.map +1 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +3 -2
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts +16 -13
- package/dist/modes/json-event.d.ts.map +1 -1
- package/dist/modes/json-event.js +20 -6
- package/dist/modes/json-event.js.map +1 -1
- package/dist/package-manager-cli.d.ts +1 -0
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +186 -2
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +2 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/management-http.d.ts +5 -3
- package/dist/utils/management-http.d.ts.map +1 -1
- package/dist/utils/management-http.js +14 -10
- package/dist/utils/management-http.js.map +1 -1
- package/dist/utils/paths.d.ts +0 -5
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +0 -7
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/shell.d.ts +3 -0
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +17 -5
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/text.d.ts +8 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +9 -0
- package/dist/utils/text.js.map +1 -0
- package/docs/bundled/extensions/subagent.md +40 -23
- package/docs/compaction.md +19 -2
- package/docs/custom-provider.md +5 -2
- package/docs/environment-variables.md +8 -8
- package/docs/extensions.md +22 -10
- package/docs/json.md +7 -2
- package/docs/keybindings.md +10 -8
- package/docs/llama-cpp.md +6 -4
- package/docs/models.md +10 -3
- package/docs/packages.md +2 -1
- package/docs/rpc.md +9 -3
- package/docs/sdk.md +12 -2
- package/docs/settings.md +16 -5
- package/docs/skills.md +5 -4
- package/docs/terminal-setup.md +11 -9
- package/docs/usage.md +6 -2
- package/docs/windows.md +24 -2
- package/examples/extensions/border-status-editor.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +0 -0
- package/examples/extensions/git-checkpoint.ts +2 -2
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/notify.ts +3 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/titlebar-spinner.ts +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/examples/rpc-extension-ui.ts +1 -1
- package/examples/sdk/06-extensions.ts +1 -1
- package/examples/sdk/README.md +1 -1
- package/npm-shrinkwrap.json +196 -257
- package/package.json +6 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction-controller.js","sourceRoot":"","sources":["../../src/core/compaction-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Agent, AgentMessage, PrepareNextTurnContext, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AssistantMessage, Model, Usage } from \"@earendil-works/pi-ai/compat\";\nimport {\n\tisContextOverflow,\n\tisRecoverableLength,\n\ttype RetryCallbacks,\n\tstreamSimple,\n} from \"@earendil-works/pi-ai/compat\";\nimport type { AgentSessionEvent } from \"./agent-session.ts\";\nimport {\n\ttype CompactionResult,\n\tcalculateContextTokens,\n\tcompact,\n\testimateContextTokens,\n\testimateTokens,\n\tprepareCompaction,\n\tshouldCompact,\n} from \"./compaction/index.ts\";\nimport type { CompactionTiming, ExtensionRunner, SessionBeforeCompactResult } from \"./extensions/index.ts\";\nimport type { CompactionEntry, SessionManager } from \"./session-manager.ts\";\nimport { getLatestCompactionEntry } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\nexport const CONTEXT_REMAINS_OVER_COMPACTION_THRESHOLD =\n\t\"Estimated retained context remains above the configured auto-compaction threshold. Reduce compaction.keepRecentTokens, remove large retained content, or switch to a model with a larger context window before continuing.\";\nexport const NOTHING_TO_COMPACT_WITHIN_KEEP_WINDOW =\n\t\"Nothing to compact while preserving the configured recent context. Reduce compaction.keepRecentTokens, remove large retained content, or switch to a model with a larger context window before continuing.\";\nexport const AUTO_COMPACTION_STOPPED_BEFORE_NEXT_PROVIDER =\n\t\"Stopped before the next provider request because auto-compaction did not produce a safe context. Review the compaction warning before continuing.\";\n\ninterface AutoCompactionOutcome {\n\tcompacted: boolean;\n\tshouldContinue: boolean;\n\t/** Compaction persisted, but the rebuilt context is still unsafe to send. */\n\tmustStop?: boolean;\n\t/** An extension declined this compaction via session_before_compact. */\n\tcancelled?: boolean;\n}\n\nexport interface MidTurnCompactionOutcome {\n\tmessages?: AgentMessage[];\n\tstopErrorMessage?: string;\n}\n\nexport function estimateMessagesTokens(messages: AgentMessage[]): number {\n\tlet tokens = 0;\n\tfor (const message of messages) {\n\t\ttokens += estimateTokens(message);\n\t}\n\treturn tokens;\n}\n\ninterface SummarizationRequestAuth {\n\tmodel: Model<any>;\n\tapiKey?: string;\n\theaders?: Record<string, string>;\n\tenv?: Record<string, string>;\n}\n\n/**\n * The slice of AgentSession that auto-compaction needs. Every member forwards\n * to existing session state; the host does not grant new capabilities.\n */\nexport interface CompactionHost {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\tgetModel(): Model<any> | undefined;\n\tgetThinkingLevel(): ThinkingLevel;\n\tgetExtensionRunner(): ExtensionRunner;\n\t/** Whether a manual /compact run currently owns the compaction lifecycle. */\n\tisManualCompactionActive(): boolean;\n\temit(event: AgentSessionEvent): void;\n\tgetRequiredRequestAuth(model: Model<any>): Promise<SummarizationRequestAuth>;\n\tgetSummarizationRequestAuth(\n\t\tmodel: Model<any>,\n\t\tstreamFunction: Agent[\"streamFunction\"],\n\t): Promise<SummarizationRequestAuth>;\n\tsummarizationRetryCallbacks(source: {\n\t\tsource: \"compaction\";\n\t\treason: \"manual\" | \"threshold\" | \"overflow\";\n\t}): RetryCallbacks;\n}\n\n/**\n * Owns automatic compaction: threshold checks after tool batches (mid-turn),\n * after a run, and before a prompt; overflow compact-and-retry recovery; and\n * the fail-closed stop when compaction cannot produce a safe context.\n * Manual /compact stays in AgentSession.\n */\nexport class CompactionController {\n\tprivate readonly host: CompactionHost;\n\tprivate _abortController: AbortController | undefined = undefined;\n\tprivate _stopAfterTurnRequested = false;\n\t/** An extension cancelled a mid-turn compaction; skip further mid-turn checks this run. */\n\tprivate _midTurnDeclined = false;\n\tprivate _overflowRecoveryAttempted = false;\n\n\tconstructor(host: CompactionHost) {\n\t\tthis.host = host;\n\t}\n\n\t/** Clear per-run state when a new agent run starts. */\n\tnoteRunStart(): void {\n\t\tthis._stopAfterTurnRequested = false;\n\t\tthis._midTurnDeclined = false;\n\t}\n\n\t/** Read and clear the pending stop request. */\n\tconsumeStopAfterTurn(): boolean {\n\t\tconst requested = this._stopAfterTurnRequested;\n\t\tthis._stopAfterTurnRequested = false;\n\t\treturn requested;\n\t}\n\n\t/** Stop the run at the next lifecycle boundary instead of sending an unsafe context. */\n\trequestStopAfterTurn(): void {\n\t\tthis._stopAfterTurnRequested = true;\n\t}\n\n\t/** A user message or a healthy assistant response resets overflow recovery. */\n\tresetOverflowRecovery(): void {\n\t\tthis._overflowRecoveryAttempted = false;\n\t}\n\n\tget isAutoCompacting(): boolean {\n\t\treturn this._abortController !== undefined;\n\t}\n\n\tabort(): void {\n\t\tthis._abortController?.abort();\n\t}\n\n\testimateContextTokens(messages: AgentMessage[]): number {\n\t\tconst estimate = estimateContextTokens(messages);\n\t\tconst compactionEntry = getLatestCompactionEntry(this.host.sessionManager.getBranch());\n\t\tif (compactionEntry && estimate.lastUsageIndex !== null) {\n\t\t\tconst usageMessage = messages[estimate.lastUsageIndex];\n\t\t\tif (\n\t\t\t\tusageMessage?.role === \"assistant\" &&\n\t\t\t\tusageMessage.timestamp <= new Date(compactionEntry.timestamp).getTime()\n\t\t\t) {\n\t\t\t\t// A retained pre-compaction usage describes the old, larger context. Fall back\n\t\t\t\t// to message estimates rather than immediately compacting again from stale data.\n\t\t\t\treturn estimateMessagesTokens(messages);\n\t\t\t}\n\t\t}\n\t\treturn estimate.tokens;\n\t}\n\n\tasync maybeCompactBeforeNextToolTurn(\n\t\tturn: PrepareNextTurnContext,\n\t\tsignal?: AbortSignal,\n\t): Promise<MidTurnCompactionOutcome> {\n\t\tif (signal?.aborted) {\n\t\t\treturn { stopErrorMessage: AUTO_COMPACTION_STOPPED_BEFORE_NEXT_PROVIDER };\n\t\t}\n\t\t// Tool batches always continue the run; a turn without tool results only\n\t\t// continues when steering/follow-up messages are queued, otherwise the\n\t\t// post-run path covers it.\n\t\tif (turn.toolResults.length === 0 && !this.host.agent.hasQueuedMessages()) {\n\t\t\treturn {};\n\t\t}\n\t\tif (this._midTurnDeclined) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\t\tif (!settings.enabled) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst contextTokens = this.estimateContextTokens(turn.context.messages);\n\t\tconst contextWindow = this.host.getModel()?.contextWindow ?? 0;\n\t\tif (!shouldCompact(contextTokens, contextWindow, settings)) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst outcome = await this._runAutoCompactionWithOutcome(\"threshold\", false, \"midTurn\", signal);\n\t\tif (!outcome.compacted) {\n\t\t\tif (outcome.cancelled && signal?.aborted !== true) {\n\t\t\t\t// The extension took ownership of the risk; don't re-ask on every batch.\n\t\t\t\tthis._midTurnDeclined = true;\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\treturn { stopErrorMessage: AUTO_COMPACTION_STOPPED_BEFORE_NEXT_PROVIDER };\n\t\t}\n\n\t\treturn {\n\t\t\tmessages: this.host.agent.state.messages.slice(),\n\t\t\t...(signal?.aborted === true\n\t\t\t\t? { stopErrorMessage: AUTO_COMPACTION_STOPPED_BEFORE_NEXT_PROVIDER }\n\t\t\t\t: outcome.mustStop === true\n\t\t\t\t\t? { stopErrorMessage: CONTEXT_REMAINS_OVER_COMPACTION_THRESHOLD }\n\t\t\t\t\t: {}),\n\t\t};\n\t}\n\n\t/**\n\t * Check if compaction is needed and run it.\n\t * Called after agent_end and before prompt submission.\n\t *\n\t * Two cases:\n\t * 1. Recoverable failure: LLM returned context overflow or stopped below its desired output limit;\n\t * remove the assistant message, compact, and auto-retry once\n\t * 2. Threshold: Context over threshold, compact, NO auto-retry (user continues manually)\n\t *\n\t * @param assistantMessage The assistant message to check\n\t * @param skipAbortedCheck If false, include aborted messages (for pre-prompt check). Default: true\n\t */\n\tasync checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck = true,\n\t\ttiming: CompactionTiming = \"postRun\",\n\t): Promise<boolean> {\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\t\tif (!settings.enabled) return false;\n\n\t\t// Skip if message was aborted (user cancelled) - unless skipAbortedCheck is false\n\t\tif (skipAbortedCheck && assistantMessage.stopReason === \"aborted\") return false;\n\n\t\tconst model = this.host.getModel();\n\t\tconst contextWindow = model?.contextWindow ?? 0;\n\n\t\t// Skip overflow check if the message came from a different model.\n\t\t// This handles the case where user switched from a smaller-context model (e.g. opus)\n\t\t// to a larger-context model (e.g. codex) - the overflow error from the old model\n\t\t// shouldn't trigger compaction for the new model.\n\t\tconst sameModel = model && assistantMessage.provider === model.provider && assistantMessage.model === model.id;\n\n\t\t// Skip compaction checks if this assistant message is older than the latest\n\t\t// compaction boundary. This prevents a stale pre-compaction usage/error\n\t\t// from retriggering compaction on the first prompt after compaction.\n\t\tconst compactionEntry = getLatestCompactionEntry(this.host.sessionManager.getBranch());\n\t\tconst assistantIsFromBeforeCompaction =\n\t\t\tcompactionEntry !== null && assistantMessage.timestamp <= new Date(compactionEntry.timestamp).getTime();\n\t\tif (assistantIsFromBeforeCompaction) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Case 1: Recoverable failure. Explicit/silent context overflow still uses context metadata.\n\t\t// A length stop is recoverable when output ended below the model's original desired limit,\n\t\t// independent of the configured context size or any context-clamped provider request limit.\n\t\t// A successful response over the configured window should compact but must not retry: the\n\t\t// assistant answer already completed and agent.continue() cannot continue from an assistant.\n\t\tconst recoverableLength = sameModel && isRecoverableLength(assistantMessage, model?.maxTokens ?? 0);\n\t\tif (sameModel && (isContextOverflow(assistantMessage, contextWindow) || recoverableLength)) {\n\t\t\tconst willRetry = assistantMessage.stopReason !== \"stop\";\n\n\t\t\tif (!willRetry) {\n\t\t\t\treturn await this._runAutoCompaction(\"overflow\", false, timing);\n\t\t\t}\n\n\t\t\tif (this._overflowRecoveryAttempted) {\n\t\t\t\tthis._stopAfterTurnRequested = true;\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\terrorMessage:\n\t\t\t\t\t\t\"Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.\",\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._overflowRecoveryAttempted = true;\n\t\t\t// Remove the failed or truncated message from agent state. It remains in session history,\n\t\t\t// but must not be included in the compact-and-retry context.\n\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\tif (messages.length > 0 && messages[messages.length - 1].role === \"assistant\") {\n\t\t\t\tthis.host.agent.state.messages = messages.slice(0, -1);\n\t\t\t}\n\t\t\treturn await this._runAutoCompaction(\"overflow\", willRetry, timing);\n\t\t}\n\n\t\t// Case 2: Threshold - context is getting large\n\t\t// For error messages or all-zero usage messages, estimate from the last valid response.\n\t\t// This ensures sessions that hit persistent API errors (e.g. 529) or malformed zero-usage\n\t\t// responses can still compact and do not reset context accounting.\n\t\tlet contextTokens: number;\n\t\tconst directContextTokens = assistantMessage.usage ? calculateContextTokens(assistantMessage.usage) : 0;\n\t\tif (assistantMessage.stopReason === \"error\" || directContextTokens === 0) {\n\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\tconst estimate = estimateContextTokens(messages);\n\t\t\tif (estimate.lastUsageIndex === null) return false; // No usage data at all\n\t\t\t// Verify the usage source is post-compaction. Kept pre-compaction messages\n\t\t\t// have stale usage reflecting the old (larger) context and would falsely\n\t\t\t// trigger compaction right after one just finished.\n\t\t\tconst usageMsg = messages[estimate.lastUsageIndex];\n\t\t\tif (\n\t\t\t\tcompactionEntry &&\n\t\t\t\tusageMsg.role === \"assistant\" &&\n\t\t\t\t(usageMsg as AssistantMessage).timestamp <= new Date(compactionEntry.timestamp).getTime()\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tcontextTokens = estimate.tokens;\n\t\t} else {\n\t\t\tcontextTokens = directContextTokens;\n\t\t}\n\t\tif (shouldCompact(contextTokens, contextWindow, settings)) {\n\t\t\treturn await this._runAutoCompaction(\"threshold\", false, timing);\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Internal: Run auto-compaction with events.\n\t */\n\tprivate async _runAutoCompaction(\n\t\treason: \"overflow\" | \"threshold\",\n\t\twillRetry: boolean,\n\t\ttiming: CompactionTiming = \"postRun\",\n\t): Promise<boolean> {\n\t\tconst outcome = await this._runAutoCompactionWithOutcome(reason, willRetry, timing);\n\t\tif (!outcome.compacted || outcome.mustStop) {\n\t\t\tthis._stopAfterTurnRequested = true;\n\t\t}\n\t\treturn outcome.shouldContinue;\n\t}\n\n\tprivate async _runAutoCompactionWithOutcome(\n\t\treason: \"overflow\" | \"threshold\",\n\t\twillRetry: boolean,\n\t\ttiming: CompactionTiming,\n\t\tparentSignal?: AbortSignal,\n\t): Promise<AutoCompactionOutcome> {\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\t\tlet started = false;\n\t\tlet controller: AbortController | undefined;\n\t\tlet removeParentAbortListener: (() => void) | undefined;\n\n\t\ttry {\n\t\t\tconst model = this.host.getModel();\n\t\t\tif (!model || this._abortController || this.host.isManualCompactionActive() || parentSignal?.aborted) {\n\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t}\n\t\t\tconst streamFunction = this.host.agent.streamFunction;\n\t\t\tconst thinkingLevel = this.host.getThinkingLevel();\n\t\t\tconst retrySettings = this.host.settingsManager.getRetrySettings();\n\n\t\t\tcontroller = new AbortController();\n\t\t\tif (parentSignal) {\n\t\t\t\tconst abortFromParent = () => controller?.abort();\n\t\t\t\tparentSignal.addEventListener(\"abort\", abortFromParent, { once: true });\n\t\t\t\tremoveParentAbortListener = () => parentSignal.removeEventListener(\"abort\", abortFromParent);\n\t\t\t}\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t}\n\t\t\tthis._abortController = controller;\n\t\t\tstarted = true;\n\t\t\tthis.host.emit({ type: \"compaction_start\", reason });\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t}\n\n\t\t\tlet extensionCompaction: CompactionResult | undefined;\n\t\t\tlet fromExtension = false;\n\t\t\tconst pathEntries = this.host.sessionManager.getBranch();\n\t\t\tconst preparation = prepareCompaction(pathEntries, settings);\n\t\t\tif (!preparation) {\n\t\t\t\tthrow new Error(NOTHING_TO_COMPACT_WITHIN_KEEP_WINDOW);\n\t\t\t}\n\n\t\t\tconst extensionRunner = this.host.getExtensionRunner();\n\t\t\tif (extensionRunner.hasHandlers(\"session_before_compact\")) {\n\t\t\t\tconst extensionResult = (await extensionRunner.emit({\n\t\t\t\t\ttype: \"session_before_compact\",\n\t\t\t\t\tpreparation,\n\t\t\t\t\tbranchEntries: pathEntries,\n\t\t\t\t\tcustomInstructions: undefined,\n\t\t\t\t\treason,\n\t\t\t\t\ttiming,\n\t\t\t\t\twillRetry,\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t})) as SessionBeforeCompactResult | undefined;\n\n\t\t\t\tif (extensionResult?.cancel) {\n\t\t\t\t\tthis.host.emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t});\n\t\t\t\t\t// A cancel produced by an abort (abortCompaction/parent abort) is not an\n\t\t\t\t\t// extension decision; only a voluntary cancel hands the risk to the extension.\n\t\t\t\t\treturn { compacted: false, shouldContinue: false, cancelled: !controller.signal.aborted };\n\t\t\t\t}\n\n\t\t\t\tif (extensionResult?.compaction) {\n\t\t\t\t\textensionCompaction = extensionResult.compaction;\n\t\t\t\t\tfromExtension = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet summary: string;\n\t\t\tlet firstKeptEntryId: string;\n\t\t\tlet tokensBefore: number;\n\t\t\tlet usage: Usage | undefined;\n\t\t\tlet details: unknown;\n\n\t\t\tif (extensionCompaction) {\n\t\t\t\t// Extension provided compaction content\n\t\t\t\tsummary = extensionCompaction.summary;\n\t\t\t\tfirstKeptEntryId = extensionCompaction.firstKeptEntryId;\n\t\t\t\ttokensBefore = extensionCompaction.tokensBefore;\n\t\t\t\tusage = extensionCompaction.usage;\n\t\t\t\tdetails = extensionCompaction.details;\n\t\t\t} else {\n\t\t\t\tlet requestModel = model;\n\t\t\t\tlet apiKey: string | undefined;\n\t\t\t\tlet headers: Record<string, string> | undefined;\n\t\t\t\tlet env: Record<string, string> | undefined;\n\t\t\t\tif (streamFunction === streamSimple) {\n\t\t\t\t\t({ model: requestModel, apiKey, headers, env } = await this.host.getRequiredRequestAuth(model));\n\t\t\t\t} else {\n\t\t\t\t\t({\n\t\t\t\t\t\tmodel: requestModel,\n\t\t\t\t\t\tapiKey,\n\t\t\t\t\t\theaders,\n\t\t\t\t\t\tenv,\n\t\t\t\t\t} = await this.host.getSummarizationRequestAuth(model, streamFunction));\n\t\t\t\t}\n\t\t\t\tif (controller.signal.aborted) {\n\t\t\t\t\tthis.host.emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t});\n\t\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t\t}\n\n\t\t\t\t// Generate compaction result\n\t\t\t\tconst compactResult = await compact(\n\t\t\t\t\tpreparation,\n\t\t\t\t\trequestModel,\n\t\t\t\t\tapiKey,\n\t\t\t\t\theaders,\n\t\t\t\t\tundefined,\n\t\t\t\t\tcontroller.signal,\n\t\t\t\t\tthinkingLevel,\n\t\t\t\t\tstreamFunction,\n\t\t\t\t\tenv,\n\t\t\t\t\tretrySettings,\n\t\t\t\t\tthis.host.summarizationRetryCallbacks({ source: \"compaction\", reason }),\n\t\t\t\t);\n\t\t\t\tsummary = compactResult.summary;\n\t\t\t\tfirstKeptEntryId = compactResult.firstKeptEntryId;\n\t\t\t\ttokensBefore = compactResult.tokensBefore;\n\t\t\t\tusage = compactResult.usage;\n\t\t\t\tdetails = compactResult.details;\n\t\t\t}\n\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t}\n\n\t\t\tthis.host.sessionManager.appendCompaction(\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\tdetails,\n\t\t\t\tfromExtension,\n\t\t\t\tusage,\n\t\t\t);\n\t\t\tconst newEntries = this.host.sessionManager.getEntries();\n\t\t\tconst sessionContext = this.host.sessionManager.buildSessionContext();\n\t\t\tthis.host.agent.state.messages = sessionContext.messages;\n\t\t\tif (willRetry) {\n\t\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\t\t// The overflow response was persisted on message_end before checkCompaction() removed it\n\t\t\t\t// from agent state. Rebuilding state from the new compaction can restore that kept entry,\n\t\t\t\t// leaving an assistant as the final message. agent.continue() rejects that state, so remove\n\t\t\t\t// the retriable error or truncated-length response again before continuing the interrupted turn.\n\t\t\t\tif (\n\t\t\t\t\tlastMsg?.role === \"assistant\" &&\n\t\t\t\t\t((lastMsg as AssistantMessage).stopReason === \"error\" ||\n\t\t\t\t\t\t(lastMsg as AssistantMessage).stopReason === \"length\")\n\t\t\t\t) {\n\t\t\t\t\tthis.host.agent.state.messages = messages.slice(0, -1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst estimatedTokensAfter = this.estimateContextTokens(this.host.agent.state.messages);\n\t\t\tconst contextStillOverThreshold = shouldCompact(estimatedTokensAfter, model.contextWindow, settings);\n\t\t\tconst effectiveWillRetry = willRetry && !contextStillOverThreshold;\n\n\t\t\t// Get the saved compaction entry for the extension event\n\t\t\tconst savedCompactionEntry = newEntries.find((e) => e.type === \"compaction\" && e.summary === summary) as\n\t\t\t\t| CompactionEntry\n\t\t\t\t| undefined;\n\n\t\t\tif (savedCompactionEntry) {\n\t\t\t\tawait extensionRunner.emit({\n\t\t\t\t\ttype: \"session_compact\",\n\t\t\t\t\tcompactionEntry: savedCompactionEntry,\n\t\t\t\t\tfromExtension,\n\t\t\t\t\treason,\n\t\t\t\t\twillRetry: effectiveWillRetry,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result: CompactionResult = {\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\testimatedTokensAfter,\n\t\t\t\tusage,\n\t\t\t\tdetails,\n\t\t\t};\n\t\t\tthis.host.emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason,\n\t\t\t\tresult,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: effectiveWillRetry,\n\t\t\t\t...(contextStillOverThreshold ? { errorMessage: CONTEXT_REMAINS_OVER_COMPACTION_THRESHOLD } : {}),\n\t\t\t});\n\t\t\tif (contextStillOverThreshold) {\n\t\t\t\treturn { compacted: true, shouldContinue: false, mustStop: true };\n\t\t\t}\n\n\t\t\tif (effectiveWillRetry) {\n\t\t\t\treturn { compacted: true, shouldContinue: true };\n\t\t\t}\n\n\t\t\t// Auto-compaction can complete while follow-up/steering/custom messages are waiting.\n\t\t\t// Continue once so queued messages are delivered.\n\t\t\treturn { compacted: true, shouldContinue: this.host.agent.hasQueuedMessages() };\n\t\t} catch (error) {\n\t\t\tconst aborted = controller?.signal.aborted || (error instanceof Error && error.name === \"AbortError\");\n\t\t\tconst errorMessage = error instanceof Error ? error.message : \"compaction failed\";\n\t\t\tif (started) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\t...(aborted\n\t\t\t\t\t\t? {}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\terrorMessage:\n\t\t\t\t\t\t\t\t\treason === \"overflow\"\n\t\t\t\t\t\t\t\t\t\t? `Context overflow recovery failed: ${errorMessage}`\n\t\t\t\t\t\t\t\t\t\t: `Auto-compaction failed: ${errorMessage}`,\n\t\t\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t} finally {\n\t\t\tremoveParentAbortListener?.();\n\t\t\tif (this._abortController === controller) {\n\t\t\t\tthis._abortController = undefined;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"compaction-controller.js","sourceRoot":"","sources":["../../src/core/compaction-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Agent, AgentMessage, PrepareNextTurnContext, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AssistantMessage, Model, Usage } from \"@earendil-works/pi-ai/compat\";\nimport {\n\tisContextOverflow,\n\tisRecoverableLength,\n\ttype RetryCallbacks,\n\tstreamSimple,\n} from \"@earendil-works/pi-ai/compat\";\nimport type { AgentSessionEvent } from \"./agent-session.ts\";\nimport {\n\ttype CompactionResult,\n\tcalculateContextTokens,\n\tcompact,\n\testimateContextTokens,\n\testimateTokens,\n\tprepareCompaction,\n\tshouldCompact,\n} from \"./compaction/index.ts\";\nimport type {\n\tCompactionTiming,\n\tExtensionRunner,\n\tSessionBeforeCompactResult,\n\tSessionCompactFailedEvent,\n} from \"./extensions/index.ts\";\nimport type { CompactionEntry, SessionManager } from \"./session-manager.ts\";\nimport { getLatestCompactionEntry } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\n\nexport const CONTEXT_REMAINS_OVER_COMPACTION_THRESHOLD =\n\t\"Estimated retained context remains above the configured auto-compaction threshold. Reduce compaction.keepRecentTokens, remove large retained content, or switch to a model with a larger context window before continuing.\";\nexport const NOTHING_TO_COMPACT_WITHIN_KEEP_WINDOW =\n\t\"Nothing to compact while preserving the configured recent context. Reduce compaction.keepRecentTokens, remove large retained content, or switch to a model with a larger context window before continuing.\";\nexport const AUTO_COMPACTION_STOPPED_BEFORE_NEXT_PROVIDER =\n\t\"Stopped before the next provider request because auto-compaction did not produce a safe context. Review the compaction warning before continuing.\";\n\ninterface AutoCompactionOutcome {\n\tcompacted: boolean;\n\tshouldContinue: boolean;\n\t/** Compaction persisted, but the rebuilt context is still unsafe to send. */\n\tmustStop?: boolean;\n\t/** An extension declined this compaction via session_before_compact. */\n\tcancelled?: boolean;\n}\n\nexport interface MidTurnCompactionOutcome {\n\tmessages?: AgentMessage[];\n\tstopErrorMessage?: string;\n}\n\nexport function estimateMessagesTokens(messages: AgentMessage[]): number {\n\tlet tokens = 0;\n\tfor (const message of messages) {\n\t\ttokens += estimateTokens(message);\n\t}\n\treturn tokens;\n}\n\ninterface SummarizationRequestAuth {\n\tmodel: Model<any>;\n\tapiKey?: string;\n\theaders?: Record<string, string>;\n\tenv?: Record<string, string>;\n}\n\n/**\n * The slice of AgentSession that auto-compaction needs. Every member forwards\n * to existing session state; the host does not grant new capabilities.\n */\nexport interface CompactionHost {\n\treadonly agent: Agent;\n\treadonly sessionManager: SessionManager;\n\treadonly settingsManager: SettingsManager;\n\tgetModel(): Model<any> | undefined;\n\tgetThinkingLevel(): ThinkingLevel;\n\tgetExtensionRunner(): ExtensionRunner;\n\t/** Whether a manual /compact run currently owns the compaction lifecycle. */\n\tisManualCompactionActive(): boolean;\n\temit(event: AgentSessionEvent): void;\n\temitSessionCompactFailed(event: Omit<SessionCompactFailedEvent, \"type\">): Promise<void>;\n\tgetRequiredRequestAuth(model: Model<any>): Promise<SummarizationRequestAuth>;\n\tgetSummarizationRequestAuth(\n\t\tmodel: Model<any>,\n\t\tstreamFunction: Agent[\"streamFunction\"],\n\t): Promise<SummarizationRequestAuth>;\n\tsummarizationRetryCallbacks(source: {\n\t\tsource: \"compaction\";\n\t\treason: \"manual\" | \"threshold\" | \"overflow\";\n\t}): RetryCallbacks;\n}\n\n/**\n * Owns automatic compaction: threshold checks after tool batches (mid-turn),\n * after a run, and before a prompt; overflow compact-and-retry recovery; and\n * the fail-closed stop when compaction cannot produce a safe context.\n * Manual /compact stays in AgentSession.\n */\nexport class CompactionController {\n\tprivate readonly host: CompactionHost;\n\tprivate _abortController: AbortController | undefined = undefined;\n\tprivate _stopAfterTurnRequested = false;\n\t/** An extension cancelled a mid-turn compaction; skip further mid-turn checks this run. */\n\tprivate _midTurnDeclined = false;\n\tprivate _overflowRecoveryAttempted = false;\n\n\tconstructor(host: CompactionHost) {\n\t\tthis.host = host;\n\t}\n\n\t/** Clear per-run state when a new agent run starts. */\n\tnoteRunStart(): void {\n\t\tthis._stopAfterTurnRequested = false;\n\t\tthis._midTurnDeclined = false;\n\t}\n\n\t/** Read and clear the pending stop request. */\n\tconsumeStopAfterTurn(): boolean {\n\t\tconst requested = this._stopAfterTurnRequested;\n\t\tthis._stopAfterTurnRequested = false;\n\t\treturn requested;\n\t}\n\n\t/** Stop the run at the next lifecycle boundary instead of sending an unsafe context. */\n\trequestStopAfterTurn(): void {\n\t\tthis._stopAfterTurnRequested = true;\n\t}\n\n\t/** A user message or a healthy assistant response resets overflow recovery. */\n\tresetOverflowRecovery(): void {\n\t\tthis._overflowRecoveryAttempted = false;\n\t}\n\n\tget isAutoCompacting(): boolean {\n\t\treturn this._abortController !== undefined;\n\t}\n\n\tabort(): void {\n\t\tthis._abortController?.abort();\n\t}\n\n\testimateContextTokens(messages: AgentMessage[]): number {\n\t\tconst estimate = estimateContextTokens(messages);\n\t\tconst compactionEntry = getLatestCompactionEntry(this.host.sessionManager.getBranch());\n\t\tif (compactionEntry && estimate.lastUsageIndex !== null) {\n\t\t\tconst usageMessage = messages[estimate.lastUsageIndex];\n\t\t\tif (\n\t\t\t\tusageMessage?.role === \"assistant\" &&\n\t\t\t\tusageMessage.timestamp <= new Date(compactionEntry.timestamp).getTime()\n\t\t\t) {\n\t\t\t\t// A retained pre-compaction usage describes the old, larger context. Fall back\n\t\t\t\t// to message estimates rather than immediately compacting again from stale data.\n\t\t\t\treturn estimateMessagesTokens(messages);\n\t\t\t}\n\t\t}\n\t\treturn estimate.tokens;\n\t}\n\n\tasync maybeCompactBeforeNextToolTurn(\n\t\tturn: PrepareNextTurnContext,\n\t\tsignal?: AbortSignal,\n\t): Promise<MidTurnCompactionOutcome> {\n\t\tif (signal?.aborted) {\n\t\t\treturn { stopErrorMessage: AUTO_COMPACTION_STOPPED_BEFORE_NEXT_PROVIDER };\n\t\t}\n\t\t// Tool batches always continue the run; a turn without tool results only\n\t\t// continues when steering/follow-up messages are queued, otherwise the\n\t\t// post-run path covers it.\n\t\tif (turn.toolResults.length === 0 && !this.host.agent.hasQueuedMessages()) {\n\t\t\treturn {};\n\t\t}\n\t\tif (this._midTurnDeclined) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\t\tif (!settings.enabled) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst contextTokens = this.estimateContextTokens(turn.context.messages);\n\t\tconst contextWindow = this.host.getModel()?.contextWindow ?? 0;\n\t\tif (!shouldCompact(contextTokens, contextWindow, settings)) {\n\t\t\treturn {};\n\t\t}\n\n\t\tconst outcome = await this._runAutoCompactionWithOutcome(\"threshold\", false, \"midTurn\", signal);\n\t\tif (!outcome.compacted) {\n\t\t\tif (outcome.cancelled && signal?.aborted !== true) {\n\t\t\t\t// The extension took ownership of the risk; don't re-ask on every batch.\n\t\t\t\tthis._midTurnDeclined = true;\n\t\t\t\treturn {};\n\t\t\t}\n\t\t\treturn { stopErrorMessage: AUTO_COMPACTION_STOPPED_BEFORE_NEXT_PROVIDER };\n\t\t}\n\n\t\treturn {\n\t\t\tmessages: this.host.agent.state.messages.slice(),\n\t\t\t...(signal?.aborted === true\n\t\t\t\t? { stopErrorMessage: AUTO_COMPACTION_STOPPED_BEFORE_NEXT_PROVIDER }\n\t\t\t\t: outcome.mustStop === true\n\t\t\t\t\t? { stopErrorMessage: CONTEXT_REMAINS_OVER_COMPACTION_THRESHOLD }\n\t\t\t\t\t: {}),\n\t\t};\n\t}\n\n\t/**\n\t * Check if compaction is needed and run it.\n\t * Called after agent_end and before prompt submission.\n\t *\n\t * Two cases:\n\t * 1. Recoverable failure: LLM returned context overflow or stopped below its desired output limit;\n\t * remove the assistant message, compact, and auto-retry once\n\t * 2. Threshold: Context over threshold, compact, NO auto-retry (user continues manually)\n\t *\n\t * @param assistantMessage The assistant message to check\n\t * @param skipAbortedCheck If false, include aborted messages (for pre-prompt check). Default: true\n\t */\n\tasync checkCompaction(\n\t\tassistantMessage: AssistantMessage,\n\t\tskipAbortedCheck = true,\n\t\ttiming: CompactionTiming = \"postRun\",\n\t): Promise<boolean> {\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\t\tif (!settings.enabled) return false;\n\n\t\t// Skip if message was aborted (user cancelled) - unless skipAbortedCheck is false\n\t\tif (skipAbortedCheck && assistantMessage.stopReason === \"aborted\") return false;\n\n\t\tconst model = this.host.getModel();\n\t\tconst contextWindow = model?.contextWindow ?? 0;\n\n\t\t// Skip overflow check if the message came from a different model.\n\t\t// This handles the case where user switched from a smaller-context model (e.g. opus)\n\t\t// to a larger-context model (e.g. codex) - the overflow error from the old model\n\t\t// shouldn't trigger compaction for the new model.\n\t\tconst sameModel = model && assistantMessage.provider === model.provider && assistantMessage.model === model.id;\n\n\t\t// Skip compaction checks if this assistant message is older than the latest\n\t\t// compaction boundary. This prevents a stale pre-compaction usage/error\n\t\t// from retriggering compaction on the first prompt after compaction.\n\t\tconst compactionEntry = getLatestCompactionEntry(this.host.sessionManager.getBranch());\n\t\tconst assistantIsFromBeforeCompaction =\n\t\t\tcompactionEntry !== null && assistantMessage.timestamp <= new Date(compactionEntry.timestamp).getTime();\n\t\tif (assistantIsFromBeforeCompaction) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Case 1: Recoverable failure. Explicit/silent context overflow still uses context metadata.\n\t\t// A length stop is recoverable when output ended below the model's original desired limit,\n\t\t// independent of the configured context size or any context-clamped provider request limit.\n\t\t// A successful response over the configured window should compact but must not retry: the\n\t\t// assistant answer already completed and agent.continue() cannot continue from an assistant.\n\t\tconst contextOverflow = sameModel && isContextOverflow(assistantMessage, contextWindow);\n\t\tconst recoverableLength = sameModel && isRecoverableLength(assistantMessage, model?.maxTokens ?? 0);\n\t\tif (contextOverflow || recoverableLength) {\n\t\t\tconst willRetry = assistantMessage.stopReason !== \"stop\";\n\n\t\t\tif (!willRetry) {\n\t\t\t\treturn await this._runAutoCompaction(\"overflow\", false, timing);\n\t\t\t}\n\n\t\t\tif (this._overflowRecoveryAttempted) {\n\t\t\t\tthis._stopAfterTurnRequested = true;\n\t\t\t\tconst errorMessage = contextOverflow\n\t\t\t\t\t? \"Context overflow recovery failed after one compact-and-retry attempt. Try reducing context or switching to a larger-context model.\"\n\t\t\t\t\t: \"Truncated response recovery failed after one compact-and-retry attempt.\";\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\terrorMessage,\n\t\t\t\t});\n\t\t\t\tawait this.host.emitSessionCompactFailed({\n\t\t\t\t\treason: \"overflow\",\n\t\t\t\t\terrorMessage,\n\t\t\t\t\taborted: false,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\tfromExtension: false,\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._overflowRecoveryAttempted = true;\n\t\t\t// Remove the failed or truncated message from agent state. It remains in session history,\n\t\t\t// but must not be included in the compact-and-retry context.\n\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\tif (messages.length > 0 && messages[messages.length - 1].role === \"assistant\") {\n\t\t\t\tthis.host.agent.state.messages = messages.slice(0, -1);\n\t\t\t}\n\t\t\treturn await this._runAutoCompaction(\"overflow\", willRetry, timing);\n\t\t}\n\n\t\t// Case 2: Threshold - context is getting large\n\t\t// For error messages or all-zero usage messages, estimate from the last valid response.\n\t\t// This ensures sessions that hit persistent API errors (e.g. 529) or malformed zero-usage\n\t\t// responses can still compact and do not reset context accounting.\n\t\tlet contextTokens: number;\n\t\tconst directContextTokens = assistantMessage.usage ? calculateContextTokens(assistantMessage.usage) : 0;\n\t\tif (assistantMessage.stopReason === \"error\" || directContextTokens === 0) {\n\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\tconst estimate = estimateContextTokens(messages);\n\t\t\t// Without provider usage, estimate.tokens is the pure message-size estimate.\n\t\t\t// Only usage-backed estimates need the stale pre-compaction check.\n\t\t\tif (estimate.lastUsageIndex !== null) {\n\t\t\t\t// Verify the usage source is post-compaction. Kept pre-compaction messages\n\t\t\t\t// have stale usage reflecting the old (larger) context and would falsely\n\t\t\t\t// trigger compaction right after one just finished.\n\t\t\t\tconst usageMsg = messages[estimate.lastUsageIndex];\n\t\t\t\tif (\n\t\t\t\t\tcompactionEntry &&\n\t\t\t\t\tusageMsg.role === \"assistant\" &&\n\t\t\t\t\t(usageMsg as AssistantMessage).timestamp <= new Date(compactionEntry.timestamp).getTime()\n\t\t\t\t) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontextTokens = estimate.tokens;\n\t\t} else {\n\t\t\tcontextTokens = directContextTokens;\n\t\t}\n\t\tif (shouldCompact(contextTokens, contextWindow, settings)) {\n\t\t\treturn await this._runAutoCompaction(\"threshold\", false, timing);\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Internal: Run auto-compaction with events.\n\t */\n\tprivate async _runAutoCompaction(\n\t\treason: \"overflow\" | \"threshold\",\n\t\twillRetry: boolean,\n\t\ttiming: CompactionTiming = \"postRun\",\n\t): Promise<boolean> {\n\t\tconst outcome = await this._runAutoCompactionWithOutcome(reason, willRetry, timing);\n\t\tif (!outcome.compacted || outcome.mustStop) {\n\t\t\tthis._stopAfterTurnRequested = true;\n\t\t}\n\t\treturn outcome.shouldContinue;\n\t}\n\n\tprivate async _runAutoCompactionWithOutcome(\n\t\treason: \"overflow\" | \"threshold\",\n\t\twillRetry: boolean,\n\t\ttiming: CompactionTiming,\n\t\tparentSignal?: AbortSignal,\n\t): Promise<AutoCompactionOutcome> {\n\t\tconst settings = this.host.settingsManager.getCompactionSettings();\n\t\tlet started = false;\n\t\tlet fromExtension = false;\n\t\tlet controller: AbortController | undefined;\n\t\tlet removeParentAbortListener: (() => void) | undefined;\n\n\t\ttry {\n\t\t\tconst model = this.host.getModel();\n\t\t\tif (!model || this._abortController || this.host.isManualCompactionActive() || parentSignal?.aborted) {\n\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t}\n\t\t\tconst streamFunction = this.host.agent.streamFunction;\n\t\t\tconst thinkingLevel = this.host.getThinkingLevel();\n\t\t\tconst retrySettings = this.host.settingsManager.getRetrySettings();\n\n\t\t\tcontroller = new AbortController();\n\t\t\tif (parentSignal) {\n\t\t\t\tconst abortFromParent = () => controller?.abort();\n\t\t\t\tparentSignal.addEventListener(\"abort\", abortFromParent, { once: true });\n\t\t\t\tremoveParentAbortListener = () => parentSignal.removeEventListener(\"abort\", abortFromParent);\n\t\t\t}\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t}\n\t\t\tthis._abortController = controller;\n\t\t\tstarted = true;\n\t\t\tthis.host.emit({ type: \"compaction_start\", reason });\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\tawait this.host.emitSessionCompactFailed({\n\t\t\t\t\treason,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\tfromExtension: false,\n\t\t\t\t});\n\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t}\n\n\t\t\tlet extensionCompaction: CompactionResult | undefined;\n\t\t\tconst pathEntries = this.host.sessionManager.getBranch();\n\t\t\tconst preparation = prepareCompaction(pathEntries, settings);\n\t\t\tif (!preparation) {\n\t\t\t\tthrow new Error(NOTHING_TO_COMPACT_WITHIN_KEEP_WINDOW);\n\t\t\t}\n\n\t\t\tconst extensionRunner = this.host.getExtensionRunner();\n\t\t\tif (extensionRunner.hasHandlers(\"session_before_compact\")) {\n\t\t\t\tconst extensionResult = (await extensionRunner.emit({\n\t\t\t\t\ttype: \"session_before_compact\",\n\t\t\t\t\tpreparation,\n\t\t\t\t\tbranchEntries: pathEntries,\n\t\t\t\t\tcustomInstructions: undefined,\n\t\t\t\t\treason,\n\t\t\t\t\ttiming,\n\t\t\t\t\twillRetry,\n\t\t\t\t\tsignal: controller.signal,\n\t\t\t\t})) as SessionBeforeCompactResult | undefined;\n\n\t\t\t\tif (extensionResult?.cancel) {\n\t\t\t\t\tthis.host.emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t});\n\t\t\t\t\tawait this.host.emitSessionCompactFailed({\n\t\t\t\t\t\treason,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\tfromExtension: false,\n\t\t\t\t\t});\n\t\t\t\t\t// A cancel produced by an abort (abortCompaction/parent abort) is not an\n\t\t\t\t\t// extension decision; only a voluntary cancel hands the risk to the extension.\n\t\t\t\t\treturn { compacted: false, shouldContinue: false, cancelled: !controller.signal.aborted };\n\t\t\t\t}\n\n\t\t\t\tif (extensionResult?.compaction) {\n\t\t\t\t\textensionCompaction = extensionResult.compaction;\n\t\t\t\t\tfromExtension = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet summary: string;\n\t\t\tlet firstKeptEntryId: string;\n\t\t\tlet tokensBefore: number;\n\t\t\tlet usage: Usage | undefined;\n\t\t\tlet details: unknown;\n\n\t\t\tif (extensionCompaction) {\n\t\t\t\t// Extension provided compaction content\n\t\t\t\tsummary = extensionCompaction.summary;\n\t\t\t\tfirstKeptEntryId = extensionCompaction.firstKeptEntryId;\n\t\t\t\ttokensBefore = extensionCompaction.tokensBefore;\n\t\t\t\tusage = extensionCompaction.usage;\n\t\t\t\tdetails = extensionCompaction.details;\n\t\t\t} else {\n\t\t\t\tlet requestModel = model;\n\t\t\t\tlet apiKey: string | undefined;\n\t\t\t\tlet headers: Record<string, string> | undefined;\n\t\t\t\tlet env: Record<string, string> | undefined;\n\t\t\t\tif (streamFunction === streamSimple) {\n\t\t\t\t\t({ model: requestModel, apiKey, headers, env } = await this.host.getRequiredRequestAuth(model));\n\t\t\t\t} else {\n\t\t\t\t\t({\n\t\t\t\t\t\tmodel: requestModel,\n\t\t\t\t\t\tapiKey,\n\t\t\t\t\t\theaders,\n\t\t\t\t\t\tenv,\n\t\t\t\t\t} = await this.host.getSummarizationRequestAuth(model, streamFunction));\n\t\t\t\t}\n\t\t\t\tif (controller.signal.aborted) {\n\t\t\t\t\tthis.host.emit({\n\t\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\t\treason,\n\t\t\t\t\t\tresult: undefined,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t});\n\t\t\t\t\tawait this.host.emitSessionCompactFailed({\n\t\t\t\t\t\treason,\n\t\t\t\t\t\taborted: true,\n\t\t\t\t\t\twillRetry: false,\n\t\t\t\t\t\tfromExtension: false,\n\t\t\t\t\t});\n\t\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t\t}\n\n\t\t\t\t// Generate compaction result\n\t\t\t\tconst compactResult = await compact(\n\t\t\t\t\tpreparation,\n\t\t\t\t\trequestModel,\n\t\t\t\t\tapiKey,\n\t\t\t\t\theaders,\n\t\t\t\t\tundefined,\n\t\t\t\t\tcontroller.signal,\n\t\t\t\t\tthinkingLevel,\n\t\t\t\t\tstreamFunction,\n\t\t\t\t\tenv,\n\t\t\t\t\tretrySettings,\n\t\t\t\t\tthis.host.summarizationRetryCallbacks({ source: \"compaction\", reason }),\n\t\t\t\t);\n\t\t\t\tsummary = compactResult.summary;\n\t\t\t\tfirstKeptEntryId = compactResult.firstKeptEntryId;\n\t\t\t\ttokensBefore = compactResult.tokensBefore;\n\t\t\t\tusage = compactResult.usage;\n\t\t\t\tdetails = compactResult.details;\n\t\t\t}\n\n\t\t\tif (controller.signal.aborted) {\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t});\n\t\t\t\tawait this.host.emitSessionCompactFailed({\n\t\t\t\t\treason,\n\t\t\t\t\taborted: true,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\tfromExtension,\n\t\t\t\t});\n\t\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t\t}\n\n\t\t\tthis.host.sessionManager.appendCompaction(\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\tdetails,\n\t\t\t\tfromExtension,\n\t\t\t\tusage,\n\t\t\t);\n\t\t\tconst newEntries = this.host.sessionManager.getEntries();\n\t\t\tconst sessionContext = this.host.sessionManager.buildSessionContext();\n\t\t\tthis.host.agent.state.messages = sessionContext.messages;\n\t\t\tif (willRetry) {\n\t\t\t\tconst messages = this.host.agent.state.messages;\n\t\t\t\tconst lastMsg = messages[messages.length - 1];\n\t\t\t\t// The overflow response was persisted on message_end before checkCompaction() removed it\n\t\t\t\t// from agent state. Rebuilding state from the new compaction can restore that kept entry,\n\t\t\t\t// leaving an assistant as the final message. agent.continue() rejects that state, so remove\n\t\t\t\t// the retriable error or truncated-length response again before continuing the interrupted turn.\n\t\t\t\tif (\n\t\t\t\t\tlastMsg?.role === \"assistant\" &&\n\t\t\t\t\t((lastMsg as AssistantMessage).stopReason === \"error\" ||\n\t\t\t\t\t\t(lastMsg as AssistantMessage).stopReason === \"length\")\n\t\t\t\t) {\n\t\t\t\t\tthis.host.agent.state.messages = messages.slice(0, -1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst estimatedTokensAfter = this.estimateContextTokens(this.host.agent.state.messages);\n\t\t\tconst contextStillOverThreshold = shouldCompact(estimatedTokensAfter, model.contextWindow, settings);\n\t\t\tconst effectiveWillRetry = willRetry && !contextStillOverThreshold;\n\n\t\t\t// Get the saved compaction entry for the extension event\n\t\t\tconst savedCompactionEntry = newEntries.find((e) => e.type === \"compaction\" && e.summary === summary) as\n\t\t\t\t| CompactionEntry\n\t\t\t\t| undefined;\n\n\t\t\tif (savedCompactionEntry) {\n\t\t\t\tawait extensionRunner.emit({\n\t\t\t\t\ttype: \"session_compact\",\n\t\t\t\t\tcompactionEntry: savedCompactionEntry,\n\t\t\t\t\tfromExtension,\n\t\t\t\t\treason,\n\t\t\t\t\twillRetry: effectiveWillRetry,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result: CompactionResult = {\n\t\t\t\tsummary,\n\t\t\t\tfirstKeptEntryId,\n\t\t\t\ttokensBefore,\n\t\t\t\testimatedTokensAfter,\n\t\t\t\tusage,\n\t\t\t\tdetails,\n\t\t\t};\n\t\t\tthis.host.emit({\n\t\t\t\ttype: \"compaction_end\",\n\t\t\t\treason,\n\t\t\t\tresult,\n\t\t\t\taborted: false,\n\t\t\t\twillRetry: effectiveWillRetry,\n\t\t\t\t...(contextStillOverThreshold ? { errorMessage: CONTEXT_REMAINS_OVER_COMPACTION_THRESHOLD } : {}),\n\t\t\t});\n\t\t\tif (contextStillOverThreshold) {\n\t\t\t\treturn { compacted: true, shouldContinue: false, mustStop: true };\n\t\t\t}\n\n\t\t\tif (effectiveWillRetry) {\n\t\t\t\treturn { compacted: true, shouldContinue: true };\n\t\t\t}\n\n\t\t\t// Auto-compaction can complete while follow-up/steering/custom messages are waiting.\n\t\t\t// Continue once so queued messages are delivered.\n\t\t\treturn { compacted: true, shouldContinue: this.host.agent.hasQueuedMessages() };\n\t\t} catch (error) {\n\t\t\tconst aborted = controller?.signal.aborted || (error instanceof Error && error.name === \"AbortError\");\n\t\t\tconst message = error instanceof Error ? error.message : \"compaction failed\";\n\t\t\tif (started) {\n\t\t\t\tconst errorMessage = aborted\n\t\t\t\t\t? undefined\n\t\t\t\t\t: reason === \"overflow\"\n\t\t\t\t\t\t? `Context overflow recovery failed: ${message}`\n\t\t\t\t\t\t: `Auto-compaction failed: ${message}`;\n\t\t\t\tthis.host.emit({\n\t\t\t\t\ttype: \"compaction_end\",\n\t\t\t\t\treason,\n\t\t\t\t\tresult: undefined,\n\t\t\t\t\taborted,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\t...(errorMessage ? { errorMessage } : {}),\n\t\t\t\t});\n\t\t\t\tawait this.host.emitSessionCompactFailed({\n\t\t\t\t\treason,\n\t\t\t\t\terrorMessage,\n\t\t\t\t\taborted,\n\t\t\t\t\twillRetry: false,\n\t\t\t\t\tfromExtension,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn { compacted: false, shouldContinue: false };\n\t\t} finally {\n\t\t\tremoveParentAbortListener?.();\n\t\t\tif (this._abortController === controller) {\n\t\t\t\tthis._abortController = undefined;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
|
package/dist/core/defaults.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/core/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,eAAO,MAAM,sBAAsB,EAAE,aAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/core/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,eAAO,MAAM,sBAAsB,EAAE,aAAwB,CAAC;AAC9D,eAAO,MAAM,sBAAsB,EAAE,SAAS,aAAa,EAQ1D,CAAC"}
|
package/dist/core/defaults.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/core/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAkB,QAAQ,CAAC","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\n\nexport const DEFAULT_THINKING_LEVEL: ThinkingLevel = \"medium\";\n"]}
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/core/defaults.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAkB,QAAQ,CAAC;AAC9D,MAAM,CAAC,MAAM,sBAAsB,GAA6B;IAC/D,KAAK;IACL,SAAS;IACT,KAAK;IACL,QAAQ;IACR,MAAM;IACN,OAAO;IACP,KAAK;CACL,CAAC","sourcesContent":["import type { ThinkingLevel } from \"@earendil-works/pi-agent-core\";\n\nexport const DEFAULT_THINKING_LEVEL: ThinkingLevel = \"medium\";\nexport const THINKING_LEVEL_OPTIONS: readonly ThinkingLevel[] = [\n\t\"off\",\n\t\"minimal\",\n\t\"low\",\n\t\"medium\",\n\t\"high\",\n\t\"xhigh\",\n\t\"max\",\n];\n"]}
|
|
@@ -6,7 +6,7 @@ export type { SourceInfo } from "../source-info.ts";
|
|
|
6
6
|
export { createExtensionRuntime, discoverAndLoadExtensions, loadExtensionFromFactory, loadExtensions, } from "./loader.ts";
|
|
7
7
|
export type { ExtensionErrorListener, ForkHandler, NavigateTreeHandler, NewSessionHandler, ShutdownHandler, SwitchSessionHandler, } from "./runner.ts";
|
|
8
8
|
export { ExtensionRunner } from "./runner.ts";
|
|
9
|
-
export type { AfterProviderResponseEvent, AgentEndEvent, AgentSettledEvent, AgentStartEvent, AgentToolResult, AgentToolUpdateCallback, AppendEntryHandler, AppKeybinding, AutocompleteProviderFactory, BashToolCallEvent, BashToolResultEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, BuildSystemPromptOptions, CompactionTiming, CompactOptions, ContextEvent, ContextEventResult, ContextUsage, CustomToolCallEvent, CustomToolResultEvent, EditorFactory, EditToolCallEvent, EditToolResultEvent, EntryRenderer, EntryRenderOptions, ExecOptions, ExecResult, Extension, ExtensionActions, ExtensionAPI, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFactory, ExtensionFlag, ExtensionHandler, ExtensionMode, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, FindToolCallEvent, FindToolResultEvent, GetActiveToolsHandler, GetAllToolsHandler, GetCommandsHandler, GetThinkingLevelHandler, GrepToolCallEvent, GrepToolResultEvent, InlineExtension, InputEvent, InputEventResult, InputSource, KeybindingsManager, LoadExtensionsResult, LsToolCallEvent, LsToolResultEvent, MarkdownTransformContext, MarkdownTransformer, MessageEndEvent, MessageRenderer, MessageRenderOptions, MessageStartEvent, MessageUpdateEvent, ModelSelectEvent, ModelSelectSource, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventDecision, ProjectTrustEventResult, ProjectTrustHandler, ProviderConfig, ProviderModelConfig, ReadToolCallEvent, ReadToolResultEvent, RegisteredCommand, RegisteredTool, ReplacedSessionContext, ResolvedCommand, ResourcesDiscoverEvent, ResourcesDiscoverResult, SendMessageHandler, SendUserMessageHandler, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeForkEvent, SessionBeforeForkResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionCompactEvent, SessionEvent, SessionInfoChangedEvent, SessionShutdownEvent, SessionStartEvent, SessionTreeEvent, SetActiveToolsHandler, SetLabelHandler, SetModelHandler, SetThinkingLevelHandler, ShellSettings, TerminalInputHandler, ToolCallEvent, ToolCallEventResult, ToolDefinition, ToolExecutionEndEvent, ToolExecutionMode, ToolExecutionStartEvent, ToolExecutionUpdateEvent, ToolInfo, ToolRenderResultOptions, ToolResultEvent, ToolResultEventResult, TreePreparation, TurnEndEvent, TurnStartEvent, UserBashEvent, UserBashEventResult, WidgetPlacement, WorkingIndicatorOptions, WriteToolCallEvent, WriteToolResultEvent, } from "./types.ts";
|
|
10
|
-
export { defineTool, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isReadToolResult, isStaleExtensionContextError, isToolCallEventType, isWriteToolResult, STALE_EXTENSION_CONTEXT_MESSAGE, } from "./types.ts";
|
|
9
|
+
export type { AfterProviderResponseEvent, AgentEndEvent, AgentSettledEvent, AgentStartEvent, AgentToolResult, AgentToolUpdateCallback, AppendEntryHandler, AppKeybinding, AutocompleteProviderFactory, BashToolCallEvent, BashToolResultEvent, BeforeAgentStartEvent, BeforeAgentStartEventResult, BeforeProviderHeadersEvent, BeforeProviderRequestEvent, BeforeProviderRequestEventResult, BuildSystemPromptOptions, CompactionTiming, CompactOptions, ContextEvent, ContextEventResult, ContextUsage, CustomToolCallEvent, CustomToolResultEvent, EditorFactory, EditToolCallEvent, EditToolResultEvent, EntryRenderer, EntryRenderOptions, ExecOptions, ExecResult, Extension, ExtensionActions, ExtensionAPI, ExtensionCommandContext, ExtensionCommandContextActions, ExtensionContext, ExtensionContextActions, ExtensionError, ExtensionEvent, ExtensionFactory, ExtensionFlag, ExtensionHandler, ExtensionMode, ExtensionRuntime, ExtensionShortcut, ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetOptions, FindToolCallEvent, FindToolResultEvent, GetActiveToolsHandler, GetAllToolsHandler, GetCommandsHandler, GetThinkingLevelHandler, GrepToolCallEvent, GrepToolResultEvent, InlineExtension, InputEvent, InputEventResult, InputSource, KeybindingsManager, LoadExtensionsResult, LsToolCallEvent, LsToolResultEvent, MarkdownTransformContext, MarkdownTransformer, MessageEndEvent, MessageRenderer, MessageRenderOptions, MessageStartEvent, MessageUpdateEvent, ModelSelectEvent, ModelSelectSource, PowerShellToolCallEvent, PowerShellToolResultEvent, ProjectTrustContext, ProjectTrustEvent, ProjectTrustEventDecision, ProjectTrustEventResult, ProjectTrustHandler, ProviderConfig, ProviderModelConfig, ReadToolCallEvent, ReadToolResultEvent, RegisteredCommand, RegisteredTool, ReplacedSessionContext, ResolvedCommand, ResourcesDiscoverEvent, ResourcesDiscoverResult, SendMessageHandler, SendUserMessageHandler, SessionBeforeCompactEvent, SessionBeforeCompactResult, SessionBeforeForkEvent, SessionBeforeForkResult, SessionBeforeSwitchEvent, SessionBeforeSwitchResult, SessionBeforeTreeEvent, SessionBeforeTreeResult, SessionCompactEvent, SessionCompactFailedEvent, SessionEvent, SessionInfoChangedEvent, SessionShutdownEvent, SessionStartEvent, SessionTreeEvent, SetActiveToolsHandler, SetLabelHandler, SetModelHandler, SetThinkingLevelHandler, ShellSettings, TerminalInputHandler, ToolCallEvent, ToolCallEventResult, ToolDefinition, ToolExecutionEndEvent, ToolExecutionMode, ToolExecutionStartEvent, ToolExecutionUpdateEvent, ToolInfo, ToolRenderResultOptions, ToolResultEvent, ToolResultEventResult, TreePreparation, TurnEndEvent, TurnStartEvent, UserBashEvent, UserBashEventResult, WidgetPlacement, WorkingIndicatorOptions, WriteToolCallEvent, WriteToolResultEvent, } from "./types.ts";
|
|
10
|
+
export { defineTool, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isPowerShellToolResult, isReadToolResult, isStaleExtensionContextError, isToolCallEventType, isWriteToolResult, STALE_EXTENSION_CONTEXT_MESSAGE, } from "./types.ts";
|
|
11
11
|
export { wrapRegisteredTool, wrapRegisteredTools } from "./wrapper.ts";
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
export { createExtensionRuntime, discoverAndLoadExtensions, loadExtensionFromFactory, loadExtensions, } from "./loader.js";
|
|
5
5
|
export { ExtensionRunner } from "./runner.js";
|
|
6
6
|
// Type guards
|
|
7
|
-
export { defineTool, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isReadToolResult, isStaleExtensionContextError, isToolCallEventType, isWriteToolResult, STALE_EXTENSION_CONTEXT_MESSAGE, } from "./types.js";
|
|
7
|
+
export { defineTool, isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isPowerShellToolResult, isReadToolResult, isStaleExtensionContextError, isToolCallEventType, isWriteToolResult, STALE_EXTENSION_CONTEXT_MESSAGE, } from "./types.js";
|
|
8
8
|
export { wrapRegisteredTool, wrapRegisteredTools } from "./wrapper.js";
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/extensions/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EACN,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,cAAc,GACd,MAAM,aAAa,CAAC;AASrB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA8J9C,cAAc;AACd,OAAO,EACN,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,gBAAgB,EAChB,4BAA4B,EAC5B,mBAAmB,EACnB,iBAAiB,EACjB,+BAA+B,GAC/B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC","sourcesContent":["/**\n * Extension system for lifecycle events and custom tools.\n */\n\nexport type { SlashCommandInfo, SlashCommandSource } from \"../slash-commands.ts\";\nexport type { SourceInfo } from \"../source-info.ts\";\nexport {\n\tcreateExtensionRuntime,\n\tdiscoverAndLoadExtensions,\n\tloadExtensionFromFactory,\n\tloadExtensions,\n} from \"./loader.ts\";\nexport type {\n\tExtensionErrorListener,\n\tForkHandler,\n\tNavigateTreeHandler,\n\tNewSessionHandler,\n\tShutdownHandler,\n\tSwitchSessionHandler,\n} from \"./runner.ts\";\nexport { ExtensionRunner } from \"./runner.ts\";\nexport type {\n\tAfterProviderResponseEvent,\n\tAgentEndEvent,\n\tAgentSettledEvent,\n\tAgentStartEvent,\n\t// Re-exports\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n\tAppendEntryHandler,\n\t// App keybindings (for custom editors)\n\tAppKeybinding,\n\tAutocompleteProviderFactory,\n\t// Events - Tool (ToolCallEvent types)\n\tBashToolCallEvent,\n\tBashToolResultEvent,\n\tBeforeAgentStartEvent,\n\tBeforeAgentStartEventResult,\n\tBeforeProviderHeadersEvent,\n\tBeforeProviderRequestEvent,\n\tBeforeProviderRequestEventResult,\n\tBuildSystemPromptOptions,\n\t// Context\n\tCompactionTiming,\n\tCompactOptions,\n\t// Events - Agent\n\tContextEvent,\n\t// Event Results\n\tContextEventResult,\n\tContextUsage,\n\tCustomToolCallEvent,\n\tCustomToolResultEvent,\n\tEditorFactory,\n\tEditToolCallEvent,\n\tEditToolResultEvent,\n\t// Message and Entry Rendering\n\tEntryRenderer,\n\tEntryRenderOptions,\n\tExecOptions,\n\tExecResult,\n\tExtension,\n\tExtensionActions,\n\t// API\n\tExtensionAPI,\n\tExtensionCommandContext,\n\tExtensionCommandContextActions,\n\tExtensionContext,\n\tExtensionContextActions,\n\t// Errors\n\tExtensionError,\n\tExtensionEvent,\n\tExtensionFactory,\n\tExtensionFlag,\n\tExtensionHandler,\n\tExtensionMode,\n\t// Runtime\n\tExtensionRuntime,\n\tExtensionShortcut,\n\tExtensionUIContext,\n\tExtensionUIDialogOptions,\n\tExtensionWidgetOptions,\n\tFindToolCallEvent,\n\tFindToolResultEvent,\n\tGetActiveToolsHandler,\n\tGetAllToolsHandler,\n\tGetCommandsHandler,\n\tGetThinkingLevelHandler,\n\tGrepToolCallEvent,\n\tGrepToolResultEvent,\n\tInlineExtension,\n\t// Events - Input\n\tInputEvent,\n\tInputEventResult,\n\tInputSource,\n\tKeybindingsManager,\n\tLoadExtensionsResult,\n\tLsToolCallEvent,\n\tLsToolResultEvent,\n\tMarkdownTransformContext,\n\tMarkdownTransformer,\n\t// Events - Message\n\tMessageEndEvent,\n\tMessageRenderer,\n\tMessageRenderOptions,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tModelSelectEvent,\n\tModelSelectSource,\n\tPowerShellToolCallEvent,\n\tPowerShellToolResultEvent,\n\tProjectTrustContext,\n\tProjectTrustEvent,\n\tProjectTrustEventDecision,\n\tProjectTrustEventResult,\n\tProjectTrustHandler,\n\t// Provider Registration\n\tProviderConfig,\n\tProviderModelConfig,\n\tReadToolCallEvent,\n\tReadToolResultEvent,\n\t// Commands\n\tRegisteredCommand,\n\tRegisteredTool,\n\tReplacedSessionContext,\n\tResolvedCommand,\n\t// Events - Resources\n\tResourcesDiscoverEvent,\n\tResourcesDiscoverResult,\n\tSendMessageHandler,\n\tSendUserMessageHandler,\n\tSessionBeforeCompactEvent,\n\tSessionBeforeCompactResult,\n\tSessionBeforeForkEvent,\n\tSessionBeforeForkResult,\n\tSessionBeforeSwitchEvent,\n\tSessionBeforeSwitchResult,\n\tSessionBeforeTreeEvent,\n\tSessionBeforeTreeResult,\n\tSessionCompactEvent,\n\tSessionCompactFailedEvent,\n\tSessionEvent,\n\tSessionInfoChangedEvent,\n\tSessionShutdownEvent,\n\t// Events - Session\n\tSessionStartEvent,\n\tSessionTreeEvent,\n\tSetActiveToolsHandler,\n\tSetLabelHandler,\n\tSetModelHandler,\n\tSetThinkingLevelHandler,\n\tShellSettings,\n\tTerminalInputHandler,\n\t// Events - Tool\n\tToolCallEvent,\n\tToolCallEventResult,\n\t// Tools\n\tToolDefinition,\n\t// Events - Tool Execution\n\tToolExecutionEndEvent,\n\t// Tool execution mode\n\tToolExecutionMode,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tToolInfo,\n\tToolRenderResultOptions,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTreePreparation,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\t// Events - User Bash\n\tUserBashEvent,\n\tUserBashEventResult,\n\tWidgetPlacement,\n\tWorkingIndicatorOptions,\n\tWriteToolCallEvent,\n\tWriteToolResultEvent,\n} from \"./types.ts\";\n// Type guards\nexport {\n\tdefineTool,\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisPowerShellToolResult,\n\tisReadToolResult,\n\tisStaleExtensionContextError,\n\tisToolCallEventType,\n\tisWriteToolResult,\n\tSTALE_EXTENSION_CONTEXT_MESSAGE,\n} from \"./types.ts\";\nexport { wrapRegisteredTool, wrapRegisteredTools } from \"./wrapper.ts\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAMhE,OAAO,EAEN,KAAK,SAAS,EAEd,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAOzB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/core/extensions/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,OAAO,EAAkB,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAMhE,OAAO,EAEN,KAAK,SAAS,EAEd,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EAOzB,MAAM,YAAY,CAAC;AAuGpB,wBAAgB,mBAAmB,IAAI,IAAI,CAI1C;AAWD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAkEzD;AAwVD;;GAEG;AACH,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,gBAAgB,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,gBAAgB,EACzB,aAAa,SAAa,GACxB,OAAO,CAAC,SAAS,CAAC,CAGpB;AA6CD,wBAAsB,cAAc,CACnC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AAED,wBAAsB,oBAAoB,CACzC,KAAK,EAAE,MAAM,EAAE,EACf,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,QAAQ,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AA2FD;;GAEG;AACH,wBAAsB,yBAAyB,CAC9C,eAAe,EAAE,MAAM,EAAE,EACzB,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAsB,EAChC,QAAQ,CAAC,EAAE,QAAQ,GACjB,OAAO,CAAC,oBAAoB,CAAC,CA2C/B"}
|
|
@@ -29,7 +29,7 @@ import { readPiManifest } from "../pi-manifest.js";
|
|
|
29
29
|
import { createSyntheticSourceInfo } from "../source-info.js";
|
|
30
30
|
import { time } from "../timings.js";
|
|
31
31
|
import { STALE_EXTENSION_CONTEXT_MESSAGE, } from "./types.js";
|
|
32
|
-
/** Modules available to extensions via virtualModules (for compiled
|
|
32
|
+
/** Modules available to extensions via virtualModules (for compiled binaries) */
|
|
33
33
|
const VIRTUAL_MODULES = {
|
|
34
34
|
typebox: _bundledTypebox,
|
|
35
35
|
"typebox/compile": _bundledTypeboxCompile,
|
|
@@ -56,10 +56,13 @@ const VIRTUAL_MODULES = {
|
|
|
56
56
|
"@mariozechner/pi-coding-agent": _bundledPiCodingAgent,
|
|
57
57
|
};
|
|
58
58
|
const require = createRequire(import.meta.url);
|
|
59
|
+
const isNodeSeaBinary = ("sea" in process.features && process.features.sea === true) ||
|
|
60
|
+
process.getBuiltinModule("node:sea")?.isSea() === true;
|
|
61
|
+
const isBundledNode = typeof PI_BUNDLED_NODE !== "undefined" && PI_BUNDLED_NODE;
|
|
59
62
|
const isTypeScriptSourceRuntime = !isBunBinary && path.extname(fileURLToPath(import.meta.url)) === ".ts";
|
|
60
63
|
/**
|
|
61
64
|
* Get aliases for jiti (used in built Node.js mode).
|
|
62
|
-
* In
|
|
65
|
+
* In compiled binary mode, virtualModules is used instead.
|
|
63
66
|
*/
|
|
64
67
|
let _aliases = null;
|
|
65
68
|
function getAliases() {
|
|
@@ -196,16 +199,37 @@ export function createExtensionRuntime() {
|
|
|
196
199
|
* Action methods delegate to the shared runtime.
|
|
197
200
|
*/
|
|
198
201
|
function createExtensionAPI(extension, runtime, cwd, eventBus) {
|
|
202
|
+
const pendingFlagValues = new Map();
|
|
203
|
+
const pendingRuntimeChanges = [];
|
|
204
|
+
const loadingUnsubscribers = [];
|
|
205
|
+
let state = "loading";
|
|
206
|
+
const assertActive = () => {
|
|
207
|
+
if (state === "failed") {
|
|
208
|
+
throw new Error(`Extension "${extension.path}" failed to load and its API is no longer active.`);
|
|
209
|
+
}
|
|
210
|
+
runtime.assertActive();
|
|
211
|
+
};
|
|
212
|
+
const applyRuntimeChange = (change) => {
|
|
213
|
+
if (state === "loading")
|
|
214
|
+
pendingRuntimeChanges.push(change);
|
|
215
|
+
else
|
|
216
|
+
change();
|
|
217
|
+
};
|
|
218
|
+
const clearPending = () => {
|
|
219
|
+
pendingFlagValues.clear();
|
|
220
|
+
pendingRuntimeChanges.length = 0;
|
|
221
|
+
loadingUnsubscribers.length = 0;
|
|
222
|
+
};
|
|
199
223
|
const api = {
|
|
200
224
|
// Registration methods - write to extension
|
|
201
225
|
on(event, handler) {
|
|
202
|
-
|
|
226
|
+
assertActive();
|
|
203
227
|
const list = extension.handlers.get(event) ?? [];
|
|
204
228
|
list.push(handler);
|
|
205
229
|
extension.handlers.set(event, list);
|
|
206
230
|
},
|
|
207
231
|
registerTool(tool) {
|
|
208
|
-
|
|
232
|
+
assertActive();
|
|
209
233
|
extension.tools.set(tool.name, {
|
|
210
234
|
definition: tool,
|
|
211
235
|
sourceInfo: extension.sourceInfo,
|
|
@@ -213,7 +237,7 @@ function createExtensionAPI(extension, runtime, cwd, eventBus) {
|
|
|
213
237
|
runtime.refreshTools();
|
|
214
238
|
},
|
|
215
239
|
registerCommand(name, options) {
|
|
216
|
-
|
|
240
|
+
assertActive();
|
|
217
241
|
extension.commands.set(name, {
|
|
218
242
|
name,
|
|
219
243
|
sourceInfo: extension.sourceInfo,
|
|
@@ -221,119 +245,154 @@ function createExtensionAPI(extension, runtime, cwd, eventBus) {
|
|
|
221
245
|
});
|
|
222
246
|
},
|
|
223
247
|
registerShortcut(shortcut, options) {
|
|
224
|
-
|
|
248
|
+
assertActive();
|
|
225
249
|
extension.shortcuts.set(shortcut, { shortcut, extensionPath: extension.path, ...options });
|
|
226
250
|
},
|
|
227
251
|
registerFlag(name, options) {
|
|
228
|
-
|
|
252
|
+
assertActive();
|
|
253
|
+
if (options.default !== undefined && typeof options.default !== options.type) {
|
|
254
|
+
throw new Error(`Invalid default for flag "${name}": expected ${options.type}, got ${typeof options.default}`);
|
|
255
|
+
}
|
|
229
256
|
extension.flags.set(name, { name, extensionPath: extension.path, ...options });
|
|
230
257
|
if (options.default !== undefined && !runtime.flagValues.has(name)) {
|
|
231
|
-
|
|
258
|
+
if (state === "loading") {
|
|
259
|
+
if (!pendingFlagValues.has(name))
|
|
260
|
+
pendingFlagValues.set(name, options.default);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
runtime.flagValues.set(name, options.default);
|
|
264
|
+
}
|
|
232
265
|
}
|
|
233
266
|
},
|
|
234
267
|
registerMessageRenderer(customType, renderer) {
|
|
235
|
-
|
|
268
|
+
assertActive();
|
|
236
269
|
extension.messageRenderers.set(customType, renderer);
|
|
237
270
|
},
|
|
238
271
|
registerMarkdownTransformer(transformer) {
|
|
239
|
-
|
|
272
|
+
assertActive();
|
|
240
273
|
extension.markdownTransformer = transformer;
|
|
241
274
|
},
|
|
242
275
|
registerEntryRenderer(customType, renderer) {
|
|
243
|
-
|
|
276
|
+
assertActive();
|
|
244
277
|
extension.entryRenderers ??= new Map();
|
|
245
278
|
extension.entryRenderers.set(customType, renderer);
|
|
246
279
|
},
|
|
247
280
|
// Flag access - checks extension registered it, reads from runtime
|
|
248
281
|
getFlag(name) {
|
|
249
|
-
|
|
282
|
+
assertActive();
|
|
250
283
|
if (!extension.flags.has(name))
|
|
251
284
|
return undefined;
|
|
252
|
-
return runtime.flagValues.get(name);
|
|
285
|
+
return runtime.flagValues.has(name) ? runtime.flagValues.get(name) : pendingFlagValues.get(name);
|
|
253
286
|
},
|
|
254
287
|
// Action methods - delegate to shared runtime
|
|
255
288
|
sendMessage(message, options) {
|
|
256
|
-
|
|
289
|
+
assertActive();
|
|
257
290
|
runtime.sendMessage(message, options);
|
|
258
291
|
},
|
|
259
292
|
sendUserMessage(content, options) {
|
|
260
|
-
|
|
293
|
+
assertActive();
|
|
261
294
|
runtime.sendUserMessage(content, options);
|
|
262
295
|
},
|
|
263
296
|
appendEntry(customType, data) {
|
|
264
|
-
|
|
297
|
+
assertActive();
|
|
265
298
|
runtime.appendEntry(customType, data);
|
|
266
299
|
},
|
|
267
300
|
setSessionName(name) {
|
|
268
|
-
|
|
301
|
+
assertActive();
|
|
269
302
|
runtime.setSessionName(name);
|
|
270
303
|
},
|
|
271
304
|
getSessionName() {
|
|
272
|
-
|
|
305
|
+
assertActive();
|
|
273
306
|
return runtime.getSessionName();
|
|
274
307
|
},
|
|
275
308
|
setLabel(entryId, label) {
|
|
276
|
-
|
|
309
|
+
assertActive();
|
|
277
310
|
runtime.setLabel(entryId, label);
|
|
278
311
|
},
|
|
279
312
|
exec(command, args, options) {
|
|
280
|
-
|
|
313
|
+
assertActive();
|
|
281
314
|
return execCommand(command, args, options?.cwd ?? cwd, options);
|
|
282
315
|
},
|
|
283
316
|
getActiveTools() {
|
|
284
|
-
|
|
317
|
+
assertActive();
|
|
285
318
|
return runtime.getActiveTools();
|
|
286
319
|
},
|
|
287
320
|
getAllTools() {
|
|
288
|
-
|
|
321
|
+
assertActive();
|
|
289
322
|
return runtime.getAllTools();
|
|
290
323
|
},
|
|
291
324
|
setActiveTools(toolNames) {
|
|
292
|
-
|
|
325
|
+
assertActive();
|
|
293
326
|
runtime.setActiveTools(toolNames);
|
|
294
327
|
},
|
|
295
328
|
getCommands() {
|
|
296
|
-
|
|
329
|
+
assertActive();
|
|
297
330
|
return runtime.getCommands();
|
|
298
331
|
},
|
|
299
332
|
setModel(model) {
|
|
300
|
-
|
|
333
|
+
assertActive();
|
|
301
334
|
return runtime.setModel(model);
|
|
302
335
|
},
|
|
303
336
|
getThinkingLevel() {
|
|
304
|
-
|
|
337
|
+
assertActive();
|
|
305
338
|
return runtime.getThinkingLevel();
|
|
306
339
|
},
|
|
307
340
|
setThinkingLevel(level) {
|
|
308
|
-
|
|
341
|
+
assertActive();
|
|
309
342
|
runtime.setThinkingLevel(level);
|
|
310
343
|
},
|
|
311
344
|
registerProvider(providerOrName, config) {
|
|
312
|
-
|
|
345
|
+
assertActive();
|
|
313
346
|
if (typeof providerOrName === "string") {
|
|
314
347
|
if (!config)
|
|
315
348
|
throw new Error("Provider config is required when registering by name");
|
|
316
|
-
runtime.registerProvider(providerOrName, config, extension.path);
|
|
349
|
+
applyRuntimeChange(() => runtime.registerProvider(providerOrName, config, extension.path));
|
|
317
350
|
return;
|
|
318
351
|
}
|
|
319
|
-
runtime.registerNativeProvider(providerOrName, extension.path);
|
|
352
|
+
applyRuntimeChange(() => runtime.registerNativeProvider(providerOrName, extension.path));
|
|
320
353
|
},
|
|
321
354
|
unregisterProvider(name) {
|
|
322
|
-
|
|
323
|
-
runtime.unregisterProvider(name, extension.path);
|
|
355
|
+
assertActive();
|
|
356
|
+
applyRuntimeChange(() => runtime.unregisterProvider(name, extension.path));
|
|
324
357
|
},
|
|
325
358
|
events: {
|
|
326
359
|
emit(channel, data) {
|
|
327
|
-
|
|
360
|
+
assertActive();
|
|
328
361
|
eventBus.emit(channel, data);
|
|
329
362
|
},
|
|
330
363
|
on(channel, handler) {
|
|
331
|
-
|
|
332
|
-
|
|
364
|
+
assertActive();
|
|
365
|
+
const unsubscribe = runtime.trackEventBusSubscription(eventBus.on(channel, handler));
|
|
366
|
+
if (state === "loading")
|
|
367
|
+
loadingUnsubscribers.push(unsubscribe);
|
|
368
|
+
return unsubscribe;
|
|
333
369
|
},
|
|
334
370
|
},
|
|
335
371
|
};
|
|
336
|
-
return
|
|
372
|
+
return {
|
|
373
|
+
api,
|
|
374
|
+
commit: () => {
|
|
375
|
+
if (state !== "loading")
|
|
376
|
+
return;
|
|
377
|
+
runtime.assertActive();
|
|
378
|
+
for (const [name, value] of pendingFlagValues) {
|
|
379
|
+
if (!runtime.flagValues.has(name))
|
|
380
|
+
runtime.flagValues.set(name, value);
|
|
381
|
+
}
|
|
382
|
+
for (const apply of pendingRuntimeChanges)
|
|
383
|
+
apply();
|
|
384
|
+
state = "active";
|
|
385
|
+
clearPending();
|
|
386
|
+
},
|
|
387
|
+
discard: () => {
|
|
388
|
+
if (state !== "loading")
|
|
389
|
+
return;
|
|
390
|
+
state = "failed";
|
|
391
|
+
for (const unsubscribe of loadingUnsubscribers)
|
|
392
|
+
unsubscribe();
|
|
393
|
+
clearPending();
|
|
394
|
+
},
|
|
395
|
+
};
|
|
337
396
|
}
|
|
338
397
|
function isCurrentCacheToken(cacheToken) {
|
|
339
398
|
return (cacheToken !== undefined &&
|
|
@@ -349,9 +408,10 @@ async function loadExtensionModule(extensionPath, cacheToken) {
|
|
|
349
408
|
}
|
|
350
409
|
const jiti = createJiti(import.meta.url, {
|
|
351
410
|
moduleCache: false,
|
|
352
|
-
//
|
|
353
|
-
// host
|
|
354
|
-
|
|
411
|
+
// Compiled binaries and the bundled Node distribution use embedded modules.
|
|
412
|
+
// Source TypeScript reuses host modules and root tsconfig paths. Unbundled
|
|
413
|
+
// Node builds use dist aliases.
|
|
414
|
+
...(isBunBinary || isNodeSeaBinary || isBundledNode
|
|
355
415
|
? { virtualModules: VIRTUAL_MODULES, tryNative: false }
|
|
356
416
|
: isTypeScriptSourceRuntime
|
|
357
417
|
? { virtualModules: VIRTUAL_MODULES, tsconfigPaths: true }
|
|
@@ -388,6 +448,20 @@ function createExtension(extensionPath, resolvedPath) {
|
|
|
388
448
|
shortcuts: new Map(),
|
|
389
449
|
};
|
|
390
450
|
}
|
|
451
|
+
async function initializeExtension(factory, extensionPath, resolvedPath, cwd, eventBus, runtime) {
|
|
452
|
+
const extension = createExtension(extensionPath, resolvedPath);
|
|
453
|
+
const load = createExtensionAPI(extension, runtime, cwd, eventBus);
|
|
454
|
+
try {
|
|
455
|
+
await factory(load.api);
|
|
456
|
+
load.commit();
|
|
457
|
+
}
|
|
458
|
+
catch (error) {
|
|
459
|
+
load.discard();
|
|
460
|
+
throw error;
|
|
461
|
+
}
|
|
462
|
+
time(`${extensionPath} factory`, "extensions");
|
|
463
|
+
return extension;
|
|
464
|
+
}
|
|
391
465
|
async function loadExtension(extensionPath, cwd, eventBus, runtime, cacheToken) {
|
|
392
466
|
const resolvedPath = resolvePath(extensionPath, cwd, { normalizeUnicodeSpaces: true });
|
|
393
467
|
try {
|
|
@@ -396,10 +470,7 @@ async function loadExtension(extensionPath, cwd, eventBus, runtime, cacheToken)
|
|
|
396
470
|
if (!factory) {
|
|
397
471
|
return { extension: null, error: `Extension does not export a valid factory function: ${extensionPath}` };
|
|
398
472
|
}
|
|
399
|
-
const extension =
|
|
400
|
-
const api = createExtensionAPI(extension, runtime, cwd, eventBus);
|
|
401
|
-
await factory(api);
|
|
402
|
-
time(`${extensionPath} factory`, "extensions");
|
|
473
|
+
const extension = await initializeExtension(factory, extensionPath, resolvedPath, cwd, eventBus, runtime);
|
|
403
474
|
return { extension, error: null };
|
|
404
475
|
}
|
|
405
476
|
catch (err) {
|
|
@@ -411,12 +482,8 @@ async function loadExtension(extensionPath, cwd, eventBus, runtime, cacheToken)
|
|
|
411
482
|
* Create an Extension from an inline factory function.
|
|
412
483
|
*/
|
|
413
484
|
export async function loadExtensionFromFactory(factory, cwd, eventBus, runtime, extensionPath = "<inline>") {
|
|
414
|
-
const extension = createExtension(extensionPath, extensionPath);
|
|
415
485
|
const resolvedCwd = resolvePath(cwd);
|
|
416
|
-
|
|
417
|
-
await factory(api);
|
|
418
|
-
time(`${extensionPath} factory`, "extensions");
|
|
419
|
-
return extension;
|
|
486
|
+
return initializeExtension(factory, extensionPath, extensionPath, resolvedCwd, eventBus, runtime);
|
|
420
487
|
}
|
|
421
488
|
/**
|
|
422
489
|
* Load extensions from paths.
|