@sema-agent/client-core 0.99.0 → 0.100.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.
Files changed (128) hide show
  1. package/CHANGELOG.md +177 -0
  2. package/README.md +32 -19
  3. package/dist/adapt/arms.js +60 -36
  4. package/dist/adapt/panelTasks.d.ts +2 -1
  5. package/dist/adapt/panelTasks.js +32 -9
  6. package/dist/adapt/textStream.d.ts +1 -1
  7. package/dist/adapt/textStream.js +51 -28
  8. package/dist/adapter/activeRunSelfHeal.d.ts +7 -0
  9. package/dist/adapter/activeRunSelfHeal.js +58 -11
  10. package/dist/adapter/downstream/eventToSdkMessage.d.ts +25 -6
  11. package/dist/adapter/downstream/eventToSdkMessage.js +125 -9
  12. package/dist/adapter/downstream/terminalToSdkResult.js +10 -0
  13. package/dist/adapter/downstream/wiringManifestView.d.ts +3 -1
  14. package/dist/adapter/downstream/wiringManifestView.js +1 -0
  15. package/dist/adapter/runStream.js +32 -5
  16. package/dist/adapter/types.d.ts +2 -0
  17. package/dist/agentsWireCaps.d.ts +7 -0
  18. package/dist/agentsWireCaps.js +100 -15
  19. package/dist/cloudConfigWireCaps.d.ts +10 -1
  20. package/dist/cloudConfigWireCaps.js +156 -62
  21. package/dist/compactionStatus.d.ts +34 -0
  22. package/dist/compactionStatus.js +196 -0
  23. package/dist/decideFailureNote.js +3 -3
  24. package/dist/displayUntrusted.js +150 -5
  25. package/dist/engineAgentPanelStore.d.ts +7 -4
  26. package/dist/engineErrorCodes.d.ts +9 -1
  27. package/dist/engineErrorCodes.js +9 -5
  28. package/dist/engineRowRef.js +1 -0
  29. package/dist/engineToolDirectory.d.ts +3 -0
  30. package/dist/engineToolDirectory.js +4 -2
  31. package/dist/eventLeg.d.ts +1 -7
  32. package/dist/eventLeg.js +7 -8
  33. package/dist/fileHistoryCaptureCapability.d.ts +0 -3
  34. package/dist/fileHistoryCaptureCapability.js +0 -4
  35. package/dist/generated/engineFactTables.d.ts +1 -0
  36. package/dist/generated/engineFactTables.js +27 -0
  37. package/dist/generated/engineNoticeTables.js +3 -0
  38. package/dist/generated/settingsSchemaFns.d.ts +12 -0
  39. package/dist/generated/settingsSchemaFns.js +13 -0
  40. package/dist/generated/settingsSchemaMcpRequestEntry.d.ts +1 -0
  41. package/dist/generated/settingsSchemaMcpRequestEntry.js +162 -0
  42. package/dist/generated/settingsSchemaTables.d.ts +1 -0
  43. package/dist/generated/settingsSchemaTables.js +5 -0
  44. package/dist/generated/settingsSchemaTypes.d.ts +28 -0
  45. package/dist/hitl/allowRuleShadow.js +2 -2
  46. package/dist/hitl/approvalCardReasons.js +2 -2
  47. package/dist/hitl/approvalHolds.d.ts +14 -0
  48. package/dist/hitl/approvalHolds.js +41 -0
  49. package/dist/hitl/askClassPair.d.ts +2 -2
  50. package/dist/hitl/askClassPair.js +2 -2
  51. package/dist/hitl/attributionLadder.d.ts +23 -0
  52. package/dist/hitl/attributionLadder.js +67 -0
  53. package/dist/hitl/decisionLedger.d.ts +55 -0
  54. package/dist/hitl/decisionLedger.js +156 -0
  55. package/dist/hitl/decisionRefusal.d.ts +1 -0
  56. package/dist/hitl/decisionRefusal.js +1 -1
  57. package/dist/hitl/decisionSend.d.ts +113 -0
  58. package/dist/hitl/decisionSend.js +579 -0
  59. package/dist/hitl/hitlBridge.js +18 -6
  60. package/dist/hitl/planReviewWire.js +45 -76
  61. package/dist/hitl/sessionPolicyDeliverable.js +3 -6
  62. package/dist/hitl/toolApprovalWire.js +43 -109
  63. package/dist/hostTurnSettings.d.ts +46 -7
  64. package/dist/hostTurnSettings.js +408 -7
  65. package/dist/humanTurn.d.ts +2 -1
  66. package/dist/humanTurn.js +3 -3
  67. package/dist/i18n/messages.en.d.ts +131 -0
  68. package/dist/i18n/messages.en.js +143 -12
  69. package/dist/i18n/messages.zh.js +148 -12
  70. package/dist/index.d.ts +18 -2
  71. package/dist/index.js +10 -1
  72. package/dist/inheritEnvCapability.d.ts +1 -0
  73. package/dist/inheritEnvCapability.js +9 -2
  74. package/dist/inheritEnvWire.js +2 -2
  75. package/dist/injectionLaneNotice.d.ts +5 -0
  76. package/dist/injectionLaneNotice.js +46 -0
  77. package/dist/mcpPanel.js +2 -0
  78. package/dist/mcpReconnect.js +2 -2
  79. package/dist/mcpToolToggles.d.ts +6 -0
  80. package/dist/mcpToolToggles.js +46 -0
  81. package/dist/mcpWireCaps.d.ts +10 -4
  82. package/dist/mcpWireCaps.js +106 -71
  83. package/dist/mcpWireTransport.d.ts +4 -0
  84. package/dist/mcpWireTransport.js +18 -0
  85. package/dist/modelCapabilityProbe.d.ts +2 -1
  86. package/dist/modelCapabilityProbe.js +10 -9
  87. package/dist/modelIdentityResolvability.d.ts +2 -0
  88. package/dist/modelIdentityResolvability.js +23 -5
  89. package/dist/ownKey.d.ts +26 -0
  90. package/dist/ownKey.js +75 -0
  91. package/dist/panelReduce.d.ts +5 -0
  92. package/dist/panelReduce.js +45 -13
  93. package/dist/panelStateHolder.d.ts +1 -0
  94. package/dist/panelStateHolder.js +10 -1
  95. package/dist/permissionRuleIssue.d.ts +2 -1
  96. package/dist/permissionRuleIssue.js +22 -21
  97. package/dist/pluginHooksWire.js +12 -10
  98. package/dist/prepareRefusal.d.ts +8 -0
  99. package/dist/prepareRefusal.js +72 -0
  100. package/dist/request/taskRequest.d.ts +10 -10
  101. package/dist/request/taskRequest.js +106 -65
  102. package/dist/resumeRefusalCopy.d.ts +3 -1
  103. package/dist/resumeRefusalCopy.js +22 -4
  104. package/dist/retryStatus.d.ts +18 -0
  105. package/dist/retryStatus.js +76 -19
  106. package/dist/ruleRefusalSentence.d.ts +4 -0
  107. package/dist/ruleRefusalSentence.js +58 -0
  108. package/dist/sandboxWire.d.ts +2 -1
  109. package/dist/sandboxWire.js +55 -21
  110. package/dist/scenarioRefusal.d.ts +2 -1
  111. package/dist/scenarioRefusal.js +5 -5
  112. package/dist/seam.d.ts +24 -9
  113. package/dist/seam.js +44 -4
  114. package/dist/seatContract.d.ts +16 -8
  115. package/dist/seatContract.js +21 -6
  116. package/dist/settingsCredentialKeyPaths.d.ts +8 -0
  117. package/dist/settingsCredentialKeyPaths.js +219 -0
  118. package/dist/skillsWireCaps.d.ts +0 -3
  119. package/dist/skillsWireCaps.js +1 -2
  120. package/dist/subagentContentStore.d.ts +1 -0
  121. package/dist/subagentContentStore.js +135 -27
  122. package/dist/toolsFlagNames.d.ts +8 -0
  123. package/dist/toolsFlagNames.js +110 -0
  124. package/dist/turnFailurePresentation.js +15 -7
  125. package/dist/wireRefusalCopy.d.ts +51 -17
  126. package/dist/wireRefusalCopy.js +298 -135
  127. package/docs/INTEGRATION-CLIENTS.md +423 -26
  128. package/package.json +4 -4
