@ai-devkit/agent-manager 0.35.0 → 0.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AgentManager.d.ts +9 -4
- package/dist/AgentManager.d.ts.map +1 -1
- package/dist/AgentManager.js +21 -2
- package/dist/AgentManager.js.map +1 -1
- package/dist/__tests__/AgentManager.test.js +151 -3
- package/dist/__tests__/AgentManager.test.js.map +1 -1
- package/dist/__tests__/adapters/IncrementalSessionRefresh.test.js +486 -0
- package/dist/__tests__/adapters/IncrementalSessionRefresh.test.js.map +1 -0
- package/dist/__tests__/adapters/adapterProcessImports.test.js +52 -0
- package/dist/__tests__/adapters/adapterProcessImports.test.js.map +1 -0
- package/dist/__tests__/adapters/adapterSnapshotCandidates.test.js +247 -0
- package/dist/__tests__/adapters/adapterSnapshotCandidates.test.js.map +1 -0
- package/dist/__tests__/capacity/claude.test.js +485 -0
- package/dist/__tests__/capacity/claude.test.js.map +1 -0
- package/dist/__tests__/capacity/openai.test.js +670 -0
- package/dist/__tests__/capacity/openai.test.js.map +1 -0
- package/dist/__tests__/capacity/wham.test.js +144 -0
- package/dist/__tests__/capacity/wham.test.js.map +1 -0
- 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__/{providers → harnesses}/claude/ClaudeAgentMapper.test.js +4 -4
- package/dist/__tests__/harnesses/claude/ClaudeAgentMapper.test.js.map +1 -0
- package/dist/__tests__/{adapters → harnesses/claude}/ClaudeCodeAdapter.test.js +47 -19
- package/dist/__tests__/harnesses/claude/ClaudeCodeAdapter.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.js +1 -12
- package/dist/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.js.map +1 -1
- package/dist/__tests__/{utils → harnesses/claude}/ClaudeSessionParser.test.js +2 -2
- package/dist/__tests__/harnesses/claude/ClaudeSessionParser.test.js.map +1 -0
- package/dist/__tests__/{print → harnesses/claude/durable}/ClaudeCliProbe.test.js +1 -1
- package/dist/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.js.map +1 -0
- package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgent.integration.test.js +1 -1
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js.map +1 -0
- package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgentService.test.js +4 -4
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.js.map +1 -0
- package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintRunner.test.js +1 -1
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js.map +1 -0
- package/dist/__tests__/{adapters → harnesses/codex}/CodexAdapter.test.js +304 -10
- package/dist/__tests__/harnesses/codex/CodexAdapter.test.js.map +1 -0
- package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js +463 -0
- package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.js.map +1 -1
- package/dist/__tests__/{durable → harnesses/codex/durable}/CodexCliProbe.test.js +4 -4
- package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js.map +1 -0
- package/dist/__tests__/{durable → harnesses/codex/durable}/CodexDurableAgentRepository.test.js +1 -1
- package/dist/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.js.map +1 -0
- package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgent.integration.test.js +1 -1
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js.map +1 -0
- package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgentService.test.js +8 -18
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js.map +1 -0
- package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintRunner.test.js +2 -7
- package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.js.map +1 -1
- package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js +290 -0
- package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/gemini/GeminiCliAdapter.test.js +34 -25
- package/dist/__tests__/harnesses/gemini/GeminiCliAdapter.test.js.map +1 -0
- package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js +491 -0
- package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js.map +1 -0
- package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js +399 -0
- package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.js.map +1 -1
- package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js +167 -0
- package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.js.map +1 -1
- package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js +301 -0
- package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js.map +1 -0
- package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js +662 -0
- package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.js +2 -2
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/PiAdapter.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/PiAdapter.test.js.map +1 -1
- package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js +382 -0
- package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/pi/PiSessionParser.test.js +171 -1
- package/dist/__tests__/harnesses/pi/PiSessionParser.test.js.map +1 -0
- package/dist/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.js.map +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.js +1 -1
- package/dist/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.js.map +1 -1
- package/dist/__tests__/readiness/AgentReadiness.test.js +20 -0
- package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -1
- package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +49 -0
- package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -1
- package/dist/__tests__/utils/IncrementalJsonlSummary.test.js +650 -0
- package/dist/__tests__/utils/IncrementalJsonlSummary.test.js.map +1 -0
- package/dist/__tests__/utils/agents.test.js +72 -2
- package/dist/__tests__/utils/agents.test.js.map +1 -1
- package/dist/__tests__/utils/conversationTail.bench.test.js +258 -0
- package/dist/__tests__/utils/conversationTail.bench.test.js.map +1 -0
- package/dist/__tests__/utils/conversationTailParity.test.js +588 -0
- package/dist/__tests__/utils/conversationTailParity.test.js.map +1 -0
- package/dist/__tests__/utils/jsonlTail.test.js +360 -0
- package/dist/__tests__/utils/jsonlTail.test.js.map +1 -0
- package/dist/__tests__/utils/matchingConstants.test.js +35 -0
- package/dist/__tests__/utils/matchingConstants.test.js.map +1 -0
- package/dist/__tests__/utils/process.test.js +436 -2
- package/dist/__tests__/utils/process.test.js.map +1 -1
- package/dist/adapters/AgentAdapter.d.ts +25 -6
- package/dist/adapters/AgentAdapter.d.ts.map +1 -1
- package/dist/adapters/AgentAdapter.js +12 -3
- package/dist/adapters/AgentAdapter.js.map +1 -1
- package/dist/capacity/claude.d.ts +17 -0
- package/dist/capacity/claude.d.ts.map +1 -0
- package/dist/capacity/claude.js +271 -0
- package/dist/capacity/claude.js.map +1 -0
- package/dist/capacity/codex.d.ts +1 -2
- package/dist/capacity/codex.d.ts.map +1 -1
- package/dist/capacity/codex.js +5 -47
- package/dist/capacity/codex.js.map +1 -1
- package/dist/capacity/index.d.ts +11 -0
- package/dist/capacity/index.d.ts.map +1 -1
- package/dist/capacity/index.js +17 -0
- package/dist/capacity/index.js.map +1 -1
- package/dist/capacity/openai.d.ts +47 -0
- package/dist/capacity/openai.d.ts.map +1 -0
- package/dist/capacity/openai.js +307 -0
- package/dist/capacity/openai.js.map +1 -0
- package/dist/capacity/wham.d.ts +16 -0
- package/dist/capacity/wham.d.ts.map +1 -0
- package/dist/capacity/wham.js +66 -0
- package/dist/capacity/wham.js.map +1 -0
- package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts +13 -0
- package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts.map +1 -0
- package/dist/harnesses/antigravity/AntigravityAgentMapper.js +30 -0
- package/dist/harnesses/antigravity/AntigravityAgentMapper.js.map +1 -0
- package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts +32 -0
- package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts.map +1 -0
- package/dist/harnesses/antigravity/AntigravityCliAdapter.js +97 -0
- package/dist/harnesses/antigravity/AntigravityCliAdapter.js.map +1 -0
- package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts +30 -0
- package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts.map +1 -0
- package/dist/harnesses/antigravity/AntigravitySessionLocator.js +56 -0
- package/dist/harnesses/antigravity/AntigravitySessionLocator.js.map +1 -0
- package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts +75 -0
- package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts.map +1 -0
- package/dist/harnesses/antigravity/AntigravitySessionParser.js +174 -0
- package/dist/harnesses/antigravity/AntigravitySessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.js +4 -10
- package/dist/harnesses/claude/ClaudeAgentMapper.js.map +1 -0
- package/dist/{providers → harnesses}/claude/ClaudeCodeAdapter.d.ts +5 -6
- package/dist/harnesses/claude/ClaudeCodeAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/claude/ClaudeCodeAdapter.js +17 -15
- package/dist/harnesses/claude/ClaudeCodeAdapter.js.map +1 -0
- package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts.map +1 -1
- package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.js +3 -3
- package/dist/harnesses/claude/ClaudeSessionLocator.js.map +1 -0
- package/dist/{providers → harnesses}/claude/ClaudeSessionParser.d.ts +40 -6
- package/dist/harnesses/claude/ClaudeSessionParser.d.ts.map +1 -0
- package/dist/{providers → harnesses}/claude/ClaudeSessionParser.js +141 -85
- package/dist/harnesses/claude/ClaudeSessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts.map +1 -1
- package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js.map +1 -1
- package/dist/{providers → harnesses}/codex/CodexAdapter.d.ts +5 -4
- package/dist/harnesses/codex/CodexAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/codex/CodexAdapter.js +139 -19
- package/dist/harnesses/codex/CodexAdapter.js.map +1 -0
- package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/codex/CodexAgentMapper.js +4 -11
- package/dist/harnesses/codex/CodexAgentMapper.js.map +1 -0
- package/dist/harnesses/codex/CodexSessionLocator.d.ts +74 -0
- package/dist/harnesses/codex/CodexSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/codex/CodexSessionLocator.js +359 -0
- package/dist/harnesses/codex/CodexSessionLocator.js.map +1 -0
- package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts.map +1 -1
- package/dist/{providers → harnesses}/codex/CodexSessionMapping.js +3 -3
- package/dist/harnesses/codex/CodexSessionMapping.js.map +1 -0
- package/dist/harnesses/codex/CodexSessionParser.d.ts +89 -0
- package/dist/harnesses/codex/CodexSessionParser.d.ts.map +1 -0
- package/dist/{providers → harnesses}/codex/CodexSessionParser.js +124 -78
- package/dist/harnesses/codex/CodexSessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts.map +1 -1
- package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js.map +1 -1
- package/dist/{providers → harnesses}/copilot/CopilotAdapter.d.ts +7 -6
- package/dist/harnesses/copilot/CopilotAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/copilot/CopilotAdapter.js +19 -14
- package/dist/harnesses/copilot/CopilotAdapter.js.map +1 -0
- package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.js +4 -11
- package/dist/harnesses/copilot/CopilotAgentMapper.js.map +1 -0
- package/dist/harnesses/copilot/CopilotSessionLocator.d.ts +42 -0
- package/dist/harnesses/copilot/CopilotSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/copilot/CopilotSessionLocator.js +126 -0
- package/dist/harnesses/copilot/CopilotSessionLocator.js.map +1 -0
- package/dist/harnesses/copilot/CopilotSessionParser.d.ts +62 -0
- package/dist/harnesses/copilot/CopilotSessionParser.d.ts.map +1 -0
- package/dist/harnesses/copilot/CopilotSessionParser.js +236 -0
- package/dist/harnesses/copilot/CopilotSessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.js +4 -11
- package/dist/harnesses/gemini/GeminiAgentMapper.js.map +1 -0
- package/dist/{providers → harnesses}/gemini/GeminiCliAdapter.d.ts +4 -5
- package/dist/harnesses/gemini/GeminiCliAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/gemini/GeminiCliAdapter.js +6 -7
- package/dist/harnesses/gemini/GeminiCliAdapter.js.map +1 -0
- package/dist/harnesses/gemini/GeminiSessionLocator.d.ts +72 -0
- package/dist/harnesses/gemini/GeminiSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/gemini/GeminiSessionLocator.js +300 -0
- package/dist/harnesses/gemini/GeminiSessionLocator.js.map +1 -0
- package/dist/{providers → harnesses}/gemini/GeminiSessionParser.d.ts +34 -7
- package/dist/harnesses/gemini/GeminiSessionParser.d.ts.map +1 -0
- package/dist/harnesses/gemini/GeminiSessionParser.js +272 -0
- package/dist/harnesses/gemini/GeminiSessionParser.js.map +1 -0
- package/dist/harnesses/gemini/fileSignature.d.ts +8 -0
- package/dist/harnesses/gemini/fileSignature.d.ts.map +1 -0
- package/dist/harnesses/gemini/fileSignature.js +9 -0
- package/dist/harnesses/gemini/fileSignature.js.map +1 -0
- package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/grok/GrokAgentMapper.js +4 -10
- package/dist/harnesses/grok/GrokAgentMapper.js.map +1 -0
- package/dist/{providers → harnesses}/grok/GrokCliAdapter.d.ts +5 -5
- package/dist/harnesses/grok/GrokCliAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/grok/GrokCliAdapter.js +14 -10
- package/dist/harnesses/grok/GrokCliAdapter.js.map +1 -0
- package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts.map +1 -1
- package/dist/{providers → harnesses}/grok/GrokSessionLocator.js +2 -2
- package/dist/harnesses/grok/GrokSessionLocator.js.map +1 -0
- package/dist/harnesses/grok/GrokSessionParser.d.ts +87 -0
- package/dist/harnesses/grok/GrokSessionParser.d.ts.map +1 -0
- package/dist/harnesses/grok/GrokSessionParser.js +185 -0
- package/dist/harnesses/grok/GrokSessionParser.js.map +1 -0
- package/dist/harnesses/index.d.ts +7 -0
- package/dist/harnesses/index.d.ts.map +1 -0
- package/dist/harnesses/index.js +27 -0
- package/dist/harnesses/index.js.map +1 -0
- package/dist/harnesses/kiro/KiroAdapter.d.ts +31 -0
- package/dist/harnesses/kiro/KiroAdapter.d.ts.map +1 -0
- package/dist/harnesses/kiro/KiroAdapter.js +125 -0
- package/dist/harnesses/kiro/KiroAdapter.js.map +1 -0
- package/dist/harnesses/kiro/KiroAgentMapper.d.ts +13 -0
- package/dist/harnesses/kiro/KiroAgentMapper.d.ts.map +1 -0
- package/dist/harnesses/kiro/KiroAgentMapper.js +29 -0
- package/dist/harnesses/kiro/KiroAgentMapper.js.map +1 -0
- package/dist/harnesses/kiro/KiroSessionLocator.d.ts +38 -0
- package/dist/harnesses/kiro/KiroSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/kiro/KiroSessionLocator.js +95 -0
- package/dist/harnesses/kiro/KiroSessionLocator.js.map +1 -0
- package/dist/harnesses/kiro/KiroSessionParser.d.ts +81 -0
- package/dist/harnesses/kiro/KiroSessionParser.d.ts.map +1 -0
- package/dist/harnesses/kiro/KiroSessionParser.js +251 -0
- package/dist/harnesses/kiro/KiroSessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/opencode/OpenCodeAdapter.d.ts +2 -4
- package/dist/harnesses/opencode/OpenCodeAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/opencode/OpenCodeAdapter.js +4 -7
- package/dist/harnesses/opencode/OpenCodeAdapter.js.map +1 -0
- package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.js +5 -13
- package/dist/harnesses/opencode/OpenCodeAgentMapper.js.map +1 -0
- package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts.map +1 -1
- package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.js +2 -2
- package/dist/harnesses/opencode/OpenCodeSessionLocator.js.map +1 -0
- package/dist/{providers → harnesses}/opencode/OpenCodeSessionParser.d.ts +2 -4
- package/dist/harnesses/opencode/OpenCodeSessionParser.d.ts.map +1 -0
- package/dist/{providers → harnesses}/opencode/OpenCodeSessionParser.js +2 -1
- package/dist/harnesses/opencode/OpenCodeSessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/pi/PiAdapter.d.ts +5 -4
- package/dist/harnesses/pi/PiAdapter.d.ts.map +1 -0
- package/dist/{providers → harnesses}/pi/PiAdapter.js +16 -12
- package/dist/harnesses/pi/PiAdapter.js.map +1 -0
- package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/PiAgentMapper.js +4 -11
- package/dist/harnesses/pi/PiAgentMapper.js.map +1 -0
- package/dist/harnesses/pi/PiSessionLocator.d.ts +61 -0
- package/dist/harnesses/pi/PiSessionLocator.d.ts.map +1 -0
- package/dist/harnesses/pi/PiSessionLocator.js +212 -0
- package/dist/harnesses/pi/PiSessionLocator.js.map +1 -0
- package/dist/harnesses/pi/PiSessionParser.d.ts +88 -0
- package/dist/harnesses/pi/PiSessionParser.d.ts.map +1 -0
- package/dist/harnesses/pi/PiSessionParser.js +318 -0
- package/dist/harnesses/pi/PiSessionParser.js.map +1 -0
- package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/PiSessionTracker.js +2 -2
- package/dist/harnesses/pi/PiSessionTracker.js.map +1 -0
- package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts.map +1 -1
- package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js.map +1 -1
- package/dist/harnesses/shared.d.ts +41 -0
- package/dist/harnesses/shared.d.ts.map +1 -0
- package/dist/harnesses/shared.js +71 -0
- package/dist/harnesses/shared.js.map +1 -0
- package/dist/index.d.ts +28 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -16
- package/dist/index.js.map +1 -1
- package/dist/readiness/AgentReadiness.d.ts +1 -1
- package/dist/readiness/AgentReadiness.d.ts.map +1 -1
- package/dist/readiness/AgentReadiness.js.map +1 -1
- package/dist/runtime/ManagedAgentRuntime.js +3 -1
- package/dist/runtime/ManagedAgentRuntime.js.map +1 -1
- package/dist/runtime/herdr/HerdrAgentDiscovery.js +10 -0
- package/dist/runtime/herdr/HerdrAgentDiscovery.js.map +1 -1
- package/dist/utils/IncrementalJsonlSummary.d.ts +100 -0
- package/dist/utils/IncrementalJsonlSummary.d.ts.map +1 -0
- package/dist/utils/IncrementalJsonlSummary.js +209 -0
- package/dist/utils/IncrementalJsonlSummary.js.map +1 -0
- package/dist/utils/agents.d.ts +3 -2
- package/dist/utils/agents.d.ts.map +1 -1
- package/dist/utils/agents.js +61 -15
- package/dist/utils/agents.js.map +1 -1
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/jsonlTail.d.ts +73 -0
- package/dist/utils/jsonlTail.d.ts.map +1 -0
- package/dist/utils/jsonlTail.js +238 -0
- package/dist/utils/jsonlTail.js.map +1 -0
- package/dist/utils/matching.d.ts +2 -0
- package/dist/utils/matching.d.ts.map +1 -1
- package/dist/utils/matching.js +3 -2
- package/dist/utils/matching.js.map +1 -1
- package/dist/utils/matchingConstants.d.ts +15 -0
- package/dist/utils/matchingConstants.d.ts.map +1 -0
- package/dist/utils/matchingConstants.js +14 -0
- package/dist/utils/matchingConstants.js.map +1 -0
- package/dist/utils/process.d.ts +38 -2
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +131 -43
- package/dist/utils/process.js.map +1 -1
- package/package.json +2 -1
- package/scripts/benchmark-cold-start.mjs +350 -0
- package/src/AgentManager.ts +26 -5
- package/src/__tests__/AgentManager.test.ts +141 -3
- package/src/__tests__/adapters/IncrementalSessionRefresh.test.ts +437 -0
- package/src/__tests__/adapters/adapterProcessImports.test.ts +58 -0
- package/src/__tests__/adapters/adapterSnapshotCandidates.test.ts +243 -0
- package/src/__tests__/capacity/claude.test.ts +467 -0
- package/src/__tests__/capacity/fixtures/claude-credentials.json +7 -0
- package/src/__tests__/capacity/fixtures/claude-usage-malformed.json +1 -0
- package/src/__tests__/capacity/fixtures/claude-usage-partial.json +15 -0
- package/src/__tests__/capacity/fixtures/claude-usage.json +63 -0
- package/src/__tests__/capacity/fixtures/openai-auth.json +6 -0
- package/src/__tests__/capacity/fixtures/openai-codex-auth.json +9 -0
- package/src/__tests__/capacity/fixtures/openai-usage-completions.json +67 -0
- package/src/__tests__/capacity/fixtures/openai-usage-responses.json +20 -0
- package/src/__tests__/capacity/fixtures/wham-usage.json +32 -0
- package/src/__tests__/capacity/openai.test.ts +560 -0
- package/src/__tests__/capacity/wham.test.ts +104 -0
- 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__/{providers → harnesses}/claude/ClaudeAgentMapper.test.ts +5 -5
- package/src/__tests__/{adapters → harnesses/claude}/ClaudeCodeAdapter.test.ts +54 -24
- package/src/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.ts +1 -12
- package/src/__tests__/{utils → harnesses/claude}/ClaudeSessionParser.test.ts +2 -2
- package/src/__tests__/{print → harnesses/claude/durable}/ClaudeCliProbe.test.ts +1 -1
- package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgent.integration.test.ts +1 -1
- package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgentService.test.ts +4 -4
- package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintRunner.test.ts +2 -2
- package/src/__tests__/{adapters → harnesses/codex}/CodexAdapter.test.ts +277 -12
- package/src/__tests__/harnesses/codex/CodexSessionLocator.test.ts +419 -0
- package/src/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.ts +1 -1
- package/src/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.ts +1 -1
- package/src/__tests__/{durable → harnesses/codex/durable}/CodexCliProbe.test.ts +4 -4
- package/src/__tests__/{durable → harnesses/codex/durable}/CodexDurableAgentRepository.test.ts +1 -1
- package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgent.integration.test.ts +1 -1
- package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgentService.test.ts +8 -18
- package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintRunner.test.ts +3 -9
- package/src/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.ts +1 -1
- package/src/__tests__/harnesses/copilot/CopilotRefreshIO.test.ts +270 -0
- package/src/__tests__/{providers → harnesses}/gemini/GeminiCliAdapter.test.ts +27 -23
- package/src/__tests__/harnesses/gemini/GeminiSessionJsonl.test.ts +402 -0
- package/src/__tests__/harnesses/gemini/GeminiSessionLocator.test.ts +396 -0
- package/src/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.ts +2 -2
- package/src/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.ts +1 -1
- package/src/__tests__/harnesses/grok/GrokIncrementalRefresh.test.ts +170 -0
- package/src/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.ts +1 -1
- package/src/__tests__/harnesses/grok/GrokSessionParser.test.ts +230 -0
- package/src/__tests__/harnesses/kiro/KiroAdapter.test.ts +552 -0
- package/src/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.ts +1 -1
- package/src/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.ts +1 -1
- package/src/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.ts +2 -2
- package/src/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.ts +1 -1
- package/src/__tests__/{providers → harnesses}/pi/PiAdapter.test.ts +1 -1
- package/src/__tests__/harnesses/pi/PiDiscoveryIO.test.ts +337 -0
- package/src/__tests__/{providers → harnesses}/pi/PiSessionParser.test.ts +91 -1
- package/src/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.ts +1 -1
- package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.ts +1 -1
- package/src/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.ts +1 -1
- package/src/__tests__/readiness/AgentReadiness.test.ts +16 -0
- package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +30 -0
- package/src/__tests__/utils/IncrementalJsonlSummary.test.ts +414 -0
- package/src/__tests__/utils/agents.test.ts +83 -2
- package/src/__tests__/utils/conversationTail.bench.test.ts +193 -0
- package/src/__tests__/utils/conversationTailParity.test.ts +365 -0
- package/src/__tests__/utils/jsonlTail.test.ts +317 -0
- package/src/__tests__/utils/matchingConstants.test.ts +40 -0
- package/src/__tests__/utils/process.test.ts +254 -0
- package/src/adapters/AgentAdapter.ts +37 -12
- package/src/capacity/claude.ts +313 -0
- package/src/capacity/codex.ts +25 -134
- package/src/capacity/index.ts +33 -4
- package/src/capacity/openai.ts +355 -0
- package/src/capacity/wham.ts +84 -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/{providers → harnesses}/claude/ClaudeAgentMapper.ts +2 -10
- package/src/{providers → harnesses}/claude/ClaudeCodeAdapter.ts +22 -20
- package/src/{providers → harnesses}/claude/ClaudeSessionLocator.ts +3 -3
- package/src/{providers → harnesses}/claude/ClaudeSessionParser.ts +189 -97
- package/src/{providers → harnesses}/codex/CodexAdapter.ts +153 -29
- package/src/{providers → harnesses}/codex/CodexAgentMapper.ts +2 -11
- package/src/harnesses/codex/CodexSessionLocator.ts +509 -0
- package/src/{providers → harnesses}/codex/CodexSessionMapping.ts +3 -3
- package/src/{providers → harnesses}/codex/CodexSessionParser.ts +169 -92
- package/src/{providers → harnesses}/copilot/CopilotAdapter.ts +22 -22
- package/src/{providers → harnesses}/copilot/CopilotAgentMapper.ts +2 -11
- package/src/harnesses/copilot/CopilotSessionLocator.ts +161 -0
- package/src/harnesses/copilot/CopilotSessionParser.ts +380 -0
- package/src/{providers → harnesses}/gemini/GeminiAgentMapper.ts +2 -11
- package/src/{providers → harnesses}/gemini/GeminiCliAdapter.ts +7 -9
- package/src/harnesses/gemini/GeminiSessionLocator.ts +394 -0
- package/src/{providers → harnesses}/gemini/GeminiSessionParser.ts +155 -31
- package/src/harnesses/gemini/fileSignature.ts +10 -0
- package/src/{providers → harnesses}/grok/GrokAgentMapper.ts +2 -11
- package/src/{providers → harnesses}/grok/GrokCliAdapter.ts +16 -15
- package/src/{providers → harnesses}/grok/GrokSessionLocator.ts +2 -2
- package/src/harnesses/grok/GrokSessionParser.ts +251 -0
- package/src/harnesses/index.ts +28 -0
- package/src/harnesses/kiro/KiroAdapter.ts +143 -0
- package/src/harnesses/kiro/KiroAgentMapper.ts +34 -0
- package/src/harnesses/kiro/KiroSessionLocator.ts +143 -0
- package/src/harnesses/kiro/KiroSessionParser.ts +376 -0
- package/src/{providers → harnesses}/opencode/OpenCodeAdapter.ts +5 -11
- package/src/{providers → harnesses}/opencode/OpenCodeAgentMapper.ts +3 -13
- package/src/{providers → harnesses}/opencode/OpenCodeSessionLocator.ts +2 -2
- package/src/{providers → harnesses}/opencode/OpenCodeSessionParser.ts +4 -3
- package/src/{providers → harnesses}/pi/PiAdapter.ts +20 -18
- package/src/{providers → harnesses}/pi/PiAgentMapper.ts +2 -11
- package/src/harnesses/pi/PiSessionLocator.ts +288 -0
- package/src/harnesses/pi/PiSessionParser.ts +488 -0
- package/src/{providers → harnesses}/pi/PiSessionTracker.ts +2 -2
- package/src/harnesses/shared.ts +119 -0
- package/src/index.ts +34 -23
- package/src/readiness/AgentReadiness.ts +4 -1
- package/src/runtime/ManagedAgentRuntime.ts +2 -0
- package/src/runtime/herdr/HerdrAgentDiscovery.ts +5 -1
- package/src/utils/IncrementalJsonlSummary.ts +306 -0
- package/src/utils/agents.ts +62 -20
- package/src/utils/index.ts +2 -0
- package/src/utils/jsonlTail.ts +349 -0
- package/src/utils/matching.ts +3 -3
- package/src/utils/matchingConstants.ts +15 -0
- package/src/utils/process.ts +189 -45
- package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +0 -1
- package/dist/__tests__/adapters/CodexAdapter.test.js.map +0 -1
- package/dist/__tests__/durable/CodexCliProbe.test.js.map +0 -1
- package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +0 -1
- package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +0 -1
- package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +0 -1
- package/dist/__tests__/durable/CodexPrintRunner.test.js.map +0 -1
- package/dist/__tests__/print/ClaudeCliProbe.test.js.map +0 -1
- package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +0 -1
- package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +0 -1
- package/dist/__tests__/print/ClaudePrintRunner.test.js.map +0 -1
- package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +0 -1
- package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +0 -194
- package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +0 -1
- package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js.map +0 -1
- package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +0 -1
- package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +0 -1
- package/dist/adapters/index.d.ts +0 -10
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js +0 -10
- package/dist/adapters/index.js.map +0 -1
- package/dist/providers/claude/ClaudeAgentMapper.js.map +0 -1
- package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +0 -1
- package/dist/providers/claude/ClaudeCodeAdapter.js.map +0 -1
- package/dist/providers/claude/ClaudeSessionLocator.js.map +0 -1
- package/dist/providers/claude/ClaudeSessionParser.d.ts.map +0 -1
- package/dist/providers/claude/ClaudeSessionParser.js.map +0 -1
- package/dist/providers/codex/CodexAdapter.d.ts.map +0 -1
- package/dist/providers/codex/CodexAdapter.js.map +0 -1
- package/dist/providers/codex/CodexAgentMapper.js.map +0 -1
- package/dist/providers/codex/CodexSessionLocator.d.ts +0 -44
- package/dist/providers/codex/CodexSessionLocator.d.ts.map +0 -1
- package/dist/providers/codex/CodexSessionLocator.js +0 -207
- package/dist/providers/codex/CodexSessionLocator.js.map +0 -1
- package/dist/providers/codex/CodexSessionMapping.js.map +0 -1
- package/dist/providers/codex/CodexSessionParser.d.ts +0 -58
- package/dist/providers/codex/CodexSessionParser.d.ts.map +0 -1
- package/dist/providers/codex/CodexSessionParser.js.map +0 -1
- package/dist/providers/copilot/CopilotAdapter.d.ts.map +0 -1
- package/dist/providers/copilot/CopilotAdapter.js.map +0 -1
- package/dist/providers/copilot/CopilotAgentMapper.js.map +0 -1
- package/dist/providers/copilot/CopilotSessionLocator.d.ts +0 -20
- package/dist/providers/copilot/CopilotSessionLocator.d.ts.map +0 -1
- package/dist/providers/copilot/CopilotSessionLocator.js +0 -49
- package/dist/providers/copilot/CopilotSessionLocator.js.map +0 -1
- package/dist/providers/copilot/CopilotSessionParser.d.ts +0 -30
- package/dist/providers/copilot/CopilotSessionParser.d.ts.map +0 -1
- package/dist/providers/copilot/CopilotSessionParser.js +0 -181
- package/dist/providers/copilot/CopilotSessionParser.js.map +0 -1
- package/dist/providers/gemini/GeminiAgentMapper.js.map +0 -1
- package/dist/providers/gemini/GeminiCliAdapter.d.ts.map +0 -1
- package/dist/providers/gemini/GeminiCliAdapter.js.map +0 -1
- package/dist/providers/gemini/GeminiSessionLocator.d.ts +0 -30
- package/dist/providers/gemini/GeminiSessionLocator.d.ts.map +0 -1
- package/dist/providers/gemini/GeminiSessionLocator.js +0 -142
- package/dist/providers/gemini/GeminiSessionLocator.js.map +0 -1
- package/dist/providers/gemini/GeminiSessionParser.d.ts.map +0 -1
- package/dist/providers/gemini/GeminiSessionParser.js +0 -166
- package/dist/providers/gemini/GeminiSessionParser.js.map +0 -1
- package/dist/providers/grok/GrokAgentMapper.js.map +0 -1
- package/dist/providers/grok/GrokCliAdapter.d.ts.map +0 -1
- package/dist/providers/grok/GrokCliAdapter.js.map +0 -1
- package/dist/providers/grok/GrokSessionLocator.js.map +0 -1
- package/dist/providers/grok/GrokSessionParser.d.ts +0 -54
- package/dist/providers/grok/GrokSessionParser.d.ts.map +0 -1
- package/dist/providers/grok/GrokSessionParser.js +0 -122
- package/dist/providers/grok/GrokSessionParser.js.map +0 -1
- package/dist/providers/opencode/OpenCodeAdapter.d.ts.map +0 -1
- package/dist/providers/opencode/OpenCodeAdapter.js.map +0 -1
- package/dist/providers/opencode/OpenCodeAgentMapper.js.map +0 -1
- package/dist/providers/opencode/OpenCodeSessionLocator.js.map +0 -1
- package/dist/providers/opencode/OpenCodeSessionParser.d.ts.map +0 -1
- package/dist/providers/opencode/OpenCodeSessionParser.js.map +0 -1
- package/dist/providers/pi/PiAdapter.d.ts.map +0 -1
- package/dist/providers/pi/PiAdapter.js.map +0 -1
- package/dist/providers/pi/PiAgentMapper.js.map +0 -1
- package/dist/providers/pi/PiSessionLocator.d.ts +0 -24
- package/dist/providers/pi/PiSessionLocator.d.ts.map +0 -1
- package/dist/providers/pi/PiSessionLocator.js +0 -86
- package/dist/providers/pi/PiSessionLocator.js.map +0 -1
- package/dist/providers/pi/PiSessionParser.d.ts +0 -36
- package/dist/providers/pi/PiSessionParser.d.ts.map +0 -1
- package/dist/providers/pi/PiSessionParser.js +0 -191
- package/dist/providers/pi/PiSessionParser.js.map +0 -1
- package/dist/providers/pi/PiSessionTracker.js.map +0 -1
- package/src/__tests__/fixtures/fake-claude.cjs +0 -31
- package/src/__tests__/fixtures/fake-codex.cjs +0 -56
- package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +0 -182
- package/src/adapters/index.ts +0 -15
- package/src/providers/codex/CodexSessionLocator.ts +0 -279
- package/src/providers/copilot/CopilotSessionLocator.ts +0 -63
- package/src/providers/copilot/CopilotSessionParser.ts +0 -289
- package/src/providers/gemini/GeminiSessionLocator.ts +0 -183
- package/src/providers/grok/GrokSessionParser.ts +0 -166
- package/src/providers/pi/PiSessionLocator.ts +0 -110
- package/src/providers/pi/PiSessionParser.ts +0 -284
- /package/dist/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.js +0 -0
- /package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js +0 -0
- /package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.js +0 -0
- /package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.js +0 -0
- /package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts +0 -0
- /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js +0 -0
- /package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts +0 -0
- /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js +0 -0
- /package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts +0 -0
- /package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts +0 -0
- /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js +0 -0
- /package/src/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.ts +0 -0
- /package/src/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.ts +0 -0
- /package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.ts +0 -0
- /package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.ts +0 -0
- /package/src/{providers → harnesses}/claude/durable/ClaudeCliProbe.ts +0 -0
- /package/src/{providers → harnesses}/claude/durable/ClaudePrintAgentService.ts +0 -0
- /package/src/{providers → harnesses}/claude/durable/ClaudePrintRunner.ts +0 -0
- /package/src/{providers → harnesses}/claude/durable/ClaudeStreamParser.ts +0 -0
- /package/src/{providers → harnesses}/codex/durable/CodexCliProbe.ts +0 -0
- /package/src/{providers → harnesses}/codex/durable/CodexPrintAgentService.ts +0 -0
- /package/src/{providers → harnesses}/codex/durable/CodexPrintRunner.ts +0 -0
- /package/src/{providers → harnesses}/codex/durable/CodexStreamParser.ts +0 -0
- /package/src/{providers → harnesses}/pi/durable/PiCliProbe.ts +0 -0
- /package/src/{providers → harnesses}/pi/durable/PiPrintAgentService.ts +0 -0
- /package/src/{providers → harnesses}/pi/durable/PiPrintProtocol.ts +0 -0
- /package/src/{providers → harnesses}/pi/durable/PiPrintRunner.ts +0 -0
- /package/src/{providers → harnesses}/pi/durable/PiStreamParser.ts +0 -0
package/src/index.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
export { AgentManager, AgentNotRunningError } from "./AgentManager.js";
|
|
2
|
-
export {
|
|
2
|
+
export {
|
|
3
|
+
getClaudeCapacityReport,
|
|
4
|
+
getCodexCapacityReport,
|
|
5
|
+
getOpenAiCapacityReport,
|
|
6
|
+
getZaiCapacityReport,
|
|
7
|
+
} from "./capacity/index.js";
|
|
3
8
|
export type {
|
|
9
|
+
ClaudeCapacityOptions,
|
|
4
10
|
CapacityProbeOptions,
|
|
5
11
|
CapacityReport,
|
|
6
12
|
CapacityWindow,
|
|
13
|
+
OpenAiCapacityOptions,
|
|
7
14
|
ZaiCapacityOptions,
|
|
8
15
|
} from "./capacity/index.js";
|
|
9
16
|
export {
|
|
@@ -25,20 +32,24 @@ export type {
|
|
|
25
32
|
ReadinessStatus,
|
|
26
33
|
} from "./readiness/AgentReadiness.js";
|
|
27
34
|
|
|
28
|
-
export { ClaudeCodeAdapter } from "./
|
|
29
|
-
export { CodexAdapter } from "./
|
|
30
|
-
export { CopilotAdapter } from "./
|
|
31
|
-
export { GeminiCliAdapter } from "./
|
|
32
|
-
export { GrokCliAdapter } from "./
|
|
33
|
-
export {
|
|
34
|
-
export {
|
|
35
|
-
export {
|
|
35
|
+
export { ClaudeCodeAdapter } from "./harnesses/claude/ClaudeCodeAdapter.js";
|
|
36
|
+
export { CodexAdapter } from "./harnesses/codex/CodexAdapter.js";
|
|
37
|
+
export { CopilotAdapter } from "./harnesses/copilot/CopilotAdapter.js";
|
|
38
|
+
export { GeminiCliAdapter } from "./harnesses/gemini/GeminiCliAdapter.js";
|
|
39
|
+
export { GrokCliAdapter } from "./harnesses/grok/GrokCliAdapter.js";
|
|
40
|
+
export { AntigravityCliAdapter } from "./harnesses/antigravity/AntigravityCliAdapter.js";
|
|
41
|
+
export { KiroAdapter } from "./harnesses/kiro/KiroAdapter.js";
|
|
42
|
+
export { OpenCodeAdapter } from "./harnesses/opencode/OpenCodeAdapter.js";
|
|
43
|
+
export { PiAdapter } from "./harnesses/pi/PiAdapter.js";
|
|
44
|
+
export { createBuiltinAdapters } from "./harnesses/index.js";
|
|
45
|
+
export { AGENT_TYPES, AgentStatus } from "./adapters/AgentAdapter.js";
|
|
36
46
|
export type {
|
|
37
47
|
AgentAdapter,
|
|
38
48
|
AgentType,
|
|
39
49
|
AgentInfo,
|
|
40
50
|
ProcessInfo,
|
|
41
51
|
ConversationMessage,
|
|
52
|
+
ConversationOptions,
|
|
42
53
|
SessionSummary,
|
|
43
54
|
ListSessionsOptions,
|
|
44
55
|
AgentDetectionContext,
|
|
@@ -138,34 +149,34 @@ export type {
|
|
|
138
149
|
ProcessInspector,
|
|
139
150
|
DurableRunCompletion,
|
|
140
151
|
} from "./durable/DurableAgentRepository.js";
|
|
141
|
-
export { ClaudePrintAgentService } from "./
|
|
152
|
+
export { ClaudePrintAgentService } from "./harnesses/claude/durable/ClaudePrintAgentService.js";
|
|
142
153
|
export type {
|
|
143
154
|
ClaudePrintAgentServiceOptions,
|
|
144
155
|
ClaudePrintSendResult,
|
|
145
|
-
} from "./
|
|
146
|
-
export { CodexCliProbe } from "./
|
|
147
|
-
export type { CodexCliProbeOptions } from "./
|
|
148
|
-
export { CodexPrintRunner } from "./
|
|
156
|
+
} from "./harnesses/claude/durable/ClaudePrintAgentService.js";
|
|
157
|
+
export { CodexCliProbe } from "./harnesses/codex/durable/CodexCliProbe.js";
|
|
158
|
+
export type { CodexCliProbeOptions } from "./harnesses/codex/durable/CodexCliProbe.js";
|
|
159
|
+
export { CodexPrintRunner } from "./harnesses/codex/durable/CodexPrintRunner.js";
|
|
149
160
|
export type {
|
|
150
161
|
CodexPrintRunnerOptions,
|
|
151
162
|
CodexPrintRunRequest,
|
|
152
163
|
CodexPrintRunResult,
|
|
153
|
-
} from "./
|
|
154
|
-
export { CodexPrintAgentService } from "./
|
|
164
|
+
} from "./harnesses/codex/durable/CodexPrintRunner.js";
|
|
165
|
+
export { CodexPrintAgentService } from "./harnesses/codex/durable/CodexPrintAgentService.js";
|
|
155
166
|
export type {
|
|
156
167
|
CodexPrintAgentServiceOptions,
|
|
157
168
|
CodexPrintSendResult,
|
|
158
|
-
} from "./
|
|
159
|
-
export { PiCliProbe } from "./
|
|
160
|
-
export type { PiCliProbeOptions } from "./
|
|
161
|
-
export { PiPrintRunner } from "./
|
|
169
|
+
} from "./harnesses/codex/durable/CodexPrintAgentService.js";
|
|
170
|
+
export { PiCliProbe } from "./harnesses/pi/durable/PiCliProbe.js";
|
|
171
|
+
export type { PiCliProbeOptions } from "./harnesses/pi/durable/PiCliProbe.js";
|
|
172
|
+
export { PiPrintRunner } from "./harnesses/pi/durable/PiPrintRunner.js";
|
|
162
173
|
export type {
|
|
163
174
|
PiPrintRunnerOptions,
|
|
164
175
|
PiPrintRunRequest,
|
|
165
176
|
PiPrintRunResult,
|
|
166
|
-
} from "./
|
|
167
|
-
export { PiPrintAgentService } from "./
|
|
177
|
+
} from "./harnesses/pi/durable/PiPrintRunner.js";
|
|
178
|
+
export { PiPrintAgentService } from "./harnesses/pi/durable/PiPrintAgentService.js";
|
|
168
179
|
export type {
|
|
169
180
|
PiPrintAgentServiceOptions,
|
|
170
181
|
PiPrintSendResult,
|
|
171
|
-
} from "./
|
|
182
|
+
} from "./harnesses/pi/durable/PiPrintAgentService.js";
|
|
@@ -12,7 +12,10 @@ const ANSI_ESCAPE_PATTERN = new RegExp(`${String.fromCharCode(27)}\\[[0-?]*[ -/]
|
|
|
12
12
|
|
|
13
13
|
export type ReadinessStatus = "pass" | "warn" | "fail";
|
|
14
14
|
export type ReadinessAuthState = "authenticated" | "unauthenticated" | "unknown";
|
|
15
|
-
export type ReadinessAgentType = Exclude<
|
|
15
|
+
export type ReadinessAgentType = Exclude<
|
|
16
|
+
StartableAgentType,
|
|
17
|
+
"gemini_cli" | "kiro" | "antigravity_cli"
|
|
18
|
+
>;
|
|
16
19
|
type ReadinessInfoStatus = ReadinessStatus | "info";
|
|
17
20
|
|
|
18
21
|
type CommandResult = { stdout: string; stderr: string };
|
|
@@ -260,7 +260,9 @@ function agentRuntimeKind(type: StartableAgentType, provider: AgentRuntimeProvid
|
|
|
260
260
|
copilot: "copilot",
|
|
261
261
|
gemini_cli: "gemini",
|
|
262
262
|
grok_cli: "grok",
|
|
263
|
+
antigravity_cli: "agy",
|
|
263
264
|
opencode: "opencode",
|
|
264
265
|
pi: "pi",
|
|
266
|
+
kiro: "kiro",
|
|
265
267
|
}[type];
|
|
266
268
|
}
|
|
@@ -93,6 +93,8 @@ function herdrAgentMatchesType(herdrAgent: string, agentType: AgentType): boolea
|
|
|
93
93
|
copilot: ["copilot"],
|
|
94
94
|
gemini_cli: ["gemini", "gemini_cli"],
|
|
95
95
|
grok_cli: ["grok", "grok_cli"],
|
|
96
|
+
antigravity_cli: ["agy", "antigravity", "antigravity_cli"],
|
|
97
|
+
kiro: ["kiro", "kiro_cli", "kiro-cli"],
|
|
96
98
|
opencode: ["opencode"],
|
|
97
99
|
pi: ["pi"],
|
|
98
100
|
other: ["other"],
|
|
@@ -119,7 +121,9 @@ async function enrichHerdrAgentPanes(
|
|
|
119
121
|
);
|
|
120
122
|
}
|
|
121
123
|
|
|
122
|
-
function extractPaneProcessIds(
|
|
124
|
+
function extractPaneProcessIds(
|
|
125
|
+
value: unknown,
|
|
126
|
+
): Pick<HerdrAgentPane, "foregroundPids" | "shellPid"> {
|
|
123
127
|
const processInfo = getObject(value, ["result", "process_info"]);
|
|
124
128
|
if (!processInfo) return {};
|
|
125
129
|
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Incremental JSONL Summary
|
|
3
|
+
*
|
|
4
|
+
* Keeps a small per-file summary of append-only JSONL transcripts so repeated
|
|
5
|
+
* refreshes only parse bytes that were appended since the previous read.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* ```ts
|
|
9
|
+
* const summaries = new IncrementalJsonlSummary<MyState>({
|
|
10
|
+
* initial: () => ({ lastType: undefined }),
|
|
11
|
+
* reduce: (state, entry) => ({ ...state, lastType: (entry as any)?.type }),
|
|
12
|
+
* });
|
|
13
|
+
*
|
|
14
|
+
* const result = summaries.read(filePath); // { state, size, mtime, skippedBytes } | null
|
|
15
|
+
* summaries.prune(); // once per refresh: evict paths not read since the last prune
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Read rules, keyed by file path:
|
|
19
|
+
* - dev, ino, size and mtimeMs unchanged → cached state, 0 bytes read.
|
|
20
|
+
* - same dev/ino and size grew → read only the bytes after the last complete line.
|
|
21
|
+
* - anything else (first read, shrink, rotation, in-place rewrite) → rebuild.
|
|
22
|
+
*
|
|
23
|
+
* A rebuild of a file larger than `headBytes + tailBytes` (default 1 MiB +
|
|
24
|
+
* 4 MiB) is a bounded cold start rather than a full parse: it folds the
|
|
25
|
+
* complete lines in `[0, headBytes)`, calls `reducer.skip(state)`, then folds
|
|
26
|
+
* the lines that start inside `[size - tailBytes, size)`, including a line
|
|
27
|
+
* that starts exactly at `size - tailBytes` (one extra byte before the window
|
|
28
|
+
* is read to tell). Lines straddling a window edge are dropped. A field whose
|
|
29
|
+
* entries all sit in the skipped middle keeps whatever `skip` leaves; there is
|
|
30
|
+
* never a hidden full scan. The result's `skippedBytes` reports the unread
|
|
31
|
+
* middle, and the cache is seeded at end of file so later appends stay
|
|
32
|
+
* incremental.
|
|
33
|
+
*
|
|
34
|
+
* An unterminated last line is never folded into the committed state. If it
|
|
35
|
+
* already parses as JSON it is applied to the returned state only, and it is
|
|
36
|
+
* re-read (from its start offset) once more bytes arrive.
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
import * as fs from "fs";
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Pure fold over the entries of a JSONL file.
|
|
43
|
+
*
|
|
44
|
+
* `reduce` receives each non-blank line in file order: the parsed JSON value,
|
|
45
|
+
* or `undefined` when the line is not valid JSON. It must return a new state
|
|
46
|
+
* rather than mutate `state`, and the state should stay O(1) in file size
|
|
47
|
+
* (no entry arrays or raw file contents).
|
|
48
|
+
*
|
|
49
|
+
* `skip` is called once when a bounded cold start skips the middle of a file,
|
|
50
|
+
* between the head lines and the tail lines. It returns the state the tail
|
|
51
|
+
* lines fold onto: keep what the head established (e.g. the first entry) and
|
|
52
|
+
* reset fields that track the latest entry, so those come only from lines
|
|
53
|
+
* actually read. Without `skip`, tail lines fold straight onto the head state.
|
|
54
|
+
*/
|
|
55
|
+
export interface JsonlSummaryReducer<S> {
|
|
56
|
+
initial(): S;
|
|
57
|
+
reduce(state: S, entry: unknown): S;
|
|
58
|
+
skip?(state: S): S;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export interface JsonlSummaryResult<S> {
|
|
62
|
+
state: S;
|
|
63
|
+
/** File size in bytes when the state was computed. */
|
|
64
|
+
size: number;
|
|
65
|
+
/** File mtime (`fs.Stats.mtime`) when the state was computed. */
|
|
66
|
+
mtime: Date;
|
|
67
|
+
/** Bytes the bounded cold start did not read; 0 when the whole file was parsed. */
|
|
68
|
+
skippedBytes: number;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface JsonlSummaryBounds {
|
|
72
|
+
/** Bytes scanned from the start of the file on a cold start. */
|
|
73
|
+
headBytes: number;
|
|
74
|
+
/** Bytes scanned at the end of the file on a cold start. */
|
|
75
|
+
tailBytes: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export interface IncrementalJsonlSummaryOptions {
|
|
79
|
+
/** Bytes read per `fs.readSync` call. */
|
|
80
|
+
chunkSize?: number;
|
|
81
|
+
/** Cold-start scan bounds; `false` parses rebuilt files from byte 0. */
|
|
82
|
+
bounds?: JsonlSummaryBounds | false;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
interface CacheEntry<S> {
|
|
86
|
+
dev: number;
|
|
87
|
+
ino: number;
|
|
88
|
+
size: number;
|
|
89
|
+
mtimeMs: number;
|
|
90
|
+
mtime: Date;
|
|
91
|
+
/** Byte offset just past the last newline folded into `committed`. */
|
|
92
|
+
offset: number;
|
|
93
|
+
/** `offset` is mid-line: drop bytes up to and including the next newline. */
|
|
94
|
+
discarding: boolean;
|
|
95
|
+
/** State after every newline-terminated line. */
|
|
96
|
+
committed: S;
|
|
97
|
+
/** `committed` plus the unterminated last line, when it parses as JSON. */
|
|
98
|
+
state: S;
|
|
99
|
+
/** Bytes the cold start did not read. */
|
|
100
|
+
skippedBytes: number;
|
|
101
|
+
/** Prune generation in which this entry was last read. */
|
|
102
|
+
seen: number;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export const DEFAULT_HEAD_BYTES = 1024 * 1024;
|
|
106
|
+
export const DEFAULT_TAIL_BYTES = 4 * 1024 * 1024;
|
|
107
|
+
const DEFAULT_CHUNK_SIZE = 1024 * 1024;
|
|
108
|
+
const NEWLINE = 0x0a;
|
|
109
|
+
|
|
110
|
+
/** Fold a whole JSONL string with a reducer (one-shot, uncached). */
|
|
111
|
+
export function reduceJsonlContent<S>(reducer: JsonlSummaryReducer<S>, content: string): S {
|
|
112
|
+
let state = reducer.initial();
|
|
113
|
+
for (const line of content.split("\n")) {
|
|
114
|
+
state = reduceLine(reducer, state, line);
|
|
115
|
+
}
|
|
116
|
+
return state;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export class IncrementalJsonlSummary<S> {
|
|
120
|
+
private readonly entries = new Map<string, CacheEntry<S>>();
|
|
121
|
+
private readonly chunkSize: number;
|
|
122
|
+
private readonly bounds: JsonlSummaryBounds | false;
|
|
123
|
+
private generation = 0;
|
|
124
|
+
|
|
125
|
+
constructor(
|
|
126
|
+
private readonly reducer: JsonlSummaryReducer<S>,
|
|
127
|
+
options: IncrementalJsonlSummaryOptions = {},
|
|
128
|
+
) {
|
|
129
|
+
this.chunkSize = options.chunkSize ?? DEFAULT_CHUNK_SIZE;
|
|
130
|
+
this.bounds = options.bounds ?? {
|
|
131
|
+
headBytes: DEFAULT_HEAD_BYTES,
|
|
132
|
+
tailBytes: DEFAULT_TAIL_BYTES,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** Number of cached files. */
|
|
137
|
+
get size(): number {
|
|
138
|
+
return this.entries.size;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/** Return the summary of `filePath`, reading only what changed. Null if unreadable. */
|
|
142
|
+
read(filePath: string): JsonlSummaryResult<S> | null {
|
|
143
|
+
let stat: fs.Stats;
|
|
144
|
+
try {
|
|
145
|
+
stat = fs.statSync(filePath);
|
|
146
|
+
} catch {
|
|
147
|
+
this.entries.delete(filePath);
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
const cached = this.entries.get(filePath);
|
|
152
|
+
const sameFile = cached !== undefined && cached.dev === stat.dev && cached.ino === stat.ino;
|
|
153
|
+
|
|
154
|
+
if (sameFile && cached.size === stat.size && cached.mtimeMs === stat.mtimeMs) {
|
|
155
|
+
cached.seen = this.generation;
|
|
156
|
+
return toResult(cached);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const appended = sameFile && stat.size > cached.size;
|
|
160
|
+
const entry: CacheEntry<S> = appended
|
|
161
|
+
? { ...cached }
|
|
162
|
+
: {
|
|
163
|
+
dev: stat.dev,
|
|
164
|
+
ino: stat.ino,
|
|
165
|
+
size: 0,
|
|
166
|
+
mtimeMs: 0,
|
|
167
|
+
mtime: stat.mtime,
|
|
168
|
+
offset: 0,
|
|
169
|
+
discarding: false,
|
|
170
|
+
committed: this.reducer.initial(),
|
|
171
|
+
state: this.reducer.initial(),
|
|
172
|
+
skippedBytes: 0,
|
|
173
|
+
seen: this.generation,
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
try {
|
|
177
|
+
const fd = fs.openSync(filePath, "r");
|
|
178
|
+
try {
|
|
179
|
+
const bounds = this.bounds;
|
|
180
|
+
if (!appended && bounds && stat.size > bounds.headBytes + bounds.tailBytes) {
|
|
181
|
+
this.readBounded(fd, entry, stat.size, bounds);
|
|
182
|
+
} else {
|
|
183
|
+
this.readRange(fd, entry, stat.size);
|
|
184
|
+
}
|
|
185
|
+
} finally {
|
|
186
|
+
fs.closeSync(fd);
|
|
187
|
+
}
|
|
188
|
+
} catch {
|
|
189
|
+
this.entries.delete(filePath);
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
entry.mtimeMs = stat.mtimeMs;
|
|
194
|
+
entry.mtime = stat.mtime;
|
|
195
|
+
entry.seen = this.generation;
|
|
196
|
+
this.entries.set(filePath, entry);
|
|
197
|
+
return toResult(entry);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/** Evict entries not read since the previous `prune()` call. Call once per refresh. */
|
|
201
|
+
prune(): void {
|
|
202
|
+
for (const [filePath, entry] of this.entries) {
|
|
203
|
+
if (entry.seen !== this.generation) {
|
|
204
|
+
this.entries.delete(filePath);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
this.generation++;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
/** Cold start: fold the head lines, `skip`, then the lines starting in the tail window. */
|
|
211
|
+
private readBounded(
|
|
212
|
+
fd: number,
|
|
213
|
+
entry: CacheEntry<S>,
|
|
214
|
+
size: number,
|
|
215
|
+
{ headBytes, tailBytes }: JsonlSummaryBounds,
|
|
216
|
+
): void {
|
|
217
|
+
this.readRange(fd, entry, headBytes);
|
|
218
|
+
|
|
219
|
+
const tailStart = size - tailBytes;
|
|
220
|
+
const head = entry.committed;
|
|
221
|
+
entry.committed = this.reducer.skip ? this.reducer.skip(head) : head;
|
|
222
|
+
// Lines are only folded from their first byte, and tailStart may fall
|
|
223
|
+
// mid-line. Discard from one byte earlier (tailStart > headBytes >= 0): if
|
|
224
|
+
// that byte is the newline ending the previous line, discarding stops there
|
|
225
|
+
// and the line starting at tailStart is folded; otherwise the partial line
|
|
226
|
+
// is dropped up to its newline.
|
|
227
|
+
entry.offset = tailStart - 1;
|
|
228
|
+
entry.discarding = true;
|
|
229
|
+
entry.skippedBytes = tailStart - headBytes;
|
|
230
|
+
this.readRange(fd, entry, size);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/** Fold complete lines in `[entry.offset, end)` into `entry`. */
|
|
234
|
+
private readRange(fd: number, entry: CacheEntry<S>, end: number): void {
|
|
235
|
+
const chunk = Buffer.allocUnsafe(Math.min(this.chunkSize, Math.max(end - entry.offset, 1)));
|
|
236
|
+
let position = entry.offset;
|
|
237
|
+
let carry: Buffer | undefined;
|
|
238
|
+
let committed = entry.committed;
|
|
239
|
+
let discarding = entry.discarding;
|
|
240
|
+
|
|
241
|
+
while (position < end) {
|
|
242
|
+
const bytesRead = fs.readSync(fd, chunk, 0, Math.min(chunk.length, end - position), position);
|
|
243
|
+
if (bytesRead === 0) break;
|
|
244
|
+
position += bytesRead;
|
|
245
|
+
|
|
246
|
+
let lineStart = 0;
|
|
247
|
+
let newline = chunk.indexOf(NEWLINE, 0);
|
|
248
|
+
while (newline !== -1 && newline < bytesRead) {
|
|
249
|
+
if (discarding) {
|
|
250
|
+
discarding = false;
|
|
251
|
+
} else {
|
|
252
|
+
const lineBytes = carry
|
|
253
|
+
? Buffer.concat([carry, chunk.subarray(lineStart, newline)])
|
|
254
|
+
: chunk.subarray(lineStart, newline);
|
|
255
|
+
committed = reduceLine(this.reducer, committed, lineBytes.toString("utf8"));
|
|
256
|
+
}
|
|
257
|
+
carry = undefined;
|
|
258
|
+
lineStart = newline + 1;
|
|
259
|
+
newline = chunk.indexOf(NEWLINE, lineStart);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
if (lineStart < bytesRead && !discarding) {
|
|
263
|
+
const rest = Buffer.from(chunk.subarray(lineStart, bytesRead));
|
|
264
|
+
carry = carry ? Buffer.concat([carry, rest]) : rest;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
entry.committed = committed;
|
|
269
|
+
entry.discarding = discarding;
|
|
270
|
+
entry.offset = position - (carry?.length ?? 0);
|
|
271
|
+
entry.size = position;
|
|
272
|
+
entry.state = carry
|
|
273
|
+
? reduceTentative(this.reducer, committed, carry.toString("utf8"))
|
|
274
|
+
: committed;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
function toResult<S>(entry: CacheEntry<S>): JsonlSummaryResult<S> {
|
|
279
|
+
return {
|
|
280
|
+
state: entry.state,
|
|
281
|
+
size: entry.size,
|
|
282
|
+
mtime: entry.mtime,
|
|
283
|
+
skippedBytes: entry.skippedBytes,
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
function reduceLine<S>(reducer: JsonlSummaryReducer<S>, state: S, line: string): S {
|
|
288
|
+
if (!/\S/.test(line)) return state;
|
|
289
|
+
let entry: unknown;
|
|
290
|
+
try {
|
|
291
|
+
entry = JSON.parse(line);
|
|
292
|
+
} catch {
|
|
293
|
+
entry = undefined;
|
|
294
|
+
}
|
|
295
|
+
return reducer.reduce(state, entry);
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
/** Apply an unterminated line only if it is already valid JSON (i.e. fully written). */
|
|
299
|
+
function reduceTentative<S>(reducer: JsonlSummaryReducer<S>, state: S, line: string): S {
|
|
300
|
+
if (!/\S/.test(line)) return state;
|
|
301
|
+
try {
|
|
302
|
+
return reducer.reduce(state, JSON.parse(line));
|
|
303
|
+
} catch {
|
|
304
|
+
return state;
|
|
305
|
+
}
|
|
306
|
+
}
|
package/src/utils/agents.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import path from "path";
|
|
2
|
-
import type {
|
|
2
|
+
import type { AGENT_TYPES } from "../adapters/AgentAdapter.js";
|
|
3
|
+
import { executablePath } from "./process.js";
|
|
3
4
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
"claude" | "codex" | "copilot" | "gemini_cli" | "grok_cli" | "opencode" | "pi"
|
|
7
|
-
>;
|
|
5
|
+
/** Every built-in harness can be started, so each needs an {@link AGENTS} entry. */
|
|
6
|
+
export type StartableAgentType = (typeof AGENT_TYPES)[number];
|
|
8
7
|
|
|
9
8
|
export interface AgentConfig {
|
|
10
9
|
/** Shell command to launch the agent (sent to tmux via `send-keys`). */
|
|
@@ -24,42 +23,85 @@ export const AGENTS: Record<StartableAgentType, AgentConfig> = {
|
|
|
24
23
|
copilot: { command: "copilot", matches: matchArgv0Name("copilot-cli") },
|
|
25
24
|
gemini_cli: { command: "gemini", matches: matchAnyToken("gemini") },
|
|
26
25
|
grok_cli: { command: "grok", matches: matchArgv0("grok") },
|
|
26
|
+
antigravity_cli: { command: "agy", matches: matchArgv0("agy") },
|
|
27
27
|
opencode: { command: "opencode", matches: matchArgv0("opencode") },
|
|
28
28
|
pi: { command: "pi", matches: matchAnyBasename(["pi"]) },
|
|
29
|
+
kiro: { command: "kiro-cli", matches: matchAnyBasename(["kiro-cli", "kiro"]) },
|
|
29
30
|
};
|
|
30
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Matchers read a `ps` command line, where argv is joined with spaces. argv[0]
|
|
34
|
+
* is resolved with {@link executablePath} so executables installed under
|
|
35
|
+
* directories containing spaces are recognised, while arguments are never
|
|
36
|
+
* folded into the executable path unless that combined path is a real file.
|
|
37
|
+
*
|
|
38
|
+
* The filesystem is consulted only when a token after the first could be part
|
|
39
|
+
* of a matching argv[0]; commands whose first token already decides the match,
|
|
40
|
+
* or that contain no candidate token at all, are handled with string checks.
|
|
41
|
+
*/
|
|
42
|
+
const ABSOLUTE_PATH = /^(?:\/|[a-zA-Z]:[\\/])/;
|
|
43
|
+
const PATH_SEPARATOR = /[\\/]/;
|
|
44
|
+
|
|
45
|
+
function basenameOf(token: string): string {
|
|
46
|
+
return path.basename(token).toLowerCase();
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function tokensOf(psCommand: string): string[] {
|
|
50
|
+
return psCommand.trim().split(/\s+/).filter(Boolean);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** Split a command line into its resolved argv[0] and the remaining argument tokens. */
|
|
54
|
+
function splitArgv0(psCommand: string): { argv0: string; args: string[] } {
|
|
55
|
+
const command = psCommand.trim();
|
|
56
|
+
const argv0 = executablePath(command);
|
|
57
|
+
return { argv0, args: tokensOf(command.slice(argv0.length)) };
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Whether argv[0] may span several tokens, i.e. a later path-like token satisfies `test`. */
|
|
61
|
+
function mayContinueArgv0(tokens: string[], test: (token: string) => boolean): boolean {
|
|
62
|
+
return (
|
|
63
|
+
ABSOLUTE_PATH.test(tokens[0]) &&
|
|
64
|
+
tokens.slice(1).some((token) => PATH_SEPARATOR.test(token) && test(token))
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
31
68
|
function matchArgv0(name: string): (psCommand: string) => boolean {
|
|
32
69
|
const lower = name.toLowerCase();
|
|
70
|
+
const test = (token: string) => basenameOf(token) === lower;
|
|
33
71
|
return (psCommand) => {
|
|
34
|
-
const
|
|
35
|
-
|
|
72
|
+
const tokens = tokensOf(psCommand);
|
|
73
|
+
if (tokens.length === 0) return false;
|
|
74
|
+
if (test(tokens[0])) return true;
|
|
75
|
+
return mayContinueArgv0(tokens, test) && test(executablePath(psCommand));
|
|
36
76
|
};
|
|
37
77
|
}
|
|
38
78
|
|
|
39
79
|
function matchArgv0Name(name: string): (psCommand: string) => boolean {
|
|
40
80
|
const lower = name.toLowerCase();
|
|
81
|
+
const test = (token: string) => token.toLowerCase().includes(lower);
|
|
41
82
|
return (psCommand) => {
|
|
42
|
-
const
|
|
43
|
-
|
|
83
|
+
const tokens = tokensOf(psCommand);
|
|
84
|
+
if (tokens.length === 0) return false;
|
|
85
|
+
if (test(tokens[0])) return true;
|
|
86
|
+
return mayContinueArgv0(tokens, test) && test(executablePath(psCommand));
|
|
44
87
|
};
|
|
45
88
|
}
|
|
46
89
|
|
|
47
90
|
function matchAnyToken(name: string): (psCommand: string) => boolean {
|
|
48
|
-
|
|
49
|
-
return (psCommand) => {
|
|
50
|
-
for (const token of psCommand.trim().split(/\s+/)) {
|
|
51
|
-
if (path.basename(token).toLowerCase() === lower) return true;
|
|
52
|
-
}
|
|
53
|
-
return false;
|
|
54
|
-
};
|
|
91
|
+
return matchAnyBasename([name]);
|
|
55
92
|
}
|
|
56
93
|
|
|
57
94
|
function matchAnyBasename(names: string[]): (psCommand: string) => boolean {
|
|
58
95
|
const lowers = new Set(names.map((name) => name.toLowerCase()));
|
|
96
|
+
const test = (token: string) => lowers.has(basenameOf(token));
|
|
59
97
|
return (psCommand) => {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return false;
|
|
98
|
+
const tokens = tokensOf(psCommand);
|
|
99
|
+
if (tokens.length === 0) return false;
|
|
100
|
+
if (test(tokens[0])) return true;
|
|
101
|
+
if (!tokens.slice(1).some(test)) return false;
|
|
102
|
+
if (!ABSOLUTE_PATH.test(tokens[0])) return true;
|
|
103
|
+
|
|
104
|
+
const { argv0, args } = splitArgv0(psCommand);
|
|
105
|
+
return test(argv0) || args.some(test);
|
|
64
106
|
};
|
|
65
107
|
}
|
package/src/utils/index.ts
CHANGED
|
@@ -4,7 +4,9 @@ export {
|
|
|
4
4
|
batchGetProcessStartTimes,
|
|
5
5
|
enrichProcesses,
|
|
6
6
|
captureProcessSnapshot,
|
|
7
|
+
createProcessSnapshotCapture,
|
|
7
8
|
} from "./process.js";
|
|
9
|
+
export type { ProcessExec, ProcessSnapshotCapture, ProcessSnapshotOptions } from "./process.js";
|
|
8
10
|
export { getProcessTty } from "./process.js";
|
|
9
11
|
export { batchGetSessionFileBirthtimes } from "./session.js";
|
|
10
12
|
export type { SessionFile } from "./session.js";
|