@sema-agent/client-core 0.77.1 → 0.78.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 (382) hide show
  1. package/CHANGELOG.md +42 -1
  2. package/README.md +6 -5
  3. package/dist/abortableSleep.d.ts +0 -28
  4. package/dist/abortableSleep.js +0 -28
  5. package/dist/adapt/arms.d.ts +0 -46
  6. package/dist/adapt/arms.js +9 -544
  7. package/dist/adapt/ids.d.ts +0 -58
  8. package/dist/adapt/ids.js +0 -63
  9. package/dist/adapt/instanceLedger.d.ts +0 -25
  10. package/dist/adapt/instanceLedger.js +0 -20
  11. package/dist/adapt/panelTasks.d.ts +0 -69
  12. package/dist/adapt/panelTasks.js +0 -95
  13. package/dist/adapt/textSegmentAuthority.d.ts +1 -137
  14. package/dist/adapt/textSegmentAuthority.js +0 -54
  15. package/dist/adapt/textStream.d.ts +0 -252
  16. package/dist/adapt/textStream.js +2 -281
  17. package/dist/adapt/toolCards.d.ts +0 -46
  18. package/dist/adapt/toolCards.js +0 -23
  19. package/dist/adapt/turnFlags.d.ts +0 -54
  20. package/dist/adapt/turnFlags.js +1 -17
  21. package/dist/adapt/wireShapes.d.ts +0 -92
  22. package/dist/adapt/wireShapes.js +0 -83
  23. package/dist/adapt.d.ts +0 -55
  24. package/dist/adapt.js +1 -120
  25. package/dist/adapter/activeRunSelfHeal.d.ts +22 -515
  26. package/dist/adapter/activeRunSelfHeal.js +10 -625
  27. package/dist/adapter/downstream/eventToSdkMessage.d.ts +2 -305
  28. package/dist/adapter/downstream/eventToSdkMessage.js +2 -867
  29. package/dist/adapter/downstream/terminalToSdkResult.d.ts +2 -314
  30. package/dist/adapter/downstream/terminalToSdkResult.js +13 -560
  31. package/dist/adapter/downstream/turnUsageToModelUsage.d.ts +0 -95
  32. package/dist/adapter/downstream/turnUsageToModelUsage.js +2 -31
  33. package/dist/adapter/runStream.d.ts +0 -206
  34. package/dist/adapter/runStream.js +6 -596
  35. package/dist/adapter/types.d.ts +0 -111
  36. package/dist/adapter/types.js +0 -29
  37. package/dist/agentSession/backgroundView.d.ts +0 -106
  38. package/dist/agentSession/backgroundView.js +3 -49
  39. package/dist/agentSession/contract.d.ts +0 -98
  40. package/dist/agentSession/contract.js +0 -12
  41. package/dist/agentsWireCaps.d.ts +0 -72
  42. package/dist/agentsWireCaps.js +4 -72
  43. package/dist/approvalsStreamLiveCapability.d.ts +0 -25
  44. package/dist/approvalsStreamLiveCapability.js +0 -31
  45. package/dist/argvFlagValue.d.ts +0 -33
  46. package/dist/argvFlagValue.js +3 -35
  47. package/dist/attachmentsWireCaps.d.ts +0 -127
  48. package/dist/attachmentsWireCaps.js +0 -144
  49. package/dist/autoModeUnavailable.d.ts +0 -120
  50. package/dist/autoModeUnavailable.js +0 -144
  51. package/dist/classifierStatus.d.ts +0 -72
  52. package/dist/classifierStatus.js +0 -167
  53. package/dist/classifierVerdictWire.d.ts +0 -54
  54. package/dist/classifierVerdictWire.js +0 -133
  55. package/dist/clientContextWireCaps.d.ts +0 -37
  56. package/dist/clientContextWireCaps.js +0 -36
  57. package/dist/clientSlice.d.ts +0 -63
  58. package/dist/clientSlice.js +0 -45
  59. package/dist/cloudConfigWireCaps.d.ts +0 -86
  60. package/dist/cloudConfigWireCaps.js +2 -65
  61. package/dist/compensations.d.ts +0 -52
  62. package/dist/compensations.js +2 -63
  63. package/dist/controlRouter.d.ts +2 -208
  64. package/dist/controlRouter.js +1 -129
  65. package/dist/coreValuePorts.d.ts +0 -84
  66. package/dist/coreValuePorts.js +0 -29
  67. package/dist/decideReceipt.d.ts +0 -110
  68. package/dist/decideReceipt.js +0 -84
  69. package/dist/detachWire.d.ts +0 -130
  70. package/dist/detachWire.js +1 -130
  71. package/dist/deviceExecutorManagementCapability.d.ts +2 -35
  72. package/dist/deviceExecutorManagementCapability.js +1 -37
  73. package/dist/diagnostics.d.ts +0 -8
  74. package/dist/diagnostics.js +0 -8
  75. package/dist/diff/patch.d.ts +0 -17
  76. package/dist/diff/patch.js +0 -19
  77. package/dist/effectiveFacts.d.ts +0 -40
  78. package/dist/effectiveFacts.js +0 -22
  79. package/dist/effortWire.d.ts +0 -11
  80. package/dist/effortWire.js +0 -12
  81. package/dist/engineAgentPanelStore.d.ts +0 -169
  82. package/dist/engineAgentPanelStore.js +13 -293
  83. package/dist/engineCapReader.d.ts +0 -62
  84. package/dist/engineCapReader.js +1 -43
  85. package/dist/engineCapsCache.d.ts +0 -177
  86. package/dist/engineCapsCache.js +0 -199
  87. package/dist/engineCapsGenerationGuard.d.ts +0 -2
  88. package/dist/engineCapsGenerationGuard.js +0 -11
  89. package/dist/engineErrorCodes.d.ts +1 -316
  90. package/dist/engineErrorCodes.js +0 -427
  91. package/dist/engineHttpTools.d.ts +0 -29
  92. package/dist/engineHttpTools.js +0 -29
  93. package/dist/engineIdentity.d.ts +0 -83
  94. package/dist/engineIdentity.js +0 -88
  95. package/dist/engineInlineTaskStats.d.ts +0 -57
  96. package/dist/engineInlineTaskStats.js +1 -42
  97. package/dist/engineNoticeCodes.d.ts +0 -190
  98. package/dist/engineNoticeCodes.js +0 -182
  99. package/dist/engineSessionParam.d.ts +0 -30
  100. package/dist/engineSessionParam.js +0 -52
  101. package/dist/engineToolLabelStore.d.ts +0 -29
  102. package/dist/engineToolLabelStore.js +0 -31
  103. package/dist/engineWireSdk.d.ts +0 -90
  104. package/dist/engineWireSdk.js +0 -74
  105. package/dist/engineWireTarget.d.ts +0 -14
  106. package/dist/engineWireTarget.js +0 -39
  107. package/dist/env/localeGeo.d.ts +0 -12
  108. package/dist/env/localeGeo.js +2 -77
  109. package/dist/env/localeTag.d.ts +0 -34
  110. package/dist/env/localeTag.js +0 -32
  111. package/dist/env/uiLanguage.d.ts +0 -13
  112. package/dist/env/uiLanguage.js +0 -25
  113. package/dist/envFlag.d.ts +0 -37
  114. package/dist/envFlag.js +0 -40
  115. package/dist/executionLaneCapability.d.ts +0 -48
  116. package/dist/executionLaneCapability.js +0 -54
  117. package/dist/finalVerifyWire.d.ts +0 -67
  118. package/dist/finalVerifyWire.js +3 -43
  119. package/dist/fleet/fleetLedger.d.ts +0 -308
  120. package/dist/fleet/fleetLedger.js +10 -429
  121. package/dist/fleet/fleetProjection.d.ts +0 -240
  122. package/dist/fleet/fleetProjection.js +0 -189
  123. package/dist/fleet/fleetRowAgentType.d.ts +0 -6
  124. package/dist/fleet/fleetRowAgentType.js +1 -32
  125. package/dist/fleet/workflowSizeWarning.d.ts +0 -47
  126. package/dist/fleet/workflowSizeWarning.js +1 -46
  127. package/dist/fleetAgentPanelProjection.d.ts +0 -48
  128. package/dist/fleetAgentPanelProjection.js +8 -173
  129. package/dist/fleetTaskDesc.d.ts +0 -39
  130. package/dist/fleetTaskDesc.js +0 -69
  131. package/dist/forkWireCaps.d.ts +0 -23
  132. package/dist/forkWireCaps.js +1 -24
  133. package/dist/gateOutcome.d.ts +0 -140
  134. package/dist/gateOutcome.js +0 -85
  135. package/dist/gateVocabulary.d.ts +0 -114
  136. package/dist/gateVocabulary.js +3 -161
  137. package/dist/goalStopHook.d.ts +0 -127
  138. package/dist/goalStopHook.js +0 -178
  139. package/dist/headlessPermissionModeWire.d.ts +0 -76
  140. package/dist/headlessPermissionModeWire.js +1 -155
  141. package/dist/headlessReconnectWire.d.ts +0 -84
  142. package/dist/headlessReconnectWire.js +13 -67
  143. package/dist/hitl/approvalDecisionNoteAudit.d.ts +0 -49
  144. package/dist/hitl/approvalDecisionNoteAudit.js +0 -56
  145. package/dist/hitl/approvalOutcomeNote.d.ts +0 -2
  146. package/dist/hitl/approvalOutcomeNote.js +0 -20
  147. package/dist/hitl/approvalResolution.d.ts +0 -113
  148. package/dist/hitl/approvalResolution.js +0 -66
  149. package/dist/hitl/approvalsFeed.d.ts +0 -183
  150. package/dist/hitl/approvalsFeed.js +12 -243
  151. package/dist/hitl/armedGateRegistry.d.ts +0 -55
  152. package/dist/hitl/armedGateRegistry.js +0 -146
  153. package/dist/hitl/askGateWire.d.ts +0 -86
  154. package/dist/hitl/askGateWire.js +1 -95
  155. package/dist/hitl/askParkRowRouting.d.ts +0 -123
  156. package/dist/hitl/askParkRowRouting.js +1 -89
  157. package/dist/hitl/crashConverged.d.ts +0 -148
  158. package/dist/hitl/crashConverged.js +0 -214
  159. package/dist/hitl/editedRuleTextPrecheck.d.ts +0 -109
  160. package/dist/hitl/editedRuleTextPrecheck.js +0 -71
  161. package/dist/hitl/frameRouter.d.ts +0 -134
  162. package/dist/hitl/frameRouter.js +6 -378
  163. package/dist/hitl/gateIdentity.d.ts +0 -39
  164. package/dist/hitl/gateIdentity.js +0 -41
  165. package/dist/hitl/gateLedger.d.ts +0 -267
  166. package/dist/hitl/gateLedger.js +0 -121
  167. package/dist/hitl/hitlBridge.d.ts +7 -431
  168. package/dist/hitl/hitlBridge.js +7 -476
  169. package/dist/hitl/hitlHostSurface.d.ts +0 -150
  170. package/dist/hitl/hitlHostSurface.js +0 -169
  171. package/dist/hitl/livePendingAsk.d.ts +0 -91
  172. package/dist/hitl/livePendingAsk.js +0 -74
  173. package/dist/hitl/localAllowRule.d.ts +0 -62
  174. package/dist/hitl/localAllowRule.js +1 -33
  175. package/dist/hitl/parkOwnership.d.ts +0 -56
  176. package/dist/hitl/parkOwnership.js +0 -22
  177. package/dist/hitl/parkResolver.d.ts +3 -88
  178. package/dist/hitl/parkResolver.js +8 -349
  179. package/dist/hitl/parkRowBirthWait.d.ts +2 -26
  180. package/dist/hitl/parkRowBirthWait.js +3 -93
  181. package/dist/hitl/persistedRulesWire.d.ts +23 -371
  182. package/dist/hitl/persistedRulesWire.js +62 -329
  183. package/dist/hitl/planReviewWire.d.ts +4 -176
  184. package/dist/hitl/planReviewWire.js +9 -312
  185. package/dist/hitl/resumeRunningCard.d.ts +0 -105
  186. package/dist/hitl/resumeRunningCard.js +0 -105
  187. package/dist/hitl/sessionPolicyWire.d.ts +11 -191
  188. package/dist/hitl/sessionPolicyWire.js +0 -149
  189. package/dist/hitl/suspendedReopen.d.ts +3 -24
  190. package/dist/hitl/suspendedReopen.js +0 -14
  191. package/dist/hitl/toolApprovalWire.d.ts +5 -1308
  192. package/dist/hitl/toolApprovalWire.js +5 -945
  193. package/dist/hooksWireCaps.d.ts +0 -38
  194. package/dist/hooksWireCaps.js +0 -190
  195. package/dist/host.d.ts +0 -105
  196. package/dist/host.js +0 -33
  197. package/dist/hostEnv.d.ts +0 -14
  198. package/dist/hostEnv.js +0 -13
  199. package/dist/imagesWireCaps.d.ts +0 -21
  200. package/dist/imagesWireCaps.js +0 -22
  201. package/dist/index.d.ts +0 -134
  202. package/dist/index.js +0 -476
  203. package/dist/interactiveHalt.d.ts +5 -153
  204. package/dist/interactiveHalt.js +0 -111
  205. package/dist/interactiveToolsWire.d.ts +0 -62
  206. package/dist/interactiveToolsWire.js +1 -67
  207. package/dist/leaderConflict.d.ts +0 -59
  208. package/dist/leaderConflict.js +0 -48
  209. package/dist/limitsWire.d.ts +0 -125
  210. package/dist/limitsWire.js +2 -120
  211. package/dist/liveInitToolFace.d.ts +0 -77
  212. package/dist/liveInitToolFace.js +1 -109
  213. package/dist/liveModelCatalog.d.ts +0 -52
  214. package/dist/liveModelCatalog.js +0 -48
  215. package/dist/liveQuestionStore.d.ts +0 -87
  216. package/dist/liveQuestionStore.js +1 -56
  217. package/dist/mcpLiveness.d.ts +0 -151
  218. package/dist/mcpLiveness.js +0 -122
  219. package/dist/mcpPanel.d.ts +0 -104
  220. package/dist/mcpPanel.js +0 -49
  221. package/dist/mcpReconnect.d.ts +0 -58
  222. package/dist/mcpReconnect.js +0 -69
  223. package/dist/mcpWireCaps.d.ts +0 -55
  224. package/dist/mcpWireCaps.js +1 -13
  225. package/dist/memoryComplianceCapability.d.ts +3 -57
  226. package/dist/memoryComplianceCapability.js +0 -57
  227. package/dist/memoryEntriesWire.d.ts +6 -198
  228. package/dist/memoryEntriesWire.js +0 -144
  229. package/dist/memoryOriginCapability.d.ts +3 -53
  230. package/dist/memoryOriginCapability.js +0 -50
  231. package/dist/memorySpecWire.d.ts +0 -116
  232. package/dist/memorySpecWire.js +0 -150
  233. package/dist/model/catalog.d.ts +0 -111
  234. package/dist/model/catalog.js +0 -87
  235. package/dist/model/catalogLoader.d.ts +0 -114
  236. package/dist/model/catalogLoader.js +2 -139
  237. package/dist/model/modelSupplyRules.d.ts +1 -55
  238. package/dist/model/modelSupplyRules.js +0 -62
  239. package/dist/model/providerAuth.d.ts +0 -103
  240. package/dist/model/providerAuth.js +2 -38
  241. package/dist/model/providerCatalog.d.ts +0 -45
  242. package/dist/model/providerCatalog.js +0 -37
  243. package/dist/model/providerPresets.d.ts +0 -33
  244. package/dist/model/providerPresets.js +2 -91
  245. package/dist/model/tierVocabulary.d.ts +0 -31
  246. package/dist/model/tierVocabulary.js +0 -27
  247. package/dist/modelBudgetRule.d.ts +0 -39
  248. package/dist/modelBudgetRule.js +0 -39
  249. package/dist/modelCapabilityProbe.d.ts +0 -175
  250. package/dist/modelCapabilityProbe.js +0 -147
  251. package/dist/modelWireCaps.d.ts +0 -13
  252. package/dist/modelWireCaps.js +0 -13
  253. package/dist/notifications.d.ts +0 -233
  254. package/dist/notifications.js +14 -492
  255. package/dist/oneShotWireCaps.d.ts +0 -34
  256. package/dist/oneShotWireCaps.js +0 -35
  257. package/dist/ownKey.d.ts +0 -33
  258. package/dist/ownKey.js +0 -33
  259. package/dist/panelRunningHistory.d.ts +0 -28
  260. package/dist/panelRunningHistory.js +0 -43
  261. package/dist/peerFrames.d.ts +0 -71
  262. package/dist/peerFrames.js +0 -168
  263. package/dist/peerLaneCapability.d.ts +0 -44
  264. package/dist/peerLaneCapability.js +0 -52
  265. package/dist/permissionRuleIssue.d.ts +0 -30
  266. package/dist/permissionRuleIssue.js +0 -78
  267. package/dist/permissionRulesWriteCapability.d.ts +0 -46
  268. package/dist/permissionRulesWriteCapability.js +0 -54
  269. package/dist/permissionWireCaps.d.ts +0 -37
  270. package/dist/permissionWireCaps.js +0 -37
  271. package/dist/postureKnob.d.ts +0 -71
  272. package/dist/postureKnob.js +0 -86
  273. package/dist/principalWire.d.ts +0 -17
  274. package/dist/principalWire.js +0 -17
  275. package/dist/printToolResultFrame.d.ts +0 -100
  276. package/dist/printToolResultFrame.js +0 -33
  277. package/dist/promptProfileWireCaps.d.ts +0 -13
  278. package/dist/promptProfileWireCaps.js +0 -13
  279. package/dist/readFacePosture.d.ts +0 -43
  280. package/dist/readFacePosture.js +0 -46
  281. package/dist/request/printNotification.d.ts +0 -20
  282. package/dist/request/printNotification.js +0 -55
  283. package/dist/request/taskRequest.d.ts +1 -249
  284. package/dist/request/taskRequest.js +20 -498
  285. package/dist/resumeRefusalCopy.d.ts +0 -136
  286. package/dist/resumeRefusalCopy.js +1 -117
  287. package/dist/retainBackgroundWireCaps.d.ts +0 -48
  288. package/dist/retainBackgroundWireCaps.js +0 -48
  289. package/dist/retryStatus.d.ts +2 -221
  290. package/dist/retryStatus.js +0 -107
  291. package/dist/rewindWireCaps.d.ts +0 -27
  292. package/dist/rewindWireCaps.js +0 -24
  293. package/dist/runCancelContext.d.ts +1 -20
  294. package/dist/runCancelContext.js +0 -34
  295. package/dist/runTerminal.d.ts +0 -273
  296. package/dist/runTerminal.js +0 -177
  297. package/dist/sandboxWire.d.ts +0 -38
  298. package/dist/sandboxWire.js +0 -82
  299. package/dist/scenarioWire.d.ts +0 -60
  300. package/dist/scenarioWire.js +0 -68
  301. package/dist/scratchpadWireCaps.d.ts +0 -11
  302. package/dist/scratchpadWireCaps.js +0 -32
  303. package/dist/sdkWireTransit.d.ts +0 -38
  304. package/dist/sdkWireTransit.js +0 -30
  305. package/dist/seam.d.ts +18 -853
  306. package/dist/seam.js +0 -52
  307. package/dist/seatContract.d.ts +0 -555
  308. package/dist/seatContract.js +5 -304
  309. package/dist/selfOrchestrationDenial.d.ts +0 -189
  310. package/dist/selfOrchestrationDenial.js +0 -162
  311. package/dist/selfOrchestrationWireCaps.d.ts +0 -38
  312. package/dist/selfOrchestrationWireCaps.js +0 -38
  313. package/dist/sessionMap.d.ts +0 -60
  314. package/dist/sessionMap.js +0 -37
  315. package/dist/sessionMemoryStatus.d.ts +11 -114
  316. package/dist/sessionMemoryStatus.js +0 -112
  317. package/dist/sessionModelLatch.d.ts +0 -29
  318. package/dist/sessionModelLatch.js +0 -40
  319. package/dist/sessionPolicyCapability.d.ts +3 -53
  320. package/dist/sessionPolicyCapability.js +0 -52
  321. package/dist/sessionSlot.d.ts +0 -26
  322. package/dist/sessionSlot.js +0 -17
  323. package/dist/skillsWireCaps.d.ts +0 -87
  324. package/dist/skillsWireCaps.js +0 -38
  325. package/dist/sqlEngineCapability.d.ts +0 -118
  326. package/dist/sqlEngineCapability.js +0 -134
  327. package/dist/sseIdleTriage.d.ts +0 -79
  328. package/dist/sseIdleTriage.js +1 -80
  329. package/dist/steering.d.ts +0 -54
  330. package/dist/steering.js +0 -63
  331. package/dist/subagent/engineCompactWire.d.ts +0 -34
  332. package/dist/subagent/engineCompactWire.js +4 -134
  333. package/dist/subagent/engineDelegatedPrompt.d.ts +0 -31
  334. package/dist/subagent/engineDelegatedPrompt.js +1 -103
  335. package/dist/subagent/engineRowStopGate.d.ts +0 -20
  336. package/dist/subagent/engineRowStopGate.js +0 -49
  337. package/dist/subagent/engineSubagentOutput.d.ts +0 -7
  338. package/dist/subagent/engineSubagentOutput.js +1 -51
  339. package/dist/subagent/engineSubagentResume.d.ts +2 -279
  340. package/dist/subagent/engineSubagentResume.js +2 -129
  341. package/dist/subagent/engineSubagentSteer.d.ts +0 -26
  342. package/dist/subagent/engineSubagentSteer.js +0 -63
  343. package/dist/subagent/engineSubagentTail.d.ts +0 -38
  344. package/dist/subagent/engineSubagentTail.js +2 -110
  345. package/dist/subagent/engineTaskHandleWire.d.ts +6 -67
  346. package/dist/subagent/engineTaskHandleWire.js +0 -126
  347. package/dist/subagent/subagentOwnerAbsence.d.ts +0 -2
  348. package/dist/subagent/subagentOwnerAbsence.js +0 -25
  349. package/dist/subagentContentStore.d.ts +3 -260
  350. package/dist/subagentContentStore.js +7 -540
  351. package/dist/systemReminderTag.d.ts +0 -49
  352. package/dist/systemReminderTag.js +0 -61
  353. package/dist/toolResult.d.ts +1 -211
  354. package/dist/toolResult.js +1 -358
  355. package/dist/toolRoster.d.ts +0 -140
  356. package/dist/toolRoster.js +0 -66
  357. package/dist/typePins.d.ts +0 -46
  358. package/dist/types/engineState.d.ts +0 -71
  359. package/dist/types/engineState.js +0 -16
  360. package/dist/ultracodeWireCaps.d.ts +0 -75
  361. package/dist/ultracodeWireCaps.js +0 -92
  362. package/dist/unrefTimer.d.ts +0 -27
  363. package/dist/webSearchBackendCapability.d.ts +0 -72
  364. package/dist/webSearchBackendCapability.js +0 -79
  365. package/dist/webSearchWireCaps.d.ts +0 -37
  366. package/dist/webSearchWireCaps.js +0 -34
  367. package/dist/websearch/searchProviderPresets.d.ts +0 -81
  368. package/dist/websearch/searchProviderPresets.js +0 -27
  369. package/dist/wireErrorTriage.d.ts +4 -160
  370. package/dist/wireErrorTriage.js +0 -171
  371. package/dist/wireRefusalCopy.d.ts +0 -28
  372. package/dist/wireRefusalCopy.js +0 -28
  373. package/dist/workflow.d.ts +0 -40
  374. package/dist/workflow.js +0 -52
  375. package/dist/workflowClient.d.ts +0 -122
  376. package/dist/workflowClient.js +8 -360
  377. package/dist/workflowMonitor.d.ts +2 -72
  378. package/dist/workflowMonitor.js +0 -26
  379. package/dist/writeProtectionCapability.d.ts +0 -112
  380. package/dist/writeProtectionCapability.js +0 -109
  381. package/docs/INTEGRATION-CLIENTS.md +78 -5
  382. package/package.json +3 -3
