linkshell-cli 0.10.38 → 0.10.40

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.
Files changed (45) hide show
  1. package/README.md +6 -2
  2. package/dist/cli/src/commands/host.d.ts +1 -1
  3. package/dist/cli/src/commands/host.js +4 -3
  4. package/dist/cli/src/commands/host.js.map +1 -1
  5. package/dist/cli/src/commands/upgrade-host.d.ts +2 -0
  6. package/dist/cli/src/commands/upgrade-host.js +62 -0
  7. package/dist/cli/src/commands/upgrade-host.js.map +1 -0
  8. package/dist/cli/src/commands/upgrade-worker.d.ts +9 -0
  9. package/dist/cli/src/commands/upgrade-worker.js +51 -0
  10. package/dist/cli/src/commands/upgrade-worker.js.map +1 -0
  11. package/dist/cli/src/commands/upgrade.d.ts +1 -1
  12. package/dist/cli/src/commands/upgrade.js +44 -47
  13. package/dist/cli/src/commands/upgrade.js.map +1 -1
  14. package/dist/cli/src/index.js +9 -3
  15. package/dist/cli/src/index.js.map +1 -1
  16. package/dist/cli/src/utils/daemon.d.ts +5 -1
  17. package/dist/cli/src/utils/daemon.js +60 -3
  18. package/dist/cli/src/utils/daemon.js.map +1 -1
  19. package/dist/cli/tsconfig.tsbuildinfo +1 -1
  20. package/dist/host/src/gateway.js +4 -2
  21. package/dist/host/src/gateway.js.map +1 -1
  22. package/dist/host/src/host.js +10 -0
  23. package/dist/host/src/host.js.map +1 -1
  24. package/dist/host/src/live-activities.d.ts +34 -0
  25. package/dist/host/src/live-activities.js +177 -0
  26. package/dist/host/src/live-activities.js.map +1 -0
  27. package/dist/host/src/rpc/server.d.ts +2 -0
  28. package/dist/host/src/rpc/server.js +10 -0
  29. package/dist/host/src/rpc/server.js.map +1 -1
  30. package/dist/wire/src/index.d.ts +1 -0
  31. package/dist/wire/src/index.js +1 -0
  32. package/dist/wire/src/index.js.map +1 -1
  33. package/dist/wire/src/live-activity.d.ts +205 -0
  34. package/dist/wire/src/live-activity.js +368 -0
  35. package/dist/wire/src/live-activity.js.map +1 -0
  36. package/dist/wire/src/rpc.d.ts +32 -0
  37. package/dist/wire/src/rpc.js +9 -0
  38. package/dist/wire/src/rpc.js.map +1 -1
  39. package/package.json +4 -4
  40. package/src/commands/host.ts +4 -3
  41. package/src/commands/upgrade-host.ts +63 -0
  42. package/src/commands/upgrade-worker.ts +49 -0
  43. package/src/commands/upgrade.ts +45 -54
  44. package/src/index.ts +9 -3
  45. package/src/utils/daemon.ts +50 -3
