@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,38 +1,3 @@
1
- /**
2
- * ⇄ B3 批搬迁(2026-07-27,多端改造设计稿 §3 B3 / §2.4.1-C):cli `src/seam/adapter/types.ts` 的
3
- * **运行时半场**搬入(`eventSeq` / `uuid` / `stamp` / `EmitContext`),外加 B3 的两个注入位。
4
- *
5
- * 🔴 **这个文件是「拆」不是「整搬」**,拆缝写明(设计稿 §2.5 同款口径):
6
- * · 搬进来的 = 三个纯函数 + EmitContext(零依赖,浏览器可跑);
7
- * · **留在壳里的 = 那 8 行 zod 推断型别名**(`z.infer<ReturnType<typeof SDKMessageSchema>>` …,
8
- * 真源 = 壳内 CC 自带的 `src/entrypoints/sdk/coreSchemas.ts`)。
9
- * 为什么不搬:① 搬它就得把 coreSchemas.ts(1,996 行 CC 自带 zod)一起 vendor 进本包并新增
10
- * `zod` 运行时依赖 —— 本包至今 `dependencies: {}`;② 那是 CC 自带文件,本包是**公开 npm 包**;
11
- * ③ 本仓既定词表来源是 `@sema-agent/agent-types`(全量镜像,非 curation)。
12
- * ⇒ 壳侧 shim 里 `export type SDKMessage = z.infer<…>` 这几行**原样保留**,壳的消费面看到的
13
- * 仍然是 zod 推断真身,一个消费点都不换型。本包内部用 agent-types 的同名镜像。
14
- *
15
- * 🔴 **两个 `SDKMessage` 不是同一个 symbol**(B1 发现#4,printToolResultFrame.ts 同款记账):
16
- * 两者都镜像 CC 的同一个 union,但是两条独立的类型来源。本包搬入的三个文件里 `SDKMessage`
17
- * **只当不透明返回型用**(每个构造点都走 `as unknown as SDKMessage`),所以这个选择在本包内
18
- * 零后果;真正的接触点在壳侧 shim 那一刻的 tsc —— 报错就是真信号,不许 any 压。
19
- *
20
- * ── 以下为原文件头(逐字保留)────────────────────────────────────────────────────────────────
21
- * Adapter-internal shared types + id-stamp / emit / uuid helpers (T21).
22
- *
23
- * The seam runs ONE direction here: downstream `@sema-ai/sdk` `AgentEvent`s
24
- * (events.ts:14-41) are projected into Claude Code `SDKMessage` arms
25
- * (coreSchemas.ts:1854 union) that the verbatim-copied REPL renders.
26
- *
27
- * Two laws this file pins (contract 02 §0-§1, 08 branding/altitude invariants):
28
- * - contract-sovereign: the WIRE shape is `AgentEvent`; CC's `SDKMessage` is
29
- * the *reference shape we reproduce* for the renderer. We DOWN-map (drop
30
- * fields), never demand the SDK grow.
31
- * - provider-agnostic: NO Anthropic symbol crosses this seam — no raw
32
- * `APIAssistantMessage` block array, no `RawMessageStreamEvent` wire, no
33
- * rate-limit window taxonomy, no `effort`/`fast_mode` vocabulary
34
- * (events.ts:6-10; contract 02 §5). Those fields are simply never populated.
35
- */
36
1
  import type { AgentEvent } from '@sema-agent/sdk';
37
2
  import type { ModelUsage, SDKMessage } from '@sema-agent/agent-types';
38
3
  import type { ChromeEvent } from '../seam.js';
@@ -40,76 +5,20 @@ export type { ModelUsage, SDKMessage };
40
5
  export type StampedAgentEvent = AgentEvent & {
41
6
  id?: string;
42
7
  };
43
- /** Read the stamped durable seq off an AgentEvent, if present. */
44
8
  export declare function eventSeq(ev: AgentEvent): string | undefined;
45
9
  export declare function uuid(): string;
46
- /**
47
- * 一条被丢弃的引擎帧的**结构化留痕**([C77]①,`EmitContext.onDroppedFrame` 的载荷)。
48
- * 两个位都取自 `EventProjection` 的 `dropped` 臂原值,包侧不做任何加工:
49
- * · `type` = 引擎那一帧的 `type`(未知臂/畸形帧的臂名);
50
- * · `why` = 投影器给的判词(今天是 `unknown_arm` / `malformed` / `turn_end_usage_absent`)。
51
- * 🔴 第三个词是 **0.68.0 新加**(core 7.17.0 #711 之后 `turn_end.usage` 恒在场 ⇒ 缺席是
52
- * **契约违约**而不是一条合法形):它是本包第一处「不是渲不出来,而是上游违约」的判词,
53
- * 正因为 `why` 是开集,宿主不必改型就能收到它。
54
- * 🔴 **不是**开集枚举:`why` 故意留成 string —— 投影器长出新判词时宿主不该编译不过,
55
- * 它本来就是「说给人看的一句判词」,不是控制流上的判别位。
56
- */
57
10
  export interface DroppedFrameInfo {
58
11
  readonly type: string;
59
12
  readonly why: string;
60
- /**
61
- * CC-13(0.69.2,additive):与 `why` 配套的人读判词(= `droppedWhySentence(why)`;开集 why 落缺省句)。
62
- * 本包铸的载荷恒带;宿主自构造的载荷可缺席 ⇒ 读方 `info.sentence ?? droppedWhySentence(info.why)`。
63
- */
64
13
  readonly sentence?: string;
65
14
  }
