@sema-agent/client-core 0.77.0 → 0.77.2

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 +23 -1
  2. package/README.md +5 -4
  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 +1 -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 +13 -358
  182. package/dist/hitl/persistedRulesWire.js +0 -310
  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 +1 -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 +0 -249
  284. package/dist/request/taskRequest.js +10 -496
  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 +11 -65
  346. package/dist/subagent/engineTaskHandleWire.js +20 -131
  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 +62 -1
  382. package/package.json +1 -1
@@ -1,63 +1,9 @@
1
- /**
2
- * sqlEngineCapability — S-131「SQL 引擎姿态」的**三端共用读面**(server ≥7.60.0 的
3
- * `GET /v1/capabilities` 新增 `sql` 位;sdk 8.3.0 `Capabilities.sql`)。
4
- *
5
- * ── 归层出身(不掩盖:这份窄读器**本来就该在这里**)────────────────────────────────────────
6
- * 0.58.0 时本件写在壳里(cli `src/sema/sqlEngineCapability.ts`),理由是当时 client-core 的
7
- * `engineCapsCache` 公面只到「平铺布尔 / 平铺串 / 嵌套布尔」三形,**没有嵌套对象的读口** ⇒ 这一格
8
- * 在包侧结构上读不出来。0.59.0 两件同批补齐:`engineCapsCache` 加四态读口
9
- * {@link import("./engineCapsCache.js").engineCapValue},本模块把壳那份窄读器**逐字上收**。
10
- * 🔴 **导出名与壳侧那份逐字相同**,这是 drift-lock:包一发同名符号,壳的
11
- * `run-layer-shadow-export-gate-test.mjs`(同名影子导出门)当场红,逼那份壳侧副本换装成
12
- * `export { … } from '@sema-agent/client-core'`,而不是两边各自演进(DISEASE-SHAPES S37 的病形
13
- * 正是「包侧有了、壳侧没删」)。
14
- *
15
- * ── 上游事实(fixture 直证,不采信 CHANGELOG)──────────────────────────────────────────────
16
- * `@sema-agent/server/dist/http/routes/capabilities.js` 的回体里多一位
17
- * `sql: projectSqlEngineCapability(deps.sqlEngineFacts?.())`;7.59.0 的同一文件**没有这个键**。
18
- * 值的形(`server/dist/sql-engine-posture.d.ts` 逐字):
19
- * · `{ engine, isolation, txnMode }` —— 驱动在**真连接**上 `SET` 完之后**回读**的值
20
- * (「取实例真值,不按配置推断」);
21
- * · `null` —— **本部署没有 SQL 后端**(env-only / local 文件后端)。逐字:「缺席就是缺席…
22
- * 不铸一个看起来像答案的空壳」。
23
- *
24
- * ── 🔴 四态,不是两态([honest-absence-not-fabricated-zero])────────────────────────────────
25
- * 这一格上有**四件互不相同**的事,消费端一件都不许折进另一件:
26
- * ① `unobserved` —— **本进程一次 caps 响应都没观测到**。一次性 `sema doctor` 就是这一档
27
- * (它不起 live client ⇒ caps tee 从来没触发过)。它**不是**「引擎没有 SQL」。
28
- * ② `not_reported` —— caps 观测到了,而回体上**没有** `sql` 这个键 ⇒ 老引擎(<7.60.0)。
29
- * 它**不是**「这台部署没有 SQL 后端」—— 老引擎有没有库,这个读面答不了。
30
- * ③ `none` —— 引擎**明确说** `null`:这台部署没有 SQL 后端。这是一个**正面事实**,不是缺席;
31
- * 把它渲成「未观测」等于把引擎真给的答案丢掉(壳自 spawn 的单机形恒落这一档,是常态读数)。
32
- * ④ `present` —— 三座俱全,原样渲。
33
- * 🔴 **绝不渲 0 / 绝不编一个姿态**:读不出来就说读不出来,哪一种读不出来也要分清楚。
34
- * ⇄ 这四个词与 {@link import("./engineCapsCache.js").EngineCapValueState} 的四态**同一套词汇**
35
- * (`unobserved` / `not_reported` / `null`→`none` / `value`→`present`):通用读口答「这一格上有
36
- * 没有值」,本模块答「这一格的值成不成形」,刻意分层 —— 通用口不认识 `sql` 的三座,窄读器不该
37
- * 重新实现一遍缓存与代际。
38
- *
39
- * ── 🔴 UNTRUSTED-for-display ──────────────────────────────────────────────────────────────
40
- * `isolation` 是从**数据库服务器**变量里回读的串(`@@transaction_isolation` 一族),不是引擎铸的
41
- * 闭词;三座一律只渲染、绝不参与任何判定,呈现前过本包的单行消毒 + 封长单源
42
- * ({@link capForDisplay}:先转义、后按转义结果封长)。
43
- */
44
1
  import { capForDisplay } from './fleetTaskDesc.js';
45
2
  import { engineWireTarget } from './engineWireTarget.js';
46
3
  import { createEngineCapReader } from './engineCapReader.js';
