@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
@@ -72,9 +72,11 @@
72
72
  * here) and no leading-env-assignment stripping (`FOO=1 git status` simply does not match
73
73
  * `Bash(git status:*)`) — the last two are strict-side divergences from upstream, registered as such.
74
74
  */
75
+ import { type ParsedPermissionRule } from "./permission-rule-syntax.js";
75
76
  import { type DenyFace } from "../tools/fs/read-deny.js";
76
77
  import type { AssertAllKeysHandled, RuleOffersAbsence } from "./ask-origin.js";
77
78
  import { type ToolCallLike } from "./tool-registry.js";
79
+ import { type HostReading } from "./host-target.js";
78
80
  import { type PathDenialEvidence, type PathFamily, type PathIdentity } from "../tools/fs/safety.js";
79
81
  import { type TargetViews } from "./path-rule-binding.js";
80
82
  /**
@@ -160,73 +162,148 @@ export declare function callPathFaceOf(call: ToolCallLike): DenyFace | undefined
160
162
  /** Does some {@link PATH_RULE_FACES} tightening column (deny or ask) hold `face` — may a face-keyed row speak for a call on
161
163
  * it, whatever the call's tool is called (a caller's tool declaring a read path target is on the read face too)? */
162
164
  export declare function faceRowsSpeakFor(face: DenyFace | undefined): boolean;
165
+ /** One row of {@link NAME_RULE_FACES}. */
166
+ export interface NameRuleFace {
167
+ /** The argument a rule's content is read against. */
168
+ readonly param: string;
169
+ /** The arguments whose `<param>:` spelling the row CLAIMS: on a bare row that spelling is refused (the bare one is the rule's),
170
+ * on a keyed row it is the rule. An argument the tool carries that the row does not claim keeps the generic parameter lane. */
171
+ readonly params: readonly string[];
172
+ /** KEYED: the closed set of values the tool itself declares for `param` (the tool's own set, never a copy). */
173
+ readonly words?: readonly string[];
174
+ /** `mounted`: the values a rule names are the MOUNTED tool's own — its `ToolRuleFace.nameValues`, riding the call's face — and a
175
+ * rule's value and the call's are each resolved to one of them by the one resolver ({@link canonicalNameValue}). */
176
+ readonly values?: "mounted";
177
+ }
163
178
  /**
164
179
  * The tools whose rule content NAMES THE VALUE of one parameter instead of a command or a path — ONE grammar (the name grammar,
165
180
  * match `name`), one row per tool, the row declaring the tool's SPELLING of it:
166
- * · BARE — the reference's `Skill(<name>)` / `Skill(<prefix>:*)`: `param` is the argument the rule's content is read against,
167
- * `params` every scalar argument the tool carries (the parameter spelling `Tool(<param>:<pattern>)` those names used to reach
168
- * is retired for such a tool, see {@link parseNameRuleContent}). The Skill tool's real schema keys are pinned equal to
169
- * `params` (test/backlog1318).
181
+ * · BARE — the reference's `Skill(<name>)` / `Skill(<prefix>:*)`: `params` is every scalar argument the tool carries, read off
182
+ * its catalog row (the parameter spelling `Tool(<param>:<pattern>)` those names used to reach is retired for such a tool,
183
+ * see {@link parseNameRuleContent}). The Skill tool's real schema keys are pinned equal to `params` (test/backlog1318).
170
184
  * · KEYED — `words` present: the reference's `Artifact(action:<word>)`, the content carrying the argument's own key. `params`
171
- * is that one key; `words` is the closed set of values the tool itself declares for it (the row points at the tool's own
172
- * set, never a copy), and a rule names exactly one of them — no prefix form, no `*`.
185
+ * is that one key, and a rule names exactly one of the words — no prefix form, no `*`.
186
+ * · MOUNTED — `values: "mounted"`: the reference's `Agent(<subagent_type>)`, bare, naming one value of the set the mounted tool
187
+ * declares (which agent types this leg offers) — no prefix form, no `*`, no leading-slash reading. `params` is the one
188
+ * argument it claims; the tool's other arguments keep the generic parameter lane (`Agent(model:…)`).
173
189
  * Whatever the spelling, a rule of this grammar says "the call's value of `param` is this value", read by the one subject
174
- * reader ({@link nameRuleSubjectOf}), the one predicate ({@link nameRuleAdmits}), the one precedence walk
190
+ * reader ({@link nameRuleSubjectOf}), the one predicate ({@link nameRuleReach}), the one precedence walk
175
191
  * ({@link adjudicatePersistedNameRules}) and the one offer ({@link suggestRuleForName}).
176
192
  */
