@epoch-agent/protocol 0.7.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  | 文件 | 内容 |
18
18
  | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
19
- | `tool.ts` | `EpochTool` / `ToolContext` / `ToolResult` / `ToolExposure` |
19
+ | `tool.ts` | `EpochTool` / `ToolContext` / `ToolResult` / `ToolExposure`。输出预算那两格(`ToolContext.outputBudget` 读额度、`EpochTool.governsOwnOutput` 免截)的判据在各自的 JSDoc 上,嵌入宿主那侧的说明在 [EMBEDDING.md](../../docs/EMBEDDING.md#工具输出预算outputbudget) |
20
20
  | `plugin.ts` | `EpochPlugin` —— 第三方加工具的唯一入口 |
21
21
  | `events.ts` | `AgentEvent` 判别联合 —— 引擎与所有宿主之间的事件契约、`TokenUsage` |
22
22
  | `usage.ts` | `TokenUsage` 的口径算术 + **压缩那条线**(`compressionThresholdTokens`) |
package/dist/index.d.ts CHANGED
@@ -169,6 +169,19 @@ interface PermissionDecision {
169
169
  reason?: string;
170
170
  /** deny=false 时是否需要弹出审批对话框(ask_user),deny=true 时为静默拒绝 */
171
171
  requireApproval?: boolean;
172
+ /**
173
+ * 这次要问的这道题,**答复记不记得住**(2026-09-10)。只在
174
+ * `requireApproval` 为真时有意义。
175
+ *
176
+ * `false` = 引擎在这条路上不查审批缓存,所以「永久允许 / 本会话内始终允许」
177
+ * 写下来也不会被用上。引擎把它原样传成 {@link ApprovalRequest.rememberable},
178
+ * 宿主据此不画那两个出口。**不给 = 记得住**(改动前的行为)。
179
+ *
180
+ * ⚠️ 它是**一次判定**的属性,不是一个档位的属性:`bypass` 下走安全底线那条路的
181
+ * ask 查缓存(记得住),而规则表那条路不查(记不住)。所以宿主别去看档位名,
182
+ * 判据在 core 的 `PermissionManager.settleUnaskable()` 和 `checkRulesAndCache()` 上。
183
+ */
184
+ rememberable?: boolean;
172
185
  }
173
186
  /** 上抛给宿主(TUI / CLI)做阻塞确认的审批请求 */
174
187
  interface ApprovalRequest {
@@ -186,6 +199,24 @@ interface ApprovalRequest {
186
199
  * 即两种降级都落在更保守的一侧。
187
200
  */
188
201
  plan?: PlanProposal;
202
+ /**
203
+ * 「记住这次决定」这次有没有意义(2026-09-10)——
204
+ * {@link PermissionDecision.rememberable} 原样转发过来的那一格。
205
+ *
206
+ * `false` = 引擎在**这条判定路径**上不查审批缓存,所以 `allow-session` /
207
+ * `allow-always` 这两个出口写得进 `approvals.json`、却一次都不会被用上。
208
+ * 宿主该把那两个出口**整个不画**,并说出为什么:一个写下来就再也不生效的按钮,
209
+ * 比没有这个按钮更坏 —— 用户会以为自己设过边界了。
210
+ *
211
+ * **不给 = 记得住**(改动前的行为,四个出口照画)。
212
+ *
213
+ * ⚠️ **它不是一个档位的属性,宿主别自己去看档位名**:`bypass` 下走安全底线
214
+ * 那条路的 ask(危险命令)记得住,走规则表那条路的记不住。判据在
215
+ * `PermissionDecision.rememberable` 上。
216
+ *
217
+ * ⚠️ 它**不是**「这次能不能批准」:`allow-once` 和 `deny` 两个出口永远都在。
218
+ */
219
+ rememberable?: boolean;
189
220
  }
190
221
  /**
191
222
  * 宿主对审批请求的答复。
@@ -396,6 +427,47 @@ interface ToolContext {
396
427
  * 调用它是**同步且廉价**的(往缓冲区里塞一段字符串),可以在 data 事件里直接调。
397
428
  */
398
429
  onOutput?: (chunk: string) => void;
430
+ /**
431
+ * **引擎这一次会在多少字符处开刀。**
432
+ *
433
+ * ## 它存在的理由:不知道额度的一侧没法按结构裁
434
+ *
435
+ * 工具输出回灌进上下文之前有个预算,超了引擎自己会截。引擎能做的是**通用**的切法
436
+ * (按 JSON 结构切到最后一个完整元素、按行切),它做不到的是**语义**的切法 ——
437
+ * 「丢掉尾部三个店铺、留下那两个计数」只有工具自己知道怎么做。
438
+ *
439
+ * 而在这一格出现之前,宿主想自己裁只有两条路,两条都会烂:
440
+ *
441
+ * 1. **硬编码一份副本**(嵌入宿主 nebular-agent 写的是 1900)。我们改了那个数,
442
+ * 它不会知道,而**失效时不报错**;
443
+ * 2. **反推档位**:靠 {@link ToolContext.callTool} 缺不缺席判「我是不是子调用」,
444
+ * 因为两档预算差 25 倍。那个等价关系今天成立,但它是
445
+ * `MAX_SUB_CALL_DEPTH === 1` 的副产品 —— 那个常量变成 2 的那天,
446
+ * 宿主的裁剪逻辑**静默**失效。
447
+ *
448
+ * 所以这一格给的是数,不是开关:**它不放开任何额度**,只是把已经存在的那个数
449
+ * 说出来。宿主拿它写 `if (len > ctx.outputBudget) trimByStructure()` 就够了。
450
+ *
451
+ * ## 三个取值
452
+ *
453
+ * - 模型直接调 = `MAX_TOOL_OUTPUT`(core 的 `agent/output-budget.ts`);
454
+ * - `run_code` 的子调用 = `MAX_SUB_CALL_OUTPUT`(子调用的返回值不进上下文,
455
+ * 所以放宽 —— 判据在那个常量上);
456
+ * - 声明了 {@link EpochTool.governsOwnOutput} 的工具 = `Infinity`。
457
+ * 进程内传递、不序列化,所以 `len > ctx.outputBudget` 这一支天然就对,不用特判。
458
+ *
459
+ * ## 量的是**工具交出来的那段文本**
460
+ *
461
+ * artifact 的 summary 和 `<tool_output untrusted>` 那层包装都在预算之外,
462
+ * 不占宿主的额度 —— 后者宿主算不出来,让它算就等于让它猜。
463
+ *
464
+ * ## 缺席只可能是宿主自己拼的 `ToolContext`
465
+ *
466
+ * 类型上可选,但**引擎一定给**。嵌入宿主自己拼 context 直接调 `tool.execute()`
467
+ * 是支持的用法,那条路上也没有引擎在截 —— 所以缺席的正确读法是「没人会截你」,
468
+ * 不是「预算是 0」。
469
+ */
470
+ outputBudget?: number;
399
471
  /**
400
472
  * 从一个工具里再调一次工具(方案 51「不是绕过审批的后门」)。**这是 `run_code` 的子调用通道。**
401
473
  *
@@ -493,6 +565,36 @@ interface EpochTool {
493
565
  * 导致审批缓存基本不命中——同一个操作反复问用户。
494
566
  */
495
567
  describeTarget?: (args: Record<string, unknown>) => string;
568
+ /**
569
+ * **这个工具自己管输出预算,引擎那一刀对它不生效。**
570
+ *
571
+ * ## 语义是「我自己会裁」,不是「我的输出很长」
572
+ *
573
+ * 长输出该走的是分页或摘要。设这一格的门槛是三条**同时**成立:
574
+ * 输出有个说得出来的上界、超了的时候它自己会说、且说完还给得出下一步。
575
+ * core 今天只有两个工具设它:
576
+ *
577
+ * - `skill_view` —— 正文整份都是**操作说明**,截一半比没有更坏(模型会照着
578
+ * 前半截把事做完)。它没有上界,靠的是「那是用户自己的文件」;
579
+ * - `terminal` —— `spillOutput()` 已经自治:50 KB 落盘线 + artifact 全文 +
580
+ * 头尾预览 + 取回提示,外加 10 MB 的硬杀。
581
+ *
582
+ * ⚠️ **失败路径不看这一格**:那条路上工具自己的预算逻辑按定义没跑完
583
+ * (`terminal` 在启动阶段就炸的时候 `spillOutput()` 一次都没被调到)。
584
+ *
585
+ * ## 嵌入宿主:你要的多半不是这一格
586
+ *
587
+ * 宿主注入的工具设得上它,但**先看 {@link ToolContext.outputBudget}** ——
588
+ * 放开豁免要求引擎信任宿主不吃上下文窗口,而告诉宿主额度不要求任何信任。
589
+ * 一个按结构裁到预算内的工具比一个豁免的工具好:前者的「没给全」是模型读得到
590
+ * 的一句话,后者是几万字符的报表挤掉了对话本身。
591
+ *
592
+ * ## MCP server 的工具给不出这一格,这是刻意的
593
+ *
594
+ * `plugin-mcp` 的 `toEpochTool()` 翻不出它 —— 「不许截我」这句话只有跑在本进程里、
595
+ * 代码你审得到的工具说得出口。远端 server 说不出。
596
+ */
597
+ governsOwnOutput?: boolean;
496
598
  /** 执行函数 */
497
599
  execute: (args: Record<string, unknown>, ctx: ToolContext) => Promise<ToolResult>;
498
600
  }
@@ -1988,6 +2090,54 @@ interface EpochConfig {
1988
2090
  */
1989
2091
  threshold?: number;
1990
2092
  };
2093
+ /**
2094
+ * 长期记忆的三个配额(`MEMORY.md` / `USER.md`,core 的 `memory/manager.ts`)。
2095
+ *
2096
+ * ## 这一段 2026-09-10 才有,而在它之前那三个数是**写死的**
2097
+ *
2098
+ * 原来 `defaultMemoryConfig()` 里躺着 `2200 / 1375` 两个字面量,
2099
+ * `MemoryManager` 的构造函数只收 `dbPath` / `memDir` —— 也就是说
2100
+ * **`MemoryConfig` 这个类型存在,但没有任何人给得出一个非默认值**。
2101
+ * 用户抱怨「记忆才两千字,而且设置里改不了」,说的是同一件事的两面。
2102
+ *
2103
+ * 那两个数是从 Hermes 抄的(`hermes_cli/config_defaults.py` 的
2104
+ * `memory_char_limit: 2200` / `user_char_limit: 1375`,注释写着「~800 tokens
2105
+ * at 2.75 chars/token」)。⚠️ **那个换算是按英文估的**:中文里 1 字符差不多
2106
+ * 就是 1 token,于是同样一份配额,中文用户实际拿到的空间只有英文用户的三分之一,
2107
+ * 而屏幕上两边印的是同一个数。
2108
+ *
2109
+ * ## ⚠️ 三个数里有两类,别按「都是上限」合并理解
2110
+ *
2111
+ * | 键 | 管的是 | 花不花每轮的 token |
2112
+ * | ----------------- | ------------------ | ---------------------------- |
2113
+ * | `memoryCharLimit` | **能存多少** | 不花(正文不进 prompt) |
2114
+ * | `userCharLimit` | **能存多少** | 不花 |
2115
+ * | `indexCharLimit` | **每轮固定花多少** | 花 —— 它就是那一笔开销本身 |
2116
+ *
2117
+ * 这条区分是 2026-09-10 那一轮结构改造带来的,在那之前它不成立:原来整个
2118
+ * 记忆库是**全量冻结注入 system prompt** 的,于是「存多少」和「每轮烧多少」
2119
+ * 是同一个数,两件事挤在一个旋钮上 —— 想多存就必须多烧,这正是那两个数
2120
+ * 一直不敢往上调的原因。现在 system prompt 里只有一份索引(每条一行:
2121
+ * id + 首行摘要 + 字数),正文靠 `memory` 工具的 `search` / `read` 按需取
2122
+ * (形状对齐 codex 的 `codex-rs/ext/memories`)。
2123
+ *
2124
+ * 所以调 `memoryCharLimit` 是**几乎免费**的,调 `indexCharLimit` 才是花钱的那个。
2125
+ * 把这两件事读反了会得出一个错的结论:「记忆库调大 = 每轮变贵」。
2126
+ */
2127
+ memory?: {
2128
+ /** `MEMORY.md`(项目知识)能存多少字符。缺省见 core 的 `defaultMemoryConfig()` */
2129
+ memoryCharLimit?: number;
2130
+ /** `USER.md`(用户画像)能存多少字符 */
2131
+ userCharLimit?: number;
2132
+ /**
2133
+ * 注入 system prompt 的**索引块**字符上限 —— 这是三个数里唯一按轮计费的那个。
2134
+ *
2135
+ * 超了不是报错也不是静默截断:索引按「用得多的排前面」取到装不下为止,
2136
+ * 剩下的在块尾如实印一句「还有 N 条未列出」,并指向 `memory action=search`。
2137
+ * 静默丢掉是这里最不该干的事 —— 模型会以为它看到的就是全部。
2138
+ */
2139
+ indexCharLimit?: number;
2140
+ };
1991
2141
  /** 非交互(CI / 管道)下的策略。默认全空 = 一律拒绝 */
1992
2142
  headless?: {
1993
2143
  /** 预授权的工具名。只在 !stdin.isTTY 时生效 */
@@ -3189,8 +3339,22 @@ type FinishReason =
3189
3339
  'stop'
3190
3340
  /** 用尽轮次预算 */
3191
3341
  | 'max-turns'
3192
- /** 死循环检测触发 */
3342
+ /** 死循环检测触发 —— 连续多轮重复同一个工具调用 */
3193
3343
  | 'stalled'
3344
+ /**
3345
+ * 模型在**一次回复内**开始复读,被我们掐掉了(core 的 `repetition-detector.ts`)。
3346
+ *
3347
+ * ⚠️ **和 `'stalled'` 刻意分开。** 那一档是「连续多轮调同一个工具」,
3348
+ * 用户能做的是换个说法或者自己接手;这一档整轮工具调用为零,是解码退化,
3349
+ * 处置是重发一次(大概率就好了)。混成一个值之后,界面上只能给出一句
3350
+ * 同时对两种情况都不准的话。
3351
+ *
3352
+ * ⚠️ **也不是 `'length'`。** 那一档是 provider 按 max output tokens 切的、
3353
+ * 那半截正文是模型真想说的;这一档是**我们**在它撞上上限之前主动停的,
3354
+ * 已经产出的正文留着但没有价值。两者在账上差一整个输出预算 ——
3355
+ * 现场那一份是 31.6 KB 里只有 12 种句子。
3356
+ */
3357
+ | 'looping'
3194
3358
  /** 被宿主中止 */
3195
3359
  | 'aborted'
3196
3360
  /** 模型安全策略拒答 —— 是 **provider** 拒答,不是我们拦的 */
@@ -3549,7 +3713,26 @@ type NoticeCode =
3549
3713
  * ⚠️ 走 `notice` 而不是 `text-delta`,判据同上面 `skill-learned` 那三条:
3550
3714
  * 它不是模型说的话,塞进正文就会进历史、进落盘、下一轮再进模型。
3551
3715
  */
3552
- | 'response-truncated';
3716
+ | 'response-truncated'
3717
+ /**
3718
+ * 这一条消息发出去之前,**上下文被自动压了一次**(2026-09-10)。
3719
+ *
3720
+ * ## 没有这一帧的话,用户看到的是「它忘了我们刚才聊的」
3721
+ *
3722
+ * 自动压缩是有损的:摘要替掉了早期几十轮的原文。屏幕上那段对话还在
3723
+ * (宿主回显的是自己那份记录),而模型手上只剩摘要 —— 于是它接下来那句
3724
+ * 「你之前说的那个方案」答得对不上,而**没有任何线索**说过发生了什么。
3725
+ * 这一帧就是那个线索,也是「为什么这一轮多花了一笔」的唯一出处。
3726
+ *
3727
+ * ⚠️ 走 `notice` 而不是 `text-delta`,判据同 `skill-learned`:它不是模型说的话,
3728
+ * 塞进正文就会进历史、进落盘、下一轮再进模型。
3729
+ *
3730
+ * ⚠️ **两个位置都发这一帧,语义相同**(都是「这一发之前压了」):
3731
+ * `AgentSession` 跑前那道(软线,压完写回会话历史)和 `AgentLoop` 送出前那道
3732
+ * (硬线,见 protocol 的 `isPromptOversize`)。不给它们分两档码是因为
3733
+ * 用户要知道的是同一件事,而「哪道闸判的」是我们的实现细节。
3734
+ */
3735
+ | 'context-compacted';
3553
3736
  type AgentEventType = AgentEvent['type'];
3554
3737
  /** 取出某个具体事件的类型,例如 AgentEventOf<'tool-call'> */
3555
3738
  type AgentEventOf<T extends AgentEventType> = Extract<AgentEvent, {
@@ -5314,6 +5497,49 @@ declare function compressionThresholdTokens(contextLength: number, threshold: nu
5314
5497
  * @param prompt 这一轮的提示词大小,取 {@link promptTokens}(**不是** `usage.inputTokens`)
5315
5498
  */
5316
5499
  declare function isContextNearlyFull(prompt: number, contextLength: number, threshold: number): boolean;
5500
+ /**
5501
+ * {@link isPromptOversize} 那条硬线占窗口的比例。判据全文在那个函数上。
5502
+ *
5503
+ * 导出是因为用例要按它算边界值 —— 用例里另写一个 `0.9` 的话,调这个数的人
5504
+ * 不会看到任何东西变红。
5505
+ */
5506
+ declare const OVERSIZE_RATIO = 0.9;
5507
+ /**
5508
+ * 「再发出去就要撞窗口了」的那条**硬线**(2026-09-10)。
5509
+ *
5510
+ * 和 {@link isContextNearlyFull} 是两条线,别混成一条 —— 它们回答的是两个问题:
5511
+ *
5512
+ * | 线 | 问的是 | 越线之后 |
5513
+ * | ------------------------- | -------------------- | ------------------------------------------ |
5514
+ * | `isContextNearlyFull` | 该压了吗(省钱) | 压一次,**冷却期和熔断说不压就不压** |
5515
+ * | 这一条(`OVERSIZE_RATIO`)| 这一发还发得出去吗 | 必须压,**冷却期让路**(判据见下) |
5516
+ *
5517
+ * ## 为什么非要第二条线
5518
+ *
5519
+ * 压缩器那两道闸(冷却期 5 轮、连续失败 3 次熔断)都是**省钱**用的,而它们
5520
+ * 「只会让压缩更晚发生」这条性质在软线上是安全的、在窗口边缘上不是:一个刚起的
5521
+ * 进程 `turnsSinceCompress` 是 0,于是 `--resume` 接回一段很长的会话之后,
5522
+ * **头 5 发请求一次都不压** —— 而第 1 发就是最大的那一发。撞上去的代价不是
5523
+ * 「多花一次钱」,是这段会话从此每条消息都 400(`classifyProviderError` 判
5524
+ * `1030` / `abort`,没有任何地方接住它去压一次重发),只有手动 `/compact` 能救。
5525
+ *
5526
+ * 所以这条线上的取舍反过来:**宁可白花一次摘要,也不要撞墙。**
5527
+ *
5528
+ * ## 0.9 是怎么定的
5529
+ *
5530
+ * 留一成给「量不准的那部分」:喂进来的数在第一发请求上是**估出来的**
5531
+ * (provider 还没报过任何数,见 `agent/run-estimate.ts`),而那个估算走的是
5532
+ * `o200k_base`,模型可能是 Claude / DeepSeek;这一轮跑起来之后还会插进任务通知和
5533
+ * 工具结果。定在 1.0 等于赌估算不偏,而它已知会偏。
5534
+ *
5535
+ * ⚠️ **它拦不住「元数据里的窗口本身是错的」**:`contextLength` 来自能力表
5536
+ * (`services.contextLength`),表错了这条线就画在错的地方。那一档只有 provider
5537
+ * 报回来的 400 说得清,今天仍然没人接(见上面那条「代价」)。
5538
+ *
5539
+ * @param prompt 这一发要送出去的提示词大小。实测值优先,第一发只有估算
5540
+ * @param contextLength 模型**真实**窗口,同 {@link isContextNearlyFull} 的那一格
5541
+ */
5542
+ declare function isPromptOversize(prompt: number, contextLength: number): boolean;
5317
5543
  /**
5318
5544
  * 一共用了多少 token。
5319
5545
  *
@@ -5484,6 +5710,32 @@ type WireHubEvent =
5484
5710
  type: 'stream-reset';
5485
5711
  reason: WireResetReason;
5486
5712
  }
5713
+ /**
5714
+ * 这个会话的**后台任务清单变了**(方案 36 PR-3):起了一格、结束了一格,
5715
+ * 或者 `/resume` 把它们搬到了别的会话名下。
5716
+ *
5717
+ * ## 纯失效信号,**不带载荷**
5718
+ *
5719
+ * 没有 `total` / `running`,也没有那一格任务本身。收到它的客户端回去打
5720
+ * `GET /api/sessions/:id/tasks` 重取。
5721
+ *
5722
+ * 带 tally 的版本试过在纸上:侧栏那一行能少一次往返,代价是**同一件事有了两个
5723
+ * 真源** —— 这一帧上的两个数,和检视面板那份清单(`collectTasks` 的投影)。
5724
+ * 两者算的是同一批任务,但取样时刻差着一次往返,于是「侧栏说 3 在跑、面板里
5725
+ * 数出来 2 个」是一种可达状态,而没人说得清该信哪个。判据同 `server/src/index.ts`
5726
+ * 里 `observe` / `snapshot` 那一对(「转出去的就是浏览器收到的那条流,
5727
+ * 不是它们的复制品」)。
5728
+ *
5729
+ * ## 它**不管输出**
5730
+ *
5731
+ * 一格任务的输出长长了不发这一帧 —— 判据在 `infra/src/jobs.ts` 的 `notifyJobs`
5732
+ * 上(一个刷屏的 `pnpm dev` 一秒能推几百帧,而它们会把 512 格的全局环形缓冲
5733
+ * 冲干净,断线重连要续的那段真事件就没了)。所以检视面板那格输出尾巴今天
5734
+ * **仍然是快照**,那是另一件事,要做得给它自己的增量帧和每任务游标。
5735
+ */
5736
+ | {
5737
+ type: 'tasks-changed';
5738
+ }
5487
5739
  /**
5488
5740
  * 这个会话被**冷却**了(方案 30 §2.3):同时活跃的会话超过上限,
5489
5741
  * 它是最久没动过的那个,Hub 侧的状态已经释放。
@@ -6983,7 +7235,9 @@ declare const WIRE_SESSION_SUMMARY_FIELDS: WireFields<WireSessionSummary>;
6983
7235
  *
6984
7236
  * 三项**逐字来自 `finish` 那一帧**,不在这一层重新解释:
6985
7237
  *
6986
- * - `reason` 就是 {@link FinishReason},引擎九个出口共用的那一个构造器产出的
7238
+ * - `reason` 就是 {@link FinishReason},引擎那些出口共用的那一个构造器产出的
7239
+ * (⚠️ 这里原来写着「九个出口」,而 `FinishReason` 每加一档那个数就过期一次 ——
7240
+ * 判据同 web 那张 `OUTCOMES` 表上的 ⚠️:能编译过的是类型,会骗人的是散文)
6987
7241
  * - `runUsage` 就是 `finish.runUsage`(**这一次 run** 的账,方案 42 PR-2)。
6988
7242
  * 不是 `finish.usage` —— 后者是**累计**,口径由 `usageScope` 决定,
6989
7243
  * 拿它当「这一轮花了多少」会把一个刚开的会话写成花了一整个月的量
@@ -6994,7 +7248,7 @@ declare const WIRE_SESSION_SUMMARY_FIELDS: WireFields<WireSessionSummary>;
6994
7248
  * 同 `WireConfigResponse.maxCostUsd` 那条 ⚠️ 的判据。
6995
7249
  */
6996
7250
  interface WireSessionFinish {
6997
- /** 引擎给的终局原因。**只有 `'stop'` 是「干完了」**,其余八种都是提前收场 */
7251
+ /** 引擎给的终局原因。**只有 `'stop'` 是「干完了」**,其余每一种都是提前收场 */
6998
7252
  reason: FinishReason;
6999
7253
  /**
7000
7254
  * 这一轮从开跑到收尾用了多久(毫秒);起点不知道时 null(不是 0 ——
@@ -9269,11 +9523,11 @@ interface WireRoleAddResponse {
9269
9523
  declare const WIRE_ROLE_ADD_RESPONSE_FIELDS: WireFields<WireRoleAddResponse>;
9270
9524
 
9271
9525
  /**
9272
- * 插件那一页的契约 —— 十条端点(方案 59 §六 E2,2026-08-21;本地源与市场管理
9273
- * 2026-09-04 补,见下面第一节的**翻案**)。
9526
+ * 插件那一页的契约 —— 十三条端点(方案 59 §六 E2,2026-08-21;本地源与市场管理
9527
+ * 2026-09-04 补,见下面第一节的**翻案**;上传 2026-09-08 补,见第一节之二)。
9274
9528
  *
9275
9529
  * ```
9276
- * GET /api/plugins 装着的 + 市场里有什么 + 已加的市场 + pendingRestart
9530
+ * GET /api/plugins 装着的 + 市场里有什么 + 已加的市场 + pendingRestart + uploadEnabled
9277
9531
  * POST /api/plugins/install/preview {ref} → 将安装什么,一个字节都不写
9278
9532
  * POST /api/plugins/install {ref, token} → 真装
9279
9533
  * POST /api/plugins/install/local/preview {path} → 同上,来源是本机一条目录
@@ -9283,6 +9537,9 @@ declare const WIRE_ROLE_ADD_RESPONSE_FIELDS: WireFields<WireRoleAddResponse>;
9283
9537
  * POST /api/plugins/uninstall {name} → 卸载
9284
9538
  * POST /api/plugins/marketplaces {source} → 加一个市场
9285
9539
  * POST /api/plugins/marketplaces/remove {name} → 移除一个市场
9540
+ * POST /api/plugins/upload/preview {path} → 会打包哪些文件,一个字节都不发
9541
+ * POST /api/plugins/upload {path, token} → 打包 + 交给宿主
9542
+ * POST /api/plugins/refresh {} → 让宿主重拉目录 + 回一份新列表
9286
9543
  * ```
9287
9544
  *
9288
9545
  * 底座是 `EpochRuntime.plugins`(方案 59 PR-4 落的那一片,判据全文在
@@ -9354,7 +9611,41 @@ declare const WIRE_ROLE_ADD_RESPONSE_FIELDS: WireFields<WireRoleAddResponse>;
9354
9611
  * 和 {@link WirePluginMarketplaceRequest}),而它们**是同一件事的两个入口,不是
9355
9612
  * 两道闸门** —— 网线那条多吃一道 403,判据同上第 3 条。
9356
9613
  *
9357
- * # 二、⚠️ 闸门:**绑在回环之外时那九条 POST 一律 403**
9614
+ * # 一之二、⚠️ 还有一条路是**往外**的(2026-09-08)
9615
+ *
9616
+ * | 端点 | 收什么 | 真按下去会发生什么 |
9617
+ * | ---------------- | --------------------- | ---------------------------------------- |
9618
+ * | `upload/preview` | 本机一条**绝对路径** | 走一遍目录,**一个字节都不发、连包都不打** |
9619
+ * | `upload` | 同上 + `token` | 打成 `.zip` → 交给**宿主**的回调 |
9620
+ *
9621
+ * 三条性质:
9622
+ *
9623
+ * 1. **epoch 一个网络请求都不发。** 出口是宿主给的一个回调
9624
+ * (`HostMarketplaces.upload`),不是一条我们去 POST 的 URL —— 判据全文在
9625
+ * `runtime/src/host-marketplaces.ts` 的 `PluginUploadFn` 上(简版:给一条 URL
9626
+ * 就得由我们定 multipart / 鉴权 / 重定向 / 回执四套契约,而那四个答案全在宿主
9627
+ * 那一侧;更要紧的是 token 压根不该进到我们的进程里);
9628
+ * 2. **`uploadEnabled` 那一格是这条路存在与否的全部凭据。** 宿主没给回调时
9629
+ * 界面上那枚按钮整个不画,硬打这条端点拿到 `upload-unavailable`;
9630
+ * 3. **预览那一段的清单,就是打包时喂给 `tar` 的那一份**(core 的 `planPack` →
9631
+ * `packPlugin`,走 `tar -T --format zip`)。「用户看到的」和「真发出去的」在构造上是同一份,
9632
+ * 不是两套规则各走一遍 —— 判据在 core `pack.ts` 的文件头第二节。
9633
+ *
9634
+ * ## ⚠️ 为什么预览那一屏必须**逐个列出文件名**,不能只给个数
9635
+ *
9636
+ * 装错了能卸,**发出去收不回来**。而这条路上最常见的一次事故不是「装错了」,
9637
+ * 是**目录里有一份 `.env`**。所以 {@link WirePluginUploadPlan.files} 是全量清单
9638
+ * 而不是一个 `count`,{@link WirePluginUploadPlan.suspicious} 还要把看起来像密钥的
9639
+ * 那几条单独点名 —— 而**它们仍然在 `files` 里面**(静默剔除会让用户以为发出去的
9640
+ * 是全量,判据在 core `pack.ts` 的文件头第四节)。
9641
+ *
9642
+ * # 二、⚠️ 闸门:**绑在回环之外时那十二条 POST 一律 403**
9643
+ *
9644
+ * > 这个数原来是「九条」,上传那两条 2026-09-08 加进来,刷新那一条 2026-09-10
9645
+ * > 加进来(判据在 {@link WirePluginRefreshResponse} 第三节:它让**宿主**发一次
9646
+ * > 出站请求,而这条路的前提是「网线另一头就是这台机器」)。**它们吃同一道闸,
9647
+ * > 而且是这一整张表里最该吃的两条**:它们读这台机器上任意一条目录、把内容
9648
+ * > **发到外面去**。放行的话,一个 LAN 上的人能指着 `~/.ssh` 说「上传它」。
9358
9649
  *
9359
9650
  * 判据同 [wire-agent-role.ts](./wire-agent-role.ts) 那道,但**这条路比它还远一格**,
9360
9651
  * 四条:
@@ -9422,7 +9713,90 @@ declare const WIRE_ROLE_ADD_RESPONSE_FIELDS: WireFields<WireRoleAddResponse>;
9422
9713
  * 一个插件是从哪儿装来的。**照抄 core 的 `PluginSourceType`,不是第二套枚举** ——
9423
9714
  * 界面据此说「这是一条软链 / 这是 clone 下来的」。
9424
9715
  */
9425
- type WirePluginSourceType = 'local' | 'git' | 'npm' | 'archive';
9716
+ type WirePluginSourceType = 'local' | 'git' | 'npm' | 'archive' | 'host';
9717
+ /**
9718
+ * 那一条是**谁都能装**还是**只有我能装**(2026-09-08)。
9719
+ *
9720
+ * `null` = 这个市场不分公私(一个 GitHub 上的开源市场就没有这个概念)——
9721
+ * 判据在 core `MarketplaceEntry.visibility` 上:布尔表达不出这第三档。
9722
+ */
9723
+ type WirePluginVisibility = 'private' | 'public';
9724
+ /**
9725
+ * 这一条在**市场那一侧**处在什么档口(2026-09-10)。
9726
+ *
9727
+ * 照抄 core 的 `MarketplaceStatus`,不是第二套枚举。`null` = 这个市场不报这个 ——
9728
+ * 一份 GitHub 上的开源目录没有「上架 / 审核」这回事,而印一句「已上架」是句假话。
9729
+ *
9730
+ * ⚠️ **它和 {@link WirePluginVisibility} 各答一半,界面上是两枚芯片不是一枚**:
9731
+ * 那一格答「谁装得到」,这一格答「这一条现在算不算数」。一个 `public` 且
9732
+ * `reviewing` 的条目上两句话同时成立。判据全文在 core 的 `EntrySchema.status` 上。
9733
+ *
9734
+ * ⚠️ **它不参与 {@link WirePluginHit.installable}**:目录是快照、会过时,
9735
+ * 拿一个会过时的档口去收掉安装入口,和 `updateAvailable` 那一格记的是同一笔账。
9736
+ */
9737
+ type WirePluginStatus = 'listed' | 'reviewing' | 'rejected' | 'offline';
9738
+ /**
9739
+ * 上传那一屏上宿主问得出的那几格(2026-09-10 从两格放宽到七格)。
9740
+ *
9741
+ * 照抄 runtime 的 `PLUGIN_UPLOAD_FIELDS`,不是第二套名单 —— 而那一份的名字又逐字
9742
+ * 同 core 的 `MarketplaceEntry`(判据在它上面:这一屏收的东西最终会被宿主写进
9743
+ * 它自己那份目录,两边各起一套名字会逼出一张会错的映射表)。
9744
+ *
9745
+ * ⚠️ **`name` / `version` 不在里面**:那两格是从包里那份 `epoch-plugin.json` 读
9746
+ * 出来的**事实**,不是表单。给它们一个输入框等于让用户在上传界面上改一个包的
9747
+ * 身份,而真装的时候生效的仍旧是包里那一份。
9748
+ */
9749
+ declare const WIRE_PLUGIN_UPLOAD_FORM_FIELDS: readonly ["displayName", "description", "category", "homepage", "icon", "visibility", "changelog"];
9750
+ /** {@link WIRE_PLUGIN_UPLOAD_FORM_FIELDS} 里的一格 */
9751
+ type WirePluginUploadFieldName = (typeof WIRE_PLUGIN_UPLOAD_FORM_FIELDS)[number];
9752
+ /**
9753
+ * 上传表单上一格在浏览器眼里的样子(2026-09-10)。
9754
+ *
9755
+ * ⚠️ **两格都恒有**(`value` 空串 = 宿主没预填,`editable` 恒是布尔)——
9756
+ * 口径同 `WirePluginsResponse.uploadOptions`:界面要的是结论,不是三种等价写法。
9757
+ */
9758
+ interface WirePluginUploadField {
9759
+ /**
9760
+ * 预填的值。**宿主没给就是空串**。
9761
+ *
9762
+ * ⚠️ 它**不是从包里读出来的** —— 这一屏上从包里读出来的那几样(名字 / 版本 /
9763
+ * 描述 / 作者)是**印在上面的事实**,不是表单的默认值。判据在
9764
+ * `HostMarketplaces` 的 `PluginUploadField.value` 上。
9765
+ */
9766
+ value: string;
9767
+ /**
9768
+ * 用户改得动吗。
9769
+ *
9770
+ * ⚠️ **`false` 时界面上那一格要画成印着值的只读格,而不是干脆不画** ——
9771
+ * 它是这一次上传真的会带上去的东西,用户有权在按下确认之前看见它
9772
+ * (同这一整屏「按下去之后会发生什么」的口径)。
9773
+ *
9774
+ * ⚠️ 而它**不是**靠界面上那个 `readonly` 属性兑现的:runtime 那一层会把
9775
+ * 锁死格子上用户传的值整个丢掉,换成宿主给的 `value`(判据在
9776
+ * `PluginUploadForm` 上那两条规矩)。少了那一半,改一次请求体就绕过去了。
9777
+ */
9778
+ editable: boolean;
9779
+ }
9780
+ /**
9781
+ * 七格的形态表 —— **每个键恒有,不画的那几格是 `null`**。
9782
+ *
9783
+ * 判据在 `WirePluginsResponse.uploadOptions` 上(为什么是 `Record<>` 而不是一串
9784
+ * 可选键:加一格之后服务端当场编译不过,而漏一格没有任何东西会红)。
9785
+ */
9786
+ type WirePluginUploadFields = Record<WirePluginUploadFieldName, WirePluginUploadField | null>;
9787
+ /**
9788
+ * 用户**填完之后**那一份(2026-09-10)—— 和上面那张形态表是两件事。
9789
+ *
9790
+ * 那一张答的是「这一屏该画成什么样」(服务端发下来),这一份答的是
9791
+ * 「用户填了什么」(浏览器发上去)。写成两个类型而不是复用一个:
9792
+ * 形态表上每一格是 `{value, editable}`,而这一份上每一格就是一个值。
9793
+ *
9794
+ * ⚠️ 除 `visibility` 之外全是字符串,判据在 `WIRE_PLUGIN_UPLOAD_FORM_FIELDS` 上
9795
+ * (它们最终会被宿主写进自己那份目录,而目录条目上那几格本来就是字符串)。
9796
+ */
9797
+ type WirePluginUploadForm = {
9798
+ visibility?: WirePluginVisibility;
9799
+ } & Partial<Record<Exclude<WirePluginUploadFieldName, 'visibility'>, string>>;
9426
9800
  /** 六类扩展物各贡献了几条。字段名照 core 的 `PluginCounts`,不自造映射 */
9427
9801
  interface WirePluginCounts {
9428
9802
  commands: number;
@@ -9501,6 +9875,94 @@ interface WirePluginHit {
9501
9875
  installable: boolean;
9502
9876
  /** 已经装过同名的了。界面据此把「安装」换成「已装上」 */
9503
9877
  installed: boolean;
9878
+ /**
9879
+ * **这一条是谁写的**(2026-09-08)。目录里没写就是 `null`。
9880
+ *
9881
+ * ⚠️ **不是市场自己的 `owner`。** 那一格答的是「清单是谁放的」(「Acme 内部
9882
+ * 插件市场」),这一格答的是「这一个插件是谁写的」—— 在一个**用户上传的**市场里,
9883
+ * 两者从第二条开始就不相等。拿 `owner` 顶上去的表现是那一列给每一行印同一个
9884
+ * 名字,而那是一句假话(所以这份回执上刻意**没有** `owner`)。
9885
+ *
9886
+ * ⚠️ 摊平成一个字符串(`author.name`),口径同 {@link WirePluginPreview.author}:
9887
+ * 界面上这一格就印一个名字,把 `{name,email,url}` 整个发上去只是让浏览器多一份
9888
+ * 它不画的东西 —— 而 email 尤其不该在一份**不吃那道 403** 的 `GET` 里到处发
9889
+ * (判据同 `GET /api/mcp/config` 为什么连读都挡:那份里的 `env` 是明文密钥)。
9890
+ */
9891
+ author: string | null;
9892
+ /**
9893
+ * 被装过多少次(2026-09-08)。**`null` = 这个市场不报这个数**,界面上那一格
9894
+ * 整个不画 —— 它和 `0` 是两句不同的话(「没人报」vs「一次都没装过」)。
9895
+ *
9896
+ * ⚠️ **这个数是市场那一侧数的,不是我们数的**:安装是本机的事,epoch 不上报
9897
+ * 任何东西。判据在 core `MarketplaceEntry.downloads` 上,那儿还记着第二条 ——
9898
+ * **它冻在「加这个市场」那一刻**(目录是快照,`marketplace update` 才重拉)。
9899
+ */
9900
+ downloads: number | null;
9901
+ /** 被点了多少个赞。`null` = 不报,口径同 {@link downloads}(含「会过时」那条) */
9902
+ likes: number | null;
9903
+ /**
9904
+ * **给人看的名字**(2026-09-08)。`null` = 目录里没写,界面上就印 {@link name}。
9905
+ *
9906
+ * ⚠️ 它和 {@link name} 是两件事:那一格是**标识**(小写 ASCII,要能当命令前缀),
9907
+ * 这一格是**显示名**(「淘宝批量改价」)。少了它,一个面向中文用户的市场在列表上
9908
+ * 只能印 `taobao-batch-edit` —— 判据在 core `MarketplaceEntry.displayName` 上。
9909
+ */
9910
+ displayName: string | null;
9911
+ /**
9912
+ * 图标地址。`null` = 没有,那一格整个不画(**不画占位图**)。
9913
+ *
9914
+ * ⚠️ **界面会去加载它,也就是浏览器会发一次请求** —— 那不是 epoch 在调接口
9915
+ * (我们一个请求都不发),但它确实会让出这份目录的那台服务器知道
9916
+ * 「有人在看这个列表」。宿主拿自己的 CDN 时没问题;这一句写在这儿是为了让
9917
+ * 「填一个第三方地址」那个决定是睁着眼做的。判据同 core 那一格。
9918
+ */
9919
+ icon: string | null;
9920
+ /**
9921
+ * **市场说的**当前版本。`null` = 目录里没写。
9922
+ *
9923
+ * ⚠️ 它和「装上之后的版本」不是同一个数(那个在 {@link WirePluginEntry.version})。
9924
+ * 两者不等的结论已经算好了,在 {@link updateAvailable} —— 界面**别自己比**。
9925
+ */
9926
+ version: string | null;
9927
+ /** 这一版改了什么。`null` = 没写 */
9928
+ changelog: string | null;
9929
+ /** 安装包多大,字节。`null` = 没写(**不是 0**,一个空包装不上) */
9930
+ size: number | null;
9931
+ /** 这一条的主页 / 文档。`null` = 没写 */
9932
+ homepage: string | null;
9933
+ /** 公开还是私有。`null` = 这个市场不分这个,判据在 {@link WirePluginVisibility} 上 */
9934
+ visibility: WirePluginVisibility | null;
9935
+ /**
9936
+ * 这一条在市场那一侧的档口(2026-09-10)。`null` = 这个市场不报这个。
9937
+ *
9938
+ * 判据全文在 {@link WirePluginStatus} 上。⚠️ 界面上它是**卡片左上角那枚徽标**,
9939
+ * 和右边那几枚中性芯片(作者 / 分类)刻意不同色 —— 它是这一条的**状态**,
9940
+ * 而那几枚是它的**属性**。
9941
+ */
9942
+ status: WirePluginStatus | null;
9943
+ /**
9944
+ * **装着的那个比市场说的旧**(2026-09-08)。
9945
+ *
9946
+ * ## ⚠️ 它是「多说一句 + 多给一个入口」,不是「可以收掉更新按钮」了
9947
+ *
9948
+ * 市场目录是**加市场那一刻的快照**(会过时,判据在 core
9949
+ * `MarketplaceEntry.version` 上那张两行的表)。所以比对的两个方向代价不同:
9950
+ *
9951
+ * - 说「有新版本」而其实没有 → 用户点一下,更新回同一版。烦,不坏;
9952
+ * - 说「已是最新」而其实有 → **一次真的更新被藏起来**。
9953
+ *
9954
+ * 于是规矩是:`true` 时市场那一行把「已装上」换成一枚**更新按钮**、装着那一行
9955
+ * 多一句「有新版本」;而 `false` **什么都不减** —— 装着那一行的更新按钮照旧画。
9956
+ * ⚠️ **别拿 `!updateAvailable` 去隐藏任何东西。**
9957
+ *
9958
+ * ## `false` 有三种成因,而界面不需要分
9959
+ *
9960
+ * 目录没写版本 / 两个版本一样 / 它是软链装的(那一档 update 恒回
9961
+ * `nothing-to-do`,画一个按钮是让用户去读一句本可以不出现的话)。
9962
+ * 三档的界面表现都是「不多说那句话」,所以合成一个布尔是对的 ——
9963
+ * 而**算它的地方只有服务端**(口径同 `installable`)。
9964
+ */
9965
+ updateAvailable: boolean;
9504
9966
  }
9505
9967
  /**
9506
9968
  * 已加的一个市场 —— 「插件从哪儿来」那张清单上的一行。
@@ -9554,6 +10016,56 @@ interface WirePluginsResponse {
9554
10016
  * 变 true —— 这个进程确实没变过。
9555
10017
  */
9556
10018
  pendingRestart: boolean;
10019
+ /**
10020
+ * 宿主给了上传出口吗(2026-09-08)。**界面上那枚「上传」按钮画不画就看这一格。**
10021
+ *
10022
+ * ⚠️ 发的是**服务端算好的结论**(runtime 那一层把「有没有出口」和「开关开没开」
10023
+ * 两格与在一起的答案),不是那两格本身 —— 口径逐字同
10024
+ * {@link WirePluginHit.installable} 为什么不发 `allowRemote`:一个问题两处能推的
10025
+ * 那天它们就会分叉,而分叉的表现是一枚画出来了、按下去必然拿到
10026
+ * `upload-unavailable` 的按钮。
10027
+ *
10028
+ * ⚠️ **默认是 `false`**:宿主那格 `allowUpload` 默认关(判据在
10029
+ * `HostMarketplaces.allowUpload` 上)。所以界面那一侧该按「不画」写默认分支,
10030
+ * 别写成「除非明确关掉否则画」。
10031
+ *
10032
+ * ⚠️ 它和 `lanExposed` 是**两格,各答一半**,界面要两格一起看:这一格答
10033
+ * 「这个部署有没有这条路」,那一格答「网线另一头是不是这台机器」。
10034
+ * 少任何一格都会画出一枚点了必然被拒的按钮。
10035
+ */
10036
+ uploadEnabled: boolean;
10037
+ /**
10038
+ * 上传那一屏上多问哪几格,**每一格长什么样**(2026-09-08 两个布尔 →
10039
+ * 2026-09-10 七格的形态表)。
10040
+ *
10041
+ * ⚠️ **七个键恒有,不画的那几格是 `null`**:界面要的是「画不画 / 预填什么 /
10042
+ * 改不改得动」这三个结论,而缺席 / 空对象 / 显式 false 三种写法说的是同一件事
10043
+ * —— 让每一层各自 `??` 一次就是把同一个默认值抄三遍。口径同 {@link uploadEnabled}。
10044
+ *
10045
+ * ⚠️ 写成 `Record<>` 而不是一串可选键:{@link WirePluginUploadFields} 加一格
10046
+ * 之后**服务端当场编译不过**,而漏一格的表现只是屏幕上少一个输入框 ——
10047
+ * 没有任何东西会红。判据逐字同 web 那张 `STATE_LABEL`。
10048
+ *
10049
+ * ⚠️ 默认**都不问**:画一个「公开 / 私有」的选择就是在承诺「这个选择会被尊重」,
10050
+ * 而一个没有公私概念的宿主只能忽略它 —— 那时界面上那一下是骗人的。
10051
+ * 判据在 `HostMarketplaces.uploadOptions` 上。
10052
+ */
10053
+ uploadOptions: WirePluginUploadFields;
10054
+ /**
10055
+ * 宿主给了「去把目录重拉一遍」那个出口吗(2026-09-10)。
10056
+ * **界面上那枚「刷新」按钮画不画就看这一格。**
10057
+ *
10058
+ * ⚠️ 口径逐字同 {@link uploadEnabled}:发的是**服务端算好的结论**,
10059
+ * 不是把宿主那格回调在不在透上来让界面自己推。分叉的表现是一枚画出来了、
10060
+ * 按下去必然拿到 `refresh-unavailable` 的按钮。
10061
+ *
10062
+ * ⚠️ **默认 `false`**(宿主没给 `HostMarketplaces.refresh` 就是没有这条路),
10063
+ * 所以界面那一侧该按「不画」写默认分支。
10064
+ *
10065
+ * ⚠️ 它和 `lanExposed` 同样是**两格各答一半**:这一格答「这个部署有没有这条路」,
10066
+ * 那一格答「网线另一头是不是这台机器」。
10067
+ */
10068
+ refreshEnabled: boolean;
9557
10069
  }
9558
10070
  declare const WIRE_PLUGINS_FIELDS: WireFields<WirePluginsResponse>;
9559
10071
  /**
@@ -9671,14 +10183,29 @@ declare const WIRE_PLUGIN_UPDATE_FIELDS: WireFields<WirePluginUpdateRequest>;
9671
10183
  * | `stale-token` | 你确认的和现在要装的对不上,**一个字节都没写** | 重看一次预览 |
9672
10184
  * | `not-installed` | update / uninstall 收到一个没装过的名字 | 先装上 |
9673
10185
  * | `nothing-to-do` | **不是出错**:软链装的插件一直是最新的 | 什么都不用做 |
10186
+ * | `upload-unavailable` | **宿主没给上传出口**,这个部署没有这条路 | 没有(按钮本不该画)|
10187
+ * | `upload-rejected` | **宿主收下了但说不行**(重名 / 无权限 / 待审核) | 看宿主那句 `detail` |
10188
+ * | `refresh-unavailable` | **宿主没给刷新出口**,这个部署没有这条路 | 没有(按钮本不该画)|
9674
10189
  * | `failed` | 其余(拉不到 / 清单坏了 / 写记录时被抢先) | 看 `detail` |
9675
10190
  *
10191
+ * ⚠️ 上传那两档(2026-09-08)**都不能并进 `failed`**:`upload-unavailable` 和
10192
+ * 503 `no-plugin-control` 同族 —— 它是一句关于**这个部署**的真话,用户没有下一步
10193
+ * (真收到了说明界面漏画了 `uploadEnabled` 那道判断,界面该按「我们的 bug」处置);
10194
+ * `upload-rejected` 的下一步**在宿主那句话里**,而 `failed` 的下一步是「再试一次」。
10195
+ * 合成一档的表现是界面拿「再试一次」去答「你没有这个市场的发布权限」。
10196
+ *
10197
+ * ⚠️ `refresh-unavailable`(2026-09-10)和 `upload-unavailable` **同族但不同格**:
10198
+ * 两者都是「这个部署没有这条路」,而合成一档的话,一个只给了上传出口、没给刷新
10199
+ * 出口的宿主会看见一句指着上传的错话。⚠️ 它同样**不能并进 `failed`** ——
10200
+ * 收到它说明界面漏画了 `refreshEnabled` 那道判断,该按「我们的 bug」处置,
10201
+ * 而不是让用户去「再试一次」。
10202
+ *
9676
10203
  * ⚠️ `not-local` **不能并进 `unknown-ref`**,尽管两者都是「你给的那串不对」:
9677
10204
  * 前者的下一步是「把相对路径改成绝对路径」或「这东西得从市场装」,
9678
10205
  * 后者是「换一条市场引用」。合成一档的表现是界面拿同一句话去答两个问题 ——
9679
10206
  * 而这条路上最常见的一次输入错误恰恰就是把 `github:` 贴进了本地那个框。
9680
10207
  */
9681
- type WirePluginRefuseReason = 'unknown-ref' | 'not-local' | 'remote-disabled' | 'conflict' | 'stale-token' | 'not-installed' | 'nothing-to-do' | 'failed';
10208
+ type WirePluginRefuseReason = 'unknown-ref' | 'not-local' | 'remote-disabled' | 'conflict' | 'stale-token' | 'not-installed' | 'nothing-to-do' | 'upload-unavailable' | 'refresh-unavailable' | 'upload-rejected' | 'failed';
9682
10209
  /** 一次 hook 盘点:这个事件上有几条 */
9683
10210
  interface WirePluginHookTally {
9684
10211
  type: string;
@@ -9723,7 +10250,16 @@ interface WirePluginPreview {
9723
10250
  ignoredBuckets: readonly string[];
9724
10251
  /** 有没有 `tools/` 目录。第一版不跑 JS 工具,探出来只为了说一句话 */
9725
10252
  hasJsTools: boolean;
9726
- /** 已经装过同名的了(这次会被拒)。没撞就是 `null` */
10253
+ /**
10254
+ * 已经装过同名的了(**这次会被拒**)。没撞就是 `null`。
10255
+ *
10256
+ * ⚠️ **更新那条路上恒为 `null`,哪怕锁里确实有同名的那一条**(2026-09-10):
10257
+ * `update/preview` 要替换的就是它,它是被换掉的那一个、不是挡路的。
10258
+ * 这一格答的是「这次会不会被拒」,不是「锁里有没有同名的」——
10259
+ * 按后者读就会把一次**明明会成功**的更新画成一个点不动的按钮
10260
+ * (真宿主上撞到过:kdocs@2.5.7 → 2.5.8)。产地判据在 core 的
10261
+ * `InstallPreview.conflict` 上,界面因此**不需要**再按 install / update 分档。
10262
+ */
9727
10263
  conflict: {
9728
10264
  name: string;
9729
10265
  version: string;
@@ -9814,6 +10350,205 @@ interface WirePluginMarketplaceResponse {
9814
10350
  detail: string | null;
9815
10351
  }
9816
10352
  declare const WIRE_PLUGIN_MARKETPLACE_RESPONSE_FIELDS: WireFields<WirePluginMarketplaceResponse>;
10353
+ /**
10354
+ * `POST /api/plugins/refresh` —— 「去把目录重拉一遍」。
10355
+ *
10356
+ * ## ⚠️ 一、**请求体是空的,而那是这条端点的性质本体**
10357
+ *
10358
+ * 这里没有 `source`、没有 `name`、没有 `url` —— 刷的是**宿主自己预置的那几个市场**,
10359
+ * 而「那几个是哪几个」是装配期就定死的(`HostMarketplaces.sources`)。
10360
+ * 收一格 `source` 的话,这条端点就退化成「给我一个地址我就去拉」——
10361
+ * 也就是一条由网线发起的任意出站请求,而那正是 `allowRemote` 默认关在防的东西。
10362
+ *
10363
+ * ## ⚠️ 二、真正去拉的**不是我们,是宿主**
10364
+ *
10365
+ * 这一发落到 `HostMarketplaces.refresh` 那个回调上(判据全文在 runtime 的
10366
+ * `PluginRefreshFn` 上)。epoch 一个网络请求都不发 —— 口径逐字同上传那条路:
10367
+ * 目录后面那台服务器要什么鉴权、走什么协议、失败怎么分档,四个答案全在宿主那侧。
10368
+ *
10369
+ * 宿主把新目录准备好之后,我们**重读一遍本机那份 `marketplaces.json`** 并把结论
10370
+ * 算进这一份回执 —— 于是界面在这一发 resolve 的那一刻就拿得到新列表,
10371
+ * 不需要轮询、也不需要我们去监听宿主发来的任何东西。
10372
+ *
10373
+ * ## ⚠️ 三、它吃第二节那道 403(LAN 那一档下拒)
10374
+ *
10375
+ * 判据同那十一条 POST:这一下会**让宿主发一次出站请求**,而「网线另一头是不是
10376
+ * 这台机器」是这条路成立的前提。⚠️ 于是那个数从「十一条」变成**十二条**。
10377
+ */
10378
+ interface WirePluginRefreshResponse {
10379
+ /**
10380
+ * **`ok: true` 的意思是「这一遍跑完了」,不是「目录变了」。**
10381
+ *
10382
+ * ⚠️ 一次什么都没变的刷新照样是 `true` —— 那是一句真话(宿主那份目录就是没动过),
10383
+ * 而把它算成失败会让用户去查一个不存在的故障。「变没变」这件事界面**不说**:
10384
+ * 它拿到的是刷完之后的那一份,而那一份是不是和刚才一样,用户自己看得见。
10385
+ */
10386
+ ok: boolean;
10387
+ /**
10388
+ * 刷完之后**重新读出来的那一份**(`GET /api/plugins` 的同一个形状)。
10389
+ *
10390
+ * ## ⚠️ 为什么整份回来,而不是让界面自己再打一发 `GET`
10391
+ *
10392
+ * 因为「即时」这件事是这一格给的:再打一发的话,两次请求之间那段时间里屏幕上
10393
+ * 是旧列表,而用户刚按过刷新 —— 那正是「点了半个反应」的形态。更要紧的是
10394
+ * 那两发之间**没有任何东西保证顺序**(一次慢的 refresh 后面跟一次快的 GET,
10395
+ * 拿到的是刷之前的快照,而屏幕会把它当成刷新的结果)。
10396
+ *
10397
+ * ⚠️ 没成那一档是 `null`:那时盘上那份一个字都没动,回一份「刷新后的列表」
10398
+ * 是句假话(界面该留着屏幕上原来那一份,判据在 web 那一侧的 `onRefreshed` 上)。
10399
+ */
10400
+ plugins: WirePluginsResponse | null;
10401
+ /** 没成才有 */
10402
+ reason: WirePluginRefuseReason | null;
10403
+ /**
10404
+ * 没成才有。**服务端渲染好的一句人话**,界面原样上屏。
10405
+ *
10406
+ * ⚠️ 宿主那句拒绝原话优先(同 `PluginUploadFn` 那一条)——「你没有权限刷新这个
10407
+ * 市场」「后台正在维护」这类话我们一句都编不出来,而它们正是用户此刻要看的。
10408
+ */
10409
+ detail: string | null;
10410
+ }
10411
+ declare const WIRE_PLUGIN_REFRESH_RESPONSE_FIELDS: WireFields<WirePluginRefreshResponse>;
10412
+ /**
10413
+ * `POST /api/plugins/upload/preview` 的请求体 —— **本机上一条目录**。
10414
+ *
10415
+ * ⚠️ 只有 `path` 一格,而且只收**本地绝对路径**。形状上的性质逐字同
10416
+ * {@link WirePluginLocalRequest}:往这儿传 `github:acme/x` 或一条相对路径都是
10417
+ * `not-local`。它复用的就是那条端点的同一道闸(runtime 的 `resolveLocal`)——
10418
+ * 「什么算一条能指的本地目录」全仓只有一个答案。
10419
+ *
10420
+ * ⚠️ **这条 `path` 是服务端那台机器上的路径,不是浏览器那台的。** 界面上必须
10421
+ * 把这句话说出来 —— 而在这条路上它比装本地插件那条**更容易被误读**:一个写着
10422
+ * 「上传」的按钮旁边放一个输入框,用户第一反应就是贴自己电脑上的路径。
10423
+ */
10424
+ interface WirePluginUploadRequest {
10425
+ /** 本机上一条**绝对**路径,指向一个插件目录(里面得有 `epoch-plugin.json`) */
10426
+ path: string;
10427
+ }
10428
+ declare const WIRE_PLUGIN_UPLOAD_FIELDS: WireFields<WirePluginUploadRequest>;
10429
+ /**
10430
+ * `POST /api/plugins/upload` 的请求体。
10431
+ *
10432
+ * `token` 的判据同 {@link WirePluginInstallRequest},而这条路上它**更硬**:
10433
+ * 那一档拦的是「装了一份你没看过的东西」(还能卸),这一档拦的是
10434
+ * 「**发出去了**一份你没看过的东西」。对不上那一发**宿主回调一次都不调**。
10435
+ */
10436
+ interface WirePluginUploadConfirmRequest extends WirePluginUploadRequest {
10437
+ token: string;
10438
+ /**
10439
+ * 「公开还是私有」(2026-09-08)。**只在 `uploadOptions.visibility` 非 `null`
10440
+ * 时才该发。**
10441
+ *
10442
+ * ⚠️ 发了也不一定算:runtime 那一层会把**宿主没声明要问的格子丢掉**
10443
+ * (判据在 `PluginUploadForm` 上)—— 否则一个改了请求体的浏览器就能让宿主收到
10444
+ * 一个它从没答应过要处理的值。也就是说这一格**在服务端是被收窄的,不是被信任的**。
10445
+ *
10446
+ * ⚠️ **2026-09-10 起还有第二道**:宿主把这一格标成 `editable: false` 时,
10447
+ * 用户传上来的这一份**同样被丢掉**,换成宿主自己给的 `value`。
10448
+ * 两道是同一条规矩的两半,全文在 `PluginUploadForm` 上。
10449
+ */
10450
+ visibility?: WirePluginVisibility;
10451
+ /** 本版更新说明。同上,只在 `uploadOptions.changelog` 非 `null` 时才该发 */
10452
+ changelog?: string;
10453
+ /**
10454
+ * 剩下那五格(2026-09-10)—— 逐格同上(只在对应那一格非 `null` 时才该发,
10455
+ * 而且发了也要过服务端那两道收窄)。名单在 {@link WIRE_PLUGIN_UPLOAD_FORM_FIELDS} 上。
10456
+ */
10457
+ displayName?: string;
10458
+ description?: string;
10459
+ category?: string;
10460
+ homepage?: string;
10461
+ icon?: string;
10462
+ }
10463
+ declare const WIRE_PLUGIN_UPLOAD_CONFIRM_FIELDS: WireFields<WirePluginUploadConfirmRequest>;
10464
+ /** 会被打进包里的一个文件 */
10465
+ interface WirePluginUploadFile {
10466
+ /** 相对插件根,`/` 分隔 */
10467
+ path: string;
10468
+ bytes: number;
10469
+ }
10470
+ /**
10471
+ * 「会打包什么」那一屏的内容 —— 这条路上给**人**的那道闸门。
10472
+ *
10473
+ * ⚠️ **{@link files} 是全量清单不是一个计数**,判据在文件头第一节之二那条 ⚠️:
10474
+ * 这条路上最常见的一次事故是「目录里有一份 `.env`」,而一个「共 14 个文件」
10475
+ * 答不出那件事。
10476
+ */
10477
+ interface WirePluginUploadPlan {
10478
+ name: string;
10479
+ version: string;
10480
+ /** 清单里那句。没写就是空串 */
10481
+ description: string;
10482
+ /** 清单里的 `author.name`,摊平;没写就是 `null` */
10483
+ author: string | null;
10484
+ /** 会打进包里的每一个文件,按路径排过序 */
10485
+ files: readonly WirePluginUploadFile[];
10486
+ totalBytes: number;
10487
+ /**
10488
+ * 名字看起来像密钥的那几条(`.env` / `*.pem` / `*.key` / `id_rsa`)。
10489
+ *
10490
+ * ⚠️ **它们仍然在 {@link files} 里面** —— 这一格是「点名」不是「已剔除」。
10491
+ * 界面上必须说清这一点,否则用户会以为我们替他删掉了(判据在 core `pack.ts`
10492
+ * 的文件头第四节)。
10493
+ */
10494
+ suspicious: readonly string[];
10495
+ /**
10496
+ * 跳过的软链,**不在 {@link files} 里**。
10497
+ *
10498
+ * 要发出来:解开的包比原目录少东西而没人说过为什么,是这条路上最难查的一种
10499
+ * 「我上传的插件在别人那儿跑不起来」。
10500
+ */
10501
+ skippedLinks: readonly string[];
10502
+ }
10503
+ /**
10504
+ * `POST /api/plugins/upload/preview` 的回执。
10505
+ *
10506
+ * ⚠️ 失败也是 200,判据同 {@link WirePluginPreviewResponse}。
10507
+ */
10508
+ interface WirePluginUploadPreviewResponse {
10509
+ ok: boolean;
10510
+ /** 成了才有 */
10511
+ plan: WirePluginUploadPlan | null;
10512
+ /** 成了才有。原样发回 {@link WirePluginUploadConfirmRequest.token} */
10513
+ token: string | null;
10514
+ /** 没成才有 */
10515
+ reason: WirePluginRefuseReason | null;
10516
+ /** 没成才有。**服务端渲染好的一句人话**,界面原样上屏 */
10517
+ detail: string | null;
10518
+ }
10519
+ declare const WIRE_PLUGIN_UPLOAD_PREVIEW_RESPONSE_FIELDS: WireFields<WirePluginUploadPreviewResponse>;
10520
+ /**
10521
+ * `POST /api/plugins/upload` 的回执。
10522
+ *
10523
+ * ⚠️ **这一份上没有 `pendingRestart`,而那不是漏了**:交出去一个包,这台机器上
10524
+ * 一个扩展物都没动 —— 判据逐字同 {@link WirePluginMarketplaceResponse} 上那条。
10525
+ *
10526
+ * ⚠️ **`ok: true` 的意思是「宿主收下了」,不是「市场里能搜到了」。** 后者要等
10527
+ * 宿主自己那份目录更新(可能还要过审核),而那件事发生在我们看不见的地方 ——
10528
+ * 所以那句话由 {@link detail}(宿主原话)来说,界面别自己补一句「已上架」。
10529
+ */
10530
+ interface WirePluginUploadResponse {
10531
+ ok: boolean;
10532
+ /**
10533
+ * 成了那一档:**宿主那句回执**(「已提交审核」/「已发布」),可能是空串 ——
10534
+ * 那时界面说自己那句「已交给这个程序」。没成那一档是拒绝的原因。
10535
+ *
10536
+ * ⚠️ 和 {@link WirePluginActionResponse.detail} 刻意在成功时发 `null` **不一样**,
10537
+ * 而这个不一致是有理由的:那一档屏幕上要说的话全在数据里(装上了什么、
10538
+ * 还没生效),而这一档屏幕上唯一能说的话**只有宿主知道** —— 上传之后发生什么
10539
+ * (直接上架?排队审核?)是它那一侧的流程,我们编不出来。
10540
+ */
10541
+ detail: string | null;
10542
+ /** 刚交出去的那一份是什么。没成那一档是 `null` */
10543
+ uploaded: {
10544
+ name: string;
10545
+ version: string;
10546
+ bytes: number;
10547
+ } | null;
10548
+ /** 没成才有 */
10549
+ reason: WirePluginRefuseReason | null;
10550
+ }
10551
+ declare const WIRE_PLUGIN_UPLOAD_RESPONSE_FIELDS: WireFields<WirePluginUploadResponse>;
9817
10552
 
9818
10553
  /**
9819
10554
  * 一条诊断。**原样来自 `parseMcpConfig` 的 `issues`**,服务端不改写也不筛。
@@ -10495,7 +11230,7 @@ type WireAuditOutcome = 'granted' | 'denied';
10495
11230
  * | ------------------------ | ------------------------------------------------- |
10496
11231
  * | `dangerous-command` | 安全底线:危险命令表命中 |
10497
11232
  * | `sensitive-path` | 安全底线:敏感路径表命中 |
10498
- * | `obfuscated` | 安全底线:命令含混淆构造,且非交互无人可问 |
11233
+ * | `obfuscated` | 安全底线:命令含混淆构造,而这一轮问不出来 |
10499
11234
  * | `rule-match` | 三张紧凑权限规则列表命中(就是上面那张表里的规则)|
10500
11235
  * | `policy-rule` | `policies/*.toml` 的 `[[rule]]` 命中 |
10501
11236
  * | `approval-cache` | 命中审批缓存 —— 用户以前批过 / 拒过 |
@@ -12857,4 +13592,4 @@ declare const SECRET_SERVICE = "epoch-agent";
12857
13592
  */
12858
13593
  declare const MCP_DATA_KEY_NAME = "mcp-auth-data-key";
12859
13594
 
12860
- export { ACTION_CONTEXTS, AGENT_ROLE_NAME_PATTERN, API_KEY_ENV_VARS, APPROVAL_OUTCOMES, type ActiveAgentRole, type AgentEvent, type AgentEventOf, type AgentEventType, type AgentRole, type AgentRoleScope, type AgentRoleSource, type ApprovalAnswer, type ApprovalOutcome, type ApprovalReply, type ApprovalRequest, type ArtifactKind, type AttributeValue, type Attributes, type BackgroundTaskInfo, type BackgroundTaskKind, type BackgroundTaskStatus, type BlankCard, type BlankGreeting, type BoundKey, type BudgetBreach, COMMAND_NAME_PATTERN, COMPLIANCE_ACTIONS, COMPLIANCE_CATEGORIES, type Catalogs, type ComplianceAction, type ComplianceCategory, type ContextBreakdown, type ContextSegment, type CustomCommandDef, type CustomCommandSource, DEFAULT_AGENT_ROLE, DEFAULT_LANG, type DecidedTrustLevel, type Diagnostic, DiagnosticSink, type DiagnosticStatus, type EpochConfig, type EpochContentPart, type EpochFilePart, type EpochHook, type EpochImagePart, type EpochMessage, type EpochMessageRole, type EpochPlugin, type EpochSessionPart, type EpochSkill, type EpochTextPart, type EpochTool, type EpochToolCall, type EpochToolResult, type EpochTurnFacts, type EpochUserContent, type ExpandedCommand, type FileOmitReason, type FinishReason, type FixableApproval, type FlatCatalog, GEN_AI, HEADLESS_INPUT_EVENT_TYPES, HEADLESS_INPUT_FORMATS, HEADLESS_OUTPUT_FORMATS, HEADLESS_PROTOCOL_VERSION, type HeadlessEnvelope, type HeadlessEvent, type HeadlessInit, type HeadlessInputEvent, type HeadlessInputEventType, type HeadlessInputFormat, type HeadlessLifecycleEvent, type HeadlessOutputFormat, type HeadlessResult, type HeadlessResultReason, type HookContext, type HookEvent, type HookHandler, type HookManager, type HookRegistration, type HookType, type HostText, type HostUser, type JsonSchema, KEY_ACTIONS, type KeyAction, type KeyChord, type KeyContext, type KeySequence, type KeybindingReport, type KeybindingSource, type KeybindingTable, LANGS, type Lang, type LocalizedDetail, type LogFn, MAX_ATTACH_BYTES, MAX_ATTACH_FILES, MAX_ATTACH_TOTAL_BYTES, MAX_HEADER_CHARS, MAX_OPTIONS, MAX_QUESTIONS, MAX_SESSION_ATTACH_BYTES, MAX_SESSION_REFS, MCP_DATA_KEY_NAME, METRIC, MIN_OPTIONS, type MentionSet, type ModelRef, type ModelSelection, type ModelSelectionOrigin, NOOP_TELEMETRY, type NoticeCode, OPERATION_TYPES, type Operation, type OperationType, PERMISSION_LEVELS, PLAN_OUTCOMES, PROVIDER_INFOS, PROVIDER_TYPES, type PermissionDecision, type PermissionLevel, type PermissionManager, type PermissionRuleLists, type PlanApprovalOutcome, type PlanProposal, type PluginContext, type ProviderInfo, type ProviderType, type QuestionAnswer, type QuestionItem, type QuestionOption, type QuestionRequest, RESERVED_CHORDS, RESERVED_COMMAND_NAMES, type RejectReason, type RejectedKey, type RuleValue, SCHEDULE_DRAFT_TOOL, SCHEDULE_INTERVAL_MINUTES, SCHEDULE_RUN_STATUSES, SCHEDULE_TEMPLATES, SEARCH_API_KEY_ENV, SEARCH_PROVIDER_TYPES, SECRET_SERVICE, SEQUENCE_CONTEXTS, SESSION_MENTION_PREFIX, SESSION_REFERENCE_ERROR_CODES, SHELL_KINDS, SIDEBAR_MENU_MESSAGE_TYPE, SIMULTANEOUS_CONTEXTS, SYSTEM_NOTE_PREFIX, type ScheduleAllowlist, type ScheduleBackendKind, type ScheduleCycle, type ScheduleDefinition, type ScheduleDraft, type ScheduleDraftAllowlist, type ScheduleDraftCreate, type ScheduleDraftPermission, type ScheduleDraftUpdate, type SchedulePendingApproval, type SchedulePendingItem, type ScheduleRun, type ScheduleRunStatus, type ScheduleRunnerSpec, type ScheduleTemplate, type ScheduleTemplateId, type ScheduleTrigger, type ScheduleTriggerKind, type ScheduleWeekday, type ScheduleWideningKind, type SearchProviderType, type SecretBackendId, type SecretStore, type SelectionContext, type SelectionRejection, type SelectionWarning, type SessionAttachKind, type SessionAttachResult, type SessionOmitReason, type SessionSurfaceMessage, type SessionSurfaceView, type SetSelectionResult, type ShellKind, type SidebarMenuItem, type SidebarMenuMessage, type SpanLike, type SubToolCall, type SubToolCallResult, type Telemetry, type TokenUsage, type ToolAnnotations, type ToolArtifact, type ToolArtifactInput, type ToolContext, type ToolDefinition, ToolExposure, type ToolProvider, type ToolResult, type Translate, type TranslateVars, type TrustLevel, type TrustManager, type TrustRecord, type TrustScope, UNLIMITED_TURNS, type VerifyResult, WIRE_ABORT_FIELDS, WIRE_ABOUT_FIELDS, WIRE_AGENT_ROLE_FIELDS, WIRE_APPROVAL_CACHE_REVOKE_REQUEST_FIELDS, WIRE_APPROVAL_CACHE_REVOKE_RESPONSE_FIELDS, WIRE_APPROVAL_LIST_FIELDS, WIRE_APPROVAL_ROW_FIELDS, WIRE_ARTIFACTS_FIELDS, WIRE_AUDIT_LOG_FIELDS, WIRE_AUDIT_ROW_FIELDS, WIRE_AUTH_COOKIE, WIRE_AUTH_COOKIE_ATTRS, WIRE_AUTH_TOKEN_PARAM, WIRE_BACKGROUND_TASK_FIELDS, WIRE_BLOCKED_GOALS_FIELDS, WIRE_BLOCKED_GOAL_FIELDS, WIRE_BLOCKED_LEVEL_FIELDS, WIRE_BUILTIN_CONNECTOR_FIELDS, WIRE_CACHED_APPROVAL_FIELDS, WIRE_CAPABILITIES_FIELDS, WIRE_CAPABILITY_PROJECT_FIELDS, WIRE_CHECKPOINT_LIST_FIELDS, WIRE_CHECKPOINT_SUMMARY_FIELDS, WIRE_COMMANDS_FIELDS, WIRE_COMMAND_EXPANSION_FIELDS, WIRE_COMPACT_FIELDS, WIRE_COMPRESSION_LINE_FIELDS, WIRE_CONFIG_FIELDS, WIRE_CONTEXT_FIELDS, WIRE_CREATE_SESSION_FIELDS, WIRE_CREATE_WORKSPACE_FIELDS, WIRE_CREATE_WORKSPACE_RESPONSE_FIELDS, WIRE_CUSTOM_COMMAND_FIELDS, WIRE_DELETE_SESSION_FIELDS, WIRE_DIFF_FILE_FIELDS, WIRE_ERROR_FIELDS, WIRE_FILE_CANDIDATES_FIELDS, WIRE_FILE_CANDIDATE_FIELDS, WIRE_FILE_CHANGE_FIELDS, WIRE_FILE_OPEN_RESPONSE_FIELDS, WIRE_FILE_REFERENCE_FIELDS, WIRE_FILE_STAT_MAX, WIRE_FILE_STAT_OK_FIELDS, WIRE_FILE_STAT_REFUSED_FIELDS, WIRE_FILE_STAT_RESPONSE_FIELDS, WIRE_FILE_TEXT_RESPONSE_FIELDS, WIRE_GOAL_ACTIONS, WIRE_GOAL_BLOCK_FIELDS, WIRE_GOAL_CLEAR_FIELDS, WIRE_GOAL_CREATE_FIELDS, WIRE_GOAL_FIELDS, WIRE_GOAL_LIMITS_FIELDS, WIRE_GOAL_PHASES, WIRE_GOAL_REFUSALS, WIRE_GOAL_RESPONSE_FIELDS, WIRE_GOAL_WRITE_FIELDS, WIRE_HEALTH_FIELDS, WIRE_IMAGE_REFERENCE_FIELDS, WIRE_KNOWN_WORKSPACE_FIELDS, WIRE_LANG_PARAM, WIRE_MANAGED_LOCK_FIELDS, WIRE_MCP_ADD_FIELDS, WIRE_MCP_ADD_RESPONSE_FIELDS, WIRE_MCP_APPLY_ENTRY_FIELDS, WIRE_MCP_APPLY_RESPONSE_FIELDS, WIRE_MCP_CONFIG_APPLY_FIELDS, WIRE_MCP_CONFIG_FIELDS, WIRE_MCP_CONFIG_ISSUE_FIELDS, WIRE_MCP_CONFIG_SAVE_FIELDS, WIRE_MCP_CONFIG_SAVE_RESPONSE_FIELDS, WIRE_MCP_CONNECTOR_FIELDS, WIRE_MCP_RECONNECT_FIELDS, WIRE_MESSAGE_LIST_FIELDS, WIRE_MODEL_FIELDS, WIRE_MODEL_SELECTION_FIELDS, WIRE_MODEL_SET_FIELDS, WIRE_MODEL_SUGGESTIONS_FIELDS, WIRE_PATCH_SESSION_FIELDS, WIRE_PATCH_SESSION_RESPONSE_FIELDS, WIRE_PERMISSION_RULE_FIELDS, WIRE_PERMISSION_SET_REQUEST_FIELDS, WIRE_PERMISSION_SET_RESPONSE_FIELDS, WIRE_PERMISSION_SHADOW_FIELDS, WIRE_PERMISSION_STATE_FIELDS, WIRE_PERMISSION_STATUS_FIELDS, WIRE_PLAN_ACTIONS, WIRE_PLAN_FIELDS, WIRE_PLAN_MODE_REQUEST_FIELDS, WIRE_PLAN_MODE_RESPONSE_FIELDS, WIRE_PLAN_MODE_STATE_FIELDS, WIRE_PLUGINS_FIELDS, WIRE_PLUGIN_ACTION_FIELDS, WIRE_PLUGIN_INSTALL_FIELDS, WIRE_PLUGIN_LOCAL_FIELDS, WIRE_PLUGIN_LOCAL_INSTALL_FIELDS, WIRE_PLUGIN_MARKETPLACE_FIELDS, WIRE_PLUGIN_MARKETPLACE_RESPONSE_FIELDS, WIRE_PLUGIN_NAME_FIELDS, WIRE_PLUGIN_PREVIEW_FIELDS, WIRE_PLUGIN_PREVIEW_RESPONSE_FIELDS, WIRE_PLUGIN_UPDATE_FIELDS, WIRE_POLICY_DIR_FIELDS, WIRE_POLICY_STATUS_FIELDS, WIRE_PROVIDERS_FIELDS, WIRE_PROVIDER_KEY_FIELDS, WIRE_PROVIDER_MODELS_FIELDS, WIRE_PROVIDER_OPTION_FIELDS, WIRE_QUESTION_LIST_FIELDS, WIRE_QUESTION_ROW_FIELDS, WIRE_RESPOND_APPROVAL_FIELDS, WIRE_RESPOND_APPROVAL_RESPONSE_FIELDS, WIRE_RESPOND_QUESTION_FIELDS, WIRE_RESPOND_QUESTION_RESPONSE_FIELDS, WIRE_REWIND_FILE_PLAN_FIELDS, WIRE_REWIND_OUTCOME_FIELDS, WIRE_REWIND_PREVIEW_FIELDS, WIRE_REWIND_REQUEST_FIELDS, WIRE_REWIND_RESPONSE_FIELDS, WIRE_REWIND_SCOPES, WIRE_ROLE_ADD_FIELDS, WIRE_ROLE_ADD_RESPONSE_FIELDS, WIRE_SANDBOX_STATUS_FIELDS, WIRE_SCHEDULE_CAPABILITY_FIELDS, WIRE_SCHEDULE_CREATE_FIELDS, WIRE_SCHEDULE_DEFAULTS_FIELDS, WIRE_SCHEDULE_DELETE_FIELDS, WIRE_SCHEDULE_FIELDS, WIRE_SCHEDULE_FIX_FIELDS, WIRE_SCHEDULE_FIX_REQUEST_FIELDS, WIRE_SCHEDULE_ISSUE_CODES, WIRE_SCHEDULE_LIST_FIELDS, WIRE_SCHEDULE_PENDING_FIELDS, WIRE_SCHEDULE_RECORDING_FIELDS, WIRE_SCHEDULE_ROW_FIELDS, WIRE_SCHEDULE_RUNS_FIELDS, WIRE_SCHEDULE_RUN_FIELDS, WIRE_SCHEDULE_SAVE_FIELDS, WIRE_SECURITY_FIELDS, WIRE_SECURITY_WORKSPACE_FIELDS, WIRE_SEND_MESSAGE_FIELDS, WIRE_SEND_MESSAGE_RESPONSE_FIELDS, WIRE_SESSION_CANDIDATES_FIELDS, WIRE_SESSION_CANDIDATE_FIELDS, WIRE_SESSION_FINISH_FIELDS, WIRE_SESSION_LIST_FIELDS, WIRE_SESSION_REFERENCE_FIELDS, WIRE_SESSION_RESPONSE_FIELDS, WIRE_SESSION_SUMMARY_FIELDS, WIRE_SESSION_WORKSPACE_FIELDS, WIRE_SESSION_WORKSPACE_RESPONSE_FIELDS, WIRE_SETTINGS_FIELDS, WIRE_SETTINGS_WRITE_FIELDS, WIRE_SETTINGS_WRITE_REQUEST_FIELDS, WIRE_SETTING_ROW_FIELDS, WIRE_SETTING_STEP_FIELDS, WIRE_SETTING_WRITE_FIELDS, WIRE_SETTING_WRITE_LAYERS, WIRE_SKILL_BODY_FIELDS, WIRE_SKILL_FIELDS, WIRE_SKILL_IMPORT_FIELDS, WIRE_SKILL_IMPORT_PREVIEW_FIELDS, WIRE_SKILL_REMOVE_FIELDS, WIRE_TASKS_FIELDS, WIRE_TOOLS_FIELDS, WIRE_TOOL_GATE_FIELDS, WIRE_TOOL_ROW_FIELDS, WIRE_WORKSPACE_DIFF_FIELDS, WIRE_WORKSPACE_DIRS_FIELDS, WIRE_WORKSPACE_DIR_ENTRY_FIELDS, WIRE_WORKSPACE_REF_FIELDS, type WireAbortResponse, type WireAbout, type WireAgentEnvelope, type WireAgentEvent, type WireAgentRoleSummary, type WireApprovalCacheRevokeRequest, type WireApprovalCacheRevokeResponse, type WireApprovalListResponse, type WireApprovalRequest, type WireArtifactsResponse, type WireAuditCode, type WireAuditLog, type WireAuditOutcome, type WireAuditRow, type WireAuthDenyReason, type WireAuthDenyStatus, type WireAuthGuard, type WireAuthRequestView, type WireAuthVerdict, type WireBackgroundTask, type WireBindWorkspaceRequest, type WireBlockedGoal, type WireBlockedGoalsResponse, type WireBlockedLevel, type WireBuiltinConnector, type WireCachedApproval, type WireCachedDecision, type WireCapabilitiesResponse, type WireCapabilityProject, type WireCheckpointListResponse, type WireCheckpointSummary, type WireCommandExpansion, type WireCommandsResponse, type WireCompactRequest, type WireCompactResponse, type WireCompressionLine, type WireConfigResponse, type WireContextResponse, type WireCreateSessionRequest, type WireCreateSessionResponse, type WireCreateWorkspaceRequest, type WireCreateWorkspaceResponse, type WireCustomCommand, type WireDeleteSessionResponse, type WireDiffFile, type WireDiffNote, type WireDiffOmitReason, type WireDiffSource, type WireDiffStatus, type WireEnvelope, type WireErrorResponse, type WireEvent, type WireFields, type WireFileCandidate, type WireFileCandidatesResponse, type WireFileChange, type WireFileKind, type WireFileOpenRefusal, type WireFileOpenResponse, type WireFileReference, type WireFileRefusal, type WireFileStat, type WireFileStatOk, type WireFileStatRefused, type WireFileStatResponse, type WireFileTextResponse, type WireFixture, type WireFixtureCase, type WireGoal, type WireGoalBlock, type WireGoalClearResponse, type WireGoalCreateRequest, type WireGoalLimits, type WireGoalPhase, type WireGoalRefusal, type WireGoalResponse, type WireGoalUpdateRequest, type WireGoalWriteResponse, type WireHealthResponse, type WireHubEnvelope, type WireHubEvent, type WireImageReference, type WireKnownWorkspace, type WireManagedLock, type WireMcpAddRequest, type WireMcpAddResponse, type WireMcpApplyAction, type WireMcpApplyEntry, type WireMcpApplyResponse, type WireMcpConfigApplyRequest, type WireMcpConfigIssue, type WireMcpConfigResponse, type WireMcpConfigSaveRequest, type WireMcpConfigSaveResponse, type WireMcpConnector, type WireMcpReconnectResponse, type WireMessageListResponse, type WireModelCaveat, type WireModelProbeStatus, type WireModelRejection, type WireModelResponse, type WireModelSelection, type WireModelSetRequest, type WireModelSetResponse, type WireModelSource, type WireModelSuggestions, type WirePatchSessionRequest, type WirePatchSessionResponse, type WirePermissionRememberFailure, type WirePermissionRuleRow, type WirePermissionSetRequest, type WirePermissionSetResponse, type WirePermissionShadow, type WirePermissionState, type WirePermissionStatus, type WirePickDirectoryResponse, type WirePlanAction, type WirePlanModeRequest, type WirePlanModeResponse, type WirePlanModeState, type WirePlanResponse, type WirePluginActionResponse, type WirePluginCounts, type WirePluginEntry, type WirePluginHit, type WirePluginHookTally, type WirePluginInstallRequest, type WirePluginLocalInstallRequest, type WirePluginLocalRequest, type WirePluginMarketplace, type WirePluginMarketplaceRequest, type WirePluginMarketplaceResponse, type WirePluginNameRequest, type WirePluginPreview, type WirePluginPreviewRequest, type WirePluginPreviewResponse, type WirePluginRefuseReason, type WirePluginSourceType, type WirePluginUpdateRequest, type WirePluginsResponse, type WirePolicyDir, type WirePolicyStatus, type WireProviderKeyRequest, type WireProviderKeyResponse, type WireProviderModelsRequest, type WireProviderModelsResponse, type WireProviderOption, type WireProviderSummary, type WireProvidersResponse, type WireQuestionListResponse, type WireQuestionRequest, type WireReplayMessage, type WireResetReason, type WireRespondApprovalRequest, type WireRespondApprovalResponse, type WireRespondQuestionRequest, type WireRespondQuestionResponse, type WireRewindAction, type WireRewindDrift, type WireRewindFilePlan, type WireRewindOutcome, type WireRewindPreview, type WireRewindRequest, type WireRewindResponse, type WireRewindScope, type WireRoleAddRequest, type WireRoleAddResponse, type WireSandboxReason, type WireSandboxStatus, type WireScheduleCapability, type WireScheduleCreateRequest, type WireScheduleDefaults, type WireScheduleDeleteResponse, type WireScheduleFixRequest, type WireScheduleFixResponse, type WireScheduleIssue, type WireScheduleIssueCode, type WireScheduleListResponse, type WireSchedulePendingResponse, type WireScheduleRecordingResponse, type WireScheduleRegisterRefusal, type WireScheduleRegisterWarning, type WireScheduleRegistration, type WireScheduleResponse, type WireScheduleRow, type WireScheduleRunResponse, type WireScheduleRunsResponse, type WireScheduleSaveResponse, type WireScheduleUpdateRequest, type WireSecurityResponse, type WireSecurityWorkspace, type WireSendMessageRequest, type WireSendMessageResponse, type WireSessionCandidate, type WireSessionCandidatesResponse, type WireSessionFinish, type WireSessionListResponse, type WireSessionReference, type WireSessionResponse, type WireSessionSummary, type WireSessionWorkspace, type WireSessionWorkspaceResponse, type WireSettingApply, type WireSettingFutile, type WireSettingLayer, type WireSettingRow, type WireSettingStep, type WireSettingValue, type WireSettingValueKind, type WireSettingWrite, type WireSettingWriteLayer, type WireSettingsResponse, type WireSettingsWriteRequest, type WireSettingsWriteResponse, type WireSkillBodyResponse, type WireSkillImportConflict, type WireSkillImportEntry, type WireSkillImportFailure, type WireSkillImportForm, type WireSkillImportIssue, type WireSkillImportPreviewResponse, type WireSkillImportResponse, type WireSkillRemoveFailure, type WireSkillRemoveResponse, type WireSkillSummary, type WireSummaryWorkspace, type WireTaggedEvent, type WireTasksResponse, type WireToolGate, type WireToolGateAxis, type WireToolRow, type WireToolSummary, type WireToolVerdict, type WireToolsResponse, type WireTurnState, type WireWorkspaceBinding, type WireWorkspaceDiffResponse, type WireWorkspaceDirEntry, type WireWorkspaceDirsResponse, type WireWorkspaceRef, apiKeyEnvVar, assertNeverPart, assistantTurnText, attachSessionSurface, chordId, collectPendingApprovals, compressionThresholdTokens, conformsToWire, contentToText, diagnosticToLine, extractAllMentions, extractMentions, extractSessionMentions, filePartSummary, flattenCatalog, getProviderInfo, hasFailure, isApprovalOutcome, isContextNearlyFull, isHeadlessInputFormat, isHeadlessLifecycleEvent, isHeadlessOutputFormat, isKeyAction, isLang, isMentionableFilePath, isOperationType, isPermissionLevel, isPlanOutcome, isProviderType, isQuestionAnswerMap, isSearchProviderType, isValidAgentRoleName, isValidCommandName, isWireGoalPhase, isWireHubEvent, isWirePlanAction, isWireRewindScope, isWireSettingWriteLayer, makeTranslate, normalizeApproval, packSessionSurface, parseChord, parseModelRef, parseSequence, perAction, placeholdersOf, promptTokens, resolveHostText, sequenceId, sessionPartSummary, stripSystemNote, systemNote, tableOf, totalUsageTokens, translatorFor, turnDigest, unfixedRules, utf8ByteLength, wireFields };
13595
+ export { ACTION_CONTEXTS, AGENT_ROLE_NAME_PATTERN, API_KEY_ENV_VARS, APPROVAL_OUTCOMES, type ActiveAgentRole, type AgentEvent, type AgentEventOf, type AgentEventType, type AgentRole, type AgentRoleScope, type AgentRoleSource, type ApprovalAnswer, type ApprovalOutcome, type ApprovalReply, type ApprovalRequest, type ArtifactKind, type AttributeValue, type Attributes, type BackgroundTaskInfo, type BackgroundTaskKind, type BackgroundTaskStatus, type BlankCard, type BlankGreeting, type BoundKey, type BudgetBreach, COMMAND_NAME_PATTERN, COMPLIANCE_ACTIONS, COMPLIANCE_CATEGORIES, type Catalogs, type ComplianceAction, type ComplianceCategory, type ContextBreakdown, type ContextSegment, type CustomCommandDef, type CustomCommandSource, DEFAULT_AGENT_ROLE, DEFAULT_LANG, type DecidedTrustLevel, type Diagnostic, DiagnosticSink, type DiagnosticStatus, type EpochConfig, type EpochContentPart, type EpochFilePart, type EpochHook, type EpochImagePart, type EpochMessage, type EpochMessageRole, type EpochPlugin, type EpochSessionPart, type EpochSkill, type EpochTextPart, type EpochTool, type EpochToolCall, type EpochToolResult, type EpochTurnFacts, type EpochUserContent, type ExpandedCommand, type FileOmitReason, type FinishReason, type FixableApproval, type FlatCatalog, GEN_AI, HEADLESS_INPUT_EVENT_TYPES, HEADLESS_INPUT_FORMATS, HEADLESS_OUTPUT_FORMATS, HEADLESS_PROTOCOL_VERSION, type HeadlessEnvelope, type HeadlessEvent, type HeadlessInit, type HeadlessInputEvent, type HeadlessInputEventType, type HeadlessInputFormat, type HeadlessLifecycleEvent, type HeadlessOutputFormat, type HeadlessResult, type HeadlessResultReason, type HookContext, type HookEvent, type HookHandler, type HookManager, type HookRegistration, type HookType, type HostText, type HostUser, type JsonSchema, KEY_ACTIONS, type KeyAction, type KeyChord, type KeyContext, type KeySequence, type KeybindingReport, type KeybindingSource, type KeybindingTable, LANGS, type Lang, type LocalizedDetail, type LogFn, MAX_ATTACH_BYTES, MAX_ATTACH_FILES, MAX_ATTACH_TOTAL_BYTES, MAX_HEADER_CHARS, MAX_OPTIONS, MAX_QUESTIONS, MAX_SESSION_ATTACH_BYTES, MAX_SESSION_REFS, MCP_DATA_KEY_NAME, METRIC, MIN_OPTIONS, type MentionSet, type ModelRef, type ModelSelection, type ModelSelectionOrigin, NOOP_TELEMETRY, type NoticeCode, OPERATION_TYPES, OVERSIZE_RATIO, type Operation, type OperationType, PERMISSION_LEVELS, PLAN_OUTCOMES, PROVIDER_INFOS, PROVIDER_TYPES, type PermissionDecision, type PermissionLevel, type PermissionManager, type PermissionRuleLists, type PlanApprovalOutcome, type PlanProposal, type PluginContext, type ProviderInfo, type ProviderType, type QuestionAnswer, type QuestionItem, type QuestionOption, type QuestionRequest, RESERVED_CHORDS, RESERVED_COMMAND_NAMES, type RejectReason, type RejectedKey, type RuleValue, SCHEDULE_DRAFT_TOOL, SCHEDULE_INTERVAL_MINUTES, SCHEDULE_RUN_STATUSES, SCHEDULE_TEMPLATES, SEARCH_API_KEY_ENV, SEARCH_PROVIDER_TYPES, SECRET_SERVICE, SEQUENCE_CONTEXTS, SESSION_MENTION_PREFIX, SESSION_REFERENCE_ERROR_CODES, SHELL_KINDS, SIDEBAR_MENU_MESSAGE_TYPE, SIMULTANEOUS_CONTEXTS, SYSTEM_NOTE_PREFIX, type ScheduleAllowlist, type ScheduleBackendKind, type ScheduleCycle, type ScheduleDefinition, type ScheduleDraft, type ScheduleDraftAllowlist, type ScheduleDraftCreate, type ScheduleDraftPermission, type ScheduleDraftUpdate, type SchedulePendingApproval, type SchedulePendingItem, type ScheduleRun, type ScheduleRunStatus, type ScheduleRunnerSpec, type ScheduleTemplate, type ScheduleTemplateId, type ScheduleTrigger, type ScheduleTriggerKind, type ScheduleWeekday, type ScheduleWideningKind, type SearchProviderType, type SecretBackendId, type SecretStore, type SelectionContext, type SelectionRejection, type SelectionWarning, type SessionAttachKind, type SessionAttachResult, type SessionOmitReason, type SessionSurfaceMessage, type SessionSurfaceView, type SetSelectionResult, type ShellKind, type SidebarMenuItem, type SidebarMenuMessage, type SpanLike, type SubToolCall, type SubToolCallResult, type Telemetry, type TokenUsage, type ToolAnnotations, type ToolArtifact, type ToolArtifactInput, type ToolContext, type ToolDefinition, ToolExposure, type ToolProvider, type ToolResult, type Translate, type TranslateVars, type TrustLevel, type TrustManager, type TrustRecord, type TrustScope, UNLIMITED_TURNS, type VerifyResult, WIRE_ABORT_FIELDS, WIRE_ABOUT_FIELDS, WIRE_AGENT_ROLE_FIELDS, WIRE_APPROVAL_CACHE_REVOKE_REQUEST_FIELDS, WIRE_APPROVAL_CACHE_REVOKE_RESPONSE_FIELDS, WIRE_APPROVAL_LIST_FIELDS, WIRE_APPROVAL_ROW_FIELDS, WIRE_ARTIFACTS_FIELDS, WIRE_AUDIT_LOG_FIELDS, WIRE_AUDIT_ROW_FIELDS, WIRE_AUTH_COOKIE, WIRE_AUTH_COOKIE_ATTRS, WIRE_AUTH_TOKEN_PARAM, WIRE_BACKGROUND_TASK_FIELDS, WIRE_BLOCKED_GOALS_FIELDS, WIRE_BLOCKED_GOAL_FIELDS, WIRE_BLOCKED_LEVEL_FIELDS, WIRE_BUILTIN_CONNECTOR_FIELDS, WIRE_CACHED_APPROVAL_FIELDS, WIRE_CAPABILITIES_FIELDS, WIRE_CAPABILITY_PROJECT_FIELDS, WIRE_CHECKPOINT_LIST_FIELDS, WIRE_CHECKPOINT_SUMMARY_FIELDS, WIRE_COMMANDS_FIELDS, WIRE_COMMAND_EXPANSION_FIELDS, WIRE_COMPACT_FIELDS, WIRE_COMPRESSION_LINE_FIELDS, WIRE_CONFIG_FIELDS, WIRE_CONTEXT_FIELDS, WIRE_CREATE_SESSION_FIELDS, WIRE_CREATE_WORKSPACE_FIELDS, WIRE_CREATE_WORKSPACE_RESPONSE_FIELDS, WIRE_CUSTOM_COMMAND_FIELDS, WIRE_DELETE_SESSION_FIELDS, WIRE_DIFF_FILE_FIELDS, WIRE_ERROR_FIELDS, WIRE_FILE_CANDIDATES_FIELDS, WIRE_FILE_CANDIDATE_FIELDS, WIRE_FILE_CHANGE_FIELDS, WIRE_FILE_OPEN_RESPONSE_FIELDS, WIRE_FILE_REFERENCE_FIELDS, WIRE_FILE_STAT_MAX, WIRE_FILE_STAT_OK_FIELDS, WIRE_FILE_STAT_REFUSED_FIELDS, WIRE_FILE_STAT_RESPONSE_FIELDS, WIRE_FILE_TEXT_RESPONSE_FIELDS, WIRE_GOAL_ACTIONS, WIRE_GOAL_BLOCK_FIELDS, WIRE_GOAL_CLEAR_FIELDS, WIRE_GOAL_CREATE_FIELDS, WIRE_GOAL_FIELDS, WIRE_GOAL_LIMITS_FIELDS, WIRE_GOAL_PHASES, WIRE_GOAL_REFUSALS, WIRE_GOAL_RESPONSE_FIELDS, WIRE_GOAL_WRITE_FIELDS, WIRE_HEALTH_FIELDS, WIRE_IMAGE_REFERENCE_FIELDS, WIRE_KNOWN_WORKSPACE_FIELDS, WIRE_LANG_PARAM, WIRE_MANAGED_LOCK_FIELDS, WIRE_MCP_ADD_FIELDS, WIRE_MCP_ADD_RESPONSE_FIELDS, WIRE_MCP_APPLY_ENTRY_FIELDS, WIRE_MCP_APPLY_RESPONSE_FIELDS, WIRE_MCP_CONFIG_APPLY_FIELDS, WIRE_MCP_CONFIG_FIELDS, WIRE_MCP_CONFIG_ISSUE_FIELDS, WIRE_MCP_CONFIG_SAVE_FIELDS, WIRE_MCP_CONFIG_SAVE_RESPONSE_FIELDS, WIRE_MCP_CONNECTOR_FIELDS, WIRE_MCP_RECONNECT_FIELDS, WIRE_MESSAGE_LIST_FIELDS, WIRE_MODEL_FIELDS, WIRE_MODEL_SELECTION_FIELDS, WIRE_MODEL_SET_FIELDS, WIRE_MODEL_SUGGESTIONS_FIELDS, WIRE_PATCH_SESSION_FIELDS, WIRE_PATCH_SESSION_RESPONSE_FIELDS, WIRE_PERMISSION_RULE_FIELDS, WIRE_PERMISSION_SET_REQUEST_FIELDS, WIRE_PERMISSION_SET_RESPONSE_FIELDS, WIRE_PERMISSION_SHADOW_FIELDS, WIRE_PERMISSION_STATE_FIELDS, WIRE_PERMISSION_STATUS_FIELDS, WIRE_PLAN_ACTIONS, WIRE_PLAN_FIELDS, WIRE_PLAN_MODE_REQUEST_FIELDS, WIRE_PLAN_MODE_RESPONSE_FIELDS, WIRE_PLAN_MODE_STATE_FIELDS, WIRE_PLUGINS_FIELDS, WIRE_PLUGIN_ACTION_FIELDS, WIRE_PLUGIN_INSTALL_FIELDS, WIRE_PLUGIN_LOCAL_FIELDS, WIRE_PLUGIN_LOCAL_INSTALL_FIELDS, WIRE_PLUGIN_MARKETPLACE_FIELDS, WIRE_PLUGIN_MARKETPLACE_RESPONSE_FIELDS, WIRE_PLUGIN_NAME_FIELDS, WIRE_PLUGIN_PREVIEW_FIELDS, WIRE_PLUGIN_PREVIEW_RESPONSE_FIELDS, WIRE_PLUGIN_REFRESH_RESPONSE_FIELDS, WIRE_PLUGIN_UPDATE_FIELDS, WIRE_PLUGIN_UPLOAD_CONFIRM_FIELDS, WIRE_PLUGIN_UPLOAD_FIELDS, WIRE_PLUGIN_UPLOAD_FORM_FIELDS, WIRE_PLUGIN_UPLOAD_PREVIEW_RESPONSE_FIELDS, WIRE_PLUGIN_UPLOAD_RESPONSE_FIELDS, WIRE_POLICY_DIR_FIELDS, WIRE_POLICY_STATUS_FIELDS, WIRE_PROVIDERS_FIELDS, WIRE_PROVIDER_KEY_FIELDS, WIRE_PROVIDER_MODELS_FIELDS, WIRE_PROVIDER_OPTION_FIELDS, WIRE_QUESTION_LIST_FIELDS, WIRE_QUESTION_ROW_FIELDS, WIRE_RESPOND_APPROVAL_FIELDS, WIRE_RESPOND_APPROVAL_RESPONSE_FIELDS, WIRE_RESPOND_QUESTION_FIELDS, WIRE_RESPOND_QUESTION_RESPONSE_FIELDS, WIRE_REWIND_FILE_PLAN_FIELDS, WIRE_REWIND_OUTCOME_FIELDS, WIRE_REWIND_PREVIEW_FIELDS, WIRE_REWIND_REQUEST_FIELDS, WIRE_REWIND_RESPONSE_FIELDS, WIRE_REWIND_SCOPES, WIRE_ROLE_ADD_FIELDS, WIRE_ROLE_ADD_RESPONSE_FIELDS, WIRE_SANDBOX_STATUS_FIELDS, WIRE_SCHEDULE_CAPABILITY_FIELDS, WIRE_SCHEDULE_CREATE_FIELDS, WIRE_SCHEDULE_DEFAULTS_FIELDS, WIRE_SCHEDULE_DELETE_FIELDS, WIRE_SCHEDULE_FIELDS, WIRE_SCHEDULE_FIX_FIELDS, WIRE_SCHEDULE_FIX_REQUEST_FIELDS, WIRE_SCHEDULE_ISSUE_CODES, WIRE_SCHEDULE_LIST_FIELDS, WIRE_SCHEDULE_PENDING_FIELDS, WIRE_SCHEDULE_RECORDING_FIELDS, WIRE_SCHEDULE_ROW_FIELDS, WIRE_SCHEDULE_RUNS_FIELDS, WIRE_SCHEDULE_RUN_FIELDS, WIRE_SCHEDULE_SAVE_FIELDS, WIRE_SECURITY_FIELDS, WIRE_SECURITY_WORKSPACE_FIELDS, WIRE_SEND_MESSAGE_FIELDS, WIRE_SEND_MESSAGE_RESPONSE_FIELDS, WIRE_SESSION_CANDIDATES_FIELDS, WIRE_SESSION_CANDIDATE_FIELDS, WIRE_SESSION_FINISH_FIELDS, WIRE_SESSION_LIST_FIELDS, WIRE_SESSION_REFERENCE_FIELDS, WIRE_SESSION_RESPONSE_FIELDS, WIRE_SESSION_SUMMARY_FIELDS, WIRE_SESSION_WORKSPACE_FIELDS, WIRE_SESSION_WORKSPACE_RESPONSE_FIELDS, WIRE_SETTINGS_FIELDS, WIRE_SETTINGS_WRITE_FIELDS, WIRE_SETTINGS_WRITE_REQUEST_FIELDS, WIRE_SETTING_ROW_FIELDS, WIRE_SETTING_STEP_FIELDS, WIRE_SETTING_WRITE_FIELDS, WIRE_SETTING_WRITE_LAYERS, WIRE_SKILL_BODY_FIELDS, WIRE_SKILL_FIELDS, WIRE_SKILL_IMPORT_FIELDS, WIRE_SKILL_IMPORT_PREVIEW_FIELDS, WIRE_SKILL_REMOVE_FIELDS, WIRE_TASKS_FIELDS, WIRE_TOOLS_FIELDS, WIRE_TOOL_GATE_FIELDS, WIRE_TOOL_ROW_FIELDS, WIRE_WORKSPACE_DIFF_FIELDS, WIRE_WORKSPACE_DIRS_FIELDS, WIRE_WORKSPACE_DIR_ENTRY_FIELDS, WIRE_WORKSPACE_REF_FIELDS, type WireAbortResponse, type WireAbout, type WireAgentEnvelope, type WireAgentEvent, type WireAgentRoleSummary, type WireApprovalCacheRevokeRequest, type WireApprovalCacheRevokeResponse, type WireApprovalListResponse, type WireApprovalRequest, type WireArtifactsResponse, type WireAuditCode, type WireAuditLog, type WireAuditOutcome, type WireAuditRow, type WireAuthDenyReason, type WireAuthDenyStatus, type WireAuthGuard, type WireAuthRequestView, type WireAuthVerdict, type WireBackgroundTask, type WireBindWorkspaceRequest, type WireBlockedGoal, type WireBlockedGoalsResponse, type WireBlockedLevel, type WireBuiltinConnector, type WireCachedApproval, type WireCachedDecision, type WireCapabilitiesResponse, type WireCapabilityProject, type WireCheckpointListResponse, type WireCheckpointSummary, type WireCommandExpansion, type WireCommandsResponse, type WireCompactRequest, type WireCompactResponse, type WireCompressionLine, type WireConfigResponse, type WireContextResponse, type WireCreateSessionRequest, type WireCreateSessionResponse, type WireCreateWorkspaceRequest, type WireCreateWorkspaceResponse, type WireCustomCommand, type WireDeleteSessionResponse, type WireDiffFile, type WireDiffNote, type WireDiffOmitReason, type WireDiffSource, type WireDiffStatus, type WireEnvelope, type WireErrorResponse, type WireEvent, type WireFields, type WireFileCandidate, type WireFileCandidatesResponse, type WireFileChange, type WireFileKind, type WireFileOpenRefusal, type WireFileOpenResponse, type WireFileReference, type WireFileRefusal, type WireFileStat, type WireFileStatOk, type WireFileStatRefused, type WireFileStatResponse, type WireFileTextResponse, type WireFixture, type WireFixtureCase, type WireGoal, type WireGoalBlock, type WireGoalClearResponse, type WireGoalCreateRequest, type WireGoalLimits, type WireGoalPhase, type WireGoalRefusal, type WireGoalResponse, type WireGoalUpdateRequest, type WireGoalWriteResponse, type WireHealthResponse, type WireHubEnvelope, type WireHubEvent, type WireImageReference, type WireKnownWorkspace, type WireManagedLock, type WireMcpAddRequest, type WireMcpAddResponse, type WireMcpApplyAction, type WireMcpApplyEntry, type WireMcpApplyResponse, type WireMcpConfigApplyRequest, type WireMcpConfigIssue, type WireMcpConfigResponse, type WireMcpConfigSaveRequest, type WireMcpConfigSaveResponse, type WireMcpConnector, type WireMcpReconnectResponse, type WireMessageListResponse, type WireModelCaveat, type WireModelProbeStatus, type WireModelRejection, type WireModelResponse, type WireModelSelection, type WireModelSetRequest, type WireModelSetResponse, type WireModelSource, type WireModelSuggestions, type WirePatchSessionRequest, type WirePatchSessionResponse, type WirePermissionRememberFailure, type WirePermissionRuleRow, type WirePermissionSetRequest, type WirePermissionSetResponse, type WirePermissionShadow, type WirePermissionState, type WirePermissionStatus, type WirePickDirectoryResponse, type WirePlanAction, type WirePlanModeRequest, type WirePlanModeResponse, type WirePlanModeState, type WirePlanResponse, type WirePluginActionResponse, type WirePluginCounts, type WirePluginEntry, type WirePluginHit, type WirePluginHookTally, type WirePluginInstallRequest, type WirePluginLocalInstallRequest, type WirePluginLocalRequest, type WirePluginMarketplace, type WirePluginMarketplaceRequest, type WirePluginMarketplaceResponse, type WirePluginNameRequest, type WirePluginPreview, type WirePluginPreviewRequest, type WirePluginPreviewResponse, type WirePluginRefreshResponse, type WirePluginRefuseReason, type WirePluginSourceType, type WirePluginStatus, type WirePluginUpdateRequest, type WirePluginUploadConfirmRequest, type WirePluginUploadField, type WirePluginUploadFieldName, type WirePluginUploadFields, type WirePluginUploadFile, type WirePluginUploadForm, type WirePluginUploadPlan, type WirePluginUploadPreviewResponse, type WirePluginUploadRequest, type WirePluginUploadResponse, type WirePluginVisibility, type WirePluginsResponse, type WirePolicyDir, type WirePolicyStatus, type WireProviderKeyRequest, type WireProviderKeyResponse, type WireProviderModelsRequest, type WireProviderModelsResponse, type WireProviderOption, type WireProviderSummary, type WireProvidersResponse, type WireQuestionListResponse, type WireQuestionRequest, type WireReplayMessage, type WireResetReason, type WireRespondApprovalRequest, type WireRespondApprovalResponse, type WireRespondQuestionRequest, type WireRespondQuestionResponse, type WireRewindAction, type WireRewindDrift, type WireRewindFilePlan, type WireRewindOutcome, type WireRewindPreview, type WireRewindRequest, type WireRewindResponse, type WireRewindScope, type WireRoleAddRequest, type WireRoleAddResponse, type WireSandboxReason, type WireSandboxStatus, type WireScheduleCapability, type WireScheduleCreateRequest, type WireScheduleDefaults, type WireScheduleDeleteResponse, type WireScheduleFixRequest, type WireScheduleFixResponse, type WireScheduleIssue, type WireScheduleIssueCode, type WireScheduleListResponse, type WireSchedulePendingResponse, type WireScheduleRecordingResponse, type WireScheduleRegisterRefusal, type WireScheduleRegisterWarning, type WireScheduleRegistration, type WireScheduleResponse, type WireScheduleRow, type WireScheduleRunResponse, type WireScheduleRunsResponse, type WireScheduleSaveResponse, type WireScheduleUpdateRequest, type WireSecurityResponse, type WireSecurityWorkspace, type WireSendMessageRequest, type WireSendMessageResponse, type WireSessionCandidate, type WireSessionCandidatesResponse, type WireSessionFinish, type WireSessionListResponse, type WireSessionReference, type WireSessionResponse, type WireSessionSummary, type WireSessionWorkspace, type WireSessionWorkspaceResponse, type WireSettingApply, type WireSettingFutile, type WireSettingLayer, type WireSettingRow, type WireSettingStep, type WireSettingValue, type WireSettingValueKind, type WireSettingWrite, type WireSettingWriteLayer, type WireSettingsResponse, type WireSettingsWriteRequest, type WireSettingsWriteResponse, type WireSkillBodyResponse, type WireSkillImportConflict, type WireSkillImportEntry, type WireSkillImportFailure, type WireSkillImportForm, type WireSkillImportIssue, type WireSkillImportPreviewResponse, type WireSkillImportResponse, type WireSkillRemoveFailure, type WireSkillRemoveResponse, type WireSkillSummary, type WireSummaryWorkspace, type WireTaggedEvent, type WireTasksResponse, type WireToolGate, type WireToolGateAxis, type WireToolRow, type WireToolSummary, type WireToolVerdict, type WireToolsResponse, type WireTurnState, type WireWorkspaceBinding, type WireWorkspaceDiffResponse, type WireWorkspaceDirEntry, type WireWorkspaceDirsResponse, type WireWorkspaceRef, apiKeyEnvVar, assertNeverPart, assistantTurnText, attachSessionSurface, chordId, collectPendingApprovals, compressionThresholdTokens, conformsToWire, contentToText, diagnosticToLine, extractAllMentions, extractMentions, extractSessionMentions, filePartSummary, flattenCatalog, getProviderInfo, hasFailure, isApprovalOutcome, isContextNearlyFull, isHeadlessInputFormat, isHeadlessLifecycleEvent, isHeadlessOutputFormat, isKeyAction, isLang, isMentionableFilePath, isOperationType, isPermissionLevel, isPlanOutcome, isPromptOversize, isProviderType, isQuestionAnswerMap, isSearchProviderType, isValidAgentRoleName, isValidCommandName, isWireGoalPhase, isWireHubEvent, isWirePlanAction, isWireRewindScope, isWireSettingWriteLayer, makeTranslate, normalizeApproval, packSessionSurface, parseChord, parseModelRef, parseSequence, perAction, placeholdersOf, promptTokens, resolveHostText, sequenceId, sessionPartSummary, stripSystemNote, systemNote, tableOf, totalUsageTokens, translatorFor, turnDigest, unfixedRules, utf8ByteLength, wireFields };
package/dist/index.js CHANGED
@@ -747,6 +747,10 @@ function compressionThresholdTokens(contextLength, threshold) {
747
747
  function isContextNearlyFull(prompt, contextLength, threshold) {
748
748
  return prompt >= compressionThresholdTokens(contextLength, threshold);
749
749
  }
750
+ var OVERSIZE_RATIO = 0.9;
751
+ function isPromptOversize(prompt, contextLength) {
752
+ return prompt >= contextLength * OVERSIZE_RATIO;
753
+ }
750
754
  function totalUsageTokens(usage) {
751
755
  return usage.totalTokens ?? promptTokens(usage) + usage.outputTokens;
752
756
  }
@@ -757,7 +761,8 @@ var HUB_EVENT_TYPES = /* @__PURE__ */ new Set([
757
761
  "approval-resolved",
758
762
  "question-resolved",
759
763
  "stream-reset",
760
- "session-cooled"
764
+ "session-cooled",
765
+ "tasks-changed"
761
766
  ]);
762
767
  function isWireHubEvent(event) {
763
768
  return HUB_EVENT_TYPES.has(event.type);
@@ -1162,11 +1167,23 @@ var WIRE_ROLE_ADD_RESPONSE_FIELDS = wireFields()({
1162
1167
  path: true
1163
1168
  });
1164
1169
  // src/wire-plugin.ts
1170
+ var WIRE_PLUGIN_UPLOAD_FORM_FIELDS = [
1171
+ "displayName",
1172
+ "description",
1173
+ "category",
1174
+ "homepage",
1175
+ "icon",
1176
+ "visibility",
1177
+ "changelog"
1178
+ ];
1165
1179
  var WIRE_PLUGINS_FIELDS = wireFields()({
1166
1180
  installed: true,
1167
1181
  hits: true,
1168
1182
  marketplaces: true,
1169
- pendingRestart: true
1183
+ pendingRestart: true,
1184
+ uploadEnabled: true,
1185
+ uploadOptions: true,
1186
+ refreshEnabled: true
1170
1187
  });
1171
1188
  var WIRE_PLUGIN_PREVIEW_FIELDS = wireFields()({ ref: true });
1172
1189
  var WIRE_PLUGIN_INSTALL_FIELDS = wireFields()({
@@ -1206,6 +1223,30 @@ var WIRE_PLUGIN_MARKETPLACE_RESPONSE_FIELDS = wireFields()({
1206
1223
  reason: true,
1207
1224
  detail: true
1208
1225
  });
1226
+ var WIRE_PLUGIN_REFRESH_RESPONSE_FIELDS = wireFields()({
1227
+ ok: true,
1228
+ plugins: true,
1229
+ reason: true,
1230
+ detail: true
1231
+ });
1232
+ var WIRE_PLUGIN_UPLOAD_FIELDS = wireFields()({ path: true });
1233
+ var WIRE_PLUGIN_UPLOAD_CONFIRM_FIELDS = wireFields()({
1234
+ path: true,
1235
+ token: true
1236
+ });
1237
+ var WIRE_PLUGIN_UPLOAD_PREVIEW_RESPONSE_FIELDS = wireFields()({
1238
+ ok: true,
1239
+ plan: true,
1240
+ token: true,
1241
+ reason: true,
1242
+ detail: true
1243
+ });
1244
+ var WIRE_PLUGIN_UPLOAD_RESPONSE_FIELDS = wireFields()({
1245
+ ok: true,
1246
+ detail: true,
1247
+ uploaded: true,
1248
+ reason: true
1249
+ });
1209
1250
  // src/wire-mcp-config.ts
1210
1251
  var WIRE_MCP_CONFIG_ISSUE_FIELDS = wireFields()({
1211
1252
  path: true,
@@ -1724,4 +1765,4 @@ var COMPLIANCE_ACTIONS = ["block", "mask", "warn", "off"];
1724
1765
  var SECRET_SERVICE = "epoch-agent";
1725
1766
  var MCP_DATA_KEY_NAME = "mcp-auth-data-key";
1726
1767
 
1727
- export { ACTION_CONTEXTS, AGENT_ROLE_NAME_PATTERN, API_KEY_ENV_VARS, APPROVAL_OUTCOMES, COMMAND_NAME_PATTERN, COMPLIANCE_ACTIONS, COMPLIANCE_CATEGORIES, DEFAULT_AGENT_ROLE, DEFAULT_LANG, DiagnosticSink, GEN_AI, HEADLESS_INPUT_EVENT_TYPES, HEADLESS_INPUT_FORMATS, HEADLESS_OUTPUT_FORMATS, HEADLESS_PROTOCOL_VERSION, KEY_ACTIONS, LANGS, MAX_ATTACH_BYTES, MAX_ATTACH_FILES, MAX_ATTACH_TOTAL_BYTES, MAX_HEADER_CHARS, MAX_OPTIONS, MAX_QUESTIONS, MAX_SESSION_ATTACH_BYTES, MAX_SESSION_REFS, MCP_DATA_KEY_NAME, METRIC, MIN_OPTIONS, NOOP_TELEMETRY, OPERATION_TYPES, PERMISSION_LEVELS, PLAN_OUTCOMES, PROVIDER_INFOS, PROVIDER_TYPES, RESERVED_CHORDS, RESERVED_COMMAND_NAMES, SCHEDULE_DRAFT_TOOL, SCHEDULE_INTERVAL_MINUTES, SCHEDULE_RUN_STATUSES, SCHEDULE_TEMPLATES, SEARCH_API_KEY_ENV, SEARCH_PROVIDER_TYPES, SECRET_SERVICE, SEQUENCE_CONTEXTS, SESSION_MENTION_PREFIX, SESSION_REFERENCE_ERROR_CODES, SHELL_KINDS, SIDEBAR_MENU_MESSAGE_TYPE, SIMULTANEOUS_CONTEXTS, SYSTEM_NOTE_PREFIX, ToolExposure, UNLIMITED_TURNS, WIRE_ABORT_FIELDS, WIRE_ABOUT_FIELDS, WIRE_AGENT_ROLE_FIELDS, WIRE_APPROVAL_CACHE_REVOKE_REQUEST_FIELDS, WIRE_APPROVAL_CACHE_REVOKE_RESPONSE_FIELDS, WIRE_APPROVAL_LIST_FIELDS, WIRE_APPROVAL_ROW_FIELDS, WIRE_ARTIFACTS_FIELDS, WIRE_AUDIT_LOG_FIELDS, WIRE_AUDIT_ROW_FIELDS, WIRE_AUTH_COOKIE, WIRE_AUTH_COOKIE_ATTRS, WIRE_AUTH_TOKEN_PARAM, WIRE_BACKGROUND_TASK_FIELDS, WIRE_BLOCKED_GOALS_FIELDS, WIRE_BLOCKED_GOAL_FIELDS, WIRE_BLOCKED_LEVEL_FIELDS, WIRE_BUILTIN_CONNECTOR_FIELDS, WIRE_CACHED_APPROVAL_FIELDS, WIRE_CAPABILITIES_FIELDS, WIRE_CAPABILITY_PROJECT_FIELDS, WIRE_CHECKPOINT_LIST_FIELDS, WIRE_CHECKPOINT_SUMMARY_FIELDS, WIRE_COMMANDS_FIELDS, WIRE_COMMAND_EXPANSION_FIELDS, WIRE_COMPACT_FIELDS, WIRE_COMPRESSION_LINE_FIELDS, WIRE_CONFIG_FIELDS, WIRE_CONTEXT_FIELDS, WIRE_CREATE_SESSION_FIELDS, WIRE_CREATE_WORKSPACE_FIELDS, WIRE_CREATE_WORKSPACE_RESPONSE_FIELDS, WIRE_CUSTOM_COMMAND_FIELDS, WIRE_DELETE_SESSION_FIELDS, WIRE_DIFF_FILE_FIELDS, WIRE_ERROR_FIELDS, WIRE_FILE_CANDIDATES_FIELDS, WIRE_FILE_CANDIDATE_FIELDS, WIRE_FILE_CHANGE_FIELDS, WIRE_FILE_OPEN_RESPONSE_FIELDS, WIRE_FILE_REFERENCE_FIELDS, WIRE_FILE_STAT_MAX, WIRE_FILE_STAT_OK_FIELDS, WIRE_FILE_STAT_REFUSED_FIELDS, WIRE_FILE_STAT_RESPONSE_FIELDS, WIRE_FILE_TEXT_RESPONSE_FIELDS, WIRE_GOAL_ACTIONS, WIRE_GOAL_BLOCK_FIELDS, WIRE_GOAL_CLEAR_FIELDS, WIRE_GOAL_CREATE_FIELDS, WIRE_GOAL_FIELDS, WIRE_GOAL_LIMITS_FIELDS, WIRE_GOAL_PHASES, WIRE_GOAL_REFUSALS, WIRE_GOAL_RESPONSE_FIELDS, WIRE_GOAL_WRITE_FIELDS, WIRE_HEALTH_FIELDS, WIRE_IMAGE_REFERENCE_FIELDS, WIRE_KNOWN_WORKSPACE_FIELDS, WIRE_LANG_PARAM, WIRE_MANAGED_LOCK_FIELDS, WIRE_MCP_ADD_FIELDS, WIRE_MCP_ADD_RESPONSE_FIELDS, WIRE_MCP_APPLY_ENTRY_FIELDS, WIRE_MCP_APPLY_RESPONSE_FIELDS, WIRE_MCP_CONFIG_APPLY_FIELDS, WIRE_MCP_CONFIG_FIELDS, WIRE_MCP_CONFIG_ISSUE_FIELDS, WIRE_MCP_CONFIG_SAVE_FIELDS, WIRE_MCP_CONFIG_SAVE_RESPONSE_FIELDS, WIRE_MCP_CONNECTOR_FIELDS, WIRE_MCP_RECONNECT_FIELDS, WIRE_MESSAGE_LIST_FIELDS, WIRE_MODEL_FIELDS, WIRE_MODEL_SELECTION_FIELDS, WIRE_MODEL_SET_FIELDS, WIRE_MODEL_SUGGESTIONS_FIELDS, WIRE_PATCH_SESSION_FIELDS, WIRE_PATCH_SESSION_RESPONSE_FIELDS, WIRE_PERMISSION_RULE_FIELDS, WIRE_PERMISSION_SET_REQUEST_FIELDS, WIRE_PERMISSION_SET_RESPONSE_FIELDS, WIRE_PERMISSION_SHADOW_FIELDS, WIRE_PERMISSION_STATE_FIELDS, WIRE_PERMISSION_STATUS_FIELDS, WIRE_PLAN_ACTIONS, WIRE_PLAN_FIELDS, WIRE_PLAN_MODE_REQUEST_FIELDS, WIRE_PLAN_MODE_RESPONSE_FIELDS, WIRE_PLAN_MODE_STATE_FIELDS, WIRE_PLUGINS_FIELDS, WIRE_PLUGIN_ACTION_FIELDS, WIRE_PLUGIN_INSTALL_FIELDS, WIRE_PLUGIN_LOCAL_FIELDS, WIRE_PLUGIN_LOCAL_INSTALL_FIELDS, WIRE_PLUGIN_MARKETPLACE_FIELDS, WIRE_PLUGIN_MARKETPLACE_RESPONSE_FIELDS, WIRE_PLUGIN_NAME_FIELDS, WIRE_PLUGIN_PREVIEW_FIELDS, WIRE_PLUGIN_PREVIEW_RESPONSE_FIELDS, WIRE_PLUGIN_UPDATE_FIELDS, WIRE_POLICY_DIR_FIELDS, WIRE_POLICY_STATUS_FIELDS, WIRE_PROVIDERS_FIELDS, WIRE_PROVIDER_KEY_FIELDS, WIRE_PROVIDER_MODELS_FIELDS, WIRE_PROVIDER_OPTION_FIELDS, WIRE_QUESTION_LIST_FIELDS, WIRE_QUESTION_ROW_FIELDS, WIRE_RESPOND_APPROVAL_FIELDS, WIRE_RESPOND_APPROVAL_RESPONSE_FIELDS, WIRE_RESPOND_QUESTION_FIELDS, WIRE_RESPOND_QUESTION_RESPONSE_FIELDS, WIRE_REWIND_FILE_PLAN_FIELDS, WIRE_REWIND_OUTCOME_FIELDS, WIRE_REWIND_PREVIEW_FIELDS, WIRE_REWIND_REQUEST_FIELDS, WIRE_REWIND_RESPONSE_FIELDS, WIRE_REWIND_SCOPES, WIRE_ROLE_ADD_FIELDS, WIRE_ROLE_ADD_RESPONSE_FIELDS, WIRE_SANDBOX_STATUS_FIELDS, WIRE_SCHEDULE_CAPABILITY_FIELDS, WIRE_SCHEDULE_CREATE_FIELDS, WIRE_SCHEDULE_DEFAULTS_FIELDS, WIRE_SCHEDULE_DELETE_FIELDS, WIRE_SCHEDULE_FIELDS, WIRE_SCHEDULE_FIX_FIELDS, WIRE_SCHEDULE_FIX_REQUEST_FIELDS, WIRE_SCHEDULE_ISSUE_CODES, WIRE_SCHEDULE_LIST_FIELDS, WIRE_SCHEDULE_PENDING_FIELDS, WIRE_SCHEDULE_RECORDING_FIELDS, WIRE_SCHEDULE_ROW_FIELDS, WIRE_SCHEDULE_RUNS_FIELDS, WIRE_SCHEDULE_RUN_FIELDS, WIRE_SCHEDULE_SAVE_FIELDS, WIRE_SECURITY_FIELDS, WIRE_SECURITY_WORKSPACE_FIELDS, WIRE_SEND_MESSAGE_FIELDS, WIRE_SEND_MESSAGE_RESPONSE_FIELDS, WIRE_SESSION_CANDIDATES_FIELDS, WIRE_SESSION_CANDIDATE_FIELDS, WIRE_SESSION_FINISH_FIELDS, WIRE_SESSION_LIST_FIELDS, WIRE_SESSION_REFERENCE_FIELDS, WIRE_SESSION_RESPONSE_FIELDS, WIRE_SESSION_SUMMARY_FIELDS, WIRE_SESSION_WORKSPACE_FIELDS, WIRE_SESSION_WORKSPACE_RESPONSE_FIELDS, WIRE_SETTINGS_FIELDS, WIRE_SETTINGS_WRITE_FIELDS, WIRE_SETTINGS_WRITE_REQUEST_FIELDS, WIRE_SETTING_ROW_FIELDS, WIRE_SETTING_STEP_FIELDS, WIRE_SETTING_WRITE_FIELDS, WIRE_SETTING_WRITE_LAYERS, WIRE_SKILL_BODY_FIELDS, WIRE_SKILL_FIELDS, WIRE_SKILL_IMPORT_FIELDS, WIRE_SKILL_IMPORT_PREVIEW_FIELDS, WIRE_SKILL_REMOVE_FIELDS, WIRE_TASKS_FIELDS, WIRE_TOOLS_FIELDS, WIRE_TOOL_GATE_FIELDS, WIRE_TOOL_ROW_FIELDS, WIRE_WORKSPACE_DIFF_FIELDS, WIRE_WORKSPACE_DIRS_FIELDS, WIRE_WORKSPACE_DIR_ENTRY_FIELDS, WIRE_WORKSPACE_REF_FIELDS, apiKeyEnvVar, assertNeverPart, assistantTurnText, attachSessionSurface, chordId, collectPendingApprovals, compressionThresholdTokens, conformsToWire, contentToText, diagnosticToLine, extractAllMentions, extractMentions, extractSessionMentions, filePartSummary, flattenCatalog, getProviderInfo, hasFailure, isApprovalOutcome, isContextNearlyFull, isHeadlessInputFormat, isHeadlessLifecycleEvent, isHeadlessOutputFormat, isKeyAction, isLang, isMentionableFilePath, isOperationType, isPermissionLevel, isPlanOutcome, isProviderType, isQuestionAnswerMap, isSearchProviderType, isValidAgentRoleName, isValidCommandName, isWireGoalPhase, isWireHubEvent, isWirePlanAction, isWireRewindScope, isWireSettingWriteLayer, makeTranslate, normalizeApproval, packSessionSurface, parseChord, parseModelRef, parseSequence, perAction, placeholdersOf, promptTokens, resolveHostText, sequenceId, sessionPartSummary, stripSystemNote, systemNote, tableOf, totalUsageTokens, translatorFor, turnDigest, unfixedRules, utf8ByteLength, wireFields };
1768
+ export { ACTION_CONTEXTS, AGENT_ROLE_NAME_PATTERN, API_KEY_ENV_VARS, APPROVAL_OUTCOMES, COMMAND_NAME_PATTERN, COMPLIANCE_ACTIONS, COMPLIANCE_CATEGORIES, DEFAULT_AGENT_ROLE, DEFAULT_LANG, DiagnosticSink, GEN_AI, HEADLESS_INPUT_EVENT_TYPES, HEADLESS_INPUT_FORMATS, HEADLESS_OUTPUT_FORMATS, HEADLESS_PROTOCOL_VERSION, KEY_ACTIONS, LANGS, MAX_ATTACH_BYTES, MAX_ATTACH_FILES, MAX_ATTACH_TOTAL_BYTES, MAX_HEADER_CHARS, MAX_OPTIONS, MAX_QUESTIONS, MAX_SESSION_ATTACH_BYTES, MAX_SESSION_REFS, MCP_DATA_KEY_NAME, METRIC, MIN_OPTIONS, NOOP_TELEMETRY, OPERATION_TYPES, OVERSIZE_RATIO, PERMISSION_LEVELS, PLAN_OUTCOMES, PROVIDER_INFOS, PROVIDER_TYPES, RESERVED_CHORDS, RESERVED_COMMAND_NAMES, SCHEDULE_DRAFT_TOOL, SCHEDULE_INTERVAL_MINUTES, SCHEDULE_RUN_STATUSES, SCHEDULE_TEMPLATES, SEARCH_API_KEY_ENV, SEARCH_PROVIDER_TYPES, SECRET_SERVICE, SEQUENCE_CONTEXTS, SESSION_MENTION_PREFIX, SESSION_REFERENCE_ERROR_CODES, SHELL_KINDS, SIDEBAR_MENU_MESSAGE_TYPE, SIMULTANEOUS_CONTEXTS, SYSTEM_NOTE_PREFIX, ToolExposure, UNLIMITED_TURNS, WIRE_ABORT_FIELDS, WIRE_ABOUT_FIELDS, WIRE_AGENT_ROLE_FIELDS, WIRE_APPROVAL_CACHE_REVOKE_REQUEST_FIELDS, WIRE_APPROVAL_CACHE_REVOKE_RESPONSE_FIELDS, WIRE_APPROVAL_LIST_FIELDS, WIRE_APPROVAL_ROW_FIELDS, WIRE_ARTIFACTS_FIELDS, WIRE_AUDIT_LOG_FIELDS, WIRE_AUDIT_ROW_FIELDS, WIRE_AUTH_COOKIE, WIRE_AUTH_COOKIE_ATTRS, WIRE_AUTH_TOKEN_PARAM, WIRE_BACKGROUND_TASK_FIELDS, WIRE_BLOCKED_GOALS_FIELDS, WIRE_BLOCKED_GOAL_FIELDS, WIRE_BLOCKED_LEVEL_FIELDS, WIRE_BUILTIN_CONNECTOR_FIELDS, WIRE_CACHED_APPROVAL_FIELDS, WIRE_CAPABILITIES_FIELDS, WIRE_CAPABILITY_PROJECT_FIELDS, WIRE_CHECKPOINT_LIST_FIELDS, WIRE_CHECKPOINT_SUMMARY_FIELDS, WIRE_COMMANDS_FIELDS, WIRE_COMMAND_EXPANSION_FIELDS, WIRE_COMPACT_FIELDS, WIRE_COMPRESSION_LINE_FIELDS, WIRE_CONFIG_FIELDS, WIRE_CONTEXT_FIELDS, WIRE_CREATE_SESSION_FIELDS, WIRE_CREATE_WORKSPACE_FIELDS, WIRE_CREATE_WORKSPACE_RESPONSE_FIELDS, WIRE_CUSTOM_COMMAND_FIELDS, WIRE_DELETE_SESSION_FIELDS, WIRE_DIFF_FILE_FIELDS, WIRE_ERROR_FIELDS, WIRE_FILE_CANDIDATES_FIELDS, WIRE_FILE_CANDIDATE_FIELDS, WIRE_FILE_CHANGE_FIELDS, WIRE_FILE_OPEN_RESPONSE_FIELDS, WIRE_FILE_REFERENCE_FIELDS, WIRE_FILE_STAT_MAX, WIRE_FILE_STAT_OK_FIELDS, WIRE_FILE_STAT_REFUSED_FIELDS, WIRE_FILE_STAT_RESPONSE_FIELDS, WIRE_FILE_TEXT_RESPONSE_FIELDS, WIRE_GOAL_ACTIONS, WIRE_GOAL_BLOCK_FIELDS, WIRE_GOAL_CLEAR_FIELDS, WIRE_GOAL_CREATE_FIELDS, WIRE_GOAL_FIELDS, WIRE_GOAL_LIMITS_FIELDS, WIRE_GOAL_PHASES, WIRE_GOAL_REFUSALS, WIRE_GOAL_RESPONSE_FIELDS, WIRE_GOAL_WRITE_FIELDS, WIRE_HEALTH_FIELDS, WIRE_IMAGE_REFERENCE_FIELDS, WIRE_KNOWN_WORKSPACE_FIELDS, WIRE_LANG_PARAM, WIRE_MANAGED_LOCK_FIELDS, WIRE_MCP_ADD_FIELDS, WIRE_MCP_ADD_RESPONSE_FIELDS, WIRE_MCP_APPLY_ENTRY_FIELDS, WIRE_MCP_APPLY_RESPONSE_FIELDS, WIRE_MCP_CONFIG_APPLY_FIELDS, WIRE_MCP_CONFIG_FIELDS, WIRE_MCP_CONFIG_ISSUE_FIELDS, WIRE_MCP_CONFIG_SAVE_FIELDS, WIRE_MCP_CONFIG_SAVE_RESPONSE_FIELDS, WIRE_MCP_CONNECTOR_FIELDS, WIRE_MCP_RECONNECT_FIELDS, WIRE_MESSAGE_LIST_FIELDS, WIRE_MODEL_FIELDS, WIRE_MODEL_SELECTION_FIELDS, WIRE_MODEL_SET_FIELDS, WIRE_MODEL_SUGGESTIONS_FIELDS, WIRE_PATCH_SESSION_FIELDS, WIRE_PATCH_SESSION_RESPONSE_FIELDS, WIRE_PERMISSION_RULE_FIELDS, WIRE_PERMISSION_SET_REQUEST_FIELDS, WIRE_PERMISSION_SET_RESPONSE_FIELDS, WIRE_PERMISSION_SHADOW_FIELDS, WIRE_PERMISSION_STATE_FIELDS, WIRE_PERMISSION_STATUS_FIELDS, WIRE_PLAN_ACTIONS, WIRE_PLAN_FIELDS, WIRE_PLAN_MODE_REQUEST_FIELDS, WIRE_PLAN_MODE_RESPONSE_FIELDS, WIRE_PLAN_MODE_STATE_FIELDS, WIRE_PLUGINS_FIELDS, WIRE_PLUGIN_ACTION_FIELDS, WIRE_PLUGIN_INSTALL_FIELDS, WIRE_PLUGIN_LOCAL_FIELDS, WIRE_PLUGIN_LOCAL_INSTALL_FIELDS, WIRE_PLUGIN_MARKETPLACE_FIELDS, WIRE_PLUGIN_MARKETPLACE_RESPONSE_FIELDS, WIRE_PLUGIN_NAME_FIELDS, WIRE_PLUGIN_PREVIEW_FIELDS, WIRE_PLUGIN_PREVIEW_RESPONSE_FIELDS, WIRE_PLUGIN_REFRESH_RESPONSE_FIELDS, WIRE_PLUGIN_UPDATE_FIELDS, WIRE_PLUGIN_UPLOAD_CONFIRM_FIELDS, WIRE_PLUGIN_UPLOAD_FIELDS, WIRE_PLUGIN_UPLOAD_FORM_FIELDS, WIRE_PLUGIN_UPLOAD_PREVIEW_RESPONSE_FIELDS, WIRE_PLUGIN_UPLOAD_RESPONSE_FIELDS, WIRE_POLICY_DIR_FIELDS, WIRE_POLICY_STATUS_FIELDS, WIRE_PROVIDERS_FIELDS, WIRE_PROVIDER_KEY_FIELDS, WIRE_PROVIDER_MODELS_FIELDS, WIRE_PROVIDER_OPTION_FIELDS, WIRE_QUESTION_LIST_FIELDS, WIRE_QUESTION_ROW_FIELDS, WIRE_RESPOND_APPROVAL_FIELDS, WIRE_RESPOND_APPROVAL_RESPONSE_FIELDS, WIRE_RESPOND_QUESTION_FIELDS, WIRE_RESPOND_QUESTION_RESPONSE_FIELDS, WIRE_REWIND_FILE_PLAN_FIELDS, WIRE_REWIND_OUTCOME_FIELDS, WIRE_REWIND_PREVIEW_FIELDS, WIRE_REWIND_REQUEST_FIELDS, WIRE_REWIND_RESPONSE_FIELDS, WIRE_REWIND_SCOPES, WIRE_ROLE_ADD_FIELDS, WIRE_ROLE_ADD_RESPONSE_FIELDS, WIRE_SANDBOX_STATUS_FIELDS, WIRE_SCHEDULE_CAPABILITY_FIELDS, WIRE_SCHEDULE_CREATE_FIELDS, WIRE_SCHEDULE_DEFAULTS_FIELDS, WIRE_SCHEDULE_DELETE_FIELDS, WIRE_SCHEDULE_FIELDS, WIRE_SCHEDULE_FIX_FIELDS, WIRE_SCHEDULE_FIX_REQUEST_FIELDS, WIRE_SCHEDULE_ISSUE_CODES, WIRE_SCHEDULE_LIST_FIELDS, WIRE_SCHEDULE_PENDING_FIELDS, WIRE_SCHEDULE_RECORDING_FIELDS, WIRE_SCHEDULE_ROW_FIELDS, WIRE_SCHEDULE_RUNS_FIELDS, WIRE_SCHEDULE_RUN_FIELDS, WIRE_SCHEDULE_SAVE_FIELDS, WIRE_SECURITY_FIELDS, WIRE_SECURITY_WORKSPACE_FIELDS, WIRE_SEND_MESSAGE_FIELDS, WIRE_SEND_MESSAGE_RESPONSE_FIELDS, WIRE_SESSION_CANDIDATES_FIELDS, WIRE_SESSION_CANDIDATE_FIELDS, WIRE_SESSION_FINISH_FIELDS, WIRE_SESSION_LIST_FIELDS, WIRE_SESSION_REFERENCE_FIELDS, WIRE_SESSION_RESPONSE_FIELDS, WIRE_SESSION_SUMMARY_FIELDS, WIRE_SESSION_WORKSPACE_FIELDS, WIRE_SESSION_WORKSPACE_RESPONSE_FIELDS, WIRE_SETTINGS_FIELDS, WIRE_SETTINGS_WRITE_FIELDS, WIRE_SETTINGS_WRITE_REQUEST_FIELDS, WIRE_SETTING_ROW_FIELDS, WIRE_SETTING_STEP_FIELDS, WIRE_SETTING_WRITE_FIELDS, WIRE_SETTING_WRITE_LAYERS, WIRE_SKILL_BODY_FIELDS, WIRE_SKILL_FIELDS, WIRE_SKILL_IMPORT_FIELDS, WIRE_SKILL_IMPORT_PREVIEW_FIELDS, WIRE_SKILL_REMOVE_FIELDS, WIRE_TASKS_FIELDS, WIRE_TOOLS_FIELDS, WIRE_TOOL_GATE_FIELDS, WIRE_TOOL_ROW_FIELDS, WIRE_WORKSPACE_DIFF_FIELDS, WIRE_WORKSPACE_DIRS_FIELDS, WIRE_WORKSPACE_DIR_ENTRY_FIELDS, WIRE_WORKSPACE_REF_FIELDS, apiKeyEnvVar, assertNeverPart, assistantTurnText, attachSessionSurface, chordId, collectPendingApprovals, compressionThresholdTokens, conformsToWire, contentToText, diagnosticToLine, extractAllMentions, extractMentions, extractSessionMentions, filePartSummary, flattenCatalog, getProviderInfo, hasFailure, isApprovalOutcome, isContextNearlyFull, isHeadlessInputFormat, isHeadlessLifecycleEvent, isHeadlessOutputFormat, isKeyAction, isLang, isMentionableFilePath, isOperationType, isPermissionLevel, isPlanOutcome, isPromptOversize, isProviderType, isQuestionAnswerMap, isSearchProviderType, isValidAgentRoleName, isValidCommandName, isWireGoalPhase, isWireHubEvent, isWirePlanAction, isWireRewindScope, isWireSettingWriteLayer, makeTranslate, normalizeApproval, packSessionSurface, parseChord, parseModelRef, parseSequence, perAction, placeholdersOf, promptTokens, resolveHostText, sequenceId, sessionPartSummary, stripSystemNote, systemNote, tableOf, totalUsageTokens, translatorFor, turnDigest, unfixedRules, utf8ByteLength, wireFields };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epoch-agent/protocol",
3
- "version": "0.7.1",
3
+ "version": "0.9.0",
4
4
  "private": false,
5
5
  "description": "epoch-agent 契约层:工具 / 事件 / 权限 / 插件的类型定义,零运行时依赖",
6
6
  "repository": {