@sema-agent/client-core 0.99.0 → 0.101.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (374) hide show
  1. package/CHANGELOG.md +572 -0
  2. package/README.md +174 -114
  3. package/dist/adapt/arms.js +109 -50
  4. package/dist/adapt/panelTasks.d.ts +2 -1
  5. package/dist/adapt/panelTasks.js +32 -9
  6. package/dist/adapt/textStream.d.ts +1 -1
  7. package/dist/adapt/textStream.js +58 -32
  8. package/dist/adapt/toolCards.js +9 -8
  9. package/dist/adapt.js +7 -1
  10. package/dist/adapter/activeRunSelfHeal.d.ts +31 -2
  11. package/dist/adapter/activeRunSelfHeal.js +162 -13
  12. package/dist/adapter/downstream/eventToSdkMessage.d.ts +25 -6
  13. package/dist/adapter/downstream/eventToSdkMessage.js +157 -20
  14. package/dist/adapter/downstream/terminalToSdkResult.d.ts +60 -1
  15. package/dist/adapter/downstream/terminalToSdkResult.js +219 -39
  16. package/dist/adapter/downstream/wiringManifestView.d.ts +3 -1
  17. package/dist/adapter/downstream/wiringManifestView.js +1 -0
  18. package/dist/adapter/runStream.d.ts +4 -4
  19. package/dist/adapter/runStream.js +184 -42
  20. package/dist/adapter/types.d.ts +2 -0
  21. package/dist/agentsWireCaps.d.ts +9 -7
  22. package/dist/agentsWireCaps.js +101 -17
  23. package/dist/approvalDecidedByCapability.js +2 -2
  24. package/dist/approvalFrameFamilies.d.ts +33 -0
  25. package/dist/approvalFrameFamilies.js +120 -0
  26. package/dist/approvalsStreamLiveCapability.js +2 -2
  27. package/dist/attachmentsWireCaps.js +41 -13
  28. package/dist/callerCwdCapability.js +2 -2
  29. package/dist/centerWiringCapability.js +2 -2
  30. package/dist/clockReading.d.ts +2 -0
  31. package/dist/clockReading.js +4 -0
  32. package/dist/cloudConfigWireCaps.d.ts +28 -5
  33. package/dist/cloudConfigWireCaps.js +334 -103
  34. package/dist/compactionStatus.d.ts +34 -0
  35. package/dist/compactionStatus.js +196 -0
  36. package/dist/coreValuePorts.d.ts +12 -2
  37. package/dist/coreValuePorts.js +9 -0
  38. package/dist/decideFailureNote.js +8 -6
  39. package/dist/decideReceipt.js +2 -2
  40. package/dist/deviceExecutorManagementCapability.js +2 -2
  41. package/dist/deviceFlowPolling.js +1 -1
  42. package/dist/disableSkillsWire.d.ts +1 -1
  43. package/dist/disableSkillsWire.js +4 -3
  44. package/dist/displayUntrusted.d.ts +1 -0
  45. package/dist/displayUntrusted.js +215 -13
  46. package/dist/engineAgentPanelStore.d.ts +7 -4
  47. package/dist/engineCapReader.js +1 -1
  48. package/dist/engineConfigDrift.js +1 -1
  49. package/dist/engineErrorCodes.d.ts +23 -6
  50. package/dist/engineErrorCodes.js +36 -11
  51. package/dist/engineGenerationConvergence.d.ts +39 -0
  52. package/dist/engineGenerationConvergence.js +95 -0
  53. package/dist/engineGenerationPort.d.ts +61 -0
  54. package/dist/engineGenerationPort.js +144 -0
  55. package/dist/engineHealthFacts.d.ts +23 -0
  56. package/dist/engineHealthFacts.js +92 -0
  57. package/dist/engineIdentity.d.ts +4 -0
  58. package/dist/engineIdentity.js +11 -0
  59. package/dist/engineNoticeCodes.d.ts +2 -5
  60. package/dist/engineRowRef.js +4 -0
  61. package/dist/engineSessionMessages.js +2 -2
  62. package/dist/engineToolDirectory.d.ts +3 -0
  63. package/dist/engineToolDirectory.js +6 -4
  64. package/dist/engineWireFor.d.ts +99 -0
  65. package/dist/engineWireFor.js +248 -6
  66. package/dist/engineWireTarget.d.ts +1 -0
  67. package/dist/engineWireTarget.js +8 -0
  68. package/dist/env/uiLanguage.js +1 -1
  69. package/dist/errorSupplementRoles.d.ts +3 -0
  70. package/dist/errorSupplementRoles.js +37 -0
  71. package/dist/eventLeg.d.ts +1 -7
  72. package/dist/eventLeg.js +7 -8
  73. package/dist/executionLaneCapability.js +2 -2
  74. package/dist/fileHistoryCaptureCapability.d.ts +0 -3
  75. package/dist/fileHistoryCaptureCapability.js +3 -7
  76. package/dist/finalVerifyWire.d.ts +6 -3
  77. package/dist/finalVerifyWire.js +6 -23
  78. package/dist/flagInput.d.ts +4 -0
  79. package/dist/flagInput.js +24 -0
  80. package/dist/fleet/fleetLedger.js +5 -2
  81. package/dist/fleet/fleetProjection.d.ts +1 -0
  82. package/dist/fleet/fleetProjection.js +15 -2
  83. package/dist/gateVocabulary.js +3 -0
  84. package/dist/generated/engineFactTables.d.ts +7 -2
  85. package/dist/generated/engineFactTables.js +79 -0
  86. package/dist/generated/engineNoticeTables.js +15 -0
  87. package/dist/generated/settingsSchemaActiveTiers.d.ts +1 -0
  88. package/dist/generated/settingsSchemaActiveTiers.js +14 -0
  89. package/dist/generated/settingsSchemaCallerTextEcho.d.ts +1 -0
  90. package/dist/generated/settingsSchemaCallerTextEcho.js +8 -0
  91. package/dist/generated/settingsSchemaControlAndBidi.d.ts +1 -0
  92. package/dist/generated/settingsSchemaControlAndBidi.js +8 -0
  93. package/dist/generated/settingsSchemaDefaultModel.d.ts +11 -0
  94. package/dist/generated/settingsSchemaDefaultModel.js +25 -0
  95. package/dist/generated/settingsSchemaFns.d.ts +66 -0
  96. package/dist/generated/settingsSchemaFns.js +38 -0
  97. package/dist/generated/settingsSchemaMcpRequestEntry.d.ts +1 -0
  98. package/dist/generated/settingsSchemaMcpRequestEntry.js +156 -0
  99. package/dist/generated/settingsSchemaSafetyMergeSpec.d.ts +1 -0
  100. package/dist/generated/settingsSchemaSafetyMergeSpec.js +95 -0
  101. package/dist/generated/settingsSchemaSettingsSources.d.ts +1 -0
  102. package/dist/generated/settingsSchemaSettingsSources.js +58 -0
  103. package/dist/generated/settingsSchemaTables.d.ts +3 -0
  104. package/dist/generated/settingsSchemaTables.js +18 -0
  105. package/dist/generated/settingsSchemaTypes.d.ts +28 -0
  106. package/dist/generated/settingsSchemaUrlPattern.d.ts +1 -0
  107. package/dist/generated/settingsSchemaUrlPattern.js +183 -0
  108. package/dist/headlessPermissionModeWire.d.ts +18 -2
  109. package/dist/headlessPermissionModeWire.js +30 -19
  110. package/dist/hitl/allowRuleShadow.js +9 -7
  111. package/dist/hitl/approvalCardReading.d.ts +3 -0
  112. package/dist/hitl/approvalCardReading.js +17 -0
  113. package/dist/hitl/approvalCardReasons.js +2 -2
  114. package/dist/hitl/approvalCompleteParked.js +1 -1
  115. package/dist/hitl/approvalDelivery.d.ts +87 -0
  116. package/dist/hitl/approvalDelivery.js +193 -0
  117. package/dist/hitl/approvalHolds.d.ts +14 -0
  118. package/dist/hitl/approvalHolds.js +41 -0
  119. package/dist/hitl/approvalResolution.d.ts +11 -0
  120. package/dist/hitl/approvalResolution.js +50 -11
  121. package/dist/hitl/askClassPair.d.ts +8 -2
  122. package/dist/hitl/askClassPair.js +31 -4
  123. package/dist/hitl/askParkAutoReopenBlock.d.ts +30 -0
  124. package/dist/hitl/askParkAutoReopenBlock.js +117 -0
  125. package/dist/hitl/askParkRowRouting.js +4 -1
  126. package/dist/hitl/attributionLadder.d.ts +62 -0
  127. package/dist/hitl/attributionLadder.js +138 -0
  128. package/dist/hitl/automaticAnswerVerdict.d.ts +6 -1
  129. package/dist/hitl/automaticAnswerVerdict.js +46 -11
  130. package/dist/hitl/crashConverged.js +2 -2
  131. package/dist/hitl/decisionConflict.d.ts +6 -2
  132. package/dist/hitl/decisionConflict.js +24 -9
  133. package/dist/hitl/decisionLedger.d.ts +55 -0
  134. package/dist/hitl/decisionLedger.js +156 -0
  135. package/dist/hitl/decisionRefusal.d.ts +21 -10
  136. package/dist/hitl/decisionRefusal.js +100 -55
  137. package/dist/hitl/decisionSend.d.ts +116 -0
  138. package/dist/hitl/decisionSend.js +563 -0
  139. package/dist/hitl/frameRouter.d.ts +1 -0
  140. package/dist/hitl/frameRouter.js +9 -2
  141. package/dist/hitl/hitlBridge.d.ts +18 -6
  142. package/dist/hitl/hitlBridge.js +59 -43
  143. package/dist/hitl/livePendingAsk.js +4 -3
  144. package/dist/hitl/noAllowCause.js +1 -1
  145. package/dist/hitl/parkResolver.js +3 -2
  146. package/dist/hitl/persistedRulesWire.js +1 -0
  147. package/dist/hitl/planReviewWire.d.ts +4 -0
  148. package/dist/hitl/planReviewWire.js +104 -106
  149. package/dist/hitl/resumeRunningCard.d.ts +3 -2
  150. package/dist/hitl/resumeRunningCard.js +17 -11
  151. package/dist/hitl/sessionPolicyDeliverable.d.ts +5 -2
  152. package/dist/hitl/sessionPolicyDeliverable.js +65 -35
  153. package/dist/hitl/sessionPolicyWire.d.ts +13 -3
  154. package/dist/hitl/sessionPolicyWire.js +81 -16
  155. package/dist/hitl/standingRows.js +1 -1
  156. package/dist/hitl/toolApprovalWire.d.ts +9 -10
  157. package/dist/hitl/toolApprovalWire.js +103 -151
  158. package/dist/hookMatcherVerdict.d.ts +2 -0
  159. package/dist/hookMatcherVerdict.js +12 -0
  160. package/dist/hooksCompactTransition.d.ts +19 -0
  161. package/dist/hooksCompactTransition.js +41 -0
  162. package/dist/hooksWireCaps.d.ts +1 -1
  163. package/dist/hooksWireCaps.js +202 -203
  164. package/dist/host.d.ts +1 -14
  165. package/dist/host.js +0 -8
  166. package/dist/hostCallbackGuard.d.ts +1 -0
  167. package/dist/hostCallbackGuard.js +1 -1
  168. package/dist/hostSettingsSource.d.ts +172 -0
  169. package/dist/hostSettingsSource.js +675 -0
  170. package/dist/hostTurnSettings.d.ts +114 -19
  171. package/dist/hostTurnSettings.js +966 -68
  172. package/dist/httpHookPolicy.d.ts +37 -0
  173. package/dist/httpHookPolicy.js +176 -0
  174. package/dist/humanTurn.d.ts +4 -2
  175. package/dist/humanTurn.js +40 -10
  176. package/dist/humanTurnRead.js +4 -3
  177. package/dist/humanTurnSentences.d.ts +10 -0
  178. package/dist/humanTurnSentences.js +74 -0
  179. package/dist/i18n/messages.en.d.ts +313 -0
  180. package/dist/i18n/messages.en.js +326 -13
  181. package/dist/i18n/messages.zh.js +341 -13
  182. package/dist/i18n/translate.js +3 -3
  183. package/dist/index.d.ts +85 -15
  184. package/dist/index.js +53 -12
  185. package/dist/inheritEnvCapability.d.ts +4 -1
  186. package/dist/inheritEnvCapability.js +38 -17
  187. package/dist/inheritEnvWire.d.ts +2 -1
  188. package/dist/inheritEnvWire.js +11 -5
  189. package/dist/injectionLaneNotice.d.ts +5 -0
  190. package/dist/injectionLaneNotice.js +46 -0
  191. package/dist/interactiveToolsWire.d.ts +4 -2
  192. package/dist/interactiveToolsWire.js +5 -5
  193. package/dist/jsonFaithful.d.ts +20 -0
  194. package/dist/jsonFaithful.js +152 -0
  195. package/dist/limitsWire.d.ts +7 -2
  196. package/dist/limitsWire.js +19 -13
  197. package/dist/liveInitToolFace.d.ts +6 -1
  198. package/dist/liveInitToolFace.js +5 -3
  199. package/dist/liveModelCatalog.d.ts +22 -0
  200. package/dist/liveModelCatalog.js +132 -18
  201. package/dist/mcpPanel.js +3 -1
  202. package/dist/mcpProbeCapability.js +2 -2
  203. package/dist/mcpReconnect.js +2 -2
  204. package/dist/mcpStatusSupersetKeys.d.ts +24 -0
  205. package/dist/mcpStatusSupersetKeys.js +45 -0
  206. package/dist/mcpToolToggles.d.ts +6 -0
  207. package/dist/mcpToolToggles.js +47 -0
  208. package/dist/mcpWireCaps.d.ts +48 -4
  209. package/dist/mcpWireCaps.js +338 -99
  210. package/dist/mcpWireTransport.d.ts +4 -0
  211. package/dist/mcpWireTransport.js +18 -0
  212. package/dist/memoryComplianceCapability.js +2 -2
  213. package/dist/memoryOriginCapability.js +2 -2
  214. package/dist/model/catalogDefault.d.ts +24 -0
  215. package/dist/model/catalogDefault.js +4 -0
  216. package/dist/model/liveCatalogShape.js +5 -4
  217. package/dist/model/modelsPolicy.js +4 -3
  218. package/dist/model/onboardJudgement.d.ts +1 -0
  219. package/dist/model/onboardJudgement.js +1 -1
  220. package/dist/model/subagentModelWord.js +2 -2
  221. package/dist/modelCapabilityProbe.d.ts +2 -1
  222. package/dist/modelCapabilityProbe.js +16 -15
  223. package/dist/modelIdentityResolvability.d.ts +12 -1
  224. package/dist/modelIdentityResolvability.js +69 -28
  225. package/dist/modsKernelIdentity.d.ts +10 -0
  226. package/dist/modsKernelIdentity.js +103 -0
  227. package/dist/modsKernelTransit.d.ts +8 -0
  228. package/dist/modsKernelTransit.js +6 -0
  229. package/dist/notifications.d.ts +30 -12
  230. package/dist/notifications.js +241 -53
  231. package/dist/outputStyleSeatCapability.js +2 -2
  232. package/dist/ownKey.d.ts +37 -0
  233. package/dist/ownKey.js +238 -2
  234. package/dist/panelReduce.d.ts +5 -0
  235. package/dist/panelReduce.js +45 -13
  236. package/dist/panelStateHolder.d.ts +1 -0
  237. package/dist/panelStateHolder.js +10 -1
  238. package/dist/peerFrames.d.ts +1 -1
  239. package/dist/peerFrames.js +6 -2
  240. package/dist/peerLaneCapability.js +2 -2
  241. package/dist/permissionModesCapability.js +4 -4
  242. package/dist/permissionRuleIssue.d.ts +2 -1
  243. package/dist/permissionRuleIssue.js +24 -21
  244. package/dist/permissionRulesWriteCapability.js +2 -2
  245. package/dist/permissionsAllowGrantCapability.js +2 -2
  246. package/dist/permissionsDeclaration.d.ts +43 -4
  247. package/dist/permissionsDeclaration.js +102 -35
  248. package/dist/pluginHooksWire.d.ts +20 -4
  249. package/dist/pluginHooksWire.js +101 -60
  250. package/dist/prepareRefusal.d.ts +9 -0
  251. package/dist/prepareRefusal.js +90 -0
  252. package/dist/printInitToolFace.js +2 -2
  253. package/dist/printModelStatus.js +1 -1
  254. package/dist/projectMemory.d.ts +32 -0
  255. package/dist/projectMemory.js +70 -0
  256. package/dist/promptBlockedCopy.d.ts +2 -1
  257. package/dist/promptBlockedCopy.js +2 -1
  258. package/dist/promptDelivery.d.ts +23 -3
  259. package/dist/promptDelivery.js +169 -30
  260. package/dist/providerRejection.d.ts +19 -1
  261. package/dist/providerRejection.js +75 -4
  262. package/dist/queuedDelivery.d.ts +48 -0
  263. package/dist/queuedDelivery.js +233 -0
  264. package/dist/reattachWindow.d.ts +94 -0
  265. package/dist/reattachWindow.js +127 -0
  266. package/dist/request/printNotification.d.ts +1 -1
  267. package/dist/request/printNotification.js +5 -1
  268. package/dist/request/submissionIdentity.d.ts +37 -0
  269. package/dist/request/submissionIdentity.js +65 -0
  270. package/dist/request/taskRequest.d.ts +22 -14
  271. package/dist/request/taskRequest.js +312 -202
  272. package/dist/resultFrameKeys.d.ts +1 -0
  273. package/dist/resultFrameKeys.js +4 -1
  274. package/dist/resumeRefusalCopy.d.ts +3 -1
  275. package/dist/resumeRefusalCopy.js +22 -4
  276. package/dist/retryStatus.d.ts +26 -0
  277. package/dist/retryStatus.js +133 -28
  278. package/dist/rewindArchiveCapability.js +2 -2
  279. package/dist/rewindEngineAction.d.ts +2 -0
  280. package/dist/rewindEngineAction.js +23 -1
  281. package/dist/rowKind.d.ts +36 -0
  282. package/dist/rowKind.js +97 -0
  283. package/dist/ruleCompileVerdict.d.ts +18 -0
  284. package/dist/ruleCompileVerdict.js +67 -2
  285. package/dist/ruleReadings.d.ts +58 -0
  286. package/dist/ruleReadings.js +132 -0
  287. package/dist/ruleRefusalSentence.d.ts +8 -0
  288. package/dist/ruleRefusalSentence.js +64 -0
  289. package/dist/runCancelContext.d.ts +0 -1
  290. package/dist/runCancelContext.js +1 -2
  291. package/dist/runTerminal.d.ts +5 -0
  292. package/dist/runTerminal.js +52 -17
  293. package/dist/sandboxWire.d.ts +3 -2
  294. package/dist/sandboxWire.js +59 -27
  295. package/dist/scenarioRefusal.d.ts +2 -1
  296. package/dist/scenarioRefusal.js +6 -6
  297. package/dist/scenarioSkills.d.ts +20 -0
  298. package/dist/scenarioSkills.js +72 -0
  299. package/dist/scenarioWire.d.ts +5 -2
  300. package/dist/scenarioWire.js +9 -9
  301. package/dist/sealedKeyCapability.js +2 -2
  302. package/dist/seam.d.ts +26 -9
  303. package/dist/seam.js +44 -4
  304. package/dist/seatContract.d.ts +62 -9
  305. package/dist/seatContract.js +70 -25
  306. package/dist/selfOrchestrationDenial.js +1 -1
  307. package/dist/sessionPolicyCapability.js +2 -2
  308. package/dist/sessionRulesChildrenReadLive.d.ts +6 -0
  309. package/dist/sessionRulesChildrenReadLive.js +5 -0
  310. package/dist/sessionRulesNamespaceFormsCapability.d.ts +12 -0
  311. package/dist/sessionRulesNamespaceFormsCapability.js +29 -0
  312. package/dist/sessionSyncFileHistoryCapability.js +2 -2
  313. package/dist/settingsCredentialKeyPaths.d.ts +8 -0
  314. package/dist/settingsCredentialKeyPaths.js +274 -0
  315. package/dist/settingsHooksSalvage.d.ts +1 -0
  316. package/dist/settingsHooksSalvage.js +7 -1
  317. package/dist/settingsLayerAdmission.d.ts +4 -0
  318. package/dist/settingsLayerAdmission.js +16 -0
  319. package/dist/skillToolListsCapability.js +6 -5
  320. package/dist/skillsWireCaps.d.ts +14 -3
  321. package/dist/skillsWireCaps.js +48 -18
  322. package/dist/slashCommandGate.d.ts +24 -0
  323. package/dist/slashCommandGate.js +74 -0
  324. package/dist/slashCommandTable.d.ts +14 -0
  325. package/dist/slashCommandTable.js +99 -0
  326. package/dist/sqlEngineCapability.js +2 -2
  327. package/dist/steerPriorityCapability.js +2 -2
  328. package/dist/storePostureCapability.js +2 -2
  329. package/dist/subagent/agentStateDetail.js +1 -1
  330. package/dist/subagent/engineDelegatedPrompt.d.ts +9 -0
  331. package/dist/subagent/engineDelegatedPrompt.js +38 -7
  332. package/dist/subagent/engineRowStopGate.js +2 -2
  333. package/dist/subagent/engineSubagentResume.js +3 -3
  334. package/dist/subagent/engineTaskHandleWire.d.ts +1 -0
  335. package/dist/subagent/engineTaskHandleWire.js +10 -0
  336. package/dist/subagentContentStore.d.ts +1 -0
  337. package/dist/subagentContentStore.js +135 -27
  338. package/dist/submitFailure.d.ts +8 -0
  339. package/dist/submitFailure.js +17 -0
  340. package/dist/supportFloor.d.ts +1 -0
  341. package/dist/supportFloor.js +7 -0
  342. package/dist/terminationIntent.d.ts +55 -0
  343. package/dist/terminationIntent.js +352 -0
  344. package/dist/toolHistoryMismatch.d.ts +8 -0
  345. package/dist/toolHistoryMismatch.js +37 -6
  346. package/dist/toolResult.d.ts +13 -3
  347. package/dist/toolResult.js +158 -9
  348. package/dist/toolResultContent.d.ts +13 -0
  349. package/dist/toolResultContent.js +82 -7
  350. package/dist/toolRoster.d.ts +18 -0
  351. package/dist/toolRoster.js +64 -0
  352. package/dist/toolsFlagNames.d.ts +8 -0
  353. package/dist/toolsFlagNames.js +110 -0
  354. package/dist/turnFailurePresentation.js +41 -96
  355. package/dist/usageLimitAutoResume.d.ts +74 -0
  356. package/dist/usageLimitAutoResume.js +227 -0
  357. package/dist/userAttachmentEnvelope.js +1 -1
  358. package/dist/userAttachmentSeat.js +5 -5
  359. package/dist/userInvokedSkillsCapability.js +2 -2
  360. package/dist/webSearchBackendCapability.js +2 -2
  361. package/dist/wireErrorTriage.js +99 -50
  362. package/dist/wireFailureShape.d.ts +25 -1
  363. package/dist/wireFailureShape.js +92 -5
  364. package/dist/wireRefusalCopy.d.ts +75 -18
  365. package/dist/wireRefusalCopy.js +532 -148
  366. package/dist/wiringFleetDoctor.d.ts +3 -0
  367. package/dist/wiringFleetDoctor.js +21 -0
  368. package/dist/workflow.d.ts +2 -1
  369. package/dist/workflow.js +38 -1
  370. package/dist/workflowClient.d.ts +2 -7
  371. package/dist/workflowsJournalCapability.js +2 -2
  372. package/dist/writeProtectionCapability.js +2 -2
  373. package/docs/INTEGRATION-CLIENTS.md +1013 -190
  374. package/package.json +15 -4
