@coralai/sps-cli 0.63.6 → 0.65.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/CHANGELOG.md +9 -0
- package/README-CN.md +2 -0
- package/README.md +2 -0
- package/dist/commands/agentCommand.d.ts.map +1 -1
- package/dist/commands/agentCommand.js +4 -3
- package/dist/commands/agentCommand.js.map +1 -1
- package/dist/commands/agentRenderer.js +3 -3
- package/dist/commands/agentRenderer.js.map +1 -1
- package/dist/commands/cardDashboard.d.ts.map +1 -1
- package/dist/commands/cardDashboard.js +2 -2
- package/dist/commands/cardDashboard.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +0 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +15 -15
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/openaiAgent.d.ts +3 -0
- package/dist/commands/openaiAgent.d.ts.map +1 -0
- package/dist/commands/openaiAgent.js +81 -0
- package/dist/commands/openaiAgent.js.map +1 -0
- package/dist/commands/pipelineRunner.js.map +1 -1
- package/dist/commands/pipelineTick.js +1 -1
- package/dist/commands/pipelineTick.js.map +1 -1
- package/dist/commands/projectInit.d.ts +11 -1
- package/dist/commands/projectInit.d.ts.map +1 -1
- package/dist/commands/projectInit.js +38 -7
- package/dist/commands/projectInit.js.map +1 -1
- package/dist/commands/prune.d.ts +6 -0
- package/dist/commands/prune.d.ts.map +1 -0
- package/dist/commands/prune.js +87 -0
- package/dist/commands/prune.js.map +1 -0
- package/dist/commands/qaTick.js +1 -1
- package/dist/commands/qaTick.js.map +1 -1
- package/dist/commands/reset.d.ts.map +1 -1
- package/dist/commands/reset.js +3 -2
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +8 -1
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/skillCommand.d.ts.map +1 -1
- package/dist/commands/skillCommand.js +2 -3
- package/dist/commands/skillCommand.js.map +1 -1
- package/dist/commands/status.js +2 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.js +3 -3
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tick.d.ts.map +1 -1
- package/dist/commands/tick.js +5 -2
- package/dist/commands/tick.js.map +1 -1
- package/dist/commands/workerDashboard.d.ts.map +1 -1
- package/dist/commands/workerDashboard.js +27 -26
- package/dist/commands/workerDashboard.js.map +1 -1
- package/dist/commands/workerLaunch.js +1 -1
- package/dist/commands/workerLaunch.js.map +1 -1
- package/dist/console/routes/chat.d.ts +18 -1
- package/dist/console/routes/chat.d.ts.map +1 -1
- package/dist/console/routes/chat.js +529 -40
- package/dist/console/routes/chat.js.map +1 -1
- package/dist/console/routes/fs.d.ts.map +1 -1
- package/dist/console/routes/fs.js +2 -1
- package/dist/console/routes/fs.js.map +1 -1
- package/dist/console/routes/logs.d.ts.map +1 -1
- package/dist/console/routes/logs.js +17 -5
- package/dist/console/routes/logs.js.map +1 -1
- package/dist/console/routes/projects.d.ts.map +1 -1
- package/dist/console/routes/projects.js +11 -2
- package/dist/console/routes/projects.js.map +1 -1
- package/dist/console/routes/workers.js +3 -3
- package/dist/console/routes/workers.js.map +1 -1
- package/dist/console-assets/assets/{ShowcasePage-BWHyDQhw.js → ShowcasePage-DFRO5bAO.js} +1 -1
- package/dist/console-assets/assets/{index-rQ_2k-G9.css → index-DZ28qAcd.css} +1 -1
- package/dist/console-assets/assets/{index-DH_TQHY4.js → index-De5GjRjY.js} +220 -215
- package/dist/console-assets/index.html +2 -2
- package/dist/core/agents/AgentBackend.d.ts +2 -2
- package/dist/core/agents/AgentBackend.d.ts.map +1 -1
- package/dist/core/agents/AgentBackend.js.map +1 -1
- package/dist/core/agents/DaemonBackend.d.ts +12 -2
- package/dist/core/agents/DaemonBackend.d.ts.map +1 -1
- package/dist/core/agents/DaemonBackend.js +59 -12
- package/dist/core/agents/DaemonBackend.js.map +1 -1
- package/dist/core/agents/resolveBackend.d.ts +4 -1
- package/dist/core/agents/resolveBackend.d.ts.map +1 -1
- package/dist/core/agents/resolveBackend.js +31 -1
- package/dist/core/agents/resolveBackend.js.map +1 -1
- package/dist/core/config.d.ts +5 -8
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +3 -9
- package/dist/core/config.js.map +1 -1
- package/dist/core/intel/agentsConfig.d.ts +9 -0
- package/dist/core/intel/agentsConfig.d.ts.map +1 -1
- package/dist/core/intel/agentsConfig.js +42 -0
- package/dist/core/intel/agentsConfig.js.map +1 -1
- package/dist/core/intel/types.d.ts +1 -0
- package/dist/core/intel/types.d.ts.map +1 -1
- package/dist/core/markerFile.d.ts.map +1 -1
- package/dist/core/markerFile.js +2 -2
- package/dist/core/markerFile.js.map +1 -1
- package/dist/core/openaiWorkerLog.d.ts +7 -0
- package/dist/core/openaiWorkerLog.d.ts.map +1 -0
- package/dist/core/openaiWorkerLog.js +98 -0
- package/dist/core/openaiWorkerLog.js.map +1 -0
- package/dist/core/paths.d.ts +1 -1
- package/dist/core/paths.d.ts.map +1 -1
- package/dist/core/paths.js +9 -7
- package/dist/core/paths.js.map +1 -1
- package/dist/core/pipelineConfig.js +7 -7
- package/dist/core/pipelineConfig.js.map +1 -1
- package/dist/core/pipelineSession.d.ts +3 -1
- package/dist/core/pipelineSession.d.ts.map +1 -1
- package/dist/core/pipelineSession.js +8 -2
- package/dist/core/pipelineSession.js.map +1 -1
- package/dist/core/processInspect.d.ts +5 -0
- package/dist/core/processInspect.d.ts.map +1 -1
- package/dist/core/processInspect.js +41 -11
- package/dist/core/processInspect.js.map +1 -1
- package/dist/core/projectPipelineAdapter.d.ts.map +1 -1
- package/dist/core/projectPipelineAdapter.js +4 -4
- package/dist/core/projectPipelineAdapter.js.map +1 -1
- package/dist/core/runtimeSnapshot.d.ts +2 -2
- package/dist/core/runtimeSnapshot.d.ts.map +1 -1
- package/dist/core/runtimeSnapshot.js +2 -2
- package/dist/core/runtimeSnapshot.js.map +1 -1
- package/dist/core/runtimeStore.d.ts +12 -12
- package/dist/core/runtimeStore.d.ts.map +1 -1
- package/dist/core/runtimeStore.js +16 -16
- package/dist/core/runtimeStore.js.map +1 -1
- package/dist/core/runtimeTypes.d.ts +109 -24
- package/dist/core/runtimeTypes.d.ts.map +1 -1
- package/dist/core/runtimeTypes.js +1 -1
- package/dist/core/sessionCleanup.d.ts +1 -1
- package/dist/core/sessionCleanup.d.ts.map +1 -1
- package/dist/core/sessionCleanup.js +2 -2
- package/dist/core/sessionCleanup.js.map +1 -1
- package/dist/core/sessionContext.d.ts +2 -2
- package/dist/core/sessionContext.d.ts.map +1 -1
- package/dist/core/sessionContext.js +1 -1
- package/dist/core/sessionContext.js.map +1 -1
- package/dist/core/sessionLiveness.d.ts +7 -6
- package/dist/core/sessionLiveness.d.ts.map +1 -1
- package/dist/core/sessionLiveness.js +3 -4
- package/dist/core/sessionLiveness.js.map +1 -1
- package/dist/core/state.d.ts +13 -12
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/state.js +9 -1
- package/dist/core/state.js.map +1 -1
- package/dist/core/workerRuntimeSummary.js +2 -2
- package/dist/core/workerRuntimeSummary.js.map +1 -1
- package/dist/core/workspacePaths.d.ts +22 -0
- package/dist/core/workspacePaths.d.ts.map +1 -0
- package/dist/core/workspacePaths.js +73 -0
- package/dist/core/workspacePaths.js.map +1 -0
- package/dist/daemon/daemonClient.d.ts +19 -22
- package/dist/daemon/daemonClient.d.ts.map +1 -1
- package/dist/daemon/daemonClient.js +82 -2
- package/dist/daemon/daemonClient.js.map +1 -1
- package/dist/daemon/sessionDaemon.d.ts +52 -7
- package/dist/daemon/sessionDaemon.d.ts.map +1 -1
- package/dist/daemon/sessionDaemon.js +40 -24
- package/dist/daemon/sessionDaemon.js.map +1 -1
- package/dist/engines/EventHandler.js +1 -1
- package/dist/engines/EventHandler.js.map +1 -1
- package/dist/engines/MonitorEngine.d.ts +2 -2
- package/dist/engines/MonitorEngine.d.ts.map +1 -1
- package/dist/engines/MonitorEngine.js +15 -17
- package/dist/engines/MonitorEngine.js.map +1 -1
- package/dist/engines/StageEngine.d.ts +5 -3
- package/dist/engines/StageEngine.d.ts.map +1 -1
- package/dist/engines/StageEngine.js +33 -18
- package/dist/engines/StageEngine.js.map +1 -1
- package/dist/main.js +21 -1
- package/dist/main.js.map +1 -1
- package/dist/manager/makeBackendFactory.d.ts +11 -4
- package/dist/manager/makeBackendFactory.d.ts.map +1 -1
- package/dist/manager/makeBackendFactory.js +28 -15
- package/dist/manager/makeBackendFactory.js.map +1 -1
- package/dist/manager/runtime-coordinator.js.map +1 -1
- package/dist/manager/supervisor.d.ts +7 -7
- package/dist/manager/supervisor.d.ts.map +1 -1
- package/dist/manager/supervisor.js +7 -7
- package/dist/manager/supervisor.js.map +1 -1
- package/dist/manager/worker-manager-impl.d.ts +4 -4
- package/dist/manager/worker-manager-impl.d.ts.map +1 -1
- package/dist/manager/worker-manager-impl.js +56 -24
- package/dist/manager/worker-manager-impl.js.map +1 -1
- package/dist/manager/worker-manager.d.ts +6 -6
- package/dist/manager/worker-manager.d.ts.map +1 -1
- package/dist/openai-agent/agentFactory.d.ts +10 -0
- package/dist/openai-agent/agentFactory.d.ts.map +1 -0
- package/dist/openai-agent/agentFactory.js +26 -0
- package/dist/openai-agent/agentFactory.js.map +1 -0
- package/dist/openai-agent/eventMap.d.ts +11 -0
- package/dist/openai-agent/eventMap.d.ts.map +1 -0
- package/dist/openai-agent/eventMap.js +191 -0
- package/dist/openai-agent/eventMap.js.map +1 -0
- package/dist/openai-agent/hooks.d.ts +13 -0
- package/dist/openai-agent/hooks.d.ts.map +1 -0
- package/dist/openai-agent/hooks.js +63 -0
- package/dist/openai-agent/hooks.js.map +1 -0
- package/dist/openai-agent/instructions.d.ts +3 -0
- package/dist/openai-agent/instructions.d.ts.map +1 -0
- package/dist/openai-agent/instructions.js +63 -0
- package/dist/openai-agent/instructions.js.map +1 -0
- package/dist/openai-agent/interactions/broker.d.ts +23 -0
- package/dist/openai-agent/interactions/broker.d.ts.map +1 -0
- package/dist/openai-agent/interactions/broker.js +316 -0
- package/dist/openai-agent/interactions/broker.js.map +1 -0
- package/dist/openai-agent/mcp/managedMcp.d.ts +31 -0
- package/dist/openai-agent/mcp/managedMcp.d.ts.map +1 -0
- package/dist/openai-agent/mcp/managedMcp.js +95 -0
- package/dist/openai-agent/mcp/managedMcp.js.map +1 -0
- package/dist/openai-agent/protocolWriter.d.ts +29 -0
- package/dist/openai-agent/protocolWriter.d.ts.map +1 -0
- package/dist/openai-agent/protocolWriter.js +74 -0
- package/dist/openai-agent/protocolWriter.js.map +1 -0
- package/dist/openai-agent/providerCapabilities.d.ts +31 -0
- package/dist/openai-agent/providerCapabilities.d.ts.map +1 -0
- package/dist/openai-agent/providerCapabilities.js +49 -0
- package/dist/openai-agent/providerCapabilities.js.map +1 -0
- package/dist/openai-agent/providerFactory.d.ts +18 -0
- package/dist/openai-agent/providerFactory.d.ts.map +1 -0
- package/dist/openai-agent/providerFactory.js +38 -0
- package/dist/openai-agent/providerFactory.js.map +1 -0
- package/dist/openai-agent/request.d.ts +22 -0
- package/dist/openai-agent/request.d.ts.map +1 -0
- package/dist/openai-agent/request.js +89 -0
- package/dist/openai-agent/request.js.map +1 -0
- package/dist/openai-agent/runWorker.d.ts +25 -0
- package/dist/openai-agent/runWorker.d.ts.map +1 -0
- package/dist/openai-agent/runWorker.js +635 -0
- package/dist/openai-agent/runWorker.js.map +1 -0
- package/dist/openai-agent/sandbox/execution.d.ts +36 -0
- package/dist/openai-agent/sandbox/execution.d.ts.map +1 -0
- package/dist/openai-agent/sandbox/execution.js +239 -0
- package/dist/openai-agent/sandbox/execution.js.map +1 -0
- package/dist/openai-agent/sandbox/productionDocker.d.ts +17 -0
- package/dist/openai-agent/sandbox/productionDocker.d.ts.map +1 -0
- package/dist/openai-agent/sandbox/productionDocker.js +76 -0
- package/dist/openai-agent/sandbox/productionDocker.js.map +1 -0
- package/dist/openai-agent/sdkContract.d.ts +18 -0
- package/dist/openai-agent/sdkContract.d.ts.map +1 -0
- package/dist/openai-agent/sdkContract.js +2 -0
- package/dist/openai-agent/sdkContract.js.map +1 -0
- package/dist/openai-agent/storage/atomic.d.ts +10 -0
- package/dist/openai-agent/storage/atomic.d.ts.map +1 -0
- package/dist/openai-agent/storage/atomic.js +112 -0
- package/dist/openai-agent/storage/atomic.js.map +1 -0
- package/dist/openai-agent/storage/checkpoint.d.ts +38 -0
- package/dist/openai-agent/storage/checkpoint.d.ts.map +1 -0
- package/dist/openai-agent/storage/checkpoint.js +141 -0
- package/dist/openai-agent/storage/checkpoint.js.map +1 -0
- package/dist/openai-agent/storage/errors.d.ts +8 -0
- package/dist/openai-agent/storage/errors.d.ts.map +1 -0
- package/dist/openai-agent/storage/errors.js +11 -0
- package/dist/openai-agent/storage/errors.js.map +1 -0
- package/dist/openai-agent/storage/index.d.ts +12 -0
- package/dist/openai-agent/storage/index.d.ts.map +1 -0
- package/dist/openai-agent/storage/index.js +12 -0
- package/dist/openai-agent/storage/index.js.map +1 -0
- package/dist/openai-agent/storage/interaction.d.ts +45 -0
- package/dist/openai-agent/storage/interaction.d.ts.map +1 -0
- package/dist/openai-agent/storage/interaction.js +372 -0
- package/dist/openai-agent/storage/interaction.js.map +1 -0
- package/dist/openai-agent/storage/lock.d.ts +13 -0
- package/dist/openai-agent/storage/lock.d.ts.map +1 -0
- package/dist/openai-agent/storage/lock.js +95 -0
- package/dist/openai-agent/storage/lock.js.map +1 -0
- package/dist/openai-agent/storage/metrics.d.ts +34 -0
- package/dist/openai-agent/storage/metrics.d.ts.map +1 -0
- package/dist/openai-agent/storage/metrics.js +74 -0
- package/dist/openai-agent/storage/metrics.js.map +1 -0
- package/dist/openai-agent/storage/output.d.ts +22 -0
- package/dist/openai-agent/storage/output.d.ts.map +1 -0
- package/dist/openai-agent/storage/output.js +175 -0
- package/dist/openai-agent/storage/output.js.map +1 -0
- package/dist/openai-agent/storage/session.d.ts +38 -0
- package/dist/openai-agent/storage/session.d.ts.map +1 -0
- package/dist/openai-agent/storage/session.js +216 -0
- package/dist/openai-agent/storage/session.js.map +1 -0
- package/dist/openai-agent/storage/toolLedger.d.ts +64 -0
- package/dist/openai-agent/storage/toolLedger.d.ts.map +1 -0
- package/dist/openai-agent/storage/toolLedger.js +281 -0
- package/dist/openai-agent/storage/toolLedger.js.map +1 -0
- package/dist/openai-agent/storage/workerStorage.d.ts +21 -0
- package/dist/openai-agent/storage/workerStorage.d.ts.map +1 -0
- package/dist/openai-agent/storage/workerStorage.js +38 -0
- package/dist/openai-agent/storage/workerStorage.js.map +1 -0
- package/dist/openai-agent/storage/workspace.d.ts +17 -0
- package/dist/openai-agent/storage/workspace.d.ts.map +1 -0
- package/dist/openai-agent/storage/workspace.js +67 -0
- package/dist/openai-agent/storage/workspace.js.map +1 -0
- package/dist/openai-agent/testHelpers.d.ts +9 -0
- package/dist/openai-agent/testHelpers.d.ts.map +1 -0
- package/dist/openai-agent/testHelpers.js +35 -0
- package/dist/openai-agent/testHelpers.js.map +1 -0
- package/dist/openai-agent/tools/ledgerTools.d.ts +12 -0
- package/dist/openai-agent/tools/ledgerTools.d.ts.map +1 -0
- package/dist/openai-agent/tools/ledgerTools.js +151 -0
- package/dist/openai-agent/tools/ledgerTools.js.map +1 -0
- package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
- package/dist/providers/MarkdownTaskBackend.js +2 -2
- package/dist/providers/MarkdownTaskBackend.js.map +1 -1
- package/dist/providers/RuntimeSessionRuntime.d.ts +35 -15
- package/dist/providers/RuntimeSessionRuntime.d.ts.map +1 -1
- package/dist/providers/RuntimeSessionRuntime.js +239 -22
- package/dist/providers/RuntimeSessionRuntime.js.map +1 -1
- package/dist/providers/llm/chatTools.d.ts.map +1 -1
- package/dist/providers/llm/chatTools.js +3 -3
- package/dist/providers/llm/chatTools.js.map +1 -1
- package/dist/providers/llm/codexAuth.d.ts +6 -1
- package/dist/providers/llm/codexAuth.d.ts.map +1 -1
- package/dist/providers/llm/codexAuth.js +45 -9
- package/dist/providers/llm/codexAuth.js.map +1 -1
- package/dist/providers/llm/codexModel.d.ts +4 -1
- package/dist/providers/llm/codexModel.d.ts.map +1 -1
- package/dist/providers/llm/codexModel.js +13 -3
- package/dist/providers/llm/codexModel.js.map +1 -1
- package/dist/providers/llm/localSubscription.d.ts +1 -1
- package/dist/providers/llm/localSubscription.d.ts.map +1 -1
- package/dist/providers/llm/localSubscription.js +2 -2
- package/dist/providers/llm/localSubscription.js.map +1 -1
- package/dist/providers/runtimeEventMap.d.ts +54 -5
- package/dist/providers/runtimeEventMap.d.ts.map +1 -1
- package/dist/providers/runtimeEventMap.js +110 -11
- package/dist/providers/runtimeEventMap.js.map +1 -1
- package/dist/runtime/agentd/client.d.ts +29 -0
- package/dist/runtime/agentd/client.d.ts.map +1 -0
- package/dist/runtime/agentd/client.js +131 -0
- package/dist/runtime/agentd/client.js.map +1 -0
- package/dist/runtime/agentd/main.d.ts +10 -0
- package/dist/runtime/agentd/main.d.ts.map +1 -0
- package/dist/runtime/agentd/main.js +49 -0
- package/dist/runtime/agentd/main.js.map +1 -0
- package/dist/runtime/agentd/protocol.d.ts +74 -0
- package/dist/runtime/agentd/protocol.d.ts.map +1 -0
- package/dist/runtime/agentd/protocol.js +21 -0
- package/dist/runtime/agentd/protocol.js.map +1 -0
- package/dist/runtime/agentd/server.d.ts +15 -0
- package/dist/runtime/agentd/server.d.ts.map +1 -0
- package/dist/runtime/agentd/server.js +116 -0
- package/dist/runtime/agentd/server.js.map +1 -0
- package/dist/runtime/backends/claude/ClaudeBackend.d.ts +155 -0
- package/dist/runtime/backends/claude/ClaudeBackend.d.ts.map +1 -0
- package/dist/runtime/backends/claude/ClaudeBackend.js +398 -0
- package/dist/runtime/backends/claude/ClaudeBackend.js.map +1 -0
- package/dist/runtime/backends/claude/ClaudeSessions.d.ts +23 -0
- package/dist/runtime/backends/claude/ClaudeSessions.d.ts.map +1 -0
- package/dist/runtime/backends/claude/ClaudeSessions.js +45 -0
- package/dist/runtime/backends/claude/ClaudeSessions.js.map +1 -0
- package/dist/runtime/backends/claude/inprocTools.d.ts +17 -0
- package/dist/runtime/backends/claude/inprocTools.d.ts.map +1 -0
- package/dist/runtime/backends/claude/inprocTools.js +14 -0
- package/dist/runtime/backends/claude/inprocTools.js.map +1 -0
- package/dist/runtime/backends/process/ExternalProcessBackend.d.ts +83 -0
- package/dist/runtime/backends/process/ExternalProcessBackend.d.ts.map +1 -0
- package/dist/runtime/backends/process/ExternalProcessBackend.js +642 -0
- package/dist/runtime/backends/process/ExternalProcessBackend.js.map +1 -0
- package/dist/runtime/contract/AgentBackend.d.ts +199 -0
- package/dist/runtime/contract/AgentBackend.d.ts.map +1 -0
- package/dist/runtime/contract/AgentBackend.js +2 -0
- package/dist/runtime/contract/AgentBackend.js.map +1 -0
- package/dist/runtime/contract/events.d.ts +96 -0
- package/dist/runtime/contract/events.d.ts.map +1 -0
- package/dist/runtime/contract/events.js +2 -0
- package/dist/runtime/contract/events.js.map +1 -0
- package/dist/runtime/contract/index.d.ts +13 -0
- package/dist/runtime/contract/index.d.ts.map +1 -0
- package/dist/runtime/contract/index.js +2 -0
- package/dist/runtime/contract/index.js.map +1 -0
- package/dist/runtime/contract/lifecycle.d.ts +26 -0
- package/dist/runtime/contract/lifecycle.d.ts.map +1 -0
- package/dist/runtime/contract/lifecycle.js +6 -0
- package/dist/runtime/contract/lifecycle.js.map +1 -0
- package/dist/runtime/contract/processProtocol.d.ts +263 -0
- package/dist/runtime/contract/processProtocol.d.ts.map +1 -0
- package/dist/runtime/contract/processProtocol.js +779 -0
- package/dist/runtime/contract/processProtocol.js.map +1 -0
- package/dist/runtime/contract/service.d.ts +85 -0
- package/dist/runtime/contract/service.d.ts.map +1 -0
- package/dist/runtime/contract/service.js +2 -0
- package/dist/runtime/contract/service.js.map +1 -0
- package/dist/runtime/contract/versioning.d.ts +44 -0
- package/dist/runtime/contract/versioning.d.ts.map +1 -0
- package/dist/runtime/contract/versioning.js +10 -0
- package/dist/runtime/contract/versioning.js.map +1 -0
- package/dist/runtime/index.d.ts +21 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +26 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/runtime.d.ts +21 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +34 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/service/AgentRuntime.d.ts +60 -0
- package/dist/runtime/service/AgentRuntime.d.ts.map +1 -0
- package/dist/runtime/service/AgentRuntime.js +396 -0
- package/dist/runtime/service/AgentRuntime.js.map +1 -0
- package/dist/runtime/service/FileRecordStore.d.ts +12 -0
- package/dist/runtime/service/FileRecordStore.d.ts.map +1 -0
- package/dist/runtime/service/FileRecordStore.js +48 -0
- package/dist/runtime/service/FileRecordStore.js.map +1 -0
- package/dist/runtime/service/backendFactory.d.ts +8 -0
- package/dist/runtime/service/backendFactory.d.ts.map +1 -0
- package/dist/runtime/service/backendFactory.js +20 -0
- package/dist/runtime/service/backendFactory.js.map +1 -0
- package/dist/runtime/stub/NoopBackend.d.ts +29 -0
- package/dist/runtime/stub/NoopBackend.d.ts.map +1 -0
- package/dist/runtime/stub/NoopBackend.js +56 -0
- package/dist/runtime/stub/NoopBackend.js.map +1 -0
- package/dist/runtime/stub/NoopService.d.ts +23 -0
- package/dist/runtime/stub/NoopService.d.ts.map +1 -0
- package/dist/runtime/stub/NoopService.js +136 -0
- package/dist/runtime/stub/NoopService.js.map +1 -0
- package/dist/runtime/stub/index.d.ts +8 -0
- package/dist/runtime/stub/index.d.ts.map +1 -0
- package/dist/runtime/stub/index.js +8 -0
- package/dist/runtime/stub/index.js.map +1 -0
- package/dist/runtime/versioning/VersionManager.d.ts +31 -0
- package/dist/runtime/versioning/VersionManager.d.ts.map +1 -0
- package/dist/runtime/versioning/VersionManager.js +142 -0
- package/dist/runtime/versioning/VersionManager.js.map +1 -0
- package/dist/services/ChatService.d.ts +11 -0
- package/dist/services/ChatService.d.ts.map +1 -1
- package/dist/services/ChatService.js +35 -5
- package/dist/services/ChatService.js.map +1 -1
- package/dist/services/LogService.d.ts +10 -4
- package/dist/services/LogService.d.ts.map +1 -1
- package/dist/services/LogService.js +26 -5
- package/dist/services/LogService.js.map +1 -1
- package/dist/services/ProjectService.d.ts +27 -0
- package/dist/services/ProjectService.d.ts.map +1 -1
- package/dist/services/ProjectService.js +74 -14
- package/dist/services/ProjectService.js.map +1 -1
- package/dist/services/WorkerService.d.ts +1 -0
- package/dist/services/WorkerService.d.ts.map +1 -1
- package/dist/services/WorkerService.js +72 -0
- package/dist/services/WorkerService.js.map +1 -1
- package/dist/services/executors.d.ts +1 -0
- package/dist/services/executors.d.ts.map +1 -1
- package/dist/services/executors.js +9 -1
- package/dist/services/executors.js.map +1 -1
- package/dist/services/promptPreview.d.ts.map +1 -1
- package/dist/services/promptPreview.js +4 -3
- package/dist/services/promptPreview.js.map +1 -1
- package/dist/shared/runtimePaths.d.ts +4 -0
- package/dist/shared/runtimePaths.d.ts.map +1 -1
- package/dist/shared/runtimePaths.js +8 -0
- package/dist/shared/runtimePaths.js.map +1 -1
- package/dist/shared/runtimeSchemas.d.ts +6 -2
- package/dist/shared/runtimeSchemas.d.ts.map +1 -1
- package/dist/shared/runtimeSchemas.js +3 -2
- package/dist/shared/runtimeSchemas.js.map +1 -1
- package/docs/openai-daemon-agent.md +144 -0
- package/package.json +15 -9
- package/project-template/.claude/hooks/openai/on-start.sh +6 -0
- package/project-template/.claude/hooks/openai/on-stop.sh +6 -0
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
import { execFileSync } from 'node:child_process';
|
|
2
|
+
import { basename } from 'node:path';
|
|
3
|
+
export class AgentRuntime {
|
|
4
|
+
slots = new Map();
|
|
5
|
+
factory;
|
|
6
|
+
capacity;
|
|
7
|
+
store;
|
|
8
|
+
tenantOf;
|
|
9
|
+
now;
|
|
10
|
+
constructor(opts) {
|
|
11
|
+
this.factory = opts.factory;
|
|
12
|
+
this.capacity = opts.capacity ?? {};
|
|
13
|
+
this.store = opts.store;
|
|
14
|
+
this.tenantOf = opts.tenantOf ?? ((slot) => (slot.includes(':') ? slot.slice(0, slot.indexOf(':')) : slot));
|
|
15
|
+
this.now = opts.now ?? (() => Date.now());
|
|
16
|
+
// 重启恢复:从 store 读回历史记录(标记为 dead/待重连;真实重连按 pid/证据,见 recover)。
|
|
17
|
+
for (const rec of this.store?.loadAll() ?? []) {
|
|
18
|
+
this.slots.set(rec.slot, {
|
|
19
|
+
// Trusted backend configuration is intentionally not restored from the
|
|
20
|
+
// worker-owned state file. ensureSession() must rebind it explicitly.
|
|
21
|
+
backend: null,
|
|
22
|
+
record: { ...rec, sessionState: 'dead' },
|
|
23
|
+
listeners: new Set(),
|
|
24
|
+
unsub: () => { },
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
iso(ms = this.now()) {
|
|
29
|
+
return new Date(ms).toISOString();
|
|
30
|
+
}
|
|
31
|
+
persist(rec) {
|
|
32
|
+
this.store?.put(rec);
|
|
33
|
+
}
|
|
34
|
+
async ensureSession(slot, config) {
|
|
35
|
+
let entry = this.slots.get(slot);
|
|
36
|
+
if (entry && entry.record.sessionState !== 'dead') {
|
|
37
|
+
this.touchIdle(slot);
|
|
38
|
+
return { ...entry.record };
|
|
39
|
+
}
|
|
40
|
+
if (!entry) {
|
|
41
|
+
this.enforceCapacity(slot, config);
|
|
42
|
+
entry = this.createEntry(slot, config);
|
|
43
|
+
this.slots.set(slot, entry);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
await retireUncontrolledWorker(entry.record.pid, config);
|
|
47
|
+
// 复活一条 dead 记录:重建后端(resume 经 config.resumeSessionId)。
|
|
48
|
+
entry.backend = this.factory(config);
|
|
49
|
+
entry.unsub = this.wire(entry);
|
|
50
|
+
}
|
|
51
|
+
const backend = this.requireBackend(entry);
|
|
52
|
+
const res = await backend.ensure();
|
|
53
|
+
entry.record.sessionId = res.sessionId;
|
|
54
|
+
entry.record.resumed = res.resumed; // R1 穿透
|
|
55
|
+
entry.record.resumeFailed = res.resumeFailed;
|
|
56
|
+
entry.record.liveness = backend.liveness
|
|
57
|
+
? { ...backend.liveness }
|
|
58
|
+
: entry.record.liveness;
|
|
59
|
+
const waiting = res.resumed &&
|
|
60
|
+
entry.record.terminal?.type === 'run.waiting_for_input' &&
|
|
61
|
+
entry.record.runId &&
|
|
62
|
+
entry.record.turnId &&
|
|
63
|
+
(entry.record.lastSequence ?? 0) > 0;
|
|
64
|
+
const recoverableLost = res.resumed &&
|
|
65
|
+
entry.record.runState === 'lost' &&
|
|
66
|
+
entry.record.terminal == null &&
|
|
67
|
+
entry.record.runId &&
|
|
68
|
+
entry.record.turnId &&
|
|
69
|
+
(entry.record.lastSequence ?? 0) > 0;
|
|
70
|
+
if (waiting) {
|
|
71
|
+
if (!backend.restoreInterruptedRun) {
|
|
72
|
+
throw new Error(`Backend ${backend.kind} cannot restore a waiting run`);
|
|
73
|
+
}
|
|
74
|
+
backend.restoreInterruptedRun({
|
|
75
|
+
sessionId: res.sessionId,
|
|
76
|
+
runId: entry.record.runId,
|
|
77
|
+
turnId: entry.record.turnId,
|
|
78
|
+
lastSequence: entry.record.lastSequence,
|
|
79
|
+
});
|
|
80
|
+
entry.record.runState = 'awaiting_input';
|
|
81
|
+
entry.record.sessionState = 'paused';
|
|
82
|
+
}
|
|
83
|
+
else if (recoverableLost) {
|
|
84
|
+
if (!backend.recoverRun) {
|
|
85
|
+
throw new Error(`Backend ${backend.kind} cannot recover a lost run`);
|
|
86
|
+
}
|
|
87
|
+
await backend.recoverRun({
|
|
88
|
+
sessionId: res.sessionId,
|
|
89
|
+
runId: entry.record.runId,
|
|
90
|
+
turnId: entry.record.turnId,
|
|
91
|
+
lastSequence: entry.record.lastSequence,
|
|
92
|
+
});
|
|
93
|
+
entry.record.terminal = null;
|
|
94
|
+
entry.record.runState = 'starting';
|
|
95
|
+
entry.record.sessionState = 'running';
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
entry.record.sessionState = 'idle';
|
|
99
|
+
}
|
|
100
|
+
entry.record.updatedAt = this.iso();
|
|
101
|
+
this.persist(entry.record);
|
|
102
|
+
this.touchIdle(slot);
|
|
103
|
+
return { ...entry.record };
|
|
104
|
+
}
|
|
105
|
+
createEntry(slot, config) {
|
|
106
|
+
const backend = this.factory(config);
|
|
107
|
+
const ts = this.iso();
|
|
108
|
+
const record = {
|
|
109
|
+
slot,
|
|
110
|
+
sessionId: '',
|
|
111
|
+
backend: config.backend,
|
|
112
|
+
model: config.model,
|
|
113
|
+
cwd: config.cwd,
|
|
114
|
+
pid: null,
|
|
115
|
+
sessionState: 'launching',
|
|
116
|
+
runState: 'idle',
|
|
117
|
+
createdAt: ts,
|
|
118
|
+
updatedAt: ts,
|
|
119
|
+
lastOutputAt: null,
|
|
120
|
+
usage: { inputTokens: 0, outputTokens: 0 },
|
|
121
|
+
runId: undefined,
|
|
122
|
+
lastSequence: 0,
|
|
123
|
+
turnId: undefined,
|
|
124
|
+
terminal: null,
|
|
125
|
+
};
|
|
126
|
+
const entry = { backend, record, listeners: new Set(), unsub: () => { } };
|
|
127
|
+
entry.unsub = this.wire(entry);
|
|
128
|
+
return entry;
|
|
129
|
+
}
|
|
130
|
+
/** 后端事件 → 更新 record + 扇出。 */
|
|
131
|
+
wire(entry) {
|
|
132
|
+
const backend = this.requireBackend(entry);
|
|
133
|
+
return backend.subscribe((ev) => {
|
|
134
|
+
const rec = entry.record;
|
|
135
|
+
rec.updatedAt = this.iso();
|
|
136
|
+
rec.lastOutputAt = rec.updatedAt;
|
|
137
|
+
if (ev.kind === 'session')
|
|
138
|
+
rec.sessionId = ev.sessionId;
|
|
139
|
+
else if (ev.kind === 'process') {
|
|
140
|
+
rec.runId = ev.event.runId;
|
|
141
|
+
rec.turnId = ev.event.turnId;
|
|
142
|
+
rec.lastSequence = ev.event.sequence;
|
|
143
|
+
if (ev.event.type === 'capabilities') {
|
|
144
|
+
rec.capabilities = ev.event.payload;
|
|
145
|
+
}
|
|
146
|
+
if (ev.event.type === 'run.waiting_for_input' ||
|
|
147
|
+
ev.event.type === 'run.completed' ||
|
|
148
|
+
ev.event.type === 'run.failed' ||
|
|
149
|
+
ev.event.type === 'run.cancelled') {
|
|
150
|
+
rec.terminal = {
|
|
151
|
+
type: ev.event.type,
|
|
152
|
+
sequence: ev.event.sequence,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else if (ev.kind === 'result') {
|
|
157
|
+
rec.runState = ev.status === 'completed' ? 'completed' : 'failed';
|
|
158
|
+
rec.sessionState = 'idle';
|
|
159
|
+
if (ev.usage)
|
|
160
|
+
rec.usage = ev.usage;
|
|
161
|
+
}
|
|
162
|
+
else if (ev.kind === 'run_state') {
|
|
163
|
+
// dispatch 同步 emit 的 'starting' run_state 已带新 runId —— 及时把 record 切到新 run,
|
|
164
|
+
// 否则 startRun 返回后到首个 process 事件之间(worker 冷启动窗口),inspect 仍报旧 runId,
|
|
165
|
+
// 订阅方会按旧 runId 重放上一轮的 terminal(表现为"新消息秒回上一轮的错误/结果")。
|
|
166
|
+
if (ev.runId)
|
|
167
|
+
rec.runId = ev.runId;
|
|
168
|
+
rec.runState = ev.state;
|
|
169
|
+
rec.sessionState =
|
|
170
|
+
ev.state === 'starting' || ev.state === 'running'
|
|
171
|
+
? 'running'
|
|
172
|
+
: ev.state === 'awaiting_input'
|
|
173
|
+
? 'paused'
|
|
174
|
+
: 'idle';
|
|
175
|
+
}
|
|
176
|
+
rec.pid = backend.pid ?? null;
|
|
177
|
+
if (backend.liveness)
|
|
178
|
+
rec.liveness = { ...backend.liveness };
|
|
179
|
+
this.persist(rec);
|
|
180
|
+
for (const l of entry.listeners)
|
|
181
|
+
l(ev);
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
async startRun(slot, prompt) {
|
|
185
|
+
const entry = this.require(slot);
|
|
186
|
+
this.clearIdle(slot);
|
|
187
|
+
entry.record.sessionState = 'running';
|
|
188
|
+
entry.record.runState = 'starting';
|
|
189
|
+
entry.record.updatedAt = this.iso();
|
|
190
|
+
entry.record.terminal = null;
|
|
191
|
+
const backend = this.requireBackend(entry);
|
|
192
|
+
await backend.dispatch(prompt);
|
|
193
|
+
entry.record.pid = backend.pid ?? null;
|
|
194
|
+
if (backend.liveness)
|
|
195
|
+
entry.record.liveness = { ...backend.liveness };
|
|
196
|
+
this.persist(entry.record);
|
|
197
|
+
this.touchIdle(slot);
|
|
198
|
+
return { ...entry.record };
|
|
199
|
+
}
|
|
200
|
+
async submitInteraction(slot, interactionId, answer) {
|
|
201
|
+
const entry = this.require(slot);
|
|
202
|
+
const backend = this.requireBackend(entry);
|
|
203
|
+
if (!backend.resumeInteraction) {
|
|
204
|
+
throw new Error(`Backend ${backend.kind} does not support interactions`);
|
|
205
|
+
}
|
|
206
|
+
this.clearIdle(slot);
|
|
207
|
+
entry.record.sessionState = 'running';
|
|
208
|
+
entry.record.runState = 'starting';
|
|
209
|
+
entry.record.updatedAt = this.iso();
|
|
210
|
+
entry.record.terminal = null;
|
|
211
|
+
await backend.resumeInteraction(interactionId, answer);
|
|
212
|
+
entry.record.pid = backend.pid ?? null;
|
|
213
|
+
if (backend.liveness)
|
|
214
|
+
entry.record.liveness = { ...backend.liveness };
|
|
215
|
+
this.persist(entry.record);
|
|
216
|
+
this.touchIdle(slot);
|
|
217
|
+
return { ...entry.record };
|
|
218
|
+
}
|
|
219
|
+
subscribe(slot) {
|
|
220
|
+
const entry = this.require(slot);
|
|
221
|
+
const queue = [];
|
|
222
|
+
let pending = null;
|
|
223
|
+
let closed = false;
|
|
224
|
+
const push = (ev) => {
|
|
225
|
+
if (pending) {
|
|
226
|
+
const r = pending;
|
|
227
|
+
pending = null;
|
|
228
|
+
r({ value: ev, done: false });
|
|
229
|
+
}
|
|
230
|
+
else
|
|
231
|
+
queue.push(ev);
|
|
232
|
+
};
|
|
233
|
+
entry.listeners.add(push);
|
|
234
|
+
const cancel = () => {
|
|
235
|
+
if (closed)
|
|
236
|
+
return;
|
|
237
|
+
closed = true;
|
|
238
|
+
entry.listeners.delete(push);
|
|
239
|
+
if (pending) {
|
|
240
|
+
const r = pending;
|
|
241
|
+
pending = null;
|
|
242
|
+
r({ value: undefined, done: true });
|
|
243
|
+
}
|
|
244
|
+
};
|
|
245
|
+
const iterator = {
|
|
246
|
+
next() {
|
|
247
|
+
const head = queue.shift();
|
|
248
|
+
if (head !== undefined)
|
|
249
|
+
return Promise.resolve({ value: head, done: false });
|
|
250
|
+
if (closed)
|
|
251
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
252
|
+
return new Promise((resolve) => {
|
|
253
|
+
pending = resolve;
|
|
254
|
+
});
|
|
255
|
+
},
|
|
256
|
+
return() {
|
|
257
|
+
cancel();
|
|
258
|
+
return Promise.resolve({ value: undefined, done: true });
|
|
259
|
+
},
|
|
260
|
+
};
|
|
261
|
+
return { [Symbol.asyncIterator]: () => iterator, cancel };
|
|
262
|
+
}
|
|
263
|
+
async cancelRun(slot) {
|
|
264
|
+
const entry = this.require(slot);
|
|
265
|
+
const backend = this.requireBackend(entry);
|
|
266
|
+
await backend.cancel();
|
|
267
|
+
entry.record.runState = await backend.runState();
|
|
268
|
+
entry.record.pid = backend.pid ?? null;
|
|
269
|
+
if (backend.liveness)
|
|
270
|
+
entry.record.liveness = { ...backend.liveness };
|
|
271
|
+
entry.record.sessionState = entry.record.runState === 'awaiting_input' ? 'paused' : 'idle';
|
|
272
|
+
entry.record.updatedAt = this.iso();
|
|
273
|
+
this.persist(entry.record);
|
|
274
|
+
}
|
|
275
|
+
async stopSession(slot, reason) {
|
|
276
|
+
const entry = this.slots.get(slot);
|
|
277
|
+
if (!entry)
|
|
278
|
+
return;
|
|
279
|
+
this.clearIdle(slot);
|
|
280
|
+
if (entry.backend)
|
|
281
|
+
await entry.backend.stop(reason);
|
|
282
|
+
entry.unsub();
|
|
283
|
+
entry.record.sessionState = 'dead';
|
|
284
|
+
entry.record.updatedAt = this.iso();
|
|
285
|
+
this.slots.delete(slot);
|
|
286
|
+
this.store?.remove(slot);
|
|
287
|
+
}
|
|
288
|
+
async inspect(slot) {
|
|
289
|
+
if (slot !== undefined) {
|
|
290
|
+
const entry = this.slots.get(slot);
|
|
291
|
+
return entry ? [{ ...entry.record }] : [];
|
|
292
|
+
}
|
|
293
|
+
return [...this.slots.values()].map((e) => ({ ...e.record }));
|
|
294
|
+
}
|
|
295
|
+
// ── 容量 / 空闲回收(CapacityPolicy 执行) ──
|
|
296
|
+
enforceCapacity(slot, config) {
|
|
297
|
+
const live = [...this.slots.values()].filter((e) => e.record.sessionState !== 'dead');
|
|
298
|
+
const max = this.capacity.maxConcurrent;
|
|
299
|
+
if (max != null && live.length >= max) {
|
|
300
|
+
throw new Error(`capacity: 全局并发已达上限 ${max}(slot=${slot})`);
|
|
301
|
+
}
|
|
302
|
+
const tenant = this.tenantOf(slot);
|
|
303
|
+
const perTenant = this.capacity.perTenant?.[tenant];
|
|
304
|
+
if (perTenant != null) {
|
|
305
|
+
const n = live.filter((e) => this.tenantOf(e.record.slot) === tenant).length;
|
|
306
|
+
if (n >= perTenant)
|
|
307
|
+
throw new Error(`capacity: 租户 "${tenant}" 并发已达上限 ${perTenant}`);
|
|
308
|
+
}
|
|
309
|
+
void config;
|
|
310
|
+
}
|
|
311
|
+
touchIdle(slot) {
|
|
312
|
+
const ttl = this.capacity.sessionIdleTtlMs;
|
|
313
|
+
if (ttl == null)
|
|
314
|
+
return;
|
|
315
|
+
const entry = this.slots.get(slot);
|
|
316
|
+
if (!entry)
|
|
317
|
+
return;
|
|
318
|
+
this.clearIdle(slot);
|
|
319
|
+
entry.idleTimer = setTimeout(() => {
|
|
320
|
+
void this.stopSession(slot, 'timeout');
|
|
321
|
+
}, ttl);
|
|
322
|
+
// 不挡进程退出。
|
|
323
|
+
entry.idleTimer.unref?.();
|
|
324
|
+
}
|
|
325
|
+
clearIdle(slot) {
|
|
326
|
+
const entry = this.slots.get(slot);
|
|
327
|
+
if (entry?.idleTimer) {
|
|
328
|
+
clearTimeout(entry.idleTimer);
|
|
329
|
+
entry.idleTimer = undefined;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
require(slot) {
|
|
333
|
+
const entry = this.slots.get(slot);
|
|
334
|
+
if (!entry)
|
|
335
|
+
throw new Error(`AgentRuntime: unknown slot "${slot}"(先 ensureSession)`);
|
|
336
|
+
return entry;
|
|
337
|
+
}
|
|
338
|
+
requireBackend(entry) {
|
|
339
|
+
if (!entry.backend) {
|
|
340
|
+
throw new Error(`AgentRuntime: slot "${entry.record.slot}" must be rebound with trusted config`);
|
|
341
|
+
}
|
|
342
|
+
return entry.backend;
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
async function retireUncontrolledWorker(pid, config) {
|
|
346
|
+
if (!pid || !isProcessAlive(pid))
|
|
347
|
+
return;
|
|
348
|
+
if (pid === process.pid) {
|
|
349
|
+
throw new Error('Refusing to terminate the current supervisor process');
|
|
350
|
+
}
|
|
351
|
+
const spec = config.externalProcess;
|
|
352
|
+
if (!spec || !matchesExpectedWorker(pid, spec.executable, spec.args ?? [])) {
|
|
353
|
+
throw new Error(`Cannot recover while uncontrolled pid ${pid} is alive and its identity cannot be verified`);
|
|
354
|
+
}
|
|
355
|
+
process.kill(pid, 'SIGTERM');
|
|
356
|
+
if (await waitForProcessExit(pid, spec.killGraceMs ?? 2_000))
|
|
357
|
+
return;
|
|
358
|
+
process.kill(pid, 'SIGKILL');
|
|
359
|
+
if (!(await waitForProcessExit(pid, spec.killGraceMs ?? 2_000))) {
|
|
360
|
+
throw new Error(`Uncontrolled worker pid ${pid} did not exit`);
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
function matchesExpectedWorker(pid, executable, args) {
|
|
364
|
+
try {
|
|
365
|
+
const command = execFileSync('/bin/ps', ['-p', String(pid), '-o', 'command='], { encoding: 'utf8' }).trim();
|
|
366
|
+
if (!command.includes(basename(executable)))
|
|
367
|
+
return false;
|
|
368
|
+
const identityArg = args.find((arg) => arg.startsWith('/'));
|
|
369
|
+
return !identityArg || command.includes(basename(identityArg));
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
return false;
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
function isProcessAlive(pid) {
|
|
376
|
+
try {
|
|
377
|
+
process.kill(pid, 0);
|
|
378
|
+
return true;
|
|
379
|
+
}
|
|
380
|
+
catch {
|
|
381
|
+
return false;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
async function waitForProcessExit(pid, timeoutMs) {
|
|
385
|
+
const deadline = Date.now() + timeoutMs;
|
|
386
|
+
while (Date.now() < deadline) {
|
|
387
|
+
if (!isProcessAlive(pid))
|
|
388
|
+
return true;
|
|
389
|
+
await new Promise((resolve) => {
|
|
390
|
+
const timer = setTimeout(resolve, 25);
|
|
391
|
+
timer.unref?.();
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
return !isProcessAlive(pid);
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=AgentRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentRuntime.js","sourceRoot":"","sources":["../../../src/runtime/service/AgentRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SessionRecord } from '../contract/service.js';
|
|
2
|
+
import type { RecordStore } from './AgentRuntime.js';
|
|
3
|
+
export declare class FileRecordStore implements RecordStore {
|
|
4
|
+
private readonly path;
|
|
5
|
+
private readonly map;
|
|
6
|
+
constructor(path: string);
|
|
7
|
+
loadAll(): SessionRecord[];
|
|
8
|
+
put(rec: SessionRecord): void;
|
|
9
|
+
remove(slot: string): void;
|
|
10
|
+
private flush;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=FileRecordStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileRecordStore.d.ts","sourceRoot":"","sources":["../../../src/runtime/service/FileRecordStore.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AASrD,qBAAa,eAAgB,YAAW,WAAW;IAGrC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoC;gBAE3B,IAAI,EAAE,MAAM;IAWzC,OAAO,IAAI,aAAa,EAAE;IAI1B,GAAG,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI;IAK7B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI1B,OAAO,CAAC,KAAK;CAQd"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module service/FileRecordStore
|
|
3
|
+
* P2:`SessionRecord` 的文件持久(state 文件)。agentd 用它扛自身重启——
|
|
4
|
+
* 重启后从盘上读回会话记录,再按 pid/证据决定重连或标 dead(见 recover)。
|
|
5
|
+
* 写用 tmp+rename 原子落盘,避免崩溃中途写坏。
|
|
6
|
+
*/
|
|
7
|
+
import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
|
|
8
|
+
import { dirname } from 'node:path';
|
|
9
|
+
const SCHEMA = 1;
|
|
10
|
+
export class FileRecordStore {
|
|
11
|
+
path;
|
|
12
|
+
map = new Map();
|
|
13
|
+
constructor(path) {
|
|
14
|
+
this.path = path;
|
|
15
|
+
if (existsSync(path)) {
|
|
16
|
+
try {
|
|
17
|
+
const parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
18
|
+
if (parsed.schemaVersion === SCHEMA)
|
|
19
|
+
for (const r of parsed.records)
|
|
20
|
+
this.map.set(r.slot, r);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
/* state 文件损坏 → 当空起步(不阻断启动) */
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
loadAll() {
|
|
28
|
+
return [...this.map.values()];
|
|
29
|
+
}
|
|
30
|
+
put(rec) {
|
|
31
|
+
this.map.set(rec.slot, { ...rec });
|
|
32
|
+
this.flush();
|
|
33
|
+
}
|
|
34
|
+
remove(slot) {
|
|
35
|
+
if (this.map.delete(slot))
|
|
36
|
+
this.flush();
|
|
37
|
+
}
|
|
38
|
+
flush() {
|
|
39
|
+
const dir = dirname(this.path);
|
|
40
|
+
if (!existsSync(dir))
|
|
41
|
+
mkdirSync(dir, { recursive: true });
|
|
42
|
+
const data = { schemaVersion: SCHEMA, records: [...this.map.values()] };
|
|
43
|
+
const tmp = `${this.path}.tmp`;
|
|
44
|
+
writeFileSync(tmp, JSON.stringify(data, null, 2));
|
|
45
|
+
renameSync(tmp, this.path); // 原子替换
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=FileRecordStore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileRecordStore.js","sourceRoot":"","sources":["../../../src/runtime/service/FileRecordStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,MAAM,MAAM,GAAG,CAAC,CAAC;AAEjB,MAAM,OAAO,eAAe;IAGG;IAFZ,GAAG,GAAG,IAAI,GAAG,EAAyB,CAAC;IAExD,YAA6B,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;QACvC,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAc,CAAC;gBACnE,IAAI,MAAM,CAAC,aAAa,KAAK,MAAM;oBAAE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO;wBAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/F,CAAC;YAAC,MAAM,CAAC;gBACP,8BAA8B;YAChC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,GAAG,CAAC,GAAkB;QACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC1C,CAAC;IAEO,KAAK;QACX,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAc,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QACnF,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,MAAM,CAAC;QAC/B,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAClD,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ClaudeSdkModule } from '../backends/claude/ClaudeBackend.js';
|
|
2
|
+
import type { BackendFactory } from './AgentRuntime.js';
|
|
3
|
+
export interface BackendFactoryDeps {
|
|
4
|
+
/** 已解析的 claude SDK 模块(query/getSessionInfo)。P3:`await VersionManager.load('@anthropic-ai/claude-agent-sdk')`。 */
|
|
5
|
+
claudeSdk?: ClaudeSdkModule;
|
|
6
|
+
}
|
|
7
|
+
export declare function createBackendFactory(deps: BackendFactoryDeps): BackendFactory;
|
|
8
|
+
//# sourceMappingURL=backendFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backendFactory.d.ts","sourceRoot":"","sources":["../../../src/runtime/service/backendFactory.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,kBAAkB;IACjC,iHAAiH;IACjH,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAc7E"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ClaudeBackend } from '../backends/claude/ClaudeBackend.js';
|
|
2
|
+
import { ExternalProcessBackend } from '../backends/process/ExternalProcessBackend.js';
|
|
3
|
+
export function createBackendFactory(deps) {
|
|
4
|
+
return (config) => {
|
|
5
|
+
switch (config.backend) {
|
|
6
|
+
case 'claude':
|
|
7
|
+
if (!deps.claudeSdk)
|
|
8
|
+
throw new Error('backendFactory: claude SDK 未加载(注入 claudeSdk 或经 VersionManager.load)');
|
|
9
|
+
return new ClaudeBackend(config, deps.claudeSdk);
|
|
10
|
+
case 'openai':
|
|
11
|
+
// in-process OpenAiBackend 已退役;openai/codex 一律走独立进程 worker(sps-cli/src/openai-agent)。
|
|
12
|
+
if (config.externalProcess)
|
|
13
|
+
return new ExternalProcessBackend(config);
|
|
14
|
+
throw new Error('backendFactory: openai 后端需 externalProcess(in-process OpenAiBackend 已移除)');
|
|
15
|
+
default:
|
|
16
|
+
throw new Error(`backendFactory: 未知 backend "${config.backend}"`);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=backendFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backendFactory.js","sourceRoot":"","sources":["../../../src/runtime/service/backendFactory.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAwB,MAAM,qCAAqC,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAQvF,MAAM,UAAU,oBAAoB,CAAC,IAAwB;IAC3D,OAAO,CAAC,MAAqB,EAAgB,EAAE;QAC7C,QAAQ,MAAM,CAAC,OAAO,EAAE,CAAC;YACvB,KAAK,QAAQ;gBACX,IAAI,CAAC,IAAI,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;gBAC5G,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YACnD,KAAK,QAAQ;gBACX,sFAAsF;gBACtF,IAAI,MAAM,CAAC,eAAe;oBAAE,OAAO,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC;gBACtE,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;YAC9F;gBACE,MAAM,IAAI,KAAK,CAAC,+BAA+B,MAAM,CAAC,OAAiB,GAAG,CAAC,CAAC;QAChF,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module stub/NoopBackend
|
|
3
|
+
* AgentBackend 的 no-op 实现(test double)。不连任何 SDK,用假数据把
|
|
4
|
+
* ensure → dispatch → subscribe → result 这条事件链端到端走通,
|
|
5
|
+
* 用于 P0 阶段验证契约形状可实现、可被消费者驱动。真实现见 P1 ClaudeBackend。
|
|
6
|
+
*/
|
|
7
|
+
import type { AgentBackend, SessionConfig } from '../contract/AgentBackend.js';
|
|
8
|
+
import type { WorkerOutputListener } from '../contract/events.js';
|
|
9
|
+
import type { RunState, StopReason } from '../contract/lifecycle.js';
|
|
10
|
+
export declare class NoopBackend implements AgentBackend {
|
|
11
|
+
private readonly config;
|
|
12
|
+
readonly kind: string;
|
|
13
|
+
private readonly listeners;
|
|
14
|
+
private sessionId;
|
|
15
|
+
private _runState;
|
|
16
|
+
constructor(config: SessionConfig);
|
|
17
|
+
private emit;
|
|
18
|
+
ensure(): Promise<{
|
|
19
|
+
sessionId: string;
|
|
20
|
+
resumed: boolean;
|
|
21
|
+
resumeFailed?: 'session_lost' | 'not_found';
|
|
22
|
+
}>;
|
|
23
|
+
dispatch(prompt: string): Promise<void>;
|
|
24
|
+
runState(): Promise<RunState>;
|
|
25
|
+
cancel(): Promise<void>;
|
|
26
|
+
stop(_reason?: StopReason): Promise<void>;
|
|
27
|
+
subscribe(listener: WorkerOutputListener): () => void;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=NoopBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoopBackend.d.ts","sourceRoot":"","sources":["../../../src/runtime/stub/NoopBackend.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,KAAK,EAAqB,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAIrE,qBAAa,WAAY,YAAW,YAAY;IAMlC,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmC;IAC7D,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,SAAS,CAAoB;gBAER,MAAM,EAAE,aAAa;IAIlD,OAAO,CAAC,IAAI;IAIN,MAAM,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,cAAc,GAAG,WAAW,CAAA;KAAE,CAAC;IAUvG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcvC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IAI7B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,IAAI,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,SAAS,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;CAMtD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
let counter = 0;
|
|
2
|
+
export class NoopBackend {
|
|
3
|
+
config;
|
|
4
|
+
kind;
|
|
5
|
+
listeners = new Set();
|
|
6
|
+
sessionId = null;
|
|
7
|
+
_runState = 'idle';
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.kind = config.backend;
|
|
11
|
+
}
|
|
12
|
+
emit(ev) {
|
|
13
|
+
for (const l of this.listeners)
|
|
14
|
+
l(ev);
|
|
15
|
+
}
|
|
16
|
+
async ensure() {
|
|
17
|
+
// noop:有 resumeSessionId 即"重载成功"(真实 ClaudeBackend 会按 SDK 反馈填 resumeFailed)。
|
|
18
|
+
const resumed = this.config.resumeSessionId != null;
|
|
19
|
+
if (!this.sessionId) {
|
|
20
|
+
this.sessionId = this.config.resumeSessionId ?? `noop-${this.config.backend}-${++counter}`;
|
|
21
|
+
this.emit({ kind: 'session', sessionId: this.sessionId });
|
|
22
|
+
}
|
|
23
|
+
return { sessionId: this.sessionId, resumed };
|
|
24
|
+
}
|
|
25
|
+
async dispatch(prompt) {
|
|
26
|
+
await this.ensure();
|
|
27
|
+
this._runState = 'running';
|
|
28
|
+
this.emit({ kind: 'text', text: `[noop] echo: ${prompt}` });
|
|
29
|
+
this._runState = 'completed';
|
|
30
|
+
this.emit({
|
|
31
|
+
kind: 'result',
|
|
32
|
+
status: 'completed',
|
|
33
|
+
text: '[noop] done',
|
|
34
|
+
usage: { inputTokens: 0, outputTokens: 0, costUsd: 0 },
|
|
35
|
+
stopReason: 'end_turn',
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
async runState() {
|
|
39
|
+
return this._runState;
|
|
40
|
+
}
|
|
41
|
+
async cancel() {
|
|
42
|
+
this._runState = 'cancelled';
|
|
43
|
+
}
|
|
44
|
+
async stop(_reason) {
|
|
45
|
+
this._runState = 'idle';
|
|
46
|
+
this.listeners.clear();
|
|
47
|
+
this.sessionId = null;
|
|
48
|
+
}
|
|
49
|
+
subscribe(listener) {
|
|
50
|
+
this.listeners.add(listener);
|
|
51
|
+
return () => {
|
|
52
|
+
this.listeners.delete(listener);
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=NoopBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoopBackend.js","sourceRoot":"","sources":["../../../src/runtime/stub/NoopBackend.ts"],"names":[],"mappings":"AAUA,IAAI,OAAO,GAAG,CAAC,CAAC;AAEhB,MAAM,OAAO,WAAW;IAMO;IALpB,IAAI,CAAS;IACL,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IACrD,SAAS,GAAkB,IAAI,CAAC;IAChC,SAAS,GAAa,MAAM,CAAC;IAErC,YAA6B,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;QAChD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;IAC7B,CAAC;IAEO,IAAI,CAAC,EAAqB;QAChC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS;YAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,MAAM;QACV,4EAA4E;QAC5E,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,QAAQ,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;YAC3F,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc;QAC3B,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,MAAM,EAAE,EAAE,CAAC,CAAC;QAC5D,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;YACtD,UAAU,EAAE,UAAU;SACvB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAoB;QAC7B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,SAAS,CAAC,QAA8B;QACtC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module stub/NoopService
|
|
3
|
+
* AgentService 的 no-op 实现(test double)。每个 slot 背一个 NoopBackend,
|
|
4
|
+
* 维护 SessionRecord、把后端事件扇出给 subscribe 的异步迭代器。
|
|
5
|
+
* 用于 P0 验证服务契约形状端到端可用;真实现见 P2(in-process 内核 + agentd 外壳)。
|
|
6
|
+
*/
|
|
7
|
+
import type { SessionConfig } from '../contract/AgentBackend.js';
|
|
8
|
+
import type { AgentService, SessionRecord } from '../contract/service.js';
|
|
9
|
+
import type { StopReason } from '../contract/lifecycle.js';
|
|
10
|
+
import type { WorkerOutputEvent } from '../contract/events.js';
|
|
11
|
+
export declare class NoopService implements AgentService {
|
|
12
|
+
private readonly slots;
|
|
13
|
+
ensureSession(slot: string, config: SessionConfig): Promise<SessionRecord>;
|
|
14
|
+
startRun(slot: string, prompt: string): Promise<SessionRecord>;
|
|
15
|
+
subscribe(slot: string): AsyncIterable<WorkerOutputEvent> & {
|
|
16
|
+
cancel(): void;
|
|
17
|
+
};
|
|
18
|
+
cancelRun(slot: string): Promise<void>;
|
|
19
|
+
stopSession(slot: string, reason?: StopReason): Promise<void>;
|
|
20
|
+
inspect(slot?: string): Promise<SessionRecord[]>;
|
|
21
|
+
private require;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=NoopService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoopService.d.ts","sourceRoot":"","sources":["../../../src/runtime/stub/NoopService.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAwB,MAAM,uBAAuB,CAAC;AAYrF,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4B;IAE5C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IA4C1E,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IASpE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAAC,iBAAiB,CAAC,GAAG;QAAE,MAAM,IAAI,IAAI,CAAA;KAAE;IAiDxE,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7D,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAQtD,OAAO,CAAC,OAAO;CAKhB"}
|