@ai-devkit/agent-manager 0.36.0 → 0.37.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 +9 -4
- package/dist/AgentManager.d.ts.map +1 -1
- package/dist/AgentManager.js +21 -2
- package/dist/AgentManager.js.map +1 -1
- package/dist/__tests__/AgentManager.test.js +151 -3
- package/dist/__tests__/AgentManager.test.js.map +1 -1
- package/dist/__tests__/adapters/IncrementalSessionRefresh.test.js +486 -0
- package/dist/__tests__/adapters/IncrementalSessionRefresh.test.js.map +1 -0
- package/dist/__tests__/adapters/adapterProcessImports.test.js +52 -0
- package/dist/__tests__/adapters/adapterProcessImports.test.js.map +1 -0
- package/dist/__tests__/adapters/adapterSnapshotCandidates.test.js +247 -0
- package/dist/__tests__/adapters/adapterSnapshotCandidates.test.js.map +1 -0
- package/dist/__tests__/capacity/openai.test.js +12 -14
- package/dist/__tests__/capacity/openai.test.js.map +1 -1
- package/dist/__tests__/harnesses/BoundedSummarySkip.test.js +568 -0
- package/dist/__tests__/harnesses/BoundedSummarySkip.test.js.map +1 -0
- package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js +1089 -0
- package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js.map +1 -0
- package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js +143 -0
- package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js.map +1 -0
- package/dist/__tests__/{adapters → harnesses/antigravity}/AntigravityCliAdapter.test.js +103 -22
- package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.js.map +1 -0
- package/dist/__tests__/harnesses/builtinAdapters.test.js +33 -0
- package/dist/__tests__/harnesses/builtinAdapters.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/claude/ClaudeAgentMapper.test.js +4 -4
- package/dist/__tests__/harnesses/claude/ClaudeAgentMapper.test.js.map +1 -0
- package/dist/__tests__/{adapters → harnesses/claude}/ClaudeCodeAdapter.test.js +47 -19
- package/dist/__tests__/harnesses/claude/ClaudeCodeAdapter.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.js +1 -12
- package/dist/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.js.map +1 -1
- package/dist/__tests__/{utils → harnesses/claude}/ClaudeSessionParser.test.js +2 -2
- package/dist/__tests__/harnesses/claude/ClaudeSessionParser.test.js.map +1 -0
- package/dist/__tests__/{print → harnesses/claude/durable}/ClaudeCliProbe.test.js +1 -1
- package/dist/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.js.map +1 -0
- package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgent.integration.test.js +1 -1
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js.map +1 -0
- package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgentService.test.js +4 -4
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.js.map +1 -0
- package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintRunner.test.js +1 -1
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js.map +1 -0
- package/dist/__tests__/{adapters → harnesses/codex}/CodexAdapter.test.js +304 -10
- package/dist/__tests__/harnesses/codex/CodexAdapter.test.js.map +1 -0
- package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js +463 -0
- package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.js.map +1 -1
- package/dist/__tests__/{durable → harnesses/codex/durable}/CodexCliProbe.test.js +4 -4
- package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js.map +1 -0
- package/dist/__tests__/{durable → harnesses/codex/durable}/CodexDurableAgentRepository.test.js +1 -1
- package/dist/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.js.map +1 -0
- package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgent.integration.test.js +1 -1
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js.map +1 -0
- package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgentService.test.js +8 -18
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js.map +1 -0
- package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintRunner.test.js +2 -7
- package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.js.map +1 -1
- package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js +290 -0
- package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/gemini/GeminiCliAdapter.test.js +34 -25
- package/dist/__tests__/harnesses/gemini/GeminiCliAdapter.test.js.map +1 -0
- package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js +491 -0
- package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js.map +1 -0
- package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js +399 -0
- package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.js.map +1 -1
- package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js +167 -0
- package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.js.map +1 -1
- package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js +301 -0
- package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js.map +1 -0
- package/dist/__tests__/{adapters → harnesses/kiro}/KiroAdapter.test.js +137 -82
- package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.js +2 -2
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/PiAdapter.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/PiAdapter.test.js.map +1 -1
- package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js +382 -0
- package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/pi/PiSessionParser.test.js +171 -1
- package/dist/__tests__/harnesses/pi/PiSessionParser.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.js.map +1 -1
- package/dist/__tests__/readiness/AgentReadiness.test.js +20 -0
- package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -1
- package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +49 -0
- package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -1
- package/dist/__tests__/utils/IncrementalJsonlSummary.test.js +650 -0
- package/dist/__tests__/utils/IncrementalJsonlSummary.test.js.map +1 -0
- package/dist/__tests__/utils/agents.test.js +66 -2
- package/dist/__tests__/utils/agents.test.js.map +1 -1
- package/dist/__tests__/utils/conversationTail.bench.test.js +258 -0
- package/dist/__tests__/utils/conversationTail.bench.test.js.map +1 -0
- package/dist/__tests__/utils/conversationTailParity.test.js +588 -0
- package/dist/__tests__/utils/conversationTailParity.test.js.map +1 -0
- package/dist/__tests__/utils/jsonlTail.test.js +360 -0
- package/dist/__tests__/utils/jsonlTail.test.js.map +1 -0
- package/dist/__tests__/utils/matchingConstants.test.js +35 -0
- package/dist/__tests__/utils/matchingConstants.test.js.map +1 -0
- package/dist/__tests__/utils/process.test.js +436 -2
- package/dist/__tests__/utils/process.test.js.map +1 -1
- package/dist/adapters/AgentAdapter.d.ts +25 -6
- package/dist/adapters/AgentAdapter.d.ts.map +1 -1
- package/dist/adapters/AgentAdapter.js +12 -3
- package/dist/adapters/AgentAdapter.js.map +1 -1
- package/dist/capacity/openai.d.ts +0 -1
- package/dist/capacity/openai.d.ts.map +1 -1
- package/dist/capacity/openai.js +0 -5
- package/dist/capacity/openai.js.map +1 -1
- package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts +13 -0
- package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts.map +1 -0
- package/dist/harnesses/antigravity/AntigravityAgentMapper.js +30 -0
- package/dist/harnesses/antigravity/AntigravityAgentMapper.js.map +1 -0
- package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts +32 -0
- package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts.map +1 -0
- package/dist/harnesses/antigravity/AntigravityCliAdapter.js +97 -0
- package/dist/harnesses/antigravity/AntigravityCliAdapter.js.map +1 -0
- package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts +30 -0
- package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts.map +1 -0
- package/dist/harnesses/antigravity/AntigravitySessionLocator.js +56 -0
- package/dist/harnesses/antigravity/AntigravitySessionLocator.js.map +1 -0
- package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts +75 -0
- package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts.map +1 -0
- package/dist/harnesses/antigravity/AntigravitySessionParser.js +174 -0
- package/dist/harnesses/antigravity/AntigravitySessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.js +4 -10
- package/dist/harnesses/claude/ClaudeAgentMapper.js.map +1 -0
- package/dist/{providers → harnesses}/claude/ClaudeCodeAdapter.d.ts +5 -6
- package/dist/harnesses/claude/ClaudeCodeAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/claude/ClaudeCodeAdapter.js +17 -15
- package/dist/harnesses/claude/ClaudeCodeAdapter.js.map +1 -0
- package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts.map +1 -1
- package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.js +3 -3
- package/dist/harnesses/claude/ClaudeSessionLocator.js.map +1 -0
- package/dist/{providers → harnesses}/claude/ClaudeSessionParser.d.ts +40 -6
- package/dist/harnesses/claude/ClaudeSessionParser.d.ts.map +1 -0
- package/dist/{providers → harnesses}/claude/ClaudeSessionParser.js +141 -85
- package/dist/harnesses/claude/ClaudeSessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js.map +1 -1
- package/dist/{providers → harnesses}/codex/CodexAdapter.d.ts +5 -4
- package/dist/harnesses/codex/CodexAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/codex/CodexAdapter.js +139 -19
- package/dist/harnesses/codex/CodexAdapter.js.map +1 -0
- package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/codex/CodexAgentMapper.js +4 -11
- package/dist/harnesses/codex/CodexAgentMapper.js.map +1 -0
- package/dist/harnesses/codex/CodexSessionLocator.d.ts +74 -0
- package/dist/harnesses/codex/CodexSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/codex/CodexSessionLocator.js +359 -0
- package/dist/harnesses/codex/CodexSessionLocator.js.map +1 -0
- package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts.map +1 -1
- package/dist/{providers → harnesses}/codex/CodexSessionMapping.js +3 -3
- package/dist/harnesses/codex/CodexSessionMapping.js.map +1 -0
- package/dist/harnesses/codex/CodexSessionParser.d.ts +89 -0
- package/dist/harnesses/codex/CodexSessionParser.d.ts.map +1 -0
- package/dist/{providers → harnesses}/codex/CodexSessionParser.js +124 -78
- package/dist/harnesses/codex/CodexSessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js.map +1 -1
- package/dist/{providers → harnesses}/copilot/CopilotAdapter.d.ts +7 -6
- package/dist/harnesses/copilot/CopilotAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/copilot/CopilotAdapter.js +19 -14
- package/dist/harnesses/copilot/CopilotAdapter.js.map +1 -0
- package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.js +4 -11
- package/dist/harnesses/copilot/CopilotAgentMapper.js.map +1 -0
- package/dist/harnesses/copilot/CopilotSessionLocator.d.ts +42 -0
- package/dist/harnesses/copilot/CopilotSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/copilot/CopilotSessionLocator.js +126 -0
- package/dist/harnesses/copilot/CopilotSessionLocator.js.map +1 -0
- package/dist/harnesses/copilot/CopilotSessionParser.d.ts +62 -0
- package/dist/harnesses/copilot/CopilotSessionParser.d.ts.map +1 -0
- package/dist/harnesses/copilot/CopilotSessionParser.js +236 -0
- package/dist/harnesses/copilot/CopilotSessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.js +4 -11
- package/dist/harnesses/gemini/GeminiAgentMapper.js.map +1 -0
- package/dist/{providers → harnesses}/gemini/GeminiCliAdapter.d.ts +4 -5
- package/dist/harnesses/gemini/GeminiCliAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/gemini/GeminiCliAdapter.js +6 -7
- package/dist/harnesses/gemini/GeminiCliAdapter.js.map +1 -0
- package/dist/harnesses/gemini/GeminiSessionLocator.d.ts +72 -0
- package/dist/harnesses/gemini/GeminiSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/gemini/GeminiSessionLocator.js +300 -0
- package/dist/harnesses/gemini/GeminiSessionLocator.js.map +1 -0
- package/dist/{providers → harnesses}/gemini/GeminiSessionParser.d.ts +34 -7
- package/dist/harnesses/gemini/GeminiSessionParser.d.ts.map +1 -0
- package/dist/harnesses/gemini/GeminiSessionParser.js +272 -0
- package/dist/harnesses/gemini/GeminiSessionParser.js.map +1 -0
- package/dist/harnesses/gemini/fileSignature.d.ts +8 -0
- package/dist/harnesses/gemini/fileSignature.d.ts.map +1 -0
- package/dist/harnesses/gemini/fileSignature.js +9 -0
- package/dist/harnesses/gemini/fileSignature.js.map +1 -0
- package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/grok/GrokAgentMapper.js +4 -10
- package/dist/harnesses/grok/GrokAgentMapper.js.map +1 -0
- package/dist/{providers → harnesses}/grok/GrokCliAdapter.d.ts +5 -5
- package/dist/harnesses/grok/GrokCliAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/grok/GrokCliAdapter.js +14 -10
- package/dist/harnesses/grok/GrokCliAdapter.js.map +1 -0
- package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts.map +1 -1
- package/dist/{providers → harnesses}/grok/GrokSessionLocator.js +2 -2
- package/dist/harnesses/grok/GrokSessionLocator.js.map +1 -0
- package/dist/harnesses/grok/GrokSessionParser.d.ts +87 -0
- package/dist/harnesses/grok/GrokSessionParser.d.ts.map +1 -0
- package/dist/harnesses/grok/GrokSessionParser.js +185 -0
- package/dist/harnesses/grok/GrokSessionParser.js.map +1 -0
- package/dist/harnesses/index.d.ts +7 -0
- package/dist/harnesses/index.d.ts.map +1 -0
- package/dist/harnesses/index.js +27 -0
- package/dist/harnesses/index.js.map +1 -0
- package/dist/harnesses/kiro/KiroAdapter.d.ts +31 -0
- package/dist/harnesses/kiro/KiroAdapter.d.ts.map +1 -0
- package/dist/harnesses/kiro/KiroAdapter.js +125 -0
- package/dist/harnesses/kiro/KiroAdapter.js.map +1 -0
- package/dist/harnesses/kiro/KiroAgentMapper.d.ts +13 -0
- package/dist/harnesses/kiro/KiroAgentMapper.d.ts.map +1 -0
- package/dist/harnesses/kiro/KiroAgentMapper.js +29 -0
- package/dist/harnesses/kiro/KiroAgentMapper.js.map +1 -0
- package/dist/harnesses/kiro/KiroSessionLocator.d.ts +38 -0
- package/dist/harnesses/kiro/KiroSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/kiro/KiroSessionLocator.js +95 -0
- package/dist/harnesses/kiro/KiroSessionLocator.js.map +1 -0
- package/dist/harnesses/kiro/KiroSessionParser.d.ts +81 -0
- package/dist/harnesses/kiro/KiroSessionParser.d.ts.map +1 -0
- package/dist/harnesses/kiro/KiroSessionParser.js +251 -0
- package/dist/harnesses/kiro/KiroSessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/opencode/OpenCodeAdapter.d.ts +2 -4
- package/dist/harnesses/opencode/OpenCodeAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/opencode/OpenCodeAdapter.js +4 -7
- package/dist/harnesses/opencode/OpenCodeAdapter.js.map +1 -0
- package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.js +5 -13
- package/dist/harnesses/opencode/OpenCodeAgentMapper.js.map +1 -0
- package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts.map +1 -1
- package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.js +2 -2
- package/dist/harnesses/opencode/OpenCodeSessionLocator.js.map +1 -0
- package/dist/{providers → harnesses}/opencode/OpenCodeSessionParser.d.ts +2 -4
- package/dist/harnesses/opencode/OpenCodeSessionParser.d.ts.map +1 -0
- package/dist/{providers → harnesses}/opencode/OpenCodeSessionParser.js +2 -1
- package/dist/harnesses/opencode/OpenCodeSessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/pi/PiAdapter.d.ts +5 -4
- package/dist/harnesses/pi/PiAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/pi/PiAdapter.js +16 -12
- package/dist/harnesses/pi/PiAdapter.js.map +1 -0
- package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/PiAgentMapper.js +4 -11
- package/dist/harnesses/pi/PiAgentMapper.js.map +1 -0
- package/dist/harnesses/pi/PiSessionLocator.d.ts +61 -0
- package/dist/harnesses/pi/PiSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/pi/PiSessionLocator.js +212 -0
- package/dist/harnesses/pi/PiSessionLocator.js.map +1 -0
- package/dist/harnesses/pi/PiSessionParser.d.ts +88 -0
- package/dist/harnesses/pi/PiSessionParser.d.ts.map +1 -0
- package/dist/harnesses/pi/PiSessionParser.js +318 -0
- package/dist/harnesses/pi/PiSessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/PiSessionTracker.js +2 -2
- package/dist/harnesses/pi/PiSessionTracker.js.map +1 -0
- package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js.map +1 -1
- package/dist/harnesses/shared.d.ts +41 -0
- package/dist/harnesses/shared.d.ts.map +1 -0
- package/dist/harnesses/shared.js +71 -0
- package/dist/harnesses/shared.js.map +1 -0
- package/dist/index.d.ts +26 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -17
- package/dist/index.js.map +1 -1
- package/dist/utils/IncrementalJsonlSummary.d.ts +100 -0
- package/dist/utils/IncrementalJsonlSummary.d.ts.map +1 -0
- package/dist/utils/IncrementalJsonlSummary.js +209 -0
- package/dist/utils/IncrementalJsonlSummary.js.map +1 -0
- package/dist/utils/agents.d.ts +3 -2
- package/dist/utils/agents.d.ts.map +1 -1
- package/dist/utils/agents.js +50 -15
- package/dist/utils/agents.js.map +1 -1
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/jsonlTail.d.ts +73 -0
- package/dist/utils/jsonlTail.d.ts.map +1 -0
- package/dist/utils/jsonlTail.js +238 -0
- package/dist/utils/jsonlTail.js.map +1 -0
- package/dist/utils/matching.d.ts +2 -0
- package/dist/utils/matching.d.ts.map +1 -1
- package/dist/utils/matching.js +3 -2
- package/dist/utils/matching.js.map +1 -1
- package/dist/utils/matchingConstants.d.ts +15 -0
- package/dist/utils/matchingConstants.d.ts.map +1 -0
- package/dist/utils/matchingConstants.js +14 -0
- package/dist/utils/matchingConstants.js.map +1 -0
- package/dist/utils/process.d.ts +38 -2
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +131 -43
- package/dist/utils/process.js.map +1 -1
- package/package.json +2 -1
- package/scripts/benchmark-cold-start.mjs +350 -0
- package/src/AgentManager.ts +26 -5
- package/src/__tests__/AgentManager.test.ts +141 -3
- package/src/__tests__/adapters/IncrementalSessionRefresh.test.ts +437 -0
- package/src/__tests__/adapters/adapterProcessImports.test.ts +58 -0
- package/src/__tests__/adapters/adapterSnapshotCandidates.test.ts +243 -0
- package/src/__tests__/capacity/openai.test.ts +5 -15
- package/src/__tests__/harnesses/BoundedSummarySkip.test.ts +496 -0
- package/src/__tests__/harnesses/SessionSummaryEquivalence.test.ts +726 -0
- package/src/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.ts +133 -0
- package/src/__tests__/{adapters → harnesses/antigravity}/AntigravityCliAdapter.test.ts +97 -25
- package/src/__tests__/harnesses/builtinAdapters.test.ts +33 -0
- package/src/__tests__/{providers → harnesses}/claude/ClaudeAgentMapper.test.ts +5 -5
- package/src/__tests__/{adapters → harnesses/claude}/ClaudeCodeAdapter.test.ts +54 -24
- package/src/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.ts +1 -12
- package/src/__tests__/{utils → harnesses/claude}/ClaudeSessionParser.test.ts +2 -2
- package/src/__tests__/{print → harnesses/claude/durable}/ClaudeCliProbe.test.ts +1 -1
- package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgent.integration.test.ts +1 -1
- package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgentService.test.ts +4 -4
- package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintRunner.test.ts +2 -2
- package/src/__tests__/{adapters → harnesses/codex}/CodexAdapter.test.ts +277 -12
- package/src/__tests__/harnesses/codex/CodexSessionLocator.test.ts +419 -0
- package/src/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.ts +1 -1
- package/src/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.ts +1 -1
- package/src/__tests__/{durable → harnesses/codex/durable}/CodexCliProbe.test.ts +4 -4
- package/src/__tests__/{durable → harnesses/codex/durable}/CodexDurableAgentRepository.test.ts +1 -1
- package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgent.integration.test.ts +1 -1
- package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgentService.test.ts +8 -18
- package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintRunner.test.ts +3 -9
- package/src/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.ts +1 -1
- package/src/__tests__/harnesses/copilot/CopilotRefreshIO.test.ts +270 -0
- package/src/__tests__/{providers → harnesses}/gemini/GeminiCliAdapter.test.ts +27 -23
- package/src/__tests__/harnesses/gemini/GeminiSessionJsonl.test.ts +402 -0
- package/src/__tests__/harnesses/gemini/GeminiSessionLocator.test.ts +396 -0
- package/src/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.ts +2 -2
- package/src/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.ts +1 -1
- package/src/__tests__/harnesses/grok/GrokIncrementalRefresh.test.ts +170 -0
- package/src/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.ts +1 -1
- package/src/__tests__/harnesses/grok/GrokSessionParser.test.ts +230 -0
- package/src/__tests__/{adapters → harnesses/kiro}/KiroAdapter.test.ts +127 -109
- package/src/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.ts +1 -1
- package/src/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.ts +1 -1
- package/src/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.ts +2 -2
- package/src/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.ts +1 -1
- package/src/__tests__/{providers → harnesses}/pi/PiAdapter.test.ts +1 -1
- package/src/__tests__/harnesses/pi/PiDiscoveryIO.test.ts +337 -0
- package/src/__tests__/{providers → harnesses}/pi/PiSessionParser.test.ts +91 -1
- package/src/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.ts +1 -1
- package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.ts +1 -1
- package/src/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.ts +1 -1
- package/src/__tests__/readiness/AgentReadiness.test.ts +16 -0
- package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +30 -0
- package/src/__tests__/utils/IncrementalJsonlSummary.test.ts +414 -0
- package/src/__tests__/utils/agents.test.ts +76 -2
- package/src/__tests__/utils/conversationTail.bench.test.ts +193 -0
- package/src/__tests__/utils/conversationTailParity.test.ts +365 -0
- package/src/__tests__/utils/jsonlTail.test.ts +317 -0
- package/src/__tests__/utils/matchingConstants.test.ts +40 -0
- package/src/__tests__/utils/process.test.ts +254 -0
- package/src/adapters/AgentAdapter.ts +37 -14
- package/src/capacity/openai.ts +0 -6
- package/src/harnesses/antigravity/AntigravityAgentMapper.ts +34 -0
- package/src/harnesses/antigravity/AntigravityCliAdapter.ts +126 -0
- package/src/harnesses/antigravity/AntigravitySessionLocator.ts +75 -0
- package/src/harnesses/antigravity/AntigravitySessionParser.ts +252 -0
- package/src/{providers → harnesses}/claude/ClaudeAgentMapper.ts +2 -10
- package/src/{providers → harnesses}/claude/ClaudeCodeAdapter.ts +22 -20
- package/src/{providers → harnesses}/claude/ClaudeSessionLocator.ts +3 -3
- package/src/{providers → harnesses}/claude/ClaudeSessionParser.ts +189 -97
- package/src/{providers → harnesses}/codex/CodexAdapter.ts +153 -29
- package/src/{providers → harnesses}/codex/CodexAgentMapper.ts +2 -11
- package/src/harnesses/codex/CodexSessionLocator.ts +509 -0
- package/src/{providers → harnesses}/codex/CodexSessionMapping.ts +3 -3
- package/src/{providers → harnesses}/codex/CodexSessionParser.ts +169 -92
- package/src/{providers → harnesses}/copilot/CopilotAdapter.ts +22 -22
- package/src/{providers → harnesses}/copilot/CopilotAgentMapper.ts +2 -11
- package/src/harnesses/copilot/CopilotSessionLocator.ts +161 -0
- package/src/harnesses/copilot/CopilotSessionParser.ts +380 -0
- package/src/{providers → harnesses}/gemini/GeminiAgentMapper.ts +2 -11
- package/src/{providers → harnesses}/gemini/GeminiCliAdapter.ts +7 -9
- package/src/harnesses/gemini/GeminiSessionLocator.ts +394 -0
- package/src/{providers → harnesses}/gemini/GeminiSessionParser.ts +155 -31
- package/src/harnesses/gemini/fileSignature.ts +10 -0
- package/src/{providers → harnesses}/grok/GrokAgentMapper.ts +2 -11
- package/src/{providers → harnesses}/grok/GrokCliAdapter.ts +16 -15
- package/src/{providers → harnesses}/grok/GrokSessionLocator.ts +2 -2
- package/src/harnesses/grok/GrokSessionParser.ts +251 -0
- package/src/harnesses/index.ts +28 -0
- package/src/harnesses/kiro/KiroAdapter.ts +143 -0
- package/src/harnesses/kiro/KiroAgentMapper.ts +34 -0
- package/src/harnesses/kiro/KiroSessionLocator.ts +143 -0
- package/src/harnesses/kiro/KiroSessionParser.ts +376 -0
- package/src/{providers → harnesses}/opencode/OpenCodeAdapter.ts +5 -11
- package/src/{providers → harnesses}/opencode/OpenCodeAgentMapper.ts +3 -13
- package/src/{providers → harnesses}/opencode/OpenCodeSessionLocator.ts +2 -2
- package/src/{providers → harnesses}/opencode/OpenCodeSessionParser.ts +4 -3
- package/src/{providers → harnesses}/pi/PiAdapter.ts +20 -18
- package/src/{providers → harnesses}/pi/PiAgentMapper.ts +2 -11
- package/src/harnesses/pi/PiSessionLocator.ts +288 -0
- package/src/harnesses/pi/PiSessionParser.ts +488 -0
- package/src/{providers → harnesses}/pi/PiSessionTracker.ts +2 -2
- package/src/harnesses/shared.ts +119 -0
- package/src/index.ts +26 -24
- package/src/utils/IncrementalJsonlSummary.ts +306 -0
- package/src/utils/agents.ts +60 -28
- package/src/utils/index.ts +2 -0
- package/src/utils/jsonlTail.ts +349 -0
- package/src/utils/matching.ts +3 -3
- package/src/utils/matchingConstants.ts +15 -0
- package/src/utils/process.ts +189 -45
- package/dist/__tests__/adapters/AntigravityCliAdapter.test.js.map +0 -1
- package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +0 -1
- package/dist/__tests__/adapters/CodexAdapter.test.js.map +0 -1
- package/dist/__tests__/adapters/KiroAdapter.test.js.map +0 -1
- package/dist/__tests__/durable/CodexCliProbe.test.js.map +0 -1
- package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +0 -1
- package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +0 -1
- package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +0 -1
- package/dist/__tests__/durable/CodexPrintRunner.test.js.map +0 -1
- package/dist/__tests__/print/ClaudeCliProbe.test.js.map +0 -1
- package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +0 -1
- package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +0 -1
- package/dist/__tests__/print/ClaudePrintRunner.test.js.map +0 -1
- package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +0 -1
- package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +0 -194
- package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +0 -1
- package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js.map +0 -1
- package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +0 -1
- package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +0 -1
- package/dist/adapters/AntigravityCliAdapter.d.ts +0 -57
- package/dist/adapters/AntigravityCliAdapter.d.ts.map +0 -1
- package/dist/adapters/AntigravityCliAdapter.js +0 -273
- package/dist/adapters/AntigravityCliAdapter.js.map +0 -1
- package/dist/adapters/KiroAdapter.d.ts +0 -46
- package/dist/adapters/KiroAdapter.d.ts.map +0 -1
- package/dist/adapters/KiroAdapter.js +0 -344
- package/dist/adapters/KiroAdapter.js.map +0 -1
- package/dist/adapters/index.d.ts +0 -12
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -12
- package/dist/adapters/index.js.map +0 -1
- package/dist/providers/claude/ClaudeAgentMapper.js.map +0 -1
- package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +0 -1
- package/dist/providers/claude/ClaudeCodeAdapter.js.map +0 -1
- package/dist/providers/claude/ClaudeSessionLocator.js.map +0 -1
- package/dist/providers/claude/ClaudeSessionParser.d.ts.map +0 -1
- package/dist/providers/claude/ClaudeSessionParser.js.map +0 -1
- package/dist/providers/codex/CodexAdapter.d.ts.map +0 -1
- package/dist/providers/codex/CodexAdapter.js.map +0 -1
- package/dist/providers/codex/CodexAgentMapper.js.map +0 -1
- package/dist/providers/codex/CodexSessionLocator.d.ts +0 -44
- package/dist/providers/codex/CodexSessionLocator.d.ts.map +0 -1
- package/dist/providers/codex/CodexSessionLocator.js +0 -207
- package/dist/providers/codex/CodexSessionLocator.js.map +0 -1
- package/dist/providers/codex/CodexSessionMapping.js.map +0 -1
- package/dist/providers/codex/CodexSessionParser.d.ts +0 -58
- package/dist/providers/codex/CodexSessionParser.d.ts.map +0 -1
- package/dist/providers/codex/CodexSessionParser.js.map +0 -1
- package/dist/providers/copilot/CopilotAdapter.d.ts.map +0 -1
- package/dist/providers/copilot/CopilotAdapter.js.map +0 -1
- package/dist/providers/copilot/CopilotAgentMapper.js.map +0 -1
- package/dist/providers/copilot/CopilotSessionLocator.d.ts +0 -20
- package/dist/providers/copilot/CopilotSessionLocator.d.ts.map +0 -1
- package/dist/providers/copilot/CopilotSessionLocator.js +0 -49
- package/dist/providers/copilot/CopilotSessionLocator.js.map +0 -1
- package/dist/providers/copilot/CopilotSessionParser.d.ts +0 -30
- package/dist/providers/copilot/CopilotSessionParser.d.ts.map +0 -1
- package/dist/providers/copilot/CopilotSessionParser.js +0 -181
- package/dist/providers/copilot/CopilotSessionParser.js.map +0 -1
- package/dist/providers/gemini/GeminiAgentMapper.js.map +0 -1
- package/dist/providers/gemini/GeminiCliAdapter.d.ts.map +0 -1
- package/dist/providers/gemini/GeminiCliAdapter.js.map +0 -1
- package/dist/providers/gemini/GeminiSessionLocator.d.ts +0 -30
- package/dist/providers/gemini/GeminiSessionLocator.d.ts.map +0 -1
- package/dist/providers/gemini/GeminiSessionLocator.js +0 -142
- package/dist/providers/gemini/GeminiSessionLocator.js.map +0 -1
- package/dist/providers/gemini/GeminiSessionParser.d.ts.map +0 -1
- package/dist/providers/gemini/GeminiSessionParser.js +0 -166
- package/dist/providers/gemini/GeminiSessionParser.js.map +0 -1
- package/dist/providers/grok/GrokAgentMapper.js.map +0 -1
- package/dist/providers/grok/GrokCliAdapter.d.ts.map +0 -1
- package/dist/providers/grok/GrokCliAdapter.js.map +0 -1
- package/dist/providers/grok/GrokSessionLocator.js.map +0 -1
- package/dist/providers/grok/GrokSessionParser.d.ts +0 -54
- package/dist/providers/grok/GrokSessionParser.d.ts.map +0 -1
- package/dist/providers/grok/GrokSessionParser.js +0 -122
- package/dist/providers/grok/GrokSessionParser.js.map +0 -1
- package/dist/providers/opencode/OpenCodeAdapter.d.ts.map +0 -1
- package/dist/providers/opencode/OpenCodeAdapter.js.map +0 -1
- package/dist/providers/opencode/OpenCodeAgentMapper.js.map +0 -1
- package/dist/providers/opencode/OpenCodeSessionLocator.js.map +0 -1
- package/dist/providers/opencode/OpenCodeSessionParser.d.ts.map +0 -1
- package/dist/providers/opencode/OpenCodeSessionParser.js.map +0 -1
- package/dist/providers/pi/PiAdapter.d.ts.map +0 -1
- package/dist/providers/pi/PiAdapter.js.map +0 -1
- package/dist/providers/pi/PiAgentMapper.js.map +0 -1
- package/dist/providers/pi/PiSessionLocator.d.ts +0 -24
- package/dist/providers/pi/PiSessionLocator.d.ts.map +0 -1
- package/dist/providers/pi/PiSessionLocator.js +0 -86
- package/dist/providers/pi/PiSessionLocator.js.map +0 -1
- package/dist/providers/pi/PiSessionParser.d.ts +0 -36
- package/dist/providers/pi/PiSessionParser.d.ts.map +0 -1
- package/dist/providers/pi/PiSessionParser.js +0 -191
- package/dist/providers/pi/PiSessionParser.js.map +0 -1
- package/dist/providers/pi/PiSessionTracker.js.map +0 -1
- package/src/__tests__/fixtures/fake-claude.cjs +0 -31
- package/src/__tests__/fixtures/fake-codex.cjs +0 -56
- package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +0 -182
- package/src/adapters/AntigravityCliAdapter.ts +0 -356
- package/src/adapters/KiroAdapter.ts +0 -456
- package/src/adapters/index.ts +0 -17
- package/src/providers/codex/CodexSessionLocator.ts +0 -279
- package/src/providers/copilot/CopilotSessionLocator.ts +0 -63
- package/src/providers/copilot/CopilotSessionParser.ts +0 -289
- package/src/providers/gemini/GeminiSessionLocator.ts +0 -183
- package/src/providers/grok/GrokSessionParser.ts +0 -166
- package/src/providers/pi/PiSessionLocator.ts +0 -110
- package/src/providers/pi/PiSessionParser.ts +0 -284
- /package/dist/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.js +0 -0
- /package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js +0 -0
- /package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.js +0 -0
- /package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.js +0 -0
- /package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js +0 -0
- /package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js +0 -0
- /package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts +0 -0
- /package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js +0 -0
- /package/src/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.ts +0 -0
- /package/src/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.ts +0 -0
- /package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.ts +0 -0
- /package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.ts +0 -0
- /package/src/{providers → harnesses}/claude/durable/ClaudeCliProbe.ts +0 -0
- /package/src/{providers → harnesses}/claude/durable/ClaudePrintAgentService.ts +0 -0
- /package/src/{providers → harnesses}/claude/durable/ClaudePrintRunner.ts +0 -0
- /package/src/{providers → harnesses}/claude/durable/ClaudeStreamParser.ts +0 -0
- /package/src/{providers → harnesses}/codex/durable/CodexCliProbe.ts +0 -0
- /package/src/{providers → harnesses}/codex/durable/CodexPrintAgentService.ts +0 -0
- /package/src/{providers → harnesses}/codex/durable/CodexPrintRunner.ts +0 -0
- /package/src/{providers → harnesses}/codex/durable/CodexStreamParser.ts +0 -0
- /package/src/{providers → harnesses}/pi/durable/PiCliProbe.ts +0 -0
- /package/src/{providers → harnesses}/pi/durable/PiPrintAgentService.ts +0 -0
- /package/src/{providers → harnesses}/pi/durable/PiPrintProtocol.ts +0 -0
- /package/src/{providers → harnesses}/pi/durable/PiPrintRunner.ts +0 -0
- /package/src/{providers → harnesses}/pi/durable/PiStreamParser.ts +0 -0
package/src/utils/process.ts
CHANGED
|
@@ -6,18 +6,56 @@
|
|
|
6
6
|
* remain exported for compatibility with existing consumers.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import * as fs from "fs";
|
|
9
10
|
import * as path from "path";
|
|
10
11
|
import { execFile, execFileSync } from "child_process";
|
|
11
12
|
import type { ProcessInfo } from "../adapters/AgentAdapter.js";
|
|
12
13
|
|
|
13
14
|
const PROCESS_EXEC_MAX_BUFFER = 10 * 1024 * 1024;
|
|
14
15
|
const VALID_EXECUTABLE_NAME = /^[a-zA-Z0-9_-]+$/;
|
|
16
|
+
const ABSOLUTE_PATH = /^(?:\/|[a-zA-Z]:[\\/])/;
|
|
17
|
+
const PATH_SEPARATOR = /[\\/]/;
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
const executable = command.trim().split(/\s+/)[0] || "";
|
|
19
|
+
function pathBasename(executable: string): string {
|
|
18
20
|
return path.basename(executable.replace(/\\/g, "/")).toLowerCase();
|
|
19
21
|
}
|
|
20
22
|
|
|
23
|
+
function isFile(filePath: string): boolean {
|
|
24
|
+
try {
|
|
25
|
+
return fs.statSync(filePath, { throwIfNoEntry: false })?.isFile() ?? false;
|
|
26
|
+
} catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Resolve argv[0] from a `ps` command line.
|
|
33
|
+
*
|
|
34
|
+
* `ps` joins argv with spaces, so an executable installed under a directory
|
|
35
|
+
* containing spaces (`/Applications/Some App.app/Contents/Resources/codex`)
|
|
36
|
+
* spans several whitespace tokens. When the first token of an absolute path
|
|
37
|
+
* is not itself a file, longer space-joined prefixes ending in a token with a
|
|
38
|
+
* path separator are tried, and the first one that exists on disk wins.
|
|
39
|
+
* Otherwise the first token is returned, so arguments are never folded into
|
|
40
|
+
* the executable path unless that combined path really is a file.
|
|
41
|
+
*/
|
|
42
|
+
export function executablePath(command: string): string {
|
|
43
|
+
const parts = command.trim().split(/(\s+)/);
|
|
44
|
+
const first = parts[0] ?? "";
|
|
45
|
+
if (parts.length === 1 || !ABSOLUTE_PATH.test(first) || isFile(first)) return first;
|
|
46
|
+
|
|
47
|
+
let prefix = first;
|
|
48
|
+
for (let i = 2; i < parts.length; i += 2) {
|
|
49
|
+
prefix += parts[i - 1] + parts[i];
|
|
50
|
+
if (PATH_SEPARATOR.test(parts[i]) && isFile(prefix)) return prefix;
|
|
51
|
+
}
|
|
52
|
+
return first;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function executableBasename(command: string): string {
|
|
56
|
+
return pathBasename(executablePath(command));
|
|
57
|
+
}
|
|
58
|
+
|
|
21
59
|
function normalizeExecutableName(name: string): string {
|
|
22
60
|
const lower = name.toLowerCase();
|
|
23
61
|
return lower.endsWith(".exe") ? lower.slice(0, -4) : lower;
|
|
@@ -27,15 +65,36 @@ function normalizedProcessNames(namePatterns: readonly string[]): Set<string> {
|
|
|
27
65
|
return new Set(namePatterns.filter(Boolean).map(normalizeExecutableName));
|
|
28
66
|
}
|
|
29
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Whether argv[0] of `command` is one of `names`.
|
|
70
|
+
*
|
|
71
|
+
* The first token is checked with string operations only, as before. The
|
|
72
|
+
* filesystem is consulted only for absolute commands where a later
|
|
73
|
+
* path-like token ends in one of the names, i.e. a possible executable under
|
|
74
|
+
* a directory containing spaces.
|
|
75
|
+
*/
|
|
76
|
+
function matchesExecutableName(command: string, names: ReadonlySet<string>): boolean {
|
|
77
|
+
const tokens = command.trim().split(/\s+/);
|
|
78
|
+
const first = tokens[0] ?? "";
|
|
79
|
+
if (names.has(normalizeExecutableName(pathBasename(first)))) return true;
|
|
80
|
+
if (!ABSOLUTE_PATH.test(first)) return false;
|
|
81
|
+
|
|
82
|
+
const mayContinuePath = tokens
|
|
83
|
+
.slice(1)
|
|
84
|
+
.some(
|
|
85
|
+
(token) =>
|
|
86
|
+
PATH_SEPARATOR.test(token) && names.has(normalizeExecutableName(pathBasename(token))),
|
|
87
|
+
);
|
|
88
|
+
return mayContinuePath && names.has(normalizeExecutableName(executableBasename(command)));
|
|
89
|
+
}
|
|
90
|
+
|
|
30
91
|
export function filterByProcessNames(
|
|
31
92
|
processes: readonly ProcessInfo[],
|
|
32
93
|
namePatterns: readonly string[],
|
|
33
94
|
): ProcessInfo[] {
|
|
34
95
|
const names = normalizedProcessNames(namePatterns);
|
|
35
96
|
if (names.size === 0) return [];
|
|
36
|
-
return processes.filter((process) =>
|
|
37
|
-
names.has(normalizeExecutableName(executableBasename(process.command))),
|
|
38
|
-
);
|
|
97
|
+
return processes.filter((process) => matchesExecutableName(process.command, names));
|
|
39
98
|
}
|
|
40
99
|
|
|
41
100
|
/**
|
|
@@ -72,7 +131,7 @@ export function listAgentProcesses(namePattern: string): ProcessInfo[] {
|
|
|
72
131
|
const tty = match[3];
|
|
73
132
|
const command = match[4];
|
|
74
133
|
|
|
75
|
-
if (!
|
|
134
|
+
if (!matchesExecutableName(command, names)) continue;
|
|
76
135
|
|
|
77
136
|
const ttyShort = tty.startsWith("/dev/") ? tty.slice(5) : tty;
|
|
78
137
|
|
|
@@ -91,8 +150,25 @@ export function listAgentProcesses(namePattern: string): ProcessInfo[] {
|
|
|
91
150
|
}
|
|
92
151
|
}
|
|
93
152
|
|
|
94
|
-
|
|
95
|
-
|
|
153
|
+
/** Runs an executable and resolves with its stdout. Injectable for tests. */
|
|
154
|
+
export type ProcessExec = (file: string, args: readonly string[]) => Promise<string>;
|
|
155
|
+
|
|
156
|
+
export interface ProcessSnapshotOptions {
|
|
157
|
+
/**
|
|
158
|
+
* Decides which name-matched processes are worth enriching with cwd and
|
|
159
|
+
* start time. Non-candidates are still returned (pid, ppid, tty, command
|
|
160
|
+
* only) so adapters can walk parent chains. Omitted = enrich everything.
|
|
161
|
+
*/
|
|
162
|
+
isCandidate?: (process: ProcessInfo) => boolean;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
export type ProcessSnapshotCapture = (
|
|
166
|
+
namePatterns: readonly string[],
|
|
167
|
+
options?: ProcessSnapshotOptions,
|
|
168
|
+
) => Promise<ProcessInfo[]>;
|
|
169
|
+
|
|
170
|
+
const execFileText: ProcessExec = (file, args) =>
|
|
171
|
+
new Promise((resolve, reject) => {
|
|
96
172
|
execFile(
|
|
97
173
|
file,
|
|
98
174
|
args,
|
|
@@ -106,10 +182,17 @@ function execFileText(file: string, args: readonly string[]): Promise<string> {
|
|
|
106
182
|
},
|
|
107
183
|
);
|
|
108
184
|
});
|
|
185
|
+
|
|
186
|
+
interface ParsedProcessList {
|
|
187
|
+
/** Every PID in the listing, used to evict cache entries for exited processes. */
|
|
188
|
+
allPids: Set<number>;
|
|
189
|
+
/** Processes whose executable matches one of the requested names. */
|
|
190
|
+
matched: ProcessInfo[];
|
|
109
191
|
}
|
|
110
192
|
|
|
111
|
-
function parseProcessList(output: string, namePatterns: ReadonlySet<string>):
|
|
112
|
-
const
|
|
193
|
+
function parseProcessList(output: string, namePatterns: ReadonlySet<string>): ParsedProcessList {
|
|
194
|
+
const allPids = new Set<number>();
|
|
195
|
+
const matched: ProcessInfo[] = [];
|
|
113
196
|
|
|
114
197
|
for (const line of output.trim().split("\n")) {
|
|
115
198
|
if (!line.trim()) continue;
|
|
@@ -120,14 +203,13 @@ function parseProcessList(output: string, namePatterns: ReadonlySet<string>): Pr
|
|
|
120
203
|
const pid = parseInt(match[1], 10);
|
|
121
204
|
const ppid = parseInt(match[2], 10);
|
|
122
205
|
if (Number.isNaN(pid) || Number.isNaN(ppid)) continue;
|
|
206
|
+
allPids.add(pid);
|
|
123
207
|
|
|
124
208
|
const tty = match[3];
|
|
125
209
|
const command = match[4];
|
|
126
|
-
|
|
127
|
-
const normalizedBase = normalizeExecutableName(base);
|
|
128
|
-
if (!namePatterns.has(normalizedBase)) continue;
|
|
210
|
+
if (!matchesExecutableName(command, namePatterns)) continue;
|
|
129
211
|
|
|
130
|
-
|
|
212
|
+
matched.push({
|
|
131
213
|
pid,
|
|
132
214
|
ppid,
|
|
133
215
|
command,
|
|
@@ -136,15 +218,18 @@ function parseProcessList(output: string, namePatterns: ReadonlySet<string>): Pr
|
|
|
136
218
|
});
|
|
137
219
|
}
|
|
138
220
|
|
|
139
|
-
return
|
|
221
|
+
return { allPids, matched };
|
|
140
222
|
}
|
|
141
223
|
|
|
142
|
-
async function batchGetProcessCwdsAsync(
|
|
224
|
+
async function batchGetProcessCwdsAsync(
|
|
225
|
+
exec: ProcessExec,
|
|
226
|
+
pids: number[],
|
|
227
|
+
): Promise<Map<number, string>> {
|
|
143
228
|
const result = new Map<number, string>();
|
|
144
229
|
if (pids.length === 0) return result;
|
|
145
230
|
|
|
146
231
|
try {
|
|
147
|
-
const output = await
|
|
232
|
+
const output = await exec("lsof", ["-a", "-d", "cwd", "-Fn", "-p", pids.join(",")]);
|
|
148
233
|
let currentPid: number | null = null;
|
|
149
234
|
for (const line of output.trim().split("\n")) {
|
|
150
235
|
if (line.startsWith("p")) {
|
|
@@ -159,7 +244,7 @@ async function batchGetProcessCwdsAsync(pids: number[]): Promise<Map<number, str
|
|
|
159
244
|
const entries = await Promise.all(
|
|
160
245
|
pids.map(async (pid) => {
|
|
161
246
|
try {
|
|
162
|
-
const output = await
|
|
247
|
+
const output = await exec("pwdx", [String(pid)]);
|
|
163
248
|
const match = output.match(/^\d+:\s*(.+)$/);
|
|
164
249
|
return match ? ([pid, match[1].trim()] as const) : null;
|
|
165
250
|
} catch {
|
|
@@ -174,12 +259,15 @@ async function batchGetProcessCwdsAsync(pids: number[]): Promise<Map<number, str
|
|
|
174
259
|
}
|
|
175
260
|
}
|
|
176
261
|
|
|
177
|
-
async function batchGetProcessStartTimesAsync(
|
|
262
|
+
async function batchGetProcessStartTimesAsync(
|
|
263
|
+
exec: ProcessExec,
|
|
264
|
+
pids: number[],
|
|
265
|
+
): Promise<Map<number, Date>> {
|
|
178
266
|
const result = new Map<number, Date>();
|
|
179
267
|
if (pids.length === 0) return result;
|
|
180
268
|
|
|
181
269
|
try {
|
|
182
|
-
const output = await
|
|
270
|
+
const output = await exec("ps", ["-o", "pid=,lstart=", "-p", pids.join(",")]);
|
|
183
271
|
for (const rawLine of output.split("\n")) {
|
|
184
272
|
const match = rawLine.trim().match(/^(\d+)\s+(.+)$/);
|
|
185
273
|
if (!match) continue;
|
|
@@ -193,36 +281,92 @@ async function batchGetProcessStartTimesAsync(pids: number[]): Promise<Map<numbe
|
|
|
193
281
|
return result;
|
|
194
282
|
}
|
|
195
283
|
|
|
284
|
+
interface CachedStartTime {
|
|
285
|
+
/** ppid + command seen when the start time was read; a mismatch means PID reuse. */
|
|
286
|
+
identity: string;
|
|
287
|
+
startTime: Date;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
function processIdentity(process: ProcessInfo): string {
|
|
291
|
+
return `${process.ppid ?? ""}\0${process.command}`;
|
|
292
|
+
}
|
|
293
|
+
|
|
196
294
|
/**
|
|
197
|
-
*
|
|
198
|
-
*
|
|
295
|
+
* Create a snapshot capture function with its own start-time cache.
|
|
296
|
+
*
|
|
297
|
+
* Start times never change for a live process, so each PID is queried with
|
|
298
|
+
* `ps lstart` once and reused on later refreshes. A cache entry is dropped
|
|
299
|
+
* when its PID disappears from the base listing, and ignored when the PID's
|
|
300
|
+
* ppid/command no longer match (PID reuse). cwd is re-read every refresh
|
|
301
|
+
* because a process can change directory.
|
|
199
302
|
*/
|
|
200
|
-
export
|
|
201
|
-
|
|
202
|
-
):
|
|
203
|
-
const
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
303
|
+
export function createProcessSnapshotCapture(
|
|
304
|
+
deps: { exec?: ProcessExec } = {},
|
|
305
|
+
): ProcessSnapshotCapture {
|
|
306
|
+
const exec = deps.exec ?? execFileText;
|
|
307
|
+
const startTimeCache = new Map<number, CachedStartTime>();
|
|
308
|
+
|
|
309
|
+
const cachedStartTime = (process: ProcessInfo): Date | undefined => {
|
|
310
|
+
const cached = startTimeCache.get(process.pid);
|
|
311
|
+
return cached?.identity === processIdentity(process) ? cached.startTime : undefined;
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
return async (namePatterns, options = {}) => {
|
|
315
|
+
const names = normalizedProcessNames(
|
|
316
|
+
namePatterns.filter((name) => Boolean(name) && VALID_EXECUTABLE_NAME.test(name)),
|
|
317
|
+
);
|
|
318
|
+
if (names.size === 0) return [];
|
|
207
319
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
320
|
+
try {
|
|
321
|
+
const output = await exec("ps", ["-axo", "pid=,ppid=,tty=,command="]);
|
|
322
|
+
const { allPids, matched } = parseProcessList(output, names);
|
|
323
|
+
|
|
324
|
+
for (const pid of startTimeCache.keys()) {
|
|
325
|
+
if (!allPids.has(pid)) startTimeCache.delete(pid);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
const { isCandidate } = options;
|
|
329
|
+
const candidates = isCandidate ? matched.filter((process) => isCandidate(process)) : matched;
|
|
330
|
+
const candidatePids = candidates.map((process) => process.pid);
|
|
331
|
+
const uncachedPids = candidates
|
|
332
|
+
.filter((process) => cachedStartTime(process) === undefined)
|
|
333
|
+
.map((process) => process.pid);
|
|
334
|
+
|
|
335
|
+
const [cwdMap, startTimeMap] = await Promise.all([
|
|
336
|
+
batchGetProcessCwdsAsync(exec, candidatePids),
|
|
337
|
+
batchGetProcessStartTimesAsync(exec, uncachedPids),
|
|
338
|
+
]);
|
|
339
|
+
|
|
340
|
+
for (const process of candidates) {
|
|
341
|
+
const startTime = startTimeMap.get(process.pid);
|
|
342
|
+
if (startTime) {
|
|
343
|
+
startTimeCache.set(process.pid, { identity: processIdentity(process), startTime });
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
const candidateSet = new Set(candidatePids);
|
|
348
|
+
return matched.map((process) =>
|
|
349
|
+
candidateSet.has(process.pid)
|
|
350
|
+
? {
|
|
351
|
+
...process,
|
|
352
|
+
cwd: cwdMap.get(process.pid) || "",
|
|
353
|
+
startTime: cachedStartTime(process),
|
|
354
|
+
}
|
|
355
|
+
: process,
|
|
356
|
+
);
|
|
357
|
+
} catch {
|
|
358
|
+
return [];
|
|
359
|
+
}
|
|
360
|
+
};
|
|
224
361
|
}
|
|
225
362
|
|
|
363
|
+
/**
|
|
364
|
+
* Capture and enrich relevant processes without blocking the event loop.
|
|
365
|
+
* One base process listing is shared by every requested executable name;
|
|
366
|
+
* only processes accepted by `options.isCandidate` are enriched.
|
|
367
|
+
*/
|
|
368
|
+
export const captureProcessSnapshot: ProcessSnapshotCapture = createProcessSnapshotCapture();
|
|
369
|
+
|
|
226
370
|
/**
|
|
227
371
|
* Batch-get current working directories for multiple PIDs.
|
|
228
372
|
*
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/__tests__/adapters/AntigravityCliAdapter.test.ts"],"sourcesContent":["/**\n * Tests for AntigravityCliAdapter\n *\n * The adapter resolves a live `agy` process to its conversation via\n * ~/.gemini/antigravity-cli/cache/last_conversations.json (cwd -> conversationId)\n * and reads session details from brain/<id>/.system_generated/logs/transcript.jsonl.\n */\n\nimport type { MockedFunction } from \"vitest\";\nimport * as fs from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\n\nimport { AntigravityCliAdapter } from \"../../adapters/AntigravityCliAdapter.js\";\nimport type { ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport { AgentStatus } from \"../../adapters/AgentAdapter.js\";\nimport { listAgentProcesses, enrichProcesses } from \"../../utils/process.js\";\nimport { generateAgentName } from \"../../utils/matching.js\";\n\nvi.mock(\"../../utils/process.js\", async (importOriginal) => {\n const actual = (await importOriginal()) as typeof import(\"../../utils/process.js\");\n return {\n ...actual,\n listAgentProcesses: vi.fn(),\n enrichProcesses: vi.fn(),\n };\n});\n\nvi.mock(\"../../utils/matching.js\", async (importOriginal) => {\n const actual = (await importOriginal()) as typeof import(\"../../utils/matching.js\");\n return {\n ...actual,\n generateAgentName: vi.fn(),\n };\n});\n\nconst mockedListAgentProcesses = listAgentProcesses as MockedFunction<typeof listAgentProcesses>;\nconst mockedEnrichProcesses = enrichProcesses as MockedFunction<typeof enrichProcesses>;\nconst mockedGenerateAgentName = generateAgentName as MockedFunction<typeof generateAgentName>;\n\nconst CONVERSATION_ID = \"10485e13-2742-4e9e-b286-ac0606f0cb1e\";\n\nconst iso = (d: Date) => d.toISOString().replace(/\\.\\d+Z$/, \"Z\");\n/** A user transcript record: real prompt wrapped in <USER_REQUEST> like agy writes it. */\nconst userRecord = (text: string, at?: Date) => ({\n source: \"USER_EXPLICIT\",\n type: \"USER_INPUT\",\n created_at: iso(at ?? new Date()),\n content: `<USER_REQUEST>\\n${text}\\n</USER_REQUEST>\\n<ADDITIONAL_CONTEXT>ignored</ADDITIONAL_CONTEXT>`,\n});\nconst modelRecord = (text: string, at?: Date) => ({\n source: \"MODEL\",\n type: \"PLANNER_RESPONSE\",\n created_at: iso(at ?? new Date()),\n content: text,\n});\n/** A MODEL tool-call record (e.g. RUN_COMMAND) — execution detail, not a reply. */\nconst toolRecord = (text: string, at?: Date) => ({\n source: \"MODEL\",\n type: \"RUN_COMMAND\",\n created_at: iso(at ?? new Date()),\n content: text,\n});\nconst systemRecord = (text: string, at?: Date) => ({\n source: \"SYSTEM\",\n type: \"CHECKPOINT\",\n created_at: iso(at ?? new Date()),\n content: text,\n});\n\ndescribe(\"AntigravityCliAdapter\", () => {\n let adapter: AntigravityCliAdapter;\n let base: string;\n let cwd: string;\n\n beforeEach(() => {\n base = fs.mkdtempSync(path.join(os.tmpdir(), \"agy-adapter-test-\"));\n process.env.ANTIGRAVITY_CLI_HOME = base;\n cwd = \"/Users/dev/my-project\";\n\n adapter = new AntigravityCliAdapter();\n\n mockedListAgentProcesses.mockReset();\n mockedEnrichProcesses.mockReset();\n mockedGenerateAgentName.mockReset();\n\n mockedEnrichProcesses.mockImplementation((procs) => procs);\n mockedGenerateAgentName.mockImplementation(\n (c: string, pid: number) => `${path.basename(c) || \"unknown\"}-${pid}`,\n );\n });\n\n afterEach(() => {\n delete process.env.ANTIGRAVITY_CLI_HOME;\n fs.rmSync(base, { recursive: true, force: true });\n });\n\n /** Write brain/<id>/.system_generated/logs/transcript.jsonl. */\n function writeTranscript(opts: {\n id?: string;\n records?: object[];\n transcript?: boolean;\n }): string {\n const id = opts.id ?? CONVERSATION_ID;\n const dir = path.join(base, \"brain\", id, \".system_generated\", \"logs\");\n fs.mkdirSync(dir, { recursive: true });\n if (opts.transcript !== false) {\n const records = opts.records ?? [userRecord(\"fix the bug\")];\n fs.writeFileSync(\n path.join(dir, \"transcript.jsonl\"),\n records.map((r) => JSON.stringify(r)).join(\"\\n\"),\n );\n }\n return path.join(dir, \"transcript.jsonl\");\n }\n\n /** Write cache/last_conversations.json (cwd -> conversationId). */\n function writeRegistry(map: Record<string, string>): void {\n const dir = path.join(base, \"cache\");\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(path.join(dir, \"last_conversations.json\"), JSON.stringify(map));\n }\n\n function proc(overrides: Partial<ProcessInfo> = {}): ProcessInfo {\n return {\n pid: 4242,\n ppid: 1,\n command: \"agy\",\n cwd,\n tty: \"ttys010\",\n startTime: new Date(),\n ...overrides,\n };\n }\n\n describe(\"initialization\", () => {\n it(\"exposes the antigravity_cli type\", () => {\n expect(adapter.type).toBe(\"antigravity_cli\");\n });\n });\n\n describe(\"canHandle\", () => {\n it(\"returns true for a plain agy command\", () => {\n expect(adapter.canHandle(proc({ command: \"agy\" }))).toBe(true);\n });\n\n it(\"returns true for agy with a full path and args\", () => {\n expect(\n adapter.canHandle(\n proc({ command: \"/Users/dev/.local/bin/agy --dangerously-skip-permissions\" }),\n ),\n ).toBe(true);\n });\n\n it(\"returns false for non-agy processes\", () => {\n expect(adapter.canHandle(proc({ command: \"node app.js\" }))).toBe(false);\n });\n\n it('returns false when \"agy\" appears only in an argument path', () => {\n expect(adapter.canHandle(proc({ command: \"node /path/to/agy-thing.js\" }))).toBe(false);\n });\n });\n\n describe(\"detectAgents\", () => {\n it(\"returns [] when there are no agy processes\", async () => {\n mockedListAgentProcesses.mockReturnValue([]);\n expect(await adapter.detectAgents()).toEqual([]);\n });\n\n it(\"resolves the conversation via last_conversations.json (cwd -> id)\", async () => {\n writeTranscript({});\n writeRegistry({ [cwd]: CONVERSATION_ID });\n mockedListAgentProcesses.mockReturnValue([proc()]);\n\n const agents = await adapter.detectAgents();\n\n expect(agents).toHaveLength(1);\n expect(agents[0]).toMatchObject({\n type: \"antigravity_cli\",\n pid: 4242,\n projectPath: cwd,\n sessionId: CONVERSATION_ID,\n summary: \"fix the bug\",\n });\n expect(agents[0].sessionFilePath).toBe(\n path.join(base, \"brain\", CONVERSATION_ID, \".system_generated\", \"logs\", \"transcript.jsonl\"),\n );\n });\n\n it(\"falls back to a process-only RUNNING agent when the cwd is not in the registry\", async () => {\n writeTranscript({});\n writeRegistry({ \"/some/other/cwd\": CONVERSATION_ID });\n mockedListAgentProcesses.mockReturnValue([proc()]);\n\n const agents = await adapter.detectAgents();\n\n expect(agents).toHaveLength(1);\n expect(agents[0].status).toBe(AgentStatus.RUNNING);\n expect(agents[0].sessionId).toBe(\"pid-4242\");\n expect(agents[0].sessionFilePath).toBeUndefined();\n });\n\n it(\"is process-only when the mapped conversation has no transcript\", async () => {\n writeTranscript({ transcript: false });\n writeRegistry({ [cwd]: CONVERSATION_ID });\n mockedListAgentProcesses.mockReturnValue([proc()]);\n\n const agents = await adapter.detectAgents();\n\n expect(agents[0].sessionId).toBe(\"pid-4242\");\n });\n });\n\n describe(\"getConversation\", () => {\n it(\"maps USER_INPUT (<USER_REQUEST>) and MODEL records to roles\", () => {\n const file = writeTranscript({ records: [userRecord(\"hi\"), modelRecord(\"hello\")] });\n expect(adapter.getConversation(file)).toEqual([\n { role: \"user\", content: \"hi\" },\n { role: \"assistant\", content: \"hello\" },\n ]);\n });\n\n it(\"accepts a bare conversation id and skips malformed lines\", () => {\n const file = writeTranscript({ records: [userRecord(\"hi\")] });\n fs.appendFileSync(file, \"\\n{bad json\");\n expect(adapter.getConversation(CONVERSATION_ID)).toEqual([{ role: \"user\", content: \"hi\" }]);\n });\n\n it(\"excludes SYSTEM records unless verbose\", () => {\n const file = writeTranscript({ records: [systemRecord(\"checkpoint\"), userRecord(\"go\")] });\n expect(adapter.getConversation(file)).toEqual([{ role: \"user\", content: \"go\" }]);\n expect(adapter.getConversation(file, { verbose: true }).map((m) => m.role)).toEqual([\n \"system\",\n \"user\",\n ]);\n });\n\n it(\"excludes MODEL tool-call (RUN_COMMAND) records except in verbose\", () => {\n const file = writeTranscript({\n records: [userRecord(\"go\"), toolRecord(\"ran: echo hi\"), modelRecord(\"done\")],\n });\n // A tool call is not an assistant reply; only USER_INPUT + PLANNER_RESPONSE show.\n expect(adapter.getConversation(file)).toEqual([\n { role: \"user\", content: \"go\" },\n { role: \"assistant\", content: \"done\" },\n ]);\n expect(adapter.getConversation(file, { verbose: true }).map((m) => m.role)).toEqual([\n \"user\",\n \"system\",\n \"assistant\",\n ]);\n });\n });\n\n describe(\"detectAgents status + summary mapping\", () => {\n const detectFirst = async () => (await adapter.detectAgents())[0];\n\n it(\"marks WAITING when the last reply is a PLANNER_RESPONSE (after a tool call)\", async () => {\n writeTranscript({\n records: [userRecord(\"go\"), toolRecord(\"ran: echo hi\"), modelRecord(\"done\")],\n });\n writeRegistry({ [cwd]: CONVERSATION_ID });\n mockedListAgentProcesses.mockReturnValue([proc()]);\n expect((await detectFirst()).status).toBe(AgentStatus.WAITING);\n });\n\n it(\"marks RUNNING when the last transcript turn is a USER_INPUT message\", async () => {\n writeTranscript({ records: [userRecord(\"still there?\")] });\n writeRegistry({ [cwd]: CONVERSATION_ID });\n mockedListAgentProcesses.mockReturnValue([proc()]);\n expect((await detectFirst()).status).toBe(AgentStatus.RUNNING);\n });\n\n it(\"marks IDLE when the last created_at is older than the threshold\", async () => {\n const old = new Date(Date.now() - 10 * 60 * 1000);\n writeTranscript({ records: [userRecord(\"go\", old)] });\n writeRegistry({ [cwd]: CONVERSATION_ID });\n mockedListAgentProcesses.mockReturnValue([proc()]);\n expect((await detectFirst()).status).toBe(AgentStatus.IDLE);\n });\n\n it(\"uses the last user request as the agent summary\", async () => {\n writeTranscript({ records: [userRecord(\"refactor the parser\"), modelRecord(\"on it\")] });\n writeRegistry({ [cwd]: CONVERSATION_ID });\n mockedListAgentProcesses.mockReturnValue([proc()]);\n expect((await detectFirst()).summary).toBe(\"refactor the parser\");\n });\n });\n\n describe(\"listSessions\", () => {\n it(\"returns [] when there is no registry\", async () => {\n expect(await adapter.listSessions()).toEqual([]);\n });\n\n it(\"lists sessions from the registry with cwd + first user message\", async () => {\n writeTranscript({});\n writeRegistry({ [cwd]: CONVERSATION_ID });\n const summaries = await adapter.listSessions();\n expect(summaries).toHaveLength(1);\n expect(summaries[0]).toMatchObject({\n type: \"antigravity_cli\",\n sessionId: CONVERSATION_ID,\n cwd,\n firstUserMessage: \"fix the bug\",\n });\n });\n\n it(\"applies the cwd filter\", async () => {\n writeTranscript({ id: \"aaa0000a-0000-4000-8000-00000000000a\", records: [userRecord(\"a\")] });\n writeTranscript({ id: \"bbb0000b-0000-4000-8000-00000000000b\", records: [userRecord(\"b\")] });\n writeRegistry({\n \"/Users/dev/project-a\": \"aaa0000a-0000-4000-8000-00000000000a\",\n \"/Users/dev/project-b\": \"bbb0000b-0000-4000-8000-00000000000b\",\n });\n\n const all = await adapter.listSessions();\n expect(all).toHaveLength(2);\n\n const filtered = await adapter.listSessions({ cwd: \"/Users/dev/project-a\" });\n expect(filtered).toHaveLength(1);\n expect(filtered[0].cwd).toBe(\"/Users/dev/project-a\");\n });\n });\n});\n"],"names":["fs","os","path","AntigravityCliAdapter","AgentStatus","listAgentProcesses","enrichProcesses","generateAgentName","vi","mock","importOriginal","actual","fn","mockedListAgentProcesses","mockedEnrichProcesses","mockedGenerateAgentName","CONVERSATION_ID","iso","d","toISOString","replace","userRecord","text","at","source","type","created_at","Date","content","modelRecord","toolRecord","systemRecord","describe","adapter","base","cwd","beforeEach","mkdtempSync","join","tmpdir","process","env","ANTIGRAVITY_CLI_HOME","mockReset","mockImplementation","procs","c","pid","basename","afterEach","rmSync","recursive","force","writeTranscript","opts","id","dir","mkdirSync","transcript","records","writeFileSync","map","r","JSON","stringify","writeRegistry","proc","overrides","ppid","command","tty","startTime","it","expect","toBe","canHandle","mockReturnValue","detectAgents","toEqual","agents","toHaveLength","toMatchObject","projectPath","sessionId","summary","sessionFilePath","status","RUNNING","toBeUndefined","file","getConversation","role","appendFileSync","verbose","m","detectFirst","WAITING","old","now","IDLE","listSessions","summaries","firstUserMessage","all","filtered"],"mappings":"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"}
|