177
- export declare const NAME_RULE_FACES: Readonly<Record<string, {
178
- readonly param: string;
179
- readonly params: readonly string[];
180
- readonly words?: readonly string[];
181
- }>>;
193
+ export declare const NAME_RULE_FACES: Readonly<Record<string, NameRuleFace>>;
194
+ /**
195
+ * The reference's fold of a delegated agent type (`lhe`, cli296.js:246723):
196
+ * `e.normalize("NFKC").toLowerCase().replace(/[\p{White_Space}\p{Pd}_]+/gu, "")`.
197
+ *
198
+ * Deliberately lossy and deliberately NOT a resolver: it decides whether two spellings denote the same entry of a value set AFTER
199
+ * an exact match has already failed ({@link canonicalNameValue} is the resolver). `\p{Pd}` is the dash punctuation class (an
200
+ * en-dash paste folds like a hyphen), `\p{White_Space}` covers NBSP and friends, and NFKC folds fullwidth/compatibility forms —
201
+ * the three ways a name gets mangled between a listing line and a tool call. It can map DISTINCT entries onto one key
202
+ * ("code-review" / "code_review"), which is why a fold that lands on several is ambiguous, never a pick.
203
+ */
204
+ export declare function normalizeSubagentType(value: string): string;
205
+ /** What a spelling names in a value set ({@link canonicalNameValue}): one entry, several (the fold lands on each), or none. */
206
+ export type NameValueResolution = {
207
+ readonly kind: "entry";
208
+ readonly entry: string;
209
+ } | {
210
+ readonly kind: "ambiguous";
211
+ readonly entries: readonly string[];
212
+ } | {
213
+ readonly kind: "unknown";
214
+ };
215
+ /**
216
+ * THE resolver of a spelling against a value set — the one identity a delegated agent type has, read alike by the tool that runs
217
+ * the call and by every rule judged on it: an EXACT member first (a correct spelling never moves); else the members the
218
+ * reference's fold ({@link normalizeSubagentType}) maps onto the same key — exactly one ⇒ that member, several ⇒ `ambiguous`
219
+ * (listed, never one picked), none (or a spelling that folds to nothing) ⇒ `unknown`.
220
+ */
221
+ export declare function canonicalNameValue(value: string, values: readonly string[]): NameValueResolution;
182
222
  /**
183
- * Why a call of a KEYED value tool that names no value for the key cannot be read against that key's deny / ask rules, or
184
- * undefined (a bare-spelling tool, or no value tool). Every judge reads a call's arguments as the tool reads them
185
- * (`argsAsTheToolReads`: its argument preparation, then the schema's coercions); a call that STILL names no value for the key
186
- * runs a value no argument shows — a default filled in inside the tool's execution (a caller's tool mounted under the keyed
187
- * name, or answering to it, with no argument preparation of its own). Whether a rule by the key reaches such a call is
188
- * unknown, so every reader REFUSES it on the key's deny or ask rule — a refusal, never an ask a person could approve past a
189
- * deny, and no allow by the key reaches it. A tool whose reading always names the key (the built-in `Artifact`: an absent
190
- * action reads as `publish`) never meets this. A bare-spelling tool's call that names nothing is reached by nothing: no
191
- * default stands behind it.
223
+ * Why a call of a name tool whose rules name one value of a CLOSED set (a keyed tool's `words`, a mounted tool's values) cannot
224
+ * be read against the tool's deny / ask rules when it names no value, or undefined (an open-set tool, or no value tool). Every
225
+ * judge reads a call's arguments as the tool reads them (`argsAsTheToolReads`: its argument preparation, then the schema's
226
+ * coercions); a call that STILL names no value runs one no argument shows — a default filled in inside the tool's execution (a
227
+ * caller's tool mounted under the name with no argument preparation of its own; the delegation tool's plain lane while a
228
+ * definition shadows its default type's name). Whether a rule by the value reaches such a call is unknown, so every reader
229
+ * REFUSES it on the tool's deny or ask rule — a refusal, never an ask a person could approve past a deny, and no allow by the
230
+ * value reaches it. A tool whose reading always names its value (the built-in `Artifact`: an absent action reads as
231
+ * `publish`) never meets this. An open-set tool's call that names nothing is reached by nothing: no default stands behind it.
192
232
  */
193
- export declare function keyedValueAbsentReason(tool: string): string | undefined;
233
+ export declare function nameValueAbsentReason(tool: string): string | undefined;
194
234
  /**
195
- * Does the name grammar read this content of this tool? Every content of a bare-spelling tool; on a keyed tool only content
196
- * keyed by its own parameter (`action:…` on `Artifact`) — another key (`Artifact(url:…)`) is a rule on another argument,
197
- * which the persisted grammar has no form for and the caller policy reads with its generic parameter lane. Undefined grammar
198
- * ⇒ false.
235
+ * Does the name grammar read this content of this tool ALONE? On a keyed tool only content keyed by its own parameter
236
+ * (`action:…` on `Artifact`); on a bare tool every content but one keyed by an argument the catalog's tool carries and the row
237
+ * does not claim ({@link NameRuleFace.params}) — that is a rule on that argument (`Agent(model:…)`, `Artifact(url:…)`), which the
238
+ * caller policy reads with its generic parameter lane; a MOUNTED row's such content is read as its value too where it tightens
239
+ * ({@link mountedValueArmOf}). The arguments are the catalog's, whatever face a leg mounts the tool with: one text reads one way
240
+ * on every compile. Undefined grammar ⇒ false.
199
241
  */
200
242
  export declare function nameGrammarReads(tool: string, content: string): boolean;
