@sema-agent/core 7.54.1 → 7.56.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 (621) hide show
  1. package/CHANGELOG.md +950 -0
  2. package/dist/agents/agent-transcript-tool.js +2 -1
  3. package/dist/agents/builtin-agents.d.ts +12 -14
  4. package/dist/agents/cascade.js +1 -1
  5. package/dist/agents/cc-peer-directory.d.ts +36 -0
  6. package/dist/agents/cc-peer-directory.js +139 -0
  7. package/dist/agents/cc-peer-wire.d.ts +105 -0
  8. package/dist/agents/cc-peer-wire.js +98 -0
  9. package/dist/agents/cc-uds-peer-channel.d.ts +40 -0
  10. package/dist/agents/cc-uds-peer-channel.js +457 -0
  11. package/dist/agents/child-model-seat.d.ts +0 -11
  12. package/dist/agents/child-model-seat.js +0 -3
  13. package/dist/agents/cross-session-envelope.d.ts +4 -1
  14. package/dist/agents/cross-session-envelope.js +8 -1
  15. package/dist/agents/cross-session-judge.d.ts +2 -2
  16. package/dist/agents/list-agents-tool.d.ts +3 -1
  17. package/dist/agents/list-agents-tool.js +9 -8
  18. package/dist/agents/observer.d.ts +4 -5
  19. package/dist/agents/observer.js +2 -1
  20. package/dist/agents/peer-admission.d.ts +6 -0
  21. package/dist/agents/peer-admission.js +4 -1
  22. package/dist/agents/peer-directory.d.ts +65 -13
  23. package/dist/agents/peer-directory.js +90 -25
  24. package/dist/agents/peer-notices.d.ts +1 -1
  25. package/dist/agents/peer-session-drain.d.ts +3 -1
  26. package/dist/agents/peer-session-drain.js +3 -2
  27. package/dist/agents/read-inbox-tool.js +2 -1
  28. package/dist/agents/repair-loop.js +2 -2
  29. package/dist/agents/retain-ledger.d.ts +1 -1
  30. package/dist/agents/roster-store.d.ts +1 -1
  31. package/dist/agents/send-message-tool.d.ts +10 -0
  32. package/dist/agents/send-message-tool.js +37 -8
  33. package/dist/agents/subagent.d.ts +39 -82
  34. package/dist/agents/subagent.js +109 -106
  35. package/dist/agents/tool-filter.d.ts +31 -46
  36. package/dist/agents/tool-filter.js +13 -33
  37. package/dist/agents/verify.d.ts +6 -5
  38. package/dist/agents/verify.js +3 -3
  39. package/dist/brain/anthropic.js +43 -81
  40. package/dist/brain/errors.d.ts +15 -0
  41. package/dist/brain/errors.js +10 -0
  42. package/dist/brain/media-degrade.d.ts +18 -7
  43. package/dist/brain/media-degrade.js +13 -2
  44. package/dist/brain/model-capability.d.ts +37 -0
  45. package/dist/brain/model-capability.js +34 -0
  46. package/dist/brain/model-presets.d.ts +6 -12
  47. package/dist/brain/model-presets.js +1 -6
  48. package/dist/brain/open-responses.js +27 -35
  49. package/dist/brain/openai.js +30 -98
  50. package/dist/brain/provider-dialect.d.ts +39 -3
  51. package/dist/brain/provider-dialect.js +28 -0
  52. package/dist/brain/reasoning-request.d.ts +96 -0
  53. package/dist/brain/reasoning-request.js +174 -0
  54. package/dist/brain/reasoning.d.ts +12 -12
  55. package/dist/brain/reasoning.js +4 -3
  56. package/dist/brain/request-params.d.ts +62 -9
  57. package/dist/brain/request-params.js +42 -7
  58. package/dist/brain/retry.d.ts +1 -1
  59. package/dist/brain/route-adjudicator.d.ts +15 -0
  60. package/dist/brain/route-adjudicator.js +15 -0
  61. package/dist/brain/status-sink.d.ts +20 -0
  62. package/dist/brain/status-sink.js +7 -0
  63. package/dist/brain/stream-engine.js +6 -5
  64. package/dist/brain/stream-shared.d.ts +1 -1
  65. package/dist/core/a2a.d.ts +2 -1
  66. package/dist/core/a2a.js +19 -13
  67. package/dist/core/advisor-verdict.d.ts +120 -0
  68. package/dist/core/advisor-verdict.js +92 -0
  69. package/dist/core/agent-definition.d.ts +17 -8
  70. package/dist/core/allow-entry.d.ts +69 -36
  71. package/dist/core/allow-entry.js +81 -52
  72. package/dist/core/allow-rule-shadow.d.ts +10 -3
  73. package/dist/core/approval-object.d.ts +2 -1
  74. package/dist/core/approval-object.js +6 -6
  75. package/dist/core/ask-origin.d.ts +127 -29
  76. package/dist/core/ask-origin.js +87 -25
  77. package/dist/core/ask-question.d.ts +51 -8
  78. package/dist/core/ask-question.js +12 -7
  79. package/dist/core/ask-unresolvable-notice.d.ts +8 -3
  80. package/dist/core/ask-unresolvable-notice.js +16 -2
  81. package/dist/core/auto-compaction.d.ts +11 -8
  82. package/dist/core/auto-compaction.js +4 -2
  83. package/dist/core/auto-mode-arming.d.ts +2 -2
  84. package/dist/core/auto-mode-defaults.d.ts +8 -8
  85. package/dist/core/auto-mode-prompt-assets.d.ts +3 -3
  86. package/dist/core/auto-mode-prompt.d.ts +1 -1
  87. package/dist/core/auto-mode.d.ts +17 -9
  88. package/dist/core/auto-mode.js +9 -6
  89. package/dist/core/background-agent-store.d.ts +3 -3
  90. package/dist/core/canonical-json.d.ts +1 -1
  91. package/dist/core/canonical-json.js +2 -2
  92. package/dist/core/checkpoint-generation.d.ts +53 -0
  93. package/dist/core/checkpoint-generation.js +35 -0
  94. package/dist/core/checkpoint-queries.d.ts +180 -0
  95. package/dist/core/checkpoint-queries.js +272 -0
  96. package/dist/core/checkpoint-requirements.d.ts +19 -4
  97. package/dist/core/checkpoint-requirements.js +8 -14
  98. package/dist/core/checkpoint-store.d.ts +165 -72
  99. package/dist/core/checkpoint-store.js +79 -82
  100. package/dist/core/child-clamp-seats.d.ts +6 -0
  101. package/dist/core/child-clamp-seats.js +3 -16
  102. package/dist/core/compliance.d.ts +2 -2
  103. package/dist/core/context-edit.d.ts +6 -7
  104. package/dist/core/cross-boundary-taint.d.ts +11 -4
  105. package/dist/core/cross-boundary-taint.js +3 -3
  106. package/dist/core/decision-receipt.d.ts +37 -3
  107. package/dist/core/decision-receipt.js +19 -19
  108. package/dist/core/delegation-not-started.d.ts +6 -0
  109. package/dist/core/delegation-not-started.js +17 -0
  110. package/dist/core/effective-path-target.d.ts +1 -1
  111. package/dist/core/engine-attestation.d.ts +93 -0
  112. package/dist/core/engine-attestation.js +70 -0
  113. package/dist/core/engine-capabilities.d.ts +4 -1
  114. package/dist/core/engine-capabilities.js +1 -1
  115. package/dist/core/engine-notice.d.ts +45 -12
  116. package/dist/core/exec-output-tail.d.ts +1 -1
  117. package/dist/core/file-history-retention.d.ts +1 -1
  118. package/dist/core/file-history-store.d.ts +147 -21
  119. package/dist/core/file-history-store.js +58 -32
  120. package/dist/core/gate-fold.d.ts +1 -1
  121. package/dist/core/gate-fold.js +24 -11
  122. package/dist/core/gate-lanes.js +81 -68
  123. package/dist/core/gate-outcome.d.ts +40 -6
  124. package/dist/core/gate-outcome.js +56 -0
  125. package/dist/core/governance-codes.d.ts +17 -3
  126. package/dist/core/governance-codes.js +16 -0
  127. package/dist/core/hands-band.d.ts +1 -1
  128. package/dist/core/hooks.d.ts +21 -20
  129. package/dist/core/hooks.js +3 -1
  130. package/dist/core/host-floor.d.ts +128 -0
  131. package/dist/core/host-floor.js +206 -0
  132. package/dist/core/host-target.d.ts +84 -0
  133. package/dist/core/host-target.js +92 -0
  134. package/dist/core/image-downsample.d.ts +1 -1
  135. package/dist/core/lsp-diagnostics.d.ts +4 -4
  136. package/dist/core/lsp.d.ts +3 -3
  137. package/dist/core/mailbox-store.d.ts +4 -0
  138. package/dist/core/mcp-connection-pool.d.ts +18 -2
  139. package/dist/core/mcp-connection-pool.js +53 -6
  140. package/dist/core/mcp-failure.d.ts +23 -4
  141. package/dist/core/mcp-failure.js +26 -11
  142. package/dist/core/mcp-listing-drift.d.ts +10 -0
  143. package/dist/core/mcp-listing-drift.js +6 -0
  144. package/dist/core/mcp-server-link.d.ts +173 -0
  145. package/dist/core/mcp-server-link.js +127 -0
  146. package/dist/core/mcp-server-spec.d.ts +4 -2
  147. package/dist/core/mcp-session-end.d.ts +26 -0
  148. package/dist/core/mcp-session-end.js +29 -0
  149. package/dist/core/mcp-startup-request.d.ts +17 -0
  150. package/dist/core/mcp-startup-request.js +17 -0
  151. package/dist/core/mcp.d.ts +17 -13
  152. package/dist/core/mcp.js +240 -189
  153. package/dist/core/media-byte-cap.d.ts +1 -1
  154. package/dist/core/memory-engine/delegation-settlement.js +15 -24
  155. package/dist/core/memory-engine/engine.d.ts +9 -9
  156. package/dist/core/memory-engine/engine.js +4 -4
  157. package/dist/core/memory-engine/layout.d.ts +60 -8
  158. package/dist/core/memory-engine/layout.js +65 -6
  159. package/dist/core/memory-engine/provenance-wording.d.ts +1 -1
  160. package/dist/core/memory-engine/tools.js +4 -1
  161. package/dist/core/mode-policy.d.ts +1 -1
  162. package/dist/core/model-seat.d.ts +10 -3
  163. package/dist/core/mods/classic-events.d.ts +67 -0
  164. package/dist/core/mods/classic-events.js +1 -0
  165. package/dist/core/mods/dollar.d.ts +13 -0
  166. package/dist/core/mods/extension-call.d.ts +31 -0
  167. package/dist/core/mods/extension-call.js +43 -0
  168. package/dist/core/mods/kernel/dispatch.d.ts +20 -3
  169. package/dist/core/mods/kernel/dispatch.js +140 -69
  170. package/dist/core/mods/kernel/events.d.ts +47 -11
  171. package/dist/core/mods/kernel/events.js +66 -42
  172. package/dist/core/mods/kernel/index.d.ts +4 -4
  173. package/dist/core/mods/kernel/index.js +2 -2
  174. package/dist/core/mods/kernel/receive.d.ts +39 -5
  175. package/dist/core/mods/kernel/receive.js +290 -17
  176. package/dist/core/mods/kernel/registration.d.ts +33 -2
  177. package/dist/core/mods/kernel/registration.js +6 -7
  178. package/dist/core/mods/kernel/site-rules.d.ts +44 -16
  179. package/dist/core/mods/kernel/site-rules.js +24 -42
  180. package/dist/core/mods/spec-seats.d.ts +69 -0
  181. package/dist/core/mods/spec-seats.js +114 -0
  182. package/dist/core/mods/stations.d.ts +28 -8
  183. package/dist/core/mods/stations.js +29 -13
  184. package/dist/core/mods/tool-call.d.ts +79 -0
  185. package/dist/core/mods/tool-call.js +152 -0
  186. package/dist/core/namespaced-rule-name.d.ts +44 -24
  187. package/dist/core/namespaced-rule-name.js +50 -43
  188. package/dist/core/output-style.d.ts +1 -1
  189. package/dist/core/param-rule-reach.d.ts +15 -0
  190. package/dist/core/param-rule-reach.js +30 -0
  191. package/dist/core/parent-spec-seat.d.ts +13 -1
  192. package/dist/core/parent-spec-seat.js +6 -0
  193. package/dist/core/park-selfcheck.js +1 -0
  194. package/dist/core/pause-registry.d.ts +16 -5
  195. package/dist/core/pause-registry.js +6 -2
  196. package/dist/core/peer-channel.d.ts +70 -0
  197. package/dist/core/peer-channel.js +1 -0
  198. package/dist/core/permission-rule-consent.d.ts +30 -5
  199. package/dist/core/permission-rule-consent.js +147 -50
  200. package/dist/core/permission-rule-model.d.ts +245 -65
  201. package/dist/core/permission-rule-model.js +421 -107
  202. package/dist/core/permission-rule-org.d.ts +6 -2
  203. package/dist/core/permission-rule-org.js +7 -3
  204. package/dist/core/permission-rule-provider.d.ts +6 -2
  205. package/dist/core/permission-rule-provider.js +41 -11
  206. package/dist/core/permission-rule-store.d.ts +22 -26
  207. package/dist/core/permission-rule-store.js +12 -6
  208. package/dist/core/permission-rule-sync.d.ts +11 -2
  209. package/dist/core/permission-rule-sync.js +11 -3
  210. package/dist/core/permission-rule-syntax.d.ts +5 -4
  211. package/dist/core/permission-rule-syntax.js +2 -2
  212. package/dist/core/permission-rules.d.ts +53 -15
  213. package/dist/core/permission-rules.js +125 -100
  214. package/dist/core/persisted-rule-arms.d.ts +6 -4
  215. package/dist/core/persisted-rule-arms.js +10 -12
  216. package/dist/core/present-plan-tool.js +3 -1
  217. package/dist/core/principal-name.d.ts +20 -0
  218. package/dist/core/principal-name.js +22 -0
  219. package/dist/core/prompt-section-seat.js +4 -6
  220. package/dist/core/protocol-http-auth.d.ts +26 -5
  221. package/dist/core/protocol-http-auth.js +137 -4
  222. package/dist/core/protocol-naming.d.ts +2 -2
  223. package/dist/core/read-only-shell-table.d.ts +1 -1
  224. package/dist/core/read-only-shell.d.ts +1 -1
  225. package/dist/core/retired-keys.d.ts +16 -0
  226. package/dist/core/retired-keys.js +16 -4
  227. package/dist/core/rewrite-rejudge.d.ts +60 -0
  228. package/dist/core/rewrite-rejudge.js +36 -0
  229. package/dist/core/roles.d.ts +34 -3
  230. package/dist/core/roles.js +66 -53
  231. package/dist/core/rule-lane-reads.d.ts +20 -15
  232. package/dist/core/rule-lane-reads.js +45 -17
  233. package/dist/core/rule-offer-read.d.ts +53 -0
  234. package/dist/core/rule-offer-read.js +146 -0
  235. package/dist/core/rule-owner.d.ts +46 -0
  236. package/dist/core/rule-owner.js +29 -0
  237. package/dist/core/runner/advisor-instructions.d.ts +70 -0
  238. package/dist/core/runner/advisor-instructions.js +61 -0
  239. package/dist/core/runner/advisor-tool.d.ts +33 -0
  240. package/dist/core/runner/advisor-tool.js +112 -0
  241. package/dist/core/runner/announce-once-ledger.d.ts +18 -26
  242. package/dist/core/runner/announce-once-ledger.js +19 -46
  243. package/dist/core/runner/approval-feedback.js +6 -3
  244. package/dist/core/runner/assemble-result.d.ts +2 -1
  245. package/dist/core/runner/assemble-result.js +1 -1
  246. package/dist/core/runner/call-hook-stations.d.ts +3 -2
  247. package/dist/core/runner/caller-roster.d.ts +21 -2
  248. package/dist/core/runner/caller-roster.js +38 -0
  249. package/dist/core/runner/capability-withheld-seat.d.ts +5 -0
  250. package/dist/core/runner/capability-withheld-seat.js +24 -0
  251. package/dist/core/runner/classifier-ladder.d.ts +33 -13
  252. package/dist/core/runner/classifier-ladder.js +15 -14
  253. package/dist/core/runner/compaction-restate.d.ts +10 -6
  254. package/dist/core/runner/compaction-restate.js +9 -3
  255. package/dist/core/runner/construction-doors.js +3 -0
  256. package/dist/core/runner/contracts.d.ts +40 -33
  257. package/dist/core/runner/conversation-segment.d.ts +28 -0
  258. package/dist/core/runner/conversation-segment.js +42 -0
  259. package/dist/core/runner/cross-boundary-lane.d.ts +21 -16
  260. package/dist/core/runner/cross-boundary-lane.js +58 -34
  261. package/dist/core/runner/decide-continuation.d.ts +7 -4
  262. package/dist/core/runner/decide-continuation.js +2 -2
  263. package/dist/core/runner/denial-limit-arms.d.ts +4 -4
  264. package/dist/core/runner/denial-limit-arms.js +1 -1
  265. package/dist/core/runner/derived-route-fallback.d.ts +24 -24
  266. package/dist/core/runner/derived-route-fallback.js +9 -7
  267. package/dist/core/runner/file-history-request.d.ts +18 -0
  268. package/dist/core/runner/file-history-request.js +21 -13
  269. package/dist/core/runner/file-history-restore.d.ts +45 -0
  270. package/dist/core/runner/file-history-restore.js +46 -0
  271. package/dist/core/runner/gate-exit.d.ts +9 -3
  272. package/dist/core/runner/gate-exit.js +11 -5
  273. package/dist/core/runner/image.d.ts +7 -17
  274. package/dist/core/runner/image.js +9 -60
  275. package/dist/core/runner/initial-run-state.js +1 -1
  276. package/dist/core/runner/permission-rule-lanes.d.ts +6 -6
  277. package/dist/core/runner/permission-rule-lanes.js +38 -15
  278. package/dist/core/runner/person-path-rows.d.ts +12 -9
  279. package/dist/core/runner/person-path-rows.js +19 -8
  280. package/dist/core/runner/prepare-advisor.d.ts +63 -0
  281. package/dist/core/runner/prepare-advisor.js +77 -0
  282. package/dist/core/runner/prepare-ask-lane.d.ts +2 -2
  283. package/dist/core/runner/prepare-ask-lane.js +5 -2
  284. package/dist/core/runner/prepare-caps-and-workflow.d.ts +4 -6
  285. package/dist/core/runner/prepare-caps-and-workflow.js +5 -4
  286. package/dist/core/runner/prepare-config-doors.d.ts +31 -38
  287. package/dist/core/runner/prepare-config-doors.js +57 -34
  288. package/dist/core/runner/prepare-defer-classify.d.ts +4 -3
  289. package/dist/core/runner/prepare-defer-classify.js +7 -8
  290. package/dist/core/runner/prepare-delegation-surface.d.ts +2 -2
  291. package/dist/core/runner/prepare-delegation-surface.js +1 -1
  292. package/dist/core/runner/prepare-file-history.d.ts +48 -8
  293. package/dist/core/runner/prepare-file-history.js +41 -73
  294. package/dist/core/runner/prepare-gate-stations.d.ts +2 -5
  295. package/dist/core/runner/prepare-gate-stations.js +12 -8
  296. package/dist/core/runner/prepare-hands-readface.d.ts +2 -8
  297. package/dist/core/runner/prepare-hands-readface.js +15 -14
  298. package/dist/core/runner/prepare-inherited-gate.d.ts +11 -7
  299. package/dist/core/runner/prepare-inherited-gate.js +8 -6
  300. package/dist/core/runner/prepare-memory-engine-session.js +1 -1
  301. package/dist/core/runner/prepare-park-ask.js +12 -12
  302. package/dist/core/runner/prepare-policy-chain.d.ts +7 -4
  303. package/dist/core/runner/prepare-policy-chain.js +68 -81
  304. package/dist/core/runner/prepare-project-context.d.ts +5 -2
  305. package/dist/core/runner/prepare-project-context.js +6 -3
  306. package/dist/core/runner/prepare-prompt-assembly.d.ts +5 -7
  307. package/dist/core/runner/prepare-prompt-assembly.js +10 -8
  308. package/dist/core/runner/prepare-prompt-inputs.d.ts +11 -9
  309. package/dist/core/runner/prepare-prompt-inputs.js +4 -6
  310. package/dist/core/runner/prepare-protocol-tools.d.ts +4 -2
  311. package/dist/core/runner/prepare-protocol-tools.js +5 -4
  312. package/dist/core/runner/prepare-safety-scan.d.ts +9 -12
  313. package/dist/core/runner/prepare-safety-scan.js +8 -23
  314. package/dist/core/runner/prepare-suspend-saga.d.ts +2 -0
  315. package/dist/core/runner/prepare-suspend-saga.js +5 -6
  316. package/dist/core/runner/prepare-task.d.ts +1 -1
  317. package/dist/core/runner/prepare-task.js +41 -35
  318. package/dist/core/runner/prepare-tool-disclosure-mount.d.ts +7 -4
  319. package/dist/core/runner/prepare-tool-disclosure-mount.js +24 -18
  320. package/dist/core/runner/prepare-turn-wiring.d.ts +0 -4
  321. package/dist/core/runner/prepare-turn-wiring.js +2 -7
  322. package/dist/core/runner/prepare-wiring-manifest.d.ts +11 -4
  323. package/dist/core/runner/prepare-wiring-manifest.js +3 -3
  324. package/dist/core/runner/resume-admission.js +1 -1
  325. package/dist/core/runner/resume-apply.js +11 -12
  326. package/dist/core/runner/resume-checkpoint-screen.js +3 -0
  327. package/dist/core/runner/resume-claim.d.ts +4 -2
  328. package/dist/core/runner/resume-claim.js +15 -8
  329. package/dist/core/runner/resume-policy-outcome.js +1 -1
  330. package/dist/core/runner/retired-runner-deps.js +2 -1
  331. package/dist/core/runner/rewind-files.d.ts +15 -0
  332. package/dist/core/runner/rewind-files.js +132 -0
  333. package/dist/core/runner/run-attachment-seats.js +2 -2
  334. package/dist/core/runner/run-brain-sinks.d.ts +4 -1
  335. package/dist/core/runner/run-brain-sinks.js +4 -2
  336. package/dist/core/runner/run-compaction-machinery.d.ts +1 -1
  337. package/dist/core/runner/run-compaction-machinery.js +2 -12
  338. package/dist/core/runner/run-git-lane.d.ts +1 -0
  339. package/dist/core/runner/run-harness-handlers.js +14 -7
  340. package/dist/core/runner/run-leg.d.ts +1 -1
  341. package/dist/core/runner/run-leg.js +43 -18
  342. package/dist/core/runner/run-settle-and-teardown.js +3 -2
  343. package/dist/core/runner/run-telemetry-and-budget-seats.js +1 -1
  344. package/dist/core/runner/run-turn-boundary.d.ts +1 -0
  345. package/dist/core/runner/run-turn-boundary.js +15 -22
  346. package/dist/core/runner/runtask.d.ts +3 -0
  347. package/dist/core/runner/runtask.js +8 -9
  348. package/dist/core/runner/session-read-file-states.d.ts +15 -0
  349. package/dist/core/runner/session-read-file-states.js +28 -0
  350. package/dist/core/runner/session-rule-policy.d.ts +22 -21
  351. package/dist/core/runner/session-rule-policy.js +17 -31
  352. package/dist/core/runner/shell-env-withheld.d.ts +33 -0
  353. package/dist/core/runner/shell-env-withheld.js +51 -0
  354. package/dist/core/runner/side-call-account.d.ts +32 -8
  355. package/dist/core/runner/side-call-account.js +23 -1
  356. package/dist/core/runner/skills-seat.js +6 -2
  357. package/dist/core/runner/stream-settle-backstop.js +1 -1
  358. package/dist/core/runner/strict-output-schema.d.ts +1 -1
  359. package/dist/core/runner/sub-agent-deny-lists.js +4 -6
  360. package/dist/core/runner/synthetic-tools.d.ts +16 -13
  361. package/dist/core/runner/synthetic-tools.js +8 -3
  362. package/dist/core/runner/tool-disclosure.d.ts +10 -12
  363. package/dist/core/runner/tool-disclosure.js +3 -4
  364. package/dist/core/runner/tool-end-body.d.ts +1 -1
  365. package/dist/core/runner/tool-end-body.js +10 -9
  366. package/dist/core/runner/tool-face-overlay.d.ts +2 -1
  367. package/dist/core/runner/tool-face-overlay.js +17 -1
  368. package/dist/core/runner/tool-not-executed.d.ts +5 -0
  369. package/dist/core/runner/tool-not-executed.js +11 -0
  370. package/dist/core/runner/tool-occurrence.d.ts +8 -0
  371. package/dist/core/runner/tool-occurrence.js +7 -0
  372. package/dist/core/runner/tool-progress-lane.d.ts +2 -2
  373. package/dist/core/runner/tool-turn-repair-seat.d.ts +3 -2
  374. package/dist/core/runner/turn-attachments.d.ts +91 -80
  375. package/dist/core/runner/turn-attachments.js +62 -37
  376. package/dist/core/runner-deps.d.ts +42 -42
  377. package/dist/core/runtime-caps.d.ts +4 -4
  378. package/dist/core/safety-axis-vocab.d.ts +6 -4
  379. package/dist/core/safety-axis-vocab.js +6 -5
  380. package/dist/core/safety-merge-corpus.js +26 -2
  381. package/dist/core/same-plain-value.d.ts +40 -0
  382. package/dist/core/same-plain-value.js +49 -0
  383. package/dist/core/scheduler.d.ts +1 -1
  384. package/dist/core/secret-env.d.ts +26 -3
  385. package/dist/core/secret-env.js +44 -8
  386. package/dist/core/select-model.js +3 -3
  387. package/dist/core/sensitive-path-policy.d.ts +1 -1
  388. package/dist/core/sensitive-path-policy.js +1 -1
  389. package/dist/core/session-policy-store.d.ts +102 -35
  390. package/dist/core/session-policy-store.js +210 -48
  391. package/dist/core/session-reconcile.d.ts +2 -2
  392. package/dist/core/session-store.d.ts +106 -37
  393. package/dist/core/session-store.js +165 -91
  394. package/dist/core/session.d.ts +101 -57
  395. package/dist/core/session.js +53 -0
  396. package/dist/core/shared-memory/tools.js +3 -1
  397. package/dist/core/shared-memory/types.d.ts +1 -1
  398. package/dist/core/shell-read-silence.d.ts +11 -12
  399. package/dist/core/shell-read-silence.js +9 -5
  400. package/dist/core/shell-run-candidates.js +3 -1
  401. package/dist/core/shell-wrapper-projection.js +1 -1
  402. package/dist/core/shell-wrapper-table.d.ts +14 -7
  403. package/dist/core/shell-wrapper-table.js +5 -4
  404. package/dist/core/side-query.d.ts +10 -0
  405. package/dist/core/side-query.js +15 -1
  406. package/dist/core/skill-grant.d.ts +7 -2
  407. package/dist/core/skill-grant.js +5 -0
  408. package/dist/core/skills-directory.js +6 -2
  409. package/dist/core/store-contracts/checkpoint-store-contract.d.ts +11 -1
  410. package/dist/core/store-contracts/checkpoint-store-contract.js +168 -3
  411. package/dist/core/store-contracts/file-history-store-contract.js +74 -4
  412. package/dist/core/store-contracts/peer-directory-contract.d.ts +7 -2
  413. package/dist/core/store-contracts/peer-directory-contract.js +14 -2
  414. package/dist/core/store-contracts/session-policy-store-contract.d.ts +7 -0
  415. package/dist/core/store-contracts/session-policy-store-contract.js +130 -0
  416. package/dist/core/store-contracts/session-repo-contract.js +176 -0
  417. package/dist/core/store-contracts/session-store-contract.d.ts +6 -8
  418. package/dist/core/store-contracts/session-store-contract.js +361 -51
  419. package/dist/core/store-contracts/workflow-journal-store-contract.js +26 -1
  420. package/dist/core/stub-env.d.ts +2 -0
  421. package/dist/core/stub-env.js +1 -0
  422. package/dist/core/surrogate-safe-slice.d.ts +3 -3
  423. package/dist/core/synthetic-read-verdict.js +3 -3
  424. package/dist/core/task-event.d.ts +42 -8
  425. package/dist/core/task-notification.d.ts +19 -15
  426. package/dist/core/task-registry-agent.d.ts +4 -4
  427. package/dist/core/task-registry-shared.d.ts +4 -4
  428. package/dist/core/task-registry-shared.js +1 -0
  429. package/dist/core/task-registry.d.ts +13 -4
  430. package/dist/core/task-registry.js +14 -2
  431. package/dist/core/task-result.d.ts +21 -3
  432. package/dist/core/task-spec.d.ts +69 -64
  433. package/dist/core/task-stream.d.ts +6 -6
  434. package/dist/core/task-tool-shape.d.ts +4 -4
  435. package/dist/core/tighten-task-spec.d.ts +1 -1
  436. package/dist/core/tighten-task-spec.js +2 -1
  437. package/dist/core/tool-catalog-entries.d.ts +36 -2
  438. package/dist/core/tool-catalog-entries.js +69 -43
  439. package/dist/core/tool-check-reading.d.ts +11 -0
  440. package/dist/core/tool-check-reading.js +11 -6
  441. package/dist/core/tool-conformance.js +1 -0
  442. package/dist/core/tool-errors.d.ts +2 -2
  443. package/dist/core/tool-face-reader.js +5 -3
  444. package/dist/core/tool-face.d.ts +21 -2
  445. package/dist/core/tool-face.js +1 -1
  446. package/dist/core/tool-model-gate.d.ts +5 -5
  447. package/dist/core/tool-name-aliases.d.ts +29 -8
  448. package/dist/core/tool-name-aliases.js +22 -4
  449. package/dist/core/tool-name-readings.d.ts +10 -43
  450. package/dist/core/tool-name-readings.js +2 -11
  451. package/dist/core/tool-policy.d.ts +85 -196
  452. package/dist/core/tool-policy.js +150 -175
  453. package/dist/core/tool-registry.d.ts +14 -7
  454. package/dist/core/tool-registry.js +17 -7
  455. package/dist/core/tool-result-store.js +5 -1
  456. package/dist/core/tool-roster.d.ts +57 -33
  457. package/dist/core/tool-roster.js +56 -68
  458. package/dist/core/tool-spec-members.js +8 -3
  459. package/dist/core/tool-spec.d.ts +53 -31
  460. package/dist/core/tools.js +51 -10
  461. package/dist/core/trace.d.ts +6 -2
  462. package/dist/core/types.d.ts +1 -1
  463. package/dist/core/untrusted-egress.d.ts +1 -1
  464. package/dist/core/untrusted-text.d.ts +1 -1
  465. package/dist/core/user-attachment.d.ts +8 -1
  466. package/dist/core/user-attachment.js +64 -4
  467. package/dist/core/warm-resume.d.ts +1 -1
  468. package/dist/core/wiring-manifest.d.ts +58 -0
  469. package/dist/core/wiring-manifest.js +14 -5
  470. package/dist/core/workflow-journal-store.d.ts +62 -0
  471. package/dist/core/workflow-journal-store.js +78 -2
  472. package/dist/core/workflow-run-store.d.ts +6 -0
  473. package/dist/core/workflow-run-store.js +2 -0
  474. package/dist/engine/compaction/compaction.d.ts +9 -9
  475. package/dist/engine/compaction/compaction.js +3 -2
  476. package/dist/engine/execution-env/node-execution-env.d.ts +26 -8
  477. package/dist/engine/execution-env/node-execution-env.js +54 -24
  478. package/dist/engine/harness/agent-harness.d.ts +39 -9
  479. package/dist/engine/harness/agent-harness.js +87 -33
  480. package/dist/engine/harness/types.d.ts +58 -9
  481. package/dist/engine/harness/types.js +12 -1
  482. package/dist/engine/llm/types.d.ts +36 -19
  483. package/dist/engine/llm/validation.d.ts +4 -1
  484. package/dist/engine/llm/validation.js +13 -1
  485. package/dist/engine/loop/agent-loop.d.ts +23 -1
  486. package/dist/engine/loop/agent-loop.js +26 -34
  487. package/dist/engine/loop/types.d.ts +31 -19
  488. package/dist/engine/lsp/node-lsp-manager.d.ts +2 -2
  489. package/dist/engine/session/memory-repo.d.ts +18 -12
  490. package/dist/engine/session/memory-repo.js +24 -9
  491. package/dist/engine/session/parent-chain-guard.d.ts +3 -2
  492. package/dist/engine/session/parent-chain-guard.js +1 -1
  493. package/dist/engine/session/repo-utils.d.ts +32 -3
  494. package/dist/engine/session/repo-utils.js +50 -5
  495. package/dist/index.d.ts +47 -23
  496. package/dist/index.js +35 -17
  497. package/dist/internal/harness-types.d.ts +1 -1
  498. package/dist/internal/harness.d.ts +3 -3
  499. package/dist/internal/harness.js +2 -2
  500. package/dist/internal/llm.d.ts +2 -2
  501. package/dist/internal/llm.js +1 -1
  502. package/dist/orchestration/goal.js +2 -2
  503. package/dist/orchestration/run-workflow-tool.d.ts +8 -6
  504. package/dist/orchestration/run-workflow-tool.js +10 -6
  505. package/dist/orchestration/workflow-size-guideline.d.ts +4 -4
  506. package/dist/orchestration/workflow-types.d.ts +18 -0
  507. package/dist/orchestration/workflow-types.js +6 -0
  508. package/dist/orchestration/workflow.d.ts +5 -13
  509. package/dist/orchestration/workflow.js +57 -49
  510. package/dist/prompt-assembly/artifact.d.ts +2 -2
  511. package/dist/prompt-assembly/artifact.js +5 -3
  512. package/dist/prompt-assembly/assemble.d.ts +3 -2
  513. package/dist/prompt-assembly/assemble.js +1 -1
  514. package/dist/prompt-assembly/catalog/schema.d.ts +43 -12
  515. package/dist/prompt-assembly/catalog/schema.js +34 -2
  516. package/dist/prompt-assembly/catalog/sections.js +0 -1
  517. package/dist/prompt-assembly/composer.d.ts +3 -1
  518. package/dist/prompt-assembly/composer.js +1 -1
  519. package/dist/prompt-assembly/event-registry.js +2 -0
  520. package/dist/prompt-assembly/overlay.js +3 -3
  521. package/dist/prompt-assembly/renderers.d.ts +1 -1
  522. package/dist/prompt-assembly/renderers.js +0 -3
  523. package/dist/prompt-assembly/role-base.d.ts +15 -0
  524. package/dist/prompt-assembly/role-base.js +9 -0
  525. package/dist/prompt-assembly/select.d.ts +39 -14
  526. package/dist/prompt-assembly/select.js +47 -16
  527. package/dist/prompt-assembly/sugar.d.ts +17 -11
  528. package/dist/prompt-assembly/sugar.js +8 -3
  529. package/dist/prompt-assembly/tool-catalog.d.ts +39 -2
  530. package/dist/prompt-assembly/tool-catalog.js +117 -4
  531. package/dist/prompt-assembly/turn-snapshot.d.ts +4 -10
  532. package/dist/prompt-assembly/turn-snapshot.js +0 -3
  533. package/dist/prompt-assembly/types.d.ts +0 -7
  534. package/dist/prompts/default.d.ts +14 -14
  535. package/dist/scenarios/full-body.d.ts +15 -15
  536. package/dist/scenarios/full-body.js +4 -3
  537. package/dist/shell/lex.js +10 -1
  538. package/dist/stores/file/adoption/adopt.d.ts +4 -3
  539. package/dist/stores/file/adoption/adopt.js +27 -33
  540. package/dist/stores/file/adoption/marker.d.ts +6 -13
  541. package/dist/stores/file/adoption/marker.js +9 -17
  542. package/dist/stores/file/checkpoint-store.d.ts +24 -0
  543. package/dist/stores/file/checkpoint-store.js +45 -7
  544. package/dist/stores/file/file-history-store.d.ts +20 -19
  545. package/dist/stores/file/file-history-store.js +157 -141
  546. package/dist/stores/file/fs-atomic.d.ts +15 -0
  547. package/dist/stores/file/fs-atomic.js +89 -14
  548. package/dist/stores/file/index.d.ts +1 -1
  549. package/dist/stores/file/index.js +2 -1
  550. package/dist/stores/file/mailbox-store.d.ts +3 -0
  551. package/dist/stores/file/mailbox-store.js +3 -1
  552. package/dist/stores/file/permission-rule-adopt.d.ts +1 -1
  553. package/dist/stores/file/permission-rule-adopt.js +18 -18
  554. package/dist/stores/file/permission-rule-store.d.ts +18 -2
  555. package/dist/stores/file/permission-rule-store.js +31 -18
  556. package/dist/stores/file/session-policy-store.d.ts +3 -3
  557. package/dist/stores/file/session-store.d.ts +54 -16
  558. package/dist/stores/file/session-store.js +114 -85
  559. package/dist/stores/file/workflow-journal-store.d.ts +10 -4
  560. package/dist/stores/file/workflow-journal-store.js +28 -13
  561. package/dist/tools/artifact/artifact-text.d.ts +1 -1
  562. package/dist/tools/artifact/artifact-tool.js +5 -3
  563. package/dist/tools/fs/bash-program-position.d.ts +19 -2
  564. package/dist/tools/fs/bash-program-position.js +56 -9
  565. package/dist/tools/fs/bash-readonly-classifier.d.ts +3 -3
  566. package/dist/tools/fs/fs-bash.d.ts +2 -2
  567. package/dist/tools/fs/fs-bash.js +8 -6
  568. package/dist/tools/fs/fs-glob.d.ts +86 -0
  569. package/dist/tools/fs/fs-glob.js +226 -0
  570. package/dist/tools/fs/fs-read.js +14 -14
  571. package/dist/tools/fs/fs-search-tools.js +7 -7
  572. package/dist/tools/fs/fs-shared.d.ts +8 -8
  573. package/dist/tools/fs/gh-rate-limit.d.ts +1 -1
  574. package/dist/tools/fs/notebook.d.ts +2 -2
  575. package/dist/tools/fs/pattern-kill-guard.d.ts +22 -0
  576. package/dist/tools/fs/pattern-kill-guard.js +397 -0
  577. package/dist/tools/fs/pdf.d.ts +9 -6
  578. package/dist/tools/fs/pdf.js +3 -3
  579. package/dist/tools/fs/program-read-model.d.ts +57 -7
  580. package/dist/tools/fs/program-read-model.js +11 -1
  581. package/dist/tools/fs/program-read-model.rows.js +78 -21
  582. package/dist/tools/fs/read-deny-home.js +3 -2
  583. package/dist/tools/fs/read-deny.d.ts +29 -7
  584. package/dist/tools/fs/read-deny.js +63 -22
  585. package/dist/tools/fs/removal-targets.d.ts +18 -8
  586. package/dist/tools/fs/removal-targets.js +47 -20
  587. package/dist/tools/fs/safety.d.ts +9 -9
  588. package/dist/tools/fs/search.d.ts +16 -6
  589. package/dist/tools/fs/search.js +20 -26
  590. package/dist/tools/fs/shell-read-argv.js +89 -12
  591. package/dist/tools/fs/shell-read-bindings.d.ts +31 -0
  592. package/dist/tools/fs/shell-read-bindings.js +41 -0
  593. package/dist/tools/fs/shell-read-check.js +12 -20
  594. package/dist/tools/fs/shell-read-environment.d.ts +5 -1
  595. package/dist/tools/fs/shell-read-environment.js +3 -2
  596. package/dist/tools/fs/shell-read-establish.d.ts +15 -0
  597. package/dist/tools/fs/shell-read-establish.js +19 -20
  598. package/dist/tools/fs/shell-read-judge.d.ts +4 -0
  599. package/dist/tools/fs/shell-read-judge.js +5 -2
  600. package/dist/tools/fs/shell-read-plan.js +24 -16
  601. package/dist/tools/fs/shell-read-start.d.ts +6 -1
  602. package/dist/tools/fs/shell-read-write-targets.d.ts +5 -1
  603. package/dist/tools/fs/shell-read-write-targets.js +2 -3
  604. package/dist/tools/fs/shell-reentry-text.d.ts +9 -0
  605. package/dist/tools/fs/shell-reentry-text.js +40 -2
  606. package/dist/tools/loop-tick.d.ts +2 -2
  607. package/dist/tools/scheduler-tools.js +5 -1
  608. package/dist/tools/task-list.d.ts +7 -7
  609. package/dist/tools/task-list.js +5 -1
  610. package/dist/tools/todo.js +65 -64
  611. package/dist/tools/web.d.ts +20 -15
  612. package/dist/tools/web.js +55 -69
  613. package/dist/tools/worktree.d.ts +3 -3
  614. package/dist/tools/worktree.js +3 -1
  615. package/package.json +1 -1
  616. package/test/export-surface.snapshot.json +5894 -5638
  617. package/wire-changes/core@7.55.0.json +3318 -0
  618. package/wire-changes/core@7.56.0.json +3891 -0
  619. package/wire-changes/mods-kernel@7.56.0.json +303 -0
  620. package/dist/core/store-contracts/session-store-incarnation-contract.d.ts +0 -39
  621. package/dist/core/store-contracts/session-store-incarnation-contract.js +0 -95
