@ai-devkit/agent-manager 0.36.0 → 0.38.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 -8
- package/dist/AgentManager.d.ts.map +1 -1
- package/dist/AgentManager.js +23 -4
- 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/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 +32 -25
- 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/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__/harnesses/antigravity/AntigravityCliAdapter.test.js +462 -0
- 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__/harnesses/claude/ClaudeAgentMapper.test.js +79 -0
- package/dist/__tests__/harnesses/claude/ClaudeAgentMapper.test.js.map +1 -0
- package/dist/__tests__/harnesses/claude/ClaudeCodeAdapter.test.js +1881 -0
- package/dist/__tests__/harnesses/claude/ClaudeCodeAdapter.test.js.map +1 -0
- package/dist/__tests__/harnesses/claude/ClaudeSessionLocator.test.js +425 -0
- package/dist/__tests__/harnesses/claude/ClaudeSessionLocator.test.js.map +1 -0
- package/dist/__tests__/harnesses/claude/ClaudeSessionParser.test.js +314 -0
- package/dist/__tests__/harnesses/claude/ClaudeSessionParser.test.js.map +1 -0
- package/dist/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.js +49 -0
- package/dist/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.js.map +1 -0
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js +76 -0
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js.map +1 -0
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.js +173 -0
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.js.map +1 -0
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js +181 -0
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js.map +1 -0
- package/dist/__tests__/harnesses/codex/CodexAdapter.test.js +685 -0
- 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__/harnesses/codex/CodexSessionMapping.test.js +86 -0
- package/dist/__tests__/harnesses/codex/CodexSessionMapping.test.js.map +1 -0
- package/dist/__tests__/harnesses/codex/CodexSessionParser.test.js +254 -0
- package/dist/__tests__/harnesses/codex/CodexSessionParser.test.js.map +1 -0
- package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js +121 -0
- package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js.map +1 -0
- package/dist/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.js +84 -0
- package/dist/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.js.map +1 -0
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js +128 -0
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js.map +1 -0
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js +246 -0
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js.map +1 -0
- package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js +384 -0
- package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js.map +1 -0
- package/dist/__tests__/harnesses/copilot/CopilotAdapter.test.js +659 -0
- package/dist/__tests__/harnesses/copilot/CopilotAdapter.test.js.map +1 -0
- package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js +290 -0
- package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js.map +1 -0
- package/dist/__tests__/harnesses/gemini/GeminiCliAdapter.test.js +1443 -0
- 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__/harnesses/grok/GrokAgentMapper.test.js +56 -0
- package/dist/__tests__/harnesses/grok/GrokAgentMapper.test.js.map +1 -0
- package/dist/__tests__/harnesses/grok/GrokCliAdapter.test.js +421 -0
- package/dist/__tests__/harnesses/grok/GrokCliAdapter.test.js.map +1 -0
- package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js +167 -0
- package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js.map +1 -0
- package/dist/__tests__/harnesses/grok/GrokSessionLocator.test.js +133 -0
- package/dist/__tests__/harnesses/grok/GrokSessionLocator.test.js.map +1 -0
- package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js +301 -0
- package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js.map +1 -0
- package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js +662 -0
- package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js.map +1 -0
- package/dist/__tests__/harnesses/opencode/OpenCodeAdapter.test.js +213 -0
- package/dist/__tests__/harnesses/opencode/OpenCodeAdapter.test.js.map +1 -0
- package/dist/__tests__/harnesses/opencode/OpenCodeAgentMapper.test.js +89 -0
- package/dist/__tests__/harnesses/opencode/OpenCodeAgentMapper.test.js.map +1 -0
- package/dist/__tests__/harnesses/opencode/OpenCodeSessionLocator.test.js +94 -0
- package/dist/__tests__/harnesses/opencode/OpenCodeSessionLocator.test.js.map +1 -0
- package/dist/__tests__/harnesses/opencode/OpenCodeSessionParser.test.js +147 -0
- package/dist/__tests__/harnesses/opencode/OpenCodeSessionParser.test.js.map +1 -0
- package/dist/__tests__/harnesses/pi/PiAdapter.test.js +367 -0
- package/dist/__tests__/harnesses/pi/PiAdapter.test.js.map +1 -0
- package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js +382 -0
- package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js.map +1 -0
- package/dist/__tests__/harnesses/pi/PiSessionParser.test.js +416 -0
- package/dist/__tests__/harnesses/pi/PiSessionParser.test.js.map +1 -0
- package/dist/__tests__/harnesses/pi/PiSessionTracker.test.js +108 -0
- package/dist/__tests__/harnesses/pi/PiSessionTracker.test.js.map +1 -0
- package/dist/__tests__/harnesses/pi/durable/PiCliProbe.test.js +70 -0
- package/dist/__tests__/harnesses/pi/durable/PiCliProbe.test.js.map +1 -0
- package/dist/__tests__/harnesses/pi/durable/PiDurableAgentRepository.test.js.map +1 -0
- package/dist/__tests__/harnesses/pi/durable/PiPrintAgentService.test.js +192 -0
- package/dist/__tests__/harnesses/pi/durable/PiPrintAgentService.test.js.map +1 -0
- package/dist/__tests__/harnesses/pi/durable/PiPrintProtocol.test.js +119 -0
- package/dist/__tests__/harnesses/pi/durable/PiPrintProtocol.test.js.map +1 -0
- package/dist/__tests__/harnesses/pi/durable/PiPrintRunner.test.js +382 -0
- package/dist/__tests__/harnesses/pi/durable/PiPrintRunner.test.js.map +1 -0
- package/dist/__tests__/harnesses/pi/durable/PiStreamParser.test.js +34 -0
- package/dist/__tests__/harnesses/pi/durable/PiStreamParser.test.js.map +1 -0
- package/dist/__tests__/harnesses/readiness/AgentReadiness.test.js +342 -0
- 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 +49 -0
- package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -1
- package/dist/__tests__/terminal/TmuxManager.test.js +1 -1
- package/dist/__tests__/terminal/TmuxManager.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/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/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/providers/anthropic.js +153 -0
- 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/providers/zai.js +158 -0
- 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/sources/codex.d.ts +32 -0
- package/dist/capacity/sources/codex.d.ts.map +1 -0
- package/dist/capacity/sources/codex.js +227 -0
- 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/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/harnesses/claude/ClaudeAgentMapper.d.ts.map +1 -0
- package/dist/harnesses/claude/ClaudeAgentMapper.js +36 -0
- package/dist/harnesses/claude/ClaudeAgentMapper.js.map +1 -0
- package/dist/harnesses/claude/ClaudeCodeAdapter.d.ts +30 -0
- package/dist/harnesses/claude/ClaudeCodeAdapter.d.ts.map +1 -0
- package/dist/harnesses/claude/ClaudeCodeAdapter.js +134 -0
- package/dist/harnesses/claude/ClaudeCodeAdapter.js.map +1 -0
- package/dist/harnesses/claude/ClaudeSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/claude/ClaudeSessionLocator.js +260 -0
- package/dist/harnesses/claude/ClaudeSessionLocator.js.map +1 -0
- package/dist/harnesses/claude/ClaudeSessionParser.d.ts +148 -0
- package/dist/harnesses/claude/ClaudeSessionParser.d.ts.map +1 -0
- package/dist/harnesses/claude/ClaudeSessionParser.js +365 -0
- package/dist/harnesses/claude/ClaudeSessionParser.js.map +1 -0
- 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/durable/ClaudeCliProbe.d.ts.map +1 -0
- package/dist/harnesses/claude/durable/ClaudeCliProbe.js.map +1 -0
- package/dist/harnesses/claude/durable/ClaudePrintAgentService.d.ts.map +1 -0
- package/dist/harnesses/claude/durable/ClaudePrintAgentService.js.map +1 -0
- package/dist/harnesses/claude/durable/ClaudePrintRunner.d.ts.map +1 -0
- package/dist/harnesses/claude/durable/ClaudePrintRunner.js.map +1 -0
- package/dist/harnesses/claude/durable/ClaudeStreamParser.d.ts.map +1 -0
- package/dist/harnesses/claude/durable/ClaudeStreamParser.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/CodexAdapter.d.ts +29 -0
- package/dist/harnesses/codex/CodexAdapter.d.ts.map +1 -0
- package/dist/harnesses/codex/CodexAdapter.js +290 -0
- package/dist/harnesses/codex/CodexAdapter.js.map +1 -0
- package/dist/harnesses/codex/CodexAgentMapper.d.ts.map +1 -0
- package/dist/harnesses/codex/CodexAgentMapper.js +28 -0
- 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/harnesses/codex/CodexSessionMapping.d.ts.map +1 -0
- package/dist/harnesses/codex/CodexSessionMapping.js +68 -0
- 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/harnesses/codex/CodexSessionParser.js +308 -0
- package/dist/harnesses/codex/CodexSessionParser.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/durable/CodexCliProbe.d.ts.map +1 -0
- package/dist/harnesses/codex/durable/CodexCliProbe.js.map +1 -0
- package/dist/harnesses/codex/durable/CodexPrintAgentService.d.ts.map +1 -0
- package/dist/harnesses/codex/durable/CodexPrintAgentService.js.map +1 -0
- package/dist/harnesses/codex/durable/CodexPrintRunner.d.ts.map +1 -0
- package/dist/harnesses/codex/durable/CodexPrintRunner.js.map +1 -0
- package/dist/harnesses/codex/durable/CodexStreamParser.d.ts.map +1 -0
- package/dist/harnesses/codex/durable/CodexStreamParser.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/CopilotAdapter.d.ts +36 -0
- package/dist/harnesses/copilot/CopilotAdapter.d.ts.map +1 -0
- package/dist/harnesses/copilot/CopilotAdapter.js +128 -0
- package/dist/harnesses/copilot/CopilotAdapter.js.map +1 -0
- package/dist/harnesses/copilot/CopilotAgentMapper.d.ts.map +1 -0
- package/dist/harnesses/copilot/CopilotAgentMapper.js +30 -0
- 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/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/gemini/GeminiAgentMapper.d.ts.map +1 -0
- package/dist/harnesses/gemini/GeminiAgentMapper.js +30 -0
- package/dist/harnesses/gemini/GeminiAgentMapper.js.map +1 -0
- package/dist/harnesses/gemini/GeminiCliAdapter.d.ts +52 -0
- package/dist/harnesses/gemini/GeminiCliAdapter.d.ts.map +1 -0
- package/dist/harnesses/gemini/GeminiCliAdapter.js +196 -0
- 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/harnesses/gemini/GeminiSessionParser.d.ts +121 -0
- 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/harnesses/grok/GrokAgentMapper.d.ts.map +1 -0
- package/dist/harnesses/grok/GrokAgentMapper.js +30 -0
- package/dist/harnesses/grok/GrokAgentMapper.js.map +1 -0
- package/dist/harnesses/grok/GrokCliAdapter.d.ts +36 -0
- package/dist/harnesses/grok/GrokCliAdapter.d.ts.map +1 -0
- package/dist/harnesses/grok/GrokCliAdapter.js +102 -0
- package/dist/harnesses/grok/GrokCliAdapter.js.map +1 -0
- package/dist/harnesses/grok/GrokSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/grok/GrokSessionLocator.js +140 -0
- 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/harnesses/opencode/OpenCodeAdapter.d.ts +29 -0
- package/dist/harnesses/opencode/OpenCodeAdapter.d.ts.map +1 -0
- package/dist/harnesses/opencode/OpenCodeAdapter.js +86 -0
- package/dist/harnesses/opencode/OpenCodeAdapter.js.map +1 -0
- package/dist/harnesses/opencode/OpenCodeAgentMapper.d.ts.map +1 -0
- package/dist/harnesses/opencode/OpenCodeAgentMapper.js +42 -0
- package/dist/harnesses/opencode/OpenCodeAgentMapper.js.map +1 -0
- package/dist/harnesses/opencode/OpenCodeSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/opencode/OpenCodeSessionLocator.js +118 -0
- package/dist/harnesses/opencode/OpenCodeSessionLocator.js.map +1 -0
- package/dist/harnesses/opencode/OpenCodeSessionParser.d.ts +16 -0
- package/dist/harnesses/opencode/OpenCodeSessionParser.d.ts.map +1 -0
- package/dist/harnesses/opencode/OpenCodeSessionParser.js +105 -0
- package/dist/harnesses/opencode/OpenCodeSessionParser.js.map +1 -0
- 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/PiAdapter.d.ts +30 -0
- package/dist/harnesses/pi/PiAdapter.d.ts.map +1 -0
- package/dist/harnesses/pi/PiAdapter.js +167 -0
- package/dist/harnesses/pi/PiAdapter.js.map +1 -0
- package/dist/harnesses/pi/PiAgentMapper.d.ts.map +1 -0
- package/dist/harnesses/pi/PiAgentMapper.js +30 -0
- 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/harnesses/pi/PiSessionTracker.d.ts.map +1 -0
- package/dist/harnesses/pi/PiSessionTracker.js +69 -0
- package/dist/harnesses/pi/PiSessionTracker.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/durable/PiCliProbe.d.ts.map +1 -0
- package/dist/harnesses/pi/durable/PiCliProbe.js.map +1 -0
- package/dist/harnesses/pi/durable/PiPrintAgentService.d.ts.map +1 -0
- package/dist/harnesses/pi/durable/PiPrintAgentService.js.map +1 -0
- package/dist/harnesses/pi/durable/PiPrintProtocol.d.ts.map +1 -0
- package/dist/harnesses/pi/durable/PiPrintProtocol.js.map +1 -0
- package/dist/harnesses/pi/durable/PiPrintRunner.d.ts.map +1 -0
- package/dist/harnesses/pi/durable/PiPrintRunner.js.map +1 -0
- package/dist/harnesses/pi/durable/PiStreamParser.d.ts.map +1 -0
- package/dist/harnesses/pi/durable/PiStreamParser.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 +68 -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/harnesses/readiness/types.d.ts +76 -0
- 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 +99 -0
- package/dist/harnesses/runtimeProfiles.js.map +1 -0
- 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 +21 -46
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -27
- 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/runtime/tmux/TmuxManager.js +116 -0
- 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 +11 -347
- package/dist/terminal/TtyWriter.js.map +1 -1
- 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 +19 -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 +7 -0
- package/dist/terminal/backends/shared.d.ts.map +1 -0
- package/dist/terminal/backends/shared.js +35 -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 +21 -0
- package/dist/terminal/types.d.ts.map +1 -0
- package/dist/terminal/types.js +10 -0
- package/dist/terminal/types.js.map +1 -0
- 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/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 +27 -6
- 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/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 +20 -30
- package/src/__tests__/capacity/wham.test.ts +1 -1
- package/src/__tests__/capacity/zai.test.ts +27 -62
- 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__/harnesses/antigravity/AntigravityCliAdapter.test.ts +396 -0
- package/src/__tests__/harnesses/builtinAdapters.test.ts +33 -0
- package/src/__tests__/harnesses/claude/ClaudeAgentMapper.test.ts +84 -0
- package/src/__tests__/harnesses/claude/ClaudeCodeAdapter.test.ts +1793 -0
- package/src/__tests__/harnesses/claude/ClaudeSessionLocator.test.ts +423 -0
- package/src/__tests__/harnesses/claude/ClaudeSessionParser.test.ts +300 -0
- package/src/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.ts +34 -0
- package/src/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.ts +61 -0
- package/src/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.ts +129 -0
- package/src/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.ts +152 -0
- package/src/__tests__/harnesses/codex/CodexAdapter.test.ts +652 -0
- package/src/__tests__/harnesses/codex/CodexSessionLocator.test.ts +419 -0
- package/src/__tests__/harnesses/codex/CodexSessionMapping.test.ts +63 -0
- package/src/__tests__/harnesses/codex/CodexSessionParser.test.ts +192 -0
- package/src/__tests__/harnesses/codex/durable/CodexCliProbe.test.ts +80 -0
- package/src/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.ts +65 -0
- package/src/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.ts +104 -0
- package/src/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.ts +201 -0
- package/src/__tests__/harnesses/codex/durable/CodexPrintRunner.test.ts +299 -0
- package/src/__tests__/harnesses/copilot/CopilotAdapter.test.ts +614 -0
- package/src/__tests__/harnesses/copilot/CopilotRefreshIO.test.ts +270 -0
- package/src/__tests__/harnesses/gemini/GeminiCliAdapter.test.ts +1324 -0
- package/src/__tests__/harnesses/gemini/GeminiSessionJsonl.test.ts +402 -0
- package/src/__tests__/harnesses/gemini/GeminiSessionLocator.test.ts +396 -0
- package/src/__tests__/harnesses/grok/GrokAgentMapper.test.ts +57 -0
- package/src/__tests__/harnesses/grok/GrokCliAdapter.test.ts +376 -0
- package/src/__tests__/harnesses/grok/GrokIncrementalRefresh.test.ts +170 -0
- package/src/__tests__/harnesses/grok/GrokSessionLocator.test.ts +106 -0
- package/src/__tests__/harnesses/grok/GrokSessionParser.test.ts +230 -0
- package/src/__tests__/harnesses/kiro/KiroAdapter.test.ts +552 -0
- package/src/__tests__/harnesses/opencode/OpenCodeAdapter.test.ts +215 -0
- package/src/__tests__/harnesses/opencode/OpenCodeAgentMapper.test.ts +83 -0
- package/src/__tests__/harnesses/opencode/OpenCodeSessionLocator.test.ts +84 -0
- package/src/__tests__/harnesses/opencode/OpenCodeSessionParser.test.ts +148 -0
- package/src/__tests__/harnesses/pi/PiAdapter.test.ts +325 -0
- package/src/__tests__/harnesses/pi/PiDiscoveryIO.test.ts +337 -0
- package/src/__tests__/harnesses/pi/PiSessionParser.test.ts +280 -0
- package/src/__tests__/harnesses/pi/PiSessionTracker.test.ts +79 -0
- package/src/__tests__/harnesses/pi/durable/PiCliProbe.test.ts +50 -0
- package/src/__tests__/harnesses/pi/durable/PiPrintAgentService.test.ts +138 -0
- package/src/__tests__/harnesses/pi/durable/PiPrintProtocol.test.ts +71 -0
- package/src/__tests__/harnesses/pi/durable/PiPrintRunner.test.ts +252 -0
- package/src/__tests__/harnesses/pi/durable/PiStreamParser.test.ts +26 -0
- package/src/__tests__/harnesses/readiness/AgentReadiness.test.ts +285 -0
- 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 +31 -1
- package/src/__tests__/terminal/TmuxManager.test.ts +1 -1
- package/src/__tests__/utils/IncrementalJsonlSummary.test.ts +414 -0
- 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/index.ts +29 -23
- package/src/capacity/providers/anthropic.ts +198 -0
- package/src/capacity/providers/openai-platform.ts +150 -0
- package/src/capacity/providers/openai-subscription.ts +162 -0
- package/src/capacity/providers/zai.ts +155 -0
- package/src/capacity/sources/claude.ts +30 -0
- package/src/capacity/sources/codex.ts +262 -0
- package/src/capacity/sources/pi.ts +131 -0
- package/src/capacity/types.ts +3 -0
- 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/harnesses/claude/ClaudeAgentMapper.ts +55 -0
- package/src/harnesses/claude/ClaudeCodeAdapter.ts +175 -0
- package/src/harnesses/claude/ClaudeSessionLocator.ts +358 -0
- package/src/harnesses/claude/ClaudeSessionParser.ts +524 -0
- package/src/harnesses/claude/credentials.ts +122 -0
- package/src/harnesses/claude/readiness.ts +69 -0
- package/src/harnesses/codex/CodexAdapter.ts +337 -0
- package/src/harnesses/codex/CodexAgentMapper.ts +26 -0
- package/src/harnesses/codex/CodexSessionLocator.ts +509 -0
- package/src/harnesses/codex/CodexSessionMapping.ts +89 -0
- package/src/harnesses/codex/CodexSessionParser.ts +462 -0
- package/src/harnesses/codex/credentials.ts +81 -0
- package/src/harnesses/codex/readiness.ts +72 -0
- package/src/harnesses/copilot/CopilotAdapter.ts +161 -0
- package/src/harnesses/copilot/CopilotAgentMapper.ts +27 -0
- package/src/harnesses/copilot/CopilotSessionLocator.ts +161 -0
- package/src/harnesses/copilot/CopilotSessionParser.ts +380 -0
- package/src/harnesses/copilot/readiness.ts +33 -0
- package/src/harnesses/gemini/GeminiAgentMapper.ts +27 -0
- package/src/harnesses/gemini/GeminiCliAdapter.ts +272 -0
- package/src/harnesses/gemini/GeminiSessionLocator.ts +394 -0
- package/src/harnesses/gemini/GeminiSessionParser.ts +395 -0
- package/src/harnesses/gemini/fileSignature.ts +10 -0
- package/src/harnesses/grok/GrokAgentMapper.ts +32 -0
- package/src/harnesses/grok/GrokCliAdapter.ts +126 -0
- package/src/harnesses/grok/GrokSessionLocator.ts +179 -0
- 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/harnesses/opencode/OpenCodeAdapter.ts +110 -0
- package/src/harnesses/opencode/OpenCodeAgentMapper.ts +51 -0
- package/src/harnesses/opencode/OpenCodeSessionLocator.ts +151 -0
- package/src/harnesses/opencode/OpenCodeSessionParser.ts +146 -0
- package/src/harnesses/opencode/readiness.ts +48 -0
- package/src/harnesses/pi/PiAdapter.ts +197 -0
- package/src/harnesses/pi/PiAgentMapper.ts +27 -0
- package/src/harnesses/pi/PiSessionLocator.ts +288 -0
- package/src/harnesses/pi/PiSessionParser.ts +488 -0
- package/src/harnesses/pi/PiSessionTracker.ts +87 -0
- package/src/harnesses/pi/credentials.ts +129 -0
- package/src/harnesses/pi/readiness.ts +104 -0
- package/src/harnesses/readiness/AgentReadiness.ts +87 -0
- package/src/harnesses/readiness/checks.ts +336 -0
- package/src/harnesses/readiness/types.ts +90 -0
- package/src/harnesses/runtimeProfiles.ts +103 -0
- package/src/harnesses/shared.ts +119 -0
- package/src/index.ts +20 -131
- 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/runtime/tmux/TmuxManager.ts +102 -0
- package/src/runtime/types.ts +1 -1
- package/src/terminal/TerminalFocusManager.ts +19 -292
- package/src/terminal/TtyWriter.ts +16 -336
- package/src/terminal/backends/index.ts +21 -0
- package/src/terminal/backends/iterm2.ts +126 -0
- package/src/terminal/backends/shared.ts +42 -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 +22 -0
- package/src/utils/IncrementalJsonlSummary.ts +306 -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 +0 -381
- package/dist/__tests__/adapters/AntigravityCliAdapter.test.js.map +0 -1
- package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js +0 -1853
- package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +0 -1
- package/dist/__tests__/adapters/CodexAdapter.test.js +0 -391
- package/dist/__tests__/adapters/CodexAdapter.test.js.map +0 -1
- package/dist/__tests__/adapters/KiroAdapter.test.js +0 -607
- package/dist/__tests__/adapters/KiroAdapter.test.js.map +0 -1
- package/dist/__tests__/durable/CodexCliProbe.test.js +0 -129
- package/dist/__tests__/durable/CodexCliProbe.test.js.map +0 -1
- package/dist/__tests__/durable/CodexDurableAgentRepository.test.js +0 -84
- package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +0 -1
- package/dist/__tests__/durable/CodexPrintAgent.integration.test.js +0 -126
- package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +0 -1
- package/dist/__tests__/durable/CodexPrintAgentService.test.js +0 -271
- package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +0 -1
- package/dist/__tests__/durable/CodexPrintRunner.test.js +0 -393
- package/dist/__tests__/durable/CodexPrintRunner.test.js.map +0 -1
- package/dist/__tests__/print/ClaudeCliProbe.test.js +0 -49
- package/dist/__tests__/print/ClaudeCliProbe.test.js.map +0 -1
- package/dist/__tests__/print/ClaudePrintAgent.integration.test.js +0 -75
- package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +0 -1
- package/dist/__tests__/print/ClaudePrintAgentService.test.js +0 -173
- package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +0 -1
- package/dist/__tests__/print/ClaudePrintRunner.test.js +0 -181
- package/dist/__tests__/print/ClaudePrintRunner.test.js.map +0 -1
- package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js +0 -79
- package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +0 -1
- package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js +0 -436
- package/dist/__tests__/providers/claude/ClaudeSessionLocator.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/codex/CodexSessionMapping.test.js +0 -86
- package/dist/__tests__/providers/codex/CodexSessionMapping.test.js.map +0 -1
- package/dist/__tests__/providers/codex/CodexSessionParser.test.js +0 -254
- package/dist/__tests__/providers/codex/CodexSessionParser.test.js.map +0 -1
- package/dist/__tests__/providers/copilot/CopilotAdapter.test.js +0 -659
- package/dist/__tests__/providers/copilot/CopilotAdapter.test.js.map +0 -1
- package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js +0 -1434
- package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js.map +0 -1
- package/dist/__tests__/providers/grok/GrokAgentMapper.test.js +0 -56
- package/dist/__tests__/providers/grok/GrokAgentMapper.test.js.map +0 -1
- package/dist/__tests__/providers/grok/GrokCliAdapter.test.js +0 -421
- package/dist/__tests__/providers/grok/GrokCliAdapter.test.js.map +0 -1
- package/dist/__tests__/providers/grok/GrokSessionLocator.test.js +0 -133
- package/dist/__tests__/providers/grok/GrokSessionLocator.test.js.map +0 -1
- package/dist/__tests__/providers/opencode/OpenCodeAdapter.test.js +0 -213
- package/dist/__tests__/providers/opencode/OpenCodeAdapter.test.js.map +0 -1
- package/dist/__tests__/providers/opencode/OpenCodeAgentMapper.test.js +0 -89
- package/dist/__tests__/providers/opencode/OpenCodeAgentMapper.test.js.map +0 -1
- package/dist/__tests__/providers/opencode/OpenCodeSessionLocator.test.js +0 -94
- package/dist/__tests__/providers/opencode/OpenCodeSessionLocator.test.js.map +0 -1
- package/dist/__tests__/providers/opencode/OpenCodeSessionParser.test.js +0 -147
- package/dist/__tests__/providers/opencode/OpenCodeSessionParser.test.js.map +0 -1
- package/dist/__tests__/providers/pi/PiAdapter.test.js +0 -367
- package/dist/__tests__/providers/pi/PiAdapter.test.js.map +0 -1
- package/dist/__tests__/providers/pi/PiSessionParser.test.js +0 -246
- package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +0 -1
- package/dist/__tests__/providers/pi/PiSessionTracker.test.js +0 -108
- package/dist/__tests__/providers/pi/PiSessionTracker.test.js.map +0 -1
- package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js +0 -76
- package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js.map +0 -1
- package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js.map +0 -1
- package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js +0 -202
- package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js.map +0 -1
- package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js +0 -119
- package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js.map +0 -1
- package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js +0 -386
- package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js.map +0 -1
- package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js +0 -34
- package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js.map +0 -1
- package/dist/__tests__/readiness/AgentReadiness.test.js +0 -301
- package/dist/__tests__/readiness/AgentReadiness.test.js.map +0 -1
- package/dist/__tests__/utils/ClaudeSessionParser.test.js +0 -314
- package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +0 -1
- package/dist/__tests__/utils/agents.test.js +0 -29
- package/dist/__tests__/utils/agents.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/capacity/claude.d.ts +0 -17
- package/dist/capacity/claude.d.ts.map +0 -1
- package/dist/capacity/claude.js +0 -271
- package/dist/capacity/claude.js.map +0 -1
- package/dist/capacity/codex.d.ts +0 -36
- package/dist/capacity/codex.d.ts.map +0 -1
- package/dist/capacity/codex.js +0 -280
- package/dist/capacity/codex.js.map +0 -1
- package/dist/capacity/openai.d.ts +0 -48
- package/dist/capacity/openai.d.ts.map +0 -1
- package/dist/capacity/openai.js +0 -312
- 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 +0 -203
- package/dist/capacity/zai.js.map +0 -1
- package/dist/providers/claude/ClaudeAgentMapper.d.ts.map +0 -1
- package/dist/providers/claude/ClaudeAgentMapper.js +0 -42
- package/dist/providers/claude/ClaudeAgentMapper.js.map +0 -1
- package/dist/providers/claude/ClaudeCodeAdapter.d.ts +0 -31
- package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +0 -1
- package/dist/providers/claude/ClaudeCodeAdapter.js +0 -132
- package/dist/providers/claude/ClaudeCodeAdapter.js.map +0 -1
- package/dist/providers/claude/ClaudeSessionLocator.d.ts.map +0 -1
- package/dist/providers/claude/ClaudeSessionLocator.js +0 -260
- package/dist/providers/claude/ClaudeSessionLocator.js.map +0 -1
- package/dist/providers/claude/ClaudeSessionParser.d.ts +0 -114
- package/dist/providers/claude/ClaudeSessionParser.d.ts.map +0 -1
- package/dist/providers/claude/ClaudeSessionParser.js +0 -309
- package/dist/providers/claude/ClaudeSessionParser.js.map +0 -1
- package/dist/providers/claude/durable/ClaudeCliProbe.d.ts.map +0 -1
- package/dist/providers/claude/durable/ClaudeCliProbe.js.map +0 -1
- package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts.map +0 -1
- package/dist/providers/claude/durable/ClaudePrintAgentService.js.map +0 -1
- package/dist/providers/claude/durable/ClaudePrintRunner.d.ts.map +0 -1
- package/dist/providers/claude/durable/ClaudePrintRunner.js.map +0 -1
- package/dist/providers/claude/durable/ClaudeStreamParser.d.ts.map +0 -1
- package/dist/providers/claude/durable/ClaudeStreamParser.js.map +0 -1
- package/dist/providers/codex/CodexAdapter.d.ts +0 -28
- package/dist/providers/codex/CodexAdapter.d.ts.map +0 -1
- package/dist/providers/codex/CodexAdapter.js +0 -170
- package/dist/providers/codex/CodexAdapter.js.map +0 -1
- package/dist/providers/codex/CodexAgentMapper.d.ts.map +0 -1
- package/dist/providers/codex/CodexAgentMapper.js +0 -35
- 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.d.ts.map +0 -1
- package/dist/providers/codex/CodexSessionMapping.js +0 -68
- 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 +0 -262
- package/dist/providers/codex/CodexSessionParser.js.map +0 -1
- package/dist/providers/codex/durable/CodexCliProbe.d.ts.map +0 -1
- package/dist/providers/codex/durable/CodexCliProbe.js.map +0 -1
- package/dist/providers/codex/durable/CodexPrintAgentService.d.ts.map +0 -1
- package/dist/providers/codex/durable/CodexPrintAgentService.js.map +0 -1
- package/dist/providers/codex/durable/CodexPrintRunner.d.ts.map +0 -1
- package/dist/providers/codex/durable/CodexPrintRunner.js.map +0 -1
- package/dist/providers/codex/durable/CodexStreamParser.d.ts.map +0 -1
- package/dist/providers/codex/durable/CodexStreamParser.js.map +0 -1
- package/dist/providers/copilot/CopilotAdapter.d.ts +0 -35
- package/dist/providers/copilot/CopilotAdapter.d.ts.map +0 -1
- package/dist/providers/copilot/CopilotAdapter.js +0 -123
- package/dist/providers/copilot/CopilotAdapter.js.map +0 -1
- package/dist/providers/copilot/CopilotAgentMapper.d.ts.map +0 -1
- package/dist/providers/copilot/CopilotAgentMapper.js +0 -37
- 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.d.ts.map +0 -1
- package/dist/providers/gemini/GeminiAgentMapper.js +0 -37
- package/dist/providers/gemini/GeminiAgentMapper.js.map +0 -1
- package/dist/providers/gemini/GeminiCliAdapter.d.ts +0 -53
- package/dist/providers/gemini/GeminiCliAdapter.d.ts.map +0 -1
- package/dist/providers/gemini/GeminiCliAdapter.js +0 -197
- 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 +0 -94
- 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.d.ts.map +0 -1
- package/dist/providers/grok/GrokAgentMapper.js +0 -36
- package/dist/providers/grok/GrokAgentMapper.js.map +0 -1
- package/dist/providers/grok/GrokCliAdapter.d.ts +0 -36
- package/dist/providers/grok/GrokCliAdapter.d.ts.map +0 -1
- package/dist/providers/grok/GrokCliAdapter.js +0 -98
- package/dist/providers/grok/GrokCliAdapter.js.map +0 -1
- package/dist/providers/grok/GrokSessionLocator.d.ts.map +0 -1
- package/dist/providers/grok/GrokSessionLocator.js +0 -140
- 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 +0 -31
- package/dist/providers/opencode/OpenCodeAdapter.d.ts.map +0 -1
- package/dist/providers/opencode/OpenCodeAdapter.js +0 -89
- package/dist/providers/opencode/OpenCodeAdapter.js.map +0 -1
- package/dist/providers/opencode/OpenCodeAgentMapper.d.ts.map +0 -1
- package/dist/providers/opencode/OpenCodeAgentMapper.js +0 -50
- package/dist/providers/opencode/OpenCodeAgentMapper.js.map +0 -1
- package/dist/providers/opencode/OpenCodeSessionLocator.d.ts.map +0 -1
- package/dist/providers/opencode/OpenCodeSessionLocator.js +0 -118
- package/dist/providers/opencode/OpenCodeSessionLocator.js.map +0 -1
- package/dist/providers/opencode/OpenCodeSessionParser.d.ts +0 -18
- package/dist/providers/opencode/OpenCodeSessionParser.d.ts.map +0 -1
- package/dist/providers/opencode/OpenCodeSessionParser.js +0 -104
- package/dist/providers/opencode/OpenCodeSessionParser.js.map +0 -1
- package/dist/providers/pi/PiAdapter.d.ts +0 -29
- package/dist/providers/pi/PiAdapter.d.ts.map +0 -1
- package/dist/providers/pi/PiAdapter.js +0 -163
- package/dist/providers/pi/PiAdapter.js.map +0 -1
- package/dist/providers/pi/PiAgentMapper.d.ts.map +0 -1
- package/dist/providers/pi/PiAgentMapper.js +0 -37
- 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.d.ts.map +0 -1
- package/dist/providers/pi/PiSessionTracker.js +0 -69
- package/dist/providers/pi/PiSessionTracker.js.map +0 -1
- package/dist/providers/pi/durable/PiCliProbe.d.ts.map +0 -1
- package/dist/providers/pi/durable/PiCliProbe.js.map +0 -1
- package/dist/providers/pi/durable/PiPrintAgentService.d.ts.map +0 -1
- package/dist/providers/pi/durable/PiPrintAgentService.js.map +0 -1
- package/dist/providers/pi/durable/PiPrintProtocol.d.ts.map +0 -1
- package/dist/providers/pi/durable/PiPrintProtocol.js.map +0 -1
- package/dist/providers/pi/durable/PiPrintRunner.d.ts.map +0 -1
- package/dist/providers/pi/durable/PiPrintRunner.js.map +0 -1
- package/dist/providers/pi/durable/PiStreamParser.d.ts.map +0 -1
- package/dist/providers/pi/durable/PiStreamParser.js.map +0 -1
- package/dist/readiness/AgentReadiness.d.ts +0 -67
- 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 +0 -135
- 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 -15
- package/dist/utils/agents.d.ts.map +0 -1
- package/dist/utils/agents.js +0 -82
- package/dist/utils/agents.js.map +0 -1
- package/dist/utils/index.d.ts +0 -7
- 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__/adapters/AntigravityCliAdapter.test.ts +0 -324
- package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +0 -1763
- package/src/__tests__/adapters/CodexAdapter.test.ts +0 -387
- package/src/__tests__/adapters/KiroAdapter.test.ts +0 -534
- package/src/__tests__/durable/CodexCliProbe.test.ts +0 -85
- package/src/__tests__/durable/CodexDurableAgentRepository.test.ts +0 -65
- package/src/__tests__/durable/CodexPrintAgent.integration.test.ts +0 -104
- package/src/__tests__/durable/CodexPrintAgentService.test.ts +0 -217
- package/src/__tests__/durable/CodexPrintRunner.test.ts +0 -309
- package/src/__tests__/fixtures/fake-claude.cjs +0 -31
- package/src/__tests__/fixtures/fake-codex.cjs +0 -56
- package/src/__tests__/print/ClaudeCliProbe.test.ts +0 -34
- package/src/__tests__/print/ClaudePrintAgent.integration.test.ts +0 -61
- package/src/__tests__/print/ClaudePrintAgentService.test.ts +0 -129
- package/src/__tests__/print/ClaudePrintRunner.test.ts +0 -152
- package/src/__tests__/providers/claude/ClaudeAgentMapper.test.ts +0 -84
- package/src/__tests__/providers/claude/ClaudeSessionLocator.test.ts +0 -434
- package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +0 -182
- package/src/__tests__/providers/codex/CodexSessionMapping.test.ts +0 -63
- package/src/__tests__/providers/codex/CodexSessionParser.test.ts +0 -192
- package/src/__tests__/providers/copilot/CopilotAdapter.test.ts +0 -614
- package/src/__tests__/providers/gemini/GeminiCliAdapter.test.ts +0 -1320
- package/src/__tests__/providers/grok/GrokAgentMapper.test.ts +0 -57
- package/src/__tests__/providers/grok/GrokCliAdapter.test.ts +0 -376
- package/src/__tests__/providers/grok/GrokSessionLocator.test.ts +0 -106
- package/src/__tests__/providers/opencode/OpenCodeAdapter.test.ts +0 -215
- package/src/__tests__/providers/opencode/OpenCodeAgentMapper.test.ts +0 -83
- package/src/__tests__/providers/opencode/OpenCodeSessionLocator.test.ts +0 -84
- package/src/__tests__/providers/opencode/OpenCodeSessionParser.test.ts +0 -148
- package/src/__tests__/providers/pi/PiAdapter.test.ts +0 -325
- package/src/__tests__/providers/pi/PiSessionParser.test.ts +0 -190
- package/src/__tests__/providers/pi/PiSessionTracker.test.ts +0 -79
- package/src/__tests__/providers/pi/durable/PiCliProbe.test.ts +0 -54
- package/src/__tests__/providers/pi/durable/PiPrintAgentService.test.ts +0 -141
- package/src/__tests__/providers/pi/durable/PiPrintProtocol.test.ts +0 -71
- package/src/__tests__/providers/pi/durable/PiPrintRunner.test.ts +0 -253
- package/src/__tests__/providers/pi/durable/PiStreamParser.test.ts +0 -26
- package/src/__tests__/readiness/AgentReadiness.test.ts +0 -242
- package/src/__tests__/utils/ClaudeSessionParser.test.ts +0 -300
- package/src/__tests__/utils/agents.test.ts +0 -31
- package/src/adapters/AntigravityCliAdapter.ts +0 -356
- package/src/adapters/KiroAdapter.ts +0 -456
- package/src/adapters/index.ts +0 -17
- package/src/capacity/claude.ts +0 -313
- package/src/capacity/codex.ts +0 -332
- package/src/capacity/openai.ts +0 -361
- package/src/capacity/wham.ts +0 -84
- package/src/capacity/zai.ts +0 -237
- package/src/providers/claude/ClaudeAgentMapper.ts +0 -63
- package/src/providers/claude/ClaudeCodeAdapter.ts +0 -173
- package/src/providers/claude/ClaudeSessionLocator.ts +0 -358
- package/src/providers/claude/ClaudeSessionParser.ts +0 -432
- package/src/providers/codex/CodexAdapter.ts +0 -213
- package/src/providers/codex/CodexAgentMapper.ts +0 -35
- package/src/providers/codex/CodexSessionLocator.ts +0 -279
- package/src/providers/codex/CodexSessionMapping.ts +0 -89
- package/src/providers/codex/CodexSessionParser.ts +0 -385
- package/src/providers/copilot/CopilotAdapter.ts +0 -161
- package/src/providers/copilot/CopilotAgentMapper.ts +0 -36
- package/src/providers/copilot/CopilotSessionLocator.ts +0 -63
- package/src/providers/copilot/CopilotSessionParser.ts +0 -289
- package/src/providers/gemini/GeminiAgentMapper.ts +0 -36
- package/src/providers/gemini/GeminiCliAdapter.ts +0 -274
- package/src/providers/gemini/GeminiSessionLocator.ts +0 -183
- package/src/providers/gemini/GeminiSessionParser.ts +0 -271
- package/src/providers/grok/GrokAgentMapper.ts +0 -41
- package/src/providers/grok/GrokCliAdapter.ts +0 -125
- package/src/providers/grok/GrokSessionLocator.ts +0 -179
- package/src/providers/grok/GrokSessionParser.ts +0 -166
- package/src/providers/opencode/OpenCodeAdapter.ts +0 -116
- package/src/providers/opencode/OpenCodeAgentMapper.ts +0 -61
- package/src/providers/opencode/OpenCodeSessionLocator.ts +0 -151
- package/src/providers/opencode/OpenCodeSessionParser.ts +0 -145
- package/src/providers/pi/PiAdapter.ts +0 -195
- package/src/providers/pi/PiAgentMapper.ts +0 -36
- package/src/providers/pi/PiSessionLocator.ts +0 -110
- package/src/providers/pi/PiSessionParser.ts +0 -284
- package/src/providers/pi/PiSessionTracker.ts +0 -87
- package/src/readiness/AgentReadiness.ts +0 -730
- package/src/terminal/TmuxManager.ts +0 -123
- package/src/terminal/index.ts +0 -4
- package/src/utils/agents.ts +0 -75
- package/src/utils/index.ts +0 -12
- /package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.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/PiDurableAgentRepository.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
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { AgentStatus } from "../../adapters/AgentAdapter.js";
|
|
2
|
+
import { IncrementalJsonlSummary, reduceJsonlContent } from "../../utils/IncrementalJsonlSummary.js";
|
|
3
|
+
import { JsonlTailReader, normalizeTail } from "../../utils/jsonlTail.js";
|
|
4
|
+
import { safeReadFile, safeStat } from "../../utils/session.js";
|
|
5
|
+
import { flattenTextBlocks, isIdle, parseTimestamp } from "../shared.js";
|
|
6
|
+
export class AntigravitySessionParser {
|
|
7
|
+
/** Incremental reader backing `getConversation({ tail })`. */ tailReader = new JsonlTailReader();
|
|
8
|
+
sessionCache;
|
|
9
|
+
constructor(options = {}){
|
|
10
|
+
this.sessionCache = new IncrementalJsonlSummary(this.summaryReducer, {
|
|
11
|
+
bounds: options.summaryBounds
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Parse a conversation's transcript.jsonl into an {@link AntigravitySession}.
|
|
16
|
+
* Returns null when the transcript is missing — there is no real session to
|
|
17
|
+
* surface.
|
|
18
|
+
*/ readSession(conversationId, transcriptPath, projectPath) {
|
|
19
|
+
const stat = safeStat(transcriptPath);
|
|
20
|
+
if (!stat) return null;
|
|
21
|
+
const content = safeReadFile(transcriptPath);
|
|
22
|
+
const state = content === undefined ? {} : reduceJsonlContent(this.summaryReducer, content);
|
|
23
|
+
return this.toSession(conversationId, transcriptPath, projectPath, stat, stat.mtime, state);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Same result as `readSession`, but backed by a per-instance incremental
|
|
27
|
+
* cache so repeated refreshes only parse bytes appended since the last call.
|
|
28
|
+
* Call `pruneSessionCache()` once per refresh to evict files no longer read.
|
|
29
|
+
*
|
|
30
|
+
* The first read of a large transcript is a bounded head + tail scan (see
|
|
31
|
+
* `summaryReducer.skip`).
|
|
32
|
+
*/ readSessionIncremental(conversationId, transcriptPath, projectPath) {
|
|
33
|
+
const stat = safeStat(transcriptPath);
|
|
34
|
+
if (!stat) return null;
|
|
35
|
+
// Present but unreadable: surface the session without a summary, like readSession.
|
|
36
|
+
const result = this.sessionCache.read(transcriptPath);
|
|
37
|
+
return this.toSession(conversationId, transcriptPath, projectPath, stat, result?.mtime ?? stat.mtime, result?.state ?? {});
|
|
38
|
+
}
|
|
39
|
+
/** Evict cached summaries for files not read since the previous prune. */ pruneSessionCache() {
|
|
40
|
+
this.sessionCache.prune();
|
|
41
|
+
}
|
|
42
|
+
getConversation(transcriptPath, options) {
|
|
43
|
+
const verbose = options?.verbose ?? false;
|
|
44
|
+
const tail = normalizeTail(options?.tail);
|
|
45
|
+
if (tail === undefined) {
|
|
46
|
+
return this.parseTranscript(transcriptPath, verbose);
|
|
47
|
+
}
|
|
48
|
+
return this.tailReader.read(transcriptPath, tail, {
|
|
49
|
+
parseLine: (line)=>{
|
|
50
|
+
const record = this.parseRecord(line);
|
|
51
|
+
return record ? this.recordToMessage(record, verbose) : null;
|
|
52
|
+
}
|
|
53
|
+
}, String(verbose));
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* - past the idle threshold → IDLE
|
|
57
|
+
* - last turn is an assistant reply → WAITING (awaiting user)
|
|
58
|
+
* - otherwise (last turn was a user message, or unknown) → RUNNING
|
|
59
|
+
*/ determineStatus(session) {
|
|
60
|
+
if (isIdle(session.lastActive)) {
|
|
61
|
+
return AgentStatus.IDLE;
|
|
62
|
+
}
|
|
63
|
+
if (session.lastRole === "assistant") {
|
|
64
|
+
return AgentStatus.WAITING;
|
|
65
|
+
}
|
|
66
|
+
return AgentStatus.RUNNING;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Fold one transcript record into the O(1) summary: first/last user request,
|
|
70
|
+
* the role of the last user/assistant turn, and the latest `created_at`.
|
|
71
|
+
* Uses the same record rules as `getConversation` (see `recordToMessage`).
|
|
72
|
+
*
|
|
73
|
+
* `skip` (bounded cold start) keeps the head's first user request and resets
|
|
74
|
+
* the latest fields, so those come from the tail only; without a timestamp in
|
|
75
|
+
* the tail, `lastActive` falls back to the file mtime.
|
|
76
|
+
*/ summaryReducer = {
|
|
77
|
+
initial: ()=>({}),
|
|
78
|
+
reduce: (state, value)=>{
|
|
79
|
+
if (value === null || value === undefined) return state;
|
|
80
|
+
const record = value;
|
|
81
|
+
let next = state;
|
|
82
|
+
const atMs = parseTimestamp(record.created_at)?.getTime();
|
|
83
|
+
if (atMs !== undefined && (next.lastActiveMs === undefined || atMs > next.lastActiveMs)) {
|
|
84
|
+
next = {
|
|
85
|
+
...next,
|
|
86
|
+
lastActiveMs: atMs
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const message = this.recordToMessage(record, false);
|
|
90
|
+
if (message?.role === "user") {
|
|
91
|
+
return {
|
|
92
|
+
...next,
|
|
93
|
+
firstUserMessage: next.firstUserMessage ?? (next.pastHead ? undefined : message.content),
|
|
94
|
+
lastUserMessage: message.content,
|
|
95
|
+
lastRole: "user"
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
if (message?.role === "assistant") return {
|
|
99
|
+
...next,
|
|
100
|
+
lastRole: "assistant"
|
|
101
|
+
};
|
|
102
|
+
return next;
|
|
103
|
+
},
|
|
104
|
+
skip: (state)=>({
|
|
105
|
+
pastHead: true,
|
|
106
|
+
firstUserMessage: state.firstUserMessage
|
|
107
|
+
})
|
|
108
|
+
};
|
|
109
|
+
toSession(conversationId, transcriptPath, projectPath, stat, mtime, state) {
|
|
110
|
+
return {
|
|
111
|
+
sessionId: conversationId,
|
|
112
|
+
projectPath,
|
|
113
|
+
sessionFilePath: transcriptPath,
|
|
114
|
+
sessionStart: stat.birthtime,
|
|
115
|
+
lastActive: state.lastActiveMs === undefined ? mtime : new Date(state.lastActiveMs),
|
|
116
|
+
firstUserMessage: state.firstUserMessage,
|
|
117
|
+
lastUserMessage: state.lastUserMessage,
|
|
118
|
+
lastRole: state.lastRole
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/** Full pass over transcript.jsonl building every conversation turn. */ parseTranscript(transcriptPath, verbose) {
|
|
122
|
+
const content = safeReadFile(transcriptPath);
|
|
123
|
+
if (content === undefined) return [];
|
|
124
|
+
const messages = [];
|
|
125
|
+
for (const line of content.trim().split("\n")){
|
|
126
|
+
const record = this.parseRecord(line);
|
|
127
|
+
const message = record ? this.recordToMessage(record, verbose) : null;
|
|
128
|
+
if (message) messages.push(message);
|
|
129
|
+
}
|
|
130
|
+
return messages;
|
|
131
|
+
}
|
|
132
|
+
parseRecord(line) {
|
|
133
|
+
if (!line.trim()) return null;
|
|
134
|
+
try {
|
|
135
|
+
return JSON.parse(line);
|
|
136
|
+
} catch {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* USER_INPUT records are user turns and PLANNER_RESPONSE records are the
|
|
142
|
+
* model's reply. Everything else — MODEL tool calls (RUN_COMMAND, ...) and
|
|
143
|
+
* SYSTEM records (history, checkpoints) — is execution detail, shown as a
|
|
144
|
+
* system message only in verbose mode.
|
|
145
|
+
*/ recordToMessage(record, verbose) {
|
|
146
|
+
const text = flattenTextBlocks(record.content);
|
|
147
|
+
if (record.type === "USER_INPUT") {
|
|
148
|
+
const request = this.extractUserRequest(text);
|
|
149
|
+
return request === null ? null : {
|
|
150
|
+
role: "user",
|
|
151
|
+
content: request
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
if (!text) return null;
|
|
155
|
+
if (record.type === "PLANNER_RESPONSE") return {
|
|
156
|
+
role: "assistant",
|
|
157
|
+
content: text
|
|
158
|
+
};
|
|
159
|
+
return verbose ? {
|
|
160
|
+
role: "system",
|
|
161
|
+
content: text
|
|
162
|
+
} : null;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* The prompt inside <USER_REQUEST>...</USER_REQUEST>, or the whole trimmed
|
|
166
|
+
* text when the record has no wrapper. Null for an unwrapped blank record.
|
|
167
|
+
*/ extractUserRequest(text) {
|
|
168
|
+
const match = text.match(/<USER_REQUEST>\s*([\s\S]*?)\s*<\/USER_REQUEST>/);
|
|
169
|
+
if (match) return match[1].trim();
|
|
170
|
+
return text.trim() || null;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
//# sourceMappingURL=AntigravitySessionParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/harnesses/antigravity/AntigravitySessionParser.ts"],"sourcesContent":["import type { ConversationMessage, ConversationOptions } from \"../../adapters/AgentAdapter.js\";\nimport { AgentStatus } from \"../../adapters/AgentAdapter.js\";\nimport {\n IncrementalJsonlSummary,\n reduceJsonlContent,\n type JsonlSummaryBounds,\n type JsonlSummaryReducer,\n} from \"../../utils/IncrementalJsonlSummary.js\";\nimport { JsonlTailReader, normalizeTail } from \"../../utils/jsonlTail.js\";\nimport { safeReadFile, safeStat } from \"../../utils/session.js\";\nimport { flattenTextBlocks, isIdle, parseTimestamp } from \"../shared.js\";\n\n/** One line of transcript.jsonl. */\ninterface TranscriptRecord {\n source?: string;\n type?: string;\n created_at?: string;\n content?: unknown;\n}\n\n/** O(1) running summary folded from transcript records, never the turns themselves. */\ninterface AntigravitySummaryState {\n /** A bounded cold start skipped the middle: later lines are not the session's first. */\n pastHead?: boolean;\n firstUserMessage?: string;\n lastUserMessage?: string;\n lastRole?: ConversationMessage[\"role\"];\n /** Latest `created_at` seen, in epoch ms. */\n lastActiveMs?: number;\n}\n\n/** Parsed state for a single conversation. */\nexport interface AntigravitySession {\n sessionId: string;\n projectPath: string;\n sessionFilePath: string;\n sessionStart: Date;\n lastActive: Date;\n firstUserMessage?: string;\n lastUserMessage?: string;\n lastRole?: ConversationMessage[\"role\"];\n}\n\nexport interface AntigravitySessionParserOptions {\n /** Cold-start scan bounds for `readSessionIncremental` (see IncrementalJsonlSummary). */\n summaryBounds?: JsonlSummaryBounds | false;\n}\n\nexport class AntigravitySessionParser {\n /** Incremental reader backing `getConversation({ tail })`. */\n private readonly tailReader = new JsonlTailReader();\n\n private readonly sessionCache: IncrementalJsonlSummary<AntigravitySummaryState>;\n\n constructor(options: AntigravitySessionParserOptions = {}) {\n this.sessionCache = new IncrementalJsonlSummary(this.summaryReducer, {\n bounds: options.summaryBounds,\n });\n }\n\n /**\n * Parse a conversation's transcript.jsonl into an {@link AntigravitySession}.\n * Returns null when the transcript is missing — there is no real session to\n * surface.\n */\n readSession(\n conversationId: string,\n transcriptPath: string,\n projectPath: string,\n ): AntigravitySession | null {\n const stat = safeStat(transcriptPath);\n if (!stat) return null;\n\n const content = safeReadFile(transcriptPath);\n const state = content === undefined ? {} : reduceJsonlContent(this.summaryReducer, content);\n return this.toSession(conversationId, transcriptPath, projectPath, stat, stat.mtime, state);\n }\n\n /**\n * Same result as `readSession`, but backed by a per-instance incremental\n * cache so repeated refreshes only parse bytes appended since the last call.\n * Call `pruneSessionCache()` once per refresh to evict files no longer read.\n *\n * The first read of a large transcript is a bounded head + tail scan (see\n * `summaryReducer.skip`).\n */\n readSessionIncremental(\n conversationId: string,\n transcriptPath: string,\n projectPath: string,\n ): AntigravitySession | null {\n const stat = safeStat(transcriptPath);\n if (!stat) return null;\n\n // Present but unreadable: surface the session without a summary, like readSession.\n const result = this.sessionCache.read(transcriptPath);\n return this.toSession(\n conversationId,\n transcriptPath,\n projectPath,\n stat,\n result?.mtime ?? stat.mtime,\n result?.state ?? {},\n );\n }\n\n /** Evict cached summaries for files not read since the previous prune. */\n pruneSessionCache(): void {\n this.sessionCache.prune();\n }\n\n getConversation(transcriptPath: string, options?: ConversationOptions): ConversationMessage[] {\n const verbose = options?.verbose ?? false;\n const tail = normalizeTail(options?.tail);\n if (tail === undefined) {\n return this.parseTranscript(transcriptPath, verbose);\n }\n\n return this.tailReader.read(\n transcriptPath,\n tail,\n {\n parseLine: (line) => {\n const record = this.parseRecord(line);\n return record ? this.recordToMessage(record, verbose) : null;\n },\n },\n String(verbose),\n );\n }\n\n /**\n * - past the idle threshold → IDLE\n * - last turn is an assistant reply → WAITING (awaiting user)\n * - otherwise (last turn was a user message, or unknown) → RUNNING\n */\n determineStatus(session: AntigravitySession): AgentStatus {\n if (isIdle(session.lastActive)) {\n return AgentStatus.IDLE;\n }\n if (session.lastRole === \"assistant\") {\n return AgentStatus.WAITING;\n }\n return AgentStatus.RUNNING;\n }\n\n /**\n * Fold one transcript record into the O(1) summary: first/last user request,\n * the role of the last user/assistant turn, and the latest `created_at`.\n * Uses the same record rules as `getConversation` (see `recordToMessage`).\n *\n * `skip` (bounded cold start) keeps the head's first user request and resets\n * the latest fields, so those come from the tail only; without a timestamp in\n * the tail, `lastActive` falls back to the file mtime.\n */\n private readonly summaryReducer: JsonlSummaryReducer<AntigravitySummaryState> = {\n initial: () => ({}),\n reduce: (state, value) => {\n if (value === null || value === undefined) return state;\n const record = value as TranscriptRecord;\n\n let next = state;\n const atMs = parseTimestamp(record.created_at)?.getTime();\n if (atMs !== undefined && (next.lastActiveMs === undefined || atMs > next.lastActiveMs)) {\n next = { ...next, lastActiveMs: atMs };\n }\n\n const message = this.recordToMessage(record, false);\n if (message?.role === \"user\") {\n return {\n ...next,\n firstUserMessage: next.firstUserMessage ?? (next.pastHead ? undefined : message.content),\n lastUserMessage: message.content,\n lastRole: \"user\",\n };\n }\n if (message?.role === \"assistant\") return { ...next, lastRole: \"assistant\" };\n return next;\n },\n skip: (state) => ({ pastHead: true, firstUserMessage: state.firstUserMessage }),\n };\n\n private toSession(\n conversationId: string,\n transcriptPath: string,\n projectPath: string,\n stat: { birthtime: Date },\n mtime: Date,\n state: AntigravitySummaryState,\n ): AntigravitySession {\n return {\n sessionId: conversationId,\n projectPath,\n sessionFilePath: transcriptPath,\n sessionStart: stat.birthtime,\n lastActive: state.lastActiveMs === undefined ? mtime : new Date(state.lastActiveMs),\n firstUserMessage: state.firstUserMessage,\n lastUserMessage: state.lastUserMessage,\n lastRole: state.lastRole,\n };\n }\n\n /** Full pass over transcript.jsonl building every conversation turn. */\n private parseTranscript(transcriptPath: string, verbose: boolean): ConversationMessage[] {\n const content = safeReadFile(transcriptPath);\n if (content === undefined) return [];\n\n const messages: ConversationMessage[] = [];\n for (const line of content.trim().split(\"\\n\")) {\n const record = this.parseRecord(line);\n const message = record ? this.recordToMessage(record, verbose) : null;\n if (message) messages.push(message);\n }\n return messages;\n }\n\n private parseRecord(line: string): TranscriptRecord | null {\n if (!line.trim()) return null;\n try {\n return JSON.parse(line) as TranscriptRecord;\n } catch {\n return null;\n }\n }\n\n /**\n * USER_INPUT records are user turns and PLANNER_RESPONSE records are the\n * model's reply. Everything else — MODEL tool calls (RUN_COMMAND, ...) and\n * SYSTEM records (history, checkpoints) — is execution detail, shown as a\n * system message only in verbose mode.\n */\n private recordToMessage(record: TranscriptRecord, verbose: boolean): ConversationMessage | null {\n const text = flattenTextBlocks(record.content);\n if (record.type === \"USER_INPUT\") {\n const request = this.extractUserRequest(text);\n return request === null ? null : { role: \"user\", content: request };\n }\n if (!text) return null;\n if (record.type === \"PLANNER_RESPONSE\") return { role: \"assistant\", content: text };\n return verbose ? { role: \"system\", content: text } : null;\n }\n\n /**\n * The prompt inside <USER_REQUEST>...</USER_REQUEST>, or the whole trimmed\n * text when the record has no wrapper. Null for an unwrapped blank record.\n */\n private extractUserRequest(text: string): string | null {\n const match = text.match(/<USER_REQUEST>\\s*([\\s\\S]*?)\\s*<\\/USER_REQUEST>/);\n if (match) return match[1].trim();\n return text.trim() || null;\n }\n}\n"],"names":["AgentStatus","IncrementalJsonlSummary","reduceJsonlContent","JsonlTailReader","normalizeTail","safeReadFile","safeStat","flattenTextBlocks","isIdle","parseTimestamp","AntigravitySessionParser","tailReader","sessionCache","options","summaryReducer","bounds","summaryBounds","readSession","conversationId","transcriptPath","projectPath","stat","content","state","undefined","toSession","mtime","readSessionIncremental","result","read","pruneSessionCache","prune","getConversation","verbose","tail","parseTranscript","parseLine","line","record","parseRecord","recordToMessage","String","determineStatus","session","lastActive","IDLE","lastRole","WAITING","RUNNING","initial","reduce","value","next","atMs","created_at","getTime","lastActiveMs","message","role","firstUserMessage","pastHead","lastUserMessage","skip","sessionId","sessionFilePath","sessionStart","birthtime","Date","messages","trim","split","push","JSON","parse","text","type","request","extractUserRequest","match"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeAgentMapper.d.ts","sourceRoot":"","sources":["../../../src/harnesses/claude/ClaudeAgentMapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGnF,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,mBAA+C;IAEpF,iBAAiB,CAAC,EAChB,OAAO,EACP,WAAW,EACX,WAAW,EACX,QAAQ,GACT,EAAE,uBAAuB,GAAG,SAAS;IAwBtC,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS;CAGzD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { AgentStatus } from "../../adapters/AgentAdapter.js";
|
|
2
|
+
import { generateAgentName } from "../../utils/matching.js";
|
|
3
|
+
import { ClaudeSessionParser } from "./ClaudeSessionParser.js";
|
|
4
|
+
import { processOnlyAgent } from "../shared.js";
|
|
5
|
+
export class ClaudeAgentMapper {
|
|
6
|
+
parser;
|
|
7
|
+
constructor(parser = new ClaudeSessionParser()){
|
|
8
|
+
this.parser = parser;
|
|
9
|
+
}
|
|
10
|
+
mapSessionToAgent({ session, processInfo, sessionFile, liveInfo }) {
|
|
11
|
+
// Live PID-file status is authoritative when present — JSONL-derived
|
|
12
|
+
// status mis-classifies sessions whose latest entry is a UI-state
|
|
13
|
+
// event like `permission-mode` or `ai-title`.
|
|
14
|
+
const status = liveInfo?.pidStatus ?? this.parser.determineStatus(session);
|
|
15
|
+
const baseSummary = session.lastUserMessage || "Session started";
|
|
16
|
+
const summary = status === AgentStatus.WAITING && liveInfo?.waitingFor ? `${baseSummary} — waiting for ${liveInfo.waitingFor}` : baseSummary;
|
|
17
|
+
return {
|
|
18
|
+
name: generateAgentName(processInfo.cwd, processInfo.pid),
|
|
19
|
+
type: "claude",
|
|
20
|
+
status,
|
|
21
|
+
summary,
|
|
22
|
+
pid: processInfo.pid,
|
|
23
|
+
projectPath: sessionFile.resolvedCwd || processInfo.cwd || "",
|
|
24
|
+
sessionId: sessionFile.sessionId,
|
|
25
|
+
lastActive: session.lastActive,
|
|
26
|
+
sessionFilePath: sessionFile.filePath
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
mapProcessOnlyAgent(processInfo) {
|
|
30
|
+
return processOnlyAgent("claude", processInfo, {
|
|
31
|
+
summary: "Claude Code process running"
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=ClaudeAgentMapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/harnesses/claude/ClaudeAgentMapper.ts"],"sourcesContent":["import type { AgentInfo, ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport { AgentStatus } from \"../../adapters/AgentAdapter.js\";\nimport { generateAgentName } from \"../../utils/matching.js\";\nimport type { SessionFile } from \"../../utils/session.js\";\nimport { ClaudeSessionParser, type ClaudeSession } from \"./ClaudeSessionParser.js\";\nimport { processOnlyAgent } from \"../shared.js\";\n\nexport interface ClaudeAgentLiveInfo {\n pidStatus?: AgentStatus;\n waitingFor?: string;\n}\n\nexport interface ClaudeSessionAgentInput {\n session: ClaudeSession;\n processInfo: ProcessInfo;\n sessionFile: SessionFile;\n liveInfo?: ClaudeAgentLiveInfo;\n}\n\nexport class ClaudeAgentMapper {\n constructor(private readonly parser: ClaudeSessionParser = new ClaudeSessionParser()) {}\n\n mapSessionToAgent({\n session,\n processInfo,\n sessionFile,\n liveInfo,\n }: ClaudeSessionAgentInput): AgentInfo {\n // Live PID-file status is authoritative when present — JSONL-derived\n // status mis-classifies sessions whose latest entry is a UI-state\n // event like `permission-mode` or `ai-title`.\n const status = liveInfo?.pidStatus ?? this.parser.determineStatus(session);\n const baseSummary = session.lastUserMessage || \"Session started\";\n const summary =\n status === AgentStatus.WAITING && liveInfo?.waitingFor\n ? `${baseSummary} — waiting for ${liveInfo.waitingFor}`\n : baseSummary;\n\n return {\n name: generateAgentName(processInfo.cwd, processInfo.pid),\n type: \"claude\",\n status,\n summary,\n pid: processInfo.pid,\n projectPath: sessionFile.resolvedCwd || processInfo.cwd || \"\",\n sessionId: sessionFile.sessionId,\n lastActive: session.lastActive,\n sessionFilePath: sessionFile.filePath,\n };\n }\n\n mapProcessOnlyAgent(processInfo: ProcessInfo): AgentInfo {\n return processOnlyAgent(\"claude\", processInfo, { summary: \"Claude Code process running\" });\n }\n}\n"],"names":["AgentStatus","generateAgentName","ClaudeSessionParser","processOnlyAgent","ClaudeAgentMapper","parser","mapSessionToAgent","session","processInfo","sessionFile","liveInfo","status","pidStatus","determineStatus","baseSummary","lastUserMessage","summary","WAITING","waitingFor","name","cwd","pid","type","projectPath","resolvedCwd","sessionId","lastActive","sessionFilePath","filePath","mapProcessOnlyAgent"],"mappings":"AACA,SAASA,WAAW,QAAQ,iCAAiC;AAC7D,SAASC,iBAAiB,QAAQ,0BAA0B;AAE5D,SAASC,mBAAmB,QAA4B,2BAA2B;AACnF,SAASC,gBAAgB,QAAQ,eAAe;AAchD,OAAO,MAAMC;;IACX,YAAY,AAAiBC,SAA8B,IAAIH,qBAAqB,CAAE;aAAzDG,SAAAA;IAA0D;IAEvFC,kBAAkB,EAChBC,OAAO,EACPC,WAAW,EACXC,WAAW,EACXC,QAAQ,EACgB,EAAa;QACrC,qEAAqE;QACrE,kEAAkE;QAClE,8CAA8C;QAC9C,MAAMC,SAASD,UAAUE,aAAa,IAAI,CAACP,MAAM,CAACQ,eAAe,CAACN;QAClE,MAAMO,cAAcP,QAAQQ,eAAe,IAAI;QAC/C,MAAMC,UACJL,WAAWX,YAAYiB,OAAO,IAAIP,UAAUQ,aACxC,GAAGJ,YAAY,eAAe,EAAEJ,SAASQ,UAAU,EAAE,GACrDJ;QAEN,OAAO;YACLK,MAAMlB,kBAAkBO,YAAYY,GAAG,EAAEZ,YAAYa,GAAG;YACxDC,MAAM;YACNX;YACAK;YACAK,KAAKb,YAAYa,GAAG;YACpBE,aAAad,YAAYe,WAAW,IAAIhB,YAAYY,GAAG,IAAI;YAC3DK,WAAWhB,YAAYgB,SAAS;YAChCC,YAAYnB,QAAQmB,UAAU;YAC9BC,iBAAiBlB,YAAYmB,QAAQ;QACvC;IACF;IAEAC,oBAAoBrB,WAAwB,EAAa;QACvD,OAAOL,iBAAiB,UAAUK,aAAa;YAAEQ,SAAS;QAA8B;IAC1F;AACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage, ConversationOptions, SessionSummary, ListSessionsOptions, AgentDetectionContext } from "../../adapters/AgentAdapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* Claude Code Adapter
|
|
4
|
+
*
|
|
5
|
+
* Detects Claude Code agents by:
|
|
6
|
+
* 1. Filtering Claude processes from a shared asynchronous process snapshot
|
|
7
|
+
* 2. Using snapshot CWD and start-time enrichment
|
|
8
|
+
* 3. Attempting authoritative PID-file matching via ~/.claude/sessions/<pid>.json
|
|
9
|
+
* 4. Falling back to CWD+birthtime heuristic (matchProcessesToSessions) for processes without a PID file
|
|
10
|
+
* 5. Extracting summary from last user message in session JSONL (incrementally
|
|
11
|
+
* cached across refreshes, so unchanged transcripts are not re-read)
|
|
12
|
+
*/
|
|
13
|
+
export declare class ClaudeCodeAdapter implements AgentAdapter {
|
|
14
|
+
readonly type: "claude";
|
|
15
|
+
readonly processNames: readonly ["claude"];
|
|
16
|
+
private parser;
|
|
17
|
+
private mapper;
|
|
18
|
+
private projectsDir;
|
|
19
|
+
private sessionsDir;
|
|
20
|
+
constructor();
|
|
21
|
+
canHandle(processInfo: ProcessInfo): boolean;
|
|
22
|
+
detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]>;
|
|
23
|
+
private detectRunningAgents;
|
|
24
|
+
private createLocator;
|
|
25
|
+
getConversation(sessionFilePath: string, options?: ConversationOptions): ConversationMessage[];
|
|
26
|
+
listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;
|
|
27
|
+
findSessionsById(sessionId: string): Promise<SessionSummary[]>;
|
|
28
|
+
private toSessionSummary;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=ClaudeCodeAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeCodeAdapter.d.ts","sourceRoot":"","sources":["../../../src/harnesses/claude/ClaudeCodeAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAOxC;;;;;;;;;;GAUG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,QAAQ,CAAC,YAAY,sBAAuB;IAE5C,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;;IAS5B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAItC,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YAS3D,mBAAmB;IAoEjC,OAAO,CAAC,aAAa;IAOrB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE;IAIxF,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAenE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAOpE,OAAO,CAAC,gBAAgB;CAgBzB"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import { safeStat } from "../../utils/session.js";
|
|
3
|
+
import { ClaudeSessionParser } from "./ClaudeSessionParser.js";
|
|
4
|
+
import { ClaudeAgentMapper } from "./ClaudeAgentMapper.js";
|
|
5
|
+
import { ClaudeSessionLocator } from "./ClaudeSessionLocator.js";
|
|
6
|
+
import { findHarnessProcesses, homeDir, matchesExecutable } from "../shared.js";
|
|
7
|
+
/**
|
|
8
|
+
* Claude Code Adapter
|
|
9
|
+
*
|
|
10
|
+
* Detects Claude Code agents by:
|
|
11
|
+
* 1. Filtering Claude processes from a shared asynchronous process snapshot
|
|
12
|
+
* 2. Using snapshot CWD and start-time enrichment
|
|
13
|
+
* 3. Attempting authoritative PID-file matching via ~/.claude/sessions/<pid>.json
|
|
14
|
+
* 4. Falling back to CWD+birthtime heuristic (matchProcessesToSessions) for processes without a PID file
|
|
15
|
+
* 5. Extracting summary from last user message in session JSONL (incrementally
|
|
16
|
+
* cached across refreshes, so unchanged transcripts are not re-read)
|
|
17
|
+
*/ export class ClaudeCodeAdapter {
|
|
18
|
+
type = "claude";
|
|
19
|
+
processNames = [
|
|
20
|
+
"claude"
|
|
21
|
+
];
|
|
22
|
+
parser;
|
|
23
|
+
mapper;
|
|
24
|
+
projectsDir;
|
|
25
|
+
sessionsDir;
|
|
26
|
+
constructor(){
|
|
27
|
+
this.projectsDir = path.join(homeDir(), ".claude", "projects");
|
|
28
|
+
this.sessionsDir = path.join(homeDir(), ".claude", "sessions");
|
|
29
|
+
this.parser = new ClaudeSessionParser();
|
|
30
|
+
this.mapper = new ClaudeAgentMapper(this.parser);
|
|
31
|
+
}
|
|
32
|
+
canHandle(processInfo) {
|
|
33
|
+
return matchesExecutable(processInfo.command, "claude");
|
|
34
|
+
}
|
|
35
|
+
async detectAgents(context) {
|
|
36
|
+
try {
|
|
37
|
+
return await this.detectRunningAgents(context);
|
|
38
|
+
} finally{
|
|
39
|
+
// Drop cached summaries for sessions that were not part of this refresh
|
|
40
|
+
this.parser.pruneSessionCache();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async detectRunningAgents(context) {
|
|
44
|
+
const { processes } = await findHarnessProcesses(this, context);
|
|
45
|
+
if (processes.length === 0) {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
const { direct, legacyMatches } = this.createLocator().matchRunningProcesses(processes);
|
|
49
|
+
const matchedPids = new Set([
|
|
50
|
+
...direct.map((d)=>d.process.pid),
|
|
51
|
+
...legacyMatches.map((m)=>m.process.pid)
|
|
52
|
+
]);
|
|
53
|
+
const agents = [];
|
|
54
|
+
// Build agents from direct (resume + PID-file) matches
|
|
55
|
+
for (const match of direct){
|
|
56
|
+
const { process: proc, sessionFile } = match;
|
|
57
|
+
const sessionData = this.parser.readSessionIncremental(sessionFile.filePath, sessionFile.resolvedCwd);
|
|
58
|
+
if (sessionData) {
|
|
59
|
+
agents.push(this.mapper.mapSessionToAgent({
|
|
60
|
+
session: sessionData,
|
|
61
|
+
processInfo: proc,
|
|
62
|
+
sessionFile,
|
|
63
|
+
liveInfo: {
|
|
64
|
+
pidStatus: match.pidStatus,
|
|
65
|
+
waitingFor: match.waitingFor
|
|
66
|
+
}
|
|
67
|
+
}));
|
|
68
|
+
} else {
|
|
69
|
+
matchedPids.delete(proc.pid);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Build agents from legacy matches
|
|
73
|
+
for (const match of legacyMatches){
|
|
74
|
+
const sessionData = this.parser.readSessionIncremental(match.session.filePath, match.session.resolvedCwd);
|
|
75
|
+
if (sessionData) {
|
|
76
|
+
agents.push(this.mapper.mapSessionToAgent({
|
|
77
|
+
session: sessionData,
|
|
78
|
+
processInfo: match.process,
|
|
79
|
+
sessionFile: match.session
|
|
80
|
+
}));
|
|
81
|
+
} else {
|
|
82
|
+
matchedPids.delete(match.process.pid);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Any process with no match (direct or legacy) appears as IDLE
|
|
86
|
+
for (const proc of processes){
|
|
87
|
+
if (!matchedPids.has(proc.pid)) {
|
|
88
|
+
agents.push(this.mapper.mapProcessOnlyAgent(proc));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return agents;
|
|
92
|
+
}
|
|
93
|
+
createLocator() {
|
|
94
|
+
return new ClaudeSessionLocator({
|
|
95
|
+
projectsDir: this.projectsDir,
|
|
96
|
+
sessionsDir: this.sessionsDir
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
getConversation(sessionFilePath, options) {
|
|
100
|
+
return this.parser.getConversation(sessionFilePath, options);
|
|
101
|
+
}
|
|
102
|
+
async listSessions(opts) {
|
|
103
|
+
const filterCwd = opts?.cwd;
|
|
104
|
+
const candidates = this.createLocator().discoverHistoricalSessionFiles();
|
|
105
|
+
const summaries = [];
|
|
106
|
+
for (const { filePath, defaultCwd } of candidates){
|
|
107
|
+
const summary = this.toSessionSummary(filePath, defaultCwd);
|
|
108
|
+
if (!summary) continue;
|
|
109
|
+
if (filterCwd !== undefined && summary.cwd !== filterCwd) continue;
|
|
110
|
+
summaries.push(summary);
|
|
111
|
+
}
|
|
112
|
+
return summaries;
|
|
113
|
+
}
|
|
114
|
+
async findSessionsById(sessionId) {
|
|
115
|
+
return this.createLocator().findHistoricalSessionFilesById(sessionId).map(({ filePath, defaultCwd })=>this.toSessionSummary(filePath, defaultCwd)).filter((summary)=>summary?.sessionId === sessionId);
|
|
116
|
+
}
|
|
117
|
+
toSessionSummary(filePath, defaultCwd) {
|
|
118
|
+
const session = this.parser.readSession(filePath, defaultCwd);
|
|
119
|
+
if (!session?.lastEntryType) return null;
|
|
120
|
+
const recordedCwd = session.lastCwd || defaultCwd;
|
|
121
|
+
const stat = safeStat(filePath);
|
|
122
|
+
return {
|
|
123
|
+
type: "claude",
|
|
124
|
+
sessionId: session.sessionId,
|
|
125
|
+
cwd: recordedCwd,
|
|
126
|
+
firstUserMessage: session.firstUserMessage || "",
|
|
127
|
+
lastActive: session.lastActive ?? stat?.mtime ?? new Date(),
|
|
128
|
+
startedAt: session.sessionStart ?? stat?.birthtime ?? stat?.mtime ?? new Date(),
|
|
129
|
+
sessionFilePath: filePath
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
//# sourceMappingURL=ClaudeCodeAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/harnesses/claude/ClaudeCodeAdapter.ts"],"sourcesContent":["import * as path from \"path\";\nimport type {\n AgentAdapter,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n ConversationOptions,\n SessionSummary,\n ListSessionsOptions,\n AgentDetectionContext,\n} from \"../../adapters/AgentAdapter.js\";\nimport { safeStat } from \"../../utils/session.js\";\nimport { ClaudeSessionParser } from \"./ClaudeSessionParser.js\";\nimport { ClaudeAgentMapper } from \"./ClaudeAgentMapper.js\";\nimport { ClaudeSessionLocator } from \"./ClaudeSessionLocator.js\";\nimport { findHarnessProcesses, homeDir, matchesExecutable } from \"../shared.js\";\n\n/**\n * Claude Code Adapter\n *\n * Detects Claude Code agents by:\n * 1. Filtering Claude processes from a shared asynchronous process snapshot\n * 2. Using snapshot CWD and start-time enrichment\n * 3. Attempting authoritative PID-file matching via ~/.claude/sessions/<pid>.json\n * 4. Falling back to CWD+birthtime heuristic (matchProcessesToSessions) for processes without a PID file\n * 5. Extracting summary from last user message in session JSONL (incrementally\n * cached across refreshes, so unchanged transcripts are not re-read)\n */\nexport class ClaudeCodeAdapter implements AgentAdapter {\n readonly type = \"claude\" as const;\n readonly processNames = [\"claude\"] as const;\n\n private parser: ClaudeSessionParser;\n private mapper: ClaudeAgentMapper;\n private projectsDir: string;\n private sessionsDir: string;\n\n constructor() {\n this.projectsDir = path.join(homeDir(), \".claude\", \"projects\");\n this.sessionsDir = path.join(homeDir(), \".claude\", \"sessions\");\n this.parser = new ClaudeSessionParser();\n this.mapper = new ClaudeAgentMapper(this.parser);\n }\n\n canHandle(processInfo: ProcessInfo): boolean {\n return matchesExecutable(processInfo.command, \"claude\");\n }\n\n async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n try {\n return await this.detectRunningAgents(context);\n } finally {\n // Drop cached summaries for sessions that were not part of this refresh\n this.parser.pruneSessionCache();\n }\n }\n\n private async detectRunningAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n const { processes } = await findHarnessProcesses(this, context);\n if (processes.length === 0) {\n return [];\n }\n\n const { direct, legacyMatches } = this.createLocator().matchRunningProcesses(processes);\n\n const matchedPids = new Set([\n ...direct.map((d) => d.process.pid),\n ...legacyMatches.map((m) => m.process.pid),\n ]);\n\n const agents: AgentInfo[] = [];\n\n // Build agents from direct (resume + PID-file) matches\n for (const match of direct) {\n const { process: proc, sessionFile } = match;\n const sessionData = this.parser.readSessionIncremental(\n sessionFile.filePath,\n sessionFile.resolvedCwd,\n );\n if (sessionData) {\n agents.push(\n this.mapper.mapSessionToAgent({\n session: sessionData,\n processInfo: proc,\n sessionFile,\n liveInfo: {\n pidStatus: match.pidStatus,\n waitingFor: match.waitingFor,\n },\n }),\n );\n } else {\n matchedPids.delete(proc.pid);\n }\n }\n\n // Build agents from legacy matches\n for (const match of legacyMatches) {\n const sessionData = this.parser.readSessionIncremental(\n match.session.filePath,\n match.session.resolvedCwd,\n );\n if (sessionData) {\n agents.push(\n this.mapper.mapSessionToAgent({\n session: sessionData,\n processInfo: match.process,\n sessionFile: match.session,\n }),\n );\n } else {\n matchedPids.delete(match.process.pid);\n }\n }\n\n // Any process with no match (direct or legacy) appears as IDLE\n for (const proc of processes) {\n if (!matchedPids.has(proc.pid)) {\n agents.push(this.mapper.mapProcessOnlyAgent(proc));\n }\n }\n\n return agents;\n }\n\n private createLocator(): ClaudeSessionLocator {\n return new ClaudeSessionLocator({\n projectsDir: this.projectsDir,\n sessionsDir: this.sessionsDir,\n });\n }\n\n getConversation(sessionFilePath: string, options?: ConversationOptions): ConversationMessage[] {\n return this.parser.getConversation(sessionFilePath, options);\n }\n\n async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {\n const filterCwd = opts?.cwd;\n const candidates = this.createLocator().discoverHistoricalSessionFiles();\n const summaries: SessionSummary[] = [];\n\n for (const { filePath, defaultCwd } of candidates) {\n const summary = this.toSessionSummary(filePath, defaultCwd);\n if (!summary) continue;\n if (filterCwd !== undefined && summary.cwd !== filterCwd) continue;\n summaries.push(summary);\n }\n\n return summaries;\n }\n\n async findSessionsById(sessionId: string): Promise<SessionSummary[]> {\n return this.createLocator()\n .findHistoricalSessionFilesById(sessionId)\n .map(({ filePath, defaultCwd }) => this.toSessionSummary(filePath, defaultCwd))\n .filter((summary): summary is SessionSummary => summary?.sessionId === sessionId);\n }\n\n private toSessionSummary(filePath: string, defaultCwd: string): SessionSummary | null {\n const session = this.parser.readSession(filePath, defaultCwd);\n if (!session?.lastEntryType) return null;\n\n const recordedCwd = session.lastCwd || defaultCwd;\n const stat = safeStat(filePath);\n return {\n type: \"claude\",\n sessionId: session.sessionId,\n cwd: recordedCwd,\n firstUserMessage: session.firstUserMessage || \"\",\n lastActive: session.lastActive ?? stat?.mtime ?? new Date(),\n startedAt: session.sessionStart ?? stat?.birthtime ?? stat?.mtime ?? new Date(),\n sessionFilePath: filePath,\n };\n }\n}\n"],"names":["path","safeStat","ClaudeSessionParser","ClaudeAgentMapper","ClaudeSessionLocator","findHarnessProcesses","homeDir","matchesExecutable","ClaudeCodeAdapter","type","processNames","parser","mapper","projectsDir","sessionsDir","join","canHandle","processInfo","command","detectAgents","context","detectRunningAgents","pruneSessionCache","processes","length","direct","legacyMatches","createLocator","matchRunningProcesses","matchedPids","Set","map","d","process","pid","m","agents","match","proc","sessionFile","sessionData","readSessionIncremental","filePath","resolvedCwd","push","mapSessionToAgent","session","liveInfo","pidStatus","waitingFor","delete","has","mapProcessOnlyAgent","getConversation","sessionFilePath","options","listSessions","opts","filterCwd","cwd","candidates","discoverHistoricalSessionFiles","summaries","defaultCwd","summary","toSessionSummary","undefined","findSessionsById","sessionId","findHistoricalSessionFilesById","filter","readSession","lastEntryType","recordedCwd","lastCwd","stat","firstUserMessage","lastActive","mtime","Date","startedAt","sessionStart","birthtime"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClaudeSessionLocator.d.ts","sourceRoot":"","sources":["../../../src/harnesses/claude/ClaudeSessionLocator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAOL,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AA0BhC;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,aAAa,EAAE,WAAW,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,2BAA2B;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,OAAO,GAAE,2BAAgC;IAKrD;;;;;;;;;OASG;IACH,qBAAqB,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,2BAA2B;IAe5E;;;;;;;;;;OAUG;IACH,8BAA8B,IAAI,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAsBjF,8BAA8B,CAC5B,SAAS,EAAE,MAAM,GAChB,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAiBlD;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,aAAa;IAKrB;;;;;;OAMG;IACH,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IA6B7D;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IA8CzB,OAAO,CAAC,sBAAsB;IAK9B;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAapB;;;;;;;;;OASG;IACH,OAAO,CAAC,kBAAkB;CAsC3B"}
|