201
243
  /**
202
- * The tools whose rule content names the HOST of the URL one parameter carries — the reference's `WebFetch(domain:<host>)`
203
- * form, one row per tool: `param` is the URL argument the host is read from ({@link domainRuleSubjectOf}). Read by
204
- * {@link parseDomainRuleContent}; an allow only (see there).
244
+ * The VALUE arm of a mounted row's (`Agent`) `<key>:<rest>` deny / ask that the parameter lane reads as a rule on the argument
245
+ * `key` — or undefined (any other tool, or an allow). One rule for every reader of such a content: a TIGHTENING reaches the call
246
+ * under every reading of its text — the rule on the argument, and the whole text as one of the tool's values (an agent type may
247
+ * carry a colon), either reaching ⇒ it applies (the reference reads the content as an agent type for its deny filter and as a
248
+ * `key:value` for its generic parameter check alike); a GRANT reads exactly one way — the argument rule where `key` is an
249
+ * argument the tool carries — so an allow never widens through a second reading. The value arm is the name grammar's own rule
250
+ * over the whole content, judged like every value rule ({@link nameRuleReach}).
251
+ */
252
+ export declare function mountedValueArmOf(text: string, tool: string, behavior: RuleBehavior): ParsedRule | undefined;
253
+ /**
254
+ * The argument a mounted row's (`Agent`) `<key>:<rest>` content is keyed by when the leg's own tool declares it (`mountedParams`,
255
+ * the leg's face) and the catalog's does not — or undefined. A rule's grammar reads the catalog's arguments only, so such a
256
+ * content would read as one of the tool's values and never reach a call setting that argument: a compile that holds the leg's
257
+ * face knows this and refuses it; one without the face cannot tell, and reads the value.
258
+ */
259
+ export declare function mountedOnlyArgumentOf(tool: string, content: string, mountedParams: readonly string[] | undefined): string | undefined;
260
+ /**
261
+ * The ARGUMENT arm of a mounted row's value rule — the other half of {@link mountedValueArmOf}'s law, read where the rule is a
262
+ * stored row (a list entry, a session bucket's entry, the person's persisted row): a deny or an ask whose value is
263
+ * `<argument>:<pattern>`, `argument` one the catalog's tool carries and the row does not claim, is ALSO the rule on that
264
+ * argument, judged by the one argument predicate (`paramRuleReaches`) — so a stored `Agent(model:opus)` deny refuses a call
265
+ * running `model: opus` as the rule policy does. Undefined for an allow (a grant reads one way), another tool, or another value.
205
266
  */
206
- export declare const DOMAIN_RULE_FACES: Readonly<Record<string, {
267
+ export declare function mountedArgumentArmOf(rule: Pick<PersistedRule, "tool" | "behavior" | "match" | "command">): {
207
268
  readonly param: string;
208
- }>>;
269
+ readonly pattern: string;
270
+ } | undefined;
271
+ /** The marker a DOMAIN-grammar rule's content starts with: `<Tool>(domain:<host>)` (the reference's spelling). */
272
+ export declare const DOMAIN_RULE_MARKER = "domain:";
209
273
  /**
210
- * Which tools a rule may name — the model's tool set is DERIVED, never a hand-kept list: the command rule word
211
- * ({@link COMMAND_RULE_TOOL}) takes the COMMAND grammar — the other shell-face tools take none of their own, their command is
212
- * judged by the `Bash(…)` rules ({@link laneToolNamesOf}); every tool the catalog declares a path target for (Read / Edit / Write /
213
- * Glob / NotebookEdit / …, `pathTargetOf`) takes the PATH grammar; the tools of {@link NAME_RULE_FACES} take the NAME grammar
214
- * (each in its row's spelling: bare `Skill(<name>)`, keyed `Artifact(action:<word>)`); the tools of {@link DOMAIN_RULE_FACES} the
215
- * DOMAIN grammar.
216
- * A rule on any other tool has no content this model can judge and is refused (`unsupported.tool`). The tool set therefore
217
- * moves with the catalog's declarations, exactly as the protective fences' covered set does.
274
+ * THE grammar a rule on a tool takes — the one reading every rule reader shares (the persisted model's {@link parseRuleText}, the
275
+ * rule policy's compiler through {@link ruleLaneOf}, the entry lists, the approval card), and a property of the rule's tool NAME
276
+ * as the catalog declares it, never of the tool a leg mounts under that name. The model's tool set is DERIVED, never a hand-kept
277
+ * list: the command rule word ({@link COMMAND_RULE_TOOL}) takes the COMMAND grammar — the other shell-face tools take none of
278
+ * their own, their command is judged by the `Bash(…)` rules ({@link laneToolNamesOf}); the tools of {@link NAME_RULE_FACES} the
279
+ * NAME grammar (each in its row's spelling: bare `Skill(<name>)`, keyed `Artifact(action:<word>)`); every name the catalog
280
+ * declares a host target for (`hostTargetOf`: WebFetch) the DOMAIN grammar; every name it declares a path target for
281
+ * (`pathTargetOf`: Read / Edit / Write / Glob / NotebookEdit / …) the PATH grammar. A rule on any other tool has no content
282
+ * this model can judge and is refused (`unsupported.tool`). The tool set therefore moves with the catalog's declarations,
283
+ * exactly as the protective fences' covered set does.
218
284
  */
219
285
  export type RuleGrammar = "command" | "path" | "name" | "domain";
220
286
  export declare function ruleToolGrammarOf(toolName: string): RuleGrammar | undefined;
