@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
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { PiPrintError } from
|
|
2
|
-
import { PiCliProbe } from
|
|
3
|
-
import { PiPrintRunner } from
|
|
4
|
-
import { DurableAgentRepository } from
|
|
5
|
-
import { runDurableAgent } from
|
|
1
|
+
import { PiPrintError } from "../../../durable/DurableAgent.js";
|
|
2
|
+
import { PiCliProbe } from "./PiCliProbe.js";
|
|
3
|
+
import { PiPrintRunner } from "./PiPrintRunner.js";
|
|
4
|
+
import { DurableAgentRepository } from "../../../durable/DurableAgentRepository.js";
|
|
5
|
+
import { runDurableAgent } from "../../../durable/run.js";
|
|
6
6
|
export class PiPrintAgentService {
|
|
7
7
|
repository;
|
|
8
8
|
probe;
|
|
@@ -18,23 +18,23 @@ export class PiPrintAgentService {
|
|
|
18
18
|
await this.probe.validate();
|
|
19
19
|
return this.repository.create({
|
|
20
20
|
...input,
|
|
21
|
-
provider:
|
|
21
|
+
provider: "pi"
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
async send(reference, prompt) {
|
|
25
25
|
const completed = await runDurableAgent({
|
|
26
26
|
reference,
|
|
27
|
-
provider:
|
|
27
|
+
provider: "pi",
|
|
28
28
|
repository: this.repository,
|
|
29
|
-
ambiguousError: ()=>new PiPrintError(
|
|
30
|
-
providerError: ()=>new PiPrintError(
|
|
29
|
+
ambiguousError: ()=>new PiPrintError("Multiple print agents match.", "PI_UNSUPPORTED"),
|
|
30
|
+
providerError: ()=>new PiPrintError("Print agent provider is not Pi.", "PI_UNSUPPORTED"),
|
|
31
31
|
execute: (agent, token)=>this.runner.run({
|
|
32
32
|
agent,
|
|
33
33
|
prompt,
|
|
34
34
|
executable: this.executable,
|
|
35
35
|
onSpawn: (identity)=>this.repository.recordProviderProcess(agent.id, token, identity)
|
|
36
36
|
}),
|
|
37
|
-
isSessionMismatch: (error)=>error instanceof PiPrintError && error.code ===
|
|
37
|
+
isSessionMismatch: (error)=>error instanceof PiPrintError && error.code === "PI_SESSION_MISMATCH"
|
|
38
38
|
});
|
|
39
39
|
return {
|
|
40
40
|
...completed.result,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/providers/pi/durable/PiPrintAgentService.ts"],"sourcesContent":["import type { DurableAgent, ProcessIdentity } from
|
|
1
|
+
{"version":3,"sources":["../../../../src/providers/pi/durable/PiPrintAgentService.ts"],"sourcesContent":["import type { DurableAgent, ProcessIdentity } from \"../../../durable/DurableAgent.js\";\nimport { PiPrintError } from \"../../../durable/DurableAgent.js\";\nimport { PiCliProbe } from \"./PiCliProbe.js\";\nimport { PiPrintRunner, type PiPrintRunResult } from \"./PiPrintRunner.js\";\nimport {\n DurableAgentRepository,\n type CreateDurableAgentInput,\n} from \"../../../durable/DurableAgentRepository.js\";\nimport { runDurableAgent, type DurableRunRepository } from \"../../../durable/run.js\";\n\ninterface RepositoryLike extends DurableRunRepository {\n create(input: CreateDurableAgentInput): Promise<DurableAgent>;\n list(): Promise<DurableAgent[]>;\n recordProviderProcess(id: string, token: string, identity: ProcessIdentity): Promise<void>;\n}\n\ninterface ProbeLike {\n validate(): Promise<{ executable: string; version: string }>;\n}\ninterface RunnerLike {\n run(request: Parameters<PiPrintRunner[\"run\"]>[0]): Promise<PiPrintRunResult>;\n}\n\nexport interface PiPrintAgentServiceOptions {\n repository?: RepositoryLike;\n probe?: ProbeLike;\n runner?: RunnerLike;\n executable?: string;\n}\n\nexport interface PiPrintSendResult extends PiPrintRunResult {\n agentId: string;\n agentName: string;\n}\n\nexport class PiPrintAgentService {\n readonly repository: RepositoryLike;\n private readonly probe: ProbeLike;\n private readonly runner: RunnerLike;\n private readonly executable?: string;\n\n constructor(options: PiPrintAgentServiceOptions = {}) {\n this.repository = options.repository ?? new DurableAgentRepository();\n this.probe = options.probe ?? new PiCliProbe();\n this.runner = options.runner ?? new PiPrintRunner();\n this.executable = options.executable;\n }\n\n async create(input: Omit<CreateDurableAgentInput, \"provider\">): Promise<DurableAgent> {\n await this.probe.validate();\n return this.repository.create({ ...input, provider: \"pi\" });\n }\n\n async send(reference: string, prompt: string): Promise<PiPrintSendResult> {\n const completed = await runDurableAgent({\n reference,\n provider: \"pi\",\n repository: this.repository,\n ambiguousError: () => new PiPrintError(\"Multiple print agents match.\", \"PI_UNSUPPORTED\"),\n providerError: () => new PiPrintError(\"Print agent provider is not Pi.\", \"PI_UNSUPPORTED\"),\n execute: (agent, token) =>\n this.runner.run({\n agent,\n prompt,\n executable: this.executable,\n onSpawn: (identity) => this.repository.recordProviderProcess(agent.id, token, identity),\n }),\n isSessionMismatch: (error) =>\n error instanceof PiPrintError && error.code === \"PI_SESSION_MISMATCH\",\n });\n return {\n ...completed.result,\n agentId: completed.agent.id,\n agentName: completed.agent.name,\n };\n }\n}\n"],"names":["PiPrintError","PiCliProbe","PiPrintRunner","DurableAgentRepository","runDurableAgent","PiPrintAgentService","repository","probe","runner","executable","options","create","input","validate","provider","send","reference","prompt","completed","ambiguousError","providerError","execute","agent","token","run","onSpawn","identity","recordProviderProcess","id","isSessionMismatch","error","code","result","agentId","agentName","name"],"mappings":"AACA,SAASA,YAAY,QAAQ,mCAAmC;AAChE,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,aAAa,QAA+B,qBAAqB;AAC1E,SACEC,sBAAsB,QAEjB,6CAA6C;AACpD,SAASC,eAAe,QAAmC,0BAA0B;AA2BrF,OAAO,MAAMC;IACFC,WAA2B;IACnBC,MAAiB;IACjBC,OAAmB;IACnBC,WAAoB;IAErC,YAAYC,UAAsC,CAAC,CAAC,CAAE;QACpD,IAAI,CAACJ,UAAU,GAAGI,QAAQJ,UAAU,IAAI,IAAIH;QAC5C,IAAI,CAACI,KAAK,GAAGG,QAAQH,KAAK,IAAI,IAAIN;QAClC,IAAI,CAACO,MAAM,GAAGE,QAAQF,MAAM,IAAI,IAAIN;QACpC,IAAI,CAACO,UAAU,GAAGC,QAAQD,UAAU;IACtC;IAEA,MAAME,OAAOC,KAAgD,EAAyB;QACpF,MAAM,IAAI,CAACL,KAAK,CAACM,QAAQ;QACzB,OAAO,IAAI,CAACP,UAAU,CAACK,MAAM,CAAC;YAAE,GAAGC,KAAK;YAAEE,UAAU;QAAK;IAC3D;IAEA,MAAMC,KAAKC,SAAiB,EAAEC,MAAc,EAA8B;QACxE,MAAMC,YAAY,MAAMd,gBAAgB;YACtCY;YACAF,UAAU;YACVR,YAAY,IAAI,CAACA,UAAU;YAC3Ba,gBAAgB,IAAM,IAAInB,aAAa,gCAAgC;YACvEoB,eAAe,IAAM,IAAIpB,aAAa,mCAAmC;YACzEqB,SAAS,CAACC,OAAOC,QACf,IAAI,CAACf,MAAM,CAACgB,GAAG,CAAC;oBACdF;oBACAL;oBACAR,YAAY,IAAI,CAACA,UAAU;oBAC3BgB,SAAS,CAACC,WAAa,IAAI,CAACpB,UAAU,CAACqB,qBAAqB,CAACL,MAAMM,EAAE,EAAEL,OAAOG;gBAChF;YACFG,mBAAmB,CAACC,QAClBA,iBAAiB9B,gBAAgB8B,MAAMC,IAAI,KAAK;QACpD;QACA,OAAO;YACL,GAAGb,UAAUc,MAAM;YACnBC,SAASf,UAAUI,KAAK,CAACM,EAAE;YAC3BM,WAAWhB,UAAUI,KAAK,CAACa,IAAI;QACjC;IACF;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PiPrintProtocol.d.ts","sourceRoot":"","sources":["../../../../src/providers/pi/durable/PiPrintProtocol.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,CAIvF;AAED,wBAAgB,eAAe,
|
|
1
|
+
{"version":3,"file":"PiPrintProtocol.d.ts","sourceRoot":"","sources":["../../../../src/providers/pi/durable/PiPrintProtocol.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,CAAC,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,EAAE,CAIvF;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,gBAAgB,EAAE,MAAM,GAAG,IAAI,EAC/B,iBAAiB,EAAE,MAAM,GACxB,MAAM,CASR;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAgBjF"}
|
|
@@ -1,43 +1,43 @@
|
|
|
1
|
-
import { PiPrintError } from
|
|
2
|
-
import { isUuid } from
|
|
1
|
+
import { PiPrintError } from "../../../durable/DurableAgent.js";
|
|
2
|
+
import { isUuid } from "../../../durable/utils.js";
|
|
3
3
|
export function buildPiPrintArgs(providerSessionId, firstRun) {
|
|
4
4
|
return firstRun ? [
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
"--mode",
|
|
6
|
+
"json",
|
|
7
|
+
"--session-id",
|
|
8
8
|
providerSessionId
|
|
9
9
|
] : [
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
"--mode",
|
|
11
|
+
"json",
|
|
12
|
+
"--session",
|
|
13
13
|
providerSessionId
|
|
14
14
|
];
|
|
15
15
|
}
|
|
16
16
|
export function readPiSessionId(event, currentSessionId, expectedSessionId) {
|
|
17
|
-
if (currentSessionId !== null || typeof event.id !==
|
|
18
|
-
throw new PiPrintError(
|
|
17
|
+
if (currentSessionId !== null || typeof event.id !== "string" || !isUuid(event.id)) {
|
|
18
|
+
throw new PiPrintError("Pi emitted an invalid session identity.", "PI_PROTOCOL");
|
|
19
19
|
}
|
|
20
20
|
const sessionId = event.id;
|
|
21
21
|
if (expectedSessionId !== sessionId) {
|
|
22
|
-
throw new PiPrintError(
|
|
22
|
+
throw new PiPrintError("Pi returned a different session identity.", "PI_SESSION_MISMATCH");
|
|
23
23
|
}
|
|
24
24
|
return sessionId;
|
|
25
25
|
}
|
|
26
26
|
export function readPiAssistantText(event) {
|
|
27
|
-
if (event.type !==
|
|
27
|
+
if (event.type !== "message_end") return null;
|
|
28
28
|
const message = event.message;
|
|
29
|
-
if (!message || typeof message !==
|
|
29
|
+
if (!message || typeof message !== "object" || Array.isArray(message)) return null;
|
|
30
30
|
const record = message;
|
|
31
|
-
if (record.role !==
|
|
32
|
-
if (typeof record.content ===
|
|
31
|
+
if (record.role !== "assistant") return null;
|
|
32
|
+
if (typeof record.content === "string") return record.content.trim() ? record.content : null;
|
|
33
33
|
if (!Array.isArray(record.content)) return null;
|
|
34
34
|
const text = record.content.flatMap((part)=>{
|
|
35
|
-
if (!part || typeof part !==
|
|
35
|
+
if (!part || typeof part !== "object" || Array.isArray(part)) return [];
|
|
36
36
|
const block = part;
|
|
37
|
-
return block.type ===
|
|
37
|
+
return block.type === "text" && typeof block.text === "string" ? [
|
|
38
38
|
block.text
|
|
39
39
|
] : [];
|
|
40
|
-
}).join(
|
|
40
|
+
}).join("");
|
|
41
41
|
return text.trim() ? text : null;
|
|
42
42
|
}
|
|
43
43
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/providers/pi/durable/PiPrintProtocol.ts"],"sourcesContent":["import { PiPrintError } from
|
|
1
|
+
{"version":3,"sources":["../../../../src/providers/pi/durable/PiPrintProtocol.ts"],"sourcesContent":["import { PiPrintError } from \"../../../durable/DurableAgent.js\";\nimport { isUuid } from \"../../../durable/utils.js\";\n\nexport function buildPiPrintArgs(providerSessionId: string, firstRun: boolean): string[] {\n return firstRun\n ? [\"--mode\", \"json\", \"--session-id\", providerSessionId]\n : [\"--mode\", \"json\", \"--session\", providerSessionId];\n}\n\nexport function readPiSessionId(\n event: Record<string, unknown>,\n currentSessionId: string | null,\n expectedSessionId: string,\n): string {\n if (currentSessionId !== null || typeof event.id !== \"string\" || !isUuid(event.id)) {\n throw new PiPrintError(\"Pi emitted an invalid session identity.\", \"PI_PROTOCOL\");\n }\n const sessionId = event.id;\n if (expectedSessionId !== sessionId) {\n throw new PiPrintError(\"Pi returned a different session identity.\", \"PI_SESSION_MISMATCH\");\n }\n return sessionId;\n}\n\nexport function readPiAssistantText(event: Record<string, unknown>): string | null {\n if (event.type !== \"message_end\") return null;\n const message = event.message;\n if (!message || typeof message !== \"object\" || Array.isArray(message)) return null;\n const record = message as Record<string, unknown>;\n if (record.role !== \"assistant\") return null;\n if (typeof record.content === \"string\") return record.content.trim() ? record.content : null;\n if (!Array.isArray(record.content)) return null;\n const text = record.content\n .flatMap((part) => {\n if (!part || typeof part !== \"object\" || Array.isArray(part)) return [];\n const block = part as Record<string, unknown>;\n return block.type === \"text\" && typeof block.text === \"string\" ? [block.text] : [];\n })\n .join(\"\");\n return text.trim() ? text : null;\n}\n"],"names":["PiPrintError","isUuid","buildPiPrintArgs","providerSessionId","firstRun","readPiSessionId","event","currentSessionId","expectedSessionId","id","sessionId","readPiAssistantText","type","message","Array","isArray","record","role","content","trim","text","flatMap","part","block","join"],"mappings":"AAAA,SAASA,YAAY,QAAQ,mCAAmC;AAChE,SAASC,MAAM,QAAQ,4BAA4B;AAEnD,OAAO,SAASC,iBAAiBC,iBAAyB,EAAEC,QAAiB;IAC3E,OAAOA,WACH;QAAC;QAAU;QAAQ;QAAgBD;KAAkB,GACrD;QAAC;QAAU;QAAQ;QAAaA;KAAkB;AACxD;AAEA,OAAO,SAASE,gBACdC,KAA8B,EAC9BC,gBAA+B,EAC/BC,iBAAyB;IAEzB,IAAID,qBAAqB,QAAQ,OAAOD,MAAMG,EAAE,KAAK,YAAY,CAACR,OAAOK,MAAMG,EAAE,GAAG;QAClF,MAAM,IAAIT,aAAa,2CAA2C;IACpE;IACA,MAAMU,YAAYJ,MAAMG,EAAE;IAC1B,IAAID,sBAAsBE,WAAW;QACnC,MAAM,IAAIV,aAAa,6CAA6C;IACtE;IACA,OAAOU;AACT;AAEA,OAAO,SAASC,oBAAoBL,KAA8B;IAChE,IAAIA,MAAMM,IAAI,KAAK,eAAe,OAAO;IACzC,MAAMC,UAAUP,MAAMO,OAAO;IAC7B,IAAI,CAACA,WAAW,OAAOA,YAAY,YAAYC,MAAMC,OAAO,CAACF,UAAU,OAAO;IAC9E,MAAMG,SAASH;IACf,IAAIG,OAAOC,IAAI,KAAK,aAAa,OAAO;IACxC,IAAI,OAAOD,OAAOE,OAAO,KAAK,UAAU,OAAOF,OAAOE,OAAO,CAACC,IAAI,KAAKH,OAAOE,OAAO,GAAG;IACxF,IAAI,CAACJ,MAAMC,OAAO,CAACC,OAAOE,OAAO,GAAG,OAAO;IAC3C,MAAME,OAAOJ,OAAOE,OAAO,CACxBG,OAAO,CAAC,CAACC;QACR,IAAI,CAACA,QAAQ,OAAOA,SAAS,YAAYR,MAAMC,OAAO,CAACO,OAAO,OAAO,EAAE;QACvE,MAAMC,QAAQD;QACd,OAAOC,MAAMX,IAAI,KAAK,UAAU,OAAOW,MAAMH,IAAI,KAAK,WAAW;YAACG,MAAMH,IAAI;SAAC,GAAG,EAAE;IACpF,GACCI,IAAI,CAAC;IACR,OAAOJ,KAAKD,IAAI,KAAKC,OAAO;AAC9B"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { type ChildProcessWithoutNullStreams, type SpawnOptionsWithoutStdio } from
|
|
2
|
-
import type { PiDurableAgent, ProcessIdentity } from
|
|
3
|
-
import { type ProcessInspector } from
|
|
1
|
+
import { type ChildProcessWithoutNullStreams, type SpawnOptionsWithoutStdio } from "child_process";
|
|
2
|
+
import type { PiDurableAgent, ProcessIdentity } from "../../../durable/DurableAgent.js";
|
|
3
|
+
import { type ProcessInspector } from "../../../durable/process.js";
|
|
4
4
|
type Spawn = (command: string, args: readonly string[], options: SpawnOptionsWithoutStdio & {
|
|
5
|
-
stdio: [
|
|
5
|
+
stdio: ["pipe", "pipe", "pipe"];
|
|
6
6
|
}) => ChildProcessWithoutNullStreams;
|
|
7
7
|
export interface PiPrintRunRequest {
|
|
8
8
|
agent: PiDurableAgent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PiPrintRunner.d.ts","sourceRoot":"","sources":["../../../../src/providers/pi/durable/PiPrintRunner.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"PiPrintRunner.d.ts","sourceRoot":"","sources":["../../../../src/providers/pi/durable/PiPrintRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAExF,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAK3F,KAAK,KAAK,GAAG,CACX,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,wBAAwB,GAAG;IAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,KACpE,8BAA8B,CAAC;AAEpC,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,OAAO,GAAE,oBAAyB;IAMxC,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA6CjE"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { spawn as nodeSpawn } from
|
|
2
|
-
import { PiPrintError } from
|
|
3
|
-
import { LocalProcessInspector } from
|
|
4
|
-
import { waitForChildClose } from
|
|
5
|
-
import { buildPiPrintArgs } from
|
|
6
|
-
import { PiStreamParser } from
|
|
1
|
+
import { spawn as nodeSpawn } from "child_process";
|
|
2
|
+
import { PiPrintError } from "../../../durable/DurableAgent.js";
|
|
3
|
+
import { LocalProcessInspector } from "../../../durable/process.js";
|
|
4
|
+
import { waitForChildClose } from "../../../durable/utils.js";
|
|
5
|
+
import { buildPiPrintArgs } from "./PiPrintProtocol.js";
|
|
6
|
+
import { PiStreamParser } from "./PiStreamParser.js";
|
|
7
7
|
export class PiPrintRunner {
|
|
8
8
|
spawn;
|
|
9
9
|
processInspector;
|
|
@@ -14,27 +14,27 @@ export class PiPrintRunner {
|
|
|
14
14
|
this.maxLineBytes = options.maxLineBytes ?? 1024 * 1024;
|
|
15
15
|
}
|
|
16
16
|
async run(request) {
|
|
17
|
-
const args = buildPiPrintArgs(request.agent.providerSessionId, request.agent.sessionHealth ===
|
|
18
|
-
const child = this.spawn(request.executable ??
|
|
17
|
+
const args = buildPiPrintArgs(request.agent.providerSessionId, request.agent.sessionHealth === "uninitialized");
|
|
18
|
+
const child = this.spawn(request.executable ?? "pi", args, {
|
|
19
19
|
cwd: request.agent.cwd,
|
|
20
20
|
shell: false,
|
|
21
21
|
stdio: [
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
"pipe",
|
|
23
|
+
"pipe",
|
|
24
|
+
"pipe"
|
|
25
25
|
]
|
|
26
26
|
});
|
|
27
27
|
if (!child.pid) {
|
|
28
28
|
child.kill();
|
|
29
|
-
throw new PiPrintError(
|
|
29
|
+
throw new PiPrintError("Pi process did not provide a PID.", "PI_PROCESS");
|
|
30
30
|
}
|
|
31
31
|
const identity = this.processInspector.getIdentity(child.pid);
|
|
32
32
|
if (!identity) {
|
|
33
33
|
child.kill();
|
|
34
|
-
throw new PiPrintError(
|
|
34
|
+
throw new PiPrintError("Cannot verify Pi process identity.", "PI_PROCESS");
|
|
35
35
|
}
|
|
36
36
|
const parser = new PiStreamParser(request.agent.providerSessionId, this.maxLineBytes);
|
|
37
|
-
child.stdout.on(
|
|
37
|
+
child.stdout.on("data", (chunk)=>{
|
|
38
38
|
if (parser.hasFailed()) return;
|
|
39
39
|
try {
|
|
40
40
|
parser.accept(chunk);
|
|
@@ -52,7 +52,7 @@ export class PiPrintRunner {
|
|
|
52
52
|
}
|
|
53
53
|
child.stdin.end(request.prompt);
|
|
54
54
|
const close = await closed.catch(()=>{
|
|
55
|
-
throw new PiPrintError(
|
|
55
|
+
throw new PiPrintError("Pi process failed to start or communicate.", "PI_PROCESS");
|
|
56
56
|
});
|
|
57
57
|
return parser.result(close);
|
|
58
58
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/providers/pi/durable/PiPrintRunner.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"sources":["../../../../src/providers/pi/durable/PiPrintRunner.ts"],"sourcesContent":["import {\n spawn as nodeSpawn,\n type ChildProcessWithoutNullStreams,\n type SpawnOptionsWithoutStdio,\n} from \"child_process\";\nimport type { PiDurableAgent, ProcessIdentity } from \"../../../durable/DurableAgent.js\";\nimport { PiPrintError } from \"../../../durable/DurableAgent.js\";\nimport { LocalProcessInspector, type ProcessInspector } from \"../../../durable/process.js\";\nimport { waitForChildClose } from \"../../../durable/utils.js\";\nimport { buildPiPrintArgs } from \"./PiPrintProtocol.js\";\nimport { PiStreamParser } from \"./PiStreamParser.js\";\n\ntype Spawn = (\n command: string,\n args: readonly string[],\n options: SpawnOptionsWithoutStdio & { stdio: [\"pipe\", \"pipe\", \"pipe\"] },\n) => ChildProcessWithoutNullStreams;\n\nexport interface PiPrintRunRequest {\n agent: PiDurableAgent;\n prompt: string;\n executable?: string;\n onSpawn(identity: ProcessIdentity): Promise<void>;\n}\n\nexport interface PiPrintRunResult {\n sessionId: string;\n result: string;\n messages: string[];\n exitCode: number;\n}\n\nexport interface PiPrintRunnerOptions {\n spawn?: Spawn;\n processInspector?: ProcessInspector;\n maxLineBytes?: number;\n}\n\nexport class PiPrintRunner {\n private readonly spawn: Spawn;\n private readonly processInspector: ProcessInspector;\n private readonly maxLineBytes: number;\n\n constructor(options: PiPrintRunnerOptions = {}) {\n this.spawn = options.spawn ?? (nodeSpawn as Spawn);\n this.processInspector = options.processInspector ?? new LocalProcessInspector();\n this.maxLineBytes = options.maxLineBytes ?? 1024 * 1024;\n }\n\n async run(request: PiPrintRunRequest): Promise<PiPrintRunResult> {\n const args = buildPiPrintArgs(\n request.agent.providerSessionId,\n request.agent.sessionHealth === \"uninitialized\",\n );\n const child = this.spawn(request.executable ?? \"pi\", args, {\n cwd: request.agent.cwd,\n shell: false,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n if (!child.pid) {\n child.kill();\n throw new PiPrintError(\"Pi process did not provide a PID.\", \"PI_PROCESS\");\n }\n const identity = this.processInspector.getIdentity(child.pid);\n if (!identity) {\n child.kill();\n throw new PiPrintError(\"Cannot verify Pi process identity.\", \"PI_PROCESS\");\n }\n\n const parser = new PiStreamParser(request.agent.providerSessionId, this.maxLineBytes);\n child.stdout.on(\"data\", (chunk: Buffer | string) => {\n if (parser.hasFailed()) return;\n try {\n parser.accept(chunk);\n } catch (error) {\n parser.fail(error);\n }\n });\n child.stderr.resume();\n\n const closed = waitForChildClose(child);\n try {\n await request.onSpawn(identity);\n } catch (error) {\n child.kill();\n throw error;\n }\n\n child.stdin.end(request.prompt);\n const close = await closed.catch(() => {\n throw new PiPrintError(\"Pi process failed to start or communicate.\", \"PI_PROCESS\");\n });\n return parser.result(close);\n }\n}\n"],"names":["spawn","nodeSpawn","PiPrintError","LocalProcessInspector","waitForChildClose","buildPiPrintArgs","PiStreamParser","PiPrintRunner","processInspector","maxLineBytes","options","run","request","args","agent","providerSessionId","sessionHealth","child","executable","cwd","shell","stdio","pid","kill","identity","getIdentity","parser","stdout","on","chunk","hasFailed","accept","error","fail","stderr","resume","closed","onSpawn","stdin","end","prompt","close","catch","result"],"mappings":"AAAA,SACEA,SAASC,SAAS,QAGb,gBAAgB;AAEvB,SAASC,YAAY,QAAQ,mCAAmC;AAChE,SAASC,qBAAqB,QAA+B,8BAA8B;AAC3F,SAASC,iBAAiB,QAAQ,4BAA4B;AAC9D,SAASC,gBAAgB,QAAQ,uBAAuB;AACxD,SAASC,cAAc,QAAQ,sBAAsB;AA4BrD,OAAO,MAAMC;IACMP,MAAa;IACbQ,iBAAmC;IACnCC,aAAqB;IAEtC,YAAYC,UAAgC,CAAC,CAAC,CAAE;QAC9C,IAAI,CAACV,KAAK,GAAGU,QAAQV,KAAK,IAAKC;QAC/B,IAAI,CAACO,gBAAgB,GAAGE,QAAQF,gBAAgB,IAAI,IAAIL;QACxD,IAAI,CAACM,YAAY,GAAGC,QAAQD,YAAY,IAAI,OAAO;IACrD;IAEA,MAAME,IAAIC,OAA0B,EAA6B;QAC/D,MAAMC,OAAOR,iBACXO,QAAQE,KAAK,CAACC,iBAAiB,EAC/BH,QAAQE,KAAK,CAACE,aAAa,KAAK;QAElC,MAAMC,QAAQ,IAAI,CAACjB,KAAK,CAACY,QAAQM,UAAU,IAAI,MAAML,MAAM;YACzDM,KAAKP,QAAQE,KAAK,CAACK,GAAG;YACtBC,OAAO;YACPC,OAAO;gBAAC;gBAAQ;gBAAQ;aAAO;QACjC;QACA,IAAI,CAACJ,MAAMK,GAAG,EAAE;YACdL,MAAMM,IAAI;YACV,MAAM,IAAIrB,aAAa,qCAAqC;QAC9D;QACA,MAAMsB,WAAW,IAAI,CAAChB,gBAAgB,CAACiB,WAAW,CAACR,MAAMK,GAAG;QAC5D,IAAI,CAACE,UAAU;YACbP,MAAMM,IAAI;YACV,MAAM,IAAIrB,aAAa,sCAAsC;QAC/D;QAEA,MAAMwB,SAAS,IAAIpB,eAAeM,QAAQE,KAAK,CAACC,iBAAiB,EAAE,IAAI,CAACN,YAAY;QACpFQ,MAAMU,MAAM,CAACC,EAAE,CAAC,QAAQ,CAACC;YACvB,IAAIH,OAAOI,SAAS,IAAI;YACxB,IAAI;gBACFJ,OAAOK,MAAM,CAACF;YAChB,EAAE,OAAOG,OAAO;gBACdN,OAAOO,IAAI,CAACD;YACd;QACF;QACAf,MAAMiB,MAAM,CAACC,MAAM;QAEnB,MAAMC,SAAShC,kBAAkBa;QACjC,IAAI;YACF,MAAML,QAAQyB,OAAO,CAACb;QACxB,EAAE,OAAOQ,OAAO;YACdf,MAAMM,IAAI;YACV,MAAMS;QACR;QAEAf,MAAMqB,KAAK,CAACC,GAAG,CAAC3B,QAAQ4B,MAAM;QAC9B,MAAMC,QAAQ,MAAML,OAAOM,KAAK,CAAC;YAC/B,MAAM,IAAIxC,aAAa,8CAA8C;QACvE;QACA,OAAOwB,OAAOiB,MAAM,CAACF;IACvB;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PiStreamParser.d.ts","sourceRoot":"","sources":["../../../../src/providers/pi/durable/PiStreamParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG9E,qBAAa,cAAc;
|
|
1
|
+
{"version":3,"file":"PiStreamParser.d.ts","sourceRoot":"","sources":["../../../../src/providers/pi/durable/PiStreamParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG9E,qBAAa,cAAc;IAQvB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAPpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,OAAO,CAA6B;gBAGzB,iBAAiB,EAAE,MAAM,EAC1C,YAAY,EAAE,MAAM;IAQtB,SAAS,IAAI,OAAO;IAIpB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOpC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAO1B,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG;QAC/B,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;KAClB;IA2BD,OAAO,CAAC,UAAU;CAsBnB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { PiPrintError } from
|
|
2
|
-
import { LineBuffer } from
|
|
3
|
-
import { readPiAssistantText, readPiSessionId } from
|
|
1
|
+
import { PiPrintError } from "../../../durable/DurableAgent.js";
|
|
2
|
+
import { LineBuffer } from "../../../durable/utils.js";
|
|
3
|
+
import { readPiAssistantText, readPiSessionId } from "./PiPrintProtocol.js";
|
|
4
4
|
export class PiStreamParser {
|
|
5
5
|
expectedSessionId;
|
|
6
6
|
lines;
|
|
@@ -10,7 +10,7 @@ export class PiStreamParser {
|
|
|
10
10
|
failure = null;
|
|
11
11
|
constructor(expectedSessionId, maxLineBytes){
|
|
12
12
|
this.expectedSessionId = expectedSessionId;
|
|
13
|
-
this.lines = new LineBuffer(maxLineBytes, ()=>new PiPrintError(
|
|
13
|
+
this.lines = new LineBuffer(maxLineBytes, ()=>new PiPrintError("Pi stream line exceeded the safety limit.", "PI_PROTOCOL"));
|
|
14
14
|
}
|
|
15
15
|
hasFailed() {
|
|
16
16
|
return this.failure !== null;
|
|
@@ -22,20 +22,20 @@ export class PiStreamParser {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
fail(error) {
|
|
25
|
-
this.failure = error instanceof PiPrintError ? error : new PiPrintError(
|
|
25
|
+
this.failure = error instanceof PiPrintError ? error : new PiPrintError("Pi stream processing failed.", "PI_PROTOCOL");
|
|
26
26
|
}
|
|
27
27
|
result(close) {
|
|
28
28
|
if (this.failure) throw this.failure;
|
|
29
|
-
this.lines.assertComplete(()=>new PiPrintError(
|
|
29
|
+
this.lines.assertComplete(()=>new PiPrintError("Pi stream ended with incomplete JSON.", "PI_PROTOCOL"));
|
|
30
30
|
if (close.code !== 0) {
|
|
31
|
-
throw new PiPrintError(`Pi print run failed${close.signal ? ` (${close.signal})` :
|
|
31
|
+
throw new PiPrintError(`Pi print run failed${close.signal ? ` (${close.signal})` : "."}`, "PI_PROCESS");
|
|
32
32
|
}
|
|
33
33
|
if (this.sessionId === null) {
|
|
34
|
-
throw new PiPrintError(
|
|
34
|
+
throw new PiPrintError("Pi stream ended without a session identity.", "PI_PROTOCOL");
|
|
35
35
|
}
|
|
36
|
-
if (!this.ended) throw new PiPrintError(
|
|
36
|
+
if (!this.ended) throw new PiPrintError("Pi stream ended before agent completion.", "PI_PROTOCOL");
|
|
37
37
|
if (this.messages.length === 0) {
|
|
38
|
-
throw new PiPrintError(
|
|
38
|
+
throw new PiPrintError("Pi stream ended without an assistant result.", "PI_RESULT_MISSING");
|
|
39
39
|
}
|
|
40
40
|
return {
|
|
41
41
|
sessionId: this.sessionId,
|
|
@@ -47,19 +47,19 @@ export class PiStreamParser {
|
|
|
47
47
|
acceptLine(line) {
|
|
48
48
|
let value;
|
|
49
49
|
try {
|
|
50
|
-
value = JSON.parse(line.toString(
|
|
50
|
+
value = JSON.parse(line.toString("utf8"));
|
|
51
51
|
} catch {
|
|
52
|
-
throw new PiPrintError(
|
|
52
|
+
throw new PiPrintError("Pi emitted malformed stream JSON.", "PI_PROTOCOL");
|
|
53
53
|
}
|
|
54
|
-
if (!value || typeof value !==
|
|
55
|
-
throw new PiPrintError(
|
|
54
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) {
|
|
55
|
+
throw new PiPrintError("Pi emitted a non-object stream message.", "PI_PROTOCOL");
|
|
56
56
|
}
|
|
57
57
|
const event = value;
|
|
58
|
-
if (event.type ===
|
|
58
|
+
if (event.type === "session") {
|
|
59
59
|
this.sessionId = readPiSessionId(event, this.sessionId, this.expectedSessionId);
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
|
-
if (event.type ===
|
|
62
|
+
if (event.type === "agent_end") {
|
|
63
63
|
this.ended = true;
|
|
64
64
|
return;
|
|
65
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/providers/pi/durable/PiStreamParser.ts"],"sourcesContent":["import { PiPrintError } from
|
|
1
|
+
{"version":3,"sources":["../../../../src/providers/pi/durable/PiStreamParser.ts"],"sourcesContent":["import { PiPrintError } from \"../../../durable/DurableAgent.js\";\nimport { LineBuffer, type ChildCloseResult } from \"../../../durable/utils.js\";\nimport { readPiAssistantText, readPiSessionId } from \"./PiPrintProtocol.js\";\n\nexport class PiStreamParser {\n private readonly lines: LineBuffer;\n private sessionId: string | null = null;\n private ended = false;\n private readonly messages: string[] = [];\n private failure: PiPrintError | null = null;\n\n constructor(\n private readonly expectedSessionId: string,\n maxLineBytes: number,\n ) {\n this.lines = new LineBuffer(\n maxLineBytes,\n () => new PiPrintError(\"Pi stream line exceeded the safety limit.\", \"PI_PROTOCOL\"),\n );\n }\n\n hasFailed(): boolean {\n return this.failure !== null;\n }\n\n accept(chunk: Buffer | string): void {\n for (const line of this.lines.accept(chunk)) {\n if (line.length === 0) continue;\n this.acceptLine(line);\n }\n }\n\n fail(error: unknown): void {\n this.failure =\n error instanceof PiPrintError\n ? error\n : new PiPrintError(\"Pi stream processing failed.\", \"PI_PROTOCOL\");\n }\n\n result(close: ChildCloseResult): {\n sessionId: string;\n result: string;\n messages: string[];\n exitCode: number;\n } {\n if (this.failure) throw this.failure;\n this.lines.assertComplete(\n () => new PiPrintError(\"Pi stream ended with incomplete JSON.\", \"PI_PROTOCOL\"),\n );\n if (close.code !== 0) {\n throw new PiPrintError(\n `Pi print run failed${close.signal ? ` (${close.signal})` : \".\"}`,\n \"PI_PROCESS\",\n );\n }\n if (this.sessionId === null) {\n throw new PiPrintError(\"Pi stream ended without a session identity.\", \"PI_PROTOCOL\");\n }\n if (!this.ended)\n throw new PiPrintError(\"Pi stream ended before agent completion.\", \"PI_PROTOCOL\");\n if (this.messages.length === 0) {\n throw new PiPrintError(\"Pi stream ended without an assistant result.\", \"PI_RESULT_MISSING\");\n }\n return {\n sessionId: this.sessionId,\n result: this.messages.at(-1)!,\n messages: this.messages,\n exitCode: close.code,\n };\n }\n\n private acceptLine(line: Buffer): void {\n let value: unknown;\n try {\n value = JSON.parse(line.toString(\"utf8\"));\n } catch {\n throw new PiPrintError(\"Pi emitted malformed stream JSON.\", \"PI_PROTOCOL\");\n }\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new PiPrintError(\"Pi emitted a non-object stream message.\", \"PI_PROTOCOL\");\n }\n const event = value as Record<string, unknown>;\n if (event.type === \"session\") {\n this.sessionId = readPiSessionId(event, this.sessionId, this.expectedSessionId);\n return;\n }\n if (event.type === \"agent_end\") {\n this.ended = true;\n return;\n }\n const text = readPiAssistantText(event);\n if (text !== null) this.messages.push(text);\n }\n}\n"],"names":["PiPrintError","LineBuffer","readPiAssistantText","readPiSessionId","PiStreamParser","lines","sessionId","ended","messages","failure","expectedSessionId","maxLineBytes","hasFailed","accept","chunk","line","length","acceptLine","fail","error","result","close","assertComplete","code","signal","at","exitCode","value","JSON","parse","toString","Array","isArray","event","type","text","push"],"mappings":"AAAA,SAASA,YAAY,QAAQ,mCAAmC;AAChE,SAASC,UAAU,QAA+B,4BAA4B;AAC9E,SAASC,mBAAmB,EAAEC,eAAe,QAAQ,uBAAuB;AAE5E,OAAO,MAAMC;;IACMC,MAAkB;IAC3BC,YAA2B,KAAK;IAChCC,QAAQ,MAAM;IACLC,WAAqB,EAAE,CAAC;IACjCC,UAA+B,KAAK;IAE5C,YACE,AAAiBC,iBAAyB,EAC1CC,YAAoB,CACpB;aAFiBD,oBAAAA;QAGjB,IAAI,CAACL,KAAK,GAAG,IAAIJ,WACfU,cACA,IAAM,IAAIX,aAAa,6CAA6C;IAExE;IAEAY,YAAqB;QACnB,OAAO,IAAI,CAACH,OAAO,KAAK;IAC1B;IAEAI,OAAOC,KAAsB,EAAQ;QACnC,KAAK,MAAMC,QAAQ,IAAI,CAACV,KAAK,CAACQ,MAAM,CAACC,OAAQ;YAC3C,IAAIC,KAAKC,MAAM,KAAK,GAAG;YACvB,IAAI,CAACC,UAAU,CAACF;QAClB;IACF;IAEAG,KAAKC,KAAc,EAAQ;QACzB,IAAI,CAACV,OAAO,GACVU,iBAAiBnB,eACbmB,QACA,IAAInB,aAAa,gCAAgC;IACzD;IAEAoB,OAAOC,KAAuB,EAK5B;QACA,IAAI,IAAI,CAACZ,OAAO,EAAE,MAAM,IAAI,CAACA,OAAO;QACpC,IAAI,CAACJ,KAAK,CAACiB,cAAc,CACvB,IAAM,IAAItB,aAAa,yCAAyC;QAElE,IAAIqB,MAAME,IAAI,KAAK,GAAG;YACpB,MAAM,IAAIvB,aACR,CAAC,mBAAmB,EAAEqB,MAAMG,MAAM,GAAG,CAAC,EAAE,EAAEH,MAAMG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,EACjE;QAEJ;QACA,IAAI,IAAI,CAAClB,SAAS,KAAK,MAAM;YAC3B,MAAM,IAAIN,aAAa,+CAA+C;QACxE;QACA,IAAI,CAAC,IAAI,CAACO,KAAK,EACb,MAAM,IAAIP,aAAa,4CAA4C;QACrE,IAAI,IAAI,CAACQ,QAAQ,CAACQ,MAAM,KAAK,GAAG;YAC9B,MAAM,IAAIhB,aAAa,gDAAgD;QACzE;QACA,OAAO;YACLM,WAAW,IAAI,CAACA,SAAS;YACzBc,QAAQ,IAAI,CAACZ,QAAQ,CAACiB,EAAE,CAAC,CAAC;YAC1BjB,UAAU,IAAI,CAACA,QAAQ;YACvBkB,UAAUL,MAAME,IAAI;QACtB;IACF;IAEQN,WAAWF,IAAY,EAAQ;QACrC,IAAIY;QACJ,IAAI;YACFA,QAAQC,KAAKC,KAAK,CAACd,KAAKe,QAAQ,CAAC;QACnC,EAAE,OAAM;YACN,MAAM,IAAI9B,aAAa,qCAAqC;QAC9D;QACA,IAAI,CAAC2B,SAAS,OAAOA,UAAU,YAAYI,MAAMC,OAAO,CAACL,QAAQ;YAC/D,MAAM,IAAI3B,aAAa,2CAA2C;QACpE;QACA,MAAMiC,QAAQN;QACd,IAAIM,MAAMC,IAAI,KAAK,WAAW;YAC5B,IAAI,CAAC5B,SAAS,GAAGH,gBAAgB8B,OAAO,IAAI,CAAC3B,SAAS,EAAE,IAAI,CAACI,iBAAiB;YAC9E;QACF;QACA,IAAIuB,MAAMC,IAAI,KAAK,aAAa;YAC9B,IAAI,CAAC3B,KAAK,GAAG;YACb;QACF;QACA,MAAM4B,OAAOjC,oBAAoB+B;QACjC,IAAIE,SAAS,MAAM,IAAI,CAAC3B,QAAQ,CAAC4B,IAAI,CAACD;IACxC;AACF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type StartableAgentType } from "../utils/agents.js";
|
|
2
|
+
export type ReadinessStatus = "pass" | "warn" | "fail";
|
|
3
|
+
export type ReadinessAuthState = "authenticated" | "unauthenticated" | "unknown";
|
|
4
|
+
export type ReadinessAgentType = Exclude<StartableAgentType, "gemini_cli">;
|
|
5
|
+
type ReadinessInfoStatus = ReadinessStatus | "info";
|
|
6
|
+
type CommandResult = {
|
|
7
|
+
stdout: string;
|
|
8
|
+
stderr: string;
|
|
9
|
+
};
|
|
10
|
+
type ReadFile = (target: string) => Promise<string>;
|
|
11
|
+
type Access = (target: string, mode?: number) => Promise<void>;
|
|
12
|
+
type RunCommand = (command: string, args: string[]) => Promise<CommandResult>;
|
|
13
|
+
export interface ReadinessCheck<S extends ReadinessInfoStatus = ReadinessStatus> {
|
|
14
|
+
status: S;
|
|
15
|
+
errors: string[];
|
|
16
|
+
}
|
|
17
|
+
export interface ExecutableReadinessCheck extends ReadinessCheck {
|
|
18
|
+
command: string;
|
|
19
|
+
path: string | null;
|
|
20
|
+
}
|
|
21
|
+
export interface DirectoryReadinessCheck extends ReadinessCheck {
|
|
22
|
+
path: string;
|
|
23
|
+
present: boolean;
|
|
24
|
+
readable: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface BuiltInSkillsReadinessCheck extends ReadinessCheck<"info"> {
|
|
27
|
+
path: string | null;
|
|
28
|
+
required: number;
|
|
29
|
+
present: number;
|
|
30
|
+
missing: string[];
|
|
31
|
+
}
|
|
32
|
+
export interface AuthReadinessCheck extends ReadinessCheck {
|
|
33
|
+
state: ReadinessAuthState;
|
|
34
|
+
source: string;
|
|
35
|
+
provider: string | null;
|
|
36
|
+
availableProviders: string[];
|
|
37
|
+
}
|
|
38
|
+
export interface IntegrationReadinessCheck extends ReadinessCheck {
|
|
39
|
+
label: string;
|
|
40
|
+
installed: boolean;
|
|
41
|
+
details?: Record<string, unknown>;
|
|
42
|
+
}
|
|
43
|
+
export interface AgentReadinessReport {
|
|
44
|
+
type: ReadinessAgentType;
|
|
45
|
+
executable: ExecutableReadinessCheck;
|
|
46
|
+
globalConfig: DirectoryReadinessCheck;
|
|
47
|
+
builtInSkills: BuiltInSkillsReadinessCheck;
|
|
48
|
+
auth?: AuthReadinessCheck;
|
|
49
|
+
integration?: IntegrationReadinessCheck;
|
|
50
|
+
status: ReadinessStatus;
|
|
51
|
+
}
|
|
52
|
+
export interface AgentReadinessOptions {
|
|
53
|
+
homeDir?: string;
|
|
54
|
+
path?: string;
|
|
55
|
+
assetRoot?: string;
|
|
56
|
+
builtInSkillNames?: readonly string[];
|
|
57
|
+
skillRoots?: Partial<Record<ReadinessAgentType, string>>;
|
|
58
|
+
readFile?: ReadFile;
|
|
59
|
+
access?: Access;
|
|
60
|
+
runCommand?: RunCommand;
|
|
61
|
+
codexAuth?: () => Promise<boolean | null>;
|
|
62
|
+
}
|
|
63
|
+
export declare function worstReadinessStatus(statuses: ReadinessStatus[]): ReadinessStatus;
|
|
64
|
+
export declare function getAgentReadinessReport(agent: ReadinessAgentType, options?: AgentReadinessOptions): Promise<AgentReadinessReport>;
|
|
65
|
+
export declare function getAgentReadinessReports(options?: AgentReadinessOptions): Promise<Record<ReadinessAgentType, AgentReadinessReport>>;
|
|
66
|
+
export {};
|
|
67
|
+
//# sourceMappingURL=AgentReadiness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AgentReadiness.d.ts","sourceRoot":"","sources":["../../src/readiness/AgentReadiness.ts"],"names":[],"mappings":"AAMA,OAAO,EAAU,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAMrE,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACvD,MAAM,MAAM,kBAAkB,GAAG,eAAe,GAAG,iBAAiB,GAAG,SAAS,CAAC;AACjF,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;AAC3E,KAAK,mBAAmB,GAAG,eAAe,GAAG,MAAM,CAAC;AAEpD,KAAK,aAAa,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AACxD,KAAK,QAAQ,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AACpD,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/D,KAAK,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;AAE9E,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,mBAAmB,GAAG,eAAe;IAC7E,MAAM,EAAE,CAAC,CAAC;IACV,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,uBAAwB,SAAQ,cAAc;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,2BAA4B,SAAQ,cAAc,CAAC,MAAM,CAAC;IACzE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,cAAc;IACxD,KAAK,EAAE,kBAAkB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,yBAA0B,SAAQ,cAAc;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,kBAAkB,CAAC;IACzB,UAAU,EAAE,wBAAwB,CAAC;IACrC,YAAY,EAAE,uBAAuB,CAAC;IACtC,aAAa,EAAE,2BAA2B,CAAC;IAC3C,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;CAC3C;AA8CD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,eAAe,CAKjF;AA2iBD,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,kBAAkB,EACzB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,oBAAoB,CAAC,CAE/B;AA6BD,wBAAsB,wBAAwB,CAC5C,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,MAAM,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,CAAC,CAM3D"}
|