@@ -180,14 +180,23 @@ const ZH = {
180
180
  'onboard.refusal.writeFailed': '模型配置没能保存。',
181
181
  'onboard.refusal.engineIsRemote': '正在用 Cloud 引擎 —— 本机模型接入对它不起作用。请先切回本机引擎。',
182
182
  'onboard.refusal.envCatalogPresent': '引擎正按环境变量供模型;写下第一条目录模型会替换掉它们,所以没有保存。请先把那几只模型放进目录。',
183
- 'config.mcp.nameBlank': 'MCP 服务器条目{where}的名字为空({name}),没有启动。请给它起个名字,或删掉这一条。',
184
- 'config.mcp.nameEdgeWhitespace': 'MCP 服务器 {name}{where} 没有启动:名字带首尾空白,与其他设置里的同名对不上(例如禁用服务器列表)。请去掉名字里多余的空白。',
185
- 'config.mcp.nameCollides': 'MCP 服务器 {name}{where} 没有启动:名字带首尾空白,去掉后会与另一条 MCP 服务器重名。请去掉名字里多余的空白,或删掉重复的一条。',
183
+ 'config.mcp.nameBlank': 'MCP 服务器条目{where}的名字不可用({name}),没有启动。请给它起个名字,或删掉这一条。',
184
+ 'config.mcp.nameEdgeWhitespace': 'MCP 服务器名 {name}{where} 不能照原样使用,所以没有启动:它与其他设置里的同名对不上(例如禁用服务器列表)。请去掉名字里多余的空白。',
185
+ 'config.mcp.nameCollides': 'MCP 服务器名 {name}{where} 不能照原样使用,所以没有启动:去掉首尾空白后会与另一条 MCP 服务器重名。请去掉名字里多余的空白,或删掉重复的一条。',
186
+ 'config.mcp.nameTooLong': 'MCP 服务器名 {name}{where} 不可用,所以没有启动:服务器名最长 128 个字符。请缩短名字。',
187
+ 'config.mcp.identityHeadersBothSet': 'MCP 服务器 {name}{where} 没有启动:它同时设置了 principalHeader 和 assertionHeader,而这两项指的是同一个身份头 —— 只保留其中一项。其他 MCP 服务器不受影响。',
188
+ 'config.mcp.transportUnreadable': '读不出(声明上的取值器或代理陷阱抛了错)',
189
+ 'config.mcp.transportInvalid': 'MCP 服务器 {name}{where} 没有启动:它的传输设置不可用 —— {path} {problem}。请修正这台服务器的这项设置(或删掉这台服务器);其他 MCP 服务器不受影响。',
190
+ 'config.mcp.transportDegraded': 'MCP 服务器 {name}{where} 已启动,但它的部分传输设置不能照原样使用、被略去了:{lost}。其余设置照常生效;请修正上面点名的设置,让它们也生效。',
186
191
  'config.mcp.toolAxesInvalid': 'MCP 服务器 {name}{where} 没有启动:它的 toolAxes 设置不合法 —— {problem}。请修正这台服务器的 toolAxes(或删掉它);其他 MCP 服务器不受影响。',
187
192
  'config.mcp.toolAxesFallbackProblem': '这份声明不是一组合法的按工具安全设置',
188
193
  'config.mcp.elicitationInvalid': 'MCP 服务器 {name}{where} 没有启动:它的 elicitation 设置必须是 true 或 false。请修正这台服务器的 elicitation(或删掉它);其他 MCP 服务器不受影响。',
189
194
  'config.mcp.cloudElicitationInvalid': '云配置:这些 MCP 服务器条目被略过,因为它们的 elicitation 设置不是 true 或 false —— 请修正或删掉 elicitation 条目:{who}',
190
195
  'config.mcp.cloudToolAxesInvalid': '云配置:这些 MCP 服务器条目被略过,因为它们的 toolAxes 设置不合法(按工具的安全覆盖只认 effect、egress、irreversibility 三项,各带合法取值)—— 请修正或删掉 toolAxes 条目:{who}',
196
+ 'config.mcp.cloudNameUnusable': '云配置:这些 MCP 服务器条目被略过,因为它们的名字不能照原样使用(名字超过 128 个字符,或带首尾空白)—— 请修正名字:{who}',
197
+ 'config.mcp.cloudTransportInvalid': '云配置:这些 MCP 服务器条目被略过,因为它们的传输设置引擎不能照原样使用(例如地址不是 http(s) URL)—— 请修正传输设置:{who}',
198
+ 'config.mcp.cloudTransportDegraded': '云配置:这些 MCP 服务器条目已启动,但它们的部分传输设置不能照原样使用(点名的设置被略去,其余照常生效)—— 请修正点名的设置:{who}',
199
+ 'config.mcp.cloudTransportDegradedUnreadable': '云配置:「已启动但部分设置被略去」的 MCP 服务器条目清单本客户端读不出来 —— 有的服务器可能在缺少部分已配置设置的情况下运行,且没有任何提示',
191
200
  'approval.boundGrants.notActivated.one': '批准这一张不会激活卡上的技能:它的拒绝清单里有 1 条读作无物,而引擎不丢弃读不出的拒绝 —— 技能的说明不加载,清单里的一条都不授予。',
192
201
  'approval.boundGrants.notActivated.other': '批准这一张不会激活卡上的技能:它的拒绝清单里有 {count} 条读作无物,而引擎不丢弃读不出的拒绝 —— 技能的说明不加载,清单里的一条都不授予。',
193
202
  'approval.boundGrants.listsNoToolsWithNothing.one': '批准这一张会激活卡上的技能;它没有列出免问运行的工具,也没有列出要拒的工具。清单里有 1 条读作无物,什么都不授予。',
@@ -298,12 +307,15 @@ const ZH = {
298
307
  'resume.refusal.park.whyWalltime': '它的 run 带着一个墙钟时间额度,而这一版引擎不再强制执行这个额度',
299
308
  'resume.refusal.park.whyInheritedGate': '它 parked 时带的权限模式设置已经读不出来了',
300
309
  'resume.refusal.park.whyConfigRefused': '引擎拒绝它 parked 时带的任务配置',
310
+ 'resume.refusal.park.whyDeps': '引擎拒绝续跑时要用的部署自身配置(或作为继承约束传下来的策略)—— 这是部署的问题,不是你的决定',
301
311
  'resume.refusal.park.whyUnsupported': '它是在这一版引擎不支持的条件下 parked 的(例如由更早的引擎版本)',
302
312
  'resume.refusal.park.whatDefault': 'parked 步骤',
303
313
  'resume.refusal.park.head': '这个 {what} 无法被这一版引擎续跑:{why}。同样的拒绝每次都会回来,所以再答一次也没有用(什么都没有决断,什么都没有续跑)。',
304
314
  'resume.refusal.park.configMayReturn': '如果那份配置恢复了,同样的回答就能再次通过。',
305
- 'resume.refusal.park.printEnded': '{head}引擎已结束那条 run({code});请把这项工作作为新任务重新提交。',
306
- 'resume.refusal.park.printHolds': '{head}{configMayReturn}parked 的那条 run 仍占着这个会话({code}):请取消它({cancel}),再把这项工作作为新任务重新提交。',
315
+ 'resume.refusal.park.depsMayReturn': '这张卡仍然挂着:运维这台引擎的人修好部署之后,同一张卡可以再决一次。',
316
+ 'resume.refusal.park.blockedByTail': '准入码:{blockedBy}。',
317
+ 'resume.refusal.park.printEnded': '{head}引擎已结束那条 run({code});请把这项工作作为新任务重新提交。{blocked}',
318
+ 'resume.refusal.park.printHolds': '{head}{configMayReturn}parked 的那条 run 仍占着这个会话({code}):请取消它({cancel}),再把这项工作作为新任务重新提交。{blocked}',
307
319
  'resume.refusal.park.interactiveEnded': '{head}引擎已结束那条 parked 的 run,所以这段对话空出来了:请把这项工作作为新消息重新发一次。',
308
320
  'resume.refusal.park.interactiveBusy': '{head}{configMayReturn}parked 的那条 run 会一直占着这段对话,直到它被取消。',
309
321
  'resume.refusal.park.blockedPrint': 'sema 不会自己把 run {run} 的卡放回屏幕:这一版引擎拒绝续跑它。请取消这条 run({cancel}),再把这项工作作为新任务重新提交。',
@@ -373,10 +385,11 @@ const ZH = {
373
385
  'session.selfHeal.row.steered.next.dismissed': '那张决断卡是你自己关掉的,所以 sema 没有把它放回屏幕;在那个决断做出之前,没有任何东西会让那次 run resume —— 发一条消息可以把卡叫回来。',
374
386
  'session.selfHeal.row.steered.next.cannotShow': 'sema 没能在这里把那张决断卡显示出来{noView},所以在那个决断做出之前,没有任何东西会让那次 run resume;如果你不再需要它,请{wayOut}。',
375
387
  'session.selfHeal.row.steered.queued': 'run {taskId} 其实此刻并没有在干活:引擎报告它{parked}在一个需要你做的决断上,所以把你的消息排在了那次 park 上,没有运行它。{next}{textOnly}没有取消任何东西,你的消息也没有开启新的 turn。',
376
- 'session.selfHeal.row.steered.parkedForWake': 'run {taskId} 已经结束了,所以引擎把你的消息 parked 在了那次已结束的 run 上,没有运行它 —— parked 的消息只有在这个会话于引擎上被唤醒(POST /v1/sessions/:id/wake)时才会送达,而 sema 在这里不做这件事。那次 run 已不再占着这个会话:请再发一次你的消息,把它作为新的 turn 运行 —— 但请注意,那份 parked 的副本并没有被丢弃,所以如果将来有什么在引擎上唤醒了这个会话,这条指令会再运行第二次。{textOnly}没有取消任何东西。',
388
+ 'session.selfHeal.row.steered.parkedForWake': 'run {taskId} 已经结束了,所以引擎把你的消息 parked 在了那次已结束的 run 上,没有运行它 —— parked 的消息只有在这个会话于引擎上被唤醒{wakeOn}时才会送达,而 sema 在这里不做这件事。那次 run 已不再占着这个会话:请再发一次你的消息,把它作为新的 turn 运行 —— 但请注意,那份 parked 的副本并没有被丢弃,所以如果将来有什么在引擎上唤醒了这个会话,这条指令会再运行第二次。{textOnly}没有取消任何东西。',
377
389
  'session.selfHeal.row.steered.reported': '(它把那次 run 报告为 {status})',
378
390
  'session.selfHeal.row.steered.unknown': 'sema 把你的消息交给了 run {taskId},但引擎没有说会怎样送达{reported}。{textOnly}没有取消任何东西,你的消息也没有开启新的 turn —— {tail}',
379
391
  'session.selfHeal.row.steerFailed.rejected': '把你的消息交给正在运行的 run(run {taskId})被拒绝了:{detail}。sema 没有重试(steer 不能安全地发两次),也没有取消那次 run。你的消息没有发出;如果你还想要它,请再发一次。',
392
+ 'session.selfHeal.row.steerFailed.runEnded': 'sema 想把你的消息交给 run {taskId} 时,它已经结束了(状态 {status}),所以引擎拒绝了。sema 没有重试,也没有取消任何东西。那次 run 已不再占着这个会话:请再发一次你的消息,把它作为新的 turn 运行。',
380
393
  'session.selfHeal.row.steerFailed.unknown': 'sema 把你的消息发给了正在运行的 run(run {taskId}),但无法确认它的下场({detail})。steer 不能安全地发两次,所以 sema 没有重试,也没有取消那次 run。那次 run 可能收到了你的消息,也可能没收到 —— 重发之前请先看它接下来怎么做。',
381
394
  'session.selfHeal.row.attach': '{disclosure}你的消息没有发出;等那次 run 结束后,请再发一次。',
382
395
  'session.selfHeal.row.cancelled.confirmed': '你选择了取消 run {taskId}。引擎确认它不再占着这个会话,所以 sema 现在就发送你的消息。',
@@ -394,18 +407,21 @@ const ZH = {
394
407
  'session.selfHeal.row.stale.cancelTimeout.unread': 'sema 请引擎取消 run {taskId}(parked 在一个已经不在那里的审批上),但在 {waited} 内读不回那次 run 的状态,所以确认不了会话是否已被释放。你的消息没有发出;请稍等片刻再发一次(如果那次 run 真的没了,它就会直接运行),或者{wayOut}。',
395
408
  'session.selfHeal.row.stale.cancelTimeout.held': 'sema 请引擎取消 run {taskId}(parked 在一个已经不在那里的审批上),但 {waited} 之后那次 run 仍占着这个会话 —— 取消是异步的,它可能仍在收尾。你的消息没有发出;请稍等片刻再发一次,或者{wayOut}。',
396
409
  'session.selfHeal.row.stale.cancelFailed.unknown': 'sema 发出了对 run {taskId}(parked 在一个已经不在引擎上的审批上)的取消,但无法确认它的下场({detail}),也没能读回那次 run 已被释放。那次 run 可能仍占着这个会话,也可能没有。你的消息没有发出;请稍等片刻再发一次,或者{wayOut}。',
397
- 'session.selfHeal.row.stale.wait.offered': 'run {taskId} 仍 parked(状态 {status})在一个已经不在引擎上的审批上。sema 已经问过该拿它怎么办,你选了不动它,所以不再问了。你的消息没有发出;请在引擎上取消那次 run(POST /v1/runs/{taskId}/cancel —— 这会彻底结束它),或者{wayOut}。',
398
- 'session.selfHeal.row.stale.wait.first': 'run {taskId} 仍 parked(状态 {status})在一个已经不在引擎上的审批上,所以没有卡可回答了,那次 run 也不会自己落定。sema 没有取消它 —— 是你选了不动它。你的消息没有发出;请在引擎上取消那次 run(POST /v1/runs/{taskId}/cancel —— 这会彻底结束它),或者{wayOut}。',
410
+ 'session.selfHeal.row.stale.wait.offered': 'run {taskId} 仍 parked(状态 {status})在一个已经不在引擎上的审批上。sema 已经问过该拿它怎么办,你选了不动它,所以不再问了。你的消息没有发出;请{endRun}(这会彻底结束它),或者{wayOut}。',
411
+ 'session.selfHeal.row.stale.wait.first': 'run {taskId} 仍 parked(状态 {status})在一个已经不在引擎上的审批上,所以没有卡可回答了,那次 run 也不会自己落定。sema 没有取消它 —— 是你选了不动它。你的消息没有发出;请{endRun}(这会彻底结束它),或者{wayOut}。',
399
412
  'session.selfHeal.row.runNotFound': '引擎报告这个会话被 run {taskId} 占着(状态 running),但直接询问时它已经不认识那次 run 了 —— 这个占用声明看起来已过期(那次 run 多半已经不存在)。sema 没有提议 steer 或取消它:已经没有可操作的东西了。你的消息没有发出;请再发一次(如果会话真的空闲,它就会直接运行),或者{wayOut}。',
400
413
  'session.selfHeal.row.runSettled': 'run {taskId} 已经结束了(状态 {status}),但引擎仍报告它占着这个会话 —— 这个占用声明看起来已过期,或正在释放中。sema 没有提议 steer 或取消它:那次 run 已经结束。你的消息没有发出;请再发一次(占用声明清掉之后,它就会直接运行),或者{wayOut}。',
401
- 'session.selfHeal.row.notParked.offered': 'run {taskId} 仍占着这个会话(状态 {status})。sema 已经问过该拿它怎么办,你选了不动它,所以不再问了。你的消息没有发出;请等那次 run 结束,或在引擎上取消它(POST /v1/runs/{taskId}/cancel),或者{wayOut}。',
414
+ 'session.selfHeal.row.notParked.offered': 'run {taskId} 仍占着这个会话(状态 {status})。sema 已经问过该拿它怎么办,你选了不动它,所以不再问了。你的消息没有发出;请等那次 run 结束,或{endRun},或者{wayOut}。',
402
415
  'session.selfHeal.row.notParked.parkedOn': '这个会话被较早的一次 run(run {taskId},状态 {status})占着,它在等{parkedOn} —— 它不会自己结束。sema 没有取消它,因为取消等于替你决定了那一项。你的消息没有发出;如果你不再需要它,请{wayOut}。',
403
416
  'session.selfHeal.row.notParked.inFlight': '这个会话已经有一次 run 在跑了(run {taskId},状态 {status})—— 多半是你送去后台的一个 turn。sema 没有取消它,因为那会丢掉你要的活。请等它结束,或者{wayOut}。',
404
417
  'session.selfHeal.row.stateUnknown': '这个会话上仍有一次 run 在活动{handle},而 sema 读不出那次 run 的状态,所以没有动它({detail})。sema 没有发送你的消息:在那次 run 落定之前,这个会话开不了新的 turn —— {wayOut}。',
405
418
  'session.selfHeal.headless.status': '(状态 {status})',
406
- 'session.selfHeal.headless.decide': '这个会话被较早的一次 run{handle}占着{status},它 parked 在等{gate},所以这条消息没有发出。决定它,会话就解锁:POST {decidePath}。改为取消({cancelPath})也能解锁,但那等于替你否决了那一项。或者{freshSession}。{governance}',
407
- 'session.selfHeal.headless.statusOnly': '这个会话被较早的一次 run{handle}占着,状态是 {status},所以这条消息没有发出。引擎报告那次 run 上没有待决的决断:如果它还在干活,请等它结束;如果它永远落定不了,用 {cancelPath} 释放它(那会丢掉它正在做的事)。或者{freshSession}。',
408
- 'session.selfHeal.headless.neverReleased': '这个会话上仍有一次 run 在活动{handle},而且从未被释放,所以 sema 没有发送这条消息。这里没有任何东西会自己清掉。{startOver},或者在引擎上释放那次 run:{cancelPath}',
419
+ 'session.selfHeal.endRun.engine': '在引擎上取消那次 run({cancelPath})',
420
+ 'session.selfHeal.wakeOn.engine': '(POST /v1/sessions/:id/wake)',
421
+ 'session.selfHeal.wakeOn.host': '({where})',
422
+ 'session.selfHeal.headless.decide': '这个会话被较早的一次 run{handle}占着{status},它 parked 在等{gate},所以这条消息没有发出。决定它,会话就解锁:POST {decidePath}。改为结束那次 run 也能解锁,但那等于替你否决了那一项:{endRun}。或者{freshSession}。{governance}',
423
+ 'session.selfHeal.headless.statusOnly': '这个会话被较早的一次 run{handle}占着,状态是 {status},所以这条消息没有发出。引擎报告那次 run 上没有待决的决断:如果它还在干活,请等它结束;如果它永远落定不了,请{endRun} —— 那会丢掉它正在做的事。或者{freshSession}。',
424
+ 'session.selfHeal.headless.neverReleased': '这个会话上仍有一次 run 在活动{handle},而且从未被释放,所以 sema 没有发送这条消息。这里没有任何东西会自己清掉。{startOver},或者{endRun}。',
409
425
  'approval.deniedBy.policy': '被这个部署的权限策略拒绝',
410
426
  'approval.deniedBy.hook': '被 PreToolUse hook 拒绝',
411
427
  'approval.deniedBy.org': '被一条组织规则拒绝',
@@ -491,6 +507,7 @@ const ZH = {
491
507
  'session.fileHistoryRefusal.notSaid': '没有发送:你的设置里已关闭文件检查点,但这台引擎没有报告它能否按会话停止记录文件历史,所以现在发送仍可能把它记录下来。只要这台引擎还是同样的报告,重试也不会改变这一点;要发送并让这一次的文件历史被记录,请在设置里把文件检查点重新打开。',
492
508
  'session.fileHistoryRefusal.unrecognized': '没有发送:你的设置里已关闭文件检查点,但这台引擎报告了一个本客户端不认识的文件历史捕获模式,所以不知道它能否按会话停止记录文件历史,现在发送仍可能把它记录下来。只要这台引擎还是同样的报告,重试也不会改变这一点;要发送并让这一次的文件历史被记录,请在设置里把文件检查点重新打开。',
493
509
  'session.fileHistoryRefusal.unreadable': '没有发送:你的设置里已关闭文件检查点,但这台引擎关于能否按会话停止记录文件历史的报告,本客户端读不出来,所以现在发送仍可能把它记录下来。只要这台引擎还是同样的报告,重试也不会改变这一点;要发送并让这一次的文件历史被记录,请在设置里把文件检查点重新打开。',
510
+ 'session.hostSettings.memorySwitchMalformed': '设置文件里的记忆设置读不出,所以「关闭记忆」没有生效:这一次请求照常带着记忆发出。改好记忆那一段(memory.enabled 只能是 true 或 false)即可关闭。',
494
511
  'model.identity.lane.processEnv': '本客户端启动时的环境',
495
512
  'model.identity.lane.settingsEnv': '本客户端的设置文件',
496
513
  'model.identity.lane.modelCatalogFile': '本地模型目录文件',
@@ -499,6 +516,37 @@ const ZH = {
499
516
  'model.identity.routeGap.fact.endpointMissing': '这个模型走 OpenAI 兼容路由,而网关地址(MODEL_GATEWAY_BASEURL)没有设置,引擎没有网关地址就拒绝启动',
500
517
  'model.identity.routeGap.fact.laneCredentialMissing': '已选择 anthropic 通道(MODEL_PROVIDER=anthropic),ANTHROPIC_API_KEY 与 ANTHROPIC_AUTH_TOKEN 都没有设置,也没有网关地址(MODEL_GATEWAY_BASEURL)可回落,所以引擎在任何路由上都起不来',
501
518
  'model.identity.routeGap.sentence': '{lane}提供了模型名,但本机引擎没有可达它的路由 —— {fact}',
519
+ 'model.identity.catalogAdoption.refused': '{lane}里列了模型,但据报引擎会把这份目录按现状整个拒掉,所以其中任何一个都当不了缺省模型',
520
+ 'model.identity.catalogAdoption.notResolvable': '本机引擎没有配置可用来启动的模型名 —— {clause},而且引擎没有模型名就不会启动',
521
+ 'model.identity.catalogAdoption.notResolvableWithPartial': '本机引擎没有配置可用来启动的模型名 —— {clause};另外{partial},而且引擎没有模型名就不会启动',
522
+ 'notice.injectionLane.sentence': '在这台引擎的 {lane} 车道上,工具跑在与引擎不同的机器上,所以随任务发送的{items}也在那里运行、而不是在本机 —— 依赖本机程序或凭据的会在那里失败',
523
+ 'notice.injectionLane.item.stdioMcp': '本机 stdio MCP 服务器',
524
+ 'notice.injectionLane.item.credentialedMcp': '使用本机凭据的 MCP 服务器',
525
+ 'notice.injectionLane.item.taskHooks': '钩子',
526
+ 'notice.injectionLane.itemSeparator': '、',
527
+ 'rules.refusal.sentence.one': '权限:有 1 条规则不会被执行 —— {list}',
528
+ 'rules.refusal.sentence.other': '权限:有 {count} 条规则不会被执行 —— {list}',
529
+ 'rules.refusal.item': '{rule}({reason})',
530
+ 'rules.refusal.itemSeparator': ';',
531
+ 'rules.refusal.list.more': '{shown},另有 {count} 条',
532
+ 'rules.refusal.reason.toolName': '它的工具名不是这台引擎认得的名字',
533
+ 'rules.refusal.reason.homePath': '它用了引擎无法锚定的 ~/ 路径 —— 请改写成相对项目的路径或绝对路径',
534
+ 'config.agentsWire.refusedServer.sentence': 'agents wire:{who}:它的 tools 条目 {entry} 点名了 MCP 服务器 {server} 的工具,而该服务器{cause} —— 条目原样发出;只要那台服务器不在这一跑里,这一条就什么都给不了代理。{way}',
535
+ 'config.agentsWire.refusedServer.cause.rejected': '已在本项目被拒用,所以不在这一跑里',
536
+ 'config.agentsWire.refusedServer.cause.notApproved': '尚未在本项目获批,所以不在这一跑里',
537
+ 'config.agentsWire.refusedServer.cause.disabled': '在 MCP 设置里被关掉了,所以不在这一跑里',
538
+ 'config.agentsWire.refusedServer.cause.policyBlocked': '被托管策略名单拦下了,所以不在这一跑里',
539
+ 'config.agentsWire.refusedServer.cause.pluginOnly': '被托管策略限定只许插件提供 MCP 服务器,所以不在这一跑里',
540
+ 'config.agentsWire.refusedServer.cause.malformedConfig': '的配置引擎会拒收,所以不在这一跑里',
541
+ 'config.agentsWire.refusedServer.cause.unknown': '不在这一跑里',
542
+ 'config.agentsWire.refusedServer.way.rejected': '要让代理拿到这些工具,请在本项目重新批准该服务器;否则请从代理定义里删掉这一条。',
543
+ 'config.agentsWire.refusedServer.way.notApproved': '要让代理拿到这些工具,请在本项目批准该服务器;否则请从代理定义里删掉这一条。',
544
+ 'config.agentsWire.refusedServer.way.disabled': '要让代理拿到这些工具,请把该服务器重新打开;否则请从代理定义里删掉这一条。',
545
+ 'config.agentsWire.refusedServer.way.policyBlocked': '请让管理策略名单的人放行该服务器;否则请从代理定义里删掉这一条。',
546
+ 'config.agentsWire.refusedServer.way.pluginOnly': '请让管理策略的人放行该服务器,或改由插件提供;否则请从代理定义里删掉这一条。',
547
+ 'config.agentsWire.refusedServer.way.malformedConfig': '请修正该服务器的配置;否则请从代理定义里删掉这一条。',
548
+ 'config.agentsWire.toolEntry.sentence': 'agents wire:{who}:它的 tools 条目 {phrase} —— 条目原样发出;这一条由引擎按它自己的工具名册来判:会拒这类条目的引擎整跑不起(码 config.agent.unknown_tool),会收的引擎不给代理这一条对应的工具,除非这一跑恰有同名工具。请在代理定义里改掉这一条。',
549
+ 'config.agentsWire.refusedServer.way.unknown': '请查一下该服务器为什么没上这一跑;否则请从代理定义里删掉这一条。',
502
550
  'config.hooks.valueShape.nothing': '没有值',
503
551
  'config.hooks.valueShape.null': '空值 null',
504
552
  'config.hooks.valueShape.array': '一个数组',
@@ -697,6 +745,89 @@ const ZH = {
697
745
  'notice.failure.settings.riskJoin': '、',
698
746
  'notice.failure.wait.one': '服务器要求在 1 秒后重试(Retry-After)。',
699
747
  'notice.failure.wait.other': '服务器要求在 {seconds} 秒后重试(Retry-After)。',
748
+ 'rules.issue.emptyTool': '这条规则无效:它没有指明任何工具',
749
+ 'rules.issue.paren': '这条规则无效:它的括号解析不了(要写字面括号请转义成 \\( 或 \\))',
750
+ 'rules.issue.toolName': "这条规则无效:它的工具名写法不是合法的工具名(规则两侧有空白、名字里或括号前有不可见或不允许的字符、以 '-' 起头,或是不指向任何工具的通配 '*'),所以它要么碰不到任何工具,要么碰到错的工具",
751
+ 'rules.issue.paramSplit': '这条规则无效:它的括号里没有写成 name:pattern 的参数规则',
752
+ 'rules.issue.primaryField': '这条规则无效:它对工具的主字段写了匹配模式,而主字段匹配的是去掉首尾空白后的整串,不是前缀',
753
+ 'rules.issue.capExceeded': '这套规则无效:它超过了部署的某一项上限(规则条数、规则长度、模式长度或星号个数);仅凭这个码,本客户端分不出是哪一项',
754
+ 'rules.issue.behavior': '这条规则无效:它的行为既不是 deny 也不是 ask,所以永远不会触发',
755
+ 'rules.issue.commandRule': '这条规则无效:命令模式被命令规则校验器拒绝了',
756
+ 'rules.issue.entryType': '这份 allow 列表无效:它必须是规则字符串的列表,而它本身或其中某一项不是字符串',
757
+ 'rules.issue.allowRule': '只写 deny 或 ask 的规则集里不支持 allow 规则 —— 常驻批准应放在 allow 列表里',
758
+ 'rules.issue.paramUnknown': '这条参数规则不支持:这个工具没有这样的参数,所以它永远匹配不上',
759
+ 'rules.issue.paramNonScalar': '这条参数规则不支持:该参数是对象或数组,所以它永远匹配不上',
760
+ 'rules.issue.toolUnknown': '这条规则在这条链路上不支持:它所用的解析器不认识这个工具,所以无法核对规则的面',
761
+ 'rules.issue.pathBase': '这条路径规则按现在的写法不支持:它所相对的基目录缺失,或不是可用的绝对路径,所以它什么也碰不到,会被拒绝而不是编译',
762
+ 'rules.issue.mcpParen': 'MCP 工具名上不支持带括号的参数规则',
763
+ 'rules.issue.coveringParen': '覆盖型协议名上不支持带括号的参数规则 —— 参数文法是按精确工具名索引的,所以任何已挂载的工具都不可能带它',
764
+ 'rules.issue.paramSplitWithColon': '这条规则无效:参数规则要写成 name:pattern,而冒号前的名字或冒号后的模式是空的',
765
+ 'rules.issue.paramSplitNoColon': '这条规则无效:括号里没有冒号,所以这不是参数规则(参数规则要写成 name:pattern)',
766
+ 'rules.issue.newerCode': '这条规则被拒绝,码为 {code},这个码比本客户端新',
767
+ 'model.probe.verdict.ok': '模型已回答',
768
+ 'model.probe.verdict.okWaited': '模型已回答 —— {time} 后收到首个 token',
769
+ 'model.probe.verdict.auth': '模型服务拒绝了这个 API 密钥{http}',
770
+ 'model.probe.verdict.unreachable': '连不上模型服务',
771
+ 'model.probe.verdict.unreachableWaited': '连不上模型服务 —— {time} 内没有响应',
772
+ 'model.probe.verdict.model': '模型服务不认识这个模型 id{http}',
773
+ 'model.probe.verdict.shape': '这个地址没有提供预期的接口{http} —— 请检查 API 形态',
774
+ 'model.probe.verdict.busy': '模型服务此刻很忙{http} —— 请稍后重试或换个模型',
775
+ 'model.probe.verdict.noToken': '模型服务有响应,但它可能过载了:没有发出任何 token',
776
+ 'model.probe.verdict.noTokenWaited': '模型服务有响应,但它可能过载了:{time} 内没有发出任何 token',
777
+ 'model.probe.verdict.other': '模型服务给出了意料之外的响应{http}',
778
+ 'session.humanTurn.imageUnknownVision.one': '随这条消息发出了一张用 @ 提及的图片,但引擎的模型列表没有说明这条消息所用的模型是否接受图片输入 —— 如果不接受,图片可能被丢弃,或这条消息可能被拒绝',
779
+ 'session.humanTurn.imageUnknownVision.other': '随这条消息发出了 {count} 张用 @ 提及的图片,但引擎的模型列表没有说明这条消息所用的模型是否接受图片输入 —— 如果不接受,图片可能被丢弃,或这条消息可能被拒绝',
780
+ 'config.scenarioRefusal.source.ruling': ',由配置中心指派给你,',
781
+ 'config.scenarioRefusal.source.deployment': ',这个部署的缺省场景,',
782
+ 'config.scenarioRefusal.dangling': '这个部署解析不了你的场景:场景{name}{from}在这里不存在,所以凡是依赖你场景的一切它都拒绝 —— 没有指明场景的新运行,以及本会话的 MCP 服务器名单 · 请让运维这台引擎的人修复场景指派',
783
+ 'config.scenarioRefusal.generic': '这个部署的场景检查拒绝解析你的场景{tail},所以凡是依赖你场景的一切都不可用 —— 本会话的 MCP 服务器名单未知',
784
+ 'notice.wireRefusal.cancel.approvalSettled': '取消没有生效:这个任务正在等待的审批已经在别处被决定或已过期 · 先查看那个决定对该任务做了什么,再做别的',
785
+ 'notice.wireRefusal.cancel.runNotRunning': '无法设置取消:引擎尝试期间,任务一直在运行与等待之间来回切换 · 没有任何改动 —— 请再发一次取消',
786
+ 'notice.wireRefusal.cancel.unrecognized': '引擎以一个没有说明原因的冲突拒绝了这次取消 · 该任务可能刚刚在别处被决定,或在取消途中改变了状态 —— 请查看它当前的状态,如果它仍然活跃再取消一次',
787
+ 'notice.wireRefusal.sendAgainAbout': '大约 {wait} 后重新发送',
788
+ 'notice.wireRefusal.usageWindow.head': '部署的用量窗已耗尽,所以引擎没有受理这个请求 · 请求本身没有任何问题',
789
+ 'notice.wireRefusal.usageWindow.unknownWait': '引擎没有说明窗口还需要多久 —— 请稍后再发送',
790
+ 'notice.wireRefusal.fleetLease.head': '这个部署无法向它的额度服务确认你的用量预算,而在无法检查期间它拒绝计费的工作,所以引擎没有受理这个请求 · 请求本身没有任何问题',
791
+ 'notice.wireRefusal.fleetLease.authRejected': '额度服务拒绝了这台引擎的凭据 —— 如果持续出现,需要由运维这台引擎的人去修复它们',
792
+ 'notice.wireRefusal.fleetLease.unreachable': '引擎连不上额度服务',
793
+ 'notice.wireRefusal.fleetLease.unknownWait': '引擎没有说明要等多久 —— 请稍后再发送',
794
+ 'notice.wireRefusal.denyAttribution.notInProof': '引擎在判断之前就拒绝了这次拒绝:这个部署会给它接受的决定签名,而说明是谁结算了这次决定的那条备注不在被签名的内容里 · 没有做出任何决定,审批仍在等待 —— 请去掉那条备注后,把同一个决定再发一次',
795
+ 'notice.wireRefusal.denyAttribution.decisionConflict': '引擎在判断之前就拒绝了这个决定:请求体既说它由策略结算,又要求放行这次调用,而放行只能由人来做 · 没有做出任何决定,审批仍在等待 —— 请让决定与备注一致后再发一次',
796
+ 'notice.wireRefusal.denyAttribution.retiredKey': '引擎在判断之前就拒绝了这个决定:说明是谁结算它的那条备注用的名字,这台引擎已不再接受 · 没有做出任何决定,审批仍在等待 —— 请改用引擎现在取而代之的名字来写明是谁做出的,再发一次决定',
797
+ 'notice.wireRefusal.denyAttribution.attributionRejected': '引擎不接受这个决定携带的结算信息,所以在判断之前就拒绝了这个决定。{named} · 没有做出任何决定,审批仍在原来的位置等待 —— 请检查那一部分带的是什么(本客户端只设置其中一项:说明是谁结算了这次拒绝的备注),然后再决定一次',
798
+ 'notice.wireRefusal.denyAttribution.named': '它点名 {field} 为它不接受的那一部分。',
799
+ 'notice.wireRefusal.sessionDelete.unrecognized': '引擎以一个没有说明原因的冲突拒绝删除这个会话 · 请确认会话是否仍在列表里、其中是否还有东西在运行,然后再试一次删除',
800
+ 'notice.wireRefusal.sessionDelete.childrenAlive': '这个会话没有被删除:它启动的后台代理仍在这台引擎停不掉它们的地方运行{which} · 没有删除任何东西 —— 等它们结束后再删,或先到它们运行的地方把它们停掉',
801
+ 'notice.wireRefusal.sessionDelete.which': '({ids})',
802
+ 'notice.wireRefusal.sessionDelete.whichMore': '({ids},另有 {count} 个)',
803
+ 'notice.wireRefusal.sessionDelete.activeRun': '这个会话没有被删除:它还有一个运行正在进行{run} · 没有删除任何东西 —— 请取消那个运行或等它结束,然后再删除会话',
804
+ 'notice.wireRefusal.sessionDelete.runId': '(运行 {id})',
805
+ 'notice.wireRefusal.bucket.unknown': '引擎拒绝了这个请求设置里的权限规则,认为条数过多或格式有误 · 没有任何内容被裁剪或丢弃 —— 请修正规则列表,然后重新发送请求',
806
+ 'notice.wireRefusal.bucket.subject.stored': '引擎拒绝继续这件停驻的工作:在为它保存的请求里,',
807
+ 'notice.wireRefusal.bucket.subject.fresh': '引擎拒绝了这个请求:',
808
+ 'notice.wireRefusal.bucket.list': '权限设置里的 {bucket} 规则列表(permissions.{bucket})',
809
+ 'notice.wireRefusal.bucket.what.overCap.more': '{list}有 {count} 条,比引擎接受的 {cap} 条多了 {excess} 条',
810
+ 'notice.wireRefusal.bucket.what.overCap.atMost': '{list}有 {count} 条,而引擎最多接受 {cap} 条',
811
+ 'notice.wireRefusal.bucket.what.overCap.unknown': '{list}的条数超过了引擎接受的数量',
812
+ 'notice.wireRefusal.bucket.what.badEntry.at': '{list}的第 {position} 条是空的或不是文本',
813
+ 'notice.wireRefusal.bucket.what.badEntry.notList': '{list}不是一个规则列表',
814
+ 'notice.wireRefusal.bucket.fix.merge': '把规则合并成更宽的模式,或删掉一些',
815
+ 'notice.wireRefusal.bucket.fix.entry': '修正或删除那一条,让每一条都是非空的规则',
816
+ 'notice.wireRefusal.bucket.fix.list': '把它改成非空规则的列表',
817
+ 'notice.wireRefusal.bucket.next.stored': '它无法按保存的样子继续,而引擎宁可拒绝这份列表也不静默丢规则 —— {fix},然后把这件工作作为新请求重新提交',
818
+ 'notice.wireRefusal.bucket.next.fresh': '没有任何内容被裁剪或丢弃,因为引擎宁可拒绝这份列表也不静默丢规则 —— {fix},然后重新发送请求',
819
+ 'notice.wireRefusal.toolDeclaration': '引擎因为这个请求声明的某个工具而拒绝启动这次运行;引擎自己的消息会说明是哪个工具、出了什么问题 · 这是请求本身的问题,不是暂时的故障 —— 原样再发同一个请求会被同样拒绝;请修正或删掉那个工具声明,再发送',
820
+ 'notice.wireRefusal.hostPosture.notLocal': '这不是你本地设置的问题,也不是本客户端能授予的 —— 由运行这台引擎的人决定',
821
+ 'notice.wireRefusal.hostPosture.wholeEnv': '引擎在任何东西运行之前就拒绝了这个请求:这个部署服务于多个用户,所以请求不能把这台机器的整份环境交给 shell · {notLocal};请去掉整份环境设置(或使用缺省)后重新发送,shell 会拿到缺省环境,其中疑似凭据的变量已被移除',
822
+ 'notice.wireRefusal.hostPosture.writeFace': '引擎在任何东西运行之前就拒绝了这个请求:这个部署不允许请求用 bypassPermissions 抬高写入边界 · {notLocal};请换另一种权限模式后重新发送',
823
+ 'notice.wireRefusal.hostPosture.both': '引擎在任何东西运行之前就拒绝了这个请求:请求既要求 shell 继承这台机器的整份环境,又要求 bypassPermissions,而这个部署至少拒绝了其中一项;拒绝并没有说明是哪一项 · {notLocal};请去掉其中一项或两项后重新发送(整份环境设置只在单用户部署上才被采纳)',
824
+ 'notice.wireRefusal.hostPosture.unattributed': '引擎在任何东西运行之前就拒绝了这个请求:这个部署不接受请求里只有单用户部署才能使用的某项设置;引擎自己的消息会点名它 · {notLocal};请去掉那项设置后重新发送',
825
+ 'notice.wireRefusal.autonomyLane': '引擎没有启动这次 leader 运行:这个部署运行在只做计划的自主档,而 leader 运行没有办法让它的计划被审阅,所以什么也没有启动 · 请改为作为普通运行提交这项工作,或请运维这台引擎的人更改它的自主设置',
826
+ 'notice.wireRefusal.userAttachment': '这条消息没有发出:引擎拒绝了它带的文件 —— 这些文件连同消息,超过了它在这个模型上一次请求能容纳的量,或者其中某一个的形式它不接受 · 没有启动任何东西,你的草稿还保留着 · 请去掉一些附件或改附更小的部分,然后再发一次',
827
+ 'notice.wireRefusal.userInvokedSkill': '引擎没有启动这次运行:为它点名的某个技能不是这次运行已加载的技能,或这次运行关闭了技能 · 没有启动任何东西,你的草稿还保留着 · 请核对技能名,或加载那个技能,然后再发一次',
828
+ 'notice.retry.source.unifiedHeader': '依据模型服务的额度响应头判定',
829
+ 'notice.retry.source.providerCode': '依据模型服务的错误码判定',
830
+ 'notice.retry.source.status': '仅依据 HTTP 状态码判定',
700
831
  };
701
832
  export const ZH_MESSAGES = Object.freeze(ZH);
702
833
  export const TERM_SLOTS = Object.freeze({
@@ -704,6 +835,7 @@ export const TERM_SLOTS = Object.freeze({
704
835
  'config.mcp.cloudToolAxesInvalid': ['toolAxes'],
705
836
  'config.mcp.elicitationInvalid': ['elicitation'],
706
837
  'config.mcp.cloudElicitationInvalid': ['elicitation'],
838
+ 'config.mcp.identityHeadersBothSet': ['principalHeader', 'assertionHeader'],
707
839
  'approval.settle.cause.runCancelled': ['run'],
708
840
  'approval.settle.cause.runExited': ['run'],
709
841
  'approval.settle.cause.ttlExpired': ['approval window'],
@@ -803,6 +935,8 @@ export const TERM_SLOTS = Object.freeze({
803
935
  'session.selfHeal.row.notParked.parkedOn': ['run'],
804
936
  'session.selfHeal.row.notParked.inFlight': ['run', 'turn'],
805
937
  'session.selfHeal.row.stateUnknown': ['run', 'turn'],
938
+ 'session.selfHeal.endRun.engine': ['run'],
939
+ 'session.selfHeal.row.steerFailed.runEnded': ['run', 'turn'],
806
940
  'session.selfHeal.headless.decide': ['parked', 'run'],
807
941
  'session.selfHeal.headless.statusOnly': ['run'],
808
942
  'session.selfHeal.headless.neverReleased': ['run'],
@@ -834,4 +968,6 @@ export const TERM_SLOTS = Object.freeze({
834
968
  'notice.failure.headline.parked': ['parked', 'run', 'turn'],
835
969
  'notice.failure.headline.internal': ['turn'],
836
970
  'notice.failure.settings.safety': ['turn'],
971
+ 'notice.wireRefusal.hostPosture.writeFace': ['bypassPermissions'],
972
+ 'notice.wireRefusal.hostPosture.both': ['bypassPermissions'],
837
973
  });
package/dist/index.d.ts CHANGED
@@ -17,7 +17,7 @@ export { engineRefOf, sameEngineRef, TRANSCRIPT_ROW_SIDECAR_KEYS } from './engin
17
17
  export type { EngineRowRef, SameEngineRefVerdict, EngineBoundRun } from './engineRowRef.js';
18
18
  export { isReplayMarked } from './replayBody.js';
19
19
  export { composeEventLeg, EVENT_LEG_KINDS, EVENT_LEG_TABLE, approvalFrameContextOf } from './eventLeg.js';
20
- export type { ApprovalFrameContext, EventLeg, EventLegBindCause, EventLegBoundInfo, EventLegElicitationFrame, EventLegFrameInfo, EventLegHitlEnvelope, EventLegHitlPorts, EventLegIdleTriagePorts, EventLegKind, EventLegLiveSpec, EventLegOwnerPorts, EventLegPortName, EventLegPorts, EventLegQuestionFrame, EventLegRefusal, EventLegReport, EventLegRow, EventLegRunPorts, EventLegRunSpec, EventLegSpec, EventLegStage, EventLegStreamContext, EventLegStreamDecorator, EventLegTap, EventLegToolApprovalFrame, } from './eventLeg.js';
20
+ export type { ApprovalFrameContext, EventLeg, EventLegBindCause, EventLegBoundInfo, EventLegElicitationFrame, EventLegFrameInfo, EventLegHitlEnvelope, EventLegHitlPorts, EventLegIdleTriagePorts, EventLegKind, EventLegLiveSpec, EventLegOwnerPorts, EventLegPortName, EventLegPorts, EventLegQuestionFrame, EventLegRefusal, EventLegReport, EventLegRow, EventLegRunPorts, EventLegRunSpec, EventLegSpec, EventLegStage, EventLegTap, EventLegToolApprovalFrame, } from './eventLeg.js';
21
21
  export { frameBindingOf, inheritFrameBinding } from './frameBinding.js';
22
22
  export { __resetSubagentContentStoreConfigForTests, __resetSubagentOwnerLedgerForTests, clearSubagentContent, coerceOutput, configureSubagentContentStore, getBgParentRun, getBgParentRunOwner, getBgTerminalFacts, getSubagentContentSnapshot, isOwnEngineRun, parentToolCallIdOf, planSubagentViewSlots, publishSubagentContentEvent, pushSubagentLocalEcho, recordBgParentRun, recordOwnEngineRun, recordSubagentOwner, recordSubagentOwnerFromProgress, registerSubagentAlias, settleSubagentContent, SUBAGENT_CONTENT_STORE_DEFAULTS, subagentContentStoreConfig, subagentOwnerSessionConflicts, subscribeSubagentContent, subagentContentEventOf, } from './subagentContentStore.js';
23
23
  export type { BgTerminalFacts, SubagentContentEvent, SubagentContentItem, SubagentContentSnapshot, SubagentContentStoreConfig, SubagentOwnerRecord, SubagentOwnerSessionConflict, SubagentViewSlot, } from './subagentContentStore.js';
@@ -31,6 +31,7 @@ export type { AskQuestion, AskQuestionOption, QuestionAnswer, QuestionFrame, } f
31
31
  export * from './engineInlineTaskStats.js';
32
32
  export * from './printToolResultFrame.js';
33
33
  export * from './printModelStatus.js';
34
+ export * from './compactionStatus.js';
34
35
  export { __resetEngineCapsCacheForTests, engineCapNestedValue, engineCapState, engineCapString, engineCapsGeneration, engineCapsLandingOf, engineCapsSettled, engineCapTrue, engineCapValue, invalidateEngineCaps, invalidateEngineCapsAndReprobe, kickEngineCapsProbe, rotateEngineCapsProbe, } from './engineCapsCache.js';
35
36
  export { onEngineCapsChange } from './engineCapsChange.js';
36
37
  export type { EngineCapState, EngineCapsChange, EngineCapsLanding, EngineCapsProbeRotation, EngineCapsReprobe, EngineCapValueState, } from './engineCapsCache.js';
@@ -112,8 +113,9 @@ export * from './engineWireSdk.js';
112
113
  export * from './classifierVerdictWire.js';
113
114
  export { stripSystemReminderBlocks, unwrapSystemReminder } from './systemReminderTag.js';
114
115
  export { findSystemReminderOpenTag, type SystemReminderOpenTagSpan } from './systemReminderTag.js';
115
- export { ACTIVE_RUN_BUSY_ERROR_CODE, APPROVAL_EXPIRED, ASK_GONE, asModelFallbackReason, CAPABILITY_IMAGE_INDEX_REQUIRED, CAPABILITY_OPERATOR_PRINCIPALS_REQUIRED, CAPABILITY_SELF_ORCHESTRATION_REQUIRED, CONFIG_AGENT_UNKNOWN_TOOL, CONFIG_DELEGATION_ENTRY_CAPS, CONFIG_IMAGE_INVALID, CONFIG_LEGACY_TOOL_NAME, CONFIG_LIMIT_INVALID, CONFIG_LIMIT_UNKNOWN_KEY, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_OUTPUT_STYLE_INVALID, CONFIG_STRATEGY_FIND_LIMIT_INVALID, CONFIG_STRATEGY_MAX_SIZE_INVALID, CONFLICT_IDEMPOTENCY_PAYLOAD_MISMATCH, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_WORKFLOW_HOST_UNKNOWN, DECIDE_WORKFLOW_LANE_CODES, DECIDE_WORKFLOW_PARK_FORKED, DECIDE_WORKFLOW_PARKS_UNREADABLE, DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED, DELEGATION_CAP_CODES, DELEGATION_CONCURRENCY_CAP, DELEGATION_SESSION_CAP, delegationCapDispositionOf, DRAINING_ERROR_CODE, ENGINE_STOP_REASONS, engineStopReasonToCc, ENV_LIFETIME_EXPIRED, FLEET_LEASE_UNAVAILABLE, GATE_PARKED_ERROR_CODE, idempotencyPayloadMismatchContent, imageInvalidFailureNoteOf, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDelegationCapCode, isIdempotencyPayloadMismatchCode, isInterruptedToolEndCode, isLimitsExceededCode, isRewindFamilyCode, isRulesRefusalCode, isStatusDerivedCoarseCode, isWorkflowParkRefusalCode, LIMITS_MAX_COST_EXCEEDED, LIMITS_MAX_TOKENS_EXCEEDED, LIMITS_MAX_TURNS_EXCEEDED, LIMITS_MAX_WALLTIME_EXCEEDED, MCP_SERVER_REVOKED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, operatorGateRefusalContent, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, REQUEST_AUTONOMY_LANE_REFUSED, RESUME_AT_ERROR_CODE_PREFIX, RESUME_CONTEXT_UNAVAILABLE, RESUME_ENV_FAILED, RESUME_PLACEMENT_MISMATCH, RESUME_POLICY_FOLD_CODE, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, RESUME_TOOL_CONTRACT_MISMATCH, RESUME_TOOL_UNAVAILABLE, RESUME_USAGE_WINDOW_EXHAUSTED, REWIND_ERROR_CODE_PREFIXES, RUN_DEATH_VERDICT_CODES, RUN_ORPHANED, RUN_STALLED, runDeathVerdictNoteOf, SCENARIO_ASSIGNMENT_UNKNOWN_ERROR_CODE, SCENARIO_NOT_ALLOWED_ERROR_CODE, STATUS_DERIVED_COARSE_CODES, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, USER_ATTACHMENT_INVALID_ERROR_CODE, USER_INVOKED_SKILL_UNKNOWN_ERROR_CODE, WORKFLOW_PARK_REFUSAL_CODES, } from './engineErrorCodes.js';
116
+ export { ACTIVE_RUN_BUSY_ERROR_CODE, APPROVAL_EXPIRED, ASK_GONE, asModelFallbackReason, CAPABILITY_IMAGE_INDEX_REQUIRED, CAPABILITY_K8S_LANE_REQUIRED, CAPABILITY_OPERATOR_PRINCIPALS_REQUIRED, CAPABILITY_SELF_ORCHESTRATION_REQUIRED, CONFIG_AGENT_UNKNOWN_TOOL, CONFIG_DELEGATION_ENTRY_CAPS, CONFIG_IMAGE_INVALID, CONFIG_LEGACY_TOOL_NAME, CONFIG_LIMIT_INVALID, CONFIG_LIMIT_UNKNOWN_KEY, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_OUTPUT_STYLE_INVALID, CONFIG_STRATEGY_FIND_LIMIT_INVALID, CONFIG_STRATEGY_MAX_SIZE_INVALID, CONFIG_TOOL_FACE_CONTROL, CONFLICT_IDEMPOTENCY_PAYLOAD_MISMATCH, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_WORKFLOW_HOST_UNKNOWN, DECIDE_WORKFLOW_LANE_CODES, DECIDE_WORKFLOW_PARK_FORKED, DECIDE_WORKFLOW_PARKS_UNREADABLE, DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED, DELEGATION_CAP_CODES, DELEGATION_CONCURRENCY_CAP, DELEGATION_SESSION_CAP, delegationCapDispositionOf, DRAINING_ERROR_CODE, ENGINE_STOP_REASONS, engineStopReasonToCc, ENV_LIFETIME_EXPIRED, FLEET_LEASE_UNAVAILABLE, GATE_PARKED_ERROR_CODE, idempotencyPayloadMismatchContent, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDelegationCapCode, isIdempotencyPayloadMismatchCode, isInterruptedToolEndCode, isLimitsExceededCode, isRewindFamilyCode, isRulesRefusalCode, isStatusDerivedCoarseCode, isWorkflowParkRefusalCode, LIMITS_MAX_COST_EXCEEDED, LIMITS_MAX_TOKENS_EXCEEDED, LIMITS_MAX_TURNS_EXCEEDED, LIMITS_MAX_WALLTIME_EXCEEDED, MCP_SERVER_REVOKED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, operatorGateRefusalContent, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, PROMPT_ASSEMBLED_ROLE_REFUSED, REQUEST_AUTONOMY_LANE_REFUSED, RESUME_AT_ERROR_CODE_PREFIX, RESUME_CONTEXT_UNAVAILABLE, RESUME_ENV_FAILED, RESUME_PLACEMENT_MISMATCH, RESUME_POLICY_FOLD_CODE, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, RESUME_TOOL_CONTRACT_MISMATCH, RESUME_TOOL_UNAVAILABLE, RESUME_USAGE_WINDOW_EXHAUSTED, REWIND_ERROR_CODE_PREFIXES, RUN_DEATH_VERDICT_CODES, RUN_ORPHANED, RUN_STALLED, runDeathVerdictNoteOf, SCENARIO_ASSIGNMENT_UNKNOWN_ERROR_CODE, SCENARIO_NOT_ALLOWED_ERROR_CODE, STATUS_DERIVED_COARSE_CODES, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, USER_ATTACHMENT_INVALID_ERROR_CODE, USER_INVOKED_SKILL_UNKNOWN_ERROR_CODE, WORKFLOW_PARK_REFUSAL_CODES, } from './engineErrorCodes.js';
116
117
  export type { DelegationCapDisposition, ModelFallbackReason, OperatorGateRefusal, RunDeathVerdictCode, } from './engineErrorCodes.js';
118
+ export { imageInvalidFailureNoteOf, prepareRefusalCodeOf, prepareRefusalNoteOf, type PrepareRefusalCode, type PrepareRefusalNoteFacts } from './prepareRefusal.js';
117
119
  export * from './agentsWireCaps.js';
118
120
  export { engineToolDirectoryOf } from './engineToolDirectory.js';
119
121
  export type { EngineToolDirectory, EngineToolDirectorySource } from './engineToolDirectory.js';
@@ -271,6 +273,10 @@ export { ruleToolNameVerdictOf } from './protocolSegment.js';
271
273
  export type { RuleToolNameReading } from './protocolSegment.js';
272
274
  export * from './hitl/askGateWire.js';
273
275
  export * from './hitl/planReviewWire.js';
276
+ export { decisionInFlightOf, decisionReadMark } from './hitl/decisionLedger.js';
277
+ export type { DecisionIdentity } from './hitl/decisionLedger.js';
278
+ export { HITL_DECISION_FAMILIES, HITL_DECISION_NOT_APPLIED_CAUSES, HITL_DECISION_NOT_SENT_CAUSES, HITL_DECISION_UNCONFIRMED_CAUSES, sendHitlDecision, } from './hitl/decisionSend.js';
279
+ export type { HitlApprovalDecisionRequest, HitlAskDecisionRequest, HitlDecisionApplied, HitlDecisionFamily, HitlDecisionGate, HitlDecisionNotApplied, HitlDecisionNotAppliedCause, HitlDecisionNotSent, HitlDecisionNotSentCause, HitlDecisionSendClient, HitlDecisionSendDeps, HitlDecisionSendOutcome, HitlDecisionSendRequest, HitlDecisionSettledElsewhere, HitlDecisionUnconfirmed, HitlDecisionUnconfirmedCause, HitlElicitationDecisionRequest, } from './hitl/decisionSend.js';
274
280
  export { PLAN_REVIEW_QUESTION_ID_PREFIX, REOPEN_ID_TAIL, approvalCallKey, askGateQuestionId, planReviewQuestionId, liveFrameCallKey, armedKeyFromQuestionId, } from './hitl/gateIdentity.js';
275
281
  export { _resetArmedGateRegistryForTest, _setGateArmedWaitMsForTest, clearArmedGate, gateArmedWaitMs, notePlanReviewAnswered, onGateArmed, planReviewArmedKey, registerArmedGate, registerArmedGateFor, registerArmedGateFromQuestionId, registerArmedGateFromQuestionIdFor, waitForGateArmed, wasGateArmed, wasGateArmedFor, } from './hitl/armedGateRegistry.js';
276
282
  export * from './hitl/parkOwnership.js';
@@ -312,6 +318,8 @@ export type { EngineEnvView, EngineEnvGroupDecl, EngineEnvSourcingInput, EngineE
312
318
  export * from './compensations.js';
313
319
  export * from './request/printNotification.js';
314
320
  export * from './seatContract.js';
321
+ export { mcpToolTogglesToExcludeTools } from './mcpToolToggles.js';
322
+ export type { McpToolToggleKey, McpMountedServers } from './mcpToolToggles.js';
315
323
  export { devicesFaceOf, devicesWritesAllowed, devicesFaceDetail } from './devicesFace.js';
316
324
  export type { DevicesFace, DevicesFaceInput, DevicesFaceUnavailableWhy } from './devicesFace.js';
317
325
  export { cloudLoginFailureOf, cloudLoginFailureText, engineTargetRefusalText, seatMcpReadingOf, watchEngineTarget } from './engineTargetSeat.js';
@@ -355,3 +363,11 @@ export { cutForDisplay, noticePresentationFacts, NOTICE_SEAT_CLASS, noticeSeatCl
355
363
  export type { CutForDisplayOptions, CutForDisplayResult, NoticePresentationAudience, NoticeOutlet, NoticeOccurrence, NoticeSeatClass, NoticeDeployment, NoticePresentationFacts, OutletKind, OutletReachability, OutletReachabilityContext, OutletRenderingPlan, NoticePrintCarrier, NoticePrintLineInput, NoticePrintLineResult, } from './noticePresentation.js';
356
364
  export { printPermissionOutcomeOf, PRINT_PERMISSION_OUTCOME_FORMS } from './printPermissionOutcome.js';
357
365
  export type { PrintPermissionOutcome, PrintPermissionOutcomeForm } from './printPermissionOutcome.js';
366
+ export { settingsCredentialKeyPaths, isCredentialEnvName, isCredentialConfigKey, credentialNameWords } from './settingsCredentialKeyPaths.js';
367
+ export type { CredentialKeyFinding } from './settingsCredentialKeyPaths.js';
368
+ export { injectionLaneNotice, INJECTION_SOURCES } from './injectionLaneNotice.js';
369
+ export type { InjectionSource } from './injectionLaneNotice.js';
370
+ export { ruleRefusalSentence } from './ruleRefusalSentence.js';
371
+ export type { RuleRefusalRow } from './ruleRefusalSentence.js';
372
+ export { parseToolsFlagNames } from './toolsFlagNames.js';
373
+ export type { ToolsFlagNames } from './toolsFlagNames.js';
package/dist/index.js CHANGED
@@ -24,6 +24,7 @@ export { _resetLiveQuestionStore, hasLocalQuestionResponder, hasQuestionOverlay,
24
24
  export * from './engineInlineTaskStats.js';
25
25
  export * from './printToolResultFrame.js';
26
26
  export * from './printModelStatus.js';
27
+ export * from './compactionStatus.js';
27
28
  export { __resetEngineCapsCacheForTests, engineCapNestedValue, engineCapState, engineCapString, engineCapsGeneration, engineCapsLandingOf, engineCapsSettled, engineCapTrue, engineCapValue, invalidateEngineCaps, invalidateEngineCapsAndReprobe, kickEngineCapsProbe, rotateEngineCapsProbe, } from './engineCapsCache.js';
28
29
  export { onEngineCapsChange } from './engineCapsChange.js';
29
30
  export * from './sqlEngineCapability.js';
@@ -95,7 +96,8 @@ export * from './engineWireSdk.js';
95
96
  export * from './classifierVerdictWire.js';
96
97
  export { stripSystemReminderBlocks, unwrapSystemReminder } from './systemReminderTag.js';
97
98
  export { findSystemReminderOpenTag } from './systemReminderTag.js';
98
- export { ACTIVE_RUN_BUSY_ERROR_CODE, APPROVAL_EXPIRED, ASK_GONE, asModelFallbackReason, CAPABILITY_IMAGE_INDEX_REQUIRED, CAPABILITY_OPERATOR_PRINCIPALS_REQUIRED, CAPABILITY_SELF_ORCHESTRATION_REQUIRED, CONFIG_AGENT_UNKNOWN_TOOL, CONFIG_DELEGATION_ENTRY_CAPS, CONFIG_IMAGE_INVALID, CONFIG_LEGACY_TOOL_NAME, CONFIG_LIMIT_INVALID, CONFIG_LIMIT_UNKNOWN_KEY, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_OUTPUT_STYLE_INVALID, CONFIG_STRATEGY_FIND_LIMIT_INVALID, CONFIG_STRATEGY_MAX_SIZE_INVALID, CONFLICT_IDEMPOTENCY_PAYLOAD_MISMATCH, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_WORKFLOW_HOST_UNKNOWN, DECIDE_WORKFLOW_LANE_CODES, DECIDE_WORKFLOW_PARK_FORKED, DECIDE_WORKFLOW_PARKS_UNREADABLE, DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED, DELEGATION_CAP_CODES, DELEGATION_CONCURRENCY_CAP, DELEGATION_SESSION_CAP, delegationCapDispositionOf, DRAINING_ERROR_CODE, ENGINE_STOP_REASONS, engineStopReasonToCc, ENV_LIFETIME_EXPIRED, FLEET_LEASE_UNAVAILABLE, GATE_PARKED_ERROR_CODE, idempotencyPayloadMismatchContent, imageInvalidFailureNoteOf, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDelegationCapCode, isIdempotencyPayloadMismatchCode, isInterruptedToolEndCode, isLimitsExceededCode, isRewindFamilyCode, isRulesRefusalCode, isStatusDerivedCoarseCode, isWorkflowParkRefusalCode, LIMITS_MAX_COST_EXCEEDED, LIMITS_MAX_TOKENS_EXCEEDED, LIMITS_MAX_TURNS_EXCEEDED, LIMITS_MAX_WALLTIME_EXCEEDED, MCP_SERVER_REVOKED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, operatorGateRefusalContent, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, REQUEST_AUTONOMY_LANE_REFUSED, RESUME_AT_ERROR_CODE_PREFIX, RESUME_CONTEXT_UNAVAILABLE, RESUME_ENV_FAILED, RESUME_PLACEMENT_MISMATCH, RESUME_POLICY_FOLD_CODE, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, RESUME_TOOL_CONTRACT_MISMATCH, RESUME_TOOL_UNAVAILABLE, RESUME_USAGE_WINDOW_EXHAUSTED, REWIND_ERROR_CODE_PREFIXES, RUN_DEATH_VERDICT_CODES, RUN_ORPHANED, RUN_STALLED, runDeathVerdictNoteOf, SCENARIO_ASSIGNMENT_UNKNOWN_ERROR_CODE, SCENARIO_NOT_ALLOWED_ERROR_CODE, STATUS_DERIVED_COARSE_CODES, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, USER_ATTACHMENT_INVALID_ERROR_CODE, USER_INVOKED_SKILL_UNKNOWN_ERROR_CODE, WORKFLOW_PARK_REFUSAL_CODES, } from './engineErrorCodes.js';
99
+ export { ACTIVE_RUN_BUSY_ERROR_CODE, APPROVAL_EXPIRED, ASK_GONE, asModelFallbackReason, CAPABILITY_IMAGE_INDEX_REQUIRED, CAPABILITY_K8S_LANE_REQUIRED, CAPABILITY_OPERATOR_PRINCIPALS_REQUIRED, CAPABILITY_SELF_ORCHESTRATION_REQUIRED, CONFIG_AGENT_UNKNOWN_TOOL, CONFIG_DELEGATION_ENTRY_CAPS, CONFIG_IMAGE_INVALID, CONFIG_LEGACY_TOOL_NAME, CONFIG_LIMIT_INVALID, CONFIG_LIMIT_UNKNOWN_KEY, CONFIG_MEMORY_PROJECT_KEY_SPELLING, CONFIG_MEMORY_WRITE_SCOPE_MISMATCH, CONFIG_OUTPUT_STYLE_INVALID, CONFIG_STRATEGY_FIND_LIMIT_INVALID, CONFIG_STRATEGY_MAX_SIZE_INVALID, CONFIG_TOOL_FACE_CONTROL, CONFLICT_IDEMPOTENCY_PAYLOAD_MISMATCH, CORRUPT_SESSION_ERROR_CODE, DECIDE_CLAIM_LOST, DECIDE_GATE_MOVED, DECIDE_NOT_PARKED, DECIDE_PARK_MOVED_CODES, DECIDE_WORKFLOW_HOST_UNKNOWN, DECIDE_WORKFLOW_LANE_CODES, DECIDE_WORKFLOW_PARK_FORKED, DECIDE_WORKFLOW_PARKS_UNREADABLE, DECIDE_WORKFLOW_REMEMBER_UNSUPPORTED, DELEGATION_CAP_CODES, DELEGATION_CONCURRENCY_CAP, DELEGATION_SESSION_CAP, delegationCapDispositionOf, DRAINING_ERROR_CODE, ENGINE_STOP_REASONS, engineStopReasonToCc, ENV_LIFETIME_EXPIRED, FLEET_LEASE_UNAVAILABLE, GATE_PARKED_ERROR_CODE, idempotencyPayloadMismatchContent, isConfigRefusalCode, isCorruptSessionCode, isDecideParkMovedCode, isDelegationCapCode, isIdempotencyPayloadMismatchCode, isInterruptedToolEndCode, isLimitsExceededCode, isRewindFamilyCode, isRulesRefusalCode, isStatusDerivedCoarseCode, isWorkflowParkRefusalCode, LIMITS_MAX_COST_EXCEEDED, LIMITS_MAX_TOKENS_EXCEEDED, LIMITS_MAX_TURNS_EXCEEDED, LIMITS_MAX_WALLTIME_EXCEEDED, MCP_SERVER_REVOKED, MODEL_FALLBACK_INHERIT_NO_TIER_BINDING, operatorGateRefusalContent, OUTPUT_INVALID, PARKED_RESUME_STARTUP_FAILED, PROMPT_ASSEMBLED_ROLE_REFUSED, REQUEST_AUTONOMY_LANE_REFUSED, RESUME_AT_ERROR_CODE_PREFIX, RESUME_CONTEXT_UNAVAILABLE, RESUME_ENV_FAILED, RESUME_PLACEMENT_MISMATCH, RESUME_POLICY_FOLD_CODE, RESUME_PREFLIGHT_REJECTED, RESUME_REOPEN_CODES, RESUME_RETRY_LATER_CODES, RESUME_TOOL_CONTRACT_MISMATCH, RESUME_TOOL_UNAVAILABLE, RESUME_USAGE_WINDOW_EXHAUSTED, REWIND_ERROR_CODE_PREFIXES, RUN_DEATH_VERDICT_CODES, RUN_ORPHANED, RUN_STALLED, runDeathVerdictNoteOf, SCENARIO_ASSIGNMENT_UNKNOWN_ERROR_CODE, SCENARIO_NOT_ALLOWED_ERROR_CODE, STATUS_DERIVED_COARSE_CODES, STREAM_MAX_DURATION, TOOL_END_INTERRUPTED_NEVER_STARTED, TOOL_END_INTERRUPTED_OUTCOME_UNKNOWN, USAGE_WINDOW_EXHAUSTED, USER_ATTACHMENT_INVALID_ERROR_CODE, USER_INVOKED_SKILL_UNKNOWN_ERROR_CODE, WORKFLOW_PARK_REFUSAL_CODES, } from './engineErrorCodes.js';
100
+ export { imageInvalidFailureNoteOf, prepareRefusalCodeOf, prepareRefusalNoteOf } from './prepareRefusal.js';
99
101
  export * from './agentsWireCaps.js';
100
102
  export { engineToolDirectoryOf } from './engineToolDirectory.js';
101
103
  export * from './attachmentsWireCaps.js';
@@ -229,6 +231,8 @@ export * from './coreValuePorts.js';
229
231
  export { ruleToolNameVerdictOf } from './protocolSegment.js';
230
232
  export * from './hitl/askGateWire.js';
231
233
  export * from './hitl/planReviewWire.js';
234
+ export { decisionInFlightOf, decisionReadMark } from './hitl/decisionLedger.js';
235
+ export { HITL_DECISION_FAMILIES, HITL_DECISION_NOT_APPLIED_CAUSES, HITL_DECISION_NOT_SENT_CAUSES, HITL_DECISION_UNCONFIRMED_CAUSES, sendHitlDecision, } from './hitl/decisionSend.js';
232
236
  export { PLAN_REVIEW_QUESTION_ID_PREFIX, REOPEN_ID_TAIL, approvalCallKey, askGateQuestionId, planReviewQuestionId, liveFrameCallKey, armedKeyFromQuestionId, } from './hitl/gateIdentity.js';
233
237
  export { _resetArmedGateRegistryForTest, _setGateArmedWaitMsForTest, clearArmedGate, gateArmedWaitMs, notePlanReviewAnswered, onGateArmed, planReviewArmedKey, registerArmedGate, registerArmedGateFor, registerArmedGateFromQuestionId, registerArmedGateFromQuestionIdFor, waitForGateArmed, wasGateArmed, wasGateArmedFor, } from './hitl/armedGateRegistry.js';
234
238
  export * from './hitl/parkOwnership.js';
@@ -264,6 +268,7 @@ export { resolveEngineEnvSourcing, engineEnvView } from './engineEnvSourcing.js'
264
268
  export * from './compensations.js';
265
269
  export * from './request/printNotification.js';
266
270
  export * from './seatContract.js';
271
+ export { mcpToolTogglesToExcludeTools } from './mcpToolToggles.js';
267
272
  export { devicesFaceOf, devicesWritesAllowed, devicesFaceDetail } from './devicesFace.js';
268
273
  export { cloudLoginFailureOf, cloudLoginFailureText, engineTargetRefusalText, seatMcpReadingOf, watchEngineTarget } from './engineTargetSeat.js';
269
274
  export { keyEnvNameForEntry, onboardBaseUrlProblem, onboardRefusalText, onboardWritePlan, onboardWriteVerdict, poolEntryNameOf, probeModelEndpoint, } from './model/onboardJudgement.js';
@@ -294,3 +299,7 @@ export { credentialProvenance, CREDENTIAL_ATTACH_WORDS } from './credentialProve
294
299
  export { canonicalSessionIdOf, isSessionIdPathSegment, sessionIdRefusalOf } from './sessionIdSegment.js';
295
300
  export { cutForDisplay, noticePresentationFacts, NOTICE_SEAT_CLASS, noticeSeatClassOf, OUTLET_KINDS, outletReachable, planOutletRendering, NOTICE_FULL_TEXT_CAP, noticePrintLine, } from './noticePresentation.js';
296
301
  export { printPermissionOutcomeOf, PRINT_PERMISSION_OUTCOME_FORMS } from './printPermissionOutcome.js';
302
+ export { settingsCredentialKeyPaths, isCredentialEnvName, isCredentialConfigKey, credentialNameWords } from './settingsCredentialKeyPaths.js';
303
+ export { injectionLaneNotice, INJECTION_SOURCES } from './injectionLaneNotice.js';
304
+ export { ruleRefusalSentence } from './ruleRefusalSentence.js';
305
+ export { parseToolsFlagNames } from './toolsFlagNames.js';
@@ -14,6 +14,7 @@ export type InheritEnvOwnCredentialsReading = {
14
14
  readonly kind: 'unobserved';
15
15
  };
16
16
  export declare function observedInheritEnvOwnCredentialsWithheld(baseUrl?: string | undefined): InheritEnvOwnCredentialsReading;
17
+ export declare function observedInheritEnvOwnCredentialValuesWithheld(baseUrl?: string | undefined): InheritEnvOwnCredentialsReading;
17
18
  export type InheritEnvOmitReason = 'lane' | 'project_context' | 'capability_absent' | 'capability_declined' | 'capability_unreadable' | 'identity_unverified';
18
19
  export type InheritEnvIntent = {
19
20
  readonly send: 'all';
@@ -3,6 +3,7 @@ import { isUiLanguage } from './env/uiLanguage.js';
3
3
  import { engineWireTarget } from './engineWireTarget.js';
4
4
  import { msg, renderMessage } from './i18n/translate.js';
5
5
  const OWN_CREDENTIALS_WITHHELD_KEY = 'inherit_env.own_credentials_withheld';
6
+ const OWN_CREDENTIAL_VALUES_WITHHELD_KEY = 'inherit_env.own_credential_values_withheld';
6
7
  const CONFIRMED = Object.freeze({ kind: 'confirmed' });
7
8
  const ABSENT = Object.freeze({ kind: 'absent' });
8
9
  const UNREADABLE = Object.freeze({ kind: 'unreadable' });
@@ -25,9 +26,9 @@ function shapeOf(v) {
25
26
  return 'other';
26
27
  }
27
28
  }
28
- export function observedInheritEnvOwnCredentialsWithheld(baseUrl = engineWireTarget()?.baseUrl) {
29
+ function inheritEnvWordReading(baseUrl, key) {
29
30
  try {
30
- const slot = engineCapValue(typeof baseUrl === 'string' ? baseUrl : undefined, OWN_CREDENTIALS_WITHHELD_KEY);
31
+ const slot = engineCapValue(typeof baseUrl === 'string' ? baseUrl : undefined, key);
31
32
  switch (slot.kind) {
32
33
  case 'unobserved':
33
34
  return UNOBSERVED;
@@ -45,6 +46,12 @@ export function observedInheritEnvOwnCredentialsWithheld(baseUrl = engineWireTar
45
46
  return UNOBSERVED;
46
47
  }
47
48
  }
49
+ export function observedInheritEnvOwnCredentialsWithheld(baseUrl = engineWireTarget()?.baseUrl) {
50
+ return inheritEnvWordReading(baseUrl, OWN_CREDENTIALS_WITHHELD_KEY);
51
+ }
52
+ export function observedInheritEnvOwnCredentialValuesWithheld(baseUrl = engineWireTarget()?.baseUrl) {
53
+ return inheritEnvWordReading(baseUrl, OWN_CREDENTIAL_VALUES_WITHHELD_KEY);
54
+ }
48
55
  const ALL = Object.freeze({ send: 'all' });
49
56
  const omit = (reason) => Object.freeze({ send: 'omit', reason });
50
57
  function fieldOf(input, key) {
@@ -1,6 +1,6 @@
1
1
  import { msg, renderMessage } from './i18n/translate.js';
2
2
  import { INHERIT_ENV_WORDS, isInheritEnvWord } from './request/taskRequest.js';
3
- import { settingsPermissionBucketRefusalFromError } from './wireRefusalCopy.js';
3
+ import { fieldLimitRefusalFromError } from './wireRefusalCopy.js';
4
4
  import { engineVersionTier } from './supportFloor.js';
5
5
  import { guardedRead, readOwnDataValue } from './ownKey.js';
6
6
  const EMPTY_DECLARATION = Object.freeze({ field: Object.freeze({}) });
@@ -50,7 +50,7 @@ export function inheritEnvRefusalFromError(err, sentRequest) {
50
50
  return null;
51
51
  if (readGuarded(err, 'errorCode') !== FIELD_INVALID)
52
52
  return null;
53
- if (settingsPermissionBucketRefusalFromError(err) !== null)
53
+ if (fieldLimitRefusalFromError(err) !== null)
54
54
  return null;
55
55
  return Object.freeze({ code: FIELD_INVALID });
56
56
  }
@@ -0,0 +1,5 @@
1
+ import type { UiLanguage } from './env/uiLanguage.js';
2
+ import type { ExecutionLaneReading } from './executionLaneCapability.js';
3
+ export declare const INJECTION_SOURCES: readonly ["stdio_mcp", "credentialed_mcp", "task_hooks"];
4
+ export type InjectionSource = (typeof INJECTION_SOURCES)[number];
5
+ export declare function injectionLaneNotice(lane: ExecutionLaneReading, sources: readonly InjectionSource[], lang?: UiLanguage): string | undefined;
@@ -0,0 +1,46 @@
1
+ import { capForDisplay } from './fleetTaskDesc.js';
2
+ import { msg, renderMessage } from './i18n/translate.js';
3
+ export const INJECTION_SOURCES = Object.freeze(['stdio_mcp', 'credentialed_mcp', 'task_hooks']);
4
+ const LANE_WORD_MAX = 40;
5
+ const ITEM_KEYS = Object.freeze({
6
+ stdio_mcp: 'notice.injectionLane.item.stdioMcp',
7
+ credentialed_mcp: 'notice.injectionLane.item.credentialedMcp',
8
+ task_hooks: 'notice.injectionLane.item.taskHooks',
9
+ });
10
+ function remoteLaneWordOf(lane) {
11
+ try {
12
+ if (typeof lane !== 'object' || lane === null || lane.kind !== 'present')
13
+ return undefined;
14
+ const view = lane.view;
15
+ if (typeof view !== 'object' || view === null)
16
+ return undefined;
17
+ if (view.toolsOnThisHost !== false)
18
+ return undefined;
19
+ if (view.isolatedAbsent === 'no_hands' || view.provider === 'in-process')
20
+ return undefined;
21
+ if (typeof view.provider !== 'string' || view.provider === '')
22
+ return undefined;
23
+ return capForDisplay(view.provider, LANE_WORD_MAX);
24
+ }
25
+ catch {
26
+ return undefined;
27
+ }
28
+ }
29
+ export function injectionLaneNotice(lane, sources, lang) {
30
+ const word = remoteLaneWordOf(lane);
31
+ if (word === undefined)
32
+ return undefined;
33
+ let present;
34
+ try {
35
+ present = new Set(Array.isArray(sources) ? sources : []);
36
+ }
37
+ catch {
38
+ return undefined;
39
+ }
40
+ const items = INJECTION_SOURCES.filter((s) => present.has(s));
41
+ if (items.length === 0)
42
+ return undefined;
43
+ const separator = renderMessage(msg('notice.injectionLane.itemSeparator'), lang);
44
+ const list = items.map((s) => renderMessage(msg(ITEM_KEYS[s]), lang)).join(separator);
45
+ return renderMessage(msg('notice.injectionLane.sentence', { lane: word, items: list }), lang);
46
+ }
package/dist/mcpPanel.js CHANGED
@@ -120,6 +120,8 @@ export function mcpPanelLastLegDetail(view, opts) {
120
120
  }
121
121
  const _mcpPanelShapePin = (p) => p;
122
122
  void _mcpPanelShapePin;
123
+ const _mcpPanelRefusalPin = (p) => p;
124
+ void _mcpPanelRefusalPin;
123
125
  export function mcpEngineLegPresence(view) {
124
126
  if (view === undefined)
125
127
  return 'unknown';
@@ -187,14 +187,14 @@ export function mcpReconnectOutcomeDetail(view) {
187
187
  const name = capForDisplay(view.server, RECONNECT_WORD_MAX);
188
188
  switch (view.outcome) {
189
189
  case 'accepted':
190
- return `MCP server ${name} was re-dialed: ${view.toolCount} tool${view.toolCount === 1 ? '' : 's'} mounted (${view.added.length} added, ${view.removed.length} removed)`;
190
+ return `MCP server ${name} was re-dialed: ${view.toolCount} tool${view.toolCount === 1 ? '' : 's'} mounted for this run (${view.added.length} added, ${view.removed.length} removed)`;
191
191
  case 'refused': {
192
192
  const why = view.reason !== undefined ? ` — ${view.reason}` : '';
193
193
  if (view.toolNames === undefined) {
194
194
  return `MCP server ${name} was NOT re-dialed; its connection and tools were left untouched${why}`;
195
195
  }
196
196
  if (view.toolNames.length === 0) {
197
- return `MCP server ${name} was NOT re-dialed and its tools were withdrawn from the model until a later re-dial succeeds${why}`;
197
+ return `MCP server ${name} was NOT re-dialed; this run's tool list has no tools from it right now (the dial failed, or this run's tool settings let none of its tools through)${why}`;
198
198
  }
199
199
  return `MCP server ${name} was NOT re-dialed; the engine reports ${view.toolNames.length} tool${view.toolNames.length === 1 ? '' : 's'} for it after this attempt${why}`;
200
200
  }
@@ -0,0 +1,6 @@
1
+ export interface McpToolToggleKey {
2
+ readonly server: string;
3
+ readonly tool: string;
4
+ }
5
+ export type McpMountedServers = readonly string[] | 'unknown';
6
+ export declare function mcpToolTogglesToExcludeTools(keys: readonly McpToolToggleKey[], mountedServers: McpMountedServers): string[];