@sema-agent/core 7.55.0 → 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 (418) hide show
  1. package/CHANGELOG.md +513 -0
  2. package/dist/agents/cascade.js +1 -1
  3. package/dist/agents/cc-peer-directory.js +1 -0
  4. package/dist/agents/child-model-seat.d.ts +0 -11
  5. package/dist/agents/child-model-seat.js +0 -3
  6. package/dist/agents/list-agents-tool.d.ts +3 -1
  7. package/dist/agents/list-agents-tool.js +7 -7
  8. package/dist/agents/peer-directory.d.ts +22 -4
  9. package/dist/agents/peer-directory.js +24 -2
  10. package/dist/agents/peer-session-drain.js +2 -2
  11. package/dist/agents/repair-loop.js +2 -2
  12. package/dist/agents/send-message-tool.js +4 -4
  13. package/dist/agents/subagent.d.ts +6 -4
  14. package/dist/agents/subagent.js +64 -60
  15. package/dist/agents/tool-filter.d.ts +7 -5
  16. package/dist/agents/tool-filter.js +12 -9
  17. package/dist/agents/verify.d.ts +3 -2
  18. package/dist/agents/verify.js +3 -3
  19. package/dist/brain/anthropic.js +30 -73
  20. package/dist/brain/media-degrade.d.ts +18 -7
  21. package/dist/brain/media-degrade.js +13 -2
  22. package/dist/brain/model-capability.d.ts +37 -0
  23. package/dist/brain/model-capability.js +34 -0
  24. package/dist/brain/model-presets.d.ts +2 -8
  25. package/dist/brain/model-presets.js +1 -6
  26. package/dist/brain/open-responses.js +13 -26
  27. package/dist/brain/openai.js +14 -87
  28. package/dist/brain/reasoning-request.d.ts +96 -0
  29. package/dist/brain/reasoning-request.js +174 -0
  30. package/dist/brain/reasoning.d.ts +11 -11
  31. package/dist/brain/reasoning.js +4 -3
  32. package/dist/brain/request-params.d.ts +7 -4
  33. package/dist/brain/request-params.js +7 -4
  34. package/dist/brain/status-sink.d.ts +20 -0
  35. package/dist/brain/status-sink.js +7 -0
  36. package/dist/core/a2a.d.ts +2 -1
  37. package/dist/core/a2a.js +19 -13
  38. package/dist/core/agent-definition.d.ts +10 -0
  39. package/dist/core/allow-entry.d.ts +20 -13
  40. package/dist/core/allow-entry.js +26 -22
  41. package/dist/core/allow-rule-shadow.d.ts +3 -3
  42. package/dist/core/ask-origin.d.ts +64 -18
  43. package/dist/core/ask-origin.js +63 -23
  44. package/dist/core/ask-question.d.ts +51 -8
  45. package/dist/core/ask-question.js +3 -4
  46. package/dist/core/ask-unresolvable-notice.d.ts +8 -3
  47. package/dist/core/ask-unresolvable-notice.js +16 -2
  48. package/dist/core/checkpoint-generation.d.ts +53 -0
  49. package/dist/core/checkpoint-generation.js +35 -0
  50. package/dist/core/checkpoint-queries.d.ts +180 -0
  51. package/dist/core/checkpoint-queries.js +272 -0
  52. package/dist/core/checkpoint-requirements.d.ts +13 -1
  53. package/dist/core/checkpoint-requirements.js +4 -0
  54. package/dist/core/checkpoint-store.d.ts +88 -24
  55. package/dist/core/checkpoint-store.js +24 -9
  56. package/dist/core/cross-boundary-taint.d.ts +6 -5
  57. package/dist/core/cross-boundary-taint.js +1 -3
  58. package/dist/core/decision-receipt.d.ts +37 -3
  59. package/dist/core/decision-receipt.js +17 -17
  60. package/dist/core/delegation-not-started.d.ts +6 -0
  61. package/dist/core/delegation-not-started.js +17 -0
  62. package/dist/core/engine-attestation.d.ts +93 -0
  63. package/dist/core/engine-attestation.js +70 -0
  64. package/dist/core/engine-capabilities.d.ts +4 -1
  65. package/dist/core/engine-capabilities.js +1 -1
  66. package/dist/core/engine-notice.d.ts +30 -11
  67. package/dist/core/file-history-store.d.ts +90 -14
  68. package/dist/core/file-history-store.js +23 -15
  69. package/dist/core/gate-fold.d.ts +1 -1
  70. package/dist/core/gate-fold.js +22 -10
  71. package/dist/core/gate-lanes.js +73 -64
  72. package/dist/core/gate-outcome.d.ts +26 -5
  73. package/dist/core/gate-outcome.js +26 -0
  74. package/dist/core/governance-codes.d.ts +5 -1
  75. package/dist/core/governance-codes.js +6 -0
  76. package/dist/core/hooks.d.ts +17 -16
  77. package/dist/core/hooks.js +3 -1
  78. package/dist/core/host-floor.d.ts +128 -0
  79. package/dist/core/host-floor.js +206 -0
  80. package/dist/core/host-target.d.ts +38 -3
  81. package/dist/core/host-target.js +38 -5
  82. package/dist/core/mcp.d.ts +5 -1
  83. package/dist/core/mcp.js +67 -41
  84. package/dist/core/memory-engine/delegation-settlement.js +15 -24
  85. package/dist/core/memory-engine/engine.js +4 -4
  86. package/dist/core/memory-engine/layout.d.ts +60 -8
  87. package/dist/core/memory-engine/layout.js +65 -6
  88. package/dist/core/model-seat.d.ts +10 -3
  89. package/dist/core/mods/classic-events.d.ts +67 -0
  90. package/dist/core/mods/classic-events.js +1 -0
  91. package/dist/core/mods/dollar.d.ts +13 -0
  92. package/dist/core/mods/extension-call.d.ts +31 -0
  93. package/dist/core/mods/extension-call.js +43 -0
  94. package/dist/core/mods/kernel/dispatch.d.ts +20 -3
  95. package/dist/core/mods/kernel/dispatch.js +140 -69
  96. package/dist/core/mods/kernel/events.d.ts +47 -11
  97. package/dist/core/mods/kernel/events.js +66 -42
  98. package/dist/core/mods/kernel/index.d.ts +4 -4
  99. package/dist/core/mods/kernel/index.js +2 -2
  100. package/dist/core/mods/kernel/receive.d.ts +39 -5
  101. package/dist/core/mods/kernel/receive.js +290 -17
  102. package/dist/core/mods/kernel/registration.d.ts +33 -2
  103. package/dist/core/mods/kernel/registration.js +6 -7
  104. package/dist/core/mods/kernel/site-rules.d.ts +44 -16
  105. package/dist/core/mods/kernel/site-rules.js +24 -42
  106. package/dist/core/mods/spec-seats.d.ts +69 -0
  107. package/dist/core/mods/spec-seats.js +114 -0
  108. package/dist/core/mods/stations.d.ts +28 -8
  109. package/dist/core/mods/stations.js +29 -13
  110. package/dist/core/mods/tool-call.d.ts +79 -0
  111. package/dist/core/mods/tool-call.js +152 -0
  112. package/dist/core/namespaced-rule-name.d.ts +32 -38
  113. package/dist/core/namespaced-rule-name.js +29 -36
  114. package/dist/core/parent-spec-seat.d.ts +6 -1
  115. package/dist/core/parent-spec-seat.js +2 -0
  116. package/dist/core/park-selfcheck.js +1 -0
  117. package/dist/core/permission-rule-consent.d.ts +19 -0
  118. package/dist/core/permission-rule-consent.js +116 -26
  119. package/dist/core/permission-rule-model.d.ts +14 -3
  120. package/dist/core/permission-rule-model.js +39 -24
  121. package/dist/core/permission-rule-org.d.ts +6 -2
  122. package/dist/core/permission-rule-org.js +7 -3
  123. package/dist/core/permission-rule-provider.d.ts +5 -2
  124. package/dist/core/permission-rule-provider.js +41 -11
  125. package/dist/core/permission-rule-store.d.ts +3 -2
  126. package/dist/core/permission-rule-store.js +11 -2
  127. package/dist/core/permission-rule-sync.js +3 -2
  128. package/dist/core/permission-rule-syntax.d.ts +5 -4
  129. package/dist/core/permission-rule-syntax.js +2 -2
  130. package/dist/core/permission-rules.d.ts +4 -4
  131. package/dist/core/permission-rules.js +11 -20
  132. package/dist/core/persisted-rule-arms.d.ts +2 -2
  133. package/dist/core/persisted-rule-arms.js +10 -12
  134. package/dist/core/principal-name.d.ts +20 -0
  135. package/dist/core/principal-name.js +22 -0
  136. package/dist/core/prompt-section-seat.js +4 -6
  137. package/dist/core/protocol-http-auth.d.ts +26 -5
  138. package/dist/core/protocol-http-auth.js +137 -4
  139. package/dist/core/retired-keys.d.ts +16 -0
  140. package/dist/core/retired-keys.js +16 -4
  141. package/dist/core/rewrite-rejudge.d.ts +60 -0
  142. package/dist/core/rewrite-rejudge.js +36 -0
  143. package/dist/core/roles.d.ts +28 -1
  144. package/dist/core/roles.js +31 -19
  145. package/dist/core/rule-lane-reads.d.ts +20 -15
  146. package/dist/core/rule-lane-reads.js +45 -17
  147. package/dist/core/rule-owner.d.ts +3 -3
  148. package/dist/core/rule-owner.js +3 -2
  149. package/dist/core/runner/announce-once-ledger.d.ts +14 -0
  150. package/dist/core/runner/announce-once-ledger.js +5 -0
  151. package/dist/core/runner/assemble-result.d.ts +1 -0
  152. package/dist/core/runner/assemble-result.js +1 -1
  153. package/dist/core/runner/call-hook-stations.d.ts +3 -2
  154. package/dist/core/runner/caller-roster.d.ts +16 -4
  155. package/dist/core/runner/caller-roster.js +33 -6
  156. package/dist/core/runner/capability-withheld-seat.d.ts +5 -0
  157. package/dist/core/runner/capability-withheld-seat.js +24 -0
  158. package/dist/core/runner/classifier-ladder.d.ts +7 -9
  159. package/dist/core/runner/classifier-ladder.js +3 -3
  160. package/dist/core/runner/construction-doors.js +3 -0
  161. package/dist/core/runner/contracts.d.ts +28 -25
  162. package/dist/core/runner/cross-boundary-lane.d.ts +17 -13
  163. package/dist/core/runner/cross-boundary-lane.js +40 -27
  164. package/dist/core/runner/denial-limit-arms.d.ts +2 -2
  165. package/dist/core/runner/denial-limit-arms.js +1 -1
  166. package/dist/core/runner/file-history-request.d.ts +18 -0
  167. package/dist/core/runner/file-history-request.js +21 -13
  168. package/dist/core/runner/file-history-restore.d.ts +45 -0
  169. package/dist/core/runner/file-history-restore.js +46 -0
  170. package/dist/core/runner/gate-exit.d.ts +3 -3
  171. package/dist/core/runner/gate-exit.js +4 -3
  172. package/dist/core/runner/image.d.ts +7 -17
  173. package/dist/core/runner/image.js +9 -60
  174. package/dist/core/runner/permission-rule-lanes.d.ts +4 -4
  175. package/dist/core/runner/permission-rule-lanes.js +26 -10
  176. package/dist/core/runner/person-path-rows.d.ts +12 -9
  177. package/dist/core/runner/person-path-rows.js +18 -7
  178. package/dist/core/runner/prepare-ask-lane.d.ts +2 -2
  179. package/dist/core/runner/prepare-ask-lane.js +5 -2
  180. package/dist/core/runner/prepare-caps-and-workflow.d.ts +4 -6
  181. package/dist/core/runner/prepare-caps-and-workflow.js +4 -3
  182. package/dist/core/runner/prepare-config-doors.d.ts +29 -38
  183. package/dist/core/runner/prepare-config-doors.js +42 -25
  184. package/dist/core/runner/prepare-defer-classify.d.ts +4 -3
  185. package/dist/core/runner/prepare-defer-classify.js +7 -8
  186. package/dist/core/runner/prepare-file-history.d.ts +48 -8
  187. package/dist/core/runner/prepare-file-history.js +7 -39
  188. package/dist/core/runner/prepare-gate-stations.d.ts +1 -1
  189. package/dist/core/runner/prepare-gate-stations.js +10 -1
  190. package/dist/core/runner/prepare-hands-readface.d.ts +2 -8
  191. package/dist/core/runner/prepare-hands-readface.js +15 -14
  192. package/dist/core/runner/prepare-inherited-gate.d.ts +6 -3
  193. package/dist/core/runner/prepare-inherited-gate.js +5 -3
  194. package/dist/core/runner/prepare-memory-engine-session.js +1 -1
  195. package/dist/core/runner/prepare-park-ask.js +5 -5
  196. package/dist/core/runner/prepare-policy-chain.d.ts +6 -3
  197. package/dist/core/runner/prepare-policy-chain.js +65 -72
  198. package/dist/core/runner/prepare-prompt-assembly.d.ts +5 -7
  199. package/dist/core/runner/prepare-prompt-assembly.js +10 -8
  200. package/dist/core/runner/prepare-prompt-inputs.d.ts +11 -9
  201. package/dist/core/runner/prepare-prompt-inputs.js +3 -5
  202. package/dist/core/runner/prepare-protocol-tools.d.ts +2 -0
  203. package/dist/core/runner/prepare-protocol-tools.js +3 -3
  204. package/dist/core/runner/prepare-safety-scan.d.ts +1 -1
  205. package/dist/core/runner/prepare-safety-scan.js +0 -17
  206. package/dist/core/runner/prepare-suspend-saga.d.ts +2 -0
  207. package/dist/core/runner/prepare-suspend-saga.js +5 -6
  208. package/dist/core/runner/prepare-task.d.ts +1 -1
  209. package/dist/core/runner/prepare-task.js +29 -20
  210. package/dist/core/runner/prepare-tool-disclosure-mount.d.ts +7 -4
  211. package/dist/core/runner/prepare-tool-disclosure-mount.js +20 -16
  212. package/dist/core/runner/prepare-turn-wiring.d.ts +0 -4
  213. package/dist/core/runner/prepare-turn-wiring.js +2 -7
  214. package/dist/core/runner/prepare-wiring-manifest.d.ts +6 -2
  215. package/dist/core/runner/prepare-wiring-manifest.js +3 -3
  216. package/dist/core/runner/resume-admission.js +1 -1
  217. package/dist/core/runner/resume-apply.js +11 -12
  218. package/dist/core/runner/resume-checkpoint-screen.js +3 -0
  219. package/dist/core/runner/resume-claim.d.ts +4 -2
  220. package/dist/core/runner/resume-claim.js +15 -8
  221. package/dist/core/runner/retired-runner-deps.js +1 -0
  222. package/dist/core/runner/rewind-files.d.ts +15 -0
  223. package/dist/core/runner/rewind-files.js +132 -0
  224. package/dist/core/runner/run-attachment-seats.js +2 -1
  225. package/dist/core/runner/run-brain-sinks.d.ts +4 -1
  226. package/dist/core/runner/run-brain-sinks.js +4 -2
  227. package/dist/core/runner/run-harness-handlers.js +12 -4
  228. package/dist/core/runner/run-leg.d.ts +1 -1
  229. package/dist/core/runner/run-leg.js +30 -18
  230. package/dist/core/runner/run-settle-and-teardown.js +2 -1
  231. package/dist/core/runner/run-turn-boundary.js +1 -10
  232. package/dist/core/runner/runtask.d.ts +3 -0
  233. package/dist/core/runner/runtask.js +8 -9
  234. package/dist/core/runner/session-read-file-states.d.ts +15 -0
  235. package/dist/core/runner/session-read-file-states.js +28 -0
  236. package/dist/core/runner/session-rule-policy.js +4 -3
  237. package/dist/core/runner/shell-env-withheld.d.ts +33 -0
  238. package/dist/core/runner/shell-env-withheld.js +51 -0
  239. package/dist/core/runner/skills-seat.js +6 -2
  240. package/dist/core/runner/stream-settle-backstop.js +1 -1
  241. package/dist/core/runner/sub-agent-deny-lists.js +4 -7
  242. package/dist/core/runner/synthetic-tools.d.ts +6 -0
  243. package/dist/core/runner/synthetic-tools.js +4 -1
  244. package/dist/core/runner/tool-disclosure.d.ts +10 -12
  245. package/dist/core/runner/tool-disclosure.js +1 -3
  246. package/dist/core/runner/tool-end-body.d.ts +1 -1
  247. package/dist/core/runner/tool-end-body.js +10 -9
  248. package/dist/core/runner/tool-not-executed.d.ts +5 -0
  249. package/dist/core/runner/tool-not-executed.js +11 -0
  250. package/dist/core/runner/tool-occurrence.d.ts +8 -0
  251. package/dist/core/runner/tool-occurrence.js +7 -0
  252. package/dist/core/runner/turn-attachments.d.ts +33 -15
  253. package/dist/core/runner/turn-attachments.js +62 -37
  254. package/dist/core/runner-deps.d.ts +5 -5
  255. package/dist/core/safety-axis-vocab.d.ts +6 -4
  256. package/dist/core/safety-axis-vocab.js +6 -5
  257. package/dist/core/safety-merge-corpus.js +11 -3
  258. package/dist/core/secret-env.d.ts +26 -3
  259. package/dist/core/secret-env.js +44 -8
  260. package/dist/core/select-model.js +3 -3
  261. package/dist/core/session-policy-store.d.ts +27 -15
  262. package/dist/core/session-policy-store.js +156 -36
  263. package/dist/core/session-store.d.ts +29 -10
  264. package/dist/core/session-store.js +51 -19
  265. package/dist/core/session.d.ts +82 -16
  266. package/dist/core/session.js +53 -0
  267. package/dist/core/shell-read-silence.d.ts +11 -12
  268. package/dist/core/shell-read-silence.js +9 -5
  269. package/dist/core/shell-run-candidates.js +3 -1
  270. package/dist/core/shell-wrapper-projection.js +1 -1
  271. package/dist/core/shell-wrapper-table.d.ts +14 -7
  272. package/dist/core/shell-wrapper-table.js +5 -4
  273. package/dist/core/side-query.js +10 -1
  274. package/dist/core/skill-grant.d.ts +7 -2
  275. package/dist/core/skill-grant.js +5 -0
  276. package/dist/core/skills-directory.js +6 -2
  277. package/dist/core/store-contracts/checkpoint-store-contract.d.ts +11 -1
  278. package/dist/core/store-contracts/checkpoint-store-contract.js +140 -2
  279. package/dist/core/store-contracts/file-history-store-contract.js +31 -1
  280. package/dist/core/store-contracts/peer-directory-contract.d.ts +7 -2
  281. package/dist/core/store-contracts/peer-directory-contract.js +14 -2
  282. package/dist/core/store-contracts/session-repo-contract.js +51 -0
  283. package/dist/core/store-contracts/session-store-contract.d.ts +2 -1
  284. package/dist/core/store-contracts/session-store-contract.js +150 -14
  285. package/dist/core/stub-env.d.ts +2 -0
  286. package/dist/core/stub-env.js +1 -0
  287. package/dist/core/synthetic-read-verdict.js +3 -3
  288. package/dist/core/task-event.d.ts +32 -4
  289. package/dist/core/task-notification.d.ts +16 -12
  290. package/dist/core/task-registry.d.ts +9 -0
  291. package/dist/core/task-registry.js +11 -1
  292. package/dist/core/task-result.d.ts +18 -0
  293. package/dist/core/task-spec.d.ts +18 -13
  294. package/dist/core/tighten-task-spec.js +2 -1
  295. package/dist/core/tool-catalog-entries.d.ts +17 -0
  296. package/dist/core/tool-catalog-entries.js +13 -2
  297. package/dist/core/tool-check-reading.d.ts +11 -0
  298. package/dist/core/tool-check-reading.js +11 -6
  299. package/dist/core/tool-model-gate.d.ts +2 -2
  300. package/dist/core/tool-name-aliases.d.ts +16 -16
  301. package/dist/core/tool-name-aliases.js +13 -19
  302. package/dist/core/tool-name-readings.d.ts +5 -35
  303. package/dist/core/tool-name-readings.js +1 -9
  304. package/dist/core/tool-policy.d.ts +68 -198
  305. package/dist/core/tool-policy.js +149 -198
  306. package/dist/core/tool-result-store.js +3 -0
  307. package/dist/core/tool-roster.d.ts +14 -19
  308. package/dist/core/tool-roster.js +11 -44
  309. package/dist/core/tool-spec-members.js +7 -2
  310. package/dist/core/tool-spec.d.ts +19 -11
  311. package/dist/core/tools.js +49 -9
  312. package/dist/core/trace.d.ts +2 -2
  313. package/dist/core/types.d.ts +1 -1
  314. package/dist/core/user-attachment.d.ts +8 -1
  315. package/dist/core/user-attachment.js +64 -4
  316. package/dist/core/wiring-manifest.d.ts +9 -0
  317. package/dist/core/wiring-manifest.js +1 -0
  318. package/dist/core/workflow-journal-store.js +1 -1
  319. package/dist/engine/compaction/compaction.js +3 -2
  320. package/dist/engine/execution-env/node-execution-env.d.ts +7 -3
  321. package/dist/engine/execution-env/node-execution-env.js +11 -2
  322. package/dist/engine/harness/agent-harness.d.ts +25 -1
  323. package/dist/engine/harness/agent-harness.js +54 -7
  324. package/dist/engine/harness/types.d.ts +29 -2
  325. package/dist/engine/llm/types.d.ts +28 -11
  326. package/dist/engine/loop/agent-loop.d.ts +22 -0
  327. package/dist/engine/loop/agent-loop.js +16 -26
  328. package/dist/engine/loop/types.d.ts +16 -6
  329. package/dist/engine/session/memory-repo.d.ts +9 -2
  330. package/dist/engine/session/memory-repo.js +11 -1
  331. package/dist/engine/session/repo-utils.d.ts +6 -5
  332. package/dist/engine/session/repo-utils.js +14 -6
  333. package/dist/index.d.ts +22 -10
  334. package/dist/index.js +15 -7
  335. package/dist/internal/harness-types.d.ts +1 -1
  336. package/dist/internal/llm.d.ts +1 -1
  337. package/dist/orchestration/run-workflow-tool.d.ts +6 -4
  338. package/dist/orchestration/run-workflow-tool.js +5 -3
  339. package/dist/orchestration/workflow.d.ts +3 -0
  340. package/dist/orchestration/workflow.js +36 -18
  341. package/dist/prompt-assembly/artifact.d.ts +2 -2
  342. package/dist/prompt-assembly/artifact.js +5 -3
  343. package/dist/prompt-assembly/assemble.d.ts +3 -2
  344. package/dist/prompt-assembly/assemble.js +1 -1
  345. package/dist/prompt-assembly/catalog/schema.d.ts +43 -12
  346. package/dist/prompt-assembly/catalog/schema.js +34 -2
  347. package/dist/prompt-assembly/catalog/sections.js +0 -1
  348. package/dist/prompt-assembly/composer.d.ts +3 -1
  349. package/dist/prompt-assembly/composer.js +1 -1
  350. package/dist/prompt-assembly/event-registry.js +1 -0
  351. package/dist/prompt-assembly/overlay.js +3 -3
  352. package/dist/prompt-assembly/renderers.d.ts +1 -1
  353. package/dist/prompt-assembly/renderers.js +0 -3
  354. package/dist/prompt-assembly/role-base.d.ts +15 -0
  355. package/dist/prompt-assembly/role-base.js +9 -0
  356. package/dist/prompt-assembly/select.d.ts +39 -14
  357. package/dist/prompt-assembly/select.js +47 -16
  358. package/dist/prompt-assembly/sugar.d.ts +17 -11
  359. package/dist/prompt-assembly/sugar.js +8 -3
  360. package/dist/prompt-assembly/tool-catalog.d.ts +37 -3
  361. package/dist/prompt-assembly/tool-catalog.js +114 -4
  362. package/dist/prompt-assembly/turn-snapshot.d.ts +4 -10
  363. package/dist/prompt-assembly/turn-snapshot.js +0 -3
  364. package/dist/prompt-assembly/types.d.ts +0 -7
  365. package/dist/scenarios/full-body.d.ts +11 -11
  366. package/dist/scenarios/full-body.js +4 -3
  367. package/dist/shell/lex.js +10 -1
  368. package/dist/stores/file/adoption/adopt.js +4 -3
  369. package/dist/stores/file/adoption/marker.js +3 -2
  370. package/dist/stores/file/checkpoint-store.d.ts +21 -0
  371. package/dist/stores/file/checkpoint-store.js +38 -6
  372. package/dist/stores/file/file-history-store.js +6 -7
  373. package/dist/stores/file/index.js +2 -1
  374. package/dist/stores/file/permission-rule-adopt.js +4 -3
  375. package/dist/stores/file/permission-rule-store.js +11 -5
  376. package/dist/stores/file/session-store.d.ts +29 -6
  377. package/dist/stores/file/session-store.js +42 -50
  378. package/dist/tools/artifact/artifact-tool.js +3 -2
  379. package/dist/tools/fs/bash-program-position.d.ts +19 -2
  380. package/dist/tools/fs/bash-program-position.js +56 -9
  381. package/dist/tools/fs/fs-bash.js +5 -5
  382. package/dist/tools/fs/fs-glob.d.ts +86 -0
  383. package/dist/tools/fs/fs-glob.js +226 -0
  384. package/dist/tools/fs/fs-read.js +14 -14
  385. package/dist/tools/fs/fs-search-tools.js +7 -7
  386. package/dist/tools/fs/pattern-kill-guard.d.ts +22 -0
  387. package/dist/tools/fs/pattern-kill-guard.js +397 -0
  388. package/dist/tools/fs/pdf.d.ts +9 -6
  389. package/dist/tools/fs/pdf.js +3 -3
  390. package/dist/tools/fs/program-read-model.d.ts +57 -7
  391. package/dist/tools/fs/program-read-model.js +11 -1
  392. package/dist/tools/fs/program-read-model.rows.js +78 -21
  393. package/dist/tools/fs/read-deny-home.js +3 -2
  394. package/dist/tools/fs/removal-targets.d.ts +17 -7
  395. package/dist/tools/fs/removal-targets.js +47 -20
  396. package/dist/tools/fs/search.d.ts +10 -0
  397. package/dist/tools/fs/search.js +20 -26
  398. package/dist/tools/fs/shell-read-argv.js +89 -12
  399. package/dist/tools/fs/shell-read-bindings.d.ts +31 -0
  400. package/dist/tools/fs/shell-read-bindings.js +41 -0
  401. package/dist/tools/fs/shell-read-check.js +6 -19
  402. package/dist/tools/fs/shell-read-environment.d.ts +5 -1
  403. package/dist/tools/fs/shell-read-environment.js +3 -2
  404. package/dist/tools/fs/shell-read-establish.d.ts +15 -0
  405. package/dist/tools/fs/shell-read-establish.js +19 -20
  406. package/dist/tools/fs/shell-read-plan.js +24 -16
  407. package/dist/tools/fs/shell-read-start.d.ts +6 -1
  408. package/dist/tools/fs/shell-read-write-targets.d.ts +5 -1
  409. package/dist/tools/fs/shell-read-write-targets.js +2 -3
  410. package/dist/tools/fs/shell-reentry-text.d.ts +9 -0
  411. package/dist/tools/fs/shell-reentry-text.js +40 -2
  412. package/dist/tools/todo.js +63 -63
  413. package/dist/tools/web.d.ts +19 -14
  414. package/dist/tools/web.js +38 -55
  415. package/package.json +1 -1
  416. package/test/export-surface.snapshot.json +143 -5
  417. package/wire-changes/core@7.56.0.json +3891 -0
  418. package/wire-changes/mods-kernel@7.56.0.json +303 -0
