@sema-agent/server 7.134.0 → 7.135.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 (458) hide show
  1. package/MIGRATION.md +134 -0
  2. package/USAGE.md +98 -30
  3. package/dist/adoption/plan.d.ts +1 -1
  4. package/dist/approval-ask-audit-store.d.ts +24 -24
  5. package/dist/approval-ask-machine.d.ts +2 -2
  6. package/dist/approval-card.d.ts +62 -150
  7. package/dist/approval-card.js +33 -51
  8. package/dist/approval-content-kind.d.ts +22 -5
  9. package/dist/approval-content-kind.js +8 -1
  10. package/dist/approval-deny-reasons.d.ts +1 -1
  11. package/dist/approval-gate-currency.d.ts +22 -3
  12. package/dist/approval-gate-currency.js +44 -18
  13. package/dist/approval-hmac.d.ts +7 -7
  14. package/dist/approval-policy-settlement.d.ts +2 -2
  15. package/dist/approval-reconciler.d.ts +3 -3
  16. package/dist/approval.d.ts +8 -8
  17. package/dist/approval.js +4 -2
  18. package/dist/auth-bridge.d.ts +1 -1
  19. package/dist/auto-mode-face.d.ts +4 -4
  20. package/dist/background-session-reap.d.ts +2 -2
  21. package/dist/bake-runner/main.d.ts +2 -2
  22. package/dist/bake-runner/runner.d.ts +4 -4
  23. package/dist/bench/s1/live-deps.d.ts +1 -1
  24. package/dist/bench/s1/run-firm.d.ts +1 -1
  25. package/dist/boot/coordinators.d.ts +2 -2
  26. package/dist/boot/coordinators.js +2 -2
  27. package/dist/boot/deferred-sandbox-path-env.d.ts +0 -6
  28. package/dist/boot/deferred-sandbox-path-env.js +0 -5
  29. package/dist/boot/engine-lease.d.ts +5 -5
  30. package/dist/boot/execution-env.d.ts +16 -15
  31. package/dist/boot/execution-env.js +19 -21
  32. package/dist/boot/fatal-exit.d.ts +2 -2
  33. package/dist/boot/late-binds.d.ts +1 -1
  34. package/dist/boot/leader.d.ts +1 -1
  35. package/dist/boot/memory-boundary.d.ts +2 -2
  36. package/dist/boot/memory-consolidation.d.ts +15 -15
  37. package/dist/boot/parked-revive-gate.d.ts +3 -3
  38. package/dist/boot/parked-revive-gate.js +3 -2
  39. package/dist/boot/reapers.d.ts +4 -4
  40. package/dist/boot/resolve-spec.d.ts +1 -1
  41. package/dist/boot/resolve-spec.js +28 -24
  42. package/dist/boot/runner-deps.d.ts +11 -11
  43. package/dist/boot/runner-deps.js +3 -2
  44. package/dist/boot/session-faces.d.ts +3 -3
  45. package/dist/boot/session-faces.js +11 -30
  46. package/dist/boot/shutdown.d.ts +5 -5
  47. package/dist/boot/side-query-lane.d.ts +2 -2
  48. package/dist/boot/stage-05-execution-env.js +4 -4
  49. package/dist/boot/stage-06-runners.js +0 -2
  50. package/dist/boot/stores.js +2 -1
  51. package/dist/boot/web-admin.d.ts +17 -17
  52. package/dist/boot/web-admin.js +5 -10
  53. package/dist/boot/workflow-orchestration.js +2 -9
  54. package/dist/brain.d.ts +11 -11
  55. package/dist/budget.d.ts +4 -4
  56. package/dist/capabilities/approvals-push.d.ts +4 -4
  57. package/dist/capabilities/builtin-tools.d.ts +5 -5
  58. package/dist/capabilities/center-plugins.d.ts +5 -5
  59. package/dist/capabilities/center-plugins.js +1 -1
  60. package/dist/capabilities/center-prompts.d.ts +1 -1
  61. package/dist/capabilities/center-wiring.d.ts +1 -1
  62. package/dist/capabilities/composite-members.d.ts +1 -1
  63. package/dist/capabilities/execution-lane.d.ts +5 -5
  64. package/dist/capabilities/execution-lane.js +2 -2
  65. package/dist/capabilities/hands-lane.d.ts +5 -5
  66. package/dist/capabilities/mcp-probe.d.ts +10 -7
  67. package/dist/capabilities/sandbox-file-send.d.ts +1 -18
  68. package/dist/capabilities/sandbox-file-send.js +0 -7
  69. package/dist/capabilities/scenarios.d.ts +28 -10
  70. package/dist/capabilities/scenarios.js +15 -5
  71. package/dist/capabilities/send-user-file-tool.d.ts +1 -1
  72. package/dist/capabilities/skills.d.ts +31 -12
  73. package/dist/capabilities/skills.js +23 -17
  74. package/dist/capabilities/tool-defer.d.ts +1 -1
  75. package/dist/capability-facts.d.ts +26 -25
  76. package/dist/capability-facts.js +14 -16
  77. package/dist/center-config-tier.d.ts +1 -1
  78. package/dist/center-credential.d.ts +4 -4
  79. package/dist/checkpoint-identity.d.ts +5 -0
  80. package/dist/checkpoint-identity.js +14 -0
  81. package/dist/config-catalog.d.ts +12 -12
  82. package/dist/config-invariants.d.ts +4 -4
  83. package/dist/config-invariants.js +3 -2
  84. package/dist/config-lkg.d.ts +1 -1
  85. package/dist/config-provider.d.ts +13 -13
  86. package/dist/config-provider.js +2 -1
  87. package/dist/config-types.d.ts +83 -83
  88. package/dist/config.d.ts +26 -24
  89. package/dist/config.js +12 -10
  90. package/dist/cross-session-settings.d.ts +1 -1
  91. package/dist/delegated-session-owner.d.ts +16 -13
  92. package/dist/delegated-session-owner.js +9 -10
  93. package/dist/deployment-governance.d.ts +16 -16
  94. package/dist/deployment-shape.d.ts +127 -0
  95. package/dist/deployment-shape.js +72 -0
  96. package/dist/device-store.d.ts +1 -1
  97. package/dist/device-ws-hub.d.ts +1 -1
  98. package/dist/egress-redirect.d.ts +1 -1
  99. package/dist/entry-mode-clamp-notice.d.ts +2 -2
  100. package/dist/env-facts.d.ts +10 -9
  101. package/dist/env-facts.js +1 -1
  102. package/dist/env-name-allowlist-knobs.d.ts +5 -5
  103. package/dist/exec-bounds.d.ts +2 -2
  104. package/dist/execution-lane-caps.d.ts +31 -43
  105. package/dist/execution-lane-caps.js +0 -13
  106. package/dist/file-history-capture.d.ts +9 -9
  107. package/dist/file-history-disclosure.d.ts +23 -11
  108. package/dist/file-history-disclosure.js +7 -12
  109. package/dist/fleet/drain-entry.d.ts +2 -2
  110. package/dist/fleet/fleet-bus.d.ts +22 -14
  111. package/dist/fleet/fleet-bus.js +5 -5
  112. package/dist/fleet/fleet-reconciler.d.ts +9 -9
  113. package/dist/fleet/subagent-tail-bus.d.ts +4 -4
  114. package/dist/fleet-client.d.ts +13 -13
  115. package/dist/fleet-lease.d.ts +16 -16
  116. package/dist/governance-http-status.d.ts +2 -2
  117. package/dist/hooks/hook-llm.d.ts +7 -7
  118. package/dist/hooks/hook-runner.d.ts +57 -30
  119. package/dist/hooks/hook-runner.js +36 -18
  120. package/dist/host-decision.d.ts +5 -5
  121. package/dist/host-lsp-manager.d.ts +5 -5
  122. package/dist/hosted-posture.d.ts +23 -13
  123. package/dist/hosted-posture.js +4 -9
  124. package/dist/http/admission.d.ts +2 -2
  125. package/dist/http/admission.js +20 -5
  126. package/dist/http/approval-sweeps.d.ts +1 -1
  127. package/dist/http/approval-sweeps.js +2 -1
  128. package/dist/http/checkpoint-ctx.d.ts +39 -13
  129. package/dist/http/checkpoint-ctx.js +74 -35
  130. package/dist/http/dispatch.d.ts +3 -3
  131. package/dist/http/durable-run-leg.js +4 -3
  132. package/dist/http/idempotency.d.ts +2 -2
  133. package/dist/http/mcp-dial-deadline.d.ts +7 -5
  134. package/dist/http/memory-compliance-failure-reply.d.ts +4 -4
  135. package/dist/http/owner-access.d.ts +4 -6
  136. package/dist/http/owner-access.js +1 -1
  137. package/dist/http/principal-gate.d.ts +7 -7
  138. package/dist/http/principal-gate.js +3 -2
  139. package/dist/http/readiness.d.ts +1 -1
  140. package/dist/http/request-guards.d.ts +4 -4
  141. package/dist/http/request-guards.js +2 -1
  142. package/dist/http/resume-ctx-read.d.ts +7 -7
  143. package/dist/http/resume-ctx-read.js +1 -1
  144. package/dist/http/resume-legs.d.ts +3 -3
  145. package/dist/http/resume-legs.js +11 -8
  146. package/dist/http/route-ctx.d.ts +29 -29
  147. package/dist/http/route-table.d.ts +9 -9
  148. package/dist/http/routes/agents-roster.d.ts +1 -1
  149. package/dist/http/routes/approvals-assistant.d.ts +5 -5
  150. package/dist/http/routes/approvals-assistant.js +55 -15
  151. package/dist/http/routes/background.d.ts +3 -3
  152. package/dist/http/routes/background.js +2 -2
  153. package/dist/http/routes/capabilities.d.ts +1 -1
  154. package/dist/http/routes/capabilities.js +16 -8
  155. package/dist/http/routes/config-catalog.d.ts +1 -1
  156. package/dist/http/routes/devices.d.ts +1 -1
  157. package/dist/http/routes/diagnostics.d.ts +3 -3
  158. package/dist/http/routes/fleet.d.ts +1 -1
  159. package/dist/http/routes/fleet.js +2 -1
  160. package/dist/http/routes/mcp-reconnect.d.ts +4 -4
  161. package/dist/http/routes/mcp-reconnect.js +3 -3
  162. package/dist/http/routes/memory-consolidation.d.ts +1 -1
  163. package/dist/http/routes/notify-wake.d.ts +1 -1
  164. package/dist/http/routes/notify-wake.js +2 -2
  165. package/dist/http/routes/rules.d.ts +1 -1
  166. package/dist/http/routes/runs.js +22 -10
  167. package/dist/http/routes/session-sync.d.ts +1 -1
  168. package/dist/http/routes/session-sync.js +73 -44
  169. package/dist/http/routes/sessions-list.js +1 -1
  170. package/dist/http/routes/sessions.js +30 -44
  171. package/dist/http/routes/tasks.d.ts +1 -1
  172. package/dist/http/routes/trace-usage.d.ts +1 -1
  173. package/dist/http/routes/workflows.d.ts +3 -0
  174. package/dist/http/routes/workflows.js +31 -28
  175. package/dist/http/send.d.ts +5 -5
  176. package/dist/http/server.d.ts +34 -34
  177. package/dist/http/session-inherit-env.d.ts +3 -3
  178. package/dist/http/sse-lifecycle.d.ts +1 -1
  179. package/dist/http/sse-log.d.ts +2 -2
  180. package/dist/http/submit-ctx.js +1 -1
  181. package/dist/http/sync-submit-body.d.ts +1 -1
  182. package/dist/http/verify-rounds.d.ts +1 -1
  183. package/dist/http/wire-types.d.ts +28 -21
  184. package/dist/instruction-source-notice.d.ts +2 -2
  185. package/dist/key-resolver.d.ts +3 -3
  186. package/dist/lane-home-probe.d.ts +1 -1
  187. package/dist/leader/diffout.d.ts +1 -1
  188. package/dist/leader/diffup.d.ts +2 -2
  189. package/dist/leader/endpoint.d.ts +1 -1
  190. package/dist/leader/fanout.d.ts +1 -1
  191. package/dist/leader/leader.d.ts +4 -4
  192. package/dist/leader/merge.d.ts +3 -3
  193. package/dist/leader/repair-wire.d.ts +1 -1
  194. package/dist/leader/wire.d.ts +6 -6
  195. package/dist/list-entry-display.d.ts +1 -1
  196. package/dist/lsp-evict.d.ts +1 -1
  197. package/dist/mcp-assertion-header.d.ts +1 -1
  198. package/dist/memory-layer-legacy-lock.d.ts +1 -1
  199. package/dist/memory-operator-faces.d.ts +1 -1
  200. package/dist/memory-posture.js +4 -2
  201. package/dist/memory-project-layer.d.ts +1 -1
  202. package/dist/memory-scope.d.ts +19 -19
  203. package/dist/memory-store-refusal.d.ts +4 -4
  204. package/dist/model-entry-headers.d.ts +2 -2
  205. package/dist/model-entry-refusal.d.ts +17 -17
  206. package/dist/model-provider.d.ts +10 -10
  207. package/dist/model-reach-scope.d.ts +1 -1
  208. package/dist/model-route-endpoint.d.ts +6 -6
  209. package/dist/model-route-url.d.ts +5 -5
  210. package/dist/model-select.d.ts +15 -6
  211. package/dist/model-select.js +5 -0
  212. package/dist/model-unreachable-notice.d.ts +3 -3
  213. package/dist/namespaced-rule-name.d.ts +15 -5
  214. package/dist/namespaced-rule-name.js +3 -2
  215. package/dist/observability/corrupt-read-seat.d.ts +9 -9
  216. package/dist/observability/cost-taxonomy.d.ts +1 -1
  217. package/dist/observability/err-text.d.ts +1 -1
  218. package/dist/observability/fail-open.d.ts +12 -8
  219. package/dist/observability/fail-open.js +12 -8
  220. package/dist/observability/metrics.d.ts +3 -3
  221. package/dist/observability/run-terminal.d.ts +36 -36
  222. package/dist/observability/secret-env-scrub.d.ts +3 -3
  223. package/dist/observability/tool-trace.d.ts +1 -1
  224. package/dist/operator-ask.d.ts +4 -4
  225. package/dist/orchestration/workflow-agent-session-index.d.ts +3 -3
  226. package/dist/orchestration/workflow-completion-inbox.d.ts +20 -5
  227. package/dist/orchestration/workflow-completion-inbox.js +29 -7
  228. package/dist/orchestration/workflow-notify-journal.d.ts +43 -19
  229. package/dist/orchestration/workflow-notify-journal.js +17 -0
  230. package/dist/outbound-dispatcher.d.ts +4 -4
  231. package/dist/parent-watch.d.ts +4 -4
  232. package/dist/parked-decide.d.ts +16 -15
  233. package/dist/parked-decide.js +5 -4
  234. package/dist/parked-revive-surface.d.ts +7 -7
  235. package/dist/parked-revive-surface.js +2 -3
  236. package/dist/peer-directory.d.ts +3 -3
  237. package/dist/peer-directory.js +1 -1
  238. package/dist/permission-rule-list.d.ts +10 -1
  239. package/dist/permission-rule-list.js +7 -5
  240. package/dist/permission-rule-vocab.d.ts +2 -2
  241. package/dist/plugins/adoption-log-sql.d.ts +1 -1
  242. package/dist/plugins/approval-ask-store-file.d.ts +8 -1
  243. package/dist/plugins/approval-ask-store-file.js +6 -3
  244. package/dist/plugins/approval-ask-store-memory.d.ts +11 -7
  245. package/dist/plugins/approval-ask-store-memory.js +11 -7
  246. package/dist/plugins/approval-ask-store-sql.d.ts +34 -15
  247. package/dist/plugins/approval-ask-store-sql.js +18 -5
  248. package/dist/plugins/approval-exemption-store.d.ts +3 -3
  249. package/dist/plugins/approval-nonce-store.d.ts +3 -3
  250. package/dist/plugins/background-agent-store-sql.d.ts +1 -1
  251. package/dist/plugins/background-shell-support.d.ts +2 -2
  252. package/dist/plugins/blob-backend.d.ts +1 -1
  253. package/dist/plugins/caching-session-store.d.ts +23 -32
  254. package/dist/plugins/caching-session-store.js +5 -17
  255. package/dist/plugins/checkpoint-index-columns.d.ts +81 -0
  256. package/dist/plugins/checkpoint-index-columns.js +62 -0
  257. package/dist/plugins/checkpoint-store-sql.d.ts +44 -66
  258. package/dist/plugins/checkpoint-store-sql.js +55 -102
  259. package/dist/plugins/device-store-sql.d.ts +7 -6
  260. package/dist/plugins/e2b-orphan-reclaim.d.ts +1 -1
  261. package/dist/plugins/ensure-schema-lock-policy.d.ts +1 -1
  262. package/dist/plugins/file-history-store-sql.d.ts +9 -7
  263. package/dist/plugins/file-history-store-sql.js +27 -15
  264. package/dist/plugins/file-run-store.d.ts +8 -8
  265. package/dist/plugins/fork-routing-session-store.d.ts +2 -2
  266. package/dist/plugins/fork-routing-session-store.js +1 -1
  267. package/dist/plugins/host-platform.d.ts +10 -10
  268. package/dist/plugins/image-bake-store-sql.d.ts +1 -1
  269. package/dist/plugins/image-index-sql.d.ts +1 -1
  270. package/dist/plugins/leader-run-store-sql.d.ts +1 -1
  271. package/dist/plugins/local-checkpoint-store.d.ts +10 -10
  272. package/dist/plugins/local-checkpoint-store.js +3 -4
  273. package/dist/plugins/local-session-store.d.ts +34 -38
  274. package/dist/plugins/local-session-store.js +20 -39
  275. package/dist/plugins/local-session-window.d.ts +1 -1
  276. package/dist/plugins/mailbox-store-sql.d.ts +2 -2
  277. package/dist/plugins/memory-engine-pg.d.ts +1 -1
  278. package/dist/plugins/memory-run-store.d.ts +4 -4
  279. package/dist/plugins/memory-sync-store-pg.d.ts +3 -3
  280. package/dist/plugins/one-time-migrations.d.ts +66 -40
  281. package/dist/plugins/one-time-migrations.js +115 -34
  282. package/dist/plugins/outcome-ledger-sql.d.ts +1 -1
  283. package/dist/plugins/park-commit-watch.d.ts +3 -3
  284. package/dist/plugins/permission-rule-store-file.d.ts +5 -5
  285. package/dist/plugins/permission-rule-store-file.js +12 -19
  286. package/dist/plugins/permission-rule-store-sql.d.ts +38 -4
  287. package/dist/plugins/permission-rule-store-sql.js +67 -24
  288. package/dist/plugins/pg-cost-quota.d.ts +1 -1
  289. package/dist/plugins/pg-pool.d.ts +2 -2
  290. package/dist/plugins/pg-pool.js +5 -2
  291. package/dist/plugins/pg-rate-limiter.d.ts +1 -1
  292. package/dist/plugins/pg-session-storage.d.ts +8 -20
  293. package/dist/plugins/pg-session-storage.js +14 -27
  294. package/dist/plugins/remote-env-adb.d.ts +10 -10
  295. package/dist/plugins/remote-env-device.d.ts +10 -9
  296. package/dist/plugins/remote-env-device.js +6 -2
  297. package/dist/plugins/remote-env-e2b.d.ts +3 -3
  298. package/dist/plugins/remote-env-host.d.ts +16 -16
  299. package/dist/plugins/remote-env-k8s.d.ts +8 -8
  300. package/dist/plugins/remote-env-local-docker.d.ts +2 -2
  301. package/dist/plugins/remote-env-ssh.d.ts +4 -4
  302. package/dist/plugins/remote-scratchpad.d.ts +2 -3
  303. package/dist/plugins/remote-scratchpad.js +0 -4
  304. package/dist/plugins/remote-shell.d.ts +6 -6
  305. package/dist/plugins/retention-lane-store-sql.d.ts +4 -4
  306. package/dist/plugins/retention-store-sql.d.ts +4 -4
  307. package/dist/plugins/roster-store-sql.d.ts +1 -1
  308. package/dist/plugins/run-store-sql.d.ts +8 -8
  309. package/dist/plugins/schema-consistency.d.ts +2 -2
  310. package/dist/plugins/schema-ensure-legs.d.ts +3 -3
  311. package/dist/plugins/schema-indexes.d.ts +1 -1
  312. package/dist/plugins/schema-live-columns.d.ts +1 -1
  313. package/dist/plugins/session-event-payload.d.ts +4 -4
  314. package/dist/plugins/session-fork.d.ts +34 -0
  315. package/dist/plugins/session-fork.js +29 -0
  316. package/dist/plugins/session-ownership.js +1 -1
  317. package/dist/plugins/session-placement.d.ts +1 -1
  318. package/dist/plugins/session-policy-store-sql.d.ts +12 -12
  319. package/dist/plugins/session-store.d.ts +2 -2
  320. package/dist/plugins/session-store.js +2 -2
  321. package/dist/plugins/shared-memory-store-sql.d.ts +2 -2
  322. package/dist/plugins/sql-driver.d.ts +8 -8
  323. package/dist/plugins/sql-errors.d.ts +1 -1
  324. package/dist/plugins/sql-json-column.d.ts +21 -21
  325. package/dist/plugins/sql-row-helpers.d.ts +2 -2
  326. package/dist/plugins/store-backend.d.ts +17 -16
  327. package/dist/plugins/store-backend.js +3 -3
  328. package/dist/plugins/store-contracts.d.ts +21 -21
  329. package/dist/plugins/task-attachment-store.d.ts +2 -2
  330. package/dist/plugins/task-list-store-sql.d.ts +1 -1
  331. package/dist/plugins/tidb-pool.d.ts +2 -2
  332. package/dist/plugins/tidb-pool.js +9 -2
  333. package/dist/plugins/tidb-session-store.d.ts +16 -26
  334. package/dist/plugins/tidb-session-store.js +15 -27
  335. package/dist/plugins/tool-result-store-sql.d.ts +1 -1
  336. package/dist/plugins/usage-window-store-sql.d.ts +3 -3
  337. package/dist/plugins/user-input-ledger-file.d.ts +1 -1
  338. package/dist/plugins/user-input-ledger-sql.d.ts +3 -3
  339. package/dist/plugins/web-search.d.ts +19 -5
  340. package/dist/plugins/web-search.js +19 -4
  341. package/dist/{orchestration/workflow-journal-entry.d.ts → plugins/workflow-journal-payload.d.ts} +23 -32
  342. package/dist/plugins/workflow-journal-payload.js +32 -0
  343. package/dist/plugins/workflow-journal-store-sql.d.ts +28 -14
  344. package/dist/plugins/workflow-journal-store-sql.js +34 -15
  345. package/dist/plugins/workflow-run-store-sql.d.ts +4 -4
  346. package/dist/posture-source.d.ts +11 -11
  347. package/dist/principal-jwt.d.ts +6 -6
  348. package/dist/project-identity.d.ts +3 -3
  349. package/dist/project-memory.d.ts +4 -4
  350. package/dist/read-face-posture.d.ts +7 -7
  351. package/dist/request-key-closure.d.ts +1 -1
  352. package/dist/request-key-closure.js +1 -1
  353. package/dist/request-value-closure.d.ts +15 -8
  354. package/dist/request-value-closure.js +2 -0
  355. package/dist/router/route-orchestration.d.ts +11 -16
  356. package/dist/router/route-orchestration.js +2 -12
  357. package/dist/rule-entry-list.d.ts +8 -7
  358. package/dist/rule-entry-list.js +2 -9
  359. package/dist/rules-consent.d.ts +6 -6
  360. package/dist/rules-consent.js +2 -0
  361. package/dist/run-cancel-context.d.ts +5 -5
  362. package/dist/run-local.d.ts +10 -10
  363. package/dist/runs.d.ts +13 -11
  364. package/dist/runs.js +15 -1
  365. package/dist/runtime-caps-resolver.d.ts +6 -6
  366. package/dist/runtime-governance.d.ts +9 -9
  367. package/dist/sandbox-pkg-source.d.ts +9 -31
  368. package/dist/sandbox-pkg-source.js +14 -8
  369. package/dist/sealed-key.d.ts +3 -3
  370. package/dist/security.d.ts +23 -26
  371. package/dist/security.js +12 -9
  372. package/dist/server-secret-env.d.ts +10 -10
  373. package/dist/session-children-retire.d.ts +1 -1
  374. package/dist/session-error-wire.d.ts +7 -7
  375. package/dist/session-incarnation.d.ts +52 -35
  376. package/dist/session-incarnation.js +23 -8
  377. package/dist/session-policy-wire.d.ts +27 -5
  378. package/dist/session-policy-wire.js +15 -1
  379. package/dist/session-records-skipped-notice.d.ts +1 -1
  380. package/dist/session-sync-kernel.d.ts +4 -4
  381. package/dist/session-sync.d.ts +49 -6
  382. package/dist/session-sync.js +52 -10
  383. package/dist/session-titler.d.ts +7 -6
  384. package/dist/session-titler.js +8 -13
  385. package/dist/session-watch.d.ts +3 -3
  386. package/dist/session-watch.js +4 -4
  387. package/dist/sighup-idle.d.ts +2 -2
  388. package/dist/spec-fields.d.ts +4 -4
  389. package/dist/sql-engine-posture.d.ts +3 -3
  390. package/dist/store-posture.d.ts +2 -2
  391. package/dist/stored-request-tool-axes-m19.d.ts +1 -1
  392. package/dist/task-a2a.d.ts +3 -1
  393. package/dist/task-a2a.js +34 -2
  394. package/dist/task-cwd.d.ts +7 -88
  395. package/dist/task-cwd.js +2 -15
  396. package/dist/task-mcp.d.ts +12 -8
  397. package/dist/task-mcp.js +19 -4
  398. package/dist/task-settings.d.ts +30 -18
  399. package/dist/task-settings.js +33 -3
  400. package/dist/task-workflow.d.ts +0 -24
  401. package/dist/task-workflow.js +2 -1
  402. package/dist/terminal.d.ts +5 -5
  403. package/dist/tighten-only-seats.d.ts +7 -6
  404. package/dist/tighten-only-seats.js +1 -1
  405. package/dist/tool-approval.d.ts +143 -197
  406. package/dist/tool-approval.js +13 -28
  407. package/dist/tool-rule-names.d.ts +2 -2
  408. package/dist/trace/core-keyset-guard.d.ts +12 -7
  409. package/dist/trace/engine-notice-wire.d.ts +5 -5
  410. package/dist/trace/engine-notice-wire.js +1 -0
  411. package/dist/trace/exit-seat.d.ts +31 -4
  412. package/dist/trace/exit-seat.js +41 -63
  413. package/dist/trace/ledger-events.d.ts +3 -3
  414. package/dist/trace/ledger-sink.d.ts +1 -1
  415. package/dist/trace/model-segment.d.ts +3 -3
  416. package/dist/trace/project.d.ts +47 -45
  417. package/dist/trace/project.js +33 -1
  418. package/dist/trace/redact.d.ts +44 -30
  419. package/dist/trace/redact.js +191 -89
  420. package/dist/trace/self-minted-wire.d.ts +35 -14
  421. package/dist/trace/self-minted-wire.js +8 -0
  422. package/dist/trace/sema-provenance.d.ts +1 -1
  423. package/dist/trace/task-notification-facets.d.ts +4 -4
  424. package/dist/trace/wire-projection-faces.d.ts +3 -3
  425. package/dist/trace/wire-projection-faces.js +1 -1
  426. package/dist/unattended-permission-mode.d.ts +5 -5
  427. package/dist/url-credential.d.ts +52 -0
  428. package/dist/url-credential.js +49 -0
  429. package/dist/url-refusal.d.ts +6 -2
  430. package/dist/url-refusal.js +8 -1
  431. package/dist/usage-analytics.d.ts +2 -2
  432. package/dist/user-input-ledger.d.ts +23 -23
  433. package/dist/web-admin-client/apply-effective.d.ts +5 -5
  434. package/dist/web-admin-client/apply-effective.js +2 -1
  435. package/dist/web-admin-client/apply-ledger.d.ts +2 -2
  436. package/dist/web-admin-client/center-request.d.ts +2 -2
  437. package/dist/web-admin-client/facade.d.ts +5 -5
  438. package/dist/web-admin-client/facade.js +1 -1
  439. package/dist/web-admin-client/hot-keys-registry.d.ts +2 -2
  440. package/dist/web-admin-client/http-client.d.ts +4 -4
  441. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  442. package/dist/web-admin-client/pull-state.d.ts +1 -1
  443. package/dist/web-admin-client/read-face.d.ts +2 -2
  444. package/dist/web-admin-client/read-warnings.d.ts +5 -5
  445. package/dist/web-admin-client/restart-signal.d.ts +6 -6
  446. package/dist/web-admin-client/skills-mcp.d.ts +28 -3
  447. package/dist/web-admin-client/skills-mcp.js +29 -1
  448. package/dist/web-admin-client/types.d.ts +16 -9
  449. package/dist/workspace-space.d.ts +5 -3
  450. package/dist/write-protection.d.ts +2 -2
  451. package/package.json +4 -3
  452. package/scripts/drain-check-local.mjs +2 -1
  453. package/scripts/drain-check.mysql.sql +4 -2
  454. package/scripts/drain-check.pg.sql +4 -2
  455. package/skills/loop.md +1 -1
  456. package/dist/http/run-declared-families.d.ts +0 -16
  457. package/dist/http/run-declared-families.js +0 -12
  458. package/dist/orchestration/workflow-journal-entry.js +0 -27
