@linkshell/host 0.4.37 → 0.4.39

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.
@@ -0,0 +1,444 @@
1
+ import { z } from "zod";
2
+ import { unwrapShellCommand } from "./shell.js";
3
+ export const liveActivityActionSchema = z.object({
4
+ id: z.string().max(560), label: z.string().min(1).max(64),
5
+ role: z.enum(["allow", "reject", "always", "stop", "choice"]),
6
+ kind: z.enum(["permission", "answer", "async-answer"]),
7
+ computerKey: z.string().min(1).max(512), sessionId: z.string().min(1).max(128),
8
+ requestId: z.string().min(1).max(256), optionId: z.string().max(160), questionId: z.string().max(128).optional(),
9
+ });
10
+ export const liveActivityTaskSchema = z.object({
11
+ id: z.string().min(1).max(128), kind: z.enum(["session", "terminal"]),
12
+ phase: z.enum(["waiting_for_approval", "waiting_for_input", "failed", "running", "starting", "completed", "stale"]),
13
+ title: z.string().max(160), subtitle: z.string().max(360), project: z.string().max(160), agent: z.string().max(80),
14
+ });
15
+ /** A transition, rather than a heartbeat: the receiver can alert exactly once. */
16
+ export const liveActivityNoticeSchema = z.object({
17
+ id: z.string().min(1).max(128), createdAt: z.number().int().positive(),
18
+ task: liveActivityTaskSchema,
19
+ });
20
+ export const liveActivityContentSchema = z.object({
21
+ phase: z.enum(["waiting_for_approval", "waiting_for_input", "failed", "running", "starting", "completed", "stale"]),
22
+ title: z.string().max(160), subtitle: z.string().max(360), project: z.string().max(160),
23
+ agent: z.string().max(80), agents: z.array(z.string().max(80)).max(12).optional(),
24
+ actions: z.array(liveActivityActionSchema).max(3).optional(), hasMoreActions: z.boolean().optional(),
25
+ tasks: z.array(liveActivityTaskSchema).max(6).optional(), noticeId: z.string().max(128).optional(),
26
+ waitingCount: z.number().int().min(0), runningCount: z.number().int().min(0), failedCount: z.number().int().min(0),
27
+ deepLink: z.string().max(2048).refine((url) => url.startsWith("linkshell:///")),
28
+ });
29
+ export const liveActivityIdSchema = z.string().min(1).max(128).regex(/^[a-zA-Z0-9-]+$/);
30
+ export const liveActivitySubscriptionSchema = z.object({
31
+ activityId: liveActivityIdSchema,
32
+ serviceUrl: z.string().url().max(256),
33
+ grant: z.string().regex(/^[a-f0-9]{64}$/),
34
+ expiresAt: z.number().int().positive(),
35
+ computerKey: z.string().min(1).max(512),
36
+ });
37
+ // ActivityKit accepts at most 4 KB. Preserve request identifiers exactly; drop
38
+ // whole buttons when necessary, so a truncated choice can never be submitted.
39
+ export function liveActivityContent(payload) {
40
+ const cut = (value, max) => [...(value ?? "")].slice(0, max).join("");
41
+ const actions = (payload.actions ?? []).filter((action) => liveActivityActionSchema.safeParse(action).success);
42
+ const state = {
43
+ phase: payload.phase ?? "completed", title: cut(payload.title, 80), subtitle: cut(payload.subtitle, 180),
44
+ project: cut(payload.project, 80), agent: cut(payload.agent, 40),
45
+ agents: payload.agents?.filter((id) => id.length <= 80).slice(0, 12),
46
+ actions, hasMoreActions: payload.hasMoreActions || actions.length !== (payload.actions ?? []).length,
47
+ tasks: payload.tasks?.map((task) => ({
48
+ ...task, title: cut(task.title, 48), subtitle: cut(task.subtitle, 80), project: cut(task.project, 32), agent: cut(task.agent, 40),
49
+ })).filter((task) => liveActivityTaskSchema.safeParse(task).success).slice(0, 6),
50
+ noticeId: payload.noticeId,
51
+ waitingCount: payload.waitingCount ?? 0, runningCount: payload.runningCount ?? 0, failedCount: payload.failedCount ?? 0,
52
+ deepLink: payload.deepLink && payload.deepLink.length <= 2048 ? payload.deepLink : "linkshell:///",
53
+ };
54
+ const size = () => new TextEncoder().encode(JSON.stringify(state)).length;
55
+ // Leave room for an ActivityKit alert as well as Apple's envelope. Keep a
56
+ // second task when possible so the compact snapshot still supports browsing.
57
+ while (size() > 3300 && (state.tasks?.length ?? 0) > 2)
58
+ state.tasks.pop();
59
+ while (size() > 3300 && state.actions.length) {
60
+ state.actions.pop();
61
+ state.hasMoreActions = true;
62
+ }
63
+ if (size() > 3300) {
64
+ state.subtitle = cut(state.subtitle, 60);
65
+ state.project = "";
66
+ state.agents = state.agents?.slice(0, 3);
67
+ }
68
+ while (size() > 3300 && state.tasks?.length)
69
+ state.tasks.pop();
70
+ if (size() > 3300)
71
+ state.deepLink = "linkshell:///";
72
+ return state;
73
+ }
74
+ export const toolVerb = {
75
+ read: "读取",
76
+ edit: "编辑",
77
+ delete: "删除",
78
+ move: "移动",
79
+ search: "搜索",
80
+ execute: "运行",
81
+ think: "思考",
82
+ fetch: "获取",
83
+ switch_mode: "切换模式",
84
+ other: "",
85
+ };
86
+ const ENGLISH_VERB = /^(read|reading|edit|editing|write|writing|update|create|delete|search|searching|list|run|running|fetch|grep|glob|find|view|open)\b[:\s]+/i;
87
+ /** Drops the agent's own English verb and wrapping backticks from a tool title. */
88
+ export function cleanToolTitle(title) {
89
+ return title.replace(ENGLISH_VERB, "").replace(/^`(.+)`$/s, "$1").trim();
90
+ }
91
+ /** Drops the shell wrapper and environment prefixes agents put around a command. */
92
+ export function tidyCommand(command) {
93
+ let text = unwrapShellCommand(command).trim();
94
+ // "export TZ=…;", "TZ=… cmd", "cd dir &&" are noise on a phone.
95
+ for (;;) {
96
+ const next = text
97
+ .replace(/^export\s+\w+=(?:'[^']*'|"[^"]*"|\S*)\s*(?:;|&&|\n)\s*/, "")
98
+ .replace(/^\w+=(?:'[^']*'|"[^"]*"|\S+)\s+(?=\S)/, "");
99
+ if (next === text)
100
+ break;
101
+ text = next;
102
+ }
103
+ return text || command;
104
+ }
105
+ export function activityText(activity) {
106
+ if (!activity)
107
+ return "正在运行…";
108
+ if (activity.kind === "thinking")
109
+ return "思考中…";
110
+ if (activity.kind === "responding")
111
+ return "正在回复…";
112
+ const verb = activity.toolKind ? toolVerb[activity.toolKind] : "";
113
+ const subject = activity.title ? (activity.toolKind === "execute" ? tidyCommand(cleanToolTitle(activity.title)) : cleanToolTitle(activity.title)) : "";
114
+ return [verb, subject].filter(Boolean).join(" ") || "正在使用工具…";
115
+ }
116
+ const choiceById = {
117
+ accept: { label: "允许", role: "allow" },
118
+ acceptForSession: { label: "本会话都允许", role: "always" },
119
+ decline: { label: "拒绝", role: "reject" },
120
+ cancel: { label: "拒绝并停止", role: "stop" },
121
+ turn: { label: "本轮允许", role: "allow" },
122
+ session: { label: "本会话都允许", role: "always" },
123
+ };
124
+ const choiceByKind = {
125
+ allow_once: { label: "允许", role: "allow" },
126
+ allow_always: { label: "总是允许", role: "always" },
127
+ reject_once: { label: "拒绝", role: "reject" },
128
+ reject_always: { label: "总是拒绝", role: "stop" },
129
+ };
130
+ /** Localized permission choices, in the order: reject, allow, then the rest. */
131
+ export function permissionChoices(options) {
132
+ const kinds = new Map();
133
+ for (const option of options)
134
+ kinds.set(option.kind, (kinds.get(option.kind) ?? 0) + 1);
135
+ const choices = options.map((option) => {
136
+ // ACP option IDs are agent-local: Gemini's sole `cancel` is a rejection,
137
+ // while Codex offers it alongside a separate decline/skip action.
138
+ const soleReject = option.optionId === "cancel" && option.kind === "reject_once" && kinds.get("reject_once") === 1;
139
+ const known = soleReject ? undefined : choiceById[option.optionId];
140
+ if (known)
141
+ return { option, ...known };
142
+ const byKind = choiceByKind[option.kind];
143
+ // Two options of one kind: the agent's own names tell them apart.
144
+ return { option, label: (kinds.get(option.kind) ?? 0) > 1 ? option.name : byKind.label, role: byKind.role };
145
+ });
146
+ const order = ["reject", "allow", "always", "stop"];
147
+ return choices.sort((a, b) => order.indexOf(a.role) - order.indexOf(b.role));
148
+ }
149
+ export function sessionTitle(session) {
150
+ return session.title?.trim() || "新会话";
151
+ }
152
+ /** Markdown flattened to one line of plain text, for list previews. */
153
+ export function plainPreview(text) {
154
+ return text
155
+ .replace(/```[\s\S]*?```/g, " ")
156
+ .replace(/`([^`]*)`/g, "$1")
157
+ .replace(/!\[[^\]]*\]\([^)]*\)/g, "")
158
+ .replace(/\[([^\]]*)\]\([^)]*\)/g, "$1")
159
+ .replace(/^\s{0,3}(#{1,6}|>|[-*+]|\d+\.)\s+/gm, "")
160
+ .replace(/(^|\s)#{1,6}\s+/g, "$1")
161
+ .replace(/(\*\*|__|\*|_|~~)(\S(?:.*?\S)?)\1/g, "$2")
162
+ .replace(/\|/g, " ")
163
+ .replace(/\s+/g, " ")
164
+ // Previews arrive flattened: list bullets end up mid-line ("包括: - 一 - 二").
165
+ .replace(/([::。;;,,])\s*[-*•]\s+/g, "$1")
166
+ .replace(/\s[-*•]\s+(?=\S)/g, " · ")
167
+ .trim();
168
+ }
169
+ /** Async questions need attention even while the agent keeps working. */
170
+ export function needsUserInput(session) {
171
+ return !!session.permission?.questions?.length || !!session.asyncQuestions?.length;
172
+ }
173
+ export function needsAttention(session) {
174
+ return session.state === "waiting" || needsUserInput(session);
175
+ }
176
+ const SHELLS = /^-?(zsh|bash|sh|fish|dash|ksh|tcsh|nu|pwsh|powershell)\b/;
177
+ /**
178
+ * A start command as a one-line title. The UI font has no Nerd Font glyphs
179
+ * (private-use code points), which would show as boxes; the terminal itself
180
+ * draws them with its symbol font.
181
+ */
182
+ export function commandTitle(command) {
183
+ return command.replace(/[\uE000-\uF8FF\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}]/gu, "").replace(/\s+/g, " ").trim();
184
+ }
185
+ /** How a terminal reads in a list: its title, what it's doing, and whether it has ended. */
186
+ export function terminalState(terminal) {
187
+ const ended = terminal.exitCode !== undefined || terminal.interrupted === true;
188
+ const foreground = ended || SHELLS.test(terminal.title) ? undefined : terminal.title;
189
+ const failed = !terminal.interrupted && typeof terminal.exitCode === "number" && terminal.exitCode !== 0;
190
+ const detail = terminal.interrupted
191
+ ? "电脑重启时中断"
192
+ : ended
193
+ ? failed
194
+ ? `已退出 · 代码 ${terminal.exitCode}`
195
+ : "已结束"
196
+ : foreground
197
+ ? `正在运行 ${foreground}`
198
+ : "空闲";
199
+ return {
200
+ title: (terminal.command && commandTitle(terminal.command)) || "终端",
201
+ mono: Boolean(terminal.command),
202
+ ended,
203
+ busy: Boolean(foreground),
204
+ failed,
205
+ detail,
206
+ };
207
+ }
208
+ function baseName(path) {
209
+ const parts = path.split(/[\\/]/).filter(Boolean);
210
+ return parts[parts.length - 1] ?? path;
211
+ }
212
+ /** Classify a session into the 7-phase attention hierarchy (t3code model). */
213
+ export function classifySessionPhase(session, online = true) {
214
+ if (!online || session.state === "offline")
215
+ return "stale";
216
+ if (needsUserInput(session))
217
+ return "waiting_for_input";
218
+ if (session.state === "waiting" || needsAttention(session))
219
+ return "waiting_for_approval";
220
+ if (session.state === "error")
221
+ return "failed";
222
+ if (session.state === "running")
223
+ return "running";
224
+ if (session.state === "unknown")
225
+ return "starting";
226
+ return "completed";
227
+ }
228
+ export function phasePriority(phase) {
229
+ switch (phase) {
230
+ case "waiting_for_approval":
231
+ case "waiting_for_input":
232
+ return 0;
233
+ case "failed":
234
+ return 1;
235
+ case "running":
236
+ case "starting":
237
+ return 2;
238
+ case "completed":
239
+ return 3;
240
+ case "stale":
241
+ return 4;
242
+ }
243
+ }
244
+ export function liveActivityActions(session, computerKey) {
245
+ if (!computerKey)
246
+ return { actions: [], hasMoreActions: false };
247
+ const base = { computerKey, sessionId: session.id };
248
+ const permission = session.permission;
249
+ let choices;
250
+ let hasMoreActions = false;
251
+ if (permission) {
252
+ if (permission.url)
253
+ return { actions: [], hasMoreActions: true };
254
+ const questions = permission.questions;
255
+ if (questions?.length) {
256
+ const question = questions[0];
257
+ // A multi-select or form needs its own submit step; never submit a partial form.
258
+ if (questions.length !== 1 || question.kind !== "choice" || question.secret) {
259
+ return { actions: [], hasMoreActions: true };
260
+ }
261
+ choices = (question.options ?? []).map((option) => ({
262
+ ...base, id: `${permission.requestId}:${question.id}:${option.value}`, label: option.label,
263
+ role: "choice", kind: "answer", requestId: permission.requestId,
264
+ questionId: question.id, optionId: option.value,
265
+ }));
266
+ hasMoreActions = Boolean(question.other) || choices.length === 0;
267
+ }
268
+ else {
269
+ choices = permissionChoices(permission.options).map(({ option, label, role }) => ({
270
+ ...base, id: `${permission.requestId}:${option.optionId}`, label, role,
271
+ kind: "permission", requestId: permission.requestId, optionId: option.optionId,
272
+ }));
273
+ }
274
+ }
275
+ else {
276
+ const question = session.asyncQuestions?.[0];
277
+ if (!question)
278
+ return { actions: [], hasMoreActions: false };
279
+ choices = question.options.map((option, index) => ({
280
+ ...base, id: `${question.id}:${index}`, label: option, role: "choice",
281
+ kind: "async-answer", requestId: question.id, optionId: option,
282
+ }));
283
+ // Async questions always support a typed answer in the session.
284
+ hasMoreActions = true;
285
+ }
286
+ // Keep whole labels and the ActivityKit payload bounded. The title opens every choice.
287
+ const visible = choices.filter((choice) => [...choice.label].length <= 16 && choice.optionId.length <= 160).slice(0, 3);
288
+ return { actions: visible, hasMoreActions: hasMoreActions || visible.length < choices.length };
289
+ }
290
+ /** Recheck against the connected host after waking the app, not the cached card. */
291
+ export function isLiveActivityActionCurrent(action, computerKey, session, permissions = []) {
292
+ if (!session || session.archived || action.computerKey !== computerKey || action.sessionId !== session.id)
293
+ return false;
294
+ if (action.kind === "async-answer") {
295
+ return Boolean(session.asyncQuestions?.some((question) => question.id === action.requestId && question.options.includes(action.optionId)));
296
+ }
297
+ const request = permissions.find((item) => item.requestId === action.requestId)
298
+ ?? (session.permission?.requestId === action.requestId ? session.permission : undefined);
299
+ if (!request || request.url)
300
+ return false;
301
+ if (action.kind === "permission") {
302
+ return !request.questions?.length && request.options.some((option) => option.optionId === action.optionId);
303
+ }
304
+ if (action.kind !== "answer" || request.questions?.length !== 1)
305
+ return false;
306
+ const question = request.questions[0];
307
+ return question.id === action.questionId && question.kind === "choice" && !question.secret
308
+ && Boolean(question.options?.some((option) => option.value === action.optionId));
309
+ }
310
+ export function liveActivityDetailLink(computerKey, kind, id) {
311
+ if (!computerKey)
312
+ return `linkshell:///${kind}/${encodeURIComponent(id)}`;
313
+ return `linkshell:///activity?computer=${encodeURIComponent(computerKey)}&${kind}=${encodeURIComponent(id)}`;
314
+ }
315
+ /** The card describes progress; the session retains the full command and output. */
316
+ function liveActivityProgress(activity) {
317
+ if (activity?.kind !== "tool" || activity.toolKind !== "execute" || !activity.title)
318
+ return activityText(activity);
319
+ const command = tidyCommand(cleanToolTitle(activity.title));
320
+ if (/^(?:rg|grep|find|fd|ls)\b/.test(command))
321
+ return "正在查找项目文件与代码";
322
+ if (/^(?:cat|sed|head|tail)\b/.test(command))
323
+ return "正在阅读项目文件";
324
+ if (/^git\s+(?:status|diff|log|show|branch)\b/.test(command))
325
+ return "正在检查分支与代码改动";
326
+ if (/^(?:pnpm|npm|yarn|bun|npx)\b/.test(command)) {
327
+ if (/\b(?:test|vitest|jest)\b/.test(command))
328
+ return "正在运行测试";
329
+ if (/\b(?:typecheck|tsc)\b/.test(command))
330
+ return "正在检查类型";
331
+ if (/\b(?:lint|eslint)\b/.test(command))
332
+ return "正在检查代码规范";
333
+ if (/\bbuild\b/.test(command))
334
+ return "正在构建项目";
335
+ if (/\b(?:install|add)\b/.test(command))
336
+ return "正在准备项目依赖";
337
+ }
338
+ if (/^xcodebuild\b/.test(command))
339
+ return "正在构建 iOS 应用";
340
+ if (/^(?:python[\d.]*|node|ruby)\b/.test(command))
341
+ return "正在执行脚本";
342
+ if (/^(?:curl|wget)\b/.test(command))
343
+ return "正在获取资料";
344
+ return activityText(activity);
345
+ }
346
+ export function liveActivitySessionTask(session, online = true) {
347
+ const phase = classifySessionPhase(session, online);
348
+ const subtitle = phase === "waiting_for_approval" || phase === "waiting_for_input"
349
+ ? session.permission?.title ?? session.asyncQuestions?.[0]?.title ?? "需要你的确认"
350
+ : phase === "completed" ? plainPreview(session.preview ?? "本轮任务已结束")
351
+ : phase === "failed" ? plainPreview(session.preview ?? "执行出错,打开任务查看")
352
+ : session.activity?.kind === "responding" && session.preview ? plainPreview(session.preview) : liveActivityProgress(session.activity);
353
+ return { id: session.id, kind: "session", phase, title: sessionTitle(session), subtitle,
354
+ project: baseName(session.worktree?.source ?? session.cwd), agent: session.agent };
355
+ }
356
+ export function liveActivityTerminalTask(terminal, online = true) {
357
+ const state = terminalState(terminal);
358
+ return { id: terminal.id, kind: "terminal", phase: !online ? "stale" : state.failed ? "failed" : state.busy ? "running" : "completed",
359
+ title: state.title, subtitle: state.detail, project: baseName(terminal.cwd), agent: "terminal" };
360
+ }
361
+ /**
362
+ * Builds the aggregated single-card iOS Live Activity / Dynamic Island payload
363
+ * for a computer. New progress brings its task and agent to the front together.
364
+ */
365
+ export function buildLiveActivitySnapshot(computerName, sessions, terminals, online, computerKey = "", goals = {}) {
366
+ const live = sessions.filter((s) => !s.archived);
367
+ const waiting = live.filter((s) => needsAttention(s));
368
+ const failed = live.filter((s) => !needsAttention(s) && s.state === "error");
369
+ const runningSessions = live.filter((s) => !needsAttention(s) && s.state === "running");
370
+ const busyTerminals = terminals.filter((t) => terminalState(t).busy)
371
+ .sort((a, b) => b.activeAt - a.activeAt || a.id.localeCompare(b.id));
372
+ const runningCount = runningSessions.length + busyTerminals.length;
373
+ const candidates = [...waiting, ...failed, ...runningSessions].sort((a, b) => {
374
+ if (a.updatedAt !== b.updatedAt)
375
+ return b.updatedAt - a.updatedAt;
376
+ const pa = phasePriority(classifySessionPhase(a, online));
377
+ const pb = phasePriority(classifySessionPhase(b, online));
378
+ if (pa !== pb)
379
+ return pa - pb;
380
+ return a.id.localeCompare(b.id);
381
+ });
382
+ const hero = candidates[0];
383
+ if (!hero && busyTerminals.length === 0) {
384
+ return { active: false, computerName };
385
+ }
386
+ // Keep the featured task first; one icon represents every task using the same agent.
387
+ const agents = [...new Set([
388
+ ...candidates.map((session) => ({ agent: session.agent, at: session.updatedAt })),
389
+ ...busyTerminals.map((terminal) => ({ agent: "terminal", at: terminal.activeAt })),
390
+ ].sort((a, b) => b.at - a.at).map((item) => item.agent))];
391
+ const tasks = [
392
+ ...candidates.map((session) => ({ task: liveActivitySessionTask(session, online), at: session.createdAt })),
393
+ ...busyTerminals.map((terminal) => ({ task: liveActivityTerminalTask(terminal, online), at: terminal.createdAt })),
394
+ ].sort((a, b) => a.at - b.at || a.task.id.localeCompare(b.task.id)).map(({ task }) => task);
395
+ if (hero && (!busyTerminals[0] || hero.updatedAt >= busyTerminals[0].activeAt)) {
396
+ const phase = classifySessionPhase(hero, online);
397
+ const heroGoal = goals[hero.id];
398
+ const subtitle = phase === "waiting_for_approval" || phase === "waiting_for_input"
399
+ ? hero.permission?.title ?? hero.asyncQuestions?.[0]?.title ?? "需要你的确认"
400
+ : phase === "failed"
401
+ ? hero.preview
402
+ ? plainPreview(hero.preview)
403
+ : "上一轮执行出错"
404
+ : heroGoal?.status === "active" && !hero.activity
405
+ ? `目标 · ${heroGoal.objective}`
406
+ : hero.activity?.kind === "responding" && hero.preview
407
+ ? plainPreview(hero.preview)
408
+ : liveActivityProgress(hero.activity);
409
+ return {
410
+ active: true,
411
+ computerName,
412
+ phase,
413
+ title: sessionTitle(hero),
414
+ subtitle,
415
+ project: baseName(hero.worktree?.source ?? hero.cwd),
416
+ agent: hero.agent,
417
+ agents,
418
+ tasks,
419
+ ...(online ? liveActivityActions(hero, computerKey) : { actions: [], hasMoreActions: false }),
420
+ waitingCount: waiting.length,
421
+ runningCount,
422
+ failedCount: failed.length,
423
+ deepLink: liveActivityDetailLink(computerKey, "session", hero.id),
424
+ };
425
+ }
426
+ const busy = busyTerminals[0];
427
+ const tState = terminalState(busy);
428
+ return {
429
+ active: true,
430
+ computerName,
431
+ phase: online ? "running" : "stale",
432
+ title: tState.title || "终端运行中",
433
+ subtitle: tState.detail || baseName(busy.cwd),
434
+ project: baseName(busy.cwd),
435
+ agent: "terminal",
436
+ agents,
437
+ tasks,
438
+ waitingCount: waiting.length,
439
+ runningCount,
440
+ failedCount: failed.length,
441
+ deepLink: liveActivityDetailLink(computerKey, "terminal", busy.id),
442
+ };
443
+ }
444
+ //# sourceMappingURL=live-activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-activity.js","sourceRoot":"","sources":["../../../../wire/src/live-activity.ts"],"names":[],"mappings":"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"}
@@ -3629,6 +3629,38 @@ declare const acpMethods: {
3629
3629
  };
3630
3630
  };