66
- /**
67
- * Per-stream identity context. `session_id` threads every emitted arm; it is the
68
- * service-minted sessionId (TaskResult.sessionId / RunReceipt.sessionId) once
69
- * known, falling back to a locally-minted placeholder before the first reply.
70
- */
71
15
  export interface EmitContext {
72
16
  sessionId: string;
73
- /** Wall-clock ms when the stream started draining (runStream stamps it once) — the terminal projector
74
- * derives the CC `duration_ms` from it (P1-5: the wire carries no duration; 0 was a fake constant). */
75
17
  startedAtMs?: number;
76
- /**
77
- * L-215③(0.65.0)—— **这条流跑在哪个模型上**,由**宿主开流时钉**(与 `sessionId` 同一类:
78
- * 请求是宿主构造的,模型 id 是它自己写进 `TaskRequest` 的那一个;wire 的内容帧上没有这一格)。
79
- *
80
- * 用途:`assistant` 臂的 `message.model` —— CC 的 `SDKAssistantMessage.message` 上本来就有这一位,
81
- * 而本包此前交给渲染端的是**裸** `{role, content}`,于是宿主十几处消费面只能各自猜。
82
- * 🔴 **缺席 ⇒ 那一位不铸,绝不猜**:一个猜错的模型名比没有更坏(账单/能力面会拿它去查表)。
83
- * ⚠️ **它是「这条流声明的模型」,不是「这一轮真正服务的模型」**:mid-run degrade / 网关重路由
84
- * 不改写它(与 `TaskResult.model` 同一条纪律,core 的 `task_progress.model` 臂注逐字写过)。
85
- * 要「真正服务的那一个」请读终帧的 `TaskResult.model` / `degraded`。
86
- */
87
18
  model?: string;
88
- /**
89
- * B3 新增(设计稿 §5.2 两条外向边的落点)—— chrome 事件下泄口。runStream 里那两条
90
- * `import('../../sema/…')` 动态边改走这里:宿主注入一个 sink,库侧只发事件。
91
- * 缺席 = 该宿主不消费(**语义 = 那个 UI 面在这个宿主上是哑的**,不是报错)。
92
- *
93
- * 返回 `Promise` 时 runStream 只在 **cli 原本 await 的那一处** await(plan_review park),
94
- * 其余点 fire-and-forget —— 与搬迁前的时序逐点对齐,别顺手改成全 await。
95
- */
96
19
  emitChrome?(event: ChromeEvent): void | Promise<void>;
97
- /**
98
- * [C77]① 新增(协作板 web-client 请托)—— **丢帧留痕的宿主出口**。runStream 的 `dropped` 臂
99
- * (引擎发了一帧、这个 build 渲不出来)此前只有包侧一行 `console.error`,宿主拿不到结构化的
100
- * `{type, why}`:web 想把它并进自己的 frame-warnings 面只能去 scrape stderr,而 Ink 宿主
101
- * 干脆把 console 吞了。形制与上面的 `emitChrome` 同款 —— **可选注入,缺席 = 该宿主不消费**
102
- * (缺省行为一字不变:仍走那行 console.error)。
103
- *
104
- * 语义三条(实现在 `runStream.ts` 的 `reportDroppedFrame`):
105
- * · **每一条丢帧都发**,不去重 —— 去重是 console 那条腿为了不刷屏才有的;替宿主去重 =
106
- * 替它撒谎(两条同型丢帧在它的告警面上会变成一条,计数就不是真的了);
107
- * · 装了 sink ⇒ console 那行**让位**(sink 是更强的通道,两条腿同时喊会打乱 TUI 渲染);
108
- * · sink 抛错**绝不影响流**,并且痕迹落回 console —— 让位的前提是它真接住了。
109
- */
110
20
  onDroppedFrame?(info: DroppedFrameInfo): void;
111
21
  }
