@ai-devkit/agent-manager 0.32.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AgentManager.d.ts +3 -3
- package/dist/AgentManager.d.ts.map +1 -1
- package/dist/AgentManager.js +80 -79
- package/dist/AgentManager.js.map +1 -1
- package/dist/__tests__/AgentManager.test.js +413 -388
- package/dist/__tests__/AgentManager.test.js.map +1 -1
- package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js +642 -642
- package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/CodexAdapter.test.js +322 -2321
- package/dist/__tests__/adapters/CodexAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/CopilotAdapter.test.js +254 -248
- package/dist/__tests__/adapters/CopilotAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/GeminiCliAdapter.test.js +564 -558
- package/dist/__tests__/adapters/GeminiCliAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/GrokCliAdapter.test.js +114 -114
- package/dist/__tests__/adapters/GrokCliAdapter.test.js.map +1 -1
- package/dist/__tests__/adapters/OpenCodeAdapter.test.js +169 -169
- package/dist/__tests__/adapters/OpenCodeAdapter.test.js.map +1 -1
- package/dist/__tests__/capacity/codex.test.js +93 -93
- package/dist/__tests__/capacity/codex.test.js.map +1 -1
- package/dist/__tests__/capacity/index.test.js +17 -17
- package/dist/__tests__/capacity/index.test.js.map +1 -1
- package/dist/__tests__/durable/CodexCliProbe.test.js +60 -60
- package/dist/__tests__/durable/CodexCliProbe.test.js.map +1 -1
- package/dist/__tests__/durable/CodexDurableAgentRepository.test.js +28 -28
- package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +1 -1
- package/dist/__tests__/durable/CodexPrintAgent.integration.test.js +30 -30
- package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +1 -1
- package/dist/__tests__/durable/CodexPrintAgentService.test.js +71 -71
- package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +1 -1
- package/dist/__tests__/durable/CodexPrintRunner.test.js +125 -125
- package/dist/__tests__/durable/CodexPrintRunner.test.js.map +1 -1
- package/dist/__tests__/print/ClaudeCliProbe.test.js +20 -20
- package/dist/__tests__/print/ClaudeCliProbe.test.js.map +1 -1
- package/dist/__tests__/print/ClaudePrintAgent.integration.test.js +20 -20
- package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +1 -1
- package/dist/__tests__/print/ClaudePrintAgentService.test.js +58 -58
- package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +1 -1
- package/dist/__tests__/print/ClaudePrintRunner.test.js +55 -55
- package/dist/__tests__/print/ClaudePrintRunner.test.js.map +1 -1
- package/dist/__tests__/print/DurableAgent.test.js +9 -9
- package/dist/__tests__/print/DurableAgent.test.js.map +1 -1
- package/dist/__tests__/print/DurableAgentRepository.sqlite.test.js +40 -40
- package/dist/__tests__/print/DurableAgentRepository.sqlite.test.js.map +1 -1
- package/dist/__tests__/print/DurableAgentRepository.test.js +66 -66
- package/dist/__tests__/print/DurableAgentRepository.test.js.map +1 -1
- package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js +34 -34
- package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +1 -1
- package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js +132 -132
- package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js.map +1 -1
- package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +194 -0
- package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +1 -0
- package/dist/__tests__/providers/codex/CodexSessionMapping.test.js +86 -0
- package/dist/__tests__/providers/codex/CodexSessionMapping.test.js.map +1 -0
- package/dist/__tests__/providers/codex/CodexSessionParser.test.js +254 -0
- package/dist/__tests__/providers/codex/CodexSessionParser.test.js.map +1 -0
- package/dist/__tests__/providers/pi/PiAdapter.test.js +337 -0
- package/dist/__tests__/providers/pi/PiAdapter.test.js.map +1 -0
- package/dist/__tests__/providers/pi/PiSessionParser.test.js +246 -0
- package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +1 -0
- package/dist/__tests__/providers/pi/PiSessionTracker.test.js +108 -0
- package/dist/__tests__/providers/pi/PiSessionTracker.test.js.map +1 -0
- package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js +33 -33
- package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js.map +1 -1
- package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js +16 -16
- package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js.map +1 -1
- package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js +52 -52
- package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js.map +1 -1
- package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js +44 -44
- package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js.map +1 -1
- package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js +126 -126
- package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js.map +1 -1
- package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js +14 -14
- package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js.map +1 -1
- package/dist/__tests__/readiness/AgentReadiness.test.js +134 -134
- package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -1
- package/dist/__tests__/runtime/AgentRuntime.test.js +13 -0
- package/dist/__tests__/runtime/AgentRuntime.test.js.map +1 -0
- package/dist/__tests__/runtime/HerdrAgentRuntime.test.js +452 -0
- package/dist/__tests__/runtime/HerdrAgentRuntime.test.js.map +1 -0
- package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +588 -0
- package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -0
- package/dist/__tests__/terminal/TerminalFocusManager.test.js +100 -100
- package/dist/__tests__/terminal/TerminalFocusManager.test.js.map +1 -1
- package/dist/__tests__/terminal/TmuxManager.test.js +101 -101
- package/dist/__tests__/terminal/TmuxManager.test.js.map +1 -1
- package/dist/__tests__/terminal/TtyWriter.test.js +185 -185
- package/dist/__tests__/terminal/TtyWriter.test.js.map +1 -1
- package/dist/__tests__/utils/AgentRegistry.test.js +335 -217
- package/dist/__tests__/utils/AgentRegistry.test.js.map +1 -1
- package/dist/__tests__/utils/ClaudeSessionParser.test.js +103 -101
- package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +1 -1
- package/dist/__tests__/utils/agent-requests.test.js +43 -43
- package/dist/__tests__/utils/agent-requests.test.js.map +1 -1
- package/dist/__tests__/utils/agents.test.js +17 -17
- package/dist/__tests__/utils/agents.test.js.map +1 -1
- package/dist/__tests__/utils/matching.test.js +92 -92
- package/dist/__tests__/utils/matching.test.js.map +1 -1
- package/dist/__tests__/utils/process.test.js +108 -108
- package/dist/__tests__/utils/process.test.js.map +1 -1
- package/dist/__tests__/utils/session.test.js +53 -53
- package/dist/__tests__/utils/session.test.js.map +1 -1
- package/dist/adapters/AgentAdapter.d.ts +2 -2
- package/dist/adapters/AgentAdapter.d.ts.map +1 -1
- package/dist/adapters/AgentAdapter.js +1 -1
- package/dist/adapters/AgentAdapter.js.map +1 -1
- package/dist/adapters/CopilotAdapter.d.ts +2 -2
- package/dist/adapters/CopilotAdapter.d.ts.map +1 -1
- package/dist/adapters/CopilotAdapter.js +51 -51
- package/dist/adapters/CopilotAdapter.js.map +1 -1
- package/dist/adapters/GeminiCliAdapter.d.ts +2 -2
- package/dist/adapters/GeminiCliAdapter.d.ts.map +1 -1
- package/dist/adapters/GeminiCliAdapter.js +86 -86
- package/dist/adapters/GeminiCliAdapter.js.map +1 -1
- package/dist/adapters/GrokCliAdapter.d.ts +1 -1
- package/dist/adapters/GrokCliAdapter.d.ts.map +1 -1
- package/dist/adapters/GrokCliAdapter.js +80 -80
- package/dist/adapters/GrokCliAdapter.js.map +1 -1
- package/dist/adapters/OpenCodeAdapter.d.ts +1 -1
- package/dist/adapters/OpenCodeAdapter.d.ts.map +1 -1
- package/dist/adapters/OpenCodeAdapter.js +37 -36
- package/dist/adapters/OpenCodeAdapter.js.map +1 -1
- package/dist/adapters/index.d.ts +9 -9
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +8 -8
- package/dist/adapters/index.js.map +1 -1
- package/dist/capacity/codex.d.ts +3 -3
- package/dist/capacity/codex.d.ts.map +1 -1
- package/dist/capacity/codex.js +57 -57
- package/dist/capacity/codex.js.map +1 -1
- package/dist/capacity/index.d.ts +3 -3
- package/dist/capacity/index.d.ts.map +1 -1
- package/dist/capacity/index.js +8 -8
- package/dist/capacity/index.js.map +1 -1
- package/dist/capacity/types.d.ts +1 -1
- package/dist/capacity/types.js.map +1 -1
- package/dist/database/connection.d.ts +1 -1
- package/dist/database/connection.d.ts.map +1 -1
- package/dist/database/connection.js +15 -15
- package/dist/database/connection.js.map +1 -1
- package/dist/database/index.d.ts +3 -3
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +2 -2
- package/dist/database/index.js.map +1 -1
- package/dist/database/migrations/005_agent_runtime.sql +2 -0
- package/dist/database/schema.d.ts +1 -1
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +7 -7
- package/dist/database/schema.js.map +1 -1
- package/dist/durable/DurableAgent.d.ts +9 -9
- package/dist/durable/DurableAgent.d.ts.map +1 -1
- package/dist/durable/DurableAgent.js +16 -16
- package/dist/durable/DurableAgent.js.map +1 -1
- package/dist/durable/DurableAgentRepository.d.ts +4 -4
- package/dist/durable/DurableAgentRepository.d.ts.map +1 -1
- package/dist/durable/DurableAgentRepository.js +49 -48
- package/dist/durable/DurableAgentRepository.js.map +1 -1
- package/dist/durable/process.d.ts +1 -1
- package/dist/durable/process.d.ts.map +1 -1
- package/dist/durable/process.js +14 -14
- package/dist/durable/process.js.map +1 -1
- package/dist/durable/run.d.ts +2 -2
- package/dist/durable/run.d.ts.map +1 -1
- package/dist/durable/run.js +6 -6
- package/dist/durable/run.js.map +1 -1
- package/dist/durable/utils.d.ts +1 -1
- package/dist/durable/utils.d.ts.map +1 -1
- package/dist/durable/utils.js +4 -4
- package/dist/durable/utils.js.map +1 -1
- package/dist/index.d.ts +46 -43
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -26
- package/dist/index.js.map +1 -1
- package/dist/providers/claude/ClaudeAgentMapper.d.ts +4 -4
- package/dist/providers/claude/ClaudeAgentMapper.d.ts.map +1 -1
- package/dist/providers/claude/ClaudeAgentMapper.js +10 -10
- package/dist/providers/claude/ClaudeAgentMapper.js.map +1 -1
- package/dist/providers/claude/ClaudeCodeAdapter.d.ts +1 -1
- package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +1 -1
- package/dist/providers/claude/ClaudeCodeAdapter.js +14 -14
- package/dist/providers/claude/ClaudeCodeAdapter.js.map +1 -1
- package/dist/providers/claude/ClaudeSessionLocator.d.ts +4 -4
- package/dist/providers/claude/ClaudeSessionLocator.d.ts.map +1 -1
- package/dist/providers/claude/ClaudeSessionLocator.js +79 -79
- package/dist/providers/claude/ClaudeSessionLocator.js.map +1 -1
- package/dist/providers/claude/ClaudeSessionParser.d.ts +2 -2
- package/dist/providers/claude/ClaudeSessionParser.d.ts.map +1 -1
- package/dist/providers/claude/ClaudeSessionParser.js +99 -99
- package/dist/providers/claude/ClaudeSessionParser.js.map +1 -1
- package/dist/providers/claude/durable/ClaudeCliProbe.d.ts.map +1 -1
- package/dist/providers/claude/durable/ClaudeCliProbe.js +16 -16
- package/dist/providers/claude/durable/ClaudeCliProbe.js.map +1 -1
- package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts +5 -5
- package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts.map +1 -1
- package/dist/providers/claude/durable/ClaudePrintAgentService.js +10 -10
- package/dist/providers/claude/durable/ClaudePrintAgentService.js.map +1 -1
- package/dist/providers/claude/durable/ClaudePrintRunner.d.ts +4 -4
- package/dist/providers/claude/durable/ClaudePrintRunner.d.ts.map +1 -1
- package/dist/providers/claude/durable/ClaudePrintRunner.js +18 -18
- package/dist/providers/claude/durable/ClaudePrintRunner.js.map +1 -1
- package/dist/providers/claude/durable/ClaudeStreamParser.d.ts +2 -2
- package/dist/providers/claude/durable/ClaudeStreamParser.d.ts.map +1 -1
- package/dist/providers/claude/durable/ClaudeStreamParser.js +17 -17
- package/dist/providers/claude/durable/ClaudeStreamParser.js.map +1 -1
- package/dist/providers/codex/CodexAdapter.d.ts +27 -0
- package/dist/providers/codex/CodexAdapter.d.ts.map +1 -0
- package/dist/providers/codex/CodexAdapter.js +162 -0
- package/dist/providers/codex/CodexAdapter.js.map +1 -0
- package/dist/providers/codex/CodexAgentMapper.d.ts +9 -0
- package/dist/providers/codex/CodexAgentMapper.d.ts.map +1 -0
- package/dist/providers/codex/CodexAgentMapper.js +35 -0
- package/dist/providers/codex/CodexAgentMapper.js.map +1 -0
- package/dist/providers/codex/CodexSessionLocator.d.ts +44 -0
- package/dist/providers/codex/CodexSessionLocator.d.ts.map +1 -0
- package/dist/providers/codex/CodexSessionLocator.js +207 -0
- package/dist/providers/codex/CodexSessionLocator.js.map +1 -0
- package/dist/providers/codex/CodexSessionMapping.d.ts +23 -0
- package/dist/providers/codex/CodexSessionMapping.d.ts.map +1 -0
- package/dist/providers/codex/CodexSessionMapping.js +68 -0
- package/dist/providers/codex/CodexSessionMapping.js.map +1 -0
- package/dist/providers/codex/CodexSessionParser.d.ts +58 -0
- package/dist/providers/codex/CodexSessionParser.d.ts.map +1 -0
- package/dist/providers/codex/CodexSessionParser.js +262 -0
- package/dist/providers/codex/CodexSessionParser.js.map +1 -0
- package/dist/providers/codex/durable/CodexCliProbe.d.ts.map +1 -1
- package/dist/providers/codex/durable/CodexCliProbe.js +22 -22
- package/dist/providers/codex/durable/CodexCliProbe.js.map +1 -1
- package/dist/providers/codex/durable/CodexPrintAgentService.d.ts +6 -6
- package/dist/providers/codex/durable/CodexPrintAgentService.d.ts.map +1 -1
- package/dist/providers/codex/durable/CodexPrintAgentService.js +10 -10
- package/dist/providers/codex/durable/CodexPrintAgentService.js.map +1 -1
- package/dist/providers/codex/durable/CodexPrintRunner.d.ts +4 -4
- package/dist/providers/codex/durable/CodexPrintRunner.d.ts.map +1 -1
- package/dist/providers/codex/durable/CodexPrintRunner.js +20 -20
- package/dist/providers/codex/durable/CodexPrintRunner.js.map +1 -1
- package/dist/providers/codex/durable/CodexStreamParser.d.ts +2 -2
- package/dist/providers/codex/durable/CodexStreamParser.d.ts.map +1 -1
- package/dist/providers/codex/durable/CodexStreamParser.js +21 -21
- package/dist/providers/codex/durable/CodexStreamParser.js.map +1 -1
- package/dist/providers/pi/PiAdapter.d.ts +28 -0
- package/dist/providers/pi/PiAdapter.d.ts.map +1 -0
- package/dist/providers/pi/PiAdapter.js +153 -0
- package/dist/providers/pi/PiAdapter.js.map +1 -0
- package/dist/providers/pi/PiAgentMapper.d.ts +9 -0
- package/dist/providers/pi/PiAgentMapper.d.ts.map +1 -0
- package/dist/providers/pi/PiAgentMapper.js +37 -0
- package/dist/providers/pi/PiAgentMapper.js.map +1 -0
- package/dist/providers/pi/PiSessionLocator.d.ts +23 -0
- package/dist/providers/pi/PiSessionLocator.d.ts.map +1 -0
- package/dist/providers/pi/PiSessionLocator.js +79 -0
- package/dist/providers/pi/PiSessionLocator.js.map +1 -0
- package/dist/providers/pi/PiSessionParser.d.ts +36 -0
- package/dist/providers/pi/PiSessionParser.d.ts.map +1 -0
- package/dist/providers/pi/PiSessionParser.js +191 -0
- package/dist/providers/pi/PiSessionParser.js.map +1 -0
- package/dist/providers/pi/PiSessionTracker.d.ts +23 -0
- package/dist/providers/pi/PiSessionTracker.d.ts.map +1 -0
- package/dist/providers/pi/PiSessionTracker.js +69 -0
- package/dist/providers/pi/PiSessionTracker.js.map +1 -0
- package/dist/providers/pi/durable/PiCliProbe.d.ts.map +1 -1
- package/dist/providers/pi/durable/PiCliProbe.js +15 -15
- package/dist/providers/pi/durable/PiCliProbe.js.map +1 -1
- package/dist/providers/pi/durable/PiPrintAgentService.d.ts +6 -6
- package/dist/providers/pi/durable/PiPrintAgentService.d.ts.map +1 -1
- package/dist/providers/pi/durable/PiPrintAgentService.js +10 -10
- package/dist/providers/pi/durable/PiPrintAgentService.js.map +1 -1
- package/dist/providers/pi/durable/PiPrintProtocol.d.ts.map +1 -1
- package/dist/providers/pi/durable/PiPrintProtocol.js +18 -18
- package/dist/providers/pi/durable/PiPrintProtocol.js.map +1 -1
- package/dist/providers/pi/durable/PiPrintRunner.d.ts +4 -4
- package/dist/providers/pi/durable/PiPrintRunner.d.ts.map +1 -1
- package/dist/providers/pi/durable/PiPrintRunner.js +15 -15
- package/dist/providers/pi/durable/PiPrintRunner.js.map +1 -1
- package/dist/providers/pi/durable/PiStreamParser.d.ts +1 -1
- package/dist/providers/pi/durable/PiStreamParser.d.ts.map +1 -1
- package/dist/providers/pi/durable/PiStreamParser.js +16 -16
- package/dist/providers/pi/durable/PiStreamParser.js.map +1 -1
- package/dist/readiness/AgentReadiness.d.ts +6 -6
- package/dist/readiness/AgentReadiness.d.ts.map +1 -1
- package/dist/readiness/AgentReadiness.js +130 -130
- package/dist/readiness/AgentReadiness.js.map +1 -1
- package/dist/runtime/ManagedAgentRuntime.d.ts +69 -0
- package/dist/runtime/ManagedAgentRuntime.d.ts.map +1 -0
- package/dist/runtime/ManagedAgentRuntime.js +156 -0
- package/dist/runtime/ManagedAgentRuntime.js.map +1 -0
- package/dist/runtime/RuntimeFactory.d.ts +4 -0
- package/dist/runtime/RuntimeFactory.d.ts.map +1 -0
- package/dist/runtime/RuntimeFactory.js +11 -0
- package/dist/runtime/RuntimeFactory.js.map +1 -0
- package/dist/runtime/errors.d.ts +27 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/errors.js +42 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/herdr/HerdrAgentRuntime.d.ts +31 -0
- package/dist/runtime/herdr/HerdrAgentRuntime.d.ts.map +1 -0
- package/dist/runtime/herdr/HerdrAgentRuntime.js +184 -0
- package/dist/runtime/herdr/HerdrAgentRuntime.js.map +1 -0
- package/dist/runtime/herdr/HerdrCliClient.d.ts +13 -0
- package/dist/runtime/herdr/HerdrCliClient.d.ts.map +1 -0
- package/dist/runtime/herdr/HerdrCliClient.js +60 -0
- package/dist/runtime/herdr/HerdrCliClient.js.map +1 -0
- package/dist/runtime/herdr/HerdrErrors.d.ts +7 -0
- package/dist/runtime/herdr/HerdrErrors.d.ts.map +1 -0
- package/dist/runtime/herdr/HerdrErrors.js +10 -0
- package/dist/runtime/herdr/HerdrErrors.js.map +1 -0
- package/dist/runtime/herdr/HerdrResponseParsers.d.ts +14 -0
- package/dist/runtime/herdr/HerdrResponseParsers.d.ts.map +1 -0
- package/dist/runtime/herdr/HerdrResponseParsers.js +96 -0
- package/dist/runtime/herdr/HerdrResponseParsers.js.map +1 -0
- package/dist/runtime/herdr/HerdrRuntimeRef.d.ts +9 -0
- package/dist/runtime/herdr/HerdrRuntimeRef.d.ts.map +1 -0
- package/dist/runtime/herdr/HerdrRuntimeRef.js +33 -0
- package/dist/runtime/herdr/HerdrRuntimeRef.js.map +1 -0
- package/dist/runtime/tmux/PidPolling.d.ts +5 -0
- package/dist/runtime/tmux/PidPolling.d.ts.map +1 -0
- package/dist/runtime/tmux/PidPolling.js +24 -0
- package/dist/runtime/tmux/PidPolling.js.map +1 -0
- package/dist/runtime/tmux/TmuxAgentRuntime.d.ts +17 -0
- package/dist/runtime/tmux/TmuxAgentRuntime.d.ts.map +1 -0
- package/dist/runtime/tmux/TmuxAgentRuntime.js +80 -0
- package/dist/runtime/tmux/TmuxAgentRuntime.js.map +1 -0
- package/dist/runtime/tmux/TmuxRuntimeRef.d.ts +5 -0
- package/dist/runtime/tmux/TmuxRuntimeRef.d.ts.map +1 -0
- package/dist/runtime/tmux/TmuxRuntimeRef.js +9 -0
- package/dist/runtime/tmux/TmuxRuntimeRef.js.map +1 -0
- package/dist/runtime/types.d.ts +54 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +3 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/terminal/TerminalFocusManager.d.ts.map +1 -1
- package/dist/terminal/TerminalFocusManager.js +50 -50
- package/dist/terminal/TerminalFocusManager.js.map +1 -1
- package/dist/terminal/TmuxManager.d.ts.map +1 -1
- package/dist/terminal/TmuxManager.js +47 -47
- package/dist/terminal/TmuxManager.js.map +1 -1
- package/dist/terminal/TtyWriter.d.ts +1 -1
- package/dist/terminal/TtyWriter.d.ts.map +1 -1
- package/dist/terminal/TtyWriter.js +89 -89
- package/dist/terminal/TtyWriter.js.map +1 -1
- package/dist/terminal/index.d.ts +4 -4
- package/dist/terminal/index.js +3 -3
- package/dist/terminal/index.js.map +1 -1
- package/dist/utils/AgentRegistry.d.ts +10 -2
- package/dist/utils/AgentRegistry.d.ts.map +1 -1
- package/dist/utils/AgentRegistry.js +57 -24
- package/dist/utils/AgentRegistry.js.map +1 -1
- package/dist/utils/agent-requests.d.ts.map +1 -1
- package/dist/utils/agent-requests.js +5 -5
- package/dist/utils/agent-requests.js.map +1 -1
- package/dist/utils/agents.d.ts +2 -2
- package/dist/utils/agents.d.ts.map +1 -1
- package/dist/utils/agents.js +15 -15
- package/dist/utils/agents.js.map +1 -1
- package/dist/utils/applescript.js +1 -1
- package/dist/utils/applescript.js.map +1 -1
- package/dist/utils/index.d.ts +6 -6
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -4
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/matching.d.ts +2 -2
- package/dist/utils/matching.d.ts.map +1 -1
- package/dist/utils/matching.js +4 -4
- package/dist/utils/matching.js.map +1 -1
- package/dist/utils/process.d.ts +1 -1
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +74 -74
- package/dist/utils/process.js.map +1 -1
- package/dist/utils/session.d.ts +1 -1
- package/dist/utils/session.d.ts.map +1 -1
- package/dist/utils/session.js +7 -7
- package/dist/utils/session.js.map +1 -1
- package/dist/utils/sortAgents.d.ts +2 -2
- package/dist/utils/sortAgents.d.ts.map +1 -1
- package/dist/utils/sortAgents.js +5 -5
- package/dist/utils/sortAgents.js.map +1 -1
- package/package.json +18 -19
- package/src/AgentManager.ts +283 -281
- package/src/__tests__/AgentManager.test.ts +917 -907
- package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +1657 -1368
- package/src/__tests__/adapters/CodexAdapter.test.ts +365 -1698
- package/src/__tests__/adapters/CopilotAdapter.test.ts +576 -481
- package/src/__tests__/adapters/GeminiCliAdapter.test.ts +1189 -1157
- package/src/__tests__/adapters/GrokCliAdapter.test.ts +325 -272
- package/src/__tests__/adapters/OpenCodeAdapter.test.ts +510 -455
- package/src/__tests__/capacity/codex.test.ts +178 -91
- package/src/__tests__/capacity/index.test.ts +27 -18
- package/src/__tests__/durable/CodexCliProbe.test.ts +75 -53
- package/src/__tests__/durable/CodexDurableAgentRepository.test.ts +51 -40
- package/src/__tests__/durable/CodexPrintAgent.integration.test.ts +89 -64
- package/src/__tests__/durable/CodexPrintAgentService.test.ts +196 -118
- package/src/__tests__/durable/CodexPrintRunner.test.ts +282 -162
- package/src/__tests__/fixtures/fake-claude.cjs +20 -13
- package/src/__tests__/fixtures/fake-codex.cjs +41 -30
- package/src/__tests__/print/ClaudeCliProbe.test.ts +27 -21
- package/src/__tests__/print/ClaudePrintAgent.integration.test.ts +48 -40
- package/src/__tests__/print/ClaudePrintAgentService.test.ts +118 -67
- package/src/__tests__/print/ClaudePrintRunner.test.ts +136 -83
- package/src/__tests__/print/DurableAgent.test.ts +19 -16
- package/src/__tests__/print/DurableAgentRepository.sqlite.test.ts +109 -86
- package/src/__tests__/print/DurableAgentRepository.test.ts +170 -137
- package/src/__tests__/providers/claude/ClaudeAgentMapper.test.ts +65 -65
- package/src/__tests__/providers/claude/ClaudeSessionLocator.test.ts +400 -377
- package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +182 -0
- package/src/__tests__/providers/codex/CodexSessionMapping.test.ts +63 -0
- package/src/__tests__/providers/codex/CodexSessionParser.test.ts +192 -0
- package/src/__tests__/providers/pi/PiAdapter.test.ts +310 -0
- package/src/__tests__/providers/pi/PiSessionParser.test.ts +190 -0
- package/src/__tests__/providers/pi/PiSessionTracker.test.ts +79 -0
- package/src/__tests__/providers/pi/durable/PiCliProbe.test.ts +48 -32
- package/src/__tests__/providers/pi/durable/PiDurableAgentRepository.test.ts +24 -23
- package/src/__tests__/providers/pi/durable/PiPrintAgentService.test.ts +131 -59
- package/src/__tests__/providers/pi/durable/PiPrintProtocol.test.ts +66 -28
- package/src/__tests__/providers/pi/durable/PiPrintRunner.test.ts +236 -90
- package/src/__tests__/providers/pi/durable/PiStreamParser.test.ts +20 -18
- package/src/__tests__/readiness/AgentReadiness.test.ts +217 -169
- package/src/__tests__/runtime/AgentRuntime.test.ts +8 -0
- package/src/__tests__/runtime/HerdrAgentRuntime.test.ts +358 -0
- package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +555 -0
- package/src/__tests__/terminal/TerminalFocusManager.test.ts +254 -253
- package/src/__tests__/terminal/TmuxManager.test.ts +157 -157
- package/src/__tests__/terminal/TtyWriter.test.ts +423 -419
- package/src/__tests__/utils/AgentRegistry.test.ts +506 -402
- package/src/__tests__/utils/ClaudeSessionParser.test.ts +276 -242
- package/src/__tests__/utils/agent-requests.test.ts +76 -56
- package/src/__tests__/utils/agents.test.ts +20 -20
- package/src/__tests__/utils/matching.test.ts +206 -171
- package/src/__tests__/utils/process.test.ts +276 -262
- package/src/__tests__/utils/session.test.ts +133 -139
- package/src/adapters/AgentAdapter.ts +134 -126
- package/src/adapters/CopilotAdapter.ts +405 -395
- package/src/adapters/GeminiCliAdapter.ts +598 -600
- package/src/adapters/GrokCliAdapter.ts +353 -342
- package/src/adapters/OpenCodeAdapter.ts +285 -259
- package/src/adapters/index.ts +15 -9
- package/src/capacity/codex.ts +137 -84
- package/src/capacity/index.ts +18 -13
- package/src/capacity/types.ts +1 -1
- package/src/database/connection.ts +73 -68
- package/src/database/index.ts +6 -6
- package/src/database/migrations/005_agent_runtime.sql +2 -0
- package/src/database/schema.ts +40 -38
- package/src/durable/DurableAgent.ts +85 -85
- package/src/durable/DurableAgentRepository.ts +409 -260
- package/src/durable/process.ts +22 -21
- package/src/durable/run.ts +61 -51
- package/src/durable/utils.ts +46 -41
- package/src/index.ts +144 -103
- package/src/providers/claude/ClaudeAgentMapper.ts +51 -50
- package/src/providers/claude/ClaudeCodeAdapter.ts +144 -136
- package/src/providers/claude/ClaudeSessionLocator.ts +291 -293
- package/src/providers/claude/ClaudeSessionParser.ts +322 -338
- package/src/providers/claude/durable/ClaudeCliProbe.ts +42 -37
- package/src/providers/claude/durable/ClaudePrintAgentService.ts +63 -50
- package/src/providers/claude/durable/ClaudePrintRunner.ts +79 -69
- package/src/providers/claude/durable/ClaudeStreamParser.ts +91 -62
- package/src/providers/codex/CodexAdapter.ts +205 -0
- package/src/providers/codex/CodexAgentMapper.ts +35 -0
- package/src/providers/codex/CodexSessionLocator.ts +279 -0
- package/src/providers/codex/CodexSessionMapping.ts +89 -0
- package/src/providers/codex/CodexSessionParser.ts +385 -0
- package/src/providers/codex/durable/CodexCliProbe.ts +50 -42
- package/src/providers/codex/durable/CodexPrintAgentService.ts +63 -49
- package/src/providers/codex/durable/CodexPrintRunner.ts +79 -69
- package/src/providers/codex/durable/CodexStreamParser.ts +97 -84
- package/src/providers/pi/PiAdapter.ts +183 -0
- package/src/providers/pi/PiAgentMapper.ts +36 -0
- package/src/providers/pi/PiSessionLocator.ts +95 -0
- package/src/providers/pi/PiSessionParser.ts +284 -0
- package/src/providers/pi/PiSessionTracker.ts +87 -0
- package/src/providers/pi/durable/PiCliProbe.ts +42 -34
- package/src/providers/pi/durable/PiPrintAgentService.ts +61 -53
- package/src/providers/pi/durable/PiPrintProtocol.ts +31 -29
- package/src/providers/pi/durable/PiPrintRunner.ts +75 -68
- package/src/providers/pi/durable/PiStreamParser.ts +82 -72
- package/src/readiness/AgentReadiness.ts +585 -513
- package/src/runtime/ManagedAgentRuntime.ts +266 -0
- package/src/runtime/RuntimeFactory.ts +13 -0
- package/src/runtime/errors.ts +50 -0
- package/src/runtime/herdr/HerdrAgentRuntime.ts +190 -0
- package/src/runtime/herdr/HerdrCliClient.ts +78 -0
- package/src/runtime/herdr/HerdrErrors.ts +9 -0
- package/src/runtime/herdr/HerdrResponseParsers.ts +76 -0
- package/src/runtime/herdr/HerdrRuntimeRef.ts +41 -0
- package/src/runtime/tmux/PidPolling.ts +34 -0
- package/src/runtime/tmux/TmuxAgentRuntime.ts +113 -0
- package/src/runtime/tmux/TmuxRuntimeRef.ts +9 -0
- package/src/runtime/types.ts +56 -0
- package/src/terminal/TerminalFocusManager.ts +215 -212
- package/src/terminal/TmuxManager.ts +99 -92
- package/src/terminal/TtyWriter.ts +203 -194
- package/src/terminal/index.ts +4 -4
- package/src/utils/AgentRegistry.ts +299 -238
- package/src/utils/agent-requests.ts +16 -16
- package/src/utils/agents.ts +41 -38
- package/src/utils/applescript.ts +4 -4
- package/src/utils/index.ts +12 -6
- package/src/utils/matching.ts +43 -43
- package/src/utils/process.ts +261 -258
- package/src/utils/session.ts +66 -66
- package/src/utils/sortAgents.ts +35 -33
- package/tsconfig.json +2 -8
- package/vitest.config.ts +16 -16
- package/.eslintrc.json +0 -31
- package/dist/__tests__/adapters/PiAdapter.test.js +0 -618
- package/dist/__tests__/adapters/PiAdapter.test.js.map +0 -1
- package/dist/__tests__/database/DurableAgentsDatabase.test.js +0 -128
- package/dist/__tests__/database/DurableAgentsDatabase.test.js.map +0 -1
- package/dist/adapters/CodexAdapter.d.ts +0 -109
- package/dist/adapters/CodexAdapter.d.ts.map +0 -1
- package/dist/adapters/CodexAdapter.js +0 -710
- package/dist/adapters/CodexAdapter.js.map +0 -1
- package/dist/adapters/PiAdapter.d.ts +0 -63
- package/dist/adapters/PiAdapter.d.ts.map +0 -1
- package/dist/adapters/PiAdapter.js +0 -453
- package/dist/adapters/PiAdapter.js.map +0 -1
- package/src/__tests__/adapters/PiAdapter.test.ts +0 -458
- package/src/__tests__/database/DurableAgentsDatabase.test.ts +0 -102
- package/src/adapters/CodexAdapter.ts +0 -923
- package/src/adapters/PiAdapter.ts +0 -598
|
@@ -1,123 +1,123 @@
|
|
|
1
|
-
import path from
|
|
2
|
-
import { describe, expect, it, vi } from
|
|
3
|
-
import { AGENTS, getAgentReadinessReport, getAgentReadinessReports } from
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { describe, expect, it, vi } from "vitest";
|
|
3
|
+
import { AGENTS, getAgentReadinessReport, getAgentReadinessReports } from "../../index.js";
|
|
4
4
|
const builtInSkillNames = [
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
"agent-management",
|
|
6
|
+
"memory",
|
|
7
|
+
"verify"
|
|
8
8
|
];
|
|
9
9
|
const skillRoots = {
|
|
10
|
-
claude:
|
|
11
|
-
codex:
|
|
12
|
-
copilot:
|
|
13
|
-
grok_cli:
|
|
14
|
-
opencode:
|
|
15
|
-
pi:
|
|
10
|
+
claude: ".claude/skills",
|
|
11
|
+
codex: ".codex/skills",
|
|
12
|
+
copilot: ".copilot/skills",
|
|
13
|
+
grok_cli: ".grok/skills",
|
|
14
|
+
opencode: ".config/opencode/skill",
|
|
15
|
+
pi: ".pi/agent/skills"
|
|
16
16
|
};
|
|
17
17
|
function fixture(overrides = {}) {
|
|
18
|
-
const homeDir =
|
|
19
|
-
const assetRoot =
|
|
18
|
+
const homeDir = "/home/test";
|
|
19
|
+
const assetRoot = "/assets";
|
|
20
20
|
const files = {
|
|
21
|
-
[path.join(homeDir,
|
|
22
|
-
[path.join(assetRoot,
|
|
23
|
-
[path.join(homeDir,
|
|
21
|
+
[path.join(homeDir, ".codex", "hooks", "codex-session-mapping.cjs")]: "codex-hook",
|
|
22
|
+
[path.join(assetRoot, "codex", "codex-session-mapping.cjs")]: "codex-hook",
|
|
23
|
+
[path.join(homeDir, ".codex", "hooks.json")]: JSON.stringify({
|
|
24
24
|
hooks: {
|
|
25
25
|
SessionStart: [
|
|
26
26
|
{
|
|
27
27
|
hooks: [
|
|
28
28
|
{
|
|
29
|
-
type:
|
|
30
|
-
command:
|
|
29
|
+
type: "command",
|
|
30
|
+
command: "node ~/.codex/hooks/codex-session-mapping.cjs"
|
|
31
31
|
}
|
|
32
32
|
]
|
|
33
33
|
}
|
|
34
34
|
]
|
|
35
35
|
}
|
|
36
36
|
}),
|
|
37
|
-
[path.join(homeDir,
|
|
38
|
-
|
|
37
|
+
[path.join(homeDir, ".codex", "ai-devkit", "sessions.json")]: JSON.stringify({
|
|
38
|
+
"123": "/sessions/codex.jsonl"
|
|
39
39
|
}),
|
|
40
|
-
|
|
41
|
-
[path.join(homeDir,
|
|
42
|
-
[path.join(assetRoot,
|
|
43
|
-
[path.join(homeDir,
|
|
40
|
+
"/sessions/codex.jsonl": "",
|
|
41
|
+
[path.join(homeDir, ".claude", "hooks", "claude-prompt-hook.js")]: "claude-hook",
|
|
42
|
+
[path.join(assetRoot, "claude", "claude-prompt-hook.js")]: "claude-hook",
|
|
43
|
+
[path.join(homeDir, ".claude", "settings.json")]: JSON.stringify({
|
|
44
44
|
hooks: {
|
|
45
45
|
PreToolUse: [
|
|
46
46
|
{
|
|
47
47
|
hooks: [
|
|
48
48
|
{
|
|
49
|
-
type:
|
|
50
|
-
command:
|
|
49
|
+
type: "command",
|
|
50
|
+
command: "node ~/.claude/hooks/claude-prompt-hook.js"
|
|
51
51
|
}
|
|
52
52
|
]
|
|
53
53
|
}
|
|
54
54
|
]
|
|
55
55
|
}
|
|
56
56
|
}),
|
|
57
|
-
[path.join(homeDir,
|
|
58
|
-
|
|
57
|
+
[path.join(homeDir, ".pi", "agent", "sessions.json")]: JSON.stringify({
|
|
58
|
+
"456": "/sessions/missing-pi.jsonl"
|
|
59
59
|
}),
|
|
60
|
-
[path.join(homeDir,
|
|
60
|
+
[path.join(homeDir, ".pi", "agent", "auth.json")]: JSON.stringify({
|
|
61
61
|
anthropic: {
|
|
62
|
-
access:
|
|
63
|
-
refresh:
|
|
62
|
+
access: "access-secret",
|
|
63
|
+
refresh: "refresh-secret"
|
|
64
64
|
},
|
|
65
65
|
litellm: {
|
|
66
|
-
key:
|
|
66
|
+
key: "litellm-secret",
|
|
67
67
|
env: {
|
|
68
|
-
LITELLM_BASE_URL:
|
|
68
|
+
LITELLM_BASE_URL: "https://litellm.example.test"
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
})
|
|
72
72
|
};
|
|
73
73
|
for (const directory of [
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
74
|
+
".claude",
|
|
75
|
+
".codex",
|
|
76
|
+
".copilot",
|
|
77
|
+
".grok",
|
|
78
|
+
".config/opencode",
|
|
79
|
+
".pi"
|
|
80
80
|
]){
|
|
81
|
-
files[path.join(homeDir, directory)] =
|
|
81
|
+
files[path.join(homeDir, directory)] = "<dir>";
|
|
82
82
|
}
|
|
83
83
|
for (const root of Object.values(skillRoots)){
|
|
84
84
|
for (const skill of builtInSkillNames){
|
|
85
|
-
files[path.join(homeDir, root, skill,
|
|
85
|
+
files[path.join(homeDir, root, skill, "SKILL.md")] = "# skill";
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
-
const executablePaths = Object.values(AGENTS).map((agent)=>path.join(
|
|
88
|
+
const executablePaths = Object.values(AGENTS).map((agent)=>path.join("/bin", agent.command));
|
|
89
89
|
const options = {
|
|
90
90
|
homeDir,
|
|
91
|
-
path:
|
|
91
|
+
path: "/bin",
|
|
92
92
|
assetRoot,
|
|
93
93
|
builtInSkillNames,
|
|
94
94
|
skillRoots,
|
|
95
95
|
readFile: async (target)=>{
|
|
96
|
-
if (!(target in files)) throw new Error(
|
|
96
|
+
if (!(target in files)) throw new Error("missing");
|
|
97
97
|
return files[target];
|
|
98
98
|
},
|
|
99
99
|
access: async (target)=>{
|
|
100
100
|
if (executablePaths.includes(target) || target in files) return;
|
|
101
|
-
throw new Error(
|
|
101
|
+
throw new Error("missing");
|
|
102
102
|
},
|
|
103
103
|
runCommand: vi.fn(async (command)=>{
|
|
104
|
-
if (command ===
|
|
105
|
-
stdout:
|
|
106
|
-
stderr:
|
|
104
|
+
if (command === "pi") return {
|
|
105
|
+
stdout: "npm:@ai-devkit/pi-session-tracker\n",
|
|
106
|
+
stderr: ""
|
|
107
107
|
};
|
|
108
|
-
if (command ===
|
|
108
|
+
if (command === "claude") return {
|
|
109
109
|
stdout: JSON.stringify({
|
|
110
110
|
loggedIn: true
|
|
111
111
|
}),
|
|
112
|
-
stderr:
|
|
112
|
+
stderr: ""
|
|
113
113
|
};
|
|
114
|
-
if (command ===
|
|
115
|
-
stdout:
|
|
116
|
-
stderr:
|
|
114
|
+
if (command === "gh") return {
|
|
115
|
+
stdout: "github.com\n Logged in to github.com account test-user\n",
|
|
116
|
+
stderr: ""
|
|
117
117
|
};
|
|
118
|
-
if (command ===
|
|
119
|
-
stdout:
|
|
120
|
-
stderr:
|
|
118
|
+
if (command === "opencode") return {
|
|
119
|
+
stdout: "● litellm api\n● OpenAI oauth\n",
|
|
120
|
+
stderr: ""
|
|
121
121
|
};
|
|
122
122
|
throw new Error(`unexpected command ${command}`);
|
|
123
123
|
}),
|
|
@@ -129,171 +129,171 @@ function fixture(overrides = {}) {
|
|
|
129
129
|
files
|
|
130
130
|
};
|
|
131
131
|
}
|
|
132
|
-
describe(
|
|
133
|
-
it(
|
|
132
|
+
describe("agent readiness", ()=>{
|
|
133
|
+
it("reports every readiness-supported adapter with generic checks and only real integrations", async ()=>{
|
|
134
134
|
const { options } = fixture();
|
|
135
135
|
const reports = await getAgentReadinessReports(options);
|
|
136
136
|
expect(Object.keys(reports)).toEqual([
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
137
|
+
"claude",
|
|
138
|
+
"codex",
|
|
139
|
+
"copilot",
|
|
140
|
+
"grok_cli",
|
|
141
|
+
"opencode",
|
|
142
|
+
"pi"
|
|
143
143
|
]);
|
|
144
|
-
expect(reports).not.toHaveProperty(
|
|
144
|
+
expect(reports).not.toHaveProperty("gemini_cli");
|
|
145
145
|
for (const [agent, report] of Object.entries(reports)){
|
|
146
146
|
expect(report.type).toBe(agent);
|
|
147
|
-
expect(report.executable.status).toBe(
|
|
148
|
-
expect(report.globalConfig.status).toBe(
|
|
147
|
+
expect(report.executable.status).toBe("pass");
|
|
148
|
+
expect(report.globalConfig.status).toBe("pass");
|
|
149
149
|
expect(report.builtInSkills).toMatchObject({
|
|
150
|
-
status:
|
|
150
|
+
status: "info",
|
|
151
151
|
present: 3,
|
|
152
152
|
required: 3
|
|
153
153
|
});
|
|
154
154
|
}
|
|
155
155
|
expect(reports.codex.integration).toMatchObject({
|
|
156
|
-
label:
|
|
156
|
+
label: "ai-devkit hook",
|
|
157
157
|
installed: true,
|
|
158
|
-
status:
|
|
158
|
+
status: "pass"
|
|
159
159
|
});
|
|
160
160
|
expect(reports.claude.integration).toMatchObject({
|
|
161
|
-
label:
|
|
161
|
+
label: "ai-devkit hook",
|
|
162
162
|
installed: true,
|
|
163
|
-
status:
|
|
163
|
+
status: "pass"
|
|
164
164
|
});
|
|
165
165
|
expect(reports.pi.integration).toMatchObject({
|
|
166
|
-
label:
|
|
166
|
+
label: "ai-devkit plugin",
|
|
167
167
|
installed: true,
|
|
168
|
-
status:
|
|
168
|
+
status: "pass"
|
|
169
169
|
});
|
|
170
170
|
expect(reports.copilot.integration).toBeUndefined();
|
|
171
171
|
expect(reports.grok_cli.integration).toBeUndefined();
|
|
172
172
|
expect(reports.opencode.integration).toBeUndefined();
|
|
173
173
|
});
|
|
174
|
-
it(
|
|
174
|
+
it("parses Pi provider names without returning credential values", async ()=>{
|
|
175
175
|
const { options } = fixture();
|
|
176
|
-
const report = await getAgentReadinessReport(
|
|
176
|
+
const report = await getAgentReadinessReport("pi", options);
|
|
177
177
|
const serialized = JSON.stringify(report);
|
|
178
178
|
expect(report.auth).toMatchObject({
|
|
179
|
-
state:
|
|
179
|
+
state: "authenticated",
|
|
180
180
|
provider: null,
|
|
181
181
|
availableProviders: [
|
|
182
|
-
|
|
183
|
-
|
|
182
|
+
"anthropic",
|
|
183
|
+
"litellm"
|
|
184
184
|
],
|
|
185
|
-
status:
|
|
185
|
+
status: "pass"
|
|
186
186
|
});
|
|
187
|
-
expect(serialized).not.toContain(
|
|
188
|
-
expect(serialized).not.toContain(
|
|
189
|
-
expect(serialized).not.toContain(
|
|
190
|
-
expect(serialized).not.toContain(
|
|
187
|
+
expect(serialized).not.toContain("access-secret");
|
|
188
|
+
expect(serialized).not.toContain("refresh-secret");
|
|
189
|
+
expect(serialized).not.toContain("litellm-secret");
|
|
190
|
+
expect(serialized).not.toContain("litellm.example.test");
|
|
191
191
|
});
|
|
192
|
-
it(
|
|
192
|
+
it("accepts Pi session tracker display names from pi list output", async ()=>{
|
|
193
193
|
const { options } = fixture({
|
|
194
194
|
runCommand: vi.fn(async (command)=>{
|
|
195
|
-
if (command ===
|
|
196
|
-
stdout:
|
|
197
|
-
stderr:
|
|
195
|
+
if (command === "pi") return {
|
|
196
|
+
stdout: "session tracker\n",
|
|
197
|
+
stderr: ""
|
|
198
198
|
};
|
|
199
|
-
if (command ===
|
|
199
|
+
if (command === "claude") return {
|
|
200
200
|
stdout: JSON.stringify({
|
|
201
201
|
loggedIn: true
|
|
202
202
|
}),
|
|
203
|
-
stderr:
|
|
203
|
+
stderr: ""
|
|
204
204
|
};
|
|
205
205
|
throw new Error(`unexpected command ${command}`);
|
|
206
206
|
})
|
|
207
207
|
});
|
|
208
|
-
const report = await getAgentReadinessReport(
|
|
208
|
+
const report = await getAgentReadinessReport("pi", options);
|
|
209
209
|
expect(report.integration).toMatchObject({
|
|
210
|
-
label:
|
|
210
|
+
label: "ai-devkit plugin",
|
|
211
211
|
installed: true,
|
|
212
|
-
status:
|
|
212
|
+
status: "pass"
|
|
213
213
|
});
|
|
214
214
|
});
|
|
215
|
-
it(
|
|
215
|
+
it("reports missing built-in skills as informational readiness", async ()=>{
|
|
216
216
|
const { options, files } = fixture();
|
|
217
|
-
delete files[path.join(options.homeDir, skillRoots.codex,
|
|
218
|
-
const report = await getAgentReadinessReport(
|
|
217
|
+
delete files[path.join(options.homeDir, skillRoots.codex, "verify", "SKILL.md")];
|
|
218
|
+
const report = await getAgentReadinessReport("codex", options);
|
|
219
219
|
expect(report.builtInSkills).toMatchObject({
|
|
220
|
-
status:
|
|
220
|
+
status: "info",
|
|
221
221
|
present: 2,
|
|
222
222
|
required: 3,
|
|
223
223
|
missing: [
|
|
224
|
-
|
|
224
|
+
"verify"
|
|
225
225
|
]
|
|
226
226
|
});
|
|
227
|
-
expect(report.status).toBe(
|
|
227
|
+
expect(report.status).toBe("pass");
|
|
228
228
|
});
|
|
229
|
-
it(
|
|
229
|
+
it("checks OpenCode auth from auth list output", async ()=>{
|
|
230
230
|
const { options } = fixture({
|
|
231
231
|
runCommand: vi.fn(async (command)=>{
|
|
232
|
-
if (command ===
|
|
232
|
+
if (command === "opencode") {
|
|
233
233
|
return {
|
|
234
|
-
stdout:
|
|
235
|
-
stderr:
|
|
234
|
+
stdout: "\x1B[32m●\x1B[0m litellm api\n● OpenAI oauth\n● GitLab Duo GITLAB_TOKEN\n",
|
|
235
|
+
stderr: ""
|
|
236
236
|
};
|
|
237
237
|
}
|
|
238
|
-
if (command ===
|
|
239
|
-
stdout:
|
|
240
|
-
stderr:
|
|
238
|
+
if (command === "pi") return {
|
|
239
|
+
stdout: "npm:@ai-devkit/pi-session-tracker\n",
|
|
240
|
+
stderr: ""
|
|
241
241
|
};
|
|
242
|
-
if (command ===
|
|
242
|
+
if (command === "claude") return {
|
|
243
243
|
stdout: JSON.stringify({
|
|
244
244
|
loggedIn: true
|
|
245
245
|
}),
|
|
246
|
-
stderr:
|
|
246
|
+
stderr: ""
|
|
247
247
|
};
|
|
248
248
|
throw new Error(`unexpected command ${command}`);
|
|
249
249
|
})
|
|
250
250
|
});
|
|
251
|
-
const report = await getAgentReadinessReport(
|
|
251
|
+
const report = await getAgentReadinessReport("opencode", options);
|
|
252
252
|
expect(report.auth).toMatchObject({
|
|
253
|
-
state:
|
|
254
|
-
source:
|
|
253
|
+
state: "authenticated",
|
|
254
|
+
source: "opencode auth list",
|
|
255
255
|
provider: null,
|
|
256
256
|
availableProviders: [
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
257
|
+
"GitLab Duo",
|
|
258
|
+
"OpenAI",
|
|
259
|
+
"litellm"
|
|
260
260
|
],
|
|
261
|
-
status:
|
|
261
|
+
status: "pass"
|
|
262
262
|
});
|
|
263
263
|
});
|
|
264
|
-
it(
|
|
264
|
+
it("checks Copilot auth through GitHub CLI authentication", async ()=>{
|
|
265
265
|
const { options } = fixture({
|
|
266
266
|
runCommand: vi.fn(async (command)=>{
|
|
267
|
-
if (command ===
|
|
268
|
-
stdout:
|
|
269
|
-
stderr:
|
|
267
|
+
if (command === "gh") return {
|
|
268
|
+
stdout: "github.com\n Logged in to github.com account test-user\n",
|
|
269
|
+
stderr: ""
|
|
270
270
|
};
|
|
271
|
-
if (command ===
|
|
272
|
-
stdout:
|
|
273
|
-
stderr:
|
|
271
|
+
if (command === "pi") return {
|
|
272
|
+
stdout: "npm:@ai-devkit/pi-session-tracker\n",
|
|
273
|
+
stderr: ""
|
|
274
274
|
};
|
|
275
|
-
if (command ===
|
|
275
|
+
if (command === "claude") return {
|
|
276
276
|
stdout: JSON.stringify({
|
|
277
277
|
loggedIn: true
|
|
278
278
|
}),
|
|
279
|
-
stderr:
|
|
279
|
+
stderr: ""
|
|
280
280
|
};
|
|
281
|
-
if (command ===
|
|
282
|
-
stdout:
|
|
283
|
-
stderr:
|
|
281
|
+
if (command === "opencode") return {
|
|
282
|
+
stdout: "● litellm api\n",
|
|
283
|
+
stderr: ""
|
|
284
284
|
};
|
|
285
285
|
throw new Error(`unexpected command ${command}`);
|
|
286
286
|
})
|
|
287
287
|
});
|
|
288
|
-
const report = await getAgentReadinessReport(
|
|
288
|
+
const report = await getAgentReadinessReport("copilot", options);
|
|
289
289
|
expect(report.auth).toMatchObject({
|
|
290
|
-
state:
|
|
291
|
-
source:
|
|
292
|
-
provider:
|
|
290
|
+
state: "authenticated",
|
|
291
|
+
source: "gh auth status --hostname github.com",
|
|
292
|
+
provider: "github",
|
|
293
293
|
availableProviders: [
|
|
294
|
-
|
|
294
|
+
"GitHub"
|
|
295
295
|
],
|
|
296
|
-
status:
|
|
296
|
+
status: "pass"
|
|
297
297
|
});
|
|
298
298
|
});
|
|
299
299
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/__tests__/readiness/AgentReadiness.test.ts"],"sourcesContent":["import path from 'node:path';\nimport { describe, expect, it, vi } from 'vitest';\nimport {\n AGENTS,\n getAgentReadinessReport,\n getAgentReadinessReports,\n type AgentReadinessOptions,\n type ReadinessAgentType,\n} from '../../index.js';\n\ntype Files = Record<string, string>;\n\nconst builtInSkillNames = ['agent-management', 'memory', 'verify'];\nconst skillRoots: Record<ReadinessAgentType, string> = {\n claude: '.claude/skills',\n codex: '.codex/skills',\n copilot: '.copilot/skills',\n grok_cli: '.grok/skills',\n opencode: '.config/opencode/skill',\n pi: '.pi/agent/skills',\n};\n\nfunction fixture(overrides: Partial<AgentReadinessOptions> = {}) {\n const homeDir = '/home/test';\n const assetRoot = '/assets';\n const files: Files = {\n [path.join(homeDir, '.codex', 'hooks', 'codex-session-mapping.cjs')]: 'codex-hook',\n [path.join(assetRoot, 'codex', 'codex-session-mapping.cjs')]: 'codex-hook',\n [path.join(homeDir, '.codex', 'hooks.json')]: JSON.stringify({ hooks: { SessionStart: [{ hooks: [\n { type: 'command', command: 'node ~/.codex/hooks/codex-session-mapping.cjs' },\n ] }] } }),\n [path.join(homeDir, '.codex', 'ai-devkit', 'sessions.json')]: JSON.stringify({ '123': '/sessions/codex.jsonl' }),\n '/sessions/codex.jsonl': '',\n [path.join(homeDir, '.claude', 'hooks', 'claude-prompt-hook.js')]: 'claude-hook',\n [path.join(assetRoot, 'claude', 'claude-prompt-hook.js')]: 'claude-hook',\n [path.join(homeDir, '.claude', 'settings.json')]: JSON.stringify({ hooks: { PreToolUse: [{ hooks: [\n { type: 'command', command: 'node ~/.claude/hooks/claude-prompt-hook.js' },\n ] }] } }),\n [path.join(homeDir, '.pi', 'agent', 'sessions.json')]: JSON.stringify({ '456': '/sessions/missing-pi.jsonl' }),\n [path.join(homeDir, '.pi', 'agent', 'auth.json')]: JSON.stringify({\n anthropic: { access: 'access-secret', refresh: 'refresh-secret' },\n litellm: { key: 'litellm-secret', env: { LITELLM_BASE_URL: 'https://litellm.example.test' } },\n }),\n };\n for (const directory of ['.claude', '.codex', '.copilot', '.grok', '.config/opencode', '.pi']) {\n files[path.join(homeDir, directory)] = '<dir>';\n }\n for (const root of Object.values(skillRoots)) {\n for (const skill of builtInSkillNames) {\n files[path.join(homeDir, root, skill, 'SKILL.md')] = '# skill';\n }\n }\n const executablePaths = Object.values(AGENTS).map(agent => path.join('/bin', agent.command));\n const options: AgentReadinessOptions = {\n homeDir,\n path: '/bin',\n assetRoot,\n builtInSkillNames,\n skillRoots,\n readFile: async target => {\n if (!(target in files)) throw new Error('missing');\n return files[target];\n },\n access: async target => {\n if (executablePaths.includes(target) || target in files) return;\n throw new Error('missing');\n },\n runCommand: vi.fn(async command => {\n if (command === 'pi') return { stdout: 'npm:@ai-devkit/pi-session-tracker\\n', stderr: '' };\n if (command === 'claude') return { stdout: JSON.stringify({ loggedIn: true }), stderr: '' };\n if (command === 'gh') return { stdout: 'github.com\\n Logged in to github.com account test-user\\n', stderr: '' };\n if (command === 'opencode') return { stdout: '● litellm api\\n● OpenAI oauth\\n', stderr: '' };\n throw new Error(`unexpected command ${command}`);\n }),\n codexAuth: async () => true,\n ...overrides,\n };\n return { options, files };\n}\n\ndescribe('agent readiness', () => {\n it('reports every readiness-supported adapter with generic checks and only real integrations', async () => {\n const { options } = fixture();\n\n const reports = await getAgentReadinessReports(options);\n\n expect(Object.keys(reports)).toEqual(['claude', 'codex', 'copilot', 'grok_cli', 'opencode', 'pi']);\n expect(reports).not.toHaveProperty('gemini_cli');\n for (const [agent, report] of Object.entries(reports) as Array<[ReadinessAgentType, typeof reports[ReadinessAgentType]]>) {\n expect(report.type).toBe(agent);\n expect(report.executable.status).toBe('pass');\n expect(report.globalConfig.status).toBe('pass');\n expect(report.builtInSkills).toMatchObject({ status: 'info', present: 3, required: 3 });\n }\n expect(reports.codex.integration).toMatchObject({ label: 'ai-devkit hook', installed: true, status: 'pass' });\n expect(reports.claude.integration).toMatchObject({ label: 'ai-devkit hook', installed: true, status: 'pass' });\n expect(reports.pi.integration).toMatchObject({ label: 'ai-devkit plugin', installed: true, status: 'pass' });\n expect(reports.copilot.integration).toBeUndefined();\n expect(reports.grok_cli.integration).toBeUndefined();\n expect(reports.opencode.integration).toBeUndefined();\n });\n\n it('parses Pi provider names without returning credential values', async () => {\n const { options } = fixture();\n\n const report = await getAgentReadinessReport('pi', options);\n const serialized = JSON.stringify(report);\n\n expect(report.auth).toMatchObject({\n state: 'authenticated',\n provider: null,\n availableProviders: ['anthropic', 'litellm'],\n status: 'pass',\n });\n expect(serialized).not.toContain('access-secret');\n expect(serialized).not.toContain('refresh-secret');\n expect(serialized).not.toContain('litellm-secret');\n expect(serialized).not.toContain('litellm.example.test');\n });\n\n it('accepts Pi session tracker display names from pi list output', async () => {\n const { options } = fixture({\n runCommand: vi.fn(async command => {\n if (command === 'pi') return { stdout: 'session tracker\\n', stderr: '' };\n if (command === 'claude') return { stdout: JSON.stringify({ loggedIn: true }), stderr: '' };\n throw new Error(`unexpected command ${command}`);\n }),\n });\n\n const report = await getAgentReadinessReport('pi', options);\n\n expect(report.integration).toMatchObject({ label: 'ai-devkit plugin', installed: true, status: 'pass' });\n });\n\n it('reports missing built-in skills as informational readiness', async () => {\n const { options, files } = fixture();\n delete files[path.join(options.homeDir!, skillRoots.codex, 'verify', 'SKILL.md')];\n\n const report = await getAgentReadinessReport('codex', options);\n\n expect(report.builtInSkills).toMatchObject({\n status: 'info',\n present: 2,\n required: 3,\n missing: ['verify'],\n });\n expect(report.status).toBe('pass');\n });\n\n it('checks OpenCode auth from auth list output', async () => {\n const { options } = fixture({\n runCommand: vi.fn(async command => {\n if (command === 'opencode') {\n return { stdout: '\\x1B[32m●\\x1B[0m litellm api\\n● OpenAI oauth\\n● GitLab Duo GITLAB_TOKEN\\n', stderr: '' };\n }\n if (command === 'pi') return { stdout: 'npm:@ai-devkit/pi-session-tracker\\n', stderr: '' };\n if (command === 'claude') return { stdout: JSON.stringify({ loggedIn: true }), stderr: '' };\n throw new Error(`unexpected command ${command}`);\n }),\n });\n\n const report = await getAgentReadinessReport('opencode', options);\n\n expect(report.auth).toMatchObject({\n state: 'authenticated',\n source: 'opencode auth list',\n provider: null,\n availableProviders: ['GitLab Duo', 'OpenAI', 'litellm'],\n status: 'pass',\n });\n });\n\n it('checks Copilot auth through GitHub CLI authentication', async () => {\n const { options } = fixture({\n runCommand: vi.fn(async command => {\n if (command === 'gh') return { stdout: 'github.com\\n Logged in to github.com account test-user\\n', stderr: '' };\n if (command === 'pi') return { stdout: 'npm:@ai-devkit/pi-session-tracker\\n', stderr: '' };\n if (command === 'claude') return { stdout: JSON.stringify({ loggedIn: true }), stderr: '' };\n if (command === 'opencode') return { stdout: '● litellm api\\n', stderr: '' };\n throw new Error(`unexpected command ${command}`);\n }),\n });\n\n const report = await getAgentReadinessReport('copilot', options);\n\n expect(report.auth).toMatchObject({\n state: 'authenticated',\n source: 'gh auth status --hostname github.com',\n provider: 'github',\n availableProviders: ['GitHub'],\n status: 'pass',\n });\n });\n});\n"],"names":["path","describe","expect","it","vi","AGENTS","getAgentReadinessReport","getAgentReadinessReports","builtInSkillNames","skillRoots","claude","codex","copilot","grok_cli","opencode","pi","fixture","overrides","homeDir","assetRoot","files","join","JSON","stringify","hooks","SessionStart","type","command","PreToolUse","anthropic","access","refresh","litellm","key","env","LITELLM_BASE_URL","directory","root","Object","values","skill","executablePaths","map","agent","options","readFile","target","Error","includes","runCommand","fn","stdout","stderr","loggedIn","codexAuth","reports","keys","toEqual","not","toHaveProperty","report","entries","toBe","executable","status","globalConfig","builtInSkills","toMatchObject","present","required","integration","label","installed","toBeUndefined","serialized","auth","state","provider","availableProviders","toContain","missing","source"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/__tests__/readiness/AgentReadiness.test.ts"],"sourcesContent":["import path from \"node:path\";\nimport { describe, expect, it, vi } from \"vitest\";\nimport {\n AGENTS,\n getAgentReadinessReport,\n getAgentReadinessReports,\n type AgentReadinessOptions,\n type ReadinessAgentType,\n} from \"../../index.js\";\n\ntype Files = Record<string, string>;\n\nconst builtInSkillNames = [\"agent-management\", \"memory\", \"verify\"];\nconst skillRoots: Record<ReadinessAgentType, string> = {\n claude: \".claude/skills\",\n codex: \".codex/skills\",\n copilot: \".copilot/skills\",\n grok_cli: \".grok/skills\",\n opencode: \".config/opencode/skill\",\n pi: \".pi/agent/skills\",\n};\n\nfunction fixture(overrides: Partial<AgentReadinessOptions> = {}) {\n const homeDir = \"/home/test\";\n const assetRoot = \"/assets\";\n const files: Files = {\n [path.join(homeDir, \".codex\", \"hooks\", \"codex-session-mapping.cjs\")]: \"codex-hook\",\n [path.join(assetRoot, \"codex\", \"codex-session-mapping.cjs\")]: \"codex-hook\",\n [path.join(homeDir, \".codex\", \"hooks.json\")]: JSON.stringify({\n hooks: {\n SessionStart: [\n {\n hooks: [{ type: \"command\", command: \"node ~/.codex/hooks/codex-session-mapping.cjs\" }],\n },\n ],\n },\n }),\n [path.join(homeDir, \".codex\", \"ai-devkit\", \"sessions.json\")]: JSON.stringify({\n \"123\": \"/sessions/codex.jsonl\",\n }),\n \"/sessions/codex.jsonl\": \"\",\n [path.join(homeDir, \".claude\", \"hooks\", \"claude-prompt-hook.js\")]: \"claude-hook\",\n [path.join(assetRoot, \"claude\", \"claude-prompt-hook.js\")]: \"claude-hook\",\n [path.join(homeDir, \".claude\", \"settings.json\")]: JSON.stringify({\n hooks: {\n PreToolUse: [\n { hooks: [{ type: \"command\", command: \"node ~/.claude/hooks/claude-prompt-hook.js\" }] },\n ],\n },\n }),\n [path.join(homeDir, \".pi\", \"agent\", \"sessions.json\")]: JSON.stringify({\n \"456\": \"/sessions/missing-pi.jsonl\",\n }),\n [path.join(homeDir, \".pi\", \"agent\", \"auth.json\")]: JSON.stringify({\n anthropic: { access: \"access-secret\", refresh: \"refresh-secret\" },\n litellm: { key: \"litellm-secret\", env: { LITELLM_BASE_URL: \"https://litellm.example.test\" } },\n }),\n };\n for (const directory of [\".claude\", \".codex\", \".copilot\", \".grok\", \".config/opencode\", \".pi\"]) {\n files[path.join(homeDir, directory)] = \"<dir>\";\n }\n for (const root of Object.values(skillRoots)) {\n for (const skill of builtInSkillNames) {\n files[path.join(homeDir, root, skill, \"SKILL.md\")] = \"# skill\";\n }\n }\n const executablePaths = Object.values(AGENTS).map((agent) => path.join(\"/bin\", agent.command));\n const options: AgentReadinessOptions = {\n homeDir,\n path: \"/bin\",\n assetRoot,\n builtInSkillNames,\n skillRoots,\n readFile: async (target) => {\n if (!(target in files)) throw new Error(\"missing\");\n return files[target];\n },\n access: async (target) => {\n if (executablePaths.includes(target) || target in files) return;\n throw new Error(\"missing\");\n },\n runCommand: vi.fn(async (command) => {\n if (command === \"pi\") return { stdout: \"npm:@ai-devkit/pi-session-tracker\\n\", stderr: \"\" };\n if (command === \"claude\") return { stdout: JSON.stringify({ loggedIn: true }), stderr: \"\" };\n if (command === \"gh\")\n return { stdout: \"github.com\\n Logged in to github.com account test-user\\n\", stderr: \"\" };\n if (command === \"opencode\")\n return { stdout: \"● litellm api\\n● OpenAI oauth\\n\", stderr: \"\" };\n throw new Error(`unexpected command ${command}`);\n }),\n codexAuth: async () => true,\n ...overrides,\n };\n return { options, files };\n}\n\ndescribe(\"agent readiness\", () => {\n it(\"reports every readiness-supported adapter with generic checks and only real integrations\", async () => {\n const { options } = fixture();\n\n const reports = await getAgentReadinessReports(options);\n\n expect(Object.keys(reports)).toEqual([\n \"claude\",\n \"codex\",\n \"copilot\",\n \"grok_cli\",\n \"opencode\",\n \"pi\",\n ]);\n expect(reports).not.toHaveProperty(\"gemini_cli\");\n for (const [agent, report] of Object.entries(reports) as Array<\n [ReadinessAgentType, (typeof reports)[ReadinessAgentType]]\n >) {\n expect(report.type).toBe(agent);\n expect(report.executable.status).toBe(\"pass\");\n expect(report.globalConfig.status).toBe(\"pass\");\n expect(report.builtInSkills).toMatchObject({ status: \"info\", present: 3, required: 3 });\n }\n expect(reports.codex.integration).toMatchObject({\n label: \"ai-devkit hook\",\n installed: true,\n status: \"pass\",\n });\n expect(reports.claude.integration).toMatchObject({\n label: \"ai-devkit hook\",\n installed: true,\n status: \"pass\",\n });\n expect(reports.pi.integration).toMatchObject({\n label: \"ai-devkit plugin\",\n installed: true,\n status: \"pass\",\n });\n expect(reports.copilot.integration).toBeUndefined();\n expect(reports.grok_cli.integration).toBeUndefined();\n expect(reports.opencode.integration).toBeUndefined();\n });\n\n it(\"parses Pi provider names without returning credential values\", async () => {\n const { options } = fixture();\n\n const report = await getAgentReadinessReport(\"pi\", options);\n const serialized = JSON.stringify(report);\n\n expect(report.auth).toMatchObject({\n state: \"authenticated\",\n provider: null,\n availableProviders: [\"anthropic\", \"litellm\"],\n status: \"pass\",\n });\n expect(serialized).not.toContain(\"access-secret\");\n expect(serialized).not.toContain(\"refresh-secret\");\n expect(serialized).not.toContain(\"litellm-secret\");\n expect(serialized).not.toContain(\"litellm.example.test\");\n });\n\n it(\"accepts Pi session tracker display names from pi list output\", async () => {\n const { options } = fixture({\n runCommand: vi.fn(async (command) => {\n if (command === \"pi\") return { stdout: \"session tracker\\n\", stderr: \"\" };\n if (command === \"claude\") return { stdout: JSON.stringify({ loggedIn: true }), stderr: \"\" };\n throw new Error(`unexpected command ${command}`);\n }),\n });\n\n const report = await getAgentReadinessReport(\"pi\", options);\n\n expect(report.integration).toMatchObject({\n label: \"ai-devkit plugin\",\n installed: true,\n status: \"pass\",\n });\n });\n\n it(\"reports missing built-in skills as informational readiness\", async () => {\n const { options, files } = fixture();\n delete files[path.join(options.homeDir!, skillRoots.codex, \"verify\", \"SKILL.md\")];\n\n const report = await getAgentReadinessReport(\"codex\", options);\n\n expect(report.builtInSkills).toMatchObject({\n status: \"info\",\n present: 2,\n required: 3,\n missing: [\"verify\"],\n });\n expect(report.status).toBe(\"pass\");\n });\n\n it(\"checks OpenCode auth from auth list output\", async () => {\n const { options } = fixture({\n runCommand: vi.fn(async (command) => {\n if (command === \"opencode\") {\n return {\n stdout: \"\\x1B[32m●\\x1B[0m litellm api\\n● OpenAI oauth\\n● GitLab Duo GITLAB_TOKEN\\n\",\n stderr: \"\",\n };\n }\n if (command === \"pi\") return { stdout: \"npm:@ai-devkit/pi-session-tracker\\n\", stderr: \"\" };\n if (command === \"claude\") return { stdout: JSON.stringify({ loggedIn: true }), stderr: \"\" };\n throw new Error(`unexpected command ${command}`);\n }),\n });\n\n const report = await getAgentReadinessReport(\"opencode\", options);\n\n expect(report.auth).toMatchObject({\n state: \"authenticated\",\n source: \"opencode auth list\",\n provider: null,\n availableProviders: [\"GitLab Duo\", \"OpenAI\", \"litellm\"],\n status: \"pass\",\n });\n });\n\n it(\"checks Copilot auth through GitHub CLI authentication\", async () => {\n const { options } = fixture({\n runCommand: vi.fn(async (command) => {\n if (command === \"gh\")\n return {\n stdout: \"github.com\\n Logged in to github.com account test-user\\n\",\n stderr: \"\",\n };\n if (command === \"pi\") return { stdout: \"npm:@ai-devkit/pi-session-tracker\\n\", stderr: \"\" };\n if (command === \"claude\") return { stdout: JSON.stringify({ loggedIn: true }), stderr: \"\" };\n if (command === \"opencode\") return { stdout: \"● litellm api\\n\", stderr: \"\" };\n throw new Error(`unexpected command ${command}`);\n }),\n });\n\n const report = await getAgentReadinessReport(\"copilot\", options);\n\n expect(report.auth).toMatchObject({\n state: \"authenticated\",\n source: \"gh auth status --hostname github.com\",\n provider: \"github\",\n availableProviders: [\"GitHub\"],\n status: \"pass\",\n });\n });\n});\n"],"names":["path","describe","expect","it","vi","AGENTS","getAgentReadinessReport","getAgentReadinessReports","builtInSkillNames","skillRoots","claude","codex","copilot","grok_cli","opencode","pi","fixture","overrides","homeDir","assetRoot","files","join","JSON","stringify","hooks","SessionStart","type","command","PreToolUse","anthropic","access","refresh","litellm","key","env","LITELLM_BASE_URL","directory","root","Object","values","skill","executablePaths","map","agent","options","readFile","target","Error","includes","runCommand","fn","stdout","stderr","loggedIn","codexAuth","reports","keys","toEqual","not","toHaveProperty","report","entries","toBe","executable","status","globalConfig","builtInSkills","toMatchObject","present","required","integration","label","installed","toBeUndefined","serialized","auth","state","provider","availableProviders","toContain","missing","source"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createInteractiveRuntime } from "../../runtime/RuntimeFactory.js";
|
|
2
|
+
describe("AgentRuntime", ()=>{
|
|
3
|
+
it("creates a runtime for each supported interactive provider", ()=>{
|
|
4
|
+
expect(createInteractiveRuntime("herdr")).toMatchObject({
|
|
5
|
+
provider: "herdr"
|
|
6
|
+
});
|
|
7
|
+
expect(createInteractiveRuntime("tmux")).toMatchObject({
|
|
8
|
+
provider: "tmux"
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
//# sourceMappingURL=AgentRuntime.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/__tests__/runtime/AgentRuntime.test.ts"],"sourcesContent":["import { createInteractiveRuntime } from \"../../runtime/RuntimeFactory.js\";\n\ndescribe(\"AgentRuntime\", () => {\n it(\"creates a runtime for each supported interactive provider\", () => {\n expect(createInteractiveRuntime(\"herdr\")).toMatchObject({ provider: \"herdr\" });\n expect(createInteractiveRuntime(\"tmux\")).toMatchObject({ provider: \"tmux\" });\n });\n});\n"],"names":["createInteractiveRuntime","describe","it","expect","toMatchObject","provider"],"mappings":"AAAA,SAASA,wBAAwB,QAAQ,kCAAkC;AAE3EC,SAAS,gBAAgB;IACvBC,GAAG,6DAA6D;QAC9DC,OAAOH,yBAAyB,UAAUI,aAAa,CAAC;YAAEC,UAAU;QAAQ;QAC5EF,OAAOH,yBAAyB,SAASI,aAAa,CAAC;YAAEC,UAAU;QAAO;IAC5E;AACF"}
|