@qduc/term2 0.22.0 → 0.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts +1 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +18 -10
- package/dist/agent.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +19 -1
- package/dist/app.js.map +1 -1
- package/dist/cli.js +26 -0
- package/dist/cli.js.map +1 -1
- package/dist/components/common/MenuContainer.d.ts +10 -0
- package/dist/components/common/MenuContainer.d.ts.map +1 -1
- package/dist/components/common/MenuContainer.js +53 -29
- package/dist/components/common/MenuContainer.js.map +1 -1
- package/dist/components/input/ApplicationInputSurface.js +1 -1
- package/dist/components/input/ApplicationInputSurface.js.map +1 -1
- package/dist/components/input/ModelMenuSession.d.ts.map +1 -1
- package/dist/components/input/ModelMenuSession.js +7 -21
- package/dist/components/input/ModelMenuSession.js.map +1 -1
- package/dist/components/input/SettingsMenuSession.d.ts.map +1 -1
- package/dist/components/input/SettingsMenuSession.js +8 -5
- package/dist/components/input/SettingsMenuSession.js.map +1 -1
- package/dist/components/input/SubagentPoolMenuSession.d.ts +9 -0
- package/dist/components/input/SubagentPoolMenuSession.d.ts.map +1 -0
- package/dist/components/input/{MentorPoolMenuSession.js → SubagentPoolMenuSession.js} +21 -17
- package/dist/components/input/SubagentPoolMenuSession.js.map +1 -0
- package/dist/components/input/menu-controller.d.ts.map +1 -1
- package/dist/components/input/menu-controller.js +4 -3
- package/dist/components/input/menu-controller.js.map +1 -1
- package/dist/components/input/menu-registry.js +2 -2
- package/dist/components/input/menu-registry.js.map +1 -1
- package/dist/components/input/menu-types.d.ts +5 -1
- package/dist/components/input/menu-types.d.ts.map +1 -1
- package/dist/components/input/triggers.d.ts.map +1 -1
- package/dist/components/input/triggers.js +10 -7
- package/dist/components/input/triggers.js.map +1 -1
- package/dist/components/layout/Banner.d.ts.map +1 -1
- package/dist/components/layout/Banner.js +4 -1
- package/dist/components/layout/Banner.js.map +1 -1
- package/dist/components/layout/StatusBar.d.ts.map +1 -1
- package/dist/components/layout/StatusBar.js +10 -17
- package/dist/components/layout/StatusBar.js.map +1 -1
- package/dist/components/menu/ModelSelectionMenu.js +2 -2
- package/dist/components/menu/ModelSelectionMenu.js.map +1 -1
- package/dist/components/menu/ProfileSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ProfileSelectionMenu.js +12 -12
- package/dist/components/menu/ProfileSelectionMenu.js.map +1 -1
- package/dist/components/menu/ResumeSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/ResumeSelectionMenu.js +10 -10
- package/dist/components/menu/ResumeSelectionMenu.js.map +1 -1
- package/dist/components/menu/SettingsSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SettingsSelectionMenu.js +3 -1
- package/dist/components/menu/SettingsSelectionMenu.js.map +1 -1
- package/dist/components/menu/SkillSelectionMenu.d.ts.map +1 -1
- package/dist/components/menu/SkillSelectionMenu.js +10 -10
- package/dist/components/menu/SkillSelectionMenu.js.map +1 -1
- package/dist/components/menu/StandaloneModelPickerApp.d.ts +3 -3
- package/dist/components/menu/StandaloneModelPickerApp.d.ts.map +1 -1
- package/dist/components/menu/StandaloneModelPickerApp.js +9 -10
- package/dist/components/menu/StandaloneModelPickerApp.js.map +1 -1
- package/dist/components/menu/SubagentPoolSelectionMenu.d.ts +19 -0
- package/dist/components/menu/SubagentPoolSelectionMenu.d.ts.map +1 -0
- package/dist/components/menu/{MentorPoolSelectionMenu.js → SubagentPoolSelectionMenu.js} +29 -15
- package/dist/components/menu/SubagentPoolSelectionMenu.js.map +1 -0
- package/dist/components/message/MessageList.d.ts +2 -1
- package/dist/components/message/MessageList.d.ts.map +1 -1
- package/dist/components/message/MessageList.js +12 -38
- package/dist/components/message/MessageList.js.map +1 -1
- package/dist/context/InputContext.d.ts +1 -1
- package/dist/context/InputContext.d.ts.map +1 -1
- package/dist/context/InputContext.js +2 -2
- package/dist/context/InputContext.js.map +1 -1
- package/dist/contracts/conversation-items.d.ts +4 -0
- package/dist/contracts/conversation-items.d.ts.map +1 -1
- package/dist/contracts/provider-input.d.ts +2 -0
- package/dist/contracts/provider-input.d.ts.map +1 -1
- package/dist/contracts/provider-input.js.map +1 -1
- package/dist/gateway/assertion.d.ts +1 -1
- package/dist/gateway/assertion.d.ts.map +1 -1
- package/dist/gateway/contracts.d.ts +13 -3
- package/dist/gateway/contracts.d.ts.map +1 -1
- package/dist/gateway/contracts.js +56 -0
- package/dist/gateway/contracts.js.map +1 -1
- package/dist/gateway/gateway.d.ts +40 -1
- package/dist/gateway/gateway.d.ts.map +1 -1
- package/dist/gateway/gateway.js +1319 -76
- package/dist/gateway/gateway.js.map +1 -1
- package/dist/gateway/persistence/admission-persistence.d.ts +3 -3
- package/dist/gateway/persistence/admission-persistence.d.ts.map +1 -1
- package/dist/gateway/persistence/admission-persistence.js +25 -11
- package/dist/gateway/persistence/admission-persistence.js.map +1 -1
- package/dist/gateway/persistence/contracts.d.ts +5 -3
- package/dist/gateway/persistence/contracts.d.ts.map +1 -1
- package/dist/gateway/persistence/contracts.js +13 -0
- package/dist/gateway/persistence/contracts.js.map +1 -1
- package/dist/gateway/persistence/interaction-checkpoint.d.ts +5 -0
- package/dist/gateway/persistence/interaction-checkpoint.d.ts.map +1 -1
- package/dist/gateway/persistence/interaction-checkpoint.js +22 -0
- package/dist/gateway/persistence/interaction-checkpoint.js.map +1 -1
- package/dist/gateway/persistence/projection.d.ts.map +1 -1
- package/dist/gateway/persistence/projection.js +4 -1
- package/dist/gateway/persistence/projection.js.map +1 -1
- package/dist/gateway/persistence/session-index.d.ts +1 -1
- package/dist/gateway/persistence/session-index.d.ts.map +1 -1
- package/dist/gateway/persistence/session-index.js +2 -2
- package/dist/gateway/persistence/session-index.js.map +1 -1
- package/dist/gateway/persistence/session-snapshot.d.ts +32 -0
- package/dist/gateway/persistence/session-snapshot.d.ts.map +1 -0
- package/dist/gateway/persistence/session-snapshot.js +50 -0
- package/dist/gateway/persistence/session-snapshot.js.map +1 -0
- package/dist/gateway/runtime-factory.d.ts +37 -1
- package/dist/gateway/runtime-factory.d.ts.map +1 -1
- package/dist/gateway/runtime-factory.js +155 -24
- package/dist/gateway/runtime-factory.js.map +1 -1
- package/dist/gateway/safe-log.d.ts +1 -1
- package/dist/gateway/safe-log.d.ts.map +1 -1
- package/dist/gateway/safe-log.js +5 -46
- package/dist/gateway/safe-log.js.map +1 -1
- package/dist/gateway/serve-args.d.ts +53 -0
- package/dist/gateway/serve-args.d.ts.map +1 -0
- package/dist/gateway/serve-args.js +172 -0
- package/dist/gateway/serve-args.js.map +1 -0
- package/dist/gateway/serve.d.ts +79 -0
- package/dist/gateway/serve.d.ts.map +1 -0
- package/dist/gateway/serve.js +375 -0
- package/dist/gateway/serve.js.map +1 -0
- package/dist/gateway/server-session.d.ts +9 -0
- package/dist/gateway/server-session.d.ts.map +1 -1
- package/dist/gateway/server-session.js +142 -26
- package/dist/gateway/server-session.js.map +1 -1
- package/dist/gateway/server.d.ts.map +1 -1
- package/dist/gateway/server.js +13 -2
- package/dist/gateway/server.js.map +1 -1
- package/dist/hooks/use-slash-commands.d.ts.map +1 -1
- package/dist/hooks/use-slash-commands.js +19 -13
- package/dist/hooks/use-slash-commands.js.map +1 -1
- package/dist/hooks/use-subagent-pool-selection.d.ts +115 -0
- package/dist/hooks/use-subagent-pool-selection.d.ts.map +1 -0
- package/dist/hooks/{use-mentor-pool-selection.js → use-subagent-pool-selection.js} +168 -100
- package/dist/hooks/use-subagent-pool-selection.js.map +1 -0
- package/dist/lib/agent-client.d.ts +3 -0
- package/dist/lib/agent-client.d.ts.map +1 -1
- package/dist/lib/agent-client.js +7 -0
- package/dist/lib/agent-client.js.map +1 -1
- package/dist/lib/agent-configuration.d.ts +1 -0
- package/dist/lib/agent-configuration.d.ts.map +1 -1
- package/dist/lib/agent-configuration.js +3 -0
- package/dist/lib/agent-configuration.js.map +1 -1
- package/dist/lib/agent-factory.d.ts +2 -0
- package/dist/lib/agent-factory.d.ts.map +1 -1
- package/dist/lib/agent-factory.js +5 -0
- package/dist/lib/agent-factory.js.map +1 -1
- package/dist/lib/subagent-bridge.d.ts +5 -0
- package/dist/lib/subagent-bridge.d.ts.map +1 -1
- package/dist/lib/subagent-bridge.js +5 -0
- package/dist/lib/subagent-bridge.js.map +1 -1
- package/dist/lib/tool-selection-policy.d.ts +2 -0
- package/dist/lib/tool-selection-policy.d.ts.map +1 -1
- package/dist/lib/tool-selection-policy.js +6 -1
- package/dist/lib/tool-selection-policy.js.map +1 -1
- package/dist/prompts/explorer-delegation-contract.test.ts +1 -1
- package/dist/prompts/prompt-constructor.d.ts.map +1 -1
- package/dist/prompts/prompt-constructor.js +1 -0
- package/dist/prompts/prompt-constructor.js.map +1 -1
- package/dist/prompts/prompt-constructor.test.ts +3 -0
- package/dist/prompts/prompt-constructor.ts +1 -0
- package/dist/prompts/prompt-profiles.d.ts.map +1 -1
- package/dist/prompts/prompt-profiles.js +3 -2
- package/dist/prompts/prompt-profiles.js.map +1 -1
- package/dist/prompts/prompt-profiles.ts +4 -2
- package/dist/prompts/subagent-delegation.d.ts +2 -1
- package/dist/prompts/subagent-delegation.d.ts.map +1 -1
- package/dist/prompts/subagent-delegation.js +10 -5
- package/dist/prompts/subagent-delegation.js.map +1 -1
- package/dist/prompts/subagent-delegation.test.ts +10 -3
- package/dist/prompts/subagent-delegation.ts +16 -4
- package/dist/prompts/subagents/librarian.md +26 -21
- package/dist/prompts/subagents/reviewer.md +33 -0
- package/dist/services/agent-runtime/application-run-loop.d.ts.map +1 -1
- package/dist/services/agent-runtime/application-run-loop.js +10 -5
- package/dist/services/agent-runtime/application-run-loop.js.map +1 -1
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts +9 -0
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.d.ts.map +1 -1
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.js +6 -0
- package/dist/services/agent-runtime/context-compaction/local-context-compactor.js.map +1 -1
- package/dist/services/agent-runtime/model-resolver.d.ts +6 -0
- package/dist/services/agent-runtime/model-resolver.d.ts.map +1 -1
- package/dist/services/agent-runtime/model-resolver.js +18 -26
- package/dist/services/agent-runtime/model-resolver.js.map +1 -1
- package/dist/services/approval/non-interactive-approval-policy.d.ts.map +1 -1
- package/dist/services/approval/non-interactive-approval-policy.js +2 -1
- package/dist/services/approval/non-interactive-approval-policy.js.map +1 -1
- package/dist/services/approval/shell-auto-approval-evaluator.js +2 -2
- package/dist/services/approval/shell-auto-approval-evaluator.js.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.d.ts.map +1 -1
- package/dist/services/conversation/conversation-orchestrator.js +42 -22
- package/dist/services/conversation/conversation-orchestrator.js.map +1 -1
- package/dist/services/conversation/conversation-service.d.ts +28 -0
- package/dist/services/conversation/conversation-service.d.ts.map +1 -1
- package/dist/services/conversation/conversation-service.js +95 -27
- package/dist/services/conversation/conversation-service.js.map +1 -1
- package/dist/services/conversation/run-item-normalizer.d.ts.map +1 -1
- package/dist/services/conversation/run-item-normalizer.js +3 -0
- package/dist/services/conversation/run-item-normalizer.js.map +1 -1
- package/dist/services/conversation/session-browser.d.ts +5 -0
- package/dist/services/conversation/session-browser.d.ts.map +1 -1
- package/dist/services/conversation/session-browser.js +94 -31
- package/dist/services/conversation/session-browser.js.map +1 -1
- package/dist/services/conversation/session-index/session-index-database.d.ts +1 -0
- package/dist/services/conversation/session-index/session-index-database.d.ts.map +1 -1
- package/dist/services/conversation/session-index/session-index-database.js +6 -4
- package/dist/services/conversation/session-index/session-index-database.js.map +1 -1
- package/dist/services/conversation/session-index/session-index-schema.d.ts +1 -1
- package/dist/services/conversation/session-index/session-index-schema.d.ts.map +1 -1
- package/dist/services/conversation/session-index/session-index-schema.js +2 -1
- package/dist/services/conversation/session-index/session-index-schema.js.map +1 -1
- package/dist/services/conversation-agent-client.d.ts +3 -0
- package/dist/services/conversation-agent-client.d.ts.map +1 -1
- package/dist/services/memory/memory-capabilities.d.ts.map +1 -1
- package/dist/services/memory/memory-capabilities.js +2 -5
- package/dist/services/memory/memory-capabilities.js.map +1 -1
- package/dist/services/models/model-picker-host.d.ts +4 -4
- package/dist/services/models/model-picker-host.d.ts.map +1 -1
- package/dist/services/models/model-picker-host.js +9 -6
- package/dist/services/models/model-picker-host.js.map +1 -1
- package/dist/services/plan-mode-interceptor.js +2 -2
- package/dist/services/plan-mode-interceptor.js.map +1 -1
- package/dist/services/sandboxed-code-host/host-types.d.ts +12 -1
- package/dist/services/sandboxed-code-host/host-types.d.ts.map +1 -1
- package/dist/services/sandboxed-code-host/host-types.js.map +1 -1
- package/dist/services/sandboxed-code-host/host-worker.d.ts.map +1 -1
- package/dist/services/sandboxed-code-host/host-worker.js +146 -31
- package/dist/services/sandboxed-code-host/host-worker.js.map +1 -1
- package/dist/services/sandboxed-code-host/sandbox.d.ts +6 -1
- package/dist/services/sandboxed-code-host/sandbox.d.ts.map +1 -1
- package/dist/services/sandboxed-code-host/sandbox.js +5 -0
- package/dist/services/sandboxed-code-host/sandbox.js.map +1 -1
- package/dist/services/sandboxed-code-host/sandboxed-code-host.d.ts +3 -3
- package/dist/services/sandboxed-code-host/sandboxed-code-host.d.ts.map +1 -1
- package/dist/services/sandboxed-code-host/sandboxed-code-host.js +173 -22
- package/dist/services/sandboxed-code-host/sandboxed-code-host.js.map +1 -1
- package/dist/services/session/session-access-state.d.ts +5 -1
- package/dist/services/session/session-access-state.d.ts.map +1 -1
- package/dist/services/session/session-access-state.js +8 -1
- package/dist/services/session/session-access-state.js.map +1 -1
- package/dist/services/session/session-client-factory.d.ts +1 -0
- package/dist/services/session/session-client-factory.d.ts.map +1 -1
- package/dist/services/session/session-client-factory.js +1 -1
- package/dist/services/session/session-client-factory.js.map +1 -1
- package/dist/services/session/session-composition.d.ts +22 -4
- package/dist/services/session/session-composition.d.ts.map +1 -1
- package/dist/services/session/session-composition.js +9 -5
- package/dist/services/session/session-composition.js.map +1 -1
- package/dist/services/settings/ancillary-settings-migration.d.ts.map +1 -1
- package/dist/services/settings/ancillary-settings-migration.js +8 -1
- package/dist/services/settings/ancillary-settings-migration.js.map +1 -1
- package/dist/services/settings/settings-schema.d.ts +12 -40
- package/dist/services/settings/settings-schema.d.ts.map +1 -1
- package/dist/services/settings/settings-schema.js +27 -53
- package/dist/services/settings/settings-schema.js.map +1 -1
- package/dist/services/settings/settings-sources.d.ts +0 -3
- package/dist/services/settings/settings-sources.d.ts.map +1 -1
- package/dist/services/settings/settings-sources.js +0 -3
- package/dist/services/settings/settings-sources.js.map +1 -1
- package/dist/services/settings/settings-ui-metadata.d.ts.map +1 -1
- package/dist/services/settings/settings-ui-metadata.js +3 -3
- package/dist/services/settings/settings-ui-metadata.js.map +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.d.ts.map +1 -1
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js +5 -8
- package/dist/services/settings/test-helpers/settings-consumer-inventory.js.map +1 -1
- package/dist/services/subagents/nested-runner.d.ts +3 -0
- package/dist/services/subagents/nested-runner.d.ts.map +1 -1
- package/dist/services/subagents/nested-runner.js +31 -4
- package/dist/services/subagents/nested-runner.js.map +1 -1
- package/dist/services/subagents/role-loader.d.ts.map +1 -1
- package/dist/services/subagents/role-loader.js +7 -12
- package/dist/services/subagents/role-loader.js.map +1 -1
- package/dist/services/subagents/runtime.d.ts +3 -0
- package/dist/services/subagents/runtime.d.ts.map +1 -1
- package/dist/services/subagents/runtime.js +35 -3
- package/dist/services/subagents/runtime.js.map +1 -1
- package/dist/services/subagents/subagent-async-registry.d.ts +10 -1
- package/dist/services/subagents/subagent-async-registry.d.ts.map +1 -1
- package/dist/services/subagents/subagent-async-registry.js +21 -4
- package/dist/services/subagents/subagent-async-registry.js.map +1 -1
- package/dist/services/subagents/subagent-manager.d.ts +3 -0
- package/dist/services/subagents/subagent-manager.d.ts.map +1 -1
- package/dist/services/subagents/subagent-manager.js.map +1 -1
- package/dist/services/subagents/subagent-pool-config.d.ts +39 -0
- package/dist/services/subagents/subagent-pool-config.d.ts.map +1 -0
- package/dist/services/subagents/subagent-pool-config.js +84 -0
- package/dist/services/subagents/subagent-pool-config.js.map +1 -0
- package/dist/services/subagents/subagent-role-pool-selector.d.ts +29 -0
- package/dist/services/subagents/subagent-role-pool-selector.d.ts.map +1 -0
- package/dist/services/subagents/subagent-role-pool-selector.js +56 -0
- package/dist/services/subagents/subagent-role-pool-selector.js.map +1 -0
- package/dist/services/subagents/tool-policy.d.ts +13 -0
- package/dist/services/subagents/tool-policy.d.ts.map +1 -1
- package/dist/services/subagents/tool-policy.js +36 -4
- package/dist/services/subagents/tool-policy.js.map +1 -1
- package/dist/services/subagents/types.d.ts +1 -1
- package/dist/services/subagents/types.d.ts.map +1 -1
- package/dist/services/subagents/types.js +1 -1
- package/dist/services/subagents/types.js.map +1 -1
- package/dist/test-helpers/outside-sandbox-temp-dir.d.ts +2 -0
- package/dist/test-helpers/outside-sandbox-temp-dir.d.ts.map +1 -0
- package/dist/test-helpers/outside-sandbox-temp-dir.js +38 -0
- package/dist/test-helpers/outside-sandbox-temp-dir.js.map +1 -0
- package/dist/tools/agent/configure-task-check-in.d.ts +2 -0
- package/dist/tools/agent/configure-task-check-in.d.ts.map +1 -1
- package/dist/tools/agent/configure-task-check-in.js +3 -0
- package/dist/tools/agent/configure-task-check-in.js.map +1 -1
- package/dist/tools/agent/run-explorer.d.ts +6 -0
- package/dist/tools/agent/run-explorer.d.ts.map +1 -0
- package/dist/tools/agent/run-explorer.js +58 -0
- package/dist/tools/agent/run-explorer.js.map +1 -0
- package/dist/tools/agent/run-subagent-async.d.ts +2 -0
- package/dist/tools/agent/run-subagent-async.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent-async.js +3 -3
- package/dist/tools/agent/run-subagent-async.js.map +1 -1
- package/dist/tools/agent/run-subagent.d.ts +2 -2
- package/dist/tools/agent/run-subagent.d.ts.map +1 -1
- package/dist/tools/agent/run-subagent.js +8 -6
- package/dist/tools/agent/run-subagent.js.map +1 -1
- package/dist/tools/file/apply-patch.d.ts.map +1 -1
- package/dist/tools/file/apply-patch.js +7 -2
- package/dist/tools/file/apply-patch.js.map +1 -1
- package/dist/tools/file/create-file.d.ts.map +1 -1
- package/dist/tools/file/create-file.js +4 -0
- package/dist/tools/file/create-file.js.map +1 -1
- package/dist/tools/file/edit-healing.d.ts.map +1 -1
- package/dist/tools/file/edit-healing.js +1 -4
- package/dist/tools/file/edit-healing.js.map +1 -1
- package/dist/tools/file/glob.d.ts.map +1 -1
- package/dist/tools/file/glob.js +6 -0
- package/dist/tools/file/glob.js.map +1 -1
- package/dist/tools/file/patch-healing.d.ts.map +1 -1
- package/dist/tools/file/patch-healing.js +1 -4
- package/dist/tools/file/patch-healing.js.map +1 -1
- package/dist/tools/file/search-replace.d.ts.map +1 -1
- package/dist/tools/file/search-replace.js +7 -5
- package/dist/tools/file/search-replace.js.map +1 -1
- package/dist/tools/format-helpers.d.ts +5 -0
- package/dist/tools/format-helpers.d.ts.map +1 -1
- package/dist/tools/format-helpers.js.map +1 -1
- package/dist/tools/memory/memory-tools.d.ts +0 -1
- package/dist/tools/memory/memory-tools.d.ts.map +1 -1
- package/dist/tools/memory/memory-tools.js +1 -116
- package/dist/tools/memory/memory-tools.js.map +1 -1
- package/dist/tools/scripted-return-contract.d.ts +24 -0
- package/dist/tools/scripted-return-contract.d.ts.map +1 -0
- package/dist/tools/scripted-return-contract.js +36 -0
- package/dist/tools/scripted-return-contract.js.map +1 -0
- package/dist/tools/session-browser/session-browser-tools.d.ts.map +1 -1
- package/dist/tools/session-browser/session-browser-tools.js +21 -8
- package/dist/tools/session-browser/session-browser-tools.js.map +1 -1
- package/dist/tools/system/run-code/index.d.ts +3 -0
- package/dist/tools/system/run-code/index.d.ts.map +1 -1
- package/dist/tools/system/run-code/index.js +3 -0
- package/dist/tools/system/run-code/index.js.map +1 -1
- package/dist/tools/system/run-code/run-code-execution.d.ts +56 -0
- package/dist/tools/system/run-code/run-code-execution.d.ts.map +1 -0
- package/dist/tools/system/run-code/run-code-execution.js +68 -0
- package/dist/tools/system/run-code/run-code-execution.js.map +1 -0
- package/dist/tools/system/run-code/run-code-runtime-contract.d.ts +20 -0
- package/dist/tools/system/run-code/run-code-runtime-contract.d.ts.map +1 -0
- package/dist/tools/system/run-code/run-code-runtime-contract.js +2 -0
- package/dist/tools/system/run-code/run-code-runtime-contract.js.map +1 -0
- package/dist/tools/system/run-code/run-code-runtime.d.ts +99 -0
- package/dist/tools/system/run-code/run-code-runtime.d.ts.map +1 -0
- package/dist/tools/system/run-code/run-code-runtime.js +719 -0
- package/dist/tools/system/run-code/run-code-runtime.js.map +1 -0
- package/dist/tools/system/run-code/run-code-telemetry.d.ts +12 -10
- package/dist/tools/system/run-code/run-code-telemetry.d.ts.map +1 -1
- package/dist/tools/system/run-code/run-code-telemetry.js +48 -72
- package/dist/tools/system/run-code/run-code-telemetry.js.map +1 -1
- package/dist/tools/system/run-code/run-code.d.ts +22 -59
- package/dist/tools/system/run-code/run-code.d.ts.map +1 -1
- package/dist/tools/system/run-code/run-code.js +118 -784
- package/dist/tools/system/run-code/run-code.js.map +1 -1
- package/dist/tools/system/run-code/tools-header.d.ts +16 -4
- package/dist/tools/system/run-code/tools-header.d.ts.map +1 -1
- package/dist/tools/system/run-code/tools-header.js +32 -16
- package/dist/tools/system/run-code/tools-header.js.map +1 -1
- package/dist/tools/system/shell.d.ts +3 -0
- package/dist/tools/system/shell.d.ts.map +1 -1
- package/dist/tools/system/shell.js +13 -3
- package/dist/tools/system/shell.js.map +1 -1
- package/dist/tools/types.d.ts +12 -4
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/utils/ai/model-settings.d.ts +6 -0
- package/dist/utils/ai/model-settings.d.ts.map +1 -1
- package/dist/utils/ai/model-settings.js +7 -1
- package/dist/utils/ai/model-settings.js.map +1 -1
- package/dist/utils/ai/token-usage.d.ts +4 -5
- package/dist/utils/ai/token-usage.d.ts.map +1 -1
- package/dist/utils/ai/token-usage.js +3 -3
- package/dist/utils/ai/token-usage.js.map +1 -1
- package/dist/utils/conversation/conversation-utils.d.ts.map +1 -1
- package/dist/utils/conversation/conversation-utils.js +3 -0
- package/dist/utils/conversation/conversation-utils.js.map +1 -1
- package/dist/utils/conversation/static-commit-policy.d.ts +38 -0
- package/dist/utils/conversation/static-commit-policy.d.ts.map +1 -0
- package/dist/utils/conversation/static-commit-policy.js +76 -0
- package/dist/utils/conversation/static-commit-policy.js.map +1 -0
- package/dist/utils/settings-command.d.ts.map +1 -1
- package/dist/utils/settings-command.js +2 -1
- package/dist/utils/settings-command.js.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-policy.d.ts +2 -0
- package/dist/utils/shell/sandbox/sandbox-policy.d.ts.map +1 -1
- package/dist/utils/shell/sandbox/sandbox-policy.js +1 -1
- package/dist/utils/shell/sandbox/sandbox-policy.js.map +1 -1
- package/dist/utils/streaming/streaming-session-factory.d.ts.map +1 -1
- package/dist/utils/streaming/streaming-session-factory.js +22 -22
- package/dist/utils/streaming/streaming-session-factory.js.map +1 -1
- package/package.json +1 -1
- package/dist/components/input/MentorPoolMenuSession.d.ts +0 -9
- package/dist/components/input/MentorPoolMenuSession.d.ts.map +0 -1
- package/dist/components/input/MentorPoolMenuSession.js.map +0 -1
- package/dist/components/menu/MentorPoolSelectionMenu.d.ts +0 -13
- package/dist/components/menu/MentorPoolSelectionMenu.d.ts.map +0 -1
- package/dist/components/menu/MentorPoolSelectionMenu.js.map +0 -1
- package/dist/hooks/use-mentor-pool-selection.d.ts +0 -103
- package/dist/hooks/use-mentor-pool-selection.d.ts.map +0 -1
- package/dist/hooks/use-mentor-pool-selection.js.map +0 -1
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { LoggingService } from '../services/logging/logging-service.js';
|
|
2
|
+
import type { WorkspaceGrant } from './contracts.js';
|
|
3
|
+
import { SessionContextService } from '../services/session/session-context-service.js';
|
|
4
|
+
import type { ISessionContextService } from '../services/service-interfaces.js';
|
|
5
|
+
/**
|
|
6
|
+
* `term2 serve` entry point: compose the real settings authority, the
|
|
7
|
+
* production runtime factory, and the gateway control plane, then block until
|
|
8
|
+
* SIGINT/SIGTERM triggers the existing bounded shutdown.
|
|
9
|
+
*
|
|
10
|
+
* State layout under --state-dir (0700): manifest.json + manifest.sha256,
|
|
11
|
+
* replay.sqlite, trusted-clients.json (0600, written by TrustedClientsStore),
|
|
12
|
+
* dynamic-workspaces.json (0600, durable browser-selected grants),
|
|
13
|
+
* gateway-data/ (persistence coordinator), runtime-tmp/ + sandbox/
|
|
14
|
+
* (per-session scratch), gateway-audit.jsonl.
|
|
15
|
+
*/
|
|
16
|
+
/** A launcher precondition failed; runServe turns this into a stderr message and exit 1. */
|
|
17
|
+
export declare class ServeStartupError extends Error {
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Per-session logger for gateway sessions, pointed at term2's standard log
|
|
21
|
+
* destination — the same XDG log directory the CLI writes, so gateway session
|
|
22
|
+
* diagnostics (e.g. a failed compaction's typed reason or the codex native
|
|
23
|
+
* compaction error) are visible next to CLI session logs. Console output stays
|
|
24
|
+
* suppressed (the LoggingService default) so serve's stdio contract is intact,
|
|
25
|
+
* and record contents follow the app log's sanitization rules.
|
|
26
|
+
*/
|
|
27
|
+
export declare function createServeSessionLogger(context: ISessionContextService, logDir?: string): LoggingService;
|
|
28
|
+
/**
|
|
29
|
+
* Session-logger wiring for the whole serve process: one LoggingService and one
|
|
30
|
+
* SessionContextService, handed to every session the runtime factory composes.
|
|
31
|
+
*
|
|
32
|
+
* One instance, not one per session: each per-session LoggingService would
|
|
33
|
+
* construct its own winston-daily-rotate-file transport against the same
|
|
34
|
+
* rotation audit file (term2-audit.json), and concurrent rotation bookkeeping
|
|
35
|
+
* on a shared audit file is not something the transport guarantees. The
|
|
36
|
+
* per-session traffic attribution is unaffected by sharing, because
|
|
37
|
+
* SessionContextService is an AsyncLocalStorage cell — sessions still run
|
|
38
|
+
* their provider traffic inside their own context, and the shared logger's
|
|
39
|
+
* provider-traffic store reads whichever context is current.
|
|
40
|
+
*/
|
|
41
|
+
export declare function createServeSessionLogWiring(logDir?: string): {
|
|
42
|
+
createSessionContext: () => SessionContextService;
|
|
43
|
+
createLogger: (sessionId: string, context: ISessionContextService) => LoggingService;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* Derive the gateway manifest for a state dir. A state dir with no manifest
|
|
47
|
+
* (or an empty-grant manifest) gets the canonical empty manifest this launcher
|
|
48
|
+
* runs: workspace admission is extended at runtime by the browser-owned
|
|
49
|
+
* candidate registry, and that state is durable in dynamic-workspaces.json,
|
|
50
|
+
* not in the manifest. A manifest that already carries curated grants is
|
|
51
|
+
* preserved untouched; only its sha256 sidecar is refreshed.
|
|
52
|
+
*/
|
|
53
|
+
export declare function prepareGatewayManifest(stateDir: string): {
|
|
54
|
+
manifestPath: string;
|
|
55
|
+
manifestSha256: string;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Load durable browser-selected grants. A missing file means no prior grants;
|
|
59
|
+
* a damaged (unparseable) file is quarantined as <file>.corrupt.<timestamp>
|
|
60
|
+
* with a warning so the evidence survives (the unique suffix keeps a second
|
|
61
|
+
* incident from destroying the first) and the launcher starts empty; a file
|
|
62
|
+
* that parses but carries an invalid grant list fails closed.
|
|
63
|
+
*/
|
|
64
|
+
export declare function loadDynamicWorkspaceGrants(stateDir: string): readonly WorkspaceGrant[];
|
|
65
|
+
/** Write the durable grant list atomically (temp file, then rename). */
|
|
66
|
+
export declare function saveDynamicWorkspaceGrants(stateDir: string, grants: readonly WorkspaceGrant[]): void;
|
|
67
|
+
/** Canonicalize one --workspace-root; the registry requires real directories. */
|
|
68
|
+
export declare function canonicalizeWorkspaceRoot(root: string): string;
|
|
69
|
+
/**
|
|
70
|
+
* Startup sandbox availability never gates readiness and no consumer may read
|
|
71
|
+
* workerSandboxAvailable as proof of a usable sandbox. This warning tells the
|
|
72
|
+
* operator up front when every shell tool call will be refused.
|
|
73
|
+
*/
|
|
74
|
+
export declare function sandboxStartupWarning(availability: {
|
|
75
|
+
type: string;
|
|
76
|
+
reason?: string;
|
|
77
|
+
}): string | undefined;
|
|
78
|
+
export declare function runServe(argv: readonly string[]): Promise<void>;
|
|
79
|
+
//# sourceMappingURL=serve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../source/gateway/serve.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAIxE,OAAO,KAAK,EAA0B,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAa7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAEhF;;;;;;;;;;GAUG;AAEH,4FAA4F;AAC5F,qBAAa,iBAAkB,SAAQ,KAAK;CAAG;AAE/C;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,cAAc,CAEzG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG;IAC5D,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;IAClD,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,KAAK,cAAc,CAAC;CACtF,CAOA;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAsBzG;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CAiCtF;AAED,wEAAwE;AACxE,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,CAKpG;AAED,iFAAiF;AACjF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAS9D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,CAIzG;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoNrE"}
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { appendFile } from 'node:fs/promises';
|
|
3
|
+
import { chmodSync, existsSync, mkdirSync, readFileSync, realpathSync, renameSync, statSync, writeFileSync, } from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { buildEnvOverrides, SettingsService } from '../services/settings/settings-service.js';
|
|
6
|
+
import { LoggingService } from '../services/logging/logging-service.js';
|
|
7
|
+
import { getDefaultShellSandboxRunner } from '../utils/shell/sandbox/shell-sandbox-runner.js';
|
|
8
|
+
import { launchGateway } from './launcher.js';
|
|
9
|
+
import { createProductionRuntimeFactory } from './runtime-factory.js';
|
|
10
|
+
import { createGatewayStorageLayout } from './persistence/storage.js';
|
|
11
|
+
import { GatewayPersistenceCoordinator } from './persistence/coordinator.js';
|
|
12
|
+
import { loadGatewayManifest, validateDynamicGrant, validateGatewayManifest, WorkspaceAdmission, } from './workspace-admission.js';
|
|
13
|
+
import { DynamicWorkspaceRegistry } from './dynamic-workspace-registry.js';
|
|
14
|
+
import { createRealWorkspaceBoundaryProbe } from './workspace-boundary-probe.js';
|
|
15
|
+
import { parseServeArgs } from './serve-args.js';
|
|
16
|
+
import { SessionContextService } from '../services/session/session-context-service.js';
|
|
17
|
+
/**
|
|
18
|
+
* `term2 serve` entry point: compose the real settings authority, the
|
|
19
|
+
* production runtime factory, and the gateway control plane, then block until
|
|
20
|
+
* SIGINT/SIGTERM triggers the existing bounded shutdown.
|
|
21
|
+
*
|
|
22
|
+
* State layout under --state-dir (0700): manifest.json + manifest.sha256,
|
|
23
|
+
* replay.sqlite, trusted-clients.json (0600, written by TrustedClientsStore),
|
|
24
|
+
* dynamic-workspaces.json (0600, durable browser-selected grants),
|
|
25
|
+
* gateway-data/ (persistence coordinator), runtime-tmp/ + sandbox/
|
|
26
|
+
* (per-session scratch), gateway-audit.jsonl.
|
|
27
|
+
*/
|
|
28
|
+
/** A launcher precondition failed; runServe turns this into a stderr message and exit 1. */
|
|
29
|
+
export class ServeStartupError extends Error {
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Per-session logger for gateway sessions, pointed at term2's standard log
|
|
33
|
+
* destination — the same XDG log directory the CLI writes, so gateway session
|
|
34
|
+
* diagnostics (e.g. a failed compaction's typed reason or the codex native
|
|
35
|
+
* compaction error) are visible next to CLI session logs. Console output stays
|
|
36
|
+
* suppressed (the LoggingService default) so serve's stdio contract is intact,
|
|
37
|
+
* and record contents follow the app log's sanitization rules.
|
|
38
|
+
*/
|
|
39
|
+
export function createServeSessionLogger(context, logDir) {
|
|
40
|
+
return new LoggingService({ sessionContextService: context, ...(logDir !== undefined ? { logDir } : {}) });
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Session-logger wiring for the whole serve process: one LoggingService and one
|
|
44
|
+
* SessionContextService, handed to every session the runtime factory composes.
|
|
45
|
+
*
|
|
46
|
+
* One instance, not one per session: each per-session LoggingService would
|
|
47
|
+
* construct its own winston-daily-rotate-file transport against the same
|
|
48
|
+
* rotation audit file (term2-audit.json), and concurrent rotation bookkeeping
|
|
49
|
+
* on a shared audit file is not something the transport guarantees. The
|
|
50
|
+
* per-session traffic attribution is unaffected by sharing, because
|
|
51
|
+
* SessionContextService is an AsyncLocalStorage cell — sessions still run
|
|
52
|
+
* their provider traffic inside their own context, and the shared logger's
|
|
53
|
+
* provider-traffic store reads whichever context is current.
|
|
54
|
+
*/
|
|
55
|
+
export function createServeSessionLogWiring(logDir) {
|
|
56
|
+
const context = new SessionContextService();
|
|
57
|
+
const logger = createServeSessionLogger(context, logDir);
|
|
58
|
+
return {
|
|
59
|
+
createSessionContext: () => context,
|
|
60
|
+
createLogger: () => logger,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Derive the gateway manifest for a state dir. A state dir with no manifest
|
|
65
|
+
* (or an empty-grant manifest) gets the canonical empty manifest this launcher
|
|
66
|
+
* runs: workspace admission is extended at runtime by the browser-owned
|
|
67
|
+
* candidate registry, and that state is durable in dynamic-workspaces.json,
|
|
68
|
+
* not in the manifest. A manifest that already carries curated grants is
|
|
69
|
+
* preserved untouched; only its sha256 sidecar is refreshed.
|
|
70
|
+
*/
|
|
71
|
+
export function prepareGatewayManifest(stateDir) {
|
|
72
|
+
const manifestPath = path.join(stateDir, 'manifest.json');
|
|
73
|
+
const emptyManifest = `${JSON.stringify({ version: 1, grants: [], sshTargets: [] }, null, 2)}\n`;
|
|
74
|
+
let manifestJson = emptyManifest;
|
|
75
|
+
if (existsSync(manifestPath)) {
|
|
76
|
+
const existingRaw = readFileSync(manifestPath, 'utf8');
|
|
77
|
+
let existingGrants = 0;
|
|
78
|
+
try {
|
|
79
|
+
existingGrants = validateGatewayManifest(JSON.parse(existingRaw)).grants.length;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw new ServeStartupError(`refusing to overwrite an unreadable gateway manifest at ${manifestPath}: ${messageOf(error)}`);
|
|
83
|
+
}
|
|
84
|
+
if (existingGrants > 0)
|
|
85
|
+
manifestJson = existingRaw;
|
|
86
|
+
}
|
|
87
|
+
const manifestSha256 = createHash('sha256').update(manifestJson).digest('hex');
|
|
88
|
+
writeFileSync(manifestPath, manifestJson, { mode: 0o600 });
|
|
89
|
+
writeFileSync(path.join(stateDir, 'manifest.sha256'), `${manifestSha256}\n`, { mode: 0o600 });
|
|
90
|
+
// Prove the artifact the startup assertion will re-read actually parses.
|
|
91
|
+
loadGatewayManifest(manifestPath, manifestSha256);
|
|
92
|
+
return { manifestPath, manifestSha256 };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Load durable browser-selected grants. A missing file means no prior grants;
|
|
96
|
+
* a damaged (unparseable) file is quarantined as <file>.corrupt.<timestamp>
|
|
97
|
+
* with a warning so the evidence survives (the unique suffix keeps a second
|
|
98
|
+
* incident from destroying the first) and the launcher starts empty; a file
|
|
99
|
+
* that parses but carries an invalid grant list fails closed.
|
|
100
|
+
*/
|
|
101
|
+
export function loadDynamicWorkspaceGrants(stateDir) {
|
|
102
|
+
const grantsFile = path.join(stateDir, 'dynamic-workspaces.json');
|
|
103
|
+
let raw;
|
|
104
|
+
try {
|
|
105
|
+
raw = readFileSync(grantsFile, 'utf8');
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
let parsed;
|
|
111
|
+
try {
|
|
112
|
+
parsed = JSON.parse(raw);
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// rename(2) replaces an existing destination, so the quarantine name
|
|
116
|
+
// carries a timestamp: a second incident must not destroy the first.
|
|
117
|
+
const quarantinePath = `${grantsFile}.corrupt.${Date.now()}`;
|
|
118
|
+
let moved = false;
|
|
119
|
+
try {
|
|
120
|
+
renameSync(grantsFile, quarantinePath);
|
|
121
|
+
moved = true;
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Keep the damaged file in place rather than lose the evidence.
|
|
125
|
+
}
|
|
126
|
+
console.error(moved
|
|
127
|
+
? `term2 serve: ${grantsFile} is damaged; moved to ${quarantinePath}, starting with no dynamic grants`
|
|
128
|
+
: `term2 serve: ${grantsFile} is damaged and could not be moved aside; leaving it in place — repair or delete it before the next start`);
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
if (!Array.isArray(parsed) || !parsed.every((entry) => validateDynamicGrant(entry))) {
|
|
132
|
+
throw new ServeStartupError(`${grantsFile} contains an invalid dynamic grant; refusing to start`);
|
|
133
|
+
}
|
|
134
|
+
return parsed;
|
|
135
|
+
}
|
|
136
|
+
/** Write the durable grant list atomically (temp file, then rename). */
|
|
137
|
+
export function saveDynamicWorkspaceGrants(stateDir, grants) {
|
|
138
|
+
const grantsFile = path.join(stateDir, 'dynamic-workspaces.json');
|
|
139
|
+
const tempPath = `${grantsFile}.tmp`;
|
|
140
|
+
writeFileSync(tempPath, `${JSON.stringify(grants, null, 2)}\n`, { mode: 0o600 });
|
|
141
|
+
renameSync(tempPath, grantsFile);
|
|
142
|
+
}
|
|
143
|
+
/** Canonicalize one --workspace-root; the registry requires real directories. */
|
|
144
|
+
export function canonicalizeWorkspaceRoot(root) {
|
|
145
|
+
let canonical;
|
|
146
|
+
try {
|
|
147
|
+
canonical = realpathSync(root);
|
|
148
|
+
if (!statSync(canonical).isDirectory())
|
|
149
|
+
throw new Error('not a directory');
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
throw new ServeStartupError(`--workspace-root ${root} is unusable: ${messageOf(error)}`);
|
|
153
|
+
}
|
|
154
|
+
return canonical;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Startup sandbox availability never gates readiness and no consumer may read
|
|
158
|
+
* workerSandboxAvailable as proof of a usable sandbox. This warning tells the
|
|
159
|
+
* operator up front when every shell tool call will be refused.
|
|
160
|
+
*/
|
|
161
|
+
export function sandboxStartupWarning(availability) {
|
|
162
|
+
if (availability.type === 'available')
|
|
163
|
+
return undefined;
|
|
164
|
+
const detail = availability.reason ? ` (${availability.reason})` : '';
|
|
165
|
+
return `term2 serve: warning: shell sandbox unavailable: ${availability.type}${detail}; shell tool calls will be refused`;
|
|
166
|
+
}
|
|
167
|
+
export async function runServe(argv) {
|
|
168
|
+
const parsed = parseServeArgs(argv);
|
|
169
|
+
if (!parsed.ok) {
|
|
170
|
+
console.error(`term2 serve: ${parsed.error}`);
|
|
171
|
+
process.exit(1);
|
|
172
|
+
}
|
|
173
|
+
const args = parsed.args;
|
|
174
|
+
let stateDir;
|
|
175
|
+
try {
|
|
176
|
+
mkdirSync(args.stateDir, { recursive: true, mode: 0o700 });
|
|
177
|
+
chmodSync(args.stateDir, 0o700);
|
|
178
|
+
stateDir = realpathSync(args.stateDir);
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
console.error(`term2 serve: cannot create state directory ${args.stateDir}: ${messageOf(error)}`);
|
|
182
|
+
process.exit(1);
|
|
183
|
+
}
|
|
184
|
+
let manifest;
|
|
185
|
+
try {
|
|
186
|
+
manifest = prepareGatewayManifest(stateDir);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.error(`term2 serve: ${messageOf(error)}`);
|
|
190
|
+
process.exit(1);
|
|
191
|
+
}
|
|
192
|
+
const { manifestPath, manifestSha256 } = manifest;
|
|
193
|
+
const publicKeys = new Map();
|
|
194
|
+
for (const { kid, pemPath } of args.bffKeys) {
|
|
195
|
+
try {
|
|
196
|
+
publicKeys.set(kid, readFileSync(pemPath, 'utf8'));
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
console.error(`term2 serve: cannot read BFF public key "${kid}" at ${pemPath}: ${messageOf(error)}`);
|
|
200
|
+
process.exit(1);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (publicKeys.size === 0 && !args.pairing) {
|
|
204
|
+
console.error('term2 serve: provide at least one --bff-key <kid>=<pem path> or enable --pairing');
|
|
205
|
+
process.exit(1);
|
|
206
|
+
}
|
|
207
|
+
if (args.transport.kind === 'tls') {
|
|
208
|
+
for (const label of ['tls-cert', 'tls-key']) {
|
|
209
|
+
const filePath = label === 'tls-cert' ? args.transport.certPath : args.transport.keyPath;
|
|
210
|
+
try {
|
|
211
|
+
readFileSync(filePath);
|
|
212
|
+
}
|
|
213
|
+
catch (error) {
|
|
214
|
+
console.error(`term2 serve: cannot read --${label} at ${filePath}: ${messageOf(error)}`);
|
|
215
|
+
process.exit(1);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
let workspaceRoots;
|
|
220
|
+
try {
|
|
221
|
+
workspaceRoots = args.workspaceRoots.map((root) => canonicalizeWorkspaceRoot(root));
|
|
222
|
+
}
|
|
223
|
+
catch (error) {
|
|
224
|
+
console.error(`term2 serve: ${messageOf(error)}`);
|
|
225
|
+
process.exit(1);
|
|
226
|
+
}
|
|
227
|
+
// Probe once for the operator-visible warning. This does not gate readiness:
|
|
228
|
+
// the shell tool refuses the unsandboxed fallback per command when the
|
|
229
|
+
// sandbox runtime is unusable, so sessions still start and every other tool
|
|
230
|
+
// keeps working. The probe is advisory only: a throw from the optional
|
|
231
|
+
// sandbox subsystem becomes a probe_failed warning, never a stack trace.
|
|
232
|
+
let sandboxWarning;
|
|
233
|
+
try {
|
|
234
|
+
sandboxWarning = sandboxStartupWarning(await getDefaultShellSandboxRunner().availability());
|
|
235
|
+
}
|
|
236
|
+
catch (error) {
|
|
237
|
+
sandboxWarning = sandboxStartupWarning({ type: 'probe_failed', reason: messageOf(error) });
|
|
238
|
+
}
|
|
239
|
+
// The launcher process is the credential owner: this is the operator's real
|
|
240
|
+
// settings service (loaded with the same env precedence as the CLI), not a
|
|
241
|
+
// per-session overlay. Sessions receive only the M1 allowlist.
|
|
242
|
+
const settingsAuthority = new SettingsService({
|
|
243
|
+
env: buildEnvOverrides(),
|
|
244
|
+
loggingService: new LoggingService({ disableLogging: true, suppressConsoleOutput: true }),
|
|
245
|
+
});
|
|
246
|
+
const runtimeFactory = createProductionRuntimeFactory({
|
|
247
|
+
settingsAuthority,
|
|
248
|
+
tmpDir: ensureDir(stateDir, 'runtime-tmp'),
|
|
249
|
+
sandboxAvailable: true,
|
|
250
|
+
allowWrite: args.allowWrite,
|
|
251
|
+
...createServeSessionLogWiring(),
|
|
252
|
+
});
|
|
253
|
+
const persistence = new GatewayPersistenceCoordinator(createGatewayStorageLayout(ensureDir(stateDir, 'gateway-data')));
|
|
254
|
+
let initialDynamicGrants;
|
|
255
|
+
try {
|
|
256
|
+
initialDynamicGrants = loadDynamicWorkspaceGrants(stateDir);
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
console.error(`term2 serve: ${messageOf(error)}`);
|
|
260
|
+
process.exit(1);
|
|
261
|
+
}
|
|
262
|
+
const boundaryProbe = createRealWorkspaceBoundaryProbe({ allowWrite: args.allowWrite });
|
|
263
|
+
const admission = new WorkspaceAdmission(loadGatewayManifest(manifestPath, manifestSha256), {
|
|
264
|
+
allowWrite: args.allowWrite,
|
|
265
|
+
boundaryProbe,
|
|
266
|
+
initialDynamicGrants,
|
|
267
|
+
onDynamicGrantChange: (grants) => {
|
|
268
|
+
mkdirSync(stateDir, { recursive: true, mode: 0o700 });
|
|
269
|
+
saveDynamicWorkspaceGrants(stateDir, grants);
|
|
270
|
+
},
|
|
271
|
+
});
|
|
272
|
+
const workspaceRegistry = new DynamicWorkspaceRegistry({
|
|
273
|
+
admission,
|
|
274
|
+
allowedRoots: workspaceRoots,
|
|
275
|
+
});
|
|
276
|
+
const auditPath = path.join(stateDir, 'gateway-audit.jsonl');
|
|
277
|
+
const auditWriter = async (record) => {
|
|
278
|
+
await appendFile(auditPath, `${JSON.stringify(record)}\n`, { mode: 0o600 });
|
|
279
|
+
};
|
|
280
|
+
const config = {
|
|
281
|
+
enabled: true,
|
|
282
|
+
...(args.transport.kind === 'socket'
|
|
283
|
+
? { socketPath: args.transport.socketPath }
|
|
284
|
+
: {
|
|
285
|
+
host: args.transport.host,
|
|
286
|
+
port: args.transport.port,
|
|
287
|
+
tls: { certPath: args.transport.certPath, keyPath: args.transport.keyPath, requireClientCert: false },
|
|
288
|
+
}),
|
|
289
|
+
manifestPath,
|
|
290
|
+
manifestSha256,
|
|
291
|
+
replayDbPath: path.join(stateDir, 'replay.sqlite'),
|
|
292
|
+
issuer: args.issuer,
|
|
293
|
+
audience: args.audience,
|
|
294
|
+
publicKeys,
|
|
295
|
+
localOwnerUserId: args.localOwnerUserId,
|
|
296
|
+
workspaceRegistry,
|
|
297
|
+
workspaceBoundaryProbe: boundaryProbe,
|
|
298
|
+
// Launch-config claim only: the startup assertion requires this literal,
|
|
299
|
+
// and no consumer may read it as proof of a usable sandbox. Real shell
|
|
300
|
+
// execution probes the runner per call and refuses the unsandboxed
|
|
301
|
+
// fallback; the startup warning tells the operator when that will happen.
|
|
302
|
+
workerSandboxAvailable: true,
|
|
303
|
+
tmpDir: ensureDir(stateDir, 'sandbox'),
|
|
304
|
+
sshEnabled: false,
|
|
305
|
+
allowWrite: args.allowWrite,
|
|
306
|
+
autoApprove: false,
|
|
307
|
+
allowUnsandboxed: false,
|
|
308
|
+
auditWriter,
|
|
309
|
+
// The launcher owns the diagnostics destination; the gateway only decides what is
|
|
310
|
+
// worth reporting. Without this the gateway would have nowhere to report a degraded
|
|
311
|
+
// shutdown audit.
|
|
312
|
+
logger: new LoggingService(),
|
|
313
|
+
runtimeFactory,
|
|
314
|
+
// Always wired: without it session_create answers with the legacy body
|
|
315
|
+
// shape, which the ChatForge BFF rejects as gateway_unavailable.
|
|
316
|
+
persistence,
|
|
317
|
+
...(args.pairing
|
|
318
|
+
? {
|
|
319
|
+
pairing: {
|
|
320
|
+
enabled: true,
|
|
321
|
+
trustFilePath: path.join(stateDir, 'trusted-clients.json'),
|
|
322
|
+
// The OTP is the operator's out-of-band secret: stderr only, so it
|
|
323
|
+
// can never interleave with a machine-readable stdout stream.
|
|
324
|
+
printOtp: (otp) => console.error(`PAIRING OTP: ${otp}`),
|
|
325
|
+
},
|
|
326
|
+
}
|
|
327
|
+
: {}),
|
|
328
|
+
};
|
|
329
|
+
// The CLI module registers global SIGINT/SIGTERM handlers that force-exit
|
|
330
|
+
// for interactive sessions. A gateway shutdown is bounded and must be given
|
|
331
|
+
// the chance to finish, so those listeners are replaced here.
|
|
332
|
+
process.removeAllListeners('SIGINT');
|
|
333
|
+
process.removeAllListeners('SIGTERM');
|
|
334
|
+
let gateway;
|
|
335
|
+
try {
|
|
336
|
+
gateway = await launchGateway(config);
|
|
337
|
+
}
|
|
338
|
+
catch (error) {
|
|
339
|
+
console.error(`term2 serve: gateway failed to start: ${messageOf(error)}`);
|
|
340
|
+
process.exit(1);
|
|
341
|
+
}
|
|
342
|
+
if (sandboxWarning)
|
|
343
|
+
console.error(sandboxWarning);
|
|
344
|
+
const endpoint = args.transport.kind === 'socket'
|
|
345
|
+
? `transport=socket path=${args.transport.socketPath}`
|
|
346
|
+
: `transport=tls host=${args.transport.host} port=${args.transport.port}`;
|
|
347
|
+
console.error(`GATEWAY_READY pid=${process.pid} ${endpoint} pairing=${args.pairing ? 'on' : 'off'} workspaceRoots=${workspaceRoots.join(',')}`);
|
|
348
|
+
// launchGateway's own handlers start the bounded shutdown; this once-handler
|
|
349
|
+
// awaits the same idempotent shutdown and then exits deterministically even
|
|
350
|
+
// if a library keeps the event loop alive. runServe stays pending until that
|
|
351
|
+
// shutdown finishes, so a caller cannot fall through and exit the process
|
|
352
|
+
// while the gateway is still serving.
|
|
353
|
+
let settleShutdown = () => undefined;
|
|
354
|
+
const shutdownComplete = new Promise((resolve) => {
|
|
355
|
+
settleShutdown = resolve;
|
|
356
|
+
});
|
|
357
|
+
const shutdownAndExit = () => {
|
|
358
|
+
void gateway.shutdown().finally(() => {
|
|
359
|
+
settleShutdown();
|
|
360
|
+
process.exit(0);
|
|
361
|
+
});
|
|
362
|
+
};
|
|
363
|
+
process.once('SIGINT', shutdownAndExit);
|
|
364
|
+
process.once('SIGTERM', shutdownAndExit);
|
|
365
|
+
await shutdownComplete;
|
|
366
|
+
}
|
|
367
|
+
function ensureDir(stateDir, leaf) {
|
|
368
|
+
const dir = path.join(stateDir, leaf);
|
|
369
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
370
|
+
return dir;
|
|
371
|
+
}
|
|
372
|
+
function messageOf(error) {
|
|
373
|
+
return error instanceof Error ? error.message : String(error);
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../source/gateway/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import type { UserTurn } from '../types/user-turn.js';
|
|
|
5
5
|
import type { GatewaySessionComposition, SecretFreeWorkerSettings, SessionBinding } from './contracts.js';
|
|
6
6
|
import type { RuntimeResourcePolicy } from './runtime-factory.js';
|
|
7
7
|
import type { PreparedMessageResult, PreparedMessageIds } from '../services/conversation/conversation-adapter.js';
|
|
8
|
+
import type { GatewayMessageAdmissionRuntime } from './persistence/admission-persistence.js';
|
|
8
9
|
export type ServerSessionStatus = 'idle' | 'running' | 'awaiting_interaction' | 'interrupted' | 'closed';
|
|
9
10
|
export type AbortOutcome = {
|
|
10
11
|
readonly kind: 'aborted';
|
|
@@ -45,6 +46,13 @@ export declare class ServerSession {
|
|
|
45
46
|
readonly binding: Readonly<SessionBinding>;
|
|
46
47
|
readonly service: ConversationService;
|
|
47
48
|
constructor(options: ServerSessionOptions);
|
|
49
|
+
/**
|
|
50
|
+
* Attribute the events raised by `run` to `turnId`. Compact is the only
|
|
51
|
+
* command that publishes conversation events, and it runs outside a turn, so
|
|
52
|
+
* without this the gateway sees no turn and drops `context_compaction_*`
|
|
53
|
+
* before it reaches the journal.
|
|
54
|
+
*/
|
|
55
|
+
withCommandTurn<T>(turnId: string, run: () => Promise<T>): Promise<T>;
|
|
48
56
|
get sessionId(): string;
|
|
49
57
|
get status(): ServerSessionStatus;
|
|
50
58
|
get activeTurnId(): string | null;
|
|
@@ -57,6 +65,7 @@ export declare class ServerSession {
|
|
|
57
65
|
prepareMessage(input: UserTurn | string, ids: PreparedMessageIds): Promise<PreparedMessageResult>;
|
|
58
66
|
commitMessage(leaseId: string): Promise<void>;
|
|
59
67
|
cancelPreparedMessage(leaseId: string): Promise<void>;
|
|
68
|
+
createRetryRuntime(command: 'retry-tool' | 'retry-turn'): GatewayMessageAdmissionRuntime;
|
|
60
69
|
resolvePendingInteraction(request: ResolvePendingInteractionRequest): PendingInteractionResolution;
|
|
61
70
|
abort(turnId: string): Promise<AbortOutcome>;
|
|
62
71
|
dispose(reason?: 'closed' | 'shutdown' | 'interrupted'): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-session.d.ts","sourceRoot":"","sources":["../../source/gateway/server-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AACzF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAC;AAC5F,OAAO,KAAK,EACV,4BAA4B,EAC5B,gCAAgC,EACjC,MAAM,kDAAkD,CAAC;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC1G,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,kDAAkD,CAAC;
|
|
1
|
+
{"version":3,"file":"server-session.d.ts","sourceRoot":"","sources":["../../source/gateway/server-session.ts"],"names":[],"mappings":"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"}
|