package/dist/config.d.ts CHANGED
@@ -75,7 +75,7 @@ export declare function parseNumOrFailNonNegative(name: string, raw: string | un
75
75
  *
76
76
  * `invalid-default` 是**缺省种类**(不写 `kind` 即是它)—— 历史形 `{env,raw}` 的存量生产者(`optFinitePositiveEnv`)
77
77
  * 因此逐字不动,它的断言也不破。(布尔族 `boolEnv` 自 [ref]-rc2 起未知词在 `parseBoolWord` 里拒启,不再往这里 push;
78
- * S-588 起旧负名走墓碑表 —— 两者都不是本种类的生产者。)
78
+ * [ref] 起旧负名走墓碑表 —— 两者都不是本种类的生产者。)
79
79
  */
80
80
  type ConfigWarningKind = "invalid-default" | "clamped" | "empty-preserved" | "entry-rejected" | "set-rejected" | "ineffective";
81
81
  interface ConfigWarning {
@@ -94,7 +94,7 @@ export declare function drainConfigWarnings(): ConfigWarning[];
94
94
  * carries its own event name + fields (the warnings drain has one fixed "invalid, using default" message
95
95
  * which would misdescribe an inference). main.ts drains + logs right after createLogger.
96
96
  *
97
- * S-176 —— 每条带一个**级别**(闭集两词,排空处穷举 switch)。此前这一格固定按 warn 排空,于是「每次 boot 都成立的
97
+ * [ref] —— 每条带一个**级别**(闭集两词,排空处穷举 switch)。此前这一格固定按 warn 排空,于是「每次 boot 都成立的
98
98
  * 常态事实」(posture 派生的档位)在这里没有位置:进 warn 会让一台一个字节都没配错的单机每次启动报警,另开一个
99
99
  * 收集器又是第五条日志族。级别写在**铸点**(不是按事件名在排空处猜):
100
100
  * · `warn` —— 运维要看一眼的决定(推断出的 provider、被丢掉的缺省行、no-op 旋钮……):既有的每一条;
@@ -115,10 +115,10 @@ export declare function logConfigDiagnostics(logger: {
115
115
  info?: (event: string, fields?: Record<string, unknown>) => void;
116
116
  debug?: (event: string, fields?: Record<string, unknown>) => void;
117
117
  }): void;
118
- /** B-089:`Model.cost` 的四项(per-1M USD)。类型从 core 的 `Model` 取,不在本仓重列一份。 */
118
+ /** [ref]:`Model.cost` 的四项(per-1M USD)。类型从 core 的 `Model` 取,不在本仓重列一份。 */
119
119
  type ModelCost = NonNullable<Model["cost"]>;
120
120
  /**
121
- * 🔴 B-089 —— `Model.cost` 这**一个键**的唯一铸点(可展开片段):有价目表 ⇒ 键在;没配 ⇒ **键不出**。
121
+ * 🔴 [ref] —— `Model.cost` 这**一个键**的唯一铸点(可展开片段):有价目表 ⇒ 键在;没配 ⇒ **键不出**。
122
122
  * 三个铸点(env 主槽 / env cheap 槽 / web-admin 车道)共用它,所以「缺席怎么表达」在本仓只有一处答案。
123
123
  *
124
124
  * `Model.cost` 自 core 7.16.0([ref])起在**类型面**上也是可选的(`dist/engine/llm/types.d.ts` 的
@@ -130,7 +130,7 @@ type ModelCost = NonNullable<Model["cost"]>;
130
130
  */
131
131
  export declare function buildModelCostKey(cost: ModelCost | undefined): Pick<Model, "cost">;
132
132
  /**
133
- * 🔴 B-089 —— 「配了 $ 成本天花板,但目录里一只带价模型都没有」的判据 + 文案(纯函数,零副作用)。
133
+ * 🔴 [ref] —— 「配了 $ 成本天花板,但目录里一只带价模型都没有」的判据 + 文案(纯函数,零副作用)。
134
134
  *
135
135
  * 两道天花板(`MAX_TASK_COST_USD` / `MAX_PRINCIPAL_COST_USD`)量的是 `costUsd`,而一只**未定价**的模型
136
136
  * 算不出成本([ref] 之后它连 `costMicroUsd` 这个键都不发)—— 于是这两根旋钮在这台机器上**永不可能
@@ -144,17 +144,17 @@ export declare function buildModelCostKey(cost: ModelCost | undefined): Pick<Mod
144
144
  * **采纳之后**(`main.ts` 的 `createWebAdminRuntime` 之后 / `run-local.ts` 的 `applyEffective` 之后)。
145
145
  *
146
146
  * 判据 = **目录里没有任何一只带价模型**,问法与 `budget.buildPricing` 的填表判据是**同一只函数**
147
- * (S-231:core 7.16.0 导出的 `isModelPriced`;第二参传 `undefined` = 这一问发生在注入表建起来之前,
147
+ * ([ref]:core 7.16.0 导出的 `isModelPriced`;第二参传 `undefined` = 这一问发生在注入表建起来之前,
148
148
  * 谓词落在「模型自报价了吗」那一半)。本模块刻意不 import `budget.ts`(那边挂着 metrics/fleet 一串
149
149
  * 运行期依赖,config 是纯解析层)—— 单源因此不是「谁 import 谁」,而是两边都问引擎那一只。
150
150
  */
151
- /** 「$ 天花板 × 价目表」的三位事实 —— 告警判据与清警原因的**同一只**读数(S-232 合并复审:清警要说得出为什么清)。 */
151
+ /** 「$ 天花板 × 价目表」的三位事实 —— 告警判据与清警原因的**同一只**读数([ref] 合并复审:清警要说得出为什么清)。 */
152
152
  export interface CostCeilingPricingPosture {
153
153
  /** 配了的天花板旋钮名(空 = 一根都没配)。 */
154
154
  ceilings: string[];
155
155
  /** 生效目录里的模型 id(空 = 目录还空着)。 */
156
156
  modelIds: string[];
157
- /** 目录里至少一只模型自报了价(`isModelPriced(m, undefined)`,S-231 单源)。 */
157
+ /** 目录里至少一只模型自报了价(`isModelPriced(m, undefined)`,[ref] 单源)。 */
158
158
  anyPriced: boolean;
159
159
  }
160
160
  export declare function costCeilingPricingPosture(models: Record<string, Model>, limits: {
@@ -184,7 +184,7 @@ export declare function buildUnpricedCeilingNotice(models: Record<string, Model>
184
184
  * `boolEnv(x, true)` — for the two literals and for unset. Anything else goes through `parseBoolWord` ([ref]-rc2,
185
185
  * [ref]): `1`/`0`/`yes`/`no`/`on`/`off` in any case are read as the operator meant them (`LSP_ENABLED=1` reads as
186
186
  * "on" to a human, and now to the parser too), and an unknown word REFUSES TO BOOT — it no longer lands on the
187
- * default with a warning (that was this helper's first form, retired with [ref]-rc2; S-588 corrected this note).
187
+ * default with a warning (that was this helper's first form, retired with [ref]-rc2; [ref] corrected this note).
188
188
  *
189
189
  * Note the deliberate non-migrations: the posture family (`postureOn`) keeps its tri-state — its unset case is
190
190
  * neither `true` nor `false` but "single-user ∧ infra-ready" — and the sentinel-valued knobs (`MEMORY_ENGINE`,
@@ -195,7 +195,7 @@ export declare function buildUnpricedCeilingNotice(models: Record<string, Model>
195
195
  * 用",而实际设了就拒启——诊断面撒的谎比没有诊断更贵(它会让人先去试那个必然拒启的开关)。 */
196
196
  type ConfigKnobSource = "env" | "posture" | "default";
197
197
  export interface ConfigKnobRecord {
198
- /** The env name. 3.0.0 起只有这一个名字 —— 负名别名已是墓碑(`RETIRED_ENVS` 的 replaced 行,S-588 起在场即拒)。 */
198
+ /** The env name. 3.0.0 起只有这一个名字 —— 负名别名已是墓碑(`RETIRED_ENVS` 的 replaced 行,[ref] 起在场即拒)。 */
199
199
  name: string;
200
200
  /** `opt-in` = default OFF, `opt-out` = default ON, `posture` = default derived from REQUIRE_PRINCIPAL ∧ infra. */
201
201
  polarity: "opt-in" | "opt-out" | "posture";
@@ -205,7 +205,7 @@ export interface ConfigKnobRecord {
205
205
  /** The registered boolean knobs, sorted by name — the data behind `logConfigDiagnostics`'s polarity table. */
206
206
  export declare function configKnobTable(): ConfigKnobRecord[];
207
207
  /** [ref] B4 ②:D 族四枚(`PROJECT_MEMORY` / `CONFIG_LKG` / `HOST_BG` / `HOST_EXEC_SPOOL`)的正名 —— 缺省开,读点只读正名。
208
- * 3.0.0 之前它们叫 `X_DISABLED`(读点上的双重否定);那四个旧负名是墓碑,在 `RETIRED_ENVS` 里(S-588 起在场即拒启,不论正名在不在)。
208
+ * 3.0.0 之前它们叫 `X_DISABLED`(读点上的双重否定);那四个旧负名是墓碑,在 `RETIRED_ENVS` 里([ref] 起在场即拒启,不论正名在不在)。
209
209
  *
210
210
  * 其中 `CONFIG_LKG_ENABLED`(远程配置的 LKG 盘缓存)已升成配置席 `configLkgEnabled`,由 `loadConfig` 一次铸出;这里只剩另外两个懒读孪生。 */
211
211
  /** The `host` exec lane's background-shell capability kill switch (read per capability probe in remote-env-host.ts). */
@@ -255,14 +255,14 @@ export declare function isRosterGateArmed(webAdmin: ServiceConfig["webAdmin"]):
255
255
  * 名单比的是**整串工具名**,带括号那串不是任何活工具的名字 ⇒ 永不匹配。指引=按命令名走
256
256
  * `runtime.commandPolicy`,整条 shell 进门走 `MANUAL_MODE_SHELL_GATE=always`。判别式见
257
257
  * {@link findCcRuleFormNames}(它同时是 `allow` 腿的**唯一**判据,见下方例外说明)。
258
- * - 退役名(`bash`/`Task`/`KillShell`…)与 pre-prefix 短名(`figma__x`):S-1047(core 7.41.0 #1156)起判据是 core 导出的
258
+ * - 退役名(`bash`/`Task`/`KillShell`…)与 pre-prefix 短名(`figma__x`):[ref](core 7.41.0 [ref])起判据是 core 导出的
259
259
  * **那一只** `judgeRuleToolName`(准备阶段、两只会话规则店、本仓会话规则写口同调),本函数零手写臂;指引 = core 表给的现役指引 /
260
260
  * 补全协议前缀。
261
- * - 够不着挂载工具的协议名:**对端段铸不出**(`mcp__github.com`、`mcp__github.com__*`、`mcp__*`、超长 / 归一后带连串下划线的服务器段、对端段为空的
262
- * `mcp__` / `mcp____x`)—— 前缀对,但引擎铸注册名时归一对端段,而规则对对端段逐字比,永不匹配。判官是引擎的 `judgeRuleToolName`(core 7.43.0 #1355 (b)
261
+ * - 够不着挂载工具的协议名:**对端段铸不出**(`mcp__github.com`、`mcp__github.com__*`、对端段里的部分通配 `mcp__git*`、超长 / 归一后带连串下划线的服务器段、对端段为空的
262
+ * `mcp__` / `mcp____x`)—— 前缀对,但引擎铸注册名时归一对端段,而规则对对端段逐字比,永不匹配。判官是引擎的 `judgeRuleToolName`(core 7.43.0 [ref] (b)
263
263
  * 的判词 `unmintable_segment`,句子带它的 guidance 与 1:1 现名);本仓 7.116.0–7.117.x 那只自比 `mintNamespacePrefix` 的对照随之退役。
264
- * **工具段为空**(`mcp__srv__`)core 7.48.0 #1400 起也是这一判词(7.116.0–7.122.x 由本仓自答,随之退役)。
265
- * ⚠️ 两段覆盖形 `mcp__<server>`(服务器段是自铸形)够得着(S-1047 收掉的分叉,见下)。
264
+ * **工具段为空**(`mcp__srv__`)core 7.48.0 [ref] 起也是这一判词(7.116.0–7.122.x 由本仓自答,随之退役)。
265
+ * ⚠️ 两段覆盖形 `mcp__<server>`(服务器段是自铸形)够得着([ref] 收掉的分叉,见下)。
266
266
  * - **core 的文法编不出来的串**:判词取自 core 自己的 `validatePermissionRules`,射程与指引见 {@link uncompilableRuleGuidance}
267
267
  * (名表消费者只递得来名字里带反斜杠、单条 >512 字符、空串三种;规则编译器消费者递来的每一条内容形都走这里)。[ref]①([ref])补齐 ——
268
268
  * 此前只有 `ask` 腿(经 `createPermissionRulePolicy` 的 throw)拒得出这一族,`deny` 静默 no-op。
@@ -278,12 +278,14 @@ export declare function isRosterGateArmed(webAdmin: ServiceConfig["webAdmin"]):
278
278
  * `<ns>__<server>__*` / `<ns>__<server>__<glob>` 在**每一条**腿上都是**真判**,不再是
279
279
  * 「放行进 no-op」—— 而那正是 [ref] 病形(`APPROVAL_DENY=mcp__figma__*` 判 allow)的根。
280
280
  *
281
- * 🔴 **S-1047(core 7.41.0 #1156)收掉的分叉:两段覆盖形 `<ns>__<server>`(`mcp__figma`)自 7.116.0 起受理**。core 全家把它解成
281
+ * 🔴 **[ref](core 7.41.0 [ref])收掉的分叉:两段覆盖形 `<ns>__<server>`(`mcp__figma`)自 7.116.0 起受理**。core 全家把它解成
282
282
  * covering(这台服务器的每一只工具,与 `mcp__figma__*` 同义),core 的判词 `judgeRuleToolName` 判它 `current`,本仓会话规则写口也一直
283
283
  * 收它;而本函数此前以「一名两义」(运维也可能是把三段名写漏了一段)拒它,句子却说它「永远不生效」—— 对它不成立,且同一个名字在本仓两张表上
284
284
  * 两种答案。收成一个答案:受理。代价(三问在 CHANGELOG 7.116.0):少了「三段名漏打一截」的那一次拦截 —— 想要一只工具就写全名;
285
- * 拒放集合的变化逐条在 MIGRATION 7.116.0 节。服务器段带通配(`mcp__*`)仍拒(core 的匹配器对服务器段逐字比,一只都够不着;7.116.0 起它是
286
- * 「对端段铸不出」的一例,不再单列)。
285
+ * 拒放集合的变化逐条在 MIGRATION 7.116.0 节。
286
+ * 🔴 **core 7.55.0 [ref] 起整个协议的名字 `mcp__*` / `mcp__*__*`(与 `a2a__*`)在这些限制表里受理**:引擎的判官与覆盖匹配器按表的态度读名字,限制侧把它们读成
287
+ * 这一协议的每一只工具 —— 本函数按表的态度问判官(名表消费者的态度 = `NAME_TABLE_BEHAVIOR`,`approval.ts` 的匹配器读同一个),不再拒;7.116.0–7.134.x 它们是
288
+ * 「对端段铸不出」的一例(那时引擎的匹配器对服务器段逐字比,一只都够不着)。对端段里的**部分**通配(`mcp__git*`)哪张表都读不出,照旧拒。
287
289
  */
288
290
  export interface UnmatchableToolName {
289
291
  name: string;
@@ -295,18 +297,18 @@ export interface UnmatchableToolName {
295
297
  reason: string;
296
298
  }
297
299
  /**
298
- * S-177(core 7.9.0 [ref])—— **这条名单条目喂给谁**,决定「永不匹配」这句话怎么判。三个消费者形态:
300
+ * [ref](core 7.9.0 [ref])—— **这条名单条目喂给谁**,决定「永不匹配」这句话怎么判。三个消费者形态:
299
301
  *
300
302
  * · `"tool-name-table"` —— 消费者按**整串工具名**比对(精确 ∪ covering):env `APPROVAL_*` 三键与
301
303
  * 中心下发 `runtime.approvalRequire`(消费者 `createDurableAskPolicy`)。带括号的内容形
302
304
  * 在这里永远匹配不上任何活工具名 —— 与引擎的规则文法认不认得它**无关**,是这条腿的比对方式决定的,
303
305
  * 所以内容形照旧响亮拒 + 指路。
304
306
  * · `"rule-policy"` —— 消费者是 core 的**规则编译器**(`createPermissionRulePolicy`):`settings.permissions.deny` / `.ask`
305
- * (S-177 / core 7.9.0 起)。引擎**真的按内容匹配** deny / ask 的内容形(`Bash(rm -r:*)` / `Edit(~/.sema/**)`),所以本仓不许再替它拒 ——
307
+ * ([ref] / core 7.9.0 起)。引擎**真的按内容匹配** deny / ask 的内容形(`Bash(rm -r:*)` / `Edit(~/.sema/**)`;core 7.55.0 起 `WebFetch(domain:<host>)` 按调用到达的主机),所以本仓不许再替它拒 ——
306
308
  * 判据整条交回 core 的 `validatePermissionRules`,按这张表自己的 behavior 问。core 7.42.0 起策略只说 deny / ask(allow 表不再是本消费者)。
307
- * (7.117.0 有过第三种 `"allow-layer"` —— 请求的 `settings.permissions.allow` 只判名字。7.118.0 / core 7.43.0 #1358 起引擎的 allow 层自己按名册读条目名并通告
309
+ * (7.117.0 有过第三种 `"allow-layer"` —— 请求的 `settings.permissions.allow` 只判名字。7.118.0 / core 7.43.0 [ref] 起引擎的 allow 层自己按名册读条目名并通告
308
310
  * (`permission.allowed_tool_not_granted`,`reason: "tool_name"` / `near_miss`)⇒ 本仓的名字判退役,allow 侧整只交引擎;7.116.0–7.122.x 另拒的「工具段为空」
309
- * 一形随 core 7.48.0 #1400 也交引擎。)
311
+ * 一形随 core 7.48.0 [ref] 也交引擎。)
310
312
  */
311
313
  export type RuleEntryConsumer = "tool-name-table" | "rule-policy";
312
314
  /**
@@ -346,7 +348,7 @@ export declare function judgeUnmatchableToolNames(source: string, names: readonl
346
348
  * allow 表同一份(`rule-entry-list.ts`):
347
349
  * ① 值不是字符串表 ⇒ 拒(env 的 CSV 恒给字符串表;判在这里是为了「值一旦换了来源,第一道判仍在」);
348
350
  * ② 引擎读成空的条目(`compileAllowList(names, "allow", 名册).inert` 非空 —— `*`、`mcp__*`、写路径 / 域名形、带空白或畸形的名字,以及
349
- * core 7.43.0 起条目名过引擎判官读成 `tool_name` 的退役名 / 无前缀短名 / 对端段铸不出,core 7.48.0 #1400 起含工具段为空的 `mcp__<srv>__`;
351
+ * core 7.43.0 起条目名过引擎判官读成 `tool_name` 的退役名 / 无前缀短名 / 对端段铸不出,core 7.48.0 [ref] 起含工具段为空的 `mcp__<srv>__`;
350
352
  * 7.116.0–7.122.x 那一形由本仓先拒,随之退役)⇒ 拒,句子点名条目、引擎给的原因词(名字层带判词与现名)、
351
353
  * 该怎么写。请求的 allow 侧对 ② 只收通告;运维这一侧拒启:这是运维自己的配置,写错了当场改,而引擎对读成空的部署条目只在每一跑发一条通告。
352
354
  * 文法随引擎:工具名、协议名覆盖形、`Bash(...)` 命令规则、`Read(//dir/**)` 读目录都收(内容形里带逗号的写不进 CSV —— 这张表的分隔符就是逗号)。
package/dist/config.js CHANGED
@@ -7,6 +7,7 @@ import { compileAllowList, inheritEnvPolicyProblem, BUILTIN_COMPLIANCE_DENIES, C
7
7
  import { ROSTER_PRIMARY_ROLES, ROSTER_CHEAP_ROLES, WEB_ADMIN_ENV, retiredEnvRefusal, stripControlAndBidi } from "@sema-agent/settings-schema";
8
8
  import { parseApprovalHmacKeys, parsePrincipalJwks } from "./auth-keys.js";
9
9
  import { DEFAULT_ELICITATION_THROTTLE } from "./elicitation.js";
10
+ import { buildRuleListJudgeOptions } from "./permission-rule-list.js";
10
11
  import { isV2ScopeKey, memoryReplicationCoverage, replicatesProjectLayersOf } from "./memory-scope.js";
11
12
  import { assertProjectLayerOwnable } from "./project-identity.js";
12
13
  import { projectLayerOwnerOf } from "./project-layer-key.js";
@@ -24,7 +25,7 @@ import { buildReadFacePostureNotice, settleDerivedReadFace } from "./read-face-p
24
25
  import { THINKING_LEVELS, THINKING_FORMATS, buildModelCompat, isThinkingFormat, isThinkingTier } from "./model-compat.js";
25
26
  import {} from "./posture-source.js";
26
27
  import { COST_QUOTA_WINDOW_SEC_RANGE, costQuotaWindowSecInRange } from "./observability/cost-quota.js";
27
- import { TOOL_NAME_ROSTER, describeUnmatchableRuleName, ruleEntryToolName, unmatchableRuleNameOf } from "./namespaced-rule-name.js";
28
+ import { NAME_TABLE_BEHAVIOR, TOOL_NAME_ROSTER, describeUnmatchableRuleName, ruleEntryToolName, unmatchableRuleNameOf } from "./namespaced-rule-name.js";
28
29
  import { bakeOperatorPrincipalsRefusal, bakeRunnerCredentialRefusal, centerIdentityRefusal, halfOpenDirectDoorRefusal, leaderDurableStoreRefusal, operatorPrincipalsRequiredRefusal, operatorSingleUserRefusal, workflowParkDecisionDomainRefusal } from "./config-invariants.js";
29
30
  import { declaredSemaConfigDir } from "./sema-config-dir.js";
30
31
  import { lkgPathOverrideOf } from "./config-lkg.js";
@@ -32,7 +33,8 @@ import { K8S_WORKSPACE_MOUNT_DEFAULT, WORKSPACE_PERSIST_DEFAULT, WORKSPACE_PERSI
32
33
  import { laneLivenessOf } from "./exec-bounds.js";
33
34
  import { SANDBOX_IPV6_DEFAULT, SANDBOX_IPV6_WORDS } from "./sandbox-egress-policy.js";
34
35
  import { WORKSPACE_CACHE_DEFAULT, WORKSPACE_CACHE_MOUNT_DEFAULT, WORKSPACE_CACHE_MOUNT_RESERVED, WORKSPACE_CACHE_SIZE_DEFAULT, WORKSPACE_CACHE_WORDS, isK8sQuantity, mountsOverlap, reservedMountCollision } from "./workspace-cache.js";
35
- import { REMOTE_EXEC_PROVIDER_WORDS, executionLaneOf, executionLaneRequiredRefusal, isSingleMachineDefaultLane, laneRequiredEnv } from "./execution-lane-caps.js";
36
+ import { DEPLOYMENT_SHAPE_PREDICATES } from "./deployment-shape.js";
37
+ import { REMOTE_EXEC_PROVIDER_WORDS, executionLaneOf, executionLaneRequiredRefusal, laneRequiredEnv } from "./execution-lane-caps.js";
36
38
  import { MEMORY_ENGINE_BACKENDS, SESSION_BACKENDS, STORE_BACKENDS } from "@sema-agent/settings-schema/execution-lanes";
37
39
  import { AUTONOMY_MODES } from "./runtime-governance.js";
38
40
  import { MAX_NAMED_INERT_ENTRIES, allowLayerEntryCountIssue, describeInertRuleEntries, inertRuleEntriesOf, inertRuleEntryGuidance, ruleEntryListShapeOk } from "./rule-entry-list.js";
@@ -187,7 +189,7 @@ function buildExecLaneNotice(remoteExec) {
187
189
  const lane = executionLaneOf(remoteExec?.provider);
188
190
  return {
189
191
  lane,
190
- source: lane === "in-process" ? "default-unset" : isSingleMachineDefaultLane(remoteExec) ? "default-local-provider" : "explicit-env",
192
+ source: lane === "in-process" ? "default-unset" : DEPLOYMENT_SHAPE_PREDICATES.singleMachineDefaultLane.holds({ remoteExec }) ? "default-local-provider" : "explicit-env",
191
193
  };
192
194
  }
193
195
  const ENV_VALUE_ECHO_CHARS = 120;
@@ -1188,7 +1190,7 @@ function ccRuleFormGuidance(name) {
1188
1190
  `to put every shell call behind an approval use MANUAL_MODE_SHELL_GATE=always`);
1189
1191
  }
1190
1192
  function uncompilableRuleGuidance(name, behavior, pathBases) {
1191
- const issues = validatePermissionRules([{ rule: name, behavior }], pathBases !== undefined ? { pathBases } : undefined);
1193
+ const issues = validatePermissionRules([{ rule: name, behavior }], buildRuleListJudgeOptions(pathBases));
1192
1194
  const issue = issues[0];
1193
1195
  if (issue === undefined)
1194
1196
  return undefined;
@@ -1205,7 +1207,7 @@ function findUnmatchableToolNames(names, opts) {
1205
1207
  }
1206
1208
  }
1207
1209
  const subject = opts.consumer === "tool-name-table" ? name : ruleEntryToolName(name);
1208
- const verdict = unmatchableRuleNameOf(subject);
1210
+ const verdict = unmatchableRuleNameOf(subject, opts.behavior);
1209
1211
  if (verdict?.kind === "retired") {
1210
1212
  out.push({ name, guidance: describeUnmatchableRuleName(verdict, subject), reason: verdict.kind });
1211
1213
  continue;
@@ -1318,7 +1320,7 @@ function parseApprovalDomain(ctx) {
1318
1320
  const dgHmacKeys = parseApprovalHmacKeys(process.env.APPROVAL_HMAC_KEYS, announceKeySetRejection("APPROVAL_HMAC_KEYS"));
1319
1321
  const durableApproval = postureOn("DURABLE_APPROVAL", infraReady);
1320
1322
  const rejectUnmatchableToolNames = (envName, names) => {
1321
- const unmatchable = unmatchableToolNamesRefusal(envName, names, { consumer: "tool-name-table", behavior: "deny" });
1323
+ const unmatchable = unmatchableToolNamesRefusal(envName, names, { consumer: "tool-name-table", behavior: NAME_TABLE_BEHAVIOR });
1322
1324
  if (unmatchable !== undefined)
1323
1325
  throw new Error(unmatchable.message);
1324
1326
  return names;
@@ -2185,7 +2187,7 @@ function parseIntegrationsDomain(ctx) {
2185
2187
  skillsDir: env("SKILLS_DIR", defaultSkillsDir()),
2186
2188
  centerCredentialRenewLeadMs: parseCenterCredentialRenewLeadMs(process.env.CENTER_CREDENTIAL_RENEW_LEAD_MS),
2187
2189
  webAdmin,
2188
- fleetLeaseFailClosed: parseFleetLeaseFailClosed(process.env.FLEET_LEASE_FAIL_CLOSED, requirePrincipal),
2190
+ fleetLeaseFailClosed: parseFleetLeaseFailClosed(process.env.FLEET_LEASE_FAIL_CLOSED, DEPLOYMENT_SHAPE_PREDICATES.multiTenant.holds({ requirePrincipal })),
2189
2191
  ...fleetGeneration,
2190
2192
  fleetScope: parseFleetScope(process.env.FLEET_SCOPE),
2191
2193
  ...fleetAdvertiseAddress,
@@ -2266,10 +2268,10 @@ function parseFleetLeaseOutageMaxMs(raw) {
2266
2268
  }
2267
2269
  return n;
2268
2270
  }
2269
- function parseFleetLeaseFailClosed(raw, requirePrincipal) {
2271
+ function parseFleetLeaseFailClosed(raw, multiTenant) {
2270
2272
  const explicit = parseBoolWord("FLEET_LEASE_FAIL_CLOSED", raw);
2271
- const value = explicit ?? requirePrincipal;
2272
- registerKnob({ name: "FLEET_LEASE_FAIL_CLOSED", polarity: "posture", value, source: explicit !== undefined ? "env" : requirePrincipal ? "posture" : "default" });
2273
+ const value = explicit ?? multiTenant;
2274
+ registerKnob({ name: "FLEET_LEASE_FAIL_CLOSED", polarity: "posture", value, source: explicit !== undefined ? "env" : multiTenant ? "posture" : "default" });
2273
2275
  return value;
2274
2276
  }
2275
2277
  function parseCenterBaseUrl(name, raw, role) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * S-111 件③ —— 跨会话入站治理的**三层供给**([ref] §4.4)。
2
+ * [ref] 件③ —— 跨会话入站治理的**三层供给**([ref] §4.4)。
3
3
  *
4
4
  * 分工(单一属主):**判定归引擎**(`resolveCrossSessionInboundSetting` 的层次收紧 + `judgeCrossSessionInbound`
5
5
  * 的 mode-parity 与 hold 因由,全在 core 的纯函数里);**本仓只供层**。本文件不判、不折、不比较秩——
@@ -1,5 +1,5 @@
1
1
  /**
2
- * 🔴 **委派子代会话的属主 —— 一条律;三处写点,各自的来源集;属主 = 判断时见证到的,写只 CAS 子行自己**(S-1770)。
2
+ * 🔴 **委派子代会话的属主 —— 一条律;三处写点,各自的来源集;属主 = 判断时见证到的,写只 CAS 子行自己**([ref])。
3
3
  *
4
4
  * ## 律
5
5
  * 一只委派子代会话(引擎为委派铸的 placed 会话,或停驻时从私店拷进宿主店的子代会话)的属主**不是它自己的事实**:它是发起它的那棵委派树的
@@ -11,6 +11,10 @@
11
11
  * 鉴权边界拒任何报出它的主体)+ 写落下之后一行 warn `delegated_session_owner_orphaned`。宁可没人能读,也不让谁都能读。
12
12
  * 一只记下的根 / 父是空串(`''`)⇒ 读作没有那一格(与 `session-placement.ts` 的 `placementFromRow` 同一个读法;M23 的扫描句在同一条语句里对连接键套
13
13
  * `NULLIF(…, '')`,与判据同读)。
14
+ * **与引擎属主对说法不同(如实登记,收口在引擎)**:引擎 7.55.0 的属主对把「acquire 建的行」与 placed 行一并列为记 `null`(匿名);本律对**每一只** placed 行
15
+ * 在建行那一笔记委派树的属主(哨兵只是「来源都不在」那一形)—— 照引擎的读法记 `null`,在本服务的门上就只有 fleet 调用方读得到(发起它的主体自己读不到;`security.ts` 的 `ownerlessRowOpen`)、且留在认领句 / M23 的射程里,
16
+ * 照引擎「匿名 = 对每个主体放行」的字面读法则是拿到 id 的人都读得到;哨兵两条路都不走。引擎会话店试剂盒「对已有的行
17
+ * register 什么都不做」一格因此在 SQL 两店上登记待翻格,盒那一格的不变量(register 不认领任何已有的行)另由正向钉逐步断言(`test/store-contract-kit-db-integration.test.ts` §9b)。
14
18
  * **写只 CAS 子行自己**:`owner IS NULL ∧ incarnation = 判断时读到的子行化身 ∧ placed`({@link CLAIM_OWNERLESS_PLACED_SQL},两方言各一句)。判断与写之间
15
19
  * 根 / 父被删、被同 id 重建、换住客 —— 写进去的仍是**判断时那棵树**的属主,这正是律要的:不锁根、不读根、不要求「根到写时还是那个根」。之后与任何会话一样
16
20
  * 首写不可变(`register` 的首写律)。判断那一刻的检查照旧在判断里做、不进 CAS:宿主行记下的根是不是这一棵;调用方见证之后根行换没换住客
@@ -47,14 +51,14 @@
47
51
  * local 店不实现 placement(子代住私店、只经停驻挂点进宿主店),没有第一处与第三处,也不认领(上一节)。
48
52
  */
49
53
  import type { SessionPlacement } from "@sema-agent/core";
50
- import { type SessionFace, type SessionFaceReader } from "./session-incarnation.js";
54
+ import { type HeadRead, type SessionFace } from "./session-incarnation.js";
51
55
  /** 孤行哨兵属主的前缀(保留主体前缀:`security.ts` 的 `RESERVED_PRINCIPAL_PREFIXES` 登记它,任何身份来源报出带它的主体都在鉴权边界被拒)。 */
52
56
  export declare const ORPHAN_SESSION_OWNER_PREFIX = "_orphan:";
53
57
  /** 一只推不出属主的子代会话的哨兵属主(每只会话一个值:即便哪天有谁误配出这个串,也只够得着这一只)。 */
54
58
  export declare function orphanSessionOwner(sessionId: string): string;
55
59
  /** 这只属主是不是孤行哨兵(自己推不出、或继承自一只推不出的祖先 —— 两者都没有任何调用方匹配)。前缀的知识只住在本模块。 */
56
60
  export declare function isOrphanSessionOwner(owner: string | null): boolean;
57
- /** 一只来源行在本店的读数:`undefined` = 本店没有这一行;`null` = 行在、无主;串 = 属主(与 `ownerOf` 的三态同义)。 */
61
+ /** 一只来源行在本店的读数:`undefined` = 本店没有这一行;`null` = 行在、无主;串 = 属主(与 `headOf(id)?.owner` 的三态同义)。 */
58
62
  export type SourceOwnerReading = string | null | undefined;
59
63
  /** 律的判决:继承自哪一行(属主可以是 `null` = 来源行无主),或孤行(哨兵属主)。 */
60
64
  export type InheritedOwner = {
@@ -119,7 +123,7 @@ export interface PlacedRowWriter {
119
123
  readonly readFaces: SourceFacesReader;
120
124
  /** 建行那一条 INSERT(属主与 placement 同一条落库;行已在 ⇒ 一个字节不动,首写律)。 */
121
125
  insert(owner: string | null): Promise<void>;
122
- /** 写后读回本行的属主(店的 `ownerOf`:`undefined` = 行不在)—— 只为判「本笔的哨兵落没落下」。 */
126
+ /** 写后读回本行的属主(店的头读 `headOf(id)?.owner`:`undefined` = 行不在)—— 只为判「本笔的哨兵落没落下」。 */
123
127
  readOwner(): Promise<string | null | undefined>;
124
128
  }
125
129
  /**
@@ -147,20 +151,19 @@ export interface DelegationTreeStore {
147
151
  readonly placementOf: (sessionId: string) => Promise<PlacementSources | undefined>;
148
152
  readonly claimOwnerless: OwnerlessClaim;
149
153
  }
150
- /** 停驻挂点要的宿主店口(属主读 / 属主 + 化身一次读;记录委派树的店另有 {@link DelegationTreeStore})。 */
154
+ /** 停驻挂点要的宿主店口(按 id 读一行的唯一读口 `headOf` —— 属主与住客都是它的投影;记录委派树的店另有 {@link DelegationTreeStore})。 */
151
155
  export interface DelegatedOwnerHost {
152
- readonly ownerOf: (sessionId: string) => Promise<string | null | undefined>;
153
- readonly sessionFaceOf: SessionFaceReader;
156
+ readonly headOf: HeadRead;
154
157
  /** 缺席 = 这只店不记委派树(不实现 placement)。 */
155
158
  readonly trees: DelegationTreeStore | undefined;
156
159
  }
157
160
  /**
158
- * 「这只宿主店能不能承载委派子代的属主」—— 只判这一处(停驻快路与晋升建行读同一只):`ownerOf` + 住客脸都在 ⇒ 绑好的 {@link DelegatedOwnerHost};缺任一只 ⇒ `undefined`
159
- * (调用方响亮拒:读不回属主的宿主店上,停驻出来的就是一只谁都能读的转录)。记录委派树的两只口(`placementOf` + `claimOwnerless`)**同在或同缺**:同在 ⇒ `trees`;
160
- * 同缺 ⇒ 不记委派树;只有一只 ⇒ `undefined`(记着树却认领不了,或认领却读不回树 —— 半只店不猜)。住客脸的「能不能」沿用 `sessionFaceReadOf` 的同一处判法。
161
+ * 「这只宿主店能不能承载委派子代的属主」—— 只判这一处(停驻快路与晋升建行读同一只):店有按 id 的头读(`headOf`,「有没有」沿用 `headReadOf` 的同一处判法)⇒
162
+ * 绑好的 {@link DelegatedOwnerHost};没有 ⇒ `undefined`(调用方响亮拒:读不回属主的宿主店上,停驻出来的就是一只谁都能读的转录)。记录委派树的两只口
163
+ * (`placementOf` + `claimOwnerless`)**同在或同缺**:同在 ⇒ `trees`;同缺 ⇒ 不记委派树;只有一只 ⇒ `undefined`(记着树却认领不了,或认领却读不回树 —— 半只店不猜)。
161
164
  */
162
165
  export declare function delegatedOwnerHostOf(store: {
163
- readonly ownerOf?: (sessionId: string) => Promise<string | null | undefined>;
166
+ readonly headOf?: unknown;
164
167
  readonly placementOf?: (sessionId: string) => Promise<PlacementSources | undefined>;
165
168
  readonly claimOwnerless?: OwnerlessClaim;
166
169
  }): DelegatedOwnerHost | undefined;
@@ -180,6 +183,6 @@ export interface SettledOwner {
180
183
  * 3. 比对 —— 此刻的属主不是律给的那一只(记着委派树 ⇒ 按记录的树判的那一只;否则 = `owner`)⇒ 抛。
181
184
  */
182
185
  export declare function settleDelegatedOwner(host: DelegatedOwnerHost, sessionId: string, owner: string | null, tree: DelegationTree): Promise<SettledOwner>;
183
- /** 按 id 逐只读会话面的店(`sessionFaceOf`)→ {@link SourceFacesReader}。 */
184
- export declare function sourceFacesVia(sessionFaceOf: SessionFaceReader): SourceFacesReader;
186
+ /** 按 id 逐只读头的店(`headOf`,活住客经 `sessionFaceOfHead` 投影 —— 空化身响亮拒)→ {@link SourceFacesReader}。 */
187
+ export declare function sourceFacesVia(headOf: HeadRead): SourceFacesReader;
185
188
  //# sourceMappingURL=delegated-session-owner.d.ts.map
@@ -1,4 +1,4 @@
1
- import { sessionFaceReadOf } from "./session-incarnation.js";
1
+ import { headReadOf, sessionFaceOfHead } from "./session-incarnation.js";
2
2
  export const ORPHAN_SESSION_OWNER_PREFIX = "_orphan:";
3
3
  export function orphanSessionOwner(sessionId) {
4
4
  return `${ORPHAN_SESSION_OWNER_PREFIX}${sessionId}`;
@@ -66,23 +66,22 @@ export function assertRootStillWitnessed(sessionId, witness, judged) {
66
66
  "so the root's current owner is not the owner of this delegation tree");
67
67
  }
68
68
  export function delegatedOwnerHostOf(store) {
69
- const ownerOf = store.ownerOf;
70
- const sessionFaceOf = sessionFaceReadOf(store);
69
+ const headOf = headReadOf(store);
71
70
  const placementOf = store.placementOf;
72
71
  const claimOwnerless = store.claimOwnerless;
73
- if (typeof ownerOf !== "function" || sessionFaceOf === undefined)
72
+ if (headOf === undefined)
74
73
  return undefined;
75
74
  if ((typeof placementOf === "function") !== (typeof claimOwnerless === "function"))
76
75
  return undefined;
77
76
  const trees = typeof placementOf === "function" && typeof claimOwnerless === "function"
78
77
  ? { placementOf: (id) => placementOf.call(store, id), claimOwnerless: (id, incarnation, owner) => claimOwnerless.call(store, id, incarnation, owner) }
79
78
  : undefined;
80
- return { ownerOf: (id) => ownerOf.call(store, id), sessionFaceOf, trees };
79
+ return { headOf, trees };
81
80
  }
82
81
  export async function settleDelegatedOwner(host, sessionId, owner, tree) {
83
82
  const refuse = () => new Error(`session "${sessionId}" cannot be parked as this delegated session: the host session store holds a session with this id that is not this delegation tree's ` +
84
83
  "(a different owner, or a different recorded delegation root), and the transcript is neither copied into it nor attested by it");
85
- const face = await host.sessionFaceOf(sessionId);
84
+ const face = sessionFaceOfHead(sessionId, await host.headOf(sessionId));
86
85
  const trees = host.trees;
87
86
  const recorded = face === undefined || trees === undefined ? undefined : await trees.placementOf(sessionId);
88
87
  let expected = owner;
@@ -91,7 +90,7 @@ export async function settleDelegatedOwner(host, sessionId, owner, tree) {
91
90
  if (face !== undefined && trees !== undefined && recorded !== undefined) {
92
91
  if ((sourceIdOf(recorded.rootSessionId) ?? null) !== tree.root)
93
92
  throw refuse();
94
- judged = await readDelegatedOwner(sessionId, recorded, sourceFacesVia(host.sessionFaceOf));
93
+ judged = await readDelegatedOwner(sessionId, recorded, sourceFacesVia(host.headOf));
95
94
  if (tree.root !== null)
96
95
  assertRootStillWitnessed(sessionId, { sessionId: tree.root, incarnation: tree.rootIncarnation }, judged);
97
96
  expected = judged.inherited.owner;
@@ -101,15 +100,15 @@ export async function settleDelegatedOwner(host, sessionId, owner, tree) {
101
100
  throw refuse();
102
101
  }
103
102
  }
104
- if ((await host.ownerOf(sessionId)) !== expected)
103
+ if ((await host.headOf(sessionId))?.owner !== expected)
105
104
  throw refuse();
106
105
  return { claimed, judged };
107
106
  }
108
- export function sourceFacesVia(sessionFaceOf) {
107
+ export function sourceFacesVia(headOf) {
109
108
  return async (ids) => {
110
109
  const out = new Map();
111
110
  for (const id of ids) {
112
- const face = await sessionFaceOf(id);
111
+ const face = sessionFaceOfHead(id, await headOf(id));
113
112
  if (face !== undefined)
114
113
  out.set(id, face);
115
114
  }
@@ -11,15 +11,15 @@ export interface DeploymentGovernanceConfigView {
11
11
  readonly commandPolicy?: ServiceConfig["commandPolicy"];
12
12
  readonly manualModeShellGate?: ServiceConfig["manualModeShellGate"];
13
13
  readonly sensitiveWritePatterns: ServiceConfig["sensitiveWritePatterns"];
14
- /** core 7.46.0 #1419:部署声明的配置根 —— 守卫集的 `.sema/…` 模式在根下同样守(与 Runner 的同名座同一个值,`loadConfig` 铸)。 */
14
+ /** core 7.46.0 [ref]:部署声明的配置根 —— 守卫集的 `.sema/…` 模式在根下同样守(与 Runner 的同名座同一个值,`loadConfig` 铸)。 */
15
15
  readonly agentConfigDir?: ServiceConfig["agentConfigDir"];
16
16
  /**
17
17
  * 本部署的**本地店根**(`LOCAL_DATA_ROOT → CONFIG_LOCAL_DIR → AGENT_DATA_DIR → ~/.ai-agent`)—— 在本口只喂
18
- * **誊本门**(`<localDataRoot>/sessions`)。S-133 起它**不再**当守卫集的数据根(那是引擎记忆根);core 7.49.0 [ref] 起守卫集
18
+ * **誊本门**(`<localDataRoot>/sessions`)。[ref] 起它**不再**当守卫集的数据根(那是引擎记忆根);core 7.49.0 [ref] 起守卫集
19
19
  * 根本不收数据根 —— 豁免根只从 `RunnerDeps.memoryEngineDir` 一处来(`boot/runner-deps.ts` 共享基座,每只 boot Runner 同一个值)。
20
- * 下面这段历史注保留,记的是 S-125 件⑦ 把两根混作一根的由来。
20
+ * 下面这段历史注保留,记的是 [ref] 件⑦ 把两根混作一根的由来。
21
21
  *
22
- * S-125 件⑦(core 7.4.0 [ref] HRD-PRM-10)—— 当时把本键原样交给 `createSensitivePathPolicy` 的 `dataRoot`。
22
+ * [ref] 件⑦(core 7.4.0 [ref] HRD-PRM-10)—— 当时把本键原样交给 `createSensitivePathPolicy` 的 `dataRoot`。
23
23
  *
24
24
  * 为什么必须**显式**传而不是吃 core 的缺省:core 的缺省是 `$AGENT_DATA_DIR ?? ~/.ai-agent`,而本仓的
25
25
  * 数据根解析链多一节最高优先级的覆盖(`config.ts`:`LOCAL_DATA_ROOT → CONFIG_LOCAL_DIR → AGENT_DATA_DIR
@@ -47,11 +47,11 @@ export interface PathAdjudication {
47
47
  readonly env: ExecutionEnv;
48
48
  /** 相对路径基准(core 的 `rootPath`)。缺席 ⇒ 相对形在真身那层判不了,补词法臂(见下)。 */
49
49
  readonly cwd?: string;
50
- /** 🔴 S-177:**真任务根**(权限规则模式的基)。与上面那个 `cwd` 分开:后者在 host 腿的无 session-cwd
50
+ /** 🔴 [ref]:**真任务根**(权限规则模式的基)。与上面那个 `cwd` 分开:后者在 host 腿的无 session-cwd
51
51
  * 形上是一个永不创建的哨兵目录 —— 对写门 fail-safe,对规则 fail-open。理由逐字见
52
52
  * `task-settings.ts` 的 `FsWriteGateWiring.taskRoot`。缺席 ⇒ 需要基的规则拼法被 core 整表拒(fail-loud)。 */
53
53
  readonly taskRoot?: string;
54
- /** 🔴 S-177 / codex r2 + S-213④:**执行环境的 home**(`~/…` 形规则的基)。在**本部署的执行车道
54
+ /** 🔴 [ref] / codex r2 + [ref]④:**执行环境的 home**(`~/…` 形规则的基)。在**本部署的执行车道
55
55
  * 真知道自己的 home 时**在场 —— 判据的唯一属主是 `execution-lane-caps.ts` 的 `executionLaneHomeDir`
56
56
  * (adapter 的 `ExecutionEnv.homeDir` 座读的是同一个函数)。绝不回落引擎进程自己的 home:远端车道上
57
57
  * 那是另一个用户的目录,拿它去匹配 = 一条收紧规则静默守错地方。逐字见
@@ -63,16 +63,16 @@ export interface LiveQuestionFace {
63
63
  hasLiveContext(): boolean;
64
64
  }
65
65
  /**
66
- * S-694 —— 审批基线的**席**:这条腿上「一个名单产的 `ask` 由谁来服」。闭集三形,每条腿**显式**说出自己那一形
66
+ * [ref] —— 审批基线的**席**:这条腿上「一个名单产的 `ask` 由谁来服」。闭集三形,每条腿**显式**说出自己那一形
67
67
  * ({@link createApprovalBaselinePolicy} 的席参数必填、按 `kind` 穷举 —— 闭集 +1 = 编译红):
68
68
  * · `durable` —— checkpoint suspend/resume 服 ask(HTTP 腿 durable 开、park 赎回腿)。AskUserQuestion 的问答门
69
69
  * **只**叠在这一形上(它的 `ask` 语义就是 durable park)。
70
70
  * · `live` —— Runner 的活 onAsk 席当场服 ask(run-local 的 `createLocalApprover`:TTY 问 y/N / 无 TTY 当场拒;
71
71
  * core `isLiveApproverSeat(onAsk)` 为真时 `suspendAsk` 早退,ask 落回调)。三张名单与 durable 席**同一只**策略。
72
72
  * · `absent` —— 没有谁服 ask ⇒ adjudicated allow-all;**只**服务零名单(HTTP 腿「durable 关 ∧ 单用户零意图」)。
73
- * 带名单进来 = 响亮拒:名单被一条没有席的腿静默吞掉,正是 S-694 的病形。
73
+ * 带名单进来 = 响亮拒:名单被一条没有席的腿静默吞掉,正是 [ref] 的病形。
74
74
  *
75
- * 🔴 由来(S-694):修前席是一个**可选**参数、缺席即 allow-all。run-local 调它时没传 ⇒ 三张名单一张都不进策略,
75
+ * 🔴 由来([ref]):修前席是一个**可选**参数、缺席即 allow-all。run-local 调它时没传 ⇒ 三张名单一张都不进策略,
76
76
  * 而这条腿其实**有**一只活 onAsk 席 —— [ref] 件一把「没有 durable 赎回腿」等同成了「ask 无处可服」。
77
77
  * 席必填之后,「这条腿能不能服 ask」是每个调用点必须写出来的一句话,不再是一个忘了写就成立的缺省。
78
78
  */
@@ -104,7 +104,7 @@ export interface AbsentApprovalSeat {
104
104
  * 也不会产出空答:coordinator 无 ALS ctx ⇒ 冻结 `{kind:"unavailable"}`(src/question.ts),永不悬挂;
105
105
  * park 仍是把问题送到人面前的唯一那条腿,正当性不变、只是反事实前提换了)。
106
106
  * 工具名取 `approval-content-kind.ts` 的单一属主(它 re-export core 根导出的 `ASK_USER_QUESTION_TOOL_NAME`);
107
- * server.ts 的 pre-CAS 守卫读同一枚(S-213①:此处旧注称该常量「core 未根导出」= 失实,曾据此手抄 13 处)。
107
+ * server.ts 的 pre-CAS 守卫读同一枚([ref]①:此处旧注称该常量「core 未根导出」= 失实,曾据此手抄 13 处)。
108
108
  * ⚠️ **单一属主**(复审 A2):AskUserQuestion 的 durable 判决只有这一处。任何需要「同参重建」这条判决的
109
109
  * 地方(main.ts 的 parkedReviveInheritedGate 父约束链)必须调本工厂,不得自折 core 原形——两份拷贝里
110
110
  * 只改一份正是本条 finding 的成因。**登记豁免一处**:leader worker 腿(src/leader/wire.ts provisionWorker)
@@ -179,7 +179,7 @@ type WriteTargetForm = "unstamped-relative" | "absolute-or-stamped";
179
179
  /**
180
180
  * 只在 `form` 那一类写目标上说话,其余显式 allow(让位);非写调用与提不出目标的调用原样交给 policy(它自己判 allow)。
181
181
  *
182
- * 🔴 **S-877(core 7.35.0 #1200):本包装不是 `wrapToolPolicy`,它自报成员**。core 的 wrap 契约是「包装至少拒内层所拒」,
182
+ * 🔴 **[ref](core 7.35.0 [ref]):本包装不是 `wrapToolPolicy`,它自报成员**。core 的 wrap 契约是「包装至少拒内层所拒」,
183
183
  * 而本包装**放行**内层会拒的另一形写目标 ⇒ 按契约它是一只自己的策略,内层的成员不能照搬(core wire 单点名这一只):
184
184
  * · `writeGuardRows`(core 7.49.0 [ref] 起;7.48.0 叫 `writeTargetGuard`,旧成员 core **不按名拒** ⇒ 不改就是壳写站静默丢部署守卫行)
185
185
  * —— 守卫集策略自带,壳写站按它交出的行判绝对目标;只在本层的形**覆盖行的判定形**时带上({@link WRITE_GUARD_ROWS_DOMAIN}):
@@ -214,7 +214,7 @@ export interface OperatorWarning {
214
214
  }
215
215
  /** {@link buildOnlySensitiveBaselineWarning} 读的座位量 —— 「这个部署到底有没有一道**真**门」。 */
216
216
  export interface GateSeatView {
217
- /** 这条腿审批基线的**席**(与喂 {@link createApprovalBaselinePolicy} 的是同一只,S-694:此前是一个与席分家的
217
+ /** 这条腿审批基线的**席**(与喂 {@link createApprovalBaselinePolicy} 的是同一只,[ref]:此前是一个与席分家的
218
218
  * `durableEnabled` 布尔,于是有活 onAsk 席的 run-local 腿被判成「没有门」)。 */
219
219
  readonly approvalSeat: ApprovalSeatKind;
220
220
  /** 单用户 turnkey 的 auto-accept 基线是否适用(= 零门意图的既定姿势,不是 misconfig)。 */
@@ -231,7 +231,7 @@ export interface GateSeatView {
231
231
  * 判据(与信号消失的条件逐字互补):**守卫集在场**(它让 `spec.toolPolicy` 在场、又不是门:只拒守卫段)∧ 这条腿的审批基线**没有席**
232
232
  * (`absent`)∧ 单用户 auto-accept 基线不适用。三个量都是部署常量 ⇒ 消费腿在 boot 期说一次,不是每任务一次。
233
233
  * (7.115.0–7.116.x 运维的 allow 表 `APPROVAL_GRANT` 也是这里的一片非门叶;7.117.0 起它住在 Runner 的部署席、不再是策略,随之出列。)
234
- * S-694:席读的是喂审批基线的**同一只**({@link ApprovalSeat})—— `durable` / `live` 两形都有人服 ask、名单
234
+ * [ref]:席读的是喂审批基线的**同一只**({@link ApprovalSeat})—— `durable` / `live` 两形都有人服 ask、名单
235
235
  * 进策略,「守卫集是唯一的策略」这句话在它们上面不成立。今天真发的只剩 HTTP 腿「durable 关 ∧ 多租户」那一形。
236
236
  *
237
237
  * ⚠️ 单一属主([ref] 件三):HTTP 腿与 run-local 腿共用本判据与文案。两处各写一份 = 一处改了另一处
@@ -245,7 +245,7 @@ export declare function buildOnlySensitiveBaselineWarning(config: Pick<Deploymen
245
245
  * `manualModeShellGate`/`sensitivePathLayers` 按在场性条件展开 —— `applyRuntimeGovernance` 对缺席与空的判读等价,
246
246
  * 但 profile 是折叠面的可观测字节,搬家不许顺手改。
247
247
  *
248
- * 🔴 **S-958(core #1266 7.39.0)—— 守卫集交叶,不交折叠**:修前这里铸一只预折的 `sensitivePathPolicy`
248
+ * 🔴 **[ref](core [ref] 7.39.0)—— 守卫集交叶,不交折叠**:修前这里铸一只预折的 `sensitivePathPolicy`
249
249
  * (`combinePolicies(真身层, 誊本门)`,沙箱形再套一层两形的折叠),治理层随后在**整个治理折叠的输出上**展开盖部署出身。
250
250
  * 现在治理层逐叶盖位、只折一次(`runtime-governance.ts` `applyRuntimeGovernance` 顶注末段),所以本口交出的是叶的列表:
251
251
  * 本口不知道出身这件事,也不再有自己的折叠点。叶的顺序 = 修前折叠的顺序(真身层 → 词法层 → 誊本门),deny 优先 / 首问 / 成员合并
@@ -265,7 +265,7 @@ export declare function buildApprovalGrantNotice(config: {
265
265
  * 审批基线 —— `applyRuntimeGovernance` 那个 base 的 `toolPolicy` 座([ref] 件一)。**恒非
266
266
  * `undefined`**:治理层是 tighten-only 的叠加层,没有基线可叠时它自己也产不出「门在场」这件事。
267
267
  *
268
- * 三形,按席穷举(S-694,席的定义见 {@link ApprovalSeat}):
268
+ * 三形,按席穷举([ref],席的定义见 {@link ApprovalSeat}):
269
269
  * · `durable` ⇒ AskUserQuestion 判决门 + 三张名单的审批门(deny/neverAuto/预算/本会话的豁免行全在
270
270
  * `createDurableAskPolicy` 里)。gated `ask` 由 core 变成 durable checkpoint suspend。
271
271
  * · `live` ⇒ **同一只**三张名单审批门,不叠问答门。gated `ask` 由 core 交给 Runner 的活 onAsk 席
@@ -274,7 +274,7 @@ export declare function buildApprovalGrantNotice(config: {
274
274
  * effect-aware 的策略。CC 的信任模型是 auto-accept,但门**机制**必须在场(core 原则「机制留、默认
275
275
  * 可更宽」)—— 满足 core 的 `hasEffectAwareGate`,恢复可观测性与 hook/tighten 点,而运维照旧用
276
276
  * `AUTONOMY`/`commandPolicy` 收紧不可逆操作(由 `applyRuntimeGovernance` tighten-only 叠上)。
277
- * 🔴 本形**只**服务零名单:名单在场却递 absent 席 = 名单被静默吞掉(S-694 的病形),响亮拒。
277
+ * 🔴 本形**只**服务零名单:名单在场却递 absent 席 = 名单被静默吞掉([ref] 的病形),响亮拒。
278
278
  *
279
279
  * ⚠️ 「零门意图才铺 allow-all」这条准入判据**不在本口**:它是消费腿的部署形判断(单用户/多租户、
280
280
  * 有无 checkpoint 店),属主是 `hasOperatorGateIntent` / `gateIntentUnserviceableReason`(src/approval.ts)。