@bastani/atomic 0.9.28-alpha.1 → 0.9.28-alpha.3
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 +60 -0
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/native-client-licenses/NOTICE +2 -0
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +34 -0
- package/dist/builtin/workflows/builtin/{chunk-wz8v67bn.js → chunk-aqv8ny38.js} +257 -259
- package/dist/builtin/workflows/builtin/{chunk-f61w0hpm.js → chunk-br4ac9a3.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-tecnpe8j.js → chunk-p3xmajmj.js} +438 -39
- package/dist/builtin/workflows/builtin/chunk-p6jagvyf.js +8 -0
- package/dist/builtin/workflows/builtin/goal.js +2 -2
- package/dist/builtin/workflows/builtin/index.js +4 -4
- package/dist/builtin/workflows/builtin/ralph.js +2 -2
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/src/authoring.d.ts +14 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +111102 -110218
- package/dist/builtin/workflows/src/index.js +42284 -41141
- package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +16 -11
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +16 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +8 -1
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/credential-print.d.ts +1 -1
- package/dist/cli/credential-print.d.ts.map +1 -1
- package/dist/cli/credential-print.js +2 -56
- package/dist/cli/credential-print.js.map +1 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -2
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-accessors.d.ts.map +1 -1
- package/dist/core/agent-session-accessors.js +6 -1
- package/dist/core/agent-session-accessors.js.map +1 -1
- package/dist/core/agent-session-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-compaction.js +20 -3
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +2 -1
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts +6 -0
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +90 -9
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +3 -1
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +14 -1
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +1 -0
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +2 -0
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +6 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +22 -4
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/child-session-options.d.ts.map +1 -1
- package/dist/core/child-session-options.js +17 -2
- package/dist/core/child-session-options.js.map +1 -1
- package/dist/core/compaction/classifier-compaction.d.ts +13 -0
- package/dist/core/compaction/classifier-compaction.d.ts.map +1 -0
- package/dist/core/compaction/classifier-compaction.js +110 -0
- package/dist/core/compaction/classifier-compaction.js.map +1 -0
- package/dist/core/compaction/compaction-boundary.d.ts.map +1 -1
- package/dist/core/compaction/compaction-boundary.js +2 -6
- package/dist/core/compaction/compaction-boundary.js.map +1 -1
- package/dist/core/compaction/compaction-runner.d.ts +16 -1
- package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
- package/dist/core/compaction/compaction-runner.js +97 -12
- package/dist/core/compaction/compaction-runner.js.map +1 -1
- package/dist/core/compaction/compaction-types.d.ts +18 -1
- package/dist/core/compaction/compaction-types.d.ts.map +1 -1
- package/dist/core/compaction/compaction-types.js +1 -1
- package/dist/core/compaction/compaction-types.js.map +1 -1
- package/dist/core/compaction/fallback-planner.d.ts +1 -0
- package/dist/core/compaction/fallback-planner.d.ts.map +1 -1
- package/dist/core/compaction/fallback-planner.js +2 -0
- package/dist/core/compaction/fallback-planner.js.map +1 -1
- package/dist/core/compaction/index.d.ts +3 -0
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/index.js +3 -0
- package/dist/core/compaction/index.js.map +1 -1
- package/dist/core/compaction/model-resolver.d.ts +16 -0
- package/dist/core/compaction/model-resolver.d.ts.map +1 -0
- package/dist/core/compaction/model-resolver.js +18 -0
- package/dist/core/compaction/model-resolver.js.map +1 -0
- package/dist/core/compaction/morph-compaction.d.ts +14 -0
- package/dist/core/compaction/morph-compaction.d.ts.map +1 -0
- package/dist/core/compaction/morph-compaction.js +99 -0
- package/dist/core/compaction/morph-compaction.js.map +1 -0
- package/dist/core/compaction/pi-summary-fallback.d.ts +34 -0
- package/dist/core/compaction/pi-summary-fallback.d.ts.map +1 -0
- package/dist/core/compaction/pi-summary-fallback.js +357 -0
- package/dist/core/compaction/pi-summary-fallback.js.map +1 -0
- package/dist/core/compaction/planner-outcome.d.ts +10 -6
- package/dist/core/compaction/planner-outcome.d.ts.map +1 -1
- package/dist/core/compaction/planner-outcome.js +11 -4
- package/dist/core/compaction/planner-outcome.js.map +1 -1
- package/dist/core/compaction/range-planner-diagnostics.d.ts +3 -1
- package/dist/core/compaction/range-planner-diagnostics.d.ts.map +1 -1
- package/dist/core/compaction/range-planner-diagnostics.js +11 -0
- package/dist/core/compaction/range-planner-diagnostics.js.map +1 -1
- package/dist/core/compaction/range-planner.d.ts +3 -3
- package/dist/core/compaction/range-planner.d.ts.map +1 -1
- package/dist/core/compaction/range-planner.js +59 -28
- package/dist/core/compaction/range-planner.js.map +1 -1
- package/dist/core/compaction/region-trimming.d.ts.map +1 -1
- package/dist/core/compaction/region-trimming.js +7 -0
- package/dist/core/compaction/region-trimming.js.map +1 -1
- package/dist/core/compaction/structured-compaction-input.d.ts +19 -0
- package/dist/core/compaction/structured-compaction-input.d.ts.map +1 -0
- package/dist/core/compaction/structured-compaction-input.js +70 -0
- package/dist/core/compaction/structured-compaction-input.js.map +1 -0
- package/dist/core/compaction/transcript-serialization.d.ts +1 -0
- package/dist/core/compaction/transcript-serialization.d.ts.map +1 -1
- package/dist/core/compaction/transcript-serialization.js +26 -0
- package/dist/core/compaction/transcript-serialization.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +2 -2
- package/dist/core/extensions/api-types.d.ts.map +1 -1
- package/dist/core/extensions/api-types.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +1 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.d.ts +3 -4
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +14 -9
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/runner-context.d.ts +10 -4
- package/dist/core/extensions/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +47 -3
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +10 -3
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +31 -7
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/tool-events.d.ts +1 -1
- package/dist/core/extensions/tool-events.js.map +1 -1
- package/dist/core/extensions/ts-source-specifiers.d.ts +18 -0
- package/dist/core/extensions/ts-source-specifiers.d.ts.map +1 -0
- package/dist/core/extensions/ts-source-specifiers.js +142 -0
- package/dist/core/extensions/ts-source-specifiers.js.map +1 -0
- package/dist/core/extensions/workflow-events.d.ts +49 -0
- package/dist/core/extensions/workflow-events.d.ts.map +1 -1
- package/dist/core/extensions/workflow-events.js.map +1 -1
- package/dist/core/extensions/workflow-run-control-hub.d.ts +16 -4
- package/dist/core/extensions/workflow-run-control-hub.d.ts.map +1 -1
- package/dist/core/extensions/workflow-run-control-hub.js +72 -1
- package/dist/core/extensions/workflow-run-control-hub.js.map +1 -1
- package/dist/core/extensions/workflow-run-control.d.ts +11 -3
- package/dist/core/extensions/workflow-run-control.d.ts.map +1 -1
- package/dist/core/extensions/workflow-run-control.js.map +1 -1
- package/dist/core/messages.d.ts +1 -0
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +5 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +3 -0
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/sdk-exports.d.ts +2 -2
- package/dist/core/sdk-exports.js.map +1 -1
- package/dist/core/sdk-types.d.ts +3 -0
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +17 -8
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager-history.d.ts.map +1 -1
- package/dist/core/session-manager-history.js +4 -2
- package/dist/core/session-manager-history.js.map +1 -1
- package/dist/core/settings-manager-basic-accessors.d.ts +2 -0
- package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
- package/dist/core/settings-manager-basic-accessors.js +29 -0
- package/dist/core/settings-manager-basic-accessors.js.map +1 -1
- package/dist/core/settings-manager-core.js.map +1 -1
- package/dist/core/settings-merge.d.ts +3 -0
- package/dist/core/settings-merge.d.ts.map +1 -1
- package/dist/core/settings-merge.js +18 -4
- package/dist/core/settings-merge.js.map +1 -1
- package/dist/core/settings-storage.js.map +1 -1
- package/dist/core/settings-types.d.ts +1 -0
- package/dist/core/settings-types.d.ts.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/transcript.d.ts +58 -0
- package/dist/core/transcript.d.ts.map +1 -0
- package/dist/core/transcript.js +185 -0
- package/dist/core/transcript.js.map +1 -0
- package/dist/extensions/codemode/execute.d.ts.map +1 -1
- package/dist/extensions/codemode/execute.js +14 -1
- package/dist/extensions/codemode/execute.js.map +1 -1
- package/dist/extensions/codemode/tool.js +2 -2
- package/dist/extensions/codemode/tool.js.map +1 -1
- package/dist/extensions/herdr/index.d.ts.map +1 -1
- package/dist/extensions/herdr/index.js +15 -10
- package/dist/extensions/herdr/index.js.map +1 -1
- package/dist/extensions/herdr/pane-owner.d.ts +6 -2
- package/dist/extensions/herdr/pane-owner.d.ts.map +1 -1
- package/dist/extensions/herdr/pane-owner.js +19 -4
- package/dist/extensions/herdr/pane-owner.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +19 -8
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/mcp/cli.js +18 -24
- package/dist/extensions/mcp/cli.js.map +1 -1
- package/dist/extensions/mcp/client/auth-provider.d.ts +4 -0
- package/dist/extensions/mcp/client/auth-provider.d.ts.map +1 -1
- package/dist/extensions/mcp/client/auth-provider.js.map +1 -1
- package/dist/extensions/mcp/client/oauth/discovery.d.ts +3 -0
- package/dist/extensions/mcp/client/oauth/discovery.d.ts.map +1 -1
- package/dist/extensions/mcp/client/oauth/discovery.js +8 -5
- package/dist/extensions/mcp/client/oauth/discovery.js.map +1 -1
- package/dist/extensions/mcp/client/oauth/flow.d.ts +4 -0
- package/dist/extensions/mcp/client/oauth/flow.d.ts.map +1 -1
- package/dist/extensions/mcp/client/oauth/flow.js +12 -2
- package/dist/extensions/mcp/client/oauth/flow.js.map +1 -1
- package/dist/extensions/mcp/client/transports/streamable-http.d.ts +3 -0
- package/dist/extensions/mcp/client/transports/streamable-http.d.ts.map +1 -1
- package/dist/extensions/mcp/client/transports/streamable-http.js +17 -14
- package/dist/extensions/mcp/client/transports/streamable-http.js.map +1 -1
- package/dist/extensions/mcp/index.d.ts.map +1 -1
- package/dist/extensions/mcp/index.js +150 -72
- package/dist/extensions/mcp/index.js.map +1 -1
- package/dist/extensions/mcp/oauth.d.ts +5 -3
- package/dist/extensions/mcp/oauth.d.ts.map +1 -1
- package/dist/extensions/mcp/oauth.js +36 -10
- package/dist/extensions/mcp/oauth.js.map +1 -1
- package/dist/extensions/mcp/ui.d.ts +3 -3
- package/dist/extensions/mcp/ui.d.ts.map +1 -1
- package/dist/extensions/mcp/ui.js +10 -2
- package/dist/extensions/mcp/ui.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/main-deferred-startup.d.ts +1 -0
- package/dist/main-deferred-startup.d.ts.map +1 -1
- package/dist/main-deferred-startup.js +9 -21
- package/dist/main-deferred-startup.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +8 -6
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/compaction-boundary-message.d.ts +2 -0
- package/dist/modes/interactive/components/compaction-boundary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-boundary-message.js +15 -3
- package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js +43 -0
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.d.ts +6 -0
- package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-input-handling.js +1 -47
- package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +0 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +0 -1
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +0 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-prompt-restore.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-prompt-restore.js +0 -5
- package/dist/modes/interactive/interactive-prompt-restore.js.map +1 -1
- package/dist/modes/interactive/interactive-prompt-turn.js +6 -4
- package/dist/modes/interactive/interactive-prompt-turn.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +13 -6
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +8 -0
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +2 -0
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +1 -1
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/rpc/rpc-client-process.d.ts +7 -0
- package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-process.js +20 -3
- package/dist/modes/rpc/rpc-client-process.js.map +1 -1
- package/dist/modes/rpc/rpc-command-timeouts.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-timeouts.js +1 -0
- package/dist/modes/rpc/rpc-command-timeouts.js.map +1 -1
- package/dist/utils/ansi.d.ts +8 -0
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js +29 -10
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +13 -3
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/credential-redaction.d.ts +2 -0
- package/dist/utils/credential-redaction.d.ts.map +1 -0
- package/dist/utils/credential-redaction.js +20 -0
- package/dist/utils/credential-redaction.js.map +1 -0
- package/dist/utils/image-resize-core.d.ts +8 -0
- package/dist/utils/image-resize-core.d.ts.map +1 -1
- package/dist/utils/image-resize-core.js +1 -0
- package/dist/utils/image-resize-core.js.map +1 -1
- package/dist/utils/image-resize-worker.js +3 -2
- package/dist/utils/image-resize-worker.js.map +1 -1
- package/dist/utils/image-resize.d.ts +2 -2
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js +7 -10
- package/dist/utils/image-resize.js.map +1 -1
- package/docs/codemode.md +21 -1
- package/docs/compaction/reference.md +10 -4
- package/docs/compaction.md +40 -8
- package/docs/docs.json +1 -0
- package/docs/extensions/api-reference.md +4 -0
- package/docs/extensions/events.md +2 -2
- package/docs/llama-cpp.md +9 -2
- package/docs/mcp-servers.md +3 -3
- package/docs/models.md +10 -0
- package/docs/providers.md +39 -5
- package/docs/reference/cli.md +2 -2
- package/docs/sdk/reference.md +19 -4
- package/docs/sdk/web-server.md +325 -0
- package/docs/sdk.md +83 -1
- package/docs/security.md +1 -1
- package/docs/settings.md +2 -2
- package/docs/tools.md +1 -1
- package/docs/workflows/api-reference.md +71 -3
- package/docs/workflows/builtins.md +4 -0
- package/docs/workflows/operations.md +13 -5
- package/npm-shrinkwrap.json +32 -32
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-events.js","sourceRoot":"","sources":["../../src/core/agent-session-events.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, Message, TextContent } from \"@bastani/pi-ai/compat\";\nimport { cleanupSessionResources } from \"@bastani/pi-ai/compat\";\nimport type { AgentEvent, AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { abortBash } from \"./agent-session-bash.ts\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { clearNestedToolCalls, recordNestedToolCalls } from \"./agent-session-nested-tools.js\";\nimport {\n\tisProtectedStreamingCustomMessage,\n\tmarkProtectedStreamingCustomMessageConsumed,\n\tmarkProtectedStreamingCustomMessagePersistenceFailed,\n\tpersistProtectedStreamingCustomMessage,\n\tprepareProtectedStreamingCustomMessagesForDisposal,\n\tretryConsumedProtectedStreamingCustomMessages,\n} from \"./agent-session-persistent-custom-messages.ts\";\nimport { abortCurrentGeneration } from \"./agent-session-queue-pause.ts\";\nimport {\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\tcustomMessageExcludesContext,\n\tisSingleGenericAbortTextContent,\n\treplacementAbortContent,\n} from \"./agent-session-types.js\";\nimport { formatCodexProviderError } from \"./codex-errors.ts\";\nimport type {\n\tMessageEndEvent,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tToolExecutionEndEvent,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tTurnStartEvent,\n} from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport { STALE_EXTENSION_CONTEXT_MESSAGE } from \"./extensions/stale-context.ts\";\nimport type { SessionShutdownEvent } from \"./extensions/types.ts\";\nimport type { StageAdmittedCustomMessage } from \"./messages.ts\";\nimport { normalizeMessageContent } from \"./messages.ts\";\nimport {\n\tabortSessionWork,\n\tdrainSessionReload,\n\tdrainSessionWork,\n\thasCallingSessionWork,\n} from \"./session-lifecycle-work.ts\";\nimport { assertSettingsWrites, ownedSettingsManagers } from \"./settings-write-ownership.ts\";\n\nexport function _emit(this: AgentSession, event: AgentSessionEvent): void {\n\tfor (const l of this._eventListeners) {\n\t\tl(event);\n\t}\n}\n\nexport function _emitQueueUpdate(this: AgentSession): void {\n\tthis._emit({\n\t\ttype: \"queue_update\",\n\t\tsteering: [...this._steeringMessages],\n\t\tfollowUp: [...this._followUpMessages],\n\t});\n}\n\nconst consumedQueuedMessageEvents = new WeakSet<object>();\n\n/** Internal handler for agent events - shared by subscribe and reconnect */\n\nexport function _handleAgentEvent(this: AgentSession, event: AgentEvent): Promise<void> | void {\n\tif (event.type === \"message_start\" && event.message.role === \"toolResult\")\n\t\trecordNestedToolCalls(this, event.message);\n\telse if (event.type === \"agent_end\") clearNestedToolCalls(this);\n\t// Create retry promise synchronously before queueing async processing.\n\t// Agent.emit() calls this handler synchronously, and prompt() calls waitForRetry()\n\t// as soon as agent.prompt() resolves. If _retryPromise is created only inside\n\t// _processAgentEvent, slow earlier queued events can delay agent_end processing\n\t// and waitForRetry() can miss the in-flight retry.\n\tthis._createRetryPromiseForAgentEnd(event);\n\t// Agent-core has already consumed this message. Reflect admission before an\n\t// Escape/abort can restore it from a stale queue while earlier hooks settle.\n\tif (event.type === \"message_start\" && event.message.role === \"user\") {\n\t\tconst text = this._getUserMessageText(event.message);\n\t\tif (text) {\n\t\t\tconst queue = [this._steeringMessages, this._followUpMessages].find((messages) => messages.includes(text));\n\t\t\tif (queue) {\n\t\t\t\tqueue.splice(queue.indexOf(text), 1);\n\t\t\t\tthis._admittedQueuedMessageAwaitingReply = text;\n\t\t\t\tconsumedQueuedMessageEvents.add(event);\n\t\t\t}\n\t\t}\n\t}\n\tconst awaitProtectedPersistence =\n\t\tevent.type === \"message_end\" && event.message.role === \"custom\"\n\t\t\t? markProtectedStreamingCustomMessageConsumed(this, event.message)\n\t\t\t: false;\n\tif (event.type === \"message_end\") this._messagesAwaitingPersistence.add(event.message);\n\n\tconst processing = this._agentEventQueue.then(\n\t\t() => this._processAgentEvent(event),\n\t\t() => this._processAgentEvent(event),\n\t);\n\tthis._agentEventQueue = processing;\n\n\t// Keep queue alive if an event handler fails. Per event, agent-core awaits only\n\t// protected persistence and fallback reconciliation; other listener work is\n\t// nonblocking for that event. The queue as a whole is still drained before each\n\t// provider request (`prepareRequest` in agent-session-boundaries.ts): message_end\n\t// handlers may replace the message that gets persisted, and the request is built\n\t// from the persisted canonical projection, so every queued handler gates the next\n\t// request rather than only the persistence step.\n\tprocessing.catch((error) => {\n\t\t// #3105: callbacks interrupted by terminal disposal remain observable at shutdown.\n\t\tif (this._disposed) {\n\t\t\tconst failures = shutdownEventFailures.get(this) ?? [];\n\t\t\tfailures.push(error instanceof Error ? error : new Error(String(error)));\n\t\t\tshutdownEventFailures.set(this, failures);\n\t\t}\n\t});\n\tif (\n\t\tawaitProtectedPersistence ||\n\t\t// #3105: only queued custom input needs this boundary; ordinary turn listeners\n\t\t// must remain nonblocking during fallback settlement.\n\t\t(event.type === \"turn_end\" && this._pendingCustomMessages.length > 0) ||\n\t\t(event.type === \"agent_end\" && (this._fallbackModels.length > 0 || this._fallbackOriginModel !== undefined))\n\t)\n\t\treturn processing.catch(() => {});\n}\n\nexport function _createRetryPromiseForAgentEnd(this: AgentSession, event: AgentEvent): void {\n\tif (event.type !== \"agent_end\" || this._retryPromise || this._agentRunAbortRequested) {\n\t\treturn;\n\t}\n\n\tconst settings = this.settingsManager.getRetrySettings();\n\tif (!settings.enabled && this._fallbackModels.length === 0) {\n\t\treturn;\n\t}\n\n\tconst lastAssistant = this._findLastAssistantInMessages(event.messages);\n\tif (!lastAssistant) {\n\t\treturn;\n\t}\n\n\tconst fallbackable =\n\t\ttypeof this._isFallbackableError === \"function\"\n\t\t\t? this._isFallbackableError(lastAssistant)\n\t\t\t: this._isRetryableError(lastAssistant);\n\tconst retryable = this._isRetryableError(lastAssistant);\n\tconst shouldRetry =\n\t\tretryable || fallbackable || this._isEmptyCompletion(lastAssistant) || this._isSafetyRefusal(lastAssistant);\n\tif (!shouldRetry) {\n\t\treturn;\n\t}\n\n\tthis._retryPromise = new Promise((resolve) => {\n\t\tthis._retryResolve = resolve;\n\t});\n}\n\nexport function _findLastAssistantInMessages(\n\tthis: AgentSession,\n\tmessages: AgentMessage[],\n): AssistantMessage | undefined {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst message = messages[i];\n\t\tif (message.role === \"assistant\") {\n\t\t\treturn message as AssistantMessage;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport async function _processAgentEvent(this: AgentSession, event: AgentEvent): Promise<void> {\n\tconst protectedMessage =\n\t\tevent.type === \"message_end\" &&\n\t\tevent.message.role === \"custom\" &&\n\t\tisProtectedStreamingCustomMessage(this, event.message)\n\t\t\t? event.message\n\t\t\t: undefined;\n\t// Public notifications remain serialized behind extension events.\n\tif (event.type === \"agent_start\") {\n\t\t// A caller replacement prepared for a turn that never reached its provider\n\t\t// request must not leak into this run's first request. `prepareRequest`\n\t\t// awaits this queue, so the reset lands before the run's first projection.\n\t\tthis._callerReplacedNextRequestContext = false;\n\t}\n\tif (event.type === \"message_start\" && event.message.role === \"user\") {\n\t\tthis._overflowRecoveryAttempted = false;\n\t\tthis._recoverableLengthRecoveryAttempted = false;\n\t\tthis._fallbackAttemptedKeys.clear();\n\t\tthis._fallbackBlockedModels.length = 0;\n\t\tif (consumedQueuedMessageEvents.delete(event)) this._emitQueueUpdate();\n\t}\n\n\tthis._applyInterruptAbortMessage(event);\n\tthis._applyProviderErrorGuidance(event);\n\n\ttry {\n\t\t// Emit to extensions first, then notify all public listeners.\n\t\tawait this._emitExtensionEvent(event);\n\t\tthis._emit(event);\n\t} finally {\n\t\t// Agent-core has consumed this protected input already. Its durability\n\t\t// boundary cannot be skipped by a fallible extension or session listener.\n\t\tif (protectedMessage !== undefined) {\n\t\t\ttry {\n\t\t\t\tpersistProtectedStreamingCustomMessage(this, protectedMessage);\n\t\t\t} catch {\n\t\t\t\tmarkProtectedStreamingCustomMessagePersistenceFailed(this, protectedMessage);\n\t\t\t}\n\t\t\tretryConsumedProtectedStreamingCustomMessages(this);\n\t\t}\n\t\tif (event.type === \"message_end\") this._messagesAwaitingPersistence.delete(event.message);\n\t}\n\tif (event.type === \"turn_end\") {\n\t\tthis._lastAssistantToolResults = event.toolResults;\n\t\tthis._flushPendingCustomMessages();\n\t}\n\n\t// Handle session persistence\n\tif (event.type === \"message_end\") {\n\t\tlet entryId: string | undefined;\n\t\t// Check if this is a custom message from extensions\n\t\tif (event.message.role === \"custom\") {\n\t\t\tconst admitted = event.message as StageAdmittedCustomMessage;\n\t\t\tif (protectedMessage === undefined) {\n\t\t\t\tentryId = this.sessionManager.appendCustomMessageEntry(\n\t\t\t\t\tevent.message.customType,\n\t\t\t\t\tevent.message.content,\n\t\t\t\t\tevent.message.display,\n\t\t\t\t\tevent.message.details,\n\t\t\t\t\tcustomMessageExcludesContext(event.message),\n\t\t\t\t\tundefined,\n\t\t\t\t\tadmitted.stageAdmissionKey,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (\n\t\t\tevent.message.role === \"system\" ||\n\t\t\tevent.message.role === \"user\" ||\n\t\t\tevent.message.role === \"assistant\" ||\n\t\t\tevent.message.role === \"toolResult\"\n\t\t) {\n\t\t\t// Regular LLM message - persist as SessionMessageEntry\n\t\t\tentryId = this.sessionManager.appendMessage(event.message);\n\t\t}\n\t\tif (entryId) this._entryIdsByMessage.set(event.message, entryId);\n\t\t// Other message types (bashExecution, branchSummary) are persisted elsewhere\n\n\t\t// Track assistant message for auto-compaction (checked on agent_end)\n\t\tif (event.message.role === \"assistant\") {\n\t\t\tthis._lastAssistantMessage = event.message;\n\n\t\t\tconst assistantMsg = event.message as AssistantMessage;\n\t\t\t// A length stop preserves its one-shot recovery budget. Reset both\n\t\t\t// recovery kinds only once a non-truncated response completes.\n\t\t\tconst assistantFailed =\n\t\t\t\tassistantMsg.stopReason === \"error\" ||\n\t\t\t\tthis._isEmptyCompletion(assistantMsg) ||\n\t\t\t\tthis._isSafetyRefusal(assistantMsg);\n\t\t\tif (!assistantFailed && assistantMsg.stopReason !== \"length\") {\n\t\t\t\tthis._overflowRecoveryAttempted = false;\n\t\t\t\tthis._recoverableLengthRecoveryAttempted = false;\n\t\t\t}\n\t\t\tif (!assistantFailed) {\n\t\t\t\tthis._contextOverflowUnresolved = false;\n\t\t\t\tthis._outputBudgetErrorContinuationAttempts = 0;\n\t\t\t}\n\t\t\tif (!assistantFailed && assistantMsg.stopReason === \"stop\") {\n\t\t\t\tthis._fallbackAttemptedKeys.clear();\n\t\t\t\tthis._fallbackBlockedModels.length = 0;\n\t\t\t}\n\n\t\t\t// A non-truncated assistant response means the length-continuation loop\n\t\t\t// made progress (or the turn completed cleanly), so reset the bounded\n\t\t\t// output-cap continuation counter.\n\t\t\tif (assistantMsg.stopReason !== \"length\") {\n\t\t\t\tthis._lengthContinuationAttempts = 0;\n\t\t\t}\n\n\t\t\t// Reset retry counter immediately on successful assistant response\n\t\t\t// This prevents accumulation across multiple LLM calls within a turn\n\t\t\tif (!assistantFailed && this._retryAttempt > 0) {\n\t\t\t\tthis._emit({\n\t\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tattempt: this._retryAttempt,\n\t\t\t\t});\n\t\t\t\tthis._retryAttempt = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t// A transient hidden-reconciliation write failure retries independently of\n\t// provider/card delivery and can never create another visible lifecycle card.\n\tretryConsumedProtectedStreamingCustomMessages(this);\n\n\t// Check auto-retry and auto-compaction after agent completes\n\tif (event.type === \"agent_end\" && this._lastAssistantMessage) {\n\t\tconst msg = this._lastAssistantMessage;\n\t\tthis._lastAssistantMessage = undefined;\n\t\tif (this._agentRunAbortRequested) {\n\t\t\tthis._resolveRetry();\n\t\t\treturn;\n\t\t}\n\t\tconst postToolPreflightFailed =\n\t\t\tthis._postToolCompactionPreflightError !== undefined &&\n\t\t\tmsg.errorMessage === this._postToolCompactionPreflightError;\n\n\t\t// Check provider/model failures before compaction. Fallback eligibility is\n\t\t// broader than same-model retry eligibility: auth and request-incompatible\n\t\t// failures advance without re-requesting the failed model.\n\t\tconst fallbackableError =\n\t\t\t!postToolPreflightFailed &&\n\t\t\t(typeof this._isFallbackableError === \"function\"\n\t\t\t\t? this._isFallbackableError(msg)\n\t\t\t\t: this._isRetryableError(msg));\n\t\tconst retryableError = !postToolPreflightFailed && this._isRetryableError(msg);\n\t\tconst emptyCompletion =\n\t\t\t!postToolPreflightFailed && !retryableError && !fallbackableError && this._isEmptyCompletion(msg);\n\t\tconst safetyRefusal =\n\t\t\t!postToolPreflightFailed &&\n\t\t\t!retryableError &&\n\t\t\t!fallbackableError &&\n\t\t\t!emptyCompletion &&\n\t\t\tthis._isSafetyRefusal(msg);\n\t\tconst modelFailure = retryableError || fallbackableError || emptyCompletion || safetyRefusal;\n\t\tlet settleAfterTurn = !modelFailure;\n\t\tif (modelFailure) {\n\t\t\tif (emptyCompletion && !msg.errorMessage) {\n\t\t\t\t// Surface a clear reason in the retry banner; empty completions carry no\n\t\t\t\t// provider error message of their own.\n\t\t\t\tmsg.errorMessage = \"Provider returned an empty completion\";\n\t\t\t} else if (safetyRefusal && !msg.errorMessage) {\n\t\t\t\tmsg.errorMessage = \"Provider returned a canned safety refusal\";\n\t\t\t}\n\t\t\tconst didRetry = await this._handleRetryableError(msg);\n\t\t\tif (didRetry) return; // Retry was initiated, don't proceed to compaction\n\t\t\tsettleAfterTurn = true;\n\t\t}\n\t\tif (this._agentRunAbortRequested) return;\n\n\t\tthis._resolveRetry();\n\t\tthis._contextOverflowUnresolved = false;\n\t\tawait this._checkCompaction(msg);\n\t\tif (this._agentRunAbortRequested) return;\n\n\t\t// Compaction owns context overflow first. Only once it is disabled, fails,\n\t\t// or reports the overflow unresolved may the chain spend a candidate on a\n\t\t// larger-context model, so a compactable first overflow costs nothing.\n\t\tif (this._contextOverflowUnresolved) {\n\t\t\tthis._contextOverflowUnresolved = false;\n\t\t\tif (typeof this._trySwitchToFallbackModel === \"function\" && (await this._trySwitchToFallbackModel(msg)))\n\t\t\t\treturn;\n\t\t\tsettleAfterTurn = true;\n\t\t}\n\t\t// Keep a fallback lifecycle open across the compact-and-continue probe that\n\t\t// belongs to this user turn, then settle it without changing the active model.\n\t\tif (settleAfterTurn && this._pendingPostCompactionContinuation === undefined) {\n\t\t\tif (typeof this._settleFallbackModelScope === \"function\") await this._settleFallbackModelScope();\n\t\t}\n\t\t// Launched last so the fallback lifecycle wins: a switch above returns before\n\t\t// this line. Guarded like the fallback methods above because fallback suites\n\t\t// drive this function on a synthetic session.\n\t\tif (event.type === \"agent_end\" && typeof this._maybeGenerateSessionSummary === \"function\")\n\t\t\tvoid this._maybeGenerateSessionSummary();\n\t}\n}\n\nexport function _applyInterruptAbortMessage(this: AgentSession, event: AgentEvent): void {\n\tconst abortMessage = this._activeInterruptAbortMessage;\n\tif (!abortMessage) return;\n\n\tif (event.type === \"tool_execution_end\" && event.isError && isSingleGenericAbortTextContent(event.result.content)) {\n\t\tevent.result.content = replacementAbortContent(abortMessage);\n\t\treturn;\n\t}\n\n\tif (event.type !== \"message_start\" && event.type !== \"message_end\") return;\n\n\tif (\n\t\tevent.message.role === \"toolResult\" &&\n\t\tevent.message.isError &&\n\t\tisSingleGenericAbortTextContent(event.message.content)\n\t) {\n\t\tevent.message.content = replacementAbortContent(abortMessage);\n\t\treturn;\n\t}\n\n\tif (event.message.role === \"assistant\") {\n\t\tconst assistantMessage = event.message as AssistantMessage;\n\t\tif (assistantMessage.stopReason === \"aborted\") {\n\t\t\tassistantMessage.errorMessage = abortMessage;\n\t\t}\n\t}\n}\n\nexport function _applyProviderErrorGuidance(this: AgentSession, event: AgentEvent): void {\n\tif (event.type !== \"message_start\" && event.type !== \"message_update\" && event.type !== \"message_end\") return;\n\tif (event.message.role !== \"assistant\") return;\n\n\tconst assistantMessage = event.message as AssistantMessage;\n\tif (assistantMessage.stopReason !== \"error\" || !assistantMessage.errorMessage) return;\n\n\tassistantMessage.errorMessage = formatCodexProviderError(assistantMessage.provider, assistantMessage.errorMessage);\n}\n\n/** Resolve the pending retry promise */\n\nexport function _resolveRetry(this: AgentSession): void {\n\tif (this._retryResolve) {\n\t\tthis._retryResolve();\n\t\tthis._retryResolve = undefined;\n\t\tthis._retryPromise = undefined;\n\t}\n}\n\n/** Extract text content from a message */\n\nexport function _getUserMessageText(this: AgentSession, message: Message): string {\n\tif (message.role !== \"user\") return \"\";\n\tconst content = message.content;\n\tif (typeof content === \"string\") return content;\n\tconst textBlocks = content.filter((c) => c.type === \"text\");\n\treturn textBlocks.map((c) => (c as TextContent).text).join(\"\");\n}\n\n/** Find the last assistant message in agent state (including aborted ones) */\n\nexport function _findLastAssistantMessage(this: AgentSession): AssistantMessage | undefined {\n\tconst messages = this.agent.state.messages;\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\treturn msg as AssistantMessage;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function _replaceMessageInPlace(this: AgentSession, target: AgentMessage, replacement: AgentMessage): void {\n\t// Agent-core stores the finalized message object in its state before emitting message_end.\n\t// SessionManager persistence happens later in _processAgentEvent() with event.message.\n\t// Mutating this object in place keeps agent state, later turn/agent events, listeners,\n\t// and the eventual SessionManager.appendMessage(event.message) persistence in sync.\n\tif (target === replacement) {\n\t\treturn;\n\t}\n\n\tconst targetRecord = target as unknown as Record<string, unknown>;\n\tfor (const key of Object.keys(targetRecord)) {\n\t\tdelete targetRecord[key];\n\t}\n\tObject.assign(targetRecord, replacement);\n}\n\n/** Emit extension events based on agent events */\n\nexport async function _emitExtensionEvent(this: AgentSession, event: AgentEvent): Promise<void> {\n\tif (event.type === \"agent_start\") {\n\t\tthis._turnIndex = 0;\n\t\tawait this._extensionRunner.emit({ type: \"agent_start\" }, undefined, true);\n\t} else if (event.type === \"agent_end\") {\n\t\tawait this._extensionRunner.emit({ type: \"agent_end\", messages: event.messages }, undefined, true);\n\t} else if (event.type === \"turn_start\") {\n\t\tconst extensionEvent: TurnStartEvent = {\n\t\t\ttype: \"turn_start\",\n\t\t\tturnIndex: this._turnIndex,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"turn_end\") {\n\t\t// finishTurn already dispatched the actionable boundary for loop-driven turns.\n\t\t// Synthetic turns (for example a run that fails before the loop's finishTurn)\n\t\t// still reach extensions here.\n\t\tif (event.message.role === \"assistant\" && !this._boundaryDispatchedMessages.delete(event.message)) {\n\t\t\tawait this._dispatchTurnEndBoundary(event.message, event.toolResults);\n\t\t}\n\t\tthis._turnIndex++;\n\t} else if (event.type === \"message_start\") {\n\t\tconst extensionEvent: MessageStartEvent = {\n\t\t\ttype: \"message_start\",\n\t\t\tmessage: event.message,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"message_update\") {\n\t\tconst extensionEvent: MessageUpdateEvent = {\n\t\t\ttype: \"message_update\",\n\t\t\tassistantMessageEvent: event.assistantMessageEvent,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"message_end\") {\n\t\tconst extensionEvent: MessageEndEvent = {\n\t\t\ttype: \"message_end\",\n\t\t\tmessage: event.message,\n\t\t};\n\t\t// Agent-core already completed this message; closing must drain its hooks and persistence.\n\t\tconst replacement = await this._extensionRunner.emitMessageEnd(extensionEvent, true);\n\t\tif (replacement) {\n\t\t\tthis._replaceMessageInPlace(event.message, normalizeMessageContent(replacement));\n\t\t}\n\t} else if (event.type === \"tool_execution_start\") {\n\t\tconst extensionEvent: ToolExecutionStartEvent = {\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\targs: event.args,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"tool_execution_update\") {\n\t\tconst extensionEvent: ToolExecutionUpdateEvent = {\n\t\t\ttype: \"tool_execution_update\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\targs: event.args,\n\t\t\tpartialResult: event.partialResult,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"tool_execution_end\") {\n\t\tconst extensionEvent: ToolExecutionEndEvent = {\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\tresult: event.result,\n\t\t\tisError: event.isError,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t}\n}\n\n/**\n * Subscribe to agent events.\n * Session persistence is handled internally (saves messages on message_end).\n * Multiple listeners can be added. Returns unsubscribe function for this listener.\n */\n\nexport function subscribe(this: AgentSession, listener: AgentSessionEventListener): () => void {\n\tthis._eventListeners.push(listener);\n\n\t// Return unsubscribe function for this specific listener\n\treturn () => {\n\t\tconst index = this._eventListeners.indexOf(listener);\n\t\tif (index !== -1) {\n\t\t\tthis._eventListeners.splice(index, 1);\n\t\t}\n\t};\n}\n\n/** Disconnect from agent events during disposal. */\nexport function _disconnectFromAgent(this: AgentSession): void {\n\tif (this._unsubscribeAgent) {\n\t\tthis._unsubscribeAgent();\n\t\tthis._unsubscribeAgent = undefined;\n\t}\n}\n\n/**\n * Remove all listeners and disconnect from agent.\n * Call this when completely done with the session.\n */\n\nconst shutdownEventFailures = new WeakMap<AgentSession, Error[]>();\nconst sessionClosures = new WeakMap<AgentSession, Promise<void>>();\nconst sessionRetirements = new WeakMap<AgentSession, Promise<void>>();\n\n/** Shared terminal boundary for direct SDK disposal and runtime replacement. */\nexport function closeAgentSession(\n\tsession: AgentSession,\n\tevent: SessionShutdownEvent = { type: \"session_shutdown\", reason: \"quit\" },\n\tbeforeInvalidate?: () => void,\n): Promise<void> {\n\tconst handoff = event.reason !== \"quit\" && hasCallingSessionWork(session);\n\tconst existing = sessionClosures.get(session);\n\tif (existing) return (handoff && sessionRetirements.get(session)) || existing;\n\tlet resolveRetired!: () => void;\n\tlet rejectRetired!: (error: Error) => void;\n\tconst retirement = new Promise<void>((resolve, reject) => {\n\t\tresolveRetired = resolve;\n\t\trejectRetired = reject;\n\t});\n\tconst retired = { promise: retirement, resolve: resolveRetired, reject: rejectRetired };\n\tsession._disposed = true;\n\tsession._cacheWarmer?.cancel();\n\tconst closing = Promise.resolve().then(async () => {\n\t\tconst errors: Error[] = [];\n\t\tconst attempt = async (component: string, cleanup: () => void | Promise<void>) => {\n\t\t\ttry {\n\t\t\t\tawait cleanup();\n\t\t\t} catch (cause) {\n\t\t\t\tif (cause instanceof AggregateError)\n\t\t\t\t\terrors.push(...cause.errors.map((error) => new Error(component, { cause: error })));\n\t\t\t\telse errors.push(new Error(component, { cause }));\n\t\t\t}\n\t\t};\n\t\tawait attempt(\"lifetime\", () => abortSessionWork(session, event.reason === \"quit\"));\n\t\tawait attempt(\"shell abort\", () => abortBash.call(session));\n\t\tawait attempt(\"abort\", () => abortCurrentGeneration.call(session));\n\t\tawait attempt(\"reload rollback\", () => drainSessionReload(session));\n\t\tawait attempt(\"tasks\", () => session.closeSessionTasks());\n\t\tawait attempt(\"summary\", () => session.abortSessionSummary());\n\t\tif (handoff) {\n\t\t\tawait attempt(\"peer work\", () => drainSessionWork(session, true, true));\n\t\t\tawait attempt(\"retired authority\", () => session._extensionRunner.revokeAuthority());\n\t\t\tif (errors.length)\n\t\t\t\tretired.reject(\n\t\t\t\t\tObject.assign(new AggregateError(errors, \"Session retirement failed\"), { code: \"ShutdownFailed\" }),\n\t\t\t\t);\n\t\t\telse retired.resolve();\n\t\t}\n\t\tawait attempt(\"active work\", () => drainSessionWork(session));\n\t\tawait attempt(\"events\", async () => {\n\t\t\tawait session._agentEventQueue.catch(() => {});\n\t\t\tconst failures = shutdownEventFailures.get(session);\n\t\t\tif (failures?.length) throw new AggregateError(failures, \"Session event callbacks failed\");\n\t\t});\n\t\tawait attempt(\"extensions\", async () => {\n\t\t\tawait emitSessionShutdownEvent(session._extensionRunner, event);\n\t\t});\n\t\tawait attempt(\"messages\", () => prepareProtectedStreamingCustomMessagesForDisposal(session));\n\t\tawait attempt(\"shell persistence\", () => session._flushPendingBashMessages());\n\t\tawait attempt(\"settings\", async () => {\n\t\t\tawait session.settingsManager.flush();\n\t\t\tassertSettingsWrites(session);\n\t\t});\n\t\tawait attempt(\"session persistence\", () => session.sessionManager.flushIfStarted());\n\t\tif (ownedSettingsManagers.get(session.settingsManager) === session)\n\t\t\townedSettingsManagers.delete(session.settingsManager);\n\t\tawait attempt(\"host subscriptions\", () => beforeInvalidate?.());\n\t\tawait attempt(\"generation\", () => session._extensionRunner.invalidate(STALE_EXTENSION_CONTEXT_MESSAGE));\n\t\tawait attempt(\"subscriptions\", () => {\n\t\t\tsession._disconnectFromAgent();\n\t\t\tsession._eventListeners = [];\n\t\t});\n\t\tawait attempt(\"provider\", () => cleanupSessionResources(session.sessionId));\n\t\tawait attempt(\"storage\", () => {\n\t\t\tsession._tempStorageLease?.release();\n\t\t\tsession._tempStorageLease = undefined;\n\t\t});\n\t\tif (errors.length)\n\t\t\tthrow Object.assign(new AggregateError(errors, \"Session shutdown failed\"), { code: \"ShutdownFailed\" });\n\t});\n\tsessionClosures.set(session, closing);\n\tif (handoff) {\n\t\tsessionRetirements.set(session, retired.promise);\n\t\tvoid closing.catch(() => {});\n\t}\n\tsession._extensionRunner.sealHostInput();\n\treturn handoff ? retired.promise : closing;\n}\n\nexport function dispose(this: AgentSession): Promise<void> {\n\treturn closeAgentSession(this);\n}\n\n// =========================================================================\n// Read-only State Access\n// =========================================================================\n\n/** Full agent state */\n\nexport const agentSessionEventsMethods = {\n\t_close(this: AgentSession, event: SessionShutdownEvent, beforeInvalidate?: () => void) {\n\t\treturn closeAgentSession(this, event, beforeInvalidate);\n\t},\n\t_emit,\n\t_emitQueueUpdate,\n\t_handleAgentEvent,\n\t_createRetryPromiseForAgentEnd,\n\t_findLastAssistantInMessages,\n\t_processAgentEvent,\n\t_applyInterruptAbortMessage,\n\t_applyProviderErrorGuidance,\n\t_resolveRetry,\n\t_getUserMessageText,\n\t_findLastAssistantMessage,\n\t_replaceMessageInPlace,\n\t_emitExtensionEvent,\n\tsubscribe,\n\t_disconnectFromAgent,\n\tdispose,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"agent-session-events.js","sourceRoot":"","sources":["../../src/core/agent-session-events.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantMessage, Message, TextContent } from \"@bastani/pi-ai/compat\";\nimport { cleanupSessionResources } from \"@bastani/pi-ai/compat\";\nimport type { AgentEvent, AgentMessage } from \"@earendil-works/pi-agent-core\";\nimport { abortBash } from \"./agent-session-bash.ts\";\nimport type { AgentSessionInternalSurface as AgentSession } from \"./agent-session-methods.ts\";\nimport { clearNestedToolCalls, recordNestedToolCalls } from \"./agent-session-nested-tools.js\";\nimport {\n\tisProtectedStreamingCustomMessage,\n\tmarkProtectedStreamingCustomMessageConsumed,\n\tmarkProtectedStreamingCustomMessagePersistenceFailed,\n\tpersistProtectedStreamingCustomMessage,\n\tprepareProtectedStreamingCustomMessagesForDisposal,\n\tretryConsumedProtectedStreamingCustomMessages,\n} from \"./agent-session-persistent-custom-messages.ts\";\nimport { abortCurrentGeneration } from \"./agent-session-queue-pause.ts\";\nimport {\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\tcustomMessageExcludesContext,\n\tisSingleGenericAbortTextContent,\n\treplacementAbortContent,\n} from \"./agent-session-types.js\";\nimport { formatCodexProviderError } from \"./codex-errors.ts\";\nimport type {\n\tMessageEndEvent,\n\tMessageStartEvent,\n\tMessageUpdateEvent,\n\tToolExecutionEndEvent,\n\tToolExecutionStartEvent,\n\tToolExecutionUpdateEvent,\n\tTurnStartEvent,\n} from \"./extensions/index.js\";\nimport { emitSessionShutdownEvent } from \"./extensions/runner.ts\";\nimport { STALE_EXTENSION_CONTEXT_MESSAGE } from \"./extensions/stale-context.ts\";\nimport type { SessionShutdownEvent } from \"./extensions/types.ts\";\nimport type { StageAdmittedCustomMessage } from \"./messages.ts\";\nimport { normalizeMessageContent } from \"./messages.ts\";\nimport {\n\tabortSessionWork,\n\tdrainSessionReload,\n\tdrainSessionWork,\n\thasCallingSessionWork,\n} from \"./session-lifecycle-work.ts\";\nimport { assertSettingsWrites, ownedSettingsManagers } from \"./settings-write-ownership.ts\";\n\nexport function _emit(this: AgentSession, event: AgentSessionEvent): void {\n\tfor (const l of this._eventListeners) {\n\t\tl(event);\n\t}\n}\n\nexport function _emitQueueUpdate(this: AgentSession): void {\n\tthis._emit({\n\t\ttype: \"queue_update\",\n\t\tsteering: [...this._steeringMessages],\n\t\tfollowUp: [...this._followUpMessages],\n\t});\n}\n\nconst consumedQueuedMessageEvents = new WeakSet<object>();\n\n/** Internal handler for agent events - shared by subscribe and reconnect */\n\nexport function _handleAgentEvent(this: AgentSession, event: AgentEvent): Promise<void> | void {\n\tif (event.type === \"message_start\" && event.message.role === \"toolResult\")\n\t\trecordNestedToolCalls(this, event.message);\n\telse if (event.type === \"agent_end\") clearNestedToolCalls(this);\n\t// Create retry promise synchronously before queueing async processing.\n\t// Agent.emit() calls this handler synchronously, and prompt() calls waitForRetry()\n\t// as soon as agent.prompt() resolves. If _retryPromise is created only inside\n\t// _processAgentEvent, slow earlier queued events can delay agent_end processing\n\t// and waitForRetry() can miss the in-flight retry.\n\tthis._createRetryPromiseForAgentEnd(event);\n\t// Agent-core has already consumed this message. Reflect admission before an\n\t// Escape/abort can restore it from a stale queue while earlier hooks settle.\n\tif (event.type === \"message_start\" && event.message.role === \"user\") {\n\t\tconst text = this._getUserMessageText(event.message);\n\t\tif (text) {\n\t\t\tconst queue = [this._steeringMessages, this._followUpMessages].find((messages) => messages.includes(text));\n\t\t\tif (queue) {\n\t\t\t\tqueue.splice(queue.indexOf(text), 1);\n\t\t\t\tthis._admittedQueuedMessageAwaitingReply = text;\n\t\t\t\tconsumedQueuedMessageEvents.add(event);\n\t\t\t}\n\t\t}\n\t}\n\tconst awaitProtectedPersistence =\n\t\tevent.type === \"message_end\" && event.message.role === \"custom\"\n\t\t\t? markProtectedStreamingCustomMessageConsumed(this, event.message)\n\t\t\t: false;\n\tif (event.type === \"message_end\") this._messagesAwaitingPersistence.add(event.message);\n\n\tconst processing = this._agentEventQueue.then(\n\t\t() => this._processAgentEvent(event),\n\t\t() => this._processAgentEvent(event),\n\t);\n\tthis._agentEventQueue = processing;\n\n\t// Keep queue alive if an event handler fails. Per event, agent-core awaits only\n\t// protected persistence and fallback reconciliation; other listener work is\n\t// nonblocking for that event. The queue as a whole is still drained before each\n\t// provider request (`prepareRequest` in agent-session-boundaries.ts): message_end\n\t// handlers may replace the message that gets persisted, and the request is built\n\t// from the persisted canonical projection, so every queued handler gates the next\n\t// request rather than only the persistence step.\n\tprocessing.catch((error) => {\n\t\t// #3105: callbacks interrupted by terminal disposal remain observable at shutdown.\n\t\tif (this._disposed) {\n\t\t\tconst failures = shutdownEventFailures.get(this) ?? [];\n\t\t\tfailures.push(error instanceof Error ? error : new Error(String(error)));\n\t\t\tshutdownEventFailures.set(this, failures);\n\t\t}\n\t});\n\tif (\n\t\tawaitProtectedPersistence ||\n\t\t// #3105: only queued custom input needs this boundary; ordinary turn listeners\n\t\t// must remain nonblocking during fallback settlement.\n\t\t(event.type === \"turn_end\" && this._pendingCustomMessages.length > 0) ||\n\t\t(event.type === \"agent_end\" && (this._fallbackModels.length > 0 || this._fallbackOriginModel !== undefined))\n\t)\n\t\treturn processing.catch(() => {});\n}\n\nexport function _createRetryPromiseForAgentEnd(this: AgentSession, event: AgentEvent): void {\n\tif (event.type !== \"agent_end\" || this._retryPromise || this._agentRunAbortRequested) {\n\t\treturn;\n\t}\n\n\tconst settings = this.settingsManager.getRetrySettings();\n\tif (!settings.enabled && this._fallbackModels.length === 0) {\n\t\treturn;\n\t}\n\n\tconst lastAssistant = this._findLastAssistantInMessages(event.messages);\n\tif (!lastAssistant) {\n\t\treturn;\n\t}\n\n\tconst fallbackable =\n\t\ttypeof this._isFallbackableError === \"function\"\n\t\t\t? this._isFallbackableError(lastAssistant)\n\t\t\t: this._isRetryableError(lastAssistant);\n\tconst retryable = this._isRetryableError(lastAssistant);\n\tconst shouldRetry =\n\t\tretryable || fallbackable || this._isEmptyCompletion(lastAssistant) || this._isSafetyRefusal(lastAssistant);\n\tif (!shouldRetry) {\n\t\treturn;\n\t}\n\n\tthis._retryPromise = new Promise((resolve) => {\n\t\tthis._retryResolve = resolve;\n\t});\n}\n\nexport function _findLastAssistantInMessages(\n\tthis: AgentSession,\n\tmessages: AgentMessage[],\n): AssistantMessage | undefined {\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst message = messages[i];\n\t\tif (message.role === \"assistant\") {\n\t\t\treturn message as AssistantMessage;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport async function _processAgentEvent(this: AgentSession, event: AgentEvent): Promise<void> {\n\tconst protectedMessage =\n\t\tevent.type === \"message_end\" &&\n\t\tevent.message.role === \"custom\" &&\n\t\tisProtectedStreamingCustomMessage(this, event.message)\n\t\t\t? event.message\n\t\t\t: undefined;\n\t// Public notifications remain serialized behind extension events.\n\tif (event.type === \"agent_start\") {\n\t\t// A caller replacement prepared for a turn that never reached its provider\n\t\t// request must not leak into this run's first request. `prepareRequest`\n\t\t// awaits this queue, so the reset lands before the run's first projection.\n\t\tthis._callerReplacedNextRequestContext = false;\n\t}\n\tif (event.type === \"message_start\" && event.message.role === \"user\") {\n\t\tthis._overflowRecoveryAttempted = false;\n\t\tthis._recoverableLengthRecoveryAttempted = false;\n\t\tthis._fallbackAttemptedKeys.clear();\n\t\tthis._fallbackBlockedModels.length = 0;\n\t\tif (consumedQueuedMessageEvents.delete(event)) this._emitQueueUpdate();\n\t}\n\n\tthis._applyInterruptAbortMessage(event);\n\tthis._applyProviderErrorGuidance(event);\n\n\ttry {\n\t\t// Emit to extensions first, then notify all public listeners.\n\t\tawait this._emitExtensionEvent(event);\n\t\tthis._emit(event);\n\t} finally {\n\t\t// Agent-core has consumed this protected input already. Its durability\n\t\t// boundary cannot be skipped by a fallible extension or session listener.\n\t\tif (protectedMessage !== undefined) {\n\t\t\ttry {\n\t\t\t\tpersistProtectedStreamingCustomMessage(this, protectedMessage);\n\t\t\t} catch {\n\t\t\t\tmarkProtectedStreamingCustomMessagePersistenceFailed(this, protectedMessage);\n\t\t\t}\n\t\t\tretryConsumedProtectedStreamingCustomMessages(this);\n\t\t}\n\t\tif (event.type === \"message_end\") this._messagesAwaitingPersistence.delete(event.message);\n\t}\n\tif (event.type === \"turn_end\") {\n\t\tthis._lastAssistantToolResults = event.toolResults;\n\t\tthis._flushPendingCustomMessages();\n\t}\n\n\t// Handle session persistence\n\tif (event.type === \"message_end\") {\n\t\tlet entryId: string | undefined;\n\t\t// Check if this is a custom message from extensions\n\t\tif (event.message.role === \"custom\") {\n\t\t\tconst admitted = event.message as StageAdmittedCustomMessage;\n\t\t\tif (protectedMessage === undefined) {\n\t\t\t\tentryId = this.sessionManager.appendCustomMessageEntry(\n\t\t\t\t\tevent.message.customType,\n\t\t\t\t\tevent.message.content,\n\t\t\t\t\tevent.message.display,\n\t\t\t\t\tevent.message.details,\n\t\t\t\t\tcustomMessageExcludesContext(event.message),\n\t\t\t\t\tundefined,\n\t\t\t\t\tadmitted.stageAdmissionKey,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (\n\t\t\tevent.message.role === \"system\" ||\n\t\t\tevent.message.role === \"user\" ||\n\t\t\tevent.message.role === \"assistant\" ||\n\t\t\tevent.message.role === \"toolResult\"\n\t\t) {\n\t\t\t// Regular LLM message - persist as SessionMessageEntry\n\t\t\tentryId = this.sessionManager.appendMessage(event.message);\n\t\t}\n\t\tif (entryId) this._entryIdsByMessage.set(event.message, entryId);\n\t\t// Other message types (bashExecution, branchSummary) are persisted elsewhere\n\n\t\t// Track assistant message for auto-compaction (checked on agent_end)\n\t\tif (event.message.role === \"assistant\") {\n\t\t\tthis._lastAssistantMessage = event.message;\n\n\t\t\tconst assistantMsg = event.message as AssistantMessage;\n\t\t\t// A length stop preserves its one-shot recovery budget. Reset both\n\t\t\t// recovery kinds only once a non-truncated response completes.\n\t\t\tconst assistantFailed =\n\t\t\t\tassistantMsg.stopReason === \"error\" ||\n\t\t\t\tthis._isEmptyCompletion(assistantMsg) ||\n\t\t\t\tthis._isSafetyRefusal(assistantMsg);\n\t\t\tif (!assistantFailed && assistantMsg.stopReason !== \"length\") {\n\t\t\t\tthis._overflowRecoveryAttempted = false;\n\t\t\t\tthis._recoverableLengthRecoveryAttempted = false;\n\t\t\t}\n\t\t\tif (!assistantFailed) {\n\t\t\t\tthis._contextOverflowUnresolved = false;\n\t\t\t\tthis._outputBudgetErrorContinuationAttempts = 0;\n\t\t\t}\n\t\t\tif (!assistantFailed && assistantMsg.stopReason === \"stop\") {\n\t\t\t\tthis._fallbackAttemptedKeys.clear();\n\t\t\t\tthis._fallbackBlockedModels.length = 0;\n\t\t\t}\n\n\t\t\t// A non-truncated assistant response means the length-continuation loop\n\t\t\t// made progress (or the turn completed cleanly), so reset the bounded\n\t\t\t// output-cap continuation counter.\n\t\t\tif (assistantMsg.stopReason !== \"length\") {\n\t\t\t\tthis._lengthContinuationAttempts = 0;\n\t\t\t}\n\n\t\t\t// Reset retry counter immediately on successful assistant response\n\t\t\t// This prevents accumulation across multiple LLM calls within a turn\n\t\t\tif (!assistantFailed && this._retryAttempt > 0) {\n\t\t\t\tthis._emit({\n\t\t\t\t\ttype: \"auto_retry_end\",\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\tattempt: this._retryAttempt,\n\t\t\t\t});\n\t\t\t\tthis._retryAttempt = 0;\n\t\t\t}\n\t\t}\n\t}\n\n\t// A transient hidden-reconciliation write failure retries independently of\n\t// provider/card delivery and can never create another visible lifecycle card.\n\tretryConsumedProtectedStreamingCustomMessages(this);\n\n\t// Check auto-retry and auto-compaction after agent completes\n\tif (event.type === \"agent_end\" && this._lastAssistantMessage) {\n\t\tconst msg = this._lastAssistantMessage;\n\t\tthis._lastAssistantMessage = undefined;\n\t\tif (this._agentRunAbortRequested) {\n\t\t\tthis._resolveRetry();\n\t\t\treturn;\n\t\t}\n\t\tconst postToolPreflightFailed =\n\t\t\tthis._postToolCompactionPreflightError !== undefined &&\n\t\t\tmsg.errorMessage === this._postToolCompactionPreflightError;\n\n\t\t// Check provider/model failures before compaction. Fallback eligibility is\n\t\t// broader than same-model retry eligibility: auth and request-incompatible\n\t\t// failures advance without re-requesting the failed model.\n\t\tconst fallbackableError =\n\t\t\t!postToolPreflightFailed &&\n\t\t\t(typeof this._isFallbackableError === \"function\"\n\t\t\t\t? this._isFallbackableError(msg)\n\t\t\t\t: this._isRetryableError(msg));\n\t\tconst retryableError = !postToolPreflightFailed && this._isRetryableError(msg);\n\t\tconst emptyCompletion =\n\t\t\t!postToolPreflightFailed && !retryableError && !fallbackableError && this._isEmptyCompletion(msg);\n\t\tconst safetyRefusal =\n\t\t\t!postToolPreflightFailed &&\n\t\t\t!retryableError &&\n\t\t\t!fallbackableError &&\n\t\t\t!emptyCompletion &&\n\t\t\tthis._isSafetyRefusal(msg);\n\t\tconst modelFailure = retryableError || fallbackableError || emptyCompletion || safetyRefusal;\n\t\tlet settleAfterTurn = !modelFailure;\n\t\tif (modelFailure) {\n\t\t\tif (emptyCompletion && !msg.errorMessage) {\n\t\t\t\t// Surface a clear reason in the retry banner; empty completions carry no\n\t\t\t\t// provider error message of their own.\n\t\t\t\tmsg.errorMessage = \"Provider returned an empty completion\";\n\t\t\t} else if (safetyRefusal && !msg.errorMessage) {\n\t\t\t\tmsg.errorMessage = \"Provider returned a canned safety refusal\";\n\t\t\t}\n\t\t\tconst didRetry = await this._handleRetryableError(msg);\n\t\t\tif (didRetry) return; // Retry was initiated, don't proceed to compaction\n\t\t\tsettleAfterTurn = true;\n\t\t}\n\t\tif (this._agentRunAbortRequested) return;\n\n\t\tthis._resolveRetry();\n\t\tthis._contextOverflowUnresolved = false;\n\t\tawait this._checkCompaction(msg);\n\t\tif (this._agentRunAbortRequested) return;\n\n\t\t// Compaction owns context overflow first. Only once it is disabled, fails,\n\t\t// or reports the overflow unresolved may the chain spend a candidate on a\n\t\t// larger-context model, so a compactable first overflow costs nothing.\n\t\tif (this._contextOverflowUnresolved) {\n\t\t\tthis._contextOverflowUnresolved = false;\n\t\t\tif (typeof this._trySwitchToFallbackModel === \"function\" && (await this._trySwitchToFallbackModel(msg)))\n\t\t\t\treturn;\n\t\t\tsettleAfterTurn = true;\n\t\t}\n\t\t// Keep a fallback lifecycle open across the compact-and-continue probe that\n\t\t// belongs to this user turn, then settle it without changing the active model.\n\t\tif (settleAfterTurn && this._pendingPostCompactionContinuation === undefined) {\n\t\t\tif (typeof this._settleFallbackModelScope === \"function\") await this._settleFallbackModelScope();\n\t\t}\n\t\t// Launched last so the fallback lifecycle wins: a switch above returns before\n\t\t// this line. Guarded like the fallback methods above because fallback suites\n\t\t// drive this function on a synthetic session.\n\t\tif (event.type === \"agent_end\" && typeof this._maybeGenerateSessionSummary === \"function\")\n\t\t\tvoid this._maybeGenerateSessionSummary();\n\t}\n}\n\nexport function _applyInterruptAbortMessage(this: AgentSession, event: AgentEvent): void {\n\tconst abortMessage = this._activeInterruptAbortMessage;\n\tif (!abortMessage) return;\n\n\tif (event.type === \"tool_execution_end\" && event.isError && isSingleGenericAbortTextContent(event.result.content)) {\n\t\tevent.result.content = replacementAbortContent(abortMessage);\n\t\treturn;\n\t}\n\n\tif (event.type !== \"message_start\" && event.type !== \"message_end\") return;\n\n\tif (\n\t\tevent.message.role === \"toolResult\" &&\n\t\tevent.message.isError &&\n\t\tisSingleGenericAbortTextContent(event.message.content)\n\t) {\n\t\tevent.message.content = replacementAbortContent(abortMessage);\n\t\treturn;\n\t}\n\n\tif (event.message.role === \"assistant\") {\n\t\tconst assistantMessage = event.message as AssistantMessage;\n\t\tif (assistantMessage.stopReason === \"aborted\") {\n\t\t\tassistantMessage.errorMessage = abortMessage;\n\t\t}\n\t}\n}\n\nexport function _applyProviderErrorGuidance(this: AgentSession, event: AgentEvent): void {\n\tif (event.type !== \"message_start\" && event.type !== \"message_update\" && event.type !== \"message_end\") return;\n\tif (event.message.role !== \"assistant\") return;\n\n\tconst assistantMessage = event.message as AssistantMessage;\n\tif (assistantMessage.stopReason !== \"error\" || !assistantMessage.errorMessage) return;\n\n\tassistantMessage.errorMessage = formatCodexProviderError(assistantMessage.provider, assistantMessage.errorMessage);\n}\n\n/** Resolve the pending retry promise */\n\nexport function _resolveRetry(this: AgentSession): void {\n\tif (this._retryResolve) {\n\t\tthis._retryResolve();\n\t\tthis._retryResolve = undefined;\n\t\tthis._retryPromise = undefined;\n\t}\n}\n\n/** Extract text content from a message */\n\nexport function _getUserMessageText(this: AgentSession, message: Message): string {\n\tif (message.role !== \"user\") return \"\";\n\tconst content = message.content;\n\tif (typeof content === \"string\") return content;\n\tconst textBlocks = content.filter((c) => c.type === \"text\");\n\treturn textBlocks.map((c) => (c as TextContent).text).join(\"\");\n}\n\n/** Find the last assistant message in agent state (including aborted ones) */\n\nexport function _findLastAssistantMessage(this: AgentSession): AssistantMessage | undefined {\n\tconst messages = this.agent.state.messages;\n\tfor (let i = messages.length - 1; i >= 0; i--) {\n\t\tconst msg = messages[i];\n\t\tif (msg.role === \"assistant\") {\n\t\t\treturn msg as AssistantMessage;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nexport function _replaceMessageInPlace(this: AgentSession, target: AgentMessage, replacement: AgentMessage): void {\n\t// Agent-core stores the finalized message object in its state before emitting message_end.\n\t// SessionManager persistence happens later in _processAgentEvent() with event.message.\n\t// Mutating this object in place keeps agent state, later turn/agent events, listeners,\n\t// and the eventual SessionManager.appendMessage(event.message) persistence in sync.\n\tif (target === replacement) {\n\t\treturn;\n\t}\n\n\tconst targetRecord = target as unknown as Record<string, unknown>;\n\tfor (const key of Object.keys(targetRecord)) {\n\t\tdelete targetRecord[key];\n\t}\n\tObject.assign(targetRecord, replacement);\n}\n\n/** Emit extension events based on agent events */\n\nexport async function _emitExtensionEvent(this: AgentSession, event: AgentEvent): Promise<void> {\n\tif (event.type === \"agent_start\") {\n\t\tthis._turnIndex = 0;\n\t\tawait this._extensionRunner.emit({ type: \"agent_start\" }, undefined, true);\n\t} else if (event.type === \"agent_end\") {\n\t\tawait this._extensionRunner.emit({ type: \"agent_end\", messages: event.messages }, undefined, true);\n\t} else if (event.type === \"turn_start\") {\n\t\tconst extensionEvent: TurnStartEvent = {\n\t\t\ttype: \"turn_start\",\n\t\t\tturnIndex: this._turnIndex,\n\t\t\ttimestamp: Date.now(),\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"turn_end\") {\n\t\t// finishTurn already dispatched the actionable boundary for loop-driven turns.\n\t\t// Synthetic turns (for example a run that fails before the loop's finishTurn)\n\t\t// still reach extensions here.\n\t\tif (event.message.role === \"assistant\" && !this._boundaryDispatchedMessages.delete(event.message)) {\n\t\t\tawait this._dispatchTurnEndBoundary(event.message, event.toolResults);\n\t\t}\n\t\tthis._turnIndex++;\n\t} else if (event.type === \"message_start\") {\n\t\tconst extensionEvent: MessageStartEvent = {\n\t\t\ttype: \"message_start\",\n\t\t\tmessage: event.message,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"message_update\") {\n\t\tconst extensionEvent: MessageUpdateEvent = {\n\t\t\ttype: \"message_update\",\n\t\t\tassistantMessageEvent: event.assistantMessageEvent,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"message_end\") {\n\t\tconst extensionEvent: MessageEndEvent = {\n\t\t\ttype: \"message_end\",\n\t\t\tmessage: event.message,\n\t\t};\n\t\t// Agent-core already completed this message; closing must drain its hooks and persistence.\n\t\tconst replacement = await this._extensionRunner.emitMessageEnd(extensionEvent, true);\n\t\tif (replacement) {\n\t\t\tthis._replaceMessageInPlace(event.message, normalizeMessageContent(replacement));\n\t\t}\n\t} else if (event.type === \"tool_execution_start\") {\n\t\tconst extensionEvent: ToolExecutionStartEvent = {\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\targs: event.args,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"tool_execution_update\") {\n\t\tconst extensionEvent: ToolExecutionUpdateEvent = {\n\t\t\ttype: \"tool_execution_update\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\targs: event.args,\n\t\t\tpartialResult: event.partialResult,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t} else if (event.type === \"tool_execution_end\") {\n\t\tconst extensionEvent: ToolExecutionEndEvent = {\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: event.toolCallId,\n\t\t\ttoolName: event.toolName,\n\t\t\tresult: event.result,\n\t\t\tisError: event.isError,\n\t\t};\n\t\tawait this._extensionRunner.emit(extensionEvent, undefined, true);\n\t}\n}\n\n/**\n * Subscribe to agent events.\n * Session persistence is handled internally (saves messages on message_end).\n * Multiple listeners can be added. Returns unsubscribe function for this listener.\n */\n\nexport function subscribe(this: AgentSession, listener: AgentSessionEventListener): () => void {\n\tthis._eventListeners.push(listener);\n\n\t// Return unsubscribe function for this specific listener\n\treturn () => {\n\t\tconst index = this._eventListeners.indexOf(listener);\n\t\tif (index !== -1) {\n\t\t\tthis._eventListeners.splice(index, 1);\n\t\t}\n\t};\n}\n\n/** Disconnect from agent events during disposal. */\nexport function _disconnectFromAgent(this: AgentSession): void {\n\tif (this._unsubscribeAgent) {\n\t\tthis._unsubscribeAgent();\n\t\tthis._unsubscribeAgent = undefined;\n\t}\n}\n\n/**\n * Remove all listeners and disconnect from agent.\n * Call this when completely done with the session.\n */\n\nconst shutdownEventFailures = new WeakMap<AgentSession, Error[]>();\nconst sessionClosures = new WeakMap<AgentSession, Promise<void>>();\nconst sessionRetirements = new WeakMap<AgentSession, Promise<void>>();\n\n/** Shared terminal boundary for direct SDK disposal and runtime replacement. */\nexport function closeAgentSession(\n\tsession: AgentSession,\n\tevent: SessionShutdownEvent = { type: \"session_shutdown\", reason: \"quit\" },\n\tbeforeInvalidate?: () => void,\n): Promise<void> {\n\tconst handoff = event.reason !== \"quit\" && hasCallingSessionWork(session);\n\tconst existing = sessionClosures.get(session);\n\tif (existing) return (handoff && sessionRetirements.get(session)) || existing;\n\tlet resolveRetired!: () => void;\n\tlet rejectRetired!: (error: Error) => void;\n\tconst retirement = new Promise<void>((resolve, reject) => {\n\t\tresolveRetired = resolve;\n\t\trejectRetired = reject;\n\t});\n\tconst retired = { promise: retirement, resolve: resolveRetired, reject: rejectRetired };\n\tsession._disposed = true;\n\tsession._cacheWarmer?.cancel();\n\tconst closing = Promise.resolve().then(async () => {\n\t\tconst errors: Error[] = [];\n\t\tconst attempt = async (component: string, cleanup: () => void | Promise<void>) => {\n\t\t\ttry {\n\t\t\t\tawait cleanup();\n\t\t\t} catch (cause) {\n\t\t\t\tif (cause instanceof AggregateError)\n\t\t\t\t\terrors.push(...cause.errors.map((error) => new Error(component, { cause: error })));\n\t\t\t\telse errors.push(new Error(component, { cause }));\n\t\t\t}\n\t\t};\n\t\tawait attempt(\"lifetime\", () => abortSessionWork(session, event.reason === \"quit\"));\n\t\tawait attempt(\"shell abort\", () => abortBash.call(session));\n\t\tawait attempt(\"abort\", () => abortCurrentGeneration.call(session));\n\t\tawait attempt(\"reload rollback\", () => drainSessionReload(session));\n\t\tawait attempt(\"tasks\", () => session.closeSessionTasks());\n\t\tawait attempt(\"summary\", () => session.abortSessionSummary());\n\t\tif (handoff) {\n\t\t\tawait attempt(\"peer work\", () => drainSessionWork(session, true, true));\n\t\t\tawait attempt(\"retired authority\", () => session._extensionRunner.revokeAuthority());\n\t\t\tif (errors.length)\n\t\t\t\tretired.reject(\n\t\t\t\t\tObject.assign(new AggregateError(errors, \"Session retirement failed\"), { code: \"ShutdownFailed\" }),\n\t\t\t\t);\n\t\t\telse retired.resolve();\n\t\t}\n\t\tawait attempt(\"active work\", () => drainSessionWork(session));\n\t\tawait attempt(\"events\", async () => {\n\t\t\tawait session._agentEventQueue.catch(() => {});\n\t\t\tconst failures = shutdownEventFailures.get(session);\n\t\t\tif (failures?.length) throw new AggregateError(failures, \"Session event callbacks failed\");\n\t\t});\n\t\tawait attempt(\"extensions\", async () => {\n\t\t\tawait emitSessionShutdownEvent(session._extensionRunner, event);\n\t\t});\n\t\tawait attempt(\"messages\", () => prepareProtectedStreamingCustomMessagesForDisposal(session));\n\t\tawait attempt(\"shell persistence\", () => session._flushPendingBashMessages());\n\t\tawait attempt(\"settings\", async () => {\n\t\t\tawait session.settingsManager.flush();\n\t\t\tassertSettingsWrites(session);\n\t\t});\n\t\tawait attempt(\"session persistence\", () => session.sessionManager.flushIfStarted());\n\t\tif (ownedSettingsManagers.get(session.settingsManager) === session)\n\t\t\townedSettingsManagers.delete(session.settingsManager);\n\t\tawait attempt(\"host subscriptions\", () => beforeInvalidate?.());\n\t\tawait attempt(\"generation\", () => session._extensionRunner.invalidate(STALE_EXTENSION_CONTEXT_MESSAGE));\n\t\tawait attempt(\"subscriptions\", async () => {\n\t\t\tsession._disconnectFromAgent();\n\t\t\tsession._eventListeners = [];\n\t\t\tawait session._workflows?.disposeObservers(session._extensionRunner.getWorkflowActivitySnapshot());\n\t\t});\n\t\tawait attempt(\"provider\", () => cleanupSessionResources(session.sessionId));\n\t\tawait attempt(\"storage\", () => {\n\t\t\tsession._tempStorageLease?.release();\n\t\t\tsession._tempStorageLease = undefined;\n\t\t});\n\t\tif (errors.length)\n\t\t\tthrow Object.assign(new AggregateError(errors, \"Session shutdown failed\"), { code: \"ShutdownFailed\" });\n\t});\n\tsessionClosures.set(session, closing);\n\tif (handoff) {\n\t\tsessionRetirements.set(session, retired.promise);\n\t\tvoid closing.catch(() => {});\n\t}\n\tsession._extensionRunner.sealHostInput();\n\treturn handoff ? retired.promise : closing;\n}\n\nexport function dispose(this: AgentSession): Promise<void> {\n\treturn closeAgentSession(this);\n}\n\n// =========================================================================\n// Read-only State Access\n// =========================================================================\n\n/** Full agent state */\n\nexport const agentSessionEventsMethods = {\n\t_close(this: AgentSession, event: SessionShutdownEvent, beforeInvalidate?: () => void) {\n\t\treturn closeAgentSession(this, event, beforeInvalidate);\n\t},\n\t_emit,\n\t_emitQueueUpdate,\n\t_handleAgentEvent,\n\t_createRetryPromiseForAgentEnd,\n\t_findLastAssistantInMessages,\n\t_processAgentEvent,\n\t_applyInterruptAbortMessage,\n\t_applyProviderErrorGuidance,\n\t_resolveRetry,\n\t_getUserMessageText,\n\t_findLastAssistantMessage,\n\t_replaceMessageInPlace,\n\t_emitExtensionEvent,\n\tsubscribe,\n\t_disconnectFromAgent,\n\tdispose,\n};\n"]}
|
|
@@ -8,7 +8,10 @@ declare class ExtensionPublicationGate {
|
|
|
8
8
|
readonly resourceLoader: ResourceLoader;
|
|
9
9
|
private readonly effects;
|
|
10
10
|
private readonly startEffects;
|
|
11
|
+
private readonly commitEffects;
|
|
12
|
+
private readonly commitFailures;
|
|
11
13
|
readonly providerTransaction: ExtensionProviderTransaction;
|
|
14
|
+
private commitsActivated;
|
|
12
15
|
readonly providerIds: Set<string>;
|
|
13
16
|
private readonly isClosed;
|
|
14
17
|
private readonly runner;
|
|
@@ -16,6 +19,9 @@ declare class ExtensionPublicationGate {
|
|
|
16
19
|
constructor(resourceLoader: ResourceLoader, runner: ExtensionRunner, modelRuntime: ModelRuntime, isClosed: () => boolean, replacedProviderIds: Iterable<string>);
|
|
17
20
|
defer(effect: () => void | Promise<void>): void;
|
|
18
21
|
stageStart(effect: () => void | Promise<void>): void;
|
|
22
|
+
stageCommit(effect: () => void): void;
|
|
23
|
+
activateCommits(): void;
|
|
24
|
+
drainCommitFailures(): void;
|
|
19
25
|
activateStarts(): Promise<void>;
|
|
20
26
|
publishProviders(): Promise<void>;
|
|
21
27
|
discard(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-session-extension-bindings.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-extension-bindings.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAI9F,OAAO,KAAK,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAYxD,OAAO,KAAK,EAAE,4BAA4B,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAA0B,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-session-extension-bindings.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-extension-bindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,12 +7,13 @@ import { hostInputError } from "./extensions/host-input.js";
|
|
|
7
7
|
import { ExtensionRunner } from "./extensions/index.js";
|
|
8
8
|
import { factoryAcquisitions, factoryRollbackError, rollbackFactoryAcquisitions, } from "./extensions/loader-rollback.js";
|
|
9
9
|
import { emitSessionShutdownEvent } from "./extensions/runner.js";
|
|
10
|
-
import { bindExtensionContextPublication } from "./extensions/runner-context.js";
|
|
10
|
+
import { bindExtensionContextPublication, runSynchronousExtensionContextEffect } from "./extensions/runner-context.js";
|
|
11
11
|
import { isMandatoryRuntimeTool, isTrustedMandatoryRuntimeTool } from "./mandatory-runtime-tools.js";
|
|
12
12
|
import { isSelectedNativeMcpTool } from "./mcp-child-policy.js";
|
|
13
13
|
import { ModelRegistry } from "./model-registry.js";
|
|
14
14
|
import { abortSessionWork, assertSessionOpen, drainSessionWork, hasSessionReload, renewSessionWork, retireSessionReloadGeneration, sessionGenerationClosing, trackSessionReload, trackSessionWork, } from "./session-lifecycle-work.js";
|
|
15
15
|
import { completeStartup, rollbackStartup } from "./session-startup-rollback.js";
|
|
16
|
+
import { applyToolModifiers } from "./settings-merge.js";
|
|
16
17
|
import { getSkillCatalog } from "./skill-catalog.js";
|
|
17
18
|
import { createSyntheticSourceInfo } from "./source-info.js";
|
|
18
19
|
import { isRegisteredToolAllowed, isToolActivatable } from "./tool-selection.js";
|
|
@@ -21,7 +22,10 @@ class ExtensionPublicationGate {
|
|
|
21
22
|
resourceLoader;
|
|
22
23
|
effects = [];
|
|
23
24
|
startEffects = [];
|
|
25
|
+
commitEffects = [];
|
|
26
|
+
commitFailures = [];
|
|
24
27
|
providerTransaction;
|
|
28
|
+
commitsActivated = false;
|
|
25
29
|
providerIds = new Set();
|
|
26
30
|
isClosed;
|
|
27
31
|
runner;
|
|
@@ -40,6 +44,37 @@ class ExtensionPublicationGate {
|
|
|
40
44
|
if (!this.discarded)
|
|
41
45
|
this.startEffects.push(effect);
|
|
42
46
|
}
|
|
47
|
+
stageCommit(effect) {
|
|
48
|
+
if (this.discarded)
|
|
49
|
+
return;
|
|
50
|
+
if (!this.commitsActivated) {
|
|
51
|
+
this.commitEffects.push(effect);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
runSynchronousExtensionContextEffect(effect);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
this.commitFailures.push(error);
|
|
59
|
+
try {
|
|
60
|
+
this.report(error, "session_start");
|
|
61
|
+
}
|
|
62
|
+
catch (reportingError) {
|
|
63
|
+
this.commitFailures.push(reportingError);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
activateCommits() {
|
|
68
|
+
this.commitsActivated = true;
|
|
69
|
+
for (const effect of this.commitEffects.splice(0))
|
|
70
|
+
this.stageCommit(effect);
|
|
71
|
+
this.drainCommitFailures();
|
|
72
|
+
}
|
|
73
|
+
drainCommitFailures() {
|
|
74
|
+
if (this.commitFailures.length) {
|
|
75
|
+
throw new AggregateError(this.commitFailures.splice(0), "Extension commit activation failed");
|
|
76
|
+
}
|
|
77
|
+
}
|
|
43
78
|
async activateStarts() {
|
|
44
79
|
await this.publish(this.startEffects);
|
|
45
80
|
}
|
|
@@ -50,6 +85,7 @@ class ExtensionPublicationGate {
|
|
|
50
85
|
this.discarded = true;
|
|
51
86
|
this.effects.length = 0;
|
|
52
87
|
this.startEffects.length = 0;
|
|
88
|
+
this.commitEffects.length = 0;
|
|
53
89
|
}
|
|
54
90
|
async release() {
|
|
55
91
|
await this.publish(this.effects);
|
|
@@ -115,6 +151,7 @@ const extensionStarts = new WeakMap();
|
|
|
115
151
|
const failedExtensionStarts = new WeakSet();
|
|
116
152
|
// Binding intent is session-local and survives runner reloads, even when a host object is reused.
|
|
117
153
|
const humanInputBindingRevisions = new WeakMap();
|
|
154
|
+
const presentationOnlyBindings = new WeakMap();
|
|
118
155
|
function startExtensions(session, runner, loader, event, finalize) {
|
|
119
156
|
const existing = extensionStarts.get(runner);
|
|
120
157
|
if (existing)
|
|
@@ -174,6 +211,8 @@ export async function bindExtensions(bindings) {
|
|
|
174
211
|
if (bindings.mode !== undefined) {
|
|
175
212
|
this._extensionMode = bindings.mode;
|
|
176
213
|
}
|
|
214
|
+
if (bindings.isPresentationOnly !== undefined)
|
|
215
|
+
presentationOnlyBindings.set(this, bindings.isPresentationOnly);
|
|
177
216
|
if (bindings.commandContextActions !== undefined) {
|
|
178
217
|
this._extensionCommandContextActions = bindings.commandContextActions;
|
|
179
218
|
}
|
|
@@ -214,7 +253,7 @@ export function getExtensionSourceLabel(extensionPath) {
|
|
|
214
253
|
}
|
|
215
254
|
export function _applyExtensionBindings(runner) {
|
|
216
255
|
runner.setHostBindings(this._extensionHumanInput, this._extensionDiagnosticListener, humanInputBindingRevisions.get(this));
|
|
217
|
-
runner.setUIContext(this._extensionUIContext, this._extensionMode);
|
|
256
|
+
runner.setUIContext(this._extensionUIContext, this._extensionMode, presentationOnlyBindings.get(this) ?? false);
|
|
218
257
|
runner.bindCommandContext(this._extensionCommandContextActions);
|
|
219
258
|
runner.bindChildSessionOptions(this._childSessionOptions);
|
|
220
259
|
this._extensionErrorUnsubscriber?.();
|
|
@@ -243,7 +282,9 @@ export function _refreshCurrentModelFromRegistry() {
|
|
|
243
282
|
}
|
|
244
283
|
export function _bindExtensionCore(runner, publication) {
|
|
245
284
|
runner.bindWorkOwner(this);
|
|
246
|
-
|
|
285
|
+
if (publication) {
|
|
286
|
+
bindExtensionContextPublication(runner.createContext(), (effect, phase) => phase === "commit" ? publication.stageCommit(effect) : publication.stageStart(effect));
|
|
287
|
+
}
|
|
247
288
|
runner.bindTaskHost(() => this.getAgentTaskHost());
|
|
248
289
|
// A transactional successor starts before it is published. Its callbacks must inspect and
|
|
249
290
|
// activate its own definitions, never the retiring session's registry. Keep this view local;
|
|
@@ -563,6 +604,20 @@ async function reloadAdmitted(options) {
|
|
|
563
604
|
if (this._disposed)
|
|
564
605
|
throw hostInputError("SessionClosed");
|
|
565
606
|
await reloadGeneration.call(this, options);
|
|
607
|
+
if (!this._disposed &&
|
|
608
|
+
!sessionGenerationClosing.has(this) &&
|
|
609
|
+
!this.isStreaming &&
|
|
610
|
+
!this._queuedMessagesPaused &&
|
|
611
|
+
this._protectedStreamingCustomMessages?.some((entry) => entry.phase === "queued")) {
|
|
612
|
+
this._agentRunAbortRequested = false;
|
|
613
|
+
void trackSessionWork(this, () => this._runAgentPrompt([])).catch((error) => {
|
|
614
|
+
this._extensionRunner.emitError({
|
|
615
|
+
extensionPath: "session:reload",
|
|
616
|
+
event: "reload",
|
|
617
|
+
error: error instanceof Error ? error.message : String(error),
|
|
618
|
+
});
|
|
619
|
+
});
|
|
620
|
+
}
|
|
566
621
|
}
|
|
567
622
|
catch (error) {
|
|
568
623
|
if (!this._disposed && this._extensionRunner === retiringRunner)
|
|
@@ -588,7 +643,8 @@ async function cleanupReloadRunner(runner, reason) {
|
|
|
588
643
|
const failures = [];
|
|
589
644
|
for (const cleanup of [
|
|
590
645
|
() => runner.drainWork(),
|
|
591
|
-
() => reason === "reload"
|
|
646
|
+
() => (reason === "reload" || reason === "startup") &&
|
|
647
|
+
emitSessionShutdownEvent(runner, { type: "session_shutdown", reason: "reload" }),
|
|
592
648
|
() => runner.invalidate(),
|
|
593
649
|
]) {
|
|
594
650
|
try {
|
|
@@ -634,15 +690,20 @@ async function reloadOwnedGeneration(retainedRuntimes, options) {
|
|
|
634
690
|
if (options?.failOnExtensionErrors) {
|
|
635
691
|
throw new Error("Strict extension reload requires a transactional resource loader");
|
|
636
692
|
}
|
|
637
|
-
oldRunner.revokeAuthority();
|
|
638
693
|
const retiringFailures = [];
|
|
694
|
+
try {
|
|
695
|
+
oldRunner.revokeAuthority();
|
|
696
|
+
}
|
|
697
|
+
catch (error) {
|
|
698
|
+
retiringFailures.push(error);
|
|
699
|
+
}
|
|
639
700
|
await retireSessionReloadGeneration(this, () => cleanupReloadRunner(oldRunner, reason)).catch((error) => {
|
|
640
701
|
retiringFailures.push(error);
|
|
641
702
|
});
|
|
642
703
|
await this.settingsManager.reload();
|
|
643
704
|
resetApiProviders();
|
|
644
705
|
await this._resourceLoader.reload();
|
|
645
|
-
const defaultTools = this.settingsManager.getDefaultTools() ?? getDefaultToolNames();
|
|
706
|
+
const defaultTools = applyToolModifiers(this.settingsManager.getDefaultTools() ?? getDefaultToolNames(), this._defaultToolModifiers);
|
|
646
707
|
for (const name of this.getActiveToolNames())
|
|
647
708
|
this._pendingToolNames.add(name);
|
|
648
709
|
this._buildRuntime({
|
|
@@ -675,7 +736,7 @@ async function reloadOwnedGeneration(retainedRuntimes, options) {
|
|
|
675
736
|
}
|
|
676
737
|
const settingsTransaction = await this.settingsManager.prepareReload();
|
|
677
738
|
const resourceTransaction = await prepareResourceReload(settingsTransaction.settingsManager);
|
|
678
|
-
const defaultTools = settingsTransaction.settingsManager.getDefaultTools() ?? getDefaultToolNames();
|
|
739
|
+
const defaultTools = applyToolModifiers(settingsTransaction.settingsManager.getDefaultTools() ?? getDefaultToolNames(), this._defaultToolModifiers);
|
|
679
740
|
const errors = resourceTransaction.loader.getExtensions().errors;
|
|
680
741
|
const extensionsResult = resourceTransaction.loader.getExtensions();
|
|
681
742
|
for (const [name, value] of previousFlagValues) {
|
|
@@ -699,7 +760,7 @@ async function reloadOwnedGeneration(retainedRuntimes, options) {
|
|
|
699
760
|
});
|
|
700
761
|
this._bindExtensionCore(candidateRunner, publication);
|
|
701
762
|
candidateRunner.setHostBindings(this._extensionHumanInput, this._extensionDiagnosticListener, humanInputBindingRevisions.get(this));
|
|
702
|
-
candidateRunner.setUIContext(this._extensionUIContext, this._extensionMode);
|
|
763
|
+
candidateRunner.setUIContext(this._extensionUIContext, this._extensionMode, presentationOnlyBindings.get(this) ?? false);
|
|
703
764
|
candidateRunner.bindCommandContext(this._extensionCommandContextActions);
|
|
704
765
|
candidateRunner.bindChildSessionOptions(this._childSessionOptions);
|
|
705
766
|
if (options?.failOnExtensionErrors && errors.length > 0)
|
|
@@ -733,6 +794,7 @@ async function reloadOwnedGeneration(retainedRuntimes, options) {
|
|
|
733
794
|
() => rollbackPreparedResources?.(),
|
|
734
795
|
() => publication.discard(),
|
|
735
796
|
() => candidateRunner.sealHostInput(),
|
|
797
|
+
() => candidateRunner.retireObservation(),
|
|
736
798
|
() => candidateRunner.drainWork(),
|
|
737
799
|
() => emitSessionShutdownEvent(candidateRunner, { type: "session_shutdown", reason: "reload" }),
|
|
738
800
|
() => candidateRunner.invalidate(),
|
|
@@ -753,6 +815,7 @@ async function reloadOwnedGeneration(retainedRuntimes, options) {
|
|
|
753
815
|
// Publication transferred ownership: keep the started candidate reachable even
|
|
754
816
|
// when reconstruction fails, and retain retiring cleanup through every step.
|
|
755
817
|
this._extensionRunner = candidateRunner;
|
|
818
|
+
this._workflows?.rebindObservers();
|
|
756
819
|
retainedRuntimes.add(extensionsResult.runtime);
|
|
757
820
|
const failures = [];
|
|
758
821
|
try {
|
|
@@ -778,13 +841,31 @@ async function reloadOwnedGeneration(retainedRuntimes, options) {
|
|
|
778
841
|
failures.push(error);
|
|
779
842
|
}
|
|
780
843
|
const setupFailed = failures.length > 0;
|
|
844
|
+
try {
|
|
845
|
+
publication.activateCommits();
|
|
846
|
+
}
|
|
847
|
+
catch (error) {
|
|
848
|
+
failures.push(error);
|
|
849
|
+
}
|
|
781
850
|
try {
|
|
782
851
|
oldRunner.revokeAuthority();
|
|
852
|
+
}
|
|
853
|
+
catch (error) {
|
|
854
|
+
failures.push(error);
|
|
855
|
+
}
|
|
856
|
+
try {
|
|
783
857
|
await retireSessionReloadGeneration(this, () => cleanupReloadRunner(oldRunner, reason));
|
|
784
858
|
}
|
|
785
859
|
catch (error) {
|
|
786
860
|
failures.push(error);
|
|
787
861
|
}
|
|
862
|
+
bindExtensionContextPublication(candidateRunner.createContext(), undefined);
|
|
863
|
+
try {
|
|
864
|
+
publication.drainCommitFailures();
|
|
865
|
+
}
|
|
866
|
+
catch (error) {
|
|
867
|
+
failures.push(error);
|
|
868
|
+
}
|
|
788
869
|
if (setupFailed)
|
|
789
870
|
throw failures.length > 1 ? retiringCleanupError(failures) : failures[0];
|
|
790
871
|
if (this._disposed)
|
|
@@ -795,7 +876,7 @@ async function reloadOwnedGeneration(retainedRuntimes, options) {
|
|
|
795
876
|
await publication.activateStarts();
|
|
796
877
|
await publication.release();
|
|
797
878
|
if (failures.length)
|
|
798
|
-
throw failures[0];
|
|
879
|
+
throw failures.length > 1 ? retiringCleanupError(failures) : failures[0];
|
|
799
880
|
}
|
|
800
881
|
/** Publish approved startup resources without replacing the session or restarting safe reporters. */
|
|
801
882
|
export async function completeStartupResources(resourceLoader) {
|