@oratis/lisa 0.11.1 → 0.12.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/web/push.js CHANGED
@@ -7,8 +7,11 @@
7
7
  * Transport is pluggable:
8
8
  * - `ntfy` works today with zero Apple infra — a plain HTTP POST to a topic on
9
9
  * ntfy.sh (or your self-hosted server); the topic name is the shared secret.
10
- * - `apns` is the iOS-native path and needs an Apple push key, so it's a
11
- * documented stub here (logs "would notify").
10
+ * - `apns` is the iOS-native path (token-based auth, HTTP/2). It's fully wired
11
+ * here but inert until you provide an Apple push key via env:
12
+ * LISA_APNS_KEY_ID, LISA_APNS_TEAM_ID, LISA_APNS_KEY (.p8 PEM or a path),
13
+ * LISA_APNS_TOPIC (default ai.meetlisa.pocket), LISA_APNS_ENV=production.
14
+ * Without those, apnsConfigFromEnv() returns null and delivery logs a stub.
12
15
  * Payloads carry low-sensitivity metadata only (agent / project / state / reason)
13
16
  * — never prompts, replies, full commands, or terminal output.
14
17
  */
@@ -16,6 +19,7 @@ import fs from "node:fs";
16
19
  import os from "node:os";
17
20
  import path from "node:path";
18
21
  import crypto from "node:crypto";
22
+ import http2 from "node:http2";
19
23
  export function defaultPushPrefs() {
20
24
  return { done: true, error: true, permission: true, idle: true, advisor: false };
21
25
  }
@@ -86,17 +90,58 @@ export function setPushPrefs(id, prefs) {
86
90
  savePush(list);
87
91
  return s;
88
92
  }
93
+ function liveActivitiesPath() {
94
+ return path.join(lisaHome(), "live-activities.json");
95
+ }
96
+ export function listLiveActivities() {
97
+ try {
98
+ const parsed = JSON.parse(fs.readFileSync(liveActivitiesPath(), "utf8"));
99
+ if (!Array.isArray(parsed))
100
+ return [];
101
+ return parsed.filter((r) => !!r && typeof r.sessionId === "string" && typeof r.token === "string");
102
+ }
103
+ catch {
104
+ return [];
105
+ }
106
+ }
107
+ export function registerLiveActivity(sessionId, token, now = Date.now()) {
108
+ const list = listLiveActivities().filter((r) => r.sessionId !== sessionId);
109
+ list.push({ sessionId, token, createdAt: now });
110
+ const file = liveActivitiesPath();
111
+ fs.mkdirSync(path.dirname(file), { recursive: true });
112
+ fs.writeFileSync(file, JSON.stringify(list, null, 2));
113
+ }
114
+ export function unregisterLiveActivity(sessionId) {
115
+ const list = listLiveActivities();
116
+ const next = list.filter((r) => r.sessionId !== sessionId);
117
+ if (next.length === list.length)
118
+ return false;
119
+ fs.writeFileSync(liveActivitiesPath(), JSON.stringify(next, null, 2));
120
+ return true;
121
+ }
122
+ // ── pure trigger ──────────────────────────────────────────────────────────
123
+ /** Custom URL scheme Lisa Pocket registers for push / widget deep-links. */
124
+ export const POCKET_SCHEME = "lisapocket";
125
+ /** Deep-link that opens Lisa Pocket at a specific roster session. Pure. The app
126
+ * routes on host="session" + the agent/id query (Lisa Pocket's URL handler). */
127
+ export function agentDeepLink(agent, sessionId) {
128
+ // URLSearchParams encodes spaces as "+", which iOS URLComponents reads literally
129
+ // (not as a space); use %20 so values round-trip on the app side.
130
+ const q = new URLSearchParams({ agent, id: sessionId }).toString().replace(/\+/g, "%20");
131
+ return `${POCKET_SCHEME}://session?${q}`;
132
+ }
89
133
  /** Which notifications a session's prev→next transition warrants. Pure. */