287
+ /** The parameter a shell-face tool's rule content names as one of the tool's own scalar arguments (`Monitor(description:*)`,
288
+ * `Bash(timeout:5)`), or undefined — the content is then a command spelling. */
289
+ export declare function shellRuleParamOf(tool: string, content: string): string | undefined;
290
+ /** A lane of the rule policy's compiler: one of the content grammars, or the generic `param:pattern` lane. */
291
+ export type RuleLane = RuleGrammar | "param";
221
292
  /**
222
- * The HOST a domain-grammar tool's call fetches — the string every DOMAIN rule is read against — or undefined: not a domain
223
- * tool; no URL argument, or one that is not a string; a URL that does not parse, is not http(s), or carries credentials (the
224
- * fetch tool refuses those itself). The host is the URL parser's (lower case, IDN in its ASCII form, an IPv4 shorthand
225
- * expanded — the host the fetch connects to), its trailing dots read off.
293
+ * THE dispatch of a `<tool>(<content>)` rule in the rule policy's compiler — which lane reads it. A shell-face tool's content
294
+ * is a COMMAND spelling unless it names one of that tool's own scalar arguments (the command word's `<param>:*` keeps the
295
+ * command-prefix reading); otherwise the tool's grammar ({@link ruleToolGrammarOf}, the rule model's own reading) reads the
296
+ * content it claims — a name tool every content (a keyed one only content keyed by its own parameter, {@link nameGrammarReads}),
297
+ * a path tool a content with no `:` past its first character, a host tool a content that starts with {@link DOMAIN_RULE_MARKER}
298
+ * — and every other content is a rule on a parameter. The lane is a function of the rule's name and content alone: it is decided
299
+ * before any lane's own check runs, a content a grammar claims is never judged as a parameter rule, and the same rule text takes
300
+ * the same lane whether the policy is compiled with no leg resolver or with a leg's roster (whose faces say only which
301
+ * parameters a tool carries).
226
302
  */
227
- export declare function domainRuleSubjectOf(toolName: string, args: unknown): string | undefined;
303
+ export declare function ruleLaneOf(tool: string, content: string): RuleLane;
228
304
  /** The value a name-grammar tool's call carries in its name argument — the string every NAME rule is read against, the one a
229
- * `Skill` call is resolved by — or undefined (not a name-grammar tool; no such argument; not a string). */
305
+ * `Skill` call is resolved by — or undefined (not a name-grammar tool; no such argument; not a string; the empty string, which
306
+ * names no value: an empty and an omitted argument are one call to every reader, as they are to the tool that runs it). */
230
307
  export declare function nameRuleSubjectOf(toolName: string, args: unknown): string | undefined;
231
308
  /** The rule WORDS a call is judged under, once each: for every name the call answers to (the model's spelling, the wire
232
309
  * name, the other aliases that resolve to it), the word its rules are written in — a shell-face name's is the command
@@ -238,7 +315,7 @@ export declare function laneToolNamesOf(req: Pick<import("./tool-policy.js").Too
238
315
  /** The match words a persisted rule is stored with, spelled once: {@link PersistedRuleMatch} is derived from this
239
316
  * tuple (each form is documented there). A store backend that checks a stored row's `match` reads this value
240
317
  * rather than keeping its own list. */
241
- export declare const PERSISTED_RULE_MATCHES: readonly ["exact", "prefix", "wildcard", "subpath", "path", "name", "name_prefix", "host", "subdomain"];
318
+ export declare const PERSISTED_RULE_MATCHES: readonly ["exact", "prefix", "wildcard", "pattern", "subpath", "path", "name", "name_prefix", "host", "subdomain"];
242
319
  /**
243
320
  * Match forms, one family per grammar (`prefix` and `wildcard` are one predicate):
244
321
  * · `exact` — admits the one string the rule spells.
@@ -252,6 +329,12 @@ export declare const PERSISTED_RULE_MATCHES: readonly ["exact", "prefix", "wildc
252
329
  * (`Bash(cd /tmp && adb pull:*)`): the trailing-star form deliberately has no compound reading
253
330
  * (see {@link parseRuleText}), because upstream's own trailing-star pattern is inert on a
254
331
  * compound and importing/minting one as a chain licence would grant what nobody approved.
332
+ * · `pattern` — the PATTERN spelling (`Bash(git * main)`): any other unescaped `*` in the content, the reference's
333
+ * wildcard. `command` is the folded pattern as written (stars and `\*` escapes kept); `*` is any text, newlines
334
+ * included, `\*` a literal star, a `/` then `**` then `/` also matches one `/`. It reaches ONE simple command, matched whole:
335
+ * an allow against the command's spelling, a deny / ask against each program run's words
336
+ * ({@link programRunReachOf}); never a chain — its body is one command, and a compound is covered segment
337
+ * by segment. No allow leaves the program open (a `*` in the first word) or opens an interpreter's arguments.
255
338
  * · `subpath` — the directory form (design/382 §2.2): `Tool(//abs-dir/**)`, reaching every path under
256
339
  * one absolute directory. Never admits any command; its one predicate is {@link directoryRuleAdmits}.
257
340
  * As an ALLOW it exists on the two face tools ({@link PATH_RULE_FACES}); as a deny/ask on every
@@ -270,7 +353,7 @@ export type PersistedRuleMatch = (typeof PERSISTED_RULE_MATCHES)[number];
270
353
  * Where a rule applies — design/382 §4.1, the THREE consent dimensions.
271
354
  *
272
355
  * · `global` — the personal-global dimension: this OWNER's rules, everywhere (the bucket is already
273
- * per-owner, {@link import("./permission-rule-store.js").RuleOwner}). The member keeps its historical
356
+ * per-owner, {@link import("./rule-owner.js").RuleOwner}). The member keeps its historical
274
357
  * spelling on purpose: renaming it `personal-global` would be a no-benefit migration of every stored
275
358
  * row; the "personal" half lives in documentation and card wording, not in the wire byte.
276
359
  * · `project` — applies ONLY inside `root`. `root` is expected to be already canonicalized (realpath)
@@ -377,6 +460,9 @@ export type RuleRejectCode = "invalid.grammar" | "invalid.empty_command" | "inva
377
460
  export interface RuleReject {
378
461
  code: RuleRejectCode;
379
462
  message: string;
463
+ /** For a text that is no rule spelling only because of white space (a tab, a no-break space included) around it or before its `(`:
464
+ * the rule spelling it is a blank away from ({@link respelledRuleTextOf}) — named in `message`, never read in its place. */
465
+ respelling?: string;
380
466
  }