@@ -1,27 +1,6 @@
1
- /**
2
- * ⇄ B6 批搬迁(2026-07-27,设计稿 §3 B6):workflow 监视器的**状态契约**(MF-W ·
3
- * contract/MF-W-workflow-monitor.md)从 cli `src/sema/overrides/workflow-detail-dialog.tsx:118-200`
4
- * 搬入 —— 逐字,一个字段都没动。
5
- *
6
- * 🔴 **为什么类型必须先过来**:`workflowClient.projectWorkflowRun()`(同批搬入)的**产物**就是这套
7
- * 形状。类型留在一个 `.tsx` 渲染文件里,等于「库产出的东西,它的契约住在 TUI 里」——
8
- * web/桌面要消费同一份投影就得手抄一遍 shape,而手抄的那份**没有任何东西**会在它漂移时报红。
9
- * 定位公理([1832])说的「CC 皮肤形状全收本包」,指的正是这种东西。
10
- *
11
- * 🔴 **拆缝**:`workflow-detail-dialog.tsx` 本身是 Ink 渲染件(设计稿 §2 分类表「Ink 渲染」),
12
- * **留 TUI**;搬过来的只有 ① 六个契约类型 ② `agentDisplayStatus`(WPe —— 从 wire 输入词表
13
- * 派生显示态的那条**纯**规则,是本契约的消费侧半场,端端都要用)。
14
- * 留在 TUI 的:`computeVisibleWindow`(滚动窗口数学 = 视口概念,端专属)、glyph/color 映射、
15
- * 以及整棵 JSX。壳侧 shim = 那个 tsx 改成从本包 re-export 这两样,自己不再定义。
16
- */
17
1
  import type { WorkflowParkRowView } from './workflowClient.js';
