@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,140 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import { isDirectory, isSafePathSegment, safeReadFile, safeReaddir, safeStat } from "../../utils/session.js";
|
|
3
|
+
import { homeDir } from "../shared.js";
|
|
4
|
+
import { CHAT_HISTORY_FILE } from "./GrokSessionParser.js";
|
|
5
|
+
const ACTIVE_SESSIONS_FILE = "active_sessions.json";
|
|
6
|
+
const CWD_FILE = ".cwd";
|
|
7
|
+
export class GrokSessionLocator {
|
|
8
|
+
baseDir;
|
|
9
|
+
sessionsDir;
|
|
10
|
+
constructor(options = {}){
|
|
11
|
+
// GROK_HOME overrides the ~/.grok base directory; sessions live under
|
|
12
|
+
// <base>/sessions/ and the active-session registry at
|
|
13
|
+
// <base>/active_sessions.json.
|
|
14
|
+
this.baseDir = options.baseDir ?? (process.env.GROK_HOME || path.join(homeDir(), ".grok"));
|
|
15
|
+
this.sessionsDir = path.join(this.baseDir, "sessions");
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Pair live Grok processes with their session dirs.
|
|
19
|
+
*
|
|
20
|
+
* active_sessions.json is the authoritative pid -> cwd map for live
|
|
21
|
+
* sessions; the lsof-derived process cwd is only a fallback. The most
|
|
22
|
+
* recently active session under that cwd's group dir is picked.
|
|
23
|
+
*/ matchRunningProcesses(processes) {
|
|
24
|
+
const pidToCwd = this.readActiveSessions();
|
|
25
|
+
return processes.map((proc)=>{
|
|
26
|
+
const cwd = pidToCwd.get(proc.pid) || proc.cwd || "";
|
|
27
|
+
return {
|
|
28
|
+
process: proc,
|
|
29
|
+
cwd,
|
|
30
|
+
sessionDir: cwd ? this.latestSessionDir(cwd) : null
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/** Every session dir under ~/.grok/sessions/, across all project groups. */ discoverHistoricalSessionDirs() {
|
|
35
|
+
const results = [];
|
|
36
|
+
for (const { groupDir, defaultCwd } of this.listGroups()){
|
|
37
|
+
for (const sessionDir of this.listSessionDirs(groupDir)){
|
|
38
|
+
results.push({
|
|
39
|
+
sessionDir,
|
|
40
|
+
defaultCwd
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return results;
|
|
45
|
+
}
|
|
46
|
+
/** Session dirs named exactly `sessionId`, across all project groups. */ findHistoricalSessionDirsById(sessionId) {
|
|
47
|
+
if (!isSafePathSegment(sessionId)) return [];
|
|
48
|
+
const results = [];
|
|
49
|
+
for (const { groupDir, defaultCwd } of this.listGroups()){
|
|
50
|
+
const sessionDir = path.join(groupDir, sessionId);
|
|
51
|
+
if (isDirectory(sessionDir)) {
|
|
52
|
+
results.push({
|
|
53
|
+
sessionDir,
|
|
54
|
+
defaultCwd
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return results;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Read ~/.grok/active_sessions.json into a pid -> cwd map. Grok writes one
|
|
62
|
+
* { pid, cwd, opened_at } entry per running session and removes it on exit,
|
|
63
|
+
* so this is the reliable way to learn a live process's working directory.
|
|
64
|
+
*/ readActiveSessions() {
|
|
65
|
+
const map = new Map();
|
|
66
|
+
const content = safeReadFile(path.join(this.baseDir, ACTIVE_SESSIONS_FILE));
|
|
67
|
+
if (content === undefined) return map;
|
|
68
|
+
let entries;
|
|
69
|
+
try {
|
|
70
|
+
entries = JSON.parse(content);
|
|
71
|
+
} catch {
|
|
72
|
+
return map;
|
|
73
|
+
}
|
|
74
|
+
if (!Array.isArray(entries)) return map;
|
|
75
|
+
for (const entry of entries){
|
|
76
|
+
if (typeof entry?.pid === "number" && typeof entry?.cwd === "string" && entry.cwd) {
|
|
77
|
+
map.set(entry.pid, entry.cwd);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return map;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Return the most recently active session subdirectory for a cwd, i.e. the
|
|
84
|
+
* ~/.grok/sessions/<encodeURIComponent(cwd)>/<id>/ whose chat_history.jsonl
|
|
85
|
+
* was written last. Returns null when the group dir or any transcript is
|
|
86
|
+
* missing.
|
|
87
|
+
*/ latestSessionDir(cwd) {
|
|
88
|
+
const groupDir = path.join(this.sessionsDir, encodeURIComponent(cwd));
|
|
89
|
+
if (!isDirectory(groupDir)) return null;
|
|
90
|
+
let best = null;
|
|
91
|
+
for (const sessionDir of this.listSessionDirs(groupDir)){
|
|
92
|
+
const stat = safeStat(path.join(sessionDir, CHAT_HISTORY_FILE));
|
|
93
|
+
if (!stat) continue;
|
|
94
|
+
if (!best || stat.mtimeMs > best.mtimeMs) {
|
|
95
|
+
best = {
|
|
96
|
+
dir: sessionDir,
|
|
97
|
+
mtimeMs: stat.mtimeMs
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
return best?.dir ?? null;
|
|
102
|
+
}
|
|
103
|
+
listGroups() {
|
|
104
|
+
if (!isDirectory(this.sessionsDir)) return [];
|
|
105
|
+
const groups = [];
|
|
106
|
+
for (const groupName of safeReaddir(this.sessionsDir)){
|
|
107
|
+
const groupDir = path.join(this.sessionsDir, groupName);
|
|
108
|
+
if (!isDirectory(groupDir)) continue;
|
|
109
|
+
groups.push({
|
|
110
|
+
groupDir,
|
|
111
|
+
defaultCwd: this.decodeGroupCwd(groupName, groupDir)
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
return groups;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Full paths of the session subdirectories directly under a group dir,
|
|
118
|
+
* skipping any non-directory entries (e.g. prompt_history.jsonl).
|
|
119
|
+
*/ listSessionDirs(groupDir) {
|
|
120
|
+
return safeReaddir(groupDir).map((sessionId)=>path.join(groupDir, sessionId)).filter((sessionDir)=>isDirectory(sessionDir));
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Resolve the working directory a session group dir was created for.
|
|
124
|
+
*
|
|
125
|
+
* The common case is `decodeURIComponent(<group-name>)`. For paths whose
|
|
126
|
+
* encoded form exceeds the filesystem limit Grok uses a slug+hash and records
|
|
127
|
+
* the original path in a `.cwd` file inside the group — prefer that when
|
|
128
|
+
* present.
|
|
129
|
+
*/ decodeGroupCwd(groupName, groupDir) {
|
|
130
|
+
const fromFile = safeReadFile(path.join(groupDir, CWD_FILE));
|
|
131
|
+
if (fromFile !== undefined && fromFile.trim()) return fromFile.trim();
|
|
132
|
+
try {
|
|
133
|
+
return decodeURIComponent(groupName);
|
|
134
|
+
} catch {
|
|
135
|
+
return "";
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
//# sourceMappingURL=GrokSessionLocator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/harnesses/grok/GrokSessionLocator.ts"],"sourcesContent":["import * as path from \"path\";\nimport type { ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport {\n isDirectory,\n isSafePathSegment,\n safeReadFile,\n safeReaddir,\n safeStat,\n} from \"../../utils/session.js\";\nimport { homeDir } from \"../shared.js\";\nimport { CHAT_HISTORY_FILE } from \"./GrokSessionParser.js\";\n\nconst ACTIVE_SESSIONS_FILE = \"active_sessions.json\";\nconst CWD_FILE = \".cwd\";\n\n/** One entry of ~/.grok/active_sessions.json. */\ninterface ActiveSessionEntry {\n pid?: number;\n cwd?: string;\n opened_at?: number | string;\n}\n\n/** A live Grok process paired with its resolved cwd and (if any) session dir. */\nexport interface GrokProcessMatch {\n process: ProcessInfo;\n cwd: string;\n sessionDir: string | null;\n}\n\n/** A historical session dir plus the cwd decoded from its group dir. */\nexport interface GrokSessionDir {\n sessionDir: string;\n defaultCwd: string;\n}\n\nexport interface GrokSessionLocatorOptions {\n /** Overrides the ~/.grok base directory (defaults to GROK_HOME or ~/.grok). */\n baseDir?: string;\n}\n\nexport class GrokSessionLocator {\n private readonly baseDir: string;\n private readonly sessionsDir: string;\n\n constructor(options: GrokSessionLocatorOptions = {}) {\n // GROK_HOME overrides the ~/.grok base directory; sessions live under\n // <base>/sessions/ and the active-session registry at\n // <base>/active_sessions.json.\n this.baseDir = options.baseDir ?? (process.env.GROK_HOME || path.join(homeDir(), \".grok\"));\n this.sessionsDir = path.join(this.baseDir, \"sessions\");\n }\n\n /**\n * Pair live Grok processes with their session dirs.\n *\n * active_sessions.json is the authoritative pid -> cwd map for live\n * sessions; the lsof-derived process cwd is only a fallback. The most\n * recently active session under that cwd's group dir is picked.\n */\n matchRunningProcesses(processes: ProcessInfo[]): GrokProcessMatch[] {\n const pidToCwd = this.readActiveSessions();\n return processes.map((proc) => {\n const cwd = pidToCwd.get(proc.pid) || proc.cwd || \"\";\n return { process: proc, cwd, sessionDir: cwd ? this.latestSessionDir(cwd) : null };\n });\n }\n\n /** Every session dir under ~/.grok/sessions/, across all project groups. */\n discoverHistoricalSessionDirs(): GrokSessionDir[] {\n const results: GrokSessionDir[] = [];\n for (const { groupDir, defaultCwd } of this.listGroups()) {\n for (const sessionDir of this.listSessionDirs(groupDir)) {\n results.push({ sessionDir, defaultCwd });\n }\n }\n return results;\n }\n\n /** Session dirs named exactly `sessionId`, across all project groups. */\n findHistoricalSessionDirsById(sessionId: string): GrokSessionDir[] {\n if (!isSafePathSegment(sessionId)) return [];\n\n const results: GrokSessionDir[] = [];\n for (const { groupDir, defaultCwd } of this.listGroups()) {\n const sessionDir = path.join(groupDir, sessionId);\n if (isDirectory(sessionDir)) {\n results.push({ sessionDir, defaultCwd });\n }\n }\n return results;\n }\n\n /**\n * Read ~/.grok/active_sessions.json into a pid -> cwd map. Grok writes one\n * { pid, cwd, opened_at } entry per running session and removes it on exit,\n * so this is the reliable way to learn a live process's working directory.\n */\n private readActiveSessions(): Map<number, string> {\n const map = new Map<number, string>();\n const content = safeReadFile(path.join(this.baseDir, ACTIVE_SESSIONS_FILE));\n if (content === undefined) return map;\n\n let entries: unknown;\n try {\n entries = JSON.parse(content);\n } catch {\n return map;\n }\n if (!Array.isArray(entries)) return map;\n\n for (const entry of entries as ActiveSessionEntry[]) {\n if (typeof entry?.pid === \"number\" && typeof entry?.cwd === \"string\" && entry.cwd) {\n map.set(entry.pid, entry.cwd);\n }\n }\n return map;\n }\n\n /**\n * Return the most recently active session subdirectory for a cwd, i.e. the\n * ~/.grok/sessions/<encodeURIComponent(cwd)>/<id>/ whose chat_history.jsonl\n * was written last. Returns null when the group dir or any transcript is\n * missing.\n */\n private latestSessionDir(cwd: string): string | null {\n const groupDir = path.join(this.sessionsDir, encodeURIComponent(cwd));\n if (!isDirectory(groupDir)) return null;\n\n let best: { dir: string; mtimeMs: number } | null = null;\n for (const sessionDir of this.listSessionDirs(groupDir)) {\n const stat = safeStat(path.join(sessionDir, CHAT_HISTORY_FILE));\n if (!stat) continue;\n if (!best || stat.mtimeMs > best.mtimeMs) {\n best = { dir: sessionDir, mtimeMs: stat.mtimeMs };\n }\n }\n return best?.dir ?? null;\n }\n\n private listGroups(): Array<{ groupDir: string; defaultCwd: string }> {\n if (!isDirectory(this.sessionsDir)) return [];\n\n const groups: Array<{ groupDir: string; defaultCwd: string }> = [];\n for (const groupName of safeReaddir(this.sessionsDir)) {\n const groupDir = path.join(this.sessionsDir, groupName);\n if (!isDirectory(groupDir)) continue;\n groups.push({ groupDir, defaultCwd: this.decodeGroupCwd(groupName, groupDir) });\n }\n return groups;\n }\n\n /**\n * Full paths of the session subdirectories directly under a group dir,\n * skipping any non-directory entries (e.g. prompt_history.jsonl).\n */\n private listSessionDirs(groupDir: string): string[] {\n return safeReaddir(groupDir)\n .map((sessionId) => path.join(groupDir, sessionId))\n .filter((sessionDir) => isDirectory(sessionDir));\n }\n\n /**\n * Resolve the working directory a session group dir was created for.\n *\n * The common case is `decodeURIComponent(<group-name>)`. For paths whose\n * encoded form exceeds the filesystem limit Grok uses a slug+hash and records\n * the original path in a `.cwd` file inside the group — prefer that when\n * present.\n */\n private decodeGroupCwd(groupName: string, groupDir: string): string {\n const fromFile = safeReadFile(path.join(groupDir, CWD_FILE));\n if (fromFile !== undefined && fromFile.trim()) return fromFile.trim();\n try {\n return decodeURIComponent(groupName);\n } catch {\n return \"\";\n }\n }\n}\n"],"names":["path","isDirectory","isSafePathSegment","safeReadFile","safeReaddir","safeStat","homeDir","CHAT_HISTORY_FILE","ACTIVE_SESSIONS_FILE","CWD_FILE","GrokSessionLocator","baseDir","sessionsDir","options","process","env","GROK_HOME","join","matchRunningProcesses","processes","pidToCwd","readActiveSessions","map","proc","cwd","get","pid","sessionDir","latestSessionDir","discoverHistoricalSessionDirs","results","groupDir","defaultCwd","listGroups","listSessionDirs","push","findHistoricalSessionDirsById","sessionId","Map","content","undefined","entries","JSON","parse","Array","isArray","entry","set","encodeURIComponent","best","stat","mtimeMs","dir","groups","groupName","decodeGroupCwd","filter","fromFile","trim","decodeURIComponent"],"mappings":"AAAA,YAAYA,UAAU,OAAO;AAE7B,SACEC,WAAW,EACXC,iBAAiB,EACjBC,YAAY,EACZC,WAAW,EACXC,QAAQ,QACH,yBAAyB;AAChC,SAASC,OAAO,QAAQ,eAAe;AACvC,SAASC,iBAAiB,QAAQ,yBAAyB;AAE3D,MAAMC,uBAAuB;AAC7B,MAAMC,WAAW;AA2BjB,OAAO,MAAMC;IACMC,QAAgB;IAChBC,YAAoB;IAErC,YAAYC,UAAqC,CAAC,CAAC,CAAE;QACnD,sEAAsE;QACtE,sDAAsD;QACtD,+BAA+B;QAC/B,IAAI,CAACF,OAAO,GAAGE,QAAQF,OAAO,IAAKG,CAAAA,QAAQC,GAAG,CAACC,SAAS,IAAIhB,KAAKiB,IAAI,CAACX,WAAW,QAAO;QACxF,IAAI,CAACM,WAAW,GAAGZ,KAAKiB,IAAI,CAAC,IAAI,CAACN,OAAO,EAAE;IAC7C;IAEA;;;;;;GAMC,GACDO,sBAAsBC,SAAwB,EAAsB;QAClE,MAAMC,WAAW,IAAI,CAACC,kBAAkB;QACxC,OAAOF,UAAUG,GAAG,CAAC,CAACC;YACpB,MAAMC,MAAMJ,SAASK,GAAG,CAACF,KAAKG,GAAG,KAAKH,KAAKC,GAAG,IAAI;YAClD,OAAO;gBAAEV,SAASS;gBAAMC;gBAAKG,YAAYH,MAAM,IAAI,CAACI,gBAAgB,CAACJ,OAAO;YAAK;QACnF;IACF;IAEA,0EAA0E,GAC1EK,gCAAkD;QAChD,MAAMC,UAA4B,EAAE;QACpC,KAAK,MAAM,EAAEC,QAAQ,EAAEC,UAAU,EAAE,IAAI,IAAI,CAACC,UAAU,GAAI;YACxD,KAAK,MAAMN,cAAc,IAAI,CAACO,eAAe,CAACH,UAAW;gBACvDD,QAAQK,IAAI,CAAC;oBAAER;oBAAYK;gBAAW;YACxC;QACF;QACA,OAAOF;IACT;IAEA,uEAAuE,GACvEM,8BAA8BC,SAAiB,EAAoB;QACjE,IAAI,CAACnC,kBAAkBmC,YAAY,OAAO,EAAE;QAE5C,MAAMP,UAA4B,EAAE;QACpC,KAAK,MAAM,EAAEC,QAAQ,EAAEC,UAAU,EAAE,IAAI,IAAI,CAACC,UAAU,GAAI;YACxD,MAAMN,aAAa3B,KAAKiB,IAAI,CAACc,UAAUM;YACvC,IAAIpC,YAAY0B,aAAa;gBAC3BG,QAAQK,IAAI,CAAC;oBAAER;oBAAYK;gBAAW;YACxC;QACF;QACA,OAAOF;IACT;IAEA;;;;GAIC,GACD,AAAQT,qBAA0C;QAChD,MAAMC,MAAM,IAAIgB;QAChB,MAAMC,UAAUpC,aAAaH,KAAKiB,IAAI,CAAC,IAAI,CAACN,OAAO,EAAEH;QACrD,IAAI+B,YAAYC,WAAW,OAAOlB;QAElC,IAAImB;QACJ,IAAI;YACFA,UAAUC,KAAKC,KAAK,CAACJ;QACvB,EAAE,OAAM;YACN,OAAOjB;QACT;QACA,IAAI,CAACsB,MAAMC,OAAO,CAACJ,UAAU,OAAOnB;QAEpC,KAAK,MAAMwB,SAASL,QAAiC;YACnD,IAAI,OAAOK,OAAOpB,QAAQ,YAAY,OAAOoB,OAAOtB,QAAQ,YAAYsB,MAAMtB,GAAG,EAAE;gBACjFF,IAAIyB,GAAG,CAACD,MAAMpB,GAAG,EAAEoB,MAAMtB,GAAG;YAC9B;QACF;QACA,OAAOF;IACT;IAEA;;;;;GAKC,GACD,AAAQM,iBAAiBJ,GAAW,EAAiB;QACnD,MAAMO,WAAW/B,KAAKiB,IAAI,CAAC,IAAI,CAACL,WAAW,EAAEoC,mBAAmBxB;QAChE,IAAI,CAACvB,YAAY8B,WAAW,OAAO;QAEnC,IAAIkB,OAAgD;QACpD,KAAK,MAAMtB,cAAc,IAAI,CAACO,eAAe,CAACH,UAAW;YACvD,MAAMmB,OAAO7C,SAASL,KAAKiB,IAAI,CAACU,YAAYpB;YAC5C,IAAI,CAAC2C,MAAM;YACX,IAAI,CAACD,QAAQC,KAAKC,OAAO,GAAGF,KAAKE,OAAO,EAAE;gBACxCF,OAAO;oBAAEG,KAAKzB;oBAAYwB,SAASD,KAAKC,OAAO;gBAAC;YAClD;QACF;QACA,OAAOF,MAAMG,OAAO;IACtB;IAEQnB,aAA8D;QACpE,IAAI,CAAChC,YAAY,IAAI,CAACW,WAAW,GAAG,OAAO,EAAE;QAE7C,MAAMyC,SAA0D,EAAE;QAClE,KAAK,MAAMC,aAAalD,YAAY,IAAI,CAACQ,WAAW,EAAG;YACrD,MAAMmB,WAAW/B,KAAKiB,IAAI,CAAC,IAAI,CAACL,WAAW,EAAE0C;YAC7C,IAAI,CAACrD,YAAY8B,WAAW;YAC5BsB,OAAOlB,IAAI,CAAC;gBAAEJ;gBAAUC,YAAY,IAAI,CAACuB,cAAc,CAACD,WAAWvB;YAAU;QAC/E;QACA,OAAOsB;IACT;IAEA;;;GAGC,GACD,AAAQnB,gBAAgBH,QAAgB,EAAY;QAClD,OAAO3B,YAAY2B,UAChBT,GAAG,CAAC,CAACe,YAAcrC,KAAKiB,IAAI,CAACc,UAAUM,YACvCmB,MAAM,CAAC,CAAC7B,aAAe1B,YAAY0B;IACxC;IAEA;;;;;;;GAOC,GACD,AAAQ4B,eAAeD,SAAiB,EAAEvB,QAAgB,EAAU;QAClE,MAAM0B,WAAWtD,aAAaH,KAAKiB,IAAI,CAACc,UAAUtB;QAClD,IAAIgD,aAAajB,aAAaiB,SAASC,IAAI,IAAI,OAAOD,SAASC,IAAI;QACnE,IAAI;YACF,OAAOC,mBAAmBL;QAC5B,EAAE,OAAM;YACN,OAAO;QACT;IACF;AACF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { ConversationMessage, ConversationOptions } from "../../adapters/AgentAdapter.js";
|
|
2
|
+
import { AgentStatus } from "../../adapters/AgentAdapter.js";
|
|
3
|
+
import { type JsonlSummaryBounds } from "../../utils/IncrementalJsonlSummary.js";
|
|
4
|
+
export declare const CHAT_HISTORY_FILE = "chat_history.jsonl";
|
|
5
|
+
/** Parsed state for a single ~/.grok/sessions/<cwd>/<id>/ directory. */
|
|
6
|
+
export interface GrokSession {
|
|
7
|
+
sessionId: string;
|
|
8
|
+
projectPath: string;
|
|
9
|
+
sessionFilePath: string;
|
|
10
|
+
sessionStart: Date;
|
|
11
|
+
lastActive: Date;
|
|
12
|
+
firstUserMessage?: string;
|
|
13
|
+
lastUserMessage?: string;
|
|
14
|
+
lastRole?: ConversationMessage["role"];
|
|
15
|
+
}
|
|
16
|
+
export interface GrokSessionParserOptions {
|
|
17
|
+
/** Cold-start scan bounds for `readSessionIncremental` (see IncrementalJsonlSummary). */
|
|
18
|
+
summaryBounds?: JsonlSummaryBounds | false;
|
|
19
|
+
}
|
|
20
|
+
export declare class GrokSessionParser {
|
|
21
|
+
/** Incremental reader backing `getConversation({ tail })`. */
|
|
22
|
+
private readonly tailReader;
|
|
23
|
+
private readonly sessionCache;
|
|
24
|
+
constructor(options?: GrokSessionParserOptions);
|
|
25
|
+
/**
|
|
26
|
+
* Parse a session directory into a {@link GrokSession} from its
|
|
27
|
+
* chat_history.jsonl transcript. Returns null when the transcript is
|
|
28
|
+
* missing — i.e. there is no real session to surface.
|
|
29
|
+
*/
|
|
30
|
+
readSession(sessionDir: string, defaultCwd: string): GrokSession | null;
|
|
31
|
+
/**
|
|
32
|
+
* Same result as `readSession`, but backed by a per-instance incremental
|
|
33
|
+
* cache so repeated refreshes only parse bytes appended since the last call.
|
|
34
|
+
* Call `pruneSessionCache()` once per refresh to evict files no longer read.
|
|
35
|
+
*
|
|
36
|
+
* The first read of a large transcript is a bounded head + tail scan (see
|
|
37
|
+
* `summaryReducer.skip`); fields whose entries lie only in the skipped
|
|
38
|
+
* middle fall back to their defaults instead of forcing a full parse.
|
|
39
|
+
*/
|
|
40
|
+
readSessionIncremental(sessionDir: string, defaultCwd: string): GrokSession | null;
|
|
41
|
+
/** Evict cached summaries for files not read since the previous prune. */
|
|
42
|
+
pruneSessionCache(): void;
|
|
43
|
+
/** Accepts a session dir or an explicit chat_history.jsonl path. */
|
|
44
|
+
getConversation(sessionPath: string, options?: ConversationOptions): ConversationMessage[];
|
|
45
|
+
/**
|
|
46
|
+
* Determine agent status from parsed session state.
|
|
47
|
+
*
|
|
48
|
+
* - past the idle threshold → IDLE
|
|
49
|
+
* - last transcript turn is an assistant message → WAITING (awaiting user)
|
|
50
|
+
* - otherwise (last turn was a user message, or unknown) → RUNNING
|
|
51
|
+
*/
|
|
52
|
+
determineStatus(session: GrokSession): AgentStatus;
|
|
53
|
+
/**
|
|
54
|
+
* Fold one chat_history.jsonl entry into the O(1) summary. Uses the same
|
|
55
|
+
* record rules as `getConversation` (see `toMessage`), minus system records.
|
|
56
|
+
*
|
|
57
|
+
* `skip` (bounded cold start) keeps the head's first user message and
|
|
58
|
+
* clears the last user message and last role, so those come from the tail
|
|
59
|
+
* only. A first user message beyond the head stays undefined rather than
|
|
60
|
+
* being filled from the tail; latest fields before the tail window stay
|
|
61
|
+
* undefined.
|
|
62
|
+
*/
|
|
63
|
+
private readonly summaryReducer;
|
|
64
|
+
private toSession;
|
|
65
|
+
/** Full pass over chat_history.jsonl building every conversation turn. */
|
|
66
|
+
private parseChatHistory;
|
|
67
|
+
/**
|
|
68
|
+
* Map one parsed chat record to a conversation turn, or null to skip it.
|
|
69
|
+
* Each record is a { type: 'system' | 'user' | 'assistant', content } object
|
|
70
|
+
* where content is either a string or an array of { type: 'text', text } blocks.
|
|
71
|
+
*
|
|
72
|
+
* Grok wraps the real user prompt in <user_query>...</user_query>; the other
|
|
73
|
+
* user records are context injections (<user_info>, <system-reminder>, ...)
|
|
74
|
+
* and are skipped so the summary is the actual prompt, not boilerplate.
|
|
75
|
+
*/
|
|
76
|
+
private toMessage;
|
|
77
|
+
/** Convert one chat_history.jsonl line into a message, or null when it is not one. */
|
|
78
|
+
private lineToMessage;
|
|
79
|
+
/**
|
|
80
|
+
* Extract the prompt inside <user_query>...</user_query>. Returns null when
|
|
81
|
+
* the record has no such tag (a context injection rather than a prompt).
|
|
82
|
+
*/
|
|
83
|
+
private extractUserQuery;
|
|
84
|
+
/** Resolve a session dir or an explicit chat_history.jsonl path to the file. */
|
|
85
|
+
private resolveChatPath;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=GrokSessionParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GrokSessionParser.d.ts","sourceRoot":"","sources":["../../../src/harnesses/grok/GrokSessionParser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,wCAAwC,CAAC;AAKhD,eAAO,MAAM,iBAAiB,uBAAuB,CAAC;AAoBtD,wEAAwE;AACxE,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,wBAAwB;IACvC,yFAAyF;IACzF,aAAa,CAAC,EAAE,kBAAkB,GAAG,KAAK,CAAC;CAC5C;AAED,qBAAa,iBAAiB;IAC5B,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IAEpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4C;gBAE7D,OAAO,GAAE,wBAA6B;IAMlD;;;;OAIG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAUvE;;;;;;;;OAQG;IACH,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAWlF,0EAA0E;IAC1E,iBAAiB,IAAI,IAAI;IAIzB,oEAAoE;IACpE,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE;IAe1F;;;;;;OAMG;IACH,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW;IAUlD;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAiB7B;IAEF,OAAO,CAAC,SAAS;IAoBjB,0EAA0E;IAC1E,OAAO,CAAC,gBAAgB;IAYxB;;;;;;;;OAQG;IACH,OAAO,CAAC,SAAS;IAkBjB,sFAAsF;IACtF,OAAO,CAAC,aAAa;IAYrB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAKxB,gFAAgF;IAChF,OAAO,CAAC,eAAe;CAGxB"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import { AgentStatus } from "../../adapters/AgentAdapter.js";
|
|
3
|
+
import { IncrementalJsonlSummary, reduceJsonlContent } from "../../utils/IncrementalJsonlSummary.js";
|
|
4
|
+
import { JsonlTailReader, normalizeTail } from "../../utils/jsonlTail.js";
|
|
5
|
+
import { safeReadFile, safeStat } from "../../utils/session.js";
|
|
6
|
+
import { flattenTextBlocks, isIdle } from "../shared.js";
|
|
7
|
+
export const CHAT_HISTORY_FILE = "chat_history.jsonl";
|
|
8
|
+
export class GrokSessionParser {
|
|
9
|
+
/** Incremental reader backing `getConversation({ tail })`. */ tailReader = new JsonlTailReader();
|
|
10
|
+
sessionCache;
|
|
11
|
+
constructor(options = {}){
|
|
12
|
+
this.sessionCache = new IncrementalJsonlSummary(this.summaryReducer, {
|
|
13
|
+
bounds: options.summaryBounds
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parse a session directory into a {@link GrokSession} from its
|
|
18
|
+
* chat_history.jsonl transcript. Returns null when the transcript is
|
|
19
|
+
* missing — i.e. there is no real session to surface.
|
|
20
|
+
*/ readSession(sessionDir, defaultCwd) {
|
|
21
|
+
const chatPath = path.join(sessionDir, CHAT_HISTORY_FILE);
|
|
22
|
+
const chatStat = safeStat(chatPath);
|
|
23
|
+
if (!chatStat) return null;
|
|
24
|
+
const content = safeReadFile(chatPath);
|
|
25
|
+
const state = content === undefined ? {} : reduceJsonlContent(this.summaryReducer, content);
|
|
26
|
+
return this.toSession(sessionDir, defaultCwd, chatPath, chatStat.mtime, state);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Same result as `readSession`, but backed by a per-instance incremental
|
|
30
|
+
* cache so repeated refreshes only parse bytes appended since the last call.
|
|
31
|
+
* Call `pruneSessionCache()` once per refresh to evict files no longer read.
|
|
32
|
+
*
|
|
33
|
+
* The first read of a large transcript is a bounded head + tail scan (see
|
|
34
|
+
* `summaryReducer.skip`); fields whose entries lie only in the skipped
|
|
35
|
+
* middle fall back to their defaults instead of forcing a full parse.
|
|
36
|
+
*/ readSessionIncremental(sessionDir, defaultCwd) {
|
|
37
|
+
const chatPath = path.join(sessionDir, CHAT_HISTORY_FILE);
|
|
38
|
+
const result = this.sessionCache.read(chatPath);
|
|
39
|
+
if (result) {
|
|
40
|
+
return this.toSession(sessionDir, defaultCwd, chatPath, result.mtime, result.state);
|
|
41
|
+
}
|
|
42
|
+
// Present but unreadable: surface the session without a summary, like readSession.
|
|
43
|
+
const chatStat = safeStat(chatPath);
|
|
44
|
+
return chatStat ? this.toSession(sessionDir, defaultCwd, chatPath, chatStat.mtime, {}) : null;
|
|
45
|
+
}
|
|
46
|
+
/** Evict cached summaries for files not read since the previous prune. */ pruneSessionCache() {
|
|
47
|
+
this.sessionCache.prune();
|
|
48
|
+
}
|
|
49
|
+
/** Accepts a session dir or an explicit chat_history.jsonl path. */ getConversation(sessionPath, options) {
|
|
50
|
+
const chatPath = this.resolveChatPath(sessionPath);
|
|
51
|
+
const verbose = options?.verbose ?? false;
|
|
52
|
+
const tail = normalizeTail(options?.tail);
|
|
53
|
+
if (tail !== undefined) {
|
|
54
|
+
return this.tailReader.read(chatPath, tail, {
|
|
55
|
+
parseLine: (line)=>this.lineToMessage(line, verbose)
|
|
56
|
+
}, String(verbose));
|
|
57
|
+
}
|
|
58
|
+
return this.parseChatHistory(chatPath, verbose);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Determine agent status from parsed session state.
|
|
62
|
+
*
|
|
63
|
+
* - past the idle threshold → IDLE
|
|
64
|
+
* - last transcript turn is an assistant message → WAITING (awaiting user)
|
|
65
|
+
* - otherwise (last turn was a user message, or unknown) → RUNNING
|
|
66
|
+
*/ determineStatus(session) {
|
|
67
|
+
if (isIdle(session.lastActive)) {
|
|
68
|
+
return AgentStatus.IDLE;
|
|
69
|
+
}
|
|
70
|
+
if (session.lastRole === "assistant") {
|
|
71
|
+
return AgentStatus.WAITING;
|
|
72
|
+
}
|
|
73
|
+
return AgentStatus.RUNNING;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Fold one chat_history.jsonl entry into the O(1) summary. Uses the same
|
|
77
|
+
* record rules as `getConversation` (see `toMessage`), minus system records.
|
|
78
|
+
*
|
|
79
|
+
* `skip` (bounded cold start) keeps the head's first user message and
|
|
80
|
+
* clears the last user message and last role, so those come from the tail
|
|
81
|
+
* only. A first user message beyond the head stays undefined rather than
|
|
82
|
+
* being filled from the tail; latest fields before the tail window stay
|
|
83
|
+
* undefined.
|
|
84
|
+
*/ summaryReducer = {
|
|
85
|
+
initial: ()=>({}),
|
|
86
|
+
reduce: (state, value)=>{
|
|
87
|
+
const message = this.toMessage(value, false);
|
|
88
|
+
if (!message) return state;
|
|
89
|
+
if (message.role === "user") {
|
|
90
|
+
return {
|
|
91
|
+
...state,
|
|
92
|
+
firstUserMessage: state.firstUserMessage ?? (state.pastHead ? undefined : message.content),
|
|
93
|
+
lastUserMessage: message.content,
|
|
94
|
+
lastRole: "user"
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
...state,
|
|
99
|
+
lastRole: message.role
|
|
100
|
+
};
|
|
101
|
+
},
|
|
102
|
+
skip: (state)=>({
|
|
103
|
+
pastHead: true,
|
|
104
|
+
firstUserMessage: state.firstUserMessage
|
|
105
|
+
})
|
|
106
|
+
};
|
|
107
|
+
toSession(sessionDir, defaultCwd, chatPath, lastActive, state) {
|
|
108
|
+
const dirStat = safeStat(sessionDir);
|
|
109
|
+
return {
|
|
110
|
+
sessionId: path.basename(sessionDir),
|
|
111
|
+
projectPath: defaultCwd,
|
|
112
|
+
sessionFilePath: chatPath,
|
|
113
|
+
sessionStart: dirStat?.birthtime || lastActive,
|
|
114
|
+
lastActive,
|
|
115
|
+
firstUserMessage: state.firstUserMessage,
|
|
116
|
+
lastUserMessage: state.lastUserMessage,
|
|
117
|
+
lastRole: state.lastRole
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/** Full pass over chat_history.jsonl building every conversation turn. */ parseChatHistory(chatPath, verbose) {
|
|
121
|
+
const content = safeReadFile(chatPath);
|
|
122
|
+
if (content === undefined) return [];
|
|
123
|
+
const messages = [];
|
|
124
|
+
for (const line of content.trim().split("\n")){
|
|
125
|
+
const message = this.lineToMessage(line, verbose);
|
|
126
|
+
if (message) messages.push(message);
|
|
127
|
+
}
|
|
128
|
+
return messages;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Map one parsed chat record to a conversation turn, or null to skip it.
|
|
132
|
+
* Each record is a { type: 'system' | 'user' | 'assistant', content } object
|
|
133
|
+
* where content is either a string or an array of { type: 'text', text } blocks.
|
|
134
|
+
*
|
|
135
|
+
* Grok wraps the real user prompt in <user_query>...</user_query>; the other
|
|
136
|
+
* user records are context injections (<user_info>, <system-reminder>, ...)
|
|
137
|
+
* and are skipped so the summary is the actual prompt, not boilerplate.
|
|
138
|
+
*/ toMessage(value, verbose) {
|
|
139
|
+
if (!value || typeof value !== "object") return null;
|
|
140
|
+
const record = value;
|
|
141
|
+
const text = flattenTextBlocks(record.content);
|
|
142
|
+
if (record.type === "user") {
|
|
143
|
+
const query = this.extractUserQuery(text);
|
|
144
|
+
return query === null ? null : {
|
|
145
|
+
role: "user",
|
|
146
|
+
content: query
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (record.type === "assistant") {
|
|
150
|
+
return text ? {
|
|
151
|
+
role: "assistant",
|
|
152
|
+
content: text
|
|
153
|
+
} : null;
|
|
154
|
+
}
|
|
155
|
+
if (verbose && record.type === "system") {
|
|
156
|
+
return text ? {
|
|
157
|
+
role: "system",
|
|
158
|
+
content: text
|
|
159
|
+
} : null;
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
/** Convert one chat_history.jsonl line into a message, or null when it is not one. */ lineToMessage(line, verbose) {
|
|
164
|
+
if (!line.trim()) return null;
|
|
165
|
+
let record;
|
|
166
|
+
try {
|
|
167
|
+
record = JSON.parse(line);
|
|
168
|
+
} catch {
|
|
169
|
+
return null;
|
|
170
|
+
}
|
|
171
|
+
return this.toMessage(record, verbose);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Extract the prompt inside <user_query>...</user_query>. Returns null when
|
|
175
|
+
* the record has no such tag (a context injection rather than a prompt).
|
|
176
|
+
*/ extractUserQuery(text) {
|
|
177
|
+
const match = text.match(/<user_query>\s*([\s\S]*?)\s*<\/user_query>/);
|
|
178
|
+
return match ? match[1].trim() : null;
|
|
179
|
+
}
|
|
180
|
+
/** Resolve a session dir or an explicit chat_history.jsonl path to the file. */ resolveChatPath(sessionPath) {
|
|
181
|
+
return sessionPath.endsWith(".jsonl") ? sessionPath : path.join(sessionPath, CHAT_HISTORY_FILE);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
//# sourceMappingURL=GrokSessionParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/harnesses/grok/GrokSessionParser.ts"],"sourcesContent":["import * as path from \"path\";\nimport 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 } from \"../shared.js\";\n\nexport const CHAT_HISTORY_FILE = \"chat_history.jsonl\";\n\n/** One line of chat_history.jsonl. */\ninterface ChatRecord {\n type?: string;\n content?: unknown;\n}\n\n/**\n * O(1) running summary folded from chat records: only the first/last real\n * prompt and the role of the last user/assistant turn, never the turns.\n */\ninterface GrokSummaryState {\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}\n\n/** Parsed state for a single ~/.grok/sessions/<cwd>/<id>/ directory. */\nexport interface GrokSession {\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 GrokSessionParserOptions {\n /** Cold-start scan bounds for `readSessionIncremental` (see IncrementalJsonlSummary). */\n summaryBounds?: JsonlSummaryBounds | false;\n}\n\nexport class GrokSessionParser {\n /** Incremental reader backing `getConversation({ tail })`. */\n private readonly tailReader = new JsonlTailReader();\n\n private readonly sessionCache: IncrementalJsonlSummary<GrokSummaryState>;\n\n constructor(options: GrokSessionParserOptions = {}) {\n this.sessionCache = new IncrementalJsonlSummary(this.summaryReducer, {\n bounds: options.summaryBounds,\n });\n }\n\n /**\n * Parse a session directory into a {@link GrokSession} from its\n * chat_history.jsonl transcript. Returns null when the transcript is\n * missing — i.e. there is no real session to surface.\n */\n readSession(sessionDir: string, defaultCwd: string): GrokSession | null {\n const chatPath = path.join(sessionDir, CHAT_HISTORY_FILE);\n const chatStat = safeStat(chatPath);\n if (!chatStat) return null;\n\n const content = safeReadFile(chatPath);\n const state = content === undefined ? {} : reduceJsonlContent(this.summaryReducer, content);\n return this.toSession(sessionDir, defaultCwd, chatPath, chatStat.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`); fields whose entries lie only in the skipped\n * middle fall back to their defaults instead of forcing a full parse.\n */\n readSessionIncremental(sessionDir: string, defaultCwd: string): GrokSession | null {\n const chatPath = path.join(sessionDir, CHAT_HISTORY_FILE);\n const result = this.sessionCache.read(chatPath);\n if (result) {\n return this.toSession(sessionDir, defaultCwd, chatPath, result.mtime, result.state);\n }\n // Present but unreadable: surface the session without a summary, like readSession.\n const chatStat = safeStat(chatPath);\n return chatStat ? this.toSession(sessionDir, defaultCwd, chatPath, chatStat.mtime, {}) : null;\n }\n\n /** Evict cached summaries for files not read since the previous prune. */\n pruneSessionCache(): void {\n this.sessionCache.prune();\n }\n\n /** Accepts a session dir or an explicit chat_history.jsonl path. */\n getConversation(sessionPath: string, options?: ConversationOptions): ConversationMessage[] {\n const chatPath = this.resolveChatPath(sessionPath);\n const verbose = options?.verbose ?? false;\n const tail = normalizeTail(options?.tail);\n if (tail !== undefined) {\n return this.tailReader.read(\n chatPath,\n tail,\n { parseLine: (line) => this.lineToMessage(line, verbose) },\n String(verbose),\n );\n }\n return this.parseChatHistory(chatPath, verbose);\n }\n\n /**\n * Determine agent status from parsed session state.\n *\n * - past the idle threshold → IDLE\n * - last transcript turn is an assistant message → WAITING (awaiting user)\n * - otherwise (last turn was a user message, or unknown) → RUNNING\n */\n determineStatus(session: GrokSession): 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 chat_history.jsonl entry into the O(1) summary. Uses the same\n * record rules as `getConversation` (see `toMessage`), minus system records.\n *\n * `skip` (bounded cold start) keeps the head's first user message and\n * clears the last user message and last role, so those come from the tail\n * only. A first user message beyond the head stays undefined rather than\n * being filled from the tail; latest fields before the tail window stay\n * undefined.\n */\n private readonly summaryReducer: JsonlSummaryReducer<GrokSummaryState> = {\n initial: () => ({}),\n reduce: (state, value) => {\n const message = this.toMessage(value, false);\n if (!message) return state;\n if (message.role === \"user\") {\n return {\n ...state,\n firstUserMessage:\n state.firstUserMessage ?? (state.pastHead ? undefined : message.content),\n lastUserMessage: message.content,\n lastRole: \"user\",\n };\n }\n return { ...state, lastRole: message.role };\n },\n skip: (state) => ({ pastHead: true, firstUserMessage: state.firstUserMessage }),\n };\n\n private toSession(\n sessionDir: string,\n defaultCwd: string,\n chatPath: string,\n lastActive: Date,\n state: GrokSummaryState,\n ): GrokSession {\n const dirStat = safeStat(sessionDir);\n return {\n sessionId: path.basename(sessionDir),\n projectPath: defaultCwd,\n sessionFilePath: chatPath,\n sessionStart: dirStat?.birthtime || lastActive,\n lastActive,\n firstUserMessage: state.firstUserMessage,\n lastUserMessage: state.lastUserMessage,\n lastRole: state.lastRole,\n };\n }\n\n /** Full pass over chat_history.jsonl building every conversation turn. */\n private parseChatHistory(chatPath: string, verbose: boolean): ConversationMessage[] {\n const content = safeReadFile(chatPath);\n if (content === undefined) return [];\n\n const messages: ConversationMessage[] = [];\n for (const line of content.trim().split(\"\\n\")) {\n const message = this.lineToMessage(line, verbose);\n if (message) messages.push(message);\n }\n return messages;\n }\n\n /**\n * Map one parsed chat record to a conversation turn, or null to skip it.\n * Each record is a { type: 'system' | 'user' | 'assistant', content } object\n * where content is either a string or an array of { type: 'text', text } blocks.\n *\n * Grok wraps the real user prompt in <user_query>...</user_query>; the other\n * user records are context injections (<user_info>, <system-reminder>, ...)\n * and are skipped so the summary is the actual prompt, not boilerplate.\n */\n private toMessage(value: unknown, verbose: boolean): ConversationMessage | null {\n if (!value || typeof value !== \"object\") return null;\n const record = value as ChatRecord;\n\n const text = flattenTextBlocks(record.content);\n if (record.type === \"user\") {\n const query = this.extractUserQuery(text);\n return query === null ? null : { role: \"user\", content: query };\n }\n if (record.type === \"assistant\") {\n return text ? { role: \"assistant\", content: text } : null;\n }\n if (verbose && record.type === \"system\") {\n return text ? { role: \"system\", content: text } : null;\n }\n return null;\n }\n\n /** Convert one chat_history.jsonl line into a message, or null when it is not one. */\n private lineToMessage(line: string, verbose: boolean): ConversationMessage | null {\n if (!line.trim()) return null;\n\n let record: unknown;\n try {\n record = JSON.parse(line);\n } catch {\n return null;\n }\n return this.toMessage(record, verbose);\n }\n\n /**\n * Extract the prompt inside <user_query>...</user_query>. Returns null when\n * the record has no such tag (a context injection rather than a prompt).\n */\n private extractUserQuery(text: string): string | null {\n const match = text.match(/<user_query>\\s*([\\s\\S]*?)\\s*<\\/user_query>/);\n return match ? match[1].trim() : null;\n }\n\n /** Resolve a session dir or an explicit chat_history.jsonl path to the file. */\n private resolveChatPath(sessionPath: string): string {\n return sessionPath.endsWith(\".jsonl\") ? sessionPath : path.join(sessionPath, CHAT_HISTORY_FILE);\n }\n}\n"],"names":["path","AgentStatus","IncrementalJsonlSummary","reduceJsonlContent","JsonlTailReader","normalizeTail","safeReadFile","safeStat","flattenTextBlocks","isIdle","CHAT_HISTORY_FILE","GrokSessionParser","tailReader","sessionCache","options","summaryReducer","bounds","summaryBounds","readSession","sessionDir","defaultCwd","chatPath","join","chatStat","content","state","undefined","toSession","mtime","readSessionIncremental","result","read","pruneSessionCache","prune","getConversation","sessionPath","resolveChatPath","verbose","tail","parseLine","line","lineToMessage","String","parseChatHistory","determineStatus","session","lastActive","IDLE","lastRole","WAITING","RUNNING","initial","reduce","value","message","toMessage","role","firstUserMessage","pastHead","lastUserMessage","skip","dirStat","sessionId","basename","projectPath","sessionFilePath","sessionStart","birthtime","messages","trim","split","push","record","text","type","query","extractUserQuery","JSON","parse","match","endsWith"],"mappings":"AAAA,YAAYA,UAAU,OAAO;AAE7B,SAASC,WAAW,QAAQ,iCAAiC;AAC7D,SACEC,uBAAuB,EACvBC,kBAAkB,QAGb,yCAAyC;AAChD,SAASC,eAAe,EAAEC,aAAa,QAAQ,2BAA2B;AAC1E,SAASC,YAAY,EAAEC,QAAQ,QAAQ,yBAAyB;AAChE,SAASC,iBAAiB,EAAEC,MAAM,QAAQ,eAAe;AAEzD,OAAO,MAAMC,oBAAoB,qBAAqB;AAqCtD,OAAO,MAAMC;IACX,4DAA4D,GAC5D,AAAiBC,aAAa,IAAIR,kBAAkB;IAEnCS,aAAwD;IAEzE,YAAYC,UAAoC,CAAC,CAAC,CAAE;QAClD,IAAI,CAACD,YAAY,GAAG,IAAIX,wBAAwB,IAAI,CAACa,cAAc,EAAE;YACnEC,QAAQF,QAAQG,aAAa;QAC/B;IACF;IAEA;;;;GAIC,GACDC,YAAYC,UAAkB,EAAEC,UAAkB,EAAsB;QACtE,MAAMC,WAAWrB,KAAKsB,IAAI,CAACH,YAAYT;QACvC,MAAMa,WAAWhB,SAASc;QAC1B,IAAI,CAACE,UAAU,OAAO;QAEtB,MAAMC,UAAUlB,aAAae;QAC7B,MAAMI,QAAQD,YAAYE,YAAY,CAAC,IAAIvB,mBAAmB,IAAI,CAACY,cAAc,EAAES;QACnF,OAAO,IAAI,CAACG,SAAS,CAACR,YAAYC,YAAYC,UAAUE,SAASK,KAAK,EAAEH;IAC1E;IAEA;;;;;;;;GAQC,GACDI,uBAAuBV,UAAkB,EAAEC,UAAkB,EAAsB;QACjF,MAAMC,WAAWrB,KAAKsB,IAAI,CAACH,YAAYT;QACvC,MAAMoB,SAAS,IAAI,CAACjB,YAAY,CAACkB,IAAI,CAACV;QACtC,IAAIS,QAAQ;YACV,OAAO,IAAI,CAACH,SAAS,CAACR,YAAYC,YAAYC,UAAUS,OAAOF,KAAK,EAAEE,OAAOL,KAAK;QACpF;QACA,mFAAmF;QACnF,MAAMF,WAAWhB,SAASc;QAC1B,OAAOE,WAAW,IAAI,CAACI,SAAS,CAACR,YAAYC,YAAYC,UAAUE,SAASK,KAAK,EAAE,CAAC,KAAK;IAC3F;IAEA,wEAAwE,GACxEI,oBAA0B;QACxB,IAAI,CAACnB,YAAY,CAACoB,KAAK;IACzB;IAEA,kEAAkE,GAClEC,gBAAgBC,WAAmB,EAAErB,OAA6B,EAAyB;QACzF,MAAMO,WAAW,IAAI,CAACe,eAAe,CAACD;QACtC,MAAME,UAAUvB,SAASuB,WAAW;QACpC,MAAMC,OAAOjC,cAAcS,SAASwB;QACpC,IAAIA,SAASZ,WAAW;YACtB,OAAO,IAAI,CAACd,UAAU,CAACmB,IAAI,CACzBV,UACAiB,MACA;gBAAEC,WAAW,CAACC,OAAS,IAAI,CAACC,aAAa,CAACD,MAAMH;YAAS,GACzDK,OAAOL;QAEX;QACA,OAAO,IAAI,CAACM,gBAAgB,CAACtB,UAAUgB;IACzC;IAEA;;;;;;GAMC,GACDO,gBAAgBC,OAAoB,EAAe;QACjD,IAAIpC,OAAOoC,QAAQC,UAAU,GAAG;YAC9B,OAAO7C,YAAY8C,IAAI;QACzB;QACA,IAAIF,QAAQG,QAAQ,KAAK,aAAa;YACpC,OAAO/C,YAAYgD,OAAO;QAC5B;QACA,OAAOhD,YAAYiD,OAAO;IAC5B;IAEA;;;;;;;;;GASC,GACD,AAAiBnC,iBAAwD;QACvEoC,SAAS,IAAO,CAAA,CAAC,CAAA;QACjBC,QAAQ,CAAC3B,OAAO4B;YACd,MAAMC,UAAU,IAAI,CAACC,SAAS,CAACF,OAAO;YACtC,IAAI,CAACC,SAAS,OAAO7B;YACrB,IAAI6B,QAAQE,IAAI,KAAK,QAAQ;gBAC3B,OAAO;oBACL,GAAG/B,KAAK;oBACRgC,kBACEhC,MAAMgC,gBAAgB,IAAKhC,CAAAA,MAAMiC,QAAQ,GAAGhC,YAAY4B,QAAQ9B,OAAO,AAAD;oBACxEmC,iBAAiBL,QAAQ9B,OAAO;oBAChCwB,UAAU;gBACZ;YACF;YACA,OAAO;gBAAE,GAAGvB,KAAK;gBAAEuB,UAAUM,QAAQE,IAAI;YAAC;QAC5C;QACAI,MAAM,CAACnC,QAAW,CAAA;gBAAEiC,UAAU;gBAAMD,kBAAkBhC,MAAMgC,gBAAgB;YAAC,CAAA;IAC/E,EAAE;IAEM9B,UACNR,UAAkB,EAClBC,UAAkB,EAClBC,QAAgB,EAChByB,UAAgB,EAChBrB,KAAuB,EACV;QACb,MAAMoC,UAAUtD,SAASY;QACzB,OAAO;YACL2C,WAAW9D,KAAK+D,QAAQ,CAAC5C;YACzB6C,aAAa5C;YACb6C,iBAAiB5C;YACjB6C,cAAcL,SAASM,aAAarB;YACpCA;YACAW,kBAAkBhC,MAAMgC,gBAAgB;YACxCE,iBAAiBlC,MAAMkC,eAAe;YACtCX,UAAUvB,MAAMuB,QAAQ;QAC1B;IACF;IAEA,wEAAwE,GACxE,AAAQL,iBAAiBtB,QAAgB,EAAEgB,OAAgB,EAAyB;QAClF,MAAMb,UAAUlB,aAAae;QAC7B,IAAIG,YAAYE,WAAW,OAAO,EAAE;QAEpC,MAAM0C,WAAkC,EAAE;QAC1C,KAAK,MAAM5B,QAAQhB,QAAQ6C,IAAI,GAAGC,KAAK,CAAC,MAAO;YAC7C,MAAMhB,UAAU,IAAI,CAACb,aAAa,CAACD,MAAMH;YACzC,IAAIiB,SAASc,SAASG,IAAI,CAACjB;QAC7B;QACA,OAAOc;IACT;IAEA;;;;;;;;GAQC,GACD,AAAQb,UAAUF,KAAc,EAAEhB,OAAgB,EAA8B;QAC9E,IAAI,CAACgB,SAAS,OAAOA,UAAU,UAAU,OAAO;QAChD,MAAMmB,SAASnB;QAEf,MAAMoB,OAAOjE,kBAAkBgE,OAAOhD,OAAO;QAC7C,IAAIgD,OAAOE,IAAI,KAAK,QAAQ;YAC1B,MAAMC,QAAQ,IAAI,CAACC,gBAAgB,CAACH;YACpC,OAAOE,UAAU,OAAO,OAAO;gBAAEnB,MAAM;gBAAQhC,SAASmD;YAAM;QAChE;QACA,IAAIH,OAAOE,IAAI,KAAK,aAAa;YAC/B,OAAOD,OAAO;gBAAEjB,MAAM;gBAAahC,SAASiD;YAAK,IAAI;QACvD;QACA,IAAIpC,WAAWmC,OAAOE,IAAI,KAAK,UAAU;YACvC,OAAOD,OAAO;gBAAEjB,MAAM;gBAAUhC,SAASiD;YAAK,IAAI;QACpD;QACA,OAAO;IACT;IAEA,oFAAoF,GACpF,AAAQhC,cAAcD,IAAY,EAAEH,OAAgB,EAA8B;QAChF,IAAI,CAACG,KAAK6B,IAAI,IAAI,OAAO;QAEzB,IAAIG;QACJ,IAAI;YACFA,SAASK,KAAKC,KAAK,CAACtC;QACtB,EAAE,OAAM;YACN,OAAO;QACT;QACA,OAAO,IAAI,CAACe,SAAS,CAACiB,QAAQnC;IAChC;IAEA;;;GAGC,GACD,AAAQuC,iBAAiBH,IAAY,EAAiB;QACpD,MAAMM,QAAQN,KAAKM,KAAK,CAAC;QACzB,OAAOA,QAAQA,KAAK,CAAC,EAAE,CAACV,IAAI,KAAK;IACnC;IAEA,8EAA8E,GAC9E,AAAQjC,gBAAgBD,WAAmB,EAAU;QACnD,OAAOA,YAAY6C,QAAQ,CAAC,YAAY7C,cAAcnC,KAAKsB,IAAI,CAACa,aAAazB;IAC/E;AACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { AgentAdapter } from "../adapters/AgentAdapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* One instance of every built-in harness adapter, in registration order
|
|
4
|
+
* (which is also the order agents are listed in). Register a new harness here.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createBuiltinAdapters(): AgentAdapter[];
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/harnesses/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAWhE;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,YAAY,EAAE,CAYtD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AntigravityCliAdapter } from "./antigravity/AntigravityCliAdapter.js";
|
|
2
|
+
import { ClaudeCodeAdapter } from "./claude/ClaudeCodeAdapter.js";
|
|
3
|
+
import { CodexAdapter } from "./codex/CodexAdapter.js";
|
|
4
|
+
import { CopilotAdapter } from "./copilot/CopilotAdapter.js";
|
|
5
|
+
import { GeminiCliAdapter } from "./gemini/GeminiCliAdapter.js";
|
|
6
|
+
import { GrokCliAdapter } from "./grok/GrokCliAdapter.js";
|
|
7
|
+
import { KiroAdapter } from "./kiro/KiroAdapter.js";
|
|
8
|
+
import { OpenCodeAdapter } from "./opencode/OpenCodeAdapter.js";
|
|
9
|
+
import { PiAdapter } from "./pi/PiAdapter.js";
|
|
10
|
+
/**
|
|
11
|
+
* One instance of every built-in harness adapter, in registration order
|
|
12
|
+
* (which is also the order agents are listed in). Register a new harness here.
|
|
13
|
+
*/ export function createBuiltinAdapters() {
|
|
14
|
+
return [
|
|
15
|
+
new ClaudeCodeAdapter(),
|
|
16
|
+
new CodexAdapter(),
|
|
17
|
+
new CopilotAdapter(),
|
|
18
|
+
new GeminiCliAdapter(),
|
|
19
|
+
new GrokCliAdapter(),
|
|
20
|
+
new KiroAdapter(),
|
|
21
|
+
new AntigravityCliAdapter(),
|
|
22
|
+
new OpenCodeAdapter(),
|
|
23
|
+
new PiAdapter()
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/harnesses/index.ts"],"sourcesContent":["import type { AgentAdapter } from \"../adapters/AgentAdapter.js\";\nimport { AntigravityCliAdapter } from \"./antigravity/AntigravityCliAdapter.js\";\nimport { ClaudeCodeAdapter } from \"./claude/ClaudeCodeAdapter.js\";\nimport { CodexAdapter } from \"./codex/CodexAdapter.js\";\nimport { CopilotAdapter } from \"./copilot/CopilotAdapter.js\";\nimport { GeminiCliAdapter } from \"./gemini/GeminiCliAdapter.js\";\nimport { GrokCliAdapter } from \"./grok/GrokCliAdapter.js\";\nimport { KiroAdapter } from \"./kiro/KiroAdapter.js\";\nimport { OpenCodeAdapter } from \"./opencode/OpenCodeAdapter.js\";\nimport { PiAdapter } from \"./pi/PiAdapter.js\";\n\n/**\n * One instance of every built-in harness adapter, in registration order\n * (which is also the order agents are listed in). Register a new harness here.\n */\nexport function createBuiltinAdapters(): AgentAdapter[] {\n return [\n new ClaudeCodeAdapter(),\n new CodexAdapter(),\n new CopilotAdapter(),\n new GeminiCliAdapter(),\n new GrokCliAdapter(),\n new KiroAdapter(),\n new AntigravityCliAdapter(),\n new OpenCodeAdapter(),\n new PiAdapter(),\n ];\n}\n"],"names":["AntigravityCliAdapter","ClaudeCodeAdapter","CodexAdapter","CopilotAdapter","GeminiCliAdapter","GrokCliAdapter","KiroAdapter","OpenCodeAdapter","PiAdapter","createBuiltinAdapters"],"mappings":"AACA,SAASA,qBAAqB,QAAQ,yCAAyC;AAC/E,SAASC,iBAAiB,QAAQ,gCAAgC;AAClE,SAASC,YAAY,QAAQ,0BAA0B;AACvD,SAASC,cAAc,QAAQ,8BAA8B;AAC7D,SAASC,gBAAgB,QAAQ,+BAA+B;AAChE,SAASC,cAAc,QAAQ,2BAA2B;AAC1D,SAASC,WAAW,QAAQ,wBAAwB;AACpD,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,SAAS,QAAQ,oBAAoB;AAE9C;;;CAGC,GACD,OAAO,SAASC;IACd,OAAO;QACL,IAAIR;QACJ,IAAIC;QACJ,IAAIC;QACJ,IAAIC;QACJ,IAAIC;QACJ,IAAIC;QACJ,IAAIN;QACJ,IAAIO;QACJ,IAAIC;KACL;AACH"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage, ConversationOptions, SessionSummary, ListSessionsOptions, AgentDetectionContext } from "../../adapters/AgentAdapter.js";
|
|
2
|
+
/**
|
|
3
|
+
* Kiro Adapter
|
|
4
|
+
*
|
|
5
|
+
* Detects running Kiro agents by matching the PID in each
|
|
6
|
+
* ~/.kiro/sessions/cli/<session-id>.lock to a running Kiro process (walking up
|
|
7
|
+
* from helper processes such as `kiro-cli-chat acp`), then reading the sibling
|
|
8
|
+
* <session-id>.json metadata and <session-id>.jsonl transcript.
|
|
9
|
+
*/
|
|
10
|
+
export declare class KiroAdapter implements AgentAdapter {
|
|
11
|
+
readonly type: "kiro";
|
|
12
|
+
/**
|
|
13
|
+
* Also collects the helpers between a lock holder and its kiro-cli, such as
|
|
14
|
+
* the bundled `bun … tui.js`; `canHandle` still decides which are agents.
|
|
15
|
+
*/
|
|
16
|
+
readonly processNames: readonly ["kiro-cli", "kiro", "kiro-cli-chat", "node", "bun"];
|
|
17
|
+
private parser;
|
|
18
|
+
private mapper;
|
|
19
|
+
private locator;
|
|
20
|
+
constructor();
|
|
21
|
+
canHandle(processInfo: ProcessInfo): boolean;
|
|
22
|
+
detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]>;
|
|
23
|
+
private detectRunningAgents;
|
|
24
|
+
getConversation(sessionFilePath: string, options?: ConversationOptions): ConversationMessage[];
|
|
25
|
+
listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;
|
|
26
|
+
findSessionsById(sessionId: string): Promise<SessionSummary[]>;
|
|
27
|
+
private toSessionSummary;
|
|
28
|
+
/** `kiro-cli` / `kiro`, directly or as a script run by node or bun. */
|
|
29
|
+
private isKiroExecutable;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=KiroAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KiroAdapter.d.ts","sourceRoot":"","sources":["../../../src/harnesses/kiro/KiroAdapter.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;AAUxC;;;;;;;GAOG;AACH,qBAAa,WAAY,YAAW,YAAY;IAC9C,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC;;;OAGG;IACH,QAAQ,CAAC,YAAY,gEAAiE;IAEtF,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAqB;;IAQpC,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAItC,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YAS3D,mBAAmB;IAwBjC,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;IAYnE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAOpE,OAAO,CAAC,gBAAgB;IAYxB,uEAAuE;IACvE,OAAO,CAAC,gBAAgB;CAgBzB"}
|