@@ -1137,16 +1137,20 @@ export const QUARANTINE_DIR = "quarantine";
1137
1137
  const DELETED_TOMBSTONE = "---\ndeleted: true\n---\n";
1138
1138
  export function writeFileNoFollow(path, content) {
1139
1139
  const fd = openSync(path, O_WRONLY | O_CREAT | O_NOFOLLOW, 0o644);
1140
+ let names;
1140
1141
  try {
1141
- const links = fstatSync(fd).nlink;
1142
- if (links > 1)
1143
- throw Object.assign(new Error(`${path} has ${links} names (a hard link) — a write through one name changes the file under the others; not written`), { path });
1144
- ftruncateSync(fd, 0);
1145
- writeFileSync(fd, content, "utf8");
1142
+ const opened = fstatSync(fd);
1143
+ names = opened.nlink > 1 && dropStagingSecondNames(path, opened) > 0 ? fstatSync(fd).nlink : opened.nlink;
1144
+ if (names <= 1) {
1145
+ ftruncateSync(fd, 0);
1146
+ writeFileSync(fd, content, "utf8");
1147
+ }
1146
1148
  }
1147
1149
  finally {
1148
1150
  closeSync(fd);
1149
1151
  }
1152
+ if (names > 1)
1153
+ atomicWriteFileSync(path, content);
1150
1154
  }
