@sema-agent/client-core 0.100.0 → 0.101.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 (335) hide show
  1. package/CHANGELOG.md +395 -0
  2. package/README.md +164 -117
  3. package/dist/adapt/arms.js +51 -16
  4. package/dist/adapt/textStream.js +7 -4
  5. package/dist/adapt/toolCards.js +9 -8
  6. package/dist/adapt.js +7 -1
  7. package/dist/adapter/activeRunSelfHeal.d.ts +24 -2
  8. package/dist/adapter/activeRunSelfHeal.js +108 -6
  9. package/dist/adapter/downstream/eventToSdkMessage.js +33 -12
  10. package/dist/adapter/downstream/terminalToSdkResult.d.ts +60 -1
  11. package/dist/adapter/downstream/terminalToSdkResult.js +209 -39
  12. package/dist/adapter/runStream.d.ts +4 -4
  13. package/dist/adapter/runStream.js +158 -43
  14. package/dist/agentsWireCaps.d.ts +2 -7
  15. package/dist/agentsWireCaps.js +1 -2
  16. package/dist/approvalDecidedByCapability.js +2 -2
  17. package/dist/approvalFrameFamilies.d.ts +33 -0
  18. package/dist/approvalFrameFamilies.js +120 -0
  19. package/dist/approvalsStreamLiveCapability.js +2 -2
  20. package/dist/attachmentsWireCaps.js +41 -13
  21. package/dist/callerCwdCapability.js +2 -2
  22. package/dist/centerWiringCapability.js +2 -2
  23. package/dist/clockReading.d.ts +2 -0
  24. package/dist/clockReading.js +4 -0
  25. package/dist/cloudConfigWireCaps.d.ts +19 -5
  26. package/dist/cloudConfigWireCaps.js +193 -56
  27. package/dist/coreValuePorts.d.ts +12 -2
  28. package/dist/coreValuePorts.js +9 -0
  29. package/dist/decideFailureNote.js +5 -3
  30. package/dist/decideReceipt.js +2 -2
  31. package/dist/deviceExecutorManagementCapability.js +2 -2
  32. package/dist/deviceFlowPolling.js +1 -1
  33. package/dist/disableSkillsWire.d.ts +1 -1
  34. package/dist/disableSkillsWire.js +4 -3
  35. package/dist/displayUntrusted.d.ts +1 -0
  36. package/dist/displayUntrusted.js +65 -8
  37. package/dist/engineCapReader.js +1 -1
  38. package/dist/engineConfigDrift.js +1 -1
  39. package/dist/engineErrorCodes.d.ts +14 -5
  40. package/dist/engineErrorCodes.js +27 -6
  41. package/dist/engineGenerationConvergence.d.ts +39 -0
  42. package/dist/engineGenerationConvergence.js +95 -0
  43. package/dist/engineGenerationPort.d.ts +61 -0
  44. package/dist/engineGenerationPort.js +144 -0
  45. package/dist/engineHealthFacts.d.ts +23 -0
  46. package/dist/engineHealthFacts.js +92 -0
  47. package/dist/engineIdentity.d.ts +4 -0
  48. package/dist/engineIdentity.js +11 -0
  49. package/dist/engineNoticeCodes.d.ts +2 -5
  50. package/dist/engineRowRef.js +3 -0
  51. package/dist/engineSessionMessages.js +2 -2
  52. package/dist/engineToolDirectory.js +2 -2
  53. package/dist/engineWireFor.d.ts +99 -0
  54. package/dist/engineWireFor.js +248 -6
  55. package/dist/engineWireTarget.d.ts +1 -0
  56. package/dist/engineWireTarget.js +8 -0
  57. package/dist/env/uiLanguage.js +1 -1
  58. package/dist/errorSupplementRoles.d.ts +3 -0
  59. package/dist/errorSupplementRoles.js +37 -0
  60. package/dist/executionLaneCapability.js +2 -2
  61. package/dist/fileHistoryCaptureCapability.js +3 -3
  62. package/dist/finalVerifyWire.d.ts +6 -3
  63. package/dist/finalVerifyWire.js +6 -23
  64. package/dist/flagInput.d.ts +4 -0
  65. package/dist/flagInput.js +24 -0
  66. package/dist/fleet/fleetLedger.js +5 -2
  67. package/dist/fleet/fleetProjection.d.ts +1 -0
  68. package/dist/fleet/fleetProjection.js +15 -2
  69. package/dist/gateVocabulary.js +3 -0
  70. package/dist/generated/engineFactTables.d.ts +7 -3
  71. package/dist/generated/engineFactTables.js +52 -0
  72. package/dist/generated/engineNoticeTables.js +12 -0
  73. package/dist/generated/settingsSchemaActiveTiers.d.ts +1 -0
  74. package/dist/generated/settingsSchemaActiveTiers.js +14 -0
  75. package/dist/generated/settingsSchemaCallerTextEcho.d.ts +1 -0
  76. package/dist/generated/settingsSchemaCallerTextEcho.js +8 -0
  77. package/dist/generated/settingsSchemaControlAndBidi.d.ts +1 -0
  78. package/dist/generated/settingsSchemaControlAndBidi.js +8 -0
  79. package/dist/generated/settingsSchemaDefaultModel.d.ts +11 -0
  80. package/dist/generated/settingsSchemaDefaultModel.js +25 -0
  81. package/dist/generated/settingsSchemaFns.d.ts +54 -0
  82. package/dist/generated/settingsSchemaFns.js +26 -1
  83. package/dist/generated/settingsSchemaMcpRequestEntry.d.ts +1 -1
  84. package/dist/generated/settingsSchemaMcpRequestEntry.js +1 -7
  85. package/dist/generated/settingsSchemaSafetyMergeSpec.d.ts +1 -0
  86. package/dist/generated/settingsSchemaSafetyMergeSpec.js +95 -0
  87. package/dist/generated/settingsSchemaSettingsSources.d.ts +1 -0
  88. package/dist/generated/settingsSchemaSettingsSources.js +58 -0
  89. package/dist/generated/settingsSchemaTables.d.ts +2 -0
  90. package/dist/generated/settingsSchemaTables.js +13 -0
  91. package/dist/generated/settingsSchemaUrlPattern.d.ts +1 -0
  92. package/dist/generated/settingsSchemaUrlPattern.js +183 -0
  93. package/dist/headlessPermissionModeWire.d.ts +18 -2
  94. package/dist/headlessPermissionModeWire.js +30 -19
  95. package/dist/hitl/allowRuleShadow.js +7 -5
  96. package/dist/hitl/approvalCardReading.d.ts +3 -0
  97. package/dist/hitl/approvalCardReading.js +17 -0
  98. package/dist/hitl/approvalCompleteParked.js +1 -1
  99. package/dist/hitl/approvalDelivery.d.ts +87 -0
  100. package/dist/hitl/approvalDelivery.js +193 -0
  101. package/dist/hitl/approvalResolution.d.ts +11 -0
  102. package/dist/hitl/approvalResolution.js +50 -11
  103. package/dist/hitl/askClassPair.d.ts +6 -0
  104. package/dist/hitl/askClassPair.js +30 -3
  105. package/dist/hitl/askParkAutoReopenBlock.d.ts +30 -0
  106. package/dist/hitl/askParkAutoReopenBlock.js +117 -0
  107. package/dist/hitl/askParkRowRouting.js +4 -1
  108. package/dist/hitl/attributionLadder.d.ts +42 -3
  109. package/dist/hitl/attributionLadder.js +79 -8
  110. package/dist/hitl/automaticAnswerVerdict.d.ts +6 -1
  111. package/dist/hitl/automaticAnswerVerdict.js +46 -11
  112. package/dist/hitl/crashConverged.js +2 -2
  113. package/dist/hitl/decisionConflict.d.ts +6 -2
  114. package/dist/hitl/decisionConflict.js +24 -9
  115. package/dist/hitl/decisionRefusal.d.ts +20 -10
  116. package/dist/hitl/decisionRefusal.js +99 -54
  117. package/dist/hitl/decisionSend.d.ts +3 -0
  118. package/dist/hitl/decisionSend.js +87 -103
  119. package/dist/hitl/frameRouter.d.ts +1 -0
  120. package/dist/hitl/frameRouter.js +9 -2
  121. package/dist/hitl/hitlBridge.d.ts +18 -6
  122. package/dist/hitl/hitlBridge.js +41 -37
  123. package/dist/hitl/livePendingAsk.js +4 -3
  124. package/dist/hitl/noAllowCause.js +1 -1
  125. package/dist/hitl/parkResolver.js +3 -2
  126. package/dist/hitl/persistedRulesWire.js +1 -0
  127. package/dist/hitl/planReviewWire.d.ts +4 -0
  128. package/dist/hitl/planReviewWire.js +59 -30
  129. package/dist/hitl/resumeRunningCard.d.ts +3 -2
  130. package/dist/hitl/resumeRunningCard.js +17 -11
  131. package/dist/hitl/sessionPolicyDeliverable.d.ts +5 -2
  132. package/dist/hitl/sessionPolicyDeliverable.js +62 -29
  133. package/dist/hitl/sessionPolicyWire.d.ts +13 -3
  134. package/dist/hitl/sessionPolicyWire.js +81 -16
  135. package/dist/hitl/standingRows.js +1 -1
  136. package/dist/hitl/toolApprovalWire.d.ts +9 -10
  137. package/dist/hitl/toolApprovalWire.js +72 -54
  138. package/dist/hookMatcherVerdict.d.ts +2 -0
  139. package/dist/hookMatcherVerdict.js +12 -0
  140. package/dist/hooksCompactTransition.d.ts +19 -0
  141. package/dist/hooksCompactTransition.js +41 -0
  142. package/dist/hooksWireCaps.d.ts +1 -1
  143. package/dist/hooksWireCaps.js +202 -203
  144. package/dist/host.d.ts +1 -14
  145. package/dist/host.js +0 -8
  146. package/dist/hostCallbackGuard.d.ts +1 -0
  147. package/dist/hostCallbackGuard.js +1 -1
  148. package/dist/hostSettingsSource.d.ts +172 -0
  149. package/dist/hostSettingsSource.js +675 -0
  150. package/dist/hostTurnSettings.d.ts +73 -17
  151. package/dist/hostTurnSettings.js +594 -97
  152. package/dist/httpHookPolicy.d.ts +37 -0
  153. package/dist/httpHookPolicy.js +176 -0
  154. package/dist/humanTurn.d.ts +2 -1
  155. package/dist/humanTurn.js +37 -7
  156. package/dist/humanTurnRead.js +4 -3
  157. package/dist/humanTurnSentences.d.ts +10 -0
  158. package/dist/humanTurnSentences.js +74 -0
  159. package/dist/i18n/messages.en.d.ts +184 -2
  160. package/dist/i18n/messages.en.js +187 -5
  161. package/dist/i18n/messages.zh.js +197 -5
  162. package/dist/i18n/translate.js +3 -3
  163. package/dist/index.d.ts +69 -15
  164. package/dist/index.js +45 -13
  165. package/dist/inheritEnvCapability.d.ts +3 -1
  166. package/dist/inheritEnvCapability.js +31 -17
  167. package/dist/inheritEnvWire.d.ts +2 -1
  168. package/dist/inheritEnvWire.js +11 -5
  169. package/dist/interactiveToolsWire.d.ts +4 -2
  170. package/dist/interactiveToolsWire.js +5 -5
  171. package/dist/jsonFaithful.d.ts +20 -0
  172. package/dist/jsonFaithful.js +152 -0
  173. package/dist/limitsWire.d.ts +7 -2
  174. package/dist/limitsWire.js +19 -13
  175. package/dist/liveInitToolFace.d.ts +6 -1
  176. package/dist/liveInitToolFace.js +5 -3
  177. package/dist/liveModelCatalog.d.ts +22 -0
  178. package/dist/liveModelCatalog.js +132 -18
  179. package/dist/mcpPanel.js +1 -1
  180. package/dist/mcpProbeCapability.js +2 -2
  181. package/dist/mcpStatusSupersetKeys.d.ts +24 -0
  182. package/dist/mcpStatusSupersetKeys.js +45 -0
  183. package/dist/mcpToolToggles.js +2 -1
  184. package/dist/mcpWireCaps.d.ts +39 -1
  185. package/dist/mcpWireCaps.js +254 -50
  186. package/dist/memoryComplianceCapability.js +2 -2
  187. package/dist/memoryOriginCapability.js +2 -2
  188. package/dist/model/catalogDefault.d.ts +24 -0
  189. package/dist/model/catalogDefault.js +4 -0
  190. package/dist/model/liveCatalogShape.js +5 -4
  191. package/dist/model/modelsPolicy.js +4 -3
  192. package/dist/model/onboardJudgement.d.ts +1 -0
  193. package/dist/model/onboardJudgement.js +1 -1
  194. package/dist/model/subagentModelWord.js +2 -2
  195. package/dist/modelCapabilityProbe.js +6 -6
  196. package/dist/modelIdentityResolvability.d.ts +10 -1
  197. package/dist/modelIdentityResolvability.js +62 -39
  198. package/dist/modsKernelIdentity.d.ts +10 -0
  199. package/dist/modsKernelIdentity.js +103 -0
  200. package/dist/modsKernelTransit.d.ts +8 -0
  201. package/dist/modsKernelTransit.js +6 -0
  202. package/dist/notifications.d.ts +30 -12
  203. package/dist/notifications.js +241 -53
  204. package/dist/outputStyleSeatCapability.js +2 -2
  205. package/dist/ownKey.d.ts +11 -0
  206. package/dist/ownKey.js +164 -3
  207. package/dist/panelReduce.js +1 -1
  208. package/dist/peerFrames.d.ts +1 -1
  209. package/dist/peerFrames.js +6 -2
  210. package/dist/peerLaneCapability.js +2 -2
  211. package/dist/permissionModesCapability.js +4 -4
  212. package/dist/permissionRuleIssue.js +2 -0
  213. package/dist/permissionRulesWriteCapability.js +2 -2
  214. package/dist/permissionsAllowGrantCapability.js +2 -2
  215. package/dist/permissionsDeclaration.d.ts +43 -4
  216. package/dist/permissionsDeclaration.js +102 -35
  217. package/dist/pluginHooksWire.d.ts +20 -4
  218. package/dist/pluginHooksWire.js +92 -53
  219. package/dist/prepareRefusal.d.ts +3 -2
  220. package/dist/prepareRefusal.js +27 -9
  221. package/dist/printInitToolFace.js +2 -2
  222. package/dist/printModelStatus.js +1 -1
  223. package/dist/projectMemory.d.ts +32 -0
  224. package/dist/projectMemory.js +70 -0
  225. package/dist/promptBlockedCopy.d.ts +2 -1
  226. package/dist/promptBlockedCopy.js +2 -1
  227. package/dist/promptDelivery.d.ts +23 -3
  228. package/dist/promptDelivery.js +169 -30
  229. package/dist/providerRejection.d.ts +19 -1
  230. package/dist/providerRejection.js +75 -4
  231. package/dist/queuedDelivery.d.ts +48 -0
  232. package/dist/queuedDelivery.js +233 -0
  233. package/dist/reattachWindow.d.ts +94 -0
  234. package/dist/reattachWindow.js +127 -0
  235. package/dist/request/printNotification.d.ts +1 -1
  236. package/dist/request/printNotification.js +5 -1
  237. package/dist/request/submissionIdentity.d.ts +37 -0
  238. package/dist/request/submissionIdentity.js +65 -0
  239. package/dist/request/taskRequest.d.ts +12 -4
  240. package/dist/request/taskRequest.js +221 -152
  241. package/dist/resultFrameKeys.d.ts +1 -0
  242. package/dist/resultFrameKeys.js +4 -1
  243. package/dist/retryStatus.d.ts +8 -0
  244. package/dist/retryStatus.js +57 -9
  245. package/dist/rewindArchiveCapability.js +2 -2
  246. package/dist/rewindEngineAction.d.ts +2 -0
  247. package/dist/rewindEngineAction.js +23 -1
  248. package/dist/rowKind.d.ts +36 -0
  249. package/dist/rowKind.js +97 -0
  250. package/dist/ruleCompileVerdict.d.ts +18 -0
  251. package/dist/ruleCompileVerdict.js +67 -2
  252. package/dist/ruleReadings.d.ts +58 -0
  253. package/dist/ruleReadings.js +132 -0
  254. package/dist/ruleRefusalSentence.d.ts +4 -0
  255. package/dist/ruleRefusalSentence.js +9 -3
  256. package/dist/runCancelContext.d.ts +0 -1
  257. package/dist/runCancelContext.js +1 -2
  258. package/dist/runTerminal.d.ts +5 -0
  259. package/dist/runTerminal.js +52 -17
  260. package/dist/sandboxWire.d.ts +1 -1
  261. package/dist/sandboxWire.js +4 -6
  262. package/dist/scenarioRefusal.js +1 -1
  263. package/dist/scenarioSkills.d.ts +20 -0
  264. package/dist/scenarioSkills.js +72 -0
  265. package/dist/scenarioWire.d.ts +5 -2
  266. package/dist/scenarioWire.js +9 -9
  267. package/dist/sealedKeyCapability.js +2 -2
  268. package/dist/seam.d.ts +2 -0
  269. package/dist/seam.js +2 -2
  270. package/dist/seatContract.d.ts +46 -1
  271. package/dist/seatContract.js +49 -19
  272. package/dist/selfOrchestrationDenial.js +1 -1
  273. package/dist/sessionPolicyCapability.js +2 -2
  274. package/dist/sessionRulesChildrenReadLive.d.ts +6 -0
  275. package/dist/sessionRulesChildrenReadLive.js +5 -0
  276. package/dist/sessionRulesNamespaceFormsCapability.d.ts +12 -0
  277. package/dist/sessionRulesNamespaceFormsCapability.js +29 -0
  278. package/dist/sessionSyncFileHistoryCapability.js +2 -2
  279. package/dist/settingsCredentialKeyPaths.js +60 -5
  280. package/dist/settingsHooksSalvage.d.ts +1 -0
  281. package/dist/settingsHooksSalvage.js +7 -1
  282. package/dist/settingsLayerAdmission.d.ts +4 -0
  283. package/dist/settingsLayerAdmission.js +16 -0
  284. package/dist/skillToolListsCapability.js +6 -5
  285. package/dist/skillsWireCaps.d.ts +14 -0
  286. package/dist/skillsWireCaps.js +47 -16
  287. package/dist/slashCommandGate.d.ts +24 -0
  288. package/dist/slashCommandGate.js +74 -0
  289. package/dist/slashCommandTable.d.ts +14 -0
  290. package/dist/slashCommandTable.js +99 -0
  291. package/dist/sqlEngineCapability.js +2 -2
  292. package/dist/steerPriorityCapability.js +2 -2
  293. package/dist/storePostureCapability.js +2 -2
  294. package/dist/subagent/agentStateDetail.js +1 -1
  295. package/dist/subagent/engineDelegatedPrompt.d.ts +9 -0
  296. package/dist/subagent/engineDelegatedPrompt.js +38 -7
  297. package/dist/subagent/engineRowStopGate.js +2 -2
  298. package/dist/subagent/engineSubagentResume.js +3 -3
  299. package/dist/subagent/engineTaskHandleWire.d.ts +1 -0
  300. package/dist/subagent/engineTaskHandleWire.js +10 -0
  301. package/dist/submitFailure.d.ts +8 -0
  302. package/dist/submitFailure.js +17 -0
  303. package/dist/supportFloor.d.ts +1 -0
  304. package/dist/supportFloor.js +7 -0
  305. package/dist/terminationIntent.d.ts +55 -0
  306. package/dist/terminationIntent.js +352 -0
  307. package/dist/toolHistoryMismatch.d.ts +8 -0
  308. package/dist/toolHistoryMismatch.js +37 -6
  309. package/dist/toolResult.d.ts +13 -3
  310. package/dist/toolResult.js +158 -9
  311. package/dist/toolResultContent.d.ts +13 -0
  312. package/dist/toolResultContent.js +82 -7
  313. package/dist/toolRoster.d.ts +18 -0
  314. package/dist/toolRoster.js +64 -0
  315. package/dist/turnFailurePresentation.js +27 -90
  316. package/dist/usageLimitAutoResume.d.ts +74 -0
  317. package/dist/usageLimitAutoResume.js +227 -0
  318. package/dist/userAttachmentEnvelope.js +1 -1
  319. package/dist/userAttachmentSeat.js +5 -5
  320. package/dist/userInvokedSkillsCapability.js +2 -2
  321. package/dist/webSearchBackendCapability.js +2 -2
  322. package/dist/wireErrorTriage.js +99 -50
  323. package/dist/wireFailureShape.d.ts +25 -1
  324. package/dist/wireFailureShape.js +92 -5
  325. package/dist/wireRefusalCopy.d.ts +24 -1
  326. package/dist/wireRefusalCopy.js +253 -32
  327. package/dist/wiringFleetDoctor.d.ts +3 -0
  328. package/dist/wiringFleetDoctor.js +21 -0
  329. package/dist/workflow.d.ts +2 -1
  330. package/dist/workflow.js +38 -1
  331. package/dist/workflowClient.d.ts +2 -7
  332. package/dist/workflowsJournalCapability.js +2 -2
  333. package/dist/writeProtectionCapability.js +2 -2
  334. package/docs/INTEGRATION-CLIENTS.md +607 -181
  335. package/package.json +14 -3
