@caupulican/pi-adaptative 0.85.3 → 0.85.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +60 -0
- package/dist/bun/cli.d.ts +1 -1
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js +1 -0
- package/dist/bun/cli.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +1 -1
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +2 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +12 -8
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +82 -88
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js +3 -0
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts +2 -2
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +2 -2
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.d.ts +2 -0
- package/dist/core/autonomy/lane-tool-surface.d.ts.map +1 -1
- package/dist/core/autonomy/lane-tool-surface.js +4 -3
- package/dist/core/autonomy/lane-tool-surface.js.map +1 -1
- package/dist/core/background-lane-controller.d.ts +4 -0
- package/dist/core/background-lane-controller.d.ts.map +1 -1
- package/dist/core/background-lane-controller.js +2 -0
- package/dist/core/background-lane-controller.js.map +1 -1
- package/dist/core/background-tool-task-controller.d.ts +12 -7
- package/dist/core/background-tool-task-controller.d.ts.map +1 -1
- package/dist/core/background-tool-task-controller.js +55 -19
- package/dist/core/background-tool-task-controller.js.map +1 -1
- package/dist/core/bash-executor.js +2 -2
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/bedrock-scope.d.ts +26 -0
- package/dist/core/bedrock-scope.d.ts.map +1 -0
- package/dist/core/bedrock-scope.js +178 -0
- package/dist/core/bedrock-scope.js.map +1 -0
- package/dist/core/billing-failover-controller.d.ts +2 -2
- package/dist/core/billing-failover-controller.d.ts.map +1 -1
- package/dist/core/billing-failover-controller.js +1 -1
- package/dist/core/billing-failover-controller.js.map +1 -1
- package/dist/core/compaction-controller.d.ts +8 -2
- package/dist/core/compaction-controller.d.ts.map +1 -1
- package/dist/core/compaction-controller.js +73 -3
- package/dist/core/compaction-controller.js.map +1 -1
- package/dist/core/compaction-support.d.ts +2 -2
- package/dist/core/compaction-support.d.ts.map +1 -1
- package/dist/core/compaction-support.js +9 -1
- package/dist/core/compaction-support.js.map +1 -1
- package/dist/core/context/artifact-retrieval.d.ts +1 -1
- package/dist/core/context/artifact-retrieval.d.ts.map +1 -1
- package/dist/core/context/artifact-retrieval.js +1 -1
- package/dist/core/context/artifact-retrieval.js.map +1 -1
- package/dist/core/context/context-artifacts.d.ts +6 -6
- package/dist/core/context/context-artifacts.d.ts.map +1 -1
- package/dist/core/context/context-artifacts.js +151 -63
- package/dist/core/context/context-artifacts.js.map +1 -1
- package/dist/core/context/context-composition.js +1 -1
- package/dist/core/context/context-composition.js.map +1 -1
- package/dist/core/context/context-store-retention.d.ts.map +1 -1
- package/dist/core/context/context-store-retention.js +5 -2
- package/dist/core/context/context-store-retention.js.map +1 -1
- package/dist/core/context/file-store-memory-provider.js +1 -1
- package/dist/core/context/file-store-memory-provider.js.map +1 -1
- package/dist/core/context/tool-output-packer.d.ts +1 -1
- package/dist/core/context/tool-output-packer.d.ts.map +1 -1
- package/dist/core/context/tool-output-packer.js +1 -1
- package/dist/core/context/tool-output-packer.js.map +1 -1
- package/dist/core/context-gc.d.ts.map +1 -1
- package/dist/core/context-gc.js +7 -5
- package/dist/core/context-gc.js.map +1 -1
- package/dist/core/context-pipeline.d.ts +2 -2
- package/dist/core/context-pipeline.d.ts.map +1 -1
- package/dist/core/context-pipeline.js +8 -4
- package/dist/core/context-pipeline.js.map +1 -1
- package/dist/core/cost/cost-summary.d.ts +1 -1
- package/dist/core/cost/cost-summary.d.ts.map +1 -1
- package/dist/core/cost/cost-summary.js +1 -1
- package/dist/core/cost/cost-summary.js.map +1 -1
- package/dist/core/cost/daily-usage.d.ts +1 -1
- package/dist/core/cost/daily-usage.d.ts.map +1 -1
- package/dist/core/cost/daily-usage.js +2 -2
- package/dist/core/cost/daily-usage.js.map +1 -1
- package/dist/core/cost/session-usage.d.ts +1 -1
- package/dist/core/cost/session-usage.d.ts.map +1 -1
- package/dist/core/cost/session-usage.js +1 -1
- package/dist/core/cost/session-usage.js.map +1 -1
- package/dist/core/delegation/worker-actions.js +1 -1
- package/dist/core/delegation/worker-actions.js.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts +1 -1
- package/dist/core/delegation/worker-attempt-executor.d.ts.map +1 -1
- package/dist/core/delegation/worker-attempt-executor.js +3 -2
- package/dist/core/delegation/worker-attempt-executor.js.map +1 -1
- package/dist/core/delegation/worker-conversation-store.d.ts +2 -1
- package/dist/core/delegation/worker-conversation-store.d.ts.map +1 -1
- package/dist/core/delegation/worker-conversation-store.js +3 -2
- package/dist/core/delegation/worker-conversation-store.js.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.d.ts.map +1 -1
- package/dist/core/delegation/worker-delegation-controller.js +6 -0
- package/dist/core/delegation/worker-delegation-controller.js.map +1 -1
- package/dist/core/extensions/builtin.d.ts +2 -2
- package/dist/core/extensions/builtin.d.ts.map +1 -1
- package/dist/core/extensions/builtin.js +2 -2
- package/dist/core/extensions/builtin.js.map +1 -1
- package/dist/core/extensions/bundled-virtual-modules.d.ts +2 -0
- package/dist/core/extensions/bundled-virtual-modules.d.ts.map +1 -0
- package/dist/core/extensions/bundled-virtual-modules.js +129 -0
- package/dist/core/extensions/bundled-virtual-modules.js.map +1 -0
- package/dist/core/extensions/factory-runtime.d.ts +22 -0
- package/dist/core/extensions/factory-runtime.d.ts.map +1 -0
- package/dist/core/extensions/factory-runtime.js +334 -0
- package/dist/core/extensions/factory-runtime.js.map +1 -0
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/lifecycle.d.ts +13 -0
- package/dist/core/extensions/lifecycle.d.ts.map +1 -0
- package/dist/core/extensions/lifecycle.js +52 -0
- package/dist/core/extensions/lifecycle.js.map +1 -0
- package/dist/core/extensions/loader.d.ts +3 -24
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +21 -528
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/virtual-modules.d.ts +51 -0
- package/dist/core/extensions/virtual-modules.d.ts.map +1 -0
- package/dist/core/extensions/virtual-modules.js +59 -0
- package/dist/core/extensions/virtual-modules.js.map +1 -0
- package/dist/core/foreground-recovery-controller.d.ts +26 -2
- package/dist/core/foreground-recovery-controller.d.ts.map +1 -1
- package/dist/core/foreground-recovery-controller.js +112 -3
- package/dist/core/foreground-recovery-controller.js.map +1 -1
- package/dist/core/foreground-terminal-handoff-controller.d.ts +27 -0
- package/dist/core/foreground-terminal-handoff-controller.d.ts.map +1 -0
- package/dist/core/foreground-terminal-handoff-controller.js +56 -0
- package/dist/core/foreground-terminal-handoff-controller.js.map +1 -0
- package/dist/core/goal-loop-controller.d.ts.map +1 -1
- package/dist/core/goal-loop-controller.js +5 -0
- package/dist/core/goal-loop-controller.js.map +1 -1
- package/dist/core/goals/compact-goal-context.d.ts +1 -1
- package/dist/core/goals/compact-goal-context.d.ts.map +1 -1
- package/dist/core/goals/compact-goal-context.js +1 -1
- package/dist/core/goals/compact-goal-context.js.map +1 -1
- package/dist/core/goals/goal-auto-continue-controller.d.ts +3 -0
- package/dist/core/goals/goal-auto-continue-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-auto-continue-controller.js +28 -7
- package/dist/core/goals/goal-auto-continue-controller.js.map +1 -1
- package/dist/core/goals/goal-session-controller.d.ts +1 -1
- package/dist/core/goals/goal-session-controller.d.ts.map +1 -1
- package/dist/core/goals/goal-session-controller.js +1 -1
- package/dist/core/goals/goal-session-controller.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +1 -1
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/human-input-controller.d.ts +9 -0
- package/dist/core/human-input-controller.d.ts.map +1 -1
- package/dist/core/human-input-controller.js +60 -5
- package/dist/core/human-input-controller.js.map +1 -1
- package/dist/core/human-input.d.ts +12 -0
- package/dist/core/human-input.d.ts.map +1 -1
- package/dist/core/human-input.js +59 -12
- package/dist/core/human-input.js.map +1 -1
- package/dist/core/index.d.ts +3 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/local-runtime-controller.d.ts.map +1 -1
- package/dist/core/local-runtime-controller.js +15 -9
- package/dist/core/local-runtime-controller.js.map +1 -1
- package/dist/core/memory/providers/file-store.d.ts +1 -0
- package/dist/core/memory/providers/file-store.d.ts.map +1 -1
- package/dist/core/memory/providers/file-store.js +253 -126
- package/dist/core/memory/providers/file-store.js.map +1 -1
- package/dist/core/memory/providers/user-memory-archive.js +1 -1
- package/dist/core/memory/providers/user-memory-archive.js.map +1 -1
- package/dist/core/model-capability.d.ts +15 -1
- package/dist/core/model-capability.d.ts.map +1 -1
- package/dist/core/model-capability.js +24 -1
- package/dist/core/model-capability.js.map +1 -1
- package/dist/core/model-registry.d.ts +7 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +22 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-router-controller.d.ts +6 -6
- package/dist/core/model-router-controller.d.ts.map +1 -1
- package/dist/core/model-router-controller.js +6 -6
- package/dist/core/model-router-controller.js.map +1 -1
- package/dist/core/model-selection-controller.js +1 -1
- package/dist/core/model-selection-controller.js.map +1 -1
- package/dist/core/model-tool-protocol.d.ts +1 -1
- package/dist/core/model-tool-protocol.d.ts.map +1 -1
- package/dist/core/model-tool-protocol.js +1 -1
- package/dist/core/model-tool-protocol.js.map +1 -1
- package/dist/core/models/context-sizing.d.ts +1 -0
- package/dist/core/models/context-sizing.d.ts.map +1 -1
- package/dist/core/models/context-sizing.js +4 -1
- package/dist/core/models/context-sizing.js.map +1 -1
- package/dist/core/models/default-model-suggestions.d.ts.map +1 -1
- package/dist/core/models/default-model-suggestions.js +20 -10
- package/dist/core/models/default-model-suggestions.js.map +1 -1
- package/dist/core/models/llamacpp-runtime.d.ts +39 -11
- package/dist/core/models/llamacpp-runtime.d.ts.map +1 -1
- package/dist/core/models/llamacpp-runtime.js +87 -31
- package/dist/core/models/llamacpp-runtime.js.map +1 -1
- package/dist/core/models/local-execution-planner.d.ts +24 -0
- package/dist/core/models/local-execution-planner.d.ts.map +1 -0
- package/dist/core/models/local-execution-planner.js +119 -0
- package/dist/core/models/local-execution-planner.js.map +1 -0
- package/dist/core/models/local-inference-profile.d.ts +34 -0
- package/dist/core/models/local-inference-profile.d.ts.map +1 -0
- package/dist/core/models/local-inference-profile.js +74 -0
- package/dist/core/models/local-inference-profile.js.map +1 -0
- package/dist/core/models/local-runtime.d.ts +23 -4
- package/dist/core/models/local-runtime.d.ts.map +1 -1
- package/dist/core/models/local-runtime.js +12 -9
- package/dist/core/models/local-runtime.js.map +1 -1
- package/dist/core/models/managed-ollama-model.d.ts +26 -0
- package/dist/core/models/managed-ollama-model.d.ts.map +1 -0
- package/dist/core/models/managed-ollama-model.js +59 -0
- package/dist/core/models/managed-ollama-model.js.map +1 -0
- package/dist/core/models/model-ref.js +11 -11
- package/dist/core/models/model-ref.js.map +1 -1
- package/dist/core/models/prism-llamacpp-lifecycle.d.ts +10 -20
- package/dist/core/models/prism-llamacpp-lifecycle.d.ts.map +1 -1
- package/dist/core/models/prism-llamacpp-lifecycle.js +11 -31
- package/dist/core/models/prism-llamacpp-lifecycle.js.map +1 -1
- package/dist/core/models/prism-llamacpp-server-probe.d.ts +10 -0
- package/dist/core/models/prism-llamacpp-server-probe.d.ts.map +1 -0
- package/dist/core/models/prism-llamacpp-server-probe.js +36 -0
- package/dist/core/models/prism-llamacpp-server-probe.js.map +1 -0
- package/dist/core/models/runtime-arbiter.d.ts +3 -0
- package/dist/core/models/runtime-arbiter.d.ts.map +1 -1
- package/dist/core/models/runtime-arbiter.js +2 -1
- package/dist/core/models/runtime-arbiter.js.map +1 -1
- package/dist/core/orchestration/model-binding.d.ts +1 -1
- package/dist/core/orchestration/model-binding.d.ts.map +1 -1
- package/dist/core/orchestration/model-binding.js +1 -1
- package/dist/core/orchestration/model-binding.js.map +1 -1
- package/dist/core/orchestration/task-profile-writer.js +1 -1
- package/dist/core/orchestration/task-profile-writer.js.map +1 -1
- package/dist/core/process-matrix/runtime.d.ts +15 -1
- package/dist/core/process-matrix/runtime.d.ts.map +1 -1
- package/dist/core/process-matrix/runtime.js +55 -34
- package/dist/core/process-matrix/runtime.js.map +1 -1
- package/dist/core/reflection-controller.d.ts +4 -3
- package/dist/core/reflection-controller.d.ts.map +1 -1
- package/dist/core/reflection-controller.js +2 -2
- package/dist/core/reflection-controller.js.map +1 -1
- package/dist/core/research/model-fitness-controller.js +1 -1
- package/dist/core/research/model-fitness-controller.js.map +1 -1
- package/dist/core/research/research-lane-controller.d.ts +2 -2
- package/dist/core/research/research-lane-controller.d.ts.map +1 -1
- package/dist/core/research/research-lane-controller.js +15 -6
- package/dist/core/research/research-lane-controller.js.map +1 -1
- package/dist/core/resource-loader.d.ts +10 -19
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +8 -70
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/runtime-builder.d.ts +5 -1
- package/dist/core/runtime-builder.d.ts.map +1 -1
- package/dist/core/runtime-builder.js +50 -7
- package/dist/core/runtime-builder.js.map +1 -1
- package/dist/core/scout-controller.d.ts +4 -3
- package/dist/core/scout-controller.d.ts.map +1 -1
- package/dist/core/scout-controller.js +2 -1
- package/dist/core/scout-controller.js.map +1 -1
- package/dist/core/sdk.d.ts +2 -2
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +13 -11
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/security/context-threat-scanner.d.ts +14 -0
- package/dist/core/security/context-threat-scanner.d.ts.map +1 -0
- package/dist/core/security/context-threat-scanner.js +71 -0
- package/dist/core/security/context-threat-scanner.js.map +1 -0
- package/dist/core/session-supervision-runtime.d.ts +4 -1
- package/dist/core/session-supervision-runtime.d.ts.map +1 -1
- package/dist/core/session-supervision-runtime.js +49 -11
- package/dist/core/session-supervision-runtime.js.map +1 -1
- package/dist/core/settings-manager.d.ts +13 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +60 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/system-prompt-builder.d.ts +5 -2
- package/dist/core/system-prompt-builder.d.ts.map +1 -1
- package/dist/core/system-prompt-builder.js +22 -10
- package/dist/core/system-prompt-builder.js.map +1 -1
- package/dist/core/system-prompt.d.ts +3 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +181 -55
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/tool-protocol-controller.d.ts.map +1 -1
- package/dist/core/tool-protocol-controller.js +5 -3
- package/dist/core/tool-protocol-controller.js.map +1 -1
- package/dist/core/tool-recovery-logger.js +1 -1
- package/dist/core/tool-recovery-logger.js.map +1 -1
- package/dist/core/tools/artifact-retrieve.js +1 -1
- package/dist/core/tools/artifact-retrieve.js.map +1 -1
- package/dist/core/tools/bash.d.ts +2 -2
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +16 -4
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +2 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js +9 -1
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts +5 -8
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +88 -55
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/extensionify-runtime.d.ts +44 -0
- package/dist/core/tools/extensionify-runtime.d.ts.map +1 -0
- package/dist/core/tools/extensionify-runtime.js +115 -0
- package/dist/core/tools/extensionify-runtime.js.map +1 -0
- package/dist/core/tools/extensionify.d.ts +9 -30
- package/dist/core/tools/extensionify.d.ts.map +1 -1
- package/dist/core/tools/extensionify.js +10 -140
- package/dist/core/tools/extensionify.js.map +1 -1
- package/dist/core/tools/file-mutation-intent.d.ts +42 -15
- package/dist/core/tools/file-mutation-intent.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-intent.js +271 -77
- package/dist/core/tools/file-mutation-intent.js.map +1 -1
- package/dist/core/tools/find.d.ts +1 -1
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +1 -1
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/index.d.ts +3 -5
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +8 -44
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +1 -1
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/render-utils.js +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/search-command-guard.d.ts +8 -0
- package/dist/core/tools/search-command-guard.d.ts.map +1 -1
- package/dist/core/tools/search-command-guard.js +54 -0
- package/dist/core/tools/search-command-guard.js.map +1 -1
- package/dist/core/tools/shell-contract-router.d.ts.map +1 -1
- package/dist/core/tools/shell-contract-router.js +9 -4
- package/dist/core/tools/shell-contract-router.js.map +1 -1
- package/dist/core/tools/shell-session.d.ts.map +1 -1
- package/dist/core/tools/shell-session.js +6 -4
- package/dist/core/tools/shell-session.js.map +1 -1
- package/dist/core/tools/tool-definition-factory.d.ts +32 -0
- package/dist/core/tools/tool-definition-factory.d.ts.map +1 -0
- package/dist/core/tools/tool-definition-factory.js +55 -0
- package/dist/core/tools/tool-definition-factory.js.map +1 -0
- package/dist/core/tools/write.d.ts +5 -10
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +92 -73
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/util/atomic-file.d.ts.map +1 -1
- package/dist/core/util/atomic-file.js +79 -32
- package/dist/core/util/atomic-file.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +24 -18
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.d.ts +6 -0
- package/dist/modes/interactive/auth-dialogs-controller.d.ts.map +1 -1
- package/dist/modes/interactive/auth-dialogs-controller.js +59 -12
- package/dist/modes/interactive/auth-dialogs-controller.js.map +1 -1
- package/dist/modes/interactive/auto-learn-controller.js +1 -1
- package/dist/modes/interactive/auto-learn-controller.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +1 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-event-controller.js +1 -1
- package/dist/modes/interactive/interactive-event-controller.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1 -1
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/local-model-commands.d.ts +1 -1
- package/dist/modes/interactive/local-model-commands.d.ts.map +1 -1
- package/dist/modes/interactive/local-model-commands.js +51 -8
- package/dist/modes/interactive/local-model-commands.js.map +1 -1
- package/dist/utils/child-process.js +1 -1
- package/dist/utils/child-process.js.map +1 -1
- package/docs/providers.md +34 -10
- package/docs/tool-boundary-performance-roadmap-2026-08-02.md +21 -18
- package/examples/extensions/built-in-tool-renderer.ts +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/minimal-mode.ts +1 -1
- package/examples/extensions/prompt-customizer.ts +2 -2
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/ssh.ts +17 -0
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/npm-shrinkwrap.json +240 -260
- package/package.json +9 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"goal-session-controller.js","sourceRoot":"","sources":["../../../src/core/goals/goal-session-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { classifyFailure } from \"@caupulican/pi-agent-core\";\nimport type { SessionManager } from \"@caupulican/pi-agent-core/node\";\nimport type { AssistantMessage } from \"@caupulican/pi-ai\";\nimport type {\n\tGoalContinuationLoopOptions,\n\tGoalContinuationLoopResult,\n\tGoalContinuationOnceOptions,\n\tGoalContinuationOnceResult,\n\tPromptOptions,\n} from \"../agent-session-contracts.ts\";\nimport type { LaneRecord } from \"../autonomy/lane-tracker.ts\";\nimport { GoalLoopController } from \"../goal-loop-controller.ts\";\nimport type { TaskRuntimeProjection } from \"../orchestration/task-runtime.ts\";\nimport { type GoalStateRevision, getGoalStateRevision, stopGoalFromSystem } from \"./goal-lifecycle.ts\";\nimport {\n\tbuildGoalRuntimeSnapshot,\n\ttype GoalRuntimeSnapshot,\n\ttype GoalRuntimeSnapshotSettings,\n} from \"./goal-runtime-snapshot.ts\";\nimport { applyGoalEvent, type GoalState, isGoalUnfinishedStatus } from \"./goal-state.ts\";\nimport { applyGoalAction } from \"./goal-tool-core.ts\";\nimport { parseExplicitChatGoal } from \"./natural-language-goal.ts\";\nimport {\n\tappendGoalClearedSnapshot,\n\tappendGoalStateSnapshot,\n\tgetLatestGoalStateSnapshot,\n} from \"./session-goal-state.ts\";\n\nexport interface GoalSessionControllerDeps {\n\tgetSessionManager(): SessionManager;\n\tgetModelProvider(): string | undefined;\n\tgetLaneRecords(): readonly LaneRecord[];\n\tgetTaskRuntimeSnapshot(): TaskRuntimeProjection | undefined;\n\tsynchronizeGoalState(state: GoalState): void;\n\tscheduleGoalAutoContinueFromIdle(): void;\n\tprompt(text: string, options?: PromptOptions): Promise<void>;\n\temitWarning(message: string): void;\n}\n\nexport type ChatGoalAdmission =\n\t| { status: \"not_explicit\" }\n\t| { status: \"started\"; state: GoalState }\n\t| { status: \"unfinished_goal_exists\"; state: GoalState };\n\n/**\n * Owns durable goal state, exact continuation accounting, and the raw continuation loop. The\n * AgentSession facade supplies process collaborators but no longer implements goal lifecycle rules.\n */\nexport class GoalSessionController {\n\tprivate readonly deps: GoalSessionControllerDeps;\n\tprivate readonly loop: GoalLoopController;\n\n\tconstructor(deps: GoalSessionControllerDeps) {\n\t\tthis.deps = deps;\n\t\tthis.loop = new GoalLoopController({\n\t\t\tgetGoalRuntimeSnapshot: (settings) => this.getRuntimeSnapshot(settings),\n\t\t\tprompt: (text, options) => this.deps.prompt(text, options),\n\t\t\tcaptureUsageCursor: () => this.deps.getSessionManager().getLeafId(),\n\t\t\trecordGoalContinuationPass: (pass) => this.recordContinuationPass(pass),\n\t\t\trecordGoalContinuationFailure: (error) => this.recordContinuationFailure(error),\n\t\t\tmarkGoalBudgetLimited: (reason) => this.markBudgetLimited(reason),\n\t\t});\n\t}\n\n\tsaveState(state: GoalState, expected?: GoalStateRevision): string {\n\t\tconst current = this.getState();\n\t\tif (\n\t\t\texpected &&\n\t\t\t(!current || current.goalId !== expected.goalId || (current.revision ?? 0) !== expected.revision)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Goal state changed concurrently; expected ${expected.goalId}@${expected.revision}, found ${current ? `${current.goalId}@${current.revision ?? 0}` : \"none\"}. Retry against the latest state.`,\n\t\t\t);\n\t\t}\n\t\tconst entryId = appendGoalStateSnapshot(this.deps.getSessionManager(), state, current);\n\t\ttry {\n\t\t\tthis.deps.synchronizeGoalState(state);\n\t\t} catch (error) {\n\t\t\tthis.deps.emitWarning(\n\t\t\t\t`Goal state persisted but durable worker reconciliation failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t}\n\t\treturn entryId;\n\t}\n\n\tclearState(state: GoalState, now: string): string {\n\t\tconst current = this.getState();\n\t\tconst expected = getGoalStateRevision(state);\n\t\tif (!current || current.goalId !== expected.goalId || (current.revision ?? 0) !== expected.revision) {\n\t\t\tthrow new Error(\"Goal state changed concurrently; retry clear against the latest state.\");\n\t\t}\n\t\tif (state.status !== \"completed\" && state.status !== \"cancelled\") {\n\t\t\tthis.deps.synchronizeGoalState(applyGoalEvent(state, { type: \"cancel_goal\", now }));\n\t\t}\n\t\treturn appendGoalClearedSnapshot(this.deps.getSessionManager(), state, now);\n\t}\n\n\tgetState(): GoalState | undefined {\n\t\treturn getLatestGoalStateSnapshot(this.deps.getSessionManager());\n\t}\n\n\t/**\n\t * Promote high-confidence natural-language persistence into the same durable state written by the\n\t * goal tool. This is intentionally narrower than task detection: ordinary work never starts a\n\t * goal, and an unfinished goal is never replaced implicitly.\n\t */\n\tadmitExplicitChatGoal(text: string, now = new Date().toISOString()): ChatGoalAdmission {\n\t\tconst parsed = parseExplicitChatGoal(text);\n\t\tif (!parsed) return { status: \"not_explicit\" };\n\t\tconst current = this.getState();\n\t\tif (current && isGoalUnfinishedStatus(current.status)) {\n\t\t\treturn { status: \"unfinished_goal_exists\", state: current };\n\t\t}\n\t\tconst digest = createHash(\"sha256\")\n\t\t\t.update(`${now}\\0${current?.goalId ?? \"none\"}\\0${parsed.objective}`)\n\t\t\t.digest(\"hex\")\n\t\t\t.slice(0, 20);\n\t\tconst result = applyGoalAction(\n\t\t\tcurrent,\n\t\t\t{ action: \"start\", goalId: `chat-${digest}`, userGoal: parsed.objective },\n\t\t\tnow,\n\t\t);\n\t\tif (!result.ok) throw new Error(result.error);\n\t\tthis.saveState(result.state, current ? getGoalStateRevision(current) : undefined);\n\t\treturn { status: \"started\", state: result.state };\n\t}\n\n\trecordContinuationPass(pass: { turns: number; wallClockMs: number; usageCursor: string | null }): void {\n\t\tconst state = this.getState();\n\t\tif (!state) return;\n\t\tconst branch = this.deps.getSessionManager().getBranch();\n\t\tconst cursorIndex = pass.usageCursor === null ? -1 : branch.findIndex((entry) => entry.id === pass.usageCursor);\n\t\tif (pass.usageCursor !== null && cursorIndex < 0) {\n\t\t\tthis.deps.emitWarning(\n\t\t\t\t\"Goal usage cursor is no longer on the active branch; stopping instead of guessing usage.\",\n\t\t\t);\n\t\t\tthis.recordContinuationFailure(new Error(\"goal_usage_cursor_lost\"));\n\t\t\treturn;\n\t\t}\n\t\tlet tokens = 0;\n\t\tlet spendUsd = 0;\n\t\tfor (const entry of branch.slice(cursorIndex + 1)) {\n\t\t\tif (entry.type !== \"message\" || entry.message.role !== \"assistant\") continue;\n\t\t\tconst usage = (entry.message as AssistantMessage).usage;\n\t\t\ttokens += Math.max(0, usage.input) + Math.max(0, usage.output);\n\t\t\tspendUsd += Math.max(0, usage.cost.total);\n\t\t}\n\t\tconst updated = applyGoalEvent(state, {\n\t\t\ttype: \"record_continuation_budget\",\n\t\t\tturns: pass.turns,\n\t\t\twallClockMs: pass.wallClockMs,\n\t\t\ttokens,\n\t\t\tspendUsd,\n\t\t\tnow: new Date().toISOString(),\n\t\t});\n\t\tthis.saveState(updated, getGoalStateRevision(state));\n\t}\n\n\tmarkToolUnavailable(): void {\n\t\tconst state = this.getState();\n\t\tconst stopped = stopGoalFromSystem(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\tstatus: \"blocked\",\n\t\t\t\treason: \"goal_tool_unavailable: the active capability surface cannot update durable goal state\",\n\t\t\t},\n\t\t\tnew Date().toISOString(),\n\t\t);\n\t\tif (stopped.ok && state) this.saveState(stopped.state, getGoalStateRevision(state));\n\t}\n\n\tgetRuntimeSnapshot(settings: GoalRuntimeSnapshotSettings): GoalRuntimeSnapshot {\n\t\treturn buildGoalRuntimeSnapshot({\n\t\t\tsessionManager: this.deps.getSessionManager(),\n\t\t\tsettings,\n\t\t\tlaneRecords: this.deps.getLaneRecords(),\n\t\t\ttaskRuntime: this.deps.getTaskRuntimeSnapshot(),\n\t\t});\n\t}\n\n\tcontinueOnce(options: GoalContinuationOnceOptions): Promise<GoalContinuationOnceResult> {\n\t\treturn this.loop.continueGoalOnce(options);\n\t}\n\n\tcontinueLoop(options: GoalContinuationLoopOptions): Promise<GoalContinuationLoopResult> {\n\t\treturn this.loop.continueGoalLoop(options);\n\t}\n\n\trestoreAfterResume(): void {\n\t\tthis.deps.scheduleGoalAutoContinueFromIdle();\n\t}\n\n\tprivate recordContinuationFailure(error: unknown): void {\n\t\tconst state = this.getState();\n\t\tif (!state || state.status !== \"active\") return;\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tconst classified = classifyFailure({ message, provider: this.deps.getModelProvider() });\n\t\tconst status = classified.reason === \"billing_or_quota\" ? \"usage_limited\" : \"blocked\";\n\t\tconst stopped = stopGoalFromSystem(\n\t\t\tstate,\n\t\t\t{ status, reason: `${classified.reason}: ${message}` },\n\t\t\tnew Date().toISOString(),\n\t\t);\n\t\tif (stopped.ok) this.saveState(stopped.state, getGoalStateRevision(state));\n\t}\n\n\tprivate markBudgetLimited(reason: string): void {\n\t\tconst state = this.getState();\n\t\tconst stopped = stopGoalFromSystem(state, { status: \"budget_limited\", reason }, new Date().toISOString());\n\t\tif (stopped.ok && state) this.saveState(stopped.state, getGoalStateRevision(state));\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"goal-session-controller.js","sourceRoot":"","sources":["../../../src/core/goals/goal-session-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAWxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EAA0B,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACvG,OAAO,EACN,wBAAwB,GAGxB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,cAAc,EAAkB,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EACN,yBAAyB,EACzB,uBAAuB,EACvB,0BAA0B,GAC1B,MAAM,yBAAyB,CAAC;AAkBjC;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IAIjC,YAAY,IAA+B;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,kBAAkB,CAAC;YAClC,sBAAsB,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YACvE,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;YAC1D,kBAAkB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE;YACnE,0BAA0B,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC;YACvE,6BAA6B,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC;YAC/E,qBAAqB,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;SACjE,CAAC,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,KAAgB,EAAE,QAA4B;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,IACC,QAAQ;YACR,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,EAChG,CAAC;YACF,MAAM,IAAI,KAAK,CACd,6CAA6C,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,QAAQ,WAAW,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,mCAAmC,CAC9L,CAAC;QACH,CAAC;QACD,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QACvF,IAAI,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,IAAI,CAAC,WAAW,CACpB,kEAAkE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1H,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,UAAU,CAAC,KAAgB,EAAE,GAAW;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACrG,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7E,CAAC;IAED,QAAQ;QACP,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;;;OAIG;IACH,qBAAqB,CAAC,IAAY,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACjE,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,OAAO,IAAI,sBAAsB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACvD,OAAO,EAAE,MAAM,EAAE,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC7D,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC;aACjC,MAAM,CAAC,GAAG,GAAG,KAAK,OAAO,EAAE,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,SAAS,EAAE,CAAC;aACnE,MAAM,CAAC,KAAK,CAAC;aACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACf,MAAM,MAAM,GAAG,eAAe,CAC7B,OAAO,EACP,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,SAAS,EAAE,EACzE,GAAG,CACH,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAClF,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;IACnD,CAAC;IAED,sBAAsB,CAAC,IAAwE;QAC9F,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,SAAS,EAAE,CAAC;QACzD,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;QAChH,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,IAAI,CAAC,WAAW,CACpB,0FAA0F,CAC1F,CAAC;YACF,IAAI,CAAC,yBAAyB,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACpE,OAAO;QACR,CAAC;QACD,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC;YACnD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW;gBAAE,SAAS;YAC7E,MAAM,KAAK,GAAI,KAAK,CAAC,OAA4B,CAAC,KAAK,CAAC;YACxD,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/D,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE;YACrC,IAAI,EAAE,4BAA4B;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,MAAM;YACN,QAAQ;YACR,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SAC7B,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,mBAAmB;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,kBAAkB,CACjC,KAAK,EACL;YACC,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,uFAAuF;SAC/F,EACD,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CACxB,CAAC;QACF,IAAI,OAAO,CAAC,EAAE,IAAI,KAAK;YAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IACrF,CAAC;IAED,kBAAkB,CAAC,QAAqC;QACvD,OAAO,wBAAwB,CAAC;YAC/B,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YAC7C,QAAQ;YACR,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACvC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;SAC/C,CAAC,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,OAAoC;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,YAAY,CAAC,OAAoC;QAChD,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,kBAAkB;QACjB,IAAI,CAAC,IAAI,CAAC,gCAAgC,EAAE,CAAC;IAC9C,CAAC;IAEO,yBAAyB,CAAC,KAAc;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO;QAChD,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;QACxF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,KAAK,kBAAkB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;QACtF,MAAM,OAAO,GAAG,kBAAkB,CACjC,KAAK,EACL,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,EAAE,EACtD,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CACxB,CAAC;QACF,IAAI,OAAO,CAAC,EAAE;YAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5E,CAAC;IAEO,iBAAiB,CAAC,MAAc;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1G,IAAI,OAAO,CAAC,EAAE,IAAI,KAAK;YAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;IACrF,CAAC;CACD","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { classifyFailure } from \"@caupulican/pi-agent-core/reliability\";\nimport type { SessionManager } from \"@caupulican/pi-agent-core/session\";\nimport type { AssistantMessage } from \"@caupulican/pi-ai\";\nimport type {\n\tGoalContinuationLoopOptions,\n\tGoalContinuationLoopResult,\n\tGoalContinuationOnceOptions,\n\tGoalContinuationOnceResult,\n\tPromptOptions,\n} from \"../agent-session-contracts.ts\";\nimport type { LaneRecord } from \"../autonomy/lane-tracker.ts\";\nimport { GoalLoopController } from \"../goal-loop-controller.ts\";\nimport type { TaskRuntimeProjection } from \"../orchestration/task-runtime.ts\";\nimport { type GoalStateRevision, getGoalStateRevision, stopGoalFromSystem } from \"./goal-lifecycle.ts\";\nimport {\n\tbuildGoalRuntimeSnapshot,\n\ttype GoalRuntimeSnapshot,\n\ttype GoalRuntimeSnapshotSettings,\n} from \"./goal-runtime-snapshot.ts\";\nimport { applyGoalEvent, type GoalState, isGoalUnfinishedStatus } from \"./goal-state.ts\";\nimport { applyGoalAction } from \"./goal-tool-core.ts\";\nimport { parseExplicitChatGoal } from \"./natural-language-goal.ts\";\nimport {\n\tappendGoalClearedSnapshot,\n\tappendGoalStateSnapshot,\n\tgetLatestGoalStateSnapshot,\n} from \"./session-goal-state.ts\";\n\nexport interface GoalSessionControllerDeps {\n\tgetSessionManager(): SessionManager;\n\tgetModelProvider(): string | undefined;\n\tgetLaneRecords(): readonly LaneRecord[];\n\tgetTaskRuntimeSnapshot(): TaskRuntimeProjection | undefined;\n\tsynchronizeGoalState(state: GoalState): void;\n\tscheduleGoalAutoContinueFromIdle(): void;\n\tprompt(text: string, options?: PromptOptions): Promise<void>;\n\temitWarning(message: string): void;\n}\n\nexport type ChatGoalAdmission =\n\t| { status: \"not_explicit\" }\n\t| { status: \"started\"; state: GoalState }\n\t| { status: \"unfinished_goal_exists\"; state: GoalState };\n\n/**\n * Owns durable goal state, exact continuation accounting, and the raw continuation loop. The\n * AgentSession facade supplies process collaborators but no longer implements goal lifecycle rules.\n */\nexport class GoalSessionController {\n\tprivate readonly deps: GoalSessionControllerDeps;\n\tprivate readonly loop: GoalLoopController;\n\n\tconstructor(deps: GoalSessionControllerDeps) {\n\t\tthis.deps = deps;\n\t\tthis.loop = new GoalLoopController({\n\t\t\tgetGoalRuntimeSnapshot: (settings) => this.getRuntimeSnapshot(settings),\n\t\t\tprompt: (text, options) => this.deps.prompt(text, options),\n\t\t\tcaptureUsageCursor: () => this.deps.getSessionManager().getLeafId(),\n\t\t\trecordGoalContinuationPass: (pass) => this.recordContinuationPass(pass),\n\t\t\trecordGoalContinuationFailure: (error) => this.recordContinuationFailure(error),\n\t\t\tmarkGoalBudgetLimited: (reason) => this.markBudgetLimited(reason),\n\t\t});\n\t}\n\n\tsaveState(state: GoalState, expected?: GoalStateRevision): string {\n\t\tconst current = this.getState();\n\t\tif (\n\t\t\texpected &&\n\t\t\t(!current || current.goalId !== expected.goalId || (current.revision ?? 0) !== expected.revision)\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`Goal state changed concurrently; expected ${expected.goalId}@${expected.revision}, found ${current ? `${current.goalId}@${current.revision ?? 0}` : \"none\"}. Retry against the latest state.`,\n\t\t\t);\n\t\t}\n\t\tconst entryId = appendGoalStateSnapshot(this.deps.getSessionManager(), state, current);\n\t\ttry {\n\t\t\tthis.deps.synchronizeGoalState(state);\n\t\t} catch (error) {\n\t\t\tthis.deps.emitWarning(\n\t\t\t\t`Goal state persisted but durable worker reconciliation failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t);\n\t\t}\n\t\treturn entryId;\n\t}\n\n\tclearState(state: GoalState, now: string): string {\n\t\tconst current = this.getState();\n\t\tconst expected = getGoalStateRevision(state);\n\t\tif (!current || current.goalId !== expected.goalId || (current.revision ?? 0) !== expected.revision) {\n\t\t\tthrow new Error(\"Goal state changed concurrently; retry clear against the latest state.\");\n\t\t}\n\t\tif (state.status !== \"completed\" && state.status !== \"cancelled\") {\n\t\t\tthis.deps.synchronizeGoalState(applyGoalEvent(state, { type: \"cancel_goal\", now }));\n\t\t}\n\t\treturn appendGoalClearedSnapshot(this.deps.getSessionManager(), state, now);\n\t}\n\n\tgetState(): GoalState | undefined {\n\t\treturn getLatestGoalStateSnapshot(this.deps.getSessionManager());\n\t}\n\n\t/**\n\t * Promote high-confidence natural-language persistence into the same durable state written by the\n\t * goal tool. This is intentionally narrower than task detection: ordinary work never starts a\n\t * goal, and an unfinished goal is never replaced implicitly.\n\t */\n\tadmitExplicitChatGoal(text: string, now = new Date().toISOString()): ChatGoalAdmission {\n\t\tconst parsed = parseExplicitChatGoal(text);\n\t\tif (!parsed) return { status: \"not_explicit\" };\n\t\tconst current = this.getState();\n\t\tif (current && isGoalUnfinishedStatus(current.status)) {\n\t\t\treturn { status: \"unfinished_goal_exists\", state: current };\n\t\t}\n\t\tconst digest = createHash(\"sha256\")\n\t\t\t.update(`${now}\\0${current?.goalId ?? \"none\"}\\0${parsed.objective}`)\n\t\t\t.digest(\"hex\")\n\t\t\t.slice(0, 20);\n\t\tconst result = applyGoalAction(\n\t\t\tcurrent,\n\t\t\t{ action: \"start\", goalId: `chat-${digest}`, userGoal: parsed.objective },\n\t\t\tnow,\n\t\t);\n\t\tif (!result.ok) throw new Error(result.error);\n\t\tthis.saveState(result.state, current ? getGoalStateRevision(current) : undefined);\n\t\treturn { status: \"started\", state: result.state };\n\t}\n\n\trecordContinuationPass(pass: { turns: number; wallClockMs: number; usageCursor: string | null }): void {\n\t\tconst state = this.getState();\n\t\tif (!state) return;\n\t\tconst branch = this.deps.getSessionManager().getBranch();\n\t\tconst cursorIndex = pass.usageCursor === null ? -1 : branch.findIndex((entry) => entry.id === pass.usageCursor);\n\t\tif (pass.usageCursor !== null && cursorIndex < 0) {\n\t\t\tthis.deps.emitWarning(\n\t\t\t\t\"Goal usage cursor is no longer on the active branch; stopping instead of guessing usage.\",\n\t\t\t);\n\t\t\tthis.recordContinuationFailure(new Error(\"goal_usage_cursor_lost\"));\n\t\t\treturn;\n\t\t}\n\t\tlet tokens = 0;\n\t\tlet spendUsd = 0;\n\t\tfor (const entry of branch.slice(cursorIndex + 1)) {\n\t\t\tif (entry.type !== \"message\" || entry.message.role !== \"assistant\") continue;\n\t\t\tconst usage = (entry.message as AssistantMessage).usage;\n\t\t\ttokens += Math.max(0, usage.input) + Math.max(0, usage.output);\n\t\t\tspendUsd += Math.max(0, usage.cost.total);\n\t\t}\n\t\tconst updated = applyGoalEvent(state, {\n\t\t\ttype: \"record_continuation_budget\",\n\t\t\tturns: pass.turns,\n\t\t\twallClockMs: pass.wallClockMs,\n\t\t\ttokens,\n\t\t\tspendUsd,\n\t\t\tnow: new Date().toISOString(),\n\t\t});\n\t\tthis.saveState(updated, getGoalStateRevision(state));\n\t}\n\n\tmarkToolUnavailable(): void {\n\t\tconst state = this.getState();\n\t\tconst stopped = stopGoalFromSystem(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\tstatus: \"blocked\",\n\t\t\t\treason: \"goal_tool_unavailable: the active capability surface cannot update durable goal state\",\n\t\t\t},\n\t\t\tnew Date().toISOString(),\n\t\t);\n\t\tif (stopped.ok && state) this.saveState(stopped.state, getGoalStateRevision(state));\n\t}\n\n\tgetRuntimeSnapshot(settings: GoalRuntimeSnapshotSettings): GoalRuntimeSnapshot {\n\t\treturn buildGoalRuntimeSnapshot({\n\t\t\tsessionManager: this.deps.getSessionManager(),\n\t\t\tsettings,\n\t\t\tlaneRecords: this.deps.getLaneRecords(),\n\t\t\ttaskRuntime: this.deps.getTaskRuntimeSnapshot(),\n\t\t});\n\t}\n\n\tcontinueOnce(options: GoalContinuationOnceOptions): Promise<GoalContinuationOnceResult> {\n\t\treturn this.loop.continueGoalOnce(options);\n\t}\n\n\tcontinueLoop(options: GoalContinuationLoopOptions): Promise<GoalContinuationLoopResult> {\n\t\treturn this.loop.continueGoalLoop(options);\n\t}\n\n\trestoreAfterResume(): void {\n\t\tthis.deps.scheduleGoalAutoContinueFromIdle();\n\t}\n\n\tprivate recordContinuationFailure(error: unknown): void {\n\t\tconst state = this.getState();\n\t\tif (!state || state.status !== \"active\") return;\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tconst classified = classifyFailure({ message, provider: this.deps.getModelProvider() });\n\t\tconst status = classified.reason === \"billing_or_quota\" ? \"usage_limited\" : \"blocked\";\n\t\tconst stopped = stopGoalFromSystem(\n\t\t\tstate,\n\t\t\t{ status, reason: `${classified.reason}: ${message}` },\n\t\t\tnew Date().toISOString(),\n\t\t);\n\t\tif (stopped.ok) this.saveState(stopped.state, getGoalStateRevision(state));\n\t}\n\n\tprivate markBudgetLimited(reason: string): void {\n\t\tconst state = this.getState();\n\t\tconst stopped = stopGoalFromSystem(state, { status: \"budget_limited\", reason }, new Date().toISOString());\n\t\tif (stopped.ok && state) this.saveState(stopped.state, getGoalStateRevision(state));\n\t}\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type StreamIdleOptions } from "@caupulican/pi-agent-core";
|
|
1
|
+
import { type StreamIdleOptions } from "@caupulican/pi-agent-core/reliability";
|
|
2
2
|
export declare const DEFAULT_HTTP_IDLE_TIMEOUT_MS = 660000;
|
|
3
3
|
export interface HttpBoundedStreamIdlePolicy {
|
|
4
4
|
options: StreamIdleOptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-dispatcher.d.ts","sourceRoot":"","sources":["../../src/core/http-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"http-dispatcher.d.ts","sourceRoot":"","sources":["../../src/core/http-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAOpG,eAAO,MAAM,4BAA4B,SAAU,CAAC;AAKpD,MAAM,WAAW,2BAA2B;IAC3C,OAAO,EAAE,iBAAiB,CAAC;IAC3B,wFAAwF;IACxF,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,yBAAyB;aACnC,KAAK,EAAE,QAAQ;aAAE,SAAS,EAAE,KAAM;;aAClC,KAAK,EAAE,OAAO;aAAE,SAAS,EAAE,KAAM;;aACjC,KAAK,EAAE,OAAO;aAAE,SAAS,EAAE,MAAO;;aAClC,KAAK,EAAE,OAAO;aAAE,SAAS,EAAE,MAAO;;aAClC,KAAK,EAAE,QAAQ;aAAE,SAAS,EAAE,MAAO;;aACnC,KAAK,EAAE,UAAU;aAAE,SAAS,EAAE,CAAC;EACxB,CAAC;AAEX,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAgBzE;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMjE;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC/C,OAAO,EAAE,iBAAiB,EAC1B,iBAAiB,EAAE,MAAM,GACvB,2BAA2B,CAiC7B;AAED,wBAAgB,uBAAuB,CAAC,SAAS,GAAE,MAAqC,GAAG,IAAI,CAgB9F"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DEFAULT_STREAM_IDLE } from "@caupulican/pi-agent-core";
|
|
1
|
+
import { DEFAULT_STREAM_IDLE } from "@caupulican/pi-agent-core/reliability";
|
|
2
2
|
import * as undici from "undici";
|
|
3
3
|
// The default stays strictly greater than the stall watchdog's quiet bound (600s — see
|
|
4
4
|
// pi-agent-core DEFAULT_STREAM_IDLE): 660s = quiet bound + 60s margin. Shorter explicit
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-dispatcher.js","sourceRoot":"","sources":["../../src/core/http-dispatcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAA0B,MAAM,
|
|
1
|
+
{"version":3,"file":"http-dispatcher.js","sourceRoot":"","sources":["../../src/core/http-dispatcher.ts"],"names":[],"mappings":"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","sourcesContent":["import { DEFAULT_STREAM_IDLE, type StreamIdleOptions } from \"@caupulican/pi-agent-core/reliability\";\nimport * as undici from \"undici\";\n\n// The default stays strictly greater than the stall watchdog's quiet bound (600s — see\n// pi-agent-core DEFAULT_STREAM_IDLE): 660s = quiet bound + 60s margin. Shorter explicit\n// values remain supported because constrainStreamIdleToHttpTimeout clamps every watchdog\n// phase and its adaptive ceiling below the nonzero undici timeout.\nexport const DEFAULT_HTTP_IDLE_TIMEOUT_MS = 660_000;\n\nconst MAX_HTTP_WATCHDOG_MARGIN_MS = 60_000;\nconst HTTP_WATCHDOG_MARGIN_RATIO = 0.1;\n\nexport interface HttpBoundedStreamIdlePolicy {\n\toptions: StreamIdleOptions;\n\t/** Undefined when the HTTP idle timeout is disabled and imposes no adaptive ceiling. */\n\tadaptiveCeilingMs?: number;\n}\n\nexport const HTTP_IDLE_TIMEOUT_CHOICES = [\n\t{ label: \"30 sec\", timeoutMs: 30_000 },\n\t{ label: \"1 min\", timeoutMs: 60_000 },\n\t{ label: \"2 min\", timeoutMs: 120_000 },\n\t{ label: \"5 min\", timeoutMs: 300_000 },\n\t{ label: \"11 min\", timeoutMs: 660_000 },\n\t{ label: \"disabled\", timeoutMs: 0 },\n] as const;\n\nexport function parseHttpIdleTimeoutMs(value: unknown): number | undefined {\n\tif (typeof value === \"string\") {\n\t\tconst trimmed = value.trim();\n\t\tif (trimmed.toLowerCase() === \"disabled\") {\n\t\t\treturn 0;\n\t\t}\n\t\tif (trimmed.length === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn parseHttpIdleTimeoutMs(Number(trimmed));\n\t}\n\n\tif (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) {\n\t\treturn undefined;\n\t}\n\treturn Math.floor(value);\n}\n\nexport function formatHttpIdleTimeoutMs(timeoutMs: number): string {\n\tconst choice = HTTP_IDLE_TIMEOUT_CHOICES.find((item) => item.timeoutMs === timeoutMs);\n\tif (choice) {\n\t\treturn choice.label;\n\t}\n\treturn `${timeoutMs / 1000} sec`;\n}\n\n/**\n * Keep the phase-aware watchdog authoritative over undici's coarser headers/body idle timeout.\n * A nonzero HTTP timeout constrains every watchdog phase and adaptive expansion to a value with\n * a 10% margin (capped at 60s). Disabling the HTTP timeout leaves watchdog policy untouched.\n */\nexport function constrainStreamIdleToHttpTimeout(\n\toptions: StreamIdleOptions,\n\thttpIdleTimeoutMs: number,\n): HttpBoundedStreamIdlePolicy {\n\t// Settings intentionally expose an undefined field for each unset user override. A\n\t// spread can carry those values over the defaults before this boundary, so restore\n\t// the kernel defaults here instead of allowing Math.min(undefined, ...) to produce\n\t// a zero-delay NaN watchdog timer.\n\tconst resolvedOptions: StreamIdleOptions = {\n\t\t...options,\n\t\tconnectMs: options.connectMs ?? DEFAULT_STREAM_IDLE.connectMs,\n\t\tactiveIdleMs: options.activeIdleMs ?? DEFAULT_STREAM_IDLE.activeIdleMs,\n\t\tquietIdleMs: options.quietIdleMs ?? DEFAULT_STREAM_IDLE.quietIdleMs,\n\t};\n\tconst normalizedTimeoutMs = parseHttpIdleTimeoutMs(httpIdleTimeoutMs);\n\tif (normalizedTimeoutMs === undefined) {\n\t\tthrow new Error(`Invalid HTTP idle timeout: ${String(httpIdleTimeoutMs)}`);\n\t}\n\tif (normalizedTimeoutMs === 0) {\n\t\treturn { options: resolvedOptions };\n\t}\n\n\tconst marginMs = Math.min(\n\t\tMAX_HTTP_WATCHDOG_MARGIN_MS,\n\t\tMath.max(1, Math.floor(normalizedTimeoutMs * HTTP_WATCHDOG_MARGIN_RATIO)),\n\t);\n\tconst adaptiveCeilingMs = Math.max(0, normalizedTimeoutMs - marginMs);\n\treturn {\n\t\toptions: {\n\t\t\t...resolvedOptions,\n\t\t\tconnectMs: Math.min(resolvedOptions.connectMs, adaptiveCeilingMs),\n\t\t\tactiveIdleMs: Math.min(resolvedOptions.activeIdleMs, adaptiveCeilingMs),\n\t\t\tquietIdleMs: Math.min(resolvedOptions.quietIdleMs, adaptiveCeilingMs),\n\t\t},\n\t\tadaptiveCeilingMs,\n\t};\n}\n\nexport function configureHttpDispatcher(timeoutMs: number = DEFAULT_HTTP_IDLE_TIMEOUT_MS): void {\n\tconst normalizedTimeoutMs = parseHttpIdleTimeoutMs(timeoutMs);\n\tif (normalizedTimeoutMs === undefined) {\n\t\tthrow new Error(`Invalid HTTP idle timeout: ${String(timeoutMs)}`);\n\t}\n\tundici.setGlobalDispatcher(\n\t\tnew undici.EnvHttpProxyAgent({\n\t\t\tallowH2: false,\n\t\t\tbodyTimeout: normalizedTimeoutMs,\n\t\t\theadersTimeout: normalizedTimeoutMs,\n\t\t}),\n\t);\n\t// Keep fetch and the dispatcher on the same undici implementation. Node 26.0's\n\t// bundled fetch can otherwise consume compressed responses through npm undici's\n\t// dispatcher without decompressing them, causing response.json() failures.\n\tundici.install?.();\n}\n"]}
|
|
@@ -36,11 +36,20 @@ export declare class HumanInputController {
|
|
|
36
36
|
private readonly deps;
|
|
37
37
|
private tail;
|
|
38
38
|
private readonly activeRequestIds;
|
|
39
|
+
private indexedSessionManager;
|
|
40
|
+
private indexedLeafId;
|
|
41
|
+
private workerInputIndexInitialized;
|
|
42
|
+
private readonly workerInputProjection;
|
|
39
43
|
constructor(deps: HumanInputControllerDeps);
|
|
40
44
|
queueWorkerInput(request: WorkerHumanInputRequest): void;
|
|
41
45
|
schedulePendingWorkerInputs(): void;
|
|
46
|
+
/** True when every terminal lane already has a durable owner question scheduled for delivery. */
|
|
47
|
+
workerInputsWillWakeParent(workerRequestIds: readonly string[]): boolean;
|
|
42
48
|
resumePending(): Promise<boolean>;
|
|
43
49
|
private scheduleWorkerInput;
|
|
50
|
+
private getWorkerInputsRequiringDelivery;
|
|
51
|
+
private synchronizeWorkerInputIndex;
|
|
52
|
+
private rebuildWorkerInputIndex;
|
|
44
53
|
private resolveWorkerInput;
|
|
45
54
|
}
|
|
46
55
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"human-input-controller.d.ts","sourceRoot":"","sources":["../../src/core/human-input-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"human-input-controller.d.ts","sourceRoot":"","sources":["../../src/core/human-input-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,KAAK,EAAE,GAAG,EAAgB,KAAK,EAAqB,MAAM,mBAAmB,CAAC;AACrF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAYlF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACvC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,UAAU,wBAAwB;IACjC,iBAAiB,IAAI,cAAc,CAAC;IACpC,YAAY,IAAI,kBAAkB,GAAG,SAAS,CAAC;IAC/C,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC7C,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,IAAI,OAAO,CAAC;IACtB,WAAW,IAAI,OAAO,CAAC;IACvB,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACnC,gBAAgB,IAAI,aAAa,CAAC;IAClC,aAAa,IAAI,iBAAiB,GAAG,SAAS,CAAC;IAC/C,cAAc,CAAC,QAAQ,EAAE,YAAY,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,iBAAiB,CAChB,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,EACrF,OAAO,EAAE;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,UAAU,CAAA;KAAE,GACtD,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,qFAAqF;AACrF,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,IAAI,CAAoC;IAChD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IACtD,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,2BAA2B,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAoC;IAE1E,YAAY,IAAI,EAAE,wBAAwB,EAEzC;IAED,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAiCvD;IAED,2BAA2B,IAAI,IAAI,CAIlC;IAED,iGAAiG;IACjG,0BAA0B,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAUvE;IAEK,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CA8EtC;IAED,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,gCAAgC;IAKxC,OAAO,CAAC,2BAA2B;IA8BnC,OAAO,CAAC,uBAAuB;YAOjB,kBAAkB;CAqChC"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
|
-
import { beginHumanInputRequest, createHumanInputRequest, formatHumanInputAnswerText,
|
|
1
|
+
import { beginHumanInputRequest, createHumanInputRequest, formatHumanInputAnswerText, getResumableHumanInputSnapshot, HUMAN_INPUT_WORKER_RESPONSE_CUSTOM_TYPE, resolveHumanInput, WorkerHumanInputProjection, } from "./human-input.js";
|
|
2
2
|
/** Owns durable question replay and serialized worker-to-owner question delivery. */
|
|
3
3
|
export class HumanInputController {
|
|
4
4
|
constructor(deps) {
|
|
5
5
|
this.tail = Promise.resolve();
|
|
6
6
|
this.activeRequestIds = new Set();
|
|
7
|
+
this.indexedLeafId = null;
|
|
8
|
+
this.workerInputIndexInitialized = false;
|
|
9
|
+
this.workerInputProjection = new WorkerHumanInputProjection();
|
|
7
10
|
this.deps = deps;
|
|
8
11
|
}
|
|
9
12
|
queueWorkerInput(request) {
|
|
10
13
|
const sessionManager = this.deps.getSessionManager();
|
|
11
|
-
|
|
12
|
-
if (
|
|
14
|
+
this.synchronizeWorkerInputIndex();
|
|
15
|
+
if (this.workerInputProjection.hasKnownWorkerRequest(request.workerRequestId))
|
|
13
16
|
return;
|
|
14
17
|
const blockerText = request.blockers
|
|
15
18
|
.slice(0, 4)
|
|
@@ -38,14 +41,25 @@ export class HumanInputController {
|
|
|
38
41
|
acceptsImages: false,
|
|
39
42
|
});
|
|
40
43
|
beginHumanInputRequest(sessionManager, question);
|
|
44
|
+
this.synchronizeWorkerInputIndex();
|
|
41
45
|
if (!this.deps.isStreaming())
|
|
42
46
|
this.scheduleWorkerInput(question);
|
|
43
47
|
}
|
|
44
48
|
schedulePendingWorkerInputs() {
|
|
45
|
-
for (const snapshot of
|
|
49
|
+
for (const snapshot of this.getWorkerInputsRequiringDelivery()) {
|
|
46
50
|
this.scheduleWorkerInput(snapshot);
|
|
47
51
|
}
|
|
48
52
|
}
|
|
53
|
+
/** True when every terminal lane already has a durable owner question scheduled for delivery. */
|
|
54
|
+
workerInputsWillWakeParent(workerRequestIds) {
|
|
55
|
+
if (workerRequestIds.length === 0 ||
|
|
56
|
+
this.deps.getUIContext() === undefined ||
|
|
57
|
+
this.deps.getExtensionMode() === "print") {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
this.synchronizeWorkerInputIndex();
|
|
61
|
+
return workerRequestIds.every((workerRequestId) => this.workerInputProjection.requiresDelivery(workerRequestId));
|
|
62
|
+
}
|
|
49
63
|
async resumePending() {
|
|
50
64
|
if (this.deps.isDisposed() || this.deps.isStreaming())
|
|
51
65
|
return false;
|
|
@@ -112,7 +126,7 @@ export class HumanInputController {
|
|
|
112
126
|
await this.deps.runAgentPrompt(toolResult);
|
|
113
127
|
resumed = true;
|
|
114
128
|
}
|
|
115
|
-
for (const workerInput of
|
|
129
|
+
for (const workerInput of this.getWorkerInputsRequiringDelivery()) {
|
|
116
130
|
if (this.activeRequestIds.has(workerInput.request.requestId))
|
|
117
131
|
continue;
|
|
118
132
|
this.activeRequestIds.add(workerInput.request.requestId);
|
|
@@ -142,6 +156,45 @@ export class HumanInputController {
|
|
|
142
156
|
this.activeRequestIds.delete(requestId);
|
|
143
157
|
});
|
|
144
158
|
}
|
|
159
|
+
getWorkerInputsRequiringDelivery() {
|
|
160
|
+
this.synchronizeWorkerInputIndex();
|
|
161
|
+
return this.workerInputProjection.getRequiringDelivery();
|
|
162
|
+
}
|
|
163
|
+
synchronizeWorkerInputIndex() {
|
|
164
|
+
const sessionManager = this.deps.getSessionManager();
|
|
165
|
+
const currentLeafId = sessionManager.getLeafId();
|
|
166
|
+
if (!this.workerInputIndexInitialized || this.indexedSessionManager !== sessionManager) {
|
|
167
|
+
this.rebuildWorkerInputIndex(sessionManager);
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (currentLeafId === this.indexedLeafId)
|
|
171
|
+
return;
|
|
172
|
+
const appendedEntries = [];
|
|
173
|
+
let cursor = currentLeafId;
|
|
174
|
+
while (cursor !== null && cursor !== this.indexedLeafId) {
|
|
175
|
+
const entry = sessionManager.getEntry(cursor);
|
|
176
|
+
if (!entry) {
|
|
177
|
+
this.rebuildWorkerInputIndex(sessionManager);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
appendedEntries.push(entry);
|
|
181
|
+
cursor = entry.parentId;
|
|
182
|
+
}
|
|
183
|
+
if (cursor !== this.indexedLeafId) {
|
|
184
|
+
this.rebuildWorkerInputIndex(sessionManager);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
for (let index = appendedEntries.length - 1; index >= 0; index--) {
|
|
188
|
+
this.workerInputProjection.apply(appendedEntries[index]);
|
|
189
|
+
}
|
|
190
|
+
this.indexedLeafId = currentLeafId;
|
|
191
|
+
}
|
|
192
|
+
rebuildWorkerInputIndex(sessionManager) {
|
|
193
|
+
this.workerInputProjection.reset(sessionManager.getBranch());
|
|
194
|
+
this.indexedSessionManager = sessionManager;
|
|
195
|
+
this.indexedLeafId = sessionManager.getLeafId();
|
|
196
|
+
this.workerInputIndexInitialized = true;
|
|
197
|
+
}
|
|
145
198
|
async resolveWorkerInput(initial) {
|
|
146
199
|
const ui = this.deps.getUIContext();
|
|
147
200
|
if (!ui || this.deps.getExtensionMode() === "print")
|
|
@@ -158,6 +211,7 @@ export class HumanInputController {
|
|
|
158
211
|
getImageStore: () => this.deps.getImageStore(),
|
|
159
212
|
})
|
|
160
213
|
: { snapshot: initial, imageContents: [] };
|
|
214
|
+
this.synchronizeWorkerInputIndex();
|
|
161
215
|
await this.deps.waitForIdle();
|
|
162
216
|
if (this.deps.isDisposed())
|
|
163
217
|
return false;
|
|
@@ -174,6 +228,7 @@ export class HumanInputController {
|
|
|
174
228
|
workerRequestId: initial.request.workerRequestId,
|
|
175
229
|
},
|
|
176
230
|
}, { triggerTurn: true, deliverAs: "followUp" });
|
|
231
|
+
this.synchronizeWorkerInputIndex();
|
|
177
232
|
return true;
|
|
178
233
|
}
|
|
179
234
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"human-input-controller.js","sourceRoot":"","sources":["../../src/core/human-input-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@caupulican/pi-agent-core\";\nimport type { SessionManager } from \"@caupulican/pi-agent-core/node\";\nimport type { Api, ImageContent, Model, ToolResultMessage } from \"@caupulican/pi-ai\";\nimport type { ArtifactStore } from \"./context/context-artifacts.ts\";\nimport type { ExtensionContext, ExtensionUIContext } from \"./extensions/index.ts\";\nimport {\n\tbeginHumanInputRequest,\n\tcreateHumanInputRequest,\n\tformatHumanInputAnswerText,\n\tgetLatestHumanInputSnapshots,\n\tgetResumableHumanInputSnapshot,\n\tgetWorkerHumanInputsRequiringDelivery,\n\tHUMAN_INPUT_WORKER_RESPONSE_CUSTOM_TYPE,\n\ttype HumanInputRequest,\n\ttype HumanInputSnapshot,\n\tresolveHumanInput,\n} from \"./human-input.ts\";\nimport type { SessionImageStore } from \"./session-image-store.ts\";\n\nexport interface WorkerHumanInputRequest {\n\tworkerRequestId: string;\n\tmessage: string;\n\tblockers: readonly string[];\n}\n\ninterface HumanInputControllerDeps {\n\tgetSessionManager(): SessionManager;\n\tgetUIContext(): ExtensionUIContext | undefined;\n\tgetExtensionMode(): ExtensionContext[\"mode\"];\n\twaitForIdle(): Promise<void>;\n\tisDisposed(): boolean;\n\tisStreaming(): boolean;\n\tgetModel(): Model<Api> | undefined;\n\tgetArtifactStore(): ArtifactStore;\n\tgetImageStore(): SessionImageStore | undefined;\n\trunAgentPrompt(messages: AgentMessage | AgentMessage[]): Promise<void>;\n\tsendCustomMessage(\n\t\tmessage: { customType: string; content: string; display: boolean; details?: unknown },\n\t\toptions: { triggerTurn: boolean; deliverAs: \"followUp\" },\n\t): Promise<void>;\n\temitWarning(message: string): void;\n}\n\n/** Owns durable question replay and serialized worker-to-owner question delivery. */\nexport class HumanInputController {\n\tprivate readonly deps: HumanInputControllerDeps;\n\tprivate tail: Promise<void> = Promise.resolve();\n\tprivate readonly activeRequestIds = new Set<string>();\n\n\tconstructor(deps: HumanInputControllerDeps) {\n\t\tthis.deps = deps;\n\t}\n\n\tqueueWorkerInput(request: WorkerHumanInputRequest): void {\n\t\tconst sessionManager = this.deps.getSessionManager();\n\t\tconst existing = getLatestHumanInputSnapshots(sessionManager).find(\n\t\t\t(snapshot) => snapshot.request.workerRequestId === request.workerRequestId,\n\t\t);\n\t\tif (existing) return;\n\t\tconst blockerText = request.blockers\n\t\t\t.slice(0, 4)\n\t\t\t.map((blocker) => blocker.slice(0, 500))\n\t\t\t.join(\"; \");\n\t\tconst question = createHumanInputRequest({\n\t\t\tsource: \"worker\",\n\t\t\tworkerRequestId: request.workerRequestId,\n\t\t\tquestions: [\n\t\t\t\t{\n\t\t\t\t\tid: \"worker_review\",\n\t\t\t\t\theader: \"Worker review\",\n\t\t\t\t\tquestion: `${request.message.slice(0, 1_500)}${blockerText ? ` Blockers: ${blockerText}` : \"\"}`,\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: \"Review now\",\n\t\t\t\t\t\t\tdescription: \"Have the parent inspect the worker claim and evidence before reconciling it.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: \"Keep blocked\",\n\t\t\t\t\t\t\tdescription: \"Leave the worker result blocked and continue without accepting its output.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t\tacceptsImages: false,\n\t\t});\n\t\tbeginHumanInputRequest(sessionManager, question);\n\t\tif (!this.deps.isStreaming()) this.scheduleWorkerInput(question);\n\t}\n\n\tschedulePendingWorkerInputs(): void {\n\t\tfor (const snapshot of getWorkerHumanInputsRequiringDelivery(this.deps.getSessionManager())) {\n\t\t\tthis.scheduleWorkerInput(snapshot);\n\t\t}\n\t}\n\n\tasync resumePending(): Promise<boolean> {\n\t\tif (this.deps.isDisposed() || this.deps.isStreaming()) return false;\n\t\tconst sessionManager = this.deps.getSessionManager();\n\t\tconst pending = getResumableHumanInputSnapshot(sessionManager);\n\t\tconst ui = this.deps.getUIContext();\n\t\tif (!ui) return false;\n\t\tlet resumed = false;\n\n\t\tif (pending?.request.toolCallId) {\n\t\t\tlet snapshot = pending;\n\t\t\tlet imageContents: readonly ImageContent[] = [];\n\t\t\tif (pending.status === \"pending\") {\n\t\t\t\tconst resolved = await resolveHumanInput({\n\t\t\t\t\tsessionManager,\n\t\t\t\t\trequest: {\n\t\t\t\t\t\t...pending.request,\n\t\t\t\t\t\tacceptsImages: this.deps.getModel()?.input.includes(\"image\") ?? false,\n\t\t\t\t\t},\n\t\t\t\t\tpresent: (request, options) => ui.askQuestions(request, options),\n\t\t\t\t\tartifactStore: this.deps.getArtifactStore(),\n\t\t\t\t\tgetImageStore: () => this.deps.getImageStore(),\n\t\t\t\t});\n\t\t\t\tsnapshot = resolved.snapshot;\n\t\t\t\timageContents = resolved.imageContents;\n\t\t\t} else if (pending.status === \"answered\") {\n\t\t\t\tconst imageStore = this.deps.getImageStore();\n\t\t\t\tif (imageStore) {\n\t\t\t\t\tconst referencedText = snapshot.answers\n\t\t\t\t\t\t.flatMap((answer) => [answer.custom ?? \"\", ...(answer.images?.map((image) => image.label) ?? [])])\n\t\t\t\t\t\t.join(\" \");\n\t\t\t\t\timageContents = imageStore.resolveReferences(referencedText);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst answerImageCount = snapshot.answers.reduce((total, answer) => total + (answer.images?.length ?? 0), 0);\n\t\t\tconst modelAcceptsImages = this.deps.getModel()?.input.includes(\"image\") ?? false;\n\t\t\tconst missingImageNotice =\n\t\t\t\tanswerImageCount > imageContents.length\n\t\t\t\t\t? `\\n\\n[${answerImageCount - imageContents.length} attached image(s) could not be restored from durable storage.]`\n\t\t\t\t\t: \"\";\n\t\t\tconst unsupportedImageNotice =\n\t\t\t\timageContents.length > 0 && !modelAcceptsImages\n\t\t\t\t\t? \"\\n\\n[Attached images were retained but not sent because the selected model does not accept image input.]\"\n\t\t\t\t\t: \"\";\n\t\t\tconst toolResult: ToolResultMessage = {\n\t\t\t\trole: \"toolResult\",\n\t\t\t\ttoolCallId: pending.request.toolCallId,\n\t\t\t\ttoolName: pending.request.toolName ?? \"ask_question\",\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: `${formatHumanInputAnswerText(snapshot)}${missingImageNotice}${unsupportedImageNotice}`,\n\t\t\t\t\t},\n\t\t\t\t\t...(modelAcceptsImages ? imageContents : []),\n\t\t\t\t],\n\t\t\t\tdetails: {\n\t\t\t\t\tquestions: snapshot.request.questions,\n\t\t\t\t\tanswers: snapshot.answers,\n\t\t\t\t\tcancelled: snapshot.status === \"cancelled\",\n\t\t\t\t\t...(snapshot.reason ? { reason: snapshot.reason } : {}),\n\t\t\t\t},\n\t\t\t\tisError: false,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t};\n\t\t\tawait this.deps.runAgentPrompt(toolResult);\n\t\t\tresumed = true;\n\t\t}\n\n\t\tfor (const workerInput of getWorkerHumanInputsRequiringDelivery(sessionManager)) {\n\t\t\tif (this.activeRequestIds.has(workerInput.request.requestId)) continue;\n\t\t\tthis.activeRequestIds.add(workerInput.request.requestId);\n\t\t\ttry {\n\t\t\t\tresumed = (await this.resolveWorkerInput(workerInput)) || resumed;\n\t\t\t} finally {\n\t\t\t\tthis.activeRequestIds.delete(workerInput.request.requestId);\n\t\t\t}\n\t\t}\n\t\treturn resumed;\n\t}\n\n\tprivate scheduleWorkerInput(input: HumanInputRequest | HumanInputSnapshot): void {\n\t\tconst snapshot: HumanInputSnapshot =\n\t\t\t\"status\" in input ? input : { request: input, status: \"pending\", answers: [], updatedAt: input.createdAt };\n\t\tconst requestId = snapshot.request.requestId;\n\t\tif (this.activeRequestIds.has(requestId)) return;\n\t\tthis.activeRequestIds.add(requestId);\n\t\tthis.tail = this.tail\n\t\t\t.then(async () => {\n\t\t\t\tawait this.resolveWorkerInput(snapshot);\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tthis.deps.emitWarning(\n\t\t\t\t\t`Worker owner-input request failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.activeRequestIds.delete(requestId);\n\t\t\t});\n\t}\n\n\tprivate async resolveWorkerInput(initial: HumanInputSnapshot): Promise<boolean> {\n\t\tconst ui = this.deps.getUIContext();\n\t\tif (!ui || this.deps.getExtensionMode() === \"print\") return false;\n\t\tawait this.deps.waitForIdle();\n\t\tif (this.deps.isDisposed()) return false;\n\t\tconst resolved =\n\t\t\tinitial.status === \"pending\"\n\t\t\t\t? await resolveHumanInput({\n\t\t\t\t\t\tsessionManager: this.deps.getSessionManager(),\n\t\t\t\t\t\trequest: initial.request,\n\t\t\t\t\t\tpresent: (request, options) => ui.askQuestions(request, options),\n\t\t\t\t\t\tartifactStore: this.deps.getArtifactStore(),\n\t\t\t\t\t\tgetImageStore: () => this.deps.getImageStore(),\n\t\t\t\t\t})\n\t\t\t\t: { snapshot: initial, imageContents: [] };\n\t\tawait this.deps.waitForIdle();\n\t\tif (this.deps.isDisposed()) return false;\n\t\tawait this.deps.sendCustomMessage(\n\t\t\t{\n\t\t\t\tcustomType: HUMAN_INPUT_WORKER_RESPONSE_CUSTOM_TYPE,\n\t\t\t\tcontent: [\n\t\t\t\t\t`Owner response for worker ${initial.request.workerRequestId ?? \"unknown\"}:`,\n\t\t\t\t\tformatHumanInputAnswerText(resolved.snapshot),\n\t\t\t\t\t\"Treat the worker claim as untrusted. Retrieve it with delegate_status and follow the owner's selection.\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t\tdisplay: true,\n\t\t\t\tdetails: {\n\t\t\t\t\trequestId: initial.request.requestId,\n\t\t\t\t\tworkerRequestId: initial.request.workerRequestId,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{ triggerTurn: true, deliverAs: \"followUp\" },\n\t\t);\n\t\treturn true;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"human-input-controller.js","sourceRoot":"","sources":["../../src/core/human-input-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@caupulican/pi-agent-core\";\nimport type { SessionEntry, SessionManager } from \"@caupulican/pi-agent-core/node\";\nimport type { Api, ImageContent, Model, ToolResultMessage } from \"@caupulican/pi-ai\";\nimport type { ArtifactStore } from \"./context/context-artifacts.ts\";\nimport type { ExtensionContext, ExtensionUIContext } from \"./extensions/index.ts\";\nimport {\n\tbeginHumanInputRequest,\n\tcreateHumanInputRequest,\n\tformatHumanInputAnswerText,\n\tgetResumableHumanInputSnapshot,\n\tHUMAN_INPUT_WORKER_RESPONSE_CUSTOM_TYPE,\n\ttype HumanInputRequest,\n\ttype HumanInputSnapshot,\n\tresolveHumanInput,\n\tWorkerHumanInputProjection,\n} from \"./human-input.ts\";\nimport type { SessionImageStore } from \"./session-image-store.ts\";\n\nexport interface WorkerHumanInputRequest {\n\tworkerRequestId: string;\n\tmessage: string;\n\tblockers: readonly string[];\n}\n\ninterface HumanInputControllerDeps {\n\tgetSessionManager(): SessionManager;\n\tgetUIContext(): ExtensionUIContext | undefined;\n\tgetExtensionMode(): ExtensionContext[\"mode\"];\n\twaitForIdle(): Promise<void>;\n\tisDisposed(): boolean;\n\tisStreaming(): boolean;\n\tgetModel(): Model<Api> | undefined;\n\tgetArtifactStore(): ArtifactStore;\n\tgetImageStore(): SessionImageStore | undefined;\n\trunAgentPrompt(messages: AgentMessage | AgentMessage[]): Promise<void>;\n\tsendCustomMessage(\n\t\tmessage: { customType: string; content: string; display: boolean; details?: unknown },\n\t\toptions: { triggerTurn: boolean; deliverAs: \"followUp\" },\n\t): Promise<void>;\n\temitWarning(message: string): void;\n}\n\n/** Owns durable question replay and serialized worker-to-owner question delivery. */\nexport class HumanInputController {\n\tprivate readonly deps: HumanInputControllerDeps;\n\tprivate tail: Promise<void> = Promise.resolve();\n\tprivate readonly activeRequestIds = new Set<string>();\n\tprivate indexedSessionManager: SessionManager | undefined;\n\tprivate indexedLeafId: string | null = null;\n\tprivate workerInputIndexInitialized = false;\n\tprivate readonly workerInputProjection = new WorkerHumanInputProjection();\n\n\tconstructor(deps: HumanInputControllerDeps) {\n\t\tthis.deps = deps;\n\t}\n\n\tqueueWorkerInput(request: WorkerHumanInputRequest): void {\n\t\tconst sessionManager = this.deps.getSessionManager();\n\t\tthis.synchronizeWorkerInputIndex();\n\t\tif (this.workerInputProjection.hasKnownWorkerRequest(request.workerRequestId)) return;\n\t\tconst blockerText = request.blockers\n\t\t\t.slice(0, 4)\n\t\t\t.map((blocker) => blocker.slice(0, 500))\n\t\t\t.join(\"; \");\n\t\tconst question = createHumanInputRequest({\n\t\t\tsource: \"worker\",\n\t\t\tworkerRequestId: request.workerRequestId,\n\t\t\tquestions: [\n\t\t\t\t{\n\t\t\t\t\tid: \"worker_review\",\n\t\t\t\t\theader: \"Worker review\",\n\t\t\t\t\tquestion: `${request.message.slice(0, 1_500)}${blockerText ? ` Blockers: ${blockerText}` : \"\"}`,\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: \"Review now\",\n\t\t\t\t\t\t\tdescription: \"Have the parent inspect the worker claim and evidence before reconciling it.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: \"Keep blocked\",\n\t\t\t\t\t\t\tdescription: \"Leave the worker result blocked and continue without accepting its output.\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t\tacceptsImages: false,\n\t\t});\n\t\tbeginHumanInputRequest(sessionManager, question);\n\t\tthis.synchronizeWorkerInputIndex();\n\t\tif (!this.deps.isStreaming()) this.scheduleWorkerInput(question);\n\t}\n\n\tschedulePendingWorkerInputs(): void {\n\t\tfor (const snapshot of this.getWorkerInputsRequiringDelivery()) {\n\t\t\tthis.scheduleWorkerInput(snapshot);\n\t\t}\n\t}\n\n\t/** True when every terminal lane already has a durable owner question scheduled for delivery. */\n\tworkerInputsWillWakeParent(workerRequestIds: readonly string[]): boolean {\n\t\tif (\n\t\t\tworkerRequestIds.length === 0 ||\n\t\t\tthis.deps.getUIContext() === undefined ||\n\t\t\tthis.deps.getExtensionMode() === \"print\"\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.synchronizeWorkerInputIndex();\n\t\treturn workerRequestIds.every((workerRequestId) => this.workerInputProjection.requiresDelivery(workerRequestId));\n\t}\n\n\tasync resumePending(): Promise<boolean> {\n\t\tif (this.deps.isDisposed() || this.deps.isStreaming()) return false;\n\t\tconst sessionManager = this.deps.getSessionManager();\n\t\tconst pending = getResumableHumanInputSnapshot(sessionManager);\n\t\tconst ui = this.deps.getUIContext();\n\t\tif (!ui) return false;\n\t\tlet resumed = false;\n\n\t\tif (pending?.request.toolCallId) {\n\t\t\tlet snapshot = pending;\n\t\t\tlet imageContents: readonly ImageContent[] = [];\n\t\t\tif (pending.status === \"pending\") {\n\t\t\t\tconst resolved = await resolveHumanInput({\n\t\t\t\t\tsessionManager,\n\t\t\t\t\trequest: {\n\t\t\t\t\t\t...pending.request,\n\t\t\t\t\t\tacceptsImages: this.deps.getModel()?.input.includes(\"image\") ?? false,\n\t\t\t\t\t},\n\t\t\t\t\tpresent: (request, options) => ui.askQuestions(request, options),\n\t\t\t\t\tartifactStore: this.deps.getArtifactStore(),\n\t\t\t\t\tgetImageStore: () => this.deps.getImageStore(),\n\t\t\t\t});\n\t\t\t\tsnapshot = resolved.snapshot;\n\t\t\t\timageContents = resolved.imageContents;\n\t\t\t} else if (pending.status === \"answered\") {\n\t\t\t\tconst imageStore = this.deps.getImageStore();\n\t\t\t\tif (imageStore) {\n\t\t\t\t\tconst referencedText = snapshot.answers\n\t\t\t\t\t\t.flatMap((answer) => [answer.custom ?? \"\", ...(answer.images?.map((image) => image.label) ?? [])])\n\t\t\t\t\t\t.join(\" \");\n\t\t\t\t\timageContents = imageStore.resolveReferences(referencedText);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst answerImageCount = snapshot.answers.reduce((total, answer) => total + (answer.images?.length ?? 0), 0);\n\t\t\tconst modelAcceptsImages = this.deps.getModel()?.input.includes(\"image\") ?? false;\n\t\t\tconst missingImageNotice =\n\t\t\t\tanswerImageCount > imageContents.length\n\t\t\t\t\t? `\\n\\n[${answerImageCount - imageContents.length} attached image(s) could not be restored from durable storage.]`\n\t\t\t\t\t: \"\";\n\t\t\tconst unsupportedImageNotice =\n\t\t\t\timageContents.length > 0 && !modelAcceptsImages\n\t\t\t\t\t? \"\\n\\n[Attached images were retained but not sent because the selected model does not accept image input.]\"\n\t\t\t\t\t: \"\";\n\t\t\tconst toolResult: ToolResultMessage = {\n\t\t\t\trole: \"toolResult\",\n\t\t\t\ttoolCallId: pending.request.toolCallId,\n\t\t\t\ttoolName: pending.request.toolName ?? \"ask_question\",\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: `${formatHumanInputAnswerText(snapshot)}${missingImageNotice}${unsupportedImageNotice}`,\n\t\t\t\t\t},\n\t\t\t\t\t...(modelAcceptsImages ? imageContents : []),\n\t\t\t\t],\n\t\t\t\tdetails: {\n\t\t\t\t\tquestions: snapshot.request.questions,\n\t\t\t\t\tanswers: snapshot.answers,\n\t\t\t\t\tcancelled: snapshot.status === \"cancelled\",\n\t\t\t\t\t...(snapshot.reason ? { reason: snapshot.reason } : {}),\n\t\t\t\t},\n\t\t\t\tisError: false,\n\t\t\t\ttimestamp: Date.now(),\n\t\t\t};\n\t\t\tawait this.deps.runAgentPrompt(toolResult);\n\t\t\tresumed = true;\n\t\t}\n\n\t\tfor (const workerInput of this.getWorkerInputsRequiringDelivery()) {\n\t\t\tif (this.activeRequestIds.has(workerInput.request.requestId)) continue;\n\t\t\tthis.activeRequestIds.add(workerInput.request.requestId);\n\t\t\ttry {\n\t\t\t\tresumed = (await this.resolveWorkerInput(workerInput)) || resumed;\n\t\t\t} finally {\n\t\t\t\tthis.activeRequestIds.delete(workerInput.request.requestId);\n\t\t\t}\n\t\t}\n\t\treturn resumed;\n\t}\n\n\tprivate scheduleWorkerInput(input: HumanInputRequest | HumanInputSnapshot): void {\n\t\tconst snapshot: HumanInputSnapshot =\n\t\t\t\"status\" in input ? input : { request: input, status: \"pending\", answers: [], updatedAt: input.createdAt };\n\t\tconst requestId = snapshot.request.requestId;\n\t\tif (this.activeRequestIds.has(requestId)) return;\n\t\tthis.activeRequestIds.add(requestId);\n\t\tthis.tail = this.tail\n\t\t\t.then(async () => {\n\t\t\t\tawait this.resolveWorkerInput(snapshot);\n\t\t\t})\n\t\t\t.catch((error: unknown) => {\n\t\t\t\tthis.deps.emitWarning(\n\t\t\t\t\t`Worker owner-input request failed: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t\t);\n\t\t\t})\n\t\t\t.finally(() => {\n\t\t\t\tthis.activeRequestIds.delete(requestId);\n\t\t\t});\n\t}\n\n\tprivate getWorkerInputsRequiringDelivery(): HumanInputSnapshot[] {\n\t\tthis.synchronizeWorkerInputIndex();\n\t\treturn this.workerInputProjection.getRequiringDelivery();\n\t}\n\n\tprivate synchronizeWorkerInputIndex(): void {\n\t\tconst sessionManager = this.deps.getSessionManager();\n\t\tconst currentLeafId = sessionManager.getLeafId();\n\t\tif (!this.workerInputIndexInitialized || this.indexedSessionManager !== sessionManager) {\n\t\t\tthis.rebuildWorkerInputIndex(sessionManager);\n\t\t\treturn;\n\t\t}\n\t\tif (currentLeafId === this.indexedLeafId) return;\n\n\t\tconst appendedEntries: SessionEntry[] = [];\n\t\tlet cursor = currentLeafId;\n\t\twhile (cursor !== null && cursor !== this.indexedLeafId) {\n\t\t\tconst entry = sessionManager.getEntry(cursor);\n\t\t\tif (!entry) {\n\t\t\t\tthis.rebuildWorkerInputIndex(sessionManager);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tappendedEntries.push(entry);\n\t\t\tcursor = entry.parentId;\n\t\t}\n\t\tif (cursor !== this.indexedLeafId) {\n\t\t\tthis.rebuildWorkerInputIndex(sessionManager);\n\t\t\treturn;\n\t\t}\n\t\tfor (let index = appendedEntries.length - 1; index >= 0; index--) {\n\t\t\tthis.workerInputProjection.apply(appendedEntries[index]!);\n\t\t}\n\t\tthis.indexedLeafId = currentLeafId;\n\t}\n\n\tprivate rebuildWorkerInputIndex(sessionManager: SessionManager): void {\n\t\tthis.workerInputProjection.reset(sessionManager.getBranch());\n\t\tthis.indexedSessionManager = sessionManager;\n\t\tthis.indexedLeafId = sessionManager.getLeafId();\n\t\tthis.workerInputIndexInitialized = true;\n\t}\n\n\tprivate async resolveWorkerInput(initial: HumanInputSnapshot): Promise<boolean> {\n\t\tconst ui = this.deps.getUIContext();\n\t\tif (!ui || this.deps.getExtensionMode() === \"print\") return false;\n\t\tawait this.deps.waitForIdle();\n\t\tif (this.deps.isDisposed()) return false;\n\t\tconst resolved =\n\t\t\tinitial.status === \"pending\"\n\t\t\t\t? await resolveHumanInput({\n\t\t\t\t\t\tsessionManager: this.deps.getSessionManager(),\n\t\t\t\t\t\trequest: initial.request,\n\t\t\t\t\t\tpresent: (request, options) => ui.askQuestions(request, options),\n\t\t\t\t\t\tartifactStore: this.deps.getArtifactStore(),\n\t\t\t\t\t\tgetImageStore: () => this.deps.getImageStore(),\n\t\t\t\t\t})\n\t\t\t\t: { snapshot: initial, imageContents: [] };\n\t\tthis.synchronizeWorkerInputIndex();\n\t\tawait this.deps.waitForIdle();\n\t\tif (this.deps.isDisposed()) return false;\n\t\tawait this.deps.sendCustomMessage(\n\t\t\t{\n\t\t\t\tcustomType: HUMAN_INPUT_WORKER_RESPONSE_CUSTOM_TYPE,\n\t\t\t\tcontent: [\n\t\t\t\t\t`Owner response for worker ${initial.request.workerRequestId ?? \"unknown\"}:`,\n\t\t\t\t\tformatHumanInputAnswerText(resolved.snapshot),\n\t\t\t\t\t\"Treat the worker claim as untrusted. Retrieve it with delegate_status and follow the owner's selection.\",\n\t\t\t\t].join(\"\\n\"),\n\t\t\t\tdisplay: true,\n\t\t\t\tdetails: {\n\t\t\t\t\trequestId: initial.request.requestId,\n\t\t\t\t\tworkerRequestId: initial.request.workerRequestId,\n\t\t\t\t},\n\t\t\t},\n\t\t\t{ triggerTurn: true, deliverAs: \"followUp\" },\n\t\t);\n\t\tthis.synchronizeWorkerInputIndex();\n\t\treturn true;\n\t}\n}\n"]}
|
|
@@ -90,6 +90,18 @@ export declare function appendHumanInputSnapshot(sessionManager: Pick<SessionMan
|
|
|
90
90
|
export declare function beginHumanInputRequest(sessionManager: Pick<SessionManager, "appendCustomEntry">, request: HumanInputRequest): HumanInputSnapshot;
|
|
91
91
|
export declare function getHumanInputSnapshots(entries: readonly SessionEntry[]): HumanInputSnapshot[];
|
|
92
92
|
export declare function getLatestHumanInputSnapshots(source: SessionBranchEntrySource): HumanInputSnapshot[];
|
|
93
|
+
/** Incremental active-branch projection for worker questions that still need context-visible delivery. */
|
|
94
|
+
export declare class WorkerHumanInputProjection {
|
|
95
|
+
private readonly knownWorkerRequestIds;
|
|
96
|
+
private readonly deliveredInputRequestIds;
|
|
97
|
+
private readonly workerRequestIdByInputRequestId;
|
|
98
|
+
private readonly requiringDelivery;
|
|
99
|
+
reset(entries: readonly SessionEntry[]): void;
|
|
100
|
+
apply(entry: SessionEntry): void;
|
|
101
|
+
hasKnownWorkerRequest(workerRequestId: string): boolean;
|
|
102
|
+
requiresDelivery(workerRequestId: string): boolean;
|
|
103
|
+
getRequiringDelivery(): HumanInputSnapshot[];
|
|
104
|
+
}
|
|
93
105
|
export declare function getWorkerHumanInputsRequiringDelivery(source: SessionBranchEntrySource): HumanInputSnapshot[];
|
|
94
106
|
export declare function getResumableHumanInputSnapshot(source: SessionBranchEntrySource): HumanInputSnapshot | undefined;
|
|
95
107
|
export declare function resolveHumanInput(options: ResolveHumanInputOptions): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"human-input.d.ts","sourceRoot":"","sources":["../../src/core/human-input.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"human-input.d.ts","sourceRoot":"","sources":["../../src/core/human-input.ts"],"names":[],"mappings":"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"}
|
package/dist/core/human-input.js
CHANGED
|
@@ -243,12 +243,15 @@ export function beginHumanInputRequest(sessionManager, request) {
|
|
|
243
243
|
appendHumanInputSnapshot(sessionManager, snapshot);
|
|
244
244
|
return snapshot;
|
|
245
245
|
}
|
|
246
|
+
function decodeHumanInputSnapshotEntry(entry) {
|
|
247
|
+
if (entry.type !== "custom" || entry.customType !== HUMAN_INPUT_CUSTOM_TYPE)
|
|
248
|
+
return undefined;
|
|
249
|
+
return decodeSnapshot(entry.data);
|
|
250
|
+
}
|
|
246
251
|
export function getHumanInputSnapshots(entries) {
|
|
247
252
|
const snapshots = [];
|
|
248
253
|
for (const entry of entries) {
|
|
249
|
-
|
|
250
|
-
continue;
|
|
251
|
-
const snapshot = decodeSnapshot(entry.data);
|
|
254
|
+
const snapshot = decodeHumanInputSnapshotEntry(entry);
|
|
252
255
|
if (snapshot)
|
|
253
256
|
snapshots.push(snapshot);
|
|
254
257
|
}
|
|
@@ -261,20 +264,64 @@ export function getLatestHumanInputSnapshots(source) {
|
|
|
261
264
|
}
|
|
262
265
|
return [...latest.values()];
|
|
263
266
|
}
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
+
/** Incremental active-branch projection for worker questions that still need context-visible delivery. */
|
|
268
|
+
export class WorkerHumanInputProjection {
|
|
269
|
+
constructor() {
|
|
270
|
+
this.knownWorkerRequestIds = new Set();
|
|
271
|
+
this.deliveredInputRequestIds = new Set();
|
|
272
|
+
this.workerRequestIdByInputRequestId = new Map();
|
|
273
|
+
this.requiringDelivery = new Map();
|
|
274
|
+
}
|
|
275
|
+
reset(entries) {
|
|
276
|
+
this.knownWorkerRequestIds.clear();
|
|
277
|
+
this.deliveredInputRequestIds.clear();
|
|
278
|
+
this.workerRequestIdByInputRequestId.clear();
|
|
279
|
+
this.requiringDelivery.clear();
|
|
280
|
+
for (const entry of entries)
|
|
281
|
+
this.apply(entry);
|
|
282
|
+
}
|
|
283
|
+
apply(entry) {
|
|
284
|
+
const snapshot = decodeHumanInputSnapshotEntry(entry);
|
|
285
|
+
if (snapshot) {
|
|
286
|
+
const workerRequestId = snapshot.request.workerRequestId;
|
|
287
|
+
if (snapshot.request.source === "worker" && workerRequestId !== undefined) {
|
|
288
|
+
const inputRequestId = snapshot.request.requestId;
|
|
289
|
+
this.knownWorkerRequestIds.add(workerRequestId);
|
|
290
|
+
if (!this.deliveredInputRequestIds.has(inputRequestId)) {
|
|
291
|
+
this.workerRequestIdByInputRequestId.set(inputRequestId, workerRequestId);
|
|
292
|
+
this.requiringDelivery.set(workerRequestId, snapshot);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
267
296
|
if (entry.type !== "custom_message" ||
|
|
268
297
|
entry.customType !== HUMAN_INPUT_WORKER_RESPONSE_CUSTOM_TYPE ||
|
|
269
298
|
!isPlainRecord(entry.details) ||
|
|
270
299
|
typeof entry.details.requestId !== "string") {
|
|
271
|
-
return
|
|
300
|
+
return;
|
|
272
301
|
}
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
302
|
+
const inputRequestId = entry.details.requestId;
|
|
303
|
+
this.deliveredInputRequestIds.add(inputRequestId);
|
|
304
|
+
const workerRequestId = this.workerRequestIdByInputRequestId.get(inputRequestId);
|
|
305
|
+
if (workerRequestId !== undefined &&
|
|
306
|
+
this.requiringDelivery.get(workerRequestId)?.request.requestId === inputRequestId) {
|
|
307
|
+
this.requiringDelivery.delete(workerRequestId);
|
|
308
|
+
}
|
|
309
|
+
this.workerRequestIdByInputRequestId.delete(inputRequestId);
|
|
310
|
+
}
|
|
311
|
+
hasKnownWorkerRequest(workerRequestId) {
|
|
312
|
+
return this.knownWorkerRequestIds.has(workerRequestId);
|
|
313
|
+
}
|
|
314
|
+
requiresDelivery(workerRequestId) {
|
|
315
|
+
return this.requiringDelivery.has(workerRequestId);
|
|
316
|
+
}
|
|
317
|
+
getRequiringDelivery() {
|
|
318
|
+
return [...this.requiringDelivery.values()].sort((left, right) => left.updatedAt.localeCompare(right.updatedAt));
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
export function getWorkerHumanInputsRequiringDelivery(source) {
|
|
322
|
+
const projection = new WorkerHumanInputProjection();
|
|
323
|
+
projection.reset(getActiveSessionBranchEntries(source));
|
|
324
|
+
return projection.getRequiringDelivery();
|
|
278
325
|
}
|
|
279
326
|
export function getResumableHumanInputSnapshot(source) {
|
|
280
327
|
const entries = getActiveSessionBranchEntries(source);
|