18
- export type AgentState = 'start' | 'progress' | 'queued' | 'done' | 'error' | 'inactive'
19
- /** sema 超集:这条腿耐久挂在一张审批卡上(engine core 7.10.0 #642)。见上方头注。 */
20
- | 'parked';
21
- export type DisplayStatus = 'queued' | 'running' | 'done' | 'failed' | 'skipped' | 'interrupted'
22
- /** sema 超集:同上。🔴 端的 glyph/颜色映射是**穷尽形**,加这一词就必须同批加一条 case
23
- * (措辞按「waiting for approval」一类,别复用 running 的字与色)。 */
24
- | 'parked';
2
+ export type AgentState = 'start' | 'progress' | 'queued' | 'done' | 'error' | 'inactive' | 'parked';
3
+ export type DisplayStatus = 'queued' | 'running' | 'done' | 'failed' | 'skipped' | 'interrupted' | 'parked';
25
4
  export interface WorkflowToolCall {
26
5
  name: string;
27
6
  summary?: string;
@@ -36,40 +15,26 @@ export interface WorkflowAgent {
36
15
  remoteSessionId?: string;
37
16
  cached?: boolean;
38
17
  state: AgentState;
39
- /** WPe maps state→display; `skipped` distinguishes an error that was a user-skip. */
40
18
  skipped?: boolean;
41
19
  tokens?: number;
42
20
  toolCalls?: number;
43
21
  durationMs?: number;
44
22
  queuedAt?: number;
45
23
  startedAt?: number;
46
- /** ofm/C0l: `idle <t>` when running and lastProgressAt is ≥30s ago. (contract: idleSince) */
47
24
  lastProgressAt?: number;
48
25
  attempt?: number;
49
26
  lastAttemptReason?: 'throttled' | 'user-retry' | 'stalled';
50
27
  error?: string;
51
28
  agentId?: string;
52
- /**
53
- * #242 批 1(A-028.8):`ctx.agent` 调用的**稳定确定性身份**(resume-journal key,
54
- * SDK `WorkflowAgentRow.callKey`)。运行期 activity 台账的 SSE 帧(`agent_activity`)以它为键,
55
- * 而此前投影把它丢了 —— 于是 label 成了合并层唯一的钥匙,同名 agent 只能整组跳过。
56
- * 投影带出它之后,重名 label 也能精确归属;缺席(老引擎/老 run)时才回落到 label。
57
- */
58
29
  callKey?: string;
59
- /** detail "Prompt" body; promptPreview is the fallback when no transcript is loaded. */
60
30
  promptPreview?: string;
61
- /** detail "Activity" rows. */
62
31
  activity?: WorkflowToolCall[];
63
32
  lastToolName?: string;
64
33
  lastToolSummary?: string;
65
- /** detail "Outcome" body for done agents (the StructuredOutput JSON / final text). */
66
34
  resultPreview?: string;
67
35
  }
68
36
  export interface WorkflowPhase {
69
37
  title: string;
70
- /** 🔴 `parked` = 这一格里没有一条腿能自己往前走(全员不是完成就是停在审批门上)。见 `AgentState`
71
- * 的同名头注;上游今天不给 phase 铸这个词(core:「a phase or group never parks」),本包这一位有两个
72
- * 来路:①上游哪天真铸了 ⇒ 原词透出而不是折成 running;②本包从桶里的腿**推**出来。 */
73
38
  status: 'not-started' | 'running' | 'done' | 'failed' | 'parked' | 'unknown';
74
39
  doneCount: number;
75
40
  totalCount: number;
@@ -82,48 +47,13 @@ export interface WorkflowRunState {
82
47
  summary?: string;
83
48
  script: string;
84
49
  scriptPath?: string;
85
- /** 🔴 `parked`(0.63.1,additive):**前向预挂** —— engine core 7.10.0 的 run 级词表仍闭在
86
- * running|completed|failed(一条腿 park ⇒ 整只 run 按 `WorkflowAgentParkedError` 收在 `failed`),
87
- * 所以今天没有任何受支持的引擎在这一位上发 `parked`。留这条臂是为了「词真到了就原样透出」,
88
- * 绝不是说它现在会到 —— 判「这条 run 停着等人批」今天要看**腿**那一级(见 `AgentState.parked`)。 */
89
- /** 0.72.12 CC-51:`unknown`(additive)= wire 上认不出的 run 状态词;绝不再折成 running(端要渲原串请读 wire `run.status`)。 */
90
50
  status: 'running' | 'done' | 'failed' | 'stopped' | 'paused' | 'parked' | 'unknown';
91
51
  cloud?: boolean;
92
52
  agentCount: number;
93
- /** 🔴 0.73.0(BREAKING):可选。有键 ⇒ 总用量(含真 0);缺键 ⇒ 没有权威总数且有腿未报(或零条腿)—— 渲「—」,不渲 0。 */
94
53
  totalTokens?: number;
95
- /** phases as authored; the component derives the active/clamped windows itself. */
96
54
  phases: WorkflowPhase[];
97
- /**
98
- * CC-12(0.69.1;core 7.18.0 #755 / server ≥7.78.0):这条 run **负责**的 park 行(自己的 + 从被 resume 的 run 继承的),
99
- * 由 `readWorkflowParks` 铸(三键行 + never-false 第四键 `originUnconfirmed`)。🔴 缺席两义(与读器同):整键缺席 =
100
- * 旧引擎记录 / 读不出(证不出有没有 park);`[]` = 本引擎记录且一个 park 都没有。端渲 resume 候选时按这一位,
101
- * 不再各自 `run.parks.map(...)`(修前本视图丢了它,端结构性造不出 —— cli 接入回执 ④)。
102
- */
103
55
  parks?: readonly WorkflowParkRowView[];
104
- /** CC-12:在场 = 这条 resume run 的准入没完成 = **不是 resume 基**(core 逐字);缺席 = 常态。never false。 */
105
56
  resumeAdmissionIncomplete?: true;
106
- /** the 187 reads e.workflowProgress to recompute phases; the mock pre-builds them. */
107
57
  workflowProgress?: unknown;
108
58
  }
109
- /**
110
- * WPe — agentDisplayStatus: agent.state (+ workflowActive) → display status.
111
- *
112
- * FAITHFUL to the atlas state SET (atlas 0476_076:30-34). The atlas `WPe` reads ONLY these inputs:
113
- * if(state==="done") → "done"
114
- * if(state==="error") → skipped?"skipped":"failed"
115
- * if(!workflowActive) → "interrupted" // the inactive/non-active fallback
116
- * else → (queuedAt!=null && startedAt==null) ? "queued" : "running"
117
- * The atlas runner's agent-state enum the monitor sees is {start, progress, queued, done, error,
118
- * inactive} — there is NO `failed`/`skipped`/`interrupted`/`stopped`/`running` INPUT state; those are
119
- * DISPLAY statuses derived here: `failed`/`skipped` from `error` (+ the `skipped` flag), `interrupted` from
120
- * `!workflowActive` (the `inactive`/non-active fallback), and `queued`/`running` from the queuedAt/startedAt
121
- * fields on the active path. The AgentState type carries exactly this input set, so the type contract now
122
- * matches the atlas vocabulary 1:1 — the branches below consume only atlas input states and the output
123
- * DisplayStatus set + glyph/color mapping ($jn) is identical.
124
- *
125
- * 🔴 **`parked` 是这条规则上唯一的 sema 超集臂**(0.63.1):atlas 没有它,因为 CC 的编排里没有耐久
126
- * 审批这一层。它**不派生**——上游直接铸这个词(engine core 7.10.0 #642 的 agent 行 `status` 与
127
- * `deriveAgentDisplayStatus` 产物),这里只是不许把它折掉。臂的**位置**是承重的,理由写在分支处。
128
- */
129
59
  export declare function agentDisplayStatus(a: WorkflowAgent, workflowActive: boolean): DisplayStatus;
@@ -1,36 +1,10 @@
1
- /**
2
- * WPe — agentDisplayStatus: agent.state (+ workflowActive) → display status.
3
- *
4
- * FAITHFUL to the atlas state SET (atlas 0476_076:30-34). The atlas `WPe` reads ONLY these inputs:
5
- * if(state==="done") → "done"
6
- * if(state==="error") → skipped?"skipped":"failed"
7
- * if(!workflowActive) → "interrupted" // the inactive/non-active fallback
8
- * else → (queuedAt!=null && startedAt==null) ? "queued" : "running"
9
- * The atlas runner's agent-state enum the monitor sees is {start, progress, queued, done, error,
10
- * inactive} — there is NO `failed`/`skipped`/`interrupted`/`stopped`/`running` INPUT state; those are
11
- * DISPLAY statuses derived here: `failed`/`skipped` from `error` (+ the `skipped` flag), `interrupted` from
12
- * `!workflowActive` (the `inactive`/non-active fallback), and `queued`/`running` from the queuedAt/startedAt
13
- * fields on the active path. The AgentState type carries exactly this input set, so the type contract now
14
- * matches the atlas vocabulary 1:1 — the branches below consume only atlas input states and the output
15
- * DisplayStatus set + glyph/color mapping ($jn) is identical.
16
- *
17
- * 🔴 **`parked` 是这条规则上唯一的 sema 超集臂**(0.63.1):atlas 没有它,因为 CC 的编排里没有耐久
18
- * 审批这一层。它**不派生**——上游直接铸这个词(engine core 7.10.0 #642 的 agent 行 `status` 与
19
- * `deriveAgentDisplayStatus` 产物),这里只是不许把它折掉。臂的**位置**是承重的,理由写在分支处。
20
- */
21
1
  export function agentDisplayStatus(a, workflowActive) {
22
2
  if (a.state === 'done')
23
3
  return 'done';
24
- // atlas: `state==="error"` → skipped?"skipped":"failed".
25
4
  if (a.state === 'error')
26
5
  return a.skipped ? 'skipped' : 'failed';
27
- // 🔴 sema 超集臂,**位置承重**:必须在 `!workflowActive` 之前判。一条腿 park 之后 run 自己收在
28
- // `failed`(core `WorkflowAgentParkedError`)⇒ `workflowActive` 恒假 ⇒ 放到后面就永远被
29
- // `interrupted` 吃掉,而 interrupted 说的是「run 结束时它还没跑完」——那是一件**已经过去**的事,
30
- // parked 说的是「它还挂在那儿,等一个人做决定」,是一件**还能动手**的事。两句下一步不同。
31
6
  if (a.state === 'parked')
32
7
  return 'parked';
33
- // atlas `!t` (workflow not active) → interrupted (also the `inactive`-state landing).
34
8
  if (!workflowActive)
35
9
  return 'interrupted';
36
10
  return a.queuedAt != null && a.startedAt == null ? 'queued' : 'running';
@@ -1,44 +1,8 @@
1
- /**
2
- * writeProtectionCapability — **写保护名表**姿态的三端共用读面(0.60.0)。
3
- *
4
- * 引擎带一张**字面名表**,落在表行上的可定路径写(Write / Edit / NotebookEdit)从 `allow` 降级成
5
- * `ask` —— 所以端可以**事先**告诉人「这些路径会弹卡」。两个读面同源同一份 boot 产物:
6
- * · **租户面** `GET /v1/capabilities` 的 `writeProtection`(engine ≥7.63.0 / S-138;sdk 8.4.0
7
- * `Capabilities.writeProtection`)—— 只有三位计数/开关,**不含行内容**;
8
- * · **operator 面** `GET /v1/diagnostics/wiring` 的 `writeProtection` —— 多出**行内容**与来源词。
9
- *
10
- * ── 🔴 四态,不是两态([honest-absence-not-fabricated-zero])──────────────────────────────────
11
- * 与 `sqlEngineCapability` 逐字同一套词汇(通用读口答「这一格上有没有值」,窄读器答「值成不成形」):
12
- * ① `unobserved` —— **本进程一次 caps 响应都没观测到**(一次性 doctor 就是这一档)。
13
- * ② `not_reported` —— caps 观测到了,而回体上**没有**这个键 ⇒ 老引擎(<7.63.0)。
14
- * 🔴 它**不是**「这台部署没有写保护表」—— 恰恰相反:引擎侧**座位缺席时缺省表在岗**
15
- * (按键名 grep 推断「没装」会推错,上游把这一条写进了本位的顶注)。
16
- * ③ `none` —— 引擎**明确说** `null`:这个进程说不出来(非 composition root 装配的夹具形)。
17
- * 同样**不是**「没有表」。
18
- * ④ `present` —— 三位俱全,原样渲。
19
- *
20
- * ── 🔴 三位刻意不合成一个布尔(上游顶注逐字)────────────────────────────────────────────────
21
- * `armed`(生效表非空 ⇒ 真会弹卡)/ `rows`(生效表行数)/ `replaced`(整表替换旋钮被写过)——
22
- * 合成之后「引擎缺省表在岗」与「运维换了一张自己的表」同为 true,而两者对运维说的是两件事。
23
- * ⚠️ `replaced` 把「整表替换成**空**表」也算 true:报 false 会把「运维亲手关掉了表」说成
24
- * 「缺省表没被动过」。
25
- *
26
- * ── 🔴 最小披露:逐行 name/kind 不上租户面 ──────────────────────────────────────────────────
27
- * 部署自定义行可能含内部路径名,列出来等于告诉想绕过的人「哪些名字不受保护」。行内容只在
28
- * operator 面({@link projectWriteProtectionPosture}),而那个端点本身是 operator-gated。
29
- * 🔴 与**模式型** write deny(`SENSITIVE_WRITE_PATTERNS`)是**并列机制**,两个读面分开报、
30
- * 绝不合成一位:两者的解法不同(一套改模式,一套改名表)。
31
- */
32
- /** 租户面三位(server `WriteProtectionCapability` 逐字同形)。 */
33
1
  export interface WriteProtectionCapabilityView {
34
- /** 生效表非空 ⇒ 引擎真会对表行弹卡。 */
35
2
  armed: boolean;
36
- /** 生效表的**行数**(内容只上 operator 面)。 */
37
3
  rows: number;
38
- /** 整表替换旋钮被写过 ⇒ 缺省表不再原样在岗。与 {@link armed} 刻意不合成。 */
39
4
  replaced: boolean;
40
5
  }
41
- /** 四态读数(见文件头)。`unobserved` 由**读口**在这一格空缺时铸,不由投影铸。 */
42
6
  export type WriteProtectionReading = {
43
7
  kind: 'unobserved';
44
8
  } | {
@@ -49,98 +13,22 @@ export type WriteProtectionReading = {
49
13
  kind: 'present';
50
14
  view: WriteProtectionCapabilityView;
51
15
  };
52
- /**
53
- * caps 回体 → 本格读数;**畸形一律 `undefined`**(= 这一格不写 ⇒ 读口答 `unobserved`)。
54
- *
55
- * 🔴 `undefined`(键不在)与 `null`(引擎说不出来)**是两件事**:前者 ⇒ `not_reported`(老引擎),
56
- * 后者 ⇒ `none`(夹具形进程)。用 `??` / falsy 判会把两者压成一件。
57
- * 🔴 三位**任一**形不合 ⇒ 整条判畸形。绝不留一个缺位的对象:一行写着「rows: 」的诊断比不渲这一行
58
- * 更坏(它看起来像一个答案)。
59
- * ⚠️ `rows` 按**非负有限整数**判,不按真值判:`0` 是合法读数(表在、但生效行为零),折成缺席会让
60
- * 「表空了」与「没报」在消费端同形。
61
- */
62
16
  export declare function projectWriteProtectionCapability(caps: unknown): WriteProtectionReading | undefined;
63
- /** operator 面的一行:一个**字面**名字 + 它怎么匹配。`name` 同时是这一行的稳定身份。 */
64
17
  export interface WriteProtectedRowView {
65
18
  name: string;
66
- /** `basename`(目标最后一段)/ `segment`(任意一段)/ `segment-run`(连续若干段);**开集读**。 */
67
19
  kind: string;
68
20
  }
69
- /** operator 面读数(`GET /v1/diagnostics/wiring` 的 `writeProtection`)。 */
70
21
  export interface WriteProtectionPostureView {
71
- /** 生效表逐行,逐字来自引擎自己的编译产物。**空数组 = 显式无表**(不是缺席)。 */
72
22
  rows: readonly WriteProtectedRowView[];
73
- /** `default`(两根旋钮都没写)/ `extra`(缺省表 + 增量)/ `replace`(整表替换)/ `off`
74
- * (整表替换成空表,合法且响亮);**开集读**。 */
75
23
  source: string;
76
- /** 整表替换**丢掉**的缺省行名;只在替换族在场。 */
77
24
  droppedDefaultRows?: readonly string[];
78
25
  }
79
- /**
80
- * operator 面回体的 `writeProtection` 段 → 读数;不成形 ⇒ `undefined`。
81
- *
82
- * 🔴 **空 `rows` 数组是正面事实**(「显式无表」),照铸 `[]` —— 与 `wiring_manifest.mcp[]` 同一条
83
- * 已定谳的纪律;把它折成缺席等于把引擎明说的一句话读成「不知道」。
84
- * 🔴 **坏行只丢那一行**(与 mcp 行同判据),但 `source` 读不出 ⇒ **整段缺席**:没有来源词的行表
85
- * 答不了运维真正要问的那一问(「这是缺省表还是你换过的表」),而半段会被当成完整答案。
86
- * 🔴 **不校「`droppedDefaultRows` 只在替换族在场」**:那是引擎的段内规矩,server 已按它铸;
87
- * 包再校一遍只会在上游合法演进的当天把一个真读数判没(与开集词表同规)。
88
- */
89
26
  export declare function projectWriteProtectionPosture(wiring: unknown): WriteProtectionPostureView | undefined;
90
- /**
91
- * 宿主 caps probe 的**读面 tee** 落点(与 `noteEngineCapsForSqlEngine` 并列)。绝不 throw ——
92
- * 读面腿不许反噬 caps 探测链。
93
- *
94
- * 🔴 投影 `undefined`(caps 畸形)⇒ 这一格**被删**而不是留着上一台引擎的旧值。
95
- * ⚠️ 「同端口 respawn / 版本回滚之后新探测失败或还在飞」是**另一条路**(本 tee 一次都不触发),
96
- * 由 {@link forgetWriteProtectionReading} 在装配口上收 —— 与 SQL 那一格逐字同形。
97
- * 🔴 **不按 principal 分域**:写保护表是**这台 worker 的 boot 产物**,与调用者是谁无关。
98
- *
99
- * 🔴 **`opts.generation` = 关掉「旧探测覆盖新读数」那条竞态的唯一正确供给**(0.60.0;异源对抗复审
100
- * [medium] 采纳,真病):`kickEngineCapsProbe` 的代际闸在 **probe 返回之后**才跑,而本 tee 是在
101
- * probe **内部**落地的 ⇒ 一次慢的旧探测能在 `invalidateEngineCaps` + 新探测都走完之后才返回,
102
- * 把**上一台引擎**的读数重新写回来。宿主在**起探测那一刻**调 `engineCapsGeneration(baseUrl)` 抓号、
103
- * 在这里原样交回,陈旧那一发就会被整只丢掉。
104
- * ⚠️ **不传 = 与本位到货之前逐字节同行为**(照写)—— additive 供给,不是强制门;端没跟上之前不会
105
- * 有任何东西变坏。🔴 **tee 自己抓号是假判据**(陈旧那一发在这里读到的是新代号,永远像当代的)。
106
- */
107
27
  export declare function noteEngineCapsForWriteProtection(baseUrl: string, caps: unknown, opts?: {
108
28
  generation?: number;
109
29
  }): void;
110
- /** 本进程观测到的写保护姿态;这一格空缺 ⇒ `{kind:'unobserved'}`(**绝不**折成 `none`)。 */
111
30
  export declare function observedWriteProtection(baseUrl?: string | undefined): WriteProtectionReading;
112
- /**
113
- * 四态 → doctor 那一行的 detail 串。**唯一措辞真源**(三端共用一句话;别在各端的行装配里另写一遍
114
- * —— 与 `sqlEngineDoctorDetail` / `autoModeDoctorDetail` 同一条纪律)。
115
- *
116
- * 🔴 四句话刻意**互不相同、也互不蕴含**:「未观测」「老引擎不报」「进程说不出来」三种「读不出」
117
- * 对运维是三条不同的下一步,而**没有一条**等于「这台部署没有写保护」。
118
- * 🔴 `present` 那一句把三位**分开说**(见文件头「刻意不合成」):`armed` 说会不会弹卡,`rows` 说
119
- * 几行,`replaced` 说缺省表还在不在岗。
120
- * 🔴 行内容一个字都不渲(最小披露);`source` 是 operator 面的位,不上这一行。
121
- */
122
31
  export declare function writeProtectionDoctorDetail(reading: WriteProtectionReading): string;
123
- /**
124
- * operator 面读数 → 一行 detail(行名是 UNTRUSTED 自由文本 ⇒ 呈前**逐条**消毒 + 封长)。
125
- *
126
- * 🔴 消毒与封长的顺序 = **先转义、后按转义结果封长**({@link capForDisplay},0.62.0 起本包该族的
127
- * 唯一实现)。此前这三处是反的(先按原文 `slice` 再转义),一段纯控制字符的 40 字符原文转义后
128
- * 能占 240 个显示字符 —— 承诺的列宽预算成了名义值的六倍。同形存量另有 SQL 姿态行一处,同批同改。
129
- *
130
- * 🔴 只给**行数与来源**加上「头几行的名字」,不整表倾泻:一行诊断不是一个表格,而 operator 面的
131
- * 真表读法是那个端点本身。
132
- * 🔴 `rows: []` 渲的是**显式无表**这句正面事实,不是「读不出」。
133
- */
134
32
  export declare function writeProtectionPostureDetail(posture: WriteProtectionPostureView): string;
135
- /**
136
- * **换代失效口**(与 `forgetSqlEngineReading` 并列,由宿主在引擎温切成功后调)。
137
- *
138
- * 🔴 代际闸挡不住这一形:那道闸挡的是「旧响应写脏新一代」,而本格的病是反过来的 —— 新一代的探测
139
- * **根本没成功**,tee 一次都没触发,上一台引擎留在同一端口上的读数继续被当成当代事实答出去。
140
- * 在 doctor 上它的形态最坏:一句**肯定句**(「这台部署有 12 行写保护」),说的却是一台已经不在
141
- * 的引擎。处置是**清成未观测**,不是留旧值也不是铸一个 `none`。
142
- * 空串 ⇒ no-op;绝不 throw(它跑在引擎温切路径上)。
143
- */
144
33
  export declare function forgetWriteProtectionReading(baseUrl: string | undefined): void;
145
- /** 测试钩子。 */
146
34
  export declare function __resetWriteProtectionReadingsForTests(): void;
@@ -1,52 +1,9 @@
1
- /**
2
- * writeProtectionCapability — **写保护名表**姿态的三端共用读面(0.60.0)。
3
- *
4
- * 引擎带一张**字面名表**,落在表行上的可定路径写(Write / Edit / NotebookEdit)从 `allow` 降级成
5
- * `ask` —— 所以端可以**事先**告诉人「这些路径会弹卡」。两个读面同源同一份 boot 产物:
6
- * · **租户面** `GET /v1/capabilities` 的 `writeProtection`(engine ≥7.63.0 / S-138;sdk 8.4.0
7
- * `Capabilities.writeProtection`)—— 只有三位计数/开关,**不含行内容**;
8
- * · **operator 面** `GET /v1/diagnostics/wiring` 的 `writeProtection` —— 多出**行内容**与来源词。
9
- *
10
- * ── 🔴 四态,不是两态([honest-absence-not-fabricated-zero])──────────────────────────────────
11
- * 与 `sqlEngineCapability` 逐字同一套词汇(通用读口答「这一格上有没有值」,窄读器答「值成不成形」):
12
- * ① `unobserved` —— **本进程一次 caps 响应都没观测到**(一次性 doctor 就是这一档)。
13
- * ② `not_reported` —— caps 观测到了,而回体上**没有**这个键 ⇒ 老引擎(<7.63.0)。
14
- * 🔴 它**不是**「这台部署没有写保护表」—— 恰恰相反:引擎侧**座位缺席时缺省表在岗**
15
- * (按键名 grep 推断「没装」会推错,上游把这一条写进了本位的顶注)。
16
- * ③ `none` —— 引擎**明确说** `null`:这个进程说不出来(非 composition root 装配的夹具形)。
17
- * 同样**不是**「没有表」。
18
- * ④ `present` —— 三位俱全,原样渲。
19
- *
20
- * ── 🔴 三位刻意不合成一个布尔(上游顶注逐字)────────────────────────────────────────────────
21
- * `armed`(生效表非空 ⇒ 真会弹卡)/ `rows`(生效表行数)/ `replaced`(整表替换旋钮被写过)——
22
- * 合成之后「引擎缺省表在岗」与「运维换了一张自己的表」同为 true,而两者对运维说的是两件事。
23
- * ⚠️ `replaced` 把「整表替换成**空**表」也算 true:报 false 会把「运维亲手关掉了表」说成
24
- * 「缺省表没被动过」。
25
- *
26
- * ── 🔴 最小披露:逐行 name/kind 不上租户面 ──────────────────────────────────────────────────
27
- * 部署自定义行可能含内部路径名,列出来等于告诉想绕过的人「哪些名字不受保护」。行内容只在
28
- * operator 面({@link projectWriteProtectionPosture}),而那个端点本身是 operator-gated。
29
- * 🔴 与**模式型** write deny(`SENSITIVE_WRITE_PATTERNS`)是**并列机制**,两个读面分开报、
30
- * 绝不合成一位:两者的解法不同(一套改模式,一套改名表)。
31
- */
32
1
  import { capForDisplay } from './fleetTaskDesc.js';
33
2
  import { engineWireTarget } from './engineWireTarget.js';
34
3
  import { createEngineCapReader } from './engineCapReader.js';
35
- /**
36
- * caps 回体 → 本格读数;**畸形一律 `undefined`**(= 这一格不写 ⇒ 读口答 `unobserved`)。
37
- *
38
- * 🔴 `undefined`(键不在)与 `null`(引擎说不出来)**是两件事**:前者 ⇒ `not_reported`(老引擎),
39
- * 后者 ⇒ `none`(夹具形进程)。用 `??` / falsy 判会把两者压成一件。
40
- * 🔴 三位**任一**形不合 ⇒ 整条判畸形。绝不留一个缺位的对象:一行写着「rows: 」的诊断比不渲这一行
41
- * 更坏(它看起来像一个答案)。
42
- * ⚠️ `rows` 按**非负有限整数**判,不按真值判:`0` 是合法读数(表在、但生效行为零),折成缺席会让
43
- * 「表空了」与「没报」在消费端同形。
44
- */
45
4
  export function projectWriteProtectionCapability(caps) {
46
5
  if (caps === null || typeof caps !== 'object')
47
6
  return undefined;
48
- // 0.77.0 整族改齐:① 非对象 / 数组 caps 不是能力表 ⇒ 畸形(投影答 undefined ⇒ 删格 ⇒ 读口答 unobserved),不再答 not_reported
49
- // (那是把「取不到」冒充「报了但没提」);② 在场判据改 hasOwn —— 原型链上的同名键永远不会被序列化上 wire,读成在场 = 凭空造一格。
50
7
  if (caps === null || typeof caps !== 'object' || Array.isArray(caps))
51
8
  return undefined;
52
9
  if (!Object.hasOwn(caps, 'writeProtection'))
@@ -59,7 +16,6 @@ export function projectWriteProtectionCapability(caps) {
59
16
  if (typeof wp !== 'object' || Array.isArray(wp))
60
17
  return undefined;
61
18
  const w = wp;
62
- // 🔴 只读一次(0.74.2 CC-69 复审 R1 族扫):校验与返回各读一次,变化的 getter 会让校验读到合形、返回读到别的。
63
19
  const armed = w.armed;
64
20
  const replaced = w.replaced;
65
21
  const rows = w.rows;
@@ -71,16 +27,6 @@ export function projectWriteProtectionCapability(caps) {
71
27
  return undefined;
72
28
  return { kind: 'present', view: { armed, rows, replaced } };
73
29
  }
74
- /**
75
- * operator 面回体的 `writeProtection` 段 → 读数;不成形 ⇒ `undefined`。
76
- *
77
- * 🔴 **空 `rows` 数组是正面事实**(「显式无表」),照铸 `[]` —— 与 `wiring_manifest.mcp[]` 同一条
78
- * 已定谳的纪律;把它折成缺席等于把引擎明说的一句话读成「不知道」。
79
- * 🔴 **坏行只丢那一行**(与 mcp 行同判据),但 `source` 读不出 ⇒ **整段缺席**:没有来源词的行表
80
- * 答不了运维真正要问的那一问(「这是缺省表还是你换过的表」),而半段会被当成完整答案。
81
- * 🔴 **不校「`droppedDefaultRows` 只在替换族在场」**:那是引擎的段内规矩,server 已按它铸;
82
- * 包再校一遍只会在上游合法演进的当天把一个真读数判没(与开集词表同规)。
83
- */
84
30
  export function projectWriteProtectionPosture(wiring) {
85
31
  if (wiring === null || typeof wiring !== 'object')
86
32
  return undefined;
@@ -113,52 +59,18 @@ export function projectWriteProtectionPosture(wiring) {
113
59
  ...(dropped !== undefined ? { droppedDefaultRows: dropped } : {}),
114
60
  };
115
61
  }
116
- /**
117
- * 本格的 per-baseUrl 读账 + tee / 读口 / 失效口 / 测试钩四口 —— 各只能力位读器**共用同一份实现**
118
- * ({@link createEngineCapReader});本文件只留这一格真正不同的部分:投影函数 {@link projectWriteProtectionCapability}、doctor 措辞表,以及本位自己的判据助手(如有)。
119
- * 🔴 Map 在工厂闭包里,**一只读器一张**:收到读不懂的回体只删自己这一格,绝不连坐别的能力面。
120
- */
121
62
  const reader = createEngineCapReader({
122
63
  name: 'writeProtection',
123
64
  project: projectWriteProtectionCapability,
124
65
  makeUnobserved: () => ({ kind: 'unobserved' }),
125
66
  });
126
- /**
127
- * 宿主 caps probe 的**读面 tee** 落点(与 `noteEngineCapsForSqlEngine` 并列)。绝不 throw ——
128
- * 读面腿不许反噬 caps 探测链。
129
- *
130
- * 🔴 投影 `undefined`(caps 畸形)⇒ 这一格**被删**而不是留着上一台引擎的旧值。
131
- * ⚠️ 「同端口 respawn / 版本回滚之后新探测失败或还在飞」是**另一条路**(本 tee 一次都不触发),
132
- * 由 {@link forgetWriteProtectionReading} 在装配口上收 —— 与 SQL 那一格逐字同形。
133
- * 🔴 **不按 principal 分域**:写保护表是**这台 worker 的 boot 产物**,与调用者是谁无关。
134
- *
135
- * 🔴 **`opts.generation` = 关掉「旧探测覆盖新读数」那条竞态的唯一正确供给**(0.60.0;异源对抗复审
136
- * [medium] 采纳,真病):`kickEngineCapsProbe` 的代际闸在 **probe 返回之后**才跑,而本 tee 是在
137
- * probe **内部**落地的 ⇒ 一次慢的旧探测能在 `invalidateEngineCaps` + 新探测都走完之后才返回,
138
- * 把**上一台引擎**的读数重新写回来。宿主在**起探测那一刻**调 `engineCapsGeneration(baseUrl)` 抓号、
139
- * 在这里原样交回,陈旧那一发就会被整只丢掉。
140
- * ⚠️ **不传 = 与本位到货之前逐字节同行为**(照写)—— additive 供给,不是强制门;端没跟上之前不会
141
- * 有任何东西变坏。🔴 **tee 自己抓号是假判据**(陈旧那一发在这里读到的是新代号,永远像当代的)。
142
- */
143
67
  export function noteEngineCapsForWriteProtection(baseUrl, caps, opts) {
144
68
  reader.note(baseUrl, caps, opts);
145
69
  }
146
- /** 本进程观测到的写保护姿态;这一格空缺 ⇒ `{kind:'unobserved'}`(**绝不**折成 `none`)。 */
147
70
  export function observedWriteProtection(baseUrl = engineWireTarget()?.baseUrl) {
148
71
  return reader.observed(baseUrl);
149
72
  }
150
- /** 单行 UNTRUSTED 座的展示上限(UTF-16 单元;与 SQL 那一格同值同理由)。 */
151
73
  const WP_DETAIL_MAX = 40;
152
- /**
153
- * 四态 → doctor 那一行的 detail 串。**唯一措辞真源**(三端共用一句话;别在各端的行装配里另写一遍
154
- * —— 与 `sqlEngineDoctorDetail` / `autoModeDoctorDetail` 同一条纪律)。
155
- *
156
- * 🔴 四句话刻意**互不相同、也互不蕴含**:「未观测」「老引擎不报」「进程说不出来」三种「读不出」
157
- * 对运维是三条不同的下一步,而**没有一条**等于「这台部署没有写保护」。
158
- * 🔴 `present` 那一句把三位**分开说**(见文件头「刻意不合成」):`armed` 说会不会弹卡,`rows` 说
159
- * 几行,`replaced` 说缺省表还在不在岗。
160
- * 🔴 行内容一个字都不渲(最小披露);`source` 是 operator 面的位,不上这一行。
161
- */
162
74
  export function writeProtectionDoctorDetail(reading) {
163
75
  switch (reading.kind) {
164
76
  case 'unobserved':
@@ -183,17 +95,6 @@ export function writeProtectionDoctorDetail(reading) {
183
95
  }
184
96
  }
185
97
  }
186
- /**
187
- * operator 面读数 → 一行 detail(行名是 UNTRUSTED 自由文本 ⇒ 呈前**逐条**消毒 + 封长)。
188
- *
189
- * 🔴 消毒与封长的顺序 = **先转义、后按转义结果封长**({@link capForDisplay},0.62.0 起本包该族的
190
- * 唯一实现)。此前这三处是反的(先按原文 `slice` 再转义),一段纯控制字符的 40 字符原文转义后
191
- * 能占 240 个显示字符 —— 承诺的列宽预算成了名义值的六倍。同形存量另有 SQL 姿态行一处,同批同改。
192
- *
193
- * 🔴 只给**行数与来源**加上「头几行的名字」,不整表倾泻:一行诊断不是一个表格,而 operator 面的
194
- * 真表读法是那个端点本身。
195
- * 🔴 `rows: []` 渲的是**显式无表**这句正面事实,不是「读不出」。
196
- */
197
98
  export function writeProtectionPostureDetail(posture) {
198
99
  const source = capForDisplay(posture.source, WP_DETAIL_MAX);
199
100
  if (posture.rows.length === 0)
@@ -208,19 +109,9 @@ export function writeProtectionPostureDetail(posture) {
208
109
  : '';
209
110
  return `source ${source} · ${String(posture.rows.length)} ${posture.rows.length === 1 ? 'name' : 'names'}: ${shown}${more}${dropped}`;
210
111
  }
211
- /**
212
- * **换代失效口**(与 `forgetSqlEngineReading` 并列,由宿主在引擎温切成功后调)。
213
- *
214
- * 🔴 代际闸挡不住这一形:那道闸挡的是「旧响应写脏新一代」,而本格的病是反过来的 —— 新一代的探测
215
- * **根本没成功**,tee 一次都没触发,上一台引擎留在同一端口上的读数继续被当成当代事实答出去。
216
- * 在 doctor 上它的形态最坏:一句**肯定句**(「这台部署有 12 行写保护」),说的却是一台已经不在
217
- * 的引擎。处置是**清成未观测**,不是留旧值也不是铸一个 `none`。
218
- * 空串 ⇒ no-op;绝不 throw(它跑在引擎温切路径上)。
219
- */
220
112
  export function forgetWriteProtectionReading(baseUrl) {
221
113
  reader.forget(baseUrl);
222
114
  }
223
- /** 测试钩子。 */
224
115
  export function __resetWriteProtectionReadingsForTests() {
225
116
  reader.__resetForTests();
226
117
  }