@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,184 @@
|
|
|
1
|
+
import { HerdrCliClient, isCommandMissing } from "./HerdrCliClient.js";
|
|
2
|
+
import { HerdrRuntimeError } from "./HerdrErrors.js";
|
|
3
|
+
import { parseHerdrRuntimeRef } from "./HerdrRuntimeRef.js";
|
|
4
|
+
import { extractAgentRuntimeRef, extractProcessInfoPid, extractWorkspaceStart } from "./HerdrResponseParsers.js";
|
|
5
|
+
const AGENT_START_BUSY_RETRY_MS = 5000;
|
|
6
|
+
const AGENT_START_BUSY_RETRY_INTERVAL_MS = 100;
|
|
7
|
+
export class HerdrAgentRuntime {
|
|
8
|
+
provider = "herdr";
|
|
9
|
+
client;
|
|
10
|
+
env;
|
|
11
|
+
agentStartBusyRetryMs;
|
|
12
|
+
agentStartBusyRetryIntervalMs;
|
|
13
|
+
constructor(options = {}){
|
|
14
|
+
this.client = new HerdrCliClient(options.runner);
|
|
15
|
+
this.env = options.env ?? process.env;
|
|
16
|
+
this.agentStartBusyRetryMs = options.agentStartBusyRetryMs ?? AGENT_START_BUSY_RETRY_MS;
|
|
17
|
+
this.agentStartBusyRetryIntervalMs = options.agentStartBusyRetryIntervalMs ?? AGENT_START_BUSY_RETRY_INTERVAL_MS;
|
|
18
|
+
}
|
|
19
|
+
async isAvailable() {
|
|
20
|
+
try {
|
|
21
|
+
await this.client.run([
|
|
22
|
+
"--version"
|
|
23
|
+
]);
|
|
24
|
+
} catch (error) {
|
|
25
|
+
if (isCommandMissing(error)) {
|
|
26
|
+
return {
|
|
27
|
+
ok: false,
|
|
28
|
+
reason: "binary-missing",
|
|
29
|
+
detail: "herdr command was not found in PATH."
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
ok: false,
|
|
34
|
+
reason: "backend-unreachable",
|
|
35
|
+
detail: error.message
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
await this.client.run([
|
|
40
|
+
"api",
|
|
41
|
+
"snapshot"
|
|
42
|
+
]);
|
|
43
|
+
} catch (error) {
|
|
44
|
+
return {
|
|
45
|
+
ok: false,
|
|
46
|
+
reason: "backend-unreachable",
|
|
47
|
+
detail: error.message
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const currentPaneId = nonEmptyString(this.env.HERDR_PANE_ID);
|
|
51
|
+
return {
|
|
52
|
+
ok: true,
|
|
53
|
+
insideRuntime: this.env.HERDR_ENV === "1",
|
|
54
|
+
...currentPaneId ? {
|
|
55
|
+
currentPaneId
|
|
56
|
+
} : {}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
async startAgent(input) {
|
|
60
|
+
const workspace = extractWorkspaceStart(await this.client.runJson([
|
|
61
|
+
"workspace",
|
|
62
|
+
"create",
|
|
63
|
+
"--cwd",
|
|
64
|
+
input.cwd,
|
|
65
|
+
"--label",
|
|
66
|
+
input.name
|
|
67
|
+
]));
|
|
68
|
+
const agentResponse = await this.runAgentStartJson([
|
|
69
|
+
"agent",
|
|
70
|
+
"start",
|
|
71
|
+
input.name,
|
|
72
|
+
"--kind",
|
|
73
|
+
input.kind,
|
|
74
|
+
"--pane",
|
|
75
|
+
workspace.paneId,
|
|
76
|
+
...input.timeoutMs ? [
|
|
77
|
+
"--timeout",
|
|
78
|
+
String(input.timeoutMs)
|
|
79
|
+
] : [],
|
|
80
|
+
...input.args?.length ? [
|
|
81
|
+
"--",
|
|
82
|
+
...input.args
|
|
83
|
+
] : []
|
|
84
|
+
]);
|
|
85
|
+
const runtimeRef = extractAgentRuntimeRef(agentResponse, {
|
|
86
|
+
name: input.name,
|
|
87
|
+
paneId: workspace.paneId,
|
|
88
|
+
workspaceId: workspace.workspaceId
|
|
89
|
+
});
|
|
90
|
+
const processInfoResponse = await this.client.runJson([
|
|
91
|
+
"pane",
|
|
92
|
+
"process-info",
|
|
93
|
+
"--pane",
|
|
94
|
+
runtimeRef.paneId
|
|
95
|
+
]);
|
|
96
|
+
const pid = extractProcessInfoPid(processInfoResponse);
|
|
97
|
+
if (pid === null) {
|
|
98
|
+
throw new HerdrRuntimeError("Herdr pane process-info response did not include process pid.");
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
pid,
|
|
102
|
+
runtimeRef
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
async send(input) {
|
|
106
|
+
const ref = parseHerdrRuntimeRef(input.runtimeRef);
|
|
107
|
+
await this.client.run([
|
|
108
|
+
"agent",
|
|
109
|
+
"prompt",
|
|
110
|
+
ref.paneId,
|
|
111
|
+
input.prompt
|
|
112
|
+
]);
|
|
113
|
+
}
|
|
114
|
+
async wait(input) {
|
|
115
|
+
const ref = parseHerdrRuntimeRef(input.runtimeRef);
|
|
116
|
+
await this.client.run([
|
|
117
|
+
"agent",
|
|
118
|
+
"wait",
|
|
119
|
+
ref.paneId,
|
|
120
|
+
"--until",
|
|
121
|
+
"done",
|
|
122
|
+
"--until",
|
|
123
|
+
"blocked",
|
|
124
|
+
"--timeout",
|
|
125
|
+
String(input.timeoutMs)
|
|
126
|
+
]);
|
|
127
|
+
}
|
|
128
|
+
async readOutput(input) {
|
|
129
|
+
const ref = parseHerdrRuntimeRef(input.runtimeRef);
|
|
130
|
+
const { stdout } = await this.client.run([
|
|
131
|
+
"agent",
|
|
132
|
+
"read",
|
|
133
|
+
ref.paneId,
|
|
134
|
+
"--source",
|
|
135
|
+
"recent-unwrapped",
|
|
136
|
+
"--lines",
|
|
137
|
+
String(input.lines ?? 120)
|
|
138
|
+
]);
|
|
139
|
+
return stdout;
|
|
140
|
+
}
|
|
141
|
+
async focus(input) {
|
|
142
|
+
const ref = parseHerdrRuntimeRef(input.runtimeRef);
|
|
143
|
+
await this.client.run([
|
|
144
|
+
"agent",
|
|
145
|
+
"focus",
|
|
146
|
+
ref.paneId
|
|
147
|
+
]);
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
async stop(input) {
|
|
151
|
+
const ref = parseHerdrRuntimeRef(input.runtimeRef);
|
|
152
|
+
await this.client.run([
|
|
153
|
+
"pane",
|
|
154
|
+
"close",
|
|
155
|
+
ref.paneId
|
|
156
|
+
]);
|
|
157
|
+
}
|
|
158
|
+
async runAgentStartJson(args) {
|
|
159
|
+
const deadline = Date.now() + this.agentStartBusyRetryMs;
|
|
160
|
+
let lastBusyError = null;
|
|
161
|
+
do {
|
|
162
|
+
try {
|
|
163
|
+
return await this.client.runJson(args);
|
|
164
|
+
} catch (error) {
|
|
165
|
+
if (!(error instanceof HerdrRuntimeError) || error.code !== "agent_pane_busy") throw error;
|
|
166
|
+
lastBusyError = error;
|
|
167
|
+
if (Date.now() >= deadline) break;
|
|
168
|
+
await sleep(this.agentStartBusyRetryIntervalMs);
|
|
169
|
+
}
|
|
170
|
+
}while (Date.now() < deadline)
|
|
171
|
+
throw lastBusyError ?? new HerdrRuntimeError("Herdr agent start failed because the target pane stayed busy.", {
|
|
172
|
+
code: "agent_pane_busy"
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function sleep(ms) {
|
|
177
|
+
if (ms <= 0) return Promise.resolve();
|
|
178
|
+
return new Promise((resolve)=>setTimeout(resolve, ms));
|
|
179
|
+
}
|
|
180
|
+
function nonEmptyString(value) {
|
|
181
|
+
return typeof value === "string" && value.trim() ? value : undefined;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
//# sourceMappingURL=HerdrAgentRuntime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/runtime/herdr/HerdrAgentRuntime.ts"],"sourcesContent":["import { HerdrCliClient, isCommandMissing, type HerdrCommandRunner } from \"./HerdrCliClient.js\";\nimport { HerdrRuntimeError } from \"./HerdrErrors.js\";\nimport { parseHerdrRuntimeRef } from \"./HerdrRuntimeRef.js\";\nimport {\n extractAgentRuntimeRef,\n extractProcessInfoPid,\n extractWorkspaceStart,\n} from \"./HerdrResponseParsers.js\";\nimport type {\n AgentRuntimeAvailability,\n InteractiveAgentRuntime,\n RuntimeFocusInput,\n RuntimeSendInput,\n RuntimeStartInput,\n RuntimeStartResult,\n RuntimeStopInput,\n} from \"../types.js\";\n\nconst AGENT_START_BUSY_RETRY_MS = 5000;\nconst AGENT_START_BUSY_RETRY_INTERVAL_MS = 100;\n\nexport interface HerdrRuntimeOptions {\n runner?: HerdrCommandRunner;\n env?: NodeJS.ProcessEnv;\n agentStartBusyRetryMs?: number;\n agentStartBusyRetryIntervalMs?: number;\n}\n\nexport class HerdrAgentRuntime implements InteractiveAgentRuntime {\n readonly provider = \"herdr\" as const;\n\n private readonly client: HerdrCliClient;\n private readonly env: NodeJS.ProcessEnv;\n private readonly agentStartBusyRetryMs: number;\n private readonly agentStartBusyRetryIntervalMs: number;\n\n constructor(options: HerdrRuntimeOptions = {}) {\n this.client = new HerdrCliClient(options.runner);\n this.env = options.env ?? process.env;\n this.agentStartBusyRetryMs = options.agentStartBusyRetryMs ?? AGENT_START_BUSY_RETRY_MS;\n this.agentStartBusyRetryIntervalMs =\n options.agentStartBusyRetryIntervalMs ?? AGENT_START_BUSY_RETRY_INTERVAL_MS;\n }\n\n async isAvailable(): Promise<AgentRuntimeAvailability> {\n try {\n await this.client.run([\"--version\"]);\n } catch (error) {\n if (isCommandMissing(error)) {\n return {\n ok: false,\n reason: \"binary-missing\",\n detail: \"herdr command was not found in PATH.\",\n };\n }\n return {\n ok: false,\n reason: \"backend-unreachable\",\n detail: (error as Error).message,\n };\n }\n\n try {\n await this.client.run([\"api\", \"snapshot\"]);\n } catch (error) {\n return {\n ok: false,\n reason: \"backend-unreachable\",\n detail: (error as Error).message,\n };\n }\n\n const currentPaneId = nonEmptyString(this.env.HERDR_PANE_ID);\n return {\n ok: true,\n insideRuntime: this.env.HERDR_ENV === \"1\",\n ...(currentPaneId ? { currentPaneId } : {}),\n };\n }\n\n async startAgent(input: RuntimeStartInput): Promise<RuntimeStartResult> {\n const workspace = extractWorkspaceStart(\n await this.client.runJson([\"workspace\", \"create\", \"--cwd\", input.cwd, \"--label\", input.name]),\n );\n\n const agentResponse = await this.runAgentStartJson([\n \"agent\",\n \"start\",\n input.name,\n \"--kind\",\n input.kind,\n \"--pane\",\n workspace.paneId,\n ...(input.timeoutMs ? [\"--timeout\", String(input.timeoutMs)] : []),\n ...(input.args?.length ? [\"--\", ...input.args] : []),\n ]);\n const runtimeRef = extractAgentRuntimeRef(agentResponse, {\n name: input.name,\n paneId: workspace.paneId,\n workspaceId: workspace.workspaceId,\n });\n const processInfoResponse = await this.client.runJson([\n \"pane\",\n \"process-info\",\n \"--pane\",\n runtimeRef.paneId,\n ]);\n const pid = extractProcessInfoPid(processInfoResponse);\n if (pid === null) {\n throw new HerdrRuntimeError(\"Herdr pane process-info response did not include process pid.\");\n }\n\n return { pid, runtimeRef };\n }\n\n async send(input: RuntimeSendInput): Promise<void> {\n const ref = parseHerdrRuntimeRef(input.runtimeRef);\n await this.client.run([\"agent\", \"prompt\", ref.paneId, input.prompt]);\n }\n\n async wait(input: { runtimeRef: unknown; timeoutMs: number }): Promise<void> {\n const ref = parseHerdrRuntimeRef(input.runtimeRef);\n await this.client.run([\n \"agent\",\n \"wait\",\n ref.paneId,\n \"--until\",\n \"done\",\n \"--until\",\n \"blocked\",\n \"--timeout\",\n String(input.timeoutMs),\n ]);\n }\n\n async readOutput(input: { runtimeRef: unknown; lines?: number }): Promise<string> {\n const ref = parseHerdrRuntimeRef(input.runtimeRef);\n const { stdout } = await this.client.run([\n \"agent\",\n \"read\",\n ref.paneId,\n \"--source\",\n \"recent-unwrapped\",\n \"--lines\",\n String(input.lines ?? 120),\n ]);\n return stdout;\n }\n\n async focus(input: RuntimeFocusInput): Promise<boolean> {\n const ref = parseHerdrRuntimeRef(input.runtimeRef);\n await this.client.run([\"agent\", \"focus\", ref.paneId]);\n return true;\n }\n\n async stop(input: RuntimeStopInput): Promise<void> {\n const ref = parseHerdrRuntimeRef(input.runtimeRef);\n await this.client.run([\"pane\", \"close\", ref.paneId]);\n }\n\n private async runAgentStartJson(args: string[]): Promise<unknown> {\n const deadline = Date.now() + this.agentStartBusyRetryMs;\n let lastBusyError: HerdrRuntimeError | null = null;\n do {\n try {\n return await this.client.runJson(args);\n } catch (error) {\n if (!(error instanceof HerdrRuntimeError) || error.code !== \"agent_pane_busy\") throw error;\n lastBusyError = error;\n if (Date.now() >= deadline) break;\n await sleep(this.agentStartBusyRetryIntervalMs);\n }\n } while (Date.now() < deadline);\n throw (\n lastBusyError ??\n new HerdrRuntimeError(\"Herdr agent start failed because the target pane stayed busy.\", {\n code: \"agent_pane_busy\",\n })\n );\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n if (ms <= 0) return Promise.resolve();\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n"],"names":["HerdrCliClient","isCommandMissing","HerdrRuntimeError","parseHerdrRuntimeRef","extractAgentRuntimeRef","extractProcessInfoPid","extractWorkspaceStart","AGENT_START_BUSY_RETRY_MS","AGENT_START_BUSY_RETRY_INTERVAL_MS","HerdrAgentRuntime","provider","client","env","agentStartBusyRetryMs","agentStartBusyRetryIntervalMs","options","runner","process","isAvailable","run","error","ok","reason","detail","message","currentPaneId","nonEmptyString","HERDR_PANE_ID","insideRuntime","HERDR_ENV","startAgent","input","workspace","runJson","cwd","name","agentResponse","runAgentStartJson","kind","paneId","timeoutMs","String","args","length","runtimeRef","workspaceId","processInfoResponse","pid","send","ref","prompt","wait","readOutput","stdout","lines","focus","stop","deadline","Date","now","lastBusyError","code","sleep","ms","Promise","resolve","setTimeout","value","trim","undefined"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface HerdrCommandResult {
|
|
2
|
+
stdout: string;
|
|
3
|
+
stderr: string;
|
|
4
|
+
}
|
|
5
|
+
export type HerdrCommandRunner = (command: string, args: string[]) => Promise<HerdrCommandResult>;
|
|
6
|
+
export declare class HerdrCliClient {
|
|
7
|
+
private readonly runner;
|
|
8
|
+
constructor(runner?: HerdrCommandRunner);
|
|
9
|
+
run(args: string[]): Promise<HerdrCommandResult>;
|
|
10
|
+
runJson(args: string[]): Promise<unknown>;
|
|
11
|
+
}
|
|
12
|
+
export declare function isCommandMissing(error: unknown): boolean;
|
|
13
|
+
//# sourceMappingURL=HerdrCliClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HerdrCliClient.d.ts","sourceRoot":"","sources":["../../../src/runtime/herdr/HerdrCliClient.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAElG,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,kBAAkC;IAEvE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAI1C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAiBhD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOxD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { execFile } from "child_process";
|
|
2
|
+
import { promisify } from "util";
|
|
3
|
+
import { HerdrRuntimeError } from "./HerdrErrors.js";
|
|
4
|
+
import { herdrErrorFromResponse } from "./HerdrResponseParsers.js";
|
|
5
|
+
const execFileAsync = promisify(execFile);
|
|
6
|
+
export class HerdrCliClient {
|
|
7
|
+
runner;
|
|
8
|
+
constructor(runner = defaultRunner){
|
|
9
|
+
this.runner = runner;
|
|
10
|
+
}
|
|
11
|
+
run(args) {
|
|
12
|
+
return this.runner("herdr", args);
|
|
13
|
+
}
|
|
14
|
+
async runJson(args) {
|
|
15
|
+
let stdout;
|
|
16
|
+
try {
|
|
17
|
+
({ stdout } = await this.run(args));
|
|
18
|
+
} catch (error) {
|
|
19
|
+
throw parseHerdrCommandError(error);
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const parsed = JSON.parse(stdout);
|
|
23
|
+
const herdrError = herdrErrorFromResponse(parsed);
|
|
24
|
+
if (herdrError) throw herdrError;
|
|
25
|
+
return parsed;
|
|
26
|
+
} catch (error) {
|
|
27
|
+
if (error instanceof HerdrRuntimeError) throw error;
|
|
28
|
+
throw new HerdrRuntimeError(`Herdr returned invalid JSON: ${error.message}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export function isCommandMissing(error) {
|
|
33
|
+
return Boolean(error && typeof error === "object" && "code" in error && error.code === "ENOENT");
|
|
34
|
+
}
|
|
35
|
+
function defaultRunner(command, args) {
|
|
36
|
+
return execFileAsync(command, args).then(({ stdout, stderr })=>({
|
|
37
|
+
stdout,
|
|
38
|
+
stderr
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
function parseHerdrCommandError(error) {
|
|
42
|
+
const stdout = typeof error === "object" && error && "stdout" in error ? String(error.stdout ?? "") : "";
|
|
43
|
+
const stderr = typeof error === "object" && error && "stderr" in error ? String(error.stderr ?? "") : "";
|
|
44
|
+
const parsed = parseJson(stdout) ?? parseJson(stderr);
|
|
45
|
+
if (parsed) {
|
|
46
|
+
const herdrError = herdrErrorFromResponse(parsed);
|
|
47
|
+
if (herdrError) return herdrError;
|
|
48
|
+
}
|
|
49
|
+
return new HerdrRuntimeError(error.message);
|
|
50
|
+
}
|
|
51
|
+
function parseJson(value) {
|
|
52
|
+
if (!value.trim()) return null;
|
|
53
|
+
try {
|
|
54
|
+
return JSON.parse(value);
|
|
55
|
+
} catch {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=HerdrCliClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/runtime/herdr/HerdrCliClient.ts"],"sourcesContent":["import { execFile } from \"child_process\";\nimport { promisify } from \"util\";\nimport { HerdrRuntimeError } from \"./HerdrErrors.js\";\nimport { herdrErrorFromResponse } from \"./HerdrResponseParsers.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport interface HerdrCommandResult {\n stdout: string;\n stderr: string;\n}\n\nexport type HerdrCommandRunner = (command: string, args: string[]) => Promise<HerdrCommandResult>;\n\nexport class HerdrCliClient {\n constructor(private readonly runner: HerdrCommandRunner = defaultRunner) {}\n\n run(args: string[]): Promise<HerdrCommandResult> {\n return this.runner(\"herdr\", args);\n }\n\n async runJson(args: string[]): Promise<unknown> {\n let stdout: string;\n try {\n ({ stdout } = await this.run(args));\n } catch (error) {\n throw parseHerdrCommandError(error);\n }\n try {\n const parsed = JSON.parse(stdout) as unknown;\n const herdrError = herdrErrorFromResponse(parsed);\n if (herdrError) throw herdrError;\n return parsed;\n } catch (error) {\n if (error instanceof HerdrRuntimeError) throw error;\n throw new HerdrRuntimeError(`Herdr returned invalid JSON: ${(error as Error).message}`);\n }\n }\n}\n\nexport function isCommandMissing(error: unknown): boolean {\n return Boolean(\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n (error as NodeJS.ErrnoException).code === \"ENOENT\",\n );\n}\n\nfunction defaultRunner(command: string, args: string[]): Promise<HerdrCommandResult> {\n return execFileAsync(command, args).then(({ stdout, stderr }) => ({ stdout, stderr }));\n}\n\nfunction parseHerdrCommandError(error: unknown): HerdrRuntimeError {\n const stdout =\n typeof error === \"object\" && error && \"stdout\" in error\n ? String((error as { stdout?: unknown }).stdout ?? \"\")\n : \"\";\n const stderr =\n typeof error === \"object\" && error && \"stderr\" in error\n ? String((error as { stderr?: unknown }).stderr ?? \"\")\n : \"\";\n const parsed = parseJson(stdout) ?? parseJson(stderr);\n if (parsed) {\n const herdrError = herdrErrorFromResponse(parsed);\n if (herdrError) return herdrError;\n }\n return new HerdrRuntimeError((error as Error).message);\n}\n\nfunction parseJson(value: string): unknown | null {\n if (!value.trim()) return null;\n try {\n return JSON.parse(value) as unknown;\n } catch {\n return null;\n }\n}\n"],"names":["execFile","promisify","HerdrRuntimeError","herdrErrorFromResponse","execFileAsync","HerdrCliClient","runner","defaultRunner","run","args","runJson","stdout","error","parseHerdrCommandError","parsed","JSON","parse","herdrError","message","isCommandMissing","Boolean","code","command","then","stderr","String","parseJson","value","trim"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,gBAAgB;AACzC,SAASC,SAAS,QAAQ,OAAO;AACjC,SAASC,iBAAiB,QAAQ,mBAAmB;AACrD,SAASC,sBAAsB,QAAQ,4BAA4B;AAEnE,MAAMC,gBAAgBH,UAAUD;AAShC,OAAO,MAAMK;;IACX,YAAY,AAAiBC,SAA6BC,aAAa,CAAE;aAA5CD,SAAAA;IAA6C;IAE1EE,IAAIC,IAAc,EAA+B;QAC/C,OAAO,IAAI,CAACH,MAAM,CAAC,SAASG;IAC9B;IAEA,MAAMC,QAAQD,IAAc,EAAoB;QAC9C,IAAIE;QACJ,IAAI;YACD,CAAA,EAAEA,MAAM,EAAE,GAAG,MAAM,IAAI,CAACH,GAAG,CAACC,KAAI;QACnC,EAAE,OAAOG,OAAO;YACd,MAAMC,uBAAuBD;QAC/B;QACA,IAAI;YACF,MAAME,SAASC,KAAKC,KAAK,CAACL;YAC1B,MAAMM,aAAad,uBAAuBW;YAC1C,IAAIG,YAAY,MAAMA;YACtB,OAAOH;QACT,EAAE,OAAOF,OAAO;YACd,IAAIA,iBAAiBV,mBAAmB,MAAMU;YAC9C,MAAM,IAAIV,kBAAkB,CAAC,6BAA6B,EAAE,AAACU,MAAgBM,OAAO,EAAE;QACxF;IACF;AACF;AAEA,OAAO,SAASC,iBAAiBP,KAAc;IAC7C,OAAOQ,QACLR,SACA,OAAOA,UAAU,YACjB,UAAUA,SACV,AAACA,MAAgCS,IAAI,KAAK;AAE9C;AAEA,SAASd,cAAce,OAAe,EAAEb,IAAc;IACpD,OAAOL,cAAckB,SAASb,MAAMc,IAAI,CAAC,CAAC,EAAEZ,MAAM,EAAEa,MAAM,EAAE,GAAM,CAAA;YAAEb;YAAQa;QAAO,CAAA;AACrF;AAEA,SAASX,uBAAuBD,KAAc;IAC5C,MAAMD,SACJ,OAAOC,UAAU,YAAYA,SAAS,YAAYA,QAC9Ca,OAAO,AAACb,MAA+BD,MAAM,IAAI,MACjD;IACN,MAAMa,SACJ,OAAOZ,UAAU,YAAYA,SAAS,YAAYA,QAC9Ca,OAAO,AAACb,MAA+BY,MAAM,IAAI,MACjD;IACN,MAAMV,SAASY,UAAUf,WAAWe,UAAUF;IAC9C,IAAIV,QAAQ;QACV,MAAMG,aAAad,uBAAuBW;QAC1C,IAAIG,YAAY,OAAOA;IACzB;IACA,OAAO,IAAIf,kBAAkB,AAACU,MAAgBM,OAAO;AACvD;AAEA,SAASQ,UAAUC,KAAa;IAC9B,IAAI,CAACA,MAAMC,IAAI,IAAI,OAAO;IAC1B,IAAI;QACF,OAAOb,KAAKC,KAAK,CAACW;IACpB,EAAE,OAAM;QACN,OAAO;IACT;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HerdrErrors.d.ts","sourceRoot":"","sources":["../../../src/runtime/herdr/HerdrErrors.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;gBAEX,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAO;CAK7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/runtime/herdr/HerdrErrors.ts"],"sourcesContent":["export class HerdrRuntimeError extends Error {\n readonly code?: string;\n\n constructor(message: string, options: { code?: string } = {}) {\n super(message);\n this.name = \"HerdrRuntimeError\";\n this.code = options.code;\n }\n}\n"],"names":["HerdrRuntimeError","Error","code","message","options","name"],"mappings":"AAAA,OAAO,MAAMA,0BAA0BC;IAC5BC,KAAc;IAEvB,YAAYC,OAAe,EAAEC,UAA6B,CAAC,CAAC,CAAE;QAC5D,KAAK,CAACD;QACN,IAAI,CAACE,IAAI,GAAG;QACZ,IAAI,CAACH,IAAI,GAAGE,QAAQF,IAAI;IAC1B;AACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { HerdrRuntimeError } from "./HerdrErrors.js";
|
|
2
|
+
import type { HerdrRuntimeRef } from "./HerdrRuntimeRef.js";
|
|
3
|
+
export declare function extractWorkspaceStart(value: unknown): {
|
|
4
|
+
workspaceId?: string;
|
|
5
|
+
paneId: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function extractAgentRuntimeRef(value: unknown, fallback: {
|
|
8
|
+
paneId: string;
|
|
9
|
+
name: string;
|
|
10
|
+
workspaceId?: string;
|
|
11
|
+
}): HerdrRuntimeRef;
|
|
12
|
+
export declare function extractProcessInfoPid(value: unknown): number | null;
|
|
13
|
+
export declare function herdrErrorFromResponse(value: unknown): HerdrRuntimeError | null;
|
|
14
|
+
//# sourceMappingURL=HerdrResponseParsers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HerdrResponseParsers.d.ts","sourceRoot":"","sources":["../../../src/runtime/herdr/HerdrResponseParsers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAU9F;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/D,eAAe,CAWjB;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAWnE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAM/E"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { HerdrRuntimeError } from "./HerdrErrors.js";
|
|
2
|
+
export function extractWorkspaceStart(value) {
|
|
3
|
+
const workspaceId = getString(value, [
|
|
4
|
+
"result",
|
|
5
|
+
"workspace",
|
|
6
|
+
"workspace_id"
|
|
7
|
+
]);
|
|
8
|
+
const paneId = getString(value, [
|
|
9
|
+
"result",
|
|
10
|
+
"root_pane",
|
|
11
|
+
"pane_id"
|
|
12
|
+
]);
|
|
13
|
+
if (!paneId) {
|
|
14
|
+
throw new HerdrRuntimeError("Herdr workspace create response did not include root pane id.");
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
...workspaceId ? {
|
|
18
|
+
workspaceId
|
|
19
|
+
} : {},
|
|
20
|
+
paneId
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function extractAgentRuntimeRef(value, fallback) {
|
|
24
|
+
const agentPaneId = getString(value, [
|
|
25
|
+
"result",
|
|
26
|
+
"agent",
|
|
27
|
+
"pane_id"
|
|
28
|
+
]) ?? fallback.paneId;
|
|
29
|
+
const agentName = getString(value, [
|
|
30
|
+
"result",
|
|
31
|
+
"agent",
|
|
32
|
+
"name"
|
|
33
|
+
]) ?? fallback.name;
|
|
34
|
+
const tabId = getString(value, [
|
|
35
|
+
"result",
|
|
36
|
+
"agent",
|
|
37
|
+
"tab_id"
|
|
38
|
+
]);
|
|
39
|
+
return {
|
|
40
|
+
session: "default",
|
|
41
|
+
...fallback.workspaceId ? {
|
|
42
|
+
workspaceId: fallback.workspaceId
|
|
43
|
+
} : {},
|
|
44
|
+
...tabId ? {
|
|
45
|
+
tabId
|
|
46
|
+
} : {},
|
|
47
|
+
paneId: agentPaneId,
|
|
48
|
+
agentName
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export function extractProcessInfoPid(value) {
|
|
52
|
+
const processInfo = getObject(value, [
|
|
53
|
+
"result",
|
|
54
|
+
"process_info"
|
|
55
|
+
]);
|
|
56
|
+
if (!processInfo) return null;
|
|
57
|
+
const processes = processInfo.foreground_processes;
|
|
58
|
+
if (!Array.isArray(processes)) return numberOrNull(processInfo.shell_pid);
|
|
59
|
+
for (const processInfo of processes){
|
|
60
|
+
if (!processInfo || typeof processInfo !== "object") continue;
|
|
61
|
+
const pid = numberOrNull(processInfo.pid);
|
|
62
|
+
if (pid !== null) return pid;
|
|
63
|
+
}
|
|
64
|
+
return numberOrNull(processInfo.shell_pid);
|
|
65
|
+
}
|
|
66
|
+
export function herdrErrorFromResponse(value) {
|
|
67
|
+
const error = getObject(value, [
|
|
68
|
+
"error"
|
|
69
|
+
]);
|
|
70
|
+
if (!error) return null;
|
|
71
|
+
const message = nonEmptyString(error.message) ?? "Herdr command failed.";
|
|
72
|
+
const code = nonEmptyString(error.code);
|
|
73
|
+
return new HerdrRuntimeError(message, code ? {
|
|
74
|
+
code
|
|
75
|
+
} : {});
|
|
76
|
+
}
|
|
77
|
+
function getObject(value, path) {
|
|
78
|
+
let current = value;
|
|
79
|
+
for (const part of path){
|
|
80
|
+
if (!current || typeof current !== "object" || Array.isArray(current) || !(part in current)) return null;
|
|
81
|
+
current = current[part];
|
|
82
|
+
}
|
|
83
|
+
return current && typeof current === "object" && !Array.isArray(current) ? current : null;
|
|
84
|
+
}
|
|
85
|
+
function getString(value, path) {
|
|
86
|
+
const parent = getObject(value, path.slice(0, -1));
|
|
87
|
+
return parent ? nonEmptyString(parent[path[path.length - 1]]) : undefined;
|
|
88
|
+
}
|
|
89
|
+
function nonEmptyString(value) {
|
|
90
|
+
return typeof value === "string" && value.trim() ? value : undefined;
|
|
91
|
+
}
|
|
92
|
+
function numberOrNull(value) {
|
|
93
|
+
return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : null;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
//# sourceMappingURL=HerdrResponseParsers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/runtime/herdr/HerdrResponseParsers.ts"],"sourcesContent":["import { HerdrRuntimeError } from \"./HerdrErrors.js\";\nimport type { HerdrRuntimeRef } from \"./HerdrRuntimeRef.js\";\n\nexport function extractWorkspaceStart(value: unknown): { workspaceId?: string; paneId: string } {\n const workspaceId = getString(value, [\"result\", \"workspace\", \"workspace_id\"]);\n const paneId = getString(value, [\"result\", \"root_pane\", \"pane_id\"]);\n if (!paneId) {\n throw new HerdrRuntimeError(\"Herdr workspace create response did not include root pane id.\");\n }\n return {\n ...(workspaceId ? { workspaceId } : {}),\n paneId,\n };\n}\n\nexport function extractAgentRuntimeRef(\n value: unknown,\n fallback: { paneId: string; name: string; workspaceId?: string },\n): HerdrRuntimeRef {\n const agentPaneId = getString(value, [\"result\", \"agent\", \"pane_id\"]) ?? fallback.paneId;\n const agentName = getString(value, [\"result\", \"agent\", \"name\"]) ?? fallback.name;\n const tabId = getString(value, [\"result\", \"agent\", \"tab_id\"]);\n return {\n session: \"default\",\n ...(fallback.workspaceId ? { workspaceId: fallback.workspaceId } : {}),\n ...(tabId ? { tabId } : {}),\n paneId: agentPaneId,\n agentName,\n };\n}\n\nexport function extractProcessInfoPid(value: unknown): number | null {\n const processInfo = getObject(value, [\"result\", \"process_info\"]);\n if (!processInfo) return null;\n const processes = processInfo.foreground_processes;\n if (!Array.isArray(processes)) return numberOrNull(processInfo.shell_pid);\n for (const processInfo of processes) {\n if (!processInfo || typeof processInfo !== \"object\") continue;\n const pid = numberOrNull((processInfo as { pid?: unknown }).pid);\n if (pid !== null) return pid;\n }\n return numberOrNull(processInfo.shell_pid);\n}\n\nexport function herdrErrorFromResponse(value: unknown): HerdrRuntimeError | null {\n const error = getObject(value, [\"error\"]);\n if (!error) return null;\n const message = nonEmptyString(error.message) ?? \"Herdr command failed.\";\n const code = nonEmptyString(error.code);\n return new HerdrRuntimeError(message, code ? { code } : {});\n}\n\nfunction getObject(value: unknown, path: string[]): Record<string, unknown> | null {\n let current = value;\n for (const part of path) {\n if (!current || typeof current !== \"object\" || Array.isArray(current) || !(part in current))\n return null;\n current = (current as Record<string, unknown>)[part];\n }\n return current && typeof current === \"object\" && !Array.isArray(current)\n ? (current as Record<string, unknown>)\n : null;\n}\n\nfunction getString(value: unknown, path: string[]): string | undefined {\n const parent = getObject(value, path.slice(0, -1));\n return parent ? nonEmptyString(parent[path[path.length - 1]!]) : undefined;\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction numberOrNull(value: unknown): number | null {\n return typeof value === \"number\" && Number.isInteger(value) && value > 0 ? value : null;\n}\n"],"names":["HerdrRuntimeError","extractWorkspaceStart","value","workspaceId","getString","paneId","extractAgentRuntimeRef","fallback","agentPaneId","agentName","name","tabId","session","extractProcessInfoPid","processInfo","getObject","processes","foreground_processes","Array","isArray","numberOrNull","shell_pid","pid","herdrErrorFromResponse","error","message","nonEmptyString","code","path","current","part","parent","slice","length","undefined","trim","Number","isInteger"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,mBAAmB;AAGrD,OAAO,SAASC,sBAAsBC,KAAc;IAClD,MAAMC,cAAcC,UAAUF,OAAO;QAAC;QAAU;QAAa;KAAe;IAC5E,MAAMG,SAASD,UAAUF,OAAO;QAAC;QAAU;QAAa;KAAU;IAClE,IAAI,CAACG,QAAQ;QACX,MAAM,IAAIL,kBAAkB;IAC9B;IACA,OAAO;QACL,GAAIG,cAAc;YAAEA;QAAY,IAAI,CAAC,CAAC;QACtCE;IACF;AACF;AAEA,OAAO,SAASC,uBACdJ,KAAc,EACdK,QAAgE;IAEhE,MAAMC,cAAcJ,UAAUF,OAAO;QAAC;QAAU;QAAS;KAAU,KAAKK,SAASF,MAAM;IACvF,MAAMI,YAAYL,UAAUF,OAAO;QAAC;QAAU;QAAS;KAAO,KAAKK,SAASG,IAAI;IAChF,MAAMC,QAAQP,UAAUF,OAAO;QAAC;QAAU;QAAS;KAAS;IAC5D,OAAO;QACLU,SAAS;QACT,GAAIL,SAASJ,WAAW,GAAG;YAAEA,aAAaI,SAASJ,WAAW;QAAC,IAAI,CAAC,CAAC;QACrE,GAAIQ,QAAQ;YAAEA;QAAM,IAAI,CAAC,CAAC;QAC1BN,QAAQG;QACRC;IACF;AACF;AAEA,OAAO,SAASI,sBAAsBX,KAAc;IAClD,MAAMY,cAAcC,UAAUb,OAAO;QAAC;QAAU;KAAe;IAC/D,IAAI,CAACY,aAAa,OAAO;IACzB,MAAME,YAAYF,YAAYG,oBAAoB;IAClD,IAAI,CAACC,MAAMC,OAAO,CAACH,YAAY,OAAOI,aAAaN,YAAYO,SAAS;IACxE,KAAK,MAAMP,eAAeE,UAAW;QACnC,IAAI,CAACF,eAAe,OAAOA,gBAAgB,UAAU;QACrD,MAAMQ,MAAMF,aAAa,AAACN,YAAkCQ,GAAG;QAC/D,IAAIA,QAAQ,MAAM,OAAOA;IAC3B;IACA,OAAOF,aAAaN,YAAYO,SAAS;AAC3C;AAEA,OAAO,SAASE,uBAAuBrB,KAAc;IACnD,MAAMsB,QAAQT,UAAUb,OAAO;QAAC;KAAQ;IACxC,IAAI,CAACsB,OAAO,OAAO;IACnB,MAAMC,UAAUC,eAAeF,MAAMC,OAAO,KAAK;IACjD,MAAME,OAAOD,eAAeF,MAAMG,IAAI;IACtC,OAAO,IAAI3B,kBAAkByB,SAASE,OAAO;QAAEA;IAAK,IAAI,CAAC;AAC3D;AAEA,SAASZ,UAAUb,KAAc,EAAE0B,IAAc;IAC/C,IAAIC,UAAU3B;IACd,KAAK,MAAM4B,QAAQF,KAAM;QACvB,IAAI,CAACC,WAAW,OAAOA,YAAY,YAAYX,MAAMC,OAAO,CAACU,YAAY,CAAEC,CAAAA,QAAQD,OAAM,GACvF,OAAO;QACTA,UAAU,AAACA,OAAmC,CAACC,KAAK;IACtD;IACA,OAAOD,WAAW,OAAOA,YAAY,YAAY,CAACX,MAAMC,OAAO,CAACU,WAC3DA,UACD;AACN;AAEA,SAASzB,UAAUF,KAAc,EAAE0B,IAAc;IAC/C,MAAMG,SAAShB,UAAUb,OAAO0B,KAAKI,KAAK,CAAC,GAAG,CAAC;IAC/C,OAAOD,SAASL,eAAeK,MAAM,CAACH,IAAI,CAACA,KAAKK,MAAM,GAAG,EAAE,CAAE,IAAIC;AACnE;AAEA,SAASR,eAAexB,KAAc;IACpC,OAAO,OAAOA,UAAU,YAAYA,MAAMiC,IAAI,KAAKjC,QAAQgC;AAC7D;AAEA,SAASd,aAAalB,KAAc;IAClC,OAAO,OAAOA,UAAU,YAAYkC,OAAOC,SAAS,CAACnC,UAAUA,QAAQ,IAAIA,QAAQ;AACrF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface HerdrRuntimeRef {
|
|
2
|
+
session: string;
|
|
3
|
+
workspaceId?: string;
|
|
4
|
+
tabId?: string;
|
|
5
|
+
paneId: string;
|
|
6
|
+
agentName?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function parseHerdrRuntimeRef(value: unknown): HerdrRuntimeRef;
|
|
9
|
+
//# sourceMappingURL=HerdrRuntimeRef.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HerdrRuntimeRef.d.ts","sourceRoot":"","sources":["../../../src/runtime/herdr/HerdrRuntimeRef.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,CA0BpE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { HerdrRuntimeError } from "./HerdrErrors.js";
|
|
2
|
+
export function parseHerdrRuntimeRef(value) {
|
|
3
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
4
|
+
throw new HerdrRuntimeError("Herdr runtime ref is missing or invalid.");
|
|
5
|
+
}
|
|
6
|
+
const ref = value;
|
|
7
|
+
const session = nonEmptyString(ref.session) ?? "default";
|
|
8
|
+
const workspaceId = nonEmptyString(ref.workspaceId);
|
|
9
|
+
const tabId = nonEmptyString(ref.tabId);
|
|
10
|
+
const paneId = nonEmptyString(ref.paneId);
|
|
11
|
+
const agentName = nonEmptyString(ref.agentName);
|
|
12
|
+
if (!paneId) {
|
|
13
|
+
throw new HerdrRuntimeError("Herdr runtime ref is missing paneId.");
|
|
14
|
+
}
|
|
15
|
+
return {
|
|
16
|
+
session,
|
|
17
|
+
paneId,
|
|
18
|
+
...workspaceId ? {
|
|
19
|
+
workspaceId
|
|
20
|
+
} : {},
|
|
21
|
+
...tabId ? {
|
|
22
|
+
tabId
|
|
23
|
+
} : {},
|
|
24
|
+
...agentName ? {
|
|
25
|
+
agentName
|
|
26
|
+
} : {}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function nonEmptyString(value) {
|
|
30
|
+
return typeof value === "string" && value.trim() ? value : undefined;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=HerdrRuntimeRef.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/runtime/herdr/HerdrRuntimeRef.ts"],"sourcesContent":["import { HerdrRuntimeError } from \"./HerdrErrors.js\";\n\nexport interface HerdrRuntimeRef {\n session: string;\n workspaceId?: string;\n tabId?: string;\n paneId: string;\n agentName?: string;\n}\n\nexport function parseHerdrRuntimeRef(value: unknown): HerdrRuntimeRef {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new HerdrRuntimeError(\"Herdr runtime ref is missing or invalid.\");\n }\n const ref = value as {\n session?: unknown;\n workspaceId?: unknown;\n tabId?: unknown;\n paneId?: unknown;\n agentName?: unknown;\n };\n const session = nonEmptyString(ref.session) ?? \"default\";\n const workspaceId = nonEmptyString(ref.workspaceId);\n const tabId = nonEmptyString(ref.tabId);\n const paneId = nonEmptyString(ref.paneId);\n const agentName = nonEmptyString(ref.agentName);\n if (!paneId) {\n throw new HerdrRuntimeError(\"Herdr runtime ref is missing paneId.\");\n }\n return {\n session,\n paneId,\n ...(workspaceId ? { workspaceId } : {}),\n ...(tabId ? { tabId } : {}),\n ...(agentName ? { agentName } : {}),\n };\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n"],"names":["HerdrRuntimeError","parseHerdrRuntimeRef","value","Array","isArray","ref","session","nonEmptyString","workspaceId","tabId","paneId","agentName","trim","undefined"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,mBAAmB;AAUrD,OAAO,SAASC,qBAAqBC,KAAc;IACjD,IAAI,CAACA,SAAS,OAAOA,UAAU,YAAYC,MAAMC,OAAO,CAACF,QAAQ;QAC/D,MAAM,IAAIF,kBAAkB;IAC9B;IACA,MAAMK,MAAMH;IAOZ,MAAMI,UAAUC,eAAeF,IAAIC,OAAO,KAAK;IAC/C,MAAME,cAAcD,eAAeF,IAAIG,WAAW;IAClD,MAAMC,QAAQF,eAAeF,IAAII,KAAK;IACtC,MAAMC,SAASH,eAAeF,IAAIK,MAAM;IACxC,MAAMC,YAAYJ,eAAeF,IAAIM,SAAS;IAC9C,IAAI,CAACD,QAAQ;QACX,MAAM,IAAIV,kBAAkB;IAC9B;IACA,OAAO;QACLM;QACAI;QACA,GAAIF,cAAc;YAAEA;QAAY,IAAI,CAAC,CAAC;QACtC,GAAIC,QAAQ;YAAEA;QAAM,IAAI,CAAC,CAAC;QAC1B,GAAIE,YAAY;YAAEA;QAAU,IAAI,CAAC,CAAC;IACpC;AACF;AAEA,SAASJ,eAAeL,KAAc;IACpC,OAAO,OAAOA,UAAU,YAAYA,MAAMU,IAAI,KAAKV,QAAQW;AAC7D"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { TmuxManager } from "../../terminal/TmuxManager.js";
|
|
2
|
+
export declare const DEFAULT_PID_POLL_INTERVAL_MS = 500;
|
|
3
|
+
export declare const DEFAULT_PID_POLL_TIMEOUT_MS = 15000;
|
|
4
|
+
export declare function pollForPid(tmux: Pick<TmuxManager, "findAgentPid">, session: string, matches: (psCommand: string) => boolean, intervalMs: number, timeoutMs: number): Promise<number | null>;
|
|
5
|
+
//# sourceMappingURL=PidPolling.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PidPolling.d.ts","sourceRoot":"","sources":["../../../src/runtime/tmux/PidPolling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAGlD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EACvC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBxB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const DEFAULT_PID_POLL_INTERVAL_MS = 500;
|
|
2
|
+
export const DEFAULT_PID_POLL_TIMEOUT_MS = 15_000;
|
|
3
|
+
const REQUIRED_STABLE_PID_POLLS = 5;
|
|
4
|
+
export async function pollForPid(tmux, session, matches, intervalMs, timeoutMs) {
|
|
5
|
+
const deadline = Date.now() + timeoutMs;
|
|
6
|
+
let candidatePid = null;
|
|
7
|
+
let stablePolls = 0;
|
|
8
|
+
while(Date.now() < deadline){
|
|
9
|
+
const pid = await tmux.findAgentPid(session, matches);
|
|
10
|
+
if (pid !== null) {
|
|
11
|
+
if (pid === candidatePid) {
|
|
12
|
+
stablePolls += 1;
|
|
13
|
+
} else {
|
|
14
|
+
candidatePid = pid;
|
|
15
|
+
stablePolls = 1;
|
|
16
|
+
}
|
|
17
|
+
if (stablePolls >= REQUIRED_STABLE_PID_POLLS) return pid;
|
|
18
|
+
}
|
|
19
|
+
await new Promise((resolve)=>setTimeout(resolve, intervalMs));
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=PidPolling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/runtime/tmux/PidPolling.ts"],"sourcesContent":["import type { TmuxManager } from \"../../terminal/TmuxManager.js\";\n\nexport const DEFAULT_PID_POLL_INTERVAL_MS = 500;\nexport const DEFAULT_PID_POLL_TIMEOUT_MS = 15_000;\nconst REQUIRED_STABLE_PID_POLLS = 5;\n\nexport async function pollForPid(\n tmux: Pick<TmuxManager, \"findAgentPid\">,\n session: string,\n matches: (psCommand: string) => boolean,\n intervalMs: number,\n timeoutMs: number,\n): Promise<number | null> {\n const deadline = Date.now() + timeoutMs;\n let candidatePid: number | null = null;\n let stablePolls = 0;\n\n while (Date.now() < deadline) {\n const pid = await tmux.findAgentPid(session, matches);\n if (pid !== null) {\n if (pid === candidatePid) {\n stablePolls += 1;\n } else {\n candidatePid = pid;\n stablePolls = 1;\n }\n\n if (stablePolls >= REQUIRED_STABLE_PID_POLLS) return pid;\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs));\n }\n\n return null;\n}\n"],"names":["DEFAULT_PID_POLL_INTERVAL_MS","DEFAULT_PID_POLL_TIMEOUT_MS","REQUIRED_STABLE_PID_POLLS","pollForPid","tmux","session","matches","intervalMs","timeoutMs","deadline","Date","now","candidatePid","stablePolls","pid","findAgentPid","Promise","resolve","setTimeout"],"mappings":"AAEA,OAAO,MAAMA,+BAA+B,IAAI;AAChD,OAAO,MAAMC,8BAA8B,OAAO;AAClD,MAAMC,4BAA4B;AAElC,OAAO,eAAeC,WACpBC,IAAuC,EACvCC,OAAe,EACfC,OAAuC,EACvCC,UAAkB,EAClBC,SAAiB;IAEjB,MAAMC,WAAWC,KAAKC,GAAG,KAAKH;IAC9B,IAAII,eAA8B;IAClC,IAAIC,cAAc;IAElB,MAAOH,KAAKC,GAAG,KAAKF,SAAU;QAC5B,MAAMK,MAAM,MAAMV,KAAKW,YAAY,CAACV,SAASC;QAC7C,IAAIQ,QAAQ,MAAM;YAChB,IAAIA,QAAQF,cAAc;gBACxBC,eAAe;YACjB,OAAO;gBACLD,eAAeE;gBACfD,cAAc;YAChB;YAEA,IAAIA,eAAeX,2BAA2B,OAAOY;QACvD;QACA,MAAM,IAAIE,QAAQ,CAACC,UAAYC,WAAWD,SAASV;IACrD;IAEA,OAAO;AACT"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { TmuxManager } from "../../terminal/TmuxManager.js";
|
|
2
|
+
import type { AgentRuntimeAvailability, InteractiveAgentRuntime, RuntimeFocusInput, RuntimeSendDeps, RuntimeSendInput, RuntimeStartInput, RuntimeStartResult, RuntimeStopInput } from "../types.js";
|
|
3
|
+
export declare class TmuxAgentRuntime implements InteractiveAgentRuntime {
|
|
4
|
+
readonly provider: "tmux";
|
|
5
|
+
private readonly tmux;
|
|
6
|
+
constructor(tmux?: TmuxManager);
|
|
7
|
+
isAvailable(): Promise<AgentRuntimeAvailability>;
|
|
8
|
+
startAgent(input: RuntimeStartInput & {
|
|
9
|
+
command?: string;
|
|
10
|
+
matches?: (psCommand: string) => boolean;
|
|
11
|
+
pollIntervalMs?: number;
|
|
12
|
+
}): Promise<RuntimeStartResult>;
|
|
13
|
+
send(input: RuntimeSendInput, deps?: RuntimeSendDeps): Promise<void>;
|
|
14
|
+
focus(input: RuntimeFocusInput): Promise<boolean>;
|
|
15
|
+
stop(input: RuntimeStopInput): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=TmuxAgentRuntime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TmuxAgentRuntime.d.ts","sourceRoot":"","sources":["../../../src/runtime/tmux/TmuxAgentRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAK5D,OAAO,KAAK,EACV,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB,qBAAa,gBAAiB,YAAW,uBAAuB;IAC9D,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;gBAEvB,IAAI,GAAE,WAA+B;IAI3C,WAAW,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAWhD,UAAU,CACd,KAAK,EAAE,iBAAiB,GAAG;QACzB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;QACzC,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GACA,OAAO,CAAC,kBAAkB,CAAC;IA8BxB,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpE,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAMjD,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAenD"}
|