381
467
  /** The parsed, canonical shape of one rule text under one behavior — everything but the scope and the
382
468
  * provenance. The behavior is the parser's INPUT (it decides which validator floor applies), carried
@@ -527,6 +613,19 @@ export declare const SHELL_RESERVED_WORDS: ReadonlySet<string>;
527
613
  * misled.
528
614
  */
529
615
  export declare const SUGGESTION_LEXICON: readonly string[];
616
+ /**
617
+ * THE spelling of a content rule on a call's tool under one behavior — its rule word and grammar with a placeholder for the
618
+ * content, never a rule minted for the call — or undefined: the tool takes no content rule (the catalog gives it no grammar,
619
+ * whatever face a leg mounts it with), and the whole-tool entry is the only rule it has. The command grammar's `Bash(<command>)`
620
+ * for a tool on the shell face (`Monitor` too: a command rule is written on the command word); a name tool's own spelling
621
+ * ({@link nameRuleFormOf}); a host tool's `<Tool>(domain:<host>)`; a path tool's — a TIGHTENING on the tool's own word
622
+ * (`Write(<path>)` reaches the tool it is written on), a GRANT on the face tool whose allow column holds the call's face
623
+ * (`Read(<path>)` for a read, `Edit(<path>)` for a write: a path allow exists on the two face tools of {@link PATH_RULE_FACES}
624
+ * only). Read off the dispatch every reader shares ({@link ruleToolGrammarOf}, {@link callPathFaceOf}) and spelled by
625
+ * {@link formatRuleText}; every sentence that offers a rule's shape (a compile refusal's way out, the dontAsk refusal's remedy)
626
+ * reads it.
627
+ */
628
+ export declare function ruleShapeOf(call: ToolCallLike, behavior: RuleBehavior): string | undefined;
530
629
  /**
531
630
  * Render a peer- or file-controlled value for a DISCLOSURE line (a warning, a refusal message, an
532
631
  * operator log). Takes `unknown` on purpose: most of these values are typed but arrive off a wire or a
@@ -600,6 +699,13 @@ export declare function renderUntrustedCommandText(text: unknown, maxLen?: numbe
600
699
  * Not part of the package's public surface — an internal screen for lane entry points.
601
700
  */
602
701
  export declare function hasUnrenderableCharacters(text: string): boolean;
702
+ /**
703
+ * A rule spelling's content as a content rule, or undefined when the spelling names its WHOLE tool: no content (`Bash`,
704
+ * `Bash()`, `Bash(*)` — the syntax's reading), or a command content that folds to the lone `*` (`Bash( * )`): the command
705
+ * grammar folds its spacing, so that spelling is `Bash(*)` and never a pattern. The one reading every lane asks — the
706
+ * store, the entry lists, the rule policy — so a spelling of the whole tool is answered as the whole tool wherever it is written.
707
+ */
708
+ export declare function ruleContentOf(parsed: ParsedPermissionRule): string | undefined;
603
709
  /**
604
710
  * Parse one rule text into its canonical shape, or refuse it with a reason.
605
711
  *
@@ -615,6 +721,13 @@ export declare function hasUnrenderableCharacters(text: string): boolean;
615
721
  * most wants. The tightening behaviors therefore admit the interpreter-headed prefix form and change
616
722
  * nothing else; the allow floor is unchanged.
617
723
  */
