@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,53 +1,7 @@
1
1
  import type { AdapterContext, AdapterOutput, ChromeEvent, LaneProof } from '../seam.js';
2
- /** 帧 = wire 投影出来的中性 arm(cli seam/adapter downstream 的 SDKMessage 形),结构化读取。 */
3
2
  export type Frame = Record<string, unknown>;
4
- /**
5
- * 主车道证明的**出厂口** —— 每次调用交出一只**新的** `{lane:'main'}`(本批实现的臂全在 leader
6
- * lane;子代/workflow lane 的 tick 面留 #52b)。
7
- *
8
- * 🔴 **为什么是函数不是常量**(0.76.1)。此前这里是一只模块级常量对象,`laneOf(未登记 id)` 与本包
9
- * 约五十个 `laneProof:` 主车道发点交出去的是**同一只**对象 —— 跨适配器实例、跨流、跨 turn 全是
10
- * 它。实测(修前,本门 L1/L5 段的同一条路径):两个互不相干的消费者各取一次未登记行的证明,
11
- * `===` 为真;给第一只补上卡号之后,第二只当场读出 `{lane:'subagent', parentToolCallId:'…'}`,
12
- * 开流序幕那四条主车道事件也一起变 —— **一次写打穿整个进程**,而且静默。
13
- *
14
- * 🔴 **判据如实**:这是**别名风险**,不是「已经在串味的现场」。修前逐站点穷举(语法树扫写表达式)
15
- * 的结论是:本包内对车道证明**零就地写**(两处看起来像写的是给局部变量**换绑**新对象,不改旧的);
16
- * 三个消费端的证明用法全是只读(读 `lane` 位 / 解构丢弃)。⇒ 本批修的是「交出去的可变引用被
17
- * 当成缺省值别名」这一形,不是在修一条已经在错归因的行。发布文案不许把它写成用户可见的回归。
18
- * 这条形本身仍然要修:`laneProof` 是**公开输出面**上的一位,拿它做 WeakMap 键 / 身份去重 /
19
- * 视图层身份记忆的消费者,在两条无关行共享一只对象时会把它们认成同一条 —— **一个字都不写也照错**。
20
- * 这也正是冻结那条修法救不了的一半。
21
- *
22
- * 🔴 **为什么不是冻结**(两条都摆过,这条落选):
23
- * ① 冻结只挡「写」,不解「别名」——上一段那三种按身份认物的消费面照错;每次新建两件一起解决。
24
- * ② 子代臂 `{lane:'subagent', parentToolCallId}` 与 workflow 臂本来就**逐次新建**且可写,只冻主
25
- * 车道这一半 ⇒ 同一处写操作会因为「这条行恰好绑没绑卡」而一边抛一边收,失败随行漂成间歇形;
26
- * 要对称就得连十几处内联字面量一起冻,比每次新建更大的改动换更小的收益。
27
- * ③ 证明是在宿主手里被写的:冻结把一条本包的别名缺陷变成宿主侧的抛错,而宿主的抛会顺着
28
- * `for await` 打断整条 adapt 流。适配层不该给主链添这种反噬。
29
- * ⚠️ 代价如实:每条主车道事件多一只小对象(≈ 一个键的字面量)。别为了省它把出厂口缓存成模块级
30
- * 单例(`const M = mainLane()` 就是把这一形原样种回来)—— 结构反钉门盯着这一形。
31
- */
32
3
  export declare const mainLane: () => LaneProof;
33
- /** 帧 → 稳定转录 id(`suffix` = 同一帧派生多条消息时的去撞位)。 */
34
4
  export type IdOf = (frame: Frame, suffix?: string) => string;
