paseo-plugin-zcode-provider 0.3.0 → 0.4.1

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 (78) hide show
  1. package/NOTICE.md +2 -2
  2. package/README.md +9 -9
  3. package/package.json +4 -4
  4. package/server/account.ts +10 -0
  5. package/server/build-info.ts +1 -1
  6. package/server/discovery/manifest.ts +2 -2
  7. package/server/mapping.ts +31 -0
  8. package/server/provider.ts +5 -18
  9. package/server/runtime/pins.ts +3 -3
  10. package/server/session.ts +7 -10
  11. package/server/unsupported-capabilities.ts +4 -1
  12. package/server/vendor/zcode/NOTICE.md +4 -1
  13. package/server/vendor/zcode/packages/rpc/src/channelClient.ts +1 -0
  14. package/server/vendor/zcode/packages/rpc/src/channelServer.ts +2 -0
  15. package/server/vendor/zcode/packages/rpc/src/channels.shared.ts +1 -0
  16. package/server/vendor/zcode/packages/rpc/src/protocol.ts +3 -2
  17. package/server/vendor/zcode/packages/shared/src/app-runtime-preferences.ts +18 -0
  18. package/server/vendor/zcode/packages/shared/src/attachment-source.ts +5 -0
  19. package/server/vendor/zcode/packages/shared/src/bots.ts +385 -2
  20. package/server/vendor/zcode/packages/shared/src/browser-use/commands.ts +3 -1
  21. package/server/vendor/zcode/packages/shared/src/channel-mention.ts +131 -0
  22. package/server/vendor/zcode/packages/shared/src/conversationSelection.ts +37 -0
  23. package/server/vendor/zcode/packages/shared/src/dynamic-workflow-feature.ts +137 -0
  24. package/server/vendor/zcode/packages/shared/src/env.ts +15 -11
  25. package/server/vendor/zcode/packages/shared/src/highspeed.ts +232 -0
  26. package/server/vendor/zcode/packages/shared/src/mcp-apps/appTools.ts +148 -0
  27. package/server/vendor/zcode/packages/shared/src/mcp-apps/contract.ts +262 -0
  28. package/server/vendor/zcode/packages/shared/src/mcp-apps/instance.ts +12 -0
  29. package/server/vendor/zcode/packages/shared/src/mcp-apps/resourceMime.ts +73 -0
  30. package/server/vendor/zcode/packages/shared/src/mcp-apps/sampling.ts +117 -0
  31. package/server/vendor/zcode/packages/shared/src/mcp-apps/schemas.ts +90 -0
  32. package/server/vendor/zcode/packages/shared/src/model-execution.ts +58 -1
  33. package/server/vendor/zcode/packages/shared/src/oauth.ts +3 -0
  34. package/server/vendor/zcode/packages/shared/src/off-peak-execution.ts +73 -0
  35. package/server/vendor/zcode/packages/shared/src/protocol.ts +78 -4
  36. package/server/vendor/zcode/packages/shared/src/remoteTarget.ts +65 -0
  37. package/server/vendor/zcode/packages/shared/src/request-security-edition/verification-policy.ts +46 -0
  38. package/server/vendor/zcode/packages/shared/src/server-remote.ts +93 -0
  39. package/server/vendor/zcode/packages/shared/src/source-server/compatibility.ts +115 -0
  40. package/server/vendor/zcode/packages/shared/src/source-server/contracts.ts +426 -0
  41. package/server/vendor/zcode/packages/shared/src/source-server/errorCodes.ts +74 -0
  42. package/server/vendor/zcode/packages/shared/src/sqlite-migrations/contract.ts +83 -0
  43. package/server/vendor/zcode/packages/shared/src/subagent-profile.ts +62 -0
  44. package/server/vendor/zcode/packages/shared/src/subagent-runtime-config.ts +51 -0
  45. package/server/vendor/zcode/packages/shared/src/subagents-types.ts +164 -0
  46. package/server/vendor/zcode/packages/shared/src/usage-stats.ts +14 -0
  47. package/server/vendor/zcode/packages/shared/src/validationAppSettings.ts +136 -3
  48. package/server/vendor/zcode/packages/shared/src/version.ts +13 -0
  49. package/server/vendor/zcode/packages/shared/src/zcode-agent-policy.ts +24 -1
  50. package/server/vendor/zcode/packages/shared/src/zcode-protocol/index.ts +697 -36
  51. package/server/vendor/zcode/packages/shared/src/zcode-protocol/trace.ts +11 -0
  52. package/server/vendor/zcode/packages/shared/src/zcode-protocol-legacy-types.ts +14 -2
  53. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/apply.ts +28 -9
  54. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/attachment-ref.ts +3 -0
  55. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/command.ts +73 -53
  56. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/create-session-config.ts +15 -0
  57. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/create-workflow-display.ts +47 -1
  58. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/delta.ts +58 -2
  59. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/input-intent.ts +31 -0
  60. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/rows.ts +28 -13
  61. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/sessions-index-workflow-activity.ts +37 -3
  62. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/sessions-index.ts +36 -0
  63. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/snapshot.ts +21 -0
  64. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/submission.ts +1 -1
  65. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/toolDisplay.ts +32 -4
  66. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/transport.ts +31 -6
  67. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/wire-assembler.ts +4 -1
  68. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/wire-fault.ts +4 -1
  69. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/workflow-artifacts.ts +62 -4
  70. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/workflow-command-rejections.ts +30 -0
  71. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/workflow-row-meta.ts +40 -3
  72. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/workflow-run-settings-command.ts +2 -2
  73. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/workflow-runs-delta.ts +6 -5
  74. package/server/vendor/zcode/packages/shared/src/zcode-protocol-v4/workflow-runs.ts +103 -26
  75. package/server/vendor/zcode/packages/shared/src/zcode-task-mode-schema.ts +13 -1
  76. package/server/vendor/zcode/packages/shared/src/zcode-task-types-core.ts +31 -2
  77. package/server/vendor/zcode/packages/shared/src/zcodeEndpoint.ts +188 -73
  78. package/server/vendor/zcode/provenance.json +189 -80
@@ -1,8 +1,23 @@
1
+ import { requestVerificationReasons } from "../request-security-edition/verification-policy.js";
2
+ import { zcodeProtocolTraceSchema } from "./trace.js";
3
+ // Bot 反向回复的名字解析/待澄清结果与 App、CLI 使用同一严格 schema。
4
+ export { channelReplyRequestSchema, channelReplyResultSchema } from "../channel-mention.js";
5
+ export { zcodeProtocolTraceSchema, type ZCodeProtocolTrace } from "./trace.js";
1
6
  import {
7
+ databaseMigrationFactsSchema,
2
8
  databaseStartupErrorCodeSchema,
3
9
  databaseStartupErrorDetailsSchema,
4
- databaseMigrationFactsSchema,
5
10
  } from "../database-startup.js";
11
+ import {
12
+ MCP_APPS_APP_TOOLS_MAX_PER_INSTANCE,
13
+ MCP_APPS_APP_TOOL_CALL_ID_MAX_CHARS,
14
+ MCP_APPS_APP_TOOL_ERROR_MESSAGE_MAX_CHARS,
15
+ mcpAppsAppToolCallResultSchema,
16
+ mcpAppsAppToolDescriptorSchema,
17
+ } from "../mcp-apps/appTools.js";
18
+ import { mcpAppsSamplingParamsSchema, mcpAppsSamplingResultSchema } from "../mcp-apps/sampling.js";
19
+ import { mcpAppInstanceSchema } from "../mcp-apps/instance.js";
20
+ export { conversationQuoteSchema, conversationQuotesSchema } from "../conversationSelection.js";
6
21
  /* oxlint-disable eslint(max-lines) -- ZCode Protocol schema 需要单文件导出,方便 app 与 agent 共享同一份协议契约。 */
7
22
  // ── 旧协议删除边界──────────────────────
8
23
  // 剩余 ~257 个导出:旧 ZCode Protocol 方法契约、请求/响应/事件 schema、
