@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TmuxAgentRuntime.d.ts","sourceRoot":"","sources":["../../../src/runtime/tmux/TmuxAgentRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"TmuxAgentRuntime.d.ts","sourceRoot":"","sources":["../../../src/runtime/tmux/TmuxAgentRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C,OAAO,KAAK,EACV,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAErB,qBAAa,gBAAiB,YAAW,uBAAuB;IAC9D,QAAQ,CAAC,QAAQ,EAAG,MAAM,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;gBAEvB,IAAI,GAAE,WAA+B;IAI3C,WAAW,IAAI,OAAO,CAAC,wBAAwB,CAAC;IAWhD,UAAU,CACd,KAAK,EAAE,iBAAiB,GAAG;QACzB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC;QACzC,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,GACA,OAAO,CAAC,kBAAkB,CAAC;IA8BxB,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAWpE,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAMjD,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;CAenD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TmuxManager } from "
|
|
1
|
+
import { TmuxManager } from "./TmuxManager.js";
|
|
2
2
|
import { TtyWriter } from "../../terminal/TtyWriter.js";
|
|
3
3
|
import { AgentPidPollTimeoutError, AgentTerminalNotFoundError } from "../errors.js";
|
|
4
4
|
import { pollForPid } from "./PidPolling.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/runtime/tmux/TmuxAgentRuntime.ts"],"sourcesContent":["import { TmuxManager } from \"
|
|
1
|
+
{"version":3,"sources":["../../../src/runtime/tmux/TmuxAgentRuntime.ts"],"sourcesContent":["import { TmuxManager } from \"./TmuxManager.js\";\nimport { TtyWriter } from \"../../terminal/TtyWriter.js\";\nimport { AgentPidPollTimeoutError, AgentTerminalNotFoundError } from \"../errors.js\";\nimport { pollForPid } from \"./PidPolling.js\";\nimport { parseTmuxRuntimeRef } from \"./TmuxRuntimeRef.js\";\nimport type {\n AgentRuntimeAvailability,\n InteractiveAgentRuntime,\n RuntimeFocusInput,\n RuntimeSendDeps,\n RuntimeSendInput,\n RuntimeStartInput,\n RuntimeStartResult,\n RuntimeStopInput,\n} from \"../types.js\";\n\nexport class TmuxAgentRuntime implements InteractiveAgentRuntime {\n readonly provider = \"tmux\" as const;\n private readonly tmux: TmuxManager;\n\n constructor(tmux: TmuxManager = new TmuxManager()) {\n this.tmux = tmux;\n }\n\n async isAvailable(): Promise<AgentRuntimeAvailability> {\n if (await this.tmux.isAvailable()) {\n return { ok: true, insideRuntime: Boolean(process.env.TMUX) };\n }\n return {\n ok: false,\n reason: \"binary-missing\",\n detail: \"tmux is not installed or not in PATH.\",\n };\n }\n\n async startAgent(\n input: RuntimeStartInput & {\n command?: string;\n matches?: (psCommand: string) => boolean;\n pollIntervalMs?: number;\n },\n ): Promise<RuntimeStartResult> {\n if (!input.command || !input.matches || input.pollIntervalMs === undefined) {\n throw new Error(\"Tmux start requires command, process matcher, and poll interval.\");\n }\n\n if (await this.tmux.sessionExists(input.name)) {\n await this.tmux.killSession(input.name);\n }\n\n await this.tmux.createSession(input.name, input.cwd);\n await this.tmux.sendKeys(input.name, input.command);\n\n const pid = await pollForPid(\n this.tmux,\n input.name,\n input.matches,\n input.pollIntervalMs,\n input.timeoutMs,\n );\n if (pid === null) {\n await this.tmux.killSession(input.name);\n throw new AgentPidPollTimeoutError(input.name, input.command, input.timeoutMs);\n }\n\n return {\n pid,\n runtimeRef: { session: input.name },\n };\n }\n\n async send(input: RuntimeSendInput, deps?: RuntimeSendDeps): Promise<void> {\n if (!deps) {\n throw new Error(\"Tmux send requires terminal lookup dependencies.\");\n }\n const location = await deps.focusManager.findTerminal(input.agent.pid);\n if (!location) {\n throw new AgentTerminalNotFoundError(input.agent.name, input.agent.pid);\n }\n await (deps.writer ?? TtyWriter.send)(location, input.prompt);\n }\n\n async focus(input: RuntimeFocusInput): Promise<boolean> {\n const location = await input.focusManager.findTerminal(input.agent.pid);\n if (!location) return false;\n return await input.focusManager.focusTerminal(location);\n }\n\n async stop(input: RuntimeStopInput): Promise<void> {\n const killProcess = input.killProcess ?? ((pid, signal) => process.kill(pid, signal));\n try {\n killProcess(input.agent.pid, \"SIGTERM\");\n } catch (error) {\n if (!isProcessAlreadyGone(error)) {\n throw error;\n }\n }\n\n const tmuxRef = parseTmuxRuntimeRef(input.runtimeRef);\n if (tmuxRef) {\n await this.tmux.killSession(tmuxRef.session);\n }\n }\n}\n\nfunction isProcessAlreadyGone(error: unknown): boolean {\n return (\n typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n (error as NodeJS.ErrnoException).code === \"ESRCH\"\n );\n}\n"],"names":["TmuxManager","TtyWriter","AgentPidPollTimeoutError","AgentTerminalNotFoundError","pollForPid","parseTmuxRuntimeRef","TmuxAgentRuntime","provider","tmux","isAvailable","ok","insideRuntime","Boolean","process","env","TMUX","reason","detail","startAgent","input","command","matches","pollIntervalMs","undefined","Error","sessionExists","name","killSession","createSession","cwd","sendKeys","pid","timeoutMs","runtimeRef","session","send","deps","location","focusManager","findTerminal","agent","writer","prompt","focus","focusTerminal","stop","killProcess","signal","kill","error","isProcessAlreadyGone","tmuxRef","code"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class TmuxManager {
|
|
2
|
+
isAvailable(): Promise<boolean>;
|
|
3
|
+
sessionExists(name: string): Promise<boolean>;
|
|
4
|
+
createSession(name: string, cwd: string): Promise<void>;
|
|
5
|
+
sendKeys(session: string, keys: string): Promise<void>;
|
|
6
|
+
killSession(name: string): Promise<void>;
|
|
7
|
+
findAgentPid(session: string, matches: (psCommand: string) => boolean): Promise<number | null>;
|
|
8
|
+
private getPanePid;
|
|
9
|
+
private pgrepChildren;
|
|
10
|
+
private getProcessCommand;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=TmuxManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TmuxManager.d.ts","sourceRoot":"","sources":["../../../src/runtime/tmux/TmuxManager.ts"],"names":[],"mappings":"AAKA,qBAAa,WAAW;IAChB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAS/B,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS7C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxC,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,GACtC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YAqBX,UAAU;YAgBV,aAAa;YAab,iBAAiB;CAQhC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
const execFileAsync = promisify(execFile);
|
|
4
|
+
export class TmuxManager {
|
|
5
|
+
async isAvailable() {
|
|
6
|
+
try {
|
|
7
|
+
await execFileAsync("tmux", [
|
|
8
|
+
"-V"
|
|
9
|
+
]);
|
|
10
|
+
return true;
|
|
11
|
+
} catch {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async sessionExists(name) {
|
|
16
|
+
try {
|
|
17
|
+
await execFileAsync("tmux", [
|
|
18
|
+
"has-session",
|
|
19
|
+
"-t",
|
|
20
|
+
name
|
|
21
|
+
]);
|
|
22
|
+
return true;
|
|
23
|
+
} catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async createSession(name, cwd) {
|
|
28
|
+
await execFileAsync("tmux", [
|
|
29
|
+
"new-session",
|
|
30
|
+
"-d",
|
|
31
|
+
"-s",
|
|
32
|
+
name,
|
|
33
|
+
"-c",
|
|
34
|
+
cwd
|
|
35
|
+
]);
|
|
36
|
+
}
|
|
37
|
+
async sendKeys(session, keys) {
|
|
38
|
+
await execFileAsync("tmux", [
|
|
39
|
+
"send-keys",
|
|
40
|
+
"-t",
|
|
41
|
+
session,
|
|
42
|
+
keys,
|
|
43
|
+
"Enter"
|
|
44
|
+
]);
|
|
45
|
+
}
|
|
46
|
+
async killSession(name) {
|
|
47
|
+
try {
|
|
48
|
+
await execFileAsync("tmux", [
|
|
49
|
+
"kill-session",
|
|
50
|
+
"-t",
|
|
51
|
+
name
|
|
52
|
+
]);
|
|
53
|
+
} catch {
|
|
54
|
+
// Already gone — ignore
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async findAgentPid(session, matches) {
|
|
58
|
+
const panePid = await this.getPanePid(session);
|
|
59
|
+
if (panePid === null) return null;
|
|
60
|
+
const visited = new Set();
|
|
61
|
+
const queue = [
|
|
62
|
+
panePid
|
|
63
|
+
];
|
|
64
|
+
let deepestMatch = null;
|
|
65
|
+
while(queue.length > 0){
|
|
66
|
+
const pid = queue.shift();
|
|
67
|
+
if (visited.has(pid)) continue;
|
|
68
|
+
visited.add(pid);
|
|
69
|
+
const command = await this.getProcessCommand(pid);
|
|
70
|
+
if (command && matches(command)) deepestMatch = pid;
|
|
71
|
+
queue.push(...await this.pgrepChildren(pid));
|
|
72
|
+
}
|
|
73
|
+
return deepestMatch;
|
|
74
|
+
}
|
|
75
|
+
async getPanePid(session) {
|
|
76
|
+
try {
|
|
77
|
+
const { stdout } = await execFileAsync("tmux", [
|
|
78
|
+
"list-panes",
|
|
79
|
+
"-t",
|
|
80
|
+
session,
|
|
81
|
+
"-F",
|
|
82
|
+
"#{pane_pid}"
|
|
83
|
+
]);
|
|
84
|
+
const panePid = Number.parseInt(stdout.trim().split("\n")[0], 10);
|
|
85
|
+
return Number.isNaN(panePid) ? null : panePid;
|
|
86
|
+
} catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async pgrepChildren(pid) {
|
|
91
|
+
try {
|
|
92
|
+
const { stdout } = await execFileAsync("pgrep", [
|
|
93
|
+
"-P",
|
|
94
|
+
String(pid)
|
|
95
|
+
]);
|
|
96
|
+
return stdout.trim().split("\n").map((value)=>Number.parseInt(value, 10)).filter((value)=>!Number.isNaN(value));
|
|
97
|
+
} catch {
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async getProcessCommand(pid) {
|
|
102
|
+
try {
|
|
103
|
+
const { stdout } = await execFileAsync("ps", [
|
|
104
|
+
"-p",
|
|
105
|
+
String(pid),
|
|
106
|
+
"-o",
|
|
107
|
+
"command="
|
|
108
|
+
]);
|
|
109
|
+
return stdout.trim() || null;
|
|
110
|
+
} catch {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
//# sourceMappingURL=TmuxManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/runtime/tmux/TmuxManager.ts"],"sourcesContent":["import { execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\n\nconst execFileAsync = promisify(execFile);\n\nexport class TmuxManager {\n async isAvailable(): Promise<boolean> {\n try {\n await execFileAsync(\"tmux\", [\"-V\"]);\n return true;\n } catch {\n return false;\n }\n }\n\n async sessionExists(name: string): Promise<boolean> {\n try {\n await execFileAsync(\"tmux\", [\"has-session\", \"-t\", name]);\n return true;\n } catch {\n return false;\n }\n }\n\n async createSession(name: string, cwd: string): Promise<void> {\n await execFileAsync(\"tmux\", [\"new-session\", \"-d\", \"-s\", name, \"-c\", cwd]);\n }\n\n async sendKeys(session: string, keys: string): Promise<void> {\n await execFileAsync(\"tmux\", [\"send-keys\", \"-t\", session, keys, \"Enter\"]);\n }\n\n async killSession(name: string): Promise<void> {\n try {\n await execFileAsync(\"tmux\", [\"kill-session\", \"-t\", name]);\n } catch {\n // Already gone — ignore\n }\n }\n\n async findAgentPid(\n session: string,\n matches: (psCommand: string) => boolean,\n ): Promise<number | null> {\n const panePid = await this.getPanePid(session);\n if (panePid === null) return null;\n\n const visited = new Set<number>();\n const queue: number[] = [panePid];\n let deepestMatch: number | null = null;\n\n while (queue.length > 0) {\n const pid = queue.shift()!;\n if (visited.has(pid)) continue;\n visited.add(pid);\n\n const command = await this.getProcessCommand(pid);\n if (command && matches(command)) deepestMatch = pid;\n queue.push(...(await this.pgrepChildren(pid)));\n }\n\n return deepestMatch;\n }\n\n private async getPanePid(session: string): Promise<number | null> {\n try {\n const { stdout } = await execFileAsync(\"tmux\", [\n \"list-panes\",\n \"-t\",\n session,\n \"-F\",\n \"#{pane_pid}\",\n ]);\n const panePid = Number.parseInt(stdout.trim().split(\"\\n\")[0], 10);\n return Number.isNaN(panePid) ? null : panePid;\n } catch {\n return null;\n }\n }\n\n private async pgrepChildren(pid: number): Promise<number[]> {\n try {\n const { stdout } = await execFileAsync(\"pgrep\", [\"-P\", String(pid)]);\n return stdout\n .trim()\n .split(\"\\n\")\n .map((value) => Number.parseInt(value, 10))\n .filter((value) => !Number.isNaN(value));\n } catch {\n return [];\n }\n }\n\n private async getProcessCommand(pid: number): Promise<string | null> {\n try {\n const { stdout } = await execFileAsync(\"ps\", [\"-p\", String(pid), \"-o\", \"command=\"]);\n return stdout.trim() || null;\n } catch {\n return null;\n }\n }\n}\n"],"names":["execFile","promisify","execFileAsync","TmuxManager","isAvailable","sessionExists","name","createSession","cwd","sendKeys","session","keys","killSession","findAgentPid","matches","panePid","getPanePid","visited","Set","queue","deepestMatch","length","pid","shift","has","add","command","getProcessCommand","push","pgrepChildren","stdout","Number","parseInt","trim","split","isNaN","String","map","value","filter"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,qBAAqB;AAC9C,SAASC,SAAS,QAAQ,YAAY;AAEtC,MAAMC,gBAAgBD,UAAUD;AAEhC,OAAO,MAAMG;IACX,MAAMC,cAAgC;QACpC,IAAI;YACF,MAAMF,cAAc,QAAQ;gBAAC;aAAK;YAClC,OAAO;QACT,EAAE,OAAM;YACN,OAAO;QACT;IACF;IAEA,MAAMG,cAAcC,IAAY,EAAoB;QAClD,IAAI;YACF,MAAMJ,cAAc,QAAQ;gBAAC;gBAAe;gBAAMI;aAAK;YACvD,OAAO;QACT,EAAE,OAAM;YACN,OAAO;QACT;IACF;IAEA,MAAMC,cAAcD,IAAY,EAAEE,GAAW,EAAiB;QAC5D,MAAMN,cAAc,QAAQ;YAAC;YAAe;YAAM;YAAMI;YAAM;YAAME;SAAI;IAC1E;IAEA,MAAMC,SAASC,OAAe,EAAEC,IAAY,EAAiB;QAC3D,MAAMT,cAAc,QAAQ;YAAC;YAAa;YAAMQ;YAASC;YAAM;SAAQ;IACzE;IAEA,MAAMC,YAAYN,IAAY,EAAiB;QAC7C,IAAI;YACF,MAAMJ,cAAc,QAAQ;gBAAC;gBAAgB;gBAAMI;aAAK;QAC1D,EAAE,OAAM;QACN,wBAAwB;QAC1B;IACF;IAEA,MAAMO,aACJH,OAAe,EACfI,OAAuC,EACf;QACxB,MAAMC,UAAU,MAAM,IAAI,CAACC,UAAU,CAACN;QACtC,IAAIK,YAAY,MAAM,OAAO;QAE7B,MAAME,UAAU,IAAIC;QACpB,MAAMC,QAAkB;YAACJ;SAAQ;QACjC,IAAIK,eAA8B;QAElC,MAAOD,MAAME,MAAM,GAAG,EAAG;YACvB,MAAMC,MAAMH,MAAMI,KAAK;YACvB,IAAIN,QAAQO,GAAG,CAACF,MAAM;YACtBL,QAAQQ,GAAG,CAACH;YAEZ,MAAMI,UAAU,MAAM,IAAI,CAACC,iBAAiB,CAACL;YAC7C,IAAII,WAAWZ,QAAQY,UAAUN,eAAeE;YAChDH,MAAMS,IAAI,IAAK,MAAM,IAAI,CAACC,aAAa,CAACP;QAC1C;QAEA,OAAOF;IACT;IAEA,MAAcJ,WAAWN,OAAe,EAA0B;QAChE,IAAI;YACF,MAAM,EAAEoB,MAAM,EAAE,GAAG,MAAM5B,cAAc,QAAQ;gBAC7C;gBACA;gBACAQ;gBACA;gBACA;aACD;YACD,MAAMK,UAAUgB,OAAOC,QAAQ,CAACF,OAAOG,IAAI,GAAGC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE;YAC9D,OAAOH,OAAOI,KAAK,CAACpB,WAAW,OAAOA;QACxC,EAAE,OAAM;YACN,OAAO;QACT;IACF;IAEA,MAAcc,cAAcP,GAAW,EAAqB;QAC1D,IAAI;YACF,MAAM,EAAEQ,MAAM,EAAE,GAAG,MAAM5B,cAAc,SAAS;gBAAC;gBAAMkC,OAAOd;aAAK;YACnE,OAAOQ,OACJG,IAAI,GACJC,KAAK,CAAC,MACNG,GAAG,CAAC,CAACC,QAAUP,OAAOC,QAAQ,CAACM,OAAO,KACtCC,MAAM,CAAC,CAACD,QAAU,CAACP,OAAOI,KAAK,CAACG;QACrC,EAAE,OAAM;YACN,OAAO,EAAE;QACX;IACF;IAEA,MAAcX,kBAAkBL,GAAW,EAA0B;QACnE,IAAI;YACF,MAAM,EAAEQ,MAAM,EAAE,GAAG,MAAM5B,cAAc,MAAM;gBAAC;gBAAMkC,OAAOd;gBAAM;gBAAM;aAAW;YAClF,OAAOQ,OAAOG,IAAI,MAAM;QAC1B,EAAE,OAAM;YACN,OAAO;QACT;IACF;AACF"}
|
package/dist/runtime/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { AgentInfo } from "../adapters/AgentAdapter.js";
|
|
2
|
-
import type { TerminalLocation } from "../terminal/
|
|
2
|
+
import type { TerminalLocation } from "../terminal/types.js";
|
|
3
3
|
import type { AgentRuntimeProvider } from "../utils/AgentRegistry.js";
|
|
4
4
|
export type AgentRuntimeAvailability = {
|
|
5
5
|
ok: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/runtime/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,MAAM,wBAAwB,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,gBAAgB,GAAG,qBAAqB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;IACvC,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,YAAY,EAAE;QACZ,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;QAC5D,aAAa,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;KAC7D,CAAC;CACH;AAED,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;CAC7D;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE;QACZ,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;KAC7D,CAAC;IACF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,WAAW,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAAC;IACjD,UAAU,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAClE,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,KAAK,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/runtime/types.ts"],"sourcesContent":["import type { AgentInfo } from \"../adapters/AgentAdapter.js\";\nimport type { TerminalLocation } from \"../terminal/
|
|
1
|
+
{"version":3,"sources":["../../src/runtime/types.ts"],"sourcesContent":["import type { AgentInfo } from \"../adapters/AgentAdapter.js\";\nimport type { TerminalLocation } from \"../terminal/types.js\";\nimport type { AgentRuntimeProvider } from \"../utils/AgentRegistry.js\";\n\nexport type AgentRuntimeAvailability =\n | { ok: true; insideRuntime: boolean; currentPaneId?: string }\n | { ok: false; reason: \"binary-missing\" | \"backend-unreachable\"; detail: string };\n\nexport interface RuntimeStartInput {\n name: string;\n cwd: string;\n kind: string;\n args: string[];\n timeoutMs: number;\n}\n\nexport interface RuntimeStartResult {\n pid: number;\n runtimeRef: unknown;\n}\n\nexport interface RuntimeTargetInput {\n agent: Pick<AgentInfo, \"name\" | \"pid\">;\n runtimeRef: unknown | null;\n}\n\nexport interface RuntimeSendInput extends RuntimeTargetInput {\n prompt: string;\n}\n\nexport interface RuntimeFocusInput extends RuntimeTargetInput {\n focusManager: {\n findTerminal(pid: number): Promise<TerminalLocation | null>;\n focusTerminal(location: TerminalLocation): Promise<boolean>;\n };\n}\n\nexport interface RuntimeStopInput extends RuntimeTargetInput {\n killProcess?: (pid: number, signal: NodeJS.Signals) => void;\n}\n\nexport interface RuntimeSendDeps {\n focusManager: {\n findTerminal(pid: number): Promise<TerminalLocation | null>;\n };\n writer?: (location: TerminalLocation, text: string) => Promise<void>;\n}\n\nexport interface InteractiveAgentRuntime {\n provider: AgentRuntimeProvider;\n isAvailable(): Promise<AgentRuntimeAvailability>;\n startAgent(input: RuntimeStartInput): Promise<RuntimeStartResult>;\n send(input: RuntimeSendInput, deps?: RuntimeSendDeps): Promise<void>;\n focus(input: RuntimeFocusInput): Promise<boolean>;\n stop(input: RuntimeStopInput): Promise<void>;\n}\n"],"names":[],"mappings":"AAgDA,WAOC"}
|
|
@@ -1,40 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
TERMINAL_APP = "terminal-app",
|
|
6
|
-
UNKNOWN = "unknown"
|
|
7
|
-
}
|
|
8
|
-
export interface TerminalLocation {
|
|
9
|
-
type: TerminalType;
|
|
10
|
-
identifier: string;
|
|
11
|
-
tty: string;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Optional trace sink. When provided to {@link TerminalFocusManager}, each
|
|
15
|
-
* discovery/focus step reports a human-readable line so callers (e.g. the
|
|
16
|
-
* `agent open --debug` command) can inspect the matching/focus decision path.
|
|
17
|
-
*/
|
|
1
|
+
import { TerminalType, type TerminalLocation } from "./types.js";
|
|
2
|
+
export { TerminalType };
|
|
3
|
+
export type { TerminalLocation };
|
|
4
|
+
/** Optional trace sink for terminal discovery and focus decisions. */
|
|
18
5
|
export type TerminalDebugLogger = (message: string) => void;
|
|
19
6
|
export declare class TerminalFocusManager {
|
|
20
7
|
private readonly debug?;
|
|
21
8
|
constructor(debug?: TerminalDebugLogger | undefined);
|
|
22
|
-
/**
|
|
23
|
-
* Find the terminal location (emulator info) for a given process ID
|
|
24
|
-
*/
|
|
25
9
|
findTerminal(pid: number): Promise<TerminalLocation | null>;
|
|
26
|
-
/**
|
|
27
|
-
* Focus the terminal identified by the location
|
|
28
|
-
*/
|
|
29
10
|
focusTerminal(location: TerminalLocation): Promise<boolean>;
|
|
30
|
-
private findWeztermPane;
|
|
31
|
-
private focusWeztermPane;
|
|
32
|
-
private findTmuxPane;
|
|
33
|
-
private findITerm2Session;
|
|
34
|
-
private findTerminalAppWindow;
|
|
35
|
-
private isProcessRunning;
|
|
36
|
-
private focusTmuxPane;
|
|
37
|
-
private focusITerm2Session;
|
|
38
|
-
private focusTerminalAppWindow;
|
|
39
11
|
}
|
|
40
12
|
//# sourceMappingURL=TerminalFocusManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalFocusManager.d.ts","sourceRoot":"","sources":["../../src/terminal/TerminalFocusManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TerminalFocusManager.d.ts","sourceRoot":"","sources":["../../src/terminal/TerminalFocusManager.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEjE,OAAO,EAAE,YAAY,EAAE,CAAC;AACxB,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC,sEAAsE;AACtE,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAE5D,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAN,KAAK,CAAC,EAAE,mBAAmB,YAAA;IAElD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAuB3D,aAAa,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;CAelE"}
|
|
@@ -1,296 +1,46 @@
|
|
|
1
|
-
import { execFile } from "child_process";
|
|
2
|
-
import { promisify } from "util";
|
|
3
1
|
import { getProcessTty } from "../utils/process.js";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
TerminalType["TMUX"] = "tmux";
|
|
8
|
-
TerminalType["WEZTERM"] = "wezterm";
|
|
9
|
-
TerminalType["ITERM2"] = "iterm2";
|
|
10
|
-
TerminalType["TERMINAL_APP"] = "terminal-app";
|
|
11
|
-
TerminalType["UNKNOWN"] = "unknown";
|
|
12
|
-
return TerminalType;
|
|
13
|
-
}({});
|
|
2
|
+
import { TERMINAL_BACKENDS, terminalBackendFor } from "./backends/index.js";
|
|
3
|
+
import { TerminalType } from "./types.js";
|
|
4
|
+
export { TerminalType };
|
|
14
5
|
export class TerminalFocusManager {
|
|
15
6
|
debug;
|
|
16
7
|
constructor(debug){
|
|
17
8
|
this.debug = debug;
|
|
18
9
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
const ttyShort = getProcessTty(pid);
|
|
23
|
-
// If no TTY or invalid, we can't find the terminal
|
|
24
|
-
if (!ttyShort || ttyShort === "?") {
|
|
10
|
+
async findTerminal(pid) {
|
|
11
|
+
const tty = getProcessTty(pid);
|
|
12
|
+
if (!tty || tty === "?") {
|
|
25
13
|
this.debug?.(`findTerminal(pid=${pid}): no usable TTY, cannot resolve terminal`);
|
|
26
14
|
return null;
|
|
27
15
|
}
|
|
28
|
-
const fullTty = `/dev/${
|
|
16
|
+
const fullTty = `/dev/${tty}`;
|
|
29
17
|
this.debug?.(`findTerminal(pid=${pid}): resolving terminal for ${fullTty}`);
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
// 2. Check WezTerm (cross-platform, via its CLI — no AppleScript)
|
|
38
|
-
const weztermLocation = await this.findWeztermPane(fullTty);
|
|
39
|
-
if (weztermLocation) {
|
|
40
|
-
this.debug?.(`findTerminal: matched wezterm (pane_id=${weztermLocation.identifier})`);
|
|
41
|
-
return weztermLocation;
|
|
42
|
-
}
|
|
43
|
-
this.debug?.("findTerminal: wezterm no match");
|
|
44
|
-
// 3. Check iTerm2
|
|
45
|
-
const itermLocation = await this.findITerm2Session(fullTty);
|
|
46
|
-
if (itermLocation) {
|
|
47
|
-
this.debug?.(`findTerminal: matched iTerm2 (tty=${itermLocation.tty})`);
|
|
48
|
-
return itermLocation;
|
|
49
|
-
}
|
|
50
|
-
this.debug?.("findTerminal: iTerm2 no match");
|
|
51
|
-
// 4. Check Terminal.app
|
|
52
|
-
const terminalAppLocation = await this.findTerminalAppWindow(fullTty);
|
|
53
|
-
if (terminalAppLocation) {
|
|
54
|
-
this.debug?.(`findTerminal: matched Terminal.app (tty=${terminalAppLocation.tty})`);
|
|
55
|
-
return terminalAppLocation;
|
|
18
|
+
for (const backend of TERMINAL_BACKENDS){
|
|
19
|
+
const location = await backend.find(fullTty);
|
|
20
|
+
if (location) {
|
|
21
|
+
this.debug?.(`findTerminal: matched ${backend.label} (identifier=${location.identifier})`);
|
|
22
|
+
return location;
|
|
23
|
+
}
|
|
24
|
+
this.debug?.(`findTerminal: ${backend.label} no match`);
|
|
56
25
|
}
|
|
57
|
-
this.debug?.("findTerminal: Terminal.app no match");
|
|
58
|
-
// 5. Fallback: we know the TTY but not the emulator wrapper
|
|
59
26
|
this.debug?.("findTerminal: no emulator matched; returning UNKNOWN");
|
|
60
27
|
return {
|
|
61
|
-
type:
|
|
28
|
+
type: TerminalType.UNKNOWN,
|
|
62
29
|
identifier: "",
|
|
63
30
|
tty: fullTty
|
|
64
31
|
};
|
|
65
32
|
}
|
|
66
|
-
|
|
67
|
-
* Focus the terminal identified by the location
|
|
68
|
-
*/ async focusTerminal(location) {
|
|
33
|
+
async focusTerminal(location) {
|
|
69
34
|
this.debug?.(`focusTerminal: focusing ${location.type} (identifier=${location.identifier}, tty=${location.tty})`);
|
|
70
35
|
let success = false;
|
|
71
36
|
try {
|
|
72
|
-
|
|
73
|
-
case "tmux":
|
|
74
|
-
success = await this.focusTmuxPane(location.identifier);
|
|
75
|
-
break;
|
|
76
|
-
case "wezterm":
|
|
77
|
-
success = await this.focusWeztermPane(location.identifier);
|
|
78
|
-
break;
|
|
79
|
-
case "iterm2":
|
|
80
|
-
success = await this.focusITerm2Session(location.tty);
|
|
81
|
-
break;
|
|
82
|
-
case "terminal-app":
|
|
83
|
-
success = await this.focusTerminalAppWindow(location.tty);
|
|
84
|
-
break;
|
|
85
|
-
default:
|
|
86
|
-
success = false;
|
|
87
|
-
}
|
|
37
|
+
success = await terminalBackendFor(location.type)?.focus(location) ?? false;
|
|
88
38
|
} catch {
|
|
89
39
|
success = false;
|
|
90
40
|
}
|
|
91
41
|
this.debug?.(`focusTerminal: ${success ? "succeeded" : "failed"} for ${location.type}`);
|
|
92
42
|
return success;
|
|
93
43
|
}
|
|
94
|
-
async findWeztermPane(tty) {
|
|
95
|
-
try {
|
|
96
|
-
const { stdout } = await execFileAsync("wezterm", [
|
|
97
|
-
"cli",
|
|
98
|
-
"list",
|
|
99
|
-
"--format",
|
|
100
|
-
"json"
|
|
101
|
-
]);
|
|
102
|
-
const panes = JSON.parse(stdout);
|
|
103
|
-
if (!Array.isArray(panes)) return null;
|
|
104
|
-
for (const pane of panes){
|
|
105
|
-
if (pane && typeof pane.tty_name === "string" && pane.tty_name === tty && pane.pane_id != null) {
|
|
106
|
-
return {
|
|
107
|
-
type: "wezterm",
|
|
108
|
-
identifier: String(pane.pane_id),
|
|
109
|
-
tty
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
} catch {
|
|
114
|
-
// wezterm not installed, not running, or returned invalid JSON
|
|
115
|
-
}
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
async focusWeztermPane(paneId) {
|
|
119
|
-
try {
|
|
120
|
-
await execFileAsync("wezterm", [
|
|
121
|
-
"cli",
|
|
122
|
-
"activate-pane",
|
|
123
|
-
"--pane-id",
|
|
124
|
-
paneId
|
|
125
|
-
]);
|
|
126
|
-
return true;
|
|
127
|
-
} catch {
|
|
128
|
-
return false;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
async findTmuxPane(tty) {
|
|
132
|
-
try {
|
|
133
|
-
const { stdout } = await execFileAsync("tmux", [
|
|
134
|
-
"list-panes",
|
|
135
|
-
"-a",
|
|
136
|
-
"-F",
|
|
137
|
-
"#{pane_tty}|#{session_name}:#{window_index}.#{pane_index}"
|
|
138
|
-
]);
|
|
139
|
-
const lines = stdout.trim().split("\n");
|
|
140
|
-
for (const line of lines){
|
|
141
|
-
if (!line.trim()) continue;
|
|
142
|
-
const [paneTty, identifier] = line.split("|");
|
|
143
|
-
if (paneTty === tty && identifier) {
|
|
144
|
-
return {
|
|
145
|
-
type: "tmux",
|
|
146
|
-
identifier,
|
|
147
|
-
tty
|
|
148
|
-
};
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
} catch {
|
|
152
|
-
// tmux might not be installed or running
|
|
153
|
-
}
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
async findITerm2Session(tty) {
|
|
157
|
-
try {
|
|
158
|
-
// Check if iTerm2 is running first to avoid launching it.
|
|
159
|
-
if (!await this.isProcessRunning("iTerm2")) return null;
|
|
160
|
-
} catch {
|
|
161
|
-
return null;
|
|
162
|
-
}
|
|
163
|
-
try {
|
|
164
|
-
const escapedTty = escapeAppleScript(tty);
|
|
165
|
-
const script = `
|
|
166
|
-
tell application "iTerm"
|
|
167
|
-
repeat with w in windows
|
|
168
|
-
repeat with t in tabs of w
|
|
169
|
-
repeat with s in sessions of t
|
|
170
|
-
if tty of s is "${escapedTty}" then
|
|
171
|
-
return "found"
|
|
172
|
-
end if
|
|
173
|
-
end repeat
|
|
174
|
-
end repeat
|
|
175
|
-
end repeat
|
|
176
|
-
end tell
|
|
177
|
-
`;
|
|
178
|
-
const { stdout } = await execFileAsync("osascript", [
|
|
179
|
-
"-e",
|
|
180
|
-
script
|
|
181
|
-
]);
|
|
182
|
-
if (stdout.trim() === "found") {
|
|
183
|
-
return {
|
|
184
|
-
type: "iterm2",
|
|
185
|
-
identifier: tty,
|
|
186
|
-
tty
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
} catch {
|
|
190
|
-
// iTerm2 script failed
|
|
191
|
-
}
|
|
192
|
-
return null;
|
|
193
|
-
}
|
|
194
|
-
async findTerminalAppWindow(tty) {
|
|
195
|
-
try {
|
|
196
|
-
// Check if Terminal.app is running
|
|
197
|
-
if (!await this.isProcessRunning("Terminal")) return null;
|
|
198
|
-
} catch {
|
|
199
|
-
return null;
|
|
200
|
-
}
|
|
201
|
-
try {
|
|
202
|
-
const escapedTty = escapeAppleScript(tty);
|
|
203
|
-
const script = `
|
|
204
|
-
tell application "Terminal"
|
|
205
|
-
repeat with w in windows
|
|
206
|
-
repeat with t in tabs of w
|
|
207
|
-
if tty of t is "${escapedTty}" then
|
|
208
|
-
return "found"
|
|
209
|
-
end if
|
|
210
|
-
end repeat
|
|
211
|
-
end repeat
|
|
212
|
-
end tell
|
|
213
|
-
`;
|
|
214
|
-
const { stdout } = await execFileAsync("osascript", [
|
|
215
|
-
"-e",
|
|
216
|
-
script
|
|
217
|
-
]);
|
|
218
|
-
if (stdout.trim() === "found") {
|
|
219
|
-
return {
|
|
220
|
-
type: "terminal-app",
|
|
221
|
-
identifier: tty,
|
|
222
|
-
tty
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
} catch {
|
|
226
|
-
// Terminal.app script failed
|
|
227
|
-
}
|
|
228
|
-
return null;
|
|
229
|
-
}
|
|
230
|
-
async isProcessRunning(name) {
|
|
231
|
-
const { stdout } = await execFileAsync("ps", [
|
|
232
|
-
"-Axo",
|
|
233
|
-
"comm"
|
|
234
|
-
]);
|
|
235
|
-
return stdout.split("\n").map((line)=>line.trim()).some((command)=>command === name || command.endsWith(`/${name}`));
|
|
236
|
-
}
|
|
237
|
-
async focusTmuxPane(identifier) {
|
|
238
|
-
try {
|
|
239
|
-
await execFileAsync("tmux", [
|
|
240
|
-
"switch-client",
|
|
241
|
-
"-t",
|
|
242
|
-
identifier
|
|
243
|
-
]);
|
|
244
|
-
return true;
|
|
245
|
-
} catch {
|
|
246
|
-
return false;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
async focusITerm2Session(tty) {
|
|
250
|
-
const escapedTty = escapeAppleScript(tty);
|
|
251
|
-
const script = `
|
|
252
|
-
tell application "iTerm"
|
|
253
|
-
activate
|
|
254
|
-
repeat with w in windows
|
|
255
|
-
repeat with t in tabs of w
|
|
256
|
-
repeat with s in sessions of t
|
|
257
|
-
if tty of s is "${escapedTty}" then
|
|
258
|
-
select s
|
|
259
|
-
return "true"
|
|
260
|
-
end if
|
|
261
|
-
end repeat
|
|
262
|
-
end repeat
|
|
263
|
-
end repeat
|
|
264
|
-
end tell
|
|
265
|
-
`;
|
|
266
|
-
const { stdout } = await execFileAsync("osascript", [
|
|
267
|
-
"-e",
|
|
268
|
-
script
|
|
269
|
-
]);
|
|
270
|
-
return stdout.trim() === "true";
|
|
271
|
-
}
|
|
272
|
-
async focusTerminalAppWindow(tty) {
|
|
273
|
-
const escapedTty = escapeAppleScript(tty);
|
|
274
|
-
const script = `
|
|
275
|
-
tell application "Terminal"
|
|
276
|
-
activate
|
|
277
|
-
repeat with w in windows
|
|
278
|
-
repeat with t in tabs of w
|
|
279
|
-
if tty of t is "${escapedTty}" then
|
|
280
|
-
set index of w to 1
|
|
281
|
-
set selected tab of w to t
|
|
282
|
-
return "true"
|
|
283
|
-
end if
|
|
284
|
-
end repeat
|
|
285
|
-
end repeat
|
|
286
|
-
end tell
|
|
287
|
-
`;
|
|
288
|
-
const { stdout } = await execFileAsync("osascript", [
|
|
289
|
-
"-e",
|
|
290
|
-
script
|
|
291
|
-
]);
|
|
292
|
-
return stdout.trim() === "true";
|
|
293
|
-
}
|
|
294
44
|
}
|
|
295
45
|
|
|
296
46
|
//# sourceMappingURL=TerminalFocusManager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/terminal/TerminalFocusManager.ts"],"sourcesContent":["import { execFile } from \"child_process\";\nimport { promisify } from \"util\";\nimport { getProcessTty } from \"../utils/process.js\";\nimport { escapeAppleScript } from \"../utils/applescript.js\";\n\nconst execFileAsync = promisify(execFile);\n\nexport enum TerminalType {\n TMUX = \"tmux\",\n WEZTERM = \"wezterm\",\n ITERM2 = \"iterm2\",\n TERMINAL_APP = \"terminal-app\",\n UNKNOWN = \"unknown\",\n}\n\nexport interface TerminalLocation {\n type: TerminalType;\n identifier: string; // e.g., \"session:window.pane\" for tmux, WezTerm pane id, or TTY for others\n tty: string; // e.g., \"/dev/ttys030\"\n}\n\n/**\n * Subset of a `wezterm cli list --format json` entry. Only `pane_id` and\n * `tty_name` are read; extra fields are ignored so schema additions across\n * WezTerm versions don't break parsing. (The TTY is exposed as `tty_name` in\n * the JSON, not `tty`.)\n */\ninterface WeztermPaneEntry {\n pane_id?: number;\n tty_name?: string | null;\n}\n\n/**\n * Optional trace sink. When provided to {@link TerminalFocusManager}, each\n * discovery/focus step reports a human-readable line so callers (e.g. the\n * `agent open --debug` command) can inspect the matching/focus decision path.\n */\nexport type TerminalDebugLogger = (message: string) => void;\n\nexport class TerminalFocusManager {\n constructor(private readonly debug?: TerminalDebugLogger) {}\n\n /**\n * Find the terminal location (emulator info) for a given process ID\n */\n async findTerminal(pid: number): Promise<TerminalLocation | null> {\n const ttyShort = getProcessTty(pid);\n\n // If no TTY or invalid, we can't find the terminal\n if (!ttyShort || ttyShort === \"?\") {\n this.debug?.(`findTerminal(pid=${pid}): no usable TTY, cannot resolve terminal`);\n return null;\n }\n\n const fullTty = `/dev/${ttyShort}`;\n this.debug?.(`findTerminal(pid=${pid}): resolving terminal for ${fullTty}`);\n\n // 1. Check tmux (most specific if running inside it)\n const tmuxLocation = await this.findTmuxPane(fullTty);\n if (tmuxLocation) {\n this.debug?.(`findTerminal: matched tmux (identifier=${tmuxLocation.identifier})`);\n return tmuxLocation;\n }\n this.debug?.(\"findTerminal: tmux no match\");\n\n // 2. Check WezTerm (cross-platform, via its CLI — no AppleScript)\n const weztermLocation = await this.findWeztermPane(fullTty);\n if (weztermLocation) {\n this.debug?.(`findTerminal: matched wezterm (pane_id=${weztermLocation.identifier})`);\n return weztermLocation;\n }\n this.debug?.(\"findTerminal: wezterm no match\");\n\n // 3. Check iTerm2\n const itermLocation = await this.findITerm2Session(fullTty);\n if (itermLocation) {\n this.debug?.(`findTerminal: matched iTerm2 (tty=${itermLocation.tty})`);\n return itermLocation;\n }\n this.debug?.(\"findTerminal: iTerm2 no match\");\n\n // 4. Check Terminal.app\n const terminalAppLocation = await this.findTerminalAppWindow(fullTty);\n if (terminalAppLocation) {\n this.debug?.(`findTerminal: matched Terminal.app (tty=${terminalAppLocation.tty})`);\n return terminalAppLocation;\n }\n this.debug?.(\"findTerminal: Terminal.app no match\");\n\n // 5. Fallback: we know the TTY but not the emulator wrapper\n this.debug?.(\"findTerminal: no emulator matched; returning UNKNOWN\");\n return {\n type: TerminalType.UNKNOWN,\n identifier: \"\",\n tty: fullTty,\n };\n }\n\n /**\n * Focus the terminal identified by the location\n */\n async focusTerminal(location: TerminalLocation): Promise<boolean> {\n this.debug?.(\n `focusTerminal: focusing ${location.type} (identifier=${location.identifier}, tty=${location.tty})`,\n );\n let success = false;\n try {\n switch (location.type) {\n case TerminalType.TMUX:\n success = await this.focusTmuxPane(location.identifier);\n break;\n case TerminalType.WEZTERM:\n success = await this.focusWeztermPane(location.identifier);\n break;\n case TerminalType.ITERM2:\n success = await this.focusITerm2Session(location.tty);\n break;\n case TerminalType.TERMINAL_APP:\n success = await this.focusTerminalAppWindow(location.tty);\n break;\n default:\n success = false;\n }\n } catch {\n success = false;\n }\n this.debug?.(`focusTerminal: ${success ? \"succeeded\" : \"failed\"} for ${location.type}`);\n return success;\n }\n\n private async findWeztermPane(tty: string): Promise<TerminalLocation | null> {\n try {\n const { stdout } = await execFileAsync(\"wezterm\", [\"cli\", \"list\", \"--format\", \"json\"]);\n\n const panes = JSON.parse(stdout) as WeztermPaneEntry[];\n if (!Array.isArray(panes)) return null;\n\n for (const pane of panes) {\n if (\n pane &&\n typeof pane.tty_name === \"string\" &&\n pane.tty_name === tty &&\n pane.pane_id != null\n ) {\n return {\n type: TerminalType.WEZTERM,\n identifier: String(pane.pane_id),\n tty,\n };\n }\n }\n } catch {\n // wezterm not installed, not running, or returned invalid JSON\n }\n return null;\n }\n\n private async focusWeztermPane(paneId: string): Promise<boolean> {\n try {\n await execFileAsync(\"wezterm\", [\"cli\", \"activate-pane\", \"--pane-id\", paneId]);\n return true;\n } catch {\n return false;\n }\n }\n\n private async findTmuxPane(tty: string): Promise<TerminalLocation | null> {\n try {\n const { stdout } = await execFileAsync(\"tmux\", [\n \"list-panes\",\n \"-a\",\n \"-F\",\n \"#{pane_tty}|#{session_name}:#{window_index}.#{pane_index}\",\n ]);\n\n const lines = stdout.trim().split(\"\\n\");\n for (const line of lines) {\n if (!line.trim()) continue;\n const [paneTty, identifier] = line.split(\"|\");\n if (paneTty === tty && identifier) {\n return {\n type: TerminalType.TMUX,\n identifier,\n tty,\n };\n }\n }\n } catch {\n // tmux might not be installed or running\n }\n return null;\n }\n\n private async findITerm2Session(tty: string): Promise<TerminalLocation | null> {\n try {\n // Check if iTerm2 is running first to avoid launching it.\n if (!(await this.isProcessRunning(\"iTerm2\"))) return null;\n } catch {\n return null;\n }\n\n try {\n const escapedTty = escapeAppleScript(tty);\n const script = `\n tell application \"iTerm\"\n repeat with w in windows\n repeat with t in tabs of w\n repeat with s in sessions of t\n if tty of s is \"${escapedTty}\" then\n return \"found\"\n end if\n end repeat\n end repeat\n end repeat\n end tell\n `;\n\n const { stdout } = await execFileAsync(\"osascript\", [\"-e\", script]);\n if (stdout.trim() === \"found\") {\n return {\n type: TerminalType.ITERM2,\n identifier: tty,\n tty,\n };\n }\n } catch {\n // iTerm2 script failed\n }\n return null;\n }\n\n private async findTerminalAppWindow(tty: string): Promise<TerminalLocation | null> {\n try {\n // Check if Terminal.app is running\n if (!(await this.isProcessRunning(\"Terminal\"))) return null;\n } catch {\n return null;\n }\n\n try {\n const escapedTty = escapeAppleScript(tty);\n const script = `\n tell application \"Terminal\"\n repeat with w in windows\n repeat with t in tabs of w\n if tty of t is \"${escapedTty}\" then\n return \"found\"\n end if\n end repeat\n end repeat\n end tell\n `;\n\n const { stdout } = await execFileAsync(\"osascript\", [\"-e\", script]);\n if (stdout.trim() === \"found\") {\n return {\n type: TerminalType.TERMINAL_APP,\n identifier: tty,\n tty,\n };\n }\n } catch {\n // Terminal.app script failed\n }\n return null;\n }\n\n private async isProcessRunning(name: string): Promise<boolean> {\n const { stdout } = await execFileAsync(\"ps\", [\"-Axo\", \"comm\"]);\n return stdout\n .split(\"\\n\")\n .map((line) => line.trim())\n .some((command) => command === name || command.endsWith(`/${name}`));\n }\n\n private async focusTmuxPane(identifier: string): Promise<boolean> {\n try {\n await execFileAsync(\"tmux\", [\"switch-client\", \"-t\", identifier]);\n return true;\n } catch {\n return false;\n }\n }\n\n private async focusITerm2Session(tty: string): Promise<boolean> {\n const escapedTty = escapeAppleScript(tty);\n const script = `\n tell application \"iTerm\"\n activate\n repeat with w in windows\n repeat with t in tabs of w\n repeat with s in sessions of t\n if tty of s is \"${escapedTty}\" then\n select s\n return \"true\"\n end if\n end repeat\n end repeat\n end repeat\n end tell\n `;\n const { stdout } = await execFileAsync(\"osascript\", [\"-e\", script]);\n return stdout.trim() === \"true\";\n }\n\n private async focusTerminalAppWindow(tty: string): Promise<boolean> {\n const escapedTty = escapeAppleScript(tty);\n const script = `\n tell application \"Terminal\"\n activate\n repeat with w in windows\n repeat with t in tabs of w\n if tty of t is \"${escapedTty}\" then\n set index of w to 1\n set selected tab of w to t\n return \"true\"\n end if\n end repeat\n end repeat\n end tell\n `;\n const { stdout } = await execFileAsync(\"osascript\", [\"-e\", script]);\n return stdout.trim() === \"true\";\n }\n}\n"],"names":["execFile","promisify","getProcessTty","escapeAppleScript","execFileAsync","TerminalType","TerminalFocusManager","debug","findTerminal","pid","ttyShort","fullTty","tmuxLocation","findTmuxPane","identifier","weztermLocation","findWeztermPane","itermLocation","findITerm2Session","tty","terminalAppLocation","findTerminalAppWindow","type","focusTerminal","location","success","focusTmuxPane","focusWeztermPane","focusITerm2Session","focusTerminalAppWindow","stdout","panes","JSON","parse","Array","isArray","pane","tty_name","pane_id","String","paneId","lines","trim","split","line","paneTty","isProcessRunning","escapedTty","script","name","map","some","command","endsWith"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/terminal/TerminalFocusManager.ts"],"sourcesContent":["import { getProcessTty } from \"../utils/process.js\";\nimport { TERMINAL_BACKENDS, terminalBackendFor } from \"./backends/index.js\";\nimport { TerminalType, type TerminalLocation } from \"./types.js\";\n\nexport { TerminalType };\nexport type { TerminalLocation };\n\n/** Optional trace sink for terminal discovery and focus decisions. */\nexport type TerminalDebugLogger = (message: string) => void;\n\nexport class TerminalFocusManager {\n constructor(private readonly debug?: TerminalDebugLogger) {}\n\n async findTerminal(pid: number): Promise<TerminalLocation | null> {\n const tty = getProcessTty(pid);\n if (!tty || tty === \"?\") {\n this.debug?.(`findTerminal(pid=${pid}): no usable TTY, cannot resolve terminal`);\n return null;\n }\n\n const fullTty = `/dev/${tty}`;\n this.debug?.(`findTerminal(pid=${pid}): resolving terminal for ${fullTty}`);\n\n for (const backend of TERMINAL_BACKENDS) {\n const location = await backend.find(fullTty);\n if (location) {\n this.debug?.(`findTerminal: matched ${backend.label} (identifier=${location.identifier})`);\n return location;\n }\n this.debug?.(`findTerminal: ${backend.label} no match`);\n }\n\n this.debug?.(\"findTerminal: no emulator matched; returning UNKNOWN\");\n return { type: TerminalType.UNKNOWN, identifier: \"\", tty: fullTty };\n }\n\n async focusTerminal(location: TerminalLocation): Promise<boolean> {\n this.debug?.(\n `focusTerminal: focusing ${location.type} (identifier=${location.identifier}, tty=${location.tty})`,\n );\n\n let success = false;\n try {\n success = (await terminalBackendFor(location.type)?.focus(location)) ?? false;\n } catch {\n success = false;\n }\n\n this.debug?.(`focusTerminal: ${success ? \"succeeded\" : \"failed\"} for ${location.type}`);\n return success;\n }\n}\n"],"names":["getProcessTty","TERMINAL_BACKENDS","terminalBackendFor","TerminalType","TerminalFocusManager","debug","findTerminal","pid","tty","fullTty","backend","location","find","label","identifier","type","UNKNOWN","focusTerminal","success","focus"],"mappings":"AAAA,SAASA,aAAa,QAAQ,sBAAsB;AACpD,SAASC,iBAAiB,EAAEC,kBAAkB,QAAQ,sBAAsB;AAC5E,SAASC,YAAY,QAA+B,aAAa;AAEjE,SAASA,YAAY,GAAG;AAMxB,OAAO,MAAMC;;IACX,YAAY,AAAiBC,KAA2B,CAAE;aAA7BA,QAAAA;IAA8B;IAE3D,MAAMC,aAAaC,GAAW,EAAoC;QAChE,MAAMC,MAAMR,cAAcO;QAC1B,IAAI,CAACC,OAAOA,QAAQ,KAAK;YACvB,IAAI,CAACH,KAAK,GAAG,CAAC,iBAAiB,EAAEE,IAAI,yCAAyC,CAAC;YAC/E,OAAO;QACT;QAEA,MAAME,UAAU,CAAC,KAAK,EAAED,KAAK;QAC7B,IAAI,CAACH,KAAK,GAAG,CAAC,iBAAiB,EAAEE,IAAI,0BAA0B,EAAEE,SAAS;QAE1E,KAAK,MAAMC,WAAWT,kBAAmB;YACvC,MAAMU,WAAW,MAAMD,QAAQE,IAAI,CAACH;YACpC,IAAIE,UAAU;gBACZ,IAAI,CAACN,KAAK,GAAG,CAAC,sBAAsB,EAAEK,QAAQG,KAAK,CAAC,aAAa,EAAEF,SAASG,UAAU,CAAC,CAAC,CAAC;gBACzF,OAAOH;YACT;YACA,IAAI,CAACN,KAAK,GAAG,CAAC,cAAc,EAAEK,QAAQG,KAAK,CAAC,SAAS,CAAC;QACxD;QAEA,IAAI,CAACR,KAAK,GAAG;QACb,OAAO;YAAEU,MAAMZ,aAAaa,OAAO;YAAEF,YAAY;YAAIN,KAAKC;QAAQ;IACpE;IAEA,MAAMQ,cAAcN,QAA0B,EAAoB;QAChE,IAAI,CAACN,KAAK,GACR,CAAC,wBAAwB,EAAEM,SAASI,IAAI,CAAC,aAAa,EAAEJ,SAASG,UAAU,CAAC,MAAM,EAAEH,SAASH,GAAG,CAAC,CAAC,CAAC;QAGrG,IAAIU,UAAU;QACd,IAAI;YACFA,UAAU,AAAC,MAAMhB,mBAAmBS,SAASI,IAAI,GAAGI,MAAMR,aAAc;QAC1E,EAAE,OAAM;YACNO,UAAU;QACZ;QAEA,IAAI,CAACb,KAAK,GAAG,CAAC,eAAe,EAAEa,UAAU,cAAc,SAAS,KAAK,EAAEP,SAASI,IAAI,EAAE;QACtF,OAAOG;IACT;AACF"}
|