@@ -9,7 +9,7 @@
9
9
  * same defect has been found and fixed one site at a time (RB-122 in `clipWithFilePointer`, then
10
10
  * `truncateError`, then the three siblings above), which is exactly the shape a shared primitive prevents.
11
11
  *
12
- * Anchored on CC 2.1.220 `A7e`'s helpers `ma` (head) / `_W` (tail): drop the straddling code point WHOLE
12
+ * Head / tail helpers: drop the straddling code point WHOLE
13
13
  * rather than emit half of it. Zero imports, so any module in the repo may depend on it without risking an
14
14
  * import cycle.
15
15
  *
@@ -25,7 +25,7 @@ export declare const isHighSurrogate: (c: number) => boolean;
25
25
  export declare const isLowSurrogate: (c: number) => boolean;
26
26
  /**
27
27
  * Head-keep of at most `keep` code UNITS that never ends on a lone high surrogate — a code point straddling
28
- * the cut is dropped whole (CC 2.1.220 `ma`).
28
+ * the cut is dropped whole.
29
29
  *
30
30
  * Callers must derive any "how much was dropped" count from the RETURNED length, never from `keep`: when
31
31
  * the rollback fires the result is one unit SHORTER than the budget, and a count computed from `keep`
@@ -33,7 +33,7 @@ export declare const isLowSurrogate: (c: number) => boolean;
33
33
  */
