@sema-agent/server 7.150.0 → 7.152.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 (514) hide show
  1. package/MIGRATION.md +451 -0
  2. package/README.md +15 -3
  3. package/README.zh-CN.md +10 -2
  4. package/USAGE.md +144 -87
  5. package/deploy/sema-up/README.md +11 -4
  6. package/deploy/sema-up/chart/Chart.yaml +1 -1
  7. package/deploy/sema-up/chart/templates/NOTES.txt +5 -0
  8. package/deploy/sema-up/chart/templates/_helpers.tpl +15 -16
  9. package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -3
  10. package/deploy/sema-up/chart/templates/server.yaml +5 -3
  11. package/deploy/sema-up/chart/values-full-single.yaml +3 -1
  12. package/deploy/sema-up/chart/values.yaml +8 -1
  13. package/deploy/sema-up/cluster-up.sh +7 -6
  14. package/deploy/sema-up/kube-up.sh +6 -6
  15. package/deploy/sema-up/lib/flagshape.sh +36 -8
  16. package/deploy/sema-up/lib/helm-values-cluster.py +2 -0
  17. package/deploy/sema-up/lib/helm-values-kube.py +2 -0
  18. package/deploy/sema-up/machines.example.yaml +3 -1
  19. package/deploy/sema-up/sema-up.sh +22 -16
  20. package/dist/adoption/import.js +3 -3
  21. package/dist/approval-ask-audit-store.d.ts +1 -1
  22. package/dist/approval-ask-machine.d.ts +4 -10
  23. package/dist/approval-ask-retention.d.ts +1 -1
  24. package/dist/approval-card.d.ts +12 -14
  25. package/dist/approval-gate-currency.d.ts +9 -9
  26. package/dist/approval-gate-currency.js +3 -4
  27. package/dist/approval-hmac.d.ts +17 -1
  28. package/dist/approval-hmac.js +7 -1
  29. package/dist/approval-queue-kind.d.ts +1 -1
  30. package/dist/approval.d.ts +2 -2
  31. package/dist/approval.js +2 -2
  32. package/dist/auth-bridge.d.ts +20 -0
  33. package/dist/auth-bridge.js +9 -0
  34. package/dist/background-session-reap.d.ts +1 -1
  35. package/dist/bake-runner/main.d.ts +4 -2
  36. package/dist/bind-host.d.ts +3 -6
  37. package/dist/bind-host.js +4 -7
  38. package/dist/boot/budget-tracing.js +1 -1
  39. package/dist/boot/coordinators.d.ts +1 -1
  40. package/dist/boot/coordinators.js +9 -10
  41. package/dist/boot/device-lane.js +2 -0
  42. package/dist/boot/engine-lease.d.ts +5 -0
  43. package/dist/boot/engine-lease.js +1 -0
  44. package/dist/boot/execution-env.d.ts +9 -14
  45. package/dist/boot/execution-env.js +85 -22
  46. package/dist/boot/execution-lane.js +32 -5
  47. package/dist/boot/late-binds.d.ts +8 -4
  48. package/dist/boot/late-binds.js +7 -1
  49. package/dist/boot/leader.d.ts +31 -30
  50. package/dist/boot/leader.js +38 -28
  51. package/dist/boot/leg-path-adjudication.d.ts +40 -0
  52. package/dist/boot/leg-path-adjudication.js +18 -0
  53. package/dist/boot/memory-consolidation.d.ts +3 -2
  54. package/dist/boot/memory-consolidation.js +6 -6
  55. package/dist/boot/parked-revive-gate.js +3 -15
  56. package/dist/boot/reapers.d.ts +6 -1
  57. package/dist/boot/reapers.js +13 -2
  58. package/dist/boot/resolve-spec.d.ts +3 -3
  59. package/dist/boot/resolve-spec.js +43 -48
  60. package/dist/boot/runner-deps.d.ts +46 -35
  61. package/dist/boot/runner-deps.js +94 -91
  62. package/dist/boot/session-age-out.d.ts +36 -0
  63. package/dist/boot/session-age-out.js +101 -0
  64. package/dist/boot/session-faces.d.ts +5 -14
  65. package/dist/boot/session-faces.js +9 -5
  66. package/dist/boot/shutdown.d.ts +6 -0
  67. package/dist/boot/shutdown.js +10 -4
  68. package/dist/boot/stage-01-config.js +2 -0
  69. package/dist/boot/stage-02-web-admin-pull.js +4 -5
  70. package/dist/boot/stage-05-execution-env.d.ts +5 -3
  71. package/dist/boot/stage-05-execution-env.js +3 -2
  72. package/dist/boot/stage-06-runners.d.ts +9 -4
  73. package/dist/boot/stage-06-runners.js +24 -9
  74. package/dist/boot/stage-07-capability-layer.d.ts +8 -4
  75. package/dist/boot/stage-07-capability-layer.js +3 -2
  76. package/dist/boot/stage-08-reapers.d.ts +8 -4
  77. package/dist/boot/stage-08-reapers.js +4 -2
  78. package/dist/boot/stage-09-leader.d.ts +12 -5
  79. package/dist/boot/stage-09-leader.js +14 -5
  80. package/dist/boot/stage-10-http-server.d.ts +19 -5
  81. package/dist/boot/stage-10-http-server.js +14 -21
  82. package/dist/boot/stores.js +7 -4
  83. package/dist/boot/web-admin.js +5 -8
  84. package/dist/boot/workflow-orchestration.d.ts +7 -2
  85. package/dist/boot/workflow-orchestration.js +24 -7
  86. package/dist/bounded-rotation.d.ts +29 -0
  87. package/dist/bounded-rotation.js +24 -0
  88. package/dist/capabilities/approvals-push.d.ts +3 -3
  89. package/dist/capabilities/scenarios.d.ts +28 -13
  90. package/dist/capabilities/scenarios.js +2 -2
  91. package/dist/capability-facts.d.ts +43 -32
  92. package/dist/capability-facts.js +45 -51
  93. package/dist/card-rule-offers.d.ts +32 -0
  94. package/dist/card-rule-offers.js +130 -0
  95. package/dist/center-credential.d.ts +25 -6
  96. package/dist/center-credential.js +25 -5
  97. package/dist/config-catalog.d.ts +26 -7
  98. package/dist/config-catalog.js +26 -22
  99. package/dist/config-dir-trust.js +4 -2
  100. package/dist/config-invariants.d.ts +20 -8
  101. package/dist/config-invariants.js +55 -12
  102. package/dist/config-lkg.d.ts +5 -19
  103. package/dist/config-lkg.js +8 -62
  104. package/dist/config-provider.d.ts +1 -1
  105. package/dist/config-root-migration.d.ts +2 -2
  106. package/dist/config-types.d.ts +38 -42
  107. package/dist/config.d.ts +58 -7
  108. package/dist/config.js +90 -40
  109. package/dist/control-socket.d.ts +51 -0
  110. package/dist/control-socket.js +115 -0
  111. package/dist/deployment-governance.d.ts +2 -1
  112. package/dist/deployment-shape.d.ts +9 -1
  113. package/dist/deployment-shape.js +2 -1
  114. package/dist/device-protocol.d.ts +5 -4
  115. package/dist/device-protocol.js +1 -1
  116. package/dist/device-ws-hub.d.ts +7 -0
  117. package/dist/device-ws-hub.js +10 -3
  118. package/dist/device-ws-protocol.d.ts +63 -10
  119. package/dist/device-ws-protocol.js +56 -25
  120. package/dist/elicitation.js +2 -2
  121. package/dist/engine-identity.d.ts +19 -7
  122. package/dist/engine-identity.js +10 -2
  123. package/dist/entry-mode-clamp-notice.d.ts +2 -1
  124. package/dist/entry-problems.d.ts +40 -3
  125. package/dist/entry-problems.js +3 -1
  126. package/dist/execution-env-refusal.d.ts +29 -0
  127. package/dist/execution-env-refusal.js +8 -0
  128. package/dist/execution-lane-caps.d.ts +3 -1
  129. package/dist/field-conflict.d.ts +1 -1
  130. package/dist/file-history-capture.d.ts +11 -4
  131. package/dist/file-history-capture.js +9 -6
  132. package/dist/file-history-disclosure.d.ts +7 -5
  133. package/dist/file-history-disclosure.js +7 -5
  134. package/dist/fleet/drain-entry.d.ts +4 -0
  135. package/dist/fleet/engine-signal.d.ts +12 -29
  136. package/dist/fleet/engine-signal.js +1 -7
  137. package/dist/fleet-client.js +2 -5
  138. package/dist/gate-settlement.d.ts +1 -8
  139. package/dist/gate-settlement.js +0 -4
  140. package/dist/history-anchor.js +1 -1
  141. package/dist/hitl-delivery.d.ts +2 -3
  142. package/dist/hitl-delivery.js +0 -2
  143. package/dist/hooks/hook-llm.js +4 -2
  144. package/dist/hooks/hook-runner.d.ts +3 -2
  145. package/dist/hooks/hook-runner.js +18 -3
  146. package/dist/host-decision.d.ts +11 -11
  147. package/dist/host-lsp-manager.d.ts +2 -2
  148. package/dist/http/active-run-conflict.d.ts +35 -2
  149. package/dist/http/active-run-conflict.js +48 -19
  150. package/dist/http/admission.js +17 -2
  151. package/dist/http/approval-sweeps.d.ts +1 -1
  152. package/dist/http/approval-sweeps.js +10 -7
  153. package/dist/http/checkpoint-ctx.d.ts +4 -0
  154. package/dist/http/checkpoint-ctx.js +2 -0
  155. package/dist/http/dispatch.d.ts +8 -3
  156. package/dist/http/dispatch.js +59 -32
  157. package/dist/http/durable-run-leg.js +16 -17
  158. package/dist/http/health-reader.d.ts +16 -9
  159. package/dist/http/health-reader.js +2 -1
  160. package/dist/http/health-self-report.d.ts +9 -1
  161. package/dist/http/health-self-report.js +3 -1
  162. package/dist/http/owner-access.d.ts +33 -14
  163. package/dist/http/owner-access.js +40 -10
  164. package/dist/http/principal-gate.d.ts +49 -21
  165. package/dist/http/principal-gate.js +61 -11
  166. package/dist/http/request-channel.d.ts +23 -0
  167. package/dist/http/request-channel.js +9 -0
  168. package/dist/http/request-guards.js +17 -2
  169. package/dist/http/resume-ctx-read.js +42 -3
  170. package/dist/http/resume-legs.d.ts +4 -3
  171. package/dist/http/resume-legs.js +367 -117
  172. package/dist/http/route-ctx.d.ts +91 -15
  173. package/dist/http/route-ctx.js +17 -0
  174. package/dist/http/route-table.d.ts +5 -1
  175. package/dist/http/route-table.js +4 -0
  176. package/dist/http/routes/admin-config-refresh.js +3 -3
  177. package/dist/http/routes/admin-drain.d.ts +3 -0
  178. package/dist/http/routes/admin-drain.js +7 -7
  179. package/dist/http/routes/admin-memory-optout.d.ts +1 -1
  180. package/dist/http/routes/admin-memory-optout.js +3 -3
  181. package/dist/http/routes/adoption.js +3 -5
  182. package/dist/http/routes/agents-roster.js +2 -3
  183. package/dist/http/routes/approvals-assistant.d.ts +2 -1
  184. package/dist/http/routes/approvals-assistant.js +99 -51
  185. package/dist/http/routes/background.d.ts +3 -3
  186. package/dist/http/routes/capabilities.d.ts +4 -0
  187. package/dist/http/routes/capabilities.js +38 -10
  188. package/dist/http/routes/config-catalog.js +2 -2
  189. package/dist/http/routes/devices.js +1 -1
  190. package/dist/http/routes/diagnostics.d.ts +3 -3
  191. package/dist/http/routes/diagnostics.js +19 -7
  192. package/dist/http/routes/fleet.js +10 -8
  193. package/dist/http/routes/images.js +10 -10
  194. package/dist/http/routes/memory-bundle.js +3 -3
  195. package/dist/http/routes/memory-compliance.js +3 -3
  196. package/dist/http/routes/memory-consolidation.js +2 -2
  197. package/dist/http/routes/memory-origin.js +3 -3
  198. package/dist/http/routes/memory-policy.js +2 -2
  199. package/dist/http/routes/observability.js +3 -3
  200. package/dist/http/routes/projects.d.ts +3 -2
  201. package/dist/http/routes/projects.js +4 -5
  202. package/dist/http/routes/retention-ops.js +3 -3
  203. package/dist/http/routes/rules.js +5 -5
  204. package/dist/http/routes/run-permission-mode.d.ts +2 -1
  205. package/dist/http/routes/run-permission-mode.js +2 -2
  206. package/dist/http/routes/runs.d.ts +4 -9
  207. package/dist/http/routes/runs.js +171 -65
  208. package/dist/http/routes/session-sync.d.ts +22 -9
  209. package/dist/http/routes/session-sync.js +204 -107
  210. package/dist/http/routes/sessions-list.js +13 -7
  211. package/dist/http/routes/sessions.js +30 -15
  212. package/dist/http/routes/tasks.js +46 -41
  213. package/dist/http/routes/trace-usage.js +2 -2
  214. package/dist/http/routes/workflows.js +1 -1
  215. package/dist/http/server.d.ts +30 -30
  216. package/dist/http/server.js +16 -4
  217. package/dist/http/submit-ctx.d.ts +1 -1
  218. package/dist/http/submit-ctx.js +7 -4
  219. package/dist/http/wire-types.d.ts +14 -4
  220. package/dist/human-facing-args.d.ts +33 -0
  221. package/dist/human-facing-args.js +33 -0
  222. package/dist/identity-source.d.ts +20 -3
  223. package/dist/identity-source.js +14 -0
  224. package/dist/index.d.ts +5 -1
  225. package/dist/k8s-api-credentials.d.ts +29 -0
  226. package/dist/k8s-api-credentials.js +25 -0
  227. package/dist/lane-home-probe.d.ts +3 -7
  228. package/dist/lane-home-probe.js +2 -2
  229. package/dist/leader/diffup.d.ts +19 -0
  230. package/dist/leader/diffup.js +7 -0
  231. package/dist/leader/leader.d.ts +116 -11
  232. package/dist/leader/leader.js +69 -5
  233. package/dist/leader/repair-wire.js +2 -2
  234. package/dist/leader/run-entry.d.ts +2 -1
  235. package/dist/leader/run-entry.js +1 -1
  236. package/dist/leader/wire.d.ts +42 -132
  237. package/dist/leader/wire.js +81 -67
  238. package/dist/leg-facts.d.ts +13 -5
  239. package/dist/leg-facts.js +2 -1
  240. package/dist/memory-scope.d.ts +23 -11
  241. package/dist/memory-scope.js +18 -6
  242. package/dist/memory-sync-client.d.ts +30 -2
  243. package/dist/memory-sync-client.js +16 -9
  244. package/dist/model-entry-headers.d.ts +9 -10
  245. package/dist/model-entry-headers.js +0 -4
  246. package/dist/model-entry-refusal.d.ts +7 -4
  247. package/dist/model-entry-refusal.js +11 -5
  248. package/dist/model-plane-face.d.ts +1 -1
  249. package/dist/model-plane-face.js +3 -1
  250. package/dist/model-route-endpoint.d.ts +13 -7
  251. package/dist/model-route-endpoint.js +14 -11
  252. package/dist/model-select.d.ts +22 -0
  253. package/dist/model-select.js +9 -0
  254. package/dist/model-unreachable-notice.d.ts +11 -0
  255. package/dist/model-unreachable-notice.js +4 -4
  256. package/dist/object-store-buckets.d.ts +640 -6
  257. package/dist/object-store-buckets.js +166 -0
  258. package/dist/observability/err-text.d.ts +7 -0
  259. package/dist/observability/err-text.js +5 -0
  260. package/dist/observability/fail-open.d.ts +25 -17
  261. package/dist/observability/fail-open.js +25 -17
  262. package/dist/observability/logger.js +3 -1
  263. package/dist/observability/metrics.js +1 -0
  264. package/dist/operator-roster.d.ts +68 -0
  265. package/dist/operator-roster.js +32 -0
  266. package/dist/orchestration/workflow-notify-journal.d.ts +18 -1
  267. package/dist/orchestration/workflow-notify-journal.js +12 -1
  268. package/dist/orchestration/workflow-park-decision.d.ts +70 -18
  269. package/dist/orchestration/workflow-park-decision.js +49 -10
  270. package/dist/orchestration/workflow-park-holder.d.ts +65 -0
  271. package/dist/orchestration/workflow-park-holder.js +98 -0
  272. package/dist/orchestration/workflow-record-fence.d.ts +36 -0
  273. package/dist/orchestration/workflow-record-fence.js +42 -0
  274. package/dist/outbound-dispatcher.d.ts +71 -8
  275. package/dist/outbound-dispatcher.js +48 -7
  276. package/dist/owner-faces.d.ts +2 -2
  277. package/dist/parked-decide.d.ts +106 -55
  278. package/dist/parked-decide.js +153 -117
  279. package/dist/peer-directory.d.ts +2 -2
  280. package/dist/peer-inbound-face.d.ts +2 -6
  281. package/dist/peer-inbound-face.js +0 -3
  282. package/dist/permission-mode-admission.d.ts +74 -5
  283. package/dist/permission-mode-admission.js +56 -3
  284. package/dist/plugins/adoption-log-sql.d.ts +3 -1
  285. package/dist/plugins/adoption-log-sql.js +7 -1
  286. package/dist/plugins/approval-ask-store-file.d.ts +14 -2
  287. package/dist/plugins/approval-ask-store-file.js +11 -0
  288. package/dist/plugins/approval-ask-store-memory.d.ts +10 -1
  289. package/dist/plugins/approval-ask-store-memory.js +35 -10
  290. package/dist/plugins/approval-ask-store-sql.d.ts +69 -4
  291. package/dist/plugins/approval-ask-store-sql.js +45 -5
  292. package/dist/plugins/approval-exemption-store.js +3 -0
  293. package/dist/plugins/approval-nonce-store.js +2 -0
  294. package/dist/plugins/blob-backend.d.ts +83 -7
  295. package/dist/plugins/blob-backend.js +57 -6
  296. package/dist/plugins/breaker-state-sql.js +2 -0
  297. package/dist/plugins/caching-session-store.d.ts +9 -15
  298. package/dist/plugins/caching-session-store.js +6 -0
  299. package/dist/plugins/checkpoint-index-columns.d.ts +20 -16
  300. package/dist/plugins/checkpoint-index-columns.js +3 -6
  301. package/dist/plugins/checkpoint-store-face.d.ts +119 -61
  302. package/dist/plugins/checkpoint-store-face.js +134 -55
  303. package/dist/plugins/device-store-sql.js +6 -0
  304. package/dist/plugins/error-origin.d.ts +18 -0
  305. package/dist/plugins/error-origin.js +10 -0
  306. package/dist/plugins/execution-placement-sql.js +6 -6
  307. package/dist/plugins/image-bake-store-sql.js +6 -0
  308. package/dist/plugins/image-index-sql.js +4 -0
  309. package/dist/plugins/landed-attendants.d.ts +212 -0
  310. package/dist/plugins/landed-attendants.js +161 -0
  311. package/dist/plugins/leader-run-store-sql.js +4 -0
  312. package/dist/plugins/local-checkpoint-store.d.ts +13 -3
  313. package/dist/plugins/local-checkpoint-store.js +38 -49
  314. package/dist/plugins/local-session-live-reference.d.ts +40 -0
  315. package/dist/plugins/local-session-live-reference.js +39 -0
  316. package/dist/plugins/local-session-store.d.ts +71 -33
  317. package/dist/plugins/local-session-store.js +129 -27
  318. package/dist/plugins/memory-engine-pg.js +4 -0
  319. package/dist/plugins/memory-engine-sql-apply.js +5 -2
  320. package/dist/plugins/memory-engine-tidb.js +4 -0
  321. package/dist/plugins/memory-optout-grant-store-sql.js +4 -0
  322. package/dist/plugins/memory-sync-store-pg.js +5 -0
  323. package/dist/plugins/memory-sync-store-tidb.js +5 -0
  324. package/dist/plugins/one-time-migrations.d.ts +104 -80
  325. package/dist/plugins/one-time-migrations.js +226 -132
  326. package/dist/plugins/org-delivery-quota-store.js +4 -1
  327. package/dist/plugins/outcome-ledger-sql.js +2 -0
  328. package/dist/plugins/permission-rule-store-sql.js +11 -4
  329. package/dist/plugins/pg-cost-quota.js +4 -0
  330. package/dist/plugins/pg-pool.js +35 -10
  331. package/dist/plugins/pg-rate-limiter.js +2 -0
  332. package/dist/plugins/posix-shell-fs.d.ts +6 -1
  333. package/dist/plugins/posix-shell-fs.js +4 -1
  334. package/dist/plugins/remote-env-adb.d.ts +19 -15
  335. package/dist/plugins/remote-env-adb.js +41 -15
  336. package/dist/plugins/remote-env-connect-seat.d.ts +105 -0
  337. package/dist/plugins/remote-env-connect-seat.js +72 -0
  338. package/dist/plugins/remote-env-device.d.ts +22 -5
  339. package/dist/plugins/remote-env-device.js +106 -8
  340. package/dist/plugins/remote-env-e2b.d.ts +15 -6
  341. package/dist/plugins/remote-env-e2b.js +42 -32
  342. package/dist/plugins/remote-env-file-error.js +6 -2
  343. package/dist/plugins/remote-env-host.d.ts +46 -10
  344. package/dist/plugins/remote-env-host.js +124 -52
  345. package/dist/plugins/remote-env-k8s.d.ts +109 -41
  346. package/dist/plugins/remote-env-k8s.js +160 -54
  347. package/dist/plugins/remote-env-local-docker.d.ts +13 -8
  348. package/dist/plugins/remote-env-local-docker.js +34 -41
  349. package/dist/plugins/remote-env-ssh.d.ts +18 -12
  350. package/dist/plugins/remote-env-ssh.js +60 -59
  351. package/dist/plugins/remote-shell.d.ts +98 -1
  352. package/dist/plugins/remote-shell.js +218 -0
  353. package/dist/plugins/replica-registration.d.ts +1 -1
  354. package/dist/plugins/replica-registration.js +1 -1
  355. package/dist/plugins/resume-anchor-store-sql.d.ts +11 -2
  356. package/dist/plugins/resume-anchor-store-sql.js +12 -5
  357. package/dist/plugins/retention-lane-store-sql.js +4 -0
  358. package/dist/plugins/retention-sql.d.ts +20 -2
  359. package/dist/plugins/retention-sql.js +11 -0
  360. package/dist/plugins/run-store-sql.d.ts +21 -2
  361. package/dist/plugins/run-store-sql.js +31 -7
  362. package/dist/plugins/s3-presign.d.ts +23 -0
  363. package/dist/plugins/s3-presign.js +37 -3
  364. package/dist/plugins/scenario-prefix-switch-m42.d.ts +1 -1
  365. package/dist/plugins/scenario-prefix-switch-m42.js +2 -2
  366. package/dist/plugins/scheduler-support.d.ts +2 -2
  367. package/dist/plugins/scheduler-support.js +0 -3
  368. package/dist/plugins/schema-consistency.d.ts +4 -2
  369. package/dist/plugins/schema-consistency.js +19 -2
  370. package/dist/plugins/schema-indexes.js +2 -0
  371. package/dist/plugins/send-file-ledger.d.ts +2 -2
  372. package/dist/plugins/send-file-ledger.js +5 -2
  373. package/dist/plugins/send-user-file.d.ts +3 -4
  374. package/dist/plugins/send-user-file.js +56 -52
  375. package/dist/plugins/serving-requirement.d.ts +26 -7
  376. package/dist/plugins/serving-requirement.js +11 -4
  377. package/dist/plugins/session-birth.d.ts +6 -2
  378. package/dist/plugins/session-blob-claim-token.d.ts +15 -0
  379. package/dist/plugins/session-blob-claim-token.js +20 -0
  380. package/dist/plugins/session-blob-namespace.d.ts +46 -0
  381. package/dist/plugins/session-blob-namespace.js +116 -0
  382. package/dist/plugins/session-capture-record-store-sql.js +2 -0
  383. package/dist/plugins/session-ext-table.d.ts +14 -1
  384. package/dist/plugins/session-ext-table.js +5 -1
  385. package/dist/plugins/session-row-sql.d.ts +49 -2
  386. package/dist/plugins/session-row-sql.js +56 -13
  387. package/dist/plugins/session-store-sql.d.ts +34 -18
  388. package/dist/plugins/session-store-sql.js +98 -17
  389. package/dist/plugins/shared-memory-store-sql.d.ts +1 -0
  390. package/dist/plugins/shared-memory-store-sql.js +6 -2
  391. package/dist/plugins/snapshot-bucket-presence.d.ts +25 -2
  392. package/dist/plugins/snapshot-bucket-presence.js +8 -2
  393. package/dist/plugins/sql-driver.d.ts +2 -1
  394. package/dist/plugins/sql-driver.js +18 -3
  395. package/dist/plugins/sql-errors.d.ts +11 -6
  396. package/dist/plugins/sql-errors.js +5 -6
  397. package/dist/plugins/sql-json-column.d.ts +1 -1
  398. package/dist/plugins/stop-then-start-sentence.d.ts +10 -4
  399. package/dist/plugins/stop-then-start-sentence.js +14 -10
  400. package/dist/plugins/stop-then-start.d.ts +109 -0
  401. package/dist/plugins/stop-then-start.js +104 -0
  402. package/dist/plugins/store-backend.d.ts +84 -15
  403. package/dist/plugins/store-backend.js +236 -72
  404. package/dist/plugins/store-boundary.d.ts +57 -0
  405. package/dist/plugins/store-boundary.js +139 -0
  406. package/dist/plugins/store-contracts.d.ts +17 -0
  407. package/dist/plugins/store-fault-sentence-m53.d.ts +7 -0
  408. package/dist/plugins/store-fault-sentence-m53.js +25 -0
  409. package/dist/plugins/store-fault.d.ts +26 -7
  410. package/dist/plugins/store-fault.js +18 -2
  411. package/dist/plugins/task-attachment-store.d.ts +2 -1
  412. package/dist/plugins/task-attachment-store.js +14 -1
  413. package/dist/plugins/task-list-store-sql.d.ts +2 -2
  414. package/dist/plugins/task-list-store-sql.js +10 -8
  415. package/dist/plugins/tidb-cost-quota.js +4 -0
  416. package/dist/plugins/tidb-pool.js +21 -25
  417. package/dist/plugins/tidb-rate-limiter.js +4 -0
  418. package/dist/plugins/user-input-ledger-sql.js +4 -0
  419. package/dist/plugins/workflow-run-store-sql.d.ts +28 -10
  420. package/dist/plugins/workflow-run-store-sql.js +64 -4
  421. package/dist/plugins/workspace-custody.d.ts +4 -3
  422. package/dist/plugins/workspace-fill.d.ts +4 -7
  423. package/dist/plugins/workspace-fill.js +2 -1
  424. package/dist/plugins/write-behind-counter.js +5 -0
  425. package/dist/project-context.d.ts +0 -2
  426. package/dist/project-context.js +4 -8
  427. package/dist/project-registry.d.ts +46 -0
  428. package/dist/project-registry.js +44 -0
  429. package/dist/question.d.ts +2 -1
  430. package/dist/question.js +5 -13
  431. package/dist/request-form.d.ts +6 -1
  432. package/dist/request-form.js +4 -1
  433. package/dist/request-key-closure.js +1 -1
  434. package/dist/request-value-closure.d.ts +4 -0
  435. package/dist/request-value-closure.js +10 -0
  436. package/dist/rule-issue-reading.d.ts +1 -1
  437. package/dist/rules-consent.d.ts +1 -1
  438. package/dist/run-acceptance.d.ts +3 -2
  439. package/dist/run-acceptance.js +4 -6
  440. package/dist/run-local.js +9 -9
  441. package/dist/runs.d.ts +54 -16
  442. package/dist/runs.js +67 -13
  443. package/dist/runtime-governance.d.ts +5 -4
  444. package/dist/security.d.ts +30 -32
  445. package/dist/security.js +41 -7
  446. package/dist/sema-config-dir.d.ts +2 -1
  447. package/dist/server-secret-env.d.ts +12 -10
  448. package/dist/server-secret-env.js +24 -15
  449. package/dist/session-bindings.d.ts +82 -0
  450. package/dist/session-bindings.js +18 -0
  451. package/dist/session-children-retire.d.ts +2 -2
  452. package/dist/session-children-retire.js +2 -6
  453. package/dist/session-deletion.d.ts +16 -1
  454. package/dist/session-error-wire.d.ts +3 -3
  455. package/dist/session-error-wire.js +3 -3
  456. package/dist/session-incarnation.d.ts +10 -0
  457. package/dist/session-incarnation.js +10 -1
  458. package/dist/session-kind.d.ts +57 -0
  459. package/dist/session-kind.js +22 -0
  460. package/dist/session-row.d.ts +21 -1
  461. package/dist/session-row.js +7 -1
  462. package/dist/session-sync-kernel.d.ts +24 -14
  463. package/dist/session-sync-kernel.js +3 -6
  464. package/dist/session-sync.d.ts +25 -103
  465. package/dist/session-sync.js +14 -76
  466. package/dist/session-titler.d.ts +10 -3
  467. package/dist/session-titler.js +19 -6
  468. package/dist/ssh-host-key.d.ts +5 -0
  469. package/dist/ssh-host-key.js +3 -0
  470. package/dist/stores-sql/blob-index-sql.d.ts +30 -9
  471. package/dist/stores-sql/blob-index-sql.js +40 -21
  472. package/dist/stores-sql/checkpoint-store-sql.d.ts +54 -27
  473. package/dist/stores-sql/checkpoint-store-sql.js +70 -146
  474. package/dist/stores-sql/file-history-store-sql.d.ts +113 -15
  475. package/dist/stores-sql/file-history-store-sql.js +205 -95
  476. package/dist/stores-sql/pg-session-storage.d.ts +34 -7
  477. package/dist/stores-sql/pg-session-storage.js +37 -13
  478. package/dist/stores-sql/retention-store-sql.d.ts +1 -9
  479. package/dist/stores-sql/retention-store-sql.js +5 -19
  480. package/dist/stores-sql/session-policy-store-sql.d.ts +30 -7
  481. package/dist/stores-sql/session-policy-store-sql.js +61 -44
  482. package/dist/stores-sql/session-write-hooks.d.ts +11 -0
  483. package/dist/stores-sql/tidb-session-store.d.ts +58 -7
  484. package/dist/stores-sql/tidb-session-store.js +37 -13
  485. package/dist/submission-exit.d.ts +3 -2
  486. package/dist/submission-exit.js +9 -1
  487. package/dist/task-cwd.d.ts +2 -2
  488. package/dist/task-settings.d.ts +7 -5
  489. package/dist/task-settings.js +3 -3
  490. package/dist/terminal.d.ts +33 -2
  491. package/dist/terminal.js +139 -9
  492. package/dist/tool-approval.d.ts +465 -507
  493. package/dist/tool-approval.js +606 -1222
  494. package/dist/trace/core-keyset-guard.d.ts +1 -1
  495. package/dist/trace/ledger-events.d.ts +3 -3
  496. package/dist/trace/project.d.ts +2 -3
  497. package/dist/trace/redact.js +3 -2
  498. package/dist/trace/self-minted-wire.d.ts +571 -178
  499. package/dist/trace/self-minted-wire.js +189 -56
  500. package/dist/web-admin-client/apply-effective.js +2 -2
  501. package/dist/web-admin-client/read-warnings.d.ts +2 -2
  502. package/dist/web-admin-client/read-warnings.js +1 -1
  503. package/dist/web-admin-client/types.d.ts +1 -1
  504. package/dist/workspace-space.d.ts +10 -4
  505. package/dist/workspace-space.js +4 -1
  506. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +79 -28
  507. package/package.json +7 -3
  508. package/scripts/embed-minimal.mjs +3 -3
  509. package/wire-changes/server@7.151.0.json +762 -0
  510. package/wire-changes/server@7.152.0.json +900 -0
  511. package/dist/config-d-migration.d.ts +0 -37
  512. package/dist/config-d-migration.js +0 -60
  513. package/dist/http/session-inherit-env.d.ts +0 -36
  514. package/dist/http/session-inherit-env.js +0 -6
