@linkshell/wire 0.2.7 → 0.2.9

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/updates.js CHANGED
@@ -1,46 +1,13 @@
1
1
  import { z } from "zod";
2
+ import { asyncQuestionSchema } from "./async-questions.js";
2
3
  import { sessionGoalSchema } from "./goal.js";
3
4
  import { backgroundTaskSchema, permissionOptionSchema, questionAnswerSchema, questionSchema, sessionDriverSchema, sessionStateSchema, toolKindSchema } from "./model.js";
5
+ import { contentBlockSchema, toolCallContentSchema, toolCallStatusSchema } from "./content.js";
6
+ export * from "./content.js";
4
7
  import { workflowAgentStateSchema, workflowSchema } from "./workflow.js";
5
8
  // Session updates mirror ACP's `SessionUpdate` shapes (discriminated by
6
9
  // `sessionUpdate`) so one renderer works for every agent. LinkShell-specific
7
10
  // updates use the `ls_` prefix.
8
- export const contentBlockSchema = z.discriminatedUnion("type", [
9
- z.object({ type: z.literal("text"), text: z.string() }),
10
- z.object({
11
- type: z.literal("image"),
12
- mimeType: z.string(),
13
- data: z.string().optional(),
14
- uri: z.string().optional(),
15
- }),
16
- z.object({
17
- type: z.literal("resource_link"),
18
- uri: z.string(),
19
- name: z.string(),
20
- /** What the link names: a file (default), a skill the user invoked, or another agent. */
21
- kind: z.enum(["file", "skill", "agent"]).optional(),
22
- }),
23
- ]);
24
- export const toolCallStatusSchema = z.enum(["pending", "in_progress", "completed", "failed"]);
25
- export const toolCallContentSchema = z.discriminatedUnion("type", [
26
- z.object({ type: z.literal("content"), content: contentBlockSchema }),
27
- /** ACP diff: full before/after text. */
28
- z.object({
29
- type: z.literal("diff"),
30
- path: z.string(),
31
- oldText: z.string().nullable().optional(),
32
- newText: z.string(),
33
- }),
34
- /** Unified diff, for agents (Codex) that report patches rather than file text. */
35
- z.object({
36
- type: z.literal("patch"),
37
- path: z.string(),
38
- change: z.enum(["add", "delete", "update"]),
39
- movePath: z.string().optional(),
40
- diff: z.string(),
41
- }),
42
- z.object({ type: z.literal("terminal"), terminalId: z.string() }),
43
- ]);
44
11
  export const toolCallLocationSchema = z.object({
45
12
  path: z.string(),
46
13
  line: z.number().int().optional(),
@@ -61,6 +28,8 @@ export const toolDetailSchema = z.discriminatedUnion("type", [
61
28
  agentType: z.string().optional(),
62
29
  /** A named agent's address, distinct from its role. */
63
30
  name: z.string().optional(),
31
+ nativeSessionId: z.string().optional(),
32
+ canCancel: z.boolean().optional(),
64
33
  model: z.string().optional(),
65
34
  /** Agent outcome when a tool's coarse completed/failed state is insufficient. */
66
35
  state: workflowAgentStateSchema.optional(),
@@ -80,16 +49,26 @@ export const planEntrySchema = z.object({
80
49
  priority: z.enum(["high", "medium", "low"]).default("medium"),
81
50
  status: z.enum(["pending", "in_progress", "completed"]),
82
51
  });
83
- export const stopReasonSchema = z.enum(["end_turn", "cancelled", "error", "max_tokens", "refusal"]);
52
+ export const stopReasonSchema = z.enum(["end_turn", "cancelled", "error", "max_tokens", "max_turn_requests", "refusal", "unknown"]);
84
53
  export const sessionConfigOptionSchema = z.object({
85
54
  /** Agent-defined id; "model" and "mode" are the common ones. */
86
55
  id: z.string(),
87
56
  name: z.string(),
88
- category: z.enum(["model", "mode", "effort", "other"]).default("other"),
57
+ description: z.string().optional(),
58
+ type: z.enum(["select", "boolean"]).optional(),
59
+ category: z.enum(["model", "model_config", "mode", "effort", "other"]).default("other"),
89
60
  current: z.string(),
90
- values: z.array(z.object({ value: z.string(), name: z.string(), description: z.string().optional() })),
61
+ values: z.array(z.object({ value: z.string(), name: z.string(), description: z.string().optional(), group: z.string().optional() })),
91
62
  });
92
63
  export const sessionUpdateSchema = z.discriminatedUnion("sessionUpdate", [
64
+ z.object({
65
+ sessionUpdate: z.literal("ls_message"),
66
+ messageId: z.string(), role: z.enum(["user", "agent", "thought", "session"]),
67
+ parentToolCallId: z.string().optional(),
68
+ content: z.array(contentBlockSchema).optional(),
69
+ append: z.boolean().optional(),
70
+ senderSessionId: z.string().optional(), recipientSessionId: z.string().optional(),
71
+ }),
93
72
  z.object({
94
73
  sessionUpdate: z.literal("user_message_chunk"),
95
74
  messageId: z.string().optional(),
@@ -113,9 +92,11 @@ export const sessionUpdateSchema = z.discriminatedUnion("sessionUpdate", [
113
92
  /** Set when a sub-agent made this call: the sub-agent's own (spawn) tool call. */
114
93
  parentToolCallId: z.string().optional(),
115
94
  title: z.string(),
95
+ name: z.string().optional(),
116
96
  kind: toolKindSchema,
117
97
  status: toolCallStatusSchema,
118
98
  rawInput: z.unknown().optional(),
99
+ rawOutput: z.unknown().optional(),
119
100
  content: z.array(toolCallContentSchema).optional(),
120
101
  locations: z.array(toolCallLocationSchema).optional(),
121
102
  detail: toolDetailSchema.optional(),
@@ -126,16 +107,28 @@ export const sessionUpdateSchema = z.discriminatedUnion("sessionUpdate", [
126
107
  parentToolCallId: z.string().optional(),
127
108
  status: toolCallStatusSchema.optional(),
128
109
  title: z.string().optional(),
110
+ name: z.string().optional(),
111
+ kind: toolKindSchema.optional(),
112
+ rawInput: z.unknown().optional(),
113
+ locations: z.array(toolCallLocationSchema).optional(),
129
114
  detail: toolDetailSchema.optional(),
130
115
  /** Replaces the tool call's content when present. */
131
116
  content: z.array(toolCallContentSchema).optional(),
132
117
  /** Streamed output appended to the tool call's running output. */
133
118
  appendOutput: z.string().optional(),
119
+ replaceOutput: z.string().optional(),
120
+ /** ACP v2 null/empty content clears every previous diff and attachment. */
121
+ replaceContent: z.boolean().optional(),
134
122
  rawOutput: z.unknown().optional(),
135
123
  }),
136
124
  z.object({
137
125
  sessionUpdate: z.literal("plan"),
138
126
  entries: z.array(planEntrySchema),
127
+ planId: z.string().optional(),
128
+ title: z.string().optional(),
129
+ markdown: z.string().nullable().optional(),
130
+ path: z.string().nullable().optional(),
131
+ removed: z.boolean().optional(),
139
132
  }),
140
133
  z.object({
141
134
  sessionUpdate: z.literal("ls_goal"),
@@ -151,15 +144,22 @@ export const sessionUpdateSchema = z.discriminatedUnion("sessionUpdate", [
151
144
  }),
152
145
  z.object({
153
146
  sessionUpdate: z.literal("session_info_update"),
154
- title: z.string().optional(),
147
+ title: z.string().nullable().optional(),
148
+ updatedAt: z.string().nullable().optional(),
155
149
  model: z.string().optional(),
156
150
  }),
157
151
  z.object({
158
152
  sessionUpdate: z.literal("usage_update"),
159
153
  usedTokens: z.number().optional(),
160
154
  contextWindow: z.number().optional(),
155
+ cost: z.object({ amount: z.number(), currency: z.string() }).nullable().optional(),
156
+ tokens: z.object({ totalTokens: z.number(), inputTokens: z.number(), outputTokens: z.number(), thoughtTokens: z.number().nullish(), cachedReadTokens: z.number().nullish(), cachedWriteTokens: z.number().nullish() }).optional(),
161
157
  }),
162
158
  // ── LinkShell extensions ──
159
+ z.object({
160
+ sessionUpdate: z.literal("ls_async_questions"),
161
+ questions: z.array(asyncQuestionSchema),
162
+ }),
163
163
  z.object({
164
164
  sessionUpdate: z.literal("ls_message_done"),
165
165
  parentToolCallId: z.string().optional(),
@@ -170,7 +170,7 @@ export const sessionUpdateSchema = z.discriminatedUnion("sessionUpdate", [
170
170
  * `request_user_input_async`): answered by an ordinary message that quotes
171
171
  * them (`asyncQuestionReply`). An app that predates them shows the text only.
172
172
  */
173
- questions: z.array(z.object({ id: z.string(), title: z.string(), options: z.array(z.string()) })).optional(),
173
+ questions: z.array(asyncQuestionSchema).optional(),
174
174
  }),
175
175
  /** Selectable session settings (model, permission mode, effort…) as the agent reports them. */
176
176
  z.object({
@@ -194,9 +194,13 @@ export const sessionUpdateSchema = z.discriminatedUnion("sessionUpdate", [
194
194
  z.object({
195
195
  sessionUpdate: z.literal("ls_permission"),
196
196
  requestId: z.string(),
197
+ childSessionId: z.string().optional(),
197
198
  toolCallId: z.string().optional(),
198
199
  title: z.string(),
199
200
  detail: z.string().optional(),
201
+ tool: z.object({ title: z.string().optional(), kind: toolKindSchema.optional(), rawInput: z.unknown().optional(), content: z.array(toolCallContentSchema).optional(), locations: z.array(toolCallLocationSchema).optional() }).optional(),
202
+ /** URL interactions stay out of form answers and are opened only after consent. */
203
+ url: z.object({ url: z.string(), elicitationId: z.string() }).optional(),
200
204
  options: z.array(permissionOptionSchema).min(1),
201
205
  /**
202
206
  * The agent is asking the user something: answer with `sessions.answer`.
@@ -220,6 +224,7 @@ export const sessionUpdateSchema = z.discriminatedUnion("sessionUpdate", [
220
224
  z.object({
221
225
  sessionUpdate: z.literal("ls_status"),
222
226
  state: sessionStateSchema,
227
+ turnActive: z.boolean().optional(),
223
228
  }),
224
229
  /** A background task as it is now (the whole record each time: the latest for its id holds). */
225
230
  z.object({
@@ -233,6 +238,8 @@ export const sessionUpdateSchema = z.discriminatedUnion("sessionUpdate", [
233
238
  hint: z.string().optional(),
234
239
  }),
235
240
  ]);
241
+ /** Live ACP notices are not session history and never change execution state. */
242
+ export const sessionNoticeSchema = z.object({ severity: z.string(), title: z.string(), description: z.string().optional() });
236
243
  /** One entry in a session's append-only event log. */
237
244
  export const sessionEventSchema = z.object({
238
245
  sessionId: z.string(),
@@ -1 +1 @@
1
- {"version":3,"file":"updates.js","sourceRoot":"","sources":["../src/updates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updates.js","sourceRoot":"","sources":["../src/updates.ts"],"names":[],"mappings":"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"}
@@ -126,6 +126,7 @@ export declare const workflowSchema: z.ZodObject<{
126
126
  result?: string | undefined;
127
127
  }>, "many">>;
128
128
  }, "strip", z.ZodTypeAny, {
129
+ name?: string | undefined;
129
130
  completed?: number | undefined;
130
131
  state?: "paused" | "running" | "completed" | "failed" | "stopped" | undefined;
131
132
  tokens?: number | undefined;
@@ -133,7 +134,6 @@ export declare const workflowSchema: z.ZodObject<{
133
134
  startedAt?: number | undefined;
134
135
  endedAt?: number | undefined;
135
136
  runId?: string | undefined;
136
- name?: string | undefined;
137
137
  started?: number | undefined;
138
138
  phases?: {
139
139
  id: string;
@@ -155,6 +155,7 @@ export declare const workflowSchema: z.ZodObject<{
155
155
  result?: string | undefined;
156
156
  }[] | undefined;
157
157
  }, {
158
+ name?: string | undefined;
158
159
  completed?: number | undefined;
159
160
  state?: "paused" | "running" | "completed" | "failed" | "stopped" | undefined;
160
161
  tokens?: number | undefined;
@@ -162,7 +163,6 @@ export declare const workflowSchema: z.ZodObject<{
162
163
  startedAt?: number | undefined;
163
164
  endedAt?: number | undefined;
164
165
  runId?: string | undefined;
165
- name?: string | undefined;
166
166
  started?: number | undefined;
167
167
  phases?: {
168
168
  id: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@linkshell/wire",
3
- "version": "0.2.7",
3
+ "version": "0.2.9",
4
4
  "description": "Wire protocol for LinkShell v2: session model, JSON-RPC methods, end-to-end encryption and the relay client.",
5
5
  "license": "MIT",
6
6
  "repository": {
package/src/acp.ts ADDED
@@ -0,0 +1,49 @@
1
+ import { z } from "zod";
2
+
3
+ const env = z.record(z.string());
4
+ export const mcpServerSchema = z.discriminatedUnion("type", [
5
+ z.object({ type: z.literal("stdio"), name: z.string().min(1), command: z.string().min(1), args: z.array(z.string()).default([]), env: env.default({}) }),
6
+ z.object({ type: z.literal("http"), name: z.string().min(1), url: z.string().url(), headers: env.default({}) }),
7
+ z.object({ type: z.literal("sse"), name: z.string().min(1), url: z.string().url(), headers: env.default({}) }),
8
+ z.object({ type: z.literal("acp"), name: z.string().min(1), command: z.string().min(1), args: z.array(z.string()).default([]), env: env.default({}) }),
9
+ ]);
10
+ export type AcpMcpServer = z.infer<typeof mcpServerSchema>;
11
+
12
+ /** Session tool configuration is persisted on the host, outside the transcript. */
13
+ export const acpAgentSettingsSchema = z.object({
14
+ protocolVersion: z.union([z.literal(1), z.literal(2)]).default(1),
15
+ experimental: z.boolean().default(true),
16
+ mcpServers: z.array(mcpServerSchema).max(32).default([]),
17
+ additionalDirectories: z.array(z.string().min(1)).max(32).default([]),
18
+ });
19
+ export type AcpAgentSettings = z.infer<typeof acpAgentSettingsSchema>;
20
+
21
+ export const acpRemoteAgentSchema = z.object({
22
+ id: z.string().regex(/^[a-z][a-z0-9_-]{0,63}$/),
23
+ label: z.string().min(1).max(80),
24
+ transport: z.enum(["stdio", "http", "websocket"]),
25
+ command: z.string().optional(), args: z.array(z.string()).default([]),
26
+ url: z.string().url().optional(),
27
+ /** Header name to environment-variable name. The UI does not store secrets. */
28
+ headerEnv: env.default({}),
29
+ settings: acpAgentSettingsSchema.default({}),
30
+ });
31
+ export type AcpRemoteAgent = z.infer<typeof acpRemoteAgentSchema>;
32
+
33
+ export const acpAuthMethodSchema = z.object({ id: z.string(), name: z.string(), description: z.string().optional(), type: z.enum(["agent", "terminal"]) });
34
+ export const acpFeaturesSchema = z.object({
35
+ protocolVersion: z.number(),
36
+ authMethods: z.array(acpAuthMethodSchema),
37
+ logout: z.boolean(), providers: z.boolean(), nes: z.boolean(),
38
+ additionalDirectories: z.boolean(), mcpHttp: z.boolean(), mcpSse: z.boolean(),
39
+ });
40
+ export type AcpFeatures = z.infer<typeof acpFeaturesSchema>;
41
+
42
+ export const acpProviderSchema = z.object({
43
+ providerId: z.string(), supported: z.array(z.string()), required: z.boolean(),
44
+ current: z.object({ apiType: z.string(), baseUrl: z.string() }).nullish(),
45
+ });
46
+ export type AcpProvider = z.infer<typeof acpProviderSchema>;
47
+
48
+ /** Editor payloads follow ACP's versioned schema; the host validates before forwarding. */
49
+ export const acpEditorOperationSchema = z.enum(["nes/start", "nes/suggest", "nes/close", "nes/accept", "nes/reject", "document/didOpen", "document/didChange", "document/didClose", "document/didSave", "document/didFocus"]);
@@ -0,0 +1,69 @@
1
+ import { z } from "zod";
2
+ import type { SessionUpdate } from "./updates.js";
3
+
4
+ /** A question an agent's message asks without stopping its turn; `id` is what the answer quotes. */
5
+ export const asyncQuestionSchema = z.object({ id: z.string(), title: z.string(), options: z.array(z.string()) });
6
+ export type AsyncQuestion = z.infer<typeof asyncQuestionSchema>;
7
+
8
+ /**
9
+ * The message that answers async questions, as Codex Desktop writes it: the
10
+ * agent reads it as the answer, and Desktop (and this app) shows it as one.
11
+ */
12
+ export function asyncQuestionReply(answers: { question: AsyncQuestion; answer: string }[]): string {
13
+ const entries = answers.map(({ question, answer }) => ({ questionItemId: question.id, question: question.title, answer }));
14
+ return `<send_user_message_question_reply>\n${JSON.stringify(entries)}\n</send_user_message_question_reply>\n`;
15
+ }
16
+
17
+ export interface QuestionReply {
18
+ /** The question's id, where the reply names it. */
19
+ id?: string;
20
+ question: string;
21
+ answer: string;
22
+ }
23
+
24
+ /**
25
+ * The answers in a reply to async questions, as Codex Desktop writes one (and shows it: each question with
26
+ * its answer). Anything that isn't exactly the envelope is not a reply.
27
+ */
28
+ export function questionReplies(text: string): QuestionReply[] | undefined {
29
+ const match = /^<send_user_message_question_reply>\s*([\s\S]+?)\s*<\/send_user_message_question_reply>$/.exec(text.replace(/\r\n/g, "\n").trim());
30
+ if (!match) return undefined;
31
+ let parsed: unknown;
32
+ try {
33
+ parsed = JSON.parse(match[1]!);
34
+ } catch {
35
+ return undefined;
36
+ }
37
+ const entries = Array.isArray(parsed) ? parsed : [parsed];
38
+ if (entries.length === 0) return undefined;
39
+ const replies: QuestionReply[] = [];
40
+ for (const entry of entries) {
41
+ if (!entry || typeof entry !== "object") return undefined;
42
+ const { questionItemId, question, answer } = entry as Record<string, unknown>;
43
+ if (typeof question !== "string" || typeof answer !== "string") return undefined;
44
+ replies.push({ ...(typeof questionItemId === "string" ? { id: questionItemId } : {}), question: question.trim(), answer: answer.trim() });
45
+ }
46
+ return replies;
47
+ }
48
+
49
+ /** What a message answers, by question id, if it is such a reply. */
50
+ export function answeredQuestions(text: string): [id: string, answer: string][] {
51
+ return (questionReplies(text) ?? []).flatMap((reply): [string, string][] => (reply.id ? [[reply.id, reply.answer]] : []));
52
+ }
53
+
54
+ /** Keeps attention separate from running: async questions do not stop the agent. */
55
+ export function updateAsyncQuestions(pending: AsyncQuestion[], update: SessionUpdate): AsyncQuestion[] {
56
+ if ("parentToolCallId" in update && update.parentToolCallId) return pending;
57
+ if (update.sessionUpdate === "ls_async_questions") return update.questions;
58
+ if (update.sessionUpdate === "ls_turn") return [];
59
+ if (update.sessionUpdate === "ls_message_done" && update.role === "agent" && update.questions?.length) {
60
+ const merged = new Map(pending.map((question) => [question.id, question]));
61
+ for (const question of update.questions) merged.set(question.id, question);
62
+ return [...merged.values()];
63
+ }
64
+ if (update.sessionUpdate === "user_message_chunk" && update.content.type === "text") {
65
+ const answered = new Set(answeredQuestions(update.content.text).map(([id]) => id));
66
+ if (answered.size) return pending.filter((question) => !answered.has(question.id));
67
+ }
68
+ return pending;
69
+ }
package/src/content.ts ADDED
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+
3
+ const optionalString = z.string().nullish().transform((value) => value ?? undefined);
4
+ const optionalMeta = z.record(z.unknown()).nullish().transform((value) => value ?? undefined);
5
+ const contentMetadata = {
6
+ annotations: z.object({ audience: z.array(z.enum(["user", "assistant"])).nullish().transform((value) => value ?? undefined), priority: z.number().nullish().transform((value) => value ?? undefined), lastModified: optionalString }).passthrough().nullish().transform((value) => value ?? undefined),
7
+ _meta: optionalMeta,
8
+ };
9
+ const contentVariants = z.discriminatedUnion("type", [
10
+ z.object({ type: z.literal("text"), text: z.string(), ...contentMetadata }),
11
+ z.object({
12
+ type: z.literal("image"),
13
+ mimeType: z.string(),
14
+ data: optionalString,
15
+ uri: optionalString,
16
+ ...contentMetadata,
17
+ }),
18
+ z.object({ type: z.literal("audio"), mimeType: z.string(), data: optionalString, uri: optionalString, ...contentMetadata }),
19
+ z.object({
20
+ type: z.literal("resource"),
21
+ resource: z.object({ uri: z.string(), mimeType: optionalString, text: optionalString, blob: optionalString, assetUri: optionalString, _meta: optionalMeta }),
22
+ ...contentMetadata,
23
+ }),
24
+ z.object({
25
+ type: z.literal("resource_link"),
26
+ uri: z.string(),
27
+ name: z.string(),
28
+ title: optionalString,
29
+ description: optionalString,
30
+ mimeType: optionalString,
31
+ size: z.number().nullish().transform((value) => value ?? undefined),
32
+ ...contentMetadata,
33
+ /** What the link names: a file (default), a skill the user invoked, or another agent. */
34
+ kind: z.enum(["file", "skill", "agent"]).optional(),
35
+ }),
36
+ ]);
37
+ export type ContentBlock = z.infer<typeof contentVariants>;
38
+ // Hide the nested validator implementation from every exported RPC declaration.
39
+ export const contentBlockSchema: z.ZodType<ContentBlock, z.ZodTypeDef, unknown> = contentVariants;
40
+
41
+ export const toolCallStatusSchema = z.enum(["pending", "in_progress", "completed", "failed"]);
42
+ export type ToolCallStatus = z.infer<typeof toolCallStatusSchema>;
43
+
44
+ export const toolCallContentSchema = z.discriminatedUnion("type", [
45
+ z.object({ type: z.literal("content"), content: contentBlockSchema }),
46
+ /** ACP diff: full before/after text. */
47
+ z.object({
48
+ type: z.literal("diff"),
49
+ path: z.string(),
50
+ oldText: z.string().nullable().optional(),
51
+ newText: z.string(),
52
+ }),
53
+ /** Unified diff, for agents (Codex) that report patches rather than file text. */
54
+ z.object({
55
+ type: z.literal("patch"),
56
+ path: z.string(),
57
+ change: z.enum(["add", "delete", "update"]),
58
+ movePath: z.string().optional(),
59
+ diff: z.string(),
60
+ }),
61
+ z.object({ type: z.literal("terminal"), terminalId: z.string() }),
62
+ ]);
63
+ export type ToolCallContent = z.infer<typeof toolCallContentSchema>;
package/src/editor.ts ADDED
@@ -0,0 +1,27 @@
1
+ import { z } from "zod";
2
+
3
+ export const textPositionSchema = z.object({ line: z.number().int().nonnegative(), character: z.number().int().nonnegative() });
4
+ export const textRangeSchema = z.object({ start: textPositionSchema, end: textPositionSchema });
5
+ export type TextPosition = z.infer<typeof textPositionSchema>;
6
+ const suggestion = { id: z.string(), uri: z.string() };
7
+ export const editSuggestionSchema = z.discriminatedUnion("kind", [
8
+ z.object({ kind: z.literal("edit"), ...suggestion, edits: z.array(z.object({ range: textRangeSchema, newText: z.string() })), cursorPosition: textPositionSchema.nullish() }),
9
+ z.object({ kind: z.literal("jump"), ...suggestion, position: textPositionSchema }),
10
+ z.object({ kind: z.literal("rename"), ...suggestion, position: textPositionSchema, newName: z.string() }),
11
+ z.object({ kind: z.literal("searchAndReplace"), ...suggestion, search: z.string(), replace: z.string(), isRegex: z.boolean().nullish() }),
12
+ ]);
13
+ export type EditSuggestion = z.infer<typeof editSuggestionSchema>;
14
+ export const editorRequestSchema = z.object({
15
+ agent: z.string(), operation: z.enum(["open", "suggest", "preview", "apply", "save", "reject", "close"]),
16
+ editorId: z.string().optional(), cwd: z.string().optional(), path: z.string().optional(),
17
+ text: z.string().max(262144).optional(), position: textPositionSchema.optional(),
18
+ suggestionId: z.string().optional(), previewId: z.string().optional(),
19
+ });
20
+ export type EditorRequest = z.infer<typeof editorRequestSchema>;
21
+ export const editorResultSchema = z.object({
22
+ editorId: z.string().optional(), path: z.string().optional(), text: z.string().optional(), version: z.number().optional(),
23
+ suggestions: z.array(editSuggestionSchema).optional(),
24
+ preview: z.object({ id: z.string(), path: z.string(), before: z.string(), after: z.string(), kind: z.enum(["edit", "jump", "searchAndReplace"]), position: textPositionSchema.optional() }).optional(),
25
+ position: textPositionSchema.optional(),
26
+ });
27
+ export type EditorResult = z.infer<typeof editorResultSchema>;
package/src/index.ts CHANGED
@@ -10,3 +10,7 @@ export * from "./relay.js";
10
10
  export * from "./relay-client.js";
11
11
  export * from "./direct.js";
12
12
  export * from "./computer-preview.js";
13
+ export * from "./async-questions.js";
14
+ export * from "./questions.js";
15
+ export * from "./acp.js";
16
+ export * from "./editor.js";
package/src/model.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  import { z } from "zod";
2
+ import { asyncQuestionSchema } from "./async-questions.js";
2
3
  import { workflowAgentStateSchema, workflowSchema } from "./workflow.js";
4
+ import { toolCallContentSchema } from "./content.js";
3
5
 
4
6
  /**
5
7
  * How far LinkShell can take a given agent. The UI renders capabilities from
@@ -20,6 +22,10 @@ export const agentCapabilitiesSchema = z.object({
20
22
  steer: z.boolean(),
21
23
  permissions: z.boolean(),
22
24
  images: z.boolean(),
25
+ audio: z.boolean().optional(),
26
+ embeddedContext: z.boolean().optional(),
27
+ /** Host-managed ACP settings and optional protocol features. */
28
+ acp: z.boolean().optional(),
23
29
  /**
24
30
  * The agent forks sessions itself, keeping everything it knew. Every agent's
25
31
  * sessions can be forked: without this (or from a single reply, where the
@@ -66,7 +72,7 @@ export type AgentInfo = z.infer<typeof agentInfoSchema>;
66
72
  export const sessionDriverSchema = z.enum(["desktop", "remote", "none"]);
67
73
  export type SessionDriver = z.infer<typeof sessionDriverSchema>;
68
74
 
69
- export const sessionStateSchema = z.enum(["idle", "running", "waiting", "error", "offline"]);
75
+ export const sessionStateSchema = z.enum(["idle", "running", "waiting", "error", "offline", "unknown"]);
70
76
  export type SessionState = z.infer<typeof sessionStateSchema>;
71
77
 
72
78
  export const toolKindSchema = z.enum([
@@ -78,6 +84,7 @@ export const toolKindSchema = z.enum([
78
84
  "execute",
79
85
  "think",
80
86
  "fetch",
87
+ "switch_mode",
81
88
  "other",
82
89
  ]);
83
90
  export type ToolKind = z.infer<typeof toolKindSchema>;
@@ -105,6 +112,14 @@ export type SessionActivity = z.infer<typeof sessionActivitySchema>;
105
112
  */
106
113
  export const questionSchema = z.object({
107
114
  id: z.string(),
115
+ constraints: z.object({
116
+ type: z.enum(["string", "number", "integer", "boolean", "array"]),
117
+ minimum: z.number().optional(), maximum: z.number().optional(),
118
+ minLength: z.number().int().nonnegative().optional(), maxLength: z.number().int().nonnegative().optional(),
119
+ minItems: z.number().int().nonnegative().optional(), maxItems: z.number().int().nonnegative().optional(),
120
+ pattern: z.string().optional(), format: z.string().optional(),
121
+ }).optional(),
122
+ defaults: z.array(z.string()).optional(),
108
123
  /** A short label for the question ("Auth method"). */
109
124
  header: z.string().optional(),
110
125
  text: z.string(),
@@ -130,9 +145,12 @@ export type QuestionAnswer = z.infer<typeof questionAnswerSchema>;
130
145
 
131
146
  export const pendingPermissionSchema = z.object({
132
147
  requestId: z.string(),
148
+ childSessionId: z.string().optional(),
133
149
  toolCallId: z.string().optional(),
134
150
  title: z.string(),
135
151
  detail: z.string().optional(),
152
+ tool: z.object({ title: z.string().optional(), kind: toolKindSchema.optional(), rawInput: z.unknown().optional(), content: z.array(toolCallContentSchema).optional(), locations: z.array(z.object({ path: z.string(), line: z.number().int().optional() })).optional() }).optional(),
153
+ url: z.object({ url: z.string(), elicitationId: z.string() }).optional(),
136
154
  options: z.array(permissionOptionSchema).min(1),
137
155
  /** Set when this is a question to answer (`sessions.answer`) rather than a permission to give. */
138
156
  questions: z.array(questionSchema).optional(),
@@ -149,6 +167,8 @@ export type QueuedMessage = z.infer<typeof queuedMessageSchema>;
149
167
 
150
168
  /** A sub-agent a session started: the tool call it runs under, and how it is doing. */
151
169
  export const subagentInfoSchema = z.object({
170
+ nativeSessionId: z.string().optional(),
171
+ canCancel: z.boolean().optional(),
152
172
  toolCallId: z.string(),
153
173
  parentToolCallId: z.string().optional(),
154
174
  /** What it was asked to do. */
@@ -218,6 +238,8 @@ export const sessionSummarySchema = z.object({
218
238
  archived: z.boolean(),
219
239
  activity: sessionActivitySchema.optional(),
220
240
  permission: pendingPermissionSchema.optional(),
241
+ /** Unanswered questions in the current turn, even while the agent continues working. */
242
+ asyncQuestions: z.array(asyncQuestionSchema).optional(),
221
243
  /**
222
244
  * Live only: messages waiting for the current turn to end, when the host
223
245
  * holds them (agents that can't take input mid-turn). Oldest first.