@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,29 +1,3 @@
1
- /**
2
- * sessionMap.ts — 「客户端会话 id ↔ 引擎会话 id」映射的**单一键形与 merge 判定**
3
- * (A-028.12,#244 族E,2026-08-15)。
4
- *
5
- * ## 收编前的形(census top-10 §2)
6
- * 同一概念两端各持一份、**键名零重合**:
7
- * · 壳 `sessionIdMapping.ts`:`{shellSessionId, engineSessionId, lastEngineTaskId, engines{}}`,
8
- * `.session-map.json` 侧车(lock + temp→fsync→rename 原子写);
9
- * · web `engine-history-wire.ts`:`{uiId:{s:engineId,t:activeTaskId}}`,localStorage。
10
- * 与 B18 seatContract 修的「同一契约两份声明、编译器永不告警」同形。本件定**单一键形**
11
- * (壳形为正:显式键名 + per-engine 命名空间,web 缩写形迁移归 web 半场)+ 两个纯 merge 判定;
12
- * 存储经 {@link SessionMapStorePort} 归端(cli = lock+原子写两进程纪律,web = localStorage)。
13
- *
14
- * 🔴 merge 语义 = 壳 `persist`/`persistEngineEntry` 传给 lockedReadMergeWrite 的那两个闭包**逐字**:
15
- * `partial ?? prior` 逐字段让位、`engines[key]` 命名空间不互相覆盖、身份键缺席=拒写(skip 判定
16
- * 带 reason 出境,落日志的措辞归端)。
17
- */
18
- /**
19
- * The engine NAMESPACE key for a CONNECTED engine target's base url: the lowercased origin
20
- * (scheme+host+port — TOFU 同粒度). ⚠️ ROLE decides the namespace, not the url shape: the
21
- * SELF-SPAWNED engine is always keyed `'local'` (callers pass no url — its port can drift across
22
- * boots, one logical engine), while a `connect`ed target is keyed by origin EVEN when loopback
23
- * (a second local engine on another port is a DIFFERENT engine with a different data root).
24
- * Pure; never throws. A malformed non-empty url falls back to the raw lowercased string
25
- * (honest separation beats aliasing it onto another namespace).
26
- */
27
1
  export function engineNamespaceKeyFor(baseUrl) {
28
2
  if (!baseUrl)
29
3
  return 'local';
@@ -34,24 +8,13 @@ export function engineNamespaceKeyFor(baseUrl) {
34
8
  return baseUrl.toLowerCase();
35
9
  }
36
10
  }
37
- /** 缺省时钟(可注入 —— 测试与「同一批双写同刻」的端语义都经它)。 */
38
11
  const isoNow = () => new Date().toISOString();
39
- /**
40
- * 顶层记录 merge(壳 `persist` 闭包逐字):`shellSessionId` 取 `partial ?? prior`,两处都缺 =
41
- * 拒写;成写 = `{...prior, ...partial, shellSessionId, updatedAt: now()}`。
42
- */
43
12
  export function mergeSessionMapRecord(prior, partial, now = isoNow) {
44
13
  const shellSessionId = partial.shellSessionId ?? prior?.shellSessionId;
45
14
  if (!shellSessionId)
46
15
  return { ok: false, reason: 'no-shell-session-id' };
47
16
  return { ok: true, record: { ...prior, ...partial, shellSessionId, updatedAt: now() } };
48
17
  }