724
+ /**
725
+ * The rule spelling a text the rule syntax cannot read is a blank away from: the text with the white space (tabs included) around
726
+ * it and before its first `(` taken off, when that reads as a rule under `behavior` — its canonical text — else `undefined`. A text
727
+ * holding an invisible format character never gets here (its one caller refuses it first: `invalid.control_chars`, or `invalid.too_long`). Only what a refusal SAYS: a rule text is read as written ({@link parseRuleText}), so the way out is named, never
728
+ * taken (a door that reads the respelled text would be a second reading of the same text).
729
+ */
730
+ export declare function respelledRuleTextOf(text: string, behavior: RuleBehavior): string | undefined;
618
731
  export declare function parseRuleText(text: string, behavior: RuleBehavior): {
619
732
  rule: ParsedRule;
620
733
  } | {
@@ -624,11 +737,26 @@ export declare function parseRuleText(text: string, behavior: RuleBehavior): {
624
737
  * `subpath` the command is the lexical-normal absolute directory (one leading slash), re-spelled in the
625
738
  * double-slash directory form; for `path` it is the pattern as spelled. */
626
739
  export declare function formatRuleText(command: string, match: PersistedRuleMatch, tool: PersistedRuleTool): string;
627
- /** Does a name rule reach this name? `name`: equal; `name_prefix`: begins with it (no boundary — the reference's `startsWith`).
628
- * A rule of any other family reaches no name. */
740
+ /** Does a name rule reach this name, spelling against spelling? `name`: equal; `name_prefix`: begins with it (no boundary — the
741
+ * reference's `startsWith`). A rule of any other family reaches no name. The comparison {@link nameRuleReach} makes for a row
742
+ * whose values are not resolved against a set. */
629
743
  export declare function nameRuleAdmits(rule: Pick<PersistedRule, "match" | "command">, name: string): boolean;
630
- /** Does a domain rule reach this host (as {@link domainRuleSubjectOf} reads it)? `host`: equal; `subdomain`: a name ending in
631
- * `.<domain>` with at least one label before it and no empty label. A rule of any other family reaches no host. */
744
+ /** How a name rule meets a call ({@link nameRuleReach}). `unread`: the call's face carries no value set for a row that needs one. */
745
+ export type NameRuleReach = "reached" | "not_reached" | "unread";
746
+ /**
747
+ * THE predicate of a name rule over one call's value — every reader of a name rule (the rule policy, the lists, the person's
748
+ * stored rows) asks it. An open or keyed row compares spellings ({@link nameRuleAdmits}). A MOUNTED row (`Agent`) resolves the
749
+ * rule's value and the call's through the one resolver ({@link canonicalNameValue}) against the set the call's face carries
750
+ * (`values`, the mounted tool's `nameValues`): both one entry ⇒ reached iff the same one; a rule value the fold lands on several
751
+ * entries with ⇒ a deny or an ask reaches every one of them and an allow none (an operand is never resolved to one of several);
752
+ * a side that resolves to none ⇒ the two spellings compared exactly (an unknown rule value never reaches a resolved call); no
753
+ * set ⇒ `unread` — which type the call runs cannot be read, so a deny refuses, an ask asks a person, and an allow grants nothing.
754
+ */
755
+ export declare function nameRuleReach(rule: Pick<PersistedRule, "tool" | "behavior" | "match" | "command">, name: string, values: readonly string[] | undefined): NameRuleReach;
756
+ /** Why a call is unread against a mounted row's rule ({@link nameRuleReach} `unread`) — the sentence every reader carries. */
757
+ export declare function nameValuesUnreadReason(tool: string): string;
758
+ /** Does a domain rule reach this host (as `hostOfUrl` reads it)? The pattern's own reach ({@link hostPatternAdmits}); a rule of
759
+ * any other family reaches no host. */
632
760
  export declare function domainRuleAdmits(rule: Pick<PersistedRule, "match" | "command">, host: string): boolean;
633
761
  /**
634
762
  * The closed set of BASES a path-form pattern resolves against — facts of the CALL (its execution
@@ -696,7 +824,7 @@ export declare function pathRuleReachOf(rule: Pick<PersistedRule, "match" | "com
696
824
  * reaches lies at or below the head, so a spelling of the head that the environment resolves elsewhere (a link, a
697
825
  * firmlink, `/var` → `/private/var`) is a second spelling of everything the rule reaches — the deny tables judge the
698
826
  * rule at both ({@link import("../tools/fs/read-deny.js").withRuleRowsWhereTheyLead}; the reference's "physical twin"
699
- * of a rule prefix, cli280.js 9766583). The head may be the bare anchor (`/`, a drive or share root — `Read(/**)` at a
827
+ * of a rule prefix). The head may be the bare anchor (`/`, a drive or share root — `Read(/**)` at a
700
828
  * drive root): an environment can resolve a drive or share root elsewhere. `undefined`: the pattern needs a base the
701
829
  * call does not supply (the rule then reads `unreadable`, a reach, everywhere), or a directory rule names the bare
702
830
  * anchor (it admits nothing).
@@ -787,6 +915,15 @@ export declare function programRunReachOf(rule: Pick<PersistedRule, "match" | "c
787
915
  /** The boolean face of {@link programRunReachOf}: `reached` only. The shadow view and the pins that
788
916
  * assert a reach read this; a lane that must fail closed on `unreadable` reads the outcome. */
789
917
  export declare function ruleReachesProgramRun(rule: Pick<PersistedRule, "match" | "command">, command: string): boolean;
918
+ /**
919
+ * Could the run this pattern names be one of `programs` (each its word or words, then anything)? The program is read as the
920
+ * read station reads it — past the launchers and wrappers in front of it (`nice`, `timeout 5`, `command`, `doas`, `env`,
921
+ * …: {@link readProgramPosition}) and by basename (`/usr/bin/python` runs `python`) — and the words from it on are read as
922
+ * the run receives them (quotes off), in lower case as the auto-mode strip reads every rule
923
+ * ({@link import("./allow-entry.js").autoStripped}). A program word the pattern leaves open (a star in it), or a run whose
924
+ * program cannot be read, could be any of them.
925
+ */
926
+ export declare function commandPatternMayRun(body: string, programs: readonly string[]): boolean;
790
927
  /** The breadth-warning codes, spelled once: {@link EditedRuleBreadthWarning}'s `code` is derived from this tuple,
791
928
  * and a consent record's `edited.warnings` stores exactly these words (its readback refuses any other). */
792
929
  export declare const EDITED_RULE_BREADTH_WARNING_CODES: readonly ["broad_prefix", "compound_prefix"];
@@ -820,7 +957,8 @@ export interface EditedRuleBreadthWarning {
820
957
  * and a SUBPATH rule is not this classifier's subject (no command reach at all). The two
821
958
  * reach-bearing forms take the same two questions: `prefix` (colon-star) and `wildcard`
822
959
  * (trailing space-star, #510 — match-equivalent reach on a single-command body; its grammar has no
823
- * chain reading, so only the single-token question can fire for it).
960
+ * chain reading, so only the single-token question can fire for it), and `pattern` (the pattern form: one command, its
961
+ * first word star-free in an allow, so neither question fires for an allow pattern today).
824
962
  * MAINTENANCE DUTY, stated where it binds: every match form with PREFIX REACH belongs here — a
825
963
  * new reach-bearing member added to {@link PersistedRuleMatch} owes this classifier its arm, judged
826
964
  * by the same "single token / chain body" questions (an exact-only form never warns).
@@ -1083,36 +1221,69 @@ export declare function adjudicatePersistedPathRules(rules: readonly PersistedRu
1083
1221
  readonly tighten?: TargetViews;
1084
1222
  readonly allow?: TargetViews;
1085
1223
  }, anchorsOf: (rule: PersistedRule) => PathRuleBases, leads: ReadonlyMap<string, string | undefined>): PersistedRuleVerdict | undefined;
1224
+ /** The call a persisted name rule is judged on — the request itself: its arguments (the one string it names is read off them,
1225
+ * `nameRuleSubjectOf`; a mounted row's argument arm reads them too) and its face (a mounted tool's values, the tool's reading). */
1226
+ export interface PersistedNameCall {
1227
+ readonly args: unknown;
1228
+ readonly face?: {
1229
+ readonly nameValues?: readonly string[];
1230
+ } | undefined;
1231
+ }
1086
1232
  /**
1087
1233
  * The name-family sibling of {@link adjudicatePersistedRules}: the same precedence walk over the rules of one name tool
1088
- * ({@link NAME_RULE_FACES}), judged on the one string the call names (`nameRuleSubjectOf`). A rule of the tool speaks for the call
1089
- * when it is live, of this behavior, in scope ({@link eligiblePersisted}, the one predicate) and {@link nameRuleAdmits} the name; the
1090
- * first behavior in {@link RULE_BEHAVIORS_BY_PRECEDENCE} whose rules speak decides, the first table-order rule of it is the answer.
1091
- * Every behavior is judged with the one predicate — a name has no "program run" the tightening direction could read wider.
1092
- * A call that names nothing (read as the tool reads it): on a bare-spelling tool it is reached by no rule; on a KEYED tool it
1093
- * cannot be read against the key's rules ({@link keyedValueAbsentReason}) and is REFUSED — a deny verdict standing on the
1094
- * first eligible deny row of the key, else its first ask row (an ask a person could approve would let a deny be approved
1234
+ * ({@link NAME_RULE_FACES}), judged on the call itself (`request`): the one string it names (`nameRuleSubjectOf`) and, for a
1235
+ * mounted row, the value set its face carries. A rule of the tool speaks for the call when it is live, of this behavior, in scope
1236
+ * ({@link eligiblePersisted}, the one predicate) and reaches the call — a tightening of a mounted row by its argument arm
1237
+ * ({@link mountedArgumentArmOf}, judged by `paramRuleReaches`) or by its value ({@link nameRuleReach}); the first behavior in
1238
+ * {@link RULE_BEHAVIORS_BY_PRECEDENCE} whose rules speak decides, the first table-order rule of it is the answer. A call a
1239
+ * mounted row cannot be read against (`unread`: no value set on the face) is REFUSED by the first such deny row and asked in the
1240
+ * fail-closed form (`unreadable`) by the first such ask row; no allow row reaches it.
1241
+ * A call that names nothing (read as the tool reads it): on an open-set tool it is reached by no rule; on a closed-set tool it
1242
+ * cannot be read against the tool's rules ({@link nameValueAbsentReason}) and is REFUSED — a deny verdict standing on the
1243
+ * first eligible deny row of the tool, else its first ask row (an ask a person could approve would let a deny be approved
1095
1244
  * past) — and no allow row reaches it.
1096
1245
  */
1097
1246
  export declare function adjudicatePersistedNameRules(rules: readonly PersistedRule[], call: {
1098
1247
  tool: string;
1099
- name: string | undefined;
1248
+ request: PersistedNameCall;
1100
1249
  cwd: string | undefined;
1101
1250
  sessionId?: string;
1102
1251
  scopeIdentity?: ScopeRootIdentity;
1103
1252
  }): PersistedRuleVerdict | undefined;
1104
1253
  /**
1105
- * The domain-family sibling of {@link adjudicatePersistedNameRules}: the rules of one domain tool ({@link DOMAIN_RULE_FACES})
1106
- * judged on the host the call fetches ({@link domainRuleSubjectOf}) by {@link domainRuleAdmits}; the first table-order rule
1107
- * that is eligible and admits the host is the answer. The grammar has an allow form only, so only an allow can speak.
1254
+ * The host the domain rules of one call are judged on, per direction (`callHostTargetOf`): `tighten` for a deny and an ask
1255
+ * (the protective reading), `grant` for an allow (the declared reading). Absent ⇒ the call has no URL slot in that direction.
1256
+ */
1257
+ export interface CallHosts {
1258
+ readonly tighten: HostReading | undefined;
1259
+ readonly grant: HostReading | undefined;
1260
+ }
1261
+ /**
1262
+ * The domain-family sibling of {@link adjudicatePersistedNameRules}: the same precedence walk (deny > ask > allow) over the rules of
1263
+ * one host tool, each behavior judged on its direction's host ({@link CallHosts}) by {@link domainRuleAdmits}; the first behavior
1264
+ * whose eligible rules speak decides, the first table-order rule of it is the answer. A call whose host cannot be read (a URL
1265
+ * that does not parse, is not http(s), carries credentials, or names a host that does not read back as itself) is REFUSED by the
1266
+ * tool's first eligible deny row, whatever host that row names, and otherwise ASKED by its first eligible ask row in the
1267
+ * fail-closed form (`unreadable`, never a matched ask); no allow row reaches it, and with no deny or ask row it is reached by
1268
+ * nothing. A stored row whose text the rule reader reads as no rule reaches this walk from the person's rule lane only as a deny
1269
+ * or an ask (its fields still tighten); the lane answers a call none of the rows refuses as one it cannot judge.
1108
1270
  */
1109
1271
  export declare function adjudicatePersistedDomainRules(rules: readonly PersistedRule[], call: {
1110
1272
  tool: string;
1111
- host: string | undefined;
1273
+ hosts: CallHosts;
1112
1274
  cwd: string | undefined;
1113
1275
  sessionId?: string;
1114
1276
  scopeIdentity?: ScopeRootIdentity;
1115
1277
  }): PersistedRuleVerdict | undefined;
1278
+ /**
1279
+ * The ONE offer a host tool's approval card carries: the exact rule for the host the call reaches (`WebFetch(domain:<host>)`, the
1280
+ * reference's "don't ask again for <host>" row), or undefined when no rule spells exactly that host (the round-trip law: the
1281
+ * canonical text, parsed back as an allow, must be the exact host rule over the very host). Never a `*.` rule: it would widen past
1282
+ * the host shown.
1283
+ */
1284
+ export declare function suggestRuleForHost(tool: string, host: string): Extract<RuleOffer, {
1285
+ kind: "single";
1286
+ }> | undefined;
1116
1287
  /**
1117
1288
  * The ONE offer a name tool's approval card carries: the exact rule for the name the call carries (`Skill(<name>)`, the reference's
1118
1289
  * "don't ask again for <skill>" row), or undefined when no rule spells exactly that name (the round-trip law: the canonical text,
@@ -1297,6 +1468,15 @@ export type RuleOffer = {
1297
1468
  */
1298
1469
  readonly uncoveredDetail?: readonly UncoveredSegmentDetail[];
1299
1470
  };
