@ai-devkit/agent-manager 0.32.0 → 0.33.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/AgentManager.d.ts +3 -3
- package/dist/AgentManager.d.ts.map +1 -1
- package/dist/AgentManager.js +80 -79
- package/dist/AgentManager.js.map +1 -1
- package/dist/__tests__/AgentManager.test.js +413 -388
- package/dist/__tests__/AgentManager.test.js.map +1 -1
- package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js +642 -642
- package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/CodexAdapter.test.js +322 -2321
- package/dist/__tests__/adapters/CodexAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/CopilotAdapter.test.js +254 -248
- package/dist/__tests__/adapters/CopilotAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/GeminiCliAdapter.test.js +564 -558
- package/dist/__tests__/adapters/GeminiCliAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/GrokCliAdapter.test.js +114 -114
- package/dist/__tests__/adapters/GrokCliAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/OpenCodeAdapter.test.js +169 -169
- package/dist/__tests__/adapters/OpenCodeAdapter.test.js.map +1 -1
- package/dist/__tests__/capacity/codex.test.js +93 -93
- package/dist/__tests__/capacity/codex.test.js.map +1 -1
- package/dist/__tests__/capacity/index.test.js +17 -17
- package/dist/__tests__/capacity/index.test.js.map +1 -1
- package/dist/__tests__/durable/CodexCliProbe.test.js +60 -60
- package/dist/__tests__/durable/CodexCliProbe.test.js.map +1 -1
- package/dist/__tests__/durable/CodexDurableAgentRepository.test.js +28 -28
- package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +1 -1
- package/dist/__tests__/durable/CodexPrintAgent.integration.test.js +30 -30
- package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +1 -1
- package/dist/__tests__/durable/CodexPrintAgentService.test.js +71 -71
- package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +1 -1
- package/dist/__tests__/durable/CodexPrintRunner.test.js +125 -125
- package/dist/__tests__/durable/CodexPrintRunner.test.js.map +1 -1
- package/dist/__tests__/print/ClaudeCliProbe.test.js +20 -20
- package/dist/__tests__/print/ClaudeCliProbe.test.js.map +1 -1
- package/dist/__tests__/print/ClaudePrintAgent.integration.test.js +20 -20
- package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +1 -1
- package/dist/__tests__/print/ClaudePrintAgentService.test.js +58 -58
- package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +1 -1
- package/dist/__tests__/print/ClaudePrintRunner.test.js +55 -55
- package/dist/__tests__/print/ClaudePrintRunner.test.js.map +1 -1
- package/dist/__tests__/print/DurableAgent.test.js +9 -9
- package/dist/__tests__/print/DurableAgent.test.js.map +1 -1
- package/dist/__tests__/print/DurableAgentRepository.sqlite.test.js +40 -40
- package/dist/__tests__/print/DurableAgentRepository.sqlite.test.js.map +1 -1
- package/dist/__tests__/print/DurableAgentRepository.test.js +66 -66
- package/dist/__tests__/print/DurableAgentRepository.test.js.map +1 -1
- package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js +34 -34
- package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +1 -1
- package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js +132 -132
- package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js.map +1 -1
- package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +194 -0
- package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +1 -0
- package/dist/__tests__/providers/codex/CodexSessionMapping.test.js +86 -0
- package/dist/__tests__/providers/codex/CodexSessionMapping.test.js.map +1 -0
- package/dist/__tests__/providers/codex/CodexSessionParser.test.js +254 -0
- package/dist/__tests__/providers/codex/CodexSessionParser.test.js.map +1 -0
- package/dist/__tests__/providers/pi/PiAdapter.test.js +337 -0
- package/dist/__tests__/providers/pi/PiAdapter.test.js.map +1 -0
- package/dist/__tests__/providers/pi/PiSessionParser.test.js +246 -0
- package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +1 -0
- package/dist/__tests__/providers/pi/PiSessionTracker.test.js +108 -0
- package/dist/__tests__/providers/pi/PiSessionTracker.test.js.map +1 -0
- package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js +33 -33
- package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js.map +1 -1
- package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js +16 -16
- package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js.map +1 -1
- package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js +52 -52
- package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js.map +1 -1
- package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js +44 -44
- package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js.map +1 -1
- package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js +126 -126
- package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js.map +1 -1
- package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js +14 -14
- package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js.map +1 -1
- package/dist/__tests__/readiness/AgentReadiness.test.js +134 -134
- package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -1
- package/dist/__tests__/runtime/AgentRuntime.test.js +13 -0
- package/dist/__tests__/runtime/AgentRuntime.test.js.map +1 -0
- package/dist/__tests__/runtime/HerdrAgentRuntime.test.js +452 -0
- package/dist/__tests__/runtime/HerdrAgentRuntime.test.js.map +1 -0
- package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +588 -0
- package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -0
- package/dist/__tests__/terminal/TerminalFocusManager.test.js +100 -100
- package/dist/__tests__/terminal/TerminalFocusManager.test.js.map +1 -1
- package/dist/__tests__/terminal/TmuxManager.test.js +101 -101
- package/dist/__tests__/terminal/TmuxManager.test.js.map +1 -1
- package/dist/__tests__/terminal/TtyWriter.test.js +185 -185
- package/dist/__tests__/terminal/TtyWriter.test.js.map +1 -1
- package/dist/__tests__/utils/AgentRegistry.test.js +335 -217
- package/dist/__tests__/utils/AgentRegistry.test.js.map +1 -1
- package/dist/__tests__/utils/ClaudeSessionParser.test.js +103 -101
- package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +1 -1
- package/dist/__tests__/utils/agent-requests.test.js +43 -43
- package/dist/__tests__/utils/agent-requests.test.js.map +1 -1
- package/dist/__tests__/utils/agents.test.js +17 -17
- package/dist/__tests__/utils/agents.test.js.map +1 -1
- package/dist/__tests__/utils/matching.test.js +92 -92
- package/dist/__tests__/utils/matching.test.js.map +1 -1
- package/dist/__tests__/utils/process.test.js +108 -108
- package/dist/__tests__/utils/process.test.js.map +1 -1
- package/dist/__tests__/utils/session.test.js +53 -53
- package/dist/__tests__/utils/session.test.js.map +1 -1
- package/dist/adapters/AgentAdapter.d.ts +2 -2
- package/dist/adapters/AgentAdapter.d.ts.map +1 -1
- package/dist/adapters/AgentAdapter.js +1 -1
- package/dist/adapters/AgentAdapter.js.map +1 -1
- package/dist/adapters/CopilotAdapter.d.ts +2 -2
- package/dist/adapters/CopilotAdapter.d.ts.map +1 -1
- package/dist/adapters/CopilotAdapter.js +51 -51
- package/dist/adapters/CopilotAdapter.js.map +1 -1
- package/dist/adapters/GeminiCliAdapter.d.ts +2 -2
- package/dist/adapters/GeminiCliAdapter.d.ts.map +1 -1
- package/dist/adapters/GeminiCliAdapter.js +86 -86
- package/dist/adapters/GeminiCliAdapter.js.map +1 -1
- package/dist/adapters/GrokCliAdapter.d.ts +1 -1
- package/dist/adapters/GrokCliAdapter.d.ts.map +1 -1
- package/dist/adapters/GrokCliAdapter.js +80 -80
- package/dist/adapters/GrokCliAdapter.js.map +1 -1
- package/dist/adapters/OpenCodeAdapter.d.ts +1 -1
- package/dist/adapters/OpenCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenCodeAdapter.js +37 -36
- package/dist/adapters/OpenCodeAdapter.js.map +1 -1
- package/dist/adapters/index.d.ts +9 -9
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +8 -8
- package/dist/adapters/index.js.map +1 -1
- package/dist/capacity/codex.d.ts +3 -3
- package/dist/capacity/codex.d.ts.map +1 -1
- package/dist/capacity/codex.js +57 -57
- package/dist/capacity/codex.js.map +1 -1
- package/dist/capacity/index.d.ts +3 -3
- package/dist/capacity/index.d.ts.map +1 -1
- package/dist/capacity/index.js +8 -8
- package/dist/capacity/index.js.map +1 -1
- package/dist/capacity/types.d.ts +1 -1
- package/dist/capacity/types.js.map +1 -1
- package/dist/database/connection.d.ts +1 -1
- package/dist/database/connection.d.ts.map +1 -1
- package/dist/database/connection.js +15 -15
- package/dist/database/connection.js.map +1 -1
- package/dist/database/index.d.ts +3 -3
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +2 -2
- package/dist/database/index.js.map +1 -1
- package/dist/database/migrations/005_agent_runtime.sql +2 -0
- package/dist/database/schema.d.ts +1 -1
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +7 -7
- package/dist/database/schema.js.map +1 -1
- package/dist/durable/DurableAgent.d.ts +9 -9
- package/dist/durable/DurableAgent.d.ts.map +1 -1
- package/dist/durable/DurableAgent.js +16 -16
- package/dist/durable/DurableAgent.js.map +1 -1
- package/dist/durable/DurableAgentRepository.d.ts +4 -4
- package/dist/durable/DurableAgentRepository.d.ts.map +1 -1
- package/dist/durable/DurableAgentRepository.js +49 -48
- package/dist/durable/DurableAgentRepository.js.map +1 -1
- package/dist/durable/process.d.ts +1 -1
- package/dist/durable/process.d.ts.map +1 -1
- package/dist/durable/process.js +14 -14
- package/dist/durable/process.js.map +1 -1
- package/dist/durable/run.d.ts +2 -2
- package/dist/durable/run.d.ts.map +1 -1
- package/dist/durable/run.js +6 -6
- package/dist/durable/run.js.map +1 -1
- package/dist/durable/utils.d.ts +1 -1
- package/dist/durable/utils.d.ts.map +1 -1
- package/dist/durable/utils.js +4 -4
- package/dist/durable/utils.js.map +1 -1
- package/dist/index.d.ts +46 -43
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -26
- package/dist/index.js.map +1 -1
- package/dist/providers/claude/ClaudeAgentMapper.d.ts +4 -4
- package/dist/providers/claude/ClaudeAgentMapper.d.ts.map +1 -1
- package/dist/providers/claude/ClaudeAgentMapper.js +10 -10
- package/dist/providers/claude/ClaudeAgentMapper.js.map +1 -1
- package/dist/providers/claude/ClaudeCodeAdapter.d.ts +1 -1
- package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +1 -1
- package/dist/providers/claude/ClaudeCodeAdapter.js +14 -14
- package/dist/providers/claude/ClaudeCodeAdapter.js.map +1 -1
- package/dist/providers/claude/ClaudeSessionLocator.d.ts +4 -4
- package/dist/providers/claude/ClaudeSessionLocator.d.ts.map +1 -1
- package/dist/providers/claude/ClaudeSessionLocator.js +79 -79
- package/dist/providers/claude/ClaudeSessionLocator.js.map +1 -1
- package/dist/providers/claude/ClaudeSessionParser.d.ts +2 -2
- package/dist/providers/claude/ClaudeSessionParser.d.ts.map +1 -1
- package/dist/providers/claude/ClaudeSessionParser.js +99 -99
- package/dist/providers/claude/ClaudeSessionParser.js.map +1 -1
- package/dist/providers/claude/durable/ClaudeCliProbe.d.ts.map +1 -1
- package/dist/providers/claude/durable/ClaudeCliProbe.js +16 -16
- package/dist/providers/claude/durable/ClaudeCliProbe.js.map +1 -1
- package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts +5 -5
- package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts.map +1 -1
- package/dist/providers/claude/durable/ClaudePrintAgentService.js +10 -10
- package/dist/providers/claude/durable/ClaudePrintAgentService.js.map +1 -1
- package/dist/providers/claude/durable/ClaudePrintRunner.d.ts +4 -4
- package/dist/providers/claude/durable/ClaudePrintRunner.d.ts.map +1 -1
- package/dist/providers/claude/durable/ClaudePrintRunner.js +18 -18
- package/dist/providers/claude/durable/ClaudePrintRunner.js.map +1 -1
- package/dist/providers/claude/durable/ClaudeStreamParser.d.ts +2 -2
- package/dist/providers/claude/durable/ClaudeStreamParser.d.ts.map +1 -1
- package/dist/providers/claude/durable/ClaudeStreamParser.js +17 -17
- package/dist/providers/claude/durable/ClaudeStreamParser.js.map +1 -1
- package/dist/providers/codex/CodexAdapter.d.ts +27 -0
- package/dist/providers/codex/CodexAdapter.d.ts.map +1 -0
- package/dist/providers/codex/CodexAdapter.js +162 -0
- package/dist/providers/codex/CodexAdapter.js.map +1 -0
- package/dist/providers/codex/CodexAgentMapper.d.ts +9 -0
- package/dist/providers/codex/CodexAgentMapper.d.ts.map +1 -0
- package/dist/providers/codex/CodexAgentMapper.js +35 -0
- package/dist/providers/codex/CodexAgentMapper.js.map +1 -0
- package/dist/providers/codex/CodexSessionLocator.d.ts +44 -0
- package/dist/providers/codex/CodexSessionLocator.d.ts.map +1 -0
- package/dist/providers/codex/CodexSessionLocator.js +207 -0
- package/dist/providers/codex/CodexSessionLocator.js.map +1 -0
- package/dist/providers/codex/CodexSessionMapping.d.ts +23 -0
- package/dist/providers/codex/CodexSessionMapping.d.ts.map +1 -0
- package/dist/providers/codex/CodexSessionMapping.js +68 -0
- package/dist/providers/codex/CodexSessionMapping.js.map +1 -0
- package/dist/providers/codex/CodexSessionParser.d.ts +58 -0
- package/dist/providers/codex/CodexSessionParser.d.ts.map +1 -0
- package/dist/providers/codex/CodexSessionParser.js +262 -0
- package/dist/providers/codex/CodexSessionParser.js.map +1 -0
- package/dist/providers/codex/durable/CodexCliProbe.d.ts.map +1 -1
- package/dist/providers/codex/durable/CodexCliProbe.js +22 -22
- package/dist/providers/codex/durable/CodexCliProbe.js.map +1 -1
- package/dist/providers/codex/durable/CodexPrintAgentService.d.ts +6 -6
- package/dist/providers/codex/durable/CodexPrintAgentService.d.ts.map +1 -1
- package/dist/providers/codex/durable/CodexPrintAgentService.js +10 -10
- package/dist/providers/codex/durable/CodexPrintAgentService.js.map +1 -1
- package/dist/providers/codex/durable/CodexPrintRunner.d.ts +4 -4
- package/dist/providers/codex/durable/CodexPrintRunner.d.ts.map +1 -1
- package/dist/providers/codex/durable/CodexPrintRunner.js +20 -20
- package/dist/providers/codex/durable/CodexPrintRunner.js.map +1 -1
- package/dist/providers/codex/durable/CodexStreamParser.d.ts +2 -2
- package/dist/providers/codex/durable/CodexStreamParser.d.ts.map +1 -1
- package/dist/providers/codex/durable/CodexStreamParser.js +21 -21
- package/dist/providers/codex/durable/CodexStreamParser.js.map +1 -1
- package/dist/providers/pi/PiAdapter.d.ts +28 -0
- package/dist/providers/pi/PiAdapter.d.ts.map +1 -0
- package/dist/providers/pi/PiAdapter.js +153 -0
- package/dist/providers/pi/PiAdapter.js.map +1 -0
- package/dist/providers/pi/PiAgentMapper.d.ts +9 -0
- package/dist/providers/pi/PiAgentMapper.d.ts.map +1 -0
- package/dist/providers/pi/PiAgentMapper.js +37 -0
- package/dist/providers/pi/PiAgentMapper.js.map +1 -0
- package/dist/providers/pi/PiSessionLocator.d.ts +23 -0
- package/dist/providers/pi/PiSessionLocator.d.ts.map +1 -0
- package/dist/providers/pi/PiSessionLocator.js +79 -0
- package/dist/providers/pi/PiSessionLocator.js.map +1 -0
- package/dist/providers/pi/PiSessionParser.d.ts +36 -0
- package/dist/providers/pi/PiSessionParser.d.ts.map +1 -0
- package/dist/providers/pi/PiSessionParser.js +191 -0
- package/dist/providers/pi/PiSessionParser.js.map +1 -0
- package/dist/providers/pi/PiSessionTracker.d.ts +23 -0
- package/dist/providers/pi/PiSessionTracker.d.ts.map +1 -0
- package/dist/providers/pi/PiSessionTracker.js +69 -0
- package/dist/providers/pi/PiSessionTracker.js.map +1 -0
- package/dist/providers/pi/durable/PiCliProbe.d.ts.map +1 -1
- package/dist/providers/pi/durable/PiCliProbe.js +15 -15
- package/dist/providers/pi/durable/PiCliProbe.js.map +1 -1
- package/dist/providers/pi/durable/PiPrintAgentService.d.ts +6 -6
- package/dist/providers/pi/durable/PiPrintAgentService.d.ts.map +1 -1
- package/dist/providers/pi/durable/PiPrintAgentService.js +10 -10
- package/dist/providers/pi/durable/PiPrintAgentService.js.map +1 -1
- package/dist/providers/pi/durable/PiPrintProtocol.d.ts.map +1 -1
- package/dist/providers/pi/durable/PiPrintProtocol.js +18 -18
- package/dist/providers/pi/durable/PiPrintProtocol.js.map +1 -1
- package/dist/providers/pi/durable/PiPrintRunner.d.ts +4 -4
- package/dist/providers/pi/durable/PiPrintRunner.d.ts.map +1 -1
- package/dist/providers/pi/durable/PiPrintRunner.js +15 -15
- package/dist/providers/pi/durable/PiPrintRunner.js.map +1 -1
- package/dist/providers/pi/durable/PiStreamParser.d.ts +1 -1
- package/dist/providers/pi/durable/PiStreamParser.d.ts.map +1 -1
- package/dist/providers/pi/durable/PiStreamParser.js +16 -16
- package/dist/providers/pi/durable/PiStreamParser.js.map +1 -1
- package/dist/readiness/AgentReadiness.d.ts +6 -6
- package/dist/readiness/AgentReadiness.d.ts.map +1 -1
- package/dist/readiness/AgentReadiness.js +130 -130
- package/dist/readiness/AgentReadiness.js.map +1 -1
- package/dist/runtime/ManagedAgentRuntime.d.ts +69 -0
- package/dist/runtime/ManagedAgentRuntime.d.ts.map +1 -0
- package/dist/runtime/ManagedAgentRuntime.js +156 -0
- package/dist/runtime/ManagedAgentRuntime.js.map +1 -0
- package/dist/runtime/RuntimeFactory.d.ts +4 -0
- package/dist/runtime/RuntimeFactory.d.ts.map +1 -0
- package/dist/runtime/RuntimeFactory.js +11 -0
- package/dist/runtime/RuntimeFactory.js.map +1 -0
- package/dist/runtime/errors.d.ts +27 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/errors.js +42 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/herdr/HerdrAgentRuntime.d.ts +31 -0
- package/dist/runtime/herdr/HerdrAgentRuntime.d.ts.map +1 -0
- package/dist/runtime/herdr/HerdrAgentRuntime.js +184 -0
- package/dist/runtime/herdr/HerdrAgentRuntime.js.map +1 -0
- package/dist/runtime/herdr/HerdrCliClient.d.ts +13 -0
- package/dist/runtime/herdr/HerdrCliClient.d.ts.map +1 -0
- package/dist/runtime/herdr/HerdrCliClient.js +60 -0
- package/dist/runtime/herdr/HerdrCliClient.js.map +1 -0
- package/dist/runtime/herdr/HerdrErrors.d.ts +7 -0
- package/dist/runtime/herdr/HerdrErrors.d.ts.map +1 -0
- package/dist/runtime/herdr/HerdrErrors.js +10 -0
- package/dist/runtime/herdr/HerdrErrors.js.map +1 -0
- package/dist/runtime/herdr/HerdrResponseParsers.d.ts +14 -0
- package/dist/runtime/herdr/HerdrResponseParsers.d.ts.map +1 -0
- package/dist/runtime/herdr/HerdrResponseParsers.js +96 -0
- package/dist/runtime/herdr/HerdrResponseParsers.js.map +1 -0
- package/dist/runtime/herdr/HerdrRuntimeRef.d.ts +9 -0
- package/dist/runtime/herdr/HerdrRuntimeRef.d.ts.map +1 -0
- package/dist/runtime/herdr/HerdrRuntimeRef.js +33 -0
- package/dist/runtime/herdr/HerdrRuntimeRef.js.map +1 -0
- package/dist/runtime/tmux/PidPolling.d.ts +5 -0
- package/dist/runtime/tmux/PidPolling.d.ts.map +1 -0
- package/dist/runtime/tmux/PidPolling.js +24 -0
- package/dist/runtime/tmux/PidPolling.js.map +1 -0
- package/dist/runtime/tmux/TmuxAgentRuntime.d.ts +17 -0
- package/dist/runtime/tmux/TmuxAgentRuntime.d.ts.map +1 -0
- package/dist/runtime/tmux/TmuxAgentRuntime.js +80 -0
- package/dist/runtime/tmux/TmuxAgentRuntime.js.map +1 -0
- package/dist/runtime/tmux/TmuxRuntimeRef.d.ts +5 -0
- package/dist/runtime/tmux/TmuxRuntimeRef.d.ts.map +1 -0
- package/dist/runtime/tmux/TmuxRuntimeRef.js +9 -0
- package/dist/runtime/tmux/TmuxRuntimeRef.js.map +1 -0
- package/dist/runtime/types.d.ts +54 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +3 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/terminal/TerminalFocusManager.d.ts.map +1 -1
- package/dist/terminal/TerminalFocusManager.js +50 -50
- package/dist/terminal/TerminalFocusManager.js.map +1 -1
- package/dist/terminal/TmuxManager.d.ts.map +1 -1
- package/dist/terminal/TmuxManager.js +47 -47
- package/dist/terminal/TmuxManager.js.map +1 -1
- package/dist/terminal/TtyWriter.d.ts +1 -1
- package/dist/terminal/TtyWriter.d.ts.map +1 -1
- package/dist/terminal/TtyWriter.js +89 -89
- package/dist/terminal/TtyWriter.js.map +1 -1
- package/dist/terminal/index.d.ts +4 -4
- package/dist/terminal/index.js +3 -3
- package/dist/terminal/index.js.map +1 -1
- package/dist/utils/AgentRegistry.d.ts +10 -2
- package/dist/utils/AgentRegistry.d.ts.map +1 -1
- package/dist/utils/AgentRegistry.js +57 -24
- package/dist/utils/AgentRegistry.js.map +1 -1
- package/dist/utils/agent-requests.d.ts.map +1 -1
- package/dist/utils/agent-requests.js +5 -5
- package/dist/utils/agent-requests.js.map +1 -1
- package/dist/utils/agents.d.ts +2 -2
- package/dist/utils/agents.d.ts.map +1 -1
- package/dist/utils/agents.js +15 -15
- package/dist/utils/agents.js.map +1 -1
- package/dist/utils/applescript.js +1 -1
- package/dist/utils/applescript.js.map +1 -1
- package/dist/utils/index.d.ts +6 -6
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -4
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/matching.d.ts +2 -2
- package/dist/utils/matching.d.ts.map +1 -1
- package/dist/utils/matching.js +4 -4
- package/dist/utils/matching.js.map +1 -1
- package/dist/utils/process.d.ts +1 -1
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +74 -74
- package/dist/utils/process.js.map +1 -1
- package/dist/utils/session.d.ts +1 -1
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +7 -7
- package/dist/utils/session.js.map +1 -1
- package/dist/utils/sortAgents.d.ts +2 -2
- package/dist/utils/sortAgents.d.ts.map +1 -1
- package/dist/utils/sortAgents.js +5 -5
- package/dist/utils/sortAgents.js.map +1 -1
- package/package.json +18 -19
- package/src/AgentManager.ts +283 -281
- package/src/__tests__/AgentManager.test.ts +917 -907
- package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +1657 -1368
- package/src/__tests__/adapters/CodexAdapter.test.ts +365 -1698
- package/src/__tests__/adapters/CopilotAdapter.test.ts +576 -481
- package/src/__tests__/adapters/GeminiCliAdapter.test.ts +1189 -1157
- package/src/__tests__/adapters/GrokCliAdapter.test.ts +325 -272
- package/src/__tests__/adapters/OpenCodeAdapter.test.ts +510 -455
- package/src/__tests__/capacity/codex.test.ts +178 -91
- package/src/__tests__/capacity/index.test.ts +27 -18
- package/src/__tests__/durable/CodexCliProbe.test.ts +75 -53
- package/src/__tests__/durable/CodexDurableAgentRepository.test.ts +51 -40
- package/src/__tests__/durable/CodexPrintAgent.integration.test.ts +89 -64
- package/src/__tests__/durable/CodexPrintAgentService.test.ts +196 -118
- package/src/__tests__/durable/CodexPrintRunner.test.ts +282 -162
- package/src/__tests__/fixtures/fake-claude.cjs +20 -13
- package/src/__tests__/fixtures/fake-codex.cjs +41 -30
- package/src/__tests__/print/ClaudeCliProbe.test.ts +27 -21
- package/src/__tests__/print/ClaudePrintAgent.integration.test.ts +48 -40
- package/src/__tests__/print/ClaudePrintAgentService.test.ts +118 -67
- package/src/__tests__/print/ClaudePrintRunner.test.ts +136 -83
- package/src/__tests__/print/DurableAgent.test.ts +19 -16
- package/src/__tests__/print/DurableAgentRepository.sqlite.test.ts +109 -86
- package/src/__tests__/print/DurableAgentRepository.test.ts +170 -137
- package/src/__tests__/providers/claude/ClaudeAgentMapper.test.ts +65 -65
- package/src/__tests__/providers/claude/ClaudeSessionLocator.test.ts +400 -377
- package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +182 -0
- package/src/__tests__/providers/codex/CodexSessionMapping.test.ts +63 -0
- package/src/__tests__/providers/codex/CodexSessionParser.test.ts +192 -0
- package/src/__tests__/providers/pi/PiAdapter.test.ts +310 -0
- package/src/__tests__/providers/pi/PiSessionParser.test.ts +190 -0
- package/src/__tests__/providers/pi/PiSessionTracker.test.ts +79 -0
- package/src/__tests__/providers/pi/durable/PiCliProbe.test.ts +48 -32
- package/src/__tests__/providers/pi/durable/PiDurableAgentRepository.test.ts +24 -23
- package/src/__tests__/providers/pi/durable/PiPrintAgentService.test.ts +131 -59
- package/src/__tests__/providers/pi/durable/PiPrintProtocol.test.ts +66 -28
- package/src/__tests__/providers/pi/durable/PiPrintRunner.test.ts +236 -90
- package/src/__tests__/providers/pi/durable/PiStreamParser.test.ts +20 -18
- package/src/__tests__/readiness/AgentReadiness.test.ts +217 -169
- package/src/__tests__/runtime/AgentRuntime.test.ts +8 -0
- package/src/__tests__/runtime/HerdrAgentRuntime.test.ts +358 -0
- package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +555 -0
- package/src/__tests__/terminal/TerminalFocusManager.test.ts +254 -253
- package/src/__tests__/terminal/TmuxManager.test.ts +157 -157
- package/src/__tests__/terminal/TtyWriter.test.ts +423 -419
- package/src/__tests__/utils/AgentRegistry.test.ts +506 -402
- package/src/__tests__/utils/ClaudeSessionParser.test.ts +276 -242
- package/src/__tests__/utils/agent-requests.test.ts +76 -56
- package/src/__tests__/utils/agents.test.ts +20 -20
- package/src/__tests__/utils/matching.test.ts +206 -171
- package/src/__tests__/utils/process.test.ts +276 -262
- package/src/__tests__/utils/session.test.ts +133 -139
- package/src/adapters/AgentAdapter.ts +134 -126
- package/src/adapters/CopilotAdapter.ts +405 -395
- package/src/adapters/GeminiCliAdapter.ts +598 -600
- package/src/adapters/GrokCliAdapter.ts +353 -342
- package/src/adapters/OpenCodeAdapter.ts +285 -259
- package/src/adapters/index.ts +15 -9
- package/src/capacity/codex.ts +137 -84
- package/src/capacity/index.ts +18 -13
- package/src/capacity/types.ts +1 -1
- package/src/database/connection.ts +73 -68
- package/src/database/index.ts +6 -6
- package/src/database/migrations/005_agent_runtime.sql +2 -0
- package/src/database/schema.ts +40 -38
- package/src/durable/DurableAgent.ts +85 -85
- package/src/durable/DurableAgentRepository.ts +409 -260
- package/src/durable/process.ts +22 -21
- package/src/durable/run.ts +61 -51
- package/src/durable/utils.ts +46 -41
- package/src/index.ts +144 -103
- package/src/providers/claude/ClaudeAgentMapper.ts +51 -50
- package/src/providers/claude/ClaudeCodeAdapter.ts +144 -136
- package/src/providers/claude/ClaudeSessionLocator.ts +291 -293
- package/src/providers/claude/ClaudeSessionParser.ts +322 -338
- package/src/providers/claude/durable/ClaudeCliProbe.ts +42 -37
- package/src/providers/claude/durable/ClaudePrintAgentService.ts +63 -50
- package/src/providers/claude/durable/ClaudePrintRunner.ts +79 -69
- package/src/providers/claude/durable/ClaudeStreamParser.ts +91 -62
- package/src/providers/codex/CodexAdapter.ts +205 -0
- package/src/providers/codex/CodexAgentMapper.ts +35 -0
- package/src/providers/codex/CodexSessionLocator.ts +279 -0
- package/src/providers/codex/CodexSessionMapping.ts +89 -0
- package/src/providers/codex/CodexSessionParser.ts +385 -0
- package/src/providers/codex/durable/CodexCliProbe.ts +50 -42
- package/src/providers/codex/durable/CodexPrintAgentService.ts +63 -49
- package/src/providers/codex/durable/CodexPrintRunner.ts +79 -69
- package/src/providers/codex/durable/CodexStreamParser.ts +97 -84
- package/src/providers/pi/PiAdapter.ts +183 -0
- package/src/providers/pi/PiAgentMapper.ts +36 -0
- package/src/providers/pi/PiSessionLocator.ts +95 -0
- package/src/providers/pi/PiSessionParser.ts +284 -0
- package/src/providers/pi/PiSessionTracker.ts +87 -0
- package/src/providers/pi/durable/PiCliProbe.ts +42 -34
- package/src/providers/pi/durable/PiPrintAgentService.ts +61 -53
- package/src/providers/pi/durable/PiPrintProtocol.ts +31 -29
- package/src/providers/pi/durable/PiPrintRunner.ts +75 -68
- package/src/providers/pi/durable/PiStreamParser.ts +82 -72
- package/src/readiness/AgentReadiness.ts +585 -513
- package/src/runtime/ManagedAgentRuntime.ts +266 -0
- package/src/runtime/RuntimeFactory.ts +13 -0
- package/src/runtime/errors.ts +50 -0
- package/src/runtime/herdr/HerdrAgentRuntime.ts +190 -0
- package/src/runtime/herdr/HerdrCliClient.ts +78 -0
- package/src/runtime/herdr/HerdrErrors.ts +9 -0
- package/src/runtime/herdr/HerdrResponseParsers.ts +76 -0
- package/src/runtime/herdr/HerdrRuntimeRef.ts +41 -0
- package/src/runtime/tmux/PidPolling.ts +34 -0
- package/src/runtime/tmux/TmuxAgentRuntime.ts +113 -0
- package/src/runtime/tmux/TmuxRuntimeRef.ts +9 -0
- package/src/runtime/types.ts +56 -0
- package/src/terminal/TerminalFocusManager.ts +215 -212
- package/src/terminal/TmuxManager.ts +99 -92
- package/src/terminal/TtyWriter.ts +203 -194
- package/src/terminal/index.ts +4 -4
- package/src/utils/AgentRegistry.ts +299 -238
- package/src/utils/agent-requests.ts +16 -16
- package/src/utils/agents.ts +41 -38
- package/src/utils/applescript.ts +4 -4
- package/src/utils/index.ts +12 -6
- package/src/utils/matching.ts +43 -43
- package/src/utils/process.ts +261 -258
- package/src/utils/session.ts +66 -66
- package/src/utils/sortAgents.ts +35 -33
- package/tsconfig.json +2 -8
- package/vitest.config.ts +16 -16
- package/.eslintrc.json +0 -31
- package/dist/__tests__/adapters/PiAdapter.test.js +0 -618
- package/dist/__tests__/adapters/PiAdapter.test.js.map +0 -1
- package/dist/__tests__/database/DurableAgentsDatabase.test.js +0 -128
- package/dist/__tests__/database/DurableAgentsDatabase.test.js.map +0 -1
- package/dist/adapters/CodexAdapter.d.ts +0 -109
- package/dist/adapters/CodexAdapter.d.ts.map +0 -1
- package/dist/adapters/CodexAdapter.js +0 -710
- package/dist/adapters/CodexAdapter.js.map +0 -1
- package/dist/adapters/PiAdapter.d.ts +0 -63
- package/dist/adapters/PiAdapter.d.ts.map +0 -1
- package/dist/adapters/PiAdapter.js +0 -453
- package/dist/adapters/PiAdapter.js.map +0 -1
- package/src/__tests__/adapters/PiAdapter.test.ts +0 -458
- package/src/__tests__/database/DurableAgentsDatabase.test.ts +0 -102
- package/src/adapters/CodexAdapter.ts +0 -923
- package/src/adapters/PiAdapter.ts +0 -598
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/durable/DurableAgentRepository.ts"],"sourcesContent":["import fs from 'fs';\nimport { randomUUID } from 'crypto';\nimport { DatabaseConnection, DEFAULT_AGENT_REGISTRY_DB_PATH } from '../database/index.js';\nimport { AGENT_MODES, CodexPrintError, type DurableActiveRun, type DurableAgent, type DurableProvider, type ProcessIdentity, type DurableRunStatus, type DurableSessionHealth } from './DurableAgent.js';\nimport { LocalProcessInspector, type ProcessInspector } from './process.js';\nimport { isUuid } from './utils.js';\nimport {\n DurableAgentBusyError,\n DurableAgentNameConflictError,\n DurableAgentNotFoundError,\n DurableAgentRepositoryError,\n} from './DurableAgent.js';\n\ninterface DurableAgentRow {\n id: string; name: string; provider: DurableProvider; mode: typeof AGENT_MODES.DURABLE; cwd: string; provider_session_id: string | null;\n state: DurableAgent['state']; session_health: DurableSessionHealth; created_at: string; updated_at: string;\n last_active_at: string | null; last_result_status: DurableRunStatus | null;\n last_result_completed_at: string | null; last_result_exit_code: number | null; last_result_summary: string | null;\n active_run_token: string | null; active_owner_pid: number | null; active_owner_started_at: string | null;\n active_provider_pid: number | null; active_provider_started_at: string | null; active_run_started_at: string | null;\n}\n\nexport interface CreateDurableAgentInput { name: string; cwd: string; provider?: DurableProvider }\n\nexport interface DurableAgentRepositoryOptions {\n dbPath?: string;\n readonly?: boolean;\n /** @deprecated SQLite busy_timeout replaces filesystem lock polling. */\n lockTimeoutMs?: number;\n now?: () => Date;\n processInspector?: ProcessInspector;\n /** @deprecated Active ownership is committed atomically. */\n incompleteLockGraceMs?: number;\n /** @deprecated SQLite transactions replace mutation lock directories. */\n mutationLockStaleMs?: number;\n}\n\nexport { LocalProcessInspector } from './process.js';\nexport type { ProcessInspector } from './process.js';\nexport interface DurableRunCompletion {\n status: DurableRunStatus; exitCode: number | null; summary: string; sessionHealth: DurableSessionHealth;\n}\n\nexport class DurableAgentRepository {\n readonly dbPath: string;\n private readonly now: () => Date;\n private readonly processInspector: ProcessInspector;\n private readonly readonly: boolean;\n private readonly db: DatabaseConnection;\n\n constructor(options: DurableAgentRepositoryOptions = {}) {\n this.dbPath = options.dbPath ?? DEFAULT_AGENT_REGISTRY_DB_PATH;\n this.now = options.now ?? (() => new Date());\n this.processInspector = options.processInspector ?? new LocalProcessInspector();\n this.readonly = options.readonly ?? false;\n try {\n this.db = new DatabaseConnection({ dbPath: this.dbPath, readonly: this.readonly });\n } catch (error) {\n if (error instanceof DurableAgentRepositoryError) throw error;\n throw new DurableAgentRepositoryError(`Cannot open durable-agent database: ${(error as Error).message}`);\n }\n }\n\n async create(input: CreateDurableAgentInput): Promise<DurableAgent> {\n this.assertWritable();\n const cwd = this.canonicalDirectory(input.cwd);\n const timestamp = this.now().toISOString();\n const id = randomUUID();\n const provider = input.provider ?? 'claude';\n let providerSessionId = provider === 'codex' ? null : randomUUID();\n while (providerSessionId === id) providerSessionId = randomUUID();\n try {\n this.db.execute(`INSERT INTO durable_agents (\n id, name, provider, mode, cwd, provider_session_id, state, session_health, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, 'ready', 'uninitialized', ?, ?)`,\n [id, input.name, provider, AGENT_MODES.DURABLE, cwd, providerSessionId, timestamp, timestamp]);\n } catch (error) {\n if (/UNIQUE constraint failed: durable_agents\\.name/i.test((error as Error).message)) {\n throw new DurableAgentNameConflictError(input.name);\n }\n throw this.storageError('Failed to create durable agent', error);\n }\n return this.requireById(id);\n }\n\n async list(): Promise<DurableAgent[]> {\n if (!this.readonly) await this.reconcile();\n return this.listRaw();\n }\n\n async getById(id: string): Promise<DurableAgent | null> {\n if (!this.readonly) await this.reconcile();\n return this.findById(id);\n }\n\n async resolve(reference: string): Promise<DurableAgent | DurableAgent[] | null> {\n const agents = await this.list();\n const byId = agents.find((agent) => agent.id === reference);\n if (byId) return byId;\n const matches = agents.filter((agent) => agent.name.toLowerCase() === reference.toLowerCase());\n return matches.length === 0 ? null : matches.length === 1 ? matches[0]! : matches;\n }\n\n async acquireRun(id: string): Promise<{ agent: DurableAgent; token: string }> {\n this.assertWritable();\n const snapshot = this.findById(id);\n if (!snapshot) throw new DurableAgentNotFoundError(id);\n this.validateBoundCwd(snapshot.cwd);\n const observed = snapshot.activeRun;\n const observedLive = observed ? this.isActive(observed) : false;\n if (observedLive) throw new DurableAgentBusyError(id, snapshot.name);\n const owner = this.processInspector.getIdentity(process.pid);\n if (!owner) throw new DurableAgentRepositoryError('Cannot determine the current process identity.');\n const token = randomUUID();\n const startedAt = this.now().toISOString();\n let recovered = false;\n try {\n this.immediate(() => {\n const current = this.findById(id);\n if (!current) throw new DurableAgentNotFoundError(id);\n if (current.state === 'running') {\n if (!observed || current.activeRun?.token !== observed.token || observedLive) {\n throw new DurableAgentBusyError(id, current.name);\n }\n recovered = true;\n }\n const changed = this.db.execute(`UPDATE durable_agents SET\n state = 'running', active_run_token = ?, active_owner_pid = ?, active_owner_started_at = ?,\n active_provider_pid = NULL, active_provider_started_at = NULL, active_run_started_at = ?, updated_at = ?,\n session_health = CASE WHEN state = 'running' THEN 'unknown' ELSE session_health END,\n last_result_status = CASE WHEN state = 'running' THEN 'interrupted' ELSE last_result_status END,\n last_result_completed_at = CASE WHEN state = 'running' THEN ? ELSE last_result_completed_at END,\n last_result_exit_code = CASE WHEN state = 'running' THEN NULL ELSE last_result_exit_code END,\n last_result_summary = CASE WHEN state = 'running' THEN 'Previous print run was interrupted.' ELSE last_result_summary END\n WHERE id = ? AND (state <> 'running' OR (\n active_run_token = ? AND active_owner_started_at = ? AND active_run_started_at = ?\n ))\n `, [token, owner.pid, owner.startedAt, startedAt, startedAt, startedAt, id,\n observed?.token ?? null, observed?.owner.startedAt ?? null, observed?.startedAt ?? null]);\n if (changed.changes !== 1) throw new DurableAgentBusyError(id, current.name);\n });\n } catch (error) {\n if (error instanceof DurableAgentBusyError || error instanceof DurableAgentNotFoundError) throw error;\n if (/busy|locked/i.test((error as Error).message)) throw new DurableAgentBusyError(id, snapshot.name);\n throw this.storageError('Failed to acquire durable-agent run', error);\n }\n const agent = this.requireById(id);\n if (recovered && agent.lastResult?.status !== 'interrupted') {\n throw new DurableAgentRepositoryError('Failed to record interrupted print run.');\n }\n return { agent, token };\n }\n\n async recordProviderProcess(id: string, token: string, identity: ProcessIdentity): Promise<void> {\n this.assertWritable();\n const changed = this.db.execute(`UPDATE durable_agents SET\n active_provider_pid = ?, active_provider_started_at = ?, updated_at = ?\n WHERE id = ? AND state = 'running' AND active_run_token = ?`,\n [identity.pid, identity.startedAt, this.now().toISOString(), id, token]);\n if (changed.changes !== 1) throw new DurableAgentRepositoryError('Print run ownership changed.');\n }\n\n async bindProviderSession(id: string, token: string, providerSessionId: string): Promise<DurableAgent> {\n this.assertWritable();\n if (!isUuid(providerSessionId)) {\n throw new DurableAgentRepositoryError('Invalid provider session id.');\n }\n try {\n this.immediate(() => {\n const agent = this.findById(id);\n if (!agent) throw new DurableAgentNotFoundError(id);\n if (agent.provider !== 'codex') {\n throw new DurableAgentRepositoryError('Only Codex durable sessions can be bound after creation.');\n }\n if (agent.activeRun?.token !== token) {\n throw new DurableAgentRepositoryError('Print run ownership changed.');\n }\n if (agent.providerSessionId !== null && agent.providerSessionId !== providerSessionId) {\n throw new CodexPrintError('Durable agent provider session identity does not match.', 'CODEX_SESSION_MISMATCH');\n }\n if (agent.providerSessionId === providerSessionId) return;\n const changed = this.db.execute(`UPDATE durable_agents SET provider_session_id = ?, updated_at = ?\n WHERE id = ? AND provider = 'codex' AND state = 'running' AND active_run_token = ?\n AND provider_session_id IS NULL`,\n [providerSessionId, this.now().toISOString(), id, token]);\n if (changed.changes !== 1) throw new DurableAgentRepositoryError('Print run ownership changed.');\n });\n } catch (error) {\n if (error instanceof DurableAgentRepositoryError || error instanceof DurableAgentNotFoundError\n || error instanceof CodexPrintError) throw error;\n if (/UNIQUE constraint failed: durable_agents\\.provider_session_id/i.test((error as Error).message)) {\n throw new CodexPrintError('Provider session is already bound to another durable agent.', 'CODEX_SESSION_MISMATCH');\n }\n throw this.storageError('Failed to bind durable-agent provider session', error);\n }\n return this.requireById(id);\n }\n\n async completeRun(id: string, token: string, result: DurableRunCompletion): Promise<DurableAgent> {\n this.assertWritable();\n const completedAt = this.now().toISOString();\n const changed = this.db.execute(`UPDATE durable_agents SET\n state = ?, session_health = ?, active_run_token = NULL, active_owner_pid = NULL,\n active_owner_started_at = NULL, active_provider_pid = NULL, active_provider_started_at = NULL,\n active_run_started_at = NULL, last_active_at = ?, updated_at = ?, last_result_status = ?,\n last_result_completed_at = ?, last_result_exit_code = ?, last_result_summary = ?\n WHERE id = ? AND state = 'running' AND active_run_token = ?`, [\n result.status === 'succeeded' ? 'ready' : 'degraded', result.sessionHealth, completedAt, completedAt,\n result.status, completedAt, result.exitCode, result.summary.slice(0, 4096), id, token,\n ]);\n if (changed.changes !== 1) throw new DurableAgentRepositoryError('Print run ownership changed.');\n return this.requireById(id);\n }\n\n async reconcile(): Promise<void> {\n this.assertWritable();\n const running = this.listRaw().filter((agent) => agent.state === 'running' && agent.activeRun);\n for (const snapshot of running) {\n if (this.isActive(snapshot.activeRun!)) continue;\n const completedAt = this.now().toISOString();\n this.db.execute(`UPDATE durable_agents SET\n state = 'degraded', session_health = 'unknown', active_run_token = NULL,\n active_owner_pid = NULL, active_owner_started_at = NULL, active_provider_pid = NULL,\n active_provider_started_at = NULL, active_run_started_at = NULL, updated_at = ?, last_active_at = ?,\n last_result_status = 'interrupted', last_result_completed_at = ?, last_result_exit_code = NULL,\n last_result_summary = 'Previous print run was interrupted.'\n WHERE id = ? AND state = 'running' AND active_run_token = ?\n AND active_owner_started_at = ? AND active_run_started_at = ?`, [\n completedAt, completedAt, completedAt, snapshot.id, snapshot.activeRun!.token,\n snapshot.activeRun!.owner.startedAt, snapshot.activeRun!.startedAt,\n ]);\n }\n }\n\n private immediate<T>(operation: () => T): T {\n this.db.instance.exec('BEGIN IMMEDIATE');\n try {\n const result = operation();\n this.db.instance.exec('COMMIT');\n return result;\n } catch (error) {\n try { this.db.instance.exec('ROLLBACK'); } catch { /* retain original failure */ }\n throw error;\n }\n }\n\n private listRaw(): DurableAgent[] {\n try {\n return this.db.query<DurableAgentRow>(\n 'SELECT * FROM durable_agents ORDER BY updated_at DESC, name COLLATE NOCASE',\n ).map((row) => this.fromRow(row));\n } catch (error) {\n throw this.storageError('Failed to read durable-agent database', error);\n }\n }\n\n private findById(id: string): DurableAgent | null {\n const row = this.db.queryOne<DurableAgentRow>('SELECT * FROM durable_agents WHERE id = ?', [id]);\n return row ? this.fromRow(row) : null;\n }\n\n private requireById(id: string): DurableAgent {\n const agent = this.findById(id);\n if (!agent) throw new DurableAgentNotFoundError(id);\n return agent;\n }\n\n private fromRow(row: DurableAgentRow): DurableAgent {\n if (!['claude', 'codex', 'pi'].includes(row.provider)\n || (row.provider !== 'codex' && row.provider_session_id === null)) {\n throw new DurableAgentRepositoryError(`Invalid durable-agent provider record: ${row.id}`);\n }\n const activeRun: DurableActiveRun | null = row.active_run_token === null ? null : {\n token: row.active_run_token,\n owner: { pid: row.active_owner_pid!, startedAt: row.active_owner_started_at! },\n provider: row.active_provider_pid === null ? null : {\n pid: row.active_provider_pid, startedAt: row.active_provider_started_at!,\n },\n startedAt: row.active_run_started_at!,\n };\n const base = {\n id: row.id, name: row.name, provider: row.provider, mode: row.mode, cwd: row.cwd,\n state: row.state, sessionHealth: row.session_health,\n createdAt: row.created_at, updatedAt: row.updated_at, lastActiveAt: row.last_active_at,\n lastResult: row.last_result_status === null ? null : {\n status: row.last_result_status, completedAt: row.last_result_completed_at!,\n exitCode: row.last_result_exit_code, summary: row.last_result_summary ?? '',\n },\n activeRun,\n };\n if (row.provider === 'claude') {\n return { ...base, provider: 'claude', providerSessionId: row.provider_session_id! };\n }\n if (row.provider === 'pi') {\n return { ...base, provider: 'pi', providerSessionId: row.provider_session_id! };\n }\n return { ...base, provider: 'codex', providerSessionId: row.provider_session_id };\n }\n\n private canonicalDirectory(input: string): string {\n try {\n const resolved = fs.realpathSync(input);\n if (!fs.statSync(resolved).isDirectory()) throw new Error('not a directory');\n return resolved;\n } catch {\n throw new DurableAgentRepositoryError(`Durable agent cwd is not an existing directory: ${input}`);\n }\n }\n\n private validateBoundCwd(bound: string): void {\n try {\n const stat = fs.lstatSync(bound);\n if (!stat.isDirectory() || stat.isSymbolicLink() || fs.realpathSync(bound) !== bound) throw new Error('binding changed');\n } catch {\n throw new DurableAgentRepositoryError(`Durable agent cwd binding is no longer safe: ${bound}`);\n }\n }\n\n private isActive(metadata: DurableActiveRun): boolean {\n return this.sameProcess(metadata.owner) || (metadata.provider !== null && this.sameProcess(metadata.provider));\n }\n\n private sameProcess(expected: ProcessIdentity): boolean {\n const actual = this.processInspector.getIdentity(expected.pid);\n return actual !== null && actual.startedAt === expected.startedAt;\n }\n\n private assertWritable(): void {\n if (this.readonly) throw new DurableAgentRepositoryError('Durable-agent repository is readonly.');\n }\n\n private storageError(prefix: string, error: unknown): DurableAgentRepositoryError {\n return error instanceof DurableAgentRepositoryError ? error\n : new DurableAgentRepositoryError(`${prefix}: ${(error as Error).message}`);\n }\n}\n"],"names":["fs","randomUUID","DatabaseConnection","DEFAULT_AGENT_REGISTRY_DB_PATH","AGENT_MODES","CodexPrintError","LocalProcessInspector","isUuid","DurableAgentBusyError","DurableAgentNameConflictError","DurableAgentNotFoundError","DurableAgentRepositoryError","DurableAgentRepository","dbPath","now","processInspector","readonly","db","options","Date","error","message","create","input","assertWritable","cwd","canonicalDirectory","timestamp","toISOString","id","provider","providerSessionId","execute","name","DURABLE","test","storageError","requireById","list","reconcile","listRaw","getById","findById","resolve","reference","agents","byId","find","agent","matches","filter","toLowerCase","length","acquireRun","snapshot","validateBoundCwd","observed","activeRun","observedLive","isActive","owner","getIdentity","process","pid","token","startedAt","recovered","immediate","current","state","changed","changes","lastResult","status","recordProviderProcess","identity","bindProviderSession","completeRun","result","completedAt","sessionHealth","exitCode","summary","slice","running","operation","instance","exec","query","map","row","fromRow","queryOne","includes","provider_session_id","active_run_token","active_owner_pid","active_owner_started_at","active_provider_pid","active_provider_started_at","active_run_started_at","base","mode","session_health","createdAt","created_at","updatedAt","updated_at","lastActiveAt","last_active_at","last_result_status","last_result_completed_at","last_result_exit_code","last_result_summary","resolved","realpathSync","statSync","isDirectory","Error","bound","stat","lstatSync","isSymbolicLink","metadata","sameProcess","expected","actual","prefix"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/durable/DurableAgentRepository.ts"],"sourcesContent":["import fs from \"fs\";\nimport { randomUUID } from \"crypto\";\nimport { DatabaseConnection, DEFAULT_AGENT_REGISTRY_DB_PATH } from \"../database/index.js\";\nimport {\n AGENT_MODES,\n CodexPrintError,\n type DurableActiveRun,\n type DurableAgent,\n type DurableProvider,\n type ProcessIdentity,\n type DurableRunStatus,\n type DurableSessionHealth,\n} from \"./DurableAgent.js\";\nimport { LocalProcessInspector, type ProcessInspector } from \"./process.js\";\nimport { isUuid } from \"./utils.js\";\nimport {\n DurableAgentBusyError,\n DurableAgentNameConflictError,\n DurableAgentNotFoundError,\n DurableAgentRepositoryError,\n} from \"./DurableAgent.js\";\n\ninterface DurableAgentRow {\n id: string;\n name: string;\n provider: DurableProvider;\n mode: typeof AGENT_MODES.DURABLE;\n cwd: string;\n provider_session_id: string | null;\n state: DurableAgent[\"state\"];\n session_health: DurableSessionHealth;\n created_at: string;\n updated_at: string;\n last_active_at: string | null;\n last_result_status: DurableRunStatus | null;\n last_result_completed_at: string | null;\n last_result_exit_code: number | null;\n last_result_summary: string | null;\n active_run_token: string | null;\n active_owner_pid: number | null;\n active_owner_started_at: string | null;\n active_provider_pid: number | null;\n active_provider_started_at: string | null;\n active_run_started_at: string | null;\n}\n\nexport interface CreateDurableAgentInput {\n name: string;\n cwd: string;\n provider?: DurableProvider;\n}\n\nexport interface DurableAgentRepositoryOptions {\n dbPath?: string;\n readonly?: boolean;\n /** @deprecated SQLite busy_timeout replaces filesystem lock polling. */\n lockTimeoutMs?: number;\n now?: () => Date;\n processInspector?: ProcessInspector;\n /** @deprecated Active ownership is committed atomically. */\n incompleteLockGraceMs?: number;\n /** @deprecated SQLite transactions replace mutation lock directories. */\n mutationLockStaleMs?: number;\n}\n\nexport { LocalProcessInspector } from \"./process.js\";\nexport type { ProcessInspector } from \"./process.js\";\nexport interface DurableRunCompletion {\n status: DurableRunStatus;\n exitCode: number | null;\n summary: string;\n sessionHealth: DurableSessionHealth;\n}\n\nexport class DurableAgentRepository {\n readonly dbPath: string;\n private readonly now: () => Date;\n private readonly processInspector: ProcessInspector;\n private readonly readonly: boolean;\n private readonly db: DatabaseConnection;\n\n constructor(options: DurableAgentRepositoryOptions = {}) {\n this.dbPath = options.dbPath ?? DEFAULT_AGENT_REGISTRY_DB_PATH;\n this.now = options.now ?? (() => new Date());\n this.processInspector = options.processInspector ?? new LocalProcessInspector();\n this.readonly = options.readonly ?? false;\n try {\n this.db = new DatabaseConnection({ dbPath: this.dbPath, readonly: this.readonly });\n } catch (error) {\n if (error instanceof DurableAgentRepositoryError) throw error;\n throw new DurableAgentRepositoryError(\n `Cannot open durable-agent database: ${(error as Error).message}`,\n );\n }\n }\n\n async create(input: CreateDurableAgentInput): Promise<DurableAgent> {\n this.assertWritable();\n const cwd = this.canonicalDirectory(input.cwd);\n const timestamp = this.now().toISOString();\n const id = randomUUID();\n const provider = input.provider ?? \"claude\";\n let providerSessionId = provider === \"codex\" ? null : randomUUID();\n while (providerSessionId === id) providerSessionId = randomUUID();\n try {\n this.db.execute(\n `INSERT INTO durable_agents (\n id, name, provider, mode, cwd, provider_session_id, state, session_health, created_at, updated_at\n ) VALUES (?, ?, ?, ?, ?, ?, 'ready', 'uninitialized', ?, ?)`,\n [\n id,\n input.name,\n provider,\n AGENT_MODES.DURABLE,\n cwd,\n providerSessionId,\n timestamp,\n timestamp,\n ],\n );\n } catch (error) {\n if (/UNIQUE constraint failed: durable_agents\\.name/i.test((error as Error).message)) {\n throw new DurableAgentNameConflictError(input.name);\n }\n throw this.storageError(\"Failed to create durable agent\", error);\n }\n return this.requireById(id);\n }\n\n async list(): Promise<DurableAgent[]> {\n if (!this.readonly) await this.reconcile();\n return this.listRaw();\n }\n\n async getById(id: string): Promise<DurableAgent | null> {\n if (!this.readonly) await this.reconcile();\n return this.findById(id);\n }\n\n async resolve(reference: string): Promise<DurableAgent | DurableAgent[] | null> {\n const agents = await this.list();\n const byId = agents.find((agent) => agent.id === reference);\n if (byId) return byId;\n const matches = agents.filter((agent) => agent.name.toLowerCase() === reference.toLowerCase());\n return matches.length === 0 ? null : matches.length === 1 ? matches[0]! : matches;\n }\n\n async acquireRun(id: string): Promise<{ agent: DurableAgent; token: string }> {\n this.assertWritable();\n const snapshot = this.findById(id);\n if (!snapshot) throw new DurableAgentNotFoundError(id);\n this.validateBoundCwd(snapshot.cwd);\n const observed = snapshot.activeRun;\n const observedLive = observed ? this.isActive(observed) : false;\n if (observedLive) throw new DurableAgentBusyError(id, snapshot.name);\n const owner = this.processInspector.getIdentity(process.pid);\n if (!owner)\n throw new DurableAgentRepositoryError(\"Cannot determine the current process identity.\");\n const token = randomUUID();\n const startedAt = this.now().toISOString();\n let recovered = false;\n try {\n this.immediate(() => {\n const current = this.findById(id);\n if (!current) throw new DurableAgentNotFoundError(id);\n if (current.state === \"running\") {\n if (!observed || current.activeRun?.token !== observed.token || observedLive) {\n throw new DurableAgentBusyError(id, current.name);\n }\n recovered = true;\n }\n const changed = this.db.execute(\n `UPDATE durable_agents SET\n state = 'running', active_run_token = ?, active_owner_pid = ?, active_owner_started_at = ?,\n active_provider_pid = NULL, active_provider_started_at = NULL, active_run_started_at = ?, updated_at = ?,\n session_health = CASE WHEN state = 'running' THEN 'unknown' ELSE session_health END,\n last_result_status = CASE WHEN state = 'running' THEN 'interrupted' ELSE last_result_status END,\n last_result_completed_at = CASE WHEN state = 'running' THEN ? ELSE last_result_completed_at END,\n last_result_exit_code = CASE WHEN state = 'running' THEN NULL ELSE last_result_exit_code END,\n last_result_summary = CASE WHEN state = 'running' THEN 'Previous print run was interrupted.' ELSE last_result_summary END\n WHERE id = ? AND (state <> 'running' OR (\n active_run_token = ? AND active_owner_started_at = ? AND active_run_started_at = ?\n ))\n `,\n [\n token,\n owner.pid,\n owner.startedAt,\n startedAt,\n startedAt,\n startedAt,\n id,\n observed?.token ?? null,\n observed?.owner.startedAt ?? null,\n observed?.startedAt ?? null,\n ],\n );\n if (changed.changes !== 1) throw new DurableAgentBusyError(id, current.name);\n });\n } catch (error) {\n if (error instanceof DurableAgentBusyError || error instanceof DurableAgentNotFoundError)\n throw error;\n if (/busy|locked/i.test((error as Error).message))\n throw new DurableAgentBusyError(id, snapshot.name);\n throw this.storageError(\"Failed to acquire durable-agent run\", error);\n }\n const agent = this.requireById(id);\n if (recovered && agent.lastResult?.status !== \"interrupted\") {\n throw new DurableAgentRepositoryError(\"Failed to record interrupted print run.\");\n }\n return { agent, token };\n }\n\n async recordProviderProcess(id: string, token: string, identity: ProcessIdentity): Promise<void> {\n this.assertWritable();\n const changed = this.db.execute(\n `UPDATE durable_agents SET\n active_provider_pid = ?, active_provider_started_at = ?, updated_at = ?\n WHERE id = ? AND state = 'running' AND active_run_token = ?`,\n [identity.pid, identity.startedAt, this.now().toISOString(), id, token],\n );\n if (changed.changes !== 1)\n throw new DurableAgentRepositoryError(\"Print run ownership changed.\");\n }\n\n async bindProviderSession(\n id: string,\n token: string,\n providerSessionId: string,\n ): Promise<DurableAgent> {\n this.assertWritable();\n if (!isUuid(providerSessionId)) {\n throw new DurableAgentRepositoryError(\"Invalid provider session id.\");\n }\n try {\n this.immediate(() => {\n const agent = this.findById(id);\n if (!agent) throw new DurableAgentNotFoundError(id);\n if (agent.provider !== \"codex\") {\n throw new DurableAgentRepositoryError(\n \"Only Codex durable sessions can be bound after creation.\",\n );\n }\n if (agent.activeRun?.token !== token) {\n throw new DurableAgentRepositoryError(\"Print run ownership changed.\");\n }\n if (agent.providerSessionId !== null && agent.providerSessionId !== providerSessionId) {\n throw new CodexPrintError(\n \"Durable agent provider session identity does not match.\",\n \"CODEX_SESSION_MISMATCH\",\n );\n }\n if (agent.providerSessionId === providerSessionId) return;\n const changed = this.db.execute(\n `UPDATE durable_agents SET provider_session_id = ?, updated_at = ?\n WHERE id = ? AND provider = 'codex' AND state = 'running' AND active_run_token = ?\n AND provider_session_id IS NULL`,\n [providerSessionId, this.now().toISOString(), id, token],\n );\n if (changed.changes !== 1)\n throw new DurableAgentRepositoryError(\"Print run ownership changed.\");\n });\n } catch (error) {\n if (\n error instanceof DurableAgentRepositoryError ||\n error instanceof DurableAgentNotFoundError ||\n error instanceof CodexPrintError\n )\n throw error;\n if (\n /UNIQUE constraint failed: durable_agents\\.provider_session_id/i.test(\n (error as Error).message,\n )\n ) {\n throw new CodexPrintError(\n \"Provider session is already bound to another durable agent.\",\n \"CODEX_SESSION_MISMATCH\",\n );\n }\n throw this.storageError(\"Failed to bind durable-agent provider session\", error);\n }\n return this.requireById(id);\n }\n\n async completeRun(\n id: string,\n token: string,\n result: DurableRunCompletion,\n ): Promise<DurableAgent> {\n this.assertWritable();\n const completedAt = this.now().toISOString();\n const changed = this.db.execute(\n `UPDATE durable_agents SET\n state = ?, session_health = ?, active_run_token = NULL, active_owner_pid = NULL,\n active_owner_started_at = NULL, active_provider_pid = NULL, active_provider_started_at = NULL,\n active_run_started_at = NULL, last_active_at = ?, updated_at = ?, last_result_status = ?,\n last_result_completed_at = ?, last_result_exit_code = ?, last_result_summary = ?\n WHERE id = ? AND state = 'running' AND active_run_token = ?`,\n [\n result.status === \"succeeded\" ? \"ready\" : \"degraded\",\n result.sessionHealth,\n completedAt,\n completedAt,\n result.status,\n completedAt,\n result.exitCode,\n result.summary.slice(0, 4096),\n id,\n token,\n ],\n );\n if (changed.changes !== 1)\n throw new DurableAgentRepositoryError(\"Print run ownership changed.\");\n return this.requireById(id);\n }\n\n async reconcile(): Promise<void> {\n this.assertWritable();\n const running = this.listRaw().filter((agent) => agent.state === \"running\" && agent.activeRun);\n for (const snapshot of running) {\n if (this.isActive(snapshot.activeRun!)) continue;\n const completedAt = this.now().toISOString();\n this.db.execute(\n `UPDATE durable_agents SET\n state = 'degraded', session_health = 'unknown', active_run_token = NULL,\n active_owner_pid = NULL, active_owner_started_at = NULL, active_provider_pid = NULL,\n active_provider_started_at = NULL, active_run_started_at = NULL, updated_at = ?, last_active_at = ?,\n last_result_status = 'interrupted', last_result_completed_at = ?, last_result_exit_code = NULL,\n last_result_summary = 'Previous print run was interrupted.'\n WHERE id = ? AND state = 'running' AND active_run_token = ?\n AND active_owner_started_at = ? AND active_run_started_at = ?`,\n [\n completedAt,\n completedAt,\n completedAt,\n snapshot.id,\n snapshot.activeRun!.token,\n snapshot.activeRun!.owner.startedAt,\n snapshot.activeRun!.startedAt,\n ],\n );\n }\n }\n\n private immediate<T>(operation: () => T): T {\n this.db.instance.exec(\"BEGIN IMMEDIATE\");\n try {\n const result = operation();\n this.db.instance.exec(\"COMMIT\");\n return result;\n } catch (error) {\n try {\n this.db.instance.exec(\"ROLLBACK\");\n } catch {\n /* retain original failure */\n }\n throw error;\n }\n }\n\n private listRaw(): DurableAgent[] {\n try {\n return this.db\n .query<DurableAgentRow>(\n \"SELECT * FROM durable_agents ORDER BY updated_at DESC, name COLLATE NOCASE\",\n )\n .map((row) => this.fromRow(row));\n } catch (error) {\n throw this.storageError(\"Failed to read durable-agent database\", error);\n }\n }\n\n private findById(id: string): DurableAgent | null {\n const row = this.db.queryOne<DurableAgentRow>(\"SELECT * FROM durable_agents WHERE id = ?\", [\n id,\n ]);\n return row ? this.fromRow(row) : null;\n }\n\n private requireById(id: string): DurableAgent {\n const agent = this.findById(id);\n if (!agent) throw new DurableAgentNotFoundError(id);\n return agent;\n }\n\n private fromRow(row: DurableAgentRow): DurableAgent {\n if (\n ![\"claude\", \"codex\", \"pi\"].includes(row.provider) ||\n (row.provider !== \"codex\" && row.provider_session_id === null)\n ) {\n throw new DurableAgentRepositoryError(`Invalid durable-agent provider record: ${row.id}`);\n }\n const activeRun: DurableActiveRun | null =\n row.active_run_token === null\n ? null\n : {\n token: row.active_run_token,\n owner: { pid: row.active_owner_pid!, startedAt: row.active_owner_started_at! },\n provider:\n row.active_provider_pid === null\n ? null\n : {\n pid: row.active_provider_pid,\n startedAt: row.active_provider_started_at!,\n },\n startedAt: row.active_run_started_at!,\n };\n const base = {\n id: row.id,\n name: row.name,\n provider: row.provider,\n mode: row.mode,\n cwd: row.cwd,\n state: row.state,\n sessionHealth: row.session_health,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n lastActiveAt: row.last_active_at,\n lastResult:\n row.last_result_status === null\n ? null\n : {\n status: row.last_result_status,\n completedAt: row.last_result_completed_at!,\n exitCode: row.last_result_exit_code,\n summary: row.last_result_summary ?? \"\",\n },\n activeRun,\n };\n if (row.provider === \"claude\") {\n return { ...base, provider: \"claude\", providerSessionId: row.provider_session_id! };\n }\n if (row.provider === \"pi\") {\n return { ...base, provider: \"pi\", providerSessionId: row.provider_session_id! };\n }\n return { ...base, provider: \"codex\", providerSessionId: row.provider_session_id };\n }\n\n private canonicalDirectory(input: string): string {\n try {\n const resolved = fs.realpathSync(input);\n if (!fs.statSync(resolved).isDirectory()) throw new Error(\"not a directory\");\n return resolved;\n } catch {\n throw new DurableAgentRepositoryError(\n `Durable agent cwd is not an existing directory: ${input}`,\n );\n }\n }\n\n private validateBoundCwd(bound: string): void {\n try {\n const stat = fs.lstatSync(bound);\n if (!stat.isDirectory() || stat.isSymbolicLink() || fs.realpathSync(bound) !== bound)\n throw new Error(\"binding changed\");\n } catch {\n throw new DurableAgentRepositoryError(\n `Durable agent cwd binding is no longer safe: ${bound}`,\n );\n }\n }\n\n private isActive(metadata: DurableActiveRun): boolean {\n return (\n this.sameProcess(metadata.owner) ||\n (metadata.provider !== null && this.sameProcess(metadata.provider))\n );\n }\n\n private sameProcess(expected: ProcessIdentity): boolean {\n const actual = this.processInspector.getIdentity(expected.pid);\n return actual !== null && actual.startedAt === expected.startedAt;\n }\n\n private assertWritable(): void {\n if (this.readonly)\n throw new DurableAgentRepositoryError(\"Durable-agent repository is readonly.\");\n }\n\n private storageError(prefix: string, error: unknown): DurableAgentRepositoryError {\n return error instanceof DurableAgentRepositoryError\n ? error\n : new DurableAgentRepositoryError(`${prefix}: ${(error as Error).message}`);\n }\n}\n"],"names":["fs","randomUUID","DatabaseConnection","DEFAULT_AGENT_REGISTRY_DB_PATH","AGENT_MODES","CodexPrintError","LocalProcessInspector","isUuid","DurableAgentBusyError","DurableAgentNameConflictError","DurableAgentNotFoundError","DurableAgentRepositoryError","DurableAgentRepository","dbPath","now","processInspector","readonly","db","options","Date","error","message","create","input","assertWritable","cwd","canonicalDirectory","timestamp","toISOString","id","provider","providerSessionId","execute","name","DURABLE","test","storageError","requireById","list","reconcile","listRaw","getById","findById","resolve","reference","agents","byId","find","agent","matches","filter","toLowerCase","length","acquireRun","snapshot","validateBoundCwd","observed","activeRun","observedLive","isActive","owner","getIdentity","process","pid","token","startedAt","recovered","immediate","current","state","changed","changes","lastResult","status","recordProviderProcess","identity","bindProviderSession","completeRun","result","completedAt","sessionHealth","exitCode","summary","slice","running","operation","instance","exec","query","map","row","fromRow","queryOne","includes","provider_session_id","active_run_token","active_owner_pid","active_owner_started_at","active_provider_pid","active_provider_started_at","active_run_started_at","base","mode","session_health","createdAt","created_at","updatedAt","updated_at","lastActiveAt","last_active_at","last_result_status","last_result_completed_at","last_result_exit_code","last_result_summary","resolved","realpathSync","statSync","isDirectory","Error","bound","stat","lstatSync","isSymbolicLink","metadata","sameProcess","expected","actual","prefix"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/durable/process.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,gBAAgB;
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/durable/process.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAAC;CAClD;AAED,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;CAmBjD"}
|
package/dist/durable/process.js
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import fs from
|
|
2
|
-
import { execFileSync } from
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import { execFileSync } from "child_process";
|
|
3
3
|
export class LocalProcessInspector {
|
|
4
4
|
getIdentity(pid) {
|
|
5
5
|
if (!Number.isInteger(pid) || pid <= 0) return null;
|
|
6
6
|
try {
|
|
7
|
-
if (process.platform ===
|
|
8
|
-
const stat = fs.readFileSync(`/proc/${pid}/stat`,
|
|
9
|
-
const close = stat.lastIndexOf(
|
|
10
|
-
const fields = stat.slice(close + 2).split(
|
|
7
|
+
if (process.platform === "linux") {
|
|
8
|
+
const stat = fs.readFileSync(`/proc/${pid}/stat`, "utf8");
|
|
9
|
+
const close = stat.lastIndexOf(")");
|
|
10
|
+
const fields = stat.slice(close + 2).split(" ");
|
|
11
11
|
const startTicks = fields[19];
|
|
12
12
|
return startTicks ? {
|
|
13
13
|
pid,
|
|
14
14
|
startedAt: `linux:${startTicks}`
|
|
15
15
|
} : null;
|
|
16
16
|
}
|
|
17
|
-
const startedAt = execFileSync(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
const startedAt = execFileSync("ps", [
|
|
18
|
+
"-o",
|
|
19
|
+
"lstart=",
|
|
20
|
+
"-p",
|
|
21
21
|
String(pid)
|
|
22
22
|
], {
|
|
23
|
-
encoding:
|
|
23
|
+
encoding: "utf8",
|
|
24
24
|
stdio: [
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
"ignore",
|
|
26
|
+
"pipe",
|
|
27
|
+
"ignore"
|
|
28
28
|
]
|
|
29
29
|
}).trim();
|
|
30
30
|
return startedAt ? {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/durable/process.ts"],"sourcesContent":["import fs from
|
|
1
|
+
{"version":3,"sources":["../../src/durable/process.ts"],"sourcesContent":["import fs from \"fs\";\nimport { execFileSync } from \"child_process\";\nimport type { ProcessIdentity } from \"./DurableAgent.js\";\n\nexport interface ProcessInspector {\n getIdentity(pid: number): ProcessIdentity | null;\n}\n\nexport class LocalProcessInspector implements ProcessInspector {\n getIdentity(pid: number): ProcessIdentity | null {\n if (!Number.isInteger(pid) || pid <= 0) return null;\n try {\n if (process.platform === \"linux\") {\n const stat = fs.readFileSync(`/proc/${pid}/stat`, \"utf8\");\n const close = stat.lastIndexOf(\")\");\n const fields = stat.slice(close + 2).split(\" \");\n const startTicks = fields[19];\n return startTicks ? { pid, startedAt: `linux:${startTicks}` } : null;\n }\n const startedAt = execFileSync(\"ps\", [\"-o\", \"lstart=\", \"-p\", String(pid)], {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n }).trim();\n return startedAt ? { pid, startedAt } : null;\n } catch {\n return null;\n }\n }\n}\n"],"names":["fs","execFileSync","LocalProcessInspector","getIdentity","pid","Number","isInteger","process","platform","stat","readFileSync","close","lastIndexOf","fields","slice","split","startTicks","startedAt","String","encoding","stdio","trim"],"mappings":"AAAA,OAAOA,QAAQ,KAAK;AACpB,SAASC,YAAY,QAAQ,gBAAgB;AAO7C,OAAO,MAAMC;IACXC,YAAYC,GAAW,EAA0B;QAC/C,IAAI,CAACC,OAAOC,SAAS,CAACF,QAAQA,OAAO,GAAG,OAAO;QAC/C,IAAI;YACF,IAAIG,QAAQC,QAAQ,KAAK,SAAS;gBAChC,MAAMC,OAAOT,GAAGU,YAAY,CAAC,CAAC,MAAM,EAAEN,IAAI,KAAK,CAAC,EAAE;gBAClD,MAAMO,QAAQF,KAAKG,WAAW,CAAC;gBAC/B,MAAMC,SAASJ,KAAKK,KAAK,CAACH,QAAQ,GAAGI,KAAK,CAAC;gBAC3C,MAAMC,aAAaH,MAAM,CAAC,GAAG;gBAC7B,OAAOG,aAAa;oBAAEZ;oBAAKa,WAAW,CAAC,MAAM,EAAED,YAAY;gBAAC,IAAI;YAClE;YACA,MAAMC,YAAYhB,aAAa,MAAM;gBAAC;gBAAM;gBAAW;gBAAMiB,OAAOd;aAAK,EAAE;gBACzEe,UAAU;gBACVC,OAAO;oBAAC;oBAAU;oBAAQ;iBAAS;YACrC,GAAGC,IAAI;YACP,OAAOJ,YAAY;gBAAEb;gBAAKa;YAAU,IAAI;QAC1C,EAAE,OAAM;YACN,OAAO;QACT;IACF;AACF"}
|
package/dist/durable/run.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { DurableAgent, DurableProvider } from
|
|
2
|
-
import type { DurableRunCompletion } from
|
|
1
|
+
import type { DurableAgent, DurableProvider } from "./DurableAgent.js";
|
|
2
|
+
import type { DurableRunCompletion } from "./DurableAgentRepository.js";
|
|
3
3
|
export interface DurableRunRepository {
|
|
4
4
|
resolve(reference: string): Promise<DurableAgent | DurableAgent[] | null>;
|
|
5
5
|
acquireRun(id: string): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/durable/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAKxE,MAAM,WAAW,oBAAoB;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/durable/run.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAKxE,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,YAAY,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1E,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC7F;AAED,KAAK,aAAa,CAAC,QAAQ,SAAS,eAAe,IAAI,OAAO,CAC5D,YAAY,EACZ;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,CACvB,CAAC;AAEF,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,iBAAiB,CAAC,QAAQ,SAAS,eAAe,EAAE,MAAM,SAAS,gBAAgB;IAC3F,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,oBAAoB,CAAC;IACjC,cAAc,IAAI,KAAK,CAAC;IACxB,aAAa,IAAI,KAAK,CAAC;IACvB,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;CAC5C;AAED,wBAAsB,eAAe,CACnC,QAAQ,SAAS,eAAe,EAChC,MAAM,SAAS,gBAAgB,EAE/B,OAAO,EAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,GAC3C,OAAO,CAAC;IAAE,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CA0B7D"}
|
package/dist/durable/run.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DurableAgentNotFoundError } from
|
|
2
|
-
import { sanitizeText } from
|
|
1
|
+
import { DurableAgentNotFoundError } from "./DurableAgent.js";
|
|
2
|
+
import { sanitizeText } from "./utils.js";
|
|
3
3
|
const MAX_RESULT_SUMMARY_LENGTH = 4096;
|
|
4
4
|
export async function runDurableAgent(options) {
|
|
5
5
|
const resolved = await options.repository.resolve(options.reference);
|
|
@@ -23,23 +23,23 @@ export async function runDurableAgent(options) {
|
|
|
23
23
|
}
|
|
24
24
|
function createSucceededCompletion(result) {
|
|
25
25
|
return {
|
|
26
|
-
status:
|
|
26
|
+
status: "succeeded",
|
|
27
27
|
exitCode: result.exitCode,
|
|
28
28
|
summary: sanitizeText(result.result, MAX_RESULT_SUMMARY_LENGTH, {
|
|
29
29
|
preserveFormatting: true
|
|
30
30
|
}),
|
|
31
|
-
sessionHealth:
|
|
31
|
+
sessionHealth: "healthy"
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
34
|
function createFailedCompletion(error, sessionMismatch) {
|
|
35
35
|
const message = error instanceof Error ? error.message : String(error);
|
|
36
36
|
return {
|
|
37
|
-
status:
|
|
37
|
+
status: "failed",
|
|
38
38
|
exitCode: null,
|
|
39
39
|
summary: sanitizeText(message, MAX_RESULT_SUMMARY_LENGTH, {
|
|
40
40
|
preserveFormatting: true
|
|
41
41
|
}),
|
|
42
|
-
sessionHealth: sessionMismatch ?
|
|
42
|
+
sessionHealth: sessionMismatch ? "mismatch" : "unknown"
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
45
|
|
package/dist/durable/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/durable/run.ts"],"sourcesContent":["import type { DurableAgent, DurableProvider } from
|
|
1
|
+
{"version":3,"sources":["../../src/durable/run.ts"],"sourcesContent":["import type { DurableAgent, DurableProvider } from \"./DurableAgent.js\";\nimport { DurableAgentNotFoundError } from \"./DurableAgent.js\";\nimport type { DurableRunCompletion } from \"./DurableAgentRepository.js\";\nimport { sanitizeText } from \"./utils.js\";\n\nconst MAX_RESULT_SUMMARY_LENGTH = 4096;\n\nexport interface DurableRunRepository {\n resolve(reference: string): Promise<DurableAgent | DurableAgent[] | null>;\n acquireRun(id: string): Promise<{ agent: DurableAgent; token: string }>;\n completeRun(id: string, token: string, result: DurableRunCompletion): Promise<DurableAgent>;\n}\n\ntype ProviderAgent<Provider extends DurableProvider> = Extract<\n DurableAgent,\n { provider: Provider }\n>;\n\ninterface DurableRunResult {\n result: string;\n exitCode: number;\n}\n\ninterface DurableRunOptions<Provider extends DurableProvider, Result extends DurableRunResult> {\n reference: string;\n provider: Provider;\n repository: DurableRunRepository;\n ambiguousError(): Error;\n providerError(): Error;\n execute(agent: ProviderAgent<Provider>, token: string): Promise<Result>;\n isSessionMismatch(error: unknown): boolean;\n}\n\nexport async function runDurableAgent<\n Provider extends DurableProvider,\n Result extends DurableRunResult,\n>(\n options: DurableRunOptions<Provider, Result>,\n): Promise<{ agent: ProviderAgent<Provider>; result: Result }> {\n const resolved = await options.repository.resolve(options.reference);\n if (!resolved) throw new DurableAgentNotFoundError(options.reference);\n if (Array.isArray(resolved)) throw options.ambiguousError();\n if (resolved.provider !== options.provider) throw options.providerError();\n\n const target = resolved as ProviderAgent<Provider>;\n const acquired = await options.repository.acquireRun(target.id);\n let result: Result;\n try {\n result = await options.execute(acquired.agent as ProviderAgent<Provider>, acquired.token);\n } catch (error) {\n await options.repository.completeRun(\n target.id,\n acquired.token,\n createFailedCompletion(error, options.isSessionMismatch(error)),\n );\n throw error;\n }\n\n await options.repository.completeRun(\n target.id,\n acquired.token,\n createSucceededCompletion(result),\n );\n return { agent: target, result };\n}\n\nfunction createSucceededCompletion(result: DurableRunResult): DurableRunCompletion {\n return {\n status: \"succeeded\",\n exitCode: result.exitCode,\n summary: sanitizeText(result.result, MAX_RESULT_SUMMARY_LENGTH, { preserveFormatting: true }),\n sessionHealth: \"healthy\",\n };\n}\n\nfunction createFailedCompletion(error: unknown, sessionMismatch: boolean): DurableRunCompletion {\n const message = error instanceof Error ? error.message : String(error);\n return {\n status: \"failed\",\n exitCode: null,\n summary: sanitizeText(message, MAX_RESULT_SUMMARY_LENGTH, { preserveFormatting: true }),\n sessionHealth: sessionMismatch ? \"mismatch\" : \"unknown\",\n };\n}\n"],"names":["DurableAgentNotFoundError","sanitizeText","MAX_RESULT_SUMMARY_LENGTH","runDurableAgent","options","resolved","repository","resolve","reference","Array","isArray","ambiguousError","provider","providerError","target","acquired","acquireRun","id","result","execute","agent","token","error","completeRun","createFailedCompletion","isSessionMismatch","createSucceededCompletion","status","exitCode","summary","preserveFormatting","sessionHealth","sessionMismatch","message","Error","String"],"mappings":"AACA,SAASA,yBAAyB,QAAQ,oBAAoB;AAE9D,SAASC,YAAY,QAAQ,aAAa;AAE1C,MAAMC,4BAA4B;AA4BlC,OAAO,eAAeC,gBAIpBC,OAA4C;IAE5C,MAAMC,WAAW,MAAMD,QAAQE,UAAU,CAACC,OAAO,CAACH,QAAQI,SAAS;IACnE,IAAI,CAACH,UAAU,MAAM,IAAIL,0BAA0BI,QAAQI,SAAS;IACpE,IAAIC,MAAMC,OAAO,CAACL,WAAW,MAAMD,QAAQO,cAAc;IACzD,IAAIN,SAASO,QAAQ,KAAKR,QAAQQ,QAAQ,EAAE,MAAMR,QAAQS,aAAa;IAEvE,MAAMC,SAAST;IACf,MAAMU,WAAW,MAAMX,QAAQE,UAAU,CAACU,UAAU,CAACF,OAAOG,EAAE;IAC9D,IAAIC;IACJ,IAAI;QACFA,SAAS,MAAMd,QAAQe,OAAO,CAACJ,SAASK,KAAK,EAA6BL,SAASM,KAAK;IAC1F,EAAE,OAAOC,OAAO;QACd,MAAMlB,QAAQE,UAAU,CAACiB,WAAW,CAClCT,OAAOG,EAAE,EACTF,SAASM,KAAK,EACdG,uBAAuBF,OAAOlB,QAAQqB,iBAAiB,CAACH;QAE1D,MAAMA;IACR;IAEA,MAAMlB,QAAQE,UAAU,CAACiB,WAAW,CAClCT,OAAOG,EAAE,EACTF,SAASM,KAAK,EACdK,0BAA0BR;IAE5B,OAAO;QAAEE,OAAON;QAAQI;IAAO;AACjC;AAEA,SAASQ,0BAA0BR,MAAwB;IACzD,OAAO;QACLS,QAAQ;QACRC,UAAUV,OAAOU,QAAQ;QACzBC,SAAS5B,aAAaiB,OAAOA,MAAM,EAAEhB,2BAA2B;YAAE4B,oBAAoB;QAAK;QAC3FC,eAAe;IACjB;AACF;AAEA,SAASP,uBAAuBF,KAAc,EAAEU,eAAwB;IACtE,MAAMC,UAAUX,iBAAiBY,QAAQZ,MAAMW,OAAO,GAAGE,OAAOb;IAChE,OAAO;QACLK,QAAQ;QACRC,UAAU;QACVC,SAAS5B,aAAagC,SAAS/B,2BAA2B;YAAE4B,oBAAoB;QAAK;QACrFC,eAAeC,kBAAkB,aAAa;IAChD;AACF"}
|
package/dist/durable/utils.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/durable/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAEpE,MAAM,WAAW,gBAAgB;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/durable/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAEpE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;CAC/B;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,8BAA8B,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAK3B;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAO,GAC7C,MAAM,CASR;AAID,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE7C;AAED,qBAAa,UAAU;IAInB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IAJ3C,OAAO,CAAC,MAAM,CAAmB;gBAGd,YAAY,EAAE,MAAM,EACpB,wBAAwB,EAAE,MAAM,KAAK;IAGxD,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE;IAiBxC,cAAc,CAAC,yBAAyB,EAAE,MAAM,KAAK,GAAG,IAAI;CAG7D"}
|
package/dist/durable/utils.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export function waitForChildClose(child) {
|
|
2
2
|
return new Promise((resolve, reject)=>{
|
|
3
|
-
child.once(
|
|
4
|
-
child.once(
|
|
3
|
+
child.once("error", reject);
|
|
4
|
+
child.once("close", (code, signal)=>resolve({
|
|
5
5
|
code,
|
|
6
6
|
signal
|
|
7
7
|
}));
|
|
@@ -11,8 +11,8 @@ export function sanitizeText(value, max, options = {}) {
|
|
|
11
11
|
return Array.from(value, (character)=>{
|
|
12
12
|
const code = character.charCodeAt(0);
|
|
13
13
|
if (options.preserveFormatting && (code === 9 || code === 10 || code === 13)) return character;
|
|
14
|
-
return code <= 31 || code === 127 ?
|
|
15
|
-
}).join(
|
|
14
|
+
return code <= 31 || code === 127 ? " " : character;
|
|
15
|
+
}).join("").trim().slice(0, max);
|
|
16
16
|
}
|
|
17
17
|
const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
18
18
|
export function isUuid(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/durable/utils.ts"],"sourcesContent":["import type { ChildProcessWithoutNullStreams } from
|
|
1
|
+
{"version":3,"sources":["../../src/durable/utils.ts"],"sourcesContent":["import type { ChildProcessWithoutNullStreams } from \"child_process\";\n\nexport interface ChildCloseResult {\n code: number | null;\n signal: NodeJS.Signals | null;\n}\n\nexport function waitForChildClose(\n child: ChildProcessWithoutNullStreams,\n): Promise<ChildCloseResult> {\n return new Promise((resolve, reject) => {\n child.once(\"error\", reject);\n child.once(\"close\", (code, signal) => resolve({ code, signal }));\n });\n}\n\nexport function sanitizeText(\n value: string,\n max: number,\n options: { preserveFormatting?: boolean } = {},\n): string {\n return Array.from(value, (character) => {\n const code = character.charCodeAt(0);\n if (options.preserveFormatting && (code === 9 || code === 10 || code === 13)) return character;\n return code <= 31 || code === 127 ? \" \" : character;\n })\n .join(\"\")\n .trim()\n .slice(0, max);\n}\n\nconst UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\nexport function isUuid(value: string): boolean {\n return UUID_PATTERN.test(value);\n}\n\nexport class LineBuffer {\n private buffer = Buffer.alloc(0);\n\n constructor(\n private readonly maxLineBytes: number,\n private readonly createOversizedLineError: () => Error,\n ) {}\n\n accept(chunk: Buffer | string): Buffer[] {\n this.buffer = Buffer.concat([this.buffer, Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)]);\n if (this.buffer.length > this.maxLineBytes && this.buffer.indexOf(0x0a) < 0) {\n throw this.createOversizedLineError();\n }\n\n const lines: Buffer[] = [];\n let newline: number;\n while ((newline = this.buffer.indexOf(0x0a)) >= 0) {\n const line = this.buffer.subarray(0, newline);\n this.buffer = this.buffer.subarray(newline + 1);\n if (line.length > this.maxLineBytes) throw this.createOversizedLineError();\n lines.push(line);\n }\n return lines;\n }\n\n assertComplete(createIncompleteLineError: () => Error): void {\n if (this.buffer.length > 0) throw createIncompleteLineError();\n }\n}\n"],"names":["waitForChildClose","child","Promise","resolve","reject","once","code","signal","sanitizeText","value","max","options","Array","from","character","charCodeAt","preserveFormatting","join","trim","slice","UUID_PATTERN","isUuid","test","LineBuffer","buffer","Buffer","alloc","maxLineBytes","createOversizedLineError","accept","chunk","concat","isBuffer","length","indexOf","lines","newline","line","subarray","push","assertComplete","createIncompleteLineError"],"mappings":"AAOA,OAAO,SAASA,kBACdC,KAAqC;IAErC,OAAO,IAAIC,QAAQ,CAACC,SAASC;QAC3BH,MAAMI,IAAI,CAAC,SAASD;QACpBH,MAAMI,IAAI,CAAC,SAAS,CAACC,MAAMC,SAAWJ,QAAQ;gBAAEG;gBAAMC;YAAO;IAC/D;AACF;AAEA,OAAO,SAASC,aACdC,KAAa,EACbC,GAAW,EACXC,UAA4C,CAAC,CAAC;IAE9C,OAAOC,MAAMC,IAAI,CAACJ,OAAO,CAACK;QACxB,MAAMR,OAAOQ,UAAUC,UAAU,CAAC;QAClC,IAAIJ,QAAQK,kBAAkB,IAAKV,CAAAA,SAAS,KAAKA,SAAS,MAAMA,SAAS,EAAC,GAAI,OAAOQ;QACrF,OAAOR,QAAQ,MAAMA,SAAS,MAAM,MAAMQ;IAC5C,GACGG,IAAI,CAAC,IACLC,IAAI,GACJC,KAAK,CAAC,GAAGT;AACd;AAEA,MAAMU,eAAe;AAErB,OAAO,SAASC,OAAOZ,KAAa;IAClC,OAAOW,aAAaE,IAAI,CAACb;AAC3B;AAEA,OAAO,MAAMc;;;IACHC,SAASC,OAAOC,KAAK,CAAC,GAAG;IAEjC,YACE,AAAiBC,YAAoB,EACrC,AAAiBC,wBAAqC,CACtD;aAFiBD,eAAAA;aACAC,2BAAAA;IAChB;IAEHC,OAAOC,KAAsB,EAAY;QACvC,IAAI,CAACN,MAAM,GAAGC,OAAOM,MAAM,CAAC;YAAC,IAAI,CAACP,MAAM;YAAEC,OAAOO,QAAQ,CAACF,SAASA,QAAQL,OAAOZ,IAAI,CAACiB;SAAO;QAC9F,IAAI,IAAI,CAACN,MAAM,CAACS,MAAM,GAAG,IAAI,CAACN,YAAY,IAAI,IAAI,CAACH,MAAM,CAACU,OAAO,CAAC,QAAQ,GAAG;YAC3E,MAAM,IAAI,CAACN,wBAAwB;QACrC;QAEA,MAAMO,QAAkB,EAAE;QAC1B,IAAIC;QACJ,MAAO,AAACA,CAAAA,UAAU,IAAI,CAACZ,MAAM,CAACU,OAAO,CAAC,KAAI,KAAM,EAAG;YACjD,MAAMG,OAAO,IAAI,CAACb,MAAM,CAACc,QAAQ,CAAC,GAAGF;YACrC,IAAI,CAACZ,MAAM,GAAG,IAAI,CAACA,MAAM,CAACc,QAAQ,CAACF,UAAU;YAC7C,IAAIC,KAAKJ,MAAM,GAAG,IAAI,CAACN,YAAY,EAAE,MAAM,IAAI,CAACC,wBAAwB;YACxEO,MAAMI,IAAI,CAACF;QACb;QACA,OAAOF;IACT;IAEAK,eAAeC,yBAAsC,EAAQ;QAC3D,IAAI,IAAI,CAACjB,MAAM,CAACS,MAAM,GAAG,GAAG,MAAMQ;IACpC;AACF"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,44 +1,47 @@
|
|
|
1
|
-
export { AgentManager, AgentNotRunningError } from
|
|
2
|
-
export { getCodexCapacityReport } from
|
|
3
|
-
export type { CapacityProbeOptions, CapacityReport, CapacityWindow
|
|
4
|
-
export { getAgentReadinessReport, getAgentReadinessReports, worstReadinessStatus, } from
|
|
5
|
-
export type { AgentReadinessOptions, AgentReadinessReport, AuthReadinessCheck, BuiltInSkillsReadinessCheck, DirectoryReadinessCheck, ExecutableReadinessCheck, IntegrationReadinessCheck, ReadinessAgentType, ReadinessAuthState, ReadinessCheck, ReadinessStatus, } from
|
|
6
|
-
export { ClaudeCodeAdapter } from
|
|
7
|
-
export { CodexAdapter } from
|
|
8
|
-
export { CopilotAdapter } from
|
|
9
|
-
export { GeminiCliAdapter } from
|
|
10
|
-
export { GrokCliAdapter } from
|
|
11
|
-
export { OpenCodeAdapter } from
|
|
12
|
-
export { PiAdapter } from
|
|
13
|
-
export { AgentStatus } from
|
|
14
|
-
export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, AgentDetectionContext, } from
|
|
15
|
-
export { TerminalFocusManager, TerminalType } from
|
|
16
|
-
export type { TerminalLocation } from
|
|
17
|
-
export { TtyWriter } from
|
|
18
|
-
export type { ListAgentsOptions } from
|
|
19
|
-
export { AgentRegistry, RenameNotFoundError, RenameConflictError } from
|
|
20
|
-
export type { AgentRegistryOptions, RegistryEntry } from
|
|
21
|
-
export { TmuxManager } from
|
|
22
|
-
export {
|
|
23
|
-
export
|
|
24
|
-
export type {
|
|
25
|
-
export {
|
|
26
|
-
export {
|
|
27
|
-
export type {
|
|
28
|
-
export {
|
|
29
|
-
export
|
|
30
|
-
export {
|
|
31
|
-
export
|
|
32
|
-
export {
|
|
33
|
-
export
|
|
34
|
-
export {
|
|
35
|
-
export
|
|
36
|
-
export {
|
|
37
|
-
export
|
|
38
|
-
export {
|
|
39
|
-
export
|
|
40
|
-
export {
|
|
41
|
-
export
|
|
42
|
-
export {
|
|
43
|
-
export
|
|
1
|
+
export { AgentManager, AgentNotRunningError } from "./AgentManager.js";
|
|
2
|
+
export { getCodexCapacityReport } from "./capacity/index.js";
|
|
3
|
+
export type { CapacityProbeOptions, CapacityReport, CapacityWindow } from "./capacity/index.js";
|
|
4
|
+
export { getAgentReadinessReport, getAgentReadinessReports, worstReadinessStatus, } from "./readiness/AgentReadiness.js";
|
|
5
|
+
export type { AgentReadinessOptions, AgentReadinessReport, AuthReadinessCheck, BuiltInSkillsReadinessCheck, DirectoryReadinessCheck, ExecutableReadinessCheck, IntegrationReadinessCheck, ReadinessAgentType, ReadinessAuthState, ReadinessCheck, ReadinessStatus, } from "./readiness/AgentReadiness.js";
|
|
6
|
+
export { ClaudeCodeAdapter } from "./providers/claude/ClaudeCodeAdapter.js";
|
|
7
|
+
export { CodexAdapter } from "./providers/codex/CodexAdapter.js";
|
|
8
|
+
export { CopilotAdapter } from "./adapters/CopilotAdapter.js";
|
|
9
|
+
export { GeminiCliAdapter } from "./adapters/GeminiCliAdapter.js";
|
|
10
|
+
export { GrokCliAdapter } from "./adapters/GrokCliAdapter.js";
|
|
11
|
+
export { OpenCodeAdapter } from "./adapters/OpenCodeAdapter.js";
|
|
12
|
+
export { PiAdapter } from "./providers/pi/PiAdapter.js";
|
|
13
|
+
export { AgentStatus } from "./adapters/AgentAdapter.js";
|
|
14
|
+
export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, AgentDetectionContext, } from "./adapters/AgentAdapter.js";
|
|
15
|
+
export { TerminalFocusManager, TerminalType } from "./terminal/TerminalFocusManager.js";
|
|
16
|
+
export type { TerminalLocation } from "./terminal/TerminalFocusManager.js";
|
|
17
|
+
export { TtyWriter } from "./terminal/TtyWriter.js";
|
|
18
|
+
export type { ListAgentsOptions } from "./AgentManager.js";
|
|
19
|
+
export { AgentRegistry, RenameNotFoundError, RenameConflictError, AGENT_RUNTIME_PROVIDERS, parseTmuxRuntimeRef, } from "./utils/AgentRegistry.js";
|
|
20
|
+
export type { AgentRegistryOptions, RegistryEntry, AgentRuntimeProvider, TmuxRuntimeRef, } from "./utils/AgentRegistry.js";
|
|
21
|
+
export { TmuxManager } from "./terminal/TmuxManager.js";
|
|
22
|
+
export type { AgentRuntimeAvailability, InteractiveAgentRuntime } from "./runtime/types.js";
|
|
23
|
+
export { startAgent, stopAgent, focusAgent, sendAgentPrompt, TmuxUnavailableError, AgentNameInUseError, AgentPidPollTimeoutError, AgentRuntimeUnavailableError, AgentTerminalNotFoundError, DEFAULT_PID_POLL_INTERVAL_MS, DEFAULT_PID_POLL_TIMEOUT_MS, } from "./runtime/ManagedAgentRuntime.js";
|
|
24
|
+
export type { FocusAgentDeps, StartAgentDeps, StartAgentOptions, StopAgentDeps, StopAgentResult, FocusAgentResult, SendAgentPromptDeps, } from "./runtime/ManagedAgentRuntime.js";
|
|
25
|
+
export { AGENTS } from "./utils/agents.js";
|
|
26
|
+
export type { AgentConfig, StartableAgentType } from "./utils/agents.js";
|
|
27
|
+
export type { AgentRequest } from "./utils/agent-requests.js";
|
|
28
|
+
export { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest, } from "./utils/agent-requests.js";
|
|
29
|
+
export { AGENT_MODES, DurableAgentError, DurableAgentBusyError, DurableAgentNotFoundError, DurableAgentRepositoryError, DurableAgentNameConflictError, ClaudePrintError, CodexPrintError, PiPrintError, } from "./durable/DurableAgent.js";
|
|
30
|
+
export type { DurableAgent, DurableAgentBase, ClaudeDurableAgent, CodexDurableAgent, PiDurableAgent, DurableProvider, CodexPrintErrorCode, DurableAgentState, DurableSessionHealth, DurableRunStatus, DurableActiveRun, DurableLastResult, PiPrintErrorCode, ProcessIdentity, } from "./durable/DurableAgent.js";
|
|
31
|
+
export { DurableAgentRepository } from "./durable/DurableAgentRepository.js";
|
|
32
|
+
export type { CreateDurableAgentInput, DurableAgentRepositoryOptions, ProcessInspector, DurableRunCompletion, } from "./durable/DurableAgentRepository.js";
|
|
33
|
+
export { ClaudePrintAgentService } from "./providers/claude/durable/ClaudePrintAgentService.js";
|
|
34
|
+
export type { ClaudePrintAgentServiceOptions, ClaudePrintSendResult, } from "./providers/claude/durable/ClaudePrintAgentService.js";
|
|
35
|
+
export { CodexCliProbe } from "./providers/codex/durable/CodexCliProbe.js";
|
|
36
|
+
export type { CodexCliProbeOptions } from "./providers/codex/durable/CodexCliProbe.js";
|
|
37
|
+
export { CodexPrintRunner } from "./providers/codex/durable/CodexPrintRunner.js";
|
|
38
|
+
export type { CodexPrintRunnerOptions, CodexPrintRunRequest, CodexPrintRunResult, } from "./providers/codex/durable/CodexPrintRunner.js";
|
|
39
|
+
export { CodexPrintAgentService } from "./providers/codex/durable/CodexPrintAgentService.js";
|
|
40
|
+
export type { CodexPrintAgentServiceOptions, CodexPrintSendResult, } from "./providers/codex/durable/CodexPrintAgentService.js";
|
|
41
|
+
export { PiCliProbe } from "./providers/pi/durable/PiCliProbe.js";
|
|
42
|
+
export type { PiCliProbeOptions } from "./providers/pi/durable/PiCliProbe.js";
|
|
43
|
+
export { PiPrintRunner } from "./providers/pi/durable/PiPrintRunner.js";
|
|
44
|
+
export type { PiPrintRunnerOptions, PiPrintRunRequest, PiPrintRunResult, } from "./providers/pi/durable/PiPrintRunner.js";
|
|
45
|
+
export { PiPrintAgentService } from "./providers/pi/durable/PiPrintAgentService.js";
|
|
46
|
+
export type { PiPrintAgentServiceOptions, PiPrintSendResult, } from "./providers/pi/durable/PiPrintAgentService.js";
|
|
44
47
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,28 +1,29 @@
|
|
|
1
|
-
export { AgentManager, AgentNotRunningError } from
|
|
2
|
-
export { getCodexCapacityReport } from
|
|
3
|
-
export { getAgentReadinessReport, getAgentReadinessReports, worstReadinessStatus } from
|
|
4
|
-
export { ClaudeCodeAdapter } from
|
|
5
|
-
export { CodexAdapter } from
|
|
6
|
-
export { CopilotAdapter } from
|
|
7
|
-
export { GeminiCliAdapter } from
|
|
8
|
-
export { GrokCliAdapter } from
|
|
9
|
-
export { OpenCodeAdapter } from
|
|
10
|
-
export { PiAdapter } from
|
|
11
|
-
export { AgentStatus } from
|
|
12
|
-
export { TerminalFocusManager, TerminalType } from
|
|
13
|
-
export { TtyWriter } from
|
|
14
|
-
export { AgentRegistry, RenameNotFoundError, RenameConflictError } from
|
|
15
|
-
export { TmuxManager } from
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
export {
|
|
20
|
-
export {
|
|
21
|
-
export {
|
|
22
|
-
export {
|
|
23
|
-
export {
|
|
24
|
-
export {
|
|
25
|
-
export {
|
|
26
|
-
export {
|
|
1
|
+
export { AgentManager, AgentNotRunningError } from "./AgentManager.js";
|
|
2
|
+
export { getCodexCapacityReport } from "./capacity/index.js";
|
|
3
|
+
export { getAgentReadinessReport, getAgentReadinessReports, worstReadinessStatus } from "./readiness/AgentReadiness.js";
|
|
4
|
+
export { ClaudeCodeAdapter } from "./providers/claude/ClaudeCodeAdapter.js";
|
|
5
|
+
export { CodexAdapter } from "./providers/codex/CodexAdapter.js";
|
|
6
|
+
export { CopilotAdapter } from "./adapters/CopilotAdapter.js";
|
|
7
|
+
export { GeminiCliAdapter } from "./adapters/GeminiCliAdapter.js";
|
|
8
|
+
export { GrokCliAdapter } from "./adapters/GrokCliAdapter.js";
|
|
9
|
+
export { OpenCodeAdapter } from "./adapters/OpenCodeAdapter.js";
|
|
10
|
+
export { PiAdapter } from "./providers/pi/PiAdapter.js";
|
|
11
|
+
export { AgentStatus } from "./adapters/AgentAdapter.js";
|
|
12
|
+
export { TerminalFocusManager, TerminalType } from "./terminal/TerminalFocusManager.js";
|
|
13
|
+
export { TtyWriter } from "./terminal/TtyWriter.js";
|
|
14
|
+
export { AgentRegistry, RenameNotFoundError, RenameConflictError, AGENT_RUNTIME_PROVIDERS, parseTmuxRuntimeRef } from "./utils/AgentRegistry.js";
|
|
15
|
+
export { TmuxManager } from "./terminal/TmuxManager.js";
|
|
16
|
+
export { startAgent, stopAgent, focusAgent, sendAgentPrompt, TmuxUnavailableError, AgentNameInUseError, AgentPidPollTimeoutError, AgentRuntimeUnavailableError, AgentTerminalNotFoundError, DEFAULT_PID_POLL_INTERVAL_MS, DEFAULT_PID_POLL_TIMEOUT_MS } from "./runtime/ManagedAgentRuntime.js";
|
|
17
|
+
export { AGENTS } from "./utils/agents.js";
|
|
18
|
+
export { getAgentRequestPath, readLatestAgentRequest, writeAgentRequest } from "./utils/agent-requests.js";
|
|
19
|
+
export { AGENT_MODES, DurableAgentError, DurableAgentBusyError, DurableAgentNotFoundError, DurableAgentRepositoryError, DurableAgentNameConflictError, ClaudePrintError, CodexPrintError, PiPrintError } from "./durable/DurableAgent.js";
|
|
20
|
+
export { DurableAgentRepository } from "./durable/DurableAgentRepository.js";
|
|
21
|
+
export { ClaudePrintAgentService } from "./providers/claude/durable/ClaudePrintAgentService.js";
|
|
22
|
+
export { CodexCliProbe } from "./providers/codex/durable/CodexCliProbe.js";
|
|
23
|
+
export { CodexPrintRunner } from "./providers/codex/durable/CodexPrintRunner.js";
|
|
24
|
+
export { CodexPrintAgentService } from "./providers/codex/durable/CodexPrintAgentService.js";
|
|
25
|
+
export { PiCliProbe } from "./providers/pi/durable/PiCliProbe.js";
|
|
26
|
+
export { PiPrintRunner } from "./providers/pi/durable/PiPrintRunner.js";
|
|
27
|
+
export { PiPrintAgentService } from "./providers/pi/durable/PiPrintAgentService.js";
|
|
27
28
|
|
|
28
29
|
//# sourceMappingURL=index.js.map
|