35
- /**
36
- * L-215③(0.65.0)—— 一条 assistant 转录消息的**身份键**(`message.id` / `message.model`)。
37
- *
38
- * 🔴 **本层不是第二个铸点,是接力点**:上游投影器(`adapter/downstream/eventToSdkMessage.ts` 的
39
- * `assistantArm`)已经把这两位铸在 durable 内容帧的 `message` 上;而本层的三个构造点
40
- * (tool_use 卡臂 / 散文段 / 思考块)都是**重建** `{role, content}` 的 —— 重建就把上游铸好的
41
- * 两位原地丢掉了(异源对抗复审实抓:「新增 assistant id/model 到达不了最终转录」)。本函数把
42
- * 它们接过来,规矩只有两条:
43
- * · **帧优先、ctx 兜底**(`model`):durable 内容帧上有,live 分段腿的 `stream_event` 锚上没有
44
- * —— 那时回落到宿主开流时钉的 {@link AdapterContext.model};
45
- * · **`id` 只认帧**:它是引擎铸的**事件身份**,ctx 上没有、也不该有一个「整条流通用的消息 id」。
46
- * 🔴 **两位都缺席即键不铸**(不是 `undefined` 在场)。
47
- * ⚠️ tool_use 卡臂**不**用这里的 `id`:那条臂刻意铸 per-RESPONSE id(CC 的 grouped-agent 渲染按
48
- * `${message.id}:${toolName}` 分组,换成 per-event id 会把一张 Agent 卡拆成 N 张)——
49
- * 两个 `id` 是**两种身份**,那条臂只取 `model`。
50
- */
51
5
  export declare function messageIdentityOf(frame: Frame, ctx: {
52
6
  model?: string;
53
7
  }): {
@@ -55,17 +9,5 @@ export declare function messageIdentityOf(frame: Frame, ctx: {
55
9
  model?: string;
56
10
  };
57
11
  export declare const chrome: (event: ChromeEvent) => AdapterOutput;
58
- /**
59
- * 🔴 入参从裸 `unknown` 收窄成 `Frame`(拆分同批的真收窄,不是搬运):调用点全是「按 CC 词汇
60
- * 现拼的对象字面量」或「原样透传的 wire 帧」,两者都是 `Record<string, unknown>` ——
61
- * 裸 `unknown` 把窄化义务外包给了每一个调用点,而这里本来就知道自己收的是什么形。
62
- * 到 `SDKMessage` 的那一步仍是 cast:CC 词汇的字面形与 SDK 类型有已登记的分歧(DIVERGENCE-2/9),
63
- * 这条 cast 是**有意**的边界,不是偷懒。
64
- */
65
12
  export declare const transcript: (message: Frame, nowMs: number) => AdapterOutput;
66
- /**
67
- * [1653]:稳定键优先序 = 帧 id > seq > toolCallId,全缺才 ctx.uuid()。现役 wire 的稳定键落在
68
- * `uuid` 字段(§E2 core 铸的 eventId / stamp 铸的帧 id),故映到 `id` 位喂进去(见 SEAM-GAP-1)。
69
- * `suffix` = 同一帧派生多条消息时的去撞位(如 tool_use 卡 + 同帧的 reject 结果)。
70
- */
71
13
  export declare function makeIdOf(ctx: AdapterContext): IdOf;
package/dist/adapt/ids.js CHANGED
@@ -1,49 +1,5 @@
1
1
  import { deriveTranscriptId } from '../seam.js';
2
- /**
3
- * 主车道证明的**出厂口** —— 每次调用交出一只**新的** `{lane:'main'}`(本批实现的臂全在 leader
4
- * lane;子代/workflow lane 的 tick 面留 #52b)。
5
- *
6
- * 🔴 **为什么是函数不是常量**(0.76.1)。此前这里是一只模块级常量对象,`laneOf(未登记 id)` 与本包
7
- * 约五十个 `laneProof:` 主车道发点交出去的是**同一只**对象 —— 跨适配器实例、跨流、跨 turn 全是
8
- * 它。实测(修前,本门 L1/L5 段的同一条路径):两个互不相干的消费者各取一次未登记行的证明,
9
- * `===` 为真;给第一只补上卡号之后,第二只当场读出 `{lane:'subagent', parentToolCallId:'…'}`,
10
- * 开流序幕那四条主车道事件也一起变 —— **一次写打穿整个进程**,而且静默。
11
- *
12
- * 🔴 **判据如实**:这是**别名风险**,不是「已经在串味的现场」。修前逐站点穷举(语法树扫写表达式)
13
- * 的结论是:本包内对车道证明**零就地写**(两处看起来像写的是给局部变量**换绑**新对象,不改旧的);
14
- * 三个消费端的证明用法全是只读(读 `lane` 位 / 解构丢弃)。⇒ 本批修的是「交出去的可变引用被
15
- * 当成缺省值别名」这一形,不是在修一条已经在错归因的行。发布文案不许把它写成用户可见的回归。
16
- * 这条形本身仍然要修:`laneProof` 是**公开输出面**上的一位,拿它做 WeakMap 键 / 身份去重 /
17
- * 视图层身份记忆的消费者,在两条无关行共享一只对象时会把它们认成同一条 —— **一个字都不写也照错**。
18
- * 这也正是冻结那条修法救不了的一半。
19
- *
20
- * 🔴 **为什么不是冻结**(两条都摆过,这条落选):
21
- * ① 冻结只挡「写」,不解「别名」——上一段那三种按身份认物的消费面照错;每次新建两件一起解决。
22
- * ② 子代臂 `{lane:'subagent', parentToolCallId}` 与 workflow 臂本来就**逐次新建**且可写,只冻主
23
- * 车道这一半 ⇒ 同一处写操作会因为「这条行恰好绑没绑卡」而一边抛一边收,失败随行漂成间歇形;
24
- * 要对称就得连十几处内联字面量一起冻,比每次新建更大的改动换更小的收益。
25
- * ③ 证明是在宿主手里被写的:冻结把一条本包的别名缺陷变成宿主侧的抛错,而宿主的抛会顺着
26
- * `for await` 打断整条 adapt 流。适配层不该给主链添这种反噬。
27
- * ⚠️ 代价如实:每条主车道事件多一只小对象(≈ 一个键的字面量)。别为了省它把出厂口缓存成模块级
28
- * 单例(`const M = mainLane()` 就是把这一形原样种回来)—— 结构反钉门盯着这一形。
29
- */
30
2
  export const mainLane = () => ({ lane: 'main' });
31
- /**
32
- * L-215③(0.65.0)—— 一条 assistant 转录消息的**身份键**(`message.id` / `message.model`)。
33
- *
34
- * 🔴 **本层不是第二个铸点,是接力点**:上游投影器(`adapter/downstream/eventToSdkMessage.ts` 的
35
- * `assistantArm`)已经把这两位铸在 durable 内容帧的 `message` 上;而本层的三个构造点
36
- * (tool_use 卡臂 / 散文段 / 思考块)都是**重建** `{role, content}` 的 —— 重建就把上游铸好的
37
- * 两位原地丢掉了(异源对抗复审实抓:「新增 assistant id/model 到达不了最终转录」)。本函数把
38
- * 它们接过来,规矩只有两条:
39
- * · **帧优先、ctx 兜底**(`model`):durable 内容帧上有,live 分段腿的 `stream_event` 锚上没有
40
- * —— 那时回落到宿主开流时钉的 {@link AdapterContext.model};
41
- * · **`id` 只认帧**:它是引擎铸的**事件身份**,ctx 上没有、也不该有一个「整条流通用的消息 id」。
42
- * 🔴 **两位都缺席即键不铸**(不是 `undefined` 在场)。
43
- * ⚠️ tool_use 卡臂**不**用这里的 `id`:那条臂刻意铸 per-RESPONSE id(CC 的 grouped-agent 渲染按
44
- * `${message.id}:${toolName}` 分组,换成 per-event id 会把一张 Agent 卡拆成 N 张)——
45
- * 两个 `id` 是**两种身份**,那条臂只取 `model`。
46
- */
47
3
  export function messageIdentityOf(frame, ctx) {
48
4
  const msg = frame.message;
49
5
  const inner = typeof msg === 'object' && msg !== null && !Array.isArray(msg)
@@ -58,31 +14,12 @@ export function messageIdentityOf(frame, ctx) {
58
14
  };
59
15
  }
60
16
  export const chrome = (event) => ({ plane: 'chrome', event });
61
- /**
62
- * 🔴 入参从裸 `unknown` 收窄成 `Frame`(拆分同批的真收窄,不是搬运):调用点全是「按 CC 词汇
63
- * 现拼的对象字面量」或「原样透传的 wire 帧」,两者都是 `Record<string, unknown>` ——
64
- * 裸 `unknown` 把窄化义务外包给了每一个调用点,而这里本来就知道自己收的是什么形。
65
- * 到 `SDKMessage` 的那一步仍是 cast:CC 词汇的字面形与 SDK 类型有已登记的分歧(DIVERGENCE-2/9),
66
- * 这条 cast 是**有意**的边界,不是偷懒。
67
- */
68
17
  export const transcript = (message, nowMs) => ({
69
18
  plane: 'transcript',
70
- // 到达时戳补齐(#185-A1 正位收编,2026-08-08;此前是壳 upstreamBridge.stampTranscriptArrival
71
- // 的消费端补偿,注释明记「长线正位在 client-core 的 adapt 臂」):transcript 消息不变式=恒带
72
- // timestamp——CC 在 content_block_stop 取 wall-clock,而 transcript 帧正是块收尾时到达,到达
73
- // 时刻本身就是同一个量。只补缺席不覆盖(wire 哪天带了就用 wire 的);壳侧补偿臂保留为双保险
74
- // (its ③:不覆盖已有值 ⇒ 本补齐生效后壳臂自然零触发)。
75
- // [C114] 请托(web jsdom-adapt-parity 门 INCONCLUSIVE 实抓):时钟**必经 ctx.now()**(调用方
76
- // 注入 nowMs)——裸 `new Date()` 违 DIVERGENCE-7 可重放纪律,确定性双跑逐字节对拍当场失判别力。
77
19
  message: (typeof message.timestamp === 'string'
78
20
  ? message
79
21
  : { ...message, timestamp: new Date(nowMs).toISOString() }),
80
22
  });
81
- /**
82
- * [1653]:稳定键优先序 = 帧 id > seq > toolCallId,全缺才 ctx.uuid()。现役 wire 的稳定键落在
83
- * `uuid` 字段(§E2 core 铸的 eventId / stamp 铸的帧 id),故映到 `id` 位喂进去(见 SEAM-GAP-1)。
84
- * `suffix` = 同一帧派生多条消息时的去撞位(如 tool_use 卡 + 同帧的 reject 结果)。
85
- */
86
23
  export function makeIdOf(ctx) {
87
24
  return (frame, suffix) => {
88
25
  const base = typeof frame.id === 'string' && frame.id.length > 0
@@ -1,35 +1,10 @@
1
- /**
2
- * adapt/instanceLedger.ts — **适配器实例级台账**(A 族拆分 REF-CC-FIX-05;矩阵 §1.5)。
3
- *
4
- * 三个 Set 的持有者。它们与 turn 级状态的区别是**跨 turn 存活**:
5
- * · `renderedNotifications` —— 通知去重键(#63 的 export/import 往返面就是它);
6
- * · `seenWorkflowToolCallIds` —— W1 三级判据③ 的素材(assistant 臂写、task_progress 臂读,
7
- * 覆盖 uuid 形子代 id 与**跨 turn 迟到 tick**,所以必须跨 turn 活着);
8
- * · `firedSubagentStartHookTaskIds` —— SubagentStart 一生只许一次(frame-lane-matrix #4),
9
- * 同时是 task_notification 臂发 stop 的门。
10
- *
11
- * 🔴 FIX-05 就是本文件存在的理由:拆分前这三个 Set 挂在类上,`adapt()` 里既有 `self.` 又有
12
- * `this.` **两条访问路径**(generator 表达式的 this 不是适配器,所以当时固定了一个 `const self`)。
13
- * 收成一个显式入参对象之后:① `self` 别名与它那条 eslint-disable 一起消失;② 三个 Set 的
14
- * 每一个读写点都必须经 `inst.` —— 「同一台账两条路径」这件事在结构上不再可能。
15
- *
16
- * 🔴 DIVERGENCE-6 的现势(别把它读成「本包所有台账都是实例级」):只有本文件这三件是实例级
17
- * (= 一个 session 一份)。`notifiedRuns` / `cardEnqueuedRuns` 是 **module 台账**(notifications.ts),
18
- * 因为它们的配对半场(队列 port / idle watcher / outstanding 药丸)在那儿 —— 放实例 =
19
- * 前提不共享 = 双卡/零显示/模型二收(0.6.0 真缺口,[1857])。
20
- */
21
1
  export interface AdapterInstanceLedger {
22
- /** 通知去重键:已渲染过? */
23
2
  hasRenderedNotification(key: string): boolean;
24
- /** 通知去重键:记一条(**必须在对应 yield 之前**落,见矩阵 §2.1④ 的 1377 行判定)。 */
25
3
  addRenderedNotification(key: string): void;
26
- /** 台账导出/回植用的快照与批量吃入(返回真正新吃进去的条数)。 */
27
4
  listRenderedNotifications(): string[];
28
5
  takeRenderedNotifications(keys: Iterable<unknown>): number;
29
- /** W1 判据③:这个 tool_use id 是本会话见过的 Workflow 工具卡? */
30
6
  isWorkflowCard(toolUseId: string): boolean;
31
7
  markWorkflowCard(toolUseId: string): void;
32
- /** SubagentStart 一生一次的门(fire 前判、fire 时记,两步都在 yield 之前)。 */
33
8
  hasFiredSubagentStart(taskId: string): boolean;
34
9
  markFiredSubagentStart(taskId: string): void;
35
10
  }
@@ -1,23 +1,3 @@
1
- /**
2
- * adapt/instanceLedger.ts — **适配器实例级台账**(A 族拆分 REF-CC-FIX-05;矩阵 §1.5)。
3
- *
4
- * 三个 Set 的持有者。它们与 turn 级状态的区别是**跨 turn 存活**:
5
- * · `renderedNotifications` —— 通知去重键(#63 的 export/import 往返面就是它);
6
- * · `seenWorkflowToolCallIds` —— W1 三级判据③ 的素材(assistant 臂写、task_progress 臂读,
7
- * 覆盖 uuid 形子代 id 与**跨 turn 迟到 tick**,所以必须跨 turn 活着);
8
- * · `firedSubagentStartHookTaskIds` —— SubagentStart 一生只许一次(frame-lane-matrix #4),
9
- * 同时是 task_notification 臂发 stop 的门。
10
- *
11
- * 🔴 FIX-05 就是本文件存在的理由:拆分前这三个 Set 挂在类上,`adapt()` 里既有 `self.` 又有
12
- * `this.` **两条访问路径**(generator 表达式的 this 不是适配器,所以当时固定了一个 `const self`)。
13
- * 收成一个显式入参对象之后:① `self` 别名与它那条 eslint-disable 一起消失;② 三个 Set 的
14
- * 每一个读写点都必须经 `inst.` —— 「同一台账两条路径」这件事在结构上不再可能。
15
- *
16
- * 🔴 DIVERGENCE-6 的现势(别把它读成「本包所有台账都是实例级」):只有本文件这三件是实例级
17
- * (= 一个 session 一份)。`notifiedRuns` / `cardEnqueuedRuns` 是 **module 台账**(notifications.ts),
18
- * 因为它们的配对半场(队列 port / idle watcher / outstanding 药丸)在那儿 —— 放实例 =
19
- * 前提不共享 = 双卡/零显示/模型二收(0.6.0 真缺口,[1857])。
20
- */
21
1
  export function createAdapterInstanceLedger() {
22
2
  const renderedNotifications = new Set();
23
3
  const seenWorkflowToolCallIds = new Set();
@@ -1,87 +1,18 @@
1
- /**
2
- * adapt/panelTasks.ts — M3 **面板行台账**(A 族拆分 REF-CC-SPLIT-04;矩阵 §1.3 六行状态)。
3
- *
4
- * 收编 `taskCardBinding` / `boundToolCalls` / `livePanelTasks` / `endedPanelTasks` /
5
- * `liveBoundPanelTasks` / `subagentTypeById` 六行状态 + C5 laneOfTask / C6 bindTaskCard /
6
- * C7 unboundSubagentCandidates / C8 fireSubagentStart / C9 settlePanelTasks 五个闭包。
7
- *
8
- * 引擎侧子代的 tick 只带 rollup 数字({toolUses,totalTokens}) = CC `AgentProgress` 同形,
9
- * 所以忠实的 CC-187 面是 footer 的 CoordinatorTaskPanel(CC 自己对进程外 agent 的先例:
10
- * 面板行 + task-notification,从不合成 inline 消息轨)。本模块把「tick → 哪张委派卡」的归属、
11
- * 行的活性(live/inert/unbound)、以及三处 sweep 全部管起来。
12
- *
13
- * 🔴 拆分定案两条(矩阵 §3.2 #4/#6):
14
- * ① `endedPanelTasks` 拆分前被 `settlePanelTasks` **和** task_notification 臂两处直写。
15
- * 现在通知臂那半场收成 `settleFromNotification()`(clearResident + endedPanelTasks 判重 +
16
- * panel end + if-started stop 整段;0.65.1 起判重在 end 之前),通知臂只调一次 ⇒ 跨臂直写消失。
17
- * ② `firedSubagentStartHookTaskIds` 的读者(通知臂)随之进了本模块内部 —— 通知臂**不再直读**
18
- * 实例台账,那条跨模块读同批消失。
19
- *
20
- * 🔴 module 台账 `engineAgentPanelStore` 的两个写口(mark/clearEnginePanelTaskResident)拆分前有
21
- * A4/A9 **双所有者**。按记忆 `paired-mechanisms-must-share-premise` 的「整臂让位」:两处写口
22
- * 现在**在 adapt 域内只在本文件**(`noteResidency()` 与 `settleFromNotification()`),不许 A 层
23
- * 两个模块各写各的。
24
- * ⚠️ ADAPT-F4 判据纠偏(2026-08-02):原文写的是「只在本文件」,而 `src/notifications.ts:915`
25
- * 的 bg 合成半场也调 `clearEnginePanelTaskResident`(它自陈是「真终态唯二来源」之一,是设计内的
26
- * 另一条腿、不是被劈开的臂)。照字面 grep 验这条判据的人当场得到证伪,只能二选一:误判成回归去
27
- * 删 notifications 那半场,或判定这条钉不可信而整条丢掉 —— 两条都是坏结局。判据的作用域必须写准。
28
- *
29
- * 🔴 时序留钉(矩阵 §2.1②):`start()` 里 `markFiredSubagentStart` 必须在 `yield` **之前** ——
30
- * yield* 展开后判重+记号与交付在**同一次** `.next()` 里,「已标记」⟺「已交付」原子成立;
31
- * 改成 add-after-yield ⇒ 消费者收到 start 后早退就没记上 ⇒ 下一 turn 重 fire,直接违反「一生一次」。
32
- */
33
1
  import type { AdapterContext, AdapterOutput, LaneProof } from '../seam.js';
34
2
  import type { AdapterInstanceLedger } from './instanceLedger.js';
35
3
  import type { OpenCardView } from './toolCards.js';
36
4
  export interface PanelTaskLedger {
37
- /** T32 行绑定(typed 双键在场恒赢;缺席时 FIFO 猜父)。返回绑到的卡 id。 */
38
5
  bind(taskId: string, parentToolCallId?: string): string | undefined;
39
- /** 未绑的 subagent 形开卡张数(>1 ⇒ 含糊,上层保持 unbound)。 */
40
6
  unboundCandidates(): number;
41
- /** 行的车道证明:绑到卡的 = subagent lane(带父卡 id),未绑的 = 主 lane。 */
42
7
  laneOf(taskId: string): LaneProof;
43
- /** 这条行已经绑过卡了吗(含糊回落的前置判位;别拿「`laneOf(...)` 是不是那只主车道常量」代替 ——
44
- * 那是按引用相等在推断,判据锚在会决定结果的量上才对。0.76.1 起主车道证明**逐次新建**,
45
- * 那种写法连偶然成立都做不到了)。 */
46
8
  isBound(taskId: string): boolean;
47
- /**
48
- * B-074 —— 这条行绑在一张**本 turn 还开着**的卡上吗(`liveBound`,#6 的 live/inert 判位)。
49
- *
50
- * 它回答的是「**谁来收这条行的终态**」:
51
- * · `true` ⇒ 关卡那条腿({@link settle})会收,而且它带着**子代的最终报告**(委派卡的 output);
52
- * · `false` ⇒ 未绑 / inert 绑定(跨 turn bg 子代的典型形)= **session 常驻行**,关卡腿不碰它,
53
- * 它的终态今天只认通知帧 —— 这正是 core 的终态 tick 要救的那条 uuid lane。
54
- * 🔴 判别力承重:终态 tick 在 `true` 的行上**不许**抢着落终态 —— 抢了会让后到的关卡 settle 撞
55
- * `endedPanelTasks` 判重而整条让位,子代的最终报告从此到不了面板行(异源对抗复审实抓)。
56
- */
57
9
  isLiveBound(taskId: string): boolean;
58
- /** 本 turn 发布过面板行了吗(首 tick 判别 = 子代在壳侧可观测的起点)。 */
59
10
  isLive(taskId: string): boolean;
60
- /** 登记「本 turn 发布过面板行」。 */
61
11
  markLive(taskId: string): void;
62
- /** #6 常驻台账:live-bound ⇒ 清常驻;inert/unbound ⇒ 记常驻(module store 的**唯一**写口之一)。 */
63
- /** 0.74.3 CC-70:`residentKey` = 常驻标该记在哪把键下(归一后的 fleet 尾段);缺省 = taskId。绑卡判定仍按 tick 的 taskId。 */
64
12
  noteResidency(taskId: string, residentKey?: string): void;
65
- /**
66
- * SubagentStart(类型恒记,fire 一生一次)。
67
- * 🔴 0.75.1 CC-95(b):`agentType` **可缺席** —— 调用方查不到诚实来源时就不传,本臂让键缺席,
68
- * 绝不在这里编一个占位词(此前传的是 tick 的展示名,子代启动 hook 因此收到的是委派卡的 description)。
69
- */
70
13
  start(taskId: string, agentType?: string): Generator<AdapterOutput>;
71
- /** 关卡 settle(cardId)或 turn 末/abort 防御 sweep(cardId===null)。 */
72
14
  settle(cardId: string | null, isError: boolean, report?: string): Generator<AdapterOutput>;
73
- /** #6 通知-settle 边(推送半场):真终态在此落行,session 常驻行不再被 turn sweep 假结。 */
74
15
  settleFromNotification(taskId: string, isError: boolean): Generator<AdapterOutput>;
75
- /**
76
- * B-074(0.65.0)**终态 tick 边** —— core 明写的那一拍(`task_progress.status` = `completed`/
77
- * `failed`)按 taskId 直接落行。
78
- *
79
- * 为什么不复用 {@link settleFromNotification}:那一条是**通知帧**那半场,它按**主车道**发
80
- * end(bg 子代行本来就是 unbound 的),而终态 tick 的行**可能绑着一张前台委派卡** ⇒ 车道证明
81
- * 必须走 {@link laneOf},否则一条 subagent lane 的行会拿 main lane 的证明去落终态(帧×lane
82
- * 矩阵那一族的病)。也不复用 {@link settle}:那一条按**卡 id** 收(关卡/防御 sweep 的语义),
83
- * 而这里的权威键是 taskId —— 引擎说的是「这个子代结束了」,不是「这张卡关了」。
84
- */
85
16
  settleFromTerminalTick(taskId: string, isError: boolean): Generator<AdapterOutput>;
86
17
  }
87
18
  export declare function createPanelTaskLedger(ctx: AdapterContext, cards: OpenCardView, inst: AdapterInstanceLedger): PanelTaskLedger;
@@ -2,40 +2,17 @@ import { clearEnginePanelTaskResident, clearEnginePanelTaskResidentByWire, markE
2
2
  import { chrome, mainLane } from './ids.js';
3
3
  import { SUBAGENT_TOOL_NAMES } from './wireShapes.js';
4
4
  export function createPanelTaskLedger(ctx, cards, inst) {
5
- /** taskId → 绑定的 open tool_use id。 */
6
5
  const taskCardBinding = new Map();
7
- /** 已被某 taskId 认领的 tool_use id(一张卡只认一个子代)。 */
8
6
  const boundToolCalls = new Set();
9
- /** 本 turn 发布过面板行的全部 taskId(绑定与否都算)。 */
10
7
  const livePanelTasks = new Set();
11
- /** 已落终态的行(settle 幂等)。 */
12
8
  const endedPanelTasks = new Set();
13
- /**
14
- * #6 —— 绑定时那张卡**正开着**的 taskId(= "live" 绑定)。只有这些行属本 turn 生命周期、
15
- * 可被 turn 末防御 sweep 结掉。inert(显式父指向已关/没见过的卡 —— 跨 turn bg 子代的典型形)
16
- * 与 unbound 行是 **session 常驻**:终态只认 task_notification / bg_notification。
17
- */
18
9
  const liveBoundPanelTasks = new Set();
19
- /** 0.74.3 CC-70(异源复审 R2 [medium] / R3 [high]):常驻标可能记在归一键(fleet 尾段)下 —— 两把键都清,但前代终态不清当代的尾段键(判据在 store,单源)。 */
20
10
  const clearResidencyBothKeys = (taskId) => clearEnginePanelTaskResidentByWire(taskId);
21
- /** taskId → 子代类型(Stop hook 查它;cli 同为 turn 局部)。 */
22
11
  const subagentTypeById = new Map();
23
12
  const laneOf = (taskId) => {
24
13
  const card = taskCardBinding.get(taskId);
25
14
  return card !== undefined ? { lane: 'subagent', parentToolCallId: card } : mainLane();
26
15
  };
27
- /**
28
- * 一条行要发**多条**事件时的车道证明来源(0.76.1,异源对抗复审 R1 [medium] 实测逼出)。
29
- *
30
- * 病形:终态那两处(关卡 / 终态 tick)此前 `const lane = laneOf(taskId)` 取一次,然后 stop 与
31
- * end **两条事件共用那一只** —— 消费者拿到 stop 后改它的归属,同一条行的 end 跟着变;逐条消费
32
- * 的宿主甚至能在 end 那一次 `yield` **之前**就把它污染掉(生成器在两条之间是挂起的)。
33
- *
34
- * 修法**不是**在每条事件那里各调一次 `laneOf`:两次调用之间生成器会挂起,消费者若在这中间绑了卡,
35
- * 同一条行的两条事件就会**分流到两个归属**上(一条算主车道、一条算子代)——那比别名更坏。
36
- * ⇒ **归属判一次、证明铸多只**:这里把归属(绑到哪张卡 / 没绑)先定死,返回的铸口每次交出一只
37
- * 新对象、值恒相同。
38
- */
39
16
  const laneMinterFor = (taskId) => {
40
17
  const card = taskCardBinding.get(taskId);
41
18
  return card !== undefined
@@ -46,44 +23,18 @@ export function createPanelTaskLedger(ctx, cards, inst) {
46
23
  laneOf,
47
24
  isBound: (taskId) => taskCardBinding.has(taskId),
48
25
  isLiveBound: (taskId) => liveBoundPanelTasks.has(taskId),
49
- /**
50
- * T32 行绑定。**typed 双键在场恒赢**(B6 定案):wire 点名了 `parentToolCallId` 时,下面的
51
- * FIFO 臂**一次都不会被考虑** —— 连「点名的卡不合格」那一支也是直接返回 unbound,而不是
52
- * 退回去猜。判据锚在这里:显式支的两条出口(绑定 / 拒绝)都不落进 else。
53
- */
54
26
  bind(taskId, parentToolCallId) {
55
27
  const existing = taskCardBinding.get(taskId);
56
28
  if (existing !== undefined)
57
29
  return existing;
58
30
  let target;
59
31
  if (parentToolCallId !== undefined) {
60
- // P1② 精确绑定 —— wire 点名了委派卡。信但不无条件信([1617]①,frame-lane-matrix #1):
61
- // 被点名的卡**开着**且**不是** subagent 形工具(Task/Agent/Fork)时拒绝绑定 —— 否则
62
- // workflow/Bash 卡一关就会把这条行 settle 掉、还会收走它的 inline stats(错归因)。
63
- // 行保持 unbound(taskId 键的 rollup 仍是真的)。已关/没见过的 id 仍**惰性绑定**(inert):
64
- // 终态由通知落,严格优于错绑另一张开着的卡。
65
32
  const named = cards.peek(parentToolCallId);
66
33
  if (named !== undefined && !SUBAGENT_TOOL_NAMES.has(named.name))
67
34
  return undefined;
68
35
  target = parentToolCallId;
69
36
  }
70
37
  else {
71
- // ── old-engine fallback(FIFO 猜父)—— B6 P1-2 归属定案:**不删** ────────────────────
72
- // 🔴 判据先摆正:这条臂不是「P1-2 之前的临时权宜」,它是 **tolerate-absent 的保护臂**。
73
- // 决定后果方向的量 = 「这条子代行有没有归属」:
74
- // · 回落在 ⇒ 老引擎(不发 parentToolCallId)上行仍绑到唯一那张开着的委派卡 ⇒ 行有归属、
75
- // inline stats 有去处、关卡时被 settle;
76
- // · 回落删掉 ⇒ 老引擎上行恒 unbound ⇒ 转录里那条群组行永远不长统计、卡关了也不结,
77
- // 用户看到一条转圈到 turn 末的行。
78
- // ⇒ **保护型缺席 = 漏保护**,与 `parked → awaiting approval` 同判(不删)。
79
- // 猜错的风险已被两道门收窄:只考虑**未绑**且**subagent 形**的卡;≥2 张候选时上层
80
- // 直接判含糊、保持 unbound(见 task_progress 臂的 unboundCandidates() > 1)。
81
- // 退役条件(登记在 compensations.ts T32):P1-2 到货 **且** 达标线 ≥ server 1.290 —— 即
82
- // 「不再支持不发 typed 双键的引擎」那一天,才是删它的日子;只要还能连老引擎就得留着。
83
- // 覆盖:diff 门 14 条 task_progress 帧里有 6 条不带 parentToolCallId(其中 2 条走 workflow
84
- // lane 门、不到这里),真正压这条回落臂的是 4 条(FIFO 命中 / 含糊拒绝 / settle / 跨 turn)。
85
- // 🔴 依赖 `cards.entries()` 的**开卡顺序**(Map 插入序 = FIFO 语义本身),换成任何
86
- // 无序容器都会静默改判别结果。
87
38
  for (const [id, p] of cards.entries()) {
88
39
  if (!boundToolCalls.has(id) && SUBAGENT_TOOL_NAMES.has(p.name)) {
89
40
  target = id;
@@ -95,15 +46,11 @@ export function createPanelTaskLedger(ctx, cards, inst) {
95
46
  return undefined;
96
47
  taskCardBinding.set(taskId, target);
97
48
  boundToolCalls.add(target);
98
- // #6 live vs inert:只有绑到**此刻开着**的卡才把行系进本 turn 的生命周期
99
- // (FIFO 目标恒开着;显式目标可能已关 = inert)。
100
49
  if (cards.has(target))
101
50
  liveBoundPanelTasks.add(taskId);
102
- // cli 的 `SEMA_BIND_PROBE` 文件探针 → 注入口(载荷逐字同形,见 ADAPTER_DIVERGENCES-5)。
103
51
  ctx.probe?.('bind', `bind ${taskId} -> ${target} via=${parentToolCallId !== undefined ? 'explicit' : 'fifo'}`);
104
52
  return target;
105
53
  },
106
- /** 对抗复审修(w0zwpa251 #1):≥2 张未绑的 subagent 形卡开着且 wire 没点名 ⇒ 任何猜都是错归因。 */
107
54
  unboundCandidates() {
108
55
  let n = 0;
109
56
  for (const [id, p] of cards.entries()) {
@@ -116,35 +63,22 @@ export function createPanelTaskLedger(ctx, cards, inst) {
116
63
  markLive: (taskId) => {
117
64
  livePanelTasks.add(taskId);
118
65
  },
119
- // #6 session 常驻台账:live-bound(卡本 turn 开着)= 本 turn 生命周期,turn 末可 sweep;
120
- // inert/unbound(跨 turn bg 子代形)= 常驻,两处 sweep 都放行,终态只认通知帧。
121
66
  noteResidency: (taskId, residentKey = taskId) => {
122
67
  if (liveBoundPanelTasks.has(taskId))
123
68
  clearEnginePanelTaskResident(residentKey);
124
69
  else
125
70
  markEnginePanelTaskResident(residentKey);
126
71
  },
127
- /** SubagentStart(cli fireSubagentStartHook 的臂化):类型恒记,fire 一生一次。 */
128
72
  *start(taskId, agentType) {
129
- // 0.75.1 CC-95(b):类型**在场才记**(缺席不写空串进表 —— stop 那一半读的是同一份记忆,写了空串
130
- // 就等于把「不知道」渲成了一个词)。Stop 的类型查找恒记(fire 与否无关)。
131
73
  if (agentType !== undefined)
132
74
  subagentTypeById.set(taskId, agentType);
133
- // 🔴 判重 + 记号都在**唯一那条 yield 之前**(矩阵 §2.1②:零残余窗,别挪)。
134
75
  if (inst.hasFiredSubagentStart(taskId))
135
76
  return;
136
77
  inst.markFiredSubagentStart(taskId);
137
78
  ctx.probe?.('hook', `start ${taskId} type=${agentType ?? '-'}`);
138
79
  yield chrome({ kind: 'subagent_lifecycle', laneProof: laneOf(taskId), phase: 'start', taskId, ...(agentType !== undefined ? { agentType } : {}) });
139
80
  },
140
- /**
141
- * 结掉一张关闭中的卡所绑的面板行(`cardId`),或 turn 末/abort 结掉**本 turn 活绑**的全部行
142
- * (`cardId===null` 的防御 sweep —— 子代从不发终态 tick)。
143
- * 拍1 查看态:显式关卡臂携委派卡的 output(= 子代最终报告)到 end 事件上;sweep 无报告。
144
- */
145
81
  *settle(cardId, isError, report) {
146
- // inline 群组行孪生(clay dogfood 2026-07-03):冻结该卡的 tick 终值,免得"N agents finished"
147
- // 行把真实工具数/token 重置回 0。null-cardId 的 sweep 结掉每一条活着的 inline 条目。
148
82
  if (cardId !== null) {
149
83
  yield chrome({ kind: 'inline_task_stats', laneProof: { lane: 'subagent', parentToolCallId: cardId }, op: 'settle', cardId, isError });
150
84
  }
@@ -154,9 +88,6 @@ export function createPanelTaskLedger(ctx, cards, inst) {
154
88
  for (const taskId of livePanelTasks) {
155
89
  if (cardId !== null && taskCardBinding.get(taskId) !== cardId)
156
90
  continue;
157
- // #6 —— 防御 sweep 只结**本 turn 活绑**的行(流被截断的形)。session 常驻行
158
- // (inert 绑定 / unbound = 跨 turn bg 子代)绝不在这里冻成假 completed:它的终态真相
159
- // 由 task_notification / bg_notification 落(通知-settle 边)。
160
91
  if (cardId === null && !liveBoundPanelTasks.has(taskId))
161
92
  continue;
162
93
  if (endedPanelTasks.has(taskId))
@@ -183,19 +114,7 @@ export function createPanelTaskLedger(ctx, cards, inst) {
183
114
  });
184
115
  }
185
116
  },
186
- /**
187
- * 通知臂(task_notification)那半场,整段收进来 —— 拆分前它在臂里直写 `endedPanelTasks`
188
- * 与直读 `firedSubagentStartHookTaskIds`,是矩阵点名的两条跨模块面。
189
- * 🔴 **判重在唯一的 yield 之前**(0.65.1 / B-087;test [6961] 对抗复审轨实抓):拆分时这里
190
- * 「逐字保持」了拆分前的次序 —— 先发 end 行、再判重 —— 判重只护着 if-started stop,end
191
- * 行本身无条件发。B-074 让终态 tick 也能结 bg 行之后,`tick(completed) → task_notification`
192
- * 这个顺序就在面板上落**两条** end(反序只有一条,因为 tick 腿判重在前)。三条腿共用
193
- * `endedPanelTasks` 的承诺(§30d G30-11)要在**每条腿**的 yield 之前成立;常驻账照清
194
- * (清一次幂等,真终态权威性不变)。
195
- */
196
117
  *settleFromNotification(taskId, isError) {
197
- // #6 通知-settle 边(推送半场):session 常驻的 bg 子代行不再被 turn sweep 假结,
198
- // 真终态在此落行(failed/killed ⇒ isError 真归因)。
199
118
  clearResidencyBothKeys(taskId);
200
119
  if (endedPanelTasks.has(taskId))
201
120
  return;
@@ -205,9 +124,6 @@ export function createPanelTaskLedger(ctx, cards, inst) {
205
124
  laneProof: mainLane(),
206
125
  event: { kind: 'end', taskId, isError },
207
126
  });
208
- // SubagentStop 只对**真 fire 过 Start** 的子代(workflow runId / 外来 id 不配对乱 fire)。
209
- // cli 同门 `firedSubagentStartHookTaskIds.has(taskId)` —— B4 前本臂无条件发 stop,
210
- // 宿主若照 guard 注释自建台账才不会乱 fire;台账在库里就该库来判。
211
127
  if (inst.hasFiredSubagentStart(taskId)) {
212
128
  yield chrome({
213
129
  kind: 'subagent_lifecycle',
@@ -218,16 +134,6 @@ export function createPanelTaskLedger(ctx, cards, inst) {
218
134
  });
219
135
  }
220
136
  },
221
- /**
222
- * B-074(0.65.0)**终态 tick 边**(契约见端口声明)。
223
- *
224
- * 🔴 **幂等在最前面**:同一条行可能被三条腿同时收到终态(终态 tick / 关卡 tool_end /
225
- * task_notification),`endedPanelTasks` 是它们共用的那本账 —— 判重放在**唯一的 yield 之前**
226
- * (与 `start()` 同一条零残余窗纪律),否则一条 end 会在面板上重复出现。
227
- * 🔴 **inline 群组行孪生同拍冻结**:绑了卡的行要把 tick 终值冻住,否则转录里那条
228
- * "Running N agents…" 会被后到的 `settle_all` 把真实工具数重置回 0(clay dogfood 那一例)。
229
- * 🔴 **常驻账要清**:终态 tick 是**权威**终点 ⇒ 这条行不再是「等通知帧收尸」的常驻行。
230
- */
231
137
  *settleFromTerminalTick(taskId, isError) {
232
138
  if (endedPanelTasks.has(taskId))
233
139
  return;
@@ -244,7 +150,6 @@ export function createPanelTaskLedger(ctx, cards, inst) {
244
150
  isError,
245
151
  });
246
152
  }
247
- // SubagentStop 只对**真 fire 过 Start** 的子代(同 settleFromNotification 的 if-started 门)。
248
153
  if (inst.hasFiredSubagentStart(taskId)) {
249
154
  const agentType = subagentTypeById.get(taskId);
250
155
  yield chrome({