1471
+ /** The offer discriminants as a value: the `kind` words of {@link RuleOffer} and of the consent record's own option form
1472
+ * (`RuleOffer2`, which stores the same choice by candidate index), each union fenced to the tuple in both directions
1473
+ * ({@link RuleOfferKindsCoverEveryArm} / {@link RuleOfferArmsCoverEveryKind} here, their twins beside `RuleOffer2`).
1474
+ * The engine's offer reader and record check read it; a backend's offer or record shape reads it too. */
1475
+ export declare const RULE_OFFER_KINDS: readonly ["single", "batch"];
1476
+ /** Compile fence: an arm whose `kind` is not in {@link RULE_OFFER_KINDS} turns the argument into that word. */
1477
+ export type RuleOfferKindsCoverEveryArm = AssertAllKeysHandled<Exclude<RuleOffer["kind"], (typeof RULE_OFFER_KINDS)[number]>>;
1478
+ /** Compile fence, the other direction: a word in {@link RULE_OFFER_KINDS} that no arm carries. */
1479
+ export type RuleOfferArmsCoverEveryKind = AssertAllKeysHandled<Exclude<(typeof RULE_OFFER_KINDS)[number], RuleOffer["kind"]>>;
1300
1480
  /** The uncovered-segment reason words, spelled once: {@link UncoveredSegmentDetail}'s `reason` is derived from this
1301
1481
  * tuple, {@link UNCOVERED_SEGMENT_REASON_BASELINE} is keyed by it, and a consent record's reason rows are read
1302
1482
  * against it. */