@@ -16,53 +31,86 @@ import {
16
31
  // UI 旧投影(zcodeSessionProjection 等读路径)。
17
32
  // 上述旧协议 client/server 组删除时,本文件整体删除。
18
33
  // 注:外部零消费 schema 多为存活 schema 联合的内部依赖,随宿主文件一起处理,勿单删。
34
+ import { z } from "zod";
35
+ import { accountProviderUnavailableReasonSchema } from "../account-provider-state.js";
19
36
  import { bashOutputDisplaySchema } from "../bash-output-display.js";
20
- // 后台详情共享精简的只读响应 schema,不携带命令或计时元数据。
21
- export * from "../background-bash-output.js";
37
+ import { zcodeAutomationBotDeliveryTargetSchema } from "../bots.js";
22
38
  import { executionOutputPreviewSchema } from "../execution-output-preview.js";
23
- import { z } from "zod";
24
- export * from "../process-diagnostic.js";
25
- import { errorAttributionSchema } from "../zcode-protocol-v4/snapshot.js";
26
- import { modelSelectionSchema } from "../model-selection.js";
27
39
  import { completeModelPropertiesDataSchema } from "../model-config.js";
28
- import { accountProviderUnavailableReasonSchema } from "../account-provider-state.js";
29
40
  import { modelExecutionSchema } from "../model-execution.js";
41
+ export type { ModelExecutionSelectionFallback } from "../model-execution.js";
42
+ export * from "../off-peak-execution.js";
43
+ import { modelSelectionSchema } from "../model-selection.js";
30
44
  import { APP_USAGE_RANGES, appUsageSnapshotSchema } from "../usage-stats.js";
31
- import { zcodeAutomationBotDeliveryTargetSchema } from "../bots.js";
45
+ import { DYNAMIC_WORKFLOW_MODES } from "../dynamic-workflow-feature.js";
46
+ import { errorAttributionSchema } from "../zcode-protocol-v4/snapshot.js";
47
+ // 后台详情共享精简的只读响应 schema,不携带命令或计时元数据。
48
+ export * from "../background-bash-output.js";
49
+ export * from "../process-diagnostic.js";
50
+ export { attachmentSourceKindSchema, type AttachmentSourceKind } from "../attachment-source.js";
51
+ import { PROTOCOL_V4_LIMITS } from "../zcode-protocol-v4/core.js";
52
+
53
+ export const zcodeTopicResourceReadParamsSchema = z
54
+ .object({
55
+ requestId: z.string().min(1).max(256),
56
+ taskId: z.string().min(1).max(256),
57
+ inputId: z.string().min(1).max(256),
58
+ authorizationId: z.string().min(1).max(256),
59
+ messageId: z.string().min(1).max(256),
60
+ resourceIndex: z.number().int().nonnegative(),
61
+ })
62
+ .strict();
63
+ export const zcodeTopicResourceReadResultSchema = z
64
+ .object({
65
+ ref: z.string().min(1),
66
+ fileName: z.string().min(1).max(1024),
67
+ mime: z.string().min(1).max(256),
68
+ bytes: z.number().int().min(0).max(PROTOCOL_V4_LIMITS.attachmentMaxBytes),
69
+ })
70
+ .strict();
71
+ export const zcodeTopicResourceCancelParamsSchema = z
72
+ .object({ requestId: z.string().min(1).max(256), taskId: z.string().min(1).max(256) })
73
+ .strict();
74
+ export const zcodeTopicResourceCancelResultSchema = z.object({ cancelled: z.boolean() }).strict();
75
+ export type ZCodeTopicResourceReadParams = z.infer<typeof zcodeTopicResourceReadParamsSchema>;
76
+ export type ZCodeTopicResourceReadResult = z.infer<typeof zcodeTopicResourceReadResultSchema>;
77
+ export { activeWorkSummarySchema, type ActiveWorkSummary } from "../zcode-protocol-v4/snapshot.js";
32
78
  // browser-use 命令/结果契约单一来源:agent 构造、协议校验和 main executor 共用同一 schema。
33
- import { browserClientModeSchema, browserCommandSchema } from "../browser-use/commands.js";
34
79
  import {
35
80
  browserBackendListResultSchema,
36
81
  browserSessionContextKindSchema,
37
82
  } from "../browser-use/backend.js";
83
+ import { browserClientModeSchema, browserCommandSchema } from "../browser-use/commands.js";
38
84
  import { browserCommandResultSchema } from "../browser-use/result.js";
85
+ import { appToolSearchModeSchema } from "../app-runtime-preferences.js";
39
86
  import { integratedTerminalShellSelectionSchema } from "../validationAppSettings.js";
40
87
  import { zcodeTaskModeSchema } from "../zcode-task-mode-schema.js";
41
88
  import { OFFICIAL_MCP_AUTH_PORT_FAILURE_REASONS } from "../official-mcp-auth.js";
42
89
  import {
90
+ zcodeSyntheticUserMessageSourceSchema as legacyZcodeSyntheticUserMessageSourceSchema,
43
91
  zcodeDeliveryKindSchema,
92
+ zcodeInteractionRequestOriginSchema,
93
+ zcodeMessagePartSchema,
44
94
  zcodeMessageVisibilitySchema,
45
- zcodeSyntheticUserMessageSourceSchema as legacyZcodeSyntheticUserMessageSourceSchema,
46
- zcodeWorkspaceRefSchema,
95
+ zcodeMessageWithPartsSchema,
47
96
  zcodePermissionDecisionSchema,
48
97
  zcodePermissionResponseSchema,
49
98
  zcodePermissionUpdateSchema,
50
- zcodeSessionModeSchema,
51
- zcodeSessionStatusSchema,
52
- zcodeSessionKindSchema,
99
+ zcodeSessionApiRetryStatusSchema,
100
+ zcodeSessionContextUsageSchema,
53
101
  zcodeSessionGoalSchema,
54
102
  zcodeSessionGoalVerificationSchema,
55
103
  zcodeSessionGoalVerificationTimelineSchema,
56
- zcodeInteractionRequestOriginSchema,
57
- zcodeToolStateSchema,
58
- zcodeSessionApiRetryStatusSchema,
59
- zcodeSessionContextUsageSchema,
60
104
  zcodeSessionInfoSchema,
105
+ zcodeSessionKindSchema,
106
+ zcodeSessionModeSchema,
61
107
  zcodeSessionRuntimeStateSchema,
62
- zcodeMessageWithPartsSchema,
63
- zcodeMessagePartSchema,
108
+ zcodeSessionStatusSchema,
109
+ zcodeToolStateSchema,
110
+ zcodeWorkspaceRefSchema,
64
111
  } from "../zcode-protocol-legacy-types.js";
65
112
 
113
+ export * from "../localTtft.js";
66
114
  export {
67
115
  hookExecutionProjectionSchema,
68
116
  hookInvocationRowSchema,
@@ -70,11 +118,19 @@ export {
70
118
  type HookInvocationRow,
71
119
  } from "../zcode-protocol-v4/rows.js";
72
120
 
121
+ export {
122
+ sessionsIndexReconcileParamsSchema,
123
+ sessionsIndexReconcileResultSchema,
124
+ type SessionsIndexReconcileParams,
125
+ type SessionsIndexReconcileResult,
126
+ } from "../zcode-protocol-v4/sessions-index.js";
127
+
73
128
  export const ZCODE_PROTOCOL_NAME = "ZCode Protocol" as const;
74
129
  export const ZCODE_PROTOCOL_VERSION = 1 as const;
75
130
  // V4 wire 与 legacy 主协议并存;禁止为了 V4 physical framing 改写 legacy 版本。
76
131
  export const ZCODE_PROTOCOL_V4_WIRE_VERSION = 3 as const;
77
132
  export const zcodeRuntimeCapabilitiesSchema = z.object({
133
+ historyFirst: z.boolean().optional(),
78
134
  independentPlanState: z.boolean().optional(),
79
135
  });
80
136
  export const zcodeProtocolErrorCodes = {
@@ -142,7 +198,8 @@ const zcodeCreateWorkflowCausalityGraphDisplaySchema = z
142
198
  z
143
199
  .object({
144
200
  id: z.string().min(1).max(64),
145
- kind: z.enum(["ask", "world-read"]),
201
+ // `hole`:开着的留白自己的站点(docs/dynamic-workflow/presentation.md「Holes on the timeline」);镜像 v4。
202
+ kind: z.enum(["ask", "world-read", "hole"]),
146
203
  label: z.string().min(1).max(128),
147
204
  // 内联 `agent()` receiver 让 label 落到兜底串时,那个名字的静态形状。
148
205
  labelPattern: zcodeWorkflowNamePatternSchema.optional(),
@@ -157,6 +214,8 @@ const zcodeCreateWorkflowCausalityGraphDisplaySchema = z
157
214
  // 与图的 phases / phaseEdges / exits 同进同退:全在场或全缺席。
158
215
  phase: z.string().min(1).max(64).optional(),
159
216
  repeat: z.enum(["stack", "serial"]).optional(),
217
+ // 这个站点是某次补全写进来的:值是那个留白的站点 id;镜像 v4。
218
+ fill: z.string().min(1).max(64).optional(),
160
219
  })
161
220
  .strict(),
162
221
  )
@@ -215,12 +274,35 @@ const zcodeCreateWorkflowCausalityGraphDisplaySchema = z
215
274
  // 为空时缺席。是节点事实而不是边——控制没有从那里转移过来,所以不进 phaseEdges。
216
275
  // 时间轴据此把相邻阶段折成一条分叉的「带」,侧栏迷你轨道画成双线段。
217
276
  alongside: z.array(z.string().min(1).max(64)).min(1).max(32).optional(),
277
+ // 这个阶段是某次补全写进来的:值是那个留白的站点 id;镜像 v4。
278
+ fill: z.string().min(1).max(64).optional(),
218
279
  })
219
280
  .strict(),
220
281
  )
221
282
  .max(32)
222
283
  .optional(),
223
284
  phaseEdges: z.array(zcodeWorkflowEdgeSchema).max(128).optional(),
285
+ // 阶段流(docs/dynamic-workflow/presentation.md「Streams」):两端互为 alongside 的 data 边,
286
+ // 只有 {from, to}——不是 runs after,不进 phaseEdges、不带 back。与词汇表同进同退。
287
+ phaseStreams: z
288
+ .array(z.object({ from: z.string().min(1).max(64), to: z.string().min(1).max(64) }).strict())
289
+ .max(128)
290
+ .optional(),
291
+ // 还开着的留白,源码序(docs/dynamic-workflow/authoring.md「Holes」);镜像 v4。
292
+ holes: z
293
+ .array(
294
+ z
295
+ .object({
296
+ siteId: z.string().min(1).max(64),
297
+ name: z.string().min(1).max(128),
298
+ type: z.string().min(1).max(128),
299
+ phase: z.string().min(1).max(64).optional(),
300
+ tail: z.boolean().optional(),
301
+ })
302
+ .strict(),
303
+ )
304
+ .max(32)
305
+ .optional(),
224
306
  // 控制流可在其后正常完成的阶段(阶段视图的「阶段 → 返回物」箭头);组内可为空数组。
225
307
  exits: z.array(z.string().min(1).max(64)).max(32).optional(),
226
308
  sink: z.array(z.string().min(1).max(64)).max(64).optional(),