1151
1155
  export function writeFileNoReplace(path, content) {
1152
1156
  let fd;
@@ -1166,6 +1170,61 @@ export function writeFileNoReplace(path, content) {
1166
1170
  }
1167
1171
  return "written";
1168
1172
  }
1173
+ let stagingSeq = 0;
1174
+ export function mintStagingName(owner, now) {
1175
+ stagingSeq += 1;
1176
+ return `${owner}.staging-${now()}-${process.pid}-${stagingSeq}`;
1177
+ }
1178
+ export function stagingNamePattern(owner) {
1179
+ const head = owner === undefined
1180
+ ? String.raw `(?:hold-\d+-[0-9a-f]{12}\.staging-\d+-\d+-\d+|\d+-residue-[^/]+\.md\.staging(?:-\d+-\d+-\d+)?)`
1181
+ : String.raw `${owner.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\.staging-\d+-\d+-\d+`;
1182
+ return new RegExp(String.raw `^${head}(?:\.claim-\d+-\d+)*$`);
1183
+ }
1184
+ export function claimStaging(stagingPath) {
1185
+ stagingSeq += 1;
1186
+ const claimed = `${stagingPath}.claim-${process.pid}-${stagingSeq}`;
1187
+ try {
1188
+ renameSync(stagingPath, claimed);
1189
+ return claimed;
1190
+ }
1191
+ catch {
1192
+ return stagingPath;
1193
+ }
1194
+ }
1195
+ export function isSameFile(path, ref) {
1196
+ try {
1197
+ const st = lstatSync(path);
1198
+ return st.isFile() && st.dev === ref.dev && st.ino === ref.ino;
1199
+ }
1200
+ catch {
1201
+ return false;
1202
+ }
1203
+ }
1204
+ export function dropStagingSecondNames(seat, opened) {
1205
+ const dir = dirname(seat);
1206
+ let names;
1207
+ try {
1208
+ names = readdirSync(dir);
1209
+ }
1210
+ catch {
1211
+ return 0;
1212
+ }
1213
+ const minted = stagingNamePattern();
1214
+ let dropped = 0;
1215
+ for (const name of names) {
1216
+ const at = join(dir, name);
1217
+ if (name === basename(seat) || !minted.test(name) || !isSameFile(at, opened))
1218
+ continue;
1219
+ try {
1220
+ unlinkSync(at);
1221
+ dropped += 1;
1222
+ }
1223
+ catch {
1224
+ }
1225
+ }
1226
+ return dropped;
1227
+ }
1169
1228
  function readForVerification(path, maxBytes) {
1170
1229
  let fd;
1171
1230
  try {
@@ -2628,7 +2687,7 @@ export function writeAllSync(fd, data) {
2628
2687
  export function atomicWriteFileSync(path, data) {
2629
2688
  ensureDirExists(dirname(path));
2630
2689
  const tmp = join(dirname(path), `.tmp-${process.pid}-${Math.random().toString(36).slice(2, 10)}`);
2631
- const fd = openSync(tmp, "w", 0o600);
2690
+ const fd = openSync(tmp, O_WRONLY | O_CREAT | O_EXCL | O_NOFOLLOW, 0o600);
2632
2691
  try {
2633
2692
  writeAllSync(fd, data);
2634
2693
  fsyncSync(fd);
@@ -49,9 +49,16 @@ export type RoleSpec = ModelRef | {
49
49
  select?: import("./select-model.js").ModelCriteria;
50
50
  thinking?: ThinkingLevel;
51
51
  /**
52
- * Optional preset system prompt for this role (e.g. {@link CODE_AGENT_PROMPT} for a dev role).
53
- * Used only when the task does not supply its own `TaskSpec.systemPrompt`. Lets coding roles run
54
- * a coding prompt while other roles keep the neutral default — without touching the global default.
52
+ * The role's preset role base, by WORD: which catalog role base (`core/role.base` variant) tasks of this role
53
+ * are assembled for — `"code"` for a coding role — and their host role. Same closed set and door as
54
+ * `TaskSpec.promptRole` (`HOST_ROLES`; outside it ⇒ `config.prompt_selector_invalid`, naming `roles.<role>.promptRole`).
55
+ * The preset applies only when the task names no role base of its own (neither `promptRole` nor `systemPrompt`):
56
+ * the first source that names one — task, then this preset, then an engine spawner's child persona — decides it.
57
+ */
58
+ promptRole?: import("../prompt-assembly/catalog/schema.js").HostRole;
59
+ /**
60
+ * The role's preset role base, by TEXT (it replaces the base `promptRole` selects; the role is `promptRole`, else
61
+ * `general`). Same precedence as `promptRole`: used only when the task names no role base of its own.
55
62
  */
56
63
  systemPrompt?: string;
57
64
  };
@@ -0,0 +1,67 @@
1
+ /**
2
+ * The one typing of the engine's classic stations: each `classic.*` event a station raises, paired with its `e` and its
3
+ * answer form. Every raise site constructs its `e` against it (`dispatchClassic` / `observeClassic`), and the engine's
4
+ * registration form types a handler by it. Its keys are the event table's `classic.*` rows that carry a station — the key
5
+ * set is held to that table.
6
+ */
7
+ import type { PermissionDeniedPayload, PostCompactEvent, PostToolBatchEvent, PostToolBatchResult, PostToolUseEvent, PostToolUseFailureEvent, PostToolUseFailureResult, PostToolUseResult, PreCompactEvent, PreCompactResult, PreToolUseEvent, PreToolUseResult, StopEvent, StopFailureEvent, StopHookResult, UserPromptSubmitEvent, UserPromptSubmitResult } from "../hooks.js";
8
+ import type { MappedOn, ModRegistration } from "./kernel/index.js";
9
+ import type { EngineDollar } from "./dollar.js";
10
+ /** The answer of an event whose station reads none (an observation event): a chain handler passes `next(e)`'s on. */
11
+ export type ObservedAnswer = Readonly<Record<string, never>>;
12
+ /** Each `classic.*` event a station raises, with its `e` and its answer form. */
13
+ export type ClassicEventMap = {
14
+ readonly "classic.PreToolUse": {
15
+ readonly e: PreToolUseEvent;
16
+ readonly answer: PreToolUseResult | null | false;
17
+ };
18
+ readonly "classic.PostToolUse": {
19
+ readonly e: PostToolUseEvent;
20
+ readonly answer: PostToolUseResult;
21
+ };
22
+ readonly "classic.PostToolUseFailure": {
23
+ readonly e: PostToolUseFailureEvent;
24
+ readonly answer: PostToolUseFailureResult;
25
+ };
26
+ readonly "classic.PostToolBatch": {
27
+ readonly e: PostToolBatchEvent;
28
+ readonly answer: PostToolBatchResult;
29
+ };
30
+ readonly "classic.UserPromptSubmit": {
31
+ readonly e: UserPromptSubmitEvent;
32
+ readonly answer: UserPromptSubmitResult;
33
+ };
34
+ readonly "classic.Stop": {
35
+ readonly e: StopEvent;
36
+ readonly answer: StopHookResult;
37
+ };
38
+ readonly "classic.SubagentStop": {
39
+ readonly e: StopEvent;
40
+ readonly answer: StopHookResult;
41
+ };
42
+ readonly "classic.StopFailure": {
43
+ readonly e: StopFailureEvent;
44
+ readonly answer: ObservedAnswer;
45
+ };
46
+ readonly "classic.PreCompact": {
47
+ readonly e: PreCompactEvent;
48
+ readonly answer: PreCompactResult;
49
+ };
50
+ readonly "classic.PostCompact": {
51
+ readonly e: PostCompactEvent;
52
+ readonly answer: ObservedAnswer;
53
+ };
54
+ readonly "classic.PermissionDenied": {
55
+ readonly e: PermissionDeniedPayload;
56
+ readonly answer: ObservedAnswer;
57
+ };
58
+ };
59
+ /** A `classic.*` event a station raises. */
60
+ export type ClassicEventName = keyof ClassicEventMap;
61
+ /**
62
+ * A registration on the engine's bus (`RunnerDeps.mods`, `TaskSpec.mods`): the kernel's registration form whose `on`
63
+ * types a handler of a `classic.*` event by {@link ClassicEventMap} — its `e`, its `next`, its answer.
64
+ */
65
+ export interface EngineModRegistration extends Omit<ModRegistration<EngineDollar>, "register"> {
66
+ register(on: MappedOn<EngineDollar, ClassicEventMap>, options: unknown): void;
67
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -100,10 +100,23 @@ export interface EngineDollar extends ModDollarBase {
100
100
  };
101
101
  readonly tool: {
102
102
  list(): Promise<readonly string[]>;
103
+ /** `$.tool.call({ tool, ...input })`: the run's own pipeline for one call of a mounted tool (`tool-call.ts`). */
104
+ call(args: {
105
+ readonly tool: string;
106
+ } & Readonly<Record<string, unknown>>): Promise<ToolCallAnswer>;
103
107
  };
104
108
  readonly agent: {
105
109
  list(): Promise<readonly string[]>;
106
110
  };
107
111
  }
112
+ /** What `$.tool.call` answers — `tool.call`'s own forms: the frozen view of the call's result, or the refusal (returned, not thrown). */
113
+ export type ToolCallAnswer = {
114
+ readonly result: {
115
+ readonly content: readonly object[];
116
+ readonly isError: boolean;
117
+ };
118
+ } | {
119
+ readonly deny: string;
120
+ };
108
121
  /** The chain bottoms of the wave-one method events over a runner's seat view. */
109
122
  export declare function engineMethodBottoms(view: ModSeatView): ModMethodBottoms;
@@ -0,0 +1,31 @@
1
+ import { type ModBottomContext, type ModBus } from "./kernel/index.js";
2
+ import type { ExtensionRequester } from "../task-event.js";
3
+ /** One extension's call while it runs. */
4
+ export interface ExtensionCall {
5
+ /** The leg bus the call was made on (the one {@link legBusOf} returned). */
6
+ readonly bus: ModBus;
7
+ readonly toolCallId: string;
8
+ /** The `$` call's context: the frames its pipeline's events are raised under, and its origin. */
9
+ readonly caller: ModBottomContext;
10
+ /** Cleared when the call's pipeline settles — the one reading of "this call is still running". */
11
+ readonly live: boolean;
12
+ /** The call's end projection refused it (its latest gate record is a refusal) — written once, by the leg's tool_end station. */
13
+ readonly denied: boolean;
14
+ }
15
+ /** The running extension call this chain carries for `bus`, when it is the call `toolCallId` names (or any, unnamed). */
16
+ export declare function extensionCallOf(bus: object, toolCallId?: string): ExtensionCall | undefined;
17
+ /** Who asked for the call `toolCallId` names, when it is the running extension call: the one projection every carrier of
18
+ * `requestedBy` reads (the occurrence the frames are projected from, the approval card). */
19
+ export declare function requesterOf(bus: object, toolCallId: string): {
20
+ readonly requestedBy?: ExtensionRequester;
21
+ };
22
+ /** The leg's tool_end station says the call it is closing was refused (a no-op for any call that is not the running extension call). */
23
+ export declare function noteExtensionCallDenied(bus: object, toolCallId: string): void;
24
+ /** Run an extension's call: `pipeline` runs with the call's record in scope; the record stops being live when it settles. */
25
+ export declare function runExtensionCall<T>(bus: ModBus, toolCallId: string, caller: ModBottomContext, pipeline: (call: ExtensionCall) => Promise<T>): Promise<T>;
26
+ /**
27
+ * The leg bus every station raises on: a dispatch inside a running extension call made on it is raised under that call's
28
+ * frames and origin (a raiser that names its own frames keeps them — they extend the call's); one raised under a call
29
+ * that has settled is refused, `failed` by the engine and said once on `report`; any other dispatch is the bus's own.
30
+ */
31
+ export declare function legBusOf(bus: ModBus, report: (err: Error) => void): ModBus;
@@ -0,0 +1,43 @@
1
+ import { AsyncLocalStorage } from "node:async_hooks";
2
+ import { ENGINE_ORIGIN } from "./kernel/index.js";
3
+ const store = new AsyncLocalStorage();
4
+ export function extensionCallOf(bus, toolCallId) {
5
+ const c = store.getStore();
6
+ return c !== undefined && c.live && c.bus === bus && (toolCallId === undefined || c.toolCallId === toolCallId) ? c : undefined;
7
+ }
8
+ export function requesterOf(bus, toolCallId) {
9
+ const c = extensionCallOf(bus, toolCallId);
10
+ return c !== undefined ? { requestedBy: Object.freeze({ kind: "extension", name: c.caller.origin.plugin }) } : {};
11
+ }
12
+ export function noteExtensionCallDenied(bus, toolCallId) {
13
+ const c = store.getStore();
14
+ if (c !== undefined && c.live && c.bus === bus && c.toolCallId === toolCallId)
15
+ c.denied = true;
16
+ }
17
+ export async function runExtensionCall(bus, toolCallId, caller, pipeline) {
18
+ const call = { bus, toolCallId, caller, live: true, denied: false };
19
+ try {
20
+ return await store.run(call, () => pipeline(call));
21
+ }
22
+ finally {
23
+ call.live = false;
24
+ }
25
+ }
26
+ export function legBusOf(bus, report) {
27
+ const leg = {
28
+ records: bus.records,
29
+ mounted: () => bus.mounted(),
30
+ hasHandlers: (event, participant) => bus.hasHandlers(event, participant),
31
+ dispatch: (event, e, options) => {
32
+ const c = store.getStore();
33
+ if (c === undefined || c.bus !== leg || options.frames !== undefined)
34
+ return bus.dispatch(event, e, options);
35
+ if (c.live)
36
+ return bus.dispatch(event, e, { ...options, frames: c.caller.frames, origin: c.caller.origin });
37
+ const reason = `${event}: raised under extension "${c.caller.origin.plugin}"'s call ${c.toolCallId}, which has ended — an event is not raised under a call that is over`;
38
+ report(new Error(`engine: ${reason} — the dispatch was not run`));
39
+ return Promise.resolve(Object.freeze({ kind: "failed", registration: ENGINE_ORIGIN.plugin, cause: "violation", reason, skipped: Object.freeze([]) }));
40
+ },
41
+ };
42
+ return leg;
43
+ }
@@ -1,6 +1,6 @@
1
1
  import { type ModBusSide, type ModEventName, type ModSeat } from "./events.js";
2
2
  import { type ModAdmissionRecord, type ModDollarBase, type ModOrigin, type ModSeats } from "./registration.js";
3
- import { type ModAnswerCheck, type ModEventPayload, type ModFailureCause, type ModMatcher, type ModSkip, type ProxyProbe } from "./site-rules.js";
3
+ import { type ModAnswerCheck, type ModAnswerRanks, type ModEventPayload, type ModFailureCause, type ModMatcher, type ModSkip, type ProxyProbe } from "./site-rules.js";
4
4
  /** A frame on the dispatch stack: a registration's own `$` call, or one of its handlers running. */
5
5
  export type ModFrame = {
6
6
  readonly kind: "dollar";
@@ -28,6 +28,13 @@ export interface ModMethodSeat {
28
28
  readonly enter?: (args: ModEventPayload) => ModEventPayload;
29
29
  }
30
30
  export type ModMethodBottoms = Partial<Record<ModEventName, ModMethodSeat>>;
31
+ /**
32
+ * A callable event's host entry: what a `$` call of the event reaches. It runs whatever stands before the event and
33
+ * raises the event once at its own station, under `ctx.frames` and `ctx.origin` (so the caller's own handlers stay out
34
+ * of that raise); its answer is the call's answer (a `{ deny }` is returned, not thrown) and its throw the caller's.
35
+ */
36
+ export type ModCallEntry = (args: ModEventPayload, ctx: ModBottomContext) => unknown;
37
+ export type ModCallEntries = Partial<Record<ModEventName, ModCallEntry>>;
31
38
  export type ModDispatchOutcome = {
32
39
  readonly kind: "answered";
33
40
  readonly answer: unknown;
@@ -39,8 +46,12 @@ export type ModDispatchOutcome = {
39
46
  readonly cause: ModFailureCause;
40
47
  readonly reason: string;
41
48
  readonly skipped: readonly ModSkip[];
42
- } | {
49
+ }
50
+ /** `bottomStarted`: the chain's bottom had started when the dispatch was cancelled — on an effect event, what it did is
51
+ * not known from here. */
52
+ | {
43
53
  readonly kind: "aborted";
54
+ readonly bottomStarted?: true;
44
55
  };
45
56
  /** What a participant filter sees of one mounted handler: its registration, that registration's seat, and whether it only observes. */
46
57
  export interface ModParticipant {
@@ -57,6 +68,9 @@ export interface ModDispatchOptions {
57
68
  readonly origin?: ModOrigin;
58
69
  /** The raiser's reading of an answer; an answer it refuses is a violation of the site. */
59
70
  readonly checkAnswer?: ModAnswerCheck;
71
+ /** The station's ranking of its answers — named by every dispatch of an event whose failure column refuses (one that
72
+ * names none is not run), and read by the seat-trust law. */
73
+ readonly ranks?: ModAnswerRanks;
60
74
  /** Which mounted handlers take part (absent ⇒ every handler on the event). A handler it leaves out neither runs nor observes. */
61
75
  readonly participant?: (p: ModParticipant) => boolean;
62
76
  }
@@ -76,12 +90,15 @@ export interface ModBus {
76
90
  mounted(): readonly ModMountedHandler[];
77
91
  /** Whether any mounted handler hangs on `event` (among those `participant` admits) — no handler, no dispatch (the station skips the call). */
78
92
  hasHandlers(event: ModEventName, participant?: (p: ModParticipant) => boolean): boolean;
79
- dispatch(event: ModEventName, e: ModEventPayload, options: ModDispatchOptions): Promise<ModDispatchOutcome>;
93
+ /** Raise `event` with the raiser's `e` (an object the bus receives whole, an event map's `e` as it is). */
94
+ dispatch(event: ModEventName, e: object, options: ModDispatchOptions): Promise<ModDispatchOutcome>;
80
95
  }
81
96
  export interface ModBusInput<D extends ModDollarBase = ModDollarBase> {
82
97
  readonly side: ModBusSide;
83
98
  readonly seats: ModSeats<D>;
84
99
  readonly bottoms: ModMethodBottoms;
100
+ /** The host's entries of the callable events its bus raises (absent ⇒ none: a `$` call of such an event throws). */
101
+ readonly entries?: ModCallEntries;
85
102
  /** Where handler failures go (the host's error channel). Never throws back into the bus. */
86
103
  readonly report: (err: Error, classification?: "observational-hook-verdict-ignored") => void;
87
104
  /** The host's one rule for turning a THROWN value into text (a handler, a `.catch` or a `register` may throw