aibroker 0.61.2 → 0.61.3
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/adapters/iterm/core.d.ts +34 -4
- package/dist/adapters/iterm/core.d.ts.map +1 -1
- package/dist/adapters/iterm/core.js +139 -104
- package/dist/adapters/iterm/core.js.map +1 -1
- package/dist/adapters/iterm/iterm2-api.d.ts.map +1 -1
- package/dist/adapters/iterm/iterm2-api.js +4 -2
- package/dist/adapters/iterm/iterm2-api.js.map +1 -1
- package/dist/adapters/iterm/sessions.d.ts.map +1 -1
- package/dist/adapters/iterm/sessions.js +47 -114
- package/dist/adapters/iterm/sessions.js.map +1 -1
- package/dist/adapters/pailot/gateway.d.ts.map +1 -1
- package/dist/adapters/pailot/gateway.js +6 -52
- package/dist/adapters/pailot/gateway.js.map +1 -1
- package/dist/daemon/commands.d.ts.map +1 -1
- package/dist/daemon/commands.js +4 -29
- package/dist/daemon/commands.js.map +1 -1
- package/dist/daemon/core-handlers.js +1 -1
- package/dist/daemon/core-handlers.js.map +1 -1
- package/dist/daemon/manage.d.ts +0 -18
- package/dist/daemon/manage.d.ts.map +1 -1
- package/dist/daemon/manage.js +8 -38
- package/dist/daemon/manage.js.map +1 -1
- package/dist/daemon/screenshot.d.ts.map +1 -1
- package/dist/daemon/screenshot.js +6 -42
- package/dist/daemon/screenshot.js.map +1 -1
- package/dist/daemon/session-content.d.ts +1 -1
- package/dist/daemon/session-content.d.ts.map +1 -1
- package/dist/daemon/session-content.js +10 -25
- package/dist/daemon/session-content.js.map +1 -1
- package/dist/daemon/sessions.d.ts.map +1 -1
- package/dist/daemon/sessions.js +7 -13
- package/dist/daemon/sessions.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.js +7 -13
- package/dist/mcp/index.js.map +1 -1
- package/dist/transport/iterm.d.ts.map +1 -1
- package/dist/transport/iterm.js +12 -20
- package/dist/transport/iterm.js.map +1 -1
- package/hooks/manage-hook.mjs +4 -1
- package/package.json +1 -1
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Does NOT import any transport send functions — callers handle message delivery.
|
|
6
6
|
*/
|
|
7
7
|
import { execSync } from "node:child_process";
|
|
8
|
-
import {
|
|
8
|
+
import { runItermJxa, _internal, typeIntoSession, sendKeystrokeToSession, stripItermPrefix, withSessionJxa, snapshotAllSessions, } from "./core.js";
|
|
9
9
|
import { setSessionTitle, itermViewerSessionId, snapshotAllSessions as snapshotAllTransports, } from "../../transport/sync-facade.js";
|
|
10
10
|
import { itermInPlay } from "../../transport/policy.js";
|
|
11
11
|
import { normaliseLabel } from "../../core/session-match.js";
|
|
@@ -16,20 +16,11 @@ import { getAllPersistentSessionNames, lookupPersistentName } from "../../core/p
|
|
|
16
16
|
function setItermSessionProperty(itermSessionId, body) {
|
|
17
17
|
if (!itermInPlay())
|
|
18
18
|
return;
|
|
19
|
-
|
|
20
|
-
const script = withSessionAppleScript(itermSessionId, ` tell aSession\n ${body}\n end tell\n return`, "");
|
|
21
|
-
execSync(`osascript <<'APPLESCRIPT'\n${script}\nAPPLESCRIPT`, {
|
|
22
|
-
timeout: 5000,
|
|
23
|
-
shell: "/bin/bash",
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
// silently ignore
|
|
28
|
-
}
|
|
19
|
+
runItermJxa(withSessionJxa(itermSessionId, ` ${body}\n return "ok";`), 5_000);
|
|
29
20
|
}
|
|
30
21
|
export function setItermSessionVar(itermSessionId, name) {
|
|
31
|
-
const
|
|
32
|
-
setItermSessionProperty(itermSessionId, `
|
|
22
|
+
const value = JSON.stringify(name.replace(/[\n\r]/g, " "));
|
|
23
|
+
setItermSessionProperty(itermSessionId, `aSession.setVariable({ named: "user.paiName", to: ${value} });`);
|
|
33
24
|
}
|
|
34
25
|
export function setItermTabName(itermSessionId, name) {
|
|
35
26
|
if (!itermInPlay())
|
|
@@ -44,13 +35,7 @@ export function setItermBadge(itermSessionId, text) {
|
|
|
44
35
|
// Write badge escape sequence to the session's tty device.
|
|
45
36
|
// Must go to terminal output stream (not stdin via "write text").
|
|
46
37
|
try {
|
|
47
|
-
const tty =
|
|
48
|
-
repeat with t in tabs of w
|
|
49
|
-
repeat with s in sessions of t
|
|
50
|
-
if (unique ID of s) is "${itermSessionId}" then return tty of s
|
|
51
|
-
end repeat
|
|
52
|
-
end repeat
|
|
53
|
-
end repeat'`, { timeout: 5000, encoding: "utf8", shell: "/bin/bash" }).trim();
|
|
38
|
+
const tty = (runItermJxa(withSessionJxa(itermSessionId, ` return aSession.tty();`), 5_000) ?? "").trim();
|
|
54
39
|
if (!tty || !tty.startsWith("/dev/ttys"))
|
|
55
40
|
return;
|
|
56
41
|
const b64 = Buffer.from(text).toString("base64");
|
|
@@ -74,22 +59,7 @@ export function revealItermSession(itermSessionId) {
|
|
|
74
59
|
if (!itermInPlay())
|
|
75
60
|
return false;
|
|
76
61
|
try {
|
|
77
|
-
const result =
|
|
78
|
-
repeat with w in windows
|
|
79
|
-
repeat with t in tabs of w
|
|
80
|
-
repeat with s in sessions of t
|
|
81
|
-
if (unique ID of s) is "${itermSessionId.replace(/"/g, "")}" then
|
|
82
|
-
select w
|
|
83
|
-
select t
|
|
84
|
-
select s
|
|
85
|
-
activate
|
|
86
|
-
return "ok"
|
|
87
|
-
end if
|
|
88
|
-
end repeat
|
|
89
|
-
end repeat
|
|
90
|
-
end repeat
|
|
91
|
-
return "no"
|
|
92
|
-
end tell'`, { timeout: 5000, encoding: "utf8", shell: "/bin/bash" }).trim();
|
|
62
|
+
const result = runItermJxa(withSessionJxa(itermSessionId, ` aWindow.select(); aTab.select(); aSession.select(); app.activate();\n return "ok";`, '"no"'), 5_000);
|
|
93
63
|
return result === "ok";
|
|
94
64
|
}
|
|
95
65
|
catch {
|
|
@@ -99,18 +69,8 @@ export function revealItermSession(itermSessionId) {
|
|
|
99
69
|
export function getItermSessionVar(itermSessionId) {
|
|
100
70
|
if (!itermInPlay())
|
|
101
71
|
return null;
|
|
102
|
-
try {
|
|
103
|
-
|
|
104
|
-
const result = execSync(`osascript <<'APPLESCRIPT'\n${script}\nAPPLESCRIPT`, {
|
|
105
|
-
timeout: 5000,
|
|
106
|
-
encoding: "utf8",
|
|
107
|
-
shell: "/bin/bash",
|
|
108
|
-
}).trim();
|
|
109
|
-
return (result && result !== "missing value") ? result : null;
|
|
110
|
-
}
|
|
111
|
-
catch {
|
|
112
|
-
return null;
|
|
113
|
-
}
|
|
72
|
+
const result = runItermJxa(withSessionJxa(itermSessionId, ` try { return aSession.variable({ named: "user.paiName" }) || ""; } catch (e) { return ""; }`), 5_000);
|
|
73
|
+
return (result && result !== "missing value") ? result : null;
|
|
114
74
|
}
|
|
115
75
|
// ── Name Authority ──
|
|
116
76
|
// A user-chosen name outranks every generated one. Claude Code's auto-titler
|
|
@@ -180,25 +140,16 @@ export function findItermSessionForTermId(termSessionId, itermSessionIdHint) {
|
|
|
180
140
|
if (itermSessionIdHint) {
|
|
181
141
|
return stripItermPrefix(itermSessionIdHint) ?? itermSessionIdHint;
|
|
182
142
|
}
|
|
183
|
-
const script = `
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
if envVal is "${termSessionId.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}" then
|
|
194
|
-
return id of aSession
|
|
195
|
-
end if
|
|
196
|
-
end repeat
|
|
197
|
-
end repeat
|
|
198
|
-
end repeat
|
|
199
|
-
return ""
|
|
200
|
-
end tell`;
|
|
201
|
-
const result = runAppleScript(script);
|
|
143
|
+
const script = ` var wanted = ${JSON.stringify(termSessionId)};
|
|
144
|
+
var found = "";
|
|
145
|
+
app.windows().forEach(function (w) { w.tabs().forEach(function (t) { t.sessions().forEach(function (s) {
|
|
146
|
+
if (found) return;
|
|
147
|
+
var v = "";
|
|
148
|
+
try { v = s.variable({ named: "TERM_SESSION_ID" }); } catch (e) {}
|
|
149
|
+
if (v === wanted) found = s.id();
|
|
150
|
+
}); }); });
|
|
151
|
+
return found;`;
|
|
152
|
+
const result = runItermJxa(script);
|
|
202
153
|
return (result && result.length > 0) ? result : null;
|
|
203
154
|
}
|
|
204
155
|
// ── Session Listing ──
|
|
@@ -284,51 +235,34 @@ function openSessionScript(command) {
|
|
|
284
235
|
// A session that is genuinely occupied (Claude or anything else) never
|
|
285
236
|
// settles to shell-prompt no matter how long this waits, which is exactly
|
|
286
237
|
// what keeps the guard meaningful after the delay.
|
|
238
|
+
// JXA: `app` is bound to the real iTerm process by runItermJxa.
|
|
239
|
+
const cmd = JSON.stringify(command);
|
|
287
240
|
const write = command
|
|
288
|
-
? `
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
write text "${command.replace(/"/g, '\\"')}"`
|
|
241
|
+
? `ObjC.import("Foundation");
|
|
242
|
+
$.NSThread.sleepForTimeInterval(1.5);
|
|
243
|
+
if (!session.isAtShellPrompt()) return "busy:" + session.id();
|
|
244
|
+
session.write({ text: ${cmd} });`
|
|
293
245
|
: "";
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
set newTab to missing value
|
|
315
|
-
try
|
|
316
|
-
tell targetWindow
|
|
317
|
-
set newTab to (create tab with default profile)
|
|
318
|
-
end tell
|
|
319
|
-
end try
|
|
320
|
-
if newTab is missing value then
|
|
321
|
-
${viaNewWindow}
|
|
322
|
-
else
|
|
323
|
-
tell newTab
|
|
324
|
-
tell current session
|
|
325
|
-
${write}
|
|
326
|
-
return id
|
|
327
|
-
end tell
|
|
328
|
-
end tell
|
|
329
|
-
end if
|
|
330
|
-
end if
|
|
331
|
-
end tell`;
|
|
246
|
+
return ` var session = null;
|
|
247
|
+
var targetWindow = null;
|
|
248
|
+
try { targetWindow = app.currentWindow(); targetWindow.id(); } catch (e) { targetWindow = null; }
|
|
249
|
+
if (!targetWindow) {
|
|
250
|
+
var all = app.windows();
|
|
251
|
+
if (all.length > 0) targetWindow = all[0];
|
|
252
|
+
}
|
|
253
|
+
var newTab = null;
|
|
254
|
+
if (targetWindow) {
|
|
255
|
+
try { newTab = targetWindow.createTabWithDefaultProfile(); } catch (e) { newTab = null; }
|
|
256
|
+
}
|
|
257
|
+
if (newTab) {
|
|
258
|
+
session = newTab.currentSession();
|
|
259
|
+
} else {
|
|
260
|
+
var created = app.createWindowWithDefaultProfile();
|
|
261
|
+
if (!created) throw new Error("iTerm2 would not create a window");
|
|
262
|
+
session = created.currentSession();
|
|
263
|
+
}
|
|
264
|
+
${write}
|
|
265
|
+
return session.id();`;
|
|
332
266
|
}
|
|
333
267
|
/** A launch write refused because the target turned out not to be a fresh shell. */
|
|
334
268
|
function rejectIfBusy(result, label) {
|
|
@@ -341,7 +275,7 @@ function rejectIfBusy(result, label) {
|
|
|
341
275
|
}
|
|
342
276
|
export function createClaudeSession(command = "claude") {
|
|
343
277
|
try {
|
|
344
|
-
return rejectIfBusy(_internal.
|
|
278
|
+
return rejectIfBusy(_internal.runItermJxa(openSessionScript(command)) ?? null, "createClaudeSession");
|
|
345
279
|
}
|
|
346
280
|
catch (err) {
|
|
347
281
|
log("Failed to create session:", String(err));
|
|
@@ -350,7 +284,7 @@ export function createClaudeSession(command = "claude") {
|
|
|
350
284
|
}
|
|
351
285
|
export function createTerminalTab(command) {
|
|
352
286
|
try {
|
|
353
|
-
return rejectIfBusy(_internal.
|
|
287
|
+
return rejectIfBusy(_internal.runItermJxa(openSessionScript(command ?? "")) ?? null, "createTerminalTab");
|
|
354
288
|
}
|
|
355
289
|
catch (err) {
|
|
356
290
|
log("Failed to create terminal tab:", String(err));
|
|
@@ -367,7 +301,6 @@ export async function restartSession(itermSessionId, command = "claude") {
|
|
|
367
301
|
typeIntoSession(itermSessionId, command);
|
|
368
302
|
}
|
|
369
303
|
export function killSession(itermSessionId) {
|
|
370
|
-
|
|
371
|
-
runAppleScript(script);
|
|
304
|
+
runItermJxa(withSessionJxa(itermSessionId, ` aSession.close();\n return "ok";`));
|
|
372
305
|
}
|
|
373
306
|
//# sourceMappingURL=sessions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/adapters/iterm/sessions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../../src/adapters/iterm/sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../src/adapters/pailot/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiLH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GAAG;IACjF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAkDA;AAqDD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAEzH;
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../src/adapters/pailot/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiLH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GAAG;IACjF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CAkDA;AAqDD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAEzH;AAslBD,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE5D;AAiCD,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACpE,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAkEf;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CA2RzG;AAuBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAiDtF;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,OAAO,EAChB,SAAS,CAAC,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACvE,OAAO,CAAC,IAAI,CAAC,CAwEf;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAkBnI;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAOpD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAOpC;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAAG,IAAI,CAmT3F"}
|
|
@@ -33,7 +33,7 @@ import { resolveWhisperBin, resolveFfmpegBin } from "../../core/bins.js";
|
|
|
33
33
|
import { setMessageSource, activeItermSessionId, setActiveItermSessionId, lastRoutedSessionId, setLastRoutedSessionId, getAibpBridge, } from "../../core/state.js";
|
|
34
34
|
import { setItermSessionVar, setItermTabName, setItermBadge, autoTabName, createClaudeSession, killSession } from "../iterm/sessions.js";
|
|
35
35
|
import { listPaiProjects, launchPaiProject } from "../../daemon/pai-projects.js";
|
|
36
|
-
import {
|
|
36
|
+
import { runItermJxa, withSessionJxa, sendKeystrokeToSession, sendEscapeSequenceToSession, invalidateSnapshotCache } from "../iterm/core.js";
|
|
37
37
|
import { pasteTextIntoSession, snapshotAllSessions, typeIntoSession } from "../../transport/sync-facade.js";
|
|
38
38
|
import { hybridManager } from "../../core/hybrid.js";
|
|
39
39
|
import { mqttPublishText, mqttPublishVoice, mqttPublishImage, mqttPublishTyping, mqttPublishScreenshot, mqttPublishSessions, mqttPublishTranscript, mqttPublishStatus as mqttPubStatus, mqttPublishControl, isMqttRunning, getMqttClientCount, getMqttAppClientCount, } from "./mqtt-broker.js";
|
|
@@ -332,13 +332,7 @@ function handleSyncCommand(ws, args) {
|
|
|
332
332
|
log(`[PAILot] sync: client session ${clientActiveId.slice(0, 8)}... not found in live iTerm — falling back to focused session`);
|
|
333
333
|
}
|
|
334
334
|
// No client preference (or client's session is gone) — ask iTerm2 which session is focused
|
|
335
|
-
const focusedId =
|
|
336
|
-
try
|
|
337
|
-
return id of current session of current tab of current window
|
|
338
|
-
on error
|
|
339
|
-
return ""
|
|
340
|
-
end try
|
|
341
|
-
end tell`)?.trim() ?? "";
|
|
335
|
+
const focusedId = runItermJxa(` try { return app.currentWindow().currentTab().currentSession().id(); } catch (e) { return ""; }`)?.trim() ?? "";
|
|
342
336
|
if (focusedId) {
|
|
343
337
|
// Find this session in the hybrid manager and activate it.
|
|
344
338
|
// If it wasn't registered by the Claude-related filter, register it now since the
|
|
@@ -462,19 +456,7 @@ function handleSwitchCommand(ws, args) {
|
|
|
462
456
|
// For visual sessions, also focus the iTerm2 tab
|
|
463
457
|
if (session.kind === "visual") {
|
|
464
458
|
setActiveItermSessionId(session.backendSessionId);
|
|
465
|
-
|
|
466
|
-
runAppleScript(`tell application "iTerm2"
|
|
467
|
-
repeat with aWindow in windows
|
|
468
|
-
repeat with aTab in tabs of aWindow
|
|
469
|
-
repeat with aSession in sessions of aTab
|
|
470
|
-
if id of aSession is "${escapedId}" then
|
|
471
|
-
select aSession
|
|
472
|
-
return "focused"
|
|
473
|
-
end if
|
|
474
|
-
end repeat
|
|
475
|
-
end repeat
|
|
476
|
-
end repeat
|
|
477
|
-
end tell`);
|
|
459
|
+
runItermJxa(withSessionJxa(session.backendSessionId, ` aSession.select();\n return "focused";`));
|
|
478
460
|
}
|
|
479
461
|
if (newName) {
|
|
480
462
|
// Explicit rename: persist, or the daemon's chosen-name re-assert would
|
|
@@ -733,32 +715,10 @@ async function handleNavCommand(ws, args) {
|
|
|
733
715
|
Escape: () => sendKeystrokeToSession(targetSession, 27),
|
|
734
716
|
"ctrl-c": () => {
|
|
735
717
|
// Send Ctrl+C (ETX, ASCII 3)
|
|
736
|
-
|
|
737
|
-
repeat with w in windows
|
|
738
|
-
repeat with t in tabs of w
|
|
739
|
-
repeat with s in sessions of t
|
|
740
|
-
if id of s is "${targetSession}" then
|
|
741
|
-
tell s to write text (ASCII character 3)
|
|
742
|
-
return
|
|
743
|
-
end if
|
|
744
|
-
end repeat
|
|
745
|
-
end repeat
|
|
746
|
-
end repeat
|
|
747
|
-
end tell`);
|
|
718
|
+
runItermJxa(withSessionJxa(targetSession, ` aSession.write({ text: String.fromCharCode(3), newline: false });\n return "ok";`));
|
|
748
719
|
},
|
|
749
720
|
"ctrl+c": () => {
|
|
750
|
-
|
|
751
|
-
repeat with w in windows
|
|
752
|
-
repeat with t in tabs of w
|
|
753
|
-
repeat with s in sessions of t
|
|
754
|
-
if id of s is "${targetSession}" then
|
|
755
|
-
tell s to write text (ASCII character 3)
|
|
756
|
-
return
|
|
757
|
-
end if
|
|
758
|
-
end repeat
|
|
759
|
-
end repeat
|
|
760
|
-
end repeat
|
|
761
|
-
end tell`);
|
|
721
|
+
runItermJxa(withSessionJxa(targetSession, ` aSession.write({ text: String.fromCharCode(3), newline: false });\n return "ok";`));
|
|
762
722
|
},
|
|
763
723
|
};
|
|
764
724
|
const action = keyMap[key];
|
|
@@ -990,13 +950,7 @@ export function startWsGateway(onMessage) {
|
|
|
990
950
|
}
|
|
991
951
|
}
|
|
992
952
|
// Also set the active session based on current iTerm focus
|
|
993
|
-
const focusedId =
|
|
994
|
-
try
|
|
995
|
-
return id of current session of current tab of current window
|
|
996
|
-
on error
|
|
997
|
-
return ""
|
|
998
|
-
end try
|
|
999
|
-
end tell`)?.trim() ?? "";
|
|
953
|
+
const focusedId = runItermJxa(` try { return app.currentWindow().currentTab().currentSession().id(); } catch (e) { return ""; }`)?.trim() ?? "";
|
|
1000
954
|
if (focusedId) {
|
|
1001
955
|
const sessions = hybridManager.listSessions();
|
|
1002
956
|
const idx = sessions.findIndex(s => s.backendSessionId === focusedId);
|