112
- /** Stamp `uuid` + `session_id` onto a freshly-built arm body. */
113
22
  export declare function stamp<T extends {
114
23
  uuid?: string | undefined;
115
24
  session_id?: string | undefined;
@@ -117,27 +26,7 @@ export declare function stamp<T extends {
117
26
  uuid: string;
118
27
  session_id: string;
119
28
  };
120
- /**
121
- * CC-13(0.69.2):段末帧(`text_end` / `reasoning_end`)的**子流身份三键**(sdk `EventIdentity`)。任一在场 =
122
- * 这条段边界不是 leader 的。此前只在 `adapt/arms.ts` 私有,自建管线的端(print 车道 / 座位层)只能逐字复刻一份;
123
- * §37y ② 的义务在包,判定也该在包 —— 端改调本判定,别再自铸。住在本文件 = 内核闭包既有文件(portability 棘轮零抬)。
124
- */
125
29
  export declare const SEGMENT_END_IDENTITY_KEYS: readonly ["parentToolCallId", "sourceTaskId", "bgAgentId"];
126
- /**
127
- * CC-13:段末帧是不是子流的(三键任一**在场**)。按「键在不在」判,不按「是不是串」判 —— 坏值已在投影口
128
- * fail-closed(malformed);这一道是给非投影口喂进来的帧(宿主自建管线 / 重放存量转录)用的。
129
- * 参数收任意对象(帧型不限;typeshape 纪律:边界层不让 `unknown` 出境)。
130
- */
131
30
  export declare function isSubFlowSegmentEnd(m: object): boolean;
132
- /**
133
- * 身份四键(`eventId` + 三只子流键)的**一次性快照**:每键恰读一次,读取抛错 ⇒ `null`(= 整帧不可信,调用方拒帧)。
134
- *
135
- * 🔴 投影口与 adapt 侧的**每一条**读身份的臂都必须走这一只(0.76.1;外部验收方对 0.76.0 的两条发现):
136
- * 0.76.0 只把投影口换成了一次性快照,adapt 侧的 compaction 臂仍先判子流再取 `parentToolCallId`(读两次),
137
- * text_end / reasoning_end 的投影更是在同一个表达式里读两次 ⇒ 值随读变的帧让「投影口 → 内部臂」与
138
- * 「直喂 adapt()」两条路分叉 —— 正是一次性快照要消灭的那一形,却只修了一侧。
139
- * 读了两次的两个值不能相信任何一个;读一次的那一份,两条路都拿同一份。
140
- */
141
31
  export declare function snapshotSegmentIdentity(m: object): Record<string, unknown> | null;
142
- /** 与 {@link isSubFlowSegmentEnd} 同一条判据,但吃的是快照(不再回头读帧)。 */
143
32
  export declare function snapshotIsSubFlow(snap: Record<string, unknown>): boolean;
@@ -1,13 +1,7 @@
1
- /** Read the stamped durable seq off an AgentEvent, if present. */
2
1
  export function eventSeq(ev) {
3
2
  return ev.id;
4
3
  }
5
- // ── identity mock-fill (contract 02 §4: AgentEvents are anonymous) ────────────
6
- // CC SDKMessage arms require `uuid` + `session_id`. The wire drops them, so the
7
- // adapter mints them client-side. A v4-shaped uuid is sufficient for the
8
- // renderer's keying; it is NEVER smuggled onto the wire.
9
4
  export function uuid() {
10
- // RFC4122-v4 shape; crypto.randomUUID when available, else a deterministic-enough fallback.
11
5
  const g = typeof globalThis !== 'undefined' ? globalThis.crypto : undefined;
12
6
  if (g && typeof g.randomUUID === 'function')
13
7
  return g.randomUUID();
@@ -17,21 +11,10 @@ export function uuid() {
17
11
  return v.toString(16);
18
12
  });
19
13
  }
20
- /** Stamp `uuid` + `session_id` onto a freshly-built arm body. */
21
14
  export function stamp(ctx, body) {
22
15
  return { ...body, uuid: body.uuid ?? uuid(), session_id: ctx.sessionId };
23
16
  }
24
- /**
25
- * CC-13(0.69.2):段末帧(`text_end` / `reasoning_end`)的**子流身份三键**(sdk `EventIdentity`)。任一在场 =
26
- * 这条段边界不是 leader 的。此前只在 `adapt/arms.ts` 私有,自建管线的端(print 车道 / 座位层)只能逐字复刻一份;
27
- * §37y ② 的义务在包,判定也该在包 —— 端改调本判定,别再自铸。住在本文件 = 内核闭包既有文件(portability 棘轮零抬)。
28
- */
29
17
  export const SEGMENT_END_IDENTITY_KEYS = Object.freeze(['parentToolCallId', 'sourceTaskId', 'bgAgentId']);