@@ -190,13 +190,33 @@ const ZH = {
190
190
  'config.mcp.transportDegraded': 'MCP 服务器 {name}{where} 已启动,但它的部分传输设置不能照原样使用、被略去了:{lost}。其余设置照常生效;请修正上面点名的设置,让它们也生效。',
191
191
  'config.mcp.toolAxesInvalid': 'MCP 服务器 {name}{where} 没有启动:它的 toolAxes 设置不合法 —— {problem}。请修正这台服务器的 toolAxes(或删掉它);其他 MCP 服务器不受影响。',
192
192
  'config.mcp.toolAxesFallbackProblem': '这份声明不是一组合法的按工具安全设置',
193
+ 'config.mcp.toolFacesInvalid': 'MCP 服务器 {name}{where} 没有启动:它的 toolFaces 设置不合法 —— {problem}。请修正这台服务器的 toolFaces(或删掉它);其他 MCP 服务器不受影响。',
194
+ 'config.mcp.toolFacesFallbackProblem': '这份声明不是一组合法的按工具展示与审批设置',
195
+ 'config.mcp.toolFacesUnreadable': '这项设置读不出来(它上面的取值器或代理陷阱抛了错)',
193
196
  'config.mcp.elicitationInvalid': 'MCP 服务器 {name}{where} 没有启动:它的 elicitation 设置必须是 true 或 false。请修正这台服务器的 elicitation(或删掉它);其他 MCP 服务器不受影响。',
197
+ 'config.mcp.entryNotObject': 'MCP 服务器 {name}{where} 没有启动:它在配置里的条目不是一个对象。MCP 服务器条目必须是带 command(本地服务器)或 url(远程服务器)的对象。请修正或删掉这一条;其他 MCP 服务器不受影响。',
198
+ 'config.mcp.entryUnreadable': 'MCP 服务器 {name}{where} 没有启动:它在配置里的条目读不出来(条目上的取值器或代理陷阱抛了错)。请修正或删掉这一条;其他 MCP 服务器不受影响。',
199
+ 'config.mcp.entryNotObjectProblem': '这一条不是对象(应是带 command 或 url 的对象)',
200
+ 'config.mcp.transportTypeUnsupported': '这种传输类别请求面承载不了(只支持 stdio 与 http)',
201
+ 'config.mcp.transportIdentityBothSetProblem': '同时设置了 principalHeader 与 assertionHeader,而这两项指的是同一个身份头 —— 只保留其中一项',
194
202
  'config.mcp.cloudElicitationInvalid': '云配置:这些 MCP 服务器条目被略过,因为它们的 elicitation 设置不是 true 或 false —— 请修正或删掉 elicitation 条目:{who}',
203
+ 'config.mcp.allowToolsInvalid': 'MCP 服务器 {name}{where} 没有启动:它的 allowTools 设置不能使用 —— {problem}。请修正这台服务器的 allowTools 条目(工具名字符串的列表);其他 MCP 服务器不受影响。',
204
+ 'config.mcp.allowToolsNotArray': '{path} 必须是字符串数组(实际是 {got})',
205
+ 'config.mcp.allowToolsElementNotString': '{path} 必须是字符串(实际是 {got})',
206
+ 'config.mcp.allowToolsHole': '{path} 缺失:列表中不允许有空缺,每个位置都必须是字符串',
207
+ 'config.mcp.allowToolsUnreadable': '{path} 读不出来(它上面的取值器或代理陷阱抛了错)',
208
+ 'config.mcp.allowToolsTooMany': '{path} 的条目太多,无法逐项检查(超过 {got} 项)',
209
+ 'config.mcp.cloudAllowToolsInvalid': '云配置:这些 MCP 服务器条目被略过,因为它们的 allowTools 设置不是工具名字符串的列表 —— 请修正 allowTools 条目:{who}',
210
+ 'config.mcp.cloudEntryUnreadable': '云配置:这些 MCP 服务器条目被略过,因为条目读不出来(条目上的取值器或代理陷阱抛了错)—— 请修正或删掉这一条:{who}',
195
211
  'config.mcp.cloudToolAxesInvalid': '云配置:这些 MCP 服务器条目被略过,因为它们的 toolAxes 设置不合法(按工具的安全覆盖只认 effect、egress、irreversibility 三项,各带合法取值)—— 请修正或删掉 toolAxes 条目:{who}',
212
+ 'config.mcp.cloudToolFacesInvalid': '云配置:这些 MCP 服务器条目被略过,因为它们的 toolFaces 设置不合法(按工具的展示与审批设置)—— 请修正或删掉 toolFaces 条目:{who}',
196
213
  'config.mcp.cloudNameUnusable': '云配置:这些 MCP 服务器条目被略过,因为它们的名字不能照原样使用(名字超过 128 个字符,或带首尾空白)—— 请修正名字:{who}',
197
214
  'config.mcp.cloudTransportInvalid': '云配置:这些 MCP 服务器条目被略过,因为它们的传输设置引擎不能照原样使用(例如地址不是 http(s) URL)—— 请修正传输设置:{who}',
198
215
  'config.mcp.cloudTransportDegraded': '云配置:这些 MCP 服务器条目已启动,但它们的部分传输设置不能照原样使用(点名的设置被略去,其余照常生效)—— 请修正点名的设置:{who}',
199
216
  'config.mcp.cloudTransportDegradedUnreadable': '云配置:「已启动但部分设置被略去」的 MCP 服务器条目清单本客户端读不出来 —— 有的服务器可能在缺少部分已配置设置的情况下运行,且没有任何提示',
217
+ 'config.skills.cloudToolListInvalid': '云配置:这些技能被略过,因为它们的 allowedTools 或 disallowedTools 不是字符串列表(技能的工具清单要么照原样发送、要么不发送,不做裁剪)—— 请修正或删掉该清单:{who}',
218
+ 'config.skills.cloudDroppedUnreadable': '云配置:「因工具清单不可用而被略过的技能」清单本客户端读不出来 —— 可能有技能缺席且没有任何提示',
219
+ 'config.skills.toolListTooMany': '的条目太多,无法逐项检查(超过 {got} 项)—— 这张清单整张拒收,不会只读一部分或被截短',
200
220
  'approval.boundGrants.notActivated.one': '批准这一张不会激活卡上的技能:它的拒绝清单里有 1 条读作无物,而引擎不丢弃读不出的拒绝 —— 技能的说明不加载,清单里的一条都不授予。',
201
221
  'approval.boundGrants.notActivated.other': '批准这一张不会激活卡上的技能:它的拒绝清单里有 {count} 条读作无物,而引擎不丢弃读不出的拒绝 —— 技能的说明不加载,清单里的一条都不授予。',
202
222
  'approval.boundGrants.listsNoToolsWithNothing.one': '批准这一张会激活卡上的技能;它没有列出免问运行的工具,也没有列出要拒的工具。清单里有 1 条读作无物,什么都不授予。',
@@ -217,6 +237,13 @@ const ZH = {
217
237
  'approval.settle.cause.broadcastLost': '它没有送达任何一个打开着的连接',
218
238
  'approval.settle.cause.streamDisconnected': '承载这张卡的连接断了',
219
239
  'approval.settle.cause.undeliverable': '它没能送达任何审批界面',
240
+ 'approval.decision.grantChanged': '引擎拒收了这次批准:它绑定的技能授予在卡呈出之后已经变了 · 什么都没有决定,这一请求仍在等待,但再批一次会以同样的理由被拒 · 请拒绝这一请求,让模型重新激活那个技能',
241
+ 'approval.decision.settledElsewhereContrary.deniedFirst': '这一请求已在别处被答复为拒绝,你的批准没有生效。',
242
+ 'approval.decision.settledElsewhereContrary.approvedFirst': '这一请求已在别处被答复为批准,你的拒绝没有生效。',
243
+ 'approval.decision.unconfirmedAfterRetry': '不知道你的答复有没有生效:之前那一发没有得到确认,重发时这一请求已不在等待 · 动手之前先看任务当前的状态',
244
+ 'notice.decide.rowUnrevivable': '引擎已经无法恢复这张审批卡,批准和拒绝都不会生效 · 这张卡只能在服务端清理 —— 请等待清理完成,或联系运维这台引擎的人',
245
+ 'approval.askPark.autoReopenBlocked.policyInteractive': '引擎的准入策略拒绝续跑这一停驻步骤(run {run}),所以 sema 不会自己把它的卡放回屏幕。请换成这台部署允许的权限模式,或联系部署的运维方,然后发一条消息把卡带回来。',
246
+ 'approval.askPark.autoReopenBlocked.policyPrint': '引擎的准入策略拒绝续跑这一停驻步骤(run {run}),所以 sema 不会自己把它的卡放回屏幕。请换成这台部署允许的权限模式,或联系部署的运维方,然后发一条消息把卡带回来;或者停掉这条 run({cancel})。',
220
247
  'approval.settle.subject.named': '{tool} 的审批请求',
221
248
  'approval.settle.subject.generic': '这个审批请求',
222
249
  'approval.settle.endedKnown': '{subject}在引擎上结束了,没有得到回答:{clause}。这张卡上没有批准任何东西;如果仍然需要这一步,请再请求一次。',
@@ -270,10 +297,17 @@ const ZH = {
270
297
  'resume.reopen.first.toolContractMismatch': '这个审批所授予的工具,自审批记录以来已经变了',
271
298
  'resume.reopen.content': '{first} · 引擎在消耗任何东西之前,就把这件工作重新 parked 了 —— 审批仍待决,你的决断没有被消耗 · 请重新获取待决审批,并在同一个工具可用的引擎上再决断一次',
272
299
  'session.inheritEnv.notConfirmed': '引擎没有确认它不会把自己的凭据交给工具 shell,所以工具 shell 拿到的是过滤后的环境(GH_TOKEN 这类看着像凭据的变量会被去掉),直到引擎升级。',
300
+ 'session.inheritEnv.valuesNotConfirmed': '引擎会把自己的凭据变量挡在工具 shell 之外,但没有确认它也会挡住这些凭据以别的名字出现的副本(比如你同时导出为 OPENAI_API_KEY 的模型密钥),所以工具 shell 拿到的是过滤后的环境(GH_TOKEN 这类看着像凭据的变量会被去掉),直到引擎确认这一点。',
273
301
  'session.inheritEnv.withheld.all': '这次请求没有带上它:引擎的版本还不知道,而不认识「让 shell 继承本机整份环境」这项设置的引擎会拒掉整个请求,所以先扣下了;这次 run 的 shell 拿到的是缺省环境(看着像凭据的变量已去掉);在认识这项设置的引擎上,不带它还会清掉本会话更早的整份环境选择。',
274
302
  'session.inheritEnv.withheld.scrub': '这次请求没有带上它:引擎的版本还不知道,所以缺省环境这项设置没有带;效果相同,因为不带它同样让这次 run 拿到缺省环境(看着像凭据的变量已去掉)。',
275
303
  'session.inheritEnv.withheld.unknown': '这次请求没有带上它:shell 环境这项设置因为一个这个版本不认识的原因被扣下了。',
276
304
  'session.inheritEnv.refusal': '引擎把这次请求当作无效拒掉了,用的是许多不同请求字段共用的一个拒绝码 · 这次请求要求 shell 继承本机的整份环境,而引擎只有在工具直接跑在它自己那台机器上、且请求属于某个会话时才接受这一项;如果它拒的正是这一项,请去掉这项设置(或改用缺省)再发一次',
305
+ 'session.inheritEnv.refusalNamed': '引擎拒掉了「让 shell 继承本机整份环境」这项设置,它只有在工具直接跑在它自己那台机器上、且请求属于某个会话时才接受这一项 · 请去掉这项设置(或改用缺省)再发一次',
306
+ 'session.projectMemory.withheld.absent': '这次请求没有带上它:这台引擎没有声明支持「别读项目指令文件」这项设置,而不认识它的引擎会拒掉整个请求,所以先扣下了;项目指令文件仍会发给模型。',
307
+ 'session.projectMemory.withheld.declined': '这次请求没有带上它:这台引擎声明了不支持「别读项目指令文件」这项设置,所以先扣下了;项目指令文件仍会发给模型。',
308
+ 'session.projectMemory.withheld.unreadable': '这次请求没有带上它:引擎的能力声明没读到,所以不知道它是否支持「别读项目指令文件」这项设置,而不认识它的引擎会拒掉整个请求,所以先扣下了;项目指令文件仍会发给模型。',
309
+ 'session.projectMemory.withheld.unknown': '这次请求没有带上它:「别读项目指令文件」这项设置因为一个这个版本不认识的原因被扣下了。',
310
+ 'session.policy.withheld.namespaceCoveringUnconfirmed': '没有写进这条会话的规则记录:这条规则点的是整个服务器或对端,或按模式点了它的一组工具,而引擎还没有确认这份记录会把这样的规则读成一组 —— 按精确工具名比对记录的引擎会一只都拦不住。',
277
311
  'session.fileHistoryLeg.notHonored': '引擎仍在为这个会话捕获文件历史,尽管你的设置要求它别这么做。',
278
312
  'resume.refusal.placementMismatch': '这次续跑指定的放置根,和这件工作 parked 时记下的不是同一个 · 引擎在消耗任何东西之前就拒了它 —— parked 的工作原封未动 · 请用记下的那个根重试,或者省略放置根让它沿用记下的',
279
313
  'resume.refusal.preflightWaitable': '部署的续跑预检拒绝了这次尝试 · 拒绝发生在提交之前 —— 你的决断没有被消耗 · 引擎给了等待窗,所以障碍清除之后这个令牌仍可再赎',
@@ -355,6 +389,7 @@ const ZH = {
355
389
  'session.selfHeal.injected.resendingInferred': '{lead}之前被拦住了,因为这个会话当时被较早的一轮回复{id}占着;现在那一轮回复报告已结束,所以 sema 正在发送这条消息 —— 你不用做什么(如果会话还没完全空出来,它可能会再被拦一次)。',
356
390
  'session.selfHeal.injected.handedOffFollowing': '{lead}已交给正在进行的那一轮回复{id},没有另开一轮。sema 正在跟着那一轮回复,它接下来要什么都会显示出来;你现在不用做什么。',
357
391
  'session.selfHeal.injected.handedOffWatch': '{lead}已交给正在进行的那一轮回复{id},没有另开一轮 —— 请留意那一轮回复怎么处理它。',
392
+ 'session.selfHeal.injected.interruptedFinishing': '{lead}没有送达:被叫停的较早那一轮回复{id}仍在收尾,sema 没有发送它也没有重试,所以模型没有看到它。稍等片刻后再试一次。',
358
393
  'session.selfHeal.injected.notDelivered': '{lead}没有送达:这个会话还被较早的一轮回复占着{id},而且没有可以回答来放行的打开的卡{noView}。sema 没有重试,所以模型没有看到它。',
359
394
  'session.selfHeal.decisionInFlight': '上一个 turn 处于 parked 状态,{parkedOn},而你对那张卡的回答还在送往引擎的路上,所以 sema 没有再次显示那张卡 —— 再回答一次会发出第二个决断。它没有取消这次 run。你的消息没有发出;请稍等片刻,等引擎应用了那个决断之后再发一次。',
360
395
  'session.selfHeal.parkedOn.ask': '在等你的决断(run {taskId})',
@@ -372,7 +407,7 @@ const ZH = {
372
407
  'session.selfHeal.row.planReopenFailed.dismissed': '上一个 turn 处于 parked 状态,在等一次计划审阅(run {taskId}),而你关掉了它的审批卡 —— {closed}。它没有取消这次 run —— 那等于替你把计划丢掉了。你的消息没有发出;再发一次可以把卡叫回来。',
373
408
  'session.selfHeal.row.planReopenFailed.withKeep': '上一个 turn 处于 parked 状态,在等一次计划审阅(run {taskId}),而 sema 没能重新打开那张审批卡{noView}。它没有取消这次 run —— 那等于替你把计划丢掉了。你的消息没有发出。想保住这段对话,请{keep}:会话 resume 之后,如果它还在等,那张卡会回来。如果你不再需要那份计划,也可以{wayOut}。{viaEngine}',
374
409
  'session.selfHeal.row.planReopenFailed.noKeep': '上一个 turn 处于 parked 状态,在等一次计划审阅(run {taskId}),而 sema 没能重新打开那张审批卡{noView}。它没有取消这次 run —— 那等于替你把计划丢掉了。你的消息没有发出;如果你不再需要那份计划,请{wayOut}。{viaEngine}',
375
- 'session.selfHeal.row.steered.textOnly': '只有你消息的文字交了出去 —— steer 不带附件,所以那次提交里的图片都没有送出。',
410
+ 'session.selfHeal.row.steered.textOnly': '只有你消息的文字交了出去 —— 如果那次提交里还有图片或附件,它们都没有送出。',
376
411
  'session.selfHeal.row.steered.tail.following': 'sema 正在跟着那次 run,它接下来要什么都会显示出来。',
377
412
  'session.selfHeal.row.steered.tail.watch': '请留意那次 run 怎么处理它。',
378
413
  'session.selfHeal.row.steered.unknownTail.following': 'sema 正在跟着那次 run,它接下来要什么都会先显示出来,你再决定要不要重发。',
@@ -417,6 +452,8 @@ const ZH = {
417
452
  'session.selfHeal.row.stateUnknown': '这个会话上仍有一次 run 在活动{handle},而 sema 读不出那次 run 的状态,所以没有动它({detail})。sema 没有发送你的消息:在那次 run 落定之前,这个会话开不了新的 turn —— {wayOut}。',
418
453
  'session.selfHeal.headless.status': '(状态 {status})',
419
454
  'session.selfHeal.endRun.engine': '在引擎上取消那次 run({cancelPath})',
455
+ 'session.selfHeal.endRun.engineInteractive': '在引擎上结束 run {taskId}',
456
+ 'session.selfHeal.endRun.engineInteractive.noId': '在引擎上结束那条 run',
420
457
  'session.selfHeal.wakeOn.engine': '(POST /v1/sessions/:id/wake)',
421
458
  'session.selfHeal.wakeOn.host': '({where})',
422
459
  'session.selfHeal.headless.decide': '这个会话被较早的一次 run{handle}占着{status},它 parked 在等{gate},所以这条消息没有发出。决定它,会话就解锁:POST {decidePath}。改为结束那次 run 也能解锁,但那等于替你否决了那一项:{endRun}。或者{freshSession}。{governance}',
@@ -465,6 +502,8 @@ const ZH = {
465
502
  'approval.mandate.word.probeUnanswered': '对这次调用运行的检查没有给出答复(超时或失败了;这个客户端分不出是哪种),所以这次调用是否留在本会话允许的目录之内,不得而知',
466
503
  'approval.mandate.word.writeProtection': '这次改动落在受保护的位置(代理自己的配置)上,这类改动要逐次确认',
467
504
  'approval.mandate.word.targetUnresolved': '这次改动落在磁盘上哪里,没能确定(路径上的一个链接没能检查,或目标没能解析),所以它是否落在受守护的位置上,不得而知',
505
+ 'approval.mandate.word.crossBoundaryTaint': '这次运行在部署信任边界之外的设备上执行,而且这个部署服务多个租户,所以对组织一侧的写入(或在从别处读取之后、指向该设备的调用)要由部署的审批人对这一次调用单独确认',
506
+ 'approval.mandate.wayOut.crossBoundaryTaint': '来自配置的放行(放行一切的设置,或策略自己的回答)对这次调用会被拒绝,所以由你在这里批准或拒绝来决定它',
468
507
  'approval.mandate.unknownWord': '这次确认所报告的原因,这个客户端不认识,所以不显示原因',
469
508
  'approval.card.payloadUnreadable': '这个客户端读不懂这张审批卡的格式,所以只显示它的基本事实 —— 请据此决定,不确定它会做什么的话就拒绝它。',
470
509
  'approval.card.more.one': '这张卡还有 1 条原因没有显示。',
@@ -508,6 +547,22 @@ const ZH = {
508
547
  'session.fileHistoryRefusal.unrecognized': '没有发送:你的设置里已关闭文件检查点,但这台引擎报告了一个本客户端不认识的文件历史捕获模式,所以不知道它能否按会话停止记录文件历史,现在发送仍可能把它记录下来。只要这台引擎还是同样的报告,重试也不会改变这一点;要发送并让这一次的文件历史被记录,请在设置里把文件检查点重新打开。',
509
548
  'session.fileHistoryRefusal.unreadable': '没有发送:你的设置里已关闭文件检查点,但这台引擎关于能否按会话停止记录文件历史的报告,本客户端读不出来,所以现在发送仍可能把它记录下来。只要这台引擎还是同样的报告,重试也不会改变这一点;要发送并让这一次的文件历史被记录,请在设置里把文件检查点重新打开。',
510
549
  'session.hostSettings.memorySwitchMalformed': '设置文件里的记忆设置读不出,所以「关闭记忆」没有生效:这一次请求照常带着记忆发出。改好记忆那一段(memory.enabled 只能是 true 或 false)即可关闭。',
550
+ 'session.hostSettings.fileHistoryRestoreConflict': '没有发送:这次请求准备好之后,你在设置里关闭了文件检查点,但这次请求同时要从检查点还原文件,两者不能放在同一个请求里。要还原文件,请在设置里把文件检查点重新打开;否则请去掉文件还原再发送。',
551
+ 'session.hostSettings.projectionUnchecked': '这一次请求要带的设置在发出前没法核对,所以没有发送。请重新载入设置后再试。',
552
+ 'session.hostSettings.projectionUncheckedPortsMissing': '这一次请求要带的设置在发出前没法核对,所以没有发送:这个应用没有装上核对权限规则要用的检查件({ports})。重新载入设置解决不了,需要应用把它们装上。',
553
+ 'session.hostSettings.projectionUncheckedJudgeFailed': '这一次请求要带的设置在发出前没法核对,所以没有发送:这个应用装上的权限规则检查件在核对时出了故障。重新载入设置解决不了,需要应用修好这个检查件。',
554
+ 'session.hostSettings.managedUnreadable': '没有发送:管理员下发的托管设置此刻读不出,它设的限制没法生效。托管设置恢复可读后,请求会照常发送。',
555
+ 'session.hostSettings.layerNotLoaded.hold.unreadable': '{layer}读不出,那份文件里的规则和 hooks 不会作用于这一次请求。可以不带这些设置继续,或者先取消、改好文件。',
556
+ 'session.hostSettings.layerNotLoaded.hold.rejected': '{layer}没有装上:那份文件里一个守着工具调用的 hook 写坏了,文件里的规则和 hooks 不会作用于这一次请求。可以不带这些设置继续,或者先取消、改好文件。',
557
+ 'session.hostSettings.layerNotLoaded.sent.unreadable': '{layer}读不出:这一次请求没有带那份文件里的规则和 hooks。',
558
+ 'session.hostSettings.layer.policySettings': '托管设置',
559
+ 'session.hostSettings.layer.userSettings': '你的用户设置',
560
+ 'session.hostSettings.layer.projectSettings': '项目设置',
561
+ 'session.hostSettings.layer.localSettings': '本地项目设置',
562
+ 'session.hostSettings.layer.flagSettings': '启动时传入的设置',
563
+ 'session.hostSettings.heldPrevious': '刚才有一份设置文件没能完整读出(可能正在保存),所以仍按上一次完整读到的权限规则执行。',
564
+ 'session.hostSettings.styleMissing': '设置里选中的输出风格「{name}」找不到或读不出,这一次请求不套用它。',
565
+ 'session.hostSettings.styleSafeMode': '安全模式已开启,设置里的输出风格不套用。',
511
566
  'model.identity.lane.processEnv': '本客户端启动时的环境',
512
567
  'model.identity.lane.settingsEnv': '本客户端的设置文件',
513
568
  'model.identity.lane.modelCatalogFile': '本地模型目录文件',
@@ -524,6 +579,11 @@ const ZH = {
524
579
  'notice.injectionLane.item.credentialedMcp': '使用本机凭据的 MCP 服务器',
525
580
  'notice.injectionLane.item.taskHooks': '钩子',
526
581
  'notice.injectionLane.itemSeparator': '、',
582
+ 'notice.wayOut.checkCredentials': '模型服务拒绝了这次运行所用的凭据 —— 请检查凭据后重试',
583
+ 'notice.wayOut.checkCredentialsFrom': '模型服务拒绝了这次运行所用的凭据(来源:{source})—— 请检查凭据后重试',
584
+ 'notice.wayOut.switchModel': '模型服务此刻无法处理这个请求 —— 请换一个模型试试',
585
+ 'notice.wayOut.wait': '模型服务仍在处理这个请求 —— 请稍等片刻后重试',
586
+ 'notice.wayOut.fixRequest': '模型服务拒绝了这个请求 —— 请修改请求后再发送;原样重发不会有变化',
527
587
  'rules.refusal.sentence.one': '权限:有 1 条规则不会被执行 —— {list}',
528
588
  'rules.refusal.sentence.other': '权限:有 {count} 条规则不会被执行 —— {list}',
529
589
  'rules.refusal.item': '{rule}({reason})',
@@ -531,6 +591,10 @@ const ZH = {
531
591
  'rules.refusal.list.more': '{shown},另有 {count} 条',
532
592
  'rules.refusal.reason.toolName': '它的工具名不是这台引擎认得的名字',
533
593
  'rules.refusal.reason.homePath': '它用了引擎无法锚定的 ~/ 路径 —— 请改写成相对项目的路径或绝对路径',
594
+ 'rules.refusal.reason.neverMatches': '这种写法作为这只工具的拒绝或询问规则永远匹配不上,引擎不会执行它 —— 要整只拦下这只工具,请只写工具名',
595
+ 'rules.nearMiss.sentence.one': '权限:有 1 条规则写的工具名拼法,本次运行里没有任何工具认,所以永远匹配不上 —— {list}',
596
+ 'rules.nearMiss.sentence.other': '权限:有 {count} 条规则写的工具名拼法,本次运行里没有任何工具认,所以永远匹配不上 —— {list}',
597
+ 'rules.nearMiss.reason': '请把名字写成「{mounted}」',
534
598
  'config.agentsWire.refusedServer.sentence': 'agents wire:{who}:它的 tools 条目 {entry} 点名了 MCP 服务器 {server} 的工具,而该服务器{cause} —— 条目原样发出;只要那台服务器不在这一跑里,这一条就什么都给不了代理。{way}',
535
599
  'config.agentsWire.refusedServer.cause.rejected': '已在本项目被拒用,所以不在这一跑里',
536
600
  'config.agentsWire.refusedServer.cause.notApproved': '尚未在本项目获批,所以不在这一跑里',
@@ -560,6 +624,13 @@ const ZH = {
560
624
  'config.hooks.forWire.planPassedBare': 'hooksForWire:请传 { plan },值取这一回合 hooksWirePlan() 返回的计划 —— 传进来的是计划本身;请包成 { plan }。',
561
625
  'config.hooks.forWire.planMissing': 'hooksForWire:请传 { plan },值取这一回合 hooksWirePlan() 返回的计划 —— opts.plan 缺失。',
562
626
  'config.hooks.forWire.planNotPlan': 'hooksForWire:请传 { plan },值取这一回合 hooksWirePlan() 返回的计划 —— opts.plan 不是这样的计划(收到了{shape})。',
627
+ 'config.hooks.salvage.managedPartial': '{layer}:{what}。这些是托管 hooks,在管理员修好托管设置之前,这一回合的请求不会发出。',
628
+ 'config.hooks.httpPolicy.urlNotListed': 'HTTP hook 被拦下:{url} 不匹配 allowedHttpHookUrls({layer})里的任何模式(模式里的 * 只在 URL 的一个组成部分内匹配)—— 这个 {event} hook 不会运行。',
629
+ 'config.hooks.httpPolicy.urlListEmpty': 'HTTP hook 被拦下:allowedHttpHookUrls({layer})是空的,所以任何 HTTP hook 都不运行 —— {url} 的 {event} hook 不会运行。',
630
+ 'config.hooks.httpPolicy.urlListMalformed': 'HTTP hook 被拦下:allowedHttpHookUrls({layer})不是字符串列表,按空列表读,所以任何 HTTP hook 都不运行 —— {url} 的 {event} hook 不会运行。',
631
+ 'config.hooks.httpPolicy.envListMalformed': 'HTTP hook {url}({event})在没有环境变量的情况下运行:httpHookAllowedEnvVars({layer})不是字符串列表,按空列表读。',
632
+ 'config.hooks.httpPolicy.layerUnreadable': 'HTTP hook 被拦下:读不出 {layer} 的设置,无法核对它的 allowedHttpHookUrls,所以任何 HTTP hook 都不运行 —— {url} 的 {event} hook 不会运行。',
633
+ 'config.hooks.layerWithheld.trust': '{layer}:其中的 hooks 不会运行 —— 这个客户端没有工作区信任步骤,而仓库可控的设置里的 hooks 只有在工作区被信任之后才允许。用户设置、flag 设置和托管设置里的 hooks 不受影响。',
563
634
  'config.taskRequest.memoryOff.settingsSectionNotObject': 'memoryOffDeclared: settings 的 memory 段必须是对象 —— 收到 {shape}。',
564
635
  'config.taskRequest.memoryOff.enabledNotBoolean': 'memoryOffDeclared: settings memory.enabled 在场时必须是布尔 —— 收到 {shape}。',
565
636
  'config.taskRequest.inputKeysUnreadable': 'buildTaskRequest: 入参的键集 / 属性描述符读不出(代理 trap 抛)—— 无法安全快照声明,拒绝装配。错误文本只报形状,不回显值。',
@@ -571,6 +642,7 @@ const ZH = {
571
642
  'config.taskRequest.requireExisting.layerAssembly': '本层在装配前拒,不让它走一次往返。',
572
643
  'config.taskRequest.requireExisting.layerLive': '本层(live 兜底层)落位之后复判:宿主交的 mock 会话常量让本层删掉了会话 id、又没有已捕获的会话 id,而断言不删(删 = 找不到就静默新开)⇒ 在发出前拒,不让它走一次往返。',
573
644
  'config.taskRequest.requireExisting.noSession': '{where}: requireExistingSession: true 要求续一个已存在的会话,但 sessionId {shape} —— 没有可续的会话。上游对这一形同样拒收(不会新开会话,也不会续上任何东西);{layer}处置:要续哪个会话,就把它的 id 交在 sessionId 上;要开新会话,就别带 requireExistingSession(或给 false)。错误文本只报形状,不回显值。',
645
+ 'config.taskRequest.submissionIdentityMalformed': 'buildTaskRequest: 车道实参只接受车道词({lanes})或提交身份 {surface, origin, tools} —— 三位都须是自有数据位、取值在各自的闭集里(surface:{surfaces};origin:{origins};tools:{tools})—— 收到 {shape}。坏形的身份推不出车道也推不出出身,猜一个(回落到交互车道,或回落成「用户所写」)就是替提交方发一份它没描述过的请求,所以在读入参之前就拒。错误文本只报形状,不回显值。',
574
646
  'config.assembly.thrownDuringAssembly': '{who}: 装配时出错,拒绝装配(原抛出物见 cause)。',
575
647
  'session.steerRefusal.notRunning.happened': '那个 run 现在不接收消息 —— 它刚刚结束,或正在另一台服务器上运行,或不是它所在会话的活动 run',
576
648
  'session.steerRefusal.notRunning.nextStep': '先看一下它当前的状态,再把消息发给处于活动状态的 run',
@@ -638,6 +710,17 @@ const ZH = {
638
710
  'notice.capability.hands.unknownRosterUnreadable': '这次 run 有没有文件与 shell 工具,目前不知道 —— 工具名册不是这个读口认识的形状,读不出来',
639
711
  'notice.capability.hands.unknownMountConditionAbsent': '这次 run 有没有文件与 shell 工具,目前不知道 —— 这台引擎不报每个工具是由哪个条件挂载的,所以这里数出一个空的计数,说的是读口的事,不是这次 run 的事',
640
712
  'rules.sessionPolicy.tighten.written': '会话规则已保存(版本 {rev})—— 记录现在包含它原有的全部内容加上这里送来的条目,并从这个会话的下一道工具门起生效;已经在跑的那一步不会被打断。',
713
+ 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.counts': '仍在运行,而且可能是在这个会话的第一条规则之前启动的:{list}。凡是在那第一条规则之前启动的,都会不带这条规则继续运行 —— 要让它立即生效,请停掉它们。',
714
+ 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.unreadable': '本客户端读不出现在有哪些后台子代或工作流在运行。凡是在这个会话的第一条规则之前启动的,都会不带这条规则继续运行 —— 不该继续运行的请停掉。',
715
+ 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.unseen': '起跑还没报到本客户端的工作,可能也读不到这条规则。',
716
+ 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.agents.one': '{n} 个后台子代',
717
+ 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.agents.many': '{n} 个后台子代',
718
+ 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.workflows.one': '{n} 个工作流',
719
+ 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.workflows.many': '{n} 个工作流',
720
+ 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.untracked.one': '{n} 个本客户端已不再跟踪的后台项',
721
+ 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.untracked.many': '{n} 个本客户端已不再跟踪的后台项',
722
+ 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.list.two': '{a}和 {b}',
723
+ 'rules.sessionPolicy.tighten.writtenBeforeFirstRule.list.three': '{a}、{b}和 {c}',
641
724
  'rules.sessionPolicy.tighten.conflict': '写入这次收紧的过程中,会话规则被别人改了,连续两次 —— 什么都没写。请重新读一遍当前的规则再试,或者先让另一个写入方写完。',
642
725
  'rules.sessionPolicy.tighten.loosenForbidden': '引擎拒绝了这次写入,因为它会放宽会话规则:这里送来的条目里至少有一条是放宽允许范围而不是收窄。这条路上只接受增加限制的条目。',
643
726
  'rules.sessionPolicy.tighten.capabilityAbsent': '这个部署不保存会话级的工具规则,所以这里没有什么可收紧的。',
@@ -696,6 +779,7 @@ const ZH = {
696
779
  'rules.match.namePrefix': '技能名前缀匹配',
697
780
  'rules.match.host': '网站域名匹配(单个主机)',
698
781
  'rules.match.subdomain': '网站域名匹配(该域名下的每个主机)',
782
+ 'rules.match.pattern': '命令模式匹配(命令里带星号)',
699
783
  'rules.match.unreported': '没有报告匹配形式',
700
784
  'rules.match.unknown': '这个版本不认识的匹配形式',
701
785
  'model.tier.blurb.ultra': '预留在 max 之上 —— 等更强的模型出现时再绑定',
@@ -704,11 +788,14 @@ const ZH = {
704
788
  'model.tier.blurb.flash': '又快又省 —— 标题、回顾、批量活儿',
705
789
  'model.tier.blurb.lite': '最省 —— 批量分类、简单查询',
706
790
  'model.catalog.candidateRejected': '部署拒绝了最近一次配置改动{which},仍在使用它之前的那份配置 —— 那次改动里新增的模型或设置没有生效',
791
+ 'model.notServed.withDefault': '模型 {model} 在这台引擎的模型目录里不可用,所以本次会话改用引擎的缺省模型 {default}',
792
+ 'model.notServed.noDefault': '模型 {model} 在这台引擎的模型目录里不可用,所以本次会话把模型的选择交给引擎',
707
793
  'notice.failure.headline.connectionLostNotSent': '连不上引擎 —— 你的消息没有运行。请确认引擎已经启动,然后再发送一次。',
708
794
  'notice.failure.headline.connectionLost': '与引擎的连接断了 —— 不知道你的消息是否已经运行。重新发送之前,请先查看这次 run 的状态,或者重新接上它。',
709
795
  'notice.failure.headline.timeout': '事件流静默了 —— 这次 run 可能仍在引擎上运行。再次发送之前,请先查看它的状态。',
710
796
  'notice.failure.headline.parked': '事件流结束时这次 run 还没到终态 —— 这次 run 很可能是 parked 在等一个决断,而不是崩溃了。请查看它的状态并处理待决的事项;这个 turn 没有在这里完成。',
711
797
  'notice.failure.headline.internal': '这个客户端遇到了内部错误 —— 这是客户端的 bug,不是引擎故障,这个 turn 没有完成。',
798
+ 'notice.failure.headline.causeUnreadable': '这次失败的原因读不出(错误对象有一部分不可读)—— 不知道引擎是否收到了你的消息。重新发送之前,请先查看这次 run 的状态,或者重新接上它。',
712
799
  'notice.failure.quota.fiveHour': '你的 5 小时额度已用完',
713
800
  'notice.failure.quota.weekly': '你的每周额度已用完',
714
801
  'notice.failure.quota.budgetPersonal': '你的个人预算已用完',
@@ -754,6 +841,7 @@ const ZH = {
754
841
  'rules.issue.behavior': '这条规则无效:它的行为既不是 deny 也不是 ask,所以永远不会触发',
755
842
  'rules.issue.commandRule': '这条规则无效:命令模式被命令规则校验器拒绝了',
756
843
  'rules.issue.entryType': '这份 allow 列表无效:它必须是规则字符串的列表,而它本身或其中某一项不是字符串',
844
+ 'rules.issue.nameAmbiguous': '这条规则无效:它写的名字同时对上了这个工具提供的多个取值,这些取值只在大小写、空格或标点上不同,分不出它指的是哪一个 —— 请写成确切的那一个',
757
845
  'rules.issue.allowRule': '只写 deny 或 ask 的规则集里不支持 allow 规则 —— 常驻批准应放在 allow 列表里',
758
846
  'rules.issue.paramUnknown': '这条参数规则不支持:这个工具没有这样的参数,所以它永远匹配不上',
759
847
  'rules.issue.paramNonScalar': '这条参数规则不支持:该参数是对象或数组,所以它永远匹配不上',
@@ -775,8 +863,37 @@ const ZH = {
775
863
  'model.probe.verdict.noToken': '模型服务有响应,但它可能过载了:没有发出任何 token',
776
864
  'model.probe.verdict.noTokenWaited': '模型服务有响应,但它可能过载了:{time} 内没有发出任何 token',
777
865
  'model.probe.verdict.other': '模型服务给出了意料之外的响应{http}',
778
- 'session.humanTurn.imageUnknownVision.one': '随这条消息发出了一张用 @ 提及的图片,但引擎的模型列表没有说明这条消息所用的模型是否接受图片输入 —— 如果不接受,图片可能被丢弃,或这条消息可能被拒绝',
779
- 'session.humanTurn.imageUnknownVision.other': '随这条消息发出了 {count} 张用 @ 提及的图片,但引擎的模型列表没有说明这条消息所用的模型是否接受图片输入 —— 如果不接受,图片可能被丢弃,或这条消息可能被拒绝',
866
+ 'session.humanTurn.imageUnknownVision.one': '随这条消息发出了一张图片,但引擎的模型列表没有说明这条消息所用的模型是否接受图片输入 —— 如果不接受,图片可能被丢弃,或这条消息可能被拒绝',
867
+ 'session.humanTurn.imageUnknownVision.other': '随这条消息发出了 {count} 张图片,但引擎的模型列表没有说明这条消息所用的模型是否接受图片输入 —— 如果不接受,图片可能被丢弃,或这条消息可能被拒绝',
868
+ 'session.humanTurn.modelFragment': '({model})',
869
+ 'session.humanTurn.refused.empty': '没有发送:一条消息需要有它自己的文字 —— 图片或附件不能单独发送',
870
+ 'session.humanTurn.refused.malformedInput': '没有发送:客户端读不懂要发送的这条消息 —— 这是客户端的问题,不是你的消息有问题',
871
+ 'session.humanTurn.refused.malformedItem': '没有发送:这条消息里有一项读不懂 —— 这是客户端的问题,不是你的消息有问题',
872
+ 'session.humanTurn.refused.duplicateUuid': '没有发送:这一批里有两项带着同一个编号 —— 这是客户端的问题,不是你的消息有问题',
873
+ 'session.humanTurn.refused.riderCollidesPrimary': '没有发送:某一项随行内容的编号与另一项本身的编号相同 —— 这是客户端的问题,不是你的消息有问题',
874
+ 'session.humanTurn.refused.oversize': '没有发送:这条消息太大,即使把每个附件都缩成引用形也发不出去 —— 请缩短消息或少附一些内容',
875
+ 'session.humanTurn.held.noText': '这条消息已留队,等当前这一轮结束后作为新消息发出:它没有可以并进进行中这一轮的文字',
876
+ 'session.humanTurn.held.reminderTag': '这条消息已留队,等当前这一轮结束后作为新消息发出:它的文字里含有保留标签,不能并进进行中的这一轮',
877
+ 'session.humanTurn.held.controlChar': '这条消息已留队,等当前这一轮结束后作为新消息发出:它的文字里含有控制字符,不能并进进行中的这一轮',
878
+ 'session.humanTurn.held.tooLong': '这条消息已留队,等当前这一轮结束后作为新消息发出:它的文字比并进进行中这一轮的补话所允许的更长',
879
+ 'session.humanTurn.degraded.visionNo.one': '有 1 张图片没有发送:这只模型{model}不能看图',
880
+ 'session.humanTurn.degraded.visionNo.other': '有 {count} 张图片没有发送:这只模型{model}不能看图',
881
+ 'session.humanTurn.degraded.imageTooLarge.one': '有 1 张图片没有发送:它超过了引擎接受的单张图片大小',
882
+ 'session.humanTurn.degraded.imageTooLarge.other': '有 {count} 张图片没有发送:每张都超过了引擎接受的单张图片大小',
883
+ 'session.humanTurn.degraded.seatCount.one': '有 1 张图片没有发送:一条消息能带的图片数量有限',
884
+ 'session.humanTurn.degraded.seatCount.other': '有 {count} 张图片没有发送:一条消息能带的图片数量有限',
885
+ 'session.humanTurn.degraded.seatTotal.one': '有 1 张图片没有发送:这条消息里的图片合起来太大',
886
+ 'session.humanTurn.degraded.seatTotal.other': '有 {count} 张图片没有发送:这条消息里的图片合起来太大',
887
+ 'session.humanTurn.degraded.bodyBudget.one': '有 1 项附带内容发出时没有带上内容:这条消息太大,无法完整发送',
888
+ 'session.humanTurn.degraded.bodyBudget.other': '有 {count} 项附带内容发出时没有带上内容:这条消息太大,无法完整发送',
889
+ 'session.humanTurn.degraded.steerAdmission.one': '有 1 项附带内容只以引用形发出:它的内容不能并进进行中的这一轮',
890
+ 'session.humanTurn.degraded.steerAdmission.other': '有 {count} 项附带内容只以引用形发出:它们的内容不能并进进行中的这一轮',
891
+ 'session.humanTurn.degraded.noImageSeat.one': '有 1 张图片没有发送:进行中的这一轮不能再加图片 —— 请在这一轮结束后作为新消息发送',
892
+ 'session.humanTurn.degraded.noImageSeat.other': '有 {count} 张图片没有发送:进行中的这一轮不能再加图片 —— 请在这一轮结束后作为新消息发送',
893
+ 'session.humanTurn.degraded.noAttachmentIdSeat.one': '有 1 个上传文件没有附上:进行中的这一轮不能再加文件 —— 请在这一轮结束后作为新消息发送',
894
+ 'session.humanTurn.degraded.noAttachmentIdSeat.other': '有 {count} 个上传文件没有附上:进行中的这一轮不能再加文件 —— 请在这一轮结束后作为新消息发送',
895
+ 'session.humanTurn.printVision.no': '这只模型{model}不能看图,所以这条提示里的图片没有发送',
896
+ 'session.humanTurn.printVision.unknown': '引擎的模型列表没有说明这只模型{model}是否接受图片输入 —— 这条提示里的图片仍然发出了;如果它不接受,图片可能被丢弃,或这一发可能被拒绝',
780
897
  'config.scenarioRefusal.source.ruling': ',由配置中心指派给你,',
781
898
  'config.scenarioRefusal.source.deployment': ',这个部署的缺省场景,',
782
899
  'config.scenarioRefusal.dangling': '这个部署解析不了你的场景:场景{name}{from}在这里不存在,所以凡是依赖你场景的一切它都拒绝 —— 没有指明场景的新运行,以及本会话的 MCP 服务器名单 · 请让运维这台引擎的人修复场景指派',
@@ -823,18 +940,88 @@ const ZH = {
823
940
  'notice.wireRefusal.hostPosture.both': '引擎在任何东西运行之前就拒绝了这个请求:请求既要求 shell 继承这台机器的整份环境,又要求 bypassPermissions,而这个部署至少拒绝了其中一项;拒绝并没有说明是哪一项 · {notLocal};请去掉其中一项或两项后重新发送(整份环境设置只在单用户部署上才被采纳)',
824
941
  'notice.wireRefusal.hostPosture.unattributed': '引擎在任何东西运行之前就拒绝了这个请求:这个部署不接受请求里只有单用户部署才能使用的某项设置;引擎自己的消息会点名它 · {notLocal};请去掉那项设置后重新发送',
825
942
  'notice.wireRefusal.autonomyLane': '引擎没有启动这次 leader 运行:这个部署运行在只做计划的自主档,而 leader 运行没有办法让它的计划被审阅,所以什么也没有启动 · 请改为作为普通运行提交这项工作,或请运维这台引擎的人更改它的自主设置',
826
- 'notice.wireRefusal.userAttachment': '这条消息没有发出:引擎拒绝了它带的文件 —— 这些文件连同消息,超过了它在这个模型上一次请求能容纳的量,或者其中某一个的形式它不接受 · 没有启动任何东西,你的草稿还保留着 · 请去掉一些附件或改附更小的部分,然后再发一次',
827
- 'notice.wireRefusal.userInvokedSkill': '引擎没有启动这次运行:为它点名的某个技能不是这次运行已加载的技能,或这次运行关闭了技能 · 没有启动任何东西,你的草稿还保留着 · 请核对技能名,或加载那个技能,然后再发一次',
943
+ 'notice.wireRefusal.unsupportedRule': '引擎拒绝了这个请求,所以其中任何内容都没有生效:里面有一条规则是引擎不支持的写法 —— {detail} · 请删掉或改写那条规则(要整只拦下一个工具,请只写工具名),再重新发送',
944
+ 'notice.wireRefusal.unsupportedRule.other': '引擎拒绝了这个请求,所以其中任何内容都没有生效:里面有 {count} 条规则是引擎不支持的写法 —— {detail} · 请删掉或改写这些规则(要整只拦下一个工具,请只写工具名),再重新发送',
945
+ 'notice.wireRefusal.unsupportedRule.stored': '引擎拒绝继续这件工作:为它保存的请求里有一条规则是引擎不支持的写法 —— {detail} · 它无法按保存的样子继续。请删掉或改写那条规则(要整只拦下一个工具,请只写工具名);若这件工作仍停驻着,请先取消它,然后作为新请求重新提交',
946
+ 'notice.wireRefusal.unsupportedRule.stored.other': '引擎拒绝继续这件工作:为它保存的请求里有 {count} 条规则是引擎不支持的写法 —— {detail} · 它无法按保存的样子继续。请删掉或改写这些规则(要整只拦下一个工具,请只写工具名);若这件工作仍停驻着,请先取消它,然后作为新请求重新提交',
947
+ 'notice.prepareRefusal.draftKept': '你的草稿还保留着',
948
+ 'notice.prepareRefusal.mcpServerNameCollision': '引擎在准备这一跑时拒绝了它:为它声明的两台 MCP 服务器分不出彼此 —— 同一个名字写了两次,或名字被引擎转成了同一个工具名前缀(例如“a.b”与“a_b”),工具名会撞在一起 · 引擎自己的报错文字会点名它们 · 同样的请求再发一次仍会被同样拒绝;请在配置这一跑 MCP 服务器的地方给其中一台改个名字,或移除其中一台(若是部署声明的,请找运维这台引擎的人),然后重新发送',
828
949
  'notice.retry.source.unifiedHeader': '依据模型服务的额度响应头判定',
829
950
  'notice.retry.source.providerCode': '依据模型服务的错误码判定',
830
951
  'notice.retry.source.status': '仅依据 HTTP 状态码判定',
952
+ 'session.toolResult.media.kind.image': '图像',
953
+ 'session.toolResult.media.kind.document': '文档',
954
+ 'session.toolResult.media.notDelivered.descriptor': '[{kind}未送达:{mimeType},{bytes} 字节]',
955
+ 'session.toolResult.media.notDelivered.descriptorNoMime': '[{kind}未送达:{bytes} 字节]',
956
+ 'session.toolResult.media.notDelivered.omitted.one': '[{blocks} 个媒体块未送达:共 {bytes} 字节]',
957
+ 'session.toolResult.media.notDelivered.omitted.other': '[{blocks} 个媒体块未送达:共 {bytes} 字节]',
958
+ 'session.workflowResume.line': '续跑:{detail}',
959
+ 'session.workflowResume.counts': '日志里 {journaled} 条结果,回放了 {replayed} 条',
960
+ 'session.workflowResume.countsOnly': '回放了 {replayed} 条日志结果',
961
+ 'session.workflowResume.noJournal': '没有找到日志条目 —— 什么也没回放,整个脚本重新实跑',
962
+ 'session.workflowResume.stopAt': '回放停在第 {ordinal} 个 agent({reason})—— 这一步及之后的每一步都是重新实跑',
963
+ 'session.workflowResume.stopAtNoReason': '回放停在第 {ordinal} 个 agent —— 这一步及之后的每一步都是重新实跑',
964
+ 'session.workflowResume.stop': '回放中止({reason})—— 这一步及之后的每一步都是重新实跑',
965
+ 'notice.providerRejection.quotaExhausted': '模型服务商拒绝了这次请求(HTTP {status}):在有人处理或用量窗口重置之前,这个账号无法被该模型服务响应 —— 请检查服务商账号,或换一个模型。',
966
+ 'notice.usageLimit.autoResume.fired': '用量额度已恢复 · 现在继续',
967
+ 'notice.usageLimit.autoResume.reset': '用量额度已重置 · 按 enter 继续',
968
+ 'notice.usageLimit.autoResume.breaker': '连续触及用量上限,已停止自动继续',
969
+ 'notice.usageLimit.autoResume.superseded': '已跳过自动继续 · 你先发送了另一条消息',
970
+ 'notice.usageLimit.autoResume.notReplayable': '此消息无法自动继续 · 它不能原样重发',
971
+ 'notice.usageLimit.autoResume.contextChanged': '已跳过自动继续 · 开启时所在的上下文已变化(会话、工作目录、历史或权限模式)',
972
+ 'notice.usageLimit.autoResume.escaped': '已取消自动继续 · 用 /rate-limit-options 可重新开启',
973
+ 'notice.usageLimit.autoResume.horizon': '已触及用量上限 · 将在 24 小时以后重置 · 用 /rate-limit-options 可仍然等待',
974
+ 'notice.usageLimit.autoResume.armed.at': '已触及用量上限 · 将于 {time} 自动继续 · 按 esc 取消',
975
+ 'notice.usageLimit.autoResume.armed.shortly': '已触及用量上限 · 即将自动继续 · 按 esc 取消',
976
+ 'notice.usageLimit.autoResume.option.cancel': '停止并等待额度重置',
977
+ 'notice.usageLimit.autoResume.option.cancelAuto': '停止自动继续',
978
+ 'notice.usageLimit.autoResume.option.auto': '重置后自动继续',
979
+ 'notice.usageLimit.autoResume.option.autoHorizon': '重置后自动继续(额度将在 24 小时以后重置)',
980
+ 'notice.usageLimit.autoResume.disabled.breaker': '连续触及用量上限后,自动继续已停止',
981
+ 'notice.usageLimit.autoResume.disabled.notReplayable': '此消息不能原样重发(含附件或是一条命令)',
982
+ 'notice.usageLimit.autoResume.disabled.contextChanged': '开启时所在的上下文已不存在',
983
+ 'notice.usageLimit.autoResume.disabled.noResetInstant': '这个额度窗口没有预定的重置时间',
984
+ 'notice.usageLimit.autoResume.disabled.nothingWaiting': '没有因用量上限而待发送的消息',
985
+ 'session.selfHeal.row.interrupted.settled': '你中断的那一轮已在引擎上停稳(运行 {taskId}),sema 现在把你的消息作为新一轮发送。',
986
+ 'session.selfHeal.row.interrupted.stillFinishing': '你中断的那一轮仍在引擎上收尾(运行 {taskId},已等 {waited}),你的消息没有发出。稍等片刻后再发一次。',
987
+ 'session.rewind.conversationOnly.withCodeRoute': '只回退了对话 —— 这台引擎没有确认能在组合回退里恢复文件;要回退文件,请再运行 /rewind 并选择「Restore code」。',
988
+ 'session.rewind.conversationOnly.noCodeRoute': '只回退了对话 —— 这台引擎没有确认能在组合回退里恢复文件,所以文件没有回退。',
989
+ 'config.hooks.matcher.unjudged.eventOutOfScope': '本检查不对该事件的 matcher 求值',
990
+ 'config.hooks.matcher.unjudged.notAString': '它不是字符串',
991
+ 'config.hooks.matcher.unjudged.oversize': '它太长,没法检查',
992
+ 'config.hooks.matcher.unjudged.patternUnsupported': '它用了本检查不求值的正则特性',
993
+ 'config.hooks.matcher.unjudged.overBudget': '它是一条代价过高、本检查不去求值的正则',
994
+ 'config.hooks.matcher.unjudged.unknown': '本检查读不出它',
995
+ 'doctor.wiring.fleetTranscripts.full': '后台子代对话留存:full —— 这个部署会让后台子代句柄活过引擎重启',
996
+ 'doctor.wiring.fleetTranscripts.noPromise': '后台子代对话留存:{tier} —— 这个部署不承诺后台子代句柄能活过引擎重启',
997
+ 'doctor.wiring.fleetTranscripts.unknownTier': '后台子代对话留存:未知档位(“{tier}”)—— 按「不承诺后台子代句柄能活过引擎重启」读',
998
+ 'config.attachments.refusal.credentialShapedWord': '看起来是一把凭据而不是附件清单,所以没有使用、也不在这里显示 —— 凭据不该放进这个设置。',
999
+ 'session.subagent.delegatedPrompt.absence.notOwnedAfterRestart': '这个子代的 prompt 显示不了:本进程没有记录它的对话存在哪里(这份记录只在内存里,重启后、或从别的壳续的 run 里都是空的)。',
1000
+ 'session.subagent.delegatedPrompt.absence.notInStore': '这个子代的 prompt 显示不了:引擎的会话店里没有它的会话。',
1001
+ 'session.subagent.delegatedPrompt.absence.forbidden': '这个子代的 prompt 显示不了:引擎不允许读取它的对话。',
1002
+ 'session.subagent.delegatedPrompt.absence.promptAbsent': '读到了这个子代的对话,但里面没有可显示的委派 prompt。',
1003
+ 'session.subagent.delegatedPrompt.absence.unknown': '这个子代的 prompt 这次读取不到。',
1004
+ 'rules.sessionPolicy.tighten.unknown.sessionOwnerless.noIdentity': '这个会话没有属主,为它写的规则之后永远读不回来;没有写入任何内容。',
1005
+ 'rules.sessionPolicy.tighten.unknown.storeCorrupt.noOperator': '引擎确认不了这个会话的规则当前在哪一版,拒绝盖新版本,所以没有写入任何内容。送去的条目没有问题 —— 这台部署没有运维方可以查看规则库,要由运行它的人处理。',
1006
+ 'rules.sessionPolicy.deployment.noOperator.readStoreCorrupt': '引擎确认不了这个会话的规则当前在哪一版,所以没有交出这份记录。这台部署没有运维方可以查看规则库,要由运行它的人处理。',
1007
+ 'rules.sessionPolicy.deployment.noOperator.removeLoosenForbidden': '引擎拒绝把这些条目从这个会话的规则记录里拿掉:这台引擎上只有运维方能从里面删条目,而这台部署没有运维方,所以记录没有变。请在新会话里继续。',
1008
+ 'rules.sessionPolicy.deployment.noOperator.removeReadStoreCorrupt': '引擎确认不了这个会话的规则当前在哪一版,所以没有改动任何内容。这台部署没有运维方可以查看规则库,要由运行它的人处理。',
1009
+ 'rules.sessionPolicy.deployment.noOperator.removeWriteStoreCorrupt': '引擎确认不了这个会话的规则当前在哪一版,拒绝盖新版本,所以没有改动任何内容。这台部署没有运维方可以查看规则库,要由运行它的人处理。',
1010
+ 'config.hooks.plan.reason.compactionLocalFallback': '这一次压缩的摘要因引擎会话不可用而在本客户端本地生成,引擎不会替它运行这只 hook,所以由本客户端自己运行',
1011
+ 'session.hooks.compactTransition.disclosure.engineOutcomeUnknown': '摘要改走本客户端时,压缩请求已经发给了引擎,所以引擎有没有运行压缩 hook 这里判不了,本客户端也没有再运行一遍。',
1012
+ 'session.hooks.compactTransition.disclosure.neitherRan': '这一次压缩 hook 没有运行:引擎没有在这里压缩,本客户端的本地摘要也没能启动。引擎之后若仍会压缩,到时会运行它们。',
831
1013
  };
832
1014
  export const ZH_MESSAGES = Object.freeze(ZH);
833
1015
  export const TERM_SLOTS = Object.freeze({
834
1016
  'config.mcp.toolAxesInvalid': ['toolAxes'],
1017
+ 'config.mcp.toolFacesInvalid': ['toolFaces'],
835
1018
  'config.mcp.cloudToolAxesInvalid': ['toolAxes'],
1019
+ 'config.mcp.cloudToolFacesInvalid': ['toolFaces'],
836
1020
  'config.mcp.elicitationInvalid': ['elicitation'],
837
1021
  'config.mcp.cloudElicitationInvalid': ['elicitation'],
1022
+ 'config.skills.cloudToolListInvalid': ['allowedTools', 'disallowedTools'],
1023
+ 'config.mcp.allowToolsInvalid': ['allowTools'],
1024
+ 'config.mcp.cloudAllowToolsInvalid': ['allowTools'],
838
1025
  'config.mcp.identityHeadersBothSet': ['principalHeader', 'assertionHeader'],
839
1026
  'approval.settle.cause.runCancelled': ['run'],
840
1027
  'approval.settle.cause.runExited': ['run'],
@@ -877,6 +1064,8 @@ export const TERM_SLOTS = Object.freeze({
877
1064
  'resume.refusal.park.interactiveBusy': ['parked', 'run'],
878
1065
  'resume.refusal.park.blockedPrint': ['run'],
879
1066
  'resume.refusal.park.blockedInteractive': ['run'],
1067
+ 'approval.askPark.autoReopenBlocked.policyInteractive': ['run'],
1068
+ 'approval.askPark.autoReopenBlocked.policyPrint': ['run'],
880
1069
  'session.selfHeal.handle.run': ['run'],
881
1070
  'session.selfHeal.decidePathClause': ['run'],
882
1071
  'session.selfHeal.lastActivity': ['run'],
@@ -936,6 +1125,8 @@ export const TERM_SLOTS = Object.freeze({
936
1125
  'session.selfHeal.row.notParked.inFlight': ['run', 'turn'],
937
1126
  'session.selfHeal.row.stateUnknown': ['run', 'turn'],
938
1127
  'session.selfHeal.endRun.engine': ['run'],
1128
+ 'session.selfHeal.endRun.engineInteractive': ['run'],
1129
+ 'session.selfHeal.endRun.engineInteractive.noId': ['run'],
939
1130
  'session.selfHeal.row.steerFailed.runEnded': ['run', 'turn'],
940
1131
  'session.selfHeal.headless.decide': ['parked', 'run'],
941
1132
  'session.selfHeal.headless.statusOnly': ['run'],
@@ -967,6 +1158,7 @@ export const TERM_SLOTS = Object.freeze({
967
1158
  'notice.failure.headline.timeout': ['run'],
968
1159
  'notice.failure.headline.parked': ['parked', 'run', 'turn'],
969
1160
  'notice.failure.headline.internal': ['turn'],
1161
+ 'notice.failure.headline.causeUnreadable': ['run'],
970
1162
  'notice.failure.settings.safety': ['turn'],
971
1163
  'notice.wireRefusal.hostPosture.writeFace': ['bypassPermissions'],
972
1164
  'notice.wireRefusal.hostPosture.both': ['bypassPermissions'],
@@ -31,7 +31,7 @@ function isMintedRef(v) {
31
31
  return false;
32
32
  try {
33
33
  const d = Object.getOwnPropertyDescriptor(v, MESSAGE_REF_MARK);
34
- return d !== undefined && 'value' in d && d.value === true;
34
+ return d !== undefined && Object.hasOwn(d, 'value') && d.value === true;
35
35
  }
36
36
  catch {
37
37
  return false;
@@ -41,14 +41,14 @@ function lookup(lang, key) {
41
41
  if (typeof key !== 'string')
42
42
  return undefined;
43
43
  const d = Object.getOwnPropertyDescriptor(CATALOGS[lang], key);
44
- return d !== undefined && 'value' in d && typeof d.value === 'string' ? d.value : undefined;
44
+ return d !== undefined && Object.hasOwn(d, 'value') && typeof d.value === 'string' ? d.value : undefined;
45
45
  }
46
46
  function paramOf(params, name) {
47
47
  if (params === null || typeof params !== 'object')
48
48
  return undefined;
49
49
  try {
50
50
  const d = Object.getOwnPropertyDescriptor(params, name);
51
- return d !== undefined && 'value' in d ? d.value : undefined;
51
+ return d !== undefined && Object.hasOwn(d, 'value') ? d.value : undefined;
52
52
  }
53
53
  catch {
54
54
  return undefined;