47
- /**
48
- * caps 回体 → 本格读数;**畸形一律 `undefined`**(= 这一格不写 ⇒ 读口答 `unobserved`)。
49
- *
50
- * 🔴 `undefined`(键不在)与 `null`(引擎说没有)**是两件事**,本函数是本包唯一区分它们的地方:
51
- * 前者 ⇒ `not_reported`(老引擎),后者 ⇒ `none`(这台部署没库)。用 `??` / falsy 判会把
52
- * 两者压成一件,而它们对运维的意思完全不同。
53
- * 🔴 三座**任一**不是非空串 ⇒ 整条判畸形(`undefined`)。绝不留一个缺座的对象:一行写着
54
- * 「isolation: 」的诊断比不渲这一行更坏(它看起来像一个答案)。
55
- */
56
4
  export function projectSqlEngineCapability(caps) {
57
5
  if (caps === null || typeof caps !== 'object')
58
6
  return undefined;
59
- // 0.77.0 整族改齐:① 非对象 / 数组 caps 不是能力表 ⇒ 畸形(投影答 undefined ⇒ 删格 ⇒ 读口答 unobserved),不再答 not_reported
60
- // (那是把「取不到」冒充「报了但没提」);② 在场判据改 hasOwn —— 原型链上的同名键永远不会被序列化上 wire,读成在场 = 凭空造一格。
61
7
  if (caps === null || typeof caps !== 'object' || Array.isArray(caps))
62
8
  return undefined;
63
9
  if (!Object.hasOwn(caps, 'sql'))
@@ -70,7 +16,6 @@ export function projectSqlEngineCapability(caps) {
70
16
  if (typeof sql !== 'object')
71
17
  return undefined;
72
18
  const s = sql;
73
- // 🔴 只读一次(0.74.2 CC-69 复审 R1 族扫):校验与返回各读一次,变化的 getter 会让校验读到合形、返回读到别的。
74
19
  const engine = s.engine;
75
20
  const isolation = s.isolation;
76
21
  const txnMode = s.txnMode;
@@ -78,102 +23,38 @@ export function projectSqlEngineCapability(caps) {
78
23
  return undefined;
79
24
  if (typeof isolation !== 'string' || isolation === '')
80
25
  return undefined;
81
- // 🔴 `txnMode`:`null` 是**铸点域内的合法值**(见 SqlEngineCapabilityView 顶注),不是畸形。
82
- // 但这一位在铸点上**恒在场** ⇒ 键缺席(`undefined`)与非串非 null 仍判载体坏了。
83
26
  if (txnMode !== null && (typeof txnMode !== 'string' || txnMode === ''))
84
27
  return undefined;
85
28
  return { kind: 'present', view: { engine, isolation, txnMode } };
86
29
  }
87
- /**
88
- * 本格的 per-baseUrl 读账 + tee / 读口 / 失效口 / 测试钩四口 —— 各只能力位读器**共用同一份实现**
89
- * ({@link createEngineCapReader});本文件只留这一格真正不同的部分:投影函数 {@link projectSqlEngineCapability}、doctor 措辞表,以及本位自己的判据助手(如有)。
90
- * 🔴 Map 在工厂闭包里,**一只读器一张**:收到读不懂的回体只删自己这一格,绝不连坐别的能力面。
91
- */
92
30
  const reader = createEngineCapReader({
93
31
  name: 'sql',
94
32
  project: projectSqlEngineCapability,
95
33
  makeUnobserved: () => ({ kind: 'unobserved' }),
96
34
  });
97
- /**
98
- * 宿主 caps probe 的**读面 tee** 落点(壳侧与 mcpGate / sessionBackground / projectContext /
99
- * crashConverged / workflowsGate 五条并列)。绝不 throw —— 读面腿不许反噬 caps 探测链。
100
- *
101
- * 🔴 投影 `undefined`(caps 畸形)⇒ 这一格**被删**而不是留着上一台引擎的旧值 —— 留旧值 = 拿一台
102
- * 已经不在的引擎的读数去回答「这台现在是什么姿态」。
103
- * ⚠️ **这一条只覆盖「收到了一份读不懂的回体」**。「同端口 respawn / 版本回滚之后新探测**失败或
104
- * 还在飞**」是**另一条路** —— 那时本 tee 一次都不触发,挡不住旧读数继续被当成当代事实。
105
- * 那一形由 {@link forgetSqlEngineReading} 在装配口(宿主的引擎温切臂)上收。
106
- * 🔴 **不按 principal 分域**:SQL 姿态是**这台 worker 的连接事实**,与调用者是谁无关
107
- * (与 `workflows` 那种 per-caller 的位刻意不同)—— 加一个用不上的去重域只会造出一条
108
- * 「换主体就读不到」的假缺席。
109
- *
110
- * 🔴 **`opts.generation` = 关掉「旧探测覆盖新读数」那条竞态的唯一正确供给**(0.60.0;异源对抗复审
111
- * [medium] 采纳,真病):`kickEngineCapsProbe` 的代际闸在 **probe 返回之后**才跑,而本 tee 是在
112
- * probe **内部**落地的 ⇒ 一次慢的旧探测能在 `invalidateEngineCaps` + 新探测都走完之后才返回,
113
- * 把**上一台引擎**的读数重新写回来。宿主在**起探测那一刻**调 `engineCapsGeneration(baseUrl)` 抓号、
114
- * 在这里原样交回,陈旧那一发就会被整只丢掉。
115
- * ⚠️ **不传 = 与本位到货之前逐字节同行为**(照写)—— additive 供给,不是强制门;端没跟上之前不会
116
- * 有任何东西变坏。🔴 **tee 自己抓号是假判据**(陈旧那一发在这里读到的是新代号,永远像当代的)。
117
- */
118
35
  export function noteEngineCapsForSqlEngine(baseUrl, caps, opts) {
119
36
  reader.note(baseUrl, caps, opts);
120
37
  }
121
- /**
122
- * 本进程观测到的 SQL 姿态;这一格空缺 ⇒ `{kind:'unobserved'}`(**绝不**折成 `none`)。
123
- *
124
- * 缺省读锚 = {@link engineWireTarget} 的 `baseUrl`(本包零 `process` —— portability 门盯着;
125
- * 壳那份直读 `process.env.SEMA_LIVE_BASEURL`,而 `engineWireTarget()` 的 env 臂读的就是同一个变量
126
- * ⇒ Node 壳上行为一字节不变,浏览器/桌面宿主则由 `installEngineWireTarget()` 显式装)。
127
- */
128
38
  export function observedSqlEngine(baseUrl = engineWireTarget()?.baseUrl) {
129
39
  return reader.observed(baseUrl);
130
40
  }
131
- /** 单行 UNTRUSTED 座的展示上限(UTF-16 单元;与壳侧那份同值)。 */
132
41
  const SQL_DETAIL_MAX = 40;
133
- /**
134
- * 单行 UNTRUSTED 座的呈前规整:**先转义、后按转义结果封长**({@link capForDisplay})。
135
- *
136
- * 🔴 0.62.0 改了顺序,理由记全(此前这里刻意写的是先截后转义):旧注释担心的是「先清后截会把一个
137
- * 转义序列拦腰截断,屏上留下 `\u20` 这种既不是字符也不是转义的残片」—— 那个顾虑是对的,但它的
138
- * 解法不是把顺序反过来,而是**截点避让**:共用铸点在截点落进一枚 `\uXXXX` 中间时回退到该 token
139
- * 之前(合法代理对同理回退一位)。两个毛病只能同时消掉一次:先截后转义留下的是**预算失守**
140
- * (纯控制字符的 40 字符原文转义后占 240 个显示字符,是承诺列宽的六倍),那是比残片更硬的一条。
141
- * ⚠️ **与壳那份的已知呈现差分**(换装时随批裁一次):壳 `sqlEngineDoctorDetail` 走的是
142
- * `.` 占位形消毒器(1:1,先截后清与先清后截等价),而壳自己的头注写着「单行字段(路径/URL/
143
- * 参数键值)**必须**用可见转义形」—— 三座正是单行标量。本包按那条规则实现,所以对**正常读数**
144
- * (`tidb` / `REPEATABLE-READ` / `pessimistic`)两侧逐字节相同,只有含控制符的病态值渲染形不同。
145
- */
146
42
  function cleanSqlDetailScalar(v) {
147
43
  return capForDisplay(v, SQL_DETAIL_MAX);
148
44
  }
149
- /**
150
- * 四态 → doctor 那一行的 detail 串。**唯一措辞真源**(三端共用一句话;别在各端的行装配里另写
151
- * 一遍 —— 那正是这次上收要消灭的东西)。
152
- *
153
- * 🔴 三座是 UNTRUSTED-for-display(`isolation` 是从**数据库服务器**变量里回读的串):呈前消毒 +
154
- * 封长。消毒放在这一处而不是各呈现点,是因为本函数的产物就是屏上那一串(单一出口)。
155
- * 🔴 四句话刻意**互不相同、也互不蕴含**:「未观测」不许说成「没有库」,「老引擎不报」也不许
156
- * 说成「没有库」—— 三种「读不出」对运维是三条不同的下一步。
157
- */
158
45
  export function sqlEngineDoctorDetail(reading) {
159
46
  switch (reading.kind) {
160
47
  case 'unobserved':
161
- // 0.59.2(cli B-038):不点名任何端的命令 —— 「去哪里看」是端的事,包只说事实。
162
48
  return ('not observed — the engine reports it on /v1/capabilities; this process has no usable ' +
163
49
  'capabilities reading cached for it (none received, or the last one was unreadable)');
164
50
  case 'not_reported':
165
51
  return 'not reported by this engine — the capability position needs a newer engine';
166
52
  case 'none':
167
- // 0.59.2(cli 1.0.102 异源复审 [medium]):server 7.61.0 起 `sql:null` 同时覆盖「没配 SQL 后端」与
168
- // 「池初始化被拒」,wire 上不可分 ⇒ 这句话**不推断因由**,两种可能都点名并指向引擎日志。
169
53
  return ('none — the engine reports no SQL engine posture: either this deployment has no SQL backend, ' +
170
54
  'or its initialization was refused (the engine log says which)');
171
55
  case 'present': {
172
56
  const e = cleanSqlDetailScalar(reading.view.engine);
173
57
  const i = cleanSqlDetailScalar(reading.view.isolation);
174
- // 🔴 `null` 是上游明说的「这个引擎没有这个指示位」,**不是** `optimistic`(d.ts 逐字点名的
175
- // 误读),也不是「读不出来」⇒ 渲一句显式的话,既不留白也不编一个档位。
176
- // 消毒器对 `null` 无意义(它只吃串),所以这一格必须在消毒**之前**分臂。
177
58
  const t = reading.view.txnMode === null
178
59
  ? 'no txn-mode indicator on this engine'
179
60
  : cleanSqlDetailScalar(reading.view.txnMode);
@@ -181,24 +62,9 @@ export function sqlEngineDoctorDetail(reading) {
181
62
  }
182
63
  }
183
64
  }
184
- /**
185
- * **换代失效口**(与 {@link import("./engineCapsCache.js").invalidateEngineCaps} 并列,由宿主在
186
- * 引擎温切成功后调)。
187
- *
188
- * 🔴 **代际闸挡不住这一形**:那道闸挡的是「旧响应**写脏**新一代」(tee 只在确认代际仍当代之后
189
- * 才落地),而本格的病是反过来的 —— 新一代的探测**根本没成功**(超时 / reject / 还在飞),
190
- * tee 于是一次都没触发,上一台引擎留在同一端口上的读数就继续被 {@link observedSqlEngine}
191
- * 当成**当代事实**答出去。同端口 respawn / 版本回滚 / 引擎起不来三条路都走这里,而它在
192
- * doctor 上的形态最坏:一行**肯定句**(「这台部署是 tidb 悲观事务」/「这台引擎不报这一位,
193
- * 要升级」),说的却是一台已经不在的引擎。
194
- * 🔴 处置是**清成未观测**,不是留旧值也不是铸一个 `none` —— 「我这一代还没听到答案」是这一格
195
- * 唯一诚实的话(与 {@link noteEngineCapsForSqlEngine} 对畸形回体的处置同向)。
196
- * 空串 ⇒ no-op;绝不 throw(它跑在引擎温切路径上)。
197
- */
198
65
  export function forgetSqlEngineReading(baseUrl) {
199
66
  reader.forget(baseUrl);
200
67
  }
201
- /** 测试钩子。 */
202
68
  export function __resetSqlEngineReadingsForTests() {
203
69
  reader.__resetForTests();
204
70
  }
@@ -1,93 +1,14 @@
1
- /**
2
- * ⇄ B2 批搬迁(2026-07-27,多端改造设计稿 §3 B2):cli src/sema/sseIdleTriage.ts 逐字搬入(只 import SDK)。
3
- */
4
- /**
5
- * src/sema/sseIdleTriage.ts — turn-stream SSE idle-silence triage(TB2.0 反馈批 D · P0-2 壳半场,2026-07-15)。
6
- *
7
- * WHY: TB2.0 bench 真实案例 —— agent 长跑前台编译 ~9.5min,工具完成前壳侧 45s 空闲监测器
8
- * (`@sema-agent/sdk` readSseFrames HEARTBEAT_GRACE_MS)命中 `SSE: no data for 45000ms (heartbeat
9
- * silence)` → 整轮 rc=1 丢弃,引擎不知情继续跑完(access log 499)。分诊报告判决①修正段拍定:
10
- * 壳侧独立可发 = S1(SDK grace 透传+typed SseIdleError,0.0.47 已发)+ S4(grace 旋钮)+
11
- * S3 缩水版(engine-alive-idle 分诊,只改报错文案,不重连)。本模块 = S4 + S3 的共享件。
12
- *
13
- * S4 · SEMA_SSE_HEARTBEAT_GRACE_MS(settings.json `env` 块 → 1a-envseed → process.env,其它 wire
14
- * 旋钮同一车道):整数毫秒,合法域 [5000, 600000];非法/缺省 = 不透传(SDK 默认 45s)——静默
15
- * fail-soft,一个 settings typo 绝不 brick 任何 run(scenarioWire settings-lane 纪律)。
16
- * ⚠️ 作用面 = 会话 turn 流(tasks.stream / liveClient)一条车道。SDK 控制通道(SSETransport.ts:21
17
- * LIVENESS_TIMEOUT_MS=45s)自带重连+give-up 自愈,本旋钮【不】达那条车道——这不是全局 grace。
18
- *
19
- * S3 缩水版 · engine-alive-idle 分诊:liveClient 的 tasks.stream 包装 catch 到 SseIdleError 时,
20
- * 先判 signal.aborted(用户中止契约先行,seamQuery.ts:1073——Esc 撕流绝不被分诊吞),再 GET
21
- * `/health`(非 /healthz;server dist server.js:290)短超时探引擎活性:引擎死 → 原样抛(现行
22
- * engine-down/not-restart 路径不变);引擎活 → 给同一错误对象打 engine-alive-idle 标记,
23
- * seamQuery 的 tearVerdict 恢复腿据此渲染诚实分诊文案(engineAliveIdleContent)。
24
- *
25
- * 【本模块绝不重连】(判决①修正段圣旨,范围随 M2 精化):非 detach 车道上 tasks/stream 客户端
26
- * 断连 = server onDisconnect ac.abort() 终止 run(anti token-burn by design),且该车道帧无 id
27
- * 不可位置续传——空闲监测器抛出的那一刻 finally 已 cancel res.body,run 已被这次断连自身中止,
28
- * 同 key in-flight 重放拿到的只是 aborted 结局。前台另有既有裁决:mid-turn 工具副作用非幂等,
29
- * 绝不自动重发。引擎 E2(server ≥1.196 x-detach-on-disconnect,[854]①)已到货:headless `-p`
30
- * detach 车道的 R1 换道重连 = 重连腿 M2,住在 headlessReconnectWire.ts(liveClient 管线最内层,
31
- * 只在 detach 头已发出的流上武装);本模块保持「探活+打标,不重连」——交互 REPL 与一切非
32
- * detach 车道的取消契约一根毛不动,M2 耗尽预算后判死文案也仍由这里的打标驱动。
33
- */
34
1
  import { type EnvLike } from './hostEnv.js';
35
- /** Settings-lane env knob(settings.json `env` 块 → 1a-envseed → process.env)。整数毫秒。 */
36
2
  export declare const SSE_HEARTBEAT_GRACE_ENV = "SEMA_SSE_HEARTBEAT_GRACE_MS";
37
- /** 合法域下界:低于 5s 会把正常 token 间隙误判成静默。 */
38
3
  export declare const SSE_GRACE_MIN_MS = 5000;
39
- /** 合法域上界:10min——超过引擎自身各级 idle 顶,再长没有意义。 */
40
4
  export declare const SSE_GRACE_MAX_MS = 600000;
41
- /** SDK 默认(readSseFrames HEARTBEAT_GRACE_MS)——文案引用用,不在本模块生效。 */
42
5
  export declare const SDK_DEFAULT_GRACE_MS = 45000;
43
- /**
44
- * S4 — resolve the turn-stream heartbeat grace override. Unset/empty → undefined(SDK 默认 45s,
45
- * 不透传);非纯十进制整数 / 超出 [5000,600000] → undefined(静默落默认,fail-soft)。
46
- */
47
6
  export declare function resolveSseHeartbeatGraceMs(env?: EnvLike): number | undefined;
48
- /** 给 SseIdleError 打 engine-alive-idle 标(引擎 /health 已确认活着)。返回同一对象。 */
49
7
  export declare function markEngineAliveIdle<E extends Error>(err: E): E;
50
- /**
51
- * engine-alive-idle 判型:命中返回静默时长 elapsedMs(SseIdleError 0.0.47 自带;缺失兜 0),
52
- * 未命中返回 undefined。seamQuery tearVerdict 腿与 headless `-p` 的 stderr 面共用。
53
- */
54
8
  export declare function engineAliveIdleElapsedMs(err: unknown): number | undefined;
55
- /**
56
- * SseIdleError 判型:instanceof 为主;双包风险(bundle 内外两份 SDK class identity 分叉)下
57
- * name 兜底——name 由 SDK 构造器冻结为 'SseIdleError',非我方铸造。
58
- */
59
9
  export declare function isSseIdleError(err: unknown): boolean;
60
- /**
61
- * 引擎活性探针 — SDK probeHealth(GET `${baseUrl}/health`;端点是 /health 非 /healthz),默认 2s
62
- * 预算,永不抛:alive = 200 且 status==='ok';非 2xx / 不可达 / 超时 = not alive(引擎死 → 现行
63
- * 失败路径,分诊绝不让真死引擎空等)。与 engineUpgradeCoordinator 的 classifyStreamTear 同款姿势。
64
- * SDK 宪法迁移批差分记账:原实现只看 res.ok(200 非 JSON / status!=='ok' 也判活);SDK 额外要
65
- * status==='ok'——service /health 200 恒报 status:'ok',契约面等价,对「200 但引擎自述非 ok」的
66
- * 病态更严格诚实。
67
- */
68
10
  export declare function probeEngineAlive(baseUrl: string, timeoutMs?: number): Promise<boolean>;
69
- /**
70
- * S3 缩水版 — the tasks.stream diagnose wrapper(liveClient 出口整流罩)。
71
- * 透传 inner 的每个事件;仅当 inner 以 SseIdleError 收场时介入:
72
- * 1. signal.aborted 先行 — 用户中止(Esc)撕流原样抛,绝不探活/绝不改判(seamQuery.ts:1073 契约);
73
- * 2. GET /health 探引擎活性(2s 预算);
74
- * 3. 引擎活 → 同一错误对象打 engine-alive-idle 标后重抛(下游 tearVerdict 腿改文案;detach `-p`
75
- * 车道的 R1 重连发生在更内层的 headlessReconnectWire——错误能到这里 = 重连已耗尽/不可换道);
76
- * 引擎死/探测失败 → 原样重抛(现行 classifyStreamTear 会诚实判 engine-down)。
77
- * 非 SseIdleError 一律原样穿透。
78
- */
79
11
  export declare function diagnoseSseIdleTear<T>(inner: AsyncGenerator<T>, baseUrl: string, signal?: AbortSignal): AsyncGenerator<T>;
80
- /**
81
- * engine-alive-idle 的用户可见分诊文案(升级自裸 "API Error: SSE: no data for …" 行)。
82
- * 措辞如实(判决②契约),按 detach 态分叉:
83
- * · 非 detach(默认/旋钮关/版本门拒/交互车道):tasks/stream 断连 = server 端 abort 这次 run——
84
- * 不许说"任务仍在继续"的安慰话;能给的出路只有 grace 旋钮 + 手动重发。字节与批 D 发运稿一致
85
- * (存量脚本可能 grep)。
86
- * · detach 态(重连腿 M1,`x-detach-on-disconnect: true` 已随首次 POST 发出,server ≥1.196):
87
- * 断连【不再】abort run——run 已 detach,引擎会把它后台跑完并落 durable 账本;文案如实改述并
88
- * 指 `GET /v1/runs/<id>`(taskId 已知时带上)/ `sema resume` 查终局。M1 不重连(M2/M3),
89
- * 本轮前台 rc 仍非零——这是净改善:结果不再整轮丢弃。
90
- */
91
12
  export declare function engineAliveIdleContent(elapsedMs: number, detach?: {
92
13
  detached: true;
93
14
  taskId?: string;
@@ -1,107 +1,39 @@
1
- /**
2
- * ⇄ B2 批搬迁(2026-07-27,多端改造设计稿 §3 B2):cli src/sema/sseIdleTriage.ts 逐字搬入(只 import SDK)。
3
- */
4
- /**
5
- * src/sema/sseIdleTriage.ts — turn-stream SSE idle-silence triage(TB2.0 反馈批 D · P0-2 壳半场,2026-07-15)。
6
- *
7
- * WHY: TB2.0 bench 真实案例 —— agent 长跑前台编译 ~9.5min,工具完成前壳侧 45s 空闲监测器
8
- * (`@sema-agent/sdk` readSseFrames HEARTBEAT_GRACE_MS)命中 `SSE: no data for 45000ms (heartbeat
9
- * silence)` → 整轮 rc=1 丢弃,引擎不知情继续跑完(access log 499)。分诊报告判决①修正段拍定:
10
- * 壳侧独立可发 = S1(SDK grace 透传+typed SseIdleError,0.0.47 已发)+ S4(grace 旋钮)+
11
- * S3 缩水版(engine-alive-idle 分诊,只改报错文案,不重连)。本模块 = S4 + S3 的共享件。
12
- *
13
- * S4 · SEMA_SSE_HEARTBEAT_GRACE_MS(settings.json `env` 块 → 1a-envseed → process.env,其它 wire
14
- * 旋钮同一车道):整数毫秒,合法域 [5000, 600000];非法/缺省 = 不透传(SDK 默认 45s)——静默
15
- * fail-soft,一个 settings typo 绝不 brick 任何 run(scenarioWire settings-lane 纪律)。
16
- * ⚠️ 作用面 = 会话 turn 流(tasks.stream / liveClient)一条车道。SDK 控制通道(SSETransport.ts:21
17
- * LIVENESS_TIMEOUT_MS=45s)自带重连+give-up 自愈,本旋钮【不】达那条车道——这不是全局 grace。
18
- *
19
- * S3 缩水版 · engine-alive-idle 分诊:liveClient 的 tasks.stream 包装 catch 到 SseIdleError 时,
20
- * 先判 signal.aborted(用户中止契约先行,seamQuery.ts:1073——Esc 撕流绝不被分诊吞),再 GET
21
- * `/health`(非 /healthz;server dist server.js:290)短超时探引擎活性:引擎死 → 原样抛(现行
22
- * engine-down/not-restart 路径不变);引擎活 → 给同一错误对象打 engine-alive-idle 标记,
23
- * seamQuery 的 tearVerdict 恢复腿据此渲染诚实分诊文案(engineAliveIdleContent)。
24
- *
25
- * 【本模块绝不重连】(判决①修正段圣旨,范围随 M2 精化):非 detach 车道上 tasks/stream 客户端
26
- * 断连 = server onDisconnect ac.abort() 终止 run(anti token-burn by design),且该车道帧无 id
27
- * 不可位置续传——空闲监测器抛出的那一刻 finally 已 cancel res.body,run 已被这次断连自身中止,
28
- * 同 key in-flight 重放拿到的只是 aborted 结局。前台另有既有裁决:mid-turn 工具副作用非幂等,
29
- * 绝不自动重发。引擎 E2(server ≥1.196 x-detach-on-disconnect,[854]①)已到货:headless `-p`
30
- * detach 车道的 R1 换道重连 = 重连腿 M2,住在 headlessReconnectWire.ts(liveClient 管线最内层,
31
- * 只在 detach 头已发出的流上武装);本模块保持「探活+打标,不重连」——交互 REPL 与一切非
32
- * detach 车道的取消契约一根毛不动,M2 耗尽预算后判死文案也仍由这里的打标驱动。
33
- */
34
1
  import { hostEnv } from './hostEnv.js';
35
2
  import { SseIdleError, probeHealth as sdkProbeHealth } from '@sema-agent/sdk';
36
- /** Settings-lane env knob(settings.json `env` 块 → 1a-envseed → process.env)。整数毫秒。 */
37
3
  export const SSE_HEARTBEAT_GRACE_ENV = 'SEMA_SSE_HEARTBEAT_GRACE_MS';
38
- /** 合法域下界:低于 5s 会把正常 token 间隙误判成静默。 */
39
4
  export const SSE_GRACE_MIN_MS = 5_000;
40
- /** 合法域上界:10min——超过引擎自身各级 idle 顶,再长没有意义。 */
41
5
  export const SSE_GRACE_MAX_MS = 600_000;
42
- /** SDK 默认(readSseFrames HEARTBEAT_GRACE_MS)——文案引用用,不在本模块生效。 */
43
6
  export const SDK_DEFAULT_GRACE_MS = 45_000;
44
- /**
45
- * S4 — resolve the turn-stream heartbeat grace override. Unset/empty → undefined(SDK 默认 45s,
46
- * 不透传);非纯十进制整数 / 超出 [5000,600000] → undefined(静默落默认,fail-soft)。
47
- */
48
7
  export function resolveSseHeartbeatGraceMs(env = hostEnv()) {
49
8
  const raw = env[SSE_HEARTBEAT_GRACE_ENV]?.trim();
50
9
  if (!raw)
51
10
  return undefined;
52
11
  if (!/^\d+$/.test(raw))
53
- return undefined; // 纯十进制整数——'45e3'/'45000.5'/'-1' 全部落默认
12
+ return undefined;
54
13
  const n = Number(raw);
55
14
  if (!Number.isSafeInteger(n) || n < SSE_GRACE_MIN_MS || n > SSE_GRACE_MAX_MS)
56
15
  return undefined;
57
16
  return n;
58
17
  }
59
- /** 给 SseIdleError 打 engine-alive-idle 标(引擎 /health 已确认活着)。返回同一对象。 */
60
18
  export function markEngineAliveIdle(err) {
61
19
  ;
62
20
  err.semaTearVerdict = 'engine-alive-idle';
63
21
  return err;
64
22
  }
65
- /**
66
- * engine-alive-idle 判型:命中返回静默时长 elapsedMs(SseIdleError 0.0.47 自带;缺失兜 0),
67
- * 未命中返回 undefined。seamQuery tearVerdict 腿与 headless `-p` 的 stderr 面共用。
68
- */
69
23
  export function engineAliveIdleElapsedMs(err) {
70
24
  const e = err;
71
25
  if (!e || e.semaTearVerdict !== 'engine-alive-idle')
72
26
  return undefined;
73
27
  return typeof e.elapsedMs === 'number' && Number.isFinite(e.elapsedMs) ? e.elapsedMs : 0;
74
28
  }
75
- /**
76
- * SseIdleError 判型:instanceof 为主;双包风险(bundle 内外两份 SDK class identity 分叉)下
77
- * name 兜底——name 由 SDK 构造器冻结为 'SseIdleError',非我方铸造。
78
- */
79
29
  export function isSseIdleError(err) {
80
30
  if (err instanceof SseIdleError)
81
31
  return true;
82
32
  return err?.name === 'SseIdleError';
83
33
  }
84
- /**
85
- * 引擎活性探针 — SDK probeHealth(GET `${baseUrl}/health`;端点是 /health 非 /healthz),默认 2s
86
- * 预算,永不抛:alive = 200 且 status==='ok';非 2xx / 不可达 / 超时 = not alive(引擎死 → 现行
87
- * 失败路径,分诊绝不让真死引擎空等)。与 engineUpgradeCoordinator 的 classifyStreamTear 同款姿势。
88
- * SDK 宪法迁移批差分记账:原实现只看 res.ok(200 非 JSON / status!=='ok' 也判活);SDK 额外要
89
- * status==='ok'——service /health 200 恒报 status:'ok',契约面等价,对「200 但引擎自述非 ok」的
90
- * 病态更严格诚实。
91
- */
92
34
  export async function probeEngineAlive(baseUrl, timeoutMs = 2_000) {
93
35
  return (await sdkProbeHealth(baseUrl, timeoutMs)).alive;
94
36
  }
95
- /**
96
- * S3 缩水版 — the tasks.stream diagnose wrapper(liveClient 出口整流罩)。
97
- * 透传 inner 的每个事件;仅当 inner 以 SseIdleError 收场时介入:
98
- * 1. signal.aborted 先行 — 用户中止(Esc)撕流原样抛,绝不探活/绝不改判(seamQuery.ts:1073 契约);
99
- * 2. GET /health 探引擎活性(2s 预算);
100
- * 3. 引擎活 → 同一错误对象打 engine-alive-idle 标后重抛(下游 tearVerdict 腿改文案;detach `-p`
101
- * 车道的 R1 重连发生在更内层的 headlessReconnectWire——错误能到这里 = 重连已耗尽/不可换道);
102
- * 引擎死/探测失败 → 原样重抛(现行 classifyStreamTear 会诚实判 engine-down)。
103
- * 非 SseIdleError 一律原样穿透。
104
- */
105
37
  export async function* diagnoseSseIdleTear(inner, baseUrl, signal) {
106
38
  try {
107
39
  yield* inner;
@@ -113,17 +45,6 @@ export async function* diagnoseSseIdleTear(inner, baseUrl, signal) {
113
45
  throw err;
114
46
  }
115
47
  }
116
- /**
117
- * engine-alive-idle 的用户可见分诊文案(升级自裸 "API Error: SSE: no data for …" 行)。
118
- * 措辞如实(判决②契约),按 detach 态分叉:
119
- * · 非 detach(默认/旋钮关/版本门拒/交互车道):tasks/stream 断连 = server 端 abort 这次 run——
120
- * 不许说"任务仍在继续"的安慰话;能给的出路只有 grace 旋钮 + 手动重发。字节与批 D 发运稿一致
121
- * (存量脚本可能 grep)。
122
- * · detach 态(重连腿 M1,`x-detach-on-disconnect: true` 已随首次 POST 发出,server ≥1.196):
123
- * 断连【不再】abort run——run 已 detach,引擎会把它后台跑完并落 durable 账本;文案如实改述并
124
- * 指 `GET /v1/runs/<id>`(taskId 已知时带上)/ `sema resume` 查终局。M1 不重连(M2/M3),
125
- * 本轮前台 rc 仍非零——这是净改善:结果不再整轮丢弃。
126
- */
127
48
  export function engineAliveIdleContent(elapsedMs, detach) {
128
49
  const secs = Math.max(1, Math.round((elapsedMs > 0 ? elapsedMs : SDK_DEFAULT_GRACE_MS) / 1000));
129
50
  const graceTail = `If your tasks legitimately go quiet this long (e.g. a long build), raise the idle grace: set ${SSE_HEARTBEAT_GRACE_ENV} ` +
@@ -1,71 +1,17 @@
1
- /**
2
- * steering.ts — `steering_injected` → renderable attachment projection (PURE)。
3
- * cli src/sema/steeringAttachments.ts 的逐字搬运(#52a;差分守卫钉两侧等价)。
4
- *
5
- * B1 批(2026-07-27):本文件正文与 cli `steeringAttachments.ts` 实测**逐字节相同**(`diff` 空),
6
- * 按设计稿 §2.4.1-A 裁决「不留两份实现」⇒ 本文件即唯一实现,壳侧文件改成本包的 re-export。
7
- * 双份消解方式是「壳侧让位」而非合并 —— 无需改动本文件任何一行行为码。
8
- *
9
- * core 1.251 (design/133, board [479] ask-1) echoes every engine-side SYSTEM steering injection as a
10
- * `steering_injected` wire event `{source, preview}` — `preview` = the injected body's first 220 chars
11
- * (runtask.ts:2320), echo-only (the model-facing message is unchanged). Sources today:
12
- * `deadline_nudge` / `finalize` (TB telemetry B3) and the design/133 turn-boundary attachment
13
- * producers `todo_reminder` / `task_reminder` / `changed_files` / `plan_mode`, plus the G1 [482]
14
- * members `background_tasks` / `tools_delta` (core 1.253).
15
- *
16
- * [479] ask-1 contract: a renderer that branches on `source` MUST carry a default arm — core may add
17
- * sources without a cross-repo lockstep. This mapper is that branch point: known sources get their
18
- * copy (the 四值文案), everything else falls to the generic default row (never dropped, never a
19
- * crash). PURE (no env/IO) so it unit-tests without the render graph — the wireCaps pattern.
20
- *
21
- * Render policy (CC 2.1.198 parity): CC NULL-renders its own turn-boundary reminders
22
- * (`todo_reminder` / `task_reminder` / `plan_mode` are in NULL_RENDERING_TYPES — the user never sees
23
- * them in the normal transcript). The projected `steering_injected` attachment therefore renders
24
- * ONLY in transcript (ctrl+o) / verbose mode (AttachmentMessage arm) — normal-mode output stays
25
- * byte-identical to CC, while sema's two-process split keeps engine-side injections observable.
26
- */
27
- /** A sema `steering_injected` attachment (transcript/verbose-only dim row). */
28
1
  export interface SteeringInjectedAttachment {
29
2
  type: 'steering_injected';
30
- /** The wire source verbatim (open set — core may extend). */
31
3
  source: string;
32
- /** Per-source display copy (the [479] ask-1 四值 + defaults). */
33
4
  label: string;
34
- /** The injected body's first 220 chars (wire-clipped), newline-flattened by the renderer. */
35
5
  preview: string;
36
6
  }
37
- /**
38
- * The CC `task_status` attachment shape ([487]② G1 backgroundTasks): the SAME attachment the LOCAL
39
- * post-compact path produces (services/compact/compact.ts task_status rows), so the engine's
40
- * post-compact recap renders through the SAME GenericTaskStatus (vbl) component — `Task "{desc}"
41
- * completed in background / still running in background / stopped`, 198 verbatim. VISIBLE (CC
42
- * renders these, unlike the reminders). `outputFilePath` omitted — the task lives engine-side.
43
- */
44
7
  export interface EngineTaskStatusAttachment {
45
8
  type: 'task_status';
46
9
  taskId: string;
47
10
  taskType: 'local_bash';
48
- /** 0.73.3(CC-60 A-D13):+`parked`(core 第四个 vbl 臂:停在待批检查点 —— 恰是最需要用户看见的状态)。 */
49
11
  status: 'pending' | 'running' | 'completed' | 'failed' | 'killed' | 'parked';
50
12
  description: string;
51
13
  deltaSummary: null;
52
14
  }
53
15
  export type SteeringRenderable = SteeringInjectedAttachment | EngineTaskStatusAttachment;
54
- /** Default-arm label for a source this shell build predates.
55
- *
56
- * 🔴 **按自有属性查表**(0.63.0 同形存量清剿;与 `gateVocabulary` / `permissionRuleIssue` /
57
- * `engineNoticeCodes` 三处同一条病形):`SOURCE_LABELS` 是对象表而 `source` **来自 wire**,
58
- * 裸下标会命中 `Object.prototype` 上的成员 —— `steeringLabel('constructor')` 返回一个**函数**,
59
- * 而 `??` 对函数不生效 ⇒ 它被原样拼进 attachment 的 label。默认臂在这一形上等于不存在。 */
60
16
  export declare function steeringLabel(source: string): string;
61
- /**
62
- * Project one `steering_injected` wire event into its renderable attachment(s). Always returns at
63
- * least one attachment (default 兜底) — an engine injection is never silently invisible in
64
- * transcript mode, whatever the source.
65
- *
66
- * `background_tasks` ([487]② G1): the preview lines parse into CC `task_status` attachments — the
67
- * SAME (VISIBLE) GenericTaskStatus/vbl rendering the LOCAL post-compact path uses, three-state copy
68
- * 198 verbatim, `[task_id]` addressable via TaskOutput/TaskStop. A preview clipped beyond
69
- * recognition falls back to the generic (transcript-only) row — never invisible, never a crash.
70
- */
71
17
  export declare function steeringInjectedToAttachments(source: string, preview: string): SteeringRenderable[];
package/dist/steering.js CHANGED
@@ -1,31 +1,3 @@
1
- /**
2
- * steering.ts — `steering_injected` → renderable attachment projection (PURE)。
3
- * cli src/sema/steeringAttachments.ts 的逐字搬运(#52a;差分守卫钉两侧等价)。
4
- *
5
- * B1 批(2026-07-27):本文件正文与 cli `steeringAttachments.ts` 实测**逐字节相同**(`diff` 空),
6
- * 按设计稿 §2.4.1-A 裁决「不留两份实现」⇒ 本文件即唯一实现,壳侧文件改成本包的 re-export。
7
- * 双份消解方式是「壳侧让位」而非合并 —— 无需改动本文件任何一行行为码。
8
- *
9
- * core 1.251 (design/133, board [479] ask-1) echoes every engine-side SYSTEM steering injection as a
10
- * `steering_injected` wire event `{source, preview}` — `preview` = the injected body's first 220 chars
11
- * (runtask.ts:2320), echo-only (the model-facing message is unchanged). Sources today:
12
- * `deadline_nudge` / `finalize` (TB telemetry B3) and the design/133 turn-boundary attachment
13
- * producers `todo_reminder` / `task_reminder` / `changed_files` / `plan_mode`, plus the G1 [482]
14
- * members `background_tasks` / `tools_delta` (core 1.253).
15
- *
16
- * [479] ask-1 contract: a renderer that branches on `source` MUST carry a default arm — core may add
17
- * sources without a cross-repo lockstep. This mapper is that branch point: known sources get their
18
- * copy (the 四值文案), everything else falls to the generic default row (never dropped, never a
19
- * crash). PURE (no env/IO) so it unit-tests without the render graph — the wireCaps pattern.
20
- *
21
- * Render policy (CC 2.1.198 parity): CC NULL-renders its own turn-boundary reminders
22
- * (`todo_reminder` / `task_reminder` / `plan_mode` are in NULL_RENDERING_TYPES — the user never sees
23
- * them in the normal transcript). The projected `steering_injected` attachment therefore renders
24
- * ONLY in transcript (ctrl+o) / verbose mode (AttachmentMessage arm) — normal-mode output stays
25
- * byte-identical to CC, while sema's two-process split keeps engine-side injections observable.
26
- */
27
- /** Per-source display copy. [479] ask-1 四值 + the pre-existing TB sources. Open set — an unknown
28
- * source falls to the default label (never dropped). */
29
1
  const SOURCE_LABELS = {
30
2
  todo_reminder: 'Todo list reminder re-surfaced to the model',
31
3
  task_reminder: 'Task list reminder re-surfaced to the model',
@@ -33,39 +5,20 @@ const SOURCE_LABELS = {
33
5
  plan_mode: 'Plan mode constraint re-surfaced to the model',
34
6
  deadline_nudge: 'Deadline nudge injected',
35
7
  finalize: 'Finalize instruction injected',
36
- // G1 [482]/[487]② — background_tasks normally projects to VISIBLE task_status rows below; this
37
- // label is its parse-failure fallback (clipped-beyond-recognition preview) + the tools_delta row.
38
8
  background_tasks: 'Background tasks from before compaction announced to the model',
39
9
  tools_delta: 'Newly available tools announced to the model',
40
10
  };
41
- /** Default-arm label for a source this shell build predates.
42
- *
43
- * 🔴 **按自有属性查表**(0.63.0 同形存量清剿;与 `gateVocabulary` / `permissionRuleIssue` /
44
- * `engineNoticeCodes` 三处同一条病形):`SOURCE_LABELS` 是对象表而 `source` **来自 wire**,
45
- * 裸下标会命中 `Object.prototype` 上的成员 —— `steeringLabel('constructor')` 返回一个**函数**,
46
- * 而 `??` 对函数不生效 ⇒ 它被原样拼进 attachment 的 label。默认臂在这一形上等于不存在。 */
47
11
  export function steeringLabel(source) {
48
12
  const known = typeof source === 'string' && Object.hasOwn(SOURCE_LABELS, source)
49
13
  ? SOURCE_LABELS[source]
50
14
  : undefined;
51
15
  return known ?? `Steering injected (${source})`;
52
16
  }
53
- /**
54
- * core turn-attachments.ts renderBackgroundTasks line shape (198 vbl VERBATIM phrases):
55
- * `- [${task_id}] Task "${description}" ${phrase}`
56
- * phrase: completed → "completed in background" · killed → "stopped" · running → "still running in
57
- * background" · anything else → the raw status word (core's own fallback arm). The wire preview is
58
- * clipped at 220 chars, so the LAST line may be cut — a non-matching line is skipped, never fails
59
- * the batch.
60
- */
61
17
  const PHRASE_TO_STATUS = [
62
18
  ['completed in background', 'completed'],
63
19
  ['still running in background', 'running'],
64
20
  ['stopped', 'killed'],
65
- // 0.73.3(A-D13):core 第四个 vbl 臂,排在 raw-status 兜底组之前(此前恒不命中 ⇒ compaction 后停在待批检查点的行整行消失)。
66
21
  ['parked awaiting an out-of-band approval — do NOT re-issue the gated call', 'parked'],
67
- // core's raw-status fallback arm for the non-vbl states (announce snapshots pending/running, but
68
- // parse defensively — a settle can race the boundary).
69
22
  ['pending', 'pending'],
70
23
  ['running', 'running'],
71
24
  ['completed', 'completed'],
@@ -82,11 +35,6 @@ function parseBackgroundTaskLine(line) {
82
35
  const m = /^- \[([^\]]+)\] Task "([\s\S]*)$/.exec(head);
83
36
  if (!m)
84
37
  return null;
85
- // 🔴 [2393] sweep-F16(2026-08-03 全窗复审):这里**不许**回落成空串。两个捕获组都是非可选的,
86
- // `m` 非空时它们必在场(所以这条早退今天不可达),但 `?? ''` 的**形**是「不知道就渲空串」——
87
- // 与同窗刚立的口径(`fleetAgentPanelProjection`「缺席就是 undefined,这里不许兜 0」/
88
- // `seatContract`「绝不回落成 0(那会渲成 1970)」)相反,且真出问题时会静默产出一条 taskId
89
- // 为空串的任务行(谁也定位不到)。noUncheckedIndexedAccess 适配的正解是**如实拒绝**。
90
38
  const taskId = m[1];
91
39
  const description = m[2];
92
40
  if (taskId === undefined || description === undefined)
@@ -102,16 +50,6 @@ function parseBackgroundTaskLine(line) {
102
50
  }
103
51
  return null;
104
52
  }
105
- /**
106
- * Project one `steering_injected` wire event into its renderable attachment(s). Always returns at
107
- * least one attachment (default 兜底) — an engine injection is never silently invisible in
108
- * transcript mode, whatever the source.
109
- *
110
- * `background_tasks` ([487]② G1): the preview lines parse into CC `task_status` attachments — the
111
- * SAME (VISIBLE) GenericTaskStatus/vbl rendering the LOCAL post-compact path uses, three-state copy
112
- * 198 verbatim, `[task_id]` addressable via TaskOutput/TaskStop. A preview clipped beyond
113
- * recognition falls back to the generic (transcript-only) row — never invisible, never a crash.
114
- */
115
53
  export function steeringInjectedToAttachments(source, preview) {
116
54
  if (source === 'background_tasks') {
117
55
  const tasks = preview
@@ -120,7 +58,6 @@ export function steeringInjectedToAttachments(source, preview) {
120
58
  .filter((t) => t !== null);
121
59
  if (tasks.length > 0)
122
60
  return tasks;
123
- // fall through: clipped/unrecognized body → generic row (default 兜底)
124
61
  }
125
62
  return [{ type: 'steering_injected', source, label: steeringLabel(source), preview }];
126
63
  }