aibroker 0.7.11 → 0.7.12
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 +18 -7
- package/dist/adapters/iterm/core.d.ts.map +1 -1
- package/dist/adapters/iterm/core.js +24 -13
- package/dist/adapters/iterm/core.js.map +1 -1
- package/dist/adapters/iterm/sessions.js +4 -4
- 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 +70 -15
- package/dist/adapters/pailot/gateway.js.map +1 -1
- package/dist/adapters/pailot/mqtt-broker.d.ts +5 -0
- package/dist/adapters/pailot/mqtt-broker.d.ts.map +1 -1
- package/dist/adapters/pailot/mqtt-broker.js +60 -6
- package/dist/adapters/pailot/mqtt-broker.js.map +1 -1
- package/dist/adapters/session/backend.js +1 -1
- package/dist/adapters/session/backend.js.map +1 -1
- package/dist/apns/client.d.ts +9 -0
- package/dist/apns/client.d.ts.map +1 -1
- package/dist/apns/client.js +25 -0
- package/dist/apns/client.js.map +1 -1
- package/dist/core/persistence.d.ts +7 -0
- package/dist/core/persistence.d.ts.map +1 -1
- package/dist/core/persistence.js +11 -0
- package/dist/core/persistence.js.map +1 -1
- package/dist/daemon/cli.d.ts +6 -0
- package/dist/daemon/cli.d.ts.map +1 -1
- package/dist/daemon/cli.js +13 -1
- package/dist/daemon/cli.js.map +1 -1
- package/dist/daemon/commands.d.ts.map +1 -1
- package/dist/daemon/commands.js +2 -1
- package/dist/daemon/commands.js.map +1 -1
- package/dist/daemon/core-handlers.d.ts.map +1 -1
- package/dist/daemon/core-handlers.js +79 -8
- package/dist/daemon/core-handlers.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +16 -2
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/ota.d.ts +8 -0
- package/dist/daemon/ota.d.ts.map +1 -0
- package/dist/daemon/ota.js +90 -0
- package/dist/daemon/ota.js.map +1 -0
- package/dist/daemon/session-content.d.ts.map +1 -1
- package/dist/daemon/session-content.js +2 -1
- package/dist/daemon/session-content.js.map +1 -1
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +4 -0
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/server.d.ts.map +1 -1
- package/dist/ipc/server.js +9 -0
- package/dist/ipc/server.js.map +1 -1
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.js +62 -6
- package/dist/mcp/index.js.map +1 -1
- package/dist/transport/index.d.ts +18 -0
- package/dist/transport/index.d.ts.map +1 -0
- package/dist/transport/index.js +51 -0
- package/dist/transport/index.js.map +1 -0
- package/dist/transport/iterm.d.ts +21 -0
- package/dist/transport/iterm.d.ts.map +1 -0
- package/dist/transport/iterm.js +55 -0
- package/dist/transport/iterm.js.map +1 -0
- package/dist/transport/session-transport.d.ts +64 -0
- package/dist/transport/session-transport.d.ts.map +1 -0
- package/dist/transport/session-transport.js +17 -0
- package/dist/transport/session-transport.js.map +1 -0
- package/dist/transport/sync-facade.d.ts +52 -0
- package/dist/transport/sync-facade.d.ts.map +1 -0
- package/dist/transport/sync-facade.js +135 -0
- package/dist/transport/sync-facade.js.map +1 -0
- package/dist/transport/tmux.d.ts +53 -0
- package/dist/transport/tmux.d.ts.map +1 -0
- package/dist/transport/tmux.js +254 -0
- package/dist/transport/tmux.js.map +1 -0
- package/dist/types/ipc.d.ts +8 -0
- package/dist/types/ipc.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -25,19 +25,30 @@ export interface SessionSnapshot {
|
|
|
25
25
|
tty: string;
|
|
26
26
|
atPrompt: boolean;
|
|
27
27
|
paiName: string | null;
|
|
28
|
+
/**
|
|
29
|
+
* Durable, transport-stable id. For tmux this is the pane's @aibroker_id
|
|
30
|
+
* (survives server restarts, unlike the volatile %N pane id). For iTerm it is
|
|
31
|
+
* undefined — the GUID in `id` is already stable. Persistent-name lookups key
|
|
32
|
+
* on this when present so a tmux session keeps its name across %N churn.
|
|
33
|
+
*/
|
|
34
|
+
aibrokerId?: string | null;
|
|
28
35
|
}
|
|
29
36
|
/**
|
|
30
37
|
* snapshotAllSessions — Fast enumeration of all iTerm2 sessions.
|
|
31
38
|
*
|
|
32
|
-
* Single AppleScript pass: id, name,
|
|
33
|
-
* ~1.5s for
|
|
39
|
+
* Single AppleScript pass: id, name, tty, tab.title per session.
|
|
40
|
+
* ~1.5s for 16 sessions (vs >30s timeout with the old combined script).
|
|
34
41
|
*
|
|
35
|
-
* What
|
|
42
|
+
* What is still dropped vs the original (kept out for speed):
|
|
36
43
|
* - `is at shell prompt`: adds ~180ms/session (3.3s for 18). Derived from name instead.
|
|
37
|
-
* - `
|
|
38
|
-
*
|
|
39
|
-
* getAllPersistentSessionNames()
|
|
40
|
-
*
|
|
44
|
+
* - `profile name`: ~0.6s overhead, always "Default" in practice.
|
|
45
|
+
* - `variable named "user.paiName"`: paiName is read from ~/.aibroker/session-names.json
|
|
46
|
+
* by the caller via getAllPersistentSessionNames() — authoritative, no iTerm corruption.
|
|
47
|
+
*
|
|
48
|
+
* `tab.title` IS fetched (one variable read, measured ~1.5s total for 16 sessions). It was
|
|
49
|
+
* wrongly dropped in v0.7.10, which collapsed the display precedence `paiName ?? tabTitle ?? name`
|
|
50
|
+
* down to `paiName ?? name` — so any session without a persistent paiName rendered the raw
|
|
51
|
+
* iTerm process string ("claude (node)") instead of its tab title. Restoring it fixes that.
|
|
41
52
|
*
|
|
42
53
|
* atPrompt heuristic: iTerm2's title reporter encodes the foreground process in the
|
|
43
54
|
* tab name — "(node)" = Claude Code running (not at prompt). "(-zsh)", "(-bash)",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/adapters/iterm/core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,MAAM,GAAG,IAAI,CAQ/E;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAI3E;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAc,GAAG,MAAM,CActG;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAQpF;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQvF;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQxE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAe7E;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CA+BjD;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAcnE;AAED,wBAAgB,cAAc,IAAI,OAAO,CAMxC;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAO9D;AAED,wBAAgB,cAAc,IAAI,OAAO,CAWxC;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA8BjE;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../../src/adapters/iterm/core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,SAAQ,GAAG,MAAM,GAAG,IAAI,CAQ/E;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAI3E;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAc,GAAG,MAAM,CActG;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAQpF;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAQvF;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAQxE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAe7E;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CA+BjD;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAcnE;AAED,wBAAgB,cAAc,IAAI,OAAO,CAMxC;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAO9D;AAED,wBAAgB,cAAc,IAAI,OAAO,CAWxC;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA8BjE;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAkDvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAqBzC"}
|
|
@@ -160,23 +160,27 @@ export function writeToTty(ttyPath, text) {
|
|
|
160
160
|
/**
|
|
161
161
|
* snapshotAllSessions — Fast enumeration of all iTerm2 sessions.
|
|
162
162
|
*
|
|
163
|
-
* Single AppleScript pass: id, name,
|
|
164
|
-
* ~1.5s for
|
|
163
|
+
* Single AppleScript pass: id, name, tty, tab.title per session.
|
|
164
|
+
* ~1.5s for 16 sessions (vs >30s timeout with the old combined script).
|
|
165
165
|
*
|
|
166
|
-
* What
|
|
166
|
+
* What is still dropped vs the original (kept out for speed):
|
|
167
167
|
* - `is at shell prompt`: adds ~180ms/session (3.3s for 18). Derived from name instead.
|
|
168
|
-
* - `
|
|
169
|
-
*
|
|
170
|
-
* getAllPersistentSessionNames()
|
|
171
|
-
*
|
|
168
|
+
* - `profile name`: ~0.6s overhead, always "Default" in practice.
|
|
169
|
+
* - `variable named "user.paiName"`: paiName is read from ~/.aibroker/session-names.json
|
|
170
|
+
* by the caller via getAllPersistentSessionNames() — authoritative, no iTerm corruption.
|
|
171
|
+
*
|
|
172
|
+
* `tab.title` IS fetched (one variable read, measured ~1.5s total for 16 sessions). It was
|
|
173
|
+
* wrongly dropped in v0.7.10, which collapsed the display precedence `paiName ?? tabTitle ?? name`
|
|
174
|
+
* down to `paiName ?? name` — so any session without a persistent paiName rendered the raw
|
|
175
|
+
* iTerm process string ("claude (node)") instead of its tab title. Restoring it fixes that.
|
|
172
176
|
*
|
|
173
177
|
* atPrompt heuristic: iTerm2's title reporter encodes the foreground process in the
|
|
174
178
|
* tab name — "(node)" = Claude Code running (not at prompt). "(-zsh)", "(-bash)",
|
|
175
179
|
* "(ssh)", bare path names = shell at prompt. Accurate for sessions display.
|
|
176
180
|
*/
|
|
177
181
|
export function snapshotAllSessions() {
|
|
178
|
-
// Fetch id, name, tty. Skip `profile name` (~0.6s
|
|
179
|
-
// `is at shell prompt` (~3.3s
|
|
182
|
+
// Fetch id, name, tty, tab.title. Skip `profile name` (~0.6s) and
|
|
183
|
+
// `is at shell prompt` (~3.3s) — both derived or irrelevant.
|
|
180
184
|
const script = `
|
|
181
185
|
tell application "iTerm2"
|
|
182
186
|
set output to ""
|
|
@@ -186,20 +190,27 @@ tell application "iTerm2"
|
|
|
186
190
|
set sessionId to id of aSession
|
|
187
191
|
set sessionName to name of aSession
|
|
188
192
|
set sessionTty to tty of aSession
|
|
189
|
-
|
|
193
|
+
tell aSession
|
|
194
|
+
try
|
|
195
|
+
set tabTitle to (variable named "tab.title")
|
|
196
|
+
on error
|
|
197
|
+
set tabTitle to ""
|
|
198
|
+
end try
|
|
199
|
+
end tell
|
|
200
|
+
set output to output & sessionId & (ASCII character 9) & sessionName & (ASCII character 9) & sessionTty & (ASCII character 9) & tabTitle & linefeed
|
|
190
201
|
end repeat
|
|
191
202
|
end repeat
|
|
192
203
|
end repeat
|
|
193
204
|
return output
|
|
194
205
|
end tell`;
|
|
195
|
-
// 4s timeout. id+name+tty = ~
|
|
206
|
+
// 4s timeout. id+name+tty+tab.title = ~1.5s for 16 sessions. 4s gives safe headroom.
|
|
196
207
|
const result = runAppleScript(script, 4_000);
|
|
197
208
|
if (!result)
|
|
198
209
|
return [];
|
|
199
210
|
const sessions = [];
|
|
200
211
|
for (const line of result.split("\n").filter(Boolean)) {
|
|
201
212
|
const parts = line.split("\t");
|
|
202
|
-
if (parts.length <
|
|
213
|
+
if (parts.length < 4)
|
|
203
214
|
continue;
|
|
204
215
|
const name = parts[1];
|
|
205
216
|
// Derive atPrompt from name heuristic: "(node)" = Claude Code running (not at prompt).
|
|
@@ -211,7 +222,7 @@ end tell`;
|
|
|
211
222
|
profileName: "Default", // profile name skipped for speed; always "Default" in practice
|
|
212
223
|
tty: parts[2],
|
|
213
224
|
atPrompt,
|
|
214
|
-
tabTitle: null,
|
|
225
|
+
tabTitle: (parts[3] && parts[3] !== "missing value" && parts[3] !== "") ? parts[3] : null,
|
|
215
226
|
// paiName is null here — callers merge from getAllPersistentSessionNames()
|
|
216
227
|
paiName: null,
|
|
217
228
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/adapters/iterm/core.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/adapters/iterm/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import { execSync } from "node:child_process";
|
|
|
8
8
|
import { runAppleScript, typeIntoSession, sendKeystrokeToSession, stripItermPrefix, withSessionAppleScript, snapshotAllSessions, } from "./core.js";
|
|
9
9
|
import { log } from "../../core/log.js";
|
|
10
10
|
import { managedSessions, updateSessionTtyCache, } from "../../core/state.js";
|
|
11
|
-
import { getAllPersistentSessionNames } from "../../core/persistence.js";
|
|
11
|
+
import { getAllPersistentSessionNames, lookupPersistentName } from "../../core/persistence.js";
|
|
12
12
|
// ── Session Variable Helpers ──
|
|
13
13
|
function setItermSessionProperty(itermSessionId, body) {
|
|
14
14
|
try {
|
|
@@ -99,8 +99,8 @@ export function listClaudeSessions() {
|
|
|
99
99
|
const sessions = snapshotAllSessions();
|
|
100
100
|
const persistentNames = getAllPersistentSessionNames();
|
|
101
101
|
return sessions
|
|
102
|
-
.filter((s) => s.name.toLowerCase().includes("claude") || persistentNames
|
|
103
|
-
.map((s) => ({ id: s.id, name: persistentNames
|
|
102
|
+
.filter((s) => s.name.toLowerCase().includes("claude") || lookupPersistentName(persistentNames, s.id, s.aibrokerId))
|
|
103
|
+
.map((s) => ({ id: s.id, name: lookupPersistentName(persistentNames, s.id, s.aibrokerId) ?? s.name }));
|
|
104
104
|
}
|
|
105
105
|
/**
|
|
106
106
|
* Build a full session list with type classification and PAI name resolution.
|
|
@@ -118,7 +118,7 @@ export function getSessionList() {
|
|
|
118
118
|
managedSessions.delete(id);
|
|
119
119
|
}
|
|
120
120
|
return snapshots.map((s) => {
|
|
121
|
-
const paiName = persistentNames
|
|
121
|
+
const paiName = lookupPersistentName(persistentNames, s.id, s.aibrokerId);
|
|
122
122
|
return {
|
|
123
123
|
id: s.id,
|
|
124
124
|
name: paiName ?? s.name,
|
|
@@ -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,cAAc,EAId,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAEL,eAAe,EAIf,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAuB,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;
|
|
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;
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../src/adapters/pailot/gateway.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAoMH;;;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;AAolBD,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,CAiSzG;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;;GAEG;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,CAoM3F"}
|
|
@@ -29,15 +29,16 @@ import { execFile } from "node:child_process";
|
|
|
29
29
|
import { log } from "../../core/log.js";
|
|
30
30
|
import { WHISPER_BIN, WHISPER_MODEL } from "../kokoro/media.js";
|
|
31
31
|
import { setMessageSource, activeItermSessionId, setActiveItermSessionId, lastRoutedSessionId, setLastRoutedSessionId, getAibpBridge, } from "../../core/state.js";
|
|
32
|
-
import { setItermSessionVar, setItermTabName, setItermBadge,
|
|
32
|
+
import { setItermSessionVar, setItermTabName, setItermBadge, createClaudeSession } from "../iterm/sessions.js";
|
|
33
33
|
import { listPaiProjects, launchPaiProject } from "../../daemon/pai-projects.js";
|
|
34
|
-
import { runAppleScript, sendKeystrokeToSession, sendEscapeSequenceToSession
|
|
34
|
+
import { runAppleScript, sendKeystrokeToSession, sendEscapeSequenceToSession } from "../iterm/core.js";
|
|
35
|
+
import { pasteTextIntoSession, snapshotAllSessions, typeIntoSession } from "../../transport/sync-facade.js";
|
|
35
36
|
import { hybridManager } from "../../core/hybrid.js";
|
|
36
37
|
import { mqttPublishText, mqttPublishVoice, mqttPublishImage, mqttPublishTyping, mqttPublishScreenshot, mqttPublishSessions, mqttPublishTranscript, mqttPublishStatus as mqttPubStatus, mqttPublishControl, isMqttRunning, getMqttClientCount, } from "./mqtt-broker.js";
|
|
37
38
|
import { sendPush as apnsSendPush } from "../../apns/client.js";
|
|
38
39
|
import { getAfter as mqGetAfter, getLatestSeq as mqGetLatestSeq } from "./message-queue.js";
|
|
39
40
|
import { addTrace } from "../../daemon/trace-log.js";
|
|
40
|
-
import { getAllPersistentSessionNames } from "../../core/persistence.js";
|
|
41
|
+
import { getAllPersistentSessionNames, lookupPersistentName } from "../../core/persistence.js";
|
|
41
42
|
/**
|
|
42
43
|
* Enrich snapshots with paiName from the persistent JSON store.
|
|
43
44
|
* snapshotAllSessions() always returns paiName=null since v0.7.10;
|
|
@@ -47,7 +48,7 @@ function enrichedSnapshots() {
|
|
|
47
48
|
const snaps = snapshotAllSessions();
|
|
48
49
|
const persistentNames = getAllPersistentSessionNames();
|
|
49
50
|
for (const snap of snaps) {
|
|
50
|
-
snap.paiName = persistentNames
|
|
51
|
+
snap.paiName = lookupPersistentName(persistentNames, snap.id, snap.aibrokerId);
|
|
51
52
|
}
|
|
52
53
|
return snaps;
|
|
53
54
|
}
|
|
@@ -453,28 +454,54 @@ function handleRemoveCommand(ws, args) {
|
|
|
453
454
|
return;
|
|
454
455
|
}
|
|
455
456
|
const target = sessions[idx];
|
|
456
|
-
//
|
|
457
|
-
|
|
458
|
-
|
|
457
|
+
// Clean exit: send "/exit" to the Claude session so it terminates at the
|
|
458
|
+
// source (works for iTerm and tmux — typeIntoSession routes by id). Once CC
|
|
459
|
+
// exits, the tab/pane is back at a shell and enumeration no longer reports a
|
|
460
|
+
// Claude session, so it drops on its own — no record to "delete" and have
|
|
461
|
+
// rediscovered. If the tab was already closed this is a harmless no-op and the
|
|
462
|
+
// prune in handleSessionsCommand removes the ghost.
|
|
463
|
+
if (target.backendSessionId) {
|
|
464
|
+
typeIntoSession(target.backendSessionId, "/exit");
|
|
459
465
|
}
|
|
460
466
|
const removed = hybridManager.removeByIndex(idx + 1);
|
|
461
467
|
if (removed) {
|
|
462
|
-
log(`[PAILot]
|
|
468
|
+
log(`[PAILot] exited ${removed.kind} session "${removed.name}" (${removed.id}) via /exit`);
|
|
463
469
|
}
|
|
464
470
|
// Send updated session list
|
|
465
471
|
handleSessionsCommand(ws);
|
|
466
472
|
}
|
|
473
|
+
/**
|
|
474
|
+
* Guard against the "new" button spawning a burst of tabs. A retained/replayed
|
|
475
|
+
* MQTT command or an app retry can deliver several creates at once; ignore any
|
|
476
|
+
* create within 3s of the last so exactly one session is started.
|
|
477
|
+
*/
|
|
478
|
+
let lastCreateAt = 0;
|
|
479
|
+
function createThrottled() {
|
|
480
|
+
const now = Date.now();
|
|
481
|
+
if (now - lastCreateAt < 3000) {
|
|
482
|
+
log("[PAILot] create throttled — duplicate within 3s ignored");
|
|
483
|
+
return true;
|
|
484
|
+
}
|
|
485
|
+
lastCreateAt = now;
|
|
486
|
+
return false;
|
|
487
|
+
}
|
|
467
488
|
function handleCreateCommand(ws, args = {}) {
|
|
468
489
|
const projectName = args.project;
|
|
469
490
|
const path = args.path;
|
|
491
|
+
const requestedName = typeof args.name === "string" ? args.name.trim() : "";
|
|
470
492
|
// PAI project launch — async path
|
|
471
493
|
if (projectName) {
|
|
472
494
|
handleCreateFromProject(ws, projectName);
|
|
473
495
|
return;
|
|
474
496
|
}
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
497
|
+
if (createThrottled()) {
|
|
498
|
+
handleSessionsCommand(ws);
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
// Launch via clc (the user's launcher: pins model + skip-perms so PAILot can
|
|
502
|
+
// drive the session without a permission prompt). cd into path first if given.
|
|
503
|
+
const command = path ? `cd ${path.replace(/"/g, '\\"')} && clc` : "clc";
|
|
504
|
+
const name = requestedName || (path ? path.split("/").filter(Boolean).pop() ?? "Claude" : "Claude");
|
|
478
505
|
const sessionId = createClaudeSession(command);
|
|
479
506
|
if (!sessionId) {
|
|
480
507
|
sendTo(ws, { type: "error", message: "Failed to create new session" });
|
|
@@ -856,6 +883,8 @@ end tell`)?.trim() ?? "";
|
|
|
856
883
|
log(`PAILot client connected from ${addr}`);
|
|
857
884
|
clients.add(ws);
|
|
858
885
|
clientLastActive.set(ws, Date.now());
|
|
886
|
+
// App is online → user is reading. Clear the home-screen badge.
|
|
887
|
+
import("../../apns/client.js").then(m => m.sendBadgeClear()).catch(() => { });
|
|
859
888
|
ws.on("pong", () => {
|
|
860
889
|
clientLastActive.set(ws, Date.now());
|
|
861
890
|
});
|
|
@@ -892,6 +921,10 @@ end tell`)?.trim() ?? "";
|
|
|
892
921
|
case "rename":
|
|
893
922
|
handleRenameCommand(ws, args);
|
|
894
923
|
return;
|
|
924
|
+
case "refresh":
|
|
925
|
+
// Force a fresh enumeration + prune + re-push (closed tabs drop here).
|
|
926
|
+
handleSessionsCommand(ws);
|
|
927
|
+
return;
|
|
895
928
|
case "remove":
|
|
896
929
|
handleRemoveCommand(ws, args);
|
|
897
930
|
return;
|
|
@@ -928,6 +961,20 @@ end tell`)?.trim() ?? "";
|
|
|
928
961
|
// This is the iTerm session ID the user was viewing when they typed/spoke.
|
|
929
962
|
// We use it for routing instead of guessing from activeItermSessionId.
|
|
930
963
|
const pailotSessionId = typeof msg.sessionId === "string" ? msg.sessionId : undefined;
|
|
964
|
+
// Validate against the live session list. A stale id (e.g. a Claude Code
|
|
965
|
+
// session was restarted and got a new id) would otherwise silently fall
|
|
966
|
+
// back to the active session and the message would land in the wrong tab.
|
|
967
|
+
// Refuse to route, push a fresh session list, and tell the user.
|
|
968
|
+
if (pailotSessionId && hybridManager) {
|
|
969
|
+
const known = hybridManager.listSessions().some(s => s.backendSessionId === pailotSessionId);
|
|
970
|
+
if (!known) {
|
|
971
|
+
log(`[PAILot] Rejecting message — sessionId=${pailotSessionId.slice(0, 8)} is stale (no matching session). Refreshing client list.`);
|
|
972
|
+
mqttPublishControl({ type: "session_not_found", sessionId: pailotSessionId });
|
|
973
|
+
handleMqttCommand("sessions");
|
|
974
|
+
mqttPublishText(pailotSessionId, "⚠️ That session no longer exists on the host. Pick a session from the refreshed list and resend.");
|
|
975
|
+
return;
|
|
976
|
+
}
|
|
977
|
+
}
|
|
931
978
|
// Helper: resolve the routing target for this message.
|
|
932
979
|
// Prefers the explicit PAILot session ID; falls back to active session.
|
|
933
980
|
const routeTarget = pailotSessionId || activeItermSessionId;
|
|
@@ -1271,6 +1318,7 @@ export function handleMqttCommand(command, args = {}) {
|
|
|
1271
1318
|
return;
|
|
1272
1319
|
}
|
|
1273
1320
|
switch (command) {
|
|
1321
|
+
case "refresh":
|
|
1274
1322
|
case "sessions": {
|
|
1275
1323
|
// Prune dead sessions and publish current list via MQTT
|
|
1276
1324
|
const liveSnapshots = enrichedSnapshots();
|
|
@@ -1391,8 +1439,10 @@ export function handleMqttCommand(command, args = {}) {
|
|
|
1391
1439
|
const idx = sessions.findIndex(s => s.backendSessionId === sessionId);
|
|
1392
1440
|
if (idx >= 0) {
|
|
1393
1441
|
const target = sessions[idx];
|
|
1394
|
-
|
|
1395
|
-
|
|
1442
|
+
// Clean exit via "/exit" (routes to iTerm or tmux); enumeration then
|
|
1443
|
+
// drops it. Already-closed tab → harmless no-op + prune.
|
|
1444
|
+
if (target.backendSessionId) {
|
|
1445
|
+
typeIntoSession(target.backendSessionId, "/exit");
|
|
1396
1446
|
}
|
|
1397
1447
|
hybridManager.removeByIndex(idx + 1);
|
|
1398
1448
|
}
|
|
@@ -1401,9 +1451,14 @@ export function handleMqttCommand(command, args = {}) {
|
|
|
1401
1451
|
break;
|
|
1402
1452
|
}
|
|
1403
1453
|
case "create": {
|
|
1454
|
+
if (createThrottled()) {
|
|
1455
|
+
handleMqttCommand("sessions");
|
|
1456
|
+
break;
|
|
1457
|
+
}
|
|
1404
1458
|
const path = args.path;
|
|
1405
|
-
const
|
|
1406
|
-
const
|
|
1459
|
+
const requestedName = typeof args.name === "string" ? args.name.trim() : "";
|
|
1460
|
+
const command = path ? `cd ${path.replace(/"/g, '\\"')} && clc` : "clc";
|
|
1461
|
+
const name = requestedName || (path ? path.split("/").filter(Boolean).pop() ?? "Claude" : "Claude");
|
|
1407
1462
|
const sessionId = createClaudeSession(command);
|
|
1408
1463
|
if (!sessionId) {
|
|
1409
1464
|
log("[MQTT] create: failed to create session");
|