90
134
  export function agentPushEvents(prev, next) {
91
135
  const out = [];
92
136
  const who = `${next.agent} · ${next.project || next.agent}`;
137
+ const click = agentDeepLink(next.agent, next.sessionId);
93
138
  if (next.state === "done" && prev?.state !== "done")
94
- out.push({ pref: "done", title: `${who} — done`, body: "Finished.", priority: "default", tag: "done" });
139
+ out.push({ pref: "done", title: `${who} — done`, body: "Finished.", priority: "default", tag: "done", click });
95
140
  if (next.state === "error" && prev?.state !== "error")
96
- out.push({ pref: "error", title: `${who} — error`, body: next.stateReason || "errored", priority: "high", tag: "error" });
141
+ out.push({ pref: "error", title: `${who} — error`, body: next.stateReason || "errored", priority: "high", tag: "error", click });
97
142
  const pend = next.activity?.pendingPermission;
98
143
  if (pend && pend !== prev?.activity?.pendingPermission)
99
- out.push({ pref: "permission", title: `${who} — needs permission`, body: `waiting on: ${pend}`, priority: "high", tag: "permission" });
144
+ out.push({ pref: "permission", title: `${who} — needs permission`, body: `waiting on: ${pend}`, priority: "high", tag: "permission", click });
100
145
  return out;
101
146
  }
102
147
  export async function sendNtfy(server, topic, ev, fetchImpl = fetch) {
@@ -105,7 +150,13 @@ export async function sendNtfy(server, topic, ev, fetchImpl = fetch) {
105
150
  const res = await fetchImpl(`${base}/${encodeURIComponent(topic)}`, {
106
151
  method: "POST",
107
152
  body: ev.body,
108
- headers: { Title: ev.title, Priority: ev.priority === "high" ? "high" : "default" },
153
+ headers: {
154
+ Title: ev.title,
155
+ Priority: ev.priority === "high" ? "high" : "default",
156
+ // ntfy opens this URL when the notification is tapped — a lisapocket://
157
+ // deep-link routes into the app (see agentDeepLink).
158
+ ...(ev.click ? { Click: ev.click } : {}),
159
+ },
109
160
  });
110
161
  return res.ok;
111
162
  }
@@ -113,20 +164,161 @@ export async function sendNtfy(server, topic, ev, fetchImpl = fetch) {
113
164
  return false;
114
165
  }
115
166
  }
