@bastani/atomic 0.9.39-alpha.2 → 0.9.40-alpha.1
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 +42 -0
- package/dist/builtin/intercom/CHANGELOG.md +20 -0
- package/dist/builtin/intercom/broker/broker.ts +523 -72
- package/dist/builtin/intercom/broker/client.ts +136 -5
- package/dist/builtin/intercom/broker/database-wake-up-bus.ts +274 -0
- package/dist/builtin/intercom/broker/group-membership.ts +2 -2
- package/dist/builtin/intercom/broker/multinode-router.ts +1500 -0
- package/dist/builtin/intercom/broker/multinode-state-store.ts +569 -0
- package/dist/builtin/intercom/broker/open-broker-state.ts +160 -0
- package/dist/builtin/intercom/broker/paths.ts +6 -0
- package/dist/builtin/intercom/broker/pending-send-registry.ts +14 -0
- package/dist/builtin/intercom/broker/recipient-receipts.ts +93 -0
- package/dist/builtin/intercom/broker/restoring-recipients.ts +263 -0
- package/dist/builtin/intercom/broker/send-handler.ts +241 -25
- package/dist/builtin/intercom/broker/session-id-reclaim.ts +41 -0
- package/dist/builtin/intercom/broker/socket-writes.ts +47 -0
- package/dist/builtin/intercom/broker/spawn.ts +10 -2
- package/dist/builtin/intercom/broker/sql-held-send-store.ts +96 -0
- package/dist/builtin/intercom/broker/sql-known-session-store.ts +129 -0
- package/dist/builtin/intercom/broker/sql-lease-store.ts +194 -0
- package/dist/builtin/intercom/broker/sql-outbox-store.ts +249 -0
- package/dist/builtin/intercom/broker/sql-pending-ask-store.ts +105 -0
- package/dist/builtin/intercom/broker/sql-restoring-reservation-store.ts +295 -0
- package/dist/builtin/intercom/broker/sql-sent-message-authority.ts +126 -0
- package/dist/builtin/intercom/broker/supervisor-channel.ts +10 -0
- package/dist/builtin/intercom/broker/wake-up-bus.ts +60 -0
- package/dist/builtin/intercom/index.bundle.mjs +793 -91
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/intercom/retry-policy.ts +4 -0
- package/dist/builtin/intercom/session-target.ts +24 -0
- package/dist/builtin/intercom/types.ts +57 -3
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +37 -0
- package/dist/builtin/subagents/README.md +18 -12
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/skills/agent-browser/SKILL.md +1 -1
- package/dist/builtin/subagents/skills/cua-driver/BROWSER.md +55 -8
- package/dist/builtin/subagents/skills/cua-driver/EMBEDDING.md +7 -2
- package/dist/builtin/subagents/skills/cua-driver/LINUX.md +7 -1
- package/dist/builtin/subagents/skills/cua-driver/MACOS.md +151 -27
- package/dist/builtin/subagents/skills/cua-driver/RUNTIME.md +1 -1
- package/dist/builtin/subagents/skills/cua-driver/SKILL.md +33 -17
- package/dist/builtin/subagents/skills/cua-driver/WINDOWS.md +5 -0
- package/dist/builtin/subagents/skills/cua-driver/WORKFLOW.md +46 -8
- package/dist/builtin/subagents/skills/subagent/SKILL.md +18 -20
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +8032 -6034
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +32 -0
- package/dist/builtin/workflows/README.md +1 -1
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/skills/impeccable/SKILL.md +8 -8
- package/dist/builtin/workflows/skills/impeccable/reference/adapt.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/adapt.native.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/audit.md +4 -2
- package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/craft-floor.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/critique.md +22 -9
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/distill.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/extract.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/harden.md +2 -4
- package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +4 -4
- package/dist/builtin/workflows/skills/impeccable/reference/live.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +6 -6
- package/dist/builtin/workflows/skills/impeccable/reference/onboard.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/optimize.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/overdrive.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/quieter.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +10 -0
- package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/VERSION +1 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/impeccable +6 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/impeccable.cmd +47 -22
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser-dom.js +34 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser-session.js +25 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +33 -8
- package/dist/builtin/workflows/src/durable/journal/resolution.d.ts +7 -7
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +22855 -22308
- package/dist/builtin/workflows/src/index.js +106 -35
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +16 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts +2 -0
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +6 -6
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +6 -3
- 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-persistent-custom-messages.d.ts +7 -2
- package/dist/core/agent-session-persistent-custom-messages.d.ts.map +1 -1
- package/dist/core/agent-session-persistent-custom-messages.js +29 -12
- package/dist/core/agent-session-persistent-custom-messages.js.map +1 -1
- package/dist/core/agent-session-recovery.d.ts +14 -0
- package/dist/core/agent-session-recovery.d.ts.map +1 -0
- package/dist/core/agent-session-recovery.js +83 -0
- package/dist/core/agent-session-recovery.js.map +1 -0
- package/dist/core/agent-session-tasks.d.ts.map +1 -1
- package/dist/core/agent-session-tasks.js +4 -6
- package/dist/core/agent-session-tasks.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +13 -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 +2 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +4 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/extensions/api-types.d.ts +6 -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/event-results.d.ts +21 -0
- package/dist/core/extensions/event-results.d.ts.map +1 -1
- package/dist/core/extensions/event-results.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader-api.d.ts.map +1 -1
- package/dist/core/extensions/loader-api.js +4 -0
- package/dist/core/extensions/loader-api.js.map +1 -1
- package/dist/core/extensions/runner-events.d.ts +9 -2
- package/dist/core/extensions/runner-events.d.ts.map +1 -1
- package/dist/core/extensions/runner-events.js +29 -0
- package/dist/core/extensions/runner-events.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +5 -3
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +7 -2
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/runtime-types.d.ts +1 -0
- package/dist/core/extensions/runtime-types.d.ts.map +1 -1
- package/dist/core/extensions/runtime-types.js.map +1 -1
- package/dist/core/extensions/session-events.d.ts +30 -2
- package/dist/core/extensions/session-events.d.ts.map +1 -1
- package/dist/core/extensions/session-events.js.map +1 -1
- package/dist/core/sdk-types.d.ts +3 -2
- 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 +3 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-storage.d.ts.map +1 -1
- package/dist/core/session-storage.js +15 -9
- package/dist/core/session-storage.js.map +1 -1
- package/dist/core/storage/process-selection.d.ts +39 -0
- package/dist/core/storage/process-selection.d.ts.map +1 -0
- package/dist/core/storage/process-selection.js +154 -0
- package/dist/core/storage/process-selection.js.map +1 -0
- package/dist/core/storage/provider.d.ts +6 -1
- package/dist/core/storage/provider.d.ts.map +1 -1
- package/dist/core/storage/provider.js +3 -2
- package/dist/core/storage/provider.js.map +1 -1
- package/dist/core/storage/selection.d.ts +1 -1
- package/dist/core/storage/selection.d.ts.map +1 -1
- package/dist/core/storage/selection.js.map +1 -1
- package/dist/core/storage/session/jsonl-session-store.d.ts +2 -0
- package/dist/core/storage/session/jsonl-session-store.d.ts.map +1 -1
- package/dist/core/storage/session/jsonl-session-store.js +38 -2
- package/dist/core/storage/session/jsonl-session-store.js.map +1 -1
- package/dist/core/tasks/completion.d.ts +11 -2
- package/dist/core/tasks/completion.d.ts.map +1 -1
- package/dist/core/tasks/completion.js +40 -16
- package/dist/core/tasks/completion.js.map +1 -1
- package/dist/core/tasks/pause.d.ts +4 -1
- package/dist/core/tasks/pause.d.ts.map +1 -1
- package/dist/core/tasks/pause.js +8 -5
- package/dist/core/tasks/pause.js.map +1 -1
- package/dist/index-extensions.d.ts +1 -1
- package/dist/index-extensions.d.ts.map +1 -1
- package/dist/index-extensions.js.map +1 -1
- package/dist/index.d.ts +2 -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.d.ts.map +1 -1
- package/dist/main.js +7 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js +11 -1
- package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.d.ts +2 -0
- package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-state.js +2 -0
- package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +4 -0
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -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-render-chat.js +3 -0
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-session-routing.js +2 -0
- package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.d.ts +2 -1
- package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +29 -0
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +4 -1
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive-engine/engine-args.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-args.js +4 -0
- package/dist/modes/interactive-engine/engine-args.js.map +1 -1
- package/dist/modes/interactive-engine/engine-render-service.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-render-service.js +4 -4
- package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +4 -0
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/remote-renderer.js +1 -1
- package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
- package/dist/modes/rpc/rpc-client-api.d.ts +4 -1
- package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-api.js +4 -0
- package/dist/modes/rpc/rpc-client-api.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +3 -0
- package/dist/modes/rpc/rpc-command-handler.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/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-input-scheduler.js +6 -1
- package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +12 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +44 -11
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/tools-manager.js +1 -1
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/background-tasks.md +5 -3
- package/docs/computer-use.md +2 -2
- package/docs/environment-variables.md +4 -1
- package/docs/extensions/events.md +29 -2
- package/docs/getting-started/first-session.md +1 -1
- package/docs/guides/intercom.md +1 -1
- package/docs/intercom/operations.md +103 -1
- package/docs/intercom/reference.md +10 -3
- package/docs/intercom.md +8 -6
- package/docs/keybindings.md +1 -1
- package/docs/models.md +1 -1
- package/docs/providers.md +4 -2
- package/docs/reference/cli.md +5 -0
- package/docs/rpc/protocol.md +19 -0
- package/docs/rpc.md +3 -0
- package/docs/sdk/web-server.md +1 -1
- package/docs/sdk.md +5 -2
- package/docs/sessions.md +17 -1
- package/docs/settings.md +5 -3
- package/docs/skills.md +1 -1
- package/docs/storage.md +54 -3
- package/docs/subagents.md +49 -9
- package/docs/usage.md +1 -1
- package/docs/windows.md +14 -4
- package/docs/workflows/api-reference.md +1 -1
- package/docs/workflows/authoring.md +1 -1
- package/docs/workflows/operations.md +10 -6
- package/npm-shrinkwrap.json +37 -37
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-events.js","sourceRoot":"","sources":["../../../src/core/extensions/session-events.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tVerbatimCompactionDetails,\n\tVerbatimCompactionPreparation,\n\tVerbatimCompactionResult,\n} from \"../compaction/index.ts\";\nimport type { BranchSummaryEntry, CompactionEntry, SessionEntry } from \"../session-manager.ts\";\n\n// ============================================================================\n// Resource Events\n// ============================================================================\n\n/** Fired after session_start to allow extensions to provide additional resource paths. */\nexport interface ResourcesDiscoverEvent {\n\ttype: \"resources_discover\";\n\tcwd: string;\n\treason: \"startup\" | \"reload\";\n}\n\n/** Result from resources_discover event handler */\nexport interface ResourcesDiscoverResult {\n\tskillPaths?: string[];\n\tpromptPaths?: string[];\n\tthemePaths?: string[];\n}\n\n// ============================================================================\n// Session Events\n// ============================================================================\n\n/** Fired when a session is started, loaded, or reloaded */\nexport interface SessionStartEvent {\n\ttype: \"session_start\";\n\t/** Why this session start happened. */\n\treason: \"startup\" | \"reload\" | \"new\" | \"resume\" | \"fork\";\n\t/** Previously active session ID. Present for \"new\", \"resume\", and \"fork\". */\n\tpreviousSessionId?: string;\n}\n\n/** Fired when the current session metadata changes. */\nexport interface SessionInfoChangedEvent {\n\ttype: \"session_info_changed\";\n\t/** Current normalized session name. Undefined when the name is cleared. */\n\tname: string | undefined;\n}\n\n/** Fired before switching to another session (can be cancelled) */\nexport interface SessionBeforeSwitchEvent {\n\ttype: \"session_before_switch\";\n\treason: \"new\" | \"resume\";\n\ttargetSessionId?: string;\n}\n\n/** Fired before forking a session (can be cancelled) */\nexport interface SessionBeforeForkEvent {\n\ttype: \"session_before_fork\";\n\tentryId: string;\n\tposition: \"before\" | \"at\";\n}\n\n/** Fired before context compaction (can be cancelled or customized) */\nexport interface SessionBeforeCompactEvent {\n\ttype: \"session_before_compact\";\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\tparameters: VerbatimCompactionPreparation[\"parameters\"];\n\tpreparation: VerbatimCompactionPreparation;\n\tbranchEntries: SessionEntry[];\n\tsignal: AbortSignal;\n}\n\n/** Fired after context compaction succeeds */\nexport interface SessionCompactEvent {\n\ttype: \"session_compact\";\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\tparameters: VerbatimCompactionPreparation[\"parameters\"];\n\tresult: VerbatimCompactionResult;\n\tcompactionEntry: CompactionEntry<VerbatimCompactionDetails>;\n\tfromExtension: boolean;\n}\n\n/** Fired after context compaction fails or is aborted. */\nexport interface SessionCompactFailedEvent {\n\ttype: \"session_compact_failed\";\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\terrorMessage?: string;\n\taborted: boolean;\n\twillRetry: boolean;\n\tfromExtension: boolean;\n}\n\n/** Fired before an extension runtime is torn down due to quit, reload, or session replacement. */\nexport interface SessionShutdownEvent {\n\ttype: \"session_shutdown\";\n\treason: \"quit\" | \"reload\" | \"new\" | \"resume\" | \"fork\";\n\t/** Destination session ID when shutting down due to session replacement. */\n\ttargetSessionId?: string;\n\t/** True when a `quit` was caused by a host termination signal (SIGTERM/SIGHUP) rather than an explicit user quit. */\n\tfromSignal?: boolean;\n}\n\n/** Preparation data for tree navigation */\nexport interface TreePreparation {\n\ttargetId: string;\n\toldLeafId: string | null;\n\tcommonAncestorId: string | null;\n\tentriesToSummarize: SessionEntry[];\n\tuserWantsSummary: boolean;\n\t/** Custom instructions for summarization */\n\tcustomInstructions?: string;\n\t/** If true, customInstructions replaces the default prompt instead of being appended */\n\treplaceInstructions?: boolean;\n\t/** Label to attach to the branch summary entry */\n\tlabel?: string;\n}\n\n/** Fired before navigating in the session tree (can be cancelled) */\nexport interface SessionBeforeTreeEvent {\n\ttype: \"session_before_tree\";\n\tpreparation: TreePreparation;\n\tsignal: AbortSignal;\n}\n\n/** Fired after navigating in the session tree */\nexport interface SessionTreeEvent {\n\ttype: \"session_tree\";\n\tnewLeafId: string | null;\n\toldLeafId: string | null;\n\tsummaryEntry?: BranchSummaryEntry;\n\tfromExtension?: boolean;\n}\n\nexport type SessionEvent =\n\t| SessionStartEvent\n\t| SessionInfoChangedEvent\n\t| SessionBeforeSwitchEvent\n\t| SessionBeforeForkEvent\n\t| SessionBeforeCompactEvent\n\t| SessionCompactEvent\n\t| SessionCompactFailedEvent\n\t| SessionShutdownEvent\n\t| SessionBeforeTreeEvent\n\t| SessionTreeEvent;\n"]}
|
|
1
|
+
{"version":3,"file":"session-events.js","sourceRoot":"","sources":["../../../src/core/extensions/session-events.ts"],"names":[],"mappings":"","sourcesContent":["import type {\n\tVerbatimCompactionDetails,\n\tVerbatimCompactionPreparation,\n\tVerbatimCompactionResult,\n} from \"../compaction/index.ts\";\nimport type { BranchSummaryEntry, CompactionEntry, CustomMessageEntry, SessionEntry } from \"../session-manager.ts\";\n\n// ============================================================================\n// Resource Events\n// ============================================================================\n\n/** Fired after session_start to allow extensions to provide additional resource paths. */\nexport interface ResourcesDiscoverEvent {\n\ttype: \"resources_discover\";\n\tcwd: string;\n\treason: \"startup\" | \"reload\";\n}\n\n/** Result from resources_discover event handler */\nexport interface ResourcesDiscoverResult {\n\tskillPaths?: string[];\n\tpromptPaths?: string[];\n\tthemePaths?: string[];\n}\n\n// ============================================================================\n// Session Events\n// ============================================================================\n\n/** Fired when a session is started, loaded, or reloaded */\nexport interface SessionStartEvent {\n\ttype: \"session_start\";\n\t/** Why this session start happened. */\n\treason: \"startup\" | \"reload\" | \"new\" | \"resume\" | \"fork\";\n\t/** Previously active session ID. Present for \"new\", \"resume\", and \"fork\". */\n\tpreviousSessionId?: string;\n}\n\n/** Why a session's interrupted-work recovery is running. */\nexport type SessionRecoveryReason = \"startup\" | \"resume\" | \"workflow_stage_resume\";\n\n/**\n * Fired once per session, after the host has shown the transcript and before interrupted\n * deliveries are replayed. Restore background work, such as child agents, here.\n */\nexport interface SessionRecoveryRestoreEvent {\n\ttype: \"session_recovery_restore\";\n\treason: SessionRecoveryReason;\n}\n\n/** A durable delivery card that was shown before the process exited but never reached the model. */\nexport interface PendingRecoveryDelivery {\n\t/** Entry id of the original visible card. */\n\tentryId: string;\n\tcustomType: string;\n\tcontent: CustomMessageEntry[\"content\"];\n\tdetails: CustomMessageEntry[\"details\"];\n\t/** ISO timestamp of the original card. */\n\ttimestamp: string;\n\tstageAdmissionKey?: string;\n\tdelivery: \"steer\" | \"followUp\";\n}\n\n/** Fired after `session_recovery_restore` when interrupted deliveries are waiting to be replayed. */\nexport interface SessionRecoveryReplayEvent {\n\ttype: \"session_recovery_replay\";\n\treason: SessionRecoveryReason;\n\tpending: readonly PendingRecoveryDelivery[];\n}\n\n/** Fired when the current session metadata changes. */\nexport interface SessionInfoChangedEvent {\n\ttype: \"session_info_changed\";\n\t/** Current normalized session name. Undefined when the name is cleared. */\n\tname: string | undefined;\n}\n\n/** Fired before switching to another session (can be cancelled) */\nexport interface SessionBeforeSwitchEvent {\n\ttype: \"session_before_switch\";\n\treason: \"new\" | \"resume\";\n\ttargetSessionId?: string;\n}\n\n/** Fired before forking a session (can be cancelled) */\nexport interface SessionBeforeForkEvent {\n\ttype: \"session_before_fork\";\n\tentryId: string;\n\tposition: \"before\" | \"at\";\n}\n\n/** Fired before context compaction (can be cancelled or customized) */\nexport interface SessionBeforeCompactEvent {\n\ttype: \"session_before_compact\";\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\tparameters: VerbatimCompactionPreparation[\"parameters\"];\n\tpreparation: VerbatimCompactionPreparation;\n\tbranchEntries: SessionEntry[];\n\tsignal: AbortSignal;\n}\n\n/** Fired after context compaction succeeds */\nexport interface SessionCompactEvent {\n\ttype: \"session_compact\";\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\tparameters: VerbatimCompactionPreparation[\"parameters\"];\n\tresult: VerbatimCompactionResult;\n\tcompactionEntry: CompactionEntry<VerbatimCompactionDetails>;\n\tfromExtension: boolean;\n}\n\n/** Fired after context compaction fails or is aborted. */\nexport interface SessionCompactFailedEvent {\n\ttype: \"session_compact_failed\";\n\treason: \"manual\" | \"threshold\" | \"overflow\";\n\terrorMessage?: string;\n\taborted: boolean;\n\twillRetry: boolean;\n\tfromExtension: boolean;\n}\n\n/** Fired before an extension runtime is torn down due to quit, reload, or session replacement. */\nexport interface SessionShutdownEvent {\n\ttype: \"session_shutdown\";\n\treason: \"quit\" | \"reload\" | \"new\" | \"resume\" | \"fork\";\n\t/** Destination session ID when shutting down due to session replacement. */\n\ttargetSessionId?: string;\n\t/** True when a `quit` was caused by a host termination signal (SIGTERM/SIGHUP) rather than an explicit user quit. */\n\tfromSignal?: boolean;\n}\n\n/** Preparation data for tree navigation */\nexport interface TreePreparation {\n\ttargetId: string;\n\toldLeafId: string | null;\n\tcommonAncestorId: string | null;\n\tentriesToSummarize: SessionEntry[];\n\tuserWantsSummary: boolean;\n\t/** Custom instructions for summarization */\n\tcustomInstructions?: string;\n\t/** If true, customInstructions replaces the default prompt instead of being appended */\n\treplaceInstructions?: boolean;\n\t/** Label to attach to the branch summary entry */\n\tlabel?: string;\n}\n\n/** Fired before navigating in the session tree (can be cancelled) */\nexport interface SessionBeforeTreeEvent {\n\ttype: \"session_before_tree\";\n\tpreparation: TreePreparation;\n\tsignal: AbortSignal;\n}\n\n/** Fired after navigating in the session tree */\nexport interface SessionTreeEvent {\n\ttype: \"session_tree\";\n\tnewLeafId: string | null;\n\toldLeafId: string | null;\n\tsummaryEntry?: BranchSummaryEntry;\n\tfromExtension?: boolean;\n}\n\nexport type SessionEvent =\n\t| SessionStartEvent\n\t| SessionRecoveryRestoreEvent\n\t| SessionRecoveryReplayEvent\n\t| SessionInfoChangedEvent\n\t| SessionBeforeSwitchEvent\n\t| SessionBeforeForkEvent\n\t| SessionBeforeCompactEvent\n\t| SessionCompactEvent\n\t| SessionCompactFailedEvent\n\t| SessionShutdownEvent\n\t| SessionBeforeTreeEvent\n\t| SessionTreeEvent;\n"]}
|
package/dist/core/sdk-types.d.ts
CHANGED
|
@@ -20,8 +20,9 @@ export interface CreateAgentSessionOptions {
|
|
|
20
20
|
agentDir?: string;
|
|
21
21
|
/**
|
|
22
22
|
* Workflow journal for this session's `workflow` tool: a file path, a caller-owned database, process-local
|
|
23
|
-
* memory, a storage adapter, or a supplied journal. Overrides
|
|
24
|
-
* `ATOMIC_WORKFLOW_JOURNAL_PATH`,
|
|
23
|
+
* memory, a storage adapter, or a supplied journal. Overrides process-level selections (`ATOMIC_WORKFLOWS_JOURNAL`,
|
|
24
|
+
* `ATOMIC_WORKFLOW_JOURNAL_PATH`, `ATOMIC_STORAGE`), the session's `workflows.journal` settings, and the default
|
|
25
|
+
* journal file. The caller closes a database or journal it supplies.
|
|
25
26
|
*/
|
|
26
27
|
journal?: RunJournalOption;
|
|
27
28
|
/** Canonical model/auth runtime. Defaults to agentDir/auth.json and models.json. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-types.d.ts","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EACX,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,WAAW,GAAG,KAAK,GAAG,YAAY,GAAG,UAAU,CAAC;AAE1F,MAAM,WAAW,yBAAyB;IACzC,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,4EAA4E;IAC5E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB
|
|
1
|
+
{"version":3,"file":"sdk-types.d.ts","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-types.js","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { ExtensionBindings } from \"./agent-session-types.js\";\nimport type {\n\tLoadExtensionsResult,\n\tOrchestrationContext,\n\tSessionStartEvent,\n\tSubagentChildPolicy,\n\tToolDefinition,\n} from \"./extensions/index.js\";\nimport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nimport type { ModelRuntime } from \"./model-runtime.js\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { RunJournalOption, StorageSelection } from \"./storage/provider.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\n\nexport type AtomicBuiltin = \"workflows\" | \"subagents\" | \"mcp\" | \"web-access\" | \"intercom\";\n\nexport interface CreateAgentSessionOptions {\n\t/** Shipped packages are enabled unless explicitly false. Independent of tool selection. */\n\tbuiltins?: Partial<Record<AtomicBuiltin, boolean>>;\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.atomic/agent */\n\tagentDir?: string;\n\t/**\n\t * Workflow journal for this session's `workflow` tool: a file path, a caller-owned database, process-local\n\t * memory, a storage adapter, or a supplied journal. Overrides the session's `workflows.journal` settings
|
|
1
|
+
{"version":3,"file":"sdk-types.js","sourceRoot":"","sources":["../../src/core/sdk-types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Api, Model } from \"@bastani/pi-ai/compat\";\nimport type { AgentMessage, ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport type { AgentSession } from \"./agent-session.js\";\nimport type { ExtensionBindings } from \"./agent-session-types.js\";\nimport type {\n\tLoadExtensionsResult,\n\tOrchestrationContext,\n\tSessionStartEvent,\n\tSubagentChildPolicy,\n\tToolDefinition,\n} from \"./extensions/index.js\";\nimport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nimport type { ModelRuntime } from \"./model-runtime.js\";\nimport type { ResourceLoader } from \"./resource-loader.ts\";\nimport type { SessionManager } from \"./session-manager.ts\";\nimport type { SettingsManager } from \"./settings-manager.ts\";\nimport type { RunJournalOption, StorageSelection } from \"./storage/provider.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\n\nexport type AtomicBuiltin = \"workflows\" | \"subagents\" | \"mcp\" | \"web-access\" | \"intercom\";\n\nexport interface CreateAgentSessionOptions {\n\t/** Shipped packages are enabled unless explicitly false. Independent of tool selection. */\n\tbuiltins?: Partial<Record<AtomicBuiltin, boolean>>;\n\t/** Working directory for project-local discovery. Default: process.cwd() */\n\tcwd?: string;\n\t/** Global config directory. Default: ~/.atomic/agent */\n\tagentDir?: string;\n\t/**\n\t * Workflow journal for this session's `workflow` tool: a file path, a caller-owned database, process-local\n\t * memory, a storage adapter, or a supplied journal. Overrides process-level selections (`ATOMIC_WORKFLOWS_JOURNAL`,\n\t * `ATOMIC_WORKFLOW_JOURNAL_PATH`, `ATOMIC_STORAGE`), the session's `workflows.journal` settings, and the default\n\t * journal file. The caller closes a database or journal it supplies.\n\t */\n\tjournal?: RunJournalOption;\n\n\t/** Canonical model/auth runtime. Defaults to agentDir/auth.json and models.json. */\n\tmodelRuntime?: ModelRuntime;\n\n\t/** Model to use. Default: from settings, else first available */\n\tmodel?: Model<Api>;\n\t/** Thinking level. Default: from settings, else 'medium' (clamped to model capabilities) */\n\tthinkingLevel?: ThinkingLevel;\n\t/**\n\t * Ordered fallback models as provider/model strings with optional :thinkingLevel suffix.\n\t * Used by main-chat turns and borrowed, planner-only, for compaction range planning when\n\t * the current model cannot produce a usable plan — so a configured candidate may receive\n\t * the compaction transcript. Borrowing never changes the session model or thinking level.\n\t * Default: settings.fallbackModels\n\t */\n\tfallbackModels?: string[];\n\t/** Hard eligibility gate applied before fallback inference, including compaction borrowing. */\n\tisFallbackModelAllowed?: (model: Model<Api>, effort: string | undefined) => boolean;\n\t/** Models available for cycling (Ctrl+P in interactive mode) */\n\tscopedModels?: Array<{ model: Model<Api>; thinkingLevel?: ThinkingLevel }>;\n\n\t/**\n\t * Tool suppression mode.\n\t *\n\t * - \"all\": no active tools, even with an explicit allowlist\n\t * - \"builtin\": suppress coding-tool defaults only when tools is omitted;\n\t * extension/custom tools remain enabled\n\t */\n\tnoTools?: \"all\" | \"builtin\";\n\t/**\n\t * Optional allowlist of tool names or patterns where `*` matches any characters.\n\t *\n\t * When omitted, Atomic uses the resolved `defaultTools` setting for the initial\n\t * built-in selection when configured. Otherwise it enables the default\n\t * built-in tools (read, bash, edit, write, find, search, ask_user_question,\n\t * todo). Extension/custom tools remain enabled unless `noTools` changes\n\t * that default. MCP tools stay registered for codemode and tool search unless\n\t * an entry starts with `mcp__`; only matching tools are declared directly.\n\t * `excludedTools` applies afterwards. `noTools: \"all\"` overrides this selection.\n\t * Intercom follows the same selection and suppression rules as other extension tools.\n\t * A list of only `+name`/`-name` entries changes the resolved defaults instead\n\t * of allowlisting tools, and is reapplied on reload. Modifiers take exact names;\n\t * mixing them with plain names or patterns throws. Total suppression still wins.\n\t */\n\ttools?: string[];\n\t/**\n\t * Optional blocklist of tool names or patterns, including MCP tools.\n\t *\n\t * Matching built-in, extension, and SDK custom tools are omitted from the\n\t * final session tool registry and active tool set. Unknown names are ignored.\n\t */\n\texcludedTools?: string[];\n\t/** Custom tools to register (in addition to built-in tools). */\n\tcustomTools?: ToolDefinition[];\n\n\t/** Resource loader. When omitted, DefaultResourceLoader is used. */\n\tresourceLoader?: ResourceLoader;\n\n\t/** Session manager. Default: SessionManager.create(cwd) */\n\tsessionManager?: SessionManager;\n\t/** Session storage. Defaults to the resolved settings or the shared local SQLite database. */\n\tsessionStore?: SessionStore | StorageSelection;\n\n\t/** Settings manager. Default: SettingsManager.create(cwd, agentDir) */\n\tsettingsManager?: SettingsManager;\n\t/** Session start event metadata for extension runtime startup. */\n\tsessionStartEvent?: SessionStartEvent;\n\t/** Host bindings installed before extension startup. Rebinding does not replay startup. */\n\textensionBindings?: ExtensionBindings;\n\t/** Session-scoped orchestration policy exposed to extension/tool handlers. */\n\torchestrationContext?: OrchestrationContext;\n\t/** Typed capability policy for an in-process subagent child. */\n\tsubagentPolicy?: SubagentChildPolicy;\n\t/**\n\t * Internal: parent-issued shell task owner for an in-process subagent child. Supplied by the\n\t * parent's child-session options, so child background shells appear in the parent's `/tasks`.\n\t */\n\tparentCommandTaskOwner?: import(\"./tasks/child-command-owner.js\").ChildCommandTaskOwner;\n\t/** Transform the fully constructed base system prompt at session construction. */\n\tsystemPromptTransform?: (prompt: string) => string;\n\t/** Filter inherited session messages before they enter the new AgentSession. */\n\tinitialContextTransform?: (messages: AgentMessage[]) => AgentMessage[];\n}\n\n/** Result from createAgentSession */\nexport interface CreateAgentSessionResult {\n\t/** The created session */\n\tsession: AgentSession;\n\t/** Extensions result (for UI context setup in interactive mode) */\n\textensionsResult: LoadExtensionsResult;\n\t/** Warning when a restored or configured model cannot be selected. */\n\tmodelFallbackMessage?: string;\n\t/** Semantic reason for modelFallbackMessage; suitable for mode control flow. */\n\tmodelFallbackReason?: ModelFallbackReason;\n}\n"]}
|
package/dist/core/sdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"AAqCA,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAsB1F,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,cAAc,kBAAkB,CAAC;AACjC,YAAY,EAAE,aAAa,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AA+BzG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAEnH;AAED,4EAA4E;AAC5E,wBAAgB,2BAA2B,CAC1C,OAAO,EAAE,yBAAyB,EAClC,mBAAmB,UAAO,GACxB,OAAO,CAAC,wBAAwB,CAAC,CAEnC"}
|
package/dist/core/sdk.js
CHANGED
|
@@ -33,6 +33,7 @@ import { resolveSessionStore } from "./session-storage.js";
|
|
|
33
33
|
import { SettingsManager } from "./settings-manager.js";
|
|
34
34
|
import { applyToolModifiers, getToolListError, isToolModifier } from "./settings-merge.js";
|
|
35
35
|
import { ownedSettingsManagers } from "./settings-write-ownership.js";
|
|
36
|
+
import { validateProcessStorage } from "./storage/process-selection.js";
|
|
36
37
|
import { createChildCommandTaskOwner } from "./tasks/child-command-owner.js";
|
|
37
38
|
import { time } from "./timings.js";
|
|
38
39
|
import { createToolNameMatcher } from "./tool-selection.js";
|
|
@@ -137,6 +138,7 @@ function createScopedSession(options, deferStart, persistInitialState = true) {
|
|
|
137
138
|
async function constructAgentSession(options, deferStart, persistInitialState, acquisition) {
|
|
138
139
|
const cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());
|
|
139
140
|
const agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();
|
|
141
|
+
validateProcessStorage(agentDir);
|
|
140
142
|
let resourceLoader = options.resourceLoader;
|
|
141
143
|
// The concrete default can rediscover into private storage (including deferred
|
|
142
144
|
// CLI configuration). Custom discovery stays delegated; composition instantiates
|
|
@@ -552,6 +554,7 @@ async function constructAgentSession(options, deferStart, persistInitialState, a
|
|
|
552
554
|
settingsManager,
|
|
553
555
|
cwd,
|
|
554
556
|
workflowJournal: options.journal,
|
|
557
|
+
storageAgentDir: agentDir,
|
|
555
558
|
childSessionOptions: (child) => inheritChildSessionOptions({
|
|
556
559
|
cwd,
|
|
557
560
|
agentDir,
|
package/dist/core/sdk.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { basename, join, relative, sep } from \"node:path\";\nimport { clampThinkingLevel, type Message, type ProviderHeaders, streamSimple } from \"@bastani/pi-ai/compat\";\nimport { getProviderEnvValue } from \"@bastani/pi-ai/utils/provider-env\";\nimport { Agent, type AgentMessage, setDefaultStreamFn, type ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { getAgentDir } from \"../config.js\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionInternalSurface } from \"./agent-session-methods.ts\";\nimport { restoreAnthropicReplayThinkingBlocks } from \"./anthropic-thinking-guard.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { getBuiltinPackageLocations, getBuiltinPackagePaths } from \"./builtin-packages.ts\";\nimport { withBuiltinResourceLoader } from \"./builtin-resource-loader.ts\";\nimport { getDefaultCacheRetention } from \"./cache-retention.ts\";\nimport { CacheWarmer } from \"./cache-warmer.ts\";\nimport { inheritChildSessionOptions } from \"./child-session-options.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type { ExtensionRunner } from \"./extensions/index.js\";\nimport {\n\tfactoryAcquisitions,\n\tfactoryRollbackError,\n\trollbackFactoryAcquisitions,\n} from \"./extensions/loader-rollback.ts\";\nimport { getModelFastRoute, streamWithFastRoute, withFastRouteStreamOptions } from \"./fast-model-routing.ts\";\nimport { markLifecycleTiming } from \"./lifecycle-timings.ts\";\nimport {\n\tisMandatoryResourceLoader,\n\tisolateMandatoryResourceLoader,\n\twithMandatoryResourceLoader,\n} from \"./mandatory-resource-loader.ts\";\nimport { convertToLlm, repairOrphanToolResults } from \"./messages.ts\";\nimport { findInitialModel, resolveRestoredModelReference } from \"./model-resolver.ts\";\nimport { ModelRuntime } from \"./model-runtime.js\";\nimport { type ModelRuntimeSimpleStreamOptions, mergeHeaders } from \"./model-runtime-streaming.ts\";\nimport { sanitizeOpenAIResponsesPayload } from \"./openai-responses-payload-sanitizer.ts\";\nimport { mergeProviderAttributionHeaders } from \"./provider-attribution.ts\";\nimport { scrubPreCompactionAssistantUsage } from \"./provider-context-usage.ts\";\nimport { canCloneDefaultResourceDiscovery, DefaultResourceLoader } from \"./resource-loader.ts\";\nimport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\nimport { sessionLifecycleCreation, sessionLifecycleScopes } from \"./session-lifecycle-scope.ts\";\nimport {\n\townedSessionManagerStores,\n\townedSessionStores,\n\tsessionGenerationClosing,\n\tsessionLifetime,\n\ttrackSessionWork,\n} from \"./session-lifecycle-work.ts\";\nimport { SessionManager } from \"./session-manager.ts\";\nimport { registerStartupRollback, rollbackStartup } from \"./session-startup-rollback.ts\";\nimport { resolveSessionStore } from \"./session-storage.js\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { applyToolModifiers, getToolListError, isToolModifier } from \"./settings-merge.js\";\nimport { ownedSettingsManagers } from \"./settings-write-ownership.ts\";\nimport type { SessionStore } from \"./storage/session/types.js\";\nimport { createChildCommandTaskOwner } from \"./tasks/child-command-owner.js\";\nimport { time } from \"./timings.ts\";\nimport { createToolNameMatcher } from \"./tool-selection.ts\";\nimport { allToolNames, getDefaultToolNames } from \"./tools/index.js\";\n\nexport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nexport * from \"./sdk-exports.ts\";\nexport type { AtomicBuiltin, CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\n\n// Preserve the pre-0.81 fallback for extensions that construct Agent instances\n// or invoke low-level agent loops without supplying streamFn.\nsetDefaultStreamFn(streamSimple);\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\n/** Keep static model headers visible to hooks without promoting unchanged defaults to request overrides. */\nfunction removeUnownedModelHeaders(\n\theaders: ProviderHeaders | undefined,\n\tmodelHeaders: ProviderHeaders | undefined,\n\trequestHeaders: ProviderHeaders | undefined,\n): ProviderHeaders | undefined {\n\tif (!headers || !modelHeaders) return headers;\n\tconst requestOwned = new Set(Object.keys(requestHeaders ?? {}).map((name) => name.toLowerCase()));\n\tconst filtered = { ...headers };\n\tfor (const [modelName, modelValue] of Object.entries(modelHeaders)) {\n\t\tconst lowerName = modelName.toLowerCase();\n\t\tif (requestOwned.has(lowerName)) continue;\n\t\tfor (const [name, value] of Object.entries(filtered)) {\n\t\t\tif (name.toLowerCase() === lowerName && value === modelValue) delete filtered[name];\n\t\t}\n\t}\n\treturn Object.keys(filtered).length > 0 ? filtered : undefined;\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@bastani/pi-ai/compat';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\treturn createScopedSession(options, false);\n}\n\n/** Internal CLI assembly seam. Not exported from the package entrypoint. */\nexport function createUnstartedAgentSession(\n\toptions: CreateAgentSessionOptions,\n\tpersistInitialState = true,\n): Promise<CreateAgentSessionResult> {\n\treturn createScopedSession(options, true, persistInitialState);\n}\n\nfunction createScopedSession(\n\toptions: CreateAgentSessionOptions,\n\tdeferStart: boolean,\n\tpersistInitialState = true,\n): Promise<CreateAgentSessionResult> {\n\tconst inherited = sessionLifecycleCreation.getStore();\n\tconst context = inherited && !inherited.claimed ? inherited : { scope: {} };\n\treturn sessionLifecycleCreation.run({ ...context, claimed: true }, async () => {\n\t\tconst result = await factoryAcquisitions.run(\n\t\t\t{ pending: new Map(), replacement: context.replacement },\n\t\t\tasync () => {\n\t\t\t\tconst acquisition: { store?: SessionStore } = {\n\t\t\t\t\tstore: options.sessionManager ? ownedSessionManagerStores.get(options.sessionManager) : undefined,\n\t\t\t\t};\n\t\t\t\tif (options.sessionManager) ownedSessionManagerStores.delete(options.sessionManager);\n\t\t\t\ttry {\n\t\t\t\t\treturn await constructAgentSession(\n\t\t\t\t\t\t{ ...options, extensionBindings: options.extensionBindings ?? context.bindings },\n\t\t\t\t\t\tdeferStart,\n\t\t\t\t\t\tpersistInitialState,\n\t\t\t\t\t\tacquisition,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst failures = await rollbackFactoryAcquisitions();\n\t\t\t\t\tif (acquisition.store) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait acquisition.store.close();\n\t\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\t\tfailures.push(cause);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthrow factoryRollbackError(error, failures);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tsessionLifecycleScopes.set(result.session, context.scope);\n\t\treturn result;\n\t});\n}\n\nasync function constructAgentSession(\n\toptions: CreateAgentSessionOptions,\n\tdeferStart: boolean,\n\tpersistInitialState: boolean,\n\tacquisition: { store?: SessionStore },\n): Promise<CreateAgentSessionResult> {\n\tconst cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n\tlet resourceLoader = options.resourceLoader;\n\t// The concrete default can rediscover into private storage (including deferred\n\t// CLI configuration). Custom discovery stays delegated; composition instantiates\n\t// its extensions independently without replacing overridden resource policy.\n\tif (canCloneDefaultResourceDiscovery(resourceLoader)) {\n\t\tresourceLoader = await resourceLoader.createSessionLoader(sessionLifecycleCreation.getStore()!.scope);\n\t}\n\tif (resourceLoader) resourceLoader = await isolateMandatoryResourceLoader(resourceLoader);\n\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst modelRuntime = options.modelRuntime ?? (await ModelRuntime.create({ authPath, modelsPath }));\n\tawait modelRuntime.refresh({ allowNetwork: false });\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tlet sessionManager = options.sessionManager;\n\tif (!sessionManager) {\n\t\tconst store = await resolveSessionStore(cwd, {\n\t\t\tagentDir,\n\t\t\tsettings: settingsManager.getSettings(),\n\t\t\tsessionStore: options.sessionStore,\n\t\t});\n\t\tif (store !== options.sessionStore) acquisition.store = store;\n\t\tsessionManager = await SessionManager.create(store, cwd);\n\t}\n\n\t// Mark workflow-created sessions as internal so they are excluded from the\n\t// standard `/resume` history while remaining resumable via `/workflow resume`.\n\t// Only stamped when the orchestration context identifies a workflow stage;\n\t// reattaching to an already-marked session preserves its existing marker.\n\tif (options.orchestrationContext?.kind === \"workflow-stage\") {\n\t\tconst ctx = options.orchestrationContext;\n\t\tawait sessionManager.markSessionInternal({\n\t\t\trunId: ctx.workflowRunId,\n\t\t\tstageId: ctx.workflowStageId,\n\t\t\tstageName: ctx.workflowStageName,\n\t\t});\n\t}\n\n\tconst disableWorkflowExtension =\n\t\toptions.orchestrationContext?.kind === \"workflow-stage\" || options.subagentPolicy !== undefined;\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\tbuiltinPackagePaths: getBuiltinPackagePaths(options.builtins).map((source) =>\n\t\t\t\tdisableWorkflowExtension && basename(source) === \"workflows\" ? { source, extensions: [] } : source,\n\t\t\t),\n\t\t});\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\tif (\n\t\t(options.resourceLoader || options.builtins || disableWorkflowExtension) &&\n\t\t(!isMandatoryResourceLoader(resourceLoader) || options.builtins || disableWorkflowExtension)\n\t) {\n\t\tresourceLoader = await withBuiltinResourceLoader(\n\t\t\tresourceLoader,\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\toptions.builtins,\n\t\t\tdisableWorkflowExtension,\n\t\t);\n\t}\n\tif (options.builtins?.intercom !== false) {\n\t\tresourceLoader = await withMandatoryResourceLoader(resourceLoader, cwd);\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst repairedMessages = repairOrphanToolResults(existingSession.messages, { repairTrailing: true });\n\tconst existingMessages = options.initialContextTransform\n\t\t? options.initialContextTransform(repairedMessages)\n\t\t: repairedMessages;\n\tconst hasExistingSession = existingMessages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\tlet modelFallbackReason: import(\"./model-resolver-types.ts\").ModelFallbackReason | undefined;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tmodel = await resolveRestoredModelReference(\n\t\t\texistingSession.model.provider,\n\t\t\texistingSession.model.modelId,\n\t\t\tmodelRuntime,\n\t\t);\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t\tmodelFallbackReason = \"session-restore\";\n\t\t}\n\t}\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelThinkingLevels: settingsManager.getAllModelThinkingLevels(),\n\t\t\tmodelRuntime,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tif (result.fallbackReason === \"configured-provider-unsupported\") {\n\t\t\t\tmodelFallbackMessage = result.fallbackMessage;\n\t\t\t\tmodelFallbackReason = result.fallbackReason;\n\t\t\t} else if (!modelFallbackMessage) {\n\t\t\t\tmodelFallbackMessage = result.fallbackMessage ?? formatNoModelsAvailableMessage();\n\t\t\t\tmodelFallbackReason = result.fallbackReason ?? \"no-models-available\";\n\t\t\t}\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to per-model override, then global default\n\tif (thinkingLevel === undefined && model) {\n\t\tthinkingLevel = settingsManager.getModelThinkingLevel(model.provider, model.id);\n\t}\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model) {\n\t\tthinkingLevel = \"off\";\n\t} else {\n\t\tthinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n\t}\n\n\t// `defaultTools` narrows only the initial BUILT-IN selection. It must not\n\t// narrow `allowedToolNames`: a narrow allowlist would drop every extension\n\t// and SDK custom tool (workflow, subagent, intercom, mcp, web_search, ...)\n\t// for any user who configures it (upstream 4d9aa837 + companion fix 541045ae).\n\tconst toolListError = options.tools ? getToolListError(options.tools) : undefined;\n\tif (toolListError) throw new Error(`Invalid tools option: ${toolListError}`);\n\tconst defaultToolNames = options.noTools ? [] : (settingsManager.getDefaultTools() ?? getDefaultToolNames());\n\tconst toolModifiers = options.tools?.some(isToolModifier) ? options.tools : undefined;\n\tconst selectedToolNames = toolModifiers ? applyToolModifiers(defaultToolNames, toolModifiers) : options.tools;\n\tconst allowedToolNames =\n\t\toptions.noTools === \"all\"\n\t\t\t? []\n\t\t\t: toolModifiers\n\t\t\t\t? undefined\n\t\t\t\t: options.tools === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: [...options.tools];\n\tconst subagentPolicy =\n\t\toptions.subagentPolicy && (options.subagentPolicy.depth ?? 0) >= 1\n\t\t\t? {\n\t\t\t\t\t...options.subagentPolicy,\n\t\t\t\t\ttools: allowedToolNames,\n\t\t\t\t\tmcpDirectTools:\n\t\t\t\t\t\toptions.noTools === \"all\"\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: (options.subagentPolicy.mcpDirectTools ?? (allowedToolNames === undefined ? undefined : [])),\n\t\t\t\t}\n\t\t\t: options.subagentPolicy;\n\tconst isExcludedTool = options.excludedTools ? createToolNameMatcher(options.excludedTools) : undefined;\n\tconst initialActiveToolNames = (options.noTools === \"all\" ? [] : (selectedToolNames ?? defaultToolNames)).filter(\n\t\t(name) => !isExcludedTool?.(name),\n\t);\n\tconst childBuiltins = { ...options.builtins };\n\tconst childExcludedTools = [\n\t\t...(options.excludedTools ?? []),\n\t\t...(allowedToolNames === undefined\n\t\t\t? [...allToolNames].filter((name) => !initialActiveToolNames.includes(name))\n\t\t\t: []),\n\t];\n\n\tlet agent: Agent;\n\n\tlet lastConvertedLlmMessages: Message[] | undefined;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\tlastConvertedLlmMessages = converted;\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\tconst filtered = converted.map((msg): Message => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\"\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\t\t\ttext: \"Image reading is disabled.\",\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t// `user` and `toolResult` carry different content unions, and mapping them in one\n\t\t\t\t\t\t// branch widens both to their union. Only image blocks are rewritten here, so each\n\t\t\t\t\t\t// message keeps its own shape at runtime.\n\t\t\t\t\t\treturn { ...msg, content: filteredContent } as Message;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t\tlastConvertedLlmMessages = filtered;\n\t\treturn filtered;\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\tconst cacheWarmer = new CacheWarmer(\n\t\t{\n\t\t\tstreamSimple: (model, context, requestOptions) => {\n\t\t\t\tconst extension = modelRuntime.getRegisteredProviderConfig(model.provider);\n\t\t\t\treturn getModelFastRoute(model)?.serviceTier !== undefined &&\n\t\t\t\t\textension?.aliasOf === undefined &&\n\t\t\t\t\t!(extension?.streamSimple && extension.api === model.api)\n\t\t\t\t\t? streamWithFastRoute(model, context, requestOptions)\n\t\t\t\t\t: modelRuntime.streamSimple(model, context, requestOptions);\n\t\t\t},\n\t\t},\n\t\tsessionManager,\n\t\t() => settingsManager.getCacheWarmingMode(),\n\t\tasync (event) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) {\n\t\t\t\treturn event.action;\n\t\t\t}\n\t\t\treturn (await runner.emitCacheWarmingDecision(event)) ?? event.action;\n\t\t},\n\t\t(refresh) => trackSessionWork(session, refresh),\n\t);\n\n\tconst handleProviderStreamEvent: NonNullable<ModelRuntimeSimpleStreamOptions[\"onProviderStreamEvent\"]> = async (\n\t\tdata,\n\t\tmodel,\n\t) => {\n\t\tconst runner = extensionRunnerRef.current;\n\t\tif (!runner?.hasHandlers(\"provider_stream_event\")) return;\n\t\tawait runner.emit({\n\t\t\ttype: \"provider_stream_event\",\n\t\t\tprovider: model.provider,\n\t\t\tapi: model.api,\n\t\t\tmodel: model.id,\n\t\t\tdata,\n\t\t});\n\t};\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t\tmessages: existingMessages,\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tstreamFn: async (model, context, streamOptions) => {\n\t\t\tconst onProviderStreamEvent = streamOptions?.onProviderStreamEvent ?? handleProviderStreamEvent;\n\t\t\tconst prepare = async () => {\n\t\t\t\tconst authResult = await modelRuntime.getRequestAuth(model, {\n\t\t\t\t\tapiKey: streamOptions?.apiKey,\n\t\t\t\t\tenv: streamOptions?.env,\n\t\t\t\t\tsignal: streamOptions?.signal,\n\t\t\t\t});\n\t\t\t\tconst compatibility = authResult ? undefined : modelRuntime.getCompatibilityRequestConfig(model);\n\t\t\t\tif (!authResult && compatibility?.authHeader) {\n\t\t\t\t\tthrow new Error(`No API key found for \"${model.provider}\"`);\n\t\t\t\t}\n\t\t\t\tconst auth = {\n\t\t\t\t\tapiKey: authResult?.auth.apiKey,\n\t\t\t\t\theaders: authResult?.auth.headers ?? compatibility?.headers,\n\t\t\t\t\tbaseUrl: authResult?.auth.baseUrl,\n\t\t\t\t\tenv: authResult?.env,\n\t\t\t\t};\n\t\t\t\tconst requestModel =\n\t\t\t\t\tauth.baseUrl !== undefined && auth.baseUrl !== model.baseUrl\n\t\t\t\t\t\t? { ...model, baseUrl: auth.baseUrl }\n\t\t\t\t\t\t: model;\n\t\t\t\tconst providerRetrySettings = settingsManager.getProviderRetrySettings();\n\t\t\t\tconst httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n\t\t\t\t// SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n\t\t\t\t// Use max int32 to effectively disable the timeout.\n\t\t\t\tconst effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n\t\t\t\tconst timeoutMs = streamOptions?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n\t\t\t\tconst websocketConnectTimeoutMs =\n\t\t\t\t\tstreamOptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n\t\t\t\tconst streamDeadlineMs = streamOptions?.streamDeadlineMs ?? settingsManager.getStreamDeadlineMs();\n\t\t\t\tconst requestHeaders = mergeProviderAttributionHeaders(\n\t\t\t\t\tmodel,\n\t\t\t\t\tsettingsManager,\n\t\t\t\t\tstreamOptions?.sessionId,\n\t\t\t\t\tauth.headers,\n\t\t\t\t\tstreamOptions?.headers,\n\t\t\t\t);\n\t\t\t\tconst mergedHeaders = mergeHeaders(model.headers, requestHeaders);\n\t\t\t\tconst headerRunner = extensionRunnerRef.current;\n\t\t\t\tconst assembledHeaders = headerRunner?.hasHandlers(\"before_provider_headers\")\n\t\t\t\t\t? await headerRunner.emitBeforeProviderHeaders(mergedHeaders ?? {})\n\t\t\t\t\t: mergedHeaders;\n\t\t\t\tconst extensionProvider = modelRuntime.getRegisteredProviderConfig(requestModel.provider);\n\t\t\t\tconst usesExtensionStream =\n\t\t\t\t\textensionProvider?.streamSimple !== undefined && requestModel.api === extensionProvider.api;\n\t\t\t\tconst transportHeaders = usesExtensionStream\n\t\t\t\t\t? assembledHeaders\n\t\t\t\t\t: removeUnownedModelHeaders(assembledHeaders, model.headers, requestHeaders);\n\t\t\t\t// Fast-vs-normal is the selected model's own identity, so the canonical `-fast` model is what\n\t\t\t\t// dispatch, the recorded assistant message, session state, and usage all see. The provider\n\t\t\t\t// adapter reads `fastRoute.upstreamModelId` when it serializes the outbound request.\n\t\t\t\tconst fastRoute = getModelFastRoute(requestModel);\n\t\t\t\tif (fastRoute?.serviceTier !== undefined && !usesExtensionStream && !authResult) {\n\t\t\t\t\tthrow new Error(`No API key found for \"${model.provider}\"`);\n\t\t\t\t}\n\t\t\t\tconst env = auth.env || streamOptions?.env ? { ...auth.env, ...streamOptions?.env } : undefined;\n\t\t\t\tconst cacheRetentionEnv = getProviderEnvValue(\"PI_CACHE_RETENTION\", env);\n\t\t\t\t// Shared by main chat, workflow stages and subagents; provider capability gates still apply.\n\t\t\t\tconst cacheRetention =\n\t\t\t\t\tstreamOptions?.cacheRetention ??\n\t\t\t\t\t(cacheRetentionEnv === \"none\"\n\t\t\t\t\t\t? \"none\"\n\t\t\t\t\t\t: !cacheRetentionEnv\n\t\t\t\t\t\t\t? getDefaultCacheRetention(requestModel)\n\t\t\t\t\t\t\t: cacheRetentionEnv === \"long\"\n\t\t\t\t\t\t\t\t? \"long\"\n\t\t\t\t\t\t\t\t: \"short\");\n\t\t\t\tconst fastRouteStreamOptions = withFastRouteStreamOptions(fastRoute, {\n\t\t\t\t\t...streamOptions,\n\t\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\t\tenv,\n\t\t\t\t\tcacheRetention,\n\t\t\t\t\ttimeoutMs,\n\t\t\t\t\twebsocketConnectTimeoutMs,\n\t\t\t\t\tstreamDeadlineMs,\n\t\t\t\t\tmaxRetries: streamOptions?.maxRetries ?? providerRetrySettings.maxRetries,\n\t\t\t\t\tmaxRetryDelayMs: streamOptions?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n\t\t\t\t\theaders: transportHeaders,\n\t\t\t\t});\n\t\t\t\tconst nativeFastRoute =\n\t\t\t\t\tfastRoute?.serviceTier !== undefined && !usesExtensionStream && extensionProvider?.aliasOf === undefined;\n\t\t\t\tconst requestOptions: ModelRuntimeSimpleStreamOptions = {\n\t\t\t\t\t...fastRouteStreamOptions,\n\t\t\t\t\tonProviderStreamEvent,\n\t\t\t\t\tpreparedRequestAuth: {\n\t\t\t\t\t\tresolution: authResult,\n\t\t\t\t\t\treprepare: async () => {\n\t\t\t\t\t\t\tconst next = await prepare();\n\t\t\t\t\t\t\treturn { model: next.requestModel, options: next.requestOptions };\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstreamSimple: nativeFastRoute\n\t\t\t\t\t\t\t? (routeModel, routeContext, routeOptions) =>\n\t\t\t\t\t\t\t\t\tstreamWithFastRoute(routeModel, routeContext, routeOptions)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn { authResult, requestModel, fastRouteStreamOptions, requestOptions };\n\t\t\t};\n\t\t\tconst { authResult, requestModel, fastRouteStreamOptions, requestOptions } = await prepare();\n\t\t\tif (streamOptions?.sessionId === sessionManager.getSessionId()) {\n\t\t\t\tconst prefix = [...agent.state.messages];\n\t\t\t\tconst warmOptions: ModelRuntimeSimpleStreamOptions = {\n\t\t\t\t\t...fastRouteStreamOptions,\n\t\t\t\t\tpreparedRequestAuth: {\n\t\t\t\t\t\tresolution: authResult,\n\t\t\t\t\t\treprepare: requestOptions.preparedRequestAuth?.reprepare,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tcacheWarmer.start({ model: requestModel, context, options: warmOptions }, () => {\n\t\t\t\t\tconst current = agent.state.model;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!sessionLifetime(session).aborted &&\n\t\t\t\t\t\t!sessionGenerationClosing.has(session) &&\n\t\t\t\t\t\t!(session as unknown as AgentSessionInternalSurface)._agentRunAbortRequested &&\n\t\t\t\t\t\tcurrent?.provider === model.provider &&\n\t\t\t\t\t\tcurrent.id === model.id &&\n\t\t\t\t\t\tprefix.every((message, index) => agent.state.messages[index] === message)\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t\t// The Codex routing identity is attached by ModelRuntimeStreaming, after auth headers are\n\t\t\t// merged. Applying it here would be inert: `mergeHeaders` copies the header object the\n\t\t\t// wrapper mutates.\n\t\t\treturn modelRuntime.streamSimple(requestModel, context, requestOptions);\n\t\t},\n\t\tonPayload: async (payload, model) => {\n\t\t\tconst sourceMessages = lastConvertedLlmMessages;\n\t\t\tconst replayGuardedPayload = sourceMessages\n\t\t\t\t? restoreAnthropicReplayThinkingBlocks(payload, sourceMessages, model)\n\t\t\t\t: payload;\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tlet finalPayload: unknown;\n\t\t\tif (!runner?.hasHandlers(\"before_provider_request\")) {\n\t\t\t\tfinalPayload = replayGuardedPayload;\n\t\t\t} else {\n\t\t\t\tconst extensionPayload = await runner.emitBeforeProviderRequest(replayGuardedPayload);\n\t\t\t\tfinalPayload = sourceMessages\n\t\t\t\t\t? restoreAnthropicReplayThinkingBlocks(extensionPayload, sourceMessages, model)\n\t\t\t\t\t: extensionPayload;\n\t\t\t}\n\t\t\tconst sanitizedPayload = sanitizeOpenAIResponsesPayload(finalPayload, model);\n\t\t\tmarkLifecycleTiming(\"before-provider-request\");\n\t\t\treturn sanitizedPayload;\n\t\t},\n\t\tonResponse: async (response, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"after_provider_response\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runner.emit({\n\t\t\t\ttype: \"after_provider_response\",\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t});\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tconst transformed = runner ? await runner.emitContext(messages) : messages;\n\t\t\treturn scrubPreCompactionAssistantUsage(transformed, sessionManager.getBranch());\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n\t});\n\n\t// The isolated host mirrors child-owned storage without writing startup metadata.\n\tif (persistInitialState) {\n\t\tif (hasExistingSession) {\n\t\t\tif (!hasThinkingEntry) {\n\t\t\t\tawait sessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t\t}\n\t\t} else {\n\t\t\tif (model) {\n\t\t\t\tawait sessionManager.appendModelChange(model.provider, model.id);\n\t\t\t}\n\t\t\tawait sessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t}\n\n\tconst providerRollback = modelRuntime.createExtensionProviderTransaction();\n\tlet session: AgentSession;\n\tconst childCommandTaskOwner = createChildCommandTaskOwner(() => session.getAgentTaskHost());\n\ttry {\n\t\tsession = new AgentSession({\n\t\t\tagent,\n\t\t\tsessionManager,\n\t\t\tsettingsManager,\n\t\t\tcwd,\n\t\t\tworkflowJournal: options.journal,\n\t\t\tchildSessionOptions: (child) =>\n\t\t\t\tinheritChildSessionOptions(\n\t\t\t\t\t{\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tagentDir,\n\t\t\t\t\t\tmodelRuntime,\n\t\t\t\t\t\tsettingsManager,\n\t\t\t\t\t\tmodel: session.model,\n\t\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\t\tfallbackModels: options.fallbackModels ?? settingsManager.getFallbackModels(),\n\t\t\t\t\t\tisFallbackModelAllowed: options.isFallbackModelAllowed,\n\t\t\t\t\t\tbuiltins: childBuiltins,\n\t\t\t\t\t\ttools: allowedToolNames,\n\t\t\t\t\t\tnoTools: options.noTools,\n\t\t\t\t\t\texcludedTools: childExcludedTools,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\textensionBindings: session.extensionRunner.getChildHostBindings(),\n\t\t\t\t\t\tparentCommandTaskOwner: childCommandTaskOwner,\n\t\t\t\t\t},\n\t\t\t\t\tchild,\n\t\t\t\t\tsession.getAllTools().map((tool) => tool.name),\n\t\t\t\t),\n\t\t\tscopedModels: options.scopedModels,\n\t\t\tfallbackModels: options.fallbackModels ?? settingsManager.getFallbackModels(),\n\t\t\tisFallbackModelAllowed: options.isFallbackModelAllowed,\n\t\t\tresourceLoader,\n\t\t\tcustomTools: options.customTools,\n\t\t\tmodelRuntime,\n\t\t\tcacheWarmer,\n\t\t\tinitialActiveToolNames,\n\t\t\tusesDefaultTools: (options.tools === undefined || toolModifiers !== undefined) && !options.noTools,\n\t\t\tdefaultToolModifiers: toolModifiers,\n\t\t\tallowedToolNames,\n\t\t\texcludedToolNames: options.excludedTools,\n\t\t\textensionRunnerRef,\n\t\t\tsessionStartEvent: options.sessionStartEvent,\n\t\t\torchestrationContext: options.orchestrationContext,\n\t\t\tsubagentPolicy,\n\t\t\tparentCommandTaskOwner: options.parentCommandTaskOwner,\n\t\t\tsystemPromptTransform: options.systemPromptTransform,\n\t\t\tcontextProjectionTransform: options.initialContextTransform,\n\t\t});\n\t} catch (error) {\n\t\t// The constructor releases its own leases/subscriptions; restore borrowed provider state here.\n\t\tconst cleanup = await Promise.allSettled([providerRollback.commit(), settingsManager.flush()]);\n\t\tconst failures = cleanup.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t\tif (failures.length)\n\t\t\tthrow new AggregateError([error, ...failures], \"Session construction failed and rollback reported errors\");\n\t\tthrow error;\n\t}\n\t// Only the selected factories transfer. Discovery may have acquired omitted factories.\n\tconst acquisitions = factoryAcquisitions.getStore();\n\tconst selected = resourceLoader.getExtensions();\n\tfor (const extension of selected.extensions) acquisitions?.pending?.delete(extension);\n\tif (!options.settingsManager) ownedSettingsManagers.set(settingsManager, session);\n\tconst rollbackReason = sessionLifecycleCreation.getStore()?.replacement ? \"new\" : \"quit\";\n\tregisterStartupRollback(session.extensionRunner, async (error) => {\n\t\tconst results = await Promise.allSettled([\n\t\t\t(session as unknown as AgentSessionInternalSurface)._close({\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: rollbackReason,\n\t\t\t}),\n\t\t\tproviderRollback.commit(),\n\t\t]);\n\t\tconst cleanupErrors = results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t\tif (cleanupErrors.length)\n\t\t\tthrow new AggregateError([error, ...cleanupErrors], \"Extension startup failed and rollback reported errors\");\n\t\tthrow error;\n\t});\n\tif (acquisition.store) {\n\t\townedSessionStores.set(session, acquisition.store);\n\t\tacquisition.store = undefined;\n\t}\n\ttry {\n\t\t// Omitted factories may share the selected runtime: release their acquisitions,\n\t\t// but leave that runtime and its selected subscriptions owned by the runner.\n\t\tconst failures = await rollbackFactoryAcquisitions(new Set([selected.runtime]));\n\t\tif (failures.length)\n\t\t\tthrow Object.assign(new AggregateError(failures, \"Unselected extension cleanup failed\"), {\n\t\t\t\tcode: \"ShutdownFailed\",\n\t\t\t});\n\t\tconst extensionsResult = resourceLoader.getExtensions();\n\t\tfor (const failure of extensionsResult.errors) {\n\t\t\tconst builtin = getBuiltinPackageLocations().find(({ packageDir }) => {\n\t\t\t\tconst path = relative(packageDir, failure.path);\n\t\t\t\treturn path !== \"..\" && !path.startsWith(`..${sep}`) && !path.startsWith(sep);\n\t\t\t});\n\t\t\tif (builtin)\n\t\t\t\tthrow Object.assign(new Error(`Builtin unavailable: ${builtin.packageName}: ${failure.error}`), {\n\t\t\t\t\tcode: \"BuiltinUnavailable\",\n\t\t\t\t});\n\t\t}\n\t\tif (!deferStart) await session.bindExtensions(options.extensionBindings ?? {});\n\t\treturn { session, extensionsResult, modelFallbackMessage, modelFallbackReason };\n\t} catch (error) {\n\t\treturn rollbackStartup(session.extensionRunner, error instanceof Error ? error : new Error(String(error)));\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/core/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import { basename, join, relative, sep } from \"node:path\";\nimport { clampThinkingLevel, type Message, type ProviderHeaders, streamSimple } from \"@bastani/pi-ai/compat\";\nimport { getProviderEnvValue } from \"@bastani/pi-ai/utils/provider-env\";\nimport { Agent, type AgentMessage, setDefaultStreamFn, type ThinkingLevel } from \"@earendil-works/pi-agent-core\";\nimport { getAgentDir } from \"../config.js\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { AgentSession } from \"./agent-session.js\";\nimport type { AgentSessionInternalSurface } from \"./agent-session-methods.ts\";\nimport { restoreAnthropicReplayThinkingBlocks } from \"./anthropic-thinking-guard.ts\";\nimport { formatNoModelsAvailableMessage } from \"./auth-guidance.ts\";\nimport { getBuiltinPackageLocations, getBuiltinPackagePaths } from \"./builtin-packages.ts\";\nimport { withBuiltinResourceLoader } from \"./builtin-resource-loader.ts\";\nimport { getDefaultCacheRetention } from \"./cache-retention.ts\";\nimport { CacheWarmer } from \"./cache-warmer.ts\";\nimport { inheritChildSessionOptions } from \"./child-session-options.ts\";\nimport { DEFAULT_THINKING_LEVEL } from \"./defaults.ts\";\nimport type { ExtensionRunner } from \"./extensions/index.js\";\nimport {\n\tfactoryAcquisitions,\n\tfactoryRollbackError,\n\trollbackFactoryAcquisitions,\n} from \"./extensions/loader-rollback.ts\";\nimport { getModelFastRoute, streamWithFastRoute, withFastRouteStreamOptions } from \"./fast-model-routing.ts\";\nimport { markLifecycleTiming } from \"./lifecycle-timings.ts\";\nimport {\n\tisMandatoryResourceLoader,\n\tisolateMandatoryResourceLoader,\n\twithMandatoryResourceLoader,\n} from \"./mandatory-resource-loader.ts\";\nimport { convertToLlm, repairOrphanToolResults } from \"./messages.ts\";\nimport { findInitialModel, resolveRestoredModelReference } from \"./model-resolver.ts\";\nimport { ModelRuntime } from \"./model-runtime.js\";\nimport { type ModelRuntimeSimpleStreamOptions, mergeHeaders } from \"./model-runtime-streaming.ts\";\nimport { sanitizeOpenAIResponsesPayload } from \"./openai-responses-payload-sanitizer.ts\";\nimport { mergeProviderAttributionHeaders } from \"./provider-attribution.ts\";\nimport { scrubPreCompactionAssistantUsage } from \"./provider-context-usage.ts\";\nimport { canCloneDefaultResourceDiscovery, DefaultResourceLoader } from \"./resource-loader.ts\";\nimport type { CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\nimport { sessionLifecycleCreation, sessionLifecycleScopes } from \"./session-lifecycle-scope.ts\";\nimport {\n\townedSessionManagerStores,\n\townedSessionStores,\n\tsessionGenerationClosing,\n\tsessionLifetime,\n\ttrackSessionWork,\n} from \"./session-lifecycle-work.ts\";\nimport { SessionManager } from \"./session-manager.ts\";\nimport { registerStartupRollback, rollbackStartup } from \"./session-startup-rollback.ts\";\nimport { resolveSessionStore } from \"./session-storage.js\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { applyToolModifiers, getToolListError, isToolModifier } from \"./settings-merge.js\";\nimport { ownedSettingsManagers } from \"./settings-write-ownership.ts\";\nimport { validateProcessStorage } from \"./storage/process-selection.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\nimport { createChildCommandTaskOwner } from \"./tasks/child-command-owner.js\";\nimport { time } from \"./timings.ts\";\nimport { createToolNameMatcher } from \"./tool-selection.ts\";\nimport { allToolNames, getDefaultToolNames } from \"./tools/index.js\";\n\nexport type { ModelFallbackReason } from \"./model-resolver-types.ts\";\nexport * from \"./sdk-exports.ts\";\nexport type { AtomicBuiltin, CreateAgentSessionOptions, CreateAgentSessionResult } from \"./sdk-types.ts\";\n\n// Preserve the pre-0.81 fallback for extensions that construct Agent instances\n// or invoke low-level agent loops without supplying streamFn.\nsetDefaultStreamFn(streamSimple);\n\n// Helper Functions\n\nfunction getDefaultAgentDir(): string {\n\treturn getAgentDir();\n}\n\n/** Keep static model headers visible to hooks without promoting unchanged defaults to request overrides. */\nfunction removeUnownedModelHeaders(\n\theaders: ProviderHeaders | undefined,\n\tmodelHeaders: ProviderHeaders | undefined,\n\trequestHeaders: ProviderHeaders | undefined,\n): ProviderHeaders | undefined {\n\tif (!headers || !modelHeaders) return headers;\n\tconst requestOwned = new Set(Object.keys(requestHeaders ?? {}).map((name) => name.toLowerCase()));\n\tconst filtered = { ...headers };\n\tfor (const [modelName, modelValue] of Object.entries(modelHeaders)) {\n\t\tconst lowerName = modelName.toLowerCase();\n\t\tif (requestOwned.has(lowerName)) continue;\n\t\tfor (const [name, value] of Object.entries(filtered)) {\n\t\t\tif (name.toLowerCase() === lowerName && value === modelValue) delete filtered[name];\n\t\t}\n\t}\n\treturn Object.keys(filtered).length > 0 ? filtered : undefined;\n}\n\n/**\n * Create an AgentSession with the specified options.\n *\n * @example\n * ```typescript\n * // Minimal - uses defaults\n * const { session } = await createAgentSession();\n *\n * // With explicit model\n * import { getModel } from '@bastani/pi-ai/compat';\n * const { session } = await createAgentSession({\n * model: getModel('anthropic', 'claude-opus-4-5'),\n * thinkingLevel: 'high',\n * });\n *\n * // Continue previous session\n * const { session, modelFallbackMessage } = await createAgentSession({\n * continueSession: true,\n * });\n *\n * // Full control\n * const loader = new DefaultResourceLoader({\n * cwd: process.cwd(),\n * agentDir: getAgentDir(),\n * settingsManager: SettingsManager.create(),\n * });\n * await loader.reload();\n * const { session } = await createAgentSession({\n * model: myModel,\n * tools: [\"read\", \"bash\"],\n * resourceLoader: loader,\n * sessionManager: SessionManager.inMemory(),\n * });\n * ```\n */\nexport async function createAgentSession(options: CreateAgentSessionOptions = {}): Promise<CreateAgentSessionResult> {\n\treturn createScopedSession(options, false);\n}\n\n/** Internal CLI assembly seam. Not exported from the package entrypoint. */\nexport function createUnstartedAgentSession(\n\toptions: CreateAgentSessionOptions,\n\tpersistInitialState = true,\n): Promise<CreateAgentSessionResult> {\n\treturn createScopedSession(options, true, persistInitialState);\n}\n\nfunction createScopedSession(\n\toptions: CreateAgentSessionOptions,\n\tdeferStart: boolean,\n\tpersistInitialState = true,\n): Promise<CreateAgentSessionResult> {\n\tconst inherited = sessionLifecycleCreation.getStore();\n\tconst context = inherited && !inherited.claimed ? inherited : { scope: {} };\n\treturn sessionLifecycleCreation.run({ ...context, claimed: true }, async () => {\n\t\tconst result = await factoryAcquisitions.run(\n\t\t\t{ pending: new Map(), replacement: context.replacement },\n\t\t\tasync () => {\n\t\t\t\tconst acquisition: { store?: SessionStore } = {\n\t\t\t\t\tstore: options.sessionManager ? ownedSessionManagerStores.get(options.sessionManager) : undefined,\n\t\t\t\t};\n\t\t\t\tif (options.sessionManager) ownedSessionManagerStores.delete(options.sessionManager);\n\t\t\t\ttry {\n\t\t\t\t\treturn await constructAgentSession(\n\t\t\t\t\t\t{ ...options, extensionBindings: options.extensionBindings ?? context.bindings },\n\t\t\t\t\t\tdeferStart,\n\t\t\t\t\t\tpersistInitialState,\n\t\t\t\t\t\tacquisition,\n\t\t\t\t\t);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst failures = await rollbackFactoryAcquisitions();\n\t\t\t\t\tif (acquisition.store) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tawait acquisition.store.close();\n\t\t\t\t\t\t} catch (cause) {\n\t\t\t\t\t\t\tfailures.push(cause);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthrow factoryRollbackError(error, failures);\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t\tsessionLifecycleScopes.set(result.session, context.scope);\n\t\treturn result;\n\t});\n}\n\nasync function constructAgentSession(\n\toptions: CreateAgentSessionOptions,\n\tdeferStart: boolean,\n\tpersistInitialState: boolean,\n\tacquisition: { store?: SessionStore },\n): Promise<CreateAgentSessionResult> {\n\tconst cwd = resolvePath(options.cwd ?? options.sessionManager?.getCwd() ?? process.cwd());\n\tconst agentDir = options.agentDir ? resolvePath(options.agentDir) : getDefaultAgentDir();\n\tvalidateProcessStorage(agentDir);\n\tlet resourceLoader = options.resourceLoader;\n\t// The concrete default can rediscover into private storage (including deferred\n\t// CLI configuration). Custom discovery stays delegated; composition instantiates\n\t// its extensions independently without replacing overridden resource policy.\n\tif (canCloneDefaultResourceDiscovery(resourceLoader)) {\n\t\tresourceLoader = await resourceLoader.createSessionLoader(sessionLifecycleCreation.getStore()!.scope);\n\t}\n\tif (resourceLoader) resourceLoader = await isolateMandatoryResourceLoader(resourceLoader);\n\n\tconst authPath = options.agentDir ? join(agentDir, \"auth.json\") : undefined;\n\tconst modelsPath = options.agentDir ? join(agentDir, \"models.json\") : undefined;\n\tconst modelRuntime = options.modelRuntime ?? (await ModelRuntime.create({ authPath, modelsPath }));\n\tawait modelRuntime.refresh({ allowNetwork: false });\n\n\tconst settingsManager = options.settingsManager ?? SettingsManager.create(cwd, agentDir);\n\tlet sessionManager = options.sessionManager;\n\tif (!sessionManager) {\n\t\tconst store = await resolveSessionStore(cwd, {\n\t\t\tagentDir,\n\t\t\tsettings: settingsManager.getSettings(),\n\t\t\tsessionStore: options.sessionStore,\n\t\t});\n\t\tif (store !== options.sessionStore) acquisition.store = store;\n\t\tsessionManager = await SessionManager.create(store, cwd);\n\t}\n\n\t// Mark workflow-created sessions as internal so they are excluded from the\n\t// standard `/resume` history while remaining resumable via `/workflow resume`.\n\t// Only stamped when the orchestration context identifies a workflow stage;\n\t// reattaching to an already-marked session preserves its existing marker.\n\tif (options.orchestrationContext?.kind === \"workflow-stage\") {\n\t\tconst ctx = options.orchestrationContext;\n\t\tawait sessionManager.markSessionInternal({\n\t\t\trunId: ctx.workflowRunId,\n\t\t\tstageId: ctx.workflowStageId,\n\t\t\tstageName: ctx.workflowStageName,\n\t\t});\n\t}\n\n\tconst disableWorkflowExtension =\n\t\toptions.orchestrationContext?.kind === \"workflow-stage\" || options.subagentPolicy !== undefined;\n\tif (!resourceLoader) {\n\t\tresourceLoader = new DefaultResourceLoader({\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\tsettingsManager,\n\t\t\tbuiltinPackagePaths: getBuiltinPackagePaths(options.builtins).map((source) =>\n\t\t\t\tdisableWorkflowExtension && basename(source) === \"workflows\" ? { source, extensions: [] } : source,\n\t\t\t),\n\t\t});\n\t\tawait resourceLoader.reload();\n\t\ttime(\"resourceLoader.reload\");\n\t}\n\tif (\n\t\t(options.resourceLoader || options.builtins || disableWorkflowExtension) &&\n\t\t(!isMandatoryResourceLoader(resourceLoader) || options.builtins || disableWorkflowExtension)\n\t) {\n\t\tresourceLoader = await withBuiltinResourceLoader(\n\t\t\tresourceLoader,\n\t\t\tcwd,\n\t\t\tagentDir,\n\t\t\toptions.builtins,\n\t\t\tdisableWorkflowExtension,\n\t\t);\n\t}\n\tif (options.builtins?.intercom !== false) {\n\t\tresourceLoader = await withMandatoryResourceLoader(resourceLoader, cwd);\n\t}\n\n\t// Check if session has existing data to restore\n\tconst existingSession = sessionManager.buildSessionContext();\n\tconst repairedMessages = repairOrphanToolResults(existingSession.messages, { repairTrailing: true });\n\tconst existingMessages = options.initialContextTransform\n\t\t? options.initialContextTransform(repairedMessages)\n\t\t: repairedMessages;\n\tconst hasExistingSession = existingMessages.length > 0;\n\tconst hasThinkingEntry = sessionManager.getBranch().some((entry) => entry.type === \"thinking_level_change\");\n\n\tlet model = options.model;\n\tlet modelFallbackMessage: string | undefined;\n\tlet modelFallbackReason: import(\"./model-resolver-types.ts\").ModelFallbackReason | undefined;\n\n\t// If session has data, try to restore model from it\n\tif (!model && hasExistingSession && existingSession.model) {\n\t\tmodel = await resolveRestoredModelReference(\n\t\t\texistingSession.model.provider,\n\t\t\texistingSession.model.modelId,\n\t\t\tmodelRuntime,\n\t\t);\n\t\tif (!model) {\n\t\t\tmodelFallbackMessage = `Could not restore model ${existingSession.model.provider}/${existingSession.model.modelId}`;\n\t\t\tmodelFallbackReason = \"session-restore\";\n\t\t}\n\t}\n\tif (!model) {\n\t\tconst result = await findInitialModel({\n\t\t\tscopedModels: [],\n\t\t\tisContinuing: hasExistingSession,\n\t\t\tdefaultProvider: settingsManager.getDefaultProvider(),\n\t\t\tdefaultModelId: settingsManager.getDefaultModel(),\n\t\t\tdefaultThinkingLevel: settingsManager.getDefaultThinkingLevel(),\n\t\t\tmodelThinkingLevels: settingsManager.getAllModelThinkingLevels(),\n\t\t\tmodelRuntime,\n\t\t});\n\t\tmodel = result.model;\n\t\tif (!model) {\n\t\t\tif (result.fallbackReason === \"configured-provider-unsupported\") {\n\t\t\t\tmodelFallbackMessage = result.fallbackMessage;\n\t\t\t\tmodelFallbackReason = result.fallbackReason;\n\t\t\t} else if (!modelFallbackMessage) {\n\t\t\t\tmodelFallbackMessage = result.fallbackMessage ?? formatNoModelsAvailableMessage();\n\t\t\t\tmodelFallbackReason = result.fallbackReason ?? \"no-models-available\";\n\t\t\t}\n\t\t} else if (modelFallbackMessage) {\n\t\t\tmodelFallbackMessage += `. Using ${model.provider}/${model.id}`;\n\t\t}\n\t}\n\n\tlet thinkingLevel = options.thinkingLevel;\n\n\t// If session has data, restore thinking level from it\n\tif (thinkingLevel === undefined && hasExistingSession) {\n\t\tthinkingLevel = hasThinkingEntry\n\t\t\t? (existingSession.thinkingLevel as ThinkingLevel)\n\t\t\t: (settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL);\n\t}\n\n\t// Fall back to per-model override, then global default\n\tif (thinkingLevel === undefined && model) {\n\t\tthinkingLevel = settingsManager.getModelThinkingLevel(model.provider, model.id);\n\t}\n\tif (thinkingLevel === undefined) {\n\t\tthinkingLevel = settingsManager.getDefaultThinkingLevel() ?? DEFAULT_THINKING_LEVEL;\n\t}\n\n\t// Clamp to model capabilities\n\tif (!model) {\n\t\tthinkingLevel = \"off\";\n\t} else {\n\t\tthinkingLevel = clampThinkingLevel(model, thinkingLevel) as ThinkingLevel;\n\t}\n\n\t// `defaultTools` narrows only the initial BUILT-IN selection. It must not\n\t// narrow `allowedToolNames`: a narrow allowlist would drop every extension\n\t// and SDK custom tool (workflow, subagent, intercom, mcp, web_search, ...)\n\t// for any user who configures it (upstream 4d9aa837 + companion fix 541045ae).\n\tconst toolListError = options.tools ? getToolListError(options.tools) : undefined;\n\tif (toolListError) throw new Error(`Invalid tools option: ${toolListError}`);\n\tconst defaultToolNames = options.noTools ? [] : (settingsManager.getDefaultTools() ?? getDefaultToolNames());\n\tconst toolModifiers = options.tools?.some(isToolModifier) ? options.tools : undefined;\n\tconst selectedToolNames = toolModifiers ? applyToolModifiers(defaultToolNames, toolModifiers) : options.tools;\n\tconst allowedToolNames =\n\t\toptions.noTools === \"all\"\n\t\t\t? []\n\t\t\t: toolModifiers\n\t\t\t\t? undefined\n\t\t\t\t: options.tools === undefined\n\t\t\t\t\t? undefined\n\t\t\t\t\t: [...options.tools];\n\tconst subagentPolicy =\n\t\toptions.subagentPolicy && (options.subagentPolicy.depth ?? 0) >= 1\n\t\t\t? {\n\t\t\t\t\t...options.subagentPolicy,\n\t\t\t\t\ttools: allowedToolNames,\n\t\t\t\t\tmcpDirectTools:\n\t\t\t\t\t\toptions.noTools === \"all\"\n\t\t\t\t\t\t\t? []\n\t\t\t\t\t\t\t: (options.subagentPolicy.mcpDirectTools ?? (allowedToolNames === undefined ? undefined : [])),\n\t\t\t\t}\n\t\t\t: options.subagentPolicy;\n\tconst isExcludedTool = options.excludedTools ? createToolNameMatcher(options.excludedTools) : undefined;\n\tconst initialActiveToolNames = (options.noTools === \"all\" ? [] : (selectedToolNames ?? defaultToolNames)).filter(\n\t\t(name) => !isExcludedTool?.(name),\n\t);\n\tconst childBuiltins = { ...options.builtins };\n\tconst childExcludedTools = [\n\t\t...(options.excludedTools ?? []),\n\t\t...(allowedToolNames === undefined\n\t\t\t? [...allToolNames].filter((name) => !initialActiveToolNames.includes(name))\n\t\t\t: []),\n\t];\n\n\tlet agent: Agent;\n\n\tlet lastConvertedLlmMessages: Message[] | undefined;\n\n\t// Create convertToLlm wrapper that filters images if blockImages is enabled (defense-in-depth)\n\tconst convertToLlmWithBlockImages = (messages: AgentMessage[]): Message[] => {\n\t\tconst converted = convertToLlm(messages);\n\t\t// Check setting dynamically so mid-session changes take effect\n\t\tif (!settingsManager.getBlockImages()) {\n\t\t\tlastConvertedLlmMessages = converted;\n\t\t\treturn converted;\n\t\t}\n\t\t// Filter out ImageContent from all messages, replacing with text placeholder\n\t\tconst filtered = converted.map((msg): Message => {\n\t\t\tif (msg.role === \"user\" || msg.role === \"toolResult\") {\n\t\t\t\tconst content = msg.content;\n\t\t\t\tif (Array.isArray(content)) {\n\t\t\t\t\tconst hasImages = content.some((c) => c.type === \"image\");\n\t\t\t\t\tif (hasImages) {\n\t\t\t\t\t\tconst filteredContent = content\n\t\t\t\t\t\t\t.map((c) =>\n\t\t\t\t\t\t\t\tc.type === \"image\"\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\t\t\t\ttext: \"Image reading is disabled.\",\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: c,\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter(\n\t\t\t\t\t\t\t\t(c, i, arr) =>\n\t\t\t\t\t\t\t\t\t// Dedupe consecutive \"Image reading is disabled.\" texts\n\t\t\t\t\t\t\t\t\t!(\n\t\t\t\t\t\t\t\t\t\tc.type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\tc.text === \"Image reading is disabled.\" &&\n\t\t\t\t\t\t\t\t\t\ti > 0 &&\n\t\t\t\t\t\t\t\t\t\tarr[i - 1].type === \"text\" &&\n\t\t\t\t\t\t\t\t\t\t(arr[i - 1] as { type: \"text\"; text: string }).text === \"Image reading is disabled.\"\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t// `user` and `toolResult` carry different content unions, and mapping them in one\n\t\t\t\t\t\t// branch widens both to their union. Only image blocks are rewritten here, so each\n\t\t\t\t\t\t// message keeps its own shape at runtime.\n\t\t\t\t\t\treturn { ...msg, content: filteredContent } as Message;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn msg;\n\t\t});\n\t\tlastConvertedLlmMessages = filtered;\n\t\treturn filtered;\n\t};\n\n\tconst extensionRunnerRef: { current?: ExtensionRunner } = {};\n\tconst cacheWarmer = new CacheWarmer(\n\t\t{\n\t\t\tstreamSimple: (model, context, requestOptions) => {\n\t\t\t\tconst extension = modelRuntime.getRegisteredProviderConfig(model.provider);\n\t\t\t\treturn getModelFastRoute(model)?.serviceTier !== undefined &&\n\t\t\t\t\textension?.aliasOf === undefined &&\n\t\t\t\t\t!(extension?.streamSimple && extension.api === model.api)\n\t\t\t\t\t? streamWithFastRoute(model, context, requestOptions)\n\t\t\t\t\t: modelRuntime.streamSimple(model, context, requestOptions);\n\t\t\t},\n\t\t},\n\t\tsessionManager,\n\t\t() => settingsManager.getCacheWarmingMode(),\n\t\tasync (event) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner) {\n\t\t\t\treturn event.action;\n\t\t\t}\n\t\t\treturn (await runner.emitCacheWarmingDecision(event)) ?? event.action;\n\t\t},\n\t\t(refresh) => trackSessionWork(session, refresh),\n\t);\n\n\tconst handleProviderStreamEvent: NonNullable<ModelRuntimeSimpleStreamOptions[\"onProviderStreamEvent\"]> = async (\n\t\tdata,\n\t\tmodel,\n\t) => {\n\t\tconst runner = extensionRunnerRef.current;\n\t\tif (!runner?.hasHandlers(\"provider_stream_event\")) return;\n\t\tawait runner.emit({\n\t\t\ttype: \"provider_stream_event\",\n\t\t\tprovider: model.provider,\n\t\t\tapi: model.api,\n\t\t\tmodel: model.id,\n\t\t\tdata,\n\t\t});\n\t};\n\n\tagent = new Agent({\n\t\tinitialState: {\n\t\t\tsystemPrompt: \"\",\n\t\t\tmodel,\n\t\t\tthinkingLevel,\n\t\t\ttools: [],\n\t\t\tmessages: existingMessages,\n\t\t},\n\t\tconvertToLlm: convertToLlmWithBlockImages,\n\t\tstreamFn: async (model, context, streamOptions) => {\n\t\t\tconst onProviderStreamEvent = streamOptions?.onProviderStreamEvent ?? handleProviderStreamEvent;\n\t\t\tconst prepare = async () => {\n\t\t\t\tconst authResult = await modelRuntime.getRequestAuth(model, {\n\t\t\t\t\tapiKey: streamOptions?.apiKey,\n\t\t\t\t\tenv: streamOptions?.env,\n\t\t\t\t\tsignal: streamOptions?.signal,\n\t\t\t\t});\n\t\t\t\tconst compatibility = authResult ? undefined : modelRuntime.getCompatibilityRequestConfig(model);\n\t\t\t\tif (!authResult && compatibility?.authHeader) {\n\t\t\t\t\tthrow new Error(`No API key found for \"${model.provider}\"`);\n\t\t\t\t}\n\t\t\t\tconst auth = {\n\t\t\t\t\tapiKey: authResult?.auth.apiKey,\n\t\t\t\t\theaders: authResult?.auth.headers ?? compatibility?.headers,\n\t\t\t\t\tbaseUrl: authResult?.auth.baseUrl,\n\t\t\t\t\tenv: authResult?.env,\n\t\t\t\t};\n\t\t\t\tconst requestModel =\n\t\t\t\t\tauth.baseUrl !== undefined && auth.baseUrl !== model.baseUrl\n\t\t\t\t\t\t? { ...model, baseUrl: auth.baseUrl }\n\t\t\t\t\t\t: model;\n\t\t\t\tconst providerRetrySettings = settingsManager.getProviderRetrySettings();\n\t\t\t\tconst httpIdleTimeoutMs = settingsManager.getHttpIdleTimeoutMs();\n\t\t\t\t// SDKs treat timeout=0 as 0ms (immediate timeout), not \"no timeout\".\n\t\t\t\t// Use max int32 to effectively disable the timeout.\n\t\t\t\tconst effectiveTimeoutMs = httpIdleTimeoutMs === 0 ? 2147483647 : httpIdleTimeoutMs;\n\t\t\t\tconst timeoutMs = streamOptions?.timeoutMs ?? providerRetrySettings.timeoutMs ?? effectiveTimeoutMs;\n\t\t\t\tconst websocketConnectTimeoutMs =\n\t\t\t\t\tstreamOptions?.websocketConnectTimeoutMs ?? settingsManager.getWebSocketConnectTimeoutMs();\n\t\t\t\tconst streamDeadlineMs = streamOptions?.streamDeadlineMs ?? settingsManager.getStreamDeadlineMs();\n\t\t\t\tconst requestHeaders = mergeProviderAttributionHeaders(\n\t\t\t\t\tmodel,\n\t\t\t\t\tsettingsManager,\n\t\t\t\t\tstreamOptions?.sessionId,\n\t\t\t\t\tauth.headers,\n\t\t\t\t\tstreamOptions?.headers,\n\t\t\t\t);\n\t\t\t\tconst mergedHeaders = mergeHeaders(model.headers, requestHeaders);\n\t\t\t\tconst headerRunner = extensionRunnerRef.current;\n\t\t\t\tconst assembledHeaders = headerRunner?.hasHandlers(\"before_provider_headers\")\n\t\t\t\t\t? await headerRunner.emitBeforeProviderHeaders(mergedHeaders ?? {})\n\t\t\t\t\t: mergedHeaders;\n\t\t\t\tconst extensionProvider = modelRuntime.getRegisteredProviderConfig(requestModel.provider);\n\t\t\t\tconst usesExtensionStream =\n\t\t\t\t\textensionProvider?.streamSimple !== undefined && requestModel.api === extensionProvider.api;\n\t\t\t\tconst transportHeaders = usesExtensionStream\n\t\t\t\t\t? assembledHeaders\n\t\t\t\t\t: removeUnownedModelHeaders(assembledHeaders, model.headers, requestHeaders);\n\t\t\t\t// Fast-vs-normal is the selected model's own identity, so the canonical `-fast` model is what\n\t\t\t\t// dispatch, the recorded assistant message, session state, and usage all see. The provider\n\t\t\t\t// adapter reads `fastRoute.upstreamModelId` when it serializes the outbound request.\n\t\t\t\tconst fastRoute = getModelFastRoute(requestModel);\n\t\t\t\tif (fastRoute?.serviceTier !== undefined && !usesExtensionStream && !authResult) {\n\t\t\t\t\tthrow new Error(`No API key found for \"${model.provider}\"`);\n\t\t\t\t}\n\t\t\t\tconst env = auth.env || streamOptions?.env ? { ...auth.env, ...streamOptions?.env } : undefined;\n\t\t\t\tconst cacheRetentionEnv = getProviderEnvValue(\"PI_CACHE_RETENTION\", env);\n\t\t\t\t// Shared by main chat, workflow stages and subagents; provider capability gates still apply.\n\t\t\t\tconst cacheRetention =\n\t\t\t\t\tstreamOptions?.cacheRetention ??\n\t\t\t\t\t(cacheRetentionEnv === \"none\"\n\t\t\t\t\t\t? \"none\"\n\t\t\t\t\t\t: !cacheRetentionEnv\n\t\t\t\t\t\t\t? getDefaultCacheRetention(requestModel)\n\t\t\t\t\t\t\t: cacheRetentionEnv === \"long\"\n\t\t\t\t\t\t\t\t? \"long\"\n\t\t\t\t\t\t\t\t: \"short\");\n\t\t\t\tconst fastRouteStreamOptions = withFastRouteStreamOptions(fastRoute, {\n\t\t\t\t\t...streamOptions,\n\t\t\t\t\tapiKey: auth.apiKey,\n\t\t\t\t\tenv,\n\t\t\t\t\tcacheRetention,\n\t\t\t\t\ttimeoutMs,\n\t\t\t\t\twebsocketConnectTimeoutMs,\n\t\t\t\t\tstreamDeadlineMs,\n\t\t\t\t\tmaxRetries: streamOptions?.maxRetries ?? providerRetrySettings.maxRetries,\n\t\t\t\t\tmaxRetryDelayMs: streamOptions?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,\n\t\t\t\t\theaders: transportHeaders,\n\t\t\t\t});\n\t\t\t\tconst nativeFastRoute =\n\t\t\t\t\tfastRoute?.serviceTier !== undefined && !usesExtensionStream && extensionProvider?.aliasOf === undefined;\n\t\t\t\tconst requestOptions: ModelRuntimeSimpleStreamOptions = {\n\t\t\t\t\t...fastRouteStreamOptions,\n\t\t\t\t\tonProviderStreamEvent,\n\t\t\t\t\tpreparedRequestAuth: {\n\t\t\t\t\t\tresolution: authResult,\n\t\t\t\t\t\treprepare: async () => {\n\t\t\t\t\t\t\tconst next = await prepare();\n\t\t\t\t\t\t\treturn { model: next.requestModel, options: next.requestOptions };\n\t\t\t\t\t\t},\n\t\t\t\t\t\tstreamSimple: nativeFastRoute\n\t\t\t\t\t\t\t? (routeModel, routeContext, routeOptions) =>\n\t\t\t\t\t\t\t\t\tstreamWithFastRoute(routeModel, routeContext, routeOptions)\n\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\treturn { authResult, requestModel, fastRouteStreamOptions, requestOptions };\n\t\t\t};\n\t\t\tconst { authResult, requestModel, fastRouteStreamOptions, requestOptions } = await prepare();\n\t\t\tif (streamOptions?.sessionId === sessionManager.getSessionId()) {\n\t\t\t\tconst prefix = [...agent.state.messages];\n\t\t\t\tconst warmOptions: ModelRuntimeSimpleStreamOptions = {\n\t\t\t\t\t...fastRouteStreamOptions,\n\t\t\t\t\tpreparedRequestAuth: {\n\t\t\t\t\t\tresolution: authResult,\n\t\t\t\t\t\treprepare: requestOptions.preparedRequestAuth?.reprepare,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tcacheWarmer.start({ model: requestModel, context, options: warmOptions }, () => {\n\t\t\t\t\tconst current = agent.state.model;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t!sessionLifetime(session).aborted &&\n\t\t\t\t\t\t!sessionGenerationClosing.has(session) &&\n\t\t\t\t\t\t!(session as unknown as AgentSessionInternalSurface)._agentRunAbortRequested &&\n\t\t\t\t\t\tcurrent?.provider === model.provider &&\n\t\t\t\t\t\tcurrent.id === model.id &&\n\t\t\t\t\t\tprefix.every((message, index) => agent.state.messages[index] === message)\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t\t// The Codex routing identity is attached by ModelRuntimeStreaming, after auth headers are\n\t\t\t// merged. Applying it here would be inert: `mergeHeaders` copies the header object the\n\t\t\t// wrapper mutates.\n\t\t\treturn modelRuntime.streamSimple(requestModel, context, requestOptions);\n\t\t},\n\t\tonPayload: async (payload, model) => {\n\t\t\tconst sourceMessages = lastConvertedLlmMessages;\n\t\t\tconst replayGuardedPayload = sourceMessages\n\t\t\t\t? restoreAnthropicReplayThinkingBlocks(payload, sourceMessages, model)\n\t\t\t\t: payload;\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tlet finalPayload: unknown;\n\t\t\tif (!runner?.hasHandlers(\"before_provider_request\")) {\n\t\t\t\tfinalPayload = replayGuardedPayload;\n\t\t\t} else {\n\t\t\t\tconst extensionPayload = await runner.emitBeforeProviderRequest(replayGuardedPayload);\n\t\t\t\tfinalPayload = sourceMessages\n\t\t\t\t\t? restoreAnthropicReplayThinkingBlocks(extensionPayload, sourceMessages, model)\n\t\t\t\t\t: extensionPayload;\n\t\t\t}\n\t\t\tconst sanitizedPayload = sanitizeOpenAIResponsesPayload(finalPayload, model);\n\t\t\tmarkLifecycleTiming(\"before-provider-request\");\n\t\t\treturn sanitizedPayload;\n\t\t},\n\t\tonResponse: async (response, _model) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tif (!runner?.hasHandlers(\"after_provider_response\")) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tawait runner.emit({\n\t\t\t\ttype: \"after_provider_response\",\n\t\t\t\tstatus: response.status,\n\t\t\t\theaders: response.headers,\n\t\t\t});\n\t\t},\n\t\tsessionId: sessionManager.getSessionId(),\n\t\ttransformContext: async (messages) => {\n\t\t\tconst runner = extensionRunnerRef.current;\n\t\t\tconst transformed = runner ? await runner.emitContext(messages) : messages;\n\t\t\treturn scrubPreCompactionAssistantUsage(transformed, sessionManager.getBranch());\n\t\t},\n\t\tsteeringMode: settingsManager.getSteeringMode(),\n\t\tfollowUpMode: settingsManager.getFollowUpMode(),\n\t\ttransport: settingsManager.getTransport(),\n\t\tthinkingBudgets: settingsManager.getThinkingBudgets(),\n\t\tmaxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,\n\t});\n\n\t// The isolated host mirrors child-owned storage without writing startup metadata.\n\tif (persistInitialState) {\n\t\tif (hasExistingSession) {\n\t\t\tif (!hasThinkingEntry) {\n\t\t\t\tawait sessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t\t}\n\t\t} else {\n\t\t\tif (model) {\n\t\t\t\tawait sessionManager.appendModelChange(model.provider, model.id);\n\t\t\t}\n\t\t\tawait sessionManager.appendThinkingLevelChange(thinkingLevel);\n\t\t}\n\t}\n\n\tconst providerRollback = modelRuntime.createExtensionProviderTransaction();\n\tlet session: AgentSession;\n\tconst childCommandTaskOwner = createChildCommandTaskOwner(() => session.getAgentTaskHost());\n\ttry {\n\t\tsession = new AgentSession({\n\t\t\tagent,\n\t\t\tsessionManager,\n\t\t\tsettingsManager,\n\t\t\tcwd,\n\t\t\tworkflowJournal: options.journal,\n\t\t\tstorageAgentDir: agentDir,\n\t\t\tchildSessionOptions: (child) =>\n\t\t\t\tinheritChildSessionOptions(\n\t\t\t\t\t{\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t\tagentDir,\n\t\t\t\t\t\tmodelRuntime,\n\t\t\t\t\t\tsettingsManager,\n\t\t\t\t\t\tmodel: session.model,\n\t\t\t\t\t\tthinkingLevel: session.thinkingLevel,\n\t\t\t\t\t\tfallbackModels: options.fallbackModels ?? settingsManager.getFallbackModels(),\n\t\t\t\t\t\tisFallbackModelAllowed: options.isFallbackModelAllowed,\n\t\t\t\t\t\tbuiltins: childBuiltins,\n\t\t\t\t\t\ttools: allowedToolNames,\n\t\t\t\t\t\tnoTools: options.noTools,\n\t\t\t\t\t\texcludedTools: childExcludedTools,\n\t\t\t\t\t\tcustomTools: options.customTools,\n\t\t\t\t\t\textensionBindings: session.extensionRunner.getChildHostBindings(),\n\t\t\t\t\t\tparentCommandTaskOwner: childCommandTaskOwner,\n\t\t\t\t\t},\n\t\t\t\t\tchild,\n\t\t\t\t\tsession.getAllTools().map((tool) => tool.name),\n\t\t\t\t),\n\t\t\tscopedModels: options.scopedModels,\n\t\t\tfallbackModels: options.fallbackModels ?? settingsManager.getFallbackModels(),\n\t\t\tisFallbackModelAllowed: options.isFallbackModelAllowed,\n\t\t\tresourceLoader,\n\t\t\tcustomTools: options.customTools,\n\t\t\tmodelRuntime,\n\t\t\tcacheWarmer,\n\t\t\tinitialActiveToolNames,\n\t\t\tusesDefaultTools: (options.tools === undefined || toolModifiers !== undefined) && !options.noTools,\n\t\t\tdefaultToolModifiers: toolModifiers,\n\t\t\tallowedToolNames,\n\t\t\texcludedToolNames: options.excludedTools,\n\t\t\textensionRunnerRef,\n\t\t\tsessionStartEvent: options.sessionStartEvent,\n\t\t\torchestrationContext: options.orchestrationContext,\n\t\t\tsubagentPolicy,\n\t\t\tparentCommandTaskOwner: options.parentCommandTaskOwner,\n\t\t\tsystemPromptTransform: options.systemPromptTransform,\n\t\t\tcontextProjectionTransform: options.initialContextTransform,\n\t\t});\n\t} catch (error) {\n\t\t// The constructor releases its own leases/subscriptions; restore borrowed provider state here.\n\t\tconst cleanup = await Promise.allSettled([providerRollback.commit(), settingsManager.flush()]);\n\t\tconst failures = cleanup.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t\tif (failures.length)\n\t\t\tthrow new AggregateError([error, ...failures], \"Session construction failed and rollback reported errors\");\n\t\tthrow error;\n\t}\n\t// Only the selected factories transfer. Discovery may have acquired omitted factories.\n\tconst acquisitions = factoryAcquisitions.getStore();\n\tconst selected = resourceLoader.getExtensions();\n\tfor (const extension of selected.extensions) acquisitions?.pending?.delete(extension);\n\tif (!options.settingsManager) ownedSettingsManagers.set(settingsManager, session);\n\tconst rollbackReason = sessionLifecycleCreation.getStore()?.replacement ? \"new\" : \"quit\";\n\tregisterStartupRollback(session.extensionRunner, async (error) => {\n\t\tconst results = await Promise.allSettled([\n\t\t\t(session as unknown as AgentSessionInternalSurface)._close({\n\t\t\t\ttype: \"session_shutdown\",\n\t\t\t\treason: rollbackReason,\n\t\t\t}),\n\t\t\tproviderRollback.commit(),\n\t\t]);\n\t\tconst cleanupErrors = results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n\t\tif (cleanupErrors.length)\n\t\t\tthrow new AggregateError([error, ...cleanupErrors], \"Extension startup failed and rollback reported errors\");\n\t\tthrow error;\n\t});\n\tif (acquisition.store) {\n\t\townedSessionStores.set(session, acquisition.store);\n\t\tacquisition.store = undefined;\n\t}\n\ttry {\n\t\t// Omitted factories may share the selected runtime: release their acquisitions,\n\t\t// but leave that runtime and its selected subscriptions owned by the runner.\n\t\tconst failures = await rollbackFactoryAcquisitions(new Set([selected.runtime]));\n\t\tif (failures.length)\n\t\t\tthrow Object.assign(new AggregateError(failures, \"Unselected extension cleanup failed\"), {\n\t\t\t\tcode: \"ShutdownFailed\",\n\t\t\t});\n\t\tconst extensionsResult = resourceLoader.getExtensions();\n\t\tfor (const failure of extensionsResult.errors) {\n\t\t\tconst builtin = getBuiltinPackageLocations().find(({ packageDir }) => {\n\t\t\t\tconst path = relative(packageDir, failure.path);\n\t\t\t\treturn path !== \"..\" && !path.startsWith(`..${sep}`) && !path.startsWith(sep);\n\t\t\t});\n\t\t\tif (builtin)\n\t\t\t\tthrow Object.assign(new Error(`Builtin unavailable: ${builtin.packageName}: ${failure.error}`), {\n\t\t\t\t\tcode: \"BuiltinUnavailable\",\n\t\t\t\t});\n\t\t}\n\t\tif (!deferStart) await session.bindExtensions(options.extensionBindings ?? {});\n\t\treturn { session, extensionsResult, modelFallbackMessage, modelFallbackReason };\n\t} catch (error) {\n\t\treturn rollbackStartup(session.extensionRunner, error instanceof Error ? error : new Error(String(error)));\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../src/core/session-storage.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../src/core/session-storage.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAI/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,gBAAgB,CAAC;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CAChC;AAID,KAAK,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC,CAAC;AAG1E,eAAO,MAAM,2BAA2B,+BAA+B,CAAC;AAExE,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,oBAAoB,GAAG,SAAS,CAE7F;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAMnE;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG;IACrE,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACtC,CAoBA;AAUD,wBAAgB,oBAAoB,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,qBAA0B,GACjC,YAAY,GAAG,gBAAgB,CAgFjC;AAmBD,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,YAAY,CAAC,CA8BjH"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { dirname, isAbsolute, join, resolve } from "node:path";
|
|
2
2
|
import { Value } from "typebox/value";
|
|
3
|
-
import {
|
|
3
|
+
import { getAgentDir } from "../config.js";
|
|
4
4
|
import { resolvePath } from "../utils/paths.js";
|
|
5
5
|
import { SettingsManager } from "./settings-manager.js";
|
|
6
6
|
import { SessionStorageSelectionSchema } from "./settings-schema.js";
|
|
7
7
|
import { StorageConfigError } from "./storage/errors.js";
|
|
8
|
+
import { selectProcessStorage } from "./storage/process-selection.js";
|
|
8
9
|
import { StorageProvider } from "./storage/provider.js";
|
|
9
10
|
import { selectStorage } from "./storage/selection.js";
|
|
10
11
|
import { JsonlSessionStore } from "./storage/session/jsonl-session-store.js";
|
|
@@ -86,17 +87,22 @@ export function selectSessionStorage(cwd, options = {}) {
|
|
|
86
87
|
}
|
|
87
88
|
if (options.noSession)
|
|
88
89
|
return { kind: "memory" };
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
sources.set(selection, { source, field });
|
|
90
|
+
if (options.sessionDir !== undefined) {
|
|
91
|
+
if (typeof options.sessionDir !== "string")
|
|
92
|
+
throw new StorageConfigError("cli", "--session-dir", "invalid-dir");
|
|
93
|
+
const selection = {
|
|
94
|
+
kind: "jsonl",
|
|
95
|
+
dir: resolveStoragePath(options.sessionDir, cwd, "cli", "--session-dir"),
|
|
96
|
+
};
|
|
97
|
+
sources.set(selection, { source: "cli", field: "--session-dir" });
|
|
97
98
|
return selection;
|
|
98
99
|
}
|
|
99
100
|
const agentDir = options.agentDir ?? getAgentDir();
|
|
101
|
+
const processChoice = selectProcessStorage("sessions", agentDir, cwd);
|
|
102
|
+
if (processChoice !== undefined) {
|
|
103
|
+
sources.set(processChoice.selection, { source: processChoice.source, field: processChoice.field });
|
|
104
|
+
return processChoice.selection;
|
|
105
|
+
}
|
|
100
106
|
const defaultPath = join(dirname(agentDir), "workflows", "journal.sqlite");
|
|
101
107
|
const settings = options.settings ?? SettingsManager.create(cwd, agentDir).getSettings();
|
|
102
108
|
if (settings.sessions !== undefined &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../src/core/session-storage.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { Value } from \"typebox/value\";\nimport { ENV_SESSION_DIR, getAgentDir } from \"../config.js\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { SessionStorageSelectionSchema } from \"./settings-schema.ts\";\nimport type { Settings } from \"./settings-types.ts\";\nimport { StorageConfigError } from \"./storage/errors.js\";\nimport { StorageProvider, type StorageSelection } from \"./storage/provider.js\";\nimport { selectStorage } from \"./storage/selection.js\";\nimport { JsonlSessionStore } from \"./storage/session/jsonl-session-store.js\";\nimport { LegacySessionStore } from \"./storage/session/legacy-session-store.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\n\nexport interface SessionStorageOptions {\n\treadonly agentDir?: string;\n\treadonly settings?: Settings;\n\treadonly sessionStore?: SessionStore | StorageSelection;\n\treadonly noSession?: boolean;\n\treadonly sessionDir?: string;\n\treadonly sessionStorePath?: string;\n\treadonly sessionPrefix?: string;\n}\n\nconst provider = new StorageProvider();\nconst sources = new WeakMap<StorageSelection, { source: \"settings\" | \"cli\" | \"env\"; field: string }>();\ntype EngineSessionStorage = Extract<StorageSelection, { kind: \"sqlite\" }>;\nconst engineSelections = new WeakMap<SessionStore, EngineSessionStorage | null>();\nconst isolatedCliMemoryStores = new WeakSet<SessionStore>();\nexport const ENGINE_SESSION_STORAGE_FLAG = \"--internal-session-storage\";\n\nexport function getEngineSessionStorage(store: SessionStore): EngineSessionStorage | undefined {\n\treturn engineSelections.get(store) ?? undefined;\n}\n\nexport function canIsolateSessionStore(store: SessionStore): boolean {\n\treturn (\n\t\tisolatedCliMemoryStores.has(store) ||\n\t\tgetEngineSessionStorage(store) !== undefined ||\n\t\t(store instanceof JsonlSessionStore && !engineSelections.has(store))\n\t);\n}\n\nexport function takeEngineSessionStorageArg(args: readonly string[]): {\n\targs: string[];\n\tsessionStorage?: EngineSessionStorage;\n} {\n\tconst remaining: string[] = [];\n\tlet sessionStorage: EngineSessionStorage | undefined;\n\tfor (let index = 0; index < args.length; index++) {\n\t\tif (args[index] !== ENGINE_SESSION_STORAGE_FLAG) {\n\t\t\tremaining.push(args[index]!);\n\t\t\tcontinue;\n\t\t}\n\t\tlet parsed: EngineSessionStorage;\n\t\ttry {\n\t\t\tparsed = JSON.parse(args[++index]!) as EngineSessionStorage;\n\t\t} catch {\n\t\t\tthrow new StorageConfigError(\"cli\", ENGINE_SESSION_STORAGE_FLAG, \"invalid-selection\");\n\t\t}\n\t\tif (parsed?.kind !== \"sqlite\" || typeof parsed.path !== \"string\") {\n\t\t\tthrow new StorageConfigError(\"cli\", ENGINE_SESSION_STORAGE_FLAG, \"invalid-selection\");\n\t\t}\n\t\tsessionStorage = parsed;\n\t}\n\treturn { args: remaining, ...(sessionStorage === undefined ? {} : { sessionStorage }) };\n}\n\nfunction resolveStoragePath(path: string, base: string, source: \"cli\" | \"env\" | \"settings\", field: string): string {\n\ttry {\n\t\treturn resolvePath(path, base);\n\t} catch {\n\t\tthrow new StorageConfigError(source, field, \"invalid-path\");\n\t}\n}\n\nexport function selectSessionStorage(\n\tcwd: string,\n\toptions: SessionStorageOptions = {},\n): SessionStore | StorageSelection {\n\tif (options.sessionStore !== undefined) {\n\t\tconst value = options.sessionStore;\n\t\tif (value !== null && typeof value === \"object\" && \"load\" in value) {\n\t\t\tif (\n\t\t\t\t[\n\t\t\t\t\tvalue.create,\n\t\t\t\t\tvalue.append,\n\t\t\t\t\tvalue.replace,\n\t\t\t\t\tvalue.load,\n\t\t\t\t\tvalue.readHeader,\n\t\t\t\t\tvalue.delete,\n\t\t\t\t\tvalue.list,\n\t\t\t\t\tvalue.findMostRecent,\n\t\t\t\t\tvalue.close,\n\t\t\t\t].some((hook) => typeof hook !== \"function\") ||\n\t\t\t\t!value.descriptor ||\n\t\t\t\ttypeof value.descriptor.adapter !== \"string\" ||\n\t\t\t\ttypeof value.descriptor.location !== \"string\"\n\t\t\t)\n\t\t\t\tthrow new StorageConfigError(\"sdk\", \"sessionStore\", \"invalid-session-store\");\n\t\t\treturn value;\n\t\t}\n\t\treturn value;\n\t}\n\tif (options.sessionStorePath !== undefined) {\n\t\tconst selection = {\n\t\t\tkind: \"sqlite\",\n\t\t\tpath: resolveStoragePath(options.sessionStorePath, cwd, \"cli\", \"--session-store\"),\n\t\t\t...(options.sessionPrefix === undefined ? {} : { prefix: options.sessionPrefix }),\n\t\t} as const;\n\t\tsources.set(selection, { source: \"cli\", field: \"--session-store\" });\n\t\treturn selection;\n\t}\n\tif (options.noSession) return { kind: \"memory\" };\n\tconst directory = options.sessionDir !== undefined ? options.sessionDir : process.env[ENV_SESSION_DIR];\n\tif (options.sessionDir !== undefined || (directory !== undefined && directory.length > 0)) {\n\t\tconst source = options.sessionDir !== undefined ? \"cli\" : \"env\";\n\t\tconst field = source === \"cli\" ? \"--session-dir\" : ENV_SESSION_DIR;\n\t\tif (typeof directory !== \"string\") throw new StorageConfigError(source, field, \"invalid-dir\");\n\t\tconst selection = { kind: \"jsonl\", dir: resolveStoragePath(directory, cwd, source, field) } as const;\n\t\tsources.set(selection, { source, field });\n\t\treturn selection;\n\t}\n\tconst agentDir = options.agentDir ?? getAgentDir();\n\tconst defaultPath = join(dirname(agentDir), \"workflows\", \"journal.sqlite\");\n\tconst settings = options.settings ?? SettingsManager.create(cwd, agentDir).getSettings();\n\tif (\n\t\tsettings.sessions !== undefined &&\n\t\t(settings.sessions === null || typeof settings.sessions !== \"object\" || Array.isArray(settings.sessions))\n\t) {\n\t\tthrow new StorageConfigError(\"settings\", \"sessions\", \"selection-object-required\");\n\t}\n\tconst value = settings.sessions?.storage !== undefined ? settings.sessions.storage : settings.storage;\n\tif (value === undefined) return { kind: \"sqlite\", path: defaultPath };\n\tconst field = settings.sessions?.storage !== undefined ? \"sessions.storage\" : \"storage\";\n\tif (!Value.Check(SessionStorageSelectionSchema, value) || (field === \"storage\" && \"dir\" in value)) {\n\t\tthrow new StorageConfigError(\"settings\", field, \"invalid-selection\");\n\t}\n\tlet selection: StorageSelection;\n\tif (\"dir\" in value)\n\t\tselection = { kind: \"jsonl\", dir: resolveStoragePath(value.dir, dirname(agentDir), \"settings\", field) };\n\telse {\n\t\tselection = selectStorage(\n\t\t\tvalue,\n\t\t\t\"settings\",\n\t\t\tfield,\n\t\t\tfield === \"storage\" ? join(dirname(agentDir), \"storage.sqlite\") : defaultPath,\n\t\t);\n\t\tif (selection.kind === \"sqlite\" && !isAbsolute(selection.path)) {\n\t\t\tselection = { ...selection, path: resolveStoragePath(selection.path, dirname(agentDir), \"settings\", field) };\n\t\t}\n\t}\n\tsources.set(selection, { source: \"settings\", field });\n\treturn selection;\n}\n\n/**\n * The shared default database, selected directly or handed to the engine child. Sessions saved\n * before it became the default stay readable from the agent directory's JSONL files.\n */\nfunction isDefaultDatabase(\n\tselection: StorageSelection,\n\tagentDir: string,\n): selection is Extract<StorageSelection, { kind: \"sqlite\" }> {\n\treturn (\n\t\tselection.kind === \"sqlite\" &&\n\t\t!selection.prefix &&\n\t\tselection.path !== \"\" &&\n\t\tselection.path !== \":memory:\" &&\n\t\tresolve(selection.path) === resolve(join(dirname(agentDir), \"workflows\", \"journal.sqlite\"))\n\t);\n}\n\nexport async function resolveSessionStore(cwd: string, options: SessionStorageOptions = {}): Promise<SessionStore> {\n\tconst selection = selectSessionStorage(cwd, options);\n\tif (selection !== null && typeof selection === \"object\" && \"load\" in selection) return selection;\n\tconst agentDir = options.agentDir ?? getAgentDir();\n\ttry {\n\t\tconst opened = await provider.openSessionStore(selection, { agentDir, domain: \"sessions\" });\n\t\tconst store = isDefaultDatabase(selection, agentDir)\n\t\t\t? new LegacySessionStore(opened, {\n\t\t\t\t\tlegacyDirectory: join(agentDir, \"sessions\"),\n\t\t\t\t\tdatabasePath: resolve(selection.path),\n\t\t\t\t})\n\t\t\t: opened;\n\t\tif (selection.kind === \"sqlite\" && selection.path !== \"\" && selection.path !== \":memory:\") {\n\t\t\tengineSelections.set(store, {\n\t\t\t\tkind: \"sqlite\",\n\t\t\t\tpath: resolve(selection.path),\n\t\t\t\t...(selection.prefix === undefined ? {} : { prefix: selection.prefix }),\n\t\t\t});\n\t\t} else if (selection.kind !== \"jsonl\") engineSelections.set(store, null);\n\t\tif (selection.kind === \"memory\" && options.noSession && options.sessionStore === undefined) {\n\t\t\tisolatedCliMemoryStores.add(store);\n\t\t}\n\t\treturn store;\n\t} catch (error) {\n\t\tif (error instanceof StorageConfigError) {\n\t\t\tconst origin = sources.get(selection);\n\t\t\tthrow new StorageConfigError(origin?.source ?? \"sdk\", origin?.field ?? \"sessionStore\", error.reason);\n\t\t}\n\t\tthrow error;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../src/core/session-storage.ts"],"names":[],"mappings":"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","sourcesContent":["import { dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { Value } from \"typebox/value\";\nimport { getAgentDir } from \"../config.js\";\nimport { resolvePath } from \"../utils/paths.ts\";\nimport { SettingsManager } from \"./settings-manager.ts\";\nimport { SessionStorageSelectionSchema } from \"./settings-schema.ts\";\nimport type { Settings } from \"./settings-types.ts\";\nimport { StorageConfigError } from \"./storage/errors.js\";\nimport { selectProcessStorage } from \"./storage/process-selection.js\";\nimport { StorageProvider, type StorageSelection } from \"./storage/provider.js\";\nimport { selectStorage } from \"./storage/selection.js\";\nimport { JsonlSessionStore } from \"./storage/session/jsonl-session-store.js\";\nimport { LegacySessionStore } from \"./storage/session/legacy-session-store.js\";\nimport type { SessionStore } from \"./storage/session/types.js\";\n\nexport interface SessionStorageOptions {\n\treadonly agentDir?: string;\n\treadonly settings?: Settings;\n\treadonly sessionStore?: SessionStore | StorageSelection;\n\treadonly noSession?: boolean;\n\treadonly sessionDir?: string;\n\treadonly sessionStorePath?: string;\n\treadonly sessionPrefix?: string;\n}\n\nconst provider = new StorageProvider();\nconst sources = new WeakMap<StorageSelection, { source: \"settings\" | \"cli\" | \"env\"; field: string }>();\ntype EngineSessionStorage = Extract<StorageSelection, { kind: \"sqlite\" }>;\nconst engineSelections = new WeakMap<SessionStore, EngineSessionStorage | null>();\nconst isolatedCliMemoryStores = new WeakSet<SessionStore>();\nexport const ENGINE_SESSION_STORAGE_FLAG = \"--internal-session-storage\";\n\nexport function getEngineSessionStorage(store: SessionStore): EngineSessionStorage | undefined {\n\treturn engineSelections.get(store) ?? undefined;\n}\n\nexport function canIsolateSessionStore(store: SessionStore): boolean {\n\treturn (\n\t\tisolatedCliMemoryStores.has(store) ||\n\t\tgetEngineSessionStorage(store) !== undefined ||\n\t\t(store instanceof JsonlSessionStore && !engineSelections.has(store))\n\t);\n}\n\nexport function takeEngineSessionStorageArg(args: readonly string[]): {\n\targs: string[];\n\tsessionStorage?: EngineSessionStorage;\n} {\n\tconst remaining: string[] = [];\n\tlet sessionStorage: EngineSessionStorage | undefined;\n\tfor (let index = 0; index < args.length; index++) {\n\t\tif (args[index] !== ENGINE_SESSION_STORAGE_FLAG) {\n\t\t\tremaining.push(args[index]!);\n\t\t\tcontinue;\n\t\t}\n\t\tlet parsed: EngineSessionStorage;\n\t\ttry {\n\t\t\tparsed = JSON.parse(args[++index]!) as EngineSessionStorage;\n\t\t} catch {\n\t\t\tthrow new StorageConfigError(\"cli\", ENGINE_SESSION_STORAGE_FLAG, \"invalid-selection\");\n\t\t}\n\t\tif (parsed?.kind !== \"sqlite\" || typeof parsed.path !== \"string\") {\n\t\t\tthrow new StorageConfigError(\"cli\", ENGINE_SESSION_STORAGE_FLAG, \"invalid-selection\");\n\t\t}\n\t\tsessionStorage = parsed;\n\t}\n\treturn { args: remaining, ...(sessionStorage === undefined ? {} : { sessionStorage }) };\n}\n\nfunction resolveStoragePath(path: string, base: string, source: \"cli\" | \"env\" | \"settings\", field: string): string {\n\ttry {\n\t\treturn resolvePath(path, base);\n\t} catch {\n\t\tthrow new StorageConfigError(source, field, \"invalid-path\");\n\t}\n}\n\nexport function selectSessionStorage(\n\tcwd: string,\n\toptions: SessionStorageOptions = {},\n): SessionStore | StorageSelection {\n\tif (options.sessionStore !== undefined) {\n\t\tconst value = options.sessionStore;\n\t\tif (value !== null && typeof value === \"object\" && \"load\" in value) {\n\t\t\tif (\n\t\t\t\t[\n\t\t\t\t\tvalue.create,\n\t\t\t\t\tvalue.append,\n\t\t\t\t\tvalue.replace,\n\t\t\t\t\tvalue.load,\n\t\t\t\t\tvalue.readHeader,\n\t\t\t\t\tvalue.delete,\n\t\t\t\t\tvalue.list,\n\t\t\t\t\tvalue.findMostRecent,\n\t\t\t\t\tvalue.close,\n\t\t\t\t].some((hook) => typeof hook !== \"function\") ||\n\t\t\t\t!value.descriptor ||\n\t\t\t\ttypeof value.descriptor.adapter !== \"string\" ||\n\t\t\t\ttypeof value.descriptor.location !== \"string\"\n\t\t\t)\n\t\t\t\tthrow new StorageConfigError(\"sdk\", \"sessionStore\", \"invalid-session-store\");\n\t\t\treturn value;\n\t\t}\n\t\treturn value;\n\t}\n\tif (options.sessionStorePath !== undefined) {\n\t\tconst selection = {\n\t\t\tkind: \"sqlite\",\n\t\t\tpath: resolveStoragePath(options.sessionStorePath, cwd, \"cli\", \"--session-store\"),\n\t\t\t...(options.sessionPrefix === undefined ? {} : { prefix: options.sessionPrefix }),\n\t\t} as const;\n\t\tsources.set(selection, { source: \"cli\", field: \"--session-store\" });\n\t\treturn selection;\n\t}\n\tif (options.noSession) return { kind: \"memory\" };\n\tif (options.sessionDir !== undefined) {\n\t\tif (typeof options.sessionDir !== \"string\") throw new StorageConfigError(\"cli\", \"--session-dir\", \"invalid-dir\");\n\t\tconst selection = {\n\t\t\tkind: \"jsonl\",\n\t\t\tdir: resolveStoragePath(options.sessionDir, cwd, \"cli\", \"--session-dir\"),\n\t\t} as const;\n\t\tsources.set(selection, { source: \"cli\", field: \"--session-dir\" });\n\t\treturn selection;\n\t}\n\tconst agentDir = options.agentDir ?? getAgentDir();\n\tconst processChoice = selectProcessStorage(\"sessions\", agentDir, cwd);\n\tif (processChoice !== undefined) {\n\t\tsources.set(processChoice.selection, { source: processChoice.source, field: processChoice.field });\n\t\treturn processChoice.selection;\n\t}\n\tconst defaultPath = join(dirname(agentDir), \"workflows\", \"journal.sqlite\");\n\tconst settings = options.settings ?? SettingsManager.create(cwd, agentDir).getSettings();\n\tif (\n\t\tsettings.sessions !== undefined &&\n\t\t(settings.sessions === null || typeof settings.sessions !== \"object\" || Array.isArray(settings.sessions))\n\t) {\n\t\tthrow new StorageConfigError(\"settings\", \"sessions\", \"selection-object-required\");\n\t}\n\tconst value = settings.sessions?.storage !== undefined ? settings.sessions.storage : settings.storage;\n\tif (value === undefined) return { kind: \"sqlite\", path: defaultPath };\n\tconst field = settings.sessions?.storage !== undefined ? \"sessions.storage\" : \"storage\";\n\tif (!Value.Check(SessionStorageSelectionSchema, value) || (field === \"storage\" && \"dir\" in value)) {\n\t\tthrow new StorageConfigError(\"settings\", field, \"invalid-selection\");\n\t}\n\tlet selection: StorageSelection;\n\tif (\"dir\" in value)\n\t\tselection = { kind: \"jsonl\", dir: resolveStoragePath(value.dir, dirname(agentDir), \"settings\", field) };\n\telse {\n\t\tselection = selectStorage(\n\t\t\tvalue,\n\t\t\t\"settings\",\n\t\t\tfield,\n\t\t\tfield === \"storage\" ? join(dirname(agentDir), \"storage.sqlite\") : defaultPath,\n\t\t);\n\t\tif (selection.kind === \"sqlite\" && !isAbsolute(selection.path)) {\n\t\t\tselection = { ...selection, path: resolveStoragePath(selection.path, dirname(agentDir), \"settings\", field) };\n\t\t}\n\t}\n\tsources.set(selection, { source: \"settings\", field });\n\treturn selection;\n}\n\n/**\n * The shared default database, selected directly or handed to the engine child. Sessions saved\n * before it became the default stay readable from the agent directory's JSONL files.\n */\nfunction isDefaultDatabase(\n\tselection: StorageSelection,\n\tagentDir: string,\n): selection is Extract<StorageSelection, { kind: \"sqlite\" }> {\n\treturn (\n\t\tselection.kind === \"sqlite\" &&\n\t\t!selection.prefix &&\n\t\tselection.path !== \"\" &&\n\t\tselection.path !== \":memory:\" &&\n\t\tresolve(selection.path) === resolve(join(dirname(agentDir), \"workflows\", \"journal.sqlite\"))\n\t);\n}\n\nexport async function resolveSessionStore(cwd: string, options: SessionStorageOptions = {}): Promise<SessionStore> {\n\tconst selection = selectSessionStorage(cwd, options);\n\tif (selection !== null && typeof selection === \"object\" && \"load\" in selection) return selection;\n\tconst agentDir = options.agentDir ?? getAgentDir();\n\ttry {\n\t\tconst opened = await provider.openSessionStore(selection, { agentDir, domain: \"sessions\" });\n\t\tconst store = isDefaultDatabase(selection, agentDir)\n\t\t\t? new LegacySessionStore(opened, {\n\t\t\t\t\tlegacyDirectory: join(agentDir, \"sessions\"),\n\t\t\t\t\tdatabasePath: resolve(selection.path),\n\t\t\t\t})\n\t\t\t: opened;\n\t\tif (selection.kind === \"sqlite\" && selection.path !== \"\" && selection.path !== \":memory:\") {\n\t\t\tengineSelections.set(store, {\n\t\t\t\tkind: \"sqlite\",\n\t\t\t\tpath: resolve(selection.path),\n\t\t\t\t...(selection.prefix === undefined ? {} : { prefix: selection.prefix }),\n\t\t\t});\n\t\t} else if (selection.kind !== \"jsonl\") engineSelections.set(store, null);\n\t\tif (selection.kind === \"memory\" && options.noSession && options.sessionStore === undefined) {\n\t\t\tisolatedCliMemoryStores.add(store);\n\t\t}\n\t\treturn store;\n\t} catch (error) {\n\t\tif (error instanceof StorageConfigError) {\n\t\t\tconst origin = sources.get(selection);\n\t\t\tthrow new StorageConfigError(origin?.source ?? \"sdk\", origin?.field ?? \"sessionStore\", error.reason);\n\t\t}\n\t\tthrow error;\n\t}\n}\n"]}
|