3631
3631
  declare const coreMethods: {
3632
+ readonly "liveActivities.subscribe": {
3633
+ readonly params: z.ZodObject<{
3634
+ activityId: z.ZodString;
3635
+ serviceUrl: z.ZodString;
3636
+ grant: z.ZodString;
3637
+ expiresAt: z.ZodNumber;
3638
+ computerKey: z.ZodString;
3639
+ }, "strip", z.ZodTypeAny, {
3640
+ computerKey: string;
3641
+ activityId: string;
3642
+ serviceUrl: string;
3643
+ grant: string;
3644
+ expiresAt: number;
3645
+ }, {
3646
+ computerKey: string;
3647
+ activityId: string;
3648
+ serviceUrl: string;
3649
+ grant: string;
3650
+ expiresAt: number;
3651
+ }>;
3652
+ readonly result: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
3653
+ };
3654
+ readonly "liveActivities.unsubscribe": {
3655
+ readonly params: z.ZodObject<{
3656
+ activityId: z.ZodString;
3657
+ }, "strip", z.ZodTypeAny, {
3658
+ activityId: string;
3659
+ }, {
3660
+ activityId: string;
3661
+ }>;
3662
+ readonly result: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
3663
+ };
3632
3664
  readonly "machine.info": {
3633
3665
  readonly params: z.ZodObject<{}, "passthrough", z.ZodTypeAny, z.objectOutputType<{}, z.ZodTypeAny, "passthrough">, z.objectInputType<{}, z.ZodTypeAny, "passthrough">>;
3634
3666
  readonly result: z.ZodObject<{
@@ -24872,13 +24904,13 @@ declare const coreMethods: {
24872
24904
  gateway: z.ZodString;
24873
24905
  }, "strip", z.ZodTypeAny, {
24874
24906
  code: string;
24875
- link: string;
24876
24907
  expiresAt: number;
24908
+ link: string;
24877
24909
  gateway: string;
24878
24910
  }, {
24879
24911
  code: string;
24880
- link: string;
24881
24912
  expiresAt: number;
24913
+ link: string;
24882
24914
  gateway: string;
24883
24915
  }>;
24884
24916
  };
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import { goalChangeSchema, sessionGoalSchema } from "./goal.js";
3
3
  import { acpAgentSettingsSchema, acpFeaturesSchema, acpRemoteAgentSchema, acpProviderSchema } from "./acp.js";
4
4
  import { editorRequestSchema, editorResultSchema } from "./editor.js";
5
+ import { liveActivityIdSchema, liveActivitySubscriptionSchema } from "./live-activity.js";
5
6
  import { backgroundTaskSchema, agentInfoSchema, gatewayStatusSchema, machineInfoSchema, portInfoSchema, projectSummarySchema, terminalInfoSchema, sessionDriverSchema, sessionSummarySchema, subagentInfoSchema, gitInfoSchema, worktreeEntrySchema, questionAnswerSchema, pendingPermissionSchema, } from "./model.js";
6
7
  import { contentBlockSchema, sessionEventSchema, sessionNoticeSchema } from "./updates.js";
7
8
  // ── JSON-RPC 2.0 framing ─────────────────────────────────────────────
@@ -75,6 +76,14 @@ const acpMethods = {
75
76
  },
76
77
  };
77
78
  const coreMethods = {
79
+ "liveActivities.subscribe": {
80
+ params: liveActivitySubscriptionSchema,
81
+ result: z.object({}),
82
+ },
83
+ "liveActivities.unsubscribe": {
84
+ params: z.object({ activityId: liveActivityIdSchema }),
85
+ result: z.object({}),
86
+ },
78
87
  "machine.info": {
79
88
  params: empty,
80
89
  result: machineInfoSchema,