@ai-devkit/agent-manager 0.37.0 → 0.39.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 +0 -4
- package/dist/AgentManager.d.ts.map +1 -1
- package/dist/AgentManager.js +2 -2
- package/dist/AgentManager.js.map +1 -1
- package/dist/__tests__/capacity/anthropic.test.js +115 -0
- package/dist/__tests__/capacity/anthropic.test.js.map +1 -0
- package/dist/__tests__/capacity/boundaries.test.js +45 -0
- package/dist/__tests__/capacity/boundaries.test.js.map +1 -0
- package/dist/__tests__/capacity/claude.test.js +3 -3
- package/dist/__tests__/capacity/claude.test.js.map +1 -1
- package/dist/__tests__/capacity/codex.test.js +3 -1
- package/dist/__tests__/capacity/codex.test.js.map +1 -1
- package/dist/__tests__/capacity/openai.test.js +21 -12
- package/dist/__tests__/capacity/openai.test.js.map +1 -1
- package/dist/__tests__/capacity/wham.test.js +1 -1
- package/dist/__tests__/capacity/wham.test.js.map +1 -1
- package/dist/__tests__/capacity/zai.test.js +7 -8
- package/dist/__tests__/capacity/zai.test.js.map +1 -1
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js +2 -1
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js.map +1 -1
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js.map +1 -1
- package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js +7 -15
- package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js.map +1 -1
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js +3 -1
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js.map +1 -1
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js +11 -26
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js.map +1 -1
- package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js +3 -7
- package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js.map +1 -1
- package/dist/__tests__/harnesses/devin/DevinAdapter.test.js +597 -0
- package/dist/__tests__/harnesses/devin/DevinAdapter.test.js.map +1 -0
- package/dist/__tests__/harnesses/devin/DevinAgentMapper.test.js +91 -0
- package/dist/__tests__/harnesses/devin/DevinAgentMapper.test.js.map +1 -0
- package/dist/__tests__/harnesses/devin/DevinSessionLocator.test.js +192 -0
- package/dist/__tests__/harnesses/devin/DevinSessionLocator.test.js.map +1 -0
- package/dist/__tests__/harnesses/devin/DevinSessionParser.test.js +407 -0
- package/dist/__tests__/harnesses/devin/DevinSessionParser.test.js.map +1 -0
- package/dist/__tests__/harnesses/devin/fixtures.js +95 -0
- package/dist/__tests__/harnesses/devin/fixtures.js.map +1 -0
- package/dist/__tests__/harnesses/pi/durable/PiCliProbe.test.js +5 -11
- package/dist/__tests__/harnesses/pi/durable/PiCliProbe.test.js.map +1 -1
- package/dist/__tests__/harnesses/pi/durable/PiPrintAgentService.test.js +9 -19
- package/dist/__tests__/harnesses/pi/durable/PiPrintAgentService.test.js.map +1 -1
- package/dist/__tests__/harnesses/pi/durable/PiPrintRunner.test.js +3 -7
- package/dist/__tests__/harnesses/pi/durable/PiPrintRunner.test.js.map +1 -1
- package/dist/__tests__/{readiness → harnesses/readiness}/AgentReadiness.test.js +95 -11
- package/dist/__tests__/harnesses/readiness/AgentReadiness.test.js.map +1 -0
- package/dist/__tests__/harnesses/runtimeProfiles.test.js +89 -0
- package/dist/__tests__/harnesses/runtimeProfiles.test.js.map +1 -0
- package/dist/__tests__/print/DurableAgent.test.js +4 -6
- package/dist/__tests__/print/DurableAgent.test.js.map +1 -1
- package/dist/__tests__/print/DurableAgentRepository.test.js +1 -12
- package/dist/__tests__/print/DurableAgentRepository.test.js.map +1 -1
- package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -1
- package/dist/__tests__/terminal/GhosttyBackend.test.js +334 -0
- package/dist/__tests__/terminal/GhosttyBackend.test.js.map +1 -0
- package/dist/__tests__/terminal/TmuxManager.test.js +1 -1
- package/dist/__tests__/terminal/TmuxManager.test.js.map +1 -1
- package/dist/adapters/AgentAdapter.d.ts +1 -1
- package/dist/adapters/AgentAdapter.d.ts.map +1 -1
- package/dist/adapters/AgentAdapter.js +2 -1
- package/dist/adapters/AgentAdapter.js.map +1 -1
- package/dist/capacity/index.d.ts +9 -19
- package/dist/capacity/index.d.ts.map +1 -1
- package/dist/capacity/index.js +11 -4
- package/dist/capacity/index.js.map +1 -1
- package/dist/capacity/providers/anthropic.d.ts +9 -0
- package/dist/capacity/providers/anthropic.d.ts.map +1 -0
- package/dist/capacity/{claude.js → providers/anthropic.js} +10 -128
- package/dist/capacity/providers/anthropic.js.map +1 -0
- package/dist/capacity/providers/openai-platform.d.ts +14 -0
- package/dist/capacity/providers/openai-platform.d.ts.map +1 -0
- package/dist/capacity/providers/openai-platform.js +120 -0
- package/dist/capacity/providers/openai-platform.js.map +1 -0
- package/dist/capacity/providers/openai-subscription.d.ts +20 -0
- package/dist/capacity/providers/openai-subscription.d.ts.map +1 -0
- package/dist/capacity/providers/openai-subscription.js +129 -0
- package/dist/capacity/providers/openai-subscription.js.map +1 -0
- package/dist/capacity/providers/zai.d.ts +8 -0
- package/dist/capacity/providers/zai.d.ts.map +1 -0
- package/dist/capacity/{zai.js → providers/zai.js} +17 -62
- package/dist/capacity/providers/zai.js.map +1 -0
- package/dist/capacity/sources/claude.d.ts +9 -0
- package/dist/capacity/sources/claude.d.ts.map +1 -0
- package/dist/capacity/sources/claude.js +17 -0
- package/dist/capacity/sources/claude.js.map +1 -0
- package/dist/capacity/{codex.d.ts → sources/codex.d.ts} +5 -9
- package/dist/capacity/sources/codex.d.ts.map +1 -0
- package/dist/capacity/{codex.js → sources/codex.js} +31 -84
- package/dist/capacity/sources/codex.js.map +1 -0
- package/dist/capacity/sources/pi.d.ts +30 -0
- package/dist/capacity/sources/pi.d.ts.map +1 -0
- package/dist/capacity/sources/pi.js +81 -0
- package/dist/capacity/sources/pi.js.map +1 -0
- package/dist/capacity/types.d.ts +2 -0
- package/dist/capacity/types.d.ts.map +1 -1
- package/dist/capacity/types.js +1 -1
- package/dist/capacity/types.js.map +1 -1
- package/dist/harnesses/claude/credentials.d.ts +10 -0
- package/dist/harnesses/claude/credentials.d.ts.map +1 -0
- package/dist/harnesses/claude/credentials.js +112 -0
- package/dist/harnesses/claude/credentials.js.map +1 -0
- package/dist/harnesses/claude/readiness.d.ts +3 -0
- package/dist/harnesses/claude/readiness.d.ts.map +1 -0
- package/dist/harnesses/claude/readiness.js +63 -0
- package/dist/harnesses/claude/readiness.js.map +1 -0
- package/dist/harnesses/codex/credentials.d.ts +15 -0
- package/dist/harnesses/codex/credentials.d.ts.map +1 -0
- package/dist/harnesses/codex/credentials.js +58 -0
- package/dist/harnesses/codex/credentials.js.map +1 -0
- package/dist/harnesses/codex/readiness.d.ts +3 -0
- package/dist/harnesses/codex/readiness.d.ts.map +1 -0
- package/dist/harnesses/codex/readiness.js +60 -0
- package/dist/harnesses/codex/readiness.js.map +1 -0
- package/dist/harnesses/copilot/readiness.d.ts +3 -0
- package/dist/harnesses/copilot/readiness.d.ts.map +1 -0
- package/dist/harnesses/copilot/readiness.js +39 -0
- package/dist/harnesses/copilot/readiness.js.map +1 -0
- package/dist/harnesses/devin/DevinAdapter.d.ts +39 -0
- package/dist/harnesses/devin/DevinAdapter.d.ts.map +1 -0
- package/dist/harnesses/devin/DevinAdapter.js +177 -0
- package/dist/harnesses/devin/DevinAdapter.js.map +1 -0
- package/dist/harnesses/devin/DevinAgentMapper.d.ts +11 -0
- package/dist/harnesses/devin/DevinAgentMapper.d.ts.map +1 -0
- package/dist/harnesses/devin/DevinAgentMapper.js +35 -0
- package/dist/harnesses/devin/DevinAgentMapper.js.map +1 -0
- package/dist/harnesses/devin/DevinSessionLocator.d.ts +46 -0
- package/dist/harnesses/devin/DevinSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/devin/DevinSessionLocator.js +176 -0
- package/dist/harnesses/devin/DevinSessionLocator.js.map +1 -0
- package/dist/harnesses/devin/DevinSessionParser.d.ts +29 -0
- package/dist/harnesses/devin/DevinSessionParser.d.ts.map +1 -0
- package/dist/harnesses/devin/DevinSessionParser.js +166 -0
- package/dist/harnesses/devin/DevinSessionParser.js.map +1 -0
- package/dist/harnesses/devin/readiness.d.ts +3 -0
- package/dist/harnesses/devin/readiness.d.ts.map +1 -0
- package/dist/harnesses/devin/readiness.js +39 -0
- package/dist/harnesses/devin/readiness.js.map +1 -0
- package/dist/harnesses/index.d.ts.map +1 -1
- package/dist/harnesses/index.js +3 -1
- package/dist/harnesses/index.js.map +1 -1
- package/dist/harnesses/opencode/readiness.d.ts +3 -0
- package/dist/harnesses/opencode/readiness.d.ts.map +1 -0
- package/dist/harnesses/opencode/readiness.js +50 -0
- package/dist/harnesses/opencode/readiness.js.map +1 -0
- package/dist/harnesses/pi/credentials.d.ts +22 -0
- package/dist/harnesses/pi/credentials.d.ts.map +1 -0
- package/dist/harnesses/pi/credentials.js +98 -0
- package/dist/harnesses/pi/credentials.js.map +1 -0
- package/dist/harnesses/pi/readiness.d.ts +3 -0
- package/dist/harnesses/pi/readiness.d.ts.map +1 -0
- package/dist/harnesses/pi/readiness.js +96 -0
- package/dist/harnesses/pi/readiness.js.map +1 -0
- package/dist/harnesses/readiness/AgentReadiness.d.ts +6 -0
- package/dist/harnesses/readiness/AgentReadiness.d.ts.map +1 -0
- package/dist/harnesses/readiness/AgentReadiness.js +70 -0
- package/dist/harnesses/readiness/AgentReadiness.js.map +1 -0
- package/dist/harnesses/readiness/checks.d.ts +31 -0
- package/dist/harnesses/readiness/checks.d.ts.map +1 -0
- package/dist/harnesses/readiness/checks.js +270 -0
- package/dist/harnesses/readiness/checks.js.map +1 -0
- package/dist/{readiness/AgentReadiness.d.ts → harnesses/readiness/types.d.ts} +19 -10
- package/dist/harnesses/readiness/types.d.ts.map +1 -0
- package/dist/harnesses/readiness/types.js +4 -0
- package/dist/harnesses/readiness/types.js.map +1 -0
- package/dist/harnesses/runtimeProfiles.d.ts +11 -0
- package/dist/harnesses/runtimeProfiles.d.ts.map +1 -0
- package/dist/harnesses/runtimeProfiles.js +100 -0
- package/dist/harnesses/runtimeProfiles.js.map +1 -0
- package/dist/index.d.ts +16 -42
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -23
- package/dist/index.js.map +1 -1
- package/dist/runtime/ManagedAgentRuntime.d.ts +3 -3
- package/dist/runtime/ManagedAgentRuntime.d.ts.map +1 -1
- package/dist/runtime/ManagedAgentRuntime.js +6 -20
- package/dist/runtime/ManagedAgentRuntime.js.map +1 -1
- package/dist/runtime/herdr/HerdrAgentDiscovery.d.ts.map +1 -1
- package/dist/runtime/herdr/HerdrAgentDiscovery.js +2 -43
- package/dist/runtime/herdr/HerdrAgentDiscovery.js.map +1 -1
- package/dist/runtime/tmux/PidPolling.d.ts +1 -1
- package/dist/runtime/tmux/PidPolling.d.ts.map +1 -1
- package/dist/runtime/tmux/PidPolling.js.map +1 -1
- package/dist/runtime/tmux/TmuxAgentRuntime.d.ts +1 -1
- package/dist/runtime/tmux/TmuxAgentRuntime.d.ts.map +1 -1
- package/dist/runtime/tmux/TmuxAgentRuntime.js +1 -1
- package/dist/runtime/tmux/TmuxAgentRuntime.js.map +1 -1
- package/dist/runtime/tmux/TmuxManager.d.ts +12 -0
- package/dist/runtime/tmux/TmuxManager.d.ts.map +1 -0
- package/dist/{terminal → runtime/tmux}/TmuxManager.js +9 -28
- package/dist/runtime/tmux/TmuxManager.js.map +1 -0
- package/dist/runtime/types.d.ts +1 -1
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/terminal/TerminalFocusManager.d.ts +4 -32
- package/dist/terminal/TerminalFocusManager.d.ts.map +1 -1
- package/dist/terminal/TerminalFocusManager.js +17 -267
- package/dist/terminal/TerminalFocusManager.js.map +1 -1
- package/dist/terminal/TtyWriter.d.ts +1 -44
- package/dist/terminal/TtyWriter.d.ts.map +1 -1
- package/dist/terminal/TtyWriter.js +12 -347
- package/dist/terminal/TtyWriter.js.map +1 -1
- package/dist/terminal/backends/ghostty.d.ts +3 -0
- package/dist/terminal/backends/ghostty.d.ts.map +1 -0
- package/dist/terminal/backends/ghostty.js +161 -0
- package/dist/terminal/backends/ghostty.js.map +1 -0
- package/dist/terminal/backends/index.d.ts +5 -0
- package/dist/terminal/backends/index.d.ts.map +1 -0
- package/dist/terminal/backends/index.js +21 -0
- package/dist/terminal/backends/index.js.map +1 -0
- package/dist/terminal/backends/iterm2.d.ts +3 -0
- package/dist/terminal/backends/iterm2.d.ts.map +1 -0
- package/dist/terminal/backends/iterm2.js +135 -0
- package/dist/terminal/backends/iterm2.js.map +1 -0
- package/dist/terminal/backends/shared.d.ts +9 -0
- package/dist/terminal/backends/shared.d.ts.map +1 -0
- package/dist/terminal/backends/shared.js +38 -0
- package/dist/terminal/backends/shared.js.map +1 -0
- package/dist/terminal/backends/terminal-app.d.ts +3 -0
- package/dist/terminal/backends/terminal-app.d.ts.map +1 -0
- package/dist/terminal/backends/terminal-app.js +129 -0
- package/dist/terminal/backends/terminal-app.js.map +1 -0
- package/dist/terminal/backends/tmux.d.ts +3 -0
- package/dist/terminal/backends/tmux.d.ts.map +1 -0
- package/dist/terminal/backends/tmux.js +76 -0
- package/dist/terminal/backends/tmux.js.map +1 -0
- package/dist/terminal/backends/wezterm.d.ts +3 -0
- package/dist/terminal/backends/wezterm.d.ts.map +1 -0
- package/dist/terminal/backends/wezterm.js +71 -0
- package/dist/terminal/backends/wezterm.js.map +1 -0
- package/dist/terminal/types.d.ts +22 -0
- package/dist/terminal/types.d.ts.map +1 -0
- package/dist/terminal/types.js +11 -0
- package/dist/terminal/types.js.map +1 -0
- package/dist/utils/process.d.ts +2 -0
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +3 -0
- package/dist/utils/process.js.map +1 -1
- package/package.json +1 -1
- package/src/AgentManager.ts +1 -1
- package/src/__tests__/capacity/anthropic.test.ts +105 -0
- package/src/__tests__/capacity/boundaries.test.ts +36 -0
- package/src/__tests__/capacity/claude.test.ts +3 -8
- package/src/__tests__/capacity/codex.test.ts +12 -35
- package/src/__tests__/capacity/fixtures/openai-codex-auth.json +1 -1
- package/src/__tests__/capacity/openai.test.ts +15 -15
- package/src/__tests__/capacity/wham.test.ts +1 -1
- package/src/__tests__/capacity/zai.test.ts +27 -62
- package/src/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.ts +2 -2
- package/src/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.ts +1 -1
- package/src/__tests__/harnesses/codex/durable/CodexCliProbe.test.ts +14 -19
- package/src/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.ts +3 -3
- package/src/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.ts +24 -30
- package/src/__tests__/harnesses/codex/durable/CodexPrintRunner.test.ts +4 -8
- package/src/__tests__/harnesses/devin/DevinAdapter.test.ts +292 -0
- package/src/__tests__/harnesses/devin/DevinAgentMapper.test.ts +88 -0
- package/src/__tests__/harnesses/devin/DevinSessionLocator.test.ts +139 -0
- package/src/__tests__/harnesses/devin/DevinSessionParser.test.ts +218 -0
- package/src/__tests__/harnesses/devin/fixtures.ts +144 -0
- package/src/__tests__/harnesses/pi/durable/PiCliProbe.test.ts +7 -11
- package/src/__tests__/harnesses/pi/durable/PiPrintAgentService.test.ts +19 -22
- package/src/__tests__/harnesses/pi/durable/PiPrintRunner.test.ts +7 -8
- package/src/__tests__/{readiness → harnesses/readiness}/AgentReadiness.test.ts +77 -9
- package/src/__tests__/harnesses/runtimeProfiles.test.ts +110 -0
- package/src/__tests__/print/DurableAgent.test.ts +4 -13
- package/src/__tests__/print/DurableAgentRepository.test.ts +1 -13
- package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +1 -1
- package/src/__tests__/terminal/GhosttyBackend.test.ts +271 -0
- package/src/__tests__/terminal/TmuxManager.test.ts +1 -1
- package/src/adapters/AgentAdapter.ts +1 -0
- package/src/capacity/index.ts +29 -23
- package/src/capacity/{claude.ts → providers/anthropic.ts} +16 -131
- package/src/capacity/providers/openai-platform.ts +150 -0
- package/src/capacity/{wham.ts → providers/openai-subscription.ts} +86 -8
- package/src/capacity/{zai.ts → providers/zai.ts} +29 -111
- package/src/capacity/sources/claude.ts +30 -0
- package/src/capacity/{codex.ts → sources/codex.ts} +54 -124
- package/src/capacity/sources/pi.ts +131 -0
- package/src/capacity/types.ts +3 -0
- package/src/harnesses/claude/credentials.ts +122 -0
- package/src/harnesses/claude/readiness.ts +69 -0
- package/src/harnesses/codex/credentials.ts +81 -0
- package/src/harnesses/codex/readiness.ts +72 -0
- package/src/harnesses/copilot/readiness.ts +33 -0
- package/src/harnesses/devin/DevinAdapter.ts +224 -0
- package/src/harnesses/devin/DevinAgentMapper.ts +43 -0
- package/src/harnesses/devin/DevinSessionLocator.ts +230 -0
- package/src/harnesses/devin/DevinSessionParser.ts +236 -0
- package/src/harnesses/devin/readiness.ts +36 -0
- package/src/harnesses/index.ts +2 -0
- package/src/harnesses/opencode/readiness.ts +48 -0
- package/src/harnesses/pi/credentials.ts +129 -0
- package/src/harnesses/pi/readiness.ts +104 -0
- package/src/harnesses/readiness/AgentReadiness.ts +89 -0
- package/src/harnesses/readiness/checks.ts +336 -0
- package/src/harnesses/readiness/types.ts +90 -0
- package/src/{utils/agents.ts → harnesses/runtimeProfiles.ts} +35 -38
- package/src/index.ts +15 -128
- package/src/runtime/ManagedAgentRuntime.ts +7 -22
- package/src/runtime/herdr/HerdrAgentDiscovery.ts +3 -19
- package/src/runtime/tmux/PidPolling.ts +1 -1
- package/src/runtime/tmux/TmuxAgentRuntime.ts +1 -1
- package/src/{terminal → runtime/tmux}/TmuxManager.ts +9 -30
- package/src/runtime/types.ts +1 -1
- package/src/terminal/TerminalFocusManager.ts +19 -292
- package/src/terminal/TtyWriter.ts +15 -335
- package/src/terminal/backends/ghostty.ts +180 -0
- package/src/terminal/backends/index.ts +23 -0
- package/src/terminal/backends/iterm2.ts +126 -0
- package/src/terminal/backends/shared.ts +47 -0
- package/src/terminal/backends/terminal-app.ts +122 -0
- package/src/terminal/backends/tmux.ts +62 -0
- package/src/terminal/backends/wezterm.ts +65 -0
- package/src/terminal/types.ts +23 -0
- package/src/utils/process.ts +5 -0
- package/dist/__tests__/readiness/AgentReadiness.test.js.map +0 -1
- package/dist/__tests__/utils/agents.test.js +0 -93
- package/dist/__tests__/utils/agents.test.js.map +0 -1
- package/dist/capacity/claude.d.ts +0 -17
- package/dist/capacity/claude.d.ts.map +0 -1
- package/dist/capacity/claude.js.map +0 -1
- package/dist/capacity/codex.d.ts.map +0 -1
- package/dist/capacity/codex.js.map +0 -1
- package/dist/capacity/openai.d.ts +0 -47
- package/dist/capacity/openai.d.ts.map +0 -1
- package/dist/capacity/openai.js +0 -307
- package/dist/capacity/openai.js.map +0 -1
- package/dist/capacity/wham.d.ts +0 -16
- package/dist/capacity/wham.d.ts.map +0 -1
- package/dist/capacity/wham.js +0 -66
- package/dist/capacity/wham.js.map +0 -1
- package/dist/capacity/zai.d.ts +0 -14
- package/dist/capacity/zai.d.ts.map +0 -1
- package/dist/capacity/zai.js.map +0 -1
- package/dist/readiness/AgentReadiness.d.ts.map +0 -1
- package/dist/readiness/AgentReadiness.js +0 -614
- package/dist/readiness/AgentReadiness.js.map +0 -1
- package/dist/terminal/TmuxManager.d.ts +0 -28
- package/dist/terminal/TmuxManager.d.ts.map +0 -1
- package/dist/terminal/TmuxManager.js.map +0 -1
- package/dist/terminal/index.d.ts +0 -5
- package/dist/terminal/index.d.ts.map +0 -1
- package/dist/terminal/index.js +0 -5
- package/dist/terminal/index.js.map +0 -1
- package/dist/utils/agents.d.ts +0 -16
- package/dist/utils/agents.d.ts.map +0 -1
- package/dist/utils/agents.js +0 -117
- package/dist/utils/agents.js.map +0 -1
- package/dist/utils/index.d.ts +0 -8
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -6
- package/dist/utils/index.js.map +0 -1
- package/src/__tests__/utils/agents.test.ts +0 -105
- package/src/capacity/openai.ts +0 -355
- package/src/readiness/AgentReadiness.ts +0 -730
- package/src/terminal/index.ts +0 -4
- package/src/utils/index.ts +0 -14
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
3
|
import { describe, expect, it, vi } from "vitest";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
resolveZaiApiKey,
|
|
8
|
-
} from "../../capacity/zai.js";
|
|
4
|
+
import { parseZaiCapacity } from "../../capacity/providers/zai.js";
|
|
5
|
+
import { probeZaiCapacity } from "../../capacity/sources/pi.js";
|
|
6
|
+
import { resolvePiZaiApiKey as resolveZaiApiKey } from "../../harnesses/pi/credentials.js";
|
|
9
7
|
|
|
10
8
|
const checkedAt = "2026-08-20T10:00:00.000Z";
|
|
11
9
|
const fixture = (name: string) =>
|
|
12
|
-
readFile(
|
|
13
|
-
fileURLToPath(new URL(`./fixtures/${name}`, import.meta.url)),
|
|
14
|
-
"utf8",
|
|
15
|
-
);
|
|
10
|
+
readFile(fileURLToPath(new URL(`./fixtures/${name}`, import.meta.url)), "utf8");
|
|
16
11
|
|
|
17
12
|
describe("z.ai credential resolution", () => {
|
|
18
13
|
it("prefers Z_AI_API_KEY without reading Pi auth", async () => {
|
|
@@ -31,44 +26,28 @@ describe("z.ai credential resolution", () => {
|
|
|
31
26
|
await expect(
|
|
32
27
|
resolveZaiApiKey({ env: { HOME: "/users/test" }, readFile: readAuth }),
|
|
33
28
|
).resolves.toBe("pi-zai-test-key");
|
|
34
|
-
expect(readAuth).toHaveBeenCalledWith(
|
|
35
|
-
"/users/test/.pi/agent/auth.json",
|
|
36
|
-
"utf8",
|
|
37
|
-
);
|
|
29
|
+
expect(readAuth).toHaveBeenCalledWith("/users/test/.pi/agent/auth.json", "utf8");
|
|
38
30
|
});
|
|
39
31
|
|
|
40
32
|
it.each([
|
|
41
33
|
[
|
|
42
34
|
"missing",
|
|
43
|
-
async () =>
|
|
44
|
-
Promise.reject(Object.assign(new Error("missing"), { code: "ENOENT" })),
|
|
35
|
+
async () => Promise.reject(Object.assign(new Error("missing"), { code: "ENOENT" })),
|
|
45
36
|
],
|
|
46
37
|
["invalid JSON", async () => "{"],
|
|
47
|
-
[
|
|
48
|
-
"wrong credential type",
|
|
49
|
-
async () => JSON.stringify({ zai: { type: "oauth", key: "x" } }),
|
|
50
|
-
],
|
|
38
|
+
["wrong credential type", async () => JSON.stringify({ zai: { type: "oauth", key: "x" } })],
|
|
51
39
|
["missing key", async () => JSON.stringify({ zai: { type: "api_key" } })],
|
|
52
|
-
])(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
).rejects.toThrow(/z\.ai API key|z\.ai Pi auth file/);
|
|
58
|
-
},
|
|
59
|
-
);
|
|
40
|
+
])("fails clearly for %s credentials without exposing file content", async (_name, readAuth) => {
|
|
41
|
+
await expect(
|
|
42
|
+
resolveZaiApiKey({ env: { HOME: "/users/test" }, readFile: readAuth }),
|
|
43
|
+
).rejects.toThrow(/z\.ai API key|z\.ai Pi auth file/);
|
|
44
|
+
});
|
|
60
45
|
});
|
|
61
46
|
|
|
62
47
|
describe("z.ai quota mapping", () => {
|
|
63
48
|
it("maps token, credit, and monthly MCP windows with recomputed usage", async () => {
|
|
64
|
-
const report =
|
|
65
|
-
JSON.parse(await fixture("zai-quota.json")),
|
|
66
|
-
checkedAt,
|
|
67
|
-
);
|
|
49
|
+
const report = parseZaiCapacity(JSON.parse(await fixture("zai-quota.json")));
|
|
68
50
|
expect(report).toMatchObject({
|
|
69
|
-
harness: "pi",
|
|
70
|
-
provider: "zai",
|
|
71
|
-
generatedAt: checkedAt,
|
|
72
51
|
authenticated: true,
|
|
73
52
|
available: "yes",
|
|
74
53
|
creditsRemaining: null,
|
|
@@ -111,40 +90,26 @@ describe("z.ai quota mapping", () => {
|
|
|
111
90
|
});
|
|
112
91
|
|
|
113
92
|
it("uses and clamps the server percentage when quota amounts are unavailable", () => {
|
|
114
|
-
const report =
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
],
|
|
123
|
-
},
|
|
93
|
+
const report = parseZaiCapacity({
|
|
94
|
+
success: true,
|
|
95
|
+
code: 200,
|
|
96
|
+
data: {
|
|
97
|
+
limits: [
|
|
98
|
+
{ type: "TOKENS_LIMIT", unit: 1, number: 1, percentage: 120 },
|
|
99
|
+
{ type: "CREDIT_LIMIT", unit: 5, number: 30, percentage: -5 },
|
|
100
|
+
],
|
|
124
101
|
},
|
|
125
|
-
|
|
126
|
-
);
|
|
127
|
-
expect(report.windows.map((window) => window.usedPercent)).toEqual([
|
|
128
|
-
100, 0,
|
|
129
|
-
]);
|
|
102
|
+
});
|
|
103
|
+
expect(report.windows.map((window) => window.usedPercent)).toEqual([100, 0]);
|
|
130
104
|
});
|
|
131
105
|
|
|
132
106
|
it.each([
|
|
133
|
-
[
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
],
|
|
137
|
-
[
|
|
138
|
-
"unsuccessful envelope",
|
|
139
|
-
async () => ({ success: false, code: 401, data: { limits: [] } }),
|
|
140
|
-
],
|
|
141
|
-
[
|
|
142
|
-
"invalid entry",
|
|
143
|
-
async () => ({ success: true, code: 200, data: { limits: [{}] } }),
|
|
144
|
-
],
|
|
107
|
+
["invalid fixture", async () => JSON.parse(await fixture("zai-quota-invalid.json"))],
|
|
108
|
+
["unsuccessful envelope", async () => ({ success: false, code: 401, data: { limits: [] } })],
|
|
109
|
+
["invalid entry", async () => ({ success: true, code: 200, data: { limits: [{}] } })],
|
|
145
110
|
])("rejects %s", async (_name, input) => {
|
|
146
111
|
const value = await input();
|
|
147
|
-
expect(() =>
|
|
112
|
+
expect(() => parseZaiCapacity(value)).toThrow(/z\.ai quota/);
|
|
148
113
|
});
|
|
149
114
|
});
|
|
150
115
|
|
|
@@ -3,10 +3,10 @@ import os from "node:os";
|
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
5
5
|
import {
|
|
6
|
-
ClaudePrintAgentService,
|
|
7
6
|
DurableAgentRepository,
|
|
8
7
|
type ProcessInspector,
|
|
9
|
-
} from "../../../../
|
|
8
|
+
} from "../../../../durable/DurableAgentRepository.js";
|
|
9
|
+
import { ClaudePrintAgentService } from "../../../../harnesses/claude/durable/ClaudePrintAgentService.js";
|
|
10
10
|
|
|
11
11
|
const roots: string[] = [];
|
|
12
12
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
2
|
import { PassThrough, Writable } from "node:stream";
|
|
3
3
|
import { describe, expect, it, vi } from "vitest";
|
|
4
|
-
import type { DurableAgent } from "../../../../
|
|
4
|
+
import type { DurableAgent } from "../../../../durable/DurableAgent.js";
|
|
5
5
|
import { ClaudePrintRunner } from "../../../../harnesses/claude/durable/ClaudePrintRunner.js";
|
|
6
6
|
|
|
7
7
|
function agent(): DurableAgent {
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { CodexCliProbe } from "../../../../harnesses/codex/durable/CodexCliProbe.js";
|
|
2
3
|
|
|
3
4
|
describe("CodexCliProbe", () => {
|
|
4
5
|
it("validates version, exec JSON/stdin, and resume capabilities without a model call", async () => {
|
|
5
|
-
const api = (await import("../../../../index.js")) as Record<string, unknown>;
|
|
6
|
-
expect(api).toHaveProperty("CodexCliProbe");
|
|
7
6
|
const exec = vi
|
|
8
7
|
.fn()
|
|
9
8
|
.mockResolvedValueOnce({ stdout: "codex-cli 0.147.0", stderr: "" })
|
|
@@ -15,12 +14,12 @@ describe("CodexCliProbe", () => {
|
|
|
15
14
|
stdout: "Usage: codex exec resume [SESSION_ID] [PROMPT]\n--json\n- stdin",
|
|
16
15
|
stderr: "",
|
|
17
16
|
});
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
17
|
+
await expect(new CodexCliProbe({ executable: "fake-codex", exec }).validate()).resolves.toEqual(
|
|
18
|
+
{
|
|
19
|
+
executable: "fake-codex",
|
|
20
|
+
version: "codex-cli 0.147.0",
|
|
21
|
+
},
|
|
22
|
+
);
|
|
24
23
|
expect(exec.mock.calls).toEqual([
|
|
25
24
|
["fake-codex", ["--version"]],
|
|
26
25
|
["fake-codex", ["exec", "--help"]],
|
|
@@ -29,9 +28,7 @@ describe("CodexCliProbe", () => {
|
|
|
29
28
|
});
|
|
30
29
|
|
|
31
30
|
it("rejects unsupported and unavailable CLIs with bounded sanitized errors", async () => {
|
|
32
|
-
const
|
|
33
|
-
const Probe = api.CodexCliProbe as new (options: unknown) => any;
|
|
34
|
-
const unsupported = new Probe({
|
|
31
|
+
const unsupported = new CodexCliProbe({
|
|
35
32
|
exec: vi
|
|
36
33
|
.fn()
|
|
37
34
|
.mockResolvedValueOnce({ stdout: "version", stderr: "" })
|
|
@@ -39,7 +36,7 @@ describe("CodexCliProbe", () => {
|
|
|
39
36
|
.mockResolvedValueOnce({ stdout: "resume", stderr: "" }),
|
|
40
37
|
});
|
|
41
38
|
await expect(unsupported.validate()).rejects.toMatchObject({ code: "CODEX_CLI_UNSUPPORTED" });
|
|
42
|
-
const missingCommands = new
|
|
39
|
+
const missingCommands = new CodexCliProbe({
|
|
43
40
|
exec: vi
|
|
44
41
|
.fn()
|
|
45
42
|
.mockResolvedValueOnce({ stdout: "version", stderr: "" })
|
|
@@ -50,7 +47,7 @@ describe("CodexCliProbe", () => {
|
|
|
50
47
|
code: "CODEX_CLI_UNSUPPORTED",
|
|
51
48
|
});
|
|
52
49
|
|
|
53
|
-
const unavailable = new
|
|
50
|
+
const unavailable = new CodexCliProbe({
|
|
54
51
|
exec: vi.fn().mockRejectedValue(new Error(`bad\0${"x".repeat(1000)}`)),
|
|
55
52
|
});
|
|
56
53
|
const error = await unavailable.validate().catch((value: Error & { code: string }) => value);
|
|
@@ -60,25 +57,23 @@ describe("CodexCliProbe", () => {
|
|
|
60
57
|
});
|
|
61
58
|
|
|
62
59
|
it("reports an empty version response as unknown", async () => {
|
|
63
|
-
const api = (await import("../../../../index.js")) as Record<string, unknown>;
|
|
64
|
-
const Probe = api.CodexCliProbe as new (options: unknown) => any;
|
|
65
60
|
const exec = vi
|
|
66
61
|
.fn()
|
|
67
62
|
.mockResolvedValueOnce({ stdout: " \n", stderr: "" })
|
|
68
63
|
.mockResolvedValueOnce({ stdout: "exec --json -", stderr: "" })
|
|
69
64
|
.mockResolvedValueOnce({ stdout: "resume --json -", stderr: "" });
|
|
70
|
-
await expect(new
|
|
65
|
+
await expect(new CodexCliProbe({ exec }).validate()).resolves.toMatchObject({
|
|
66
|
+
version: "unknown",
|
|
67
|
+
});
|
|
71
68
|
});
|
|
72
69
|
|
|
73
70
|
it("requires a standalone stdin dash rather than accepting flag hyphens", async () => {
|
|
74
|
-
const api = (await import("../../../../index.js")) as Record<string, unknown>;
|
|
75
|
-
const Probe = api.CodexCliProbe as new (options: unknown) => any;
|
|
76
71
|
const exec = vi
|
|
77
72
|
.fn()
|
|
78
73
|
.mockResolvedValueOnce({ stdout: "version", stderr: "" })
|
|
79
74
|
.mockResolvedValueOnce({ stdout: "exec --json", stderr: "" })
|
|
80
75
|
.mockResolvedValueOnce({ stdout: "resume --json", stderr: "" });
|
|
81
|
-
await expect(new
|
|
76
|
+
await expect(new CodexCliProbe({ exec }).validate()).rejects.toMatchObject({
|
|
82
77
|
code: "CODEX_CLI_UNSUPPORTED",
|
|
83
78
|
});
|
|
84
79
|
});
|
|
@@ -2,12 +2,12 @@ import fs from "node:fs";
|
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
5
|
+
import { CodexPrintError } from "../../../../durable/DurableAgent.js";
|
|
5
6
|
import {
|
|
6
|
-
CodexPrintError,
|
|
7
|
-
CodexPrintAgentService,
|
|
8
7
|
DurableAgentRepository,
|
|
9
8
|
type ProcessInspector,
|
|
10
|
-
} from "../../../../
|
|
9
|
+
} from "../../../../durable/DurableAgentRepository.js";
|
|
10
|
+
import { CodexPrintAgentService } from "../../../../harnesses/codex/durable/CodexPrintAgentService.js";
|
|
11
11
|
|
|
12
12
|
const SESSION = "22222222-2222-4222-8222-222222222222";
|
|
13
13
|
const roots: string[] = [];
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { CodexPrintError } from "../../../../durable/DurableAgent.js";
|
|
3
|
+
import { CodexPrintAgentService } from "../../../../harnesses/codex/durable/CodexPrintAgentService.js";
|
|
2
4
|
|
|
3
5
|
const SESSION = "22222222-2222-4222-8222-222222222222";
|
|
4
6
|
const base = {
|
|
@@ -11,15 +13,15 @@ const base = {
|
|
|
11
13
|
|
|
12
14
|
describe("CodexPrintAgentService", () => {
|
|
13
15
|
it("validates before provider-aware create and never runs Codex", async () => {
|
|
14
|
-
const api = (await import("../../../../index.js")) as Record<string, unknown>;
|
|
15
|
-
expect(api).toHaveProperty("CodexPrintAgentService");
|
|
16
16
|
const probe = {
|
|
17
17
|
validate: vi.fn().mockResolvedValue({ executable: "codex", version: "0.147.0" }),
|
|
18
18
|
};
|
|
19
19
|
const repository = { create: vi.fn().mockResolvedValue(base) };
|
|
20
20
|
const runner = { run: vi.fn() };
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
await new CodexPrintAgentService({ repository, probe, runner }).create({
|
|
22
|
+
name: "reviewer",
|
|
23
|
+
cwd: "/project",
|
|
24
|
+
});
|
|
23
25
|
expect(repository.create).toHaveBeenCalledWith({
|
|
24
26
|
name: "reviewer",
|
|
25
27
|
cwd: "/project",
|
|
@@ -29,7 +31,6 @@ describe("CodexPrintAgentService", () => {
|
|
|
29
31
|
});
|
|
30
32
|
|
|
31
33
|
it("binds during first send and explicitly resumes later sends", async () => {
|
|
32
|
-
const api = (await import("../../../../index.js")) as Record<string, unknown>;
|
|
33
34
|
const repository = {
|
|
34
35
|
resolve: vi.fn().mockResolvedValue(base),
|
|
35
36
|
acquireRun: vi
|
|
@@ -50,8 +51,7 @@ describe("CodexPrintAgentService", () => {
|
|
|
50
51
|
return { sessionId: SESSION, result: "answer", messages: ["answer"], exitCode: 0 };
|
|
51
52
|
}),
|
|
52
53
|
};
|
|
53
|
-
const
|
|
54
|
-
const service = new Service({
|
|
54
|
+
const service = new CodexPrintAgentService({
|
|
55
55
|
repository,
|
|
56
56
|
probe: { validate: vi.fn() },
|
|
57
57
|
runner,
|
|
@@ -74,8 +74,6 @@ describe("CodexPrintAgentService", () => {
|
|
|
74
74
|
});
|
|
75
75
|
|
|
76
76
|
it("records mismatch separately from unknown failures", async () => {
|
|
77
|
-
const api = (await import("../../../../index.js")) as Record<string, unknown>;
|
|
78
|
-
const ErrorType = api.CodexPrintError as new (message: string, code: string) => Error;
|
|
79
77
|
const completeRun = vi.fn();
|
|
80
78
|
const repository = {
|
|
81
79
|
resolve: vi.fn().mockResolvedValue(base),
|
|
@@ -84,12 +82,11 @@ describe("CodexPrintAgentService", () => {
|
|
|
84
82
|
bindProviderSession: vi.fn(),
|
|
85
83
|
completeRun,
|
|
86
84
|
};
|
|
87
|
-
const
|
|
88
|
-
const service = new Service({
|
|
85
|
+
const service = new CodexPrintAgentService({
|
|
89
86
|
repository,
|
|
90
87
|
probe: { validate: vi.fn() },
|
|
91
88
|
runner: {
|
|
92
|
-
run: vi.fn().mockRejectedValue(new
|
|
89
|
+
run: vi.fn().mockRejectedValue(new CodexPrintError("mismatch", "CODEX_SESSION_MISMATCH")),
|
|
93
90
|
},
|
|
94
91
|
});
|
|
95
92
|
await expect(service.send("reviewer", "x")).rejects.toMatchObject({
|
|
@@ -103,8 +100,6 @@ describe("CodexPrintAgentService", () => {
|
|
|
103
100
|
});
|
|
104
101
|
|
|
105
102
|
it("rejects a non-Codex target without acquiring or mutating it", async () => {
|
|
106
|
-
const api = (await import("../../../../index.js")) as Record<string, unknown>;
|
|
107
|
-
const Service = api.CodexPrintAgentService as new (options: unknown) => any;
|
|
108
103
|
const repository = {
|
|
109
104
|
resolve: vi.fn().mockResolvedValue({ ...base, provider: "claude" }),
|
|
110
105
|
acquireRun: vi.fn(),
|
|
@@ -114,18 +109,17 @@ describe("CodexPrintAgentService", () => {
|
|
|
114
109
|
};
|
|
115
110
|
|
|
116
111
|
await expect(
|
|
117
|
-
new
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
112
|
+
new CodexPrintAgentService({
|
|
113
|
+
repository,
|
|
114
|
+
probe: { validate: vi.fn() },
|
|
115
|
+
runner: { run: vi.fn() },
|
|
116
|
+
}).send("reviewer", "x"),
|
|
121
117
|
).rejects.toMatchObject({ code: "CODEX_UNSUPPORTED" });
|
|
122
118
|
expect(repository.acquireRun).not.toHaveBeenCalled();
|
|
123
119
|
expect(repository.completeRun).not.toHaveBeenCalled();
|
|
124
120
|
});
|
|
125
121
|
|
|
126
122
|
it("does not turn a successful completion write failure into a second completion", async () => {
|
|
127
|
-
const api = (await import("../../../../index.js")) as Record<string, unknown>;
|
|
128
|
-
const Service = api.CodexPrintAgentService as new (options: unknown) => any;
|
|
129
123
|
const completionFailure = new Error("completion failed");
|
|
130
124
|
const repository = {
|
|
131
125
|
resolve: vi.fn().mockResolvedValue(base),
|
|
@@ -144,14 +138,15 @@ describe("CodexPrintAgentService", () => {
|
|
|
144
138
|
};
|
|
145
139
|
|
|
146
140
|
await expect(
|
|
147
|
-
new
|
|
141
|
+
new CodexPrintAgentService({ repository, probe: { validate: vi.fn() }, runner }).send(
|
|
142
|
+
"reviewer",
|
|
143
|
+
"x",
|
|
144
|
+
),
|
|
148
145
|
).rejects.toBe(completionFailure);
|
|
149
146
|
expect(repository.completeRun).toHaveBeenCalledOnce();
|
|
150
147
|
});
|
|
151
148
|
|
|
152
149
|
it("records a repository binding conflict as a session mismatch", async () => {
|
|
153
|
-
const api = (await import("../../../../index.js")) as Record<string, unknown>;
|
|
154
|
-
const BindingError = api.CodexPrintError as new (message: string, code: string) => Error;
|
|
155
150
|
const completeRun = vi.fn();
|
|
156
151
|
const repository = {
|
|
157
152
|
resolve: vi.fn().mockResolvedValue(base),
|
|
@@ -159,7 +154,7 @@ describe("CodexPrintAgentService", () => {
|
|
|
159
154
|
recordProviderProcess: vi.fn(),
|
|
160
155
|
bindProviderSession: vi
|
|
161
156
|
.fn()
|
|
162
|
-
.mockRejectedValue(new
|
|
157
|
+
.mockRejectedValue(new CodexPrintError("binding mismatch", "CODEX_SESSION_MISMATCH")),
|
|
163
158
|
completeRun,
|
|
164
159
|
};
|
|
165
160
|
const runner = {
|
|
@@ -168,10 +163,11 @@ describe("CodexPrintAgentService", () => {
|
|
|
168
163
|
return { sessionId: SESSION, result: "x", messages: ["x"], exitCode: 0 };
|
|
169
164
|
}),
|
|
170
165
|
};
|
|
171
|
-
const Service = api.CodexPrintAgentService as new (options: unknown) => any;
|
|
172
|
-
|
|
173
166
|
await expect(
|
|
174
|
-
new
|
|
167
|
+
new CodexPrintAgentService({ repository, probe: { validate: vi.fn() }, runner }).send(
|
|
168
|
+
"reviewer",
|
|
169
|
+
"x",
|
|
170
|
+
),
|
|
175
171
|
).rejects.toMatchObject({ code: "CODEX_SESSION_MISMATCH" });
|
|
176
172
|
expect(completeRun).toHaveBeenCalledWith(
|
|
177
173
|
"id",
|
|
@@ -181,8 +177,6 @@ describe("CodexPrintAgentService", () => {
|
|
|
181
177
|
});
|
|
182
178
|
|
|
183
179
|
it("rejects missing and ambiguous records before acquiring a run", async () => {
|
|
184
|
-
const api = (await import("../../../../index.js")) as Record<string, unknown>;
|
|
185
|
-
const Service = api.CodexPrintAgentService as new (options: unknown) => any;
|
|
186
180
|
const repository = {
|
|
187
181
|
create: vi.fn(),
|
|
188
182
|
resolve: vi.fn().mockResolvedValueOnce(null).mockResolvedValueOnce([base, base]),
|
|
@@ -191,7 +185,7 @@ describe("CodexPrintAgentService", () => {
|
|
|
191
185
|
bindProviderSession: vi.fn(),
|
|
192
186
|
completeRun: vi.fn(),
|
|
193
187
|
};
|
|
194
|
-
const service = new
|
|
188
|
+
const service = new CodexPrintAgentService({
|
|
195
189
|
repository,
|
|
196
190
|
probe: { validate: vi.fn() },
|
|
197
191
|
runner: { run: vi.fn() },
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
2
|
import { PassThrough, Writable } from "node:stream";
|
|
3
3
|
import { describe, expect, it, vi } from "vitest";
|
|
4
|
-
import type { CodexDurableAgent } from "../../../../
|
|
4
|
+
import type { CodexDurableAgent } from "../../../../durable/DurableAgent.js";
|
|
5
|
+
import { CodexPrintRunner } from "../../../../harnesses/codex/durable/CodexPrintRunner.js";
|
|
5
6
|
|
|
6
7
|
const SESSION = "22222222-2222-4222-8222-222222222222";
|
|
7
8
|
|
|
@@ -64,10 +65,7 @@ function events(session = SESSION): string[] {
|
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
async function runner(fixture: ReturnType<typeof fakeSpawn>, maxLineBytes?: number) {
|
|
67
|
-
|
|
68
|
-
expect(api).toHaveProperty("CodexPrintRunner");
|
|
69
|
-
const Runner = api.CodexPrintRunner as new (options: unknown) => any;
|
|
70
|
-
return new Runner({
|
|
68
|
+
return new CodexPrintRunner({
|
|
71
69
|
spawn: fixture.spawn,
|
|
72
70
|
maxLineBytes,
|
|
73
71
|
processInspector: {
|
|
@@ -262,10 +260,8 @@ describe("CodexPrintRunner", () => {
|
|
|
262
260
|
});
|
|
263
261
|
|
|
264
262
|
it("rejects an unverifiable positive PID", async () => {
|
|
265
|
-
const api = (await import("../../../../index.js")) as Record<string, unknown>;
|
|
266
263
|
const fixture = fakeSpawn([]);
|
|
267
|
-
const
|
|
268
|
-
const instance = new Runner({
|
|
264
|
+
const instance = new CodexPrintRunner({
|
|
269
265
|
spawn: fixture.spawn,
|
|
270
266
|
processInspector: { getIdentity: () => null },
|
|
271
267
|
});
|