@ai-devkit/agent-manager 0.31.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 +301 -0
- package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -0
- 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 -41
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -25
- 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 +67 -0
- package/dist/readiness/AgentReadiness.d.ts.map +1 -0
- package/dist/readiness/AgentReadiness.js +614 -0
- package/dist/readiness/AgentReadiness.js.map +1 -0
- 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 +242 -0
- 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 +145 -86
- 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 +727 -0
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/readiness/AgentReadiness.ts"],"sourcesContent":["import { constants } from \"node:fs\";\nimport { access as fsAccess, readFile as fsReadFile } from \"node:fs/promises\";\nimport { execFile } from \"node:child_process\";\nimport { delimiter, join } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { getCodexCapacityReport } from \"../capacity/index.js\";\nimport { AGENTS, type StartableAgentType } from \"../utils/agents.js\";\n\nconst execFileAsync = promisify(execFile);\nconst READINESS_AGENT_TYPES = [\"claude\", \"codex\", \"copilot\", \"grok_cli\", \"opencode\", \"pi\"] as const;\nconst ANSI_ESCAPE_PATTERN = new RegExp(`${String.fromCharCode(27)}\\\\[[0-?]*[ -/]*[@-~]`, \"g\");\n\nexport type ReadinessStatus = \"pass\" | \"warn\" | \"fail\";\nexport type ReadinessAuthState = \"authenticated\" | \"unauthenticated\" | \"unknown\";\nexport type ReadinessAgentType = Exclude<StartableAgentType, \"gemini_cli\">;\ntype ReadinessInfoStatus = ReadinessStatus | \"info\";\n\ntype CommandResult = { stdout: string; stderr: string };\ntype ReadFile = (target: string) => Promise<string>;\ntype Access = (target: string, mode?: number) => Promise<void>;\ntype RunCommand = (command: string, args: string[]) => Promise<CommandResult>;\n\nexport interface ReadinessCheck<S extends ReadinessInfoStatus = ReadinessStatus> {\n status: S;\n errors: string[];\n}\n\nexport interface ExecutableReadinessCheck extends ReadinessCheck {\n command: string;\n path: string | null;\n}\n\nexport interface DirectoryReadinessCheck extends ReadinessCheck {\n path: string;\n present: boolean;\n readable: boolean;\n}\n\nexport interface BuiltInSkillsReadinessCheck extends ReadinessCheck<\"info\"> {\n path: string | null;\n required: number;\n present: number;\n missing: string[];\n}\n\nexport interface AuthReadinessCheck extends ReadinessCheck {\n state: ReadinessAuthState;\n source: string;\n provider: string | null;\n availableProviders: string[];\n}\n\nexport interface IntegrationReadinessCheck extends ReadinessCheck {\n label: string;\n installed: boolean;\n details?: Record<string, unknown>;\n}\n\nexport interface AgentReadinessReport {\n type: ReadinessAgentType;\n executable: ExecutableReadinessCheck;\n globalConfig: DirectoryReadinessCheck;\n builtInSkills: BuiltInSkillsReadinessCheck;\n auth?: AuthReadinessCheck;\n integration?: IntegrationReadinessCheck;\n status: ReadinessStatus;\n}\n\nexport interface AgentReadinessOptions {\n homeDir?: string;\n path?: string;\n assetRoot?: string;\n builtInSkillNames?: readonly string[];\n skillRoots?: Partial<Record<ReadinessAgentType, string>>;\n readFile?: ReadFile;\n access?: Access;\n runCommand?: RunCommand;\n codexAuth?: () => Promise<boolean | null>;\n}\n\ntype Runtime = Required<\n Omit<AgentReadinessOptions, \"assetRoot\" | \"builtInSkillNames\" | \"skillRoots\">\n> & {\n assetRoot: string | null;\n builtInSkillNames: readonly string[];\n skillRoots: Partial<Record<ReadinessAgentType, string>>;\n};\n\nconst AGENT_HOME_DIRS: Record<ReadinessAgentType, string> = {\n claude: \".claude\",\n codex: \".codex\",\n copilot: \".copilot\",\n grok_cli: \".grok\",\n opencode: \".config/opencode\",\n pi: \".pi\",\n};\n\nfunction runtime(options: AgentReadinessOptions): Runtime {\n return {\n homeDir: options.homeDir ?? process.env.HOME ?? \"\",\n path: options.path ?? process.env.PATH ?? \"\",\n assetRoot: options.assetRoot ?? null,\n builtInSkillNames: options.builtInSkillNames ?? [],\n skillRoots: options.skillRoots ?? {},\n readFile: options.readFile ?? ((target) => fsReadFile(target, \"utf8\")),\n access: options.access ?? ((target, mode = constants.R_OK) => fsAccess(target, mode)),\n runCommand: options.runCommand ?? defaultRunCommand,\n codexAuth: options.codexAuth ?? (async () => (await getCodexCapacityReport()).authenticated),\n };\n}\n\nasync function defaultRunCommand(command: string, args: string[]): Promise<CommandResult> {\n const result = await execFileAsync(command, args, {\n encoding: \"utf8\",\n timeout: 5000,\n maxBuffer: 1024 * 1024,\n });\n return { stdout: result.stdout, stderr: result.stderr };\n}\n\nfunction statusRank(status: ReadinessStatus): number {\n return status === \"fail\" ? 2 : status === \"warn\" ? 1 : 0;\n}\n\nexport function worstReadinessStatus(statuses: ReadinessStatus[]): ReadinessStatus {\n return statuses.reduce<ReadinessStatus>(\n (worst, current) => (statusRank(current) > statusRank(worst) ? current : worst),\n \"pass\",\n );\n}\n\nfunction displayHome(target: string, homeDir: string): string {\n return target === homeDir\n ? \"~\"\n : target.startsWith(`${homeDir}/`)\n ? `~${target.slice(homeDir.length)}`\n : target;\n}\n\nfunction record(value: unknown): Record<string, unknown> | null {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction nonEmpty(value: unknown): boolean {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nasync function accessible(target: string, rt: Runtime, mode = constants.R_OK): Promise<boolean> {\n try {\n await rt.access(target, mode);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function resolveExecutable(command: string, rt: Runtime): Promise<string | null> {\n const candidates = rt.path\n .split(delimiter)\n .filter(Boolean)\n .map((directory) => join(directory, command));\n const checks = await Promise.all(\n candidates.map(async (target) => ({\n target,\n available: await accessible(target, rt, constants.X_OK),\n })),\n );\n return checks.find((check) => check.available)?.target ?? null;\n}\n\nasync function executableCheck(\n agent: ReadinessAgentType,\n rt: Runtime,\n): Promise<ExecutableReadinessCheck> {\n const command = AGENTS[agent].command;\n const resolvedPath = await resolveExecutable(command, rt);\n return {\n command,\n path: resolvedPath,\n status: resolvedPath ? \"pass\" : \"fail\",\n errors: resolvedPath ? [] : [`${command} was not found on PATH`],\n };\n}\n\nasync function directoryCheck(\n agent: ReadinessAgentType,\n rt: Runtime,\n): Promise<DirectoryReadinessCheck> {\n const target = join(rt.homeDir, AGENT_HOME_DIRS[agent]);\n const readable = await accessible(target, rt);\n return {\n path: displayHome(target, rt.homeDir),\n present: readable,\n readable,\n status: readable ? \"pass\" : \"fail\",\n errors: readable ? [] : [\"global configuration directory is unavailable\"],\n };\n}\n\nasync function builtInSkillsCheck(\n agent: ReadinessAgentType,\n rt: Runtime,\n): Promise<BuiltInSkillsReadinessCheck> {\n const relativeRoot = rt.skillRoots[agent];\n if (!relativeRoot) {\n return {\n path: null,\n required: rt.builtInSkillNames.length,\n present: 0,\n missing: [...rt.builtInSkillNames],\n status: \"info\",\n errors: [],\n };\n }\n const root = join(rt.homeDir, relativeRoot);\n const checks = await Promise.all(\n rt.builtInSkillNames.map(async (name) => ({\n name,\n present: await accessible(join(root, name, \"SKILL.md\"), rt),\n })),\n );\n const present = checks.filter((check) => check.present).map((check) => check.name);\n const missing = rt.builtInSkillNames.filter((name) => !present.includes(name));\n return {\n path: displayHome(root, rt.homeDir),\n required: rt.builtInSkillNames.length,\n present: present.length,\n missing: [...missing],\n status: \"info\",\n errors: [],\n };\n}\n\nasync function scriptCheck(\n installed: string,\n bundled: string,\n rt: Runtime,\n): Promise<\n ReadinessCheck & {\n path: string;\n present: boolean;\n readable: boolean;\n matchesBundledAsset: boolean;\n }\n> {\n let installedText: string;\n try {\n installedText = await rt.readFile(installed);\n } catch {\n return {\n path: displayHome(installed, rt.homeDir),\n present: false,\n readable: false,\n matchesBundledAsset: false,\n status: \"fail\",\n errors: [\"hook script is unavailable\"],\n };\n }\n try {\n const bundledText = await rt.readFile(bundled);\n const matches = installedText === bundledText;\n return {\n path: displayHome(installed, rt.homeDir),\n present: true,\n readable: true,\n matchesBundledAsset: matches,\n status: matches ? \"pass\" : \"fail\",\n errors: matches ? [] : [\"hook script differs from the bundled AI DevKit asset\"],\n };\n } catch {\n return {\n path: displayHome(installed, rt.homeDir),\n present: true,\n readable: true,\n matchesBundledAsset: false,\n status: \"fail\",\n errors: [\"bundled hook asset is unavailable\"],\n };\n }\n}\n\nfunction containsHook(root: unknown, event: string, command: string): boolean {\n const hooks = record(record(root)?.hooks);\n const entries = hooks?.[event];\n if (!Array.isArray(entries)) return false;\n return entries.some((entry) => {\n const commands = record(entry)?.hooks;\n return (\n Array.isArray(commands) &&\n commands.some((hook) => {\n const item = record(hook);\n return item?.type === \"command\" && item.command === command;\n })\n );\n });\n}\n\nasync function registrationCheck(\n target: string,\n event: string,\n command: string,\n rt: Runtime,\n): Promise<\n ReadinessCheck & {\n path: string;\n event: string;\n command: string;\n present: boolean;\n valid: boolean;\n }\n> {\n try {\n const parsed = JSON.parse(await rt.readFile(target));\n const valid = containsHook(parsed, event, command);\n return {\n path: displayHome(target, rt.homeDir),\n event,\n command,\n present: true,\n valid,\n status: valid ? \"pass\" : \"fail\",\n errors: valid ? [] : [\"required hook registration is missing\"],\n };\n } catch {\n return {\n path: displayHome(target, rt.homeDir),\n event,\n command,\n present: false,\n valid: false,\n status: \"fail\",\n errors: [\"hook configuration is missing or invalid\"],\n };\n }\n}\n\nasync function mappingCheck(\n target: string,\n rt: Runtime,\n): Promise<\n ReadinessCheck & {\n path: string;\n present: boolean;\n valid: boolean;\n invalidEntries: number;\n staleEntries: number;\n }\n> {\n let text: string;\n try {\n text = await rt.readFile(target);\n } catch {\n return {\n path: displayHome(target, rt.homeDir),\n present: false,\n valid: false,\n invalidEntries: 0,\n staleEntries: 0,\n status: \"warn\",\n errors: [\"session mapping has not been created\"],\n };\n }\n let parsed: Record<string, unknown> | null = null;\n try {\n parsed = record(JSON.parse(text));\n } catch {\n // Fixed safe error below.\n }\n if (!parsed) {\n return {\n path: displayHome(target, rt.homeDir),\n present: true,\n valid: false,\n invalidEntries: 0,\n staleEntries: 0,\n status: \"fail\",\n errors: [\"session mapping is invalid\"],\n };\n }\n const entries = await Promise.all(\n Object.entries(parsed).map(async ([pid, sessionPath]) => {\n if (!/^\\d+$/.test(pid) || typeof sessionPath !== \"string\" || !sessionPath) {\n return { valid: false, stale: false };\n }\n return { valid: true, stale: !(await accessible(sessionPath, rt)) };\n }),\n );\n const invalidEntries = entries.filter((entry) => !entry.valid).length;\n const staleEntries = entries.filter((entry) => entry.stale).length;\n const valid = invalidEntries === 0;\n return {\n path: displayHome(target, rt.homeDir),\n present: true,\n valid,\n invalidEntries,\n staleEntries,\n status: !valid ? \"fail\" : staleEntries ? \"warn\" : \"pass\",\n errors: !valid\n ? [\"session mapping contains invalid entries\"]\n : staleEntries\n ? [\"session mapping contains stale entries\"]\n : [],\n };\n}\n\nasync function codexAuthCheck(rt: Runtime): Promise<AuthReadinessCheck> {\n try {\n const value = await rt.codexAuth();\n return {\n state: value === true ? \"authenticated\" : value === false ? \"unauthenticated\" : \"unknown\",\n source: displayHome(join(rt.homeDir, \".codex\", \"auth.json\"), rt.homeDir),\n provider: null,\n availableProviders: [],\n status: value === true ? \"pass\" : value === false ? \"fail\" : \"warn\",\n errors:\n value === true\n ? []\n : [value === false ? \"Codex is not authenticated\" : \"Codex authentication is unknown\"],\n };\n } catch {\n return {\n state: \"unknown\",\n source: \"~/.codex/auth.json\",\n provider: null,\n availableProviders: [],\n status: \"warn\",\n errors: [\"Codex authentication probe failed\"],\n };\n }\n}\n\nasync function claudeAuthCheck(rt: Runtime): Promise<AuthReadinessCheck> {\n try {\n const result = await rt.runCommand(\"claude\", [\"auth\", \"status\", \"--json\"]);\n const parsed = record(JSON.parse(result.stdout));\n const authenticated = parsed?.loggedIn === true || parsed?.authenticated === true;\n const unauthenticated = parsed?.loggedIn === false || parsed?.authenticated === false;\n return {\n state: authenticated ? \"authenticated\" : unauthenticated ? \"unauthenticated\" : \"unknown\",\n source: \"claude auth status --json\",\n provider: null,\n availableProviders: [],\n status: authenticated ? \"pass\" : unauthenticated ? \"fail\" : \"warn\",\n errors: authenticated\n ? []\n : [unauthenticated ? \"Claude is not authenticated\" : \"Claude authentication is unknown\"],\n };\n } catch {\n return {\n state: \"unknown\",\n source: \"claude auth status --json\",\n provider: null,\n availableProviders: [],\n status: \"warn\",\n errors: [\"Claude authentication probe failed\"],\n };\n }\n}\n\nfunction piProviderNames(parsed: Record<string, unknown>): string[] {\n const names = new Set<string>();\n if (nonEmpty(parsed.provider)) names.add((parsed.provider as string).trim());\n const providers = record(parsed.providers);\n if (providers) {\n for (const name of Object.keys(providers)) {\n if (name.trim()) names.add(name);\n }\n }\n for (const [name, value] of Object.entries(parsed)) {\n if (name === \"provider\" || name === \"providers\") continue;\n if (record(value) && name.trim()) names.add(name);\n }\n return [...names].sort();\n}\n\nasync function piAuthCheck(rt: Runtime): Promise<AuthReadinessCheck> {\n const sourcePath = join(rt.homeDir, \".pi\", \"agent\", \"auth.json\");\n try {\n const parsed = record(JSON.parse(await rt.readFile(sourcePath)));\n if (!parsed) throw new Error(\"invalid\");\n const availableProviders = piProviderNames(parsed);\n const provider = nonEmpty(parsed.provider) ? (parsed.provider as string).trim() : null;\n const authenticated = availableProviders.length > 0;\n return {\n state: authenticated ? \"authenticated\" : \"unauthenticated\",\n source: displayHome(sourcePath, rt.homeDir),\n provider,\n availableProviders,\n status: authenticated ? \"pass\" : \"fail\",\n errors: authenticated ? [] : [\"Pi credential file has no configured model provider\"],\n };\n } catch {\n return {\n state: \"unauthenticated\",\n source: displayHome(sourcePath, rt.homeDir),\n provider: null,\n availableProviders: [],\n status: \"fail\",\n errors: [\"Pi credential file is missing or invalid\"],\n };\n }\n}\n\nasync function opencodeAuthCheck(rt: Runtime): Promise<AuthReadinessCheck> {\n try {\n const result = await rt.runCommand(\"opencode\", [\"auth\", \"list\"]);\n const availableProviders = opencodeAuthProviderNames(result.stdout);\n const authenticated = availableProviders.length > 0;\n return {\n state: authenticated ? \"authenticated\" : \"unauthenticated\",\n source: \"opencode auth list\",\n provider: null,\n availableProviders,\n status: authenticated ? \"pass\" : \"fail\",\n errors: authenticated ? [] : [\"OpenCode has no configured credentials\"],\n };\n } catch {\n return {\n state: \"unknown\",\n source: \"opencode auth list\",\n provider: null,\n availableProviders: [],\n status: \"warn\",\n errors: [\"OpenCode authentication probe failed\"],\n };\n }\n}\n\nasync function copilotAuthCheck(rt: Runtime): Promise<AuthReadinessCheck> {\n try {\n await rt.runCommand(\"gh\", [\"auth\", \"status\", \"--hostname\", \"github.com\"]);\n return {\n state: \"authenticated\",\n source: \"gh auth status --hostname github.com\",\n provider: \"github\",\n availableProviders: [\"GitHub\"],\n status: \"pass\",\n errors: [],\n };\n } catch {\n return {\n state: \"unknown\",\n source: \"gh auth status --hostname github.com\",\n provider: null,\n availableProviders: [\"GitHub\"],\n status: \"warn\",\n errors: [\"Copilot authentication could not be verified through GitHub CLI\"],\n };\n }\n}\n\nfunction opencodeAuthProviderNames(output: string): string[] {\n const names = new Set<string>();\n for (const line of stripAnsi(output).split(/\\r?\\n/)) {\n const match = /^\\s*[●*+-]\\s+(.+?)\\s*$/.exec(line);\n if (!match) continue;\n const name = match[1].replace(/\\s+(?:api|oauth|[\\w-]*token|[A-Z][A-Z0-9_]+)$/i, \"\").trim();\n if (name && !/^\\d+\\s+(?:credentials?|environment variables?)$/i.test(name)) names.add(name);\n }\n return [...names].sort();\n}\n\nfunction stripAnsi(value: string): string {\n return value.replace(ANSI_ESCAPE_PATTERN, \"\");\n}\n\nasync function codexIntegrationCheck(rt: Runtime): Promise<IntegrationReadinessCheck> {\n const script = await scriptCheck(\n join(rt.homeDir, \".codex\", \"hooks\", \"codex-session-mapping.cjs\"),\n join(rt.assetRoot ?? \"\", \"codex\", \"codex-session-mapping.cjs\"),\n rt,\n );\n const registration = await registrationCheck(\n join(rt.homeDir, \".codex\", \"hooks.json\"),\n \"SessionStart\",\n \"node ~/.codex/hooks/codex-session-mapping.cjs\",\n rt,\n );\n const mappingFile = await mappingCheck(\n join(rt.homeDir, \".codex\", \"ai-devkit\", \"sessions.json\"),\n rt,\n );\n const installed = script.status === \"pass\" && registration.status === \"pass\";\n return {\n label: \"ai-devkit hook\",\n installed,\n status: worstReadinessStatus([script.status, registration.status, mappingFile.status]),\n errors: [...script.errors, ...registration.errors, ...mappingFile.errors],\n details: { sessionMappingScript: script, registration, mappingFile },\n };\n}\n\nasync function claudeIntegrationCheck(rt: Runtime): Promise<IntegrationReadinessCheck> {\n const script = await scriptCheck(\n join(rt.homeDir, \".claude\", \"hooks\", \"claude-prompt-hook.js\"),\n join(rt.assetRoot ?? \"\", \"claude\", \"claude-prompt-hook.js\"),\n rt,\n );\n const registration = await registrationCheck(\n join(rt.homeDir, \".claude\", \"settings.json\"),\n \"PreToolUse\",\n \"node ~/.claude/hooks/claude-prompt-hook.js\",\n rt,\n );\n const installed = script.status === \"pass\" && registration.status === \"pass\";\n return {\n label: \"ai-devkit hook\",\n installed,\n status: worstReadinessStatus([script.status, registration.status]),\n errors: [...script.errors, ...registration.errors],\n details: { promptScript: script, registration },\n };\n}\n\nasync function piIntegrationCheck(rt: Runtime): Promise<IntegrationReadinessCheck> {\n let installed = false;\n try {\n const result = await rt.runCommand(\"pi\", [\"list\"]);\n installed = isPiSessionTrackerListed(result.stdout);\n } catch {\n // Safe fixed result below.\n }\n const mapping = await mappingCheck(join(rt.homeDir, \".pi\", \"agent\", \"sessions.json\"), rt);\n const mappingStatus: ReadinessStatus = mapping.valid || !mapping.present ? \"pass\" : \"fail\";\n const status = worstReadinessStatus([installed ? \"pass\" : \"fail\", mappingStatus]);\n return {\n label: \"ai-devkit plugin\",\n installed,\n status,\n errors: [\n ...(!installed ? [\"Pi session tracker is not registered\"] : []),\n ...(mappingStatus === \"fail\" ? mapping.errors : []),\n ],\n details: {\n package: \"@ai-devkit/pi-session-tracker\",\n registryPath: mapping.path,\n registryValid: mapping.valid,\n invalidEntries: mapping.invalidEntries,\n staleEntries: mapping.staleEntries,\n },\n };\n}\n\nfunction isPiSessionTrackerListed(output: string): boolean {\n const normalized = output.toLowerCase();\n return (\n normalized.includes(\"@ai-devkit/pi-session-tracker\") ||\n /\\bsession[\\s-]+tracker\\b/.test(normalized)\n );\n}\n\ntype AuthCheck = (rt: Runtime) => Promise<AuthReadinessCheck>;\ntype IntegrationCheck = (rt: Runtime) => Promise<IntegrationReadinessCheck>;\n\nconst AUTH_CHECKS: Partial<Record<ReadinessAgentType, AuthCheck>> = {\n claude: claudeAuthCheck,\n codex: codexAuthCheck,\n copilot: copilotAuthCheck,\n opencode: opencodeAuthCheck,\n pi: piAuthCheck,\n};\n\nconst INTEGRATION_CHECKS: Partial<Record<ReadinessAgentType, IntegrationCheck>> = {\n claude: claudeIntegrationCheck,\n codex: codexIntegrationCheck,\n pi: piIntegrationCheck,\n};\n\nasync function authCheck(\n agent: ReadinessAgentType,\n rt: Runtime,\n): Promise<AuthReadinessCheck | undefined> {\n return AUTH_CHECKS[agent]?.(rt);\n}\n\nasync function integrationCheck(\n agent: ReadinessAgentType,\n rt: Runtime,\n): Promise<IntegrationReadinessCheck | undefined> {\n return INTEGRATION_CHECKS[agent]?.(rt);\n}\n\nexport async function getAgentReadinessReport(\n agent: ReadinessAgentType,\n options: AgentReadinessOptions = {},\n): Promise<AgentReadinessReport> {\n return agentReadiness(agent, runtime(options));\n}\n\nasync function agentReadiness(\n agent: ReadinessAgentType,\n rt: Runtime,\n): Promise<AgentReadinessReport> {\n const [executable, globalConfig, builtInSkills, auth, integration] = await Promise.all([\n executableCheck(agent, rt),\n directoryCheck(agent, rt),\n builtInSkillsCheck(agent, rt),\n authCheck(agent, rt),\n integrationCheck(agent, rt),\n ]);\n return {\n type: agent,\n executable,\n globalConfig,\n builtInSkills,\n auth,\n integration,\n status: worstReadinessStatus([\n executable.status,\n globalConfig.status,\n ...(auth ? [auth.status] : []),\n ...(integration ? [integration.status] : []),\n ]),\n };\n}\n\nexport async function getAgentReadinessReports(\n options: AgentReadinessOptions = {},\n): Promise<Record<ReadinessAgentType, AgentReadinessReport>> {\n const rt = runtime(options);\n const entries = await Promise.all(\n READINESS_AGENT_TYPES.map(async (agent) => [agent, await agentReadiness(agent, rt)] as const),\n );\n return Object.fromEntries(entries) as Record<ReadinessAgentType, AgentReadinessReport>;\n}\n"],"names":["constants","access","fsAccess","readFile","fsReadFile","execFile","delimiter","join","promisify","getCodexCapacityReport","AGENTS","execFileAsync","READINESS_AGENT_TYPES","ANSI_ESCAPE_PATTERN","RegExp","String","fromCharCode","AGENT_HOME_DIRS","claude","codex","copilot","grok_cli","opencode","pi","runtime","options","homeDir","process","env","HOME","path","PATH","assetRoot","builtInSkillNames","skillRoots","target","mode","R_OK","runCommand","defaultRunCommand","codexAuth","authenticated","command","args","result","encoding","timeout","maxBuffer","stdout","stderr","statusRank","status","worstReadinessStatus","statuses","reduce","worst","current","displayHome","startsWith","slice","length","record","value","Array","isArray","nonEmpty","trim","accessible","rt","resolveExecutable","candidates","split","filter","Boolean","map","directory","checks","Promise","all","available","X_OK","find","check","executableCheck","agent","resolvedPath","errors","directoryCheck","readable","present","builtInSkillsCheck","relativeRoot","required","missing","root","name","includes","scriptCheck","installed","bundled","installedText","matchesBundledAsset","bundledText","matches","containsHook","event","hooks","entries","some","entry","commands","hook","item","type","registrationCheck","parsed","JSON","parse","valid","mappingCheck","text","invalidEntries","staleEntries","Object","pid","sessionPath","test","stale","codexAuthCheck","state","source","provider","availableProviders","claudeAuthCheck","loggedIn","unauthenticated","piProviderNames","names","Set","add","providers","keys","sort","piAuthCheck","sourcePath","Error","opencodeAuthCheck","opencodeAuthProviderNames","copilotAuthCheck","output","line","stripAnsi","match","exec","replace","codexIntegrationCheck","script","registration","mappingFile","label","details","sessionMappingScript","claudeIntegrationCheck","promptScript","piIntegrationCheck","isPiSessionTrackerListed","mapping","mappingStatus","package","registryPath","registryValid","normalized","toLowerCase","AUTH_CHECKS","INTEGRATION_CHECKS","authCheck","integrationCheck","getAgentReadinessReport","agentReadiness","executable","globalConfig","builtInSkills","auth","integration","getAgentReadinessReports","fromEntries"],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { AgentInfo } from "../adapters/AgentAdapter.js";
|
|
2
|
+
import type { TerminalLocation } from "../terminal/TerminalFocusManager.js";
|
|
3
|
+
import { TmuxManager } from "../terminal/TmuxManager.js";
|
|
4
|
+
import { AgentRegistry, type AgentRuntimeProvider, type RegistryEntry } from "../utils/AgentRegistry.js";
|
|
5
|
+
import { type StartableAgentType } from "../utils/agents.js";
|
|
6
|
+
import { DEFAULT_PID_POLL_INTERVAL_MS, DEFAULT_PID_POLL_TIMEOUT_MS } from "./tmux/PidPolling.js";
|
|
7
|
+
import type { InteractiveAgentRuntime } from "./types.js";
|
|
8
|
+
import { AgentNameInUseError, AgentPidPollTimeoutError, AgentRuntimeUnavailableError, AgentTerminalNotFoundError, TmuxUnavailableError } from "./errors.js";
|
|
9
|
+
export { AgentNameInUseError, AgentPidPollTimeoutError, AgentRuntimeUnavailableError, AgentTerminalNotFoundError, TmuxUnavailableError, };
|
|
10
|
+
export { DEFAULT_PID_POLL_INTERVAL_MS, DEFAULT_PID_POLL_TIMEOUT_MS };
|
|
11
|
+
export interface StartAgentOptions {
|
|
12
|
+
type: StartableAgentType;
|
|
13
|
+
name: string;
|
|
14
|
+
cwd: string;
|
|
15
|
+
runtimeProvider?: AgentRuntimeProvider;
|
|
16
|
+
pollIntervalMs?: number;
|
|
17
|
+
pollTimeoutMs?: number;
|
|
18
|
+
}
|
|
19
|
+
export interface StartAgentDeps {
|
|
20
|
+
tmux?: TmuxManager;
|
|
21
|
+
runtime?: InteractiveAgentRuntime;
|
|
22
|
+
registry?: AgentRegistry;
|
|
23
|
+
/** Called for non-fatal events (e.g., replacing an orphan tmux session). */
|
|
24
|
+
onWarning?: (message: string) => void;
|
|
25
|
+
}
|
|
26
|
+
export interface StopAgentDeps {
|
|
27
|
+
tmux?: Pick<TmuxManager, "killSession">;
|
|
28
|
+
runtime?: InteractiveAgentRuntime;
|
|
29
|
+
registry?: Pick<AgentRegistry, "lookup">;
|
|
30
|
+
killProcess?: (pid: number, signal: NodeJS.Signals) => void;
|
|
31
|
+
}
|
|
32
|
+
export interface StopAgentResult {
|
|
33
|
+
agentName: string;
|
|
34
|
+
pid: number;
|
|
35
|
+
runtime: AgentRuntimeProvider;
|
|
36
|
+
runtimeRef: unknown | null;
|
|
37
|
+
}
|
|
38
|
+
export interface FocusAgentDeps {
|
|
39
|
+
runtime?: InteractiveAgentRuntime;
|
|
40
|
+
registry?: Pick<AgentRegistry, "lookup">;
|
|
41
|
+
focusManager: {
|
|
42
|
+
findTerminal(pid: number): Promise<TerminalLocation | null>;
|
|
43
|
+
focusTerminal(location: TerminalLocation): Promise<boolean>;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export type FocusAgentResult = {
|
|
47
|
+
focused: true;
|
|
48
|
+
} | {
|
|
49
|
+
focused: false;
|
|
50
|
+
reason: "terminal-not-found" | "focus-failed";
|
|
51
|
+
};
|
|
52
|
+
export interface SendAgentPromptDeps {
|
|
53
|
+
runtime?: InteractiveAgentRuntime;
|
|
54
|
+
registry?: Pick<AgentRegistry, "lookup">;
|
|
55
|
+
focusManager: {
|
|
56
|
+
findTerminal(pid: number): Promise<TerminalLocation | null>;
|
|
57
|
+
};
|
|
58
|
+
writer?: (location: TerminalLocation, text: string) => Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Orchestrate `agent start`: ensure the configured runtime is available,
|
|
62
|
+
* create the runtime session, detect the agent PID, and register the entry.
|
|
63
|
+
* Callers are responsible for user input validation before invoking this.
|
|
64
|
+
*/
|
|
65
|
+
export declare function startAgent(opts: StartAgentOptions, deps?: StartAgentDeps): Promise<RegistryEntry>;
|
|
66
|
+
export declare function stopAgent(agent: Pick<AgentInfo, "name" | "pid">, deps?: StopAgentDeps): Promise<StopAgentResult>;
|
|
67
|
+
export declare function focusAgent(agent: Pick<AgentInfo, "name" | "pid">, deps: FocusAgentDeps): Promise<FocusAgentResult>;
|
|
68
|
+
export declare function sendAgentPrompt(agent: Pick<AgentInfo, "name" | "pid">, prompt: string, deps: SendAgentPromptDeps): Promise<void>;
|
|
69
|
+
//# sourceMappingURL=ManagedAgentRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManagedAgentRuntime.d.ts","sourceRoot":"","sources":["../../src/runtime/ManagedAgentRuntime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { TmuxManager } from "../terminal/TmuxManager.js";
|
|
2
|
+
import { AgentRegistry } from "../utils/AgentRegistry.js";
|
|
3
|
+
import { AGENTS } from "../utils/agents.js";
|
|
4
|
+
import { createInteractiveRuntime } from "./RuntimeFactory.js";
|
|
5
|
+
import { DEFAULT_PID_POLL_INTERVAL_MS, DEFAULT_PID_POLL_TIMEOUT_MS } from "./tmux/PidPolling.js";
|
|
6
|
+
import { TmuxAgentRuntime } from "./tmux/TmuxAgentRuntime.js";
|
|
7
|
+
import { AgentNameInUseError, AgentPidPollTimeoutError, AgentRuntimeUnavailableError, AgentTerminalNotFoundError, TmuxUnavailableError } from "./errors.js";
|
|
8
|
+
export { AgentNameInUseError, AgentPidPollTimeoutError, AgentRuntimeUnavailableError, AgentTerminalNotFoundError, TmuxUnavailableError };
|
|
9
|
+
export { DEFAULT_PID_POLL_INTERVAL_MS, DEFAULT_PID_POLL_TIMEOUT_MS };
|
|
10
|
+
/**
|
|
11
|
+
* Orchestrate `agent start`: ensure the configured runtime is available,
|
|
12
|
+
* create the runtime session, detect the agent PID, and register the entry.
|
|
13
|
+
* Callers are responsible for user input validation before invoking this.
|
|
14
|
+
*/ export async function startAgent(opts, deps = {}) {
|
|
15
|
+
const registry = deps.registry ?? AgentRegistry.default();
|
|
16
|
+
const agent = AGENTS[opts.type];
|
|
17
|
+
const intervalMs = opts.pollIntervalMs ?? DEFAULT_PID_POLL_INTERVAL_MS;
|
|
18
|
+
const timeoutMs = opts.pollTimeoutMs ?? DEFAULT_PID_POLL_TIMEOUT_MS;
|
|
19
|
+
const provider = opts.runtimeProvider ?? deps.runtime?.provider ?? "tmux";
|
|
20
|
+
const tmux = provider === "tmux" ? deps.tmux ?? new TmuxManager() : undefined;
|
|
21
|
+
const runtime = resolveStartRuntime(provider, {
|
|
22
|
+
...deps,
|
|
23
|
+
tmux
|
|
24
|
+
});
|
|
25
|
+
const availability = await runtime.isAvailable();
|
|
26
|
+
if (!availability.ok) {
|
|
27
|
+
if (provider === "tmux") throw new TmuxUnavailableError();
|
|
28
|
+
throw new AgentRuntimeUnavailableError(provider, availability.reason, availability.detail);
|
|
29
|
+
}
|
|
30
|
+
registry.prune();
|
|
31
|
+
const existing = registry.lookup(opts.name);
|
|
32
|
+
if (existing) {
|
|
33
|
+
throw new AgentNameInUseError(opts.name, existing.pid);
|
|
34
|
+
}
|
|
35
|
+
if (provider === "tmux" && tmux && await tmux.sessionExists(opts.name)) {
|
|
36
|
+
deps.onWarning?.(`tmux session "${opts.name}" already exists but has no live registry entry — it will be replaced.`);
|
|
37
|
+
}
|
|
38
|
+
const result = await runtime.startAgent({
|
|
39
|
+
name: opts.name,
|
|
40
|
+
cwd: opts.cwd,
|
|
41
|
+
kind: agentRuntimeKind(opts.type, provider),
|
|
42
|
+
args: [],
|
|
43
|
+
timeoutMs,
|
|
44
|
+
...provider === "tmux" ? {
|
|
45
|
+
command: agent.command,
|
|
46
|
+
matches: agent.matches,
|
|
47
|
+
pollIntervalMs: intervalMs
|
|
48
|
+
} : {}
|
|
49
|
+
});
|
|
50
|
+
const entry = {
|
|
51
|
+
name: opts.name,
|
|
52
|
+
type: opts.type,
|
|
53
|
+
pid: result.pid,
|
|
54
|
+
runtime: runtime.provider,
|
|
55
|
+
runtimeRef: result.runtimeRef,
|
|
56
|
+
cwd: opts.cwd,
|
|
57
|
+
startedAt: new Date().toISOString(),
|
|
58
|
+
sessionId: "",
|
|
59
|
+
sessionFilePath: "",
|
|
60
|
+
pinned: false
|
|
61
|
+
};
|
|
62
|
+
registry.register(entry);
|
|
63
|
+
return entry;
|
|
64
|
+
}
|
|
65
|
+
export async function stopAgent(agent, deps = {}) {
|
|
66
|
+
const registry = deps.registry ?? AgentRegistry.default();
|
|
67
|
+
const registryEntry = registry.lookup(agent.name);
|
|
68
|
+
const runtime = resolveRuntimeForEntry(registryEntry, deps);
|
|
69
|
+
const runtimeRef = registryEntry?.runtimeRef ?? null;
|
|
70
|
+
await runtime.stop({
|
|
71
|
+
agent,
|
|
72
|
+
runtimeRef,
|
|
73
|
+
killProcess: deps.killProcess
|
|
74
|
+
});
|
|
75
|
+
return {
|
|
76
|
+
agentName: agent.name,
|
|
77
|
+
pid: agent.pid,
|
|
78
|
+
runtime: runtime.provider,
|
|
79
|
+
runtimeRef
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
export async function focusAgent(agent, deps) {
|
|
83
|
+
const registry = deps.registry ?? AgentRegistry.default();
|
|
84
|
+
const registryEntry = registry.lookup(agent.name);
|
|
85
|
+
const runtime = resolveRuntimeForEntry(registryEntry, deps);
|
|
86
|
+
if (runtime.provider === "tmux") {
|
|
87
|
+
const location = await deps.focusManager.findTerminal(agent.pid);
|
|
88
|
+
if (!location) return {
|
|
89
|
+
focused: false,
|
|
90
|
+
reason: "terminal-not-found"
|
|
91
|
+
};
|
|
92
|
+
const focused = await deps.focusManager.focusTerminal(location);
|
|
93
|
+
return focused ? {
|
|
94
|
+
focused: true
|
|
95
|
+
} : {
|
|
96
|
+
focused: false,
|
|
97
|
+
reason: "focus-failed"
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
const focused = await runtime.focus({
|
|
101
|
+
agent,
|
|
102
|
+
runtimeRef: registryEntry?.runtimeRef ?? null,
|
|
103
|
+
focusManager: deps.focusManager
|
|
104
|
+
});
|
|
105
|
+
if (focused) return {
|
|
106
|
+
focused: true
|
|
107
|
+
};
|
|
108
|
+
return {
|
|
109
|
+
focused: false,
|
|
110
|
+
reason: "focus-failed"
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
export async function sendAgentPrompt(agent, prompt, deps) {
|
|
114
|
+
const registry = deps.registry ?? AgentRegistry.default();
|
|
115
|
+
const registryEntry = registry.lookup(agent.name);
|
|
116
|
+
const runtime = resolveRuntimeForEntry(registryEntry, deps);
|
|
117
|
+
await runtime.send({
|
|
118
|
+
agent,
|
|
119
|
+
runtimeRef: registryEntry?.runtimeRef ?? null,
|
|
120
|
+
prompt
|
|
121
|
+
}, {
|
|
122
|
+
focusManager: deps.focusManager,
|
|
123
|
+
writer: deps.writer
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
function resolveStartRuntime(provider, deps) {
|
|
127
|
+
if (deps.runtime && deps.runtime.provider === provider) {
|
|
128
|
+
return deps.runtime;
|
|
129
|
+
}
|
|
130
|
+
if (provider === "tmux") return new TmuxAgentRuntime(deps.tmux);
|
|
131
|
+
return createInteractiveRuntime(provider);
|
|
132
|
+
}
|
|
133
|
+
function resolveRuntimeForEntry(registryEntry, deps) {
|
|
134
|
+
if (isHerdrRegistryEntry(registryEntry)) {
|
|
135
|
+
return deps.runtime?.provider === "herdr" ? deps.runtime : createInteractiveRuntime("herdr");
|
|
136
|
+
}
|
|
137
|
+
if (deps.runtime?.provider === "tmux") return deps.runtime;
|
|
138
|
+
return deps.tmux ? new TmuxAgentRuntime(deps.tmux) : createInteractiveRuntime("tmux");
|
|
139
|
+
}
|
|
140
|
+
function isHerdrRegistryEntry(entry) {
|
|
141
|
+
return typeof entry === "object" && entry !== null && entry.runtime === "herdr" && "runtimeRef" in entry;
|
|
142
|
+
}
|
|
143
|
+
function agentRuntimeKind(type, provider) {
|
|
144
|
+
if (provider === "tmux") return type;
|
|
145
|
+
return ({
|
|
146
|
+
claude: "claude",
|
|
147
|
+
codex: "codex",
|
|
148
|
+
copilot: "copilot",
|
|
149
|
+
gemini_cli: "gemini",
|
|
150
|
+
grok_cli: "grok",
|
|
151
|
+
opencode: "opencode",
|
|
152
|
+
pi: "pi"
|
|
153
|
+
})[type];
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
//# sourceMappingURL=ManagedAgentRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/ManagedAgentRuntime.ts"],"sourcesContent":["import type { AgentInfo } from \"../adapters/AgentAdapter.js\";\nimport type { TerminalLocation } from \"../terminal/TerminalFocusManager.js\";\nimport { TmuxManager } from \"../terminal/TmuxManager.js\";\nimport {\n AgentRegistry,\n type AgentRuntimeProvider,\n type RegistryEntry,\n} from \"../utils/AgentRegistry.js\";\nimport { AGENTS, type StartableAgentType } from \"../utils/agents.js\";\nimport { createInteractiveRuntime } from \"./RuntimeFactory.js\";\nimport { DEFAULT_PID_POLL_INTERVAL_MS, DEFAULT_PID_POLL_TIMEOUT_MS } from \"./tmux/PidPolling.js\";\nimport { TmuxAgentRuntime } from \"./tmux/TmuxAgentRuntime.js\";\nimport type { InteractiveAgentRuntime } from \"./types.js\";\nimport {\n AgentNameInUseError,\n AgentPidPollTimeoutError,\n AgentRuntimeUnavailableError,\n AgentTerminalNotFoundError,\n TmuxUnavailableError,\n} from \"./errors.js\";\n\nexport {\n AgentNameInUseError,\n AgentPidPollTimeoutError,\n AgentRuntimeUnavailableError,\n AgentTerminalNotFoundError,\n TmuxUnavailableError,\n};\nexport { DEFAULT_PID_POLL_INTERVAL_MS, DEFAULT_PID_POLL_TIMEOUT_MS };\n\nexport interface StartAgentOptions {\n type: StartableAgentType;\n name: string;\n cwd: string;\n runtimeProvider?: AgentRuntimeProvider;\n pollIntervalMs?: number;\n pollTimeoutMs?: number;\n}\n\nexport interface StartAgentDeps {\n tmux?: TmuxManager;\n runtime?: InteractiveAgentRuntime;\n registry?: AgentRegistry;\n /** Called for non-fatal events (e.g., replacing an orphan tmux session). */\n onWarning?: (message: string) => void;\n}\n\nexport interface StopAgentDeps {\n tmux?: Pick<TmuxManager, \"killSession\">;\n runtime?: InteractiveAgentRuntime;\n registry?: Pick<AgentRegistry, \"lookup\">;\n killProcess?: (pid: number, signal: NodeJS.Signals) => void;\n}\n\nexport interface StopAgentResult {\n agentName: string;\n pid: number;\n runtime: AgentRuntimeProvider;\n runtimeRef: unknown | null;\n}\n\nexport interface FocusAgentDeps {\n runtime?: InteractiveAgentRuntime;\n registry?: Pick<AgentRegistry, \"lookup\">;\n focusManager: {\n findTerminal(pid: number): Promise<TerminalLocation | null>;\n focusTerminal(location: TerminalLocation): Promise<boolean>;\n };\n}\n\nexport type FocusAgentResult =\n | { focused: true }\n | { focused: false; reason: \"terminal-not-found\" | \"focus-failed\" };\n\nexport interface SendAgentPromptDeps {\n runtime?: InteractiveAgentRuntime;\n registry?: Pick<AgentRegistry, \"lookup\">;\n focusManager: {\n findTerminal(pid: number): Promise<TerminalLocation | null>;\n };\n writer?: (location: TerminalLocation, text: string) => Promise<void>;\n}\n\n/**\n * Orchestrate `agent start`: ensure the configured runtime is available,\n * create the runtime session, detect the agent PID, and register the entry.\n * Callers are responsible for user input validation before invoking this.\n */\nexport async function startAgent(\n opts: StartAgentOptions,\n deps: StartAgentDeps = {},\n): Promise<RegistryEntry> {\n const registry = deps.registry ?? AgentRegistry.default();\n const agent = AGENTS[opts.type];\n const intervalMs = opts.pollIntervalMs ?? DEFAULT_PID_POLL_INTERVAL_MS;\n const timeoutMs = opts.pollTimeoutMs ?? DEFAULT_PID_POLL_TIMEOUT_MS;\n const provider = opts.runtimeProvider ?? deps.runtime?.provider ?? \"tmux\";\n const tmux = provider === \"tmux\" ? (deps.tmux ?? new TmuxManager()) : undefined;\n const runtime = resolveStartRuntime(provider, { ...deps, tmux });\n\n const availability = await runtime.isAvailable();\n if (!availability.ok) {\n if (provider === \"tmux\") throw new TmuxUnavailableError();\n throw new AgentRuntimeUnavailableError(provider, availability.reason, availability.detail);\n }\n\n registry.prune();\n const existing = registry.lookup(opts.name);\n if (existing) {\n throw new AgentNameInUseError(opts.name, existing.pid);\n }\n\n if (provider === \"tmux\" && tmux && (await tmux.sessionExists(opts.name))) {\n deps.onWarning?.(\n `tmux session \"${opts.name}\" already exists but has no live registry entry — it will be replaced.`,\n );\n }\n\n const result = await runtime.startAgent({\n name: opts.name,\n cwd: opts.cwd,\n kind: agentRuntimeKind(opts.type, provider),\n args: [],\n timeoutMs,\n ...(provider === \"tmux\"\n ? {\n command: agent.command,\n matches: agent.matches,\n pollIntervalMs: intervalMs,\n }\n : {}),\n });\n\n const entry: RegistryEntry = {\n name: opts.name,\n type: opts.type,\n pid: result.pid,\n runtime: runtime.provider,\n runtimeRef: result.runtimeRef,\n cwd: opts.cwd,\n startedAt: new Date().toISOString(),\n sessionId: \"\",\n sessionFilePath: \"\",\n pinned: false,\n };\n registry.register(entry);\n return entry;\n}\n\nexport async function stopAgent(\n agent: Pick<AgentInfo, \"name\" | \"pid\">,\n deps: StopAgentDeps = {},\n): Promise<StopAgentResult> {\n const registry = deps.registry ?? AgentRegistry.default();\n const registryEntry = registry.lookup(agent.name);\n const runtime = resolveRuntimeForEntry(registryEntry, deps);\n const runtimeRef = registryEntry?.runtimeRef ?? null;\n\n await runtime.stop({\n agent,\n runtimeRef,\n killProcess: deps.killProcess,\n });\n\n return {\n agentName: agent.name,\n pid: agent.pid,\n runtime: runtime.provider,\n runtimeRef,\n };\n}\n\nexport async function focusAgent(\n agent: Pick<AgentInfo, \"name\" | \"pid\">,\n deps: FocusAgentDeps,\n): Promise<FocusAgentResult> {\n const registry = deps.registry ?? AgentRegistry.default();\n const registryEntry = registry.lookup(agent.name);\n const runtime = resolveRuntimeForEntry(registryEntry, deps);\n if (runtime.provider === \"tmux\") {\n const location = await deps.focusManager.findTerminal(agent.pid);\n if (!location) return { focused: false, reason: \"terminal-not-found\" };\n\n const focused = await deps.focusManager.focusTerminal(location);\n return focused ? { focused: true } : { focused: false, reason: \"focus-failed\" };\n }\n\n const focused = await runtime.focus({\n agent,\n runtimeRef: registryEntry?.runtimeRef ?? null,\n focusManager: deps.focusManager,\n });\n\n if (focused) return { focused: true };\n return { focused: false, reason: \"focus-failed\" };\n}\n\nexport async function sendAgentPrompt(\n agent: Pick<AgentInfo, \"name\" | \"pid\">,\n prompt: string,\n deps: SendAgentPromptDeps,\n): Promise<void> {\n const registry = deps.registry ?? AgentRegistry.default();\n const registryEntry = registry.lookup(agent.name);\n const runtime = resolveRuntimeForEntry(registryEntry, deps);\n\n await runtime.send(\n {\n agent,\n runtimeRef: registryEntry?.runtimeRef ?? null,\n prompt,\n },\n {\n focusManager: deps.focusManager,\n writer: deps.writer,\n },\n );\n}\n\nfunction resolveStartRuntime(\n provider: AgentRuntimeProvider,\n deps: StartAgentDeps,\n): InteractiveAgentRuntime {\n if (deps.runtime && deps.runtime.provider === provider) {\n return deps.runtime;\n }\n if (provider === \"tmux\") return new TmuxAgentRuntime(deps.tmux);\n return createInteractiveRuntime(provider);\n}\n\nfunction resolveRuntimeForEntry(\n registryEntry: RegistryEntry | null,\n deps: { runtime?: InteractiveAgentRuntime; tmux?: Pick<TmuxManager, \"killSession\"> },\n): InteractiveAgentRuntime {\n if (isHerdrRegistryEntry(registryEntry)) {\n return deps.runtime?.provider === \"herdr\" ? deps.runtime : createInteractiveRuntime(\"herdr\");\n }\n if (deps.runtime?.provider === \"tmux\") return deps.runtime;\n return deps.tmux\n ? new TmuxAgentRuntime(deps.tmux as TmuxManager)\n : createInteractiveRuntime(\"tmux\");\n}\n\nfunction isHerdrRegistryEntry(\n entry: unknown,\n): entry is RegistryEntry & { runtime: \"herdr\"; runtimeRef: unknown } {\n return (\n typeof entry === \"object\" &&\n entry !== null &&\n (entry as { runtime?: unknown }).runtime === \"herdr\" &&\n \"runtimeRef\" in entry\n );\n}\n\nfunction agentRuntimeKind(type: StartableAgentType, provider: AgentRuntimeProvider): string {\n if (provider === \"tmux\") return type;\n return {\n claude: \"claude\",\n codex: \"codex\",\n copilot: \"copilot\",\n gemini_cli: \"gemini\",\n grok_cli: \"grok\",\n opencode: \"opencode\",\n pi: \"pi\",\n }[type];\n}\n"],"names":["TmuxManager","AgentRegistry","AGENTS","createInteractiveRuntime","DEFAULT_PID_POLL_INTERVAL_MS","DEFAULT_PID_POLL_TIMEOUT_MS","TmuxAgentRuntime","AgentNameInUseError","AgentPidPollTimeoutError","AgentRuntimeUnavailableError","AgentTerminalNotFoundError","TmuxUnavailableError","startAgent","opts","deps","registry","default","agent","type","intervalMs","pollIntervalMs","timeoutMs","pollTimeoutMs","provider","runtimeProvider","runtime","tmux","undefined","resolveStartRuntime","availability","isAvailable","ok","reason","detail","prune","existing","lookup","name","pid","sessionExists","onWarning","result","cwd","kind","agentRuntimeKind","args","command","matches","entry","runtimeRef","startedAt","Date","toISOString","sessionId","sessionFilePath","pinned","register","stopAgent","registryEntry","resolveRuntimeForEntry","stop","killProcess","agentName","focusAgent","location","focusManager","findTerminal","focused","focusTerminal","focus","sendAgentPrompt","prompt","send","writer","isHerdrRegistryEntry","claude","codex","copilot","gemini_cli","grok_cli","opencode","pi"],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { AgentRuntimeProvider } from "../utils/AgentRegistry.js";
|
|
2
|
+
import type { InteractiveAgentRuntime } from "./types.js";
|
|
3
|
+
export declare function createInteractiveRuntime(provider: AgentRuntimeProvider): InteractiveAgentRuntime;
|
|
4
|
+
//# sourceMappingURL=RuntimeFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RuntimeFactory.d.ts","sourceRoot":"","sources":["../../src/runtime/RuntimeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAM1D,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,uBAAuB,CAGhG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { HerdrAgentRuntime } from "./herdr/HerdrAgentRuntime.js";
|
|
2
|
+
import { TmuxAgentRuntime } from "./tmux/TmuxAgentRuntime.js";
|
|
3
|
+
function createHerdrRuntime() {
|
|
4
|
+
return new HerdrAgentRuntime();
|
|
5
|
+
}
|
|
6
|
+
export function createInteractiveRuntime(provider) {
|
|
7
|
+
if (provider === "herdr") return createHerdrRuntime();
|
|
8
|
+
return new TmuxAgentRuntime();
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=RuntimeFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/RuntimeFactory.ts"],"sourcesContent":["import type { AgentRuntimeProvider } from \"../utils/AgentRegistry.js\";\nimport { HerdrAgentRuntime } from \"./herdr/HerdrAgentRuntime.js\";\nimport { TmuxAgentRuntime } from \"./tmux/TmuxAgentRuntime.js\";\nimport type { InteractiveAgentRuntime } from \"./types.js\";\n\nfunction createHerdrRuntime(): InteractiveAgentRuntime {\n return new HerdrAgentRuntime();\n}\n\nexport function createInteractiveRuntime(provider: AgentRuntimeProvider): InteractiveAgentRuntime {\n if (provider === \"herdr\") return createHerdrRuntime();\n return new TmuxAgentRuntime();\n}\n"],"names":["HerdrAgentRuntime","TmuxAgentRuntime","createHerdrRuntime","createInteractiveRuntime","provider"],"mappings":"AACA,SAASA,iBAAiB,QAAQ,+BAA+B;AACjE,SAASC,gBAAgB,QAAQ,6BAA6B;AAG9D,SAASC;IACP,OAAO,IAAIF;AACb;AAEA,OAAO,SAASG,yBAAyBC,QAA8B;IACrE,IAAIA,aAAa,SAAS,OAAOF;IACjC,OAAO,IAAID;AACb"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { AgentRuntimeProvider } from "../utils/AgentRegistry.js";
|
|
2
|
+
export declare class TmuxUnavailableError extends Error {
|
|
3
|
+
constructor();
|
|
4
|
+
}
|
|
5
|
+
export declare class AgentNameInUseError extends Error {
|
|
6
|
+
agentName: string;
|
|
7
|
+
pid: number;
|
|
8
|
+
constructor(agentName: string, pid: number);
|
|
9
|
+
}
|
|
10
|
+
export declare class AgentPidPollTimeoutError extends Error {
|
|
11
|
+
agentName: string;
|
|
12
|
+
command: string;
|
|
13
|
+
timeoutMs: number;
|
|
14
|
+
constructor(agentName: string, command: string, timeoutMs: number);
|
|
15
|
+
}
|
|
16
|
+
export declare class AgentRuntimeUnavailableError extends Error {
|
|
17
|
+
provider: AgentRuntimeProvider;
|
|
18
|
+
reason: string;
|
|
19
|
+
detail: string;
|
|
20
|
+
constructor(provider: AgentRuntimeProvider, reason: string, detail: string);
|
|
21
|
+
}
|
|
22
|
+
export declare class AgentTerminalNotFoundError extends Error {
|
|
23
|
+
agentName: string;
|
|
24
|
+
pid: number;
|
|
25
|
+
constructor(agentName: string, pid: number);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,qBAAa,oBAAqB,SAAQ,KAAK;;CAK9C;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAEnC,SAAS,EAAE,MAAM;IACjB,GAAG,EAAE,MAAM;gBADX,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM;CAKrB;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAExC,SAAS,EAAE,MAAM;IACjB,OAAO,EAAE,MAAM;IACf,SAAS,EAAE,MAAM;gBAFjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM;CAK3B;AAED,qBAAa,4BAA6B,SAAQ,KAAK;IAE5C,QAAQ,EAAE,oBAAoB;IAC9B,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;gBAFd,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM;CAKxB;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IAE1C,SAAS,EAAE,MAAM;IACjB,GAAG,EAAE,MAAM;gBADX,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM;CAKrB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export class TmuxUnavailableError extends Error {
|
|
2
|
+
constructor(){
|
|
3
|
+
super("tmux is not installed or not in PATH.");
|
|
4
|
+
this.name = "TmuxUnavailableError";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class AgentNameInUseError extends Error {
|
|
8
|
+
agentName;
|
|
9
|
+
pid;
|
|
10
|
+
constructor(agentName, pid){
|
|
11
|
+
super(`Agent "${agentName}" is already running (PID ${pid}).`), this.agentName = agentName, this.pid = pid;
|
|
12
|
+
this.name = "AgentNameInUseError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class AgentPidPollTimeoutError extends Error {
|
|
16
|
+
agentName;
|
|
17
|
+
command;
|
|
18
|
+
timeoutMs;
|
|
19
|
+
constructor(agentName, command, timeoutMs){
|
|
20
|
+
super(`Agent process not found after ${timeoutMs / 1000}s.`), this.agentName = agentName, this.command = command, this.timeoutMs = timeoutMs;
|
|
21
|
+
this.name = "AgentPidPollTimeoutError";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export class AgentRuntimeUnavailableError extends Error {
|
|
25
|
+
provider;
|
|
26
|
+
reason;
|
|
27
|
+
detail;
|
|
28
|
+
constructor(provider, reason, detail){
|
|
29
|
+
super(`${provider} runtime is unavailable (${reason}): ${detail}`), this.provider = provider, this.reason = reason, this.detail = detail;
|
|
30
|
+
this.name = "AgentRuntimeUnavailableError";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class AgentTerminalNotFoundError extends Error {
|
|
34
|
+
agentName;
|
|
35
|
+
pid;
|
|
36
|
+
constructor(agentName, pid){
|
|
37
|
+
super(`Cannot find terminal for agent "${agentName}" (PID: ${pid}).`), this.agentName = agentName, this.pid = pid;
|
|
38
|
+
this.name = "AgentTerminalNotFoundError";
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/errors.ts"],"sourcesContent":["import type { AgentRuntimeProvider } from \"../utils/AgentRegistry.js\";\n\nexport class TmuxUnavailableError extends Error {\n constructor() {\n super(\"tmux is not installed or not in PATH.\");\n this.name = \"TmuxUnavailableError\";\n }\n}\n\nexport class AgentNameInUseError extends Error {\n constructor(\n public agentName: string,\n public pid: number,\n ) {\n super(`Agent \"${agentName}\" is already running (PID ${pid}).`);\n this.name = \"AgentNameInUseError\";\n }\n}\n\nexport class AgentPidPollTimeoutError extends Error {\n constructor(\n public agentName: string,\n public command: string,\n public timeoutMs: number,\n ) {\n super(`Agent process not found after ${timeoutMs / 1000}s.`);\n this.name = \"AgentPidPollTimeoutError\";\n }\n}\n\nexport class AgentRuntimeUnavailableError extends Error {\n constructor(\n public provider: AgentRuntimeProvider,\n public reason: string,\n public detail: string,\n ) {\n super(`${provider} runtime is unavailable (${reason}): ${detail}`);\n this.name = \"AgentRuntimeUnavailableError\";\n }\n}\n\nexport class AgentTerminalNotFoundError extends Error {\n constructor(\n public agentName: string,\n public pid: number,\n ) {\n super(`Cannot find terminal for agent \"${agentName}\" (PID: ${pid}).`);\n this.name = \"AgentTerminalNotFoundError\";\n }\n}\n"],"names":["TmuxUnavailableError","Error","name","AgentNameInUseError","agentName","pid","AgentPidPollTimeoutError","command","timeoutMs","AgentRuntimeUnavailableError","provider","reason","detail","AgentTerminalNotFoundError"],"mappings":"AAEA,OAAO,MAAMA,6BAA6BC;IACxC,aAAc;QACZ,KAAK,CAAC;QACN,IAAI,CAACC,IAAI,GAAG;IACd;AACF;AAEA,OAAO,MAAMC,4BAA4BF;;;IACvC,YACE,AAAOG,SAAiB,EACxB,AAAOC,GAAW,CAClB;QACA,KAAK,CAAC,CAAC,OAAO,EAAED,UAAU,0BAA0B,EAAEC,IAAI,EAAE,CAAC,QAHtDD,YAAAA,gBACAC,MAAAA;QAGP,IAAI,CAACH,IAAI,GAAG;IACd;AACF;AAEA,OAAO,MAAMI,iCAAiCL;;;;IAC5C,YACE,AAAOG,SAAiB,EACxB,AAAOG,OAAe,EACtB,AAAOC,SAAiB,CACxB;QACA,KAAK,CAAC,CAAC,8BAA8B,EAAEA,YAAY,KAAK,EAAE,CAAC,QAJpDJ,YAAAA,gBACAG,UAAAA,cACAC,YAAAA;QAGP,IAAI,CAACN,IAAI,GAAG;IACd;AACF;AAEA,OAAO,MAAMO,qCAAqCR;;;;IAChD,YACE,AAAOS,QAA8B,EACrC,AAAOC,MAAc,EACrB,AAAOC,MAAc,CACrB;QACA,KAAK,CAAC,GAAGF,SAAS,yBAAyB,EAAEC,OAAO,GAAG,EAAEC,QAAQ,QAJ1DF,WAAAA,eACAC,SAAAA,aACAC,SAAAA;QAGP,IAAI,CAACV,IAAI,GAAG;IACd;AACF;AAEA,OAAO,MAAMW,mCAAmCZ;;;IAC9C,YACE,AAAOG,SAAiB,EACxB,AAAOC,GAAW,CAClB;QACA,KAAK,CAAC,CAAC,gCAAgC,EAAED,UAAU,QAAQ,EAAEC,IAAI,EAAE,CAAC,QAH7DD,YAAAA,gBACAC,MAAAA;QAGP,IAAI,CAACH,IAAI,GAAG;IACd;AACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type HerdrCommandRunner } from "./HerdrCliClient.js";
|
|
2
|
+
import type { AgentRuntimeAvailability, InteractiveAgentRuntime, RuntimeFocusInput, RuntimeSendInput, RuntimeStartInput, RuntimeStartResult, RuntimeStopInput } from "../types.js";
|
|
3
|
+
export interface HerdrRuntimeOptions {
|
|
4
|
+
runner?: HerdrCommandRunner;
|
|
5
|
+
env?: NodeJS.ProcessEnv;
|
|
6
|
+
agentStartBusyRetryMs?: number;
|
|
7
|
+
agentStartBusyRetryIntervalMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class HerdrAgentRuntime implements InteractiveAgentRuntime {
|
|
10
|
+
readonly provider: "herdr";
|
|
11
|
+
private readonly client;
|
|
12
|
+
private readonly env;
|
|
13
|
+
private readonly agentStartBusyRetryMs;
|
|
14
|
+
private readonly agentStartBusyRetryIntervalMs;
|
|
15
|
+
constructor(options?: HerdrRuntimeOptions);
|
|
16
|
+
isAvailable(): Promise<AgentRuntimeAvailability>;
|
|
17
|
+
startAgent(input: RuntimeStartInput): Promise<RuntimeStartResult>;
|
|
18
|
+
send(input: RuntimeSendInput): Promise<void>;
|
|
19
|
+
wait(input: {
|
|
20
|
+
runtimeRef: unknown;
|
|
21
|
+
timeoutMs: number;
|
|
22
|
+
}): Promise<void>;
|
|
23
|
+
readOutput(input: {
|
|
24
|
+
runtimeRef: unknown;
|
|
25
|
+
lines?: number;
|
|
26
|
+
}): Promise<string>;
|
|
27
|
+
focus(input: RuntimeFocusInput): Promise<boolean>;
|
|
28
|
+
stop(input: RuntimeStopInput): Promise<void>;
|
|
29
|
+
private runAgentStartJson;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=HerdrAgentRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HerdrAgentRuntime.d.ts","sourceRoot":"","sources":["../../../src/runtime/herdr/HerdrAgentRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQhG,OAAO,KAAK,EACV,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAKrB,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,6BAA6B,CAAC,EAAE,MAAM,CAAC;CACxC;AAED,qBAAa,iBAAkB,YAAW,uBAAuB;IAC/D,QAAQ,CAAC,QAAQ,EAAG,OAAO,CAAU;IAErC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAS;gBAE3C,OAAO,GAAE,mBAAwB;IAQvC,WAAW,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAoChD,UAAU,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmCjE,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5C,IAAI,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAetE,UAAU,CAAC,KAAK,EAAE;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAc3E,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAMjD,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAKpC,iBAAiB;CAoBhC"}
|