49
- /**
50
- * per-engine entry merge(壳 `persistEngineEntry` 闭包逐字):`engines[key]` 内
51
- * `partial ?? priorEntry` 让位;`prior.engines` 作 spread 基底 —— 未被本次改动的其它 engine key
52
- * 原样保留(两个不同 key 的并发写互不覆盖的**判定半场**;「基底必须是锁内新鲜读」的进程纪律
53
- * 归端的存储实现)。拒写序:先 engineSessionId 后 shellSessionId(与壳日志序一致)。
54
- */
55
18
  export function mergeEngineEntry(prior, key, partial, shellSessionId, now = isoNow) {
56
19
  const priorEntry = prior?.engines?.[key];
57
20
  const engineSessionId = partial.engineSessionId ?? priorEntry?.engineSessionId;
@@ -1,25 +1,4 @@
1
- /**
2
- * sessionMemoryStatus.ts — 会话记忆姿态的**三端公共读面**(S-53;server ≥7.53 / core 7.0.2 #511 件1;
3
- * sdk 7.4.0 `sessions.memoryStatus` + `SessionMemoryStatus`)。
4
- *
5
- * ## 本件为什么在库里而不是在壳里
6
- * 这条读面上有**两处判定**,三端(TUI / web / desktop)各写一遍必然各错一遍:
7
- * ① **同 status 不同码**:`GET /v1/sessions/:id/memory-status` 的 404 有**两个**互不相干的含义 ——
8
- * `not_found.session`(会话未知/非属主)与 `not_found.route`(<7.53 的老 server 压根没这条路由,
9
- * 答通用回退)。按 **status** 分诊必然把「你的部署没这个面」说成「你这个会话不存在」。
10
- * 判据只能锚 `errorCode`([anchor-on-the-deciding-quantity]:决定处置的量是码,不是 status)。
11
- * ② **五键缺席语义逐键不同**(sdk `SessionMemoryStatus` 顶注逐字):`optOutSource` / `lastCaptureAt`
12
- * 在**健康会话**上就合法缺席,其余三键只在源不可读时缺席。零历史会话的真形 =
13
- * `{captureOptedOut:false, committedCount:0, foldedCount:0}`,**没有任何降级**。
14
- * 把「缺席」一律读成「没有/关着/0」就是对用户下一个证不出的断言
15
- * ([honest-absence-not-fabricated-zero])。
16
- *
17
- * ## 分工(与仓内既有形同款)
18
- * **纯判定 + 薄封装**:IO 归宿主注入(`MemoryStatusClientLike`,与 `HitlClientLike` 同款 duck-type),
19
- * 本件不构造 client、不认 baseUrl、不碰凭据。**一句面向用户的话都不铸** —— 措辞与是否上屏归端。
20
- */
21
1
  import type { SessionMemoryStatus } from '@sema-agent/sdk';
22
- /** 宿主注入的读口切片(duck-typed,与 {@link HitlClientLike} 同因:宿主可以注入自己的传输层)。 */
23
2
  export interface MemoryStatusClientLike {
24
3
  sessions: {
25
4
  memoryStatus(sessionId: string, opts?: {
@@ -29,124 +8,42 @@ export interface MemoryStatusClientLike {
29
8
  } & SessionMemoryStatus>;
30
9
  };
31
10
  }
32
- /**
33
- * 读数体 = sdk 五键 + server 7.85.0 S-403 新键 `autoConsolidationArmed`(0.72.9 CC-39②;core #863 W1 唯一读法
34
- * `autoRunOnRecommendationEffective` 组,与 manifest `autoConsolidation` 段在场性同源)。sdk 9.6.0 尚未声明 ⇒ 本包按结构读;
35
- * 缺席 = 老 server(<7.85.0)**判不了**,不折 false —— 读法见 {@link readAutoConsolidationArmed}。
36
- */
37
11
  export type MemoryStatusFacts = SessionMemoryStatus & {
38
12
  readonly autoConsolidationArmed?: boolean;
39
13
  };
40
- export type MemoryStatusVerdict =
41
- /** 200:读到了。`facts` 的**每一键**都按 wire 原样(合形才在场),缺席语义见 {@link readCaptureOptOut} 等。 */
42
- {
14
+ export type MemoryStatusVerdict = {
43
15
  readonly kind: 'ok';
44
16
  readonly sessionId: string;
45
17
  readonly facts: MemoryStatusFacts;
46
- }
47
- /** 本部署**没有这个面** —— 端应当**别提供这个入口**(不是报错,是诚实的能力缺席)。 */
48
- | {
18
+ } | {
49
19
  readonly kind: 'unsupported';
50
20
  readonly reason: MemoryStatusUnsupportedReason;
51
- }
52
- /** 会话未知**或非本 principal 所有**(server 反枚举:两者同码同串,判不出更细的,别猜)。 */
53
- | {
21
+ } | {
54
22
  readonly kind: 'not_found';
55
- }
56
- /** 分类不明**如实说** —— 绝不编一个具体原因(`classifyTurnWireError` ④ 臂同款纪律)。 */
57
- | {
23
+ } | {
58
24
  readonly kind: 'failed';
59
25
  readonly error: unknown;
60
26
  };
61
- export type MemoryStatusUnsupportedReason =
62
- /** 501 `capability.*` —— 引擎未接线 / pg+tidb 记忆后端不自带控制面。**换部署形态**才可能有。 */
63
- 'capability'
64
- /** 404 `not_found.route` —— 支持区间内 <7.53 的老 server 无本路由(通用回退)。**升 server**。 */
65
- | 'route'
66
- /** 501 `feature.*` —— 面在、开关关着。**防御臂**:今天这条路由的门序里没有 feature 臂
67
- * (sdk 顶注的门序 401→501 capability→404→501→200),留着是因为 `capability.*` 与 `feature.*`
68
- * 同为 501 而**处置相反**(SDK `CapabilityUnavailableError` / `FeatureDisabledError` 顶注逐字),
69
- * 合流会把「叫管理员开开关」说成「换部署形态」。今天不可达 ⇒ 不是缺口,是不合流的登记。 */
70
- | 'feature';
71
- /**
72
- * 一次 `memoryStatus` 失败(任意抛出物)→ 处置分型。**永不抛**。
73
- *
74
- * 🔴 **结构视图读,不 `instanceof`**(与 `readDecideCurrentPending` 逐字同因):抛出来的是不是 SDK 的
75
- * `APIError` 由**宿主**决定 —— 跨 realm / 双 SDK 实例下 `instanceof` 会把一个读得懂的错判成读不懂。
76
- * 🔴 **码优先、status 只作兜底**,且兜底只敢兜 501:
77
- * · 501 在本路由上无歧义(两条 501 臂都是「面不在/没开」)⇒ 无码时按 `capability` 兜底是安全的;
78
- * · 404 **恰恰相反**:两个码的处置相反,无码的 404 判不出 ⇒ 落 `failed`(如实说不知道),
79
- * **绝不**挑一个猜 —— 猜错任一向都是对用户的一句假断言。
80
- */
27
+ export type MemoryStatusUnsupportedReason = 'capability' | 'route' | 'feature';
81
28
  export declare function classifyMemoryStatusFailure(e: unknown): MemoryStatusVerdict;
82
- export type CaptureOptOutReading =
83
- /** 存在一条单向 capture opt-out 记录(`captureOptedOut:true` + `optOutSource:"record"`)。 */
84
- {
29
+ export type CaptureOptOutReading = {
85
30
  readonly state: 'opted_out';
86
- }
87
- /** 记录店可读且无记录 ⇒ capture 开着(`captureOptedOut:false`,`optOutSource` 合法缺席=健康默认态)。 */
88
- | {
31
+ } | {
89
32
  readonly state: 'active';
90
- }
91
- /** 记录店失败 ⇒ **判不了**(`optOutSource:"fault"` 伴 `captureOptedOut` 缺席)。
92
- * 🔴 端**禁**把它渲成「开着」或「关着」—— 那是把一次读取失败说成一个姿态。 */
93
- | {
33
+ } | {
94
34
  readonly state: 'indeterminate';
95
35
  };
96
- /**
97
- * `captureOptedOut` × `optOutSource` 的**合读**。两键必须一起读:单读 `captureOptedOut` 的话,
98
- * 「缺席」既可能是 fault(判不了)也可能是老 server 没给,读成 `false`(capture 开着)是最坏的方向 ——
99
- * 它会让端向用户断言「你的对话正在被记忆」,而真相是**不知道**。
100
- *
101
- * 🔴 **`fault` 一票否决,先于任何布尔位判**(对抗复审 [medium] 采纳,0.48.0):
102
- * 上游契约里 `optOutSource:"fault"` 与 `captureOptedOut` **缺席**同行,所以
103
- * `{captureOptedOut:false, optOutSource:"fault"}` 是一个**自相矛盾**的形。首版按「布尔位优先」写,
104
- * 于是这个形被判成 `active` —— 一个带着故障标记的载荷被读成「记忆确定开着」,正是本模块存在要防的
105
- * 那件事。矛盾形**不该产出确定判决**:版本斜差 / 畸形 200 体 / 中间层改写都能造出它,而端拿到
106
- * `active` 之后不会再问第二遍。⇒ 见到 `fault` 一律 `indeterminate`,布尔位说什么都不算数。
107
- */
108
36
  export declare function readCaptureOptOut(s: SessionMemoryStatus): CaptureOptOutReading;
109
- export type LastCaptureReading =
110
- /** 有已提交贡献,且拿到了最新一次的时刻。 */
111
- {
37
+ export type LastCaptureReading = {
112
38
  readonly state: 'known';
113
39
  readonly atMs: number;
114
- }
115
- /** **真的一次贡献都没有**(`committedCount === 0` 且 `lastCaptureAt` 缺席)。 */
116
- | {
40
+ } | {
117
41
  readonly state: 'none';
118
- }
119
- /** 台账不可读(`committedCount` 缺席)⇒ `lastCaptureAt` 的缺席推不出任何东西。 */
120
- | {
42
+ } | {
121
43
  readonly state: 'indeterminate';
122
44
  };
123
- /**
124
- * `lastCaptureAt` 的**三态**读法 —— 本件存在的理由就是这一格:
125
- * sdk 顶注逐字说 `lastCaptureAt` 缺席**同时**覆盖「台账不可读」与「根本没有已提交贡献」两形,
126
- * 所以**单读这一键判不出任何东西**。判别材料是**另一键**:`committedCount` 与它同一次台账读 ⇒
127
- * · `committedCount === 0`(台账可读、真零)+ 本键缺席 ⇒ 真的没有 → `none`;
128
- * · `committedCount` 缺席(台账不可读)⇒ 推不出 → `indeterminate`;
129
- * · `committedCount > 0` 却本键缺席 ⇒ 上游说不会发生;**防御性落 `indeterminate`**,
130
- * 绝不折成 `none`(那会把「有贡献」渲成「从没有过」)。
131
- */
132
45
  export declare function readLastCapture(s: SessionMemoryStatus): LastCaptureReading;
133
- /**
134
- * 读一次会话记忆姿态。**永不抛**:一切抛出物过 {@link classifyMemoryStatusFailure} 成判决。
135
- *
136
- * 🔴 `sessionId` 必须是**引擎捕获值**(壳从 wire 上拿到的那个 id),不是宿主自铸/自选的串 ——
137
- * server 侧记录与台账按**裸 sessionId** 键控且**活过会话**,喂一个被回收的 id 会读到**上一代**
138
- * 的计数/opt-out(元数据,无内容字节;server 侧成文的跨代注意)。空串在本层直接落
139
- * `failed` 而不发请求:那一发必然是对某个不属于本会话的东西提问。
140
- * 🔴 200 体**畸形键不铸**(非 number 的计数 / 非 boolean 的 opt-out 一律降键缺席):降键的后果是
141
- * 上面两个读法答 `indeterminate`(「不知道」),而**采信**一个坏形的后果是拿它当真值渲 ——
142
- * 两害相权,如实不知道。
143
- */
144
46
  export declare function readSessionMemoryStatus(client: MemoryStatusClientLike, sessionId: string, opts?: {
145
47
  signal?: AbortSignal;
146
48
  }): Promise<MemoryStatusVerdict>;
147
- /**
148
- * 「这台部署的记忆自动整理武装了没有」:`armed` / `unarmed` / `indeterminate`。
149
- * 🔴 缺席 = 老 server(<7.85.0)**判不了**,不折 `unarmed`;坏形同样 `indeterminate`(不抛)。三个词对运维是三条不同的下一步
150
- * (与 manifest `autoConsolidation` 段「缺席 = indeterminate」同律;server 用 core 唯一读法组这一位,端别按席自判)。
151
- */
152
49
  export declare function readAutoConsolidationArmed(facts: MemoryStatusFacts | null | undefined): 'armed' | 'unarmed' | 'indeterminate';
@@ -1,40 +1,4 @@
1
- /**
2
- * sessionMemoryStatus.ts — 会话记忆姿态的**三端公共读面**(S-53;server ≥7.53 / core 7.0.2 #511 件1;
3
- * sdk 7.4.0 `sessions.memoryStatus` + `SessionMemoryStatus`)。
4
- *
5
- * ## 本件为什么在库里而不是在壳里
6
- * 这条读面上有**两处判定**,三端(TUI / web / desktop)各写一遍必然各错一遍:
7
- * ① **同 status 不同码**:`GET /v1/sessions/:id/memory-status` 的 404 有**两个**互不相干的含义 ——
8
- * `not_found.session`(会话未知/非属主)与 `not_found.route`(<7.53 的老 server 压根没这条路由,
9
- * 答通用回退)。按 **status** 分诊必然把「你的部署没这个面」说成「你这个会话不存在」。
10
- * 判据只能锚 `errorCode`([anchor-on-the-deciding-quantity]:决定处置的量是码,不是 status)。
11
- * ② **五键缺席语义逐键不同**(sdk `SessionMemoryStatus` 顶注逐字):`optOutSource` / `lastCaptureAt`
12
- * 在**健康会话**上就合法缺席,其余三键只在源不可读时缺席。零历史会话的真形 =
13
- * `{captureOptedOut:false, committedCount:0, foldedCount:0}`,**没有任何降级**。
14
- * 把「缺席」一律读成「没有/关着/0」就是对用户下一个证不出的断言
15
- * ([honest-absence-not-fabricated-zero])。
16
- *
17
- * ## 分工(与仓内既有形同款)
18
- * **纯判定 + 薄封装**:IO 归宿主注入(`MemoryStatusClientLike`,与 `HitlClientLike` 同款 duck-type),
19
- * 本件不构造 client、不认 baseUrl、不碰凭据。**一句面向用户的话都不铸** —— 措辞与是否上屏归端。
20
- */
21
- /**
22
- * 一次 `memoryStatus` 失败(任意抛出物)→ 处置分型。**永不抛**。
23
- *
24
- * 🔴 **结构视图读,不 `instanceof`**(与 `readDecideCurrentPending` 逐字同因):抛出来的是不是 SDK 的
25
- * `APIError` 由**宿主**决定 —— 跨 realm / 双 SDK 实例下 `instanceof` 会把一个读得懂的错判成读不懂。
26
- * 🔴 **码优先、status 只作兜底**,且兜底只敢兜 501:
27
- * · 501 在本路由上无歧义(两条 501 臂都是「面不在/没开」)⇒ 无码时按 `capability` 兜底是安全的;
28
- * · 404 **恰恰相反**:两个码的处置相反,无码的 404 判不出 ⇒ 落 `failed`(如实说不知道),
29
- * **绝不**挑一个猜 —— 猜错任一向都是对用户的一句假断言。
30
- */
31
1
  export function classifyMemoryStatusFailure(e) {
32
- // 🔴 **取属性本身要设防**(对抗复审 R2 [medium] 采纳,0.48.0):`e` 是**任意抛出物** ——
33
- // 它完全可以是一个带抛错 getter 的对象或敌意 `Proxy`,那样连 `e.errorCode` 这一下都会抛。
34
- // 而本函数是被 {@link readSessionMemoryStatus} 在 **`catch` 块里**调用的:`catch` 内抛出的
35
- // 异常**不会**再被同一个 `try` 接住 ⇒ 分类器一抛,包装器那句「永不抛」当场破功。
36
- // (R1 那轮把归一化移进 try 只堵了正常返回路,这条是**失败路**上的同一个洞 —— 同形第二处。)
37
- // 两键**各读一次**存下来,读不动就当「没有可判的机器码」落 `failed`,把原抛出物原样带出。
38
2
  let code;
39
3
  let status;
40
4
  try {
@@ -62,53 +26,14 @@ export function classifyMemoryStatusFailure(e) {
62
26
  return { kind: 'unsupported', reason: 'capability' };
63
27
  return { kind: 'failed', error: e };
64
28
  }
65
- /**
66
- * `captureOptedOut` × `optOutSource` 的**合读**。两键必须一起读:单读 `captureOptedOut` 的话,
67
- * 「缺席」既可能是 fault(判不了)也可能是老 server 没给,读成 `false`(capture 开着)是最坏的方向 ——
68
- * 它会让端向用户断言「你的对话正在被记忆」,而真相是**不知道**。
69
- *
70
- * 🔴 **`fault` 一票否决,先于任何布尔位判**(对抗复审 [medium] 采纳,0.48.0):
71
- * 上游契约里 `optOutSource:"fault"` 与 `captureOptedOut` **缺席**同行,所以
72
- * `{captureOptedOut:false, optOutSource:"fault"}` 是一个**自相矛盾**的形。首版按「布尔位优先」写,
73
- * 于是这个形被判成 `active` —— 一个带着故障标记的载荷被读成「记忆确定开着」,正是本模块存在要防的
74
- * 那件事。矛盾形**不该产出确定判决**:版本斜差 / 畸形 200 体 / 中间层改写都能造出它,而端拿到
75
- * `active` 之后不会再问第二遍。⇒ 见到 `fault` 一律 `indeterminate`,布尔位说什么都不算数。
76
- */
77
29
  export function readCaptureOptOut(s) {
78
- // 🔴 **完整真值表,不是「fault 一票否决 + 看布尔位」**(对抗复审 R2 [medium] 采纳,0.48.0)。
79
- // 上游契约把这两键**成对**定死,只有两个组合是有定义的:
80
- // · `true` × `"record"` = 有一条单向 opt-out 记录 ⇒ opted_out
81
- // · `false` × **缺席** = 记录店可读且无记录(健康默认态)⇒ active
82
- // · 缺席 × `"fault"` = 记录店失败 ⇒ indeterminate
83
- // 其余组合(`false`×`record` / `true`×缺席 / `true`×`fault` / …)在契约上**不存在** ——
84
- // 它们只可能来自版本斜差、畸形 200 体或中间层改写。R1 那轮只挡了带 `fault` 的两格,
85
- // 于是 `{captureOptedOut:false, optOutSource:"record"}`(记录明明在,布尔位却说没关)
86
- // 仍被确定判成 `active`,`{captureOptedOut:true}`(没有来源佐证)仍被判成 `opted_out`。
87
- // 这是**隐私姿态**的断言,方向两边都危险 ⇒ 凡不在真值表上的组合一律 `indeterminate`。
88
- // ⚠️ 这里**不担心**版本斜差把已知答案降级成「不知道」:五键是同一批(S-53)进的面,
89
- // 更老的 server 根本没有这条路由(答 404 `not_found.route` ⇒ 走 `unsupported`,到不了这里)。
90
30
  if (s.captureOptedOut === true && s.optOutSource === 'record')
91
31
  return { state: 'opted_out' };
92
32
  if (s.captureOptedOut === false && s.optOutSource === undefined)
93
33
  return { state: 'active' };
94
34
  return { state: 'indeterminate' };
95
35
  }
96
- /**
97
- * `lastCaptureAt` 的**三态**读法 —— 本件存在的理由就是这一格:
98
- * sdk 顶注逐字说 `lastCaptureAt` 缺席**同时**覆盖「台账不可读」与「根本没有已提交贡献」两形,
99
- * 所以**单读这一键判不出任何东西**。判别材料是**另一键**:`committedCount` 与它同一次台账读 ⇒
100
- * · `committedCount === 0`(台账可读、真零)+ 本键缺席 ⇒ 真的没有 → `none`;
101
- * · `committedCount` 缺席(台账不可读)⇒ 推不出 → `indeterminate`;
102
- * · `committedCount > 0` 却本键缺席 ⇒ 上游说不会发生;**防御性落 `indeterminate`**,
103
- * 绝不折成 `none`(那会把「有贡献」渲成「从没有过」)。
104
- */
105
36
  export function readLastCapture(s) {
106
- // 🔴 `known` 的**合取**条件(对抗复审 [medium] 采纳,0.48.0):时刻在场 **且** 台账可读
107
- // **且** 真有贡献。首版只判「时刻在场」,于是 `{committedCount:0, lastCaptureAt:X}` 这个
108
- // **自相矛盾**形(台账明说零贡献,却给得出「最近一次捕获」的时刻;两者本是**同一次台账读**)
109
- // 被判成 `known` —— 端会据此确定地渲一个时间。同理 `committedCount` 缺席(台账不可读)时,
110
- // 那个时刻是从哪来的也说不清 ⇒ 一并落 `indeterminate`。
111
- // 判据锚在「真正决定这件事的量」上:决定「有没有捕获过」的是**台账计数**,时刻只是它的附属。
112
37
  if (typeof s.lastCaptureAt === 'number') {
113
38
  return typeof s.committedCount === 'number' && s.committedCount > 0
114
39
  ? { state: 'known', atMs: s.lastCaptureAt }
@@ -118,46 +43,16 @@ export function readLastCapture(s) {
118
43
  return { state: 'none' };
119
44
  return { state: 'indeterminate' };
120
45
  }
121
- // ── ③ 薄封装(唯一一处 IO) ───────────────────────────────────────────────────────────
122
- /**
123
- * 读一次会话记忆姿态。**永不抛**:一切抛出物过 {@link classifyMemoryStatusFailure} 成判决。
124
- *
125
- * 🔴 `sessionId` 必须是**引擎捕获值**(壳从 wire 上拿到的那个 id),不是宿主自铸/自选的串 ——
126
- * server 侧记录与台账按**裸 sessionId** 键控且**活过会话**,喂一个被回收的 id 会读到**上一代**
127
- * 的计数/opt-out(元数据,无内容字节;server 侧成文的跨代注意)。空串在本层直接落
128
- * `failed` 而不发请求:那一发必然是对某个不属于本会话的东西提问。
129
- * 🔴 200 体**畸形键不铸**(非 number 的计数 / 非 boolean 的 opt-out 一律降键缺席):降键的后果是
130
- * 上面两个读法答 `indeterminate`(「不知道」),而**采信**一个坏形的后果是拿它当真值渲 ——
131
- * 两害相权,如实不知道。
132
- */
133
46
  export async function readSessionMemoryStatus(client, sessionId, opts) {
134
47
  if (typeof sessionId !== 'string' || sessionId.length === 0) {
135
48
  return { kind: 'failed', error: new Error('memoryStatus: empty sessionId') };
136
49
  }
137
- // 🔴 **归一化整段在 try 内**(对抗复审 [medium] 采纳,0.48.0):首版只把那一发 `await` 圈进
138
- // try,归一化在 try 外读属性 —— 而本函数吃的是**宿主注入**的 duck-typed client,它完全可以回一个
139
- // 带抛错 getter 的对象 / 一个 Proxy。那种载荷会让本函数**向外 reject**,当场毁掉顶注写死的
140
- // 「**永不抛**」承诺,而所有调用点都是照着那句话写的(没人给它套 try)。
141
- // 圈进来的代价是零,漏在外面的代价是一个只在畸形宿主上才现形的 unhandled rejection。
142
50
  try {
143
51
  const raw = await client.sessions.memoryStatus(sessionId, opts?.signal ? { signal: opts.signal } : {});
144
52
  if (typeof raw !== 'object' || raw === null) {
145
53
  return { kind: 'failed', error: new Error('memoryStatus: malformed body') };
146
54
  }
147
55
  const o = raw;
148
- // 🔴 **身份绑定:回声的 sessionId 必须与请求的**逐字相等**,否则整只落 `failed`**
149
- // (对抗复审 [medium] 采纳)。首版对不相等的回声**照收**,并把**对方**的 id 当成
150
- // 结果返回 ⇒ 一次缓存错配 / 中间层串台 / 依赖故障,就会把**另一条会话**的记忆元数据
151
- // (计数、opt-out 姿态)呈现在当前会话的面板上。这条通道的上游对同一件事的纪律是
152
- // **宁缺席不串台**(server 对缺 `sessionId` 的通告如实不投),本层照同一条办。
153
- // ⚠️ 契约上 `sessionId` 是**必填回显**(`SessionMemoryStatusResponse`),所以缺席/非串
154
- // 同样是坏形 —— 一并落 failed,**不**退回「就当是我请求的那个」。
155
- // 🔴 **「严格相等会不会误杀合法场景」已对真 server 源码验真**(不是推断):server 的
156
- // `GET /v1/sessions/:id/memory-status` 回显的是 `safeDecode(<路径段>)`,而 SDK 发的是
157
- // `encodeURIComponent(sessionId)` ⇒ 往返是 `decodeURIComponent(encodeURIComponent(x)) === x`
158
- // 的恒等,对任何合法串都字节相等;且 200 体里 `sessionId` 是**无条件**铸的(不在条件拷贝
159
- // 那一组里)。⇒ 严格相等**杀不掉**任何合法回声,缺席也确实只可能是坏形。
160
- // (坏 percent-encoding 由 server 在更早的门答 400 `request.path_malformed`,落 `failed`。)
161
56
  if (typeof o.sessionId !== 'string' || o.sessionId !== sessionId) {
162
57
  return { kind: 'failed', error: new Error('memoryStatus: response sessionId mismatch') };
163
58
  }
@@ -172,7 +67,6 @@ export async function readSessionMemoryStatus(client, sessionId, opts) {
172
67
  ? { optOutSource: o.optOutSource }
173
68
  : {}),
174
69
  ...(typeof o.lastCaptureAt === 'number' ? { lastCaptureAt: o.lastCaptureAt } : {}),
175
- // 0.72.9 CC-39②(server 7.85.0 S-403):布尔恒在场;非布尔 / 老 server 缺席 ⇒ 键不在场(不铸 false)。
176
70
  ...(typeof o.autoConsolidationArmed === 'boolean' ? { autoConsolidationArmed: o.autoConsolidationArmed } : {}),
177
71
  },
178
72
  };
@@ -181,12 +75,6 @@ export async function readSessionMemoryStatus(client, sessionId, opts) {
181
75
  return classifyMemoryStatusFailure(e);
182
76
  }
183
77
  }
184
- // ── ④ autoConsolidationArmed 三态(0.72.9 CC-39②)──────────────────────────────────────────
185
- /**
186
- * 「这台部署的记忆自动整理武装了没有」:`armed` / `unarmed` / `indeterminate`。
187
- * 🔴 缺席 = 老 server(<7.85.0)**判不了**,不折 `unarmed`;坏形同样 `indeterminate`(不抛)。三个词对运维是三条不同的下一步
188
- * (与 manifest `autoConsolidation` 段「缺席 = indeterminate」同律;server 用 core 唯一读法组这一位,端别按席自判)。
189
- */
190
78
  export function readAutoConsolidationArmed(facts) {
191
79
  if (typeof facts !== 'object' || facts === null)
192
80
  return 'indeterminate';
@@ -1,32 +1,3 @@
1
- /**
2
- * ⇄ B2 批搬迁(2026-07-27,多端改造设计稿 §3 B2):cli src/sema/sessionModelLatch.ts 逐字搬入(零依赖;🔴 三个模块级 latch 是单实例态)。
3
- */
4
- /**
5
- * sessionModelLatch — 件13 (rev2 2026-07-14, CC 2.1.207 对锚): support module for the /model `s`
6
- * (use this session only) split, anchored on the 207 mechanism (verified against the 2.1.198 pretty
7
- * source, semantics identical in 207):
8
- *
9
- * wsr(model, get, set, setDefault): // pretty.js:493226 (198 coords)
10
- * set(a => ({ ...a, mainLoopModel: model, mainLoopModelForSession: null })) // ALWAYS in-memory
11
- * if (setDefault) RQt(model) // RQt = eo("userSettings",{model}) —
12
- * // the ONLY settings write (493244)
13
- * message = `Set model to X${setDefault ? " and saved as your default for new sessions"
14
- * : " for this session only"}`
15
- *
16
- * i.e. in 207 BOTH Enter and `s` write the in-memory mainLoopModel and CLEAR the plan-mode session
17
- * field; persistence is EXPLICIT (RQt) and only runs on set-as-default. 207 has no auto-persisting
18
- * model choke point. sema's bundled base DOES auto-persist every mainLoopModel change in
19
- * state/onChangeAppState.ts, so to reproduce the 207 state shape exactly the session-only commit
20
- * marks its write with a ONE-SHOT skip-persist flag which the choke consumes: the write then behaves
21
- * exactly like 207's no-RQt branch (mainLoopModel set in-memory, mainLoopModelForSession null,
22
- * userSettings untouched → restart reverts to the persisted default).
23
- *
24
- * The latch half mirrors "the active model is UNPERSISTED" for NON-React consumers (seamQuery's
25
- * modelEndpointSwitch runs outside the component tree): a session-only pick must not be promoted to
26
- * next-boot roster/env state when the engine can route the model by itself. Kept in sync from the
27
- * onChangeAppState choke (single funnel for every setAppState write): set on a session-only
28
- * mainLoopModel write OR a plan-mode mainLoopModelForSession write, cleared on a persisted write.
29
- */
30
1
  export declare function setSessionModelLatch(model: string | null): void;
31
2
  export declare function getSessionModelLatch(): string | null;
32
3
  export declare function markSessionOnlyModelWrite(): void;
@@ -1,33 +1,3 @@
1
- /**
2
- * ⇄ B2 批搬迁(2026-07-27,多端改造设计稿 §3 B2):cli src/sema/sessionModelLatch.ts 逐字搬入(零依赖;🔴 三个模块级 latch 是单实例态)。
3
- */
4
- /**
5
- * sessionModelLatch — 件13 (rev2 2026-07-14, CC 2.1.207 对锚): support module for the /model `s`
6
- * (use this session only) split, anchored on the 207 mechanism (verified against the 2.1.198 pretty
7
- * source, semantics identical in 207):
8
- *
9
- * wsr(model, get, set, setDefault): // pretty.js:493226 (198 coords)
10
- * set(a => ({ ...a, mainLoopModel: model, mainLoopModelForSession: null })) // ALWAYS in-memory
11
- * if (setDefault) RQt(model) // RQt = eo("userSettings",{model}) —
12
- * // the ONLY settings write (493244)
13
- * message = `Set model to X${setDefault ? " and saved as your default for new sessions"
14
- * : " for this session only"}`
15
- *
16
- * i.e. in 207 BOTH Enter and `s` write the in-memory mainLoopModel and CLEAR the plan-mode session
17
- * field; persistence is EXPLICIT (RQt) and only runs on set-as-default. 207 has no auto-persisting
18
- * model choke point. sema's bundled base DOES auto-persist every mainLoopModel change in
19
- * state/onChangeAppState.ts, so to reproduce the 207 state shape exactly the session-only commit
20
- * marks its write with a ONE-SHOT skip-persist flag which the choke consumes: the write then behaves
21
- * exactly like 207's no-RQt branch (mainLoopModel set in-memory, mainLoopModelForSession null,
22
- * userSettings untouched → restart reverts to the persisted default).
23
- *
24
- * The latch half mirrors "the active model is UNPERSISTED" for NON-React consumers (seamQuery's
25
- * modelEndpointSwitch runs outside the component tree): a session-only pick must not be promoted to
26
- * next-boot roster/env state when the engine can route the model by itself. Kept in sync from the
27
- * onChangeAppState choke (single funnel for every setAppState write): set on a session-only
28
- * mainLoopModel write OR a plan-mode mainLoopModelForSession write, cleared on a persisted write.
29
- */
30
- /** The model that is currently ACTIVE but UNPERSISTED (session-only pick or plan-mode override). */
31
1
  let sessionModelOverride = null;
32
2
  export function setSessionModelLatch(model) {
33
3
  sessionModelOverride = model;
@@ -35,7 +5,6 @@ export function setSessionModelLatch(model) {
35
5
  export function getSessionModelLatch() {
36
6
  return sessionModelOverride;
37
7
  }
38
- /** One-shot mark: the NEXT mainLoopModel change is session-only (207 no-RQt branch) — do not persist. */
39
8
  let sessionOnlyWritePending = false;
40
9
  export function markSessionOnlyModelWrite() {
41
10
  sessionOnlyWritePending = true;
@@ -45,15 +14,6 @@ export function consumeSessionOnlyModelWrite() {
45
14
  sessionOnlyWritePending = false;
46
15
  return v;
47
16
  }
48
- // ── 件3(F1 模型面批,S3 铁律半场):本会话「用户显式选过模型」标记 ─────────────────────
49
- // boot 目录回读(replEntry 把 /v1/models default 写进 initialState.mainLoopModel)不经过
50
- // setAppState ⇒ 不置位;任何经 setAppState 的 mainLoopModel 变更(cmd-model Enter、`s` 键、
51
- // /model <name>、config 面板)都算显式 pick —— 由 onChangeAppState choke(每个 setAppState
52
- // 写的单一漏斗)置位,散在 UI 调用点零改动。ensureEngineServesModel 据此区分「运行时回声」
53
- // (boot 回读的目录 default)vs「用户意图」:回声绝不允许持久化写(不 switchRoster 改 env /
54
- // 不重排 models.json / 不改档位绑定)。注意与上面 latch 的分工:latch=「当前活跃值未持久化」
55
- // (s 键/plan override),本标记=「本会话内发生过显式选择」——s 键 pick 也置位(它是显式意图,
56
- // 是否持久化由件13 latch 在 instant 路径拦截,语义不变)。
57
17
  let userModelPickThisSession = false;
58
18
  export function markUserModelPickThisSession() {
59
19
  userModelPickThisSession = true;
@@ -1,68 +1,18 @@
1
- /**
2
- * sessionPolicyCapability — `GET /v1/capabilities.sessionPolicy` 的三端共用四态读面(0.77.0 CC-105;
3
- * 与 sql / writeProtection / webSearch.backend / executionLane / approvalsStreamLive /
4
- * deviceExecutor.management / peerLane / permissionRulesWrite / memoryCompliance / memoryOrigin
5
- * 各只兄弟同一套四态词汇,四口走共用工厂)。引擎的 wire 型面里这一位已声明为可选布尔,读法仍按结构走
6
- * (声明形与在场性是两件事:声明说「型上可以有」,回体才说「这台有没有」)。
7
- *
8
- * ── 这一位答的是哪一个问题 ────────────────────────────────────────────────────────────────
9
- * 「per-session 工具规则的那一对读写口(`GET` / `PUT /v1/sessions/:id/policy`)在**这台引擎**上挂没挂」。
10
- * 上游的铸点是一次**设施在场判**(会话规则店接线了没),不是一次身份判:
11
- * · 值为真 ⇒ 规则店在场,这对口有人应答(某一次调用成不成功仍由那一次的应答逐次回答:
12
- * 无主会话 409、非属主 404、放宽方向 403、CAS 不符 409 —— 这一位一个都不预告);
13
- * · 值为假 ⇒ 本部署**没有**会话规则店,这对口恒以「这台没有这一面」拒,写入口该藏起来。
14
- *
15
- * ── 🔴 四态,不是两态 ───────────────────────────────────────────────────────────────────────
16
- * ① `unobserved` —— 本进程一次能力回体都没观测到。**不是**引擎说过的话。
17
- * ② `not_reported` —— 回体观测到了,而**没有**这个键 ⇒ 这份二进制比这一位本身还老。
18
- * ③ `absent` —— 键在、值明确是 `false`:这台没有会话规则店。**正面事实**,与 ② 是两件事。
19
- * ④ `present` —— 键在、值为 `true`:这一面在这台引擎上挂着。
20
- * 值既不是 `true` 也不是 `false`(`null` / 串 / 数 / 数组 / 对象)⇒ 畸形 ⇒ **删格**(⇒ `unobserved`);
21
- * 能力回体整只不是对象同判畸形。🔴 三种「没有」(`unobserved` / `not_reported` / `absent`)**不许互折**。
22
- * 判在场用 `hasOwn`:原型链上继承来的同名键不算这台引擎说过话。
23
- *
24
- * ── 🔴 「藏入口」与「别发请求」是两个问题,判官也是两个 ─────────────────────────────────────
25
- * 本文件只铸前者:{@link sessionPolicyFaceAvailable} 回答「要不要渲这个写入口」,
26
- * 保守方向 —— 只有明说在场才 `'yes'`,明说不在与「比这一位还老的二进制」都 `'no'`,从没观测过才 `'unknown'`。
27
- * 后者(「这次编排该不该把请求发出去」)在会话策略写端口那一侧,它拿的是**同一只读数**、不另开一张表,
28
- * 判据与本函数刻意分开写:一个决定界面长什么样,一个决定要不要动网络,两者对 `unobserved` 的答案
29
- * 本来就该不同(界面保守地不渲,而一次用户已经点过的动作不该因为「本进程没探过能力面」被凭空挡住)。
30
- */
31
- /** 四态读数。`unobserved` 由读口在这一格空缺时铸,不由投影铸。 */
32
1
  export type SessionPolicyReading = {
33
2
  kind: 'unobserved';
34
- }
35
- /** 回体在、键不在 ⇒ 这份二进制比这一位老。**不等于** `false`。 */
36
- | {
3
+ } | {
37
4
  kind: 'not_reported';
38
- }
39
- /** 键在、值为 `false`:本部署没有会话规则店 ⇒ 这一对口恒拒。 */
40
- | {
5
+ } | {
41
6
  kind: 'absent';
42
- }
43
- /** 键在、值为 `true`:这一面挂着。 */
44
- | {
7
+ } | {
45
8
  kind: 'present';
46
9
  };
47
- /** 能力回体 → 本格读数;畸形一律 `undefined`(= 这一格不写 ⇒ 读口答 `unobserved`)。 */
48
10
  export declare function projectSessionPolicyCapability(caps: unknown): SessionPolicyReading | undefined;
49
- /** 宿主 caps probe 的读面 tee 落点。绝不 throw;畸形 ⇒ 删格;`opts.generation` 关掉旧探测覆盖新读数的竞态。 */
50
11
  export declare function noteEngineCapsForSessionPolicy(baseUrl: string, caps: unknown, opts?: {
51
12
  generation?: number;
52
13
  }): void;
53
- /** 本进程观测到的读数;这一格空缺 ⇒ `{kind:'unobserved'}`。 */
54
14
  export declare function observedSessionPolicy(baseUrl?: string | undefined): SessionPolicyReading;
55
- /**
56
- * 「要不要渲会话规则的写入口」的判据单源(三态)。
57
- * 🔴 只有引擎明说在场(`present`)才 `'yes'`;明说不在(`absent`)与「这份二进制比这一位老」
58
- * (`not_reported`)都是 `'no'` —— 后者不是在说这一面不存在,是在说**这台说不出**,而一个说不出
59
- * 的写入口按假 affordance 纪律不渲(真要试,走读口,读是无副作用的那一半)。从没观测过 ⇒ `'unknown'`,
60
- * 端自己决定渲不渲(它既不是引擎的否定,也不是引擎的肯定)。
61
- */
62
15
  export declare function sessionPolicyFaceAvailable(reading: SessionPolicyReading): 'yes' | 'no' | 'unknown';
63
- /** doctor 那一行的 detail 串,唯一措辞真源。🔴 两种「读不出」都不许暗示「这一面在」或「这一面不在」。 */
64
16
  export declare function sessionPolicyDoctorDetail(reading: SessionPolicyReading): string;
65
- /** 换代失效口(引擎温切成功后调):清成未观测。空串 ⇒ no-op;绝不 throw。 */
66
17
  export declare function forgetSessionPolicyReading(baseUrl: string | undefined): void;
67
- /** 测试钩子。 */
68
18
  export declare function __resetSessionPolicyReadingsForTests(): void;