@@ -5,7 +5,7 @@ import { flattenWireOutput } from './wireShapes.js';
5
5
  import { toolResultBlocksOf } from '../toolResultContent.js';
6
6
  import { bashExitOf, bashExitReadingFailed } from '../bashExitReading.js';
7
7
  import { isCcToolDenialKind } from '../gateVocabulary.js';
8
- import { guardedRead, readFrameStringKey, readFrameTrueMark } from '../ownKey.js';
8
+ import { guardedRead, ownSnapshotWhenTyped, readFrameStringKey, readFrameTrueMark } from '../ownKey.js';
9
9
  import { gateOutcomeOf, isApprovalWindowExpiredGate, isDenialLimitAutoDeniedGate } from '../gateOutcome.js';
10
10
  import { TOOL_END_INTERRUPTED_NEVER_STARTED } from '../engineErrorCodes.js';
11
11
  function toolUseResultParts(v) {
@@ -14,18 +14,19 @@ function toolUseResultParts(v) {
14
14
  export function toolResultOutcomeOf(toolName, end, rawInput, owner, ledgerTier, killCauseOf) {
15
15
  const isError = end?.isError ?? false;
16
16
  const leaderLedger = owner === 'leader';
17
+ const structured = ownSnapshotWhenTyped(end?.structured, 'task-output');
17
18
  const body = end && end.output !== undefined
18
- ? wireOutputToBody(toolName, end.output, isError, end.truncated === true, flattenWireOutput, end.structured, leaderLedger, killCauseOf)
19
+ ? wireOutputToBody(toolName, end.output, isError, end.truncated === true, flattenWireOutput, structured, leaderLedger, killCauseOf)
19
20
  : degradedToolResultBody(isError);
20
- let rich = end?.structured !== undefined
21
- ? structuredToToolUseResult(end.structured, end.output !== undefined ? flattenWireOutput(end.output) : undefined, leaderLedger)
21
+ let rich = structured !== undefined
22
+ ? structuredToToolUseResult(structured, end?.output !== undefined ? flattenWireOutput(end.output) : undefined, leaderLedger)
22
23
  : null;
23
24
  if (rich === null && ledgerTier !== undefined)
24
25
  rich = ledgerTier(isError);
25
26
  if (rich === null && !isError && toolName === 'ReportFindings') {
26
- rich = reportFindingsToolUseResult(end?.structured, rawInput);
27
+ rich = reportFindingsToolUseResult(structured, rawInput);
27
28
  }
28
- const failed = body.isError || rich?.isError === true || bashExitReadingFailed(bashExitOf(end?.structured, () => null));
29
+ const failed = body.isError || rich?.isError === true || bashExitReadingFailed(bashExitOf(structured, () => null));
29
30
  const settled = failed && !body.isError ? { ...body, isError: true } : body;
30
31
  return { body: withContentBlocks(settled, end), rich };
31
32
  }
@@ -73,8 +74,8 @@ export function createToolCardLedger(ctx, idOf) {
73
74
  const parentToolCallId = end?.parentToolCallId ?? p.parentToolCallId;
74
75
  if ((p.name === 'Bash' || p.name === 'Monitor') && !isError) {
75
76
  const outputText = end?.output !== undefined ? flattenWireOutput(end.output) : undefined;
76
- const reg = detectEngineBgShellDetach(p.name, p.rawInput, end?.structured, outputText) ??
77
- detectEngineBgShellReceipt(p.name, p.rawInput, outputText, end?.structured);
77
+ const reg = detectEngineBgShellDetach(p.name, p.rawInput, end?.structured, outputText, p.id) ??
78
+ detectEngineBgShellReceipt(p.name, p.rawInput, outputText, end?.structured, p.id);
78
79
  if (reg !== null) {
79
80
  yield chrome({ kind: 'bgshell_register', laneProof: parentToolCallId === undefined ? mainLane() : { lane: 'subagent', parentToolCallId }, taskId: reg.taskId, registration: reg });
80
81
  }
package/dist/adapt.js CHANGED
@@ -8,6 +8,7 @@ import { createPanelTaskLedger } from './adapt/panelTasks.js';
8
8
  import { createAdapterInstanceLedger } from './adapt/instanceLedger.js';
9
9
  import { createTurnFlags } from './adapt/turnFlags.js';
10
10
  import { ARMS } from './adapt/arms.js';
11
+ import { guardedRead, ownSnapshotTyped, readOwnDataNonEmptyString } from './ownKey.js';
11
12
  export const ADAPTER_COVERAGE = {
12
13
  frames: [
13
14
  'assistant',
@@ -221,9 +222,14 @@ class WireToCcAdapterImpl {
221
222
  const rawFrame = step.value;
222
223
  if (ctx.signal?.aborted)
223
224
  break;
224
- const m = rawFrame;
225
+ let m = rawFrame;
225
226
  if (m === null || typeof m !== 'object')
226
227
  continue;
228
+ {
229
+ const noticeWord = guardedRead(() => readOwnDataNonEmptyString(m, 'type'));
230
+ if (noticeWord === 'task_notification' || noticeWord === 'workflow_complete')
231
+ m = ownSnapshotTyped(m) ?? {};
232
+ }
227
233
  yield* flags.onFrameBeforeDispatch(m);
228
234
  if (m.type !== 'stream_event')
229
235
  yield* text.drainLive();
@@ -1,6 +1,8 @@
1
1
  import type { UiLanguage } from '../env/uiLanguage.js';
2
2
  import type { ActiveRunBusySignal } from './runStream.js';
3
+ import type { RejectedSubmissionOrigin } from '../request/submissionIdentity.js';
3
4
  import type { PlanReviewReopenTrigger } from '../hitl/planReviewWire.js';
5
+ import { type AskParkAutoReopenBlock } from '../hitl/askParkAutoReopenBlock.js';
4
6
  import { atMostOnceFailureClass } from '../atMostOnce.js';
5
7
  export declare const PLAN_REVIEW_GATE_KIND = "plan_review";
6
8
  export type DurableDecideLeg = 'approval' | 'plan_review' | 'other_gate' | 'unreadable' | 'absent';
@@ -40,11 +42,15 @@ export type ReopenCardVerdict = {
40
42
  dismissedByUser?: true;
41
43
  _sema_noPresentationSurface?: true;
42
44
  _sema_errorCode?: string;
45
+ _sema_reopenRefusal?: PlanReviewReopenRefusal;
46
+ _sema_policyBlocked?: AskParkAutoReopenBlock;
43
47
  } | {
44
48
  reopened: true;
45
49
  firstSight: boolean;
46
50
  presented?: boolean;
47
51
  };
52
+ export declare const PLAN_REVIEW_REOPEN_REFUSALS: readonly ["invalid_call", "no_delivery_path", "not_presented", "gate_record_gone", "internal_error"];
53
+ export type PlanReviewReopenRefusal = (typeof PLAN_REVIEW_REOPEN_REFUSALS)[number];
48
54
  export interface RunningChoiceRequest {
49
55
  taskId: string;
50
56
  status: string;
@@ -57,6 +63,11 @@ export interface StaleParkChoiceRequest {
57
63
  status: string;
58
64
  canCancel: boolean;
59
65
  }
66
+ export interface InterruptedSettleWindow {
67
+ budgetMs?: number;
68
+ intervalMs?: number;
69
+ now?: () => number;
70
+ }
60
71
  export interface ActiveRunSelfHealDeps {
61
72
  hasPendingDecision?: () => boolean;
62
73
  listOwnedPendingApprovals?: (opts?: {
@@ -65,7 +76,9 @@ export interface ActiveRunSelfHealDeps {
65
76
  reopenPlanReview?: (taskId: string, opts?: {
66
77
  trigger?: PlanReviewReopenTrigger;
67
78
  }) => ReopenCardVerdict | Promise<ReopenCardVerdict>;
68
- reopenAskPark?: (taskId: string) => Promise<ReopenCardVerdict>;
79
+ reopenAskPark?: (taskId: string, opts?: {
80
+ trigger?: PlanReviewReopenTrigger;
81
+ }) => Promise<ReopenCardVerdict>;
69
82
  offerRunningChoice?: (req: RunningChoiceRequest) => Promise<'steer' | 'cancel' | 'wait' | 'attach'>;
70
83
  canAttachRunning?: boolean;
71
84
  offerStaleParkChoice?: (req: StaleParkChoiceRequest) => Promise<'cancel' | 'wait'>;
@@ -74,6 +87,8 @@ export interface ActiveRunSelfHealDeps {
74
87
  cancelReleaseWaitMs?: number;
75
88
  submissionOrigin?: RejectedSubmissionOrigin;
76
89
  sessionId?: string;
90
+ wasRecentlyTerminatedByUs?: (taskId: string) => boolean;
91
+ interruptedSettle?: InterruptedSettleWindow;
77
92
  }
78
93
  export type SelfHealOutcome = {
79
94
  kind: 'ask-reopened';
@@ -95,6 +110,7 @@ export type SelfHealOutcome = {
95
110
  dismissedByUser?: true;
96
111
  noPresentationSurface?: true;
97
112
  errorCode?: string;
113
+ reopenRefusal?: PlanReviewReopenRefusal;
98
114
  } | {
99
115
  kind: 'not-parked';
100
116
  taskId: string;
@@ -108,6 +124,14 @@ export type SelfHealOutcome = {
108
124
  kind: 'running-settled';
109
125
  taskId: string;
110
126
  status: string;
127
+ } | {
128
+ kind: 'interrupted-settled';
129
+ taskId: string;
130
+ status: string;
131
+ } | {
132
+ kind: 'interrupted-still-finishing';
133
+ taskId: string;
134
+ waitedMs: number;
111
135
  } | {
112
136
  kind: 'state-unknown';
113
137
  taskId: string | null;
@@ -120,6 +144,7 @@ export type SelfHealOutcome = {
120
144
  pendingRowGone?: true;
121
145
  noPresentationSurface?: true;
122
146
  errorCode?: string;
147
+ policyBlocked?: AskParkAutoReopenBlock;
123
148
  } | {
124
149
  kind: 'ask-decided-without-card';
125
150
  taskId: string;
@@ -140,6 +165,8 @@ export type SelfHealOutcome = {
140
165
  taskId: string;
141
166
  detail: string;
142
167
  delivery: 'rejected' | 'unknown';
168
+ errorCode?: string;
169
+ runStatus?: string;
143
170
  } | {
144
171
  kind: 'running-attach';
145
172
  taskId: string;
@@ -186,7 +213,7 @@ export type SelfHealOutcome = {
186
213
  status: string;
187
214
  alreadyOffered?: true;
188
215
  };
189
- export type RejectedSubmissionOrigin = 'user' | 'injected';
216
+ export type { RejectedSubmissionOrigin };
190
217
  export type SelfHealSubmissionDisposition = 'held-for-decision' | 'resending' | 'handed-off' | 'not-delivered';
191
218
  export declare function selfHealSubmissionDisposition(outcome: SelfHealOutcome): SelfHealSubmissionDisposition;
192
219
  export type SteerFollowIntent = {
@@ -229,6 +256,8 @@ export interface ActiveRunSelfHealCopy {
229
256
  freshSession?: string;
230
257
  keepSessionWayOut?: () => string | null;
231
258
  engineDecidePath?: boolean;
259
+ endRun?: string;
260
+ wakeSession?: string | null;
232
261
  rowFor?: (outcome: SelfHealOutcome, signal: ActiveRunBusySignal | null | undefined) => string | undefined;
233
262
  headlessRowFor?: (signal: ActiveRunBusySignal) => string | undefined;
234
263
  }
@@ -1,6 +1,7 @@
1
1
  import { abortableSleep } from '../abortableSleep.js';
2
2
  import { EN_MESSAGES } from '../i18n/messages.en.js';
3
3
  import { msg, renderMessage } from '../i18n/translate.js';
4
+ import { ASK_PARK_AUTO_REOPEN_BLOCKS, askParkAutoReopenBlockedContent } from '../hitl/askParkAutoReopenBlock.js';
4
5
  import { corruptStoredRowContent, corruptStoredRowWhere, effectiveWireErrorCode } from '../wireErrorTriage.js';
5
6
  import { readThrownStatusSlot } from '../wireFailureShape.js';
6
7
  import { steerBodyOf, UNOBSERVED_STEER_PRIORITY } from '../controlRouter.js';
@@ -8,6 +9,7 @@ import { atMostOnceFailureClass } from '../atMostOnce.js';
8
9
  import { readSteerReceipt } from '../steerReceipt.js';
9
10
  import { resumeAttachReplayDisclosure, runningAttachOffered } from '../hitl/resumeRunningCard.js';
10
11
  import { isSdkRunParked, isSdkRunTerminal, SDK_RUN_LIVE_STATUSES } from '../terminalStatuses.js';
12
+ import { awaitInterruptedRunSettle, interruptedRunSettleRow } from '../terminationIntent.js';
11
13
  import { SDK_APPROVAL_DECIDE_GATE_KINDS, SDK_PLAN_REVIEW_GATE_KINDS } from '../generated/sdkFactTables.js';
12
14
  export const PLAN_REVIEW_GATE_KIND = 'plan_review';
13
15
  const APPROVAL_LEG_GATE_KINDS = SDK_APPROVAL_DECIDE_GATE_KINDS;
@@ -44,6 +46,7 @@ export const PLAN_REVIEW_STATES = Object.freeze(['needs_review']);
44
46
  export const ASK_PARK_STATES = Object.freeze(['suspended']);
45
47
  export const RUNNING_STATES = Object.freeze(['running']);
46
48
  export const CLAIM_HELD_STATES = SDK_RUN_LIVE_STATUSES;
49
+ export const PLAN_REVIEW_REOPEN_REFUSALS = Object.freeze(['invalid_call', 'no_delivery_path', 'not_presented', 'gate_record_gone', 'internal_error']);
47
50
  export function selfHealSubmissionDisposition(outcome) {
48
51
  switch (outcome.kind) {
49
52
  case 'decision-pending':
@@ -59,6 +62,10 @@ export function selfHealSubmissionDisposition(outcome) {
59
62
  return 'not-delivered';
60
63
  case 'running-steered':
61
64
  return 'handed-off';
65
+ case 'interrupted-settled':
66
+ return 'resending';
67
+ case 'interrupted-still-finishing':
68
+ return 'not-delivered';
62
69
  case 'running-attach':
63
70
  return 'not-delivered';
64
71
  default:
@@ -135,6 +142,8 @@ const REOPEN_VERDICT_KEYS = [
135
142
  'dismissedByUser',
136
143
  '_sema_noPresentationSurface',
137
144
  '_sema_errorCode',
145
+ '_sema_reopenRefusal',
146
+ '_sema_policyBlocked',
138
147
  ];
139
148
  function snapshotReopenVerdict(raw) {
140
149
  if (raw === null || raw === undefined)
@@ -237,6 +246,28 @@ function reopenErrorCodeOf(verdict) {
237
246
  return undefined;
238
247
  }
239
248
  }
249
+ function reopenPolicyBlockedOf(verdict) {
250
+ try {
251
+ if (verdict.reopened !== false)
252
+ return undefined;
253
+ const v = verdict._sema_policyBlocked;
254
+ return typeof v === 'string' && ASK_PARK_AUTO_REOPEN_BLOCKS.includes(v) ? v : undefined;
255
+ }
256
+ catch {
257
+ return undefined;
258
+ }
259
+ }
260
+ function reopenRefusalOf(verdict) {
261
+ try {
262
+ if (verdict.reopened !== false)
263
+ return undefined;
264
+ const v = verdict._sema_reopenRefusal;
265
+ return typeof v === 'string' && PLAN_REVIEW_REOPEN_REFUSALS.includes(v) ? v : undefined;
266
+ }
267
+ catch {
268
+ return undefined;
269
+ }
270
+ }
240
271
  function failureWireCode(e) {
241
272
  try {
242
273
  return effectiveWireErrorCode(e);
@@ -414,7 +445,58 @@ async function readOwnedPendingCount(read, deps) {
414
445
  recheckCtl.abort(new Error('owned-pending recheck settled'));
415
446
  }
416
447
  }
448
+ async function interruptedShortCircuit(signal, runs, deps) {
449
+ try {
450
+ return await interruptedShortCircuitUnguarded(signal, runs, deps);
451
+ }
452
+ catch {
453
+ return null;
454
+ }
455
+ }
456
+ async function interruptedShortCircuitUnguarded(signal, runs, deps) {
457
+ const taskId = signal.activeTaskId;
458
+ if (typeof taskId !== 'string' || taskId === '')
459
+ return null;
460
+ const callerAborted = () => deps?.signal?.aborted === true;
461
+ if (callerAborted())
462
+ return null;
463
+ const port = deps?.wasRecentlyTerminatedByUs;
464
+ if (deps === undefined || typeof port !== 'function')
465
+ return null;
466
+ let ours = false;
467
+ try {
468
+ ours = port.call(deps, taskId) === true;
469
+ }
470
+ catch {
471
+ ours = false;
472
+ }
473
+ if (!ours)
474
+ return null;
475
+ const verbs = runs;
476
+ if (verbs === undefined || typeof verbs.get !== 'function')
477
+ return null;
478
+ const callerSignal = deps.signal;
479
+ const settleDeps = {
480
+ getRun: async (id, o) => {
481
+ const row = await verbs.get(id, { ...sessionOpts(deps), ...(o?.signal !== undefined ? { signal: o.signal } : {}) });
482
+ return row === null ? null : { status: readStatusGuarded(row) };
483
+ },
484
+ ...(callerSignal !== undefined ? { signal: callerSignal } : {}),
485
+ ...(deps.interruptedSettle ?? {}),
486
+ };
487
+ const verdict = await awaitInterruptedRunSettle(taskId, settleDeps);
488
+ if (callerAborted())
489
+ return null;
490
+ if (verdict.kind === 'settled')
491
+ return { kind: 'interrupted-settled', taskId, status: verdict.status };
492
+ if (verdict.kind === 'still-running')
493
+ return { kind: 'interrupted-still-finishing', taskId, waitedMs: verdict.waitedMs };
494
+ return null;
495
+ }
417
496
  export async function attemptActiveRunSelfHeal(signal, runs, deps) {
497
+ const interrupted = await interruptedShortCircuit(signal, runs, deps);
498
+ if (interrupted !== null)
499
+ return interrupted;
418
500
  let pending = false;
419
501
  try {
420
502
  pending = deps?.hasPendingDecision?.() === true;
@@ -490,7 +572,8 @@ async function planVerdict(taskId, deps) {
490
572
  }
491
573
  async function askVerdict(taskId, deps) {
492
574
  try {
493
- return snapshotReopenVerdict(await deps?.reopenAskPark?.(taskId));
575
+ const trigger = planReviewReopenTriggerFor(deps?.submissionOrigin);
576
+ return snapshotReopenVerdict(await (trigger === undefined ? deps?.reopenAskPark?.(taskId) : deps?.reopenAskPark?.(taskId, { trigger })));
494
577
  }
495
578
  catch (e) {
496
579
  if (deps?.signal?.aborted === true)
@@ -506,6 +589,7 @@ async function planReviewArm(taskId, signal, deps) {
506
589
  const dismissed = reopenRefusedForUserDismissal(verdict);
507
590
  const noView = reopenRefusedForNoPresentationSurface(verdict);
508
591
  const errorCode = inFlight || dismissed || noView ? undefined : reopenErrorCodeOf(verdict);
592
+ const reopenRefusal = inFlight || dismissed || noView ? undefined : reopenRefusalOf(verdict);
509
593
  return {
510
594
  kind: 'plan-review-reopen-failed',
511
595
  taskId,
@@ -515,6 +599,7 @@ async function planReviewArm(taskId, signal, deps) {
515
599
  ...(dismissed ? { dismissedByUser: true } : {}),
516
600
  ...(noView ? { noPresentationSurface: true } : {}),
517
601
  ...(errorCode !== undefined ? { errorCode } : {}),
602
+ ...(reopenRefusal !== undefined ? { reopenRefusal } : {}),
518
603
  };
519
604
  }
520
605
  async function askParkArm(taskId, signal, runs, deps) {
@@ -550,7 +635,8 @@ async function askParkArm(taskId, signal, runs, deps) {
550
635
  return staleParkArm(taskId, signal, runs, deps);
551
636
  }
552
637
  const noView = reopenRefusedForNoPresentationSurface(verdict);
553
- const errorCode = inFlight || noView || reopenRefusedForUserDismissal(verdict) ? undefined : reopenErrorCodeOf(verdict);
638
+ const policyBlocked = inFlight || noView ? undefined : reopenPolicyBlockedOf(verdict);
639
+ const errorCode = inFlight || noView || reopenRefusedForUserDismissal(verdict) || policyBlocked !== undefined ? undefined : reopenErrorCodeOf(verdict);
554
640
  return {
555
641
  kind: 'ask-reopen-failed',
556
642
  taskId,
@@ -559,6 +645,7 @@ async function askParkArm(taskId, signal, runs, deps) {
559
645
  ...(verdict.pendingRowGone === true ? { pendingRowGone: true } : {}),
560
646
  ...(noView ? { noPresentationSurface: true } : {}),
561
647
  ...(errorCode !== undefined ? { errorCode } : {}),
648
+ ...(policyBlocked !== undefined ? { policyBlocked } : {}),
562
649
  };
563
650
  }
564
651
  async function probeRunStatusOnce(taskId, durable, durableGet, deps) {
@@ -790,7 +877,22 @@ async function runningChoiceArm(taskId, status, busy, statusFromWire, runs, deps
790
877
  return { kind: 'running-steered', taskId, delivery, status: receiptStatus, reopened: null };
791
878
  }
792
879
  catch (e) {
793
- return { kind: 'running-steer-failed', taskId, detail: describeFailure(e), delivery: atMostOnceFailureClass(e) };
880
+ const delivery = atMostOnceFailureClass(e);
881
+ const errorCode = failureWireCode(e);
882
+ let runStatus;
883
+ if (delivery === 'rejected' && errorCode === STEER_NOT_RUNNING_CODE && typeof runs.get === 'function' && !probeCallerAborted()) {
884
+ const probe = await probeRunStatusOnce(taskId, runs, runs.get, deps);
885
+ if (probe.status !== null)
886
+ runStatus = probe.status;
887
+ }
888
+ return {
889
+ kind: 'running-steer-failed',
890
+ taskId,
891
+ detail: describeFailure(e),
892
+ delivery,
893
+ ...(errorCode !== undefined ? { errorCode } : {}),
894
+ ...(runStatus !== undefined ? { runStatus } : {}),
895
+ };
794
896
  }
795
897
  }
796
898
  if (choice === 'cancel' && canCancel && runs?.cancel !== undefined && runs.get !== undefined) {
@@ -839,6 +941,37 @@ const say = (lang, key, params) => renderMessage(msg(key, params), lang);
839
941
  function gateKindPhrase(kind, lang) {
840
942
  return kind ? say(lang, 'session.selfHeal.gate.kind', { kind }) : say(lang, 'session.selfHeal.gate.generic');
841
943
  }
944
+ function endRunClause(copy, taskId, lang, face = 'headless') {
945
+ let host;
946
+ try {
947
+ host = copy?.endRun;
948
+ }
949
+ catch {
950
+ host = undefined;
951
+ }
952
+ const phrase = typeof host === 'string' ? host.trim().replace(/[\s.;。;!!??]+$/u, '') : '';
953
+ if (/[\p{L}\p{N}]/u.test(phrase))
954
+ return phrase;
955
+ if (face === 'interactive') {
956
+ return taskId ? say(lang, 'session.selfHeal.endRun.engineInteractive', { taskId }) : say(lang, 'session.selfHeal.endRun.engineInteractive.noId');
957
+ }
958
+ return say(lang, 'session.selfHeal.endRun.engine', { cancelPath: `POST /v1/runs/${taskId ? taskId : '<id>'}/cancel` });
959
+ }
960
+ function wakeSessionClause(copy, lang) {
961
+ let host;
962
+ try {
963
+ host = copy?.wakeSession;
964
+ }
965
+ catch {
966
+ host = undefined;
967
+ }
968
+ if (host === null)
969
+ return '';
970
+ if (typeof host === 'string' && host.trim().length > 0)
971
+ return say(lang, 'session.selfHeal.wakeOn.host', { where: host.trim() });
972
+ return say(lang, 'session.selfHeal.wakeOn.engine');
973
+ }
974
+ const STEER_NOT_RUNNING_CODE = 'steering.not_running';
842
975
  function decidePathClause(signal, lang) {
843
976
  const decidePath = signal?.pendingGate?.decidePath;
844
977
  if (!decidePath)
@@ -869,7 +1002,7 @@ export function activeRunSelfHealRow(outcome, signal, copy, origin, follow, lang
869
1002
  (outcome.kind !== 'plan-review-reopen-failed' || outcome.dismissedByUser !== true)
870
1003
  ? keepSessionWayOutOf(copy)
871
1004
  : null;
872
- const base = activeRunSelfHealBaseRow(outcome, copy?.wayOut ?? say(lang, 'session.selfHeal.wayOut.interactive'), following, keep, engineDecide, lang);
1005
+ const base = activeRunSelfHealBaseRow(outcome, copy?.wayOut ?? say(lang, 'session.selfHeal.wayOut.interactive'), following, keep, engineDecide, lang, copy);
873
1006
  const viaEngine = engineDecide ? decidePathClause(signal, lang) : '';
874
1007
  switch (outcome.kind) {
875
1008
  case 'not-parked':
@@ -893,6 +1026,9 @@ function injectedSubmissionRow(outcome, following = false, lang) {
893
1026
  if ((outcome.kind === 'ask-reopen-failed' || outcome.kind === 'plan-review-reopen-failed') && outcome.decisionInFlight === true) {
894
1027
  return say(lang, 'session.selfHeal.injected.decisionInFlight', { lead, id });
895
1028
  }
1029
+ if (outcome.kind === 'ask-reopen-failed' && outcome.policyBlocked !== undefined) {
1030
+ return askParkAutoReopenBlockedContent(outcome.policyBlocked, outcome.taskId, 'interactive', lang);
1031
+ }
896
1032
  if (outcome.kind === 'plan-review-reopen-failed' && outcome.dismissedByUser === true) {
897
1033
  return say(lang, 'session.selfHeal.injected.dismissedPlan', { lead, id, closed: msg('session.selfHeal.userClosedCardNotPutBack') });
898
1034
  }
@@ -917,6 +1053,8 @@ function injectedSubmissionRow(outcome, following = false, lang) {
917
1053
  ? say(lang, 'session.selfHeal.injected.unknownDeliveryFollowing', { unknown })
918
1054
  : say(lang, 'session.selfHeal.injected.unknownDeliveryWatch', { unknown });
919
1055
  }
1056
+ if (outcome.kind === 'interrupted-still-finishing')
1057
+ return say(lang, 'session.selfHeal.injected.interruptedFinishing', { lead, id });
920
1058
  switch (selfHealSubmissionDisposition(outcome)) {
921
1059
  case 'held-for-decision':
922
1060
  return say(lang, 'session.selfHeal.injected.heldForDecision', { lead, id });
@@ -953,7 +1091,7 @@ function keepSessionWayOutOf(copy) {
953
1091
  return null;
954
1092
  }
955
1093
  }
956
- function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessionWayOut = null, engineDecide = true, lang) {
1094
+ function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessionWayOut = null, engineDecide = true, lang, copy) {
957
1095
  switch (outcome.kind) {
958
1096
  case 'decision-pending':
959
1097
  return say(lang, 'session.selfHeal.row.decisionPending', { handle: outcome.taskId ? msg('session.selfHeal.handle.run', { taskId: outcome.taskId }) : '' });
@@ -977,6 +1115,8 @@ function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessio
977
1115
  case 'ask-reopen-failed': {
978
1116
  if (outcome.decisionInFlight === true)
979
1117
  return decisionInFlightRow('ask', outcome.taskId, lang);
1118
+ if (outcome.policyBlocked !== undefined)
1119
+ return askParkAutoReopenBlockedContent(outcome.policyBlocked, outcome.taskId, 'interactive', lang);
980
1120
  const viaEngine = engineDecide && outcome.decidePath ? msg('session.selfHeal.viaEngine', { decidePath: outcome.decidePath }) : '';
981
1121
  const noView = outcome.noPresentationSurface === true ? msg('session.selfHeal.noCardView.afterColon') : '';
982
1122
  return keepSessionWayOut !== null
@@ -1021,7 +1161,7 @@ function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessio
1021
1161
  return say(lang, 'session.selfHeal.row.steered.queued', { taskId, parked, next, textOnly });
1022
1162
  }
1023
1163
  if (outcome.delivery === 'parked_for_wake') {
1024
- return say(lang, 'session.selfHeal.row.steered.parkedForWake', { taskId, textOnly });
1164
+ return say(lang, 'session.selfHeal.row.steered.parkedForWake', { taskId, textOnly, wakeOn: wakeSessionClause(copy, lang) });
1025
1165
  }
1026
1166
  return say(lang, 'session.selfHeal.row.steered.unknown', {
1027
1167
  taskId,
@@ -1031,6 +1171,9 @@ function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessio
1031
1171
  });
1032
1172
  }
1033
1173
  case 'running-steer-failed':
1174
+ if (outcome.delivery === 'rejected' && outcome.errorCode === STEER_NOT_RUNNING_CODE && outcome.runStatus !== undefined && isSdkRunTerminal(outcome.runStatus)) {
1175
+ return say(lang, 'session.selfHeal.row.steerFailed.runEnded', { taskId: outcome.taskId, status: outcome.runStatus });
1176
+ }
1034
1177
  return outcome.delivery === 'rejected'
1035
1178
  ? say(lang, 'session.selfHeal.row.steerFailed.rejected', { taskId: outcome.taskId, detail: outcome.detail })
1036
1179
  : say(lang, 'session.selfHeal.row.steerFailed.unknown', { taskId: outcome.taskId, detail: outcome.detail });
@@ -1078,15 +1221,21 @@ function activeRunSelfHealBaseRow(outcome, wayOut, following = false, keepSessio
1078
1221
  return say(lang, 'session.selfHeal.row.cancelFailed.rejected', { taskId: outcome.taskId, detail: outcome.detail, wayOut });
1079
1222
  case 'stale-park-wait':
1080
1223
  return outcome.alreadyOffered === true
1081
- ? say(lang, 'session.selfHeal.row.stale.wait.offered', { taskId: outcome.taskId, status: outcome.status, wayOut })
1082
- : say(lang, 'session.selfHeal.row.stale.wait.first', { taskId: outcome.taskId, status: outcome.status, wayOut });
1224
+ ? say(lang, 'session.selfHeal.row.stale.wait.offered', { taskId: outcome.taskId, status: outcome.status, wayOut, endRun: endRunClause(copy, outcome.taskId, lang, 'interactive') })
1225
+ : say(lang, 'session.selfHeal.row.stale.wait.first', { taskId: outcome.taskId, status: outcome.status, wayOut, endRun: endRunClause(copy, outcome.taskId, lang, 'interactive') });
1083
1226
  case 'running-not-found':
1084
1227
  return say(lang, 'session.selfHeal.row.runNotFound', { taskId: outcome.taskId, wayOut });
1228
+ case 'interrupted-settled':
1229
+ return interruptedRunSettleRow(outcome.taskId, { kind: 'settled', status: outcome.status }, lang) ?? '';
1230
+ case 'interrupted-still-finishing': {
1231
+ const waited = `${String(Math.max(1, Math.round(outcome.waitedMs / 1000)))}s`;
1232
+ return say(lang, 'session.selfHeal.row.interrupted.stillFinishing', { taskId: outcome.taskId, waited });
1233
+ }
1085
1234
  case 'running-settled':
1086
1235
  return say(lang, 'session.selfHeal.row.runSettled', { taskId: outcome.taskId, status: outcome.status, wayOut });
1087
1236
  case 'not-parked':
1088
1237
  if (outcome.alreadyOffered === true) {
1089
- return say(lang, 'session.selfHeal.row.notParked.offered', { taskId: outcome.taskId, status: outcome.status, wayOut });
1238
+ return say(lang, 'session.selfHeal.row.notParked.offered', { taskId: outcome.taskId, status: outcome.status, wayOut, endRun: endRunClause(copy, outcome.taskId, lang, 'interactive') });
1090
1239
  }
1091
1240
  const parkedOn = outcome.pendingGateKind !== undefined
1092
1241
  ? gateKindPhrase(outcome.pendingGateKind, lang)
@@ -1111,7 +1260,7 @@ export function activeRunBusyHeadlessRow(signal, copy, lang) {
1111
1260
  return override;
1112
1261
  const activeTaskId = signal.activeTaskId;
1113
1262
  const handle = activeTaskId ? msg('session.selfHeal.handle.run', { taskId: activeTaskId }) : '';
1114
- const cancelPath = `POST /v1/runs/${activeTaskId ?? '<id>'}/cancel`;
1263
+ const endRun = endRunClause(copy, activeTaskId, lang);
1115
1264
  const status = signal.activeTaskStatus;
1116
1265
  const decidePath = signal.pendingGate?.decidePath ?? null;
1117
1266
  const hostFresh = copy?.freshSession ?? undefined;
@@ -1122,13 +1271,13 @@ export function activeRunBusyHeadlessRow(signal, copy, lang) {
1122
1271
  status: status ? msg('session.selfHeal.headless.status', { status }) : '',
1123
1272
  gate: gateKindPhrase(signal.pendingGate?.kind, lang),
1124
1273
  decidePath,
1125
- cancelPath,
1274
+ endRun,
1126
1275
  freshSession,
1127
1276
  governance: governanceOriginClause(signal, lang),
1128
1277
  });
1129
1278
  }
1130
1279
  if (status)
1131
- return say(lang, 'session.selfHeal.headless.statusOnly', { handle, status, cancelPath, freshSession });
1280
+ return say(lang, 'session.selfHeal.headless.statusOnly', { handle, status, endRun, freshSession });
1132
1281
  const startOver = hostFresh !== undefined ? `${hostFresh.charAt(0).toUpperCase()}${hostFresh.slice(1)}` : say(lang, 'session.selfHeal.freshSession.defaultCapitalized');
1133
- return say(lang, 'session.selfHeal.headless.neverReleased', { handle, startOver, cancelPath });
1282
+ return say(lang, 'session.selfHeal.headless.neverReleased', { handle, startOver, endRun });
1134
1283
  }
@@ -2,7 +2,7 @@ import type { AgentEvent, CheckpointGate, TaskResult } from '@sema-agent/sdk';
2
2
  import { type WiringManifestView } from './wiringManifestView.js';
3
3
  import { type SDKMessage, type EmitContext, type ModelUsage } from '../types.js';
4
4
  import { type McpLivenessView } from '../../mcpLiveness.js';
5
- import { type ContextUsageSectionRow } from '../../ownKey.js';
5
+ import { type ContextUsageSectionRow, type PromptIdentityLayersRow, type PromptManifestIdentityRow, type PromptManifestSectionRow } from '../../ownKey.js';
6
6
  export declare const INTERNAL_SDK_ARM_TYPES: ReadonlySet<string>;
7
7
  export type EventProjectionNoneReason = 'usage_only' | 'terminal_delegated' | 'hitl_out_of_slice' | 'not_in_slice' | 'empty_payload';
8
8
  export type EventProjectionDropReason = 'malformed' | 'unknown_arm' | 'unsupported_arm';
@@ -67,12 +67,31 @@ export interface WiringManifestLspSeamView {
67
67
  mounted: boolean;
68
68
  lane?: string;
69
69
  }
70
- export type ContextUsageSectionView = ContextUsageSectionRow;
71
- export interface PromptManifestSectionView {
72
- id: string;
73
- chars: number;
74
- slot?: string;
70
+ export interface WiringManifestModSkipView {
71
+ readonly registration: string;
72
+ readonly cause: string;
73
+ readonly reason: string;
75
74
  }
75
+ export interface WiringManifestModMountedView {
76
+ readonly name: string;
77
+ readonly seat: string;
78
+ readonly tier: string;
79
+ readonly events: readonly string[];
80
+ readonly observe?: readonly string[];
81
+ readonly skipped?: readonly WiringManifestModSkipView[];
82
+ }
83
+ export interface WiringManifestModRefusedView {
84
+ readonly name: string;
85
+ readonly seat: string;
86
+ readonly tier: string;
87
+ readonly refusedBy: string;
88
+ readonly reason: string;
89
+ }
90
+ export type WiringManifestModView = WiringManifestModMountedView | WiringManifestModRefusedView;
91
+ export type ContextUsageSectionView = ContextUsageSectionRow;
92
+ export type PromptManifestSectionView = PromptManifestSectionRow;
93
+ export type PromptManifestIdentityView = PromptManifestIdentityRow;
94
+ export type PromptIdentityLayersView = PromptIdentityLayersRow;
76
95
  export interface PromptManifestBlockView {
77
96
  id: string;
78
97
  chars: number;