@@ -49,6 +49,20 @@ export const SELF_MINTED_WIRE = {
49
49
  },
50
50
  retired: {},
51
51
  },
52
+ fleetFlatEngineState: {
53
+ at: "fleet 心跳 POST <中心>/api/fleet/instances 体顶层 · GET /health 体顶层(8.0 平铺引擎态方言;引擎态改读 engineSignal)",
54
+ members: {},
55
+ retired: {
56
+ "POST /api/fleet/instances#ready": { attr: "boolean, always present (the readiness verdict; now engineSignal.ready)", since: "1.189.0", until: "7.152.0" },
57
+ "POST /api/fleet/instances#draining": { attr: "boolean, always present (true iff the drain fact is present; now engineSignal.draining present)", since: "1.189.0", until: "7.152.0" },
58
+ "POST /api/fleet/instances#restart": { attr: "present-iff a restart signal ({ reasons, version, since, withheld? }; now engineSignal.restart)", since: "7.102.0", until: "7.152.0" },
59
+ "POST /api/fleet/instances#generation": { attr: "present-iff fleet member (FLEET_GENERATION echo; now engineSignal.generation)", since: "7.121.0", until: "7.152.0" },
60
+ "POST /api/fleet/instances#leaseState": { attr: "present-iff fleet member (LeaseState word; now engineSignal.leaseState)", since: "7.121.0", until: "7.152.0" },
61
+ "POST /api/fleet/instances#leaseUntil": { attr: "present-iff leaseState granted (epoch ms; now engineSignal.leaseUntil)", since: "7.121.0", until: "7.152.0" },
62
+ "GET /health#draining": { attr: "true, present-iff draining (now engineSignal.draining present)", since: "1.189.0", until: "7.152.0" },
63
+ "GET /health#drainingSince": { attr: "epoch ms, present-iff draining (now engineSignal.draining.since)", since: "1.189.0", until: "7.152.0" },
64
+ },
65
+ },
52
66
  sessionMemoryEraseStatus: {
53
67
  at: "POST /v1/sessions/:id/memory/erase(已分类拒 errorCode → HTTP 状态)",
54
68
  members: {
@@ -79,23 +93,13 @@ export const SELF_MINTED_WIRE = {
79
93
  },
80
94
  },
81
95
  notPendingCause: {
82
- at: "POST /v1/tool-approvals/:id/respond · GET /v1/tool-approvals/:id 404 tool_approval.not_pending cause",
83
- members: {
84
- routing_failure_fail_closed: { attr: "-", since: "7.124.0" },
85
- run_cancelled: { attr: "-", since: "7.124.0" },
86
- run_exited: { attr: "-", since: "7.124.0" },
87
- batch_aborted: { attr: "-", since: "7.124.0" },
88
- batch_sibling_withdrawn: { attr: "-", since: "7.124.0" },
89
- batch_bound_elsewhere: { attr: "-", since: "7.124.0" },
90
- adhoc_leg_no_durable_domain: { attr: "-", since: "7.124.0" },
91
- orphan_ttl_exceeded: { attr: "-", since: "7.124.0" },
92
- crashed_before_park: { attr: "-", since: "7.124.0" },
93
- shutdown_before_park: { attr: "-", since: "7.124.0" },
96
+ at: "GET /v1/tasks/:taskId/asks/:askId 404 tool_approval.not_pending cause",
97
+ members: {
94
98
  unknown_or_other_replica: { attr: "-", since: "7.40.0" },
95
99
  },
96
100
  },
97
101
  toolApprovalReadState: {
98
- at: "GET /v1/tool-approvals/:id 200 state",
102
+ at: "GET /v1/tasks/:taskId/asks/:askId 200 state",
99
103
  members: {
100
104
  pending: { attr: "-", since: "7.133.0" },
101
105
  decided: { attr: "-", since: "7.133.0" },
@@ -104,7 +108,7 @@ export const SELF_MINTED_WIRE = {
104
108
  },
105
109
  },
106
110
  toolApprovalReadVoidCause: {
107
- at: "GET /v1/tool-approvals/:id 200 state:void cause",
111
+ at: "GET /v1/tasks/:taskId/asks/:askId 200 state:void cause",
108
112
  members: {
109
113
  routing_failure_fail_closed: { attr: "-", since: "7.133.0" },
110
114
  run_cancelled: { attr: "-", since: "7.133.0" },
@@ -118,25 +122,6 @@ export const SELF_MINTED_WIRE = {
118
122
  shutdown_before_park: { attr: "-", since: "7.133.0" },
119
123
  },
120
124
  },
121
- toolApprovalCompleteCause: {
122
- at: "tool_approval_complete frame cause",
123
- members: {
124
- ttl_expired: { attr: "key:cause", since: "7.124.0" },
125
- broadcast_lost: { attr: "key:cause", since: "7.124.0" },
126
- stream_disconnected: { attr: "key:cause", since: "7.124.0" },
127
- undeliverable: { attr: "key:cause", since: "7.124.0" },
128
- run_cancelled: { attr: "key:cause", since: "7.124.0" },
129
- run_exited: { attr: "key:cause", since: "7.124.0" },
130
- batch_aborted: { attr: "key:cause", since: "7.124.0" },
131
- batch_sibling_withdrawn: { attr: "key:cause", since: "7.124.0" },
132
- batch_bound_elsewhere: { attr: "key:cause", since: "7.124.0" },
133
- routing_failure_fail_closed: { attr: "key:cause", since: "7.124.0" },
134
- crashed_before_park: { attr: "key:cause", since: "7.124.0" },
135
- shutdown_before_park: { attr: "key:cause", since: "7.124.0" },
136
- orphan_ttl_exceeded: { attr: "key:cause", since: "7.124.0" },
137
- adhoc_leg_no_durable_domain: { attr: "key:cause", since: "7.124.0" },
138
- },
139
- },
140
125
  approvalCompleteCause: {
141
126
  at: "approval_complete frame cause",
142
127
  members: {
@@ -254,6 +239,22 @@ export const SELF_MINTED_WIRE = {
254
239
  absent: { attr: "-", since: "7.121.0" },
255
240
  },
256
241
  },
242
+ healthCenterKey: {
243
+ at: "GET /health center",
244
+ members: {
245
+ issuer: { attr: "present-iff auth bridge configured", since: "7.121.0" },
246
+ webBaseUrl: { attr: "present-iff the center web console base is configured", since: "7.121.0" },
247
+ sessionsVisible: { attr: "always", since: "7.121.0" },
248
+ assertionToken: { attr: "present-iff center configured", since: "7.151.0" },
249
+ },
250
+ },
251
+ healthAssertionToken: {
252
+ at: "GET /health center.assertionToken",
253
+ members: {
254
+ declared: { attr: "-", since: "7.151.0" },
255
+ absent: { attr: "-", since: "7.151.0" },
256
+ },
257
+ },
257
258
  healthSessionsVisible: {
258
259
  at: "GET /health center.sessionsVisible",
259
260
  members: {
@@ -310,6 +311,28 @@ export const SELF_MINTED_WIRE = {
310
311
  sealedModelKeys: { attr: "always", since: "1.214.2" },
311
312
  sealedPoisonedModels: { attr: "always", since: "1.214.2" },
312
313
  workflowRunStore: { attr: "always", since: "1.214.2" },
314
+ controlSocket: { attr: "present-iff the local control socket is listening (absolute path; exactly one of controlSocket / controlSocketUnavailable)", since: "7.152.0" },
315
+ controlSocketUnavailable: { attr: "present-iff the local control socket is not listening (reason word; exactly one of controlSocket / controlSocketUnavailable)", since: "7.152.0" },
316
+ },
317
+ },
318
+ controlSocketUnavailableReason: {
319
+ at: "stdout 启动协议行 listening controlSocketUnavailable",
320
+ members: {
321
+ unsupported_platform: { attr: "-", since: "7.152.0" },
322
+ data_root_not_exclusive: { attr: "-", since: "7.152.0" },
323
+ path_too_long: { attr: "-", since: "7.152.0" },
324
+ dir_not_private: { attr: "-", since: "7.152.0" },
325
+ path_occupied: { attr: "-", since: "7.152.0" },
326
+ bind_failed: { attr: "-", since: "7.152.0" },
327
+ },
328
+ },
329
+ healthAnonymousKey: {
330
+ at: "GET /health(匿名读者:配了服务凭据而未出示凭据、不经控制 socket)",
331
+ members: {
332
+ status: { attr: "always", since: "7.148.0" },
333
+ auth: { attr: "always", since: "7.148.0" },
334
+ operator: { attr: "always", since: "7.148.0" },
335
+ center: { attr: "always", since: "7.148.0" },
313
336
  },
314
337
  },
315
338
  healthStoreKey: {
@@ -341,6 +364,7 @@ export const SELF_MINTED_WIRE = {
341
364
  tickMs: { attr: "present-iff engine lease leg armed and observing", since: "7.141.0" },
342
365
  firstAttach: { attr: "present-iff engineLease present and the owned window is finite", since: "7.146.0" },
343
366
  lane: { attr: "always within engineLease", since: "7.146.0" },
367
+ attached: { attr: "always within engineLease (open SSE attach stream count on this replica; 0 is legal for a polling-only shell)", since: "7.151.0" },
344
368
  handover: { attr: "present-iff lane is handover", since: "7.146.0" },
345
369
  },
346
370
  },
@@ -429,6 +453,13 @@ export const SELF_MINTED_WIRE = {
429
453
  members: {
430
454
  rowTag: { attr: "present-iff the row can be written conditionally (the store has the row write primitive and the row carries an incarnation)", since: "7.139.0" },
431
455
  unreadable: { attr: "present-iff the session head's leaf cannot be read (the file backend: the archive header is corrupt / truncated, or the archive cannot be read); the SQL backends never carry it; PATCH answers 500 for such a session before writing, so its 200 / 409 rows never carry it", since: "7.142.0" },
456
+ sessionKind: { attr: "present-iff the session was created by a submission that declared sessionKind (the default view lists only sessions without one)", since: "7.151.0" },
457
+ },
458
+ },
459
+ sessionKind: {
460
+ at: "POST /v1/tasks · /v1/tasks/stream · /v1/runs 体 sessionKind = GET /v1/sessions?sessionKind= = sessions[].sessionKind = GET /v1/sessions/:id sessionKind = GET /v1/capabilities sessionKinds[](<词> → -)",
461
+ members: {
462
+ sidechain: { attr: "-", since: "7.151.0" },
432
463
  },
433
464
  },
434
465
  projectRowKey: {
@@ -459,6 +490,7 @@ export const SELF_MINTED_WIRE = {
459
490
  at: "GET /v1/sessions/:id 体顶层键(本版新出现;<键> → 在场律)",
460
491
  members: {
461
492
  projectId: { attr: "present-iff the session row's last own workspace_changed frame carried a project", since: "7.147.0" },
493
+ sessionKind: { attr: "present-iff the session was created by a submission that declared sessionKind", since: "7.151.0" },
462
494
  },
463
495
  },
464
496
  sessionsListRowUnreadableKey: {
@@ -516,11 +548,6 @@ export const SELF_MINTED_WIRE = {
516
548
  "SSE tool_end#structured.authorization": { attr: "present-iff structured.code unauthorized and reason in the closed set; members = reason", since: "7.138.0" },
517
549
  "GET /v1/runs/:id/events#tool_end.structured.authorization": { attr: "present-iff structured.code unauthorized and reason in the closed set; members = reason", since: "7.138.0" },
518
550
  },
519
- retired: {
520
- "GET /v1/sessions/:id#messages[].details.authorization.resourceMetadataUrl": { attr: "remote-claimed URL from the endpoint's challenge (deep-scrubbed text)", since: "7.138.0", until: "7.150.0" },
521
- "SSE tool_end#structured.authorization(reason 以外的成员)": { attr: "card members passed through the text redactor (resourceMetadataUrl, a custom card's own members)", since: "7.138.0", until: "7.150.0" },
522
- "GET /v1/runs/:id/events#tool_end.structured.authorization(reason 以外的成员)": { attr: "card members passed through the text redactor (resourceMetadataUrl, a custom card's own members)", since: "7.138.0", until: "7.150.0" },
523
- },
524
551
  },
525
552
  wiringModProvenance: {
526
553
  at: "wiring_manifest mods[].provenance",
@@ -532,7 +559,6 @@ export const SELF_MINTED_WIRE = {
532
559
  extensionRequesterSeat: {
533
560
  at: "审批开卡帧上的 requestedBy(<帧>#requestedBy → 在场律)",
534
561
  members: {
535
- "tool_approval#requestedBy": { attr: "present-iff extension-initiated call", since: "7.138.0" },
536
562
  "approval_request#requestedBy": { attr: "present-iff extension-initiated call", since: "7.138.0" },
537
563
  },
538
564
  },
@@ -582,6 +608,7 @@ export const SELF_MINTED_WIRE = {
582
608
  members: {
583
609
  not_in_roster: { attr: "-", since: "7.133.0" },
584
610
  home_unresolvable: { attr: "-", since: "7.133.0" },
611
+ cc_rule_form: { attr: "-", since: "7.133.0" },
585
612
  },
586
613
  },
587
614
  invalidJsonReason: {
@@ -608,14 +635,23 @@ export const SELF_MINTED_WIRE = {
608
635
  },
609
636
  },
610
637
  workflowParkDeliveryResult: {
611
- at: "POST /v1/approvals/:id/decide · 应答口(workflow 子代停驻卡,持有它的 run 在本进程里跑):引擎答词 → 应答",
638
+ at: "POST /v1/approvals/:id/decide · 应答口(workflow 子代停驻卡,持有它的 run 读作 running、决定行已在记录栅栏里立住):引擎答词 → 应答",
612
639
  members: {
613
640
  driving: { attr: "200 {taskId: <workflow runId>, status: resuming, decision}(无结清证据)", since: "7.148.0" },
614
- already_taken: { attr: "同一决定 ⇒ 首张回执原样回放;另一个决定 ⇒ 409 decide.claim_lost", since: "7.148.0" },
641
+ already_taken: { attr: "200 同一张回执(单一仲裁之下 run 收下过的只可能是这同一个决定)", since: "7.151.0" },
615
642
  settled: { attr: "409 decide.gate_moved", since: "7.148.0" },
616
- not_parked_here: { attr: "409 decide.gate_moved", since: "7.148.0" },
617
- unreadable: { attr: "503 decide.store_unreachable", since: "7.148.0" },
618
- kept_parked: { attr: "400 decide.parked_restatement_unsupported(只在决断带续跑重述键时可达)", since: "7.148.0" },
643
+ not_parked_here: { attr: "200 同一张回执(决定已立住;run 收场后由收场送达交给宿主会话的下一跑)", since: "7.151.0" },
644
+ unreadable: { attr: "200 同一张回执(决定已立住;持有进程在下一个维护拍再交)", since: "7.151.0" },
645
+ kept_parked: { attr: "不可达(恒送决定;重述键在记录栅栏里判 ⇒ 400 decide.parked_restatement_unsupported)", since: "7.151.0" },
646
+ },
647
+ },
648
+ workflowParkDeliveryKind: {
649
+ at: "POST /v1/approvals/:id/decide · 应答口(workflow 子代停驻卡,持有它的 run 读作 running、决定行已在记录栅栏里立住):引擎答形 → 应答",
650
+ members: {
651
+ live: { attr: "按 results[0] 答(集 workflowParkDeliveryResult)", since: "7.148.0" },
652
+ suspending: { attr: "200 {taskId: <workflow runId>, status: resuming, decision}(决定已立住;run 收场后由收场送达交给宿主会话的下一跑)", since: "7.151.0" },
653
+ not_active: { attr: "200 {taskId: <workflow runId>, status: resuming, decision}(决定已立住;持有进程在下一个维护拍交,或 run 收场后由收场送达交)", since: "7.151.0" },
654
+ not_armed: { attr: "500(引擎不变量破:没有 checkpoint 座的 run 停驻不出这张卡)", since: "7.148.0" },
619
655
  },
620
656
  },
621
657
  settingsEnvCredentialMatch: {
@@ -685,6 +721,14 @@ export const SELF_MINTED_WIRE = {
685
721
  repo: { attr: "-", since: "1.214.2" },
686
722
  },
687
723
  },
724
+ scenarioSource: {
725
+ at: "GET /v1/capabilities/scenario#source · 503 state.scenario_assignment_unknown 体根 source",
726
+ members: {
727
+ request: { attr: "-", since: "7.152.0" },
728
+ ruling: { attr: "-", since: "7.119.0" },
729
+ deployment: { attr: "-", since: "7.119.0" },
730
+ },
731
+ },
688
732
  scenarioSkillSource: {
689
733
  at: "GET /v1/capabilities/scenarios/:name#skills[].source",
690
734
  members: {
@@ -768,7 +812,7 @@ export const SELF_MINTED_WIRE = {
768
812
  },
769
813
  },
770
814
  livePendingAdoptedRowKey: {
771
- at: "GET /v1/approvals livePending[] 行顶层 · /v1/approvals/stream live_pending 帧 · GET /v1/tool-approvals/:id pending 体(起服接管行)",
815
+ at: "GET /v1/approvals livePending[] 行顶层 · /v1/approvals/stream live_pending 帧 · GET /v1/tasks/:taskId/asks/:askId pending 体(起服接管行)",
772
816
  members: {
773
817
  mandated: { attr: "present-iff recorded on the ask row (adopted rows; same value as row.frame)", since: "7.143.0" },
774
818
  mandate: { attr: "present-iff recorded on the ask row (adopted rows; same value as row.frame)", since: "7.143.0" },
@@ -776,6 +820,15 @@ export const SELF_MINTED_WIRE = {
776
820
  liveFactsUnknown: { attr: "present-iff row.frame.liveFactsUnknown (adopted rows only)", since: "7.143.0" },
777
821
  },
778
822
  },
823
+ livePendingRowSourceKey: {
824
+ at: "GET /v1/approvals livePending[] 行顶层 · /v1/approvals/stream live_pending 帧 · GET /v1/tasks/:taskId/asks/:askId pending 体(委派子代的行)",
825
+ members: {
826
+ sourceSessionId: { attr: "present-iff fromSubagent (the delegated child's session id; same value as the key on row.frame.card)", since: "7.152.0" },
827
+ },
828
+ retired: {
829
+ originTaskId: { attr: "present-iff fromSubagent (the delegated child's session id; the same value now under sourceSessionId)", since: "7.52.0", until: "7.152.0" },
830
+ },
831
+ },
779
832
  approvalQueuePendingKey: {
780
833
  at: "GET /v1/approvals pending[] 行 · GET /v1/approvals/stream pending 帧(停驻技能卡的批准绑定三位;与助手收件箱行同一只投影)",
781
834
  members: {
@@ -787,7 +840,7 @@ export const SELF_MINTED_WIRE = {
787
840
  approvalQueueRowVerdict: {
788
841
  at: "GET /v1/approvals pending[] 行 · GET /v1/approvals/stream pending 帧(停驻门族)的 rowVerdict",
789
842
  members: {
790
- rowVerdict: { attr: "present-iff the row's stored bytes were judged on this listing", since: "7.144.0" },
843
+ rowVerdict: { attr: "always (every listed row is judged on this listing; 7.144.0–7.151.x: SQL rows could omit it)", since: "7.144.0" },
791
844
  },
792
845
  },
793
846
  approvalQueueRowAgent: {
@@ -917,11 +970,14 @@ export const SELF_MINTED_WIRE = {
917
970
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#images_url_credential(新提交;体 request.field_invalid + field images[i].url + reason url_userinfo|url_credential_param)": { attr: 400, since: "7.136.0" },
918
971
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_malformed(新提交;列表不是数组 / 条目不是对象 / 键值判不出形;体 request.field_invalid)": { attr: 400, since: "7.136.0" },
919
972
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_unknown_key(新提交;词表外的键;体 request.body_shape + unknownKeys)": { attr: 400, since: "7.136.0" },
920
- "POST /v1/tool-approvals/:id/respond#new_owner_after_adoption(收编之后的新属主;本副本上仍有引擎腿在等的活卡,决议交给那条腿)": { attr: 200, since: "7.136.0" },
921
- "GET /v1/tool-approvals/:id#previous_owner_after_adoption(收编之后的前属主;按问读口)": { attr: 404, since: "7.136.0" },
922
- "POST /v1/tool-approvals/:id/respond#edited_rule_text_refused_after_adoption(匿名活卡收编给具名主体后新属主交坏规则文本;体 request.body_shape;契约成文的判据,今天经 /v1/adoption 到不了)": { attr: 400, since: "7.136.0" },
923
973
  "POST /v1/tasks|/v1/runs#command_line_slots_without_sealed_key_store(stdio MCP 的 command / args 与 command hook 的 command / args;体 conflict.checkpoint_ctx_unsealable + field + reason no_key_store;POST /v1/tasks/stream 在终局帧上带本码;本服务自己的装配下不可达(装配期已对「店在而封签器缺席」拒启,见 submit-ctx.ts 自述))": { attr: 409, since: "7.136.0" },
924
974
  "ALL authenticated routes#bearer_token_without_scope_claim(鉴权桥验证腿;配了 service 凭据或多租 REQUIRE_PRINCIPAL 的部署;体通用 auth.unauthorized)": { attr: 401, since: "7.136.0" },
975
+ "ALL routes after the auth-bridge pre-authentication (not GET /health)#sso_token_foreign_scope(fleet 成员 FLEET_GENERATION 在场;验过签的登记中心登录令牌 scope ≠ FLEET_SCOPE〔缺席 = 缺省 scope〕;同一枚 Bearer 是本部署 service 凭据的不在此列;体 auth.scope_mismatch)": { attr: 403, since: "7.151.0" },
976
+ "ALL routes after the auth-bridge pre-authentication except POST /v1/admin/drain (not GET /health, /readyz, /metrics*)#drain_principal_confined(验过的人在 OPERATOR_DRAIN_PRINCIPALS;三来源同判:登记中心登录令牌 / 直连门 principal 令牌 / 受信主体头;先于门前读路、凭据门、写门与就绪 503、门后段与 405 / 404;体 auth.principal_confined)": { attr: 403, since: "7.152.0" },
977
+ "POST /v1/approvals/:sessionId/decide|POST /v1/assistant/tasks/:id/plan_review|peer_inbound 决断臂#direct_door_decider_confined(直连门:决定证明推出的决定者在 OPERATOR_DRAIN_PRINCIPALS;证明验过之后、任何归属读之前;零状态变化;体 auth.principal_confined)": { attr: 403, since: "7.152.0" },
978
+ "POST /v1/admin/drain#drain_principal(验过的人在 OPERATOR_DRAIN_PRINCIPALS;身份四元相符)": { attr: 200, since: "7.152.0" },
979
+ "GET /health#drain_principal_credential(配了 service 凭据;请求只带排空档主体的身份、没出示 service / trace 凭据 ⇒ 匿名四键形)": { attr: 200, since: "7.152.0" },
980
+ "POST /v1/tasks|/v1/tasks/stream|/v1/runs|其余 fail-closed 写口(计费提交 · bake · 改写门 · 破坏性会话写)与 POST /v1/tasks/:taskId/asks/:askId/decision 的停驻赎回臂#verified_sign_in_token_without_service_credential(部署只接了鉴权桥 —— AUTH_BRIDGE_ISSUER 或接了中心的回退 issuer —— 没配 SERVICE_AUTH_TOKEN(S)、没开 ALLOW_UNAUTHED_WRITES;请求出示鉴权桥验过的登记中心登录令牌;没带过门凭据的请求仍 503)": { attr: "该口自己的受理(POST /v1/runs 202 · POST /v1/tasks 同步 200 …)", since: "7.151.0" },
925
981
  "ALL principal-reading routes#principal_not_a_name(主体头 / SSO 令牌的 sub / 直连门 JWT 的 sub 不是一位主体的名字:空 / 空白 / 带控制、行段分隔或不可见格式字符;体 principal_not_a_name)": { attr: 400, since: "7.137.0" },
926
982
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#promptProfile(新提交;体 request.body_shape + unknownKeys [promptProfile])": { attr: 400, since: "7.137.0" },
927
983
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#skills[i].mods|agents[i].skills[j].mods(新提交;体 request.field_invalid)": { attr: 400, since: "7.137.0" },
@@ -931,6 +987,10 @@ export const SELF_MINTED_WIRE = {
931
987
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#user 层 / 形路径规则而执行环境的配置根读不出(沙箱车道没转 SEMA_CONFIG_DIR 且 home 未知;体 request.unprocessable + problems[].reason home_unresolvable;续跑 409 同句)": { attr: 422, since: "7.141.0" },
932
988
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#settings.permissions.allow 带层条目 { rule, layer }(新提交;layer = 设置来源词)": { attr: 200, since: "7.143.0" },
933
989
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#allow 桶里 user 层 / 形路径规则而执行环境的配置根读不出(沙箱车道没转 SEMA_CONFIG_DIR 且 home 未知;体 request.unprocessable + field settings.permissions.allow + problems[].reason home_unresolvable;续跑 409 同句)": { attr: 422, since: "7.143.0" },
990
+ "POST /v1/tasks/:taskId/asks/:askId/decision#remember(本会话放行;只配 approve;体带 rememberApplied)": { attr: 200, since: "7.152.0" },
991
+ "POST /v1/tasks/:taskId/asks/:askId/decision#persistRule(不再询问;首决体带回执规则位 rulePersisted / ruleRefusal / persistedRule / persistedRules / persistedRuleAnchors)": { attr: 200, since: "7.152.0" },
992
+ "POST /v1/tasks/:taskId/asks/:askId/decision#readRootGrant(添加读目录;只随不带 remember 的 approve,只在单用户 host 车道受理)": { attr: 200, since: "7.152.0" },
993
+ "POST /v1/approvals/:sessionId/decide#persistRule(停驻工具审批卡的首决;体带回执规则位 rulePersisted / ruleRefusal / persistedRule / persistedRules / persistedRuleAnchors)": { attr: 200, since: "7.152.0" },
934
994
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#限制侧名内带 *(excludeTools)": { attr: 200, since: "7.137.0" },
935
995
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#限制侧名内带 *(skills[i].disallowedTools|agents[i].skills[j].disallowedTools)": { attr: 200, since: "7.137.0" },
936
996
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#限制侧名内带 *(agents[i].denyTools)": { attr: 200, since: "7.137.0" },
@@ -979,6 +1039,9 @@ export const SELF_MINTED_WIRE = {
979
1039
  "POST /v1/approvals/:sessionId/decide|/v1/sessions/:id/wake|/v1/assistant/tasks/:id/resume|/v1/assistant/tasks/:id/plan_review#根会话 id 是本进程删过的会话 id、行上的住客不是删前属主(续跑家族 / 停驻赎回 / 工作流决断后的宿主新轮;认领之前,卡仍待决;体 resume_blocked_by_policy + blockedBy conflict.session_id_retired + retriable)": { attr: 409, since: "7.146.0" },
980
1040
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#scenario_assignment_unavailable(新提交;部署接了配置中心、请求带主体,而中心答不出这位主体的场景裁定:不可达 / 超时 / 答复读不出 / 指派两键形不对或只发一键;点名与不点名同拒;零 run;体 state.scenario_assignment_unavailable + permanence: transient,无 detail)": { attr: 503, since: "7.147.0" },
981
1041
  "GET /v1/capabilities/mcp|/v1/sessions/:id/a2a#scenario_assignment_unavailable(与提交腿同一只场景门;缺席与点名的场景名同拒;整面;体同上)": { attr: 503, since: "7.147.0" },
1042
+ "GET /v1/capabilities/scenario#scenario_unknown|scenario_not_allowed|scenario_conflict(门拒原样:点名不在册 / 白名单外 / 场景头与 ?scenario= 不同;体与同一请求形的提交拒体逐字同)": { attr: 400, since: "7.152.0" },
1043
+ "GET /v1/capabilities/scenario#scenario_assignment_unknown|scenario_assignment_unavailable(门拒原样:指派悬空 / 中心答不出;体同提交腿;答不出不回落任何缺省)": { attr: 503, since: "7.152.0" },
1044
+ "GET /v1/capabilities/mcp#scenario_conflict(场景头 x-agent-scenario 与 ?scenario= 不同;与提交腿同一只点名读法)": { attr: 400, since: "7.152.0" },
982
1045
  "POST /v1/approvals/:sessionId/decide|/v1/sessions/:id/wake|/v1/assistant/tasks/:id/resume|/v1/assistant/tasks/:id/plan_review#scenario_assignment_unavailable(续跑家族经装配的那几条;认领之前,卡仍待决;不折 resume_blocked_by_policy;体 state.scenario_assignment_unavailable + permanence: transient + retriable)": { attr: 503, since: "7.147.0" },
983
1046
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#settings.env 有成员不是帽内的串(新提交;只在采纳 env 的车道上:单用户 host / device,或采纳请求体 hooks 且请求带着 hooks;零 run;体 request.field_invalid + field settings.env,句子点名坐标、不回显值)": { attr: 400, since: "7.147.0" },
984
1047
  "POST /v1/approvals/:sessionId/decide|/v1/sessions/:id/wake|/v1/assistant/tasks/:id/resume|/v1/assistant/tasks/:id/plan_review#stored_unread_members(续跑将要跑的那一份体 —— 存量体,重述键在场时盖过重述之后 —— 里有本版读者读不出、而本部署本会采纳的成员:settings.hooks / settings.env / 其余 settings 延后键 / mcpServers[i].transport / a2aPeers[i].headers;认领之前,卡仍待决;体 resume_blocked_by_policy + blockedBy request.field_invalid + field + retriable)": { attr: 409, since: "7.147.0" },
@@ -997,10 +1060,25 @@ export const SELF_MINTED_WIRE = {
997
1060
  "POST /v1/tasks#park_commit_ended(同步腿停在要批的门上,而停驻提交答出这条 run 没有停住、已收场 —— 停驻写之前已按下取消 / 被失联收割 / 别处终结;卡已作废;体 = 收场那一行的信封,与同键重放同一只:终局行的结果,取消那一形 terminal.code cancelled;行上无结果 ⇒ 回执三键)": { attr: 200, since: "7.149.0" },
998
1061
  "POST /v1/approvals/:sessionId/decide|/v1/sessions/:id/wake|/v1/assistant/tasks/:id/resume|/v1/assistant/tasks/:id/plan_review#resume_park_ended(续跑腿再停 / 重开时停驻提交答出这条 run 已收场;卡已作废;体 status / errorCode = 收场那一行的,不带 retriable)": { attr: 200, since: "7.149.0" },
999
1062
  "POST /v1/runs/:id/interrupt#body_with_fields(体带任何顶层键 —— 含早先版本受理的 text;非对象体同答;判在查 run 之前:任何 run 状态、属主、存在与否同一只体;体 request.body_shape + unknownKeys(键全在此)+ unsupportedKeys(恒空))": { attr: 400, since: "7.148.0" },
1000
- "GET /v1/tool-approvals/:id#row_unreadable(有行的问,按 id 读行那一拍店抛 / 超时;本副本自己铸的活卡与起服接管的登记同答;体 not_found.ask,与查无 / 不是你的逐字节同)": { attr: 404, since: "7.149.0" },
1001
1063
  "POST /v1/sessions/:id/sync/plan|POST /v1/sessions/:id/sync/import|PUT /v1/sessions/:id/sync/blobs/:hash#foreign_session_deleting(推送三口的门:id 上是别的主体正在删除的会话 —— 删除围栏已立、尚未删净;「被占着」读活行 ∪ 在删行,与对别人的活行同答;本人 / fleet 对自己在删的会话不变,拉取口仍只认活行;体 not_found.session,与对不存在 id 的拉取答复逐字节同)": { attr: 404, since: "7.149.0" },
1002
1064
  "POST /v1/sessions/:id/sync/import#idle_id_other_principal_in_flight(第一阶段:id 上还没有会话行,而另一个主体在这只 id 上的第一阶段正在飞;导入租约键 = 落点属主格 + 会话 id,空闲 id 上各占各的;体 = 第一阶段的暂存回执 stagingId;先提交者得,输的那一份在提交前复判答 404 not_found.session,与赢家的提交撞在同一刻时由店的属主 CAS 拒 409 conflict)": { attr: 200, since: "7.149.0" },
1003
1065
  "POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_headers_reserved_member(新提交;a2aPeers[i].headers 的成员名是 constructor / prototype —— 与 mcpServers[i].transport.headers / .env 同一张保留成员名表、同一只读法,大小写敏感;体 request.field_invalid + field 成员级路径 a2aPeers[i].headers.<名>;存盘续跑体里同形 ⇒ 续跑家族既有一面 #stored_unread_members 409)": { attr: 400, since: "7.149.0" },
1066
+ "POST /v1/tasks|/v1/runs#rewindFilesTo_with_cascade(新提交;提交体同带非空串 `rewindFilesTo` 与 `cascade: true` —— 梯级每一级在引擎现铸的会话里跑、不取根,文件回退无处落地;拒在任何副作用之前、梯子一级都不起;体 request.field_conflict + reason cascade_verify + fields [rewindFilesTo, cascade];`/v1/tasks/stream` 上带 `cascade` 的提交本来就 400(同码),不入此面)": { attr: 400, since: "7.151.0" },
1067
+ "POST /v1/tasks/:taskId/asks/:askId/decision#parked_redeemed(问已转停驻、门仍开着,部署接了停驻赎回 —— 非直连门;交与 live 应答口停驻臂同一只赎回;体 = 本口基本键 + accepted parked_redeemed + 赎回受理体;受理之后决定记在问行上)": { attr: 200, since: "7.151.0" },
1068
+ "POST /v1/tasks/:taskId/asks/:askId/decision#parked_standing_same_key(问已转停驻、门上已站着一次决定,本次请求的 idempotencyKey 就是问行上记录的那一把;体 = 首决回放,与 DECIDED 行的回放同一只渲染)": { attr: 200, since: "7.151.0" },
1069
+ "POST /v1/tasks/:taskId/asks/:askId/decision#parked_standing_conflict(问已转停驻、门上已站着一次决定,本次请求不是记录上那一把键 / 没带键;体 conflict.ask_decided 回显首决;首决取问行上答的就是门上这一次的那份记录,否则取停驻门)": { attr: 409, since: "7.151.0" },
1070
+ "POST /v1/tasks/:taskId/asks/:askId/decision#parked_redemption_refused(问已转停驻、门仍开着,停驻赎回没生效且门此刻仍没决;体 = 赎回的拒原样:429 成本配额 + Retry-After / 503 服务凭据或就绪 / 409 approval_stale 或 conflict.not_resumable / 400 decide_requires_binding / 500;赎回的 404 改答本口的 not_found.ask)": { attr: "as the shared parked redemption answers (429 / 503 / 409 / 400 / 500; its 404 ⇒ 404 not_found.ask)", since: "7.151.0" },
1071
+ "POST /v1/tasks|/v1/tasks/stream|/v1/runs#userAttachments 的 path 条目在 e2b / k8s / local-docker / adb 车道上(目标给得出那一次观测:Linux、挂着 /proc、有 timeout / readlink / stat / head / base64)与 device 车道上(执行器声明修订号 ≥ 6 且在 hello.supports 声明了 openBound)—— human_input.attachments[].outcome": { attr: "attached", since: "7.151.0" },
1072
+ "GET /v1/device/ws#instruction kind openBound(server → executor;协议修订号 6 的 kind,只派发给声明修订号 ≥ 6 且 hello.supports 声明了它的执行器;args { path, op: open|size|readBytes|list, identity?, kind?, max? })": { attr: "dispatched-iff-declared", since: "7.151.0" },
1073
+ "GET /v1/device/ws#result outcome stat.identity(openBound 开答的 <device>:<inode>;可选串,不是串 ⇒ bad_shape)": { attr: "accepted", since: "7.151.0" },
1074
+ "POST /v1/sessions/:id/sync/import/:stagingId/entries|POST /v1/sessions/:id/sync/import#landed_occupant_gone(条目已提交 / identical 短路之后,写文件历史 · 会话规则 · 回退锚 · 行两位的落定段段首锁会话根行,读出落定的那一位住客已不在:会话被删、或同 id 被重建 —— 含同一属主;段体零字节写;体 conflict + sync conflict,不带 relation;运维 warn session_sync_landed_occupant_gone)": { attr: 409, since: "7.151.0" },
1075
+ "POST /v1/sessions/:id/sync/import/:stagingId/entries#staged_commit_occupant_changed(暂存提交时这只 id 上的会话已不是第一阶段门判过的那一位住客:属主或化身不同 —— 含同一属主删建;提交事务回滚;体 conflict + 暂存导入住客已变的固定句)": { attr: 409, since: "7.151.0" },
1076
+ "GET /v1/sessions/:id/sync/manifest|/v1/sessions/:id/sync/entries|/v1/sessions/:id/sync/history/blobs/:hash#occupant_changed_after_gate(门读到住客之后、答复发出之前复判:这只 id 上已不是门承认的那一位 —— 删了 / 同 id 重建;含否定答复 404 not_found.blob;entries 在应答头发出之前;体 not_found.session,与门后被删同体)": { attr: 404, since: "7.151.0" },
1077
+ "GET /v1/sessions/:id/sync/entries#occupant_changed_mid_stream(应答头已发;每页交出之前复判不中 ⇒ 流结束、不写尾行 = 截断;运维 info session_sync_pull_occupant_changed)": { attr: 200, since: "7.151.0" },
1078
+ "POST /v1/sessions/:id/sync/plan|POST /v1/sessions/:id/sync/import#occupant_changed_after_gate(门读到住客之后、非故障出口发出之前复判占位头:已不是那一位;含关系体、422 缺块、409 写者 / 活跃拒;体 conflict + sync conflict,不带 relation)": { attr: 409, since: "7.151.0" },
1079
+ "POST /v1/sessions/:id/sync/import/:stagingId/entries#pre_commit_activity_occupant_changed(提交前的活性复查:门读到住客、读到一份活 run / 活子代之后,复判这只 id 上已不是那一位 —— 那份活性是别一代的;暂存放掉;体 conflict + sync conflict,不带 activeTaskId / children)": { attr: 409, since: "7.151.0" },
1080
+ "PATCH /v1/sessions/:id#session_deleting(门那一读之后会话进了在删:删除围栏已立、尚未删净;行格判官把在删读作行不在;零写;体 not_found.session)": { attr: 404, since: "7.151.0" },
1081
+ "PUT /v1/sessions/:id/policy#occupant_changed_after_gate(门读到的那一位住客在写规则的落定段段首已不在:删了 / 同 id 重建;零写;体 not_found.session,与门同体)": { attr: 404, since: "7.151.0" },
1004
1082
  },
1005
1083
  retired: {},
1006
1084
  },
@@ -1032,11 +1110,44 @@ export const SELF_MINTED_WIRE = {
1032
1110
  sessionMemoryStatusKey: {
1033
1111
  at: "GET /v1/sessions/:id/memory-status 200 体顶层键(<键> → 在场律)",
1034
1112
  members: {
1035
- memorySync: { attr: "present-iff this deployment runs a memory sync leg;{parked:[{scope,wayOut}]} in sync order;parked:[] ⇔ no layer parked;deployment fact (same for every session, ?scope= not applied)", since: "7.141.0" },
1113
+ memorySync: { attr: "present-iff this deployment runs a memory sync leg;{parked:[entry]} in sync order (entry keys: memorySyncParkedKey);parked:[] ⇔ no layer parked;deployment fact (same for every session, ?scope= not applied)", since: "7.151.0" },
1036
1114
  writeHome: { attr: "present-iff the engine answered it ∧ the single-user host lane (the capability bit projectContext's range predicate: hosted / sandbox / device / no-hands lanes ⇒ absent);the engine's absolute directory, byte for byte;with ?scope= that store's engine answer;without ?scope= the session-level home the engine chose across the stores (the newest store's own home;absent while any store's reading is unreadable, on a same-instant tie, or when no store names one)", since: "7.146.0" },
1037
1115
  planes: { attr: "present-iff no ?scope= ∧ the single-user host lane (same predicate as writeHome);[{plane:\"project\"|\"personal\", writeHome?}] one row per store in the engine's store order, each row the engine's own answer for that store (writeHome verbatim, absent when that store names none);the rows' other keys are not on the wire", since: "7.146.0" },
1038
1116
  },
1039
1117
  },
1118
+ memorySyncParkedKey: {
1119
+ at: "GET /v1/sessions/:id/memory-status memorySync.parked[] 条目键(<键> → 在场律)",
1120
+ members: {
1121
+ scope: { attr: "always;the layer's key (the sync layer first, then the owner's project layers by key)", since: "7.141.0" },
1122
+ wayOut: { attr: "always;closed set memorySyncWayOut", since: "7.141.0" },
1123
+ cause: { attr: "always;closed set memorySyncParkCause;why the layer is parked (not the trigger of the round that hit it)", since: "7.151.0" },
1124
+ axis: { attr: "present-iff cause is cursor_refused ∧ the engine's reading is inside both closed sets (axis in memorySyncCursorAxis ∧ found in memorySyncCursorFound;an unknown word in either ⇒ both keys absent);the axis the engine refused the cursor on", since: "7.151.0" },
1125
+ found: { attr: "present-iff axis is present (the two keys come as a pair);closed set memorySyncCursorFound;whether the cursor has no binding on that axis (absent) or is bound to another value (other)", since: "7.151.0" },
1126
+ },
1127
+ },
1128
+ memorySyncParkCause: {
1129
+ at: "GET /v1/sessions/:id/memory-status memorySync.parked[].cause",
1130
+ members: {
1131
+ cursor_refused: { attr: "-", since: "7.151.0" },
1132
+ cursor_unusable: { attr: "-", since: "7.151.0" },
1133
+ },
1134
+ },
1135
+ memorySyncCursorAxis: {
1136
+ at: "GET /v1/sessions/:id/memory-status memorySync.parked[].axis",
1137
+ members: {
1138
+ scope: { attr: "-", since: "7.151.0" },
1139
+ peer: { attr: "-", since: "7.151.0" },
1140
+ store: { attr: "-", since: "7.151.0" },
1141
+ incarnation: { attr: "-", since: "7.151.0" },
1142
+ },
1143
+ },
1144
+ memorySyncCursorFound: {
1145
+ at: "GET /v1/sessions/:id/memory-status memorySync.parked[].found",
1146
+ members: {
1147
+ absent: { attr: "-", since: "7.151.0" },
1148
+ other: { attr: "-", since: "7.151.0" },
1149
+ },
1150
+ },
1040
1151
  memorySyncWayOut: {
1041
1152
  at: "GET /v1/sessions/:id/memory-status memorySync.parked[].wayOut",
1042
1153
  members: {
@@ -1080,8 +1191,6 @@ export const SELF_MINTED_WIRE = {
1080
1191
  "session faces · list faces · /metrics family#dev-open-principal-header-not-owner": { attr: "each face's missing-row answer, same body as a missing row (404 not_found.session on GET /v1/sessions/:id · /head · /events · /memory-status · /execution-placement · PATCH /v1/sessions/:id · fork · sync reads (manifest · entries · history blob) · memory/erase · background · background/stop · mcp/reconnect · policy · notify; approval exemptions 404 not_found.session (not found); DELETE /v1/sessions/:id 200 {deleted:false}; sync push family (plan · import · blob put) 404 on another owner's session, its existing create answer on a missing id); GET /v1/sessions · /v1/fleet/stream · /v1/agents/roster · /v1/tasks (trace list) · /v1/usage/* · /v1/sendfile-links pinned to the named caller; /metrics* and GET /v1/tasks/source-summary 401 auth.unauthorized (operator sentence; METRICS_TOKEN, when configured, still opens /metrics* and is judged first); a Bearer this deployment cannot verify does not count as naming no principal (no fleet); a caller naming no principal and presenting no unverifiable credential unchanged (fleet); was 200 / fleet-wide (the principal header read as a label)", since: "7.149.0" },
1081
1192
  "owner-only session ports#unreadable-archive-ownerless-session-fleet-or-operator": { attr: "answered as on a readable archive: background · background/stop · notify · mcp/reconnect · execution-placement · approval exemptions list / revoke (the gate skips the placement read only when both hypotheses admit the caller); was 500 corrupt_session", since: "7.148.0" },
1082
1193
  "run faces#row-without-owner-cell-no-fleet-no-operator": { attr: "the face's missing-row answer for every caller without a fleet or operator qualification on that face; was: a caller without a principal passed on some faces (absent equals absent)", since: "7.148.0" },
1083
- "POST /v1/tool-approvals/:id/respond#ask-not-visible-to-caller(查无 / 不是调用方的 / 行读不出 / 本 worker 没有问账)": { attr: "404 not_found.ask (no such approval ask (never existed, no longer kept, or not yours)), one body for every form, no state facts — the durable decision door's word; was 404 tool_approval.not_pending with cause unknown_or_other_replica (no cause on a worker without an ask ledger)", since: "7.148.0" },
1084
- "GET /v1/tool-approvals/:id#ask-not-visible-to-caller(查无 / 不是调用方的 / 行读不出 / 本 worker 没有问账)": { attr: "404 not_found.ask, the same body as the respond door; was 404 tool_approval.not_pending with cause unknown_or_other_replica (no cause on a worker without an ask ledger)", since: "7.148.0" },
1085
1194
  "GET /v1/workflows/:id · /journal · /stream · POST /v1/workflows/:id/agents/:label/steer#session-assertion-mismatch": { attr: "404 not_found.workflow (workflow not found), same body as a missing workflow; was 404 not_found.run (workflow not found)", since: "7.148.0" },
1086
1195
  },
1087
1196
  },
@@ -1097,6 +1206,17 @@ export const SELF_MINTED_WIRE = {
1097
1206
  "409 conflict.session_active_run#activeTaskId": { attr: "always on this face;the run holding the session's durable claim (the message names it too)", since: "7.147.0" },
1098
1207
  },
1099
1208
  },
1209
+ sessionOccupantWire: {
1210
+ at: "session occupancy keys activeTaskId / activeTaskStatus (<face>#<key> → reading / presence)",
1211
+ members: {
1212
+ "GET /v1/sessions/:id/head 200#activeTaskId": { attr: "present-iff a durable run store is wired (DB_BACKEND=mysql|pg|local);the run holding the session's claim, null once released;same projection as the 409 conflict.session_active_run body;re-read of the head after a non-null holder, occupant changed ⇒ 404 like a missing session", since: "7.152.0" },
1213
+ "GET /v1/sessions/:id/head 200#activeTaskStatus": { attr: "present-iff activeTaskId names a run whose stored row is running | suspended | needs_review;same projection as the 409 body", since: "7.152.0" },
1214
+ "GET /v1/sessions/:id/head#ETag": { attr: "the sha256 base64url of the 200 body bytes (leaf and occupancy are both version);was the quoted leafId", since: "7.152.0" },
1215
+ "DELETE /v1/sessions/:id 409 conflict.session_active_run#activeTaskStatus": { attr: "present-iff the holder's stored row is running | suspended | needs_review;same projection as the head probe", since: "7.152.0" },
1216
+ "POST /v1/sessions/:id/rewind-files 409 conflict.session_active_run#activeTaskStatus": { attr: "present-iff the holder's stored row is running | suspended | needs_review;same projection as the head probe", since: "7.152.0" },
1217
+ "submit and resume faces 409 conflict.session_active_run#activeTaskId": { attr: "null when the claim was released between the write's collision and its observation;was the empty string", since: "7.152.0" },
1218
+ },
1219
+ },
1100
1220
  adoptionImportOutcome: {
1101
1221
  at: "POST /v1/adoption/:id/sessions 200 results[].outcome",
1102
1222
  members: {
@@ -1169,6 +1289,7 @@ export const SELF_MINTED_WIRE = {
1169
1289
  refusalSentenceForm: {
1170
1290
  at: "拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变)",
1171
1291
  members: {
1292
+ "409 conflict#staged_import_commit(会话同步推送第二阶段的提交:暂存提交的住客 CAS 没过)": { attr: "session changed hands while the import streamed (deleted, re-created or re-owned); nothing was imported — start the sync again", since: "7.151.0" },
1172
1293
  "401 auth.unauthorized#operator(/metrics* · GET /v1/tasks/source-summary)": { attr: "… send the deployment's service token … without a principal header where this deployment lets its service token act for the deployment itself (GET /health reports it as auth.serviceTokenActsForDeployment; …), or a read-only token this endpoint accepts (…)", since: "7.146.0" },
1173
1294
  "422 invalid_entries#row_contract(会话同步推送第二阶段;收编批量导入同句进逐元素 detail)": { attr: "malformed entry (id and parentId must be strings of 1-64 characters, type a string of 1-32 characters)", since: "7.146.0" },
1174
1295
  "404 not_found.run#a*/wa* id(compact · detach · 子代动词口;各 run 口的非属主臂)": { attr: "run not found — \"<id>\" looks like an agent handle (a*/wa* domain) … (the handle hint, same sentence as the missing-row arm)", since: "7.148.0" },
@@ -1179,7 +1300,7 @@ export const SELF_MINTED_WIRE = {
1179
1300
  "400 request.field_invalid#title.no_visible_character(PATCH /v1/sessions/:id · 会话同步 2c 导入的 title)": { attr: "title must contain at least one visible character", since: "7.136.0" },
1180
1301
  "503 state.file_history_unreadable#store_connection_fault(会话同步三条拉取读腿)": { attr: "this session's stored state could not be read right now (the store connection failed), so nothing was exported — retry later", since: "7.136.0" },
1181
1302
  "503 state.file_history_unreadable#store_deployment_fault(会话同步三条拉取口)": { attr: "this session's stored state cannot be read: the store does not match what this deployment requires (a table is missing or the database account lacks a privilege), so nothing was exported — retrying will not help until an operator repairs the store", since: "7.137.0" },
1182
- "connect_failed(run 失败终局)#snapshot_bucket_missing(k8s 车道读 latest 得 404 NoSuchBucket;连沙箱失败,一只 pod 都不建)": { attr: "workspace space pointer read failed (snapshot_bucket_missing): the workspace snapshot bucket <name> (WORKSPACE_SNAPSHOT_BUCKET; default workspaces) does not exist in the object store — refusing to start this run … Ways out: create the bucket, or set WORKSPACE_SNAPSHOT_BUCKET to one that exists, or set WORKSPACE_PERSIST=off …", since: "7.136.0" },
1303
+ "env.snapshot_bucket_missing#snapshot_bucket_missing(k8s 车道读 latest / 取快照归档得 404 NoSuchBucket;建连的立定拒 —— 不留 pod〔读 latest 不建,取归档建的那只释放〕,执行环境记住它直到销毁)": { attr: "workspace space pointer read failed (snapshot_bucket_missing): the workspace snapshot bucket <name> (WORKSPACE_SNAPSHOT_BUCKET; default workspaces) does not exist in the object store — refusing to start this run … Ways out: create the bucket, or set WORKSPACE_SNAPSHOT_BUCKET to one that exists, or set WORKSPACE_PERSIST=off …", since: "7.151.0" },
1183
1304
  "400 request.field_invalid#images[i].url.credential": { attr: "<field> <规则句> — the URL is kept as written (a parked task's resume context, logs), while images[i] can carry the image bytes inline: send { data, mimeType } instead of a URL that holds the credential", since: "7.136.0" },
1184
1305
  "400 request.field_invalid#images.not_array": { attr: "head: images is <shape>, not an array of image entries", since: "7.148.0" },
1185
1306
  "400 request.field_invalid#images[i].not_object": { attr: "head: images[i] is <shape>, not an image entry (an object)", since: "7.148.0" },
@@ -1215,13 +1336,18 @@ export const SELF_MINTED_WIRE = {
1215
1336
  "409 conflict.session_memory_unobserved#no_leaf": { attr: "this session has no transcript yet, so there is no revision to sync from — run a task in it (…), then sync", since: "7.143.0" },
1216
1337
  "400 request.field_invalid#unread_request_members(新提交:settings.env 有成员不是帽内的串;嵌入方直调装配时四座同句)": { attr: "this request carries a member|members this server version's readers cannot take as written, on a deployment that would apply it|them: <坐标,至多 8 处>[ (and <n> more)] — running it would silently leave that member|those members out (a hook that guards a tool, an MCP server's credentials); submit it again with this member|these members in the current form", since: "7.147.0" },
1217
1338
  "409 resume_blocked_by_policy#unread_members(续跑四门 · steer 铸唤醒卡之前)": { attr: "resume blocked by an admission policy change: <同上一句>", since: "7.147.0" },
1339
+ "503 auth.service_token_required#task_submissions(计费提交 · bake · 改写门;停驻赎回席同句)": { attr: "this worker requires a service auth token (set SERVICE_AUTH_TOKEN) or a verified registry sign-in token before accepting task submissions", since: "7.151.0" },
1340
+ "503 auth.service_token_required#destructive_session_writes": { attr: "this worker requires a service auth token (set SERVICE_AUTH_TOKEN) or a verified registry sign-in token before accepting destructive session writes (policy / sync-import / fork / delete)", since: "7.151.0" },
1341
+ "413 request.payload_too_large#store_row_too_large(POST /v1/tasks|/v1/tasks/stream|/v1/runs;续跑输入一行装不下,row / statement / value 三墙)": { attr: "the database refused to store this task: it is larger than the database keeps in one row|accepts in one statement|PostgreSQL holds in one value — nothing was run; <出路>", since: "7.151.0" },
1342
+ "adopt_failed|track_failed|snapshot_failed|restore_failed#store_fault(文件历史店的失败句:会话同步推送与 blob 交换的拒体 · rewind / restore 的逐文件失败句)": { attr: "<动作> failed: <类别句> [original code: <原码>]", since: "7.151.0" },
1343
+ "子代失败句#store_fault(tool_end 子代卡 structured.errorMessage · 后台子代通告的 summary · GET /v1/runs/:id/subagents/:handle/output 的 content / output · 父模型读到的子代报告行)": { attr: "<类别句> [original code: <原码>](与 run 终局 terminal.failed.message 同一句)", since: "7.151.0" },
1344
+ "501 feature.approval_ask_disabled#POST /v1/tasks/:taskId/asks/:askId/decision · GET /v1/tasks/:taskId/asks/:askId": { attr: "the durable stream-approval ask ledger is not enabled on this worker (needs a store backend (DB_BACKEND) and DURABLE_APPROVAL)", since: "7.152.0" },
1218
1345
  },
1219
1346
  },
1220
1347
  decisionBodyKey: {
1221
1348
  at: "回决门族决断体的受理键(<端点>#<键> → 读法;只登本版新增的键)",
1222
1349
  members: {
1223
1350
  "POST /v1/assistant/tasks/:id/plan_review#checkpointId": { attr: "optional;non-empty-string≤128;not-current⇒409 approval_stale;direct-door:signed-envelope-ext", since: "7.137.0" },
1224
- "POST /v1/tool-approvals/:id/respond#decidedVia": { attr: "optional;DECIDED_VIA word beside decidedBy \"policy\" only;else⇒400 request.field_invalid (this door: request.body_shape)", since: "7.143.0" },
1225
1351
  "POST /v1/tasks/:taskId/asks/:askId/decision#decidedVia": { attr: "optional;DECIDED_VIA word beside decidedBy \"policy\" only;else⇒400 request.field_invalid", since: "7.143.0" },
1226
1352
  "POST /v1/approvals/:sessionId/decide#decidedVia": { attr: "optional;DECIDED_VIA word beside decidedBy \"policy\" only;else⇒400 request.field_invalid;direct-door:never accepted", since: "7.143.0" },
1227
1353
  "POST /v1/assistant/tasks/:id/plan_review#decidedVia": { attr: "optional;DECIDED_VIA word beside decidedBy \"policy\" only;else⇒400 request.field_invalid;direct-door:never accepted", since: "7.143.0" },
@@ -1270,6 +1396,7 @@ export const SELF_MINTED_WIRE = {
1270
1396
  answer: { attr: "POST /v1/approvals/:sessionId/decide", since: "7.87.0" },
1271
1397
  checkpointId: { attr: "POST /v1/assistant/tasks/:id/plan_review", since: "7.137.0" },
1272
1398
  permissionModeAfter: { attr: "POST /v1/assistant/tasks/:id/plan_review", since: "7.87.0" },
1399
+ persistRule: { attr: "POST /v1/approvals/:sessionId/decide", since: "7.152.0" },
1273
1400
  },
1274
1401
  },
1275
1402
  storeFaultPermanence: {
@@ -1289,13 +1416,14 @@ export const SELF_MINTED_WIRE = {
1289
1416
  },
1290
1417
  },
1291
1418
  deviceProtocolRevision: {
1292
- at: "GET /v1/capabilities deviceExecutor.protocolVersion 与 device WS challenge 帧的修订号(<修订号> → 它加进结局码闭集的词;零加词的语义修订 → 变更名)",
1419
+ at: "GET /v1/capabilities deviceExecutor.protocolVersion 与 device WS challenge 帧的修订号(<修订号> → 它加的词:结局码 `+词`、下发指令 kind `+kind:词`;两张表都零加词的语义修订 → 变更名)",
1293
1420
  members: {
1294
1421
  1: { attr: "base", since: "7.51.0" },
1295
1422
  2: { attr: "+liveness_no_output", since: "7.133.0" },
1296
1423
  3: { attr: "+name_too_long", since: "7.137.0" },
1297
1424
  4: { attr: "+symlink_loop", since: "7.143.0" },
1298
1425
  5: { attr: "paths-unfolded", since: "7.150.0" },
1426
+ 6: { attr: "+kind:openBound", since: "7.151.0" },
1299
1427
  },
1300
1428
  },
1301
1429
  hookNonBlockingFailureReason: {
@@ -1363,6 +1491,7 @@ export const SELF_MINTED_WIRE = {
1363
1491
  "GET /v1/config/catalog#rows[MODEL_ROUTER_ID].derivedDefaultNote": { attr: "absent=>classifier-role-in-served-table", since: "7.143.0" },
1364
1492
  "GET /v1/config/catalog#rows[MINIO_BUCKET].semantics": { attr: "leader-diff-out-bucket;independent-of-WORKSPACE_SNAPSHOT_BUCKET", since: "7.148.0" },
1365
1493
  "GET /v1/config/catalog#rows[MINIO_BUCKET].derivedDefaultNote": { attr: "absent=>WORKSPACE_SNAPSHOT_BUCKET_DEFAULT(not-the-explicit-value)", since: "7.148.0" },
1494
+ "GET /v1/config/catalog#rows[ALLOW_UNAUTHED_WRITES].semantics": { attr: "write-gate-admits-requests-without-a-gate-credential(service-token|verified-sign-in-token);submissions+rewrites+destructive-session-writes", since: "7.151.0" },
1366
1495
  "GET /v1/sessions/:id/mcp#servers[].error": { attr: "exit-seat:mcp-remote-text(engine-mark=masked-value)+truncate:200", since: "7.138.0" },
1367
1496
  "POST /v1/sessions/:id/mcp/reconnect#reason|status.error|listingIncomplete.error": { attr: "exit-seat:mcp-remote-text(engine-mark=masked-value)+truncate:200", since: "7.138.0" },
1368
1497
  "GET /v1/config/catalog#rows[MODEL_VISION].semantics": { attr: "names-engine-notice:model.capability_downgraded", since: "7.137.0" },
@@ -1378,6 +1507,10 @@ export const SELF_MINTED_WIRE = {
1378
1507
  "GET /v1/runs/:id/events#text.text(段文本含只有 text_end 的块)": { attr: "segment-text=block-texts-concat;end-only-block=text_end.content", since: "7.144.0" },
1379
1508
  "POST /v1/approvals/:sessionId/decide|/v1/assistant/tasks/:id/plan_review|/v1/assistant/tasks/:id/resume|/v1/sessions/:id/wake#errorCode(引擎拒 checkpoint.invalid_outcome)": { attr: "decision-cause⇒cause-code;row-own(reason)|no-cause⇒checkpoint.invalid_outcome", since: "7.147.0" },
1380
1509
  "POST /v1/approvals/:sessionId/decide#errorCode(这一行自己的拒:读行臂 / 门型守卫之前)": { attr: "rowVerdict.code+reason+retriable:true(engine-judge;before-gate)", since: "7.147.0" },
1510
+ "GET /v1/approvals#pending[].input": { attr: "question|plan-whole;other-fold>32768-utf8-bytes;marker.bytes=utf8-bytes", since: "7.152.0" },
1511
+ "GET /v1/approvals#pending[](动作事实)": { attr: "one-whole-row-decode(the bytes resume executes);sql≡local;undecodable⇒null|absent+rowVerdict≠ok", since: "7.152.0" },
1512
+ "SSE question#questions": { attr: "redacted-whole;no-size-cap;unserializable⇒no-frame", since: "7.152.0" },
1513
+ "SSE tool_approval#args(approval_request card.args · card_json · acceptableForm 同读)": { attr: "question|plan-whole;other-omitted>32768-utf8-bytes", since: "7.152.0" },
1381
1514
  },
1382
1515
  },
1383
1516
  };
@@ -1,7 +1,7 @@
1
1
  import { expandTiers, modelOriginOf, resolveTaskModel as coreResolveTaskModel } from "@sema-agent/core";
2
2
  import { CATALOG_REPLACES_ENV_MODELS_CODE, SandboxGitConfig, WEB_ADMIN_ENV, envModelsDecisionTag, formatConfigPath, narrowAtMention, parseDomainSalvaged, resolveActiveTiers, resolveCatalogDefaultModel, sanitizeZodError } from "@sema-agent/settings-schema";
3
3
  import { modelKeyPoison } from "../key-resolver.js";
4
- import { DEFAULT_MODEL_REF, buildEnvModelIdNotServedNotice, mintCapabilityKeys, readAtMention, servedModelTableLeg } from "../model-select.js";
4
+ import { CATALOG_REFUSAL_LEG, DEFAULT_MODEL_REF, buildEnvModelIdNotServedNotice, mintCapabilityKeys, readAtMention, servedModelTableLeg } from "../model-select.js";
5
5
  import { applyAutoCompactWindow, buildModelCostKey, isRosterGateArmed, ownCredentialHitsInForce, parseAutonomy, unmatchableToolNamesRefusal } from "../config.js";
6
6
  import { NAME_TABLE_BEHAVIOR, retiredLeftOutEntries } from "../namespaced-rule-name.js";
7
7
  import { buildModelCompat, readModelCompat } from "../model-compat.js";
@@ -501,7 +501,7 @@ function stageModelPlane(config, eff, source, logger, sealedKeys) {
501
501
  const noDefault = crossInvariant("default-model-resolvable").check({ live: config, next: nextView });
502
502
  if (noDefault !== undefined)
503
503
  return refuse(DEFAULT_MODEL_MISSING_CODE, noDefault);
504
- const endpoint = judgeModelRouteEndpoint(nextView, "catalog");
504
+ const endpoint = judgeModelRouteEndpoint(nextView, CATALOG_REFUSAL_LEG);
505
505
  if (endpoint !== undefined)
506
506
  return refuse(endpoint.code, endpoint.reason);
507
507
  const minted = crossInvariant("refused-names-not-minted").check({ live: config, next: nextView });
@@ -28,8 +28,8 @@ import { z } from "zod";
28
28
  import { type ConfigDocumentRefusal, type DroppedEntryIdentity, type DroppedEntryReasonCode, type EffectiveReadWarning } from "@sema-agent/settings-schema";
29
29
  /**
30
30
  * 远端读腿在过契约读腿(`readEffectiveWire`)**之前**把退役域键分出去:wire 体上每个退役域键过契约的同一只墓碑(`refuseRetiredDomain`)——
31
- * 带事实 ⇒ 一份被拒文档(契约的类型 `ConfigDocumentRefusal` 的墓碑臂:`document` = 退役域名,`reason: "retired_domain"`,`error` / `migration` 取
32
- * `RetiredDomainError` 的同名字段)、这一键从体上拿掉(其余域照读、版本照读,判官整拒这份候选);缺席 / `{}` ⇒ 不理会(契约读腿自己丢 `{}`)。
31
+ * 带事实 ⇒ 一份被拒文档(契约的类型 `ConfigDocumentRefusal` 的墓碑臂:`document` = 退役域名,`reason: "retired_domain"`,`error` 取
32
+ * `RetiredDomainError` 的拒句)、这一键从体上拿掉(其余域照读、版本照读,判官整拒这份候选);缺席 / `{}` ⇒ 不理会(契约读腿自己丢 `{}`)。
33
33
  * 体不是对象 ⇒ 原样交回、不判(载荷形错,契约读腿抛)。墓碑判据只在契约包,这里只分键。
34
34
  * 被拒文档是两条读腿同形的发现(判决只在候选判官 `candidate-gate.ts` 的 `judgeConfigCandidate`,成因词 = 发现自带的 `reason`):本地腿的被拒文档是契约单读口
35
35
  * `FileConfigStore.read()` 那一读的拒单原样(`config-provider.ts`),wire 上没有文件层,只有这一种墓碑。`error` 本模块不脱敏(与折叠产物同律):各腿在自己的产出边界上过
@@ -12,7 +12,7 @@ export function separateRetiredDomains(body) {
12
12
  catch (e) {
13
13
  if (!(e instanceof RetiredDomainError))
14
14
  throw e;
15
- refused.push({ document: e.domain, reason: "retired_domain", error: e.message, migration: e.migration });
15
+ refused.push({ document: e.domain, reason: "retired_domain", error: e.message });
16
16
  delete rest[domain];
17
17
  }
18
18
  }
@@ -343,7 +343,7 @@ export interface EffectiveConfig {
343
343
  * [ref] 批1 —— **limitsHttp 组的热更新发布域**([ref] §6 批1)。
344
344
  *
345
345
  * 限额五闸(rateLimitPerMin / maxTaskCostUsd / maxTaskTokens / maxPrincipalCostUsd / costQuotaWindowSec)与其余限额键的**唯一**发布位:
346
- * settings-schema 11 退役了 `runtime` 域(它曾承载前五键;存量由一次性迁移 SS-M1 搬进本域,读腿对带事实的 `runtime` 整份拒),
346
+ * settings-schema 11 退役了 `runtime` 域(它曾承载前五键;读腿对带事实的 `runtime` 整份拒 —— 搬它进本域的那一步一次性迁移随契约 26.0.0 删了,存量手写到本域),
347
347
  * 本仓的旧位读法随之删 —— 一个键一个发布位,没有「两处同现谁赢」的优先级规则。两条腿都读它(本地腿:`config.d/limits.json`,
348
348
  * `limits` 在 PORTABLE_DOMAINS 里)。
349
349
  */