@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,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copilot Adapter
|
|
3
|
+
*
|
|
4
|
+
* Detects running GitHub Copilot CLI agents by:
|
|
5
|
+
* 1. Filtering Copilot processes from a shared asynchronous process snapshot
|
|
6
|
+
* 2. Using snapshot CWD and start-time enrichment
|
|
7
|
+
* 3. Mapping active ~/.copilot/session-state/{sessionId}/inuse.{pid}.lock files to processes
|
|
8
|
+
* (only directories modified since the process started are listed, and a
|
|
9
|
+
* known lock is re-validated with one stat on later refreshes)
|
|
10
|
+
* 4. Reading events.jsonl as the primary session/conversation source (incrementally
|
|
11
|
+
* cached across refreshes, so unchanged files are not re-read)
|
|
12
|
+
* 5. Reading workspace.yaml as a flat fallback metadata source
|
|
13
|
+
*/
|
|
14
|
+
import type { AgentAdapter, AgentInfo, ConversationMessage, ConversationOptions, ListSessionsOptions, ProcessInfo, SessionSummary, AgentDetectionContext } from "../../adapters/AgentAdapter.js";
|
|
15
|
+
import { AgentRegistry } from "../../utils/AgentRegistry.js";
|
|
16
|
+
export interface CopilotAdapterOptions {
|
|
17
|
+
sessionStateDir?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare class CopilotAdapter implements AgentAdapter {
|
|
20
|
+
readonly type: "copilot";
|
|
21
|
+
readonly processNames: readonly ["copilot"];
|
|
22
|
+
private readonly registry;
|
|
23
|
+
private readonly parser;
|
|
24
|
+
private readonly mapper;
|
|
25
|
+
private readonly locator;
|
|
26
|
+
constructor(registry?: AgentRegistry, options?: CopilotAdapterOptions);
|
|
27
|
+
canHandle(processInfo: ProcessInfo): boolean;
|
|
28
|
+
detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]>;
|
|
29
|
+
private detectRunningAgents;
|
|
30
|
+
getConversation(sessionFilePath: string, options?: ConversationOptions): ConversationMessage[];
|
|
31
|
+
listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;
|
|
32
|
+
findSessionsById(sessionId: string): Promise<SessionSummary[]>;
|
|
33
|
+
private toSessionSummary;
|
|
34
|
+
private applyWrapperRegistryName;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=CopilotAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopilotAdapter.d.ts","sourceRoot":"","sources":["../../../src/harnesses/copilot/CopilotAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,aAAa,EAAsB,MAAM,8BAA8B,CAAC;AAMjF,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,cAAe,YAAW,YAAY;IACjD,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,QAAQ,CAAC,YAAY,uBAAwB;IAE7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;gBAG9C,QAAQ,GAAE,aAAuC,EACjD,OAAO,GAAE,qBAA0B;IAUrC,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAItC,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YAS3D,mBAAmB;IAoCjC,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;IAcnE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAYpE,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,wBAAwB;CAYjC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copilot Adapter
|
|
3
|
+
*
|
|
4
|
+
* Detects running GitHub Copilot CLI agents by:
|
|
5
|
+
* 1. Filtering Copilot processes from a shared asynchronous process snapshot
|
|
6
|
+
* 2. Using snapshot CWD and start-time enrichment
|
|
7
|
+
* 3. Mapping active ~/.copilot/session-state/{sessionId}/inuse.{pid}.lock files to processes
|
|
8
|
+
* (only directories modified since the process started are listed, and a
|
|
9
|
+
* known lock is re-validated with one stat on later refreshes)
|
|
10
|
+
* 4. Reading events.jsonl as the primary session/conversation source (incrementally
|
|
11
|
+
* cached across refreshes, so unchanged files are not re-read)
|
|
12
|
+
* 5. Reading workspace.yaml as a flat fallback metadata source
|
|
13
|
+
*/ import * as path from "path";
|
|
14
|
+
import { findWrapperProcess, findWrapperProcessPids } from "../../utils/process.js";
|
|
15
|
+
import { AgentRegistry } from "../../utils/AgentRegistry.js";
|
|
16
|
+
import { CopilotAgentMapper } from "./CopilotAgentMapper.js";
|
|
17
|
+
import { CopilotSessionLocator } from "./CopilotSessionLocator.js";
|
|
18
|
+
import { CopilotSessionParser } from "./CopilotSessionParser.js";
|
|
19
|
+
import { findHarnessProcesses, homeDir, matchesExecutable } from "../shared.js";
|
|
20
|
+
export class CopilotAdapter {
|
|
21
|
+
type = "copilot";
|
|
22
|
+
processNames = [
|
|
23
|
+
"copilot"
|
|
24
|
+
];
|
|
25
|
+
registry;
|
|
26
|
+
parser;
|
|
27
|
+
mapper;
|
|
28
|
+
locator;
|
|
29
|
+
constructor(registry = AgentRegistry.default(), options = {}){
|
|
30
|
+
this.registry = registry;
|
|
31
|
+
this.parser = new CopilotSessionParser();
|
|
32
|
+
this.mapper = new CopilotAgentMapper(this.parser);
|
|
33
|
+
this.locator = new CopilotSessionLocator({
|
|
34
|
+
sessionStateDir: options.sessionStateDir ?? path.join(homeDir(), ".copilot", "session-state")
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
canHandle(processInfo) {
|
|
38
|
+
return matchesExecutable(processInfo.command, "copilot");
|
|
39
|
+
}
|
|
40
|
+
async detectAgents(context) {
|
|
41
|
+
try {
|
|
42
|
+
return await this.detectRunningAgents(context);
|
|
43
|
+
} finally{
|
|
44
|
+
// Drop cached event summaries for sessions that were not part of this refresh
|
|
45
|
+
this.parser.pruneSessionCache();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
async detectRunningAgents(context) {
|
|
49
|
+
const { processes } = await findHarnessProcesses(this, context);
|
|
50
|
+
if (processes.length === 0) return [];
|
|
51
|
+
const processByPid = new Map(processes.map((proc)=>[
|
|
52
|
+
proc.pid,
|
|
53
|
+
proc
|
|
54
|
+
]));
|
|
55
|
+
const registryEntriesByPid = new Map(this.registry.list().map((entry)=>[
|
|
56
|
+
entry.pid,
|
|
57
|
+
entry
|
|
58
|
+
]));
|
|
59
|
+
const matchedPids = new Set();
|
|
60
|
+
const matchedProcesses = [];
|
|
61
|
+
const agents = [];
|
|
62
|
+
for (const lock of this.locator.discoverActiveLocks(processes)){
|
|
63
|
+
const proc = processByPid.get(lock.pid);
|
|
64
|
+
if (!proc) continue;
|
|
65
|
+
const session = this.parser.readSessionDirIncremental(lock.sessionDir, lock.sessionId);
|
|
66
|
+
if (!session) continue;
|
|
67
|
+
const agent = this.mapper.mapSessionToAgent(session, proc);
|
|
68
|
+
this.applyWrapperRegistryName(agent, proc, processes, registryEntriesByPid);
|
|
69
|
+
agents.push(agent);
|
|
70
|
+
matchedPids.add(proc.pid);
|
|
71
|
+
matchedProcesses.push(proc);
|
|
72
|
+
}
|
|
73
|
+
const wrapperPids = findWrapperProcessPids(processes, matchedProcesses);
|
|
74
|
+
for (const proc of processes){
|
|
75
|
+
if (!matchedPids.has(proc.pid) && !wrapperPids.has(proc.pid)) {
|
|
76
|
+
const agent = this.mapper.mapProcessOnlyAgent(proc);
|
|
77
|
+
this.applyWrapperRegistryName(agent, proc, processes, registryEntriesByPid);
|
|
78
|
+
agents.push(agent);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return agents;
|
|
82
|
+
}
|
|
83
|
+
getConversation(sessionFilePath, options) {
|
|
84
|
+
return this.parser.getConversation(sessionFilePath, options);
|
|
85
|
+
}
|
|
86
|
+
async listSessions(opts) {
|
|
87
|
+
const summaries = [];
|
|
88
|
+
for (const { sessionDir, sessionId } of this.locator.listSessionDirs()){
|
|
89
|
+
const session = this.parser.readSessionDir(sessionDir, sessionId);
|
|
90
|
+
if (!session) continue;
|
|
91
|
+
if (opts?.cwd !== undefined && session.projectPath !== opts.cwd) continue;
|
|
92
|
+
summaries.push(this.toSessionSummary(session));
|
|
93
|
+
}
|
|
94
|
+
return summaries;
|
|
95
|
+
}
|
|
96
|
+
async findSessionsById(sessionId) {
|
|
97
|
+
const match = this.locator.findSessionDirById(sessionId);
|
|
98
|
+
if (match) {
|
|
99
|
+
const session = this.parser.readSessionDir(match.sessionDir, match.sessionId);
|
|
100
|
+
if (session?.sessionId === sessionId) {
|
|
101
|
+
return [
|
|
102
|
+
this.toSessionSummary(session)
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return (await this.listSessions()).filter((session)=>session.sessionId === sessionId);
|
|
107
|
+
}
|
|
108
|
+
toSessionSummary(session) {
|
|
109
|
+
return {
|
|
110
|
+
type: this.type,
|
|
111
|
+
sessionId: session.sessionId,
|
|
112
|
+
cwd: session.projectPath,
|
|
113
|
+
firstUserMessage: session.firstUserMessage,
|
|
114
|
+
lastActive: session.lastActive,
|
|
115
|
+
startedAt: session.sessionStart,
|
|
116
|
+
sessionFilePath: session.eventsFilePath
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
applyWrapperRegistryName(agent, processInfo, processes, registryEntriesByPid) {
|
|
120
|
+
const wrapper = findWrapperProcess(processes, processInfo);
|
|
121
|
+
const wrapperEntry = wrapper ? registryEntriesByPid.get(wrapper.pid) : undefined;
|
|
122
|
+
if (wrapperEntry?.type === this.type) {
|
|
123
|
+
agent.name = wrapperEntry.name;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
//# sourceMappingURL=CopilotAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/harnesses/copilot/CopilotAdapter.ts"],"sourcesContent":["/**\n * Copilot Adapter\n *\n * Detects running GitHub Copilot CLI agents by:\n * 1. Filtering Copilot processes from a shared asynchronous process snapshot\n * 2. Using snapshot CWD and start-time enrichment\n * 3. Mapping active ~/.copilot/session-state/{sessionId}/inuse.{pid}.lock files to processes\n * (only directories modified since the process started are listed, and a\n * known lock is re-validated with one stat on later refreshes)\n * 4. Reading events.jsonl as the primary session/conversation source (incrementally\n * cached across refreshes, so unchanged files are not re-read)\n * 5. Reading workspace.yaml as a flat fallback metadata source\n */\n\nimport * as path from \"path\";\nimport type {\n AgentAdapter,\n AgentInfo,\n ConversationMessage,\n ConversationOptions,\n ListSessionsOptions,\n ProcessInfo,\n SessionSummary,\n AgentDetectionContext,\n} from \"../../adapters/AgentAdapter.js\";\nimport { findWrapperProcess, findWrapperProcessPids } from \"../../utils/process.js\";\nimport { AgentRegistry, type RegistryEntry } from \"../../utils/AgentRegistry.js\";\nimport { CopilotAgentMapper } from \"./CopilotAgentMapper.js\";\nimport { CopilotSessionLocator } from \"./CopilotSessionLocator.js\";\nimport { CopilotSessionParser, type CopilotSession } from \"./CopilotSessionParser.js\";\nimport { findHarnessProcesses, homeDir, matchesExecutable } from \"../shared.js\";\n\nexport interface CopilotAdapterOptions {\n sessionStateDir?: string;\n}\n\nexport class CopilotAdapter implements AgentAdapter {\n readonly type = \"copilot\" as const;\n readonly processNames = [\"copilot\"] as const;\n\n private readonly registry: AgentRegistry;\n private readonly parser: CopilotSessionParser;\n private readonly mapper: CopilotAgentMapper;\n private readonly locator: CopilotSessionLocator;\n\n constructor(\n registry: AgentRegistry = AgentRegistry.default(),\n options: CopilotAdapterOptions = {},\n ) {\n this.registry = registry;\n this.parser = new CopilotSessionParser();\n this.mapper = new CopilotAgentMapper(this.parser);\n this.locator = new CopilotSessionLocator({\n sessionStateDir: options.sessionStateDir ?? path.join(homeDir(), \".copilot\", \"session-state\"),\n });\n }\n\n canHandle(processInfo: ProcessInfo): boolean {\n return matchesExecutable(processInfo.command, \"copilot\");\n }\n\n async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n try {\n return await this.detectRunningAgents(context);\n } finally {\n // Drop cached event summaries for sessions that were not part of this refresh\n this.parser.pruneSessionCache();\n }\n }\n\n private async detectRunningAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n const { processes } = await findHarnessProcesses(this, context);\n if (processes.length === 0) return [];\n\n const processByPid = new Map(processes.map((proc) => [proc.pid, proc]));\n const registryEntriesByPid = new Map(this.registry.list().map((entry) => [entry.pid, entry]));\n const matchedPids = new Set<number>();\n const matchedProcesses: ProcessInfo[] = [];\n const agents: AgentInfo[] = [];\n\n for (const lock of this.locator.discoverActiveLocks(processes)) {\n const proc = processByPid.get(lock.pid);\n if (!proc) continue;\n\n const session = this.parser.readSessionDirIncremental(lock.sessionDir, lock.sessionId);\n if (!session) continue;\n\n const agent = this.mapper.mapSessionToAgent(session, proc);\n this.applyWrapperRegistryName(agent, proc, processes, registryEntriesByPid);\n agents.push(agent);\n matchedPids.add(proc.pid);\n matchedProcesses.push(proc);\n }\n\n const wrapperPids = findWrapperProcessPids(processes, matchedProcesses);\n for (const proc of processes) {\n if (!matchedPids.has(proc.pid) && !wrapperPids.has(proc.pid)) {\n const agent = this.mapper.mapProcessOnlyAgent(proc);\n this.applyWrapperRegistryName(agent, proc, processes, registryEntriesByPid);\n agents.push(agent);\n }\n }\n\n return agents;\n }\n\n getConversation(sessionFilePath: string, options?: ConversationOptions): ConversationMessage[] {\n return this.parser.getConversation(sessionFilePath, options);\n }\n\n async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {\n const summaries: SessionSummary[] = [];\n\n for (const { sessionDir, sessionId } of this.locator.listSessionDirs()) {\n const session = this.parser.readSessionDir(sessionDir, sessionId);\n if (!session) continue;\n if (opts?.cwd !== undefined && session.projectPath !== opts.cwd) continue;\n\n summaries.push(this.toSessionSummary(session));\n }\n\n return summaries;\n }\n\n async findSessionsById(sessionId: string): Promise<SessionSummary[]> {\n const match = this.locator.findSessionDirById(sessionId);\n if (match) {\n const session = this.parser.readSessionDir(match.sessionDir, match.sessionId);\n if (session?.sessionId === sessionId) {\n return [this.toSessionSummary(session)];\n }\n }\n\n return (await this.listSessions()).filter((session) => session.sessionId === sessionId);\n }\n\n private toSessionSummary(session: CopilotSession): SessionSummary {\n return {\n type: this.type,\n sessionId: session.sessionId,\n cwd: session.projectPath,\n firstUserMessage: session.firstUserMessage,\n lastActive: session.lastActive,\n startedAt: session.sessionStart,\n sessionFilePath: session.eventsFilePath,\n };\n }\n\n private applyWrapperRegistryName(\n agent: AgentInfo,\n processInfo: ProcessInfo,\n processes: ProcessInfo[],\n registryEntriesByPid: Map<number, RegistryEntry>,\n ): void {\n const wrapper = findWrapperProcess(processes, processInfo);\n const wrapperEntry = wrapper ? registryEntriesByPid.get(wrapper.pid) : undefined;\n if (wrapperEntry?.type === this.type) {\n agent.name = wrapperEntry.name;\n }\n }\n}\n"],"names":["path","findWrapperProcess","findWrapperProcessPids","AgentRegistry","CopilotAgentMapper","CopilotSessionLocator","CopilotSessionParser","findHarnessProcesses","homeDir","matchesExecutable","CopilotAdapter","type","processNames","registry","parser","mapper","locator","default","options","sessionStateDir","join","canHandle","processInfo","command","detectAgents","context","detectRunningAgents","pruneSessionCache","processes","length","processByPid","Map","map","proc","pid","registryEntriesByPid","list","entry","matchedPids","Set","matchedProcesses","agents","lock","discoverActiveLocks","get","session","readSessionDirIncremental","sessionDir","sessionId","agent","mapSessionToAgent","applyWrapperRegistryName","push","add","wrapperPids","has","mapProcessOnlyAgent","getConversation","sessionFilePath","listSessions","opts","summaries","listSessionDirs","readSessionDir","cwd","undefined","projectPath","toSessionSummary","findSessionsById","match","findSessionDirById","filter","firstUserMessage","lastActive","startedAt","sessionStart","eventsFilePath","wrapper","wrapperEntry","name"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopilotAgentMapper.d.ts","sourceRoot":"","sources":["../../../src/harnesses/copilot/CopilotAgentMapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7E,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGtF,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,oBAAiD;IAEtF,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,GAAG,SAAS;IAe/E,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS;CAGzD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { generateAgentName } from "../../utils/matching.js";
|
|
2
|
+
import { CopilotSessionParser } from "./CopilotSessionParser.js";
|
|
3
|
+
import { processOnlyAgent } from "../shared.js";
|
|
4
|
+
export class CopilotAgentMapper {
|
|
5
|
+
parser;
|
|
6
|
+
constructor(parser = new CopilotSessionParser()){
|
|
7
|
+
this.parser = parser;
|
|
8
|
+
}
|
|
9
|
+
mapSessionToAgent(session, processInfo) {
|
|
10
|
+
const projectPath = session.projectPath || processInfo.cwd || "";
|
|
11
|
+
return {
|
|
12
|
+
name: generateAgentName(projectPath, processInfo.pid),
|
|
13
|
+
type: "copilot",
|
|
14
|
+
status: this.parser.determineStatus(session),
|
|
15
|
+
summary: session.summary || "Copilot session active",
|
|
16
|
+
pid: processInfo.pid,
|
|
17
|
+
projectPath,
|
|
18
|
+
sessionId: session.sessionId,
|
|
19
|
+
lastActive: session.lastActive,
|
|
20
|
+
sessionFilePath: session.eventsFilePath
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
mapProcessOnlyAgent(processInfo) {
|
|
24
|
+
return processOnlyAgent("copilot", processInfo, {
|
|
25
|
+
summary: "Copilot process running"
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
//# sourceMappingURL=CopilotAgentMapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/harnesses/copilot/CopilotAgentMapper.ts"],"sourcesContent":["import type { AgentInfo, ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport { generateAgentName } from \"../../utils/matching.js\";\nimport { CopilotSessionParser, type CopilotSession } from \"./CopilotSessionParser.js\";\nimport { processOnlyAgent } from \"../shared.js\";\n\nexport class CopilotAgentMapper {\n constructor(private readonly parser: CopilotSessionParser = new CopilotSessionParser()) {}\n\n mapSessionToAgent(session: CopilotSession, processInfo: ProcessInfo): AgentInfo {\n const projectPath = session.projectPath || processInfo.cwd || \"\";\n return {\n name: generateAgentName(projectPath, processInfo.pid),\n type: \"copilot\",\n status: this.parser.determineStatus(session),\n summary: session.summary || \"Copilot session active\",\n pid: processInfo.pid,\n projectPath,\n sessionId: session.sessionId,\n lastActive: session.lastActive,\n sessionFilePath: session.eventsFilePath,\n };\n }\n\n mapProcessOnlyAgent(processInfo: ProcessInfo): AgentInfo {\n return processOnlyAgent(\"copilot\", processInfo, { summary: \"Copilot process running\" });\n }\n}\n"],"names":["generateAgentName","CopilotSessionParser","processOnlyAgent","CopilotAgentMapper","parser","mapSessionToAgent","session","processInfo","projectPath","cwd","name","pid","type","status","determineStatus","summary","sessionId","lastActive","sessionFilePath","eventsFilePath","mapProcessOnlyAgent"],"mappings":"AACA,SAASA,iBAAiB,QAAQ,0BAA0B;AAC5D,SAASC,oBAAoB,QAA6B,4BAA4B;AACtF,SAASC,gBAAgB,QAAQ,eAAe;AAEhD,OAAO,MAAMC;;IACX,YAAY,AAAiBC,SAA+B,IAAIH,sBAAsB,CAAE;aAA3DG,SAAAA;IAA4D;IAEzFC,kBAAkBC,OAAuB,EAAEC,WAAwB,EAAa;QAC9E,MAAMC,cAAcF,QAAQE,WAAW,IAAID,YAAYE,GAAG,IAAI;QAC9D,OAAO;YACLC,MAAMV,kBAAkBQ,aAAaD,YAAYI,GAAG;YACpDC,MAAM;YACNC,QAAQ,IAAI,CAACT,MAAM,CAACU,eAAe,CAACR;YACpCS,SAAST,QAAQS,OAAO,IAAI;YAC5BJ,KAAKJ,YAAYI,GAAG;YACpBH;YACAQ,WAAWV,QAAQU,SAAS;YAC5BC,YAAYX,QAAQW,UAAU;YAC9BC,iBAAiBZ,QAAQa,cAAc;QACzC;IACF;IAEAC,oBAAoBb,WAAwB,EAAa;QACvD,OAAOL,iBAAiB,WAAWK,aAAa;YAAEQ,SAAS;QAA0B;IACvF;AACF"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export interface CopilotLock {
|
|
2
|
+
sessionDir: string;
|
|
3
|
+
sessionId: string;
|
|
4
|
+
pid: number;
|
|
5
|
+
}
|
|
6
|
+
export interface CopilotSessionDir {
|
|
7
|
+
sessionDir: string;
|
|
8
|
+
sessionId: string;
|
|
9
|
+
}
|
|
10
|
+
/** A live Copilot process whose `inuse.<pid>.lock` file should be located. */
|
|
11
|
+
export interface CopilotLockProcess {
|
|
12
|
+
pid: number;
|
|
13
|
+
startTime?: Date;
|
|
14
|
+
}
|
|
15
|
+
export interface CopilotSessionLocatorOptions {
|
|
16
|
+
sessionStateDir?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare class CopilotSessionLocator {
|
|
19
|
+
private readonly sessionStateDir;
|
|
20
|
+
/** Lock location per PID, trusted only while that PID's start time is unchanged. */
|
|
21
|
+
private readonly knownLocks;
|
|
22
|
+
constructor(options?: CopilotSessionLocatorOptions);
|
|
23
|
+
listSessionDirs(): CopilotSessionDir[];
|
|
24
|
+
findSessionDirById(sessionId: string): CopilotSessionDir | null;
|
|
25
|
+
/**
|
|
26
|
+
* Find `inuse.<pid>.lock` files.
|
|
27
|
+
*
|
|
28
|
+
* Without `processes`, every session directory is scanned and all locks are
|
|
29
|
+
* returned. With `processes`, only locks of those PIDs are returned and the
|
|
30
|
+
* search is bounded:
|
|
31
|
+
* - a lock found earlier for the same (pid, startTime) is re-validated with
|
|
32
|
+
* a single `stat` (a reused PID has a different start time and misses);
|
|
33
|
+
* - otherwise only session directories whose mtime is at or after the
|
|
34
|
+
* earliest unresolved process start time (minus slack) are listed, since
|
|
35
|
+
* creating the lock file bumps its directory's mtime;
|
|
36
|
+
* - if an unresolved process has no start time, every directory is listed.
|
|
37
|
+
*/
|
|
38
|
+
discoverActiveLocks(processes?: readonly CopilotLockProcess[]): CopilotLock[];
|
|
39
|
+
/** List lock files in session directories with mtime >= `minMtimeMs` (all when undefined). */
|
|
40
|
+
private scanLocks;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=CopilotSessionLocator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopilotSessionLocator.d.ts","sourceRoot":"","sources":["../../../src/harnesses/copilot/CopilotSessionLocator.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,8EAA8E;AAC9E,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,4BAA4B;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAeD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,oFAAoF;IACpF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;gBAE/C,OAAO,GAAE,4BAAiC;IAKtD,eAAe,IAAI,iBAAiB,EAAE;IActC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAM/D;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,SAAS,CAAC,EAAE,SAAS,kBAAkB,EAAE,GAAG,WAAW,EAAE;IAmD7E,8FAA8F;IAC9F,OAAO,CAAC,SAAS;CAuBlB"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import * as path from "path";
|
|
2
|
+
import { isDirectory, isSafePathSegment, safeReaddir, safeStat } from "../../utils/session.js";
|
|
3
|
+
import { homeDir } from "../shared.js";
|
|
4
|
+
/**
|
|
5
|
+
* Tolerance between a reported process start time and its lock directory's
|
|
6
|
+
* mtime: `ps lstart` has 1 s resolution, Linux start times derive from an
|
|
7
|
+
* estimated boot time, and some filesystems store coarse mtimes.
|
|
8
|
+
*/ const START_TIME_SLACK_MS = 5 * 60 * 1000;
|
|
9
|
+
const LOCK_FILE_PATTERN = /^inuse\.(\d+)\.lock$/;
|
|
10
|
+
export class CopilotSessionLocator {
|
|
11
|
+
sessionStateDir;
|
|
12
|
+
/** Lock location per PID, trusted only while that PID's start time is unchanged. */ knownLocks = new Map();
|
|
13
|
+
constructor(options = {}){
|
|
14
|
+
this.sessionStateDir = options.sessionStateDir ?? path.join(homeDir(), ".copilot", "session-state");
|
|
15
|
+
}
|
|
16
|
+
listSessionDirs() {
|
|
17
|
+
if (!isDirectory(this.sessionStateDir)) return [];
|
|
18
|
+
const sessionDirs = [];
|
|
19
|
+
for (const sessionId of safeReaddir(this.sessionStateDir)){
|
|
20
|
+
const sessionDir = path.join(this.sessionStateDir, sessionId);
|
|
21
|
+
if (!isDirectory(sessionDir)) continue;
|
|
22
|
+
sessionDirs.push({
|
|
23
|
+
sessionDir,
|
|
24
|
+
sessionId
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return sessionDirs;
|
|
28
|
+
}
|
|
29
|
+
findSessionDirById(sessionId) {
|
|
30
|
+
if (!isSafePathSegment(sessionId)) return null;
|
|
31
|
+
const sessionDir = path.join(this.sessionStateDir, sessionId);
|
|
32
|
+
return isDirectory(sessionDir) ? {
|
|
33
|
+
sessionDir,
|
|
34
|
+
sessionId
|
|
35
|
+
} : null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Find `inuse.<pid>.lock` files.
|
|
39
|
+
*
|
|
40
|
+
* Without `processes`, every session directory is scanned and all locks are
|
|
41
|
+
* returned. With `processes`, only locks of those PIDs are returned and the
|
|
42
|
+
* search is bounded:
|
|
43
|
+
* - a lock found earlier for the same (pid, startTime) is re-validated with
|
|
44
|
+
* a single `stat` (a reused PID has a different start time and misses);
|
|
45
|
+
* - otherwise only session directories whose mtime is at or after the
|
|
46
|
+
* earliest unresolved process start time (minus slack) are listed, since
|
|
47
|
+
* creating the lock file bumps its directory's mtime;
|
|
48
|
+
* - if an unresolved process has no start time, every directory is listed.
|
|
49
|
+
*/ discoverActiveLocks(processes) {
|
|
50
|
+
if (!processes) {
|
|
51
|
+
return this.scanLocks(undefined, ()=>true);
|
|
52
|
+
}
|
|
53
|
+
const startTimes = new Map(processes.map((proc)=>[
|
|
54
|
+
proc.pid,
|
|
55
|
+
proc.startTime?.getTime()
|
|
56
|
+
]));
|
|
57
|
+
for (const [pid, known] of this.knownLocks){
|
|
58
|
+
if (startTimes.get(pid) !== known.startTimeMs) {
|
|
59
|
+
this.knownLocks.delete(pid);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const locks = [];
|
|
63
|
+
const unresolved = new Set();
|
|
64
|
+
for (const pid of startTimes.keys()){
|
|
65
|
+
const known = this.knownLocks.get(pid);
|
|
66
|
+
if (known && safeStat(path.join(known.sessionDir, lockFileName(pid)))?.isFile()) {
|
|
67
|
+
locks.push({
|
|
68
|
+
sessionDir: known.sessionDir,
|
|
69
|
+
sessionId: known.sessionId,
|
|
70
|
+
pid
|
|
71
|
+
});
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
this.knownLocks.delete(pid);
|
|
75
|
+
unresolved.add(pid);
|
|
76
|
+
}
|
|
77
|
+
if (unresolved.size === 0) return locks;
|
|
78
|
+
const unresolvedStarts = [
|
|
79
|
+
...unresolved
|
|
80
|
+
].map((pid)=>startTimes.get(pid));
|
|
81
|
+
const minMtimeMs = unresolvedStarts.every((start)=>start !== undefined) ? Math.min(...unresolvedStarts) - START_TIME_SLACK_MS : undefined;
|
|
82
|
+
const found = this.scanLocks(minMtimeMs, (pid)=>unresolved.has(pid));
|
|
83
|
+
const lockCounts = new Map();
|
|
84
|
+
for (const lock of found){
|
|
85
|
+
lockCounts.set(lock.pid, (lockCounts.get(lock.pid) ?? 0) + 1);
|
|
86
|
+
}
|
|
87
|
+
for (const lock of found){
|
|
88
|
+
const startTimeMs = startTimes.get(lock.pid);
|
|
89
|
+
// Only remember unambiguous locks of processes with a known start time
|
|
90
|
+
if (startTimeMs !== undefined && lockCounts.get(lock.pid) === 1) {
|
|
91
|
+
this.knownLocks.set(lock.pid, {
|
|
92
|
+
sessionDir: lock.sessionDir,
|
|
93
|
+
sessionId: lock.sessionId,
|
|
94
|
+
startTimeMs
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return locks.concat(found);
|
|
99
|
+
}
|
|
100
|
+
/** List lock files in session directories with mtime >= `minMtimeMs` (all when undefined). */ scanLocks(minMtimeMs, includePid) {
|
|
101
|
+
const locks = [];
|
|
102
|
+
for (const sessionId of safeReaddir(this.sessionStateDir)){
|
|
103
|
+
const sessionDir = path.join(this.sessionStateDir, sessionId);
|
|
104
|
+
const stat = safeStat(sessionDir);
|
|
105
|
+
if (!stat?.isDirectory()) continue;
|
|
106
|
+
if (minMtimeMs !== undefined && stat.mtimeMs < minMtimeMs) continue;
|
|
107
|
+
for (const entry of safeReaddir(sessionDir)){
|
|
108
|
+
const match = entry.match(LOCK_FILE_PATTERN);
|
|
109
|
+
if (!match) continue;
|
|
110
|
+
const pid = Number.parseInt(match[1], 10);
|
|
111
|
+
if (!Number.isFinite(pid) || !includePid(pid)) continue;
|
|
112
|
+
locks.push({
|
|
113
|
+
sessionDir,
|
|
114
|
+
sessionId,
|
|
115
|
+
pid
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return locks;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
function lockFileName(pid) {
|
|
123
|
+
return `inuse.${pid}.lock`;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
//# sourceMappingURL=CopilotSessionLocator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/harnesses/copilot/CopilotSessionLocator.ts"],"sourcesContent":["import * as path from \"path\";\nimport { isDirectory, isSafePathSegment, safeReaddir, safeStat } from \"../../utils/session.js\";\nimport { homeDir } from \"../shared.js\";\n\nexport interface CopilotLock {\n sessionDir: string;\n sessionId: string;\n pid: number;\n}\n\nexport interface CopilotSessionDir {\n sessionDir: string;\n sessionId: string;\n}\n\n/** A live Copilot process whose `inuse.<pid>.lock` file should be located. */\nexport interface CopilotLockProcess {\n pid: number;\n startTime?: Date;\n}\n\nexport interface CopilotSessionLocatorOptions {\n sessionStateDir?: string;\n}\n\ninterface KnownLock extends CopilotSessionDir {\n startTimeMs: number;\n}\n\n/**\n * Tolerance between a reported process start time and its lock directory's\n * mtime: `ps lstart` has 1 s resolution, Linux start times derive from an\n * estimated boot time, and some filesystems store coarse mtimes.\n */\nconst START_TIME_SLACK_MS = 5 * 60 * 1000;\n\nconst LOCK_FILE_PATTERN = /^inuse\\.(\\d+)\\.lock$/;\n\nexport class CopilotSessionLocator {\n private readonly sessionStateDir: string;\n /** Lock location per PID, trusted only while that PID's start time is unchanged. */\n private readonly knownLocks = new Map<number, KnownLock>();\n\n constructor(options: CopilotSessionLocatorOptions = {}) {\n this.sessionStateDir =\n options.sessionStateDir ?? path.join(homeDir(), \".copilot\", \"session-state\");\n }\n\n listSessionDirs(): CopilotSessionDir[] {\n if (!isDirectory(this.sessionStateDir)) return [];\n\n const sessionDirs: CopilotSessionDir[] = [];\n for (const sessionId of safeReaddir(this.sessionStateDir)) {\n const sessionDir = path.join(this.sessionStateDir, sessionId);\n if (!isDirectory(sessionDir)) continue;\n\n sessionDirs.push({ sessionDir, sessionId });\n }\n\n return sessionDirs;\n }\n\n findSessionDirById(sessionId: string): CopilotSessionDir | null {\n if (!isSafePathSegment(sessionId)) return null;\n const sessionDir = path.join(this.sessionStateDir, sessionId);\n return isDirectory(sessionDir) ? { sessionDir, sessionId } : null;\n }\n\n /**\n * Find `inuse.<pid>.lock` files.\n *\n * Without `processes`, every session directory is scanned and all locks are\n * returned. With `processes`, only locks of those PIDs are returned and the\n * search is bounded:\n * - a lock found earlier for the same (pid, startTime) is re-validated with\n * a single `stat` (a reused PID has a different start time and misses);\n * - otherwise only session directories whose mtime is at or after the\n * earliest unresolved process start time (minus slack) are listed, since\n * creating the lock file bumps its directory's mtime;\n * - if an unresolved process has no start time, every directory is listed.\n */\n discoverActiveLocks(processes?: readonly CopilotLockProcess[]): CopilotLock[] {\n if (!processes) {\n return this.scanLocks(undefined, () => true);\n }\n\n const startTimes = new Map(processes.map((proc) => [proc.pid, proc.startTime?.getTime()]));\n for (const [pid, known] of this.knownLocks) {\n if (startTimes.get(pid) !== known.startTimeMs) {\n this.knownLocks.delete(pid);\n }\n }\n\n const locks: CopilotLock[] = [];\n const unresolved = new Set<number>();\n for (const pid of startTimes.keys()) {\n const known = this.knownLocks.get(pid);\n if (known && safeStat(path.join(known.sessionDir, lockFileName(pid)))?.isFile()) {\n locks.push({ sessionDir: known.sessionDir, sessionId: known.sessionId, pid });\n continue;\n }\n this.knownLocks.delete(pid);\n unresolved.add(pid);\n }\n if (unresolved.size === 0) return locks;\n\n const unresolvedStarts = [...unresolved].map((pid) => startTimes.get(pid));\n const minMtimeMs = unresolvedStarts.every((start): start is number => start !== undefined)\n ? Math.min(...unresolvedStarts) - START_TIME_SLACK_MS\n : undefined;\n\n const found = this.scanLocks(minMtimeMs, (pid) => unresolved.has(pid));\n\n const lockCounts = new Map<number, number>();\n for (const lock of found) {\n lockCounts.set(lock.pid, (lockCounts.get(lock.pid) ?? 0) + 1);\n }\n for (const lock of found) {\n const startTimeMs = startTimes.get(lock.pid);\n // Only remember unambiguous locks of processes with a known start time\n if (startTimeMs !== undefined && lockCounts.get(lock.pid) === 1) {\n this.knownLocks.set(lock.pid, {\n sessionDir: lock.sessionDir,\n sessionId: lock.sessionId,\n startTimeMs,\n });\n }\n }\n\n return locks.concat(found);\n }\n\n /** List lock files in session directories with mtime >= `minMtimeMs` (all when undefined). */\n private scanLocks(\n minMtimeMs: number | undefined,\n includePid: (pid: number) => boolean,\n ): CopilotLock[] {\n const locks: CopilotLock[] = [];\n for (const sessionId of safeReaddir(this.sessionStateDir)) {\n const sessionDir = path.join(this.sessionStateDir, sessionId);\n const stat = safeStat(sessionDir);\n if (!stat?.isDirectory()) continue;\n if (minMtimeMs !== undefined && stat.mtimeMs < minMtimeMs) continue;\n\n for (const entry of safeReaddir(sessionDir)) {\n const match = entry.match(LOCK_FILE_PATTERN);\n if (!match) continue;\n\n const pid = Number.parseInt(match[1], 10);\n if (!Number.isFinite(pid) || !includePid(pid)) continue;\n locks.push({ sessionDir, sessionId, pid });\n }\n }\n\n return locks;\n }\n}\n\nfunction lockFileName(pid: number): string {\n return `inuse.${pid}.lock`;\n}\n"],"names":["path","isDirectory","isSafePathSegment","safeReaddir","safeStat","homeDir","START_TIME_SLACK_MS","LOCK_FILE_PATTERN","CopilotSessionLocator","sessionStateDir","knownLocks","Map","options","join","listSessionDirs","sessionDirs","sessionId","sessionDir","push","findSessionDirById","discoverActiveLocks","processes","scanLocks","undefined","startTimes","map","proc","pid","startTime","getTime","known","get","startTimeMs","delete","locks","unresolved","Set","keys","lockFileName","isFile","add","size","unresolvedStarts","minMtimeMs","every","start","Math","min","found","has","lockCounts","lock","set","concat","includePid","stat","mtimeMs","entry","match","Number","parseInt","isFinite"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
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 interface CopilotSession {
|
|
5
|
+
sessionId: string;
|
|
6
|
+
projectPath: string;
|
|
7
|
+
summary: string;
|
|
8
|
+
sessionStart: Date;
|
|
9
|
+
lastActive: Date;
|
|
10
|
+
lastEventType?: string;
|
|
11
|
+
firstUserMessage: string;
|
|
12
|
+
eventsFilePath: string;
|
|
13
|
+
}
|
|
14
|
+
export interface CopilotSessionParserOptions {
|
|
15
|
+
/** Cold-start scan bounds for `readSessionDirIncremental` (see IncrementalJsonlSummary). */
|
|
16
|
+
summaryBounds?: JsonlSummaryBounds | false;
|
|
17
|
+
}
|
|
18
|
+
export declare class CopilotSessionParser {
|
|
19
|
+
/** Incremental reader backing `getConversation({ tail })`. */
|
|
20
|
+
private readonly tailReader;
|
|
21
|
+
private readonly eventCache;
|
|
22
|
+
constructor(options?: CopilotSessionParserOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Fold one events.jsonl entry into the O(1) event summary. Mirrors the
|
|
25
|
+
* original whole-file pass: the latest valid timestamp and event type win,
|
|
26
|
+
* `session.start` overrides id/cwd/start, and user/assistant text is tracked.
|
|
27
|
+
*
|
|
28
|
+
* `skip` (bounded cold start) keeps the head's first user message and clears
|
|
29
|
+
* the latest timestamp, event type and text, so those come from the tail
|
|
30
|
+
* only. Tail entries never fill the first user message: beyond the head it
|
|
31
|
+
* stays "" and the summary falls back to the tail's latest text. The
|
|
32
|
+
* `session.start` fields (id, cwd, start) are kept from the head and, as in
|
|
33
|
+
* a full scan, a later `session.start` in the tail still overrides them; one
|
|
34
|
+
* only in the skipped middle is not seen.
|
|
35
|
+
*/
|
|
36
|
+
private readonly eventReducer;
|
|
37
|
+
readSessionDir(sessionDir: string, fallbackSessionId: string): CopilotSession | null;
|
|
38
|
+
/**
|
|
39
|
+
* Same result as `readSessionDir`, but events.jsonl is summarized through a
|
|
40
|
+
* per-instance incremental cache so repeated refreshes only parse appended
|
|
41
|
+
* bytes. Call `pruneSessionCache()` once per refresh.
|
|
42
|
+
*
|
|
43
|
+
* The first read of a large events.jsonl is a bounded head + tail scan (see
|
|
44
|
+
* `eventReducer.skip`); fields whose entries lie only in the skipped middle
|
|
45
|
+
* fall back to their defaults instead of forcing a full parse.
|
|
46
|
+
*/
|
|
47
|
+
readSessionDirIncremental(sessionDir: string, fallbackSessionId: string): CopilotSession | null;
|
|
48
|
+
/** Evict cached event summaries for files not read since the previous prune. */
|
|
49
|
+
pruneSessionCache(): void;
|
|
50
|
+
private toSession;
|
|
51
|
+
getConversation(sessionFilePath: string, options?: ConversationOptions): ConversationMessage[];
|
|
52
|
+
private eventToMessage;
|
|
53
|
+
determineStatus(session: CopilotSession): AgentStatus;
|
|
54
|
+
private hasWorkspaceMetadata;
|
|
55
|
+
private readWorkspaceMetadata;
|
|
56
|
+
private stripYamlScalar;
|
|
57
|
+
private parseEventLines;
|
|
58
|
+
private parseEventLine;
|
|
59
|
+
private roleForEvent;
|
|
60
|
+
private extractEventText;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=CopilotSessionParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopilotSessionParser.d.ts","sourceRoot":"","sources":["../../../src/harnesses/copilot/CopilotSessionParser.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;AAoChD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB;AAoCD,MAAM,WAAW,2BAA2B;IAC1C,4FAA4F;IAC5F,aAAa,CAAC,EAAE,kBAAkB,GAAG,KAAK,CAAC;CAC5C;AAED,qBAAa,oBAAoB;IAC/B,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IAEpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6C;gBAE5D,OAAO,GAAE,2BAAgC;IAMrD;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CA4C3B;IAEF,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAUpF;;;;;;;;OAQG;IACH,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAS/F,gFAAgF;IAChF,iBAAiB,IAAI,IAAI;IAIzB,OAAO,CAAC,SAAS;IAmCjB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE;IA8B9F,OAAO,CAAC,cAAc;IActB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,WAAW;IAYrD,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,gBAAgB;CAgBzB"}
|