@@ -247,6 +329,18 @@ export const zcodeCreateWorkflowToolResultDisplaySchema = z
247
329
  .max(100),
248
330
  causalityGraph: zcodeCreateWorkflowCausalityGraphDisplaySchema.optional(),
249
331
  truncated: z.boolean().optional(),
332
+ // FillWorkflowHole 行补的是哪处留白(docs/dynamic-workflow/presentation.md「The fill row」);镜像 v4。
333
+ // 修复原因:dwf-recursive 只给 contracts 与 v4 加了留白字段,v3 的 .strict() 拒掉整条 tool.updated,
334
+ // 桌面端 v3 订阅于是把含留白的 CreateWorkflow / FillWorkflowHole 结果当无效事件丢掉。
335
+ fill: z
336
+ .object({
337
+ siteId: z.string().min(1).max(64),
338
+ name: z.string().min(1).max(128),
339
+ draftPath: z.string().min(1).max(1_024).optional(),
340
+ line: z.number().int().positive().optional(),
341
+ })
342
+ .strict()
343
+ .optional(),
250
344
  })
251
345
  .strict();
252
346
 
@@ -273,15 +367,42 @@ const zcodeToolResultObjectSchema = jsonObjectSchema.superRefine((result, contex
273
367
  export const zcodeProtocolRequestIdSchema = z.union([z.string(), z.number().int()]);
274
368
  export type ZCodeProtocolRequestId = z.infer<typeof zcodeProtocolRequestIdSchema>;
275
369
 
276
- export const zcodeProtocolTraceSchema = z
370
+ // 远程历史附件仅通过现有连接的私有反向频道传输,单块保持在 RPC 帧预算内。
371
+ export const TOPIC_RESOURCE_RELAY_CHUNK_BYTES = 384 * 1024;
372
+ export const TOPIC_RESOURCE_RELAY_CHANNEL = "host-topic-resource";
373
+ export const zcodeTopicResourceRelayRequestSchema = zcodeTopicResourceReadParamsSchema
374
+ .extend({
375
+ workspacePath: z.string().min(1).max(4096),
376
+ workspaceIdentity: z.string().min(1).max(4096),
377
+ remoteSessionId: z.string().min(1).max(256),
378
+ trace: zcodeProtocolTraceSchema.optional(),
379
+ })
380
+ .strict();
381
+ export type ZCodeTopicResourceRelayRequest = z.infer<typeof zcodeTopicResourceRelayRequestSchema>;
382
+ export const zcodeTopicResourceRelayKeySchema = zcodeTopicResourceCancelParamsSchema;
383
+ export const zcodeTopicResourceRelayChunkRequestSchema = zcodeTopicResourceRelayKeySchema
384
+ .extend({
385
+ index: z.number().int().nonnegative(),
386
+ })
387
+ .strict();
388
+ export const zcodeTopicResourceRelayMetadataSchema = z
277
389
  .object({
278
- traceparent: nonEmptyString.optional(),
279
- traceId: nonEmptyString.optional(),
280
- parentId: nonEmptyString.optional(),
281
- spanId: nonEmptyString.optional(),
390
+ fileName: z.string().min(1).max(1024),
391
+ mime: z.string().min(1).max(256),
392
+ bytes: z.number().int().min(0).max(PROTOCOL_V4_LIMITS.attachmentMaxBytes),
393
+ totalChunks: z
394
+ .number()
395
+ .int()
396
+ .min(0)
397
+ .max(Math.ceil(PROTOCOL_V4_LIMITS.attachmentMaxBytes / TOPIC_RESOURCE_RELAY_CHUNK_BYTES)),
398
+ checksum: z.string().regex(/^sha256:[a-f0-9]{64}$/),
399
+ })
400
+ .strict();
401
+ export const zcodeTopicResourceRelayChunkSchema = z
402
+ .object({
403
+ dataBase64: z.string().max((TOPIC_RESOURCE_RELAY_CHUNK_BYTES / 3) * 4),
282
404
  })
283
405
  .strict();
284
- export type ZCodeProtocolTrace = z.infer<typeof zcodeProtocolTraceSchema>;
285
406
 
286
407
  export const zcodeProtocolRequestSchema = z
287
408
  .object({
@@ -340,6 +461,7 @@ export const zcodeProtocolNotifications = {
340
461
  toolExecResource: "process/toolExecResource",
341
462
  pluginOperationProgress: "plugins/operationProgress",
342
463
  processResourceSample: "process/resourceSample",
464
+ processNetworkRequests: "process/networkRequests",
343
465
  } as const;
344
466
 
345
467
  /** 启动控制面独立于 task stream;数据库身份不可携带路径/凭据。 */
@@ -583,6 +705,7 @@ export type ZCodeProcessChildProcessesResult = z.infer<
583
705
  export type ZCodeDeliveryKind = z.infer<typeof zcodeDeliveryKindSchema>;
584
706
  // TurnStarted 与持久 message 必须共用同一来源词表;否则 live event 能通过而 cold
585
707
  // message 在 app/agent 边界被拒绝,造成 continuous/replayable 语义分叉。
708
+ // 持久消息与输入沿用同一 source schema;agent_listing_delta 只作 provider context,不触发新 turn。
586
709
  const zcodeTurnInputSourceSchema = legacyZcodeSyntheticUserMessageSourceSchema;
587
710
  export const zcodeSessionPersistenceSchema = z.enum(["immediate", "deferred"]);
588
711
  export type ZCodeSessionPersistence = z.infer<typeof zcodeSessionPersistenceSchema>;
@@ -635,6 +758,7 @@ export const zcodeProtocolMcpServerSchema = z.union([
635
758
  env: z.array(zcodeProtocolMcpEntrySchema),
636
759
  isolation: z.enum(["session", "workspace"]).optional(),
637
760
  protocolVersion: z.enum(["legacy", "auto", "2026-07-28"]).optional(),
761
+ alwaysLoad: z.boolean().optional(),
638
762
  timeoutMs: z.number().int().positive().optional(),
639
763
  })
640
764
  .strict(),
@@ -647,6 +771,7 @@ export const zcodeProtocolMcpServerSchema = z.union([
647
771
  oauth: zcodeProtocolMcpOAuthSchema.optional(),
648
772
  isolation: z.enum(["session", "workspace"]).optional(),
649
773
  protocolVersion: z.enum(["legacy", "auto", "2026-07-28"]).optional(),
774
+ alwaysLoad: z.boolean().optional(),
650
775
  timeoutMs: z.number().int().positive().optional(),
651
776
  })
652
777
  .strict(),
@@ -723,6 +848,231 @@ export const zcodeMcpListResultSchema = z
723
848
  .strict();
724
849
  export type ZCodeMcpListResult = z.infer<typeof zcodeMcpListResultSchema>;
725
850
 
851
+ // 插件 UI:UI 发起的 MCP 资源读取与工具调用,
852
+ // 按 pluginId 限定 server 归属,agent 侧 fail closed。
853
+ export const zcodeMcpUiOpenInstanceParamsSchema = z
854
+ .object({
855
+ accountContext: z.string().max(256).optional(),
856
+ workspace: zcodeWorkspaceRefSchema,
857
+ sessionId: nonEmptyString,
858
+ pluginId: nonEmptyString,
859
+ serverName: nonEmptyString,
860
+ scopeId: nonEmptyString.max(4096),
861
+ resourceUri: nonEmptyString.max(2048),
862
+ ownerWebContentsId: z.number().int().positive(),
863
+ })
864
+ .strict();
865
+ export const zcodeMcpUiOpenInstanceResultSchema = mcpAppInstanceSchema;
866
+ export type ZCodeMcpUiOpenInstanceParams = z.infer<typeof zcodeMcpUiOpenInstanceParamsSchema>;
867
+ const zcodeMcpUiPluginScopeShape = {
868
+ instance: mcpAppInstanceSchema,
869
+
870
+ workspace: zcodeWorkspaceRefSchema,
871
+ sessionId: nonEmptyString,
872
+ pluginId: nonEmptyString,
873
+ serverName: nonEmptyString,
874
+ };
875
+ export const zcodeMcpUiCloseInstanceParamsSchema = z
876
+ .object({ ...zcodeMcpUiPluginScopeShape, onlyIfIdle: z.boolean().optional() })
877
+ .strict();
878
+ export const zcodeMcpUiCloseInstanceResultSchema = z.object({ closed: z.boolean() }).strict();
879
+ export const zcodeMcpReadResourceParamsSchema = z
880
+ .object({ ...zcodeMcpUiPluginScopeShape, uri: nonEmptyString.max(2048) })
881
+ .strict();
882
+ export type ZCodeMcpReadResourceParams = z.infer<typeof zcodeMcpReadResourceParamsSchema>;
883
+ export const zcodeMcpResourceContentSchema = z
884
+ .object({
885
+ uri: z.string(),
886
+ mimeType: z.string().optional(),
887
+ text: z.string().optional(),
888
+ blob: z.string().optional(),
889
+ _meta: z.record(z.string(), z.unknown()).optional(),
890
+ })
891
+ .strict();
892
+ export const zcodeMcpReadResourceResultSchema = z
893
+ .object({ contents: z.array(zcodeMcpResourceContentSchema) })
894
+ .strict();
895
+ export type ZCodeMcpReadResourceResult = z.infer<typeof zcodeMcpReadResourceResultSchema>;
896
+
897
+ /**
898
+ * 插件页面发起的 `resources/read` 代理。
899
+ * 与 `mcp/readResource`(宿主取 ui:// HTML)参数同形,但结果去掉 `_meta`、受 8 MiB 与 mimeType 白名单约束。
900
+ */
901
+ export const zcodeMcpUiReadResourceParamsSchema = zcodeMcpReadResourceParamsSchema;
902
+ export type ZCodeMcpUiReadResourceParams = z.infer<typeof zcodeMcpUiReadResourceParamsSchema>;
903
+ export const zcodeMcpUiResourceContentSchema = z
904
+ .object({
905
+ uri: z.string(),
906
+ mimeType: z.string().optional(),
907
+ text: z.string().optional(),
908
+ blob: z.string().optional(),
909
+ })
910
+ .strict();
911
+ export const zcodeMcpUiReadResourceResultSchema = z
912
+ .object({ contents: z.array(zcodeMcpUiResourceContentSchema) })
913
+ .strict();
914
+ export type ZCodeMcpUiReadResourceResult = z.infer<typeof zcodeMcpUiReadResourceResultSchema>;
915
+
916
+ export const zcodeMcpUiSamplingParamsSchema = z
917
+ .object({
918
+ ...zcodeMcpUiPluginScopeShape,
919
+ operationId: nonEmptyString.max(128),
920
+ request: mcpAppsSamplingParamsSchema,
921
+ })
922
+ .strict();
923
+ export const zcodeMcpUiCancelSamplingParamsSchema = z
924
+ .object({ ...zcodeMcpUiPluginScopeShape, operationId: nonEmptyString.max(128) })
925
+ .strict();
926
+ export const zcodeMcpUiSamplingResultSchema = mcpAppsSamplingResultSchema;
927
+ export type ZCodeMcpUiSamplingParams = z.infer<typeof zcodeMcpUiSamplingParamsSchema>;
928
+ export type ZCodeMcpUiCancelSamplingParams = z.infer<typeof zcodeMcpUiCancelSamplingParamsSchema>;
929
+
930
+ export const zcodeMcpUiCallToolParamsSchema = z
931
+ .object({
932
+ ...zcodeMcpUiPluginScopeShape,
933
+ toolName: nonEmptyString,
934
+ arguments: z.record(z.string(), z.unknown()).optional(),
935
+ /** 宿主生成的调用 id,配合 `mcp/uiCancelCall` 取消进行中的调用。 */
936
+ callId: nonEmptyString.max(128),
937
+ })
938
+ .strict();
939
+ export type ZCodeMcpUiCallToolParams = z.infer<typeof zcodeMcpUiCallToolParamsSchema>;
940
+ /** 取消页面发起的工具调用(卡片卸载、会话切换);agent 侧 abort 到 MCP client。 */
941
+ export const zcodeMcpUiCancelCallParamsSchema = z
942
+ .object({ ...zcodeMcpUiPluginScopeShape, callId: nonEmptyString.max(128) })
943
+ .strict();
944
+ export type ZCodeMcpUiCancelCallParams = z.infer<typeof zcodeMcpUiCancelCallParamsSchema>;
945
+ export const zcodeMcpUiCancelCallResultSchema = z.object({ cancelled: z.boolean() }).strict();
946
+ export type ZCodeMcpUiCancelCallResult = z.infer<typeof zcodeMcpUiCancelCallResultSchema>;
947
+ /** 页面发起的 resources/list、resources/templates/list、subscribe、unsubscribe 代理。 */
948
+ export const zcodeMcpUiListResourcesParamsSchema = z
949
+ .object({ ...zcodeMcpUiPluginScopeShape, cursor: nonEmptyString.max(2048).optional() })
950
+ .strict();
951
+ export type ZCodeMcpUiListResourcesParams = z.infer<typeof zcodeMcpUiListResourcesParamsSchema>;
952
+ const zcodeMcpUiResourceDescriptorSchema = z
953
+ .object({
954
+ uri: z.string(),
955
+ name: z.string().optional(),
956
+ title: z.string().optional(),
957
+ description: z.string().optional(),
958
+ mimeType: z.string().optional(),
959
+ // MCP Resource 的标准字段;规范把资源级 csp / prefersBorder 放在这里,宿主读 HTML 项缺 _meta 时回退用。
960
+ _meta: z.record(z.string(), z.unknown()).optional(),
961
+ })
962
+ .strict();
963
+ export const zcodeMcpUiListResourcesResultSchema = z
964
+ .object({
965
+ resources: z.array(zcodeMcpUiResourceDescriptorSchema),
966
+ nextCursor: z.string().optional(),
967
+ })
968
+ .strict();
969
+ export type ZCodeMcpUiListResourcesResult = z.infer<typeof zcodeMcpUiListResourcesResultSchema>;
970
+ export const zcodeMcpUiListResourceTemplatesResultSchema = z
971
+ .object({
972
+ resourceTemplates: z.array(
973
+ z
974
+ .object({
975
+ uriTemplate: z.string(),
976
+ name: z.string().optional(),
977
+ title: z.string().optional(),
978
+ description: z.string().optional(),
979
+ mimeType: z.string().optional(),
980
+ })
981
+ .strict(),
982
+ ),
983
+ nextCursor: z.string().optional(),
984
+ })
985
+ .strict();
986
+ export type ZCodeMcpUiListResourceTemplatesResult = z.infer<
987
+ typeof zcodeMcpUiListResourceTemplatesResultSchema
988
+ >;
989
+ /** 订阅者身份 = 会话 + 沙箱作用域 + 实例代际(initId);dispose 只退订本代际,新实例不受影响。 */
990
+ export const zcodeMcpUiResourceSubscriptionParamsSchema = z
991
+ .object({
992
+ ...zcodeMcpUiPluginScopeShape,
993
+ scopeId: nonEmptyString.max(256),
994
+ generation: z.number().int().nonnegative(),
995
+ uri: nonEmptyString.max(2048),
996
+ })
997
+ .strict();
998
+ export type ZCodeMcpUiResourceSubscriptionParams = z.infer<
999
+ typeof zcodeMcpUiResourceSubscriptionParamsSchema
1000
+ >;
1001
+ export const zcodeMcpUiResourceSubscriptionResultSchema = z.object({}).strict();
1002
+ /**
1003
+ * App-Provided Tools:实例身份 = 会话 + 沙箱作用域 + 代际(与资源订阅同一三元组)。
1004
+ * 登记按实例整体替换;调用认领 / 回传按 callId 幂等。
1005
+ */
1006
+ const zcodeMcpUiAppToolInstanceShape = {
1007
+ ...zcodeMcpUiPluginScopeShape,
1008
+ scopeId: nonEmptyString.max(256),
1009
+ generation: z.number().int().nonnegative(),
1010
+ };
1011
+ export const zcodeMcpUiRegisterAppToolsParamsSchema = z
1012
+ .object({
1013
+ ...zcodeMcpUiAppToolInstanceShape,
1014
+ tools: z.array(mcpAppsAppToolDescriptorSchema).max(MCP_APPS_APP_TOOLS_MAX_PER_INSTANCE),
1015
+ })
1016
+ .strict();
1017
+ export type ZCodeMcpUiRegisterAppToolsParams = z.infer<
1018
+ typeof zcodeMcpUiRegisterAppToolsParamsSchema
1019
+ >;
1020
+ export const zcodeMcpUiRegisterAppToolsResultSchema = z
1021
+ .object({ tools: z.array(z.object({ name: z.string(), modelName: z.string() }).strict()) })
1022
+ .strict();
1023
+ export type ZCodeMcpUiRegisterAppToolsResult = z.infer<
1024
+ typeof zcodeMcpUiRegisterAppToolsResultSchema
1025
+ >;
1026
+ export const zcodeMcpUiUnregisterAppToolsParamsSchema = z
1027
+ .object(zcodeMcpUiAppToolInstanceShape)
1028
+ .strict();
1029
+ export type ZCodeMcpUiUnregisterAppToolsParams = z.infer<
1030
+ typeof zcodeMcpUiUnregisterAppToolsParamsSchema
1031
+ >;
1032
+ export const zcodeMcpUiUnregisterAppToolsResultSchema = z
1033
+ .object({ removed: z.number().int().nonnegative() })
1034
+ .strict();
1035
+ export type ZCodeMcpUiUnregisterAppToolsResult = z.infer<
1036
+ typeof zcodeMcpUiUnregisterAppToolsResultSchema
1037
+ >;
1038
+ export const zcodeMcpUiClaimAppToolCallParamsSchema = z
1039
+ .object({
1040
+ ...zcodeMcpUiAppToolInstanceShape,
1041
+ callId: nonEmptyString.max(MCP_APPS_APP_TOOL_CALL_ID_MAX_CHARS),
1042
+ })
1043
+ .strict();
1044
+ export type ZCodeMcpUiClaimAppToolCallParams = z.infer<
1045
+ typeof zcodeMcpUiClaimAppToolCallParamsSchema
1046
+ >;
1047
+ export const zcodeMcpUiAppToolAcceptedResultSchema = z.object({ accepted: z.boolean() }).strict();
1048
+ export type ZCodeMcpUiAppToolAcceptedResult = z.infer<typeof zcodeMcpUiAppToolAcceptedResultSchema>;
1049
+ export const zcodeMcpUiResolveAppToolCallParamsSchema = z
1050
+ .object({
1051
+ ...zcodeMcpUiAppToolInstanceShape,
1052
+ callId: nonEmptyString.max(MCP_APPS_APP_TOOL_CALL_ID_MAX_CHARS),
1053
+ result: mcpAppsAppToolCallResultSchema.optional(),
1054
+ error: z
1055
+ .object({ message: z.string().max(MCP_APPS_APP_TOOL_ERROR_MESSAGE_MAX_CHARS) })
1056
+ .strict()
1057
+ .optional(),
1058
+ })
1059
+ .strict()
1060
+ .refine((value) => (value.result === undefined) !== (value.error === undefined), {
1061
+ message: "exactly one of result or error is required",
1062
+ });
1063
+ export type ZCodeMcpUiResolveAppToolCallParams = z.infer<
1064
+ typeof zcodeMcpUiResolveAppToolCallParamsSchema
1065
+ >;
1066
+ export const zcodeMcpUiCallToolResultSchema = z
1067
+ .object({
1068
+ content: z.array(z.record(z.string(), z.unknown())),
1069
+ structuredContent: z.unknown().optional(),
1070
+ isError: z.boolean().optional(),
1071
+ _meta: z.record(z.string(), z.unknown()).optional(),
1072
+ })
1073
+ .strict();
1074
+ export type ZCodeMcpUiCallToolResult = z.infer<typeof zcodeMcpUiCallToolResultSchema>;
1075
+
726
1076
  export const zcodeSessionImportMessageSchema = z
727
1077
  .object({
728
1078
  role: z.enum(["user", "assistant"]),
@@ -842,7 +1192,15 @@ export const zcodeProviderAccountAccessSchema = z
842
1192
  .object({
843
1193
  type: z.literal("zhipu-account"),
844
1194
  accountType: z.enum(["zai", "bigmodel"]),
845
- mode: z.enum(["start-plan", "individual-coding-plan", "team-coding-plan", "off-peak"]),
1195
+ // `highspeed` 指加速卡这一账号访问类别(隐藏 Provider + 免签网关),与模型名
1196
+ // GLM-5.1-Highspeed 无关,仅字面重合。见 docs/highspeed/highspeed-access-mode-migration.md。
1197
+ mode: z.enum([
1198
+ "start-plan",
1199
+ "individual-coding-plan",
1200
+ "team-coding-plan",
1201
+ "off-peak",
1202
+ "highspeed",
1203
+ ]),
846
1204
  entitled: z.boolean(),
847
1205
  })
848
1206
  .strict();
@@ -1168,6 +1526,8 @@ export const zcodeSessionTitleUpdatedEventPayloadSchema = z
1168
1526
  .strict();
1169
1527
  export const zcodeTurnStartedEventPayloadSchema = z
1170
1528
  .object({
1529
+ // CLI 的高精度执行时间可含小数;漏声明会使 strict 校验丢弃整条开始事件,Bot 因此无法清空上一轮回复。
1530
+ executionStartedAt: z.number().nonnegative().optional(),
1171
1531
  turnNumber: z.number().int().nonnegative(),
1172
1532
  input: z.string(),
1173
1533
  inputId: nonEmptyString.optional(),
@@ -1392,6 +1752,7 @@ export const zcodePermissionRequestedEventPayloadSchema = z
1392
1752
  reason: z.string(),
1393
1753
  input: z.unknown(),
1394
1754
  suggestedPermissionUpdates: z.array(zcodePermissionUpdateSchema).optional(),
1755
+ approvalMode: z.literal("user-once").optional(),
1395
1756
  origin: zcodeInteractionRequestOriginSchema.optional(),
1396
1757
  options: z.array(zcodePermissionOptionSchema).min(1),
1397
1758
  childSessionId: nonEmptyString.optional(),
@@ -1556,8 +1917,12 @@ export const zcodeSessionSubagentsResultSchema = z
1556
1917
  })
1557
1918
  .strict();
1558
1919
  export type ZCodeSessionSubagentsResult = z.infer<typeof zcodeSessionSubagentsResultSchema>;
1920
+ /** 服务端 feature key 的取值域在协议里的 zod 形态(packages/shared/src/dynamic-workflow-feature.ts)。 */
1921
+ export const zcodeDynamicWorkflowModeSchema = z.enum(DYNAMIC_WORKFLOW_MODES);
1922
+
1559
1923
  export const zcodeSessionCreateParamsSchema = z
1560
1924
  .object({
1925
+ additionalDirectories: z.array(nonEmptyString).max(256).optional(),
1561
1926
  sessionId: nonEmptyString.optional(),
1562
1927
  workspace: zcodeWorkspaceRefSchema,
1563
1928
  parentSessionId: nonEmptyString.optional(),
@@ -1576,12 +1941,16 @@ export const zcodeSessionCreateParamsSchema = z
1576
1941
  // 动态工作流灰度:与 offPeakToolEnabled 同一
1577
1942
  // 模式——host 裁决后下发,缺省不下发 = 不注册工作流工具簇(fail-closed)。
1578
1943
  dynamicWorkflowEnabled: z.boolean().optional(),
1944
+ // 灰度 mode 随布尔同行下发(launch.md「On demand: activation」):`onDemand` 让 CLI 把十个
1945
+ // 工具推迟到会话首次 `/workflow` 才注册;缺席 = 按布尔行事(alwaysOn),供旧 Host 配对。
1946
+ dynamicWorkflowMode: zcodeDynamicWorkflowModeSchema.optional(),
1579
1947
  })
1580
1948
  .strict();
1581
1949
  export type ZCodeSessionCreateParams = z.infer<typeof zcodeSessionCreateParamsSchema>;
1582
1950
 
1583
1951
  export const zcodeSessionResumeParamsSchema = z
1584
1952
  .object({
1953
+ additionalDirectories: z.array(nonEmptyString).max(256).optional(),
1585
1954
  sessionId: nonEmptyString,
1586
1955
  workspace: zcodeWorkspaceRefSchema.optional(),
1587
1956
  // 旧 session 尚无 runtime/model_selection entry 时,由同 task 的索引元数据提供迁移 hint。
@@ -1594,6 +1963,7 @@ export const zcodeSessionResumeParamsSchema = z
1594
1963
  offPeakToolEnabled: z.boolean().optional(),
1595
1964
  // 与 create 同语义;resume 不带会导致冷恢复丢工作流工具簇。
1596
1965
  dynamicWorkflowEnabled: z.boolean().optional(),
1966
+ dynamicWorkflowMode: zcodeDynamicWorkflowModeSchema.optional(),
1597
1967
  })
1598
1968
  .strict();
1599
1969
  export type ZCodeSessionResumeParams = z.infer<typeof zcodeSessionResumeParamsSchema>;
@@ -1601,9 +1971,7 @@ export type ZCodeSessionResumeParams = z.infer<typeof zcodeSessionResumeParamsSc
1601
1971
  export const zcodeSessionListParamsSchema = z
1602
1972
  .object({
1603
1973
  workspace: zcodeWorkspaceRefSchema.optional(),
1604
- // 显式身份查询包含隐藏会话;普通列表仍只返回主任务,避免索引修复激活 runtime。
1605
1974
  sessionIds: z.array(nonEmptyString).min(1).max(64).optional(),
1606
- includeArchived: z.boolean().default(false),
1607
1975
  limit: z.number().int().positive().optional(),
1608
1976
  })
1609
1977
  .strict();
@@ -1652,6 +2020,9 @@ export const zcodeSessionReadParamsSchema = z
1652
2020
  deliveryKind: zcodeDeliveryKindSchema.optional(),
1653
2021
  messageLimit: z.number().int().positive().optional(),
1654
2022
  afterSeq: z.number().int().nonnegative().optional(),
2023
+ // "index":仅 task index resync 使用,返回剥离 tool/reasoning/data URL 大载荷的同结构 snapshot,
2024
+ // 结果禁止回写 UI 状态;缺省等同 "full"。
2025
+ contentProfile: z.enum(["full", "index"]).optional(),
1655
2026
  })
1656
2027
  .strict();
1657
2028
  export type ZCodeSessionReadParams = z.infer<typeof zcodeSessionReadParamsSchema>;
@@ -1682,6 +2053,15 @@ export type ZCodeSessionRuntimePreferencesScope = z.infer<
1682
2053
  typeof zcodeSessionRuntimePreferencesScopeSchema
1683
2054
  >;
1684
2055
 
2056
+ // subagents/readRuntimeConfig 返回 Host 已解析的完整快照或显式内置回退,不再传 Markdown。
2057
+ export {
2058
+ subagentRuntimeConfigSchema,
2059
+ type SubagentRuntimeConfig,
2060
+ } from "../subagent-runtime-config.js";
2061
+ export const zcodeSubagentsReadRuntimeConfigParamsSchema = z
2062
+ .object({ sessionId: nonEmptyString })
2063
+ .strict();
2064
+
1685
2065
  export const ZCODE_SESSION_RUNTIME_PREFERENCES_REQUEST_TIMEOUT_MS = 15_000;
1686
2066
 
1687
2067
  export const zcodeSessionRequestRuntimePreferencesParamsSchema = z
@@ -1702,7 +2082,10 @@ export type ZCodeModelContextBudgetStrategy = z.infer<typeof zcodeModelContextBu
1702
2082
 
1703
2083
  export const zcodeSessionRuntimePreferencesResultSchema = z
1704
2084
  .object({
2085
+ additionalDirectories: z.array(nonEmptyString).max(256).optional(),
1705
2086
  nativeSearchEnhancementsEnabled: z.boolean(),
2087
+ toolSearchMode: appToolSearchModeSchema.default("off"),
2088
+ subagentRuntimeConfigEnabled: z.boolean().optional(),
1706
2089
  memoryEnabled: z.boolean().default(false),
1707
2090
  askUserQuestionAutoResolutionEnabled: z.boolean().default(true),
1708
2091
  integratedTerminalShell: integratedTerminalShellSelectionSchema.optional(),
@@ -2178,6 +2561,23 @@ export const zcodeProviderUpdateAccountConfigResultSchema = z
2178
2561
  export type ZCodeProviderUpdateAccountConfigResult = z.infer<
2179
2562
  typeof zcodeProviderUpdateAccountConfigResultSchema
2180
2563
  >;
2564
+ /** Worker 从所属 Environment 的正式 Config Store 重建进程内 Provider Registry。 */
2565
+ export const zcodeProviderRefreshRegistryParamsSchema = z
2566
+ .object({
2567
+ reason: nonEmptyString,
2568
+ })
2569
+ .strict();
2570
+ export const zcodeProviderRefreshRegistryResultSchema = z
2571
+ .object({
2572
+ refreshed: z.literal(true),
2573
+ })
2574
+ .strict();
2575
+ export type ZCodeProviderRefreshRegistryParams = z.infer<
2576
+ typeof zcodeProviderRefreshRegistryParamsSchema
2577
+ >;
2578
+ export type ZCodeProviderRefreshRegistryResult = z.infer<
2579
+ typeof zcodeProviderRefreshRegistryResultSchema
2580
+ >;
2181
2581
  export const zcodeInteractionPreferencesSchema = z
2182
2582
  .object({
2183
2583
  askUserQuestionAutoResolutionEnabled: z.boolean(),
@@ -2260,6 +2660,8 @@ export const zcodeWorkspaceUpdateDynamicWorkflowPolicyParamsSchema = z
2260
2660
  .object({
2261
2661
  workspace: zcodeWorkspaceRefSchema,
2262
2662
  enabled: z.boolean(),
2663
+ // launch.md「On demand: activation」:mode 与布尔同行;缺席时 CLI 按布尔行事(alwaysOn)。
2664
+ mode: zcodeDynamicWorkflowModeSchema.optional(),
2263
2665
  })
2264
2666
  .strict();
2265
2667
  export type ZCodeWorkspaceUpdateDynamicWorkflowPolicyParams = z.infer<
@@ -2378,7 +2780,7 @@ export const zcodeUserInputResponseSchema = z
2378
2780
  .strict();
2379
2781
  export type ZCodeUserInputResponse = z.infer<typeof zcodeUserInputResponseSchema>;
2380
2782
 
2381
- export const zcodeProviderRuntimeHeadersRequestReasonSchema = z.enum(["model-request"]);
2783
+ export const zcodeProviderRuntimeHeadersRequestReasonSchema = z.enum(requestVerificationReasons);
2382
2784
  export const zcodeProviderRuntimeHeadersRequestParamsSchema = z
2383
2785
  .object({
2384
2786
  requestId: nonEmptyString,
@@ -2388,6 +2790,14 @@ export const zcodeProviderRuntimeHeadersRequestParamsSchema = z
2388
2790
  modelSelection: modelSelectionSchema,
2389
2791
  providerId: nonEmptyString,
2390
2792
  accountAccess: zcodeProviderAccountAccessSchema.optional(),
2793
+ expectedAccountScope: z
2794
+ .string()
2795
+ .regex(/^[a-f0-9]{64}$/)
2796
+ .optional(),
2797
+ rejectedProjectTokenFingerprint: z
2798
+ .string()
2799
+ .regex(/^[a-f0-9]{64}$/)
2800
+ .optional(),
2391
2801
  reason: zcodeProviderRuntimeHeadersRequestReasonSchema,
2392
2802
  })
2393
2803
  .strict();
@@ -2415,6 +2825,11 @@ export const zcodeProviderRuntimeHeadersResponseSchema = z.discriminatedUnion("h
2415
2825
  requestAuth: z
2416
2826
  .object({
2417
2827
  apiKey: nonEmptyString.optional(),
2828
+ apiKeyId: z.string().trim().min(1).optional(),
2829
+ accountScope: z
2830
+ .string()
2831
+ .regex(/^[a-f0-9]{64}$/)
2832
+ .optional(),
2418
2833
  headers: z.record(nonEmptyString, nonEmptyString).optional(),
2419
2834
  })
2420
2835
  .strict(),
@@ -2532,6 +2947,21 @@ export const zcodePluginComponentGroupSchema = z
2532
2947
  .strict();
2533
2948
  export type ZCodePluginComponentGroup = z.infer<typeof zcodePluginComponentGroupSchema>;
2534
2949
 
2950
+ export const zcodePluginUiSurfaceSchema = z
2951
+ .object({
2952
+ pluginId: nonEmptyString,
2953
+ pluginName: nonEmptyString,
2954
+ id: nonEmptyString.max(128),
2955
+ title: z.union([nonEmptyString, z.record(z.string(), z.string())]),
2956
+ icon: z.string().optional(),
2957
+ // 运行时 namespaced server 名(plugin:<name>:<server>),可直接用于 mcp/uiReadResource。
2958
+ server: nonEmptyString,
2959
+ resourceUri: nonEmptyString.max(2048),
2960
+ availability: z.literal("session"),
2961
+ })
2962
+ .strict();
2963
+ export type ZCodePluginUiSurface = z.infer<typeof zcodePluginUiSurfaceSchema>;
2964
+
2535
2965
  export const zcodePluginInfoSchema = z
2536
2966
  .object({
2537
2967
  id: nonEmptyString,
@@ -2551,6 +2981,7 @@ export const zcodePluginInfoSchema = z
2551
2981
  // 权威组件清单(名称 + 可选描述),由 CLI 对插件根目录枚举得出,与启用态无关。
2552
2982
  // 详情 UI 直接展示,取代旧的「数量取协议、名称靠 UI 侧 join」脆弱方案。optional 兼容旧 payload。
2553
2983
  components: z.array(zcodePluginComponentGroupSchema).optional(),
2984
+ uiSurfaces: z.array(zcodePluginUiSurfaceSchema).optional(),
2554
2985
  declaredMcpServerNames: z.array(z.string()).optional(),
2555
2986
  hostMcpServerNames: z.array(z.string()).optional(),
2556
2987
  mcpServerNames: z.array(z.string()),
@@ -2591,7 +3022,22 @@ export const zcodePluginsListResultSchema = z
2591
3022
  .strict();
2592
3023
  export type ZCodePluginsListResult = z.infer<typeof zcodePluginsListResultSchema>;
2593
3024
 
2594
- // ── Plugin 对话引用 catalog──
3025
+ // ── 插件 UI 面板入口──
3026
+ // 工作区级只读投影:已启用插件清单 `ui.surfaces[]` 的合法条目;插件启停后 host 重新拉取。
3027
+ export const zcodePluginsListUiSurfacesParamsSchema = z
3028
+ .object({ workspace: zcodeWorkspaceRefSchema })
3029
+ .strict();
3030
+ export type ZCodePluginsListUiSurfacesParams = z.infer<
3031
+ typeof zcodePluginsListUiSurfacesParamsSchema
3032
+ >;
3033
+ export const zcodePluginsListUiSurfacesResultSchema = z
3034
+ .object({ surfaces: z.array(zcodePluginUiSurfaceSchema) })
3035
+ .strict();
3036
+ export type ZCodePluginsListUiSurfacesResult = z.infer<
3037
+ typeof zcodePluginsListUiSurfacesResultSchema
3038
+ >;
3039
+
3040
+ // ── Plugin 对话引用 catalog(docs/plugin-reference-mention.md)──
2595
3041
  // Session-scoped 只读投影:带 sessionId → 该 Session 创建时冻结的身份 catalog;
2596
3042
  // 不带 → workspace 当前 catalog(新建草稿 Picker)。身份与能力字段保持
2597
3043
  // identifiers-only,不携带 rootPath/配置等;可选 icon/displayName(I18n)/description(I18n)
@@ -2938,6 +3384,99 @@ export const zcodeWorkflowsMoveResultSchema = z.union([
2938
3384
  ]);
2939
3385
  export type ZCodeWorkflowsMoveResult = z.infer<typeof zcodeWorkflowsMoveResultSchema>;
2940
3386
 
3387
+ // ── 从一次 run 保存工作流(docs/dynamic-workflow/transcript-and-notifications.md「Saving the
3388
+ // run, and running it again」)──
3389
+ // 完成卡的「直接保存」走这条:**不收脚本,只收 runId**——要写的那份正文是这次 run 实际执行的
3390
+ // 脚本,agent 从 journal 记录(`scriptText`)里读。脚本不经 GUI 走一圈有两个后果值得写下来:
3391
+ // 修订过的 run 存下的是**结算它的**那一份,而工具行入参被快照裁成预览的老对话也照样存得出
3392
+ // 同样的字节。名字合法性、覆盖、遮��与类型检查全部复用 SaveWorkflow 的同一套实现(不变式 3)。
3393
+ /** 另一档已有同名定义(遮蔽事实);与 contracts 的 SavedWorkflowShadowing 逐字对齐。 */
3394
+ export const zcodeSavedWorkflowShadowingSchema = z.enum(["hides_global", "hidden_by_project"]);
3395
+ export type ZCodeSavedWorkflowShadowing = z.infer<typeof zcodeSavedWorkflowShadowingSchema>;
3396
+
3397
+ export const zcodeWorkflowsSaveParamsSchema = z
3398
+ .object({
3399
+ // 两用:既是载体运行时,也是这次 run 的项目——journal 在它那里,项目根也在它那里。
3400
+ // 全局档同样带它(与 list/get 的「全局只当载体」不同):脚本必须从这个 agent 的 journal 读。
3401
+ workspace: zcodeWorkspaceRefSchema,
3402
+ runId: nonEmptyString,
3403
+ name: nonEmptyString,
3404
+ meta: zcodeSavedWorkflowMetaSchema,
3405
+ // 缺省 `project`。
3406
+ scope: zcodeSavedWorkflowScopeSchema.optional(),
3407
+ // 只有 GUI 已经把覆盖警告摆给用户看过时才为 true;缺省即「目标已存在就拒绝」——
3408
+ // 覆盖是用户的决定,不是一次保存的副作用(与 `workflows/move` 不覆盖同一条纪律)。
3409
+ overwrite: z.boolean().optional(),
3410
+ })
3411
+ .strict();
3412
+ export type ZCodeWorkflowsSaveParams = z.infer<typeof zcodeWorkflowsSaveParamsSchema>;
3413
+ export const zcodeWorkflowsSaveResultSchema = z.union([
3414
+ z
3415
+ .object({
3416
+ ok: z.literal(true),
3417
+ name: nonEmptyString,
3418
+ scope: zcodeSavedWorkflowScopeSchema,
3419
+ path: nonEmptyString,
3420
+ /** 写的那一刻重新判定,不回抄入参里的 `overwrite`(与 SaveWorkflow 的 `overwritten` 同源)。 */
3421
+ overwritten: z.boolean(),
3422
+ shadowing: zcodeSavedWorkflowShadowingSchema.optional(),
3423
+ })
3424
+ .strict(),
3425
+ z
3426
+ .object({
3427
+ ok: z.literal(false),
3428
+ // run_not_found:journal 里没有这条 run;script_missing:老记录没存脚本原文;
3429
+ // target_exists:目标已存在而调用方没说覆盖;compile_failed:类型检查没过,一个字节都没写。
3430
+ reason: z.enum([
3431
+ "invalid_name",
3432
+ "run_not_found",
3433
+ "script_missing",
3434
+ "target_exists",
3435
+ "compile_failed",
3436
+ "write_error",
3437
+ ]),
3438
+ path: z.string().optional(),
3439
+ detail: z.string().optional(),
3440
+ })
3441
+ .strict(),
3442
+ ]);
3443
+ export type ZCodeWorkflowsSaveResult = z.infer<typeof zcodeWorkflowsSaveResultSchema>;
3444
+
3445
+ // ── 一次 run 对应哪个已保存工作流 ──
3446
+ // 完成卡的「已保存」芯片与「再次运行」都问这一个问题,而答案**推导得来、不记在卡上**:重开
3447
+ // 会话、换一个窗口保存、在对话里保存,都走同一条判定。判定住在 agent 一侧,因为两份事实
3448
+ // (run 的 journal 记录与磁盘上的定义)都在那里;返回解析好的 entry,用户后来删掉的那一份
3449
+ // 因此会自动不再算数。
3450
+ /** 转写自对话的候选:模型用 `SaveWorkflow` 存过、并在入参里认领了这次 run。 */
3451
+ export const zcodeWorkflowsForRunCandidateSchema = z
3452
+ .object({ name: nonEmptyString, scope: zcodeSavedWorkflowScopeSchema.optional() })
3453
+ .strict();
3454
+ export type ZCodeWorkflowsForRunCandidate = z.infer<typeof zcodeWorkflowsForRunCandidateSchema>;
3455
+ /** 候选上界:一次 run 在一段对话里被存过的次数远小于它。 */
3456
+ export const ZCODE_WORKFLOWS_FOR_RUN_MAX_CANDIDATES = 8;
3457
+ export const zcodeWorkflowsForRunParamsSchema = z
3458
+ .object({
3459
+ workspace: zcodeWorkspaceRefSchema,
3460
+ runId: nonEmptyString,
3461
+ candidates: z
3462
+ .array(zcodeWorkflowsForRunCandidateSchema)
3463
+ .max(ZCODE_WORKFLOWS_FOR_RUN_MAX_CANDIDATES)
3464
+ .optional(),
3465
+ })
3466
+ .strict();
3467
+ export type ZCodeWorkflowsForRunParams = z.infer<typeof zcodeWorkflowsForRunParamsSchema>;
3468
+ export const zcodeWorkflowsForRunResultSchema = z
3469
+ .object({
3470
+ /** 命中的定义;缺席即这次 run 还没有对应的已保存工作流。 */
3471
+ entry: zcodeSavedWorkflowEntrySchema.optional(),
3472
+ /** 命中的是哪一条规则(诊断与测试用;UI 只看 entry 在不在)。 */
3473
+ match: z.enum(["candidate", "script", "name"]).optional(),
3474
+ /** 这次 run 跑时用的实参(journal 原样),供「再次运行」预填实参窗。 */
3475
+ runArgs: z.record(z.string(), z.unknown()).optional(),
3476
+ })
3477
+ .strict();
3478
+ export type ZCodeWorkflowsForRunResult = z.infer<typeof zcodeWorkflowsForRunResultSchema>;
3479
+
2941
3480
  // 推荐 Prompt 的可信插件解析:UI 不拆解 stableId,也不从旧目录快照推断可安装性。
2942
3481
  export const zcodePluginSuggestedReferenceStatusSchema = z.enum([
2943
3482
  "ready",
@@ -3008,6 +3547,7 @@ export const zcodePluginStoreListingSchema = z
3008
3547
  descriptionI18n: z.record(z.string(), z.string()).optional(),
3009
3548
  icon: z.string().optional(),
3010
3549
  category: z.string().optional(),
3550
+ publisherType: z.enum(["official", "community"]).optional(),
3011
3551
  author: z.string().optional(),
3012
3552
  authorUrl: z.string().optional(),
3013
3553
  homepage: z.string().optional(),
@@ -3499,8 +4039,14 @@ export type ZCodeAutomationDeleteProtocolResult = z.infer<typeof zcodeAutomation
3499
4039
  // ---- Off-Peak(闲时任务)会话内创建协议----
3500
4040
  // 与 automation 兄弟并列(独立域,禁止互相复用标记/表)。workspace 由 host 端从
3501
4041
  // 当前 session 注入,不进协议参数(对称 automation/create)。permissionMode 只开放产品
3502
- // 四档词表;缺省解析在 host 端(yolo / allowed_models 末位 / 最高推理档)。
3503
- export const zcodeOffPeakPermissionModeSchema = z.enum(["build", "edit", "plan", "yolo"]);
4042
+ // 四档词表(D29-4);缺省解析在 host 端(D49-4:yolo / allowed_models 末位 / 最高推理档)。
4043
+ export const zcodeOffPeakPermissionModeSchema = z.enum([
4044
+ "build",
4045
+ "edit",
4046
+ "plan",
4047
+ "yolo",
4048
+ "guarded",
4049
+ ]);
3504
4050
  export type ZCodeOffPeakProtocolPermissionMode = z.infer<typeof zcodeOffPeakPermissionModeSchema>;
3505
4051
 
3506
4052
  export const zcodeOffPeakCreateParamsSchema = z
@@ -3568,6 +4114,7 @@ export const zcodeProtocolMethods = {
3568
4114
  sessionList: "session/list",
3569
4115
  sessionSubagents: "session/subagents",
3570
4116
  sessionRequestRuntimePreferences: "session/requestRuntimePreferences",
4117
+ subagentsReadRuntimeConfig: "subagents/readRuntimeConfig",
3571
4118
  sessionRead: "session/read",
3572
4119
  sessionMessages: "session/messages",
3573
4120
  sessionEvents: "session/events",
@@ -3601,6 +4148,7 @@ export const zcodeProtocolMethods = {
3601
4148
  workspaceHookTrustGrant: "workspace/hooks/trustGrant",
3602
4149
  // 进程级 Account Provider Config 与 workspace 运行目录分离。
3603
4150
  providerUpdateAccountConfig: "provider/updateAccountConfig",
4151
+ providerRefreshRegistry: "provider/refreshRegistry",
3604
4152
  workspaceUpdateInteractionPreferences: "workspace/updateInteractionPreferences",
3605
4153
  workspaceUpdateModelIoPreferences: "workspace/updateModelIoPreferences",
3606
4154
  // Off-Peak 工具面门禁是 workspace 级事实(灰度 + 本地/远程),由 host 在 agent 就绪时同步;
@@ -3614,8 +4162,27 @@ export const zcodeProtocolMethods = {
3614
4162
  workspaceCancelGenerateText: "workspace/cancelGenerateText",
3615
4163
  providerTestModelConnectivity: "provider/testModelConnectivity",
3616
4164
  mcpList: "mcp/list",
4165
+ mcpReadResource: "mcp/readResource",
4166
+ mcpUiOpenInstance: "mcp/uiOpenInstance",
4167
+ mcpUiCloseInstance: "mcp/uiCloseInstance",
4168
+ mcpUiValidateInstance: "mcp/uiValidateInstance",
4169
+ mcpUiSampling: "mcp/uiSampling",
4170
+ mcpUiCancelSampling: "mcp/uiCancelSampling",
4171
+ mcpUiCallTool: "mcp/uiCallTool",
4172
+ mcpUiCancelCall: "mcp/uiCancelCall",
4173
+ mcpUiReadResource: "mcp/uiReadResource",
4174
+ mcpUiListResources: "mcp/uiListResources",
4175
+ mcpUiListResourceTemplates: "mcp/uiListResourceTemplates",
4176
+ mcpUiSubscribeResource: "mcp/uiSubscribeResource",
4177
+ mcpUiUnsubscribeResource: "mcp/uiUnsubscribeResource",
4178
+ // App-Provided Tools:页面工具登记 / 注销,与模型调用的认领 / 回传(信箱投递走 v4 live 增量)。
4179
+ mcpUiRegisterAppTools: "mcp/uiRegisterAppTools",
4180
+ mcpUiUnregisterAppTools: "mcp/uiUnregisterAppTools",
4181
+ mcpUiClaimAppToolCall: "mcp/uiClaimAppToolCall",
4182
+ mcpUiResolveAppToolCall: "mcp/uiResolveAppToolCall",
3617
4183
  pluginsList: "plugins/list",
3618
4184
  pluginsReferenceCatalog: "plugins/referenceCatalog",
4185
+ pluginsListUiSurfaces: "plugins/listUiSurfaces",
3619
4186
  pluginsReferenceCatalogWithCategory: "plugins/referenceCatalogWithCategory",
3620
4187
  skillsReferenceCatalog: "skills/referenceCatalog",
3621
4188
  // 已保存工作流的 GUI 中枢:workspace 级、无会话。
@@ -3626,6 +4193,10 @@ export const zcodeProtocolMethods = {
3626
4193
  workflowsRuns: "workflows/runs",
3627
4194
  // 在项目档 / 全局档之间移动同名文件。
3628
4195
  workflowsMove: "workflows/move",
4196
+ // 完成卡的「直接保存」与「已保存」判定(docs/dynamic-workflow/transcript-and-notifications.md):
4197
+ // 前者按 runId 从 journal 取脚本落盘,后者回答「这次 run 对应哪个已保存工作流」。
4198
+ workflowsSave: "workflows/save",
4199
+ workflowsForRun: "workflows/forRun",
3629
4200
  pluginsResolveSuggestedReference: "plugins/resolveSuggestedReference",
3630
4201
  pluginsSetEnabled: "plugins/setEnabled",
3631
4202
  pluginsOverview: "plugins/overview",
@@ -3642,6 +4213,9 @@ export const zcodeProtocolMethods = {
3642
4213
  pluginsValidate: "plugins/validate",
3643
4214
  pluginsDescribe: "plugins/describe",
3644
4215
  automationCreate: "automation/create",
4216
+ topicResourceRead: "topic/resource/read",
4217
+ channelReply: "bot/channel/reply",
4218
+ topicResourceCancel: "topic/resource/cancel",
3645
4219
  automationUpdate: "automation/update",
3646
4220
  automationCheckTaskBinding: "automation/checkTaskBinding",
3647
4221
  automationList: "automation/list",
@@ -3657,6 +4231,7 @@ export const zcodeProtocolMethods = {
3657
4231
  sessionUsage: "session/usage",
3658
4232
  // 资源管理器:CLI 回报其 MCP 子进程 pid 与插件归属(纯内存,无 I/O),采样在 Host 侧完成。
3659
4233
  processChildProcesses: "process/childProcesses",
4234
+ processNetworkCapture: "process/networkCapture",
3660
4235
  interactionRequestPermission: "interaction/requestPermission",
3661
4236
  interactionRequestUserInput: "interaction/requestUserInput",
3662
4237
  interactionRequestProviderRuntimeHeaders: "interaction/requestProviderRuntimeHeaders",
@@ -3673,6 +4248,18 @@ export const zcodeProtocolEmptyResultSchema = z.object({}).strict();
3673
4248
  // 最新 V4 主链已不再依赖旧版全量方法表;这里仅保留仍被兼容测试和 browser broker
3674
4249
  // 消费的最小契约集合,避免重新引入已移除的 legacy 方法。
3675
4250
  export const zcodeProtocolSessionMethodContracts = {
4251
+ [zcodeProtocolMethods.mcpUiOpenInstance]: {
4252
+ params: zcodeMcpUiOpenInstanceParamsSchema,
4253
+ result: zcodeMcpUiOpenInstanceResultSchema,
4254
+ },
4255
+ [zcodeProtocolMethods.mcpUiCloseInstance]: {
4256
+ params: zcodeMcpUiCloseInstanceParamsSchema,
4257
+ result: zcodeMcpUiCloseInstanceResultSchema,
4258
+ },
4259
+ [zcodeProtocolMethods.mcpUiValidateInstance]: {
4260
+ params: zcodeMcpUiCloseInstanceParamsSchema,
4261
+ result: zcodeMcpUiResourceSubscriptionResultSchema,
4262
+ },
3676
4263
  [zcodeProtocolMethods.workspaceHookTrustGrant]: {
3677
4264
  params: zcodeWorkspaceHookTrustGrantParamsSchema,
3678
4265
  result: zcodeWorkspaceHookTrustGrantResultSchema,
@@ -3681,6 +4268,62 @@ export const zcodeProtocolSessionMethodContracts = {
3681
4268
  params: zcodeMcpListParamsSchema,
3682
4269
  result: zcodeMcpListResultSchema,
3683
4270
  },
4271
+ [zcodeProtocolMethods.mcpReadResource]: {
4272
+ params: zcodeMcpReadResourceParamsSchema,
4273
+ result: zcodeMcpReadResourceResultSchema,
4274
+ },
4275
+ [zcodeProtocolMethods.mcpUiSampling]: {
4276
+ params: zcodeMcpUiSamplingParamsSchema,
4277
+ result: zcodeMcpUiSamplingResultSchema,
4278
+ },
4279
+ [zcodeProtocolMethods.mcpUiCancelSampling]: {
4280
+ params: zcodeMcpUiCancelSamplingParamsSchema,
4281
+ result: zcodeMcpUiCancelCallResultSchema,
4282
+ },
4283
+ [zcodeProtocolMethods.mcpUiCallTool]: {
4284
+ params: zcodeMcpUiCallToolParamsSchema,
4285
+ result: zcodeMcpUiCallToolResultSchema,
4286
+ },
4287
+ [zcodeProtocolMethods.mcpUiCancelCall]: {
4288
+ params: zcodeMcpUiCancelCallParamsSchema,
4289
+ result: zcodeMcpUiCancelCallResultSchema,
4290
+ },
4291
+ [zcodeProtocolMethods.mcpUiReadResource]: {
4292
+ params: zcodeMcpUiReadResourceParamsSchema,
4293
+ result: zcodeMcpUiReadResourceResultSchema,
4294
+ },
4295
+ [zcodeProtocolMethods.mcpUiListResources]: {
4296
+ params: zcodeMcpUiListResourcesParamsSchema,
4297
+ result: zcodeMcpUiListResourcesResultSchema,
4298
+ },
4299
+ [zcodeProtocolMethods.mcpUiListResourceTemplates]: {
4300
+ params: zcodeMcpUiListResourcesParamsSchema,
4301
+ result: zcodeMcpUiListResourceTemplatesResultSchema,
4302
+ },
4303
+ [zcodeProtocolMethods.mcpUiSubscribeResource]: {
4304
+ params: zcodeMcpUiResourceSubscriptionParamsSchema,
4305
+ result: zcodeMcpUiResourceSubscriptionResultSchema,
4306
+ },
4307
+ [zcodeProtocolMethods.mcpUiUnsubscribeResource]: {
4308
+ params: zcodeMcpUiResourceSubscriptionParamsSchema,
4309
+ result: zcodeMcpUiResourceSubscriptionResultSchema,
4310
+ },
4311
+ [zcodeProtocolMethods.mcpUiRegisterAppTools]: {
4312
+ params: zcodeMcpUiRegisterAppToolsParamsSchema,
4313
+ result: zcodeMcpUiRegisterAppToolsResultSchema,
4314
+ },
4315
+ [zcodeProtocolMethods.mcpUiUnregisterAppTools]: {
4316
+ params: zcodeMcpUiUnregisterAppToolsParamsSchema,
4317
+ result: zcodeMcpUiUnregisterAppToolsResultSchema,
4318
+ },
4319
+ [zcodeProtocolMethods.mcpUiClaimAppToolCall]: {
4320
+ params: zcodeMcpUiClaimAppToolCallParamsSchema,
4321
+ result: zcodeMcpUiAppToolAcceptedResultSchema,
4322
+ },
4323
+ [zcodeProtocolMethods.mcpUiResolveAppToolCall]: {
4324
+ params: zcodeMcpUiResolveAppToolCallParamsSchema,
4325
+ result: zcodeMcpUiAppToolAcceptedResultSchema,
4326
+ },
3684
4327
  [zcodeProtocolMethods.interactionBrowserList]: {
3685
4328
  params: zcodeBrowserListParamsSchema,
3686
4329
  result: zcodeBrowserListResultSchema,
@@ -3696,6 +4339,12 @@ export const zcodeProtocolSessionMethodContracts = {
3696
4339
  export type ZCodeProtocolSessionMethodContract =
3697
4340
  (typeof zcodeProtocolSessionMethodContracts)[keyof typeof zcodeProtocolSessionMethodContracts];
3698
4341
 
4342
+ // 启动入口的独立存储命令与严格结果 schema,和 CLI 共用一份契约。
4343
+ export {
4344
+ STORAGE_MIGRATION_COMMAND,
4345
+ storageMigrationReportSchema,
4346
+ } from "../sqlite-migrations/contract.js";
4347
+
3699
4348
  /** 仅存储准备子进程的私有控制帧,原始路径不进入业务事件或遥测。 */
3700
4349
  export const zcodeStoragePreparationFrameSchema = z.discriminatedUnion("method", [
3701
4350
  z
@@ -3714,7 +4363,19 @@ export const zcodeStoragePreparationFrameSchema = z.discriminatedUnion("method",
3714
4363
  export const zcodeStoragePathReadySchema = z
3715
4364
  .object({ method: z.literal("startup/storagePathReady"), reuse: z.boolean().optional() })
3716
4365
  .strict();
3717
- export * from "../localTtft.js";
3718
4366
 
3719
4367
  // 桌面本地 TTFT 的严格事实合同;检查点不能替代实际内容帧。
3720
4368
  export { localTtftFactsSchema } from "../localTtft.js";
4369
+ // 群来源由可信 Host 注入,V4 命令与持久化输入使用相同运行时校验。
4370
+ export {
4371
+ botIdentitySchema,
4372
+ botTopicInputMessageSchema,
4373
+ botGroupInputSourceSchema,
4374
+ type BotGroupInputSource,
4375
+ } from "../bots.js";
4376
+ export {
4377
+ botTopicContextSchema,
4378
+ botTopicMessageSchema,
4379
+ type BotTopicHistoryBatch,
4380
+ type BotTopicMessage,
4381
+ } from "../bots.js";