167
+ /**
168
+ * APNs config from env, or null (→ stub). LISA_APNS_KEY is the .p8 contents (PEM)
169
+ * or a path to it; LISA_APNS_ENV=production switches to the prod host.
170
+ */
171
+ export function apnsConfigFromEnv(env = process.env) {
172
+ const keyId = env.LISA_APNS_KEY_ID;
173
+ const teamId = env.LISA_APNS_TEAM_ID;
174
+ const raw = env.LISA_APNS_KEY;
175
+ if (!keyId || !teamId || !raw)
176
+ return null;
177
+ let key = raw;
178
+ if (!raw.includes("BEGIN")) {
179
+ try {
180
+ key = fs.readFileSync(raw, "utf8");
181
+ }
182
+ catch {
183
+ return null;
184
+ }
185
+ }
186
+ const topic = env.LISA_APNS_TOPIC || "ai.meetlisa.pocket";
187
+ const host = env.LISA_APNS_ENV === "production" ? "api.push.apple.com" : "api.sandbox.push.apple.com";
188
+ return { keyId, teamId, key, topic, host };
189
+ }
190
+ function b64url(buf) {
191
+ return buf.toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
192
+ }
193
+ /** Build a signed ES256 provider JWT for APNs. Pure given (cfg, nowSec). */
194
+ export function buildApnsJwt(cfg, nowSec) {
195
+ const header = b64url(Buffer.from(JSON.stringify({ alg: "ES256", kid: cfg.keyId })));
196
+ const claims = b64url(Buffer.from(JSON.stringify({ iss: cfg.teamId, iat: nowSec })));
197
+ const signingInput = `${header}.${claims}`;
198
+ const signer = crypto.createSign("SHA256");
199
+ signer.update(signingInput);
200
+ // ES256 JWTs use raw R||S (IEEE-P1363), not the DER that sign() defaults to.
201
+ const sig = signer.sign({ key: crypto.createPrivateKey(cfg.key), dsaEncoding: "ieee-p1363" });
202
+ return `${signingInput}.${b64url(sig)}`;
203
+ }
204
+ /** Build the APNs JSON payload from a push event. Pure. */
205
+ export function buildApnsPayload(ev) {
206
+ return {
207
+ aps: { alert: { title: ev.title, body: ev.body }, sound: "default" },
208
+ // Custom key the app reads on tap to deep-link (mirrors the ntfy Click URL).
209
+ ...(ev.click ? { link: ev.click } : {}),
210
+ };
211
+ }
212
+ /** Real APNs POST over HTTP/2. Settles exactly once and always closes the client;
213
+ * resolves status 0 on a connection error or a 10s timeout. */
214
+ const realApnsPost = (o) => new Promise((resolve) => {
215
+ const client = http2.connect(`https://${o.host}`);
216
+ let status = 0;
217
+ let settled = false;
218
+ const done = (s) => {
219
+ if (settled)
220
+ return;
221
+ settled = true;
222
+ try {
223
+ client.close();
224
+ }
225
+ catch { /* already closing */ }
226
+ resolve({ status: s });
227
+ };
228
+ client.on("error", () => done(0));
229
+ const req = client.request({ ":method": "POST", ":path": o.path, ...o.headers });
230
+ req.setEncoding("utf8");
231
+ req.setTimeout(10_000, () => done(0)); // don't leak a hung connection
232
+ req.on("response", (h) => { status = Number(h[":status"]) || 0; });
233
+ req.on("data", () => { });
234
+ req.on("end", () => done(status));
235
+ req.on("error", () => done(0));
236
+ req.end(o.body);
237
+ });
238
+ // JWT cache keyed by config identity (not just time) — a different key/team must
239
+ // not reuse a stale token (wrong kid/iss → APNs 403).
240
+ let cachedApnsJwt = null;
241
+ /** Send one APNs notification. The provider JWT is cached ~50min (Apple rate-
242
+ * limits regeneration). `post` is injectable for tests. */
243
+ export async function sendApns(cfg, deviceToken, ev, post = realApnsPost, nowSec = Math.floor(Date.now() / 1000)) {
244
+ const cacheId = `${cfg.keyId}/${cfg.teamId}`;
245
+ if (!cachedApnsJwt || cachedApnsJwt.id !== cacheId || nowSec - cachedApnsJwt.at > 50 * 60) {
246
+ cachedApnsJwt = { token: buildApnsJwt(cfg, nowSec), at: nowSec, id: cacheId };
247
+ }
248
+ const res = await post({
249
+ host: cfg.host,
250
+ path: `/3/device/${deviceToken}`,
251
+ headers: {
252
+ authorization: `bearer ${cachedApnsJwt.token}`,
253
+ "apns-topic": cfg.topic,
254
+ "apns-push-type": "alert",
255
+ "apns-priority": ev.priority === "high" ? "10" : "5",
256
+ // Operational alerts are time-sensitive — don't let APNs store & deliver
257
+ // a stale one later if the device is offline.
258
+ "apns-expiration": ev.priority === "high" ? "0" : String(nowSec + 3600),
259
+ },
260
+ body: JSON.stringify(buildApnsPayload(ev)),
261
+ });
262
+ return res.status === 200;
263
+ }
264
+ /** Content-state for a session's Live Activity — mirrors the app's
265
+ * AgentActivityAttributes.ContentState + its detail() logic. Pure. */
266
+ export function liveActivityState(s) {
267
+ const a = s.activity;
268
+ const last = a?.lastTools && a.lastTools.length ? a.lastTools[a.lastTools.length - 1] : undefined;
269
+ const detail = a?.pendingPermission ? `⚠ ${a.pendingPermission}` : (s.stateReason || last || s.state);
270
+ return { state: s.state, detail, turns: a?.turnCount ?? 0 };
271
+ }
272
+ /** APNs Live Activity payload — `event:"update"` refreshes, `"end"` dismisses. Pure. */
273
+ export function buildLiveActivityPayload(cs, event, nowSec) {
274
+ return {
275
+ aps: {
276
+ timestamp: nowSec,
277
+ event,
278
+ "content-state": { state: cs.state, detail: cs.detail, turns: cs.turns },
279
+ ...(event === "end" ? { "dismissal-date": nowSec } : {}),
280
+ },
281
+ };
282
+ }
283
+ /** Push a Live Activity update/end over APNs (push-type liveactivity). `post`
284
+ * injectable for tests. Reuses the cached provider JWT. */
285
+ export async function sendLiveActivityUpdate(cfg, laToken, cs, event, post = realApnsPost, nowSec = Math.floor(Date.now() / 1000)) {
286
+ const cacheId = `${cfg.keyId}/${cfg.teamId}`;
287
+ if (!cachedApnsJwt || cachedApnsJwt.id !== cacheId || nowSec - cachedApnsJwt.at > 50 * 60) {
288
+ cachedApnsJwt = { token: buildApnsJwt(cfg, nowSec), at: nowSec, id: cacheId };
289
+ }
290
+ const res = await post({
291
+ host: cfg.host,
292
+ path: `/3/device/${laToken}`,
293
+ headers: {
294
+ authorization: `bearer ${cachedApnsJwt.token}`,
295
+ "apns-topic": `${cfg.topic}.push-type.liveactivity`,
296
+ "apns-push-type": "liveactivity",
297
+ "apns-priority": "10",
298
+ },
299
+ body: JSON.stringify(buildLiveActivityPayload(cs, event, nowSec)),
300
+ });
301
+ return res.status === 200;
302
+ }
116
303
  export class PushBridge {
117
304
  prev = new Map();
118
305
  lastSent = new Map();
119
306
  subs;
120
307
  deliverFn;
308
+ liveActivities;
309
+ liveDeliverFn;
121
310
  now;
122
311
  log;
123
312
  throttleMs;
313
+ liveThrottleMs = 3000;
124
314
  constructor(opts = {}) {
125
315
  this.subs = opts.subs ?? listPush;
126
316
  this.now = opts.now ?? Date.now;
127
317
  this.log = opts.log ?? (() => { });
128
318
  this.throttleMs = opts.throttleMs ?? 30_000;
129
319
  this.deliverFn = opts.deliver ?? ((sub, ev) => this.defaultDeliver(sub, ev));
320
+ this.liveActivities = opts.liveActivities ?? listLiveActivities;
321
+ this.liveDeliverFn = opts.liveDeliver ?? ((token, cs, event) => this.defaultLiveDeliver(token, cs, event));
130
322
  }
131
323
  onAgentUpdate(next) {
132
324
  const key = `${next.agent}/${next.sessionId}`;
@@ -134,6 +326,23 @@ export class PushBridge {
134
326
  this.prev.set(key, next);
135
327
  for (const ev of events)
136
328
  this.fire(ev, `${key}#${ev.tag}`);
329
+ this.updateLiveActivity(next);
330
+ }
331
+ /** Refresh a pinned session's Live Activity (throttled), ending it on a
332
+ * terminal state. No-op unless an LA token is registered for the session. */
333
+ updateLiveActivity(next) {
334
+ const reg = this.liveActivities().find((r) => r.sessionId === next.sessionId);
335
+ if (!reg)
336
+ return;
337
+ const terminal = next.state === "done" || next.state === "error";
338
+ const key = `la#${next.sessionId}`;
339
+ // Throttle progress refreshes, but always let a terminal "end" through.
340
+ if (!terminal && this.now() - (this.lastSent.get(key) ?? -Infinity) < this.liveThrottleMs)
341
+ return;
342
+ this.lastSent.set(key, this.now());
343
+ void Promise.resolve(this.liveDeliverFn(reg.token, liveActivityState(next), terminal ? "end" : "update")).catch(() => { });
344
+ if (terminal)
345
+ unregisterLiveActivity(next.sessionId);
137
346
  }
138
347
  onIdleMessage(text) {
139
348
  this.fire({ pref: "idle", title: "Lisa — while you were away", body: text.slice(0, 200), priority: "default", tag: "idle" }, `idle#${this.now()}`);
@@ -156,8 +365,25 @@ export class PushBridge {
156
365
  this.log(`[push] ntfy send failed for ${sub.id}`);
157
366
  }
158
367
  else {
159
- this.log(`[push] apns not wired (needs an Apple push key) — would notify ${sub.id}: ${ev.title}`);
368
+ const cfg = apnsConfigFromEnv();
369
+ if (!cfg) {
370
+ this.log(`[push] apns not configured (set LISA_APNS_KEY/_KEY_ID/_TEAM_ID) — would notify ${sub.id}: ${ev.title}`);
371
+ return;
372
+ }
373
+ const ok = await sendApns(cfg, sub.target, ev);
374
+ if (!ok)
375
+ this.log(`[push] apns send failed for ${sub.id}`);
376
+ }
377
+ }
378
+ async defaultLiveDeliver(token, cs, event) {
379
+ const cfg = apnsConfigFromEnv();
380
+ if (!cfg) {
381
+ this.log(`[push] live-activity ${event} skipped (no APNs key)`);
382
+ return;
160
383
  }
384
+ const ok = await sendLiveActivityUpdate(cfg, token, cs, event);
385
+ if (!ok)
386
+ this.log(`[push] live-activity ${event} failed`);
161
387
  }
162
388
  }
163
389
  //# sourceMappingURL=push.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/web/push.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/web/push.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAqDpD,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAMjE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;CACpB;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGvD;AASD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAGT;AA2DD,wBAAsB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CA+kDjF"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAqDpD,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAMjE,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;CACpB;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGvD;AASD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAGT;AA2DD,wBAAsB,cAAc,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CA0mDjF"}
@@ -31,12 +31,12 @@ import { polishDictation } from "../voice/dictation.js";
31
31
  import { listGrants, grant, revoke, revokeAll, isGranted, SENSE_SIGNALS, SIGNAL_DESCRIPTIONS } from "../consent/store.js";
32
32
  import { signalAgentTool } from "../tools/signal_agent.js";
33
33
  import { managedRegistry } from "../agents/managed.js";
34
- import { ptyRegistry, ptyEnabled } from "../agents/pty.js";
34
+ import { ptyRegistry, ptyEnabled, normalizeAgentKind } from "../agents/pty.js";
35
35
  import { liveClaudeSessionIds } from "../integrations/claude-code/liveness.js";
36
36
  import { listRecentDispatches, isAlive, toDispatchView, readDispatchOutput } from "../integrations/dispatch-ledger.js";
37
37
  import { loadControlPolicy, saveControlPolicy } from "../control/policy.js";
38
38
  import { mintDevice, verifyDeviceToken, touchDevice, listDevices, revokeDevice } from "./devices.js";
39
- import { PushBridge, listPush, registerPush, unregisterPush, setPushPrefs } from "./push.js";
39
+ import { PushBridge, listPush, registerPush, unregisterPush, setPushPrefs, registerLiveActivity, unregisterLiveActivity } from "./push.js";
40
40
  import { SenseService } from "../sense/service.js";
41
41
  import { ScreenSource } from "../sense/screen.js";
42
42
  import { VoiceSource } from "../sense/voice.js";
@@ -848,6 +848,32 @@ export async function startWebServer(opts) {
848
848
  res.end(JSON.stringify({ ok: removed }));
849
849
  return;
850
850
  }
851
+ // Register/unregister a Live Activity push token for a pinned session — the
852
+ // push-bridge then refreshes that activity over APNs as the agent updates.
853
+ if (req.method === "POST" && url === "/api/push/live-activity") {
854
+ let laBody = "";
855
+ for await (const chunk of req)
856
+ laBody += chunk.toString("utf8");
857
+ let payload = {};
858
+ try {
859
+ payload = laBody ? JSON.parse(laBody) : {};
860
+ }
861
+ catch { /* tolerate */ }
862
+ if (typeof payload.sessionId !== "string" || !payload.sessionId) {
863
+ res.writeHead(400, { "content-type": "text/plain" });
864
+ res.end("sessionId required");
865
+ return;
866
+ }
867
+ if (typeof payload.token === "string" && payload.token) {
868
+ registerLiveActivity(payload.sessionId, payload.token);
869
+ }
870
+ else {
871
+ unregisterLiveActivity(payload.sessionId);
872
+ }
873
+ res.writeHead(200, { "content-type": "application/json" });
874
+ res.end(JSON.stringify({ ok: true }));
875
+ return;
876
+ }
851
877
  if (req.method === "GET" && url === "/api/push/list") {
852
878
  res.writeHead(200, { "content-type": "application/json" });
853
879
  res.end(JSON.stringify({ subscriptions: listPush() }));
@@ -1029,6 +1055,14 @@ export async function startWebServer(opts) {
1029
1055
  // behind remoteAdoptExternal; starting a fresh agent is ordinary control.
1030
1056
  if (denyRemote(resumeSessionId ? "adoptExternal" : "control"))
1031
1057
  return;
1058
+ // Resume-adopt is claude-only (docs/PTY_AGENTS.md). Codex has no liveness
1059
+ // signal, so we can't guard against resuming a *live* rollout and corrupting
1060
+ // it — refuse with a clear 400 rather than silently spawning a fresh session.
1061
+ if (resumeSessionId && normalizeAgentKind(agent) !== "claude-code") {
1062
+ res.writeHead(400, { "content-type": "text/plain" });
1063
+ res.end(`resume-adopt is only supported for claude sessions (got "${agent}"); start a fresh agent instead`);
1064
+ return;
1065
+ }
1032
1066
  // Adopting an existing session needs no task (it continues the convo); a
1033
1067
  // fresh agent does. Guard: never resume a session that's currently live.
1034
1068
  if (!resumeSessionId && (typeof payload.task !== "string" || !payload.task.trim())) {