30
- /**
31
- * CC-13:段末帧是不是子流的(三键任一**在场**)。按「键在不在」判,不按「是不是串」判 —— 坏值已在投影口
32
- * fail-closed(malformed);这一道是给非投影口喂进来的帧(宿主自建管线 / 重放存量转录)用的。
33
- * 参数收任意对象(帧型不限;typeshape 纪律:边界层不让 `unknown` 出境)。
34
- */
35
18
  export function isSubFlowSegmentEnd(m) {
36
19
  const rec = m;
37
20
  for (const k of SEGMENT_END_IDENTITY_KEYS)
@@ -39,15 +22,6 @@ export function isSubFlowSegmentEnd(m) {
39
22
  return true;
40
23
  return false;
41
24
  }
42
- /**
43
- * 身份四键(`eventId` + 三只子流键)的**一次性快照**:每键恰读一次,读取抛错 ⇒ `null`(= 整帧不可信,调用方拒帧)。
44
- *
45
- * 🔴 投影口与 adapt 侧的**每一条**读身份的臂都必须走这一只(0.76.1;外部验收方对 0.76.0 的两条发现):
46
- * 0.76.0 只把投影口换成了一次性快照,adapt 侧的 compaction 臂仍先判子流再取 `parentToolCallId`(读两次),
47
- * text_end / reasoning_end 的投影更是在同一个表达式里读两次 ⇒ 值随读变的帧让「投影口 → 内部臂」与
48
- * 「直喂 adapt()」两条路分叉 —— 正是一次性快照要消灭的那一形,却只修了一侧。
49
- * 读了两次的两个值不能相信任何一个;读一次的那一份,两条路都拿同一份。
50
- */
51
25
  export function snapshotSegmentIdentity(m) {
52
26
  const rec = m;
53
27
  const snap = {};
@@ -56,13 +30,10 @@ export function snapshotSegmentIdentity(m) {
56
30
  snap[k] = rec[k];
57
31
  }
58
32
  catch {
59
- // §C1 带理由的吞:读身份键本身抛 = 这一帧连自己是谁都说不出 ⇒ 整帧拒,由调用方决定「丢」的姿势
60
- // (投影口判 malformed 留痕、adapt 侧零 chrome);再向上抛会从两个入口逸出、打断整条 adapt 流。
61
33
  return null;
62
34
  }
63
35
  return snap;
64
36
  }
65
- /** 与 {@link isSubFlowSegmentEnd} 同一条判据,但吃的是快照(不再回头读帧)。 */
66
37
  export function snapshotIsSubFlow(snap) {
67
38
  for (const k of SEGMENT_END_IDENTITY_KEYS)
68
39
  if (snap[k] !== undefined)
@@ -1,105 +1,8 @@
1
- /**
2
- * backgroundView — design/161 平行入口 `createBackgroundView(client)` 的实现(实现批 A,2026-07-30)。
3
- *
4
- * 契约锚 = ./contract.ts(类型已冻结,clay 二裁/终裁):`assistant.tasks` 与 `fleet` 都是**会话外
5
- * 读面**(assistant 跨 session;fleet 是 idle 壳唯一保持订阅的常驻 SSE),生命周期不绑任何会话的
6
- * dispose(),所以归一投影在 createAgentSession 之外单开一门。
7
- *
8
- * ── 两源两张映射表(第三套中性 7 值词表,不用任一方词表)────────────────────────────────────
9
- * · assistant(SDK types.d.ts AssistantTask.status,3 值闭集):活跃调度行词表 —— 无终态臂。
10
- * · fleet(SDK resources/fleet.d.ts FleetTaskStatus,9 值 wire 闭集 / 读侧开)。
11
- * 两张表各自显式穷举 + `never` 卫兵:上游加词当天**编译红**,不静默落兜底;wire 真发了未知词
12
- * (更新的 server × 旧 SDK)时走注释里的 open-set 回落 —— 与 workflowClient coerce 族同姿势。
13
- *
14
- * ── 拉取姿势(照 workflowClient 0.11.15 的订阅纪律)─────────────────────────────────────────
15
- * · 轮询(可配 intervalMs 缺省 2000)+ **解析即通知**(首帧不等宿主 tick)+ **订阅即对账**
16
- * (已解析后订阅同步补一发 —— 配对机制必须共享前提);订阅者抛异常吞;dispose abort 在飞
17
- * 请求(含 fleet.snapshot 的 SSE 短连)并停循环。
18
- * · 两源**独立拉取独立降级**:一源挂另一源照常;本源绝不 throw 进宿主。
19
- * · fleet 快照走 SDK `fleet.snapshot()`(G19 一次性快照 verb:开流取首 snapshot 帧即断 ——
20
- * fleet 面无独立 REST 快照端点,这是契约形不是绕路)。
21
- *
22
- * ── 'not-configured' 判别(诚实缺席纪律)────────────────────────────────────────────────────
23
- * · fleet:面 gated off 时路由在任何帧之前答 **501**(typed)—— 501 ⇒ 'not-configured',
24
- * 其它错 ⇒ 'unavailable'(拒绝形分档;错误判型走 controlRouter.errCodes 单源)。
25
- * · assistant:无 run store 时 worker 回 `{tasks:[]}` **原样透传** —— wire 上与真空不可区分。
26
- * 能探则探:`GET /v1/capabilities` 的 **`approvals`** 位为 false ⇒ 'not-configured';
27
- * caps 面自己不可达 ⇒ 判别缺席,**如实回 'ok'**(绝不编造判别)。
28
- *
29
- * 🔴 件 3 取证(读错键的定谳,协作板 [C33]③.3 → server [C34],server 3.13.0 已把辖域写进
30
- * 代码注与 ARCHITECTURE):本实现此前读 `scheduler`,那是**错的键**。
31
- * · `/v1/assistant/*` 的挂载条件是 `checkpointStore`(server `routes/approvals-assistant.ts:67`
32
- * 的分支头:`if (deps.checkpointStore && (url.startsWith("/v1/approvals") ||
33
- * url.startsWith("/v1/assistant")))`),而 caps 里**同一个谓词**的键是 `approvals`
34
- * (`capabilities.ts:56` `approvals: Boolean(deps.checkpointStore)`)。键名窄(approvals)、
35
- * 辖域宽(整条 assistant 车道)——按名字猜会猜错,这是上游文档欠账不是消费端不小心。
36
- * · `scheduler` 是**另一回事**:host 单用户腿的自唤醒 cron 工具(CronCreate/CronDelete/
37
- * CronList),它对自己承诺的东西是诚实的,与「计划运行视图在不在」无关。
38
- * · 实测后果(3.7.0 local 形,DB_BACKEND=local 无 DURABLE_APPROVAL):caps.scheduler=true 而
39
- * `GET /v1/assistant/tasks`=404 ⇒ 面板**永久**渲「Scheduled runs can't be reached right now」。
40
- * · 🔴 两个看似更省事的修法都**不采**(server [C34] 逐条否掉):(a) 把 404 并进
41
- * not-configured —— 会吞掉「caps 说有路由却 404」这个真信号(真的漏注册/误删就再也看不见);
42
- * (b) server 把 checkpointStore 与进 scheduler —— 会污染一个本来准确的键。
43
- * **判别规则一个字没改,只改读哪个键。**
44
- * · 🔴 换键**不**收口的残余缺口(照旧候引擎位,本实现不猜):`approvals:true`(checkpointStore
45
- * 在)而 run store 未配时,worker 仍回 `{tasks:[]}` —— 那份空列表与「真的没有任务」在
46
- * wire 上依旧同形。要收口需要 wire 长出判别位(caps 或响应信封),不是客户端能推出来的。
47
- *
48
- * 字段纪律:缺席=键不在场(undefined),🔴 绝不 `?? 0` / `?? false` / `?? ''`;ISO→epoch ms 只在
49
- * assistant 行边界转一次(updatedAt/createdAt 同一个转换器,fleet 的 startedAt 本就是 epoch ms
50
- * 直出);fleet 复合 id("<runId> <taskId>")整串不拆;fleet 子行(parentId 在场)不进 rows
51
- * (子代不是用户的独立后台任务)。两源的时间锚是**两个不同的量**,各占各的契约位、互不顶替:
52
- * assistant 给 `createdAtMs`(创建时刻)、fleet 给 `startedAtMs`(launch 时刻)——见 contract.ts
53
- * 两处逐位说明。fleet 行的 `sessionId`/`scope` 被 server `stripT` 剥掉不上 wire,别在投影里等。
54
- *
55
- * ── 📋 下一批工单(件 4 调研,不在本批实现):BackgroundRow 的 canonical stop 能力判别 ────────
56
- * 起因(协作板 [C33]③.4):web 报「`runs.cancel` 的 id 空间是 taskId,而 fleet 顶层行 id 是 runId、
57
- * 子行是复合 id」⇒ 他们对 fleet 行**不渲 Stop**(没有已挣得的取消路径就不摆按钮 —— 这个处置本身
58
- * 是对的,server [C34] 也同意)。主会话裁定:**不是「fleet 行没有停止路径」,而是要按行类型分**。
59
- * 下一批要落的形状(本批只调研落档,不新建 API):
60
- * ① **能力判别**应当是行上的一等位(建议 `stop?: { verb, target }` 或等价判别),由包算、端只读
61
- * —— 端各自判 = 每端一份猜测,正是本批修的那类病。缺席即「本行不可停」,端据此**显隐** Stop。
62
- * ② **verb × id 映射**(包内既有件,全部已核实):
63
- * · agent 行(fleet 顶层/子行):`runs.taskStop(hostRunId, handle)`,包内封装 =
64
- * `src/subagent/engineTaskHandleWire.ts`(`POST /v1/runs/:id/tasks/:handle/stop?session=`)。
65
- * **handle 取法**:复合 id `"<runId> <taskId>"` 取尾段 = 引擎 taskId —— 包内已有同语义实现
66
- * `rowIdTail()`(`src/workflow.ts:24`,导出;`src/fleetAgentPanelProjection.ts:94` 有零依赖叶
67
- * 的私有同款副本);宿主 run 解析走 `getBgParentRun(handle)`(#242 批 3 起台账缺席即诚实缺席,绝不回落活跃 run)。
68
- * **能力门** = `capabilities.taskHandles`(`src/subagent/engineRowStopGate.ts`
69
- * `engineTaskHandlesCapable()`),🔴 别 trial-by-404。
70
- * **回执纪律**(同文件 `engineRowNeedsStopConfirm()`):只有 **200 算停了**;409
71
- * `stop.not_landed` / `stop.not_local` 一律保持原状(引擎里可能还在跑),端绝不自己翻 killed。
72
- * · 顶层 durable run 行:`runs.cancel(taskId)`(包内 `controlRouter.cancel`,202 ack)。
73
- * 🔴 但 **park 住的行不能走它**:suspended/needs_review 行要 cancel-by-DENY
74
- * (`src/hitl/hitlBridge.ts:283` / `src/hitl/askGateWire.ts:417` 逐字纪律)——
75
- * 所以「行在等人」(status==='waiting-on-human')时 stop 判别必须映射到决断面而不是 cancel。
76
- * · workflow 行:**今天包/SDK 面上没有 workflow 的停止 verb** —— 实装 SDK 2.0.0 的
77
- * `WorkflowsResource` 只有 list/get/journal/stream/steerAgent(逐个核过);而 `runs.d.ts:224`
78
- * 写着「a workflow handle 404s — stop workflows via their cancel face」,那个 "cancel face"
79
- * **不在 SDK 公面上**。⇒ 下一批第一步是找 server 把它钉出来(是 `runs.cancel(w* runId)`
80
- * 还是独立端点),🔴 在拿到 server 的确证之前不许猜、不许在端上摆 Stop。
81
- * ③ **不可停时端凭什么显隐**:凭①的键缺席,而**不是**凭 status —— 例如 'stopping' 行是「已经在
82
- * 停」(不该再给 Stop),park 行是「要走决断面」,老引擎无 taskHandles 是「面不在」,三者语义
83
- * 不同但都落在「不给 Stop」上;把它们压进一个 status 判断会在下一次加词时静默错。
84
- */
85
1
  import type { AgentClient, AssistantTask, FleetTaskRow, FleetTaskStatus } from '@sema-agent/sdk';
86
2
  import type { BackgroundRow, BackgroundSourceHealth, BackgroundStatus, BackgroundView, CreateBackgroundView } from './contract.js';
87
- /** assistant 3 值 → 中性 7 值。suspended(durable HITL park)与 needs_review(plan_review/dry-run
88
- * park)都是「引擎停着等人」⇒ 同落 'waiting-on-human'(区分度由行上 gate.kind 携带,不铸新词)。 */
89
3
  export declare function backgroundStatusFromAssistant(s: AssistantTask['status']): BackgroundStatus;
90
- /** fleet 9 值 → 中性 7 值。'waiting'(durable suspend)与 'awaiting approval'(needs-review /
91
- * plan-approval park)都在等人;'idle' 是「活着但此刻没在推进」—— 中性词表无此臂,按活跃行渲
92
- * 'running'(诚实取舍:它既不 queued 也不终态,更不是在等人)。 */
93
4
  export declare function backgroundStatusFromFleet(s: FleetTaskStatus): BackgroundStatus;
94
- /** 一行 AssistantTask → BackgroundRow。gate 是 `AssistantGate | null`(wire 显式 null 形)——
95
- * null 折成键缺席,非 null 原引用透传(契约位是 unknown,包不重构造)。
96
- * 🔴 [C33]③.1 三键(name / sessionId / createdAtMs)按 wire 在场性投影:缺席=键缺席,绝不
97
- * `?? 0` / `?? ''` —— 端渲的是「不知道」,不是「0 秒前创建的无名任务」。 */
98
5
  export declare function assistantTaskToBackgroundRow(t: AssistantTask): BackgroundRow;
99
- /** 一行 FleetTaskRow → BackgroundRow;子行(parentId 在场)⇒ null(调用方剔除)。
100
- * 复合 id 不拆;`currentTool` 契约位是一行字符串 —— 优先 server 已 redact 的 `currentAction`
101
- * 原文,缺席时从结构化 `currentTool` 合成;`needsAttention` fleet wire 无显式位,从 park 态
102
- * 推导(awaiting approval / awaitingPlanApproval / waiting),非 park 行键缺席(缺席≠false)。 */
103
6
  export declare function fleetTaskToBackgroundRow(r: FleetTaskRow): BackgroundRow | null;
104
7
  export interface BackgroundViewInputs {
105
8
  readonly assistant: {
@@ -111,17 +14,8 @@ export interface BackgroundViewInputs {
111
14
  readonly tasks: readonly FleetTaskRow[];
112
15
  };
113
16
  }
114
- /** 纯组合:两源(各带三态健康位)→ BackgroundView。行序 = assistant 先(core 已按 triage 排,
115
- * 消费方不再排)、fleet 后(帧到达序);非 'ok' 源的行不出(那份列表不是证词);sources 三态
116
- * 恒在场 —— 源不可用/未配置与「空列表」是三件事,端必须渲它。 */
117
17
  export declare function projectBackgroundView(i: BackgroundViewInputs): BackgroundView;
118
18
  export interface BackgroundViewOptions {
119
- /** 轮询间隔(缺省 2000ms)。 */
120
19
  readonly intervalMs?: number;
121
20
  }
122
- /**
123
- * createBackgroundView(client, opts?) — 后台任务归一视图(契约 `CreateBackgroundView`;第二参是
124
- * 实现旋钮,可选参不缩窄契约形)。生命周期:构造即起后台轮询;`snapshot()` 首解析前 null;
125
- * `subscribe` 解析即通知 + 订阅即对账;`dispose()` abort 在飞请求、停循环、清订阅。
126
- */
127
21
  export declare function createBackgroundView(client: AgentClient, opts?: BackgroundViewOptions): ReturnType<CreateBackgroundView>;
@@ -2,9 +2,6 @@ import { abortableSleep } from '../abortableSleep.js';
2
2
  import { errCodes } from '../controlRouter.js';
3
3
  import { engineWireDebugEnabled } from '../engineWireTarget.js';
4
4
  import { hostLog } from '../host.js';
5
- // ── status 映射表 ×2(显式穷举 + never 卫兵)──────────────────────────────────────────────────
6
- /** assistant 3 值 → 中性 7 值。suspended(durable HITL park)与 needs_review(plan_review/dry-run
7
- * park)都是「引擎停着等人」⇒ 同落 'waiting-on-human'(区分度由行上 gate.kind 携带,不铸新词)。 */
8
5
  export function backgroundStatusFromAssistant(s) {
9
6
  switch (s) {
10
7
  case 'running':
@@ -14,17 +11,12 @@ export function backgroundStatusFromAssistant(s) {
14
11
  case 'needs_review':
15
12
  return 'waiting-on-human';
16
13
  default: {
17
- const exhaustive = s; // 上游加词 ⇒ 这里编译红(闭集穷举卫兵)
14
+ const exhaustive = s;
18
15
  void exhaustive;
19
- // A-004.10:wire 开集回落改诚实形——此前未知新词按「活着」渲 'running',上游若加的是
20
- // 终态词就是幽灵活跃行(#182 同病)。'unknown' = 不编造任何一头。
21
16
  return 'unknown';
22
17
  }
23
18
  }
24
19
  }
25
- /** fleet 9 值 → 中性 7 值。'waiting'(durable suspend)与 'awaiting approval'(needs-review /
26
- * plan-approval park)都在等人;'idle' 是「活着但此刻没在推进」—— 中性词表无此臂,按活跃行渲
27
- * 'running'(诚实取舍:它既不 queued 也不终态,更不是在等人)。 */
28
20
  export function backgroundStatusFromFleet(s) {
29
21
  switch (s) {
30
22
  case 'queued':
@@ -46,26 +38,19 @@ export function backgroundStatusFromFleet(s) {
46
38
  case 'killed':
47
39
  return 'stopped';
48
40
  default: {
49
- const exhaustive = s; // 上游加词 ⇒ 编译红;wire 未知词(读侧开集)⇒ 'unknown' 诚实回落(A-004.10)
41
+ const exhaustive = s;
50
42
  void exhaustive;
51
43
  return 'unknown';
52
44
  }
53
45
  }
54
46
  }
55
- // ── 行投影 ×2 ────────────────────────────────────────────────────────────────────────────────
56
- /** ISO 串 → epoch ms,只在这一处转;烂串 ⇒ undefined(诚实缺席,绝不 NaN/0 外泄)。 */
57
47
  function isoToEpochMs(iso) {
58
48
  const ms = Date.parse(iso);
59
49
  return Number.isFinite(ms) ? ms : undefined;
60
50
  }
61
- /** 非空串才算「有值」:空串是「没有名字」,不是名字(占位归端)。 */
62
51
  function nonEmptyString(v) {
63
52
  return typeof v === 'string' && v !== '' ? v : undefined;
64
53
  }
65
- /** 一行 AssistantTask → BackgroundRow。gate 是 `AssistantGate | null`(wire 显式 null 形)——
66
- * null 折成键缺席,非 null 原引用透传(契约位是 unknown,包不重构造)。
67
- * 🔴 [C33]③.1 三键(name / sessionId / createdAtMs)按 wire 在场性投影:缺席=键缺席,绝不
68
- * `?? 0` / `?? ''` —— 端渲的是「不知道」,不是「0 秒前创建的无名任务」。 */
69
54
  export function assistantTaskToBackgroundRow(t) {
70
55
  const wire = t;
71
56
  const updatedAtMs = isoToEpochMs(t.updatedAt);
@@ -83,10 +68,6 @@ export function assistantTaskToBackgroundRow(t) {
83
68
  ...(t.gate !== null ? { gate: t.gate } : {}),
84
69
  };
85
70
  }
86
- /** 一行 FleetTaskRow → BackgroundRow;子行(parentId 在场)⇒ null(调用方剔除)。
87
- * 复合 id 不拆;`currentTool` 契约位是一行字符串 —— 优先 server 已 redact 的 `currentAction`
88
- * 原文,缺席时从结构化 `currentTool` 合成;`needsAttention` fleet wire 无显式位,从 park 态
89
- * 推导(awaiting approval / awaitingPlanApproval / waiting),非 park 行键缺席(缺席≠false)。 */
90
71
  export function fleetTaskToBackgroundRow(r) {
91
72
  if (typeof r.parentId === 'string' && r.parentId !== '')
92
73
  return null;
@@ -96,10 +77,6 @@ export function fleetTaskToBackgroundRow(r) {
96
77
  ? `${r.currentTool.toolName}${r.currentTool.target !== undefined ? ` ${r.currentTool.target}` : ''}`
97
78
  : undefined;
98
79
  const parked = r.status === 'awaiting approval' || r.status === 'waiting' || r.awaitingPlanApproval === true;
99
- // [C33]③.2 / server [C36]:launch 时刻 epoch ms(revive 行=本 revive 周期 wake 时刻),
100
- // ADDITIVE / tolerate-absent —— 排队中的行本就没有,缺席即键缺席(0 不是「1970 年启动」)。
101
- // 两腿同一个 mapper:`snapshot` 首帧行与 `task` 增量帧行(POST-MERGE FULL row)都过这里。
102
- // 与 fleet 投影同律:只有**有限正数**算 launch 锚(非有限值渲不出时长,只会变成 `null`)。
103
80
  const startedAtMs = typeof r.startedAt === 'number' && Number.isFinite(r.startedAt) && r.startedAt > 0 ? r.startedAt : undefined;
104
81
  return {
105
82
  key: { source: 'fleet', rowId: r.id },
@@ -113,9 +90,6 @@ export function fleetTaskToBackgroundRow(r) {
113
90
  ...(currentTool !== undefined ? { currentTool } : {}),
114
91
  };
115
92
  }
116
- /** 纯组合:两源(各带三态健康位)→ BackgroundView。行序 = assistant 先(core 已按 triage 排,
117
- * 消费方不再排)、fleet 后(帧到达序);非 'ok' 源的行不出(那份列表不是证词);sources 三态
118
- * 恒在场 —— 源不可用/未配置与「空列表」是三件事,端必须渲它。 */
119
93
  export function projectBackgroundView(i) {
120
94
  const rows = [];
121
95
  if (i.assistant.health === 'ok') {
@@ -134,7 +108,6 @@ export function projectBackgroundView(i) {
134
108
  rows,
135
109
  };
136
110
  }
137
- /** 501 判读走 errCodes 单源(SDK typed APIError 的 status;`statusCode` 变体同吃)。 */
138
111
  function isNotImplemented(err) {
139
112
  const { status } = errCodes(err);
140
113
  return status === 501;
@@ -143,17 +116,11 @@ function debugLog(msg) {
143
116
  if (engineWireDebugEnabled())
144
117
  hostLog('debug', `[client-core][backgroundView] ${msg}`);
145
118
  }
146
- /**
147
- * createBackgroundView(client, opts?) — 后台任务归一视图(契约 `CreateBackgroundView`;第二参是
148
- * 实现旋钮,可选参不缩窄契约形)。生命周期:构造即起后台轮询;`snapshot()` 首解析前 null;
149
- * `subscribe` 解析即通知 + 订阅即对账;`dispose()` abort 在飞请求、停循环、清订阅。
150
- */
151
119
  export function createBackgroundView(client, opts) {
152
120
  const intervalMs = opts?.intervalMs ?? 2000;
153
121
  let disposed = false;
154
122
  let current = null;
155
123
  let lastSerialized = null;
156
- /** caps 探针结果:null = 还没探到/caps 面不可达(判别缺席);boolean = approvals 位(见头注件 3)。 */
157
124
  let capsApprovals = null;
158
125
  const listeners = new Set();
159
126
  const abort = new AbortController();
@@ -169,8 +136,6 @@ export function createBackgroundView(client, opts) {
169
136
  }
170
137
  }
171
138
  }
172
- /** caps 只需探到一次;失败保持 null 下轮重试(caps 面挂 ≠ assistant 面挂,判别缺席不编造)。
173
- * 🔴 读的是 `approvals` 不是 `scheduler` —— 取证见头注「'not-configured' 判别」节件 3。 */
174
139
  async function probeCaps() {
175
140
  if (capsApprovals !== null)
176
141
  return;
@@ -185,26 +150,21 @@ export function createBackgroundView(client, opts) {
185
150
  async function pullAssistant() {
186
151
  try {
187
152
  const { tasks } = await client.assistant.tasks({ signal: abort.signal });
188
- // 0.72.12 CC-50(#59 A-17):200 回体缺 tasks 键 = 读不出,不是「零任务」⇒ unavailable(空表 + ok 是编的)。
189
153
  if (!Array.isArray(tasks))
190
154
  return { health: 'unavailable', tasks: [] };
191
155
  return { health: capsApprovals === false ? 'not-configured' : 'ok', tasks };
192
156
  }
193
157
  catch (err) {
194
158
  debugLog(`assistant.tasks degrade: ${String(err)}`);
195
- // 🔴 只有 approvals:false(面本就没挂)与 501(路由自报 gated off)算 not-configured。
196
- // 「caps 说有(approvals:true)却 404」**留在 unavailable** —— 那是两个真源对不上的报警,
197
- // 吞掉它以后真的漏注册/误删路由就再也看不见了(server [C34] 明确否掉的修法 (a))。
198
159
  const health = capsApprovals === false || isNotImplemented(err) ? 'not-configured' : 'unavailable';
199
160
  return { health, tasks: [] };
200
161
  }
201
162
  }
202
163
  async function pullFleet() {
203
164
  try {
204
- // G19 一次性快照 verb:SDK 内部开 SSE 流取首 snapshot 帧即断;abort.signal 直通 ⇒ dispose 能掐在飞连接。
205
165
  const { tasks } = await client.fleet.snapshot({ signal: abort.signal });
206
166
  if (!Array.isArray(tasks))
207
- return { health: 'unavailable', tasks: [] }; // CC-50:同 assistant 腿
167
+ return { health: 'unavailable', tasks: [] };
208
168
  return { health: 'ok', tasks };
209
169
  }
210
170
  catch (err) {
@@ -214,7 +174,6 @@ export function createBackgroundView(client, opts) {
214
174
  }
215
175
  async function pollOnce() {
216
176
  await probeCaps();
217
- // 两源并行、各自 try/catch —— 独立拉取独立降级,一源挂另一源照常。
218
177
  const [assistant, fleet] = await Promise.all([pullAssistant(), pullFleet()]);
219
178
  if (disposed || abort.signal.aborted)
220
179
  return;
@@ -231,13 +190,10 @@ export function createBackgroundView(client, opts) {
231
190
  await pollOnce();
232
191
  }
233
192
  catch (err) {
234
- // pullAssistant/pullFleet 各自兜底,这里只剩投影/通知的意外 —— 记录不外抛(本源绝不 throw 进宿主)。
235
193
  debugLog(`poll cycle error (kept alive): ${String(err)}`);
236
194
  }
237
195
  if (disposed || abort.signal.aborted)
238
196
  return;
239
- // REF-CC-147:abort 感知的 sleep(dispose 立即唤醒并清定时器,不留悬挂 timer 拖住宿主
240
- // 进程)——本函数原实现已抽成共享叶 ../abortableSleep.js,workflowClient.ts 同款消费。
241
197
  await abortableSleep(intervalMs, abort.signal);
242
198
  }
243
199
  }
@@ -248,7 +204,6 @@ export function createBackgroundView(client, opts) {
248
204
  },
249
205
  subscribe(onChange) {
250
206
  listeners.add(onChange);
251
- // 订阅即对账:订阅前已解析的话,notify 那一发已经打空 —— 同步补一发,宿主不用白等一个 tick。
252
207
  if (current !== null && !disposed) {
253
208
  try {
254
209
  onChange();
@@ -268,5 +223,4 @@ export function createBackgroundView(client, opts) {
268
223
  },
269
224
  };
270
225
  }
271
- // 契约锚(编译期钉):实现必须可赋给冻结契约形 —— 参数缩窄/返回面缺员在这里红,不等运行期。
272
226
  void createBackgroundView;