@@ -0,0 +1,205 @@
1
+ import { z } from "zod";
2
+ import type { PendingPermissionSummary, PermissionOption, SessionActivity, SessionSummary, TerminalInfo, ToolKind } from "./model.js";
3
+ export type AttentionPhase = "waiting_for_approval" | "waiting_for_input" | "failed" | "running" | "starting" | "completed" | "stale";
4
+ export declare const liveActivityActionSchema: z.ZodObject<{
5
+ id: z.ZodString;
6
+ label: z.ZodString;
7
+ role: z.ZodEnum<["allow", "reject", "always", "stop", "choice"]>;
8
+ kind: z.ZodEnum<["permission", "answer", "async-answer"]>;
9
+ computerKey: z.ZodString;
10
+ sessionId: z.ZodString;
11
+ requestId: z.ZodString;
12
+ optionId: z.ZodString;
13
+ questionId: z.ZodOptional<z.ZodString>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ kind: "answer" | "permission" | "async-answer";
16
+ id: string;
17
+ role: "stop" | "choice" | "reject" | "allow" | "always";
18
+ requestId: string;
19
+ optionId: string;
20
+ label: string;
21
+ sessionId: string;
22
+ computerKey: string;
23
+ questionId?: string | undefined;
24
+ }, {
25
+ kind: "answer" | "permission" | "async-answer";
26
+ id: string;
27
+ role: "stop" | "choice" | "reject" | "allow" | "always";
28
+ requestId: string;
29
+ optionId: string;
30
+ label: string;
31
+ sessionId: string;
32
+ computerKey: string;
33
+ questionId?: string | undefined;
34
+ }>;
35
+ export type LiveActivityAction = z.infer<typeof liveActivityActionSchema>;
36
+ export declare const liveActivityContentSchema: z.ZodObject<{
37
+ phase: z.ZodEnum<["waiting_for_approval", "waiting_for_input", "failed", "running", "starting", "completed", "stale"]>;
38
+ title: z.ZodString;
39
+ subtitle: z.ZodString;
40
+ project: z.ZodString;
41
+ agent: z.ZodString;
42
+ agents: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
43
+ actions: z.ZodOptional<z.ZodArray<z.ZodObject<{
44
+ id: z.ZodString;
45
+ label: z.ZodString;
46
+ role: z.ZodEnum<["allow", "reject", "always", "stop", "choice"]>;
47
+ kind: z.ZodEnum<["permission", "answer", "async-answer"]>;
48
+ computerKey: z.ZodString;
49
+ sessionId: z.ZodString;
50
+ requestId: z.ZodString;
51
+ optionId: z.ZodString;
52
+ questionId: z.ZodOptional<z.ZodString>;
53
+ }, "strip", z.ZodTypeAny, {
54
+ kind: "answer" | "permission" | "async-answer";
55
+ id: string;
56
+ role: "stop" | "choice" | "reject" | "allow" | "always";
57
+ requestId: string;
58
+ optionId: string;
59
+ label: string;
60
+ sessionId: string;
61
+ computerKey: string;
62
+ questionId?: string | undefined;
63
+ }, {
64
+ kind: "answer" | "permission" | "async-answer";
65
+ id: string;
66
+ role: "stop" | "choice" | "reject" | "allow" | "always";
67
+ requestId: string;
68
+ optionId: string;
69
+ label: string;
70
+ sessionId: string;
71
+ computerKey: string;
72
+ questionId?: string | undefined;
73
+ }>, "many">>;
74
+ hasMoreActions: z.ZodOptional<z.ZodBoolean>;
75
+ waitingCount: z.ZodNumber;
76
+ runningCount: z.ZodNumber;
77
+ failedCount: z.ZodNumber;
78
+ deepLink: z.ZodEffects<z.ZodString, string, string>;
79
+ }, "strip", z.ZodTypeAny, {
80
+ title: string;
81
+ agent: string;
82
+ phase: "completed" | "failed" | "running" | "waiting_for_approval" | "waiting_for_input" | "starting" | "stale";
83
+ subtitle: string;
84
+ project: string;
85
+ waitingCount: number;
86
+ runningCount: number;
87
+ failedCount: number;
88
+ deepLink: string;
89
+ agents?: string[] | undefined;
90
+ actions?: {
91
+ kind: "answer" | "permission" | "async-answer";
92
+ id: string;
93
+ role: "stop" | "choice" | "reject" | "allow" | "always";
94
+ requestId: string;
95
+ optionId: string;
96
+ label: string;
97
+ sessionId: string;
98
+ computerKey: string;
99
+ questionId?: string | undefined;
100
+ }[] | undefined;
101
+ hasMoreActions?: boolean | undefined;
102
+ }, {
103
+ title: string;
104
+ agent: string;
105
+ phase: "completed" | "failed" | "running" | "waiting_for_approval" | "waiting_for_input" | "starting" | "stale";
106
+ subtitle: string;
107
+ project: string;
108
+ waitingCount: number;
109
+ runningCount: number;
110
+ failedCount: number;
111
+ deepLink: string;
112
+ agents?: string[] | undefined;
113
+ actions?: {
114
+ kind: "answer" | "permission" | "async-answer";
115
+ id: string;
116
+ role: "stop" | "choice" | "reject" | "allow" | "always";
117
+ requestId: string;
118
+ optionId: string;
119
+ label: string;
120
+ sessionId: string;
121
+ computerKey: string;
122
+ questionId?: string | undefined;
123
+ }[] | undefined;
124
+ hasMoreActions?: boolean | undefined;
125
+ }>;
126
+ export type LiveActivityContentState = z.infer<typeof liveActivityContentSchema>;
127
+ export interface LiveActivityPayload extends Partial<LiveActivityContentState> {
128
+ active: boolean;
129
+ computerName: string;
130
+ computerKey?: string;
131
+ }
132
+ export declare const liveActivityIdSchema: z.ZodString;
133
+ export declare const liveActivitySubscriptionSchema: z.ZodObject<{
134
+ activityId: z.ZodString;
135
+ serviceUrl: z.ZodString;
136
+ grant: z.ZodString;
137
+ expiresAt: z.ZodNumber;
138
+ computerKey: z.ZodString;
139
+ }, "strip", z.ZodTypeAny, {
140
+ computerKey: string;
141
+ activityId: string;
142
+ serviceUrl: string;
143
+ grant: string;
144
+ expiresAt: number;
145
+ }, {
146
+ computerKey: string;
147
+ activityId: string;
148
+ serviceUrl: string;
149
+ grant: string;
150
+ expiresAt: number;
151
+ }>;
152
+ export type LiveActivitySubscription = z.infer<typeof liveActivitySubscriptionSchema>;
153
+ export declare function liveActivityContent(payload: LiveActivityPayload): LiveActivityContentState;
154
+ export declare const toolVerb: Record<ToolKind, string>;
155
+ /** Drops the agent's own English verb and wrapping backticks from a tool title. */
156
+ export declare function cleanToolTitle(title: string): string;
157
+ /** Drops the shell wrapper and environment prefixes agents put around a command. */
158
+ export declare function tidyCommand(command: string): string;
159
+ export declare function activityText(activity: SessionActivity | undefined): string;
160
+ export interface PermissionChoice {
161
+ option: PermissionOption;
162
+ label: string;
163
+ role: "allow" | "always" | "reject" | "stop";
164
+ }
165
+ /** Localized permission choices, in the order: reject, allow, then the rest. */
166
+ export declare function permissionChoices(options: PermissionOption[]): PermissionChoice[];
167
+ export declare function sessionTitle(session: Pick<SessionSummary, "title">): string;
168
+ /** Markdown flattened to one line of plain text, for list previews. */
169
+ export declare function plainPreview(text: string): string;
170
+ /** Async questions need attention even while the agent keeps working. */
171
+ export declare function needsUserInput(session: SessionSummary): boolean;
172
+ export declare function needsAttention(session: SessionSummary): boolean;
173
+ /**
174
+ * A start command as a one-line title. The UI font has no Nerd Font glyphs
175
+ * (private-use code points), which would show as boxes; the terminal itself
176
+ * draws them with its symbol font.
177
+ */
178
+ export declare function commandTitle(command: string): string;
179
+ /** How a terminal reads in a list: its title, what it's doing, and whether it has ended. */
180
+ export declare function terminalState(terminal: TerminalInfo): {
181
+ title: string;
182
+ mono: boolean;
183
+ ended: boolean;
184
+ busy: boolean;
185
+ failed: boolean;
186
+ detail: string;
187
+ };
188
+ /** Classify a session into the 7-phase attention hierarchy (t3code model). */
189
+ export declare function classifySessionPhase(session: SessionSummary, online?: boolean): AttentionPhase;
190
+ export declare function phasePriority(phase: AttentionPhase): number;
191
+ export declare function liveActivityActions(session: SessionSummary, computerKey: string): {
192
+ actions: LiveActivityAction[];
193
+ hasMoreActions: boolean;
194
+ };
195
+ /** Recheck against the connected host after waking the app, not the cached card. */
196
+ export declare function isLiveActivityActionCurrent(action: LiveActivityAction, computerKey: string, session: SessionSummary | undefined, permissions?: PendingPermissionSummary[]): boolean;
197
+ export declare function liveActivityDetailLink(computerKey: string, kind: "session" | "terminal", id: string): string;
198
+ /**
199
+ * Builds the aggregated single-card iOS Live Activity / Dynamic Island payload
200
+ * for a computer. New progress brings its task and agent to the front together.
201
+ */
202
+ export declare function buildLiveActivitySnapshot(computerName: string, sessions: SessionSummary[], terminals: TerminalInfo[], online: boolean, computerKey?: string, goals?: Record<string, {
203
+ status: string;
204
+ objective: string;
205
+ }>): LiveActivityPayload;
@@ -0,0 +1,368 @@
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 liveActivityContentSchema = z.object({
11
+ phase: z.enum(["waiting_for_approval", "waiting_for_input", "failed", "running", "starting", "completed", "stale"]),
12
+ title: z.string().max(160), subtitle: z.string().max(360), project: z.string().max(160),
13
+ agent: z.string().max(80), agents: z.array(z.string().max(80)).max(12).optional(),
14
+ actions: z.array(liveActivityActionSchema).max(3).optional(), hasMoreActions: z.boolean().optional(),
15
+ waitingCount: z.number().int().min(0), runningCount: z.number().int().min(0), failedCount: z.number().int().min(0),
16
+ deepLink: z.string().max(2048).refine((url) => url.startsWith("linkshell:///")),
17
+ });
18
+ export const liveActivityIdSchema = z.string().min(1).max(128).regex(/^[a-zA-Z0-9-]+$/);
19
+ export const liveActivitySubscriptionSchema = z.object({
20
+ activityId: liveActivityIdSchema,
21
+ serviceUrl: z.string().url().max(256),
22
+ grant: z.string().regex(/^[a-f0-9]{64}$/),
23
+ expiresAt: z.number().int().positive(),
24
+ computerKey: z.string().min(1).max(512),
25
+ });
26
+ // ActivityKit accepts at most 4 KB. Preserve request identifiers exactly; drop
27
+ // whole buttons when necessary, so a truncated choice can never be submitted.
28
+ export function liveActivityContent(payload) {
29
+ const cut = (value, max) => [...(value ?? "")].slice(0, max).join("");
30
+ const actions = (payload.actions ?? []).filter((action) => liveActivityActionSchema.safeParse(action).success);
31
+ const state = {
32
+ phase: payload.phase ?? "completed", title: cut(payload.title, 80), subtitle: cut(payload.subtitle, 180),
33
+ project: cut(payload.project, 80), agent: cut(payload.agent, 40),
34
+ agents: payload.agents?.filter((id) => id.length <= 80).slice(0, 12),
35
+ actions, hasMoreActions: payload.hasMoreActions || actions.length !== (payload.actions ?? []).length,
36
+ waitingCount: payload.waitingCount ?? 0, runningCount: payload.runningCount ?? 0, failedCount: payload.failedCount ?? 0,
37
+ deepLink: payload.deepLink && payload.deepLink.length <= 2048 ? payload.deepLink : "linkshell:///",
38
+ };
39
+ const size = () => new TextEncoder().encode(JSON.stringify(state)).length;
40
+ while (size() > 3500 && state.actions.length) {
41
+ state.actions.pop();
42
+ state.hasMoreActions = true;
43
+ }
44
+ if (size() > 3500) {
45
+ state.subtitle = cut(state.subtitle, 60);
46
+ state.project = "";
47
+ state.agents = state.agents?.slice(0, 3);
48
+ }
49
+ if (size() > 3500)
50
+ state.deepLink = "linkshell:///";
51
+ return state;
52
+ }
53
+ export const toolVerb = {
54
+ read: "读取",
55
+ edit: "编辑",
56
+ delete: "删除",
57
+ move: "移动",
58
+ search: "搜索",
59
+ execute: "运行",
60
+ think: "思考",
61
+ fetch: "获取",
62
+ switch_mode: "切换模式",
63
+ other: "",
64
+ };
65
+ 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;
66
+ /** Drops the agent's own English verb and wrapping backticks from a tool title. */
67
+ export function cleanToolTitle(title) {
68
+ return title.replace(ENGLISH_VERB, "").replace(/^`(.+)`$/s, "$1").trim();
69
+ }
70
+ /** Drops the shell wrapper and environment prefixes agents put around a command. */
71
+ export function tidyCommand(command) {
72
+ let text = unwrapShellCommand(command).trim();
73
+ // "export TZ=…;", "TZ=… cmd", "cd dir &&" are noise on a phone.
74
+ for (;;) {
75
+ const next = text
76
+ .replace(/^export\s+\w+=(?:'[^']*'|"[^"]*"|\S*)\s*(?:;|&&|\n)\s*/, "")
77
+ .replace(/^\w+=(?:'[^']*'|"[^"]*"|\S+)\s+(?=\S)/, "");
78
+ if (next === text)
79
+ break;
80
+ text = next;
81
+ }
82
+ return text || command;
83
+ }
84
+ export function activityText(activity) {
85
+ if (!activity)
86
+ return "正在运行…";
87
+ if (activity.kind === "thinking")
88
+ return "思考中…";
89
+ if (activity.kind === "responding")
90
+ return "正在回复…";
91
+ const verb = activity.toolKind ? toolVerb[activity.toolKind] : "";
92
+ const subject = activity.title ? (activity.toolKind === "execute" ? tidyCommand(cleanToolTitle(activity.title)) : cleanToolTitle(activity.title)) : "";
93
+ return [verb, subject].filter(Boolean).join(" ") || "正在使用工具…";
94
+ }
95
+ const choiceById = {
96
+ accept: { label: "允许", role: "allow" },
97
+ acceptForSession: { label: "本会话都允许", role: "always" },
98
+ decline: { label: "拒绝", role: "reject" },
99
+ cancel: { label: "拒绝并停止", role: "stop" },
100
+ turn: { label: "本轮允许", role: "allow" },
101
+ session: { label: "本会话都允许", role: "always" },
102
+ };
103
+ const choiceByKind = {
104
+ allow_once: { label: "允许", role: "allow" },
105
+ allow_always: { label: "总是允许", role: "always" },
106
+ reject_once: { label: "拒绝", role: "reject" },
107
+ reject_always: { label: "总是拒绝", role: "stop" },
108
+ };
109
+ /** Localized permission choices, in the order: reject, allow, then the rest. */
110
+ export function permissionChoices(options) {
111
+ const kinds = new Map();
112
+ for (const option of options)
113
+ kinds.set(option.kind, (kinds.get(option.kind) ?? 0) + 1);
114
+ const choices = options.map((option) => {
115
+ const known = choiceById[option.optionId];
116
+ if (known)
117
+ return { option, ...known };
118
+ const byKind = choiceByKind[option.kind];
119
+ // Two options of one kind: the agent's own names tell them apart.
120
+ return { option, label: (kinds.get(option.kind) ?? 0) > 1 ? option.name : byKind.label, role: byKind.role };
121
+ });
122
+ const order = ["reject", "allow", "always", "stop"];
123
+ return choices.sort((a, b) => order.indexOf(a.role) - order.indexOf(b.role));
124
+ }
125
+ export function sessionTitle(session) {
126
+ return session.title?.trim() || "新会话";
127
+ }
128
+ /** Markdown flattened to one line of plain text, for list previews. */
129
+ export function plainPreview(text) {
130
+ return text
131
+ .replace(/```[\s\S]*?```/g, " ")
132
+ .replace(/`([^`]*)`/g, "$1")
133
+ .replace(/!\[[^\]]*\]\([^)]*\)/g, "")
134
+ .replace(/\[([^\]]*)\]\([^)]*\)/g, "$1")
135
+ .replace(/^\s{0,3}(#{1,6}|>|[-*+]|\d+\.)\s+/gm, "")
136
+ .replace(/(^|\s)#{1,6}\s+/g, "$1")
137
+ .replace(/(\*\*|__|\*|_|~~)(\S(?:.*?\S)?)\1/g, "$2")
138
+ .replace(/\|/g, " ")
139
+ .replace(/\s+/g, " ")
140
+ // Previews arrive flattened: list bullets end up mid-line ("包括: - 一 - 二").
141
+ .replace(/([::。;;,,])\s*[-*•]\s+/g, "$1")
142
+ .replace(/\s[-*•]\s+(?=\S)/g, " · ")
143
+ .trim();
144
+ }
145
+ /** Async questions need attention even while the agent keeps working. */
146
+ export function needsUserInput(session) {
147
+ return !!session.permission?.questions?.length || !!session.asyncQuestions?.length;
148
+ }
149
+ export function needsAttention(session) {
150
+ return session.state === "waiting" || needsUserInput(session);
151
+ }
152
+ const SHELLS = /^-?(zsh|bash|sh|fish|dash|ksh|tcsh|nu|pwsh|powershell)\b/;
153
+ /**
154
+ * A start command as a one-line title. The UI font has no Nerd Font glyphs
155
+ * (private-use code points), which would show as boxes; the terminal itself
156
+ * draws them with its symbol font.
157
+ */
158
+ export function commandTitle(command) {
159
+ return command.replace(/[\uE000-\uF8FF\u{F0000}-\u{FFFFD}\u{100000}-\u{10FFFD}]/gu, "").replace(/\s+/g, " ").trim();
160
+ }
161
+ /** How a terminal reads in a list: its title, what it's doing, and whether it has ended. */
162
+ export function terminalState(terminal) {
163
+ const ended = terminal.exitCode !== undefined || terminal.interrupted === true;
164
+ const foreground = ended || SHELLS.test(terminal.title) ? undefined : terminal.title;
165
+ const failed = !terminal.interrupted && typeof terminal.exitCode === "number" && terminal.exitCode !== 0;
166
+ const detail = terminal.interrupted
167
+ ? "电脑重启时中断"
168
+ : ended
169
+ ? failed
170
+ ? `已退出 · 代码 ${terminal.exitCode}`
171
+ : "已结束"
172
+ : foreground
173
+ ? `正在运行 ${foreground}`
174
+ : "空闲";
175
+ return {
176
+ title: (terminal.command && commandTitle(terminal.command)) || "终端",
177
+ mono: Boolean(terminal.command),
178
+ ended,
179
+ busy: Boolean(foreground),
180
+ failed,
181
+ detail,
182
+ };
183
+ }
184
+ function baseName(path) {
185
+ const parts = path.split(/[\\/]/).filter(Boolean);
186
+ return parts[parts.length - 1] ?? path;
187
+ }
188
+ /** Classify a session into the 7-phase attention hierarchy (t3code model). */
189
+ export function classifySessionPhase(session, online = true) {
190
+ if (!online || session.state === "offline")
191
+ return "stale";
192
+ if (needsUserInput(session))
193
+ return "waiting_for_input";
194
+ if (session.state === "waiting" || needsAttention(session))
195
+ return "waiting_for_approval";
196
+ if (session.state === "error")
197
+ return "failed";
198
+ if (session.state === "running")
199
+ return "running";
200
+ if (session.state === "unknown")
201
+ return "starting";
202
+ return "completed";
203
+ }
204
+ export function phasePriority(phase) {
205
+ switch (phase) {
206
+ case "waiting_for_approval":
207
+ case "waiting_for_input":
208
+ return 0;
209
+ case "failed":
210
+ return 1;
211
+ case "running":
212
+ case "starting":
213
+ return 2;
214
+ case "completed":
215
+ return 3;
216
+ case "stale":
217
+ return 4;
218
+ }
219
+ }
220
+ export function liveActivityActions(session, computerKey) {
221
+ if (!computerKey)
222
+ return { actions: [], hasMoreActions: false };
223
+ const base = { computerKey, sessionId: session.id };
224
+ const permission = session.permission;
225
+ let choices;
226
+ let hasMoreActions = false;
227
+ if (permission) {
228
+ if (permission.url)
229
+ return { actions: [], hasMoreActions: true };
230
+ const questions = permission.questions;
231
+ if (questions?.length) {
232
+ const question = questions[0];
233
+ // A multi-select or form needs its own submit step; never submit a partial form.
234
+ if (questions.length !== 1 || question.kind !== "choice" || question.secret) {
235
+ return { actions: [], hasMoreActions: true };
236
+ }
237
+ choices = (question.options ?? []).map((option) => ({
238
+ ...base, id: `${permission.requestId}:${question.id}:${option.value}`, label: option.label,
239
+ role: "choice", kind: "answer", requestId: permission.requestId,
240
+ questionId: question.id, optionId: option.value,
241
+ }));
242
+ hasMoreActions = Boolean(question.other) || choices.length === 0;
243
+ }
244
+ else {
245
+ choices = permissionChoices(permission.options).map(({ option, label, role }) => ({
246
+ ...base, id: `${permission.requestId}:${option.optionId}`, label, role,
247
+ kind: "permission", requestId: permission.requestId, optionId: option.optionId,
248
+ }));
249
+ }
250
+ }
251
+ else {
252
+ const question = session.asyncQuestions?.[0];
253
+ if (!question)
254
+ return { actions: [], hasMoreActions: false };
255
+ choices = question.options.map((option, index) => ({
256
+ ...base, id: `${question.id}:${index}`, label: option, role: "choice",
257
+ kind: "async-answer", requestId: question.id, optionId: option,
258
+ }));
259
+ // Async questions always support a typed answer in the session.
260
+ hasMoreActions = true;
261
+ }
262
+ // Keep whole labels and the ActivityKit payload bounded. The title opens every choice.
263
+ const visible = choices.filter((choice) => [...choice.label].length <= 16 && choice.optionId.length <= 160).slice(0, 3);
264
+ return { actions: visible, hasMoreActions: hasMoreActions || visible.length < choices.length };
265
+ }
266
+ /** Recheck against the connected host after waking the app, not the cached card. */
267
+ export function isLiveActivityActionCurrent(action, computerKey, session, permissions = []) {
268
+ if (!session || session.archived || action.computerKey !== computerKey || action.sessionId !== session.id)
269
+ return false;
270
+ if (action.kind === "async-answer") {
271
+ return Boolean(session.asyncQuestions?.some((question) => question.id === action.requestId && question.options.includes(action.optionId)));
272
+ }
273
+ const request = permissions.find((item) => item.requestId === action.requestId)
274
+ ?? (session.permission?.requestId === action.requestId ? session.permission : undefined);
275
+ if (!request || request.url)
276
+ return false;
277
+ if (action.kind === "permission") {
278
+ return !request.questions?.length && request.options.some((option) => option.optionId === action.optionId);
279
+ }
280
+ if (action.kind !== "answer" || request.questions?.length !== 1)
281
+ return false;
282
+ const question = request.questions[0];
283
+ return question.id === action.questionId && question.kind === "choice" && !question.secret
284
+ && Boolean(question.options?.some((option) => option.value === action.optionId));
285
+ }
286
+ export function liveActivityDetailLink(computerKey, kind, id) {
287
+ if (!computerKey)
288
+ return `linkshell:///${kind}/${encodeURIComponent(id)}`;
289
+ return `linkshell:///activity?computer=${encodeURIComponent(computerKey)}&${kind}=${encodeURIComponent(id)}`;
290
+ }
291
+ /**
292
+ * Builds the aggregated single-card iOS Live Activity / Dynamic Island payload
293
+ * for a computer. New progress brings its task and agent to the front together.
294
+ */
295
+ export function buildLiveActivitySnapshot(computerName, sessions, terminals, online, computerKey = "", goals = {}) {
296
+ const live = sessions.filter((s) => !s.archived);
297
+ const waiting = live.filter((s) => needsAttention(s));
298
+ const failed = live.filter((s) => !needsAttention(s) && s.state === "error");
299
+ const runningSessions = live.filter((s) => !needsAttention(s) && s.state === "running");
300
+ const busyTerminals = terminals.filter((t) => terminalState(t).busy)
301
+ .sort((a, b) => b.activeAt - a.activeAt || a.id.localeCompare(b.id));
302
+ const runningCount = runningSessions.length + busyTerminals.length;
303
+ const candidates = [...waiting, ...failed, ...runningSessions].sort((a, b) => {
304
+ if (a.updatedAt !== b.updatedAt)
305
+ return b.updatedAt - a.updatedAt;
306
+ const pa = phasePriority(classifySessionPhase(a, online));
307
+ const pb = phasePriority(classifySessionPhase(b, online));
308
+ if (pa !== pb)
309
+ return pa - pb;
310
+ return a.id.localeCompare(b.id);
311
+ });
312
+ const hero = candidates[0];
313
+ if (!hero && busyTerminals.length === 0) {
314
+ return { active: false, computerName };
315
+ }
316
+ // Keep the featured task first; one icon represents every task using the same agent.
317
+ const agents = [...new Set([
318
+ ...candidates.map((session) => ({ agent: session.agent, at: session.updatedAt })),
319
+ ...busyTerminals.map((terminal) => ({ agent: "terminal", at: terminal.activeAt })),
320
+ ].sort((a, b) => b.at - a.at).map((item) => item.agent))];
321
+ if (hero && (!busyTerminals[0] || hero.updatedAt >= busyTerminals[0].activeAt)) {
322
+ const phase = classifySessionPhase(hero, online);
323
+ const heroGoal = goals[hero.id];
324
+ const subtitle = phase === "waiting_for_approval" || phase === "waiting_for_input"
325
+ ? hero.permission?.title ?? hero.asyncQuestions?.[0]?.title ?? "需要你的确认"
326
+ : phase === "failed"
327
+ ? hero.preview
328
+ ? plainPreview(hero.preview)
329
+ : "上一轮执行出错"
330
+ : heroGoal?.status === "active" && !hero.activity
331
+ ? `目标 · ${heroGoal.objective}`
332
+ : hero.activity?.kind === "responding" && hero.preview
333
+ ? plainPreview(hero.preview)
334
+ : activityText(hero.activity);
335
+ return {
336
+ active: true,
337
+ computerName,
338
+ phase,
339
+ title: sessionTitle(hero),
340
+ subtitle,
341
+ project: baseName(hero.worktree?.source ?? hero.cwd),
342
+ agent: hero.agent,
343
+ agents,
344
+ ...(online ? liveActivityActions(hero, computerKey) : { actions: [], hasMoreActions: false }),
345
+ waitingCount: waiting.length,
346
+ runningCount,
347
+ failedCount: failed.length,
348
+ deepLink: liveActivityDetailLink(computerKey, "session", hero.id),
349
+ };
350
+ }
351
+ const busy = busyTerminals[0];
352
+ const tState = terminalState(busy);
353
+ return {
354
+ active: true,
355
+ computerName,
356
+ phase: online ? "running" : "stale",
357
+ title: tState.title || "终端运行中",
358
+ subtitle: tState.detail || baseName(busy.cwd),
359
+ project: baseName(busy.cwd),
360
+ agent: "terminal",
361
+ agents,
362
+ waitingCount: waiting.length,
363
+ runningCount,
364
+ failedCount: failed.length,
365
+ deepLink: liveActivityDetailLink(computerKey, "terminal", busy.id),
366
+ };
367
+ }
368
+ //# 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<{