34
34
  export declare function sliceHeadSafe(s: string, keep: number): string;
35
35
  /**
36
- * Tail-keep counterpart: at most `keep` code units, never STARTING on a lone low surrogate (CC 2.1.220
36
+ * Tail-keep counterpart: at most `keep` code units, never STARTING on a lone low surrogate (the reference's
37
37
  * `_W`). Same rule for the caller's dropped-count arithmetic — read it off the returned length.
38
38
  */
39
39
  export declare function sliceTailSafe(s: string, keep: number): string;
@@ -134,7 +134,7 @@ function createProbeJudge(layers, kind) {
134
134
  }
135
135
  let read;
136
136
  try {
137
- read = refuseOutOfContractDecision(d);
137
+ read = refuseOutOfContractDecision(d, { call: req });
138
138
  }
139
139
  catch (err) {
140
140
  cannot(layer, "threw", describeThrown(err));
@@ -144,7 +144,7 @@ function createProbeJudge(layers, kind) {
144
144
  cannot(layer, "rewritten", "the layer would rewrite the call's arguments, so its answer is not about this call");
145
145
  }
146
146
  if (read.action === "ask") {
147
- ask(layer, read.message, ancestorOwned || ruleClearanceOf(ownedClearanceFacts(read), {}).mandated);
147
+ ask(layer, read.message, ancestorOwned || ruleClearanceOf(ownedClearanceFacts(read, req), {}).mandated);
148
148
  return undefined;
149
149
  }
150
150
  if (read.action !== "deny")
@@ -182,7 +182,7 @@ function createProbeJudge(layers, kind) {
182
182
  }
183
183
  if (layers.persistedRuleLane !== undefined && !spent("persisted_rules")) {
184
184
  const read = await readPersistedRuleLane(layers.persistedRuleLane, req, layers.signal, left());
185
- const tightened = applyPersistedTightening({ action: "allow" }, read).tightened;
185
+ const tightened = applyPersistedTightening({ action: "allow" }, read, req).tightened;
186
186
  if (tightened === "deny")
187
187
  return { verdict: "deny", layer: "persisted_rules", ...judged };
188
188
  if (tightened === "ask")
@@ -269,6 +269,15 @@ export type HumanInputDelivery = "applied" | "queued" | "parked_for_wake" | "blo
269
269
  * re-listing is what keeps the two faces from drifting into two vocabularies.
270
270
  */
271
271
  export type DelegationTaskType = Extract<TaskNotificationPayload["task_type"], "background_agent" | "workflow">;
272
+ /**
273
+ * Who asked for a tool call no model message carried: an extension's own call (`$.tool.call`), by its registration name.
274
+ * A display and audit fact only — the call runs under the run's principal, rules, mode and approver, and the name decides
275
+ * nothing. Carried by the call's `tool_start` / `tool_end` and by the approval card an ask for it puts to the person.
276
+ */
277
+ export interface ExtensionRequester {
278
+ readonly kind: "extension";
279
+ readonly name: string;
280
+ }
272
281
  /** Streaming events surfaced from a running task (for live UIs). */
273
282
  export type TaskEvent = ({
274
283
  type: "text_delta";
@@ -282,9 +291,12 @@ export type TaskEvent = ({
282
291
  * the provider's `content_block_stop`), and this event is that same boundary surfaced on the TaskEvent
283
292
  * wire.
284
293
  *
285
- * `content` = the authoritative FULL text of the completed segment (byte-equal to that
286
- * segment's accumulated deltas, from the brain's own accumulation) — a consumer commits the
287
- * segment from it instead of trusting its own delta stitching. UNTRUSTED model output for
294
+ * `content` = the FULL text of the completed segment as the brain closed it — a consumer commits
295
+ * the segment from it instead of trusting its own delta stitching. It is not a promise about the
296
+ * committed message: when the turn finalizes the brain may still trim a degenerate cut's looped tail,
297
+ * add engine notes as blocks of their own, or (opt-in) rewrite text it read as tool calls. The final
298
+ * answer's one authority is `TaskResult.result`, and `TaskResult.resultEntryIds` names the committed
299
+ * messages it was read from. UNTRUSTED model output for
288
300
  * display only, same contract as `text_delta`. Emitted only for a segment that holds bytes: an
289
301
  * empty text block closes silently (a boundary with no segment would render phantom rows).
290
302
  *
@@ -315,6 +327,9 @@ export type TaskEvent = ({
315
327
  * ran is the paired `tool_end.notExecuted`); absent on every start the loop announced itself.
316
328
  */
317
329
  recovered?: true;
330
+ /** An extension's own call (`$.tool.call`): who asked for it. Absent on every call a model message carried. The call is
331
+ * not part of the conversation — no tool-result message follows it into the transcript. */
332
+ requestedBy?: ExtensionRequester;
318
333
  } & TaskEventIdentity) | ({
319
334
  /**
320
335
  * A LIVENESS TICK for a tool call that is still running. Emitted on the run's own queue between this
@@ -322,7 +337,7 @@ export type TaskEvent = ({
322
337
  * forwarded to a parent's display sink under the SAME opt-in as those two
323
338
  * (`TaskSpec.forwardSubagentEvents`).
324
339
  *
325
- * ONE FRAME, not two: CC 2.1.259 splits this into a per-tool `tool_heartbeat` plus Bash's own
340
+ * ONE FRAME, not two: the reference splits this into a per-tool `tool_heartbeat` plus Bash's own
326
341
  * `bash_progress`; this engine mints the single shape and lets the OUTPUT KEYS be what is conditional.
327
342
  * Registered divergence.
328
343
  *
@@ -413,7 +428,7 @@ export type TaskEvent = ({
413
428
  * document/worktree/todo/task/task-list/task-output/task-stop/agent/fork/workflow-run/web-fetch/
414
429
  * web-search/cron-create/cron-delete/cron-list/tool-search/repo-map/monitor-start/
415
430
  * enter-plan-mode/exit-plan-mode/report-findings/schedule-wakeup/send-message/agent-transcript/
416
- * a2a/path_not_in_root/readonly_out_of_root/read_unestablished), surfaced on the live wire so a CC-faithful shell
431
+ * a2a/path_not_in_root/readonly_out_of_root/read_unestablished/advisor), surfaced on the live wire so a CC-faithful shell
417
432
  * renders rich cards (red/green diff, stdout panes, file cards) without re-parsing the
418
433
  * model-facing string. Absent when the tool carries no card shape or when the serialized card
419
434
  * exceeds the size bound (omitted whole; a consumer falls back to `output`).
@@ -427,13 +442,19 @@ export type TaskEvent = ({
427
442
  * memory-saved / memory-recall, three words with no producer anywhere in core (a batch MultiEdit
428
443
  * replay mints `type:"edit"` with an `edits[]` array; core mounts no memory tool at all).
429
444
  *
445
+ * The **advisor** card (`type:"advisor"`, the advisor tool's every call) carries closed words, numbers and catalog ids
446
+ * only — `outcome` (`reviewed` / `declined` / `unavailable`, and `isError` ⇔ `unavailable`), `model`, `servedModel?`,
447
+ * `stopReason?`, `code?` / `errorKind?` (the failure's own words), `hold?: true` (this failure's cause switches the
448
+ * advisor off for the conversation until it is compacted — a classification, not a promise: the transcript says so once
449
+ * the result is recorded) and `usage?`. The guidance, a refusal's reason and an error's message ride {@link output}.
450
+ *
430
451
  * **Leak boundary**: the allowlist gates by `type`, so what rides is whatever the minting tool put
431
452
  * in the object — which makes each mint site responsible for its own field set. The Agent family's
432
453
  * completed card is therefore built from an EXPLICIT whitelist rather than a child-`TaskResult`
433
454
  * spread: a `TaskResult` can carry `checkpointToken` (the resume CAPABILITY) on the
434
455
  * `unexpected.suspended` terminal, and that field, with `checkpointGate`, never leaves the process.
435
456
  *
436
- * **双面契约(CC 2.1.207 @765495 成文,`tool_use_result` describe;CC207-CORE-SWEEP P2-3)** — a tool
457
+ * **双面契约(`tool_use_result` describe;P2-3)** — a tool
437
458
  * result has TWO faces that never substitute for each other:
438
459
  * - **模型面** = {@link output} / the tool_result text: the string the MODEL reads. It may carry
439
460
  * model-directed framing — e.g. a delegation tool's trailer (agentId / usage lines the model uses to
@@ -558,8 +579,18 @@ export type TaskEvent = ({
558
579
  * ABSENT means only that no such evidence exists — never "it ran": a call closed with its outcome unknown
559
580
  * (a reconcile at the next process start, a call interrupted mid-execution) carries no mark, because
560
581
  * telling a consumer it did not run could invite a replay of a write that already took effect.
582
+ * One more source of that evidence: an extension at `tool.call` answered for the call in place of its body (its own
583
+ * result, or its refusal) — the body was never called; {@link answeredBy} names it.
561
584
  */
562
585
  notExecuted?: true;
586
+ /**
587
+ * The extension (its registration name) that answered for this call at `tool.call` in place of the tool's body — a
588
+ * result of its own, or a refusal — so the body never ran (`notExecuted` is set beside it). Absent on every call
589
+ * whose body ran or that no extension answered.
590
+ */
591
+ answeredBy?: string;
592
+ /** The same member as the paired `tool_start`'s: an extension's own call, and who asked for it. */
593
+ requestedBy?: ExtensionRequester;
563
594
  /**
564
595
  * design/99 §E1 — `true` exactly when {@link output} is not the content the tool returned: text was cut at the cap
565
596
  * (the string, or the block at the cut, carries the marker; the stream's later blocks left), a media block was
@@ -825,6 +856,9 @@ export type TaskEvent = ({
825
856
  * on the model lane). [c209-C]: the listing family's FIRST-FRAME deliveries (initial roster /
826
857
  * `<skills>` block riding the first user message, not a steer) emit the same echo frames.
827
858
  *
859
+ * `mcp_unavailable`: the declared MCP servers that did not connect for this message — echoed where the notice rides
860
+ * (a fresh leg's first user message; a resumed leg's continuation). It used to ride `tools_delta`.
861
+ *
828
862
  * `git_status` (env-tail migration, additive member): the git-status frame — the turn-dynamic
829
863
  * git facts' carrier since they left the system prompt. Emitted at the frame's append RECEIPT
830
864
  * (first-frame / resume-continuation / compaction re-assert deliveries alike). Its `preview`
@@ -837,11 +871,11 @@ export type TaskEvent = ({
837
871
  * echo; the retired `plan_mode` member was the echo of the opt-in planning reminder they replaced.
838
872
  */
839
873
  type: "steering_injected";
840
- source: "limit_approach" | "todo_reminder" | "task_reminder" | "tool_search_usage_reminder" | "changed_files" | "output_style" | "date_change" | "instructions_change" | "workflow_size_guideline_change" | "budget_usd" | "total_tokens_reminder" | "background_tasks" | "tools_delta" | "agent_listing" | "skills_listing" | "mcp_instructions" | "mcp_dropped_tools" | "final_verification" | "git_status";
874
+ source: "limit_approach" | "todo_reminder" | "task_reminder" | "tool_search_usage_reminder" | "changed_files" | "output_style" | "date_change" | "instructions_change" | "workflow_size_guideline_change" | "budget_usd" | "total_tokens_reminder" | "background_tasks" | "tools_delta" | "mcp_unavailable" | "agent_listing" | "skills_listing" | "mcp_instructions" | "mcp_dropped_tools" | "final_verification" | "git_status";
841
875
  preview: string;
842
876
  } & TaskEventIdentity) | ({
843
877
  /**
844
- * design/121 (CC 198 `<new-diagnostics>` parity): NEW LSP diagnostics that appeared after the
878
+ * design/121 (`<new-diagnostics>`): NEW LSP diagnostics that appeared after the
845
879
  * agent's edits, drained at a turn boundary. The SAME data was injected into the model as a
846
880
  * `<new-diagnostics>` context message; this frame is the shell's render source (CC's collapsed
847
881
  * `Found N new diagnostic issues in M files (ctrl+o to expand)` row). UNTRUSTED RAW (language-
@@ -26,7 +26,7 @@ export declare function isNotificationInjectionOutcome(value: unknown): value is
26
26
  export type NotificationDisposition = Exclude<NotificationInjectionOutcome, "dropped_duplicate">;
27
27
  /** The closed value set of {@link SystemInjectionPriority}, as data — the wire-facing entries validate
28
28
  * against THIS rather than against three inline string literals, so widening the type widens the guard.
29
- * (Names taken verbatim from CC 2.1.223's `UYo` @ `CC:644918`; see the semantics note on
29
+ * (Names taken from the reference; see the semantics note on
30
30
  * {@link SystemInjection.priority} for which of CC's behaviors this engine implements.) */
31
31
  export declare const SYSTEM_INJECTION_PRIORITIES: readonly SystemInjectionPriority[];
32
32
  /** backlog #389 伴生 (D-3, bad-value loudness) — is this a priority this engine knows at all? A value
@@ -265,8 +265,9 @@ export interface TaskNotificationPayload {
265
265
  * `[Cross-session idle notice] …` as a plain user-frame line) — never a `<task-notification>` shell,
266
266
  * never the peer-message envelope (a notice is engine speech about a peer, not a peer's words; the
267
267
  * envelope would put it past the parity judgment as a peer's request). `text` is rendered by the
268
- * drain from the record's TYPED `peerMeta.notice` (the authority); the record's own `content` mirror is
269
- * never what reaches the model. Minted ONLY by the engine's session-box drain.
268
+ * drain from the record's TYPED `peerMeta.notice` (the authority, which rides THIS frame once, at
269
+ * `_sema_provenance.peerMeta.notice` — a host renders a card from there, never by parsing `text`); the
270
+ * record's own `content` mirror is never what reaches the model. Minted ONLY by the engine's session-box drain.
270
271
  */
271
272
  crossSessionNotice?: {
272
273
  kind: "delivery_notice" | "idle_notice";
@@ -275,29 +276,32 @@ export interface TaskNotificationPayload {
275
276
  /**
276
277
  * design/385 §1.4 d1 / §4.1 — the engine-minted PROVENANCE side record of an engine-injected peer
277
278
  * frame, a typed key (never model text) so a host can attribute and correlate the injection on the
278
- * wire. Present exactly when {@link agentMessage} OR {@link crossSessionMessage} is — one record
279
- * per carrier (the notice carrier {@link crossSessionNotice} too), `kind` naming which. Its fields are read per `kind` (see {@link SemaProvenance}):
279
+ * wire. Present exactly when one of the four peer carriers is ({@link agentMessage}, {@link crossSessionMessage},
280
+ * {@link crossSessionNotice}, {@link inboxNotice}) — one record per frame, `kind` naming which. Its fields are read per `kind` (see {@link SemaProvenance}):
280
281
  * on the agent-message lane `from` is the sender label the frame's attribute spells, `taskId` the
281
282
  * sender's run/agent id, `seq` the producer's per-frame counter (= this payload's `seq`) and
282
- * `agentType` the sender's resolved agent type when the producer knows it; on the cross-session
283
- * lane `from` is the sender's ADDRESS, `taskId` the recipient's own box handle, `seq` the box seq,
284
- * and the typed peer record rides in `peerMeta`.
283
+ * `agentType` the sender's resolved agent type when the producer knows it; on the two box-record
284
+ * lanes `from` is the sender's ADDRESS, `taskId` the recipient's own box handle, `seq` the box seq,
285
+ * and the record's typed peer metadata rides in `peerMeta` (on a notice frame its `notice` is THE typed notice).
285
286
  */
286
287
  _sema_provenance?: SemaProvenance;
287
288
  }
288
289
  /** design/385 §1.4 d1 / §4.1 — see {@link TaskNotificationPayload._sema_provenance}. `kind` is a
289
- * closed set of the two engine lanes that mint the record; a future lane adds a member, never a
290
+ * closed set of the engine carriers that mint the record; a future carrier adds a member, never a
290
291
  * second key. */
291
292
  export interface SemaProvenance {
292
- /** `agent_message` = the same-process uplink (§1.4 d1); `cross_session_message` = the session-box
293
- * drain (§4.1) — `from` is then the sender's ADDRESS, `taskId` the recipient's own box handle,
294
- * `seq` the box seq, and the typed peer record rides in `peerMeta`. */
293
+ /** `agent_message` = the same-process uplink (§1.4 d1); `cross_session_message` / `cross_session_notice` =
294
+ * the session-box drain over a box record (§4.1 / §4.4) — `from` is then the sender's ADDRESS, `taskId` the
295
+ * recipient's own box handle, `seq` the box seq, and the record's typed meta rides in `peerMeta`;
296
+ * `inbox_notice` = the drain's own line about its box (no record behind it: its facts are the carrier's). */
295
297
  kind: "agent_message" | "cross_session_message" | "cross_session_notice" | "inbox_notice";
296
298
  from: string;
297
299
  taskId: string;
298
300
  seq: number;
299
301
  agentType?: string;
300
- /** cross_session_message only — the store record's typed peer metadata, verbatim (authority). */
302
+ /** The two box-record kinds (`cross_session_message`, `cross_session_notice`) — the store record's typed peer
303
+ * metadata, verbatim (authority; a notice frame's `peerMeta.notice` is the typed notice, its carrier holds only
304
+ * the rendered line). Absent on `agent_message` / `inbox_notice`, and on a record that carried no peerMeta. */
301
305
  peerMeta?: import("./mailbox-store.js").MailboxPeerMeta;
302
306
  }
303
307
  /**
@@ -327,8 +331,8 @@ export interface ExternalNotificationInput {
327
331
  export interface SystemInjection<TPayload = unknown> {
328
332
  kind: "task_notification";
329
333
  /**
330
- * design/373 — the injection ladder is LIVE (all three values carry delivery semantics, the CC
331
- * 2.1.223 form; the flat "every priority delivers at the next boundary" era ended with this
334
+ * design/373 — the injection ladder is LIVE (all three values carry delivery semantics, the reference's
335
+ * form; the flat "every priority delivers at the next boundary" era ended with this
332
336
  * design — its H-1 anchor-correction note is preserved in the design archive, and the ruled
333
337
  * changes it named are exactly what landed here):
334
338
  *
@@ -282,12 +282,12 @@ export declare function abortBackgroundAgentsForOwnerLane(core: DurableAgentCore
282
282
  skipSessionScoped?: boolean;
283
283
  sessionScopedOnly?: boolean;
284
284
  }): number;
285
- /** CC206-B name resolution over the caller-visible background_agent rows (CC `cgo`/`gvy`, 206:575142-575178
286
- * and 206:575199-575210 — sema's single-lane subset: no teammate/name-registry branches).
285
+ /** Name resolution over the caller-visible background_agent rows
286
+ * (sema's single-lane subset: no teammate/name-registry branches).
287
287
  *
288
288
  * [c209-D] PUBLIC + explicit-name layer 0: the single resolver both TaskStop (:1839 leg) and
289
289
  * SendMessage consume, so the two verbs can never drift. Ladder:
290
- * 0a. verbatim `handle.name` match — LATEST-WINS (CC SendMessage.md: "a newer agent took the name
290
+ * 0a. exact `handle.name` match — LATEST-WINS (the reference's SendMessage doc: "a newer agent took the name
291
291
  * (latest wins)"; older rows stay task_id-addressable), any status (names keep working after
292
292
  * completion — the resume face is the CC "resumes it from its transcript" counterpart).
293
293
  * **Latest-wins is RESOLUTION, not permission to redirect a conversation**: CC pairs the same
@@ -446,7 +446,7 @@ export declare function deliverToRunningAgentLane(core: DurableAgentCore, id: st
446
446
  * very rows a retry needs. The task faces' split lives in `runningAgentFooterLane` (RB-332). */
447
447
  export declare function runningBackgroundAgentLabelsLane(core: DurableAgentCore, access: TaskAccess): string[];
448
448
  /**
449
- * The not-found FOOTER's two rows, split the way CC 220 assembles them:
449
+ * The not-found FOOTER's two rows, split the way the reference assembles them:
450
450
  * - `named` = CC `uG_` (220:467941-467953): the agentNameRegistry's KEYS whose task is a running local
451
451
  * agent, listed as BARE NAMES — the string a retry should pass verbatim. sema's counterpart
452
452
  * of "has a registry entry" is the handle carrying an explicit `name` (spawn-time label),
@@ -590,10 +590,10 @@ export declare const MONITOR_DEFAULT_TIMEOUT_MS = 300000;
590
590
  export declare const MONITOR_MAX_TIMEOUT_MS = 3600000;
591
591
  export declare const MONITOR_MAX_BATCHES_PER_MINUTE = 50;
592
592
  /** Burst capacity of the storm token bucket — how many batches may fire
593
- * back-to-back before the SUPPRESSION level engages. CC value, adopted verbatim. */
593
+ * back-to-back before the SUPPRESSION level engages. Adopted from the reference. */
594
594
  export declare const MONITOR_STORM_BURST = 10;
595
595
  /** How long a monitor must stay CONTINUOUSLY over budget before the
596
- * second level (kill) fires. CC value, adopted verbatim. */
596
+ * second level (kill) fires. Adopted from the reference. */
597
597
  export declare const MONITOR_STORM_KILL_AFTER_MS = 30000;
598
598
  /** The partial-line accumulator bound. sema's `lineBuf` had NO bound —
599
599
  * a monitored process emitting megabytes without a single newline grew it without limit (the spool's
@@ -789,7 +789,7 @@ export declare function firstDropNote(spool: {
789
789
  /** ONE wording for "you stopped nothing" across every already-terminal stop face —
790
790
  * the in-process bash/monitor/agent arms and the durable-row fallback previously split: the durable
791
791
  * arm answered honestly while the in-process arms claimed `Terminated <id>.` over work that finished
792
- * (or was killed) on its own. CC 220 refuses the call outright (`Task X is not running (status: …)`,
792
+ * (or was killed) on its own. The reference refuses the call outright (`Task X is not running (status: …)`,
793
793
  * 220:468231-468236); sema keeps the idempotent no-op posture (stopWorkflow / durable-arm precedent,
794
794
  * no isError) but the receipt must tell the truth. */
795
795
  export declare function alreadyTerminalStopNote(id: string, status: string): string;
@@ -840,7 +840,7 @@ export declare const DURABLE_AGENT_HANDLE_RE: RegExp;
840
840
  * real child error — settleBackgroundAgent never stores it (status "killed" + stoppedBy already say
841
841
  * it); exported so the subagent call sites and the registry agree on the exact sentinel. */
842
842
  export declare const BG_AGENT_REAP_STOP_ERROR = "stopped (parent task ended or TaskStop)";
843
- /** CC206-B 欠账 — TaskStop name addressing, CC `XN` verbatim (206:574955-574962): NFKC-normalize, strip
843
+ /** TaskStop name addressing: NFKC-normalize, strip
844
844
  * control/format chars (whitespace-class ones survive), trim, lowercase, whitespace runs → hyphens. Both
845
845
  * the query and the candidate label go through this, so "Fix Tests" addresses "fix tests".
846
846
  * [c209-D]: EXPORTED — SendMessage's "main" reserved lane must use the SAME canonicalization
@@ -217,6 +217,7 @@ export function formatWorkflowRun(run) {
217
217
  runId: run.id,
218
218
  type: "workflow",
219
219
  status: run.status,
220
+ ...(summary.parked ? { parked: true } : {}),
220
221
  ...(summary.name ? { name: summary.name } : {}),
221
222
  ...(summary.currentPhase ? { currentPhase: summary.currentPhase } : {}),
222
223
  agents: { done, total: run.agents.length, failed },
@@ -33,7 +33,7 @@ export interface RegisterBackgroundBashInput extends TaskAccess {
33
33
  * rolling bound) and fires ONE completion task-notification at the terminal state — the background-bash
34
34
  * half of CC's LocalShellTask completion notify. Also flips TaskOutput to re-readable spool reads. */
35
35
  onTerminal?: (notification: TaskNotificationPayload) => void;
36
- /** CC 2.1.209 对齐批A A5: the task's OUTPUT FILE — the launch receipt advertises it and the watcher
36
+ /** The task's OUTPUT FILE — the launch receipt advertises it and the watcher
37
37
  * mirrors every polled increment into it (append-only, unbounded — unlike the rolling in-memory
38
38
  * spool), so "Read the output file path" is a real alternative to TaskOutput. Terminal
39
39
  * task-notifications carry the same path (`output_file`). Primarily meaningful with `onTerminal`
@@ -66,9 +66,9 @@ export interface TaskPollOptions {
66
66
  filter?: string;
67
67
  /** design/116 W3 (CC TaskOutput `block`): wait until the task reaches a terminal state (or `timeoutMs`)
68
68
  * instead of returning the instantaneous snapshot — saves the model blind re-poll turns. The TOOL layer
69
- * defaults this to TRUE (CC 187 `block: default(!0)`, 裁定 2026-07-02); registry callers pass it explicitly. */
69
+ * defaults this to TRUE (裁定 2026-07-02); registry callers pass it explicitly. */
70
70
  block?: boolean;
71
- /** Max wait for `block` (ms). Default 30s, capped at 600s (CC 187). */
71
+ /** Max wait for `block` (ms). Default 30s, capped at 600s. */
72
72
  timeoutMs?: number;
73
73
  /** Abort signal — a blocked wait must stop when the tool call is cancelled. */
74
74
  signal?: AbortSignal;
@@ -101,7 +101,7 @@ export interface TaskToolOptions extends TaskAccess {
101
101
  * foreground clamp (design/130 P2b). When present, a BLOCKING TaskOutput wait is clamped so it
102
102
  * cannot eat the write-out window: the model gets an honest, visible clamp note instead of a
103
103
  * silent 10-minute blind wait into the finalize wall (TB rs**: 9.1min poll = the exact tax).
104
- * CC posture note (anchors/2.1.212/print-mode-drain.md): CC classifies WIND-DOWN waits, and its
104
+ * CC posture note: CC classifies WIND-DOWN waits, and its
105
105
  * block cap rides per-query budgets — a deadline-aware wait is the sema equivalent on the tool face. */
106
106
  deadlineMs?: () => number | undefined;
107
107
  /** design/157 B17 S2 (fable 终判 D4) — whether a terminal <task-notification> is actually wired for
@@ -645,6 +645,9 @@ export declare class TaskRegistry {
645
645
  * agent of another tree, a workflow run, an id no live handle answers (a durable row read back) — is content from beyond the
646
646
  * boundary on a poll and nothing on a stop. */
647
647
  boundaryLegsOf(id: string, access: TaskAccess, verb: "output" | "stop", tree: object): BoundaryLegsGiven;
648
+ /** What a session is still owed when one of its legs ends: each of its {@link liveTasks} delivers into a LATER leg of the session —
649
+ * another tree — so each is read as that leg's poll of it ({@link boundaryLegsOf}, `"output"`, under a tree no handle recorded). */
650
+ owedDeliveries(access: TaskAccess): BoundaryLegsGiven[];
648
651
  pollTask(id: string, access: TaskAccess, opts?: TaskPollOptions): Promise<UnifiedTaskResult>;
649
652
  stopTask(id: string, access: TaskAccess, opts?: TaskStopOptions): Promise<UnifiedTaskResult>;
650
653
  /** S2b — bounded delivery-confirmation wait (see deliverToRunningAgent). Test-tunable. */
@@ -677,6 +680,12 @@ export declare class TaskRegistry {
677
680
  createdAt: number;
678
681
  updatedAt: number;
679
682
  }>;
683
+ /** The tasks `access` reaches that have not finished (`pending`, `running` or `parked`), newest first — EVERY one, with no display
684
+ * cap ({@link list}'s): the one reading of a leg's live background tasks (its end's {@link owedDeliveries}, the post-compaction
685
+ * listing and the resume's orphan diff, the suspend's snapshot), each consumer projecting its own columns from it. */
686
+ liveTasks(access: TaskAccess): ReturnType<TaskRegistry["list"]>;
687
+ /** Every row `access` reaches, newest first, in {@link list}'s projection — the one walk both readings take. */
688
+ private rowsUnder;
680
689
  /** Throttled {@link gc} for hot-path callers (design/115 review B5): prepare-task runs once per task,
681
690
  * and a full-map sweep per prepare is pure overhead — sweep at most once per minute. */
682
691
  maybeGc(now?: number): number;
@@ -12,7 +12,7 @@ import { mintCompletionId, canAccessWorkflowRun, formatWorkflowRun, clipTaskOutp
12
12
  export { normalizeAgentName, DURABLE_AGENT_HEARTBEAT_MS, DURABLE_AGENT_HANDLE_RE, BG_AGENT_REAP_STOP_ERROR } from "./task-registry-shared.js";
13
13
  import { TASK_OUTPUT_TOOL_NAME, TASK_STOP_TOOL_NAME, TASK_OUTPUT_MISSING_ID_MESSAGE, TASK_STOP_MISSING_ID_MESSAGE, TASK_STOP_PARAMS, resolveTaskIdArg, REGISTRY_TASK_TOOL_CAPS, composeTaskOutputDescription, composeTaskOutputParams, composeTaskStopDescription, } from "./task-tool-shape.js";
14
14
  import { durableAgentArmedLane, durableAgentRowProbeLane, beginDurableClaimLane, endDurableClaimLane, reapDurableAgentsLane, noteBackgroundAgentActivityLane, reapStaleSessionBackgroundAgentsLane, releaseDurableTranscriptAnchorLane, bindBackgroundAgentSessionLane, registerBackgroundAgentLane, recordBackgroundAgentOrgAdmissionLane, parkBackgroundAgentLane, reconcileParkedAgentsLane, claimParkedAgentLane, rollbackParkedClaimLane, consumeParkedFlipLane, finalizeParkedResumeLane, settleBackgroundAgentLane, abortBackgroundAgentsForOwnerLane, serveDurableAgentRowLane, resolveBackgroundAgentByNameLane, backgroundAgentCycleSeqLane, activeDelegationHandlesLane, markRetainedContinuationLane, reviveBackgroundAgentLane, settleRevivedAgentLane, unmarkRetainedContinuationLane, attachAgentNotifyLane, deliverToRunningAgentLane, runningBackgroundAgentLabelsLane, runningAgentFooterLane, notFoundRunningAgentsTail, pollBackgroundAgentLane, stopBackgroundAgentLane, } from "./task-registry-agent.js";
15
- import { toolFace } from "./tool-catalog-entries.js";
15
+ import { mountRuleFace, toolFace } from "./tool-catalog-entries.js";
16
16
  import { thrownText } from "./thrown-value.js";
17
17
  import { agentStateSourceOfHandle, agentStateSourceOfRecord, agentStateSummary, readAgentState } from "./agent-state.js";
18
18
  export { canAccessWorkflowRun, clipTaskOutput, MONITOR_BATCH_WINDOW_MS, MONITOR_DEFAULT_TIMEOUT_MS, MONITOR_MAX_TIMEOUT_MS, MONITOR_MAX_BATCHES_PER_MINUTE };
@@ -32,6 +32,7 @@ const TASK_PREFIX = {
32
32
  background_agent: "a",
33
33
  monitor: "m",
34
34
  };
35
+ const A_LATER_LEG = Object.freeze({});
35
36
  function noTask(taskId, runningAgents) {
36
37
  return {
37
38
  content: `No task found with ID: ${taskId}${runningAgents ? notFoundRunningAgentsTail(runningAgents) : ""}`,
@@ -871,6 +872,9 @@ export class TaskRegistry {
871
872
  return { legs: [] };
872
873
  return { legs: verb === "output" ? ["outside_read"] : [] };
873
874
  }
875
+ owedDeliveries(access) {
876
+ return this.liveTasks(access).map((t) => this.boundaryLegsOf(t.task_id, access, "output", A_LATER_LEG));
877
+ }
874
878
  async pollTask(id, access, opts = {}) {
875
879
  const taskId = id.trim();
876
880
  const deadline = opts.block ? blockDeadline(opts.timeoutMs, Date.now()) : undefined;
@@ -1017,6 +1021,12 @@ The durable record is still marked running (last update ${new Date(row.updatedAt
1017
1021
  lastGcAt = 0;
1018
1022
  list(access, opts = {}) {
1019
1023
  const limit = Math.min(500, Math.max(1, Math.floor(opts.limit ?? 50)));
1024
+ return this.rowsUnder(access).slice(0, limit);
1025
+ }
1026
+ liveTasks(access) {
1027
+ return this.rowsUnder(access).filter((t) => t.status === "pending" || t.status === "running" || t.status === "parked");
1028
+ }
1029
+ rowsUnder(access) {
1020
1030
  const out = [];
1021
1031
  for (const h of this.handles.values()) {
1022
1032
  if (!canAccess(h, access))
@@ -1034,7 +1044,7 @@ The durable record is still marked running (last update ${new Date(row.updatedAt
1034
1044
  });
1035
1045
  }
1036
1046
  out.sort((a, b) => b.createdAt - a.createdAt);
1037
- return out.slice(0, limit);
1047
+ return out;
1038
1048
  }
1039
1049
  maybeGc(now = Date.now()) {
1040
1050
  if (now - this.lastGcAt < 60_000)
@@ -1307,6 +1317,7 @@ export function createTaskOutputTool(opts) {
1307
1317
  return defineTool({
1308
1318
  name: TASK_OUTPUT_TOOL_NAME,
1309
1319
  ...toolFace("task-output"),
1320
+ ruleFace: mountRuleFace("task-output"),
1310
1321
  description: composeTaskOutputDescription(caps),
1311
1322
  parameters: composeTaskOutputParams(caps),
1312
1323
  boundaryLegsFor: (rawArgs, at) => {
@@ -1360,6 +1371,7 @@ export function createTaskStopTool(opts) {
1360
1371
  return defineTool({
1361
1372
  name: TASK_STOP_TOOL_NAME,
1362
1373
  ...toolFace("task-stop"),
1374
+ ruleFace: mountRuleFace("task-stop"),
1363
1375
  description: composeTaskStopDescription(REGISTRY_TASK_TOOL_CAPS),
1364
1376
  parameters: TASK_STOP_PARAMS,
1365
1377
  boundaryLegsFor: (rawArgs, at) => {
@@ -247,6 +247,24 @@ export interface TaskResult {
247
247
  effectiveReasoning?: import("../brain/reasoning.js").ResolvedReasoning;
248
248
  /** Final assistant text. */
249
249
  result: string;
250
+ /**
251
+ * Where {@link result} was read from: the session-tree entry ids of the committed assistant messages the engine selected
252
+ * as the answer's source, in conversation order — the ids `message_committed.entryId` carries on the stream. One id for
253
+ * an ordinary answer; every member of the continuation chain when a cut answer was continued (`result` is their texts,
254
+ * joined). `result` is the answer's one authority: a committed message can differ from what streamed (engine notes
255
+ * placed at finalize, a degenerate cut trimmed), so a consumer that rendered the stream replaces the named messages'
256
+ * text rows with `result` instead of comparing; one that cannot bind an id (it lost that `message_committed`) reads the
257
+ * named entries from the session rather than guessing which rows they were.
258
+ *
259
+ * EMPTY when `result` was read from no committed message (the run produced no assistant message, or only one that was
260
+ * never appended — an empty failure). A named message may contribute no text (a tool-calling message a park or a stop
261
+ * ended on; a thinking-only head of a continuation chain), so `result` may be empty beside a non-empty list. ABSENT when
262
+ * the provenance is unknown: a record an older engine wrote, a result rebuilt from a checkpoint row alone, or an answer
263
+ * a leg read from a message committed before it began (whose append that leg never saw).
264
+ *
265
+ * Not yet byte-equal: `result` alone drops inline `<think>…</think>` blocks and is trimmed; the named messages keep both.
266
+ */
267
+ resultEntryIds?: readonly string[];
250
268
  /**
251
269
  * Best-effort salvaged assistant text from a terminal FAILURE. Consumption recipe: on a non-`completed`
252
270
  * status read `result` FIRST — most failure terminals (max-turns, budget, tool errors, …) still carry
@@ -863,7 +881,7 @@ export interface TaskResult {
863
881
  */
864
882
  costBreakdown?: {
865
883
  /** Root-agent LLM cost (micro-USD) = `costMicroUsd − compactionMicroUsd` (the sub-category folded into
866
- * it). NOT minus nested — nested cost is never folded into `costMicroUsd` (it lands in `nested`).
884
+ * it): the advisor consultations the root agent made are in it. NOT minus nested — nested cost is never folded into `costMicroUsd` (it lands in `nested`).
867
885
  * ⚠️ APPROXIMATE on a multi-slice `resource_limit` RESUME (design/80 D-E-core): the
868
886
  * durable resource ledger persists only the AGGREGATE prior spend, not its compaction subtotal, so
869
887
  * prior slices' compaction folds in HERE rather than into `compactionMicroUsd`. The TOTAL (`costMicroUsd`)
@@ -881,8 +899,8 @@ export interface TaskResult {
881
899
  /** Within-task compaction LLM cost (micro-USD) — part of `costMicroUsd`, so subtracted from root.
882
900
  * ⚠️ See {@link llmRootMicroUsd}: under-reports prior slices' compaction on a multi-slice resource resume. */
883
901
  compactionMicroUsd: number;
884
- /** The model calls made beside the main loop — the permission classifier's and mods' `$.model.complete` — in
885
- * micro-USD. An **"of which" line**, not a partition member: this cost is part of `costMicroUsd` and stays INSIDE
902
+ /** The model calls made beside the main loop — the permission classifier's, mods' `$.model.complete` and the advisor
903
+ * tool's consultations — in micro-USD. An **"of which" line**, not a partition member: this cost is part of `costMicroUsd` and stays INSIDE
886
904
  * {@link llmRootMicroUsd}, so `llmRootMicroUsd + compactionMicroUsd === costMicroUsd` keeps holding. Present once
887
905
  * at least one such call was booked this leg (absent ⇒ none; a result with no such call is unchanged). A call
888
906
  * whose reply carried no usage marks `stats.usageMissing` instead of adding here.