@ai-devkit/agent-manager 0.37.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 +0 -4
- package/dist/AgentManager.d.ts.map +1 -1
- package/dist/AgentManager.js +2 -2
- package/dist/AgentManager.js.map +1 -1
- 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 +21 -12
- 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/claude/durable/ClaudePrintAgent.integration.test.js +2 -1
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js.map +1 -1
- package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js.map +1 -1
- package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js +7 -15
- package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js.map +1 -1
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js +3 -1
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js.map +1 -1
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js +11 -26
- package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js.map +1 -1
- package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js +3 -7
- package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js.map +1 -1
- package/dist/__tests__/harnesses/pi/durable/PiCliProbe.test.js +5 -11
- package/dist/__tests__/harnesses/pi/durable/PiCliProbe.test.js.map +1 -1
- package/dist/__tests__/harnesses/pi/durable/PiPrintAgentService.test.js +9 -19
- package/dist/__tests__/harnesses/pi/durable/PiPrintAgentService.test.js.map +1 -1
- package/dist/__tests__/harnesses/pi/durable/PiPrintRunner.test.js +3 -7
- package/dist/__tests__/harnesses/pi/durable/PiPrintRunner.test.js.map +1 -1
- package/dist/__tests__/{readiness → harnesses/readiness}/AgentReadiness.test.js +31 -10
- 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.map +1 -1
- package/dist/__tests__/terminal/TmuxManager.test.js +1 -1
- package/dist/__tests__/terminal/TmuxManager.test.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/{claude.js → providers/anthropic.js} +10 -128
- 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/{zai.js → providers/zai.js} +17 -62
- 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/{codex.d.ts → sources/codex.d.ts} +5 -9
- package/dist/capacity/sources/codex.d.ts.map +1 -0
- package/dist/capacity/{codex.js → sources/codex.js} +31 -84
- 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/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/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/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/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/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/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/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/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/{readiness/AgentReadiness.d.ts → harnesses/readiness/types.d.ts} +19 -10
- 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/index.d.ts +16 -42
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -23
- 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/{terminal → runtime/tmux}/TmuxManager.js +9 -28
- 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/package.json +1 -1
- package/src/AgentManager.ts +1 -1
- 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 +15 -15
- package/src/__tests__/capacity/wham.test.ts +1 -1
- package/src/__tests__/capacity/zai.test.ts +27 -62
- package/src/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.ts +2 -2
- package/src/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.ts +1 -1
- package/src/__tests__/harnesses/codex/durable/CodexCliProbe.test.ts +14 -19
- package/src/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.ts +3 -3
- package/src/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.ts +24 -30
- package/src/__tests__/harnesses/codex/durable/CodexPrintRunner.test.ts +4 -8
- package/src/__tests__/harnesses/pi/durable/PiCliProbe.test.ts +7 -11
- package/src/__tests__/harnesses/pi/durable/PiPrintAgentService.test.ts +19 -22
- package/src/__tests__/harnesses/pi/durable/PiPrintRunner.test.ts +7 -8
- package/src/__tests__/{readiness → harnesses/readiness}/AgentReadiness.test.ts +36 -9
- 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 +1 -1
- package/src/__tests__/terminal/TmuxManager.test.ts +1 -1
- package/src/capacity/index.ts +29 -23
- package/src/capacity/{claude.ts → providers/anthropic.ts} +16 -131
- package/src/capacity/providers/openai-platform.ts +150 -0
- package/src/capacity/{wham.ts → providers/openai-subscription.ts} +86 -8
- package/src/capacity/{zai.ts → providers/zai.ts} +29 -111
- package/src/capacity/sources/claude.ts +30 -0
- package/src/capacity/{codex.ts → sources/codex.ts} +54 -124
- package/src/capacity/sources/pi.ts +131 -0
- package/src/capacity/types.ts +3 -0
- package/src/harnesses/claude/credentials.ts +122 -0
- package/src/harnesses/claude/readiness.ts +69 -0
- package/src/harnesses/codex/credentials.ts +81 -0
- package/src/harnesses/codex/readiness.ts +72 -0
- package/src/harnesses/copilot/readiness.ts +33 -0
- package/src/harnesses/opencode/readiness.ts +48 -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/{utils/agents.ts → harnesses/runtimeProfiles.ts} +34 -38
- package/src/index.ts +15 -128
- 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/{terminal → runtime/tmux}/TmuxManager.ts +9 -30
- 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/dist/__tests__/readiness/AgentReadiness.test.js.map +0 -1
- package/dist/__tests__/utils/agents.test.js +0 -93
- package/dist/__tests__/utils/agents.test.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.map +0 -1
- package/dist/capacity/codex.d.ts.map +0 -1
- package/dist/capacity/codex.js.map +0 -1
- package/dist/capacity/openai.d.ts +0 -47
- package/dist/capacity/openai.d.ts.map +0 -1
- package/dist/capacity/openai.js +0 -307
- 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.map +0 -1
- 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.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 -16
- package/dist/utils/agents.d.ts.map +0 -1
- package/dist/utils/agents.js +0 -117
- package/dist/utils/agents.js.map +0 -1
- package/dist/utils/index.d.ts +0 -8
- 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__/utils/agents.test.ts +0 -105
- package/src/capacity/openai.ts +0 -355
- package/src/readiness/AgentReadiness.ts +0 -730
- package/src/terminal/index.ts +0 -4
- package/src/utils/index.ts +0 -14
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { runtimeAgentMatchesHarness } from "../../harnesses/runtimeProfiles.js";
|
|
1
2
|
import { HerdrCliClient } from "./HerdrCliClient.js";
|
|
2
3
|
export async function fetchHerdrAgentPanes(runner) {
|
|
3
4
|
const client = new HerdrCliClient(runner);
|
|
@@ -62,7 +63,7 @@ export function findMatchingHerdrPane(agent, panes) {
|
|
|
62
63
|
const shellPidMatches = panes.filter((pane)=>pane.shellPid === agent.pid);
|
|
63
64
|
if (shellPidMatches.length === 1) return shellPidMatches[0];
|
|
64
65
|
if (shellPidMatches.length > 1) return null;
|
|
65
|
-
const cwdMatches = panes.filter((pane)=>pane.cwd === agent.projectPath &&
|
|
66
|
+
const cwdMatches = panes.filter((pane)=>pane.cwd === agent.projectPath && runtimeAgentMatchesHarness(pane.agent, agent.type));
|
|
66
67
|
return cwdMatches.length === 1 ? cwdMatches[0] : null;
|
|
67
68
|
}
|
|
68
69
|
export function herdrPaneToRuntimeRef(pane, agentName) {
|
|
@@ -78,48 +79,6 @@ export function herdrPaneToRuntimeRef(pane, agentName) {
|
|
|
78
79
|
} : {}
|
|
79
80
|
};
|
|
80
81
|
}
|
|
81
|
-
function herdrAgentMatchesType(herdrAgent, agentType) {
|
|
82
|
-
const normalized = herdrAgent.toLowerCase();
|
|
83
|
-
const candidates = {
|
|
84
|
-
claude: [
|
|
85
|
-
"claude"
|
|
86
|
-
],
|
|
87
|
-
codex: [
|
|
88
|
-
"codex"
|
|
89
|
-
],
|
|
90
|
-
copilot: [
|
|
91
|
-
"copilot"
|
|
92
|
-
],
|
|
93
|
-
gemini_cli: [
|
|
94
|
-
"gemini",
|
|
95
|
-
"gemini_cli"
|
|
96
|
-
],
|
|
97
|
-
grok_cli: [
|
|
98
|
-
"grok",
|
|
99
|
-
"grok_cli"
|
|
100
|
-
],
|
|
101
|
-
antigravity_cli: [
|
|
102
|
-
"agy",
|
|
103
|
-
"antigravity",
|
|
104
|
-
"antigravity_cli"
|
|
105
|
-
],
|
|
106
|
-
kiro: [
|
|
107
|
-
"kiro",
|
|
108
|
-
"kiro_cli",
|
|
109
|
-
"kiro-cli"
|
|
110
|
-
],
|
|
111
|
-
opencode: [
|
|
112
|
-
"opencode"
|
|
113
|
-
],
|
|
114
|
-
pi: [
|
|
115
|
-
"pi"
|
|
116
|
-
],
|
|
117
|
-
other: [
|
|
118
|
-
"other"
|
|
119
|
-
]
|
|
120
|
-
};
|
|
121
|
-
return candidates[agentType]?.includes(normalized) ?? false;
|
|
122
|
-
}
|
|
123
82
|
async function enrichHerdrAgentPanes(client, panes) {
|
|
124
83
|
return Promise.all(panes.map(async (pane)=>{
|
|
125
84
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/runtime/herdr/HerdrAgentDiscovery.ts"],"sourcesContent":["import type { AgentInfo, AgentType } from \"../../adapters/AgentAdapter.js\";\nimport { HerdrCliClient, type HerdrCommandRunner } from \"./HerdrCliClient.js\";\nimport type { HerdrRuntimeRef } from \"./HerdrRuntimeRef.js\";\n\nexport interface HerdrAgentPane {\n agent: string;\n agentSessionId?: string;\n cwd?: string;\n paneId: string;\n workspaceId?: string;\n tabId?: string;\n foregroundPids?: number[];\n shellPid?: number;\n}\n\nexport async function fetchHerdrAgentPanes(runner?: HerdrCommandRunner): Promise<HerdrAgentPane[]> {\n const client = new HerdrCliClient(runner);\n const response = await client.runJson([\"pane\", \"list\"]);\n return enrichHerdrAgentPanes(client, extractHerdrAgentPanes(response));\n}\n\nexport function extractHerdrAgentPanes(value: unknown): HerdrAgentPane[] {\n const snapshot = getObject(value, [\"result\", \"snapshot\"]);\n const rawPanes = getArray(value, [\"result\", \"panes\"]) ?? snapshot?.agents;\n if (!Array.isArray(rawPanes)) return [];\n\n const panes: HerdrAgentPane[] = [];\n for (const rawPane of rawPanes) {\n if (!rawPane || typeof rawPane !== \"object\" || Array.isArray(rawPane)) continue;\n const pane = rawPane as Record<string, unknown>;\n const agent = nonEmptyString(pane.agent);\n const paneId = nonEmptyString(pane.pane_id);\n if (!agent || !paneId) continue;\n\n const session = getObject(pane, [\"agent_session\"]);\n const agentSessionId = nonEmptyString(session?.value);\n const cwd = nonEmptyString(pane.cwd);\n const workspaceId = nonEmptyString(pane.workspace_id);\n const tabId = nonEmptyString(pane.tab_id);\n\n panes.push({\n agent,\n paneId,\n ...(agentSessionId ? { agentSessionId } : {}),\n ...(cwd ? { cwd } : {}),\n ...(workspaceId ? { workspaceId } : {}),\n ...(tabId ? { tabId } : {}),\n });\n }\n\n return panes;\n}\n\nexport function findMatchingHerdrPane(\n agent: Pick<AgentInfo, \"type\" | \"projectPath\" | \"sessionId\" | \"pid\">,\n panes: readonly HerdrAgentPane[],\n): HerdrAgentPane | null {\n if (agent.sessionId) {\n const sessionMatches = panes.filter((pane) => pane.agentSessionId === agent.sessionId);\n if (sessionMatches.length === 1) return sessionMatches[0]!;\n if (sessionMatches.length > 1) return null;\n }\n\n const foregroundPidMatches = panes.filter((pane) => pane.foregroundPids?.includes(agent.pid));\n if (foregroundPidMatches.length === 1) return foregroundPidMatches[0]!;\n if (foregroundPidMatches.length > 1) return null;\n\n const shellPidMatches = panes.filter((pane) => pane.shellPid === agent.pid);\n if (shellPidMatches.length === 1) return shellPidMatches[0]!;\n if (shellPidMatches.length > 1) return null;\n\n const cwdMatches = panes.filter(\n (pane) => pane.cwd === agent.projectPath && herdrAgentMatchesType(pane.agent, agent.type),\n );\n return cwdMatches.length === 1 ? cwdMatches[0]! : null;\n}\n\nexport function herdrPaneToRuntimeRef(pane: HerdrAgentPane, agentName: string): HerdrRuntimeRef {\n return {\n session: \"default\",\n paneId: pane.paneId,\n agentName,\n ...(pane.workspaceId ? { workspaceId: pane.workspaceId } : {}),\n ...(pane.tabId ? { tabId: pane.tabId } : {}),\n };\n}\n\nfunction herdrAgentMatchesType(herdrAgent: string, agentType: AgentType): boolean {\n const normalized = herdrAgent.toLowerCase();\n const candidates: Record<AgentType, readonly string[]> = {\n claude: [\"claude\"],\n codex: [\"codex\"],\n copilot: [\"copilot\"],\n gemini_cli: [\"gemini\", \"gemini_cli\"],\n grok_cli: [\"grok\", \"grok_cli\"],\n antigravity_cli: [\"agy\", \"antigravity\", \"antigravity_cli\"],\n kiro: [\"kiro\", \"kiro_cli\", \"kiro-cli\"],\n opencode: [\"opencode\"],\n pi: [\"pi\"],\n other: [\"other\"],\n };\n return candidates[agentType]?.includes(normalized) ?? false;\n}\n\nasync function enrichHerdrAgentPanes(\n client: HerdrCliClient,\n panes: HerdrAgentPane[],\n): Promise<HerdrAgentPane[]> {\n return Promise.all(\n panes.map(async (pane) => {\n try {\n const response = await client.runJson([\"pane\", \"process-info\", \"--pane\", pane.paneId]);\n return {\n ...pane,\n ...extractPaneProcessIds(response),\n };\n } catch {\n return pane;\n }\n }),\n );\n}\n\nfunction extractPaneProcessIds(\n value: unknown,\n): Pick<HerdrAgentPane, \"foregroundPids\" | \"shellPid\"> {\n const processInfo = getObject(value, [\"result\", \"process_info\"]);\n if (!processInfo) return {};\n\n const foregroundProcesses = processInfo.foreground_processes;\n const foregroundPids: number[] = [];\n if (Array.isArray(foregroundProcesses)) {\n for (const foregroundProcess of foregroundProcesses) {\n if (\n !foregroundProcess ||\n typeof foregroundProcess !== \"object\" ||\n Array.isArray(foregroundProcess)\n )\n continue;\n const pid = positiveIntegerOrNull((foregroundProcess as { pid?: unknown }).pid);\n if (pid !== null) foregroundPids.push(pid);\n }\n }\n const shellPid = positiveIntegerOrNull(processInfo.shell_pid);\n\n return {\n ...(foregroundPids.length > 0 ? { foregroundPids } : {}),\n ...(shellPid !== null ? { shellPid } : {}),\n };\n}\n\nfunction getArray(value: unknown, path: string[]): unknown[] | null {\n let current = value;\n for (const part of path) {\n if (!current || typeof current !== \"object\" || Array.isArray(current) || !(part in current)) {\n return null;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return Array.isArray(current) ? current : null;\n}\n\nfunction getObject(value: unknown, path: string[]): Record<string, unknown> | null {\n let current = value;\n for (const part of path) {\n if (!current || typeof current !== \"object\" || Array.isArray(current) || !(part in current)) {\n return null;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current && typeof current === \"object\" && !Array.isArray(current)\n ? (current as Record<string, unknown>)\n : null;\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction positiveIntegerOrNull(value: unknown): number | null {\n return typeof value === \"number\" && Number.isInteger(value) && value > 0 ? value : null;\n}\n"],"names":["HerdrCliClient","fetchHerdrAgentPanes","runner","client","response","runJson","enrichHerdrAgentPanes","extractHerdrAgentPanes","value","snapshot","getObject","rawPanes","getArray","agents","Array","isArray","panes","rawPane","pane","agent","nonEmptyString","paneId","pane_id","session","agentSessionId","cwd","workspaceId","workspace_id","tabId","tab_id","push","findMatchingHerdrPane","sessionId","sessionMatches","filter","length","foregroundPidMatches","foregroundPids","includes","pid","shellPidMatches","shellPid","cwdMatches","projectPath","herdrAgentMatchesType","type","herdrPaneToRuntimeRef","agentName","herdrAgent","agentType","normalized","toLowerCase","candidates","claude","codex","copilot","gemini_cli","grok_cli","antigravity_cli","kiro","opencode","pi","other","Promise","all","map","extractPaneProcessIds","processInfo","foregroundProcesses","foreground_processes","foregroundProcess","positiveIntegerOrNull","shell_pid","path","current","part","trim","undefined","Number","isInteger"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/runtime/herdr/HerdrAgentDiscovery.ts"],"sourcesContent":["import type { AgentInfo } from \"../../adapters/AgentAdapter.js\";\nimport { runtimeAgentMatchesHarness } from \"../../harnesses/runtimeProfiles.js\";\nimport { HerdrCliClient, type HerdrCommandRunner } from \"./HerdrCliClient.js\";\nimport type { HerdrRuntimeRef } from \"./HerdrRuntimeRef.js\";\n\nexport interface HerdrAgentPane {\n agent: string;\n agentSessionId?: string;\n cwd?: string;\n paneId: string;\n workspaceId?: string;\n tabId?: string;\n foregroundPids?: number[];\n shellPid?: number;\n}\n\nexport async function fetchHerdrAgentPanes(runner?: HerdrCommandRunner): Promise<HerdrAgentPane[]> {\n const client = new HerdrCliClient(runner);\n const response = await client.runJson([\"pane\", \"list\"]);\n return enrichHerdrAgentPanes(client, extractHerdrAgentPanes(response));\n}\n\nexport function extractHerdrAgentPanes(value: unknown): HerdrAgentPane[] {\n const snapshot = getObject(value, [\"result\", \"snapshot\"]);\n const rawPanes = getArray(value, [\"result\", \"panes\"]) ?? snapshot?.agents;\n if (!Array.isArray(rawPanes)) return [];\n\n const panes: HerdrAgentPane[] = [];\n for (const rawPane of rawPanes) {\n if (!rawPane || typeof rawPane !== \"object\" || Array.isArray(rawPane)) continue;\n const pane = rawPane as Record<string, unknown>;\n const agent = nonEmptyString(pane.agent);\n const paneId = nonEmptyString(pane.pane_id);\n if (!agent || !paneId) continue;\n\n const session = getObject(pane, [\"agent_session\"]);\n const agentSessionId = nonEmptyString(session?.value);\n const cwd = nonEmptyString(pane.cwd);\n const workspaceId = nonEmptyString(pane.workspace_id);\n const tabId = nonEmptyString(pane.tab_id);\n\n panes.push({\n agent,\n paneId,\n ...(agentSessionId ? { agentSessionId } : {}),\n ...(cwd ? { cwd } : {}),\n ...(workspaceId ? { workspaceId } : {}),\n ...(tabId ? { tabId } : {}),\n });\n }\n\n return panes;\n}\n\nexport function findMatchingHerdrPane(\n agent: Pick<AgentInfo, \"type\" | \"projectPath\" | \"sessionId\" | \"pid\">,\n panes: readonly HerdrAgentPane[],\n): HerdrAgentPane | null {\n if (agent.sessionId) {\n const sessionMatches = panes.filter((pane) => pane.agentSessionId === agent.sessionId);\n if (sessionMatches.length === 1) return sessionMatches[0]!;\n if (sessionMatches.length > 1) return null;\n }\n\n const foregroundPidMatches = panes.filter((pane) => pane.foregroundPids?.includes(agent.pid));\n if (foregroundPidMatches.length === 1) return foregroundPidMatches[0]!;\n if (foregroundPidMatches.length > 1) return null;\n\n const shellPidMatches = panes.filter((pane) => pane.shellPid === agent.pid);\n if (shellPidMatches.length === 1) return shellPidMatches[0]!;\n if (shellPidMatches.length > 1) return null;\n\n const cwdMatches = panes.filter(\n (pane) => pane.cwd === agent.projectPath && runtimeAgentMatchesHarness(pane.agent, agent.type),\n );\n return cwdMatches.length === 1 ? cwdMatches[0]! : null;\n}\n\nexport function herdrPaneToRuntimeRef(pane: HerdrAgentPane, agentName: string): HerdrRuntimeRef {\n return {\n session: \"default\",\n paneId: pane.paneId,\n agentName,\n ...(pane.workspaceId ? { workspaceId: pane.workspaceId } : {}),\n ...(pane.tabId ? { tabId: pane.tabId } : {}),\n };\n}\n\nasync function enrichHerdrAgentPanes(\n client: HerdrCliClient,\n panes: HerdrAgentPane[],\n): Promise<HerdrAgentPane[]> {\n return Promise.all(\n panes.map(async (pane) => {\n try {\n const response = await client.runJson([\"pane\", \"process-info\", \"--pane\", pane.paneId]);\n return {\n ...pane,\n ...extractPaneProcessIds(response),\n };\n } catch {\n return pane;\n }\n }),\n );\n}\n\nfunction extractPaneProcessIds(\n value: unknown,\n): Pick<HerdrAgentPane, \"foregroundPids\" | \"shellPid\"> {\n const processInfo = getObject(value, [\"result\", \"process_info\"]);\n if (!processInfo) return {};\n\n const foregroundProcesses = processInfo.foreground_processes;\n const foregroundPids: number[] = [];\n if (Array.isArray(foregroundProcesses)) {\n for (const foregroundProcess of foregroundProcesses) {\n if (\n !foregroundProcess ||\n typeof foregroundProcess !== \"object\" ||\n Array.isArray(foregroundProcess)\n )\n continue;\n const pid = positiveIntegerOrNull((foregroundProcess as { pid?: unknown }).pid);\n if (pid !== null) foregroundPids.push(pid);\n }\n }\n const shellPid = positiveIntegerOrNull(processInfo.shell_pid);\n\n return {\n ...(foregroundPids.length > 0 ? { foregroundPids } : {}),\n ...(shellPid !== null ? { shellPid } : {}),\n };\n}\n\nfunction getArray(value: unknown, path: string[]): unknown[] | null {\n let current = value;\n for (const part of path) {\n if (!current || typeof current !== \"object\" || Array.isArray(current) || !(part in current)) {\n return null;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return Array.isArray(current) ? current : null;\n}\n\nfunction getObject(value: unknown, path: string[]): Record<string, unknown> | null {\n let current = value;\n for (const part of path) {\n if (!current || typeof current !== \"object\" || Array.isArray(current) || !(part in current)) {\n return null;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current && typeof current === \"object\" && !Array.isArray(current)\n ? (current as Record<string, unknown>)\n : null;\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction positiveIntegerOrNull(value: unknown): number | null {\n return typeof value === \"number\" && Number.isInteger(value) && value > 0 ? value : null;\n}\n"],"names":["runtimeAgentMatchesHarness","HerdrCliClient","fetchHerdrAgentPanes","runner","client","response","runJson","enrichHerdrAgentPanes","extractHerdrAgentPanes","value","snapshot","getObject","rawPanes","getArray","agents","Array","isArray","panes","rawPane","pane","agent","nonEmptyString","paneId","pane_id","session","agentSessionId","cwd","workspaceId","workspace_id","tabId","tab_id","push","findMatchingHerdrPane","sessionId","sessionMatches","filter","length","foregroundPidMatches","foregroundPids","includes","pid","shellPidMatches","shellPid","cwdMatches","projectPath","type","herdrPaneToRuntimeRef","agentName","Promise","all","map","extractPaneProcessIds","processInfo","foregroundProcesses","foreground_processes","foregroundProcess","positiveIntegerOrNull","shell_pid","path","current","part","trim","undefined","Number","isInteger"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { TmuxManager } from "
|
|
1
|
+
import type { TmuxManager } from "./TmuxManager.js";
|
|
2
2
|
export declare const DEFAULT_PID_POLL_INTERVAL_MS = 500;
|
|
3
3
|
export declare const DEFAULT_PID_POLL_TIMEOUT_MS = 15000;
|
|
4
4
|
export declare function pollForPid(tmux: Pick<TmuxManager, "findAgentPid">, session: string, matches: (psCommand: string) => boolean, intervalMs: number, timeoutMs: number): Promise<number | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PidPolling.d.ts","sourceRoot":"","sources":["../../../src/runtime/tmux/PidPolling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM
|
|
1
|
+
{"version":3,"file":"PidPolling.d.ts","sourceRoot":"","sources":["../../../src/runtime/tmux/PidPolling.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAGlD,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EACvC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,EACvC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/runtime/tmux/PidPolling.ts"],"sourcesContent":["import type { TmuxManager } from \"
|
|
1
|
+
{"version":3,"sources":["../../../src/runtime/tmux/PidPolling.ts"],"sourcesContent":["import type { TmuxManager } from \"./TmuxManager.js\";\n\nexport const DEFAULT_PID_POLL_INTERVAL_MS = 500;\nexport const DEFAULT_PID_POLL_TIMEOUT_MS = 15_000;\nconst REQUIRED_STABLE_PID_POLLS = 5;\n\nexport async function pollForPid(\n tmux: Pick<TmuxManager, \"findAgentPid\">,\n session: string,\n matches: (psCommand: string) => boolean,\n intervalMs: number,\n timeoutMs: number,\n): Promise<number | null> {\n const deadline = Date.now() + timeoutMs;\n let candidatePid: number | null = null;\n let stablePolls = 0;\n\n while (Date.now() < deadline) {\n const pid = await tmux.findAgentPid(session, matches);\n if (pid !== null) {\n if (pid === candidatePid) {\n stablePolls += 1;\n } else {\n candidatePid = pid;\n stablePolls = 1;\n }\n\n if (stablePolls >= REQUIRED_STABLE_PID_POLLS) return pid;\n }\n await new Promise((resolve) => setTimeout(resolve, intervalMs));\n }\n\n return null;\n}\n"],"names":["DEFAULT_PID_POLL_INTERVAL_MS","DEFAULT_PID_POLL_TIMEOUT_MS","REQUIRED_STABLE_PID_POLLS","pollForPid","tmux","session","matches","intervalMs","timeoutMs","deadline","Date","now","candidatePid","stablePolls","pid","findAgentPid","Promise","resolve","setTimeout"],"mappings":"AAEA,OAAO,MAAMA,+BAA+B,IAAI;AAChD,OAAO,MAAMC,8BAA8B,OAAO;AAClD,MAAMC,4BAA4B;AAElC,OAAO,eAAeC,WACpBC,IAAuC,EACvCC,OAAe,EACfC,OAAuC,EACvCC,UAAkB,EAClBC,SAAiB;IAEjB,MAAMC,WAAWC,KAAKC,GAAG,KAAKH;IAC9B,IAAII,eAA8B;IAClC,IAAIC,cAAc;IAElB,MAAOH,KAAKC,GAAG,KAAKF,SAAU;QAC5B,MAAMK,MAAM,MAAMV,KAAKW,YAAY,CAACV,SAASC;QAC7C,IAAIQ,QAAQ,MAAM;YAChB,IAAIA,QAAQF,cAAc;gBACxBC,eAAe;YACjB,OAAO;gBACLD,eAAeE;gBACfD,cAAc;YAChB;YAEA,IAAIA,eAAeX,2BAA2B,OAAOY;QACvD;QACA,MAAM,IAAIE,QAAQ,CAACC,UAAYC,WAAWD,SAASV;IACrD;IAEA,OAAO;AACT"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TmuxManager } from "
|
|
1
|
+
import { TmuxManager } from "./TmuxManager.js";
|
|
2
2
|
import type { AgentRuntimeAvailability, InteractiveAgentRuntime, RuntimeFocusInput, RuntimeSendDeps, RuntimeSendInput, RuntimeStartInput, RuntimeStartResult, RuntimeStopInput } from "../types.js";
|
|
3
3
|
export declare class TmuxAgentRuntime implements InteractiveAgentRuntime {
|
|
4
4
|
readonly provider: "tmux";
|
|
@@ -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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { execFile } from "child_process";
|
|
2
|
-
import { promisify } from "util";
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
3
|
const execFileAsync = promisify(execFile);
|
|
4
4
|
export class TmuxManager {
|
|
5
5
|
async isAvailable() {
|
|
@@ -54,22 +54,7 @@ export class TmuxManager {
|
|
|
54
54
|
// Already gone — ignore
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
|
|
58
|
-
* Find the actual agent process PID inside a tmux pane.
|
|
59
|
-
*
|
|
60
|
-
* Strategy: BFS the process tree, return the deepest process whose
|
|
61
|
-
* `ps` command line is accepted by `matches`. The caller supplies the
|
|
62
|
-
* matcher so this method has no agent-type knowledge.
|
|
63
|
-
*
|
|
64
|
-
* This handles two real-world process shapes:
|
|
65
|
-
* - Wrapper case: shell → claude-wrapper (matches) → claude (matches, deeper)
|
|
66
|
-
* → returns the deeper one
|
|
67
|
-
* - Subprocess case: shell → claude (matches) → MCP server child (doesn't match)
|
|
68
|
-
* → returns claude, not the subprocess
|
|
69
|
-
*
|
|
70
|
-
* Returns null when no process matches yet (agent still starting); the
|
|
71
|
-
* caller's poll loop retries.
|
|
72
|
-
*/ async findAgentPid(session, matches) {
|
|
57
|
+
async findAgentPid(session, matches) {
|
|
73
58
|
const panePid = await this.getPanePid(session);
|
|
74
59
|
if (panePid === null) return null;
|
|
75
60
|
const visited = new Set();
|
|
@@ -82,11 +67,8 @@ export class TmuxManager {
|
|
|
82
67
|
if (visited.has(pid)) continue;
|
|
83
68
|
visited.add(pid);
|
|
84
69
|
const command = await this.getProcessCommand(pid);
|
|
85
|
-
if (command && matches(command))
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
const children = await this.pgrepChildren(pid);
|
|
89
|
-
queue.push(...children);
|
|
70
|
+
if (command && matches(command)) deepestMatch = pid;
|
|
71
|
+
queue.push(...await this.pgrepChildren(pid));
|
|
90
72
|
}
|
|
91
73
|
return deepestMatch;
|
|
92
74
|
}
|
|
@@ -99,8 +81,8 @@ export class TmuxManager {
|
|
|
99
81
|
"-F",
|
|
100
82
|
"#{pane_pid}"
|
|
101
83
|
]);
|
|
102
|
-
const panePid = parseInt(stdout.trim().split("\n")[0], 10);
|
|
103
|
-
return isNaN(panePid) ? null : panePid;
|
|
84
|
+
const panePid = Number.parseInt(stdout.trim().split("\n")[0], 10);
|
|
85
|
+
return Number.isNaN(panePid) ? null : panePid;
|
|
104
86
|
} catch {
|
|
105
87
|
return null;
|
|
106
88
|
}
|
|
@@ -111,7 +93,7 @@ export class TmuxManager {
|
|
|
111
93
|
"-P",
|
|
112
94
|
String(pid)
|
|
113
95
|
]);
|
|
114
|
-
return stdout.trim().split("\n").map((
|
|
96
|
+
return stdout.trim().split("\n").map((value)=>Number.parseInt(value, 10)).filter((value)=>!Number.isNaN(value));
|
|
115
97
|
} catch {
|
|
116
98
|
return [];
|
|
117
99
|
}
|
|
@@ -124,8 +106,7 @@ export class TmuxManager {
|
|
|
124
106
|
"-o",
|
|
125
107
|
"command="
|
|
126
108
|
]);
|
|
127
|
-
|
|
128
|
-
return trimmed || null;
|
|
109
|
+
return stdout.trim() || null;
|
|
129
110
|
} catch {
|
|
130
111
|
return null;
|
|
131
112
|
}
|
|
@@ -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"}
|