@sema-agent/server 7.147.0 → 7.148.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 (725) hide show
  1. package/MIGRATION.md +1039 -24
  2. package/README.md +20 -7
  3. package/README.zh-CN.md +14 -8
  4. package/USAGE.md +380 -163
  5. package/deploy/sema-up/README.md +16 -5
  6. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  7. package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
  8. package/deploy/sema-up/chart/values.yaml +3 -2
  9. package/deploy/sema-up/cluster-up.sh +74 -176
  10. package/deploy/sema-up/kube-up.sh +29 -49
  11. package/deploy/sema-up/lib/chart-run.sh +23 -0
  12. package/deploy/sema-up/lib/dataroot.sh +3 -3
  13. package/deploy/sema-up/lib/health.sh +62 -13
  14. package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
  15. package/deploy/sema-up/lib/helm-values-kube.py +35 -0
  16. package/deploy/sema-up/lib/regcred.py +8 -0
  17. package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
  18. package/deploy/sema-up/lib/remote/image-import.sh +6 -0
  19. package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
  20. package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
  21. package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
  22. package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
  23. package/deploy/sema-up/lib/render-stack.py +17 -0
  24. package/deploy/sema-up/lib/shell-text.sh +87 -0
  25. package/deploy/sema-up/lib/usage-flags.txt +10 -0
  26. package/deploy/sema-up/lib/usage-head.txt +1 -0
  27. package/deploy/sema-up/lib/usage-tail.txt +13 -0
  28. package/deploy/sema-up/preflight.sh +10 -8
  29. package/deploy/sema-up/sema-up.sh +14 -39
  30. package/deploy/sema-up/smoke.sh +7 -6
  31. package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
  32. package/deploy/sema-up/stack/compose.yaml +13 -1
  33. package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
  34. package/dist/adoption/plan.d.ts +24 -0
  35. package/dist/adoption/plan.js +53 -1
  36. package/dist/adoption/runner.d.ts +10 -1
  37. package/dist/adoption/runner.js +36 -16
  38. package/dist/adoption/wire.d.ts +3 -3
  39. package/dist/approval-card.d.ts +28 -30
  40. package/dist/approval-gate-currency.js +3 -2
  41. package/dist/approval-reconciler.d.ts +4 -13
  42. package/dist/approval-reconciler.js +2 -2
  43. package/dist/approval.d.ts +13 -11
  44. package/dist/approval.js +3 -3
  45. package/dist/audit.d.ts +10 -3
  46. package/dist/audit.js +15 -7
  47. package/dist/auth-bridge.d.ts +0 -14
  48. package/dist/auth-bridge.js +0 -7
  49. package/dist/auto-mode-face.d.ts +10 -7
  50. package/dist/auto-mode-face.js +7 -4
  51. package/dist/background-agent-name.d.ts +19 -1
  52. package/dist/background-agent-name.js +12 -2
  53. package/dist/background-session-reap.d.ts +1 -1
  54. package/dist/bake-runner/main.js +9 -6
  55. package/dist/bench/s1/arms.js +6 -5
  56. package/dist/bench/s1/live-deps.js +5 -2
  57. package/dist/bench/s1/run-firm.js +6 -5
  58. package/dist/bind-host.d.ts +25 -0
  59. package/dist/bind-host.js +25 -0
  60. package/dist/boot/adoption.d.ts +3 -0
  61. package/dist/boot/adoption.js +1 -0
  62. package/dist/boot/deployment-mods.d.ts +1 -1
  63. package/dist/boot/execution-env.d.ts +17 -7
  64. package/dist/boot/execution-env.js +37 -31
  65. package/dist/boot/exit-boundary.d.ts +2 -2
  66. package/dist/boot/exit-boundary.js +6 -5
  67. package/dist/boot/fatal-exit.d.ts +3 -5
  68. package/dist/boot/fatal-exit.js +2 -2
  69. package/dist/boot/leader.d.ts +15 -0
  70. package/dist/boot/leader.js +17 -15
  71. package/dist/boot/memory-consolidation.d.ts +37 -29
  72. package/dist/boot/memory-consolidation.js +11 -5
  73. package/dist/boot/org-memory.js +1 -1
  74. package/dist/boot/parked-revive-gate.js +2 -2
  75. package/dist/boot/reapers.d.ts +4 -3
  76. package/dist/boot/reapers.js +19 -16
  77. package/dist/boot/resolve-spec.d.ts +5 -3
  78. package/dist/boot/resolve-spec.js +55 -67
  79. package/dist/boot/retention-lane.d.ts +4 -4
  80. package/dist/boot/retention-lane.js +2 -2
  81. package/dist/boot/runner-deps.d.ts +28 -7
  82. package/dist/boot/runner-deps.js +11 -4
  83. package/dist/boot/runtime-caps.d.ts +2 -2
  84. package/dist/boot/runtime-caps.js +16 -2
  85. package/dist/boot/session-faces.d.ts +16 -7
  86. package/dist/boot/session-faces.js +114 -94
  87. package/dist/boot/shutdown.d.ts +5 -4
  88. package/dist/boot/shutdown.js +6 -4
  89. package/dist/boot/stage-01-config.js +9 -1
  90. package/dist/boot/stage-02-web-admin-pull.d.ts +1 -0
  91. package/dist/boot/stage-02-web-admin-pull.js +6 -1
  92. package/dist/boot/stage-03-store-backend.d.ts +3 -0
  93. package/dist/boot/stage-03-store-backend.js +4 -3
  94. package/dist/boot/stage-04-stores.d.ts +2 -0
  95. package/dist/boot/stage-04-stores.js +2 -2
  96. package/dist/boot/stage-05-execution-env.d.ts +7 -3
  97. package/dist/boot/stage-05-execution-env.js +2 -2
  98. package/dist/boot/stage-06-runners.d.ts +10 -12
  99. package/dist/boot/stage-06-runners.js +23 -15
  100. package/dist/boot/stage-07-capability-layer.d.ts +11 -8
  101. package/dist/boot/stage-07-capability-layer.js +5 -3
  102. package/dist/boot/stage-08-reapers.d.ts +11 -8
  103. package/dist/boot/stage-08-reapers.js +3 -3
  104. package/dist/boot/stage-09-leader.d.ts +12 -15
  105. package/dist/boot/stage-09-leader.js +12 -4
  106. package/dist/boot/stage-10-http-server.d.ts +12 -15
  107. package/dist/boot/stage-10-http-server.js +7 -4
  108. package/dist/boot/store-evidence.d.ts +20 -0
  109. package/dist/boot/store-evidence.js +13 -0
  110. package/dist/boot/stores.d.ts +3 -0
  111. package/dist/boot/stores.js +21 -10
  112. package/dist/boot/task-list-lane.d.ts +4 -4
  113. package/dist/boot/web-admin.d.ts +4 -2
  114. package/dist/boot/web-admin.js +55 -35
  115. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  116. package/dist/boot-reclaim.d.ts +3 -1
  117. package/dist/boot-reclaim.js +1 -1
  118. package/dist/brain.d.ts +7 -18
  119. package/dist/brain.js +5 -17
  120. package/dist/budget.js +6 -6
  121. package/dist/capabilities/center-plugins.d.ts +7 -1
  122. package/dist/capabilities/center-plugins.js +32 -10
  123. package/dist/capabilities/center-wiring.js +1 -1
  124. package/dist/capabilities/composite-members.d.ts +2 -2
  125. package/dist/capabilities/composite-members.js +2 -2
  126. package/dist/capabilities/repo-tools.d.ts +2 -0
  127. package/dist/capabilities/repo-tools.js +14 -12
  128. package/dist/capabilities/scenarios.d.ts +6 -15
  129. package/dist/capabilities/scenarios.js +11 -16
  130. package/dist/capabilities/skills.d.ts +1 -1
  131. package/dist/capabilities/tool-defer.d.ts +1 -1
  132. package/dist/capability-facts.d.ts +38 -11
  133. package/dist/capability-facts.js +47 -8
  134. package/dist/card-void.d.ts +4 -4
  135. package/dist/card-void.js +1 -1
  136. package/dist/center-credential-renewer.d.ts +6 -2
  137. package/dist/center-credential-renewer.js +7 -3
  138. package/dist/config-catalog.d.ts +16 -1
  139. package/dist/config-catalog.js +62 -56
  140. package/dist/config-dir-trust.d.ts +37 -4
  141. package/dist/config-dir-trust.js +88 -44
  142. package/dist/config-invariants.d.ts +42 -3
  143. package/dist/config-invariants.js +69 -5
  144. package/dist/config-lkg.d.ts +23 -1
  145. package/dist/config-lkg.js +17 -3
  146. package/dist/config-provider.d.ts +9 -9
  147. package/dist/config-provider.js +25 -110
  148. package/dist/config-pull-failure.d.ts +50 -0
  149. package/dist/config-pull-failure.js +48 -0
  150. package/dist/config-types.d.ts +26 -17
  151. package/dist/config.d.ts +8 -16
  152. package/dist/config.js +113 -47
  153. package/dist/delegated-session-owner.d.ts +1 -1
  154. package/dist/deleted-session-ids.d.ts +3 -2
  155. package/dist/deployment-governance.d.ts +3 -3
  156. package/dist/deployment-shape.d.ts +30 -4
  157. package/dist/deployment-shape.js +7 -0
  158. package/dist/egress-redirect.d.ts +25 -7
  159. package/dist/egress-redirect.js +20 -2
  160. package/dist/elicitation.d.ts +6 -5
  161. package/dist/elicitation.js +23 -22
  162. package/dist/engine-identity.d.ts +28 -0
  163. package/dist/engine-identity.js +10 -0
  164. package/dist/entry-problems.d.ts +5 -7
  165. package/dist/entry-problems.js +1 -1
  166. package/dist/env-facts.js +2 -1
  167. package/dist/env-witness.d.ts +7 -0
  168. package/dist/env-witness.js +16 -0
  169. package/dist/execution-lane-caps.d.ts +5 -18
  170. package/dist/execution-lane-caps.js +0 -22
  171. package/dist/execution-placement.d.ts +58 -18
  172. package/dist/execution-placement.js +41 -2
  173. package/dist/field-conflict.d.ts +7 -11
  174. package/dist/field-conflict.js +3 -3
  175. package/dist/file-history-capture.d.ts +3 -3
  176. package/dist/file-history-disclosure.js +1 -0
  177. package/dist/fleet/fleet-bus.d.ts +21 -3
  178. package/dist/fleet/fleet-bus.js +35 -25
  179. package/dist/fleet/fleet-reconciler.js +2 -2
  180. package/dist/fleet/serving-lease.js +3 -3
  181. package/dist/fleet-client.js +3 -3
  182. package/dist/fleet-lease.d.ts +0 -1
  183. package/dist/fleet-lease.js +4 -5
  184. package/dist/history-anchor.d.ts +23 -3
  185. package/dist/history-anchor.js +24 -4
  186. package/dist/hitl-delivery.d.ts +90 -0
  187. package/dist/hitl-delivery.js +98 -0
  188. package/dist/hooks/classic-stations.d.ts +8 -11
  189. package/dist/hooks/classic-stations.js +0 -7
  190. package/dist/hooks/hook-llm.d.ts +5 -1
  191. package/dist/hooks/hook-llm.js +24 -15
  192. package/dist/hooks/hook-runner.d.ts +67 -57
  193. package/dist/hooks/hook-runner.js +260 -186
  194. package/dist/host-lsp-manager.d.ts +22 -8
  195. package/dist/host-lsp-manager.js +4 -1
  196. package/dist/http/active-run-conflict.d.ts +2 -43
  197. package/dist/http/active-run-conflict.js +3 -7
  198. package/dist/http/admission.d.ts +4 -18
  199. package/dist/http/admission.js +75 -78
  200. package/dist/http/approval-sweeps.d.ts +3 -3
  201. package/dist/http/approval-sweeps.js +54 -30
  202. package/dist/http/caller-trust.d.ts +8 -10
  203. package/dist/http/caller-trust.js +1 -2
  204. package/dist/http/claim-heartbeat.d.ts +49 -0
  205. package/dist/http/claim-heartbeat.js +46 -0
  206. package/dist/http/claimed-run.d.ts +4 -3
  207. package/dist/http/dispatch.d.ts +8 -1
  208. package/dist/http/dispatch.js +76 -30
  209. package/dist/http/durable-run-leg.d.ts +3 -3
  210. package/dist/http/durable-run-leg.js +17 -12
  211. package/dist/http/execution-context.d.ts +17 -43
  212. package/dist/http/execution-context.js +7 -5
  213. package/dist/http/health-reader.d.ts +36 -0
  214. package/dist/http/health-reader.js +21 -0
  215. package/dist/http/health-self-report.d.ts +9 -9
  216. package/dist/http/health-self-report.js +4 -4
  217. package/dist/http/idempotency.d.ts +9 -5
  218. package/dist/http/idempotency.js +4 -4
  219. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  220. package/dist/http/memory-compliance-failure-reply.js +4 -2
  221. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  222. package/dist/http/memory-face-fault-reply.js +71 -0
  223. package/dist/http/memory-store-refusal-reply.d.ts +1 -1
  224. package/dist/http/memory-store-refusal-reply.js +3 -0
  225. package/dist/http/owner-access.d.ts +391 -67
  226. package/dist/http/owner-access.js +371 -35
  227. package/dist/http/principal-gate.d.ts +24 -81
  228. package/dist/http/principal-gate.js +24 -68
  229. package/dist/http/refusal-body.d.ts +35 -2
  230. package/dist/http/refusal-body.js +34 -0
  231. package/dist/http/request-guards.d.ts +9 -13
  232. package/dist/http/request-guards.js +34 -68
  233. package/dist/http/resume-composition.d.ts +37 -0
  234. package/dist/http/resume-composition.js +18 -0
  235. package/dist/http/resume-ctx-read.d.ts +35 -12
  236. package/dist/http/resume-ctx-read.js +25 -6
  237. package/dist/http/resume-legs.d.ts +21 -18
  238. package/dist/http/resume-legs.js +189 -129
  239. package/dist/http/retired-skill-manifest.d.ts +1 -1
  240. package/dist/http/route-ctx.d.ts +25 -32
  241. package/dist/http/routes/a2a-serve.d.ts +43 -5
  242. package/dist/http/routes/a2a-serve.js +58 -37
  243. package/dist/http/routes/admin-config-refresh.js +2 -2
  244. package/dist/http/routes/admin-drain.js +2 -2
  245. package/dist/http/routes/admin-memory-optout.js +4 -3
  246. package/dist/http/routes/adoption.d.ts +3 -0
  247. package/dist/http/routes/adoption.js +17 -10
  248. package/dist/http/routes/agents-roster.js +13 -7
  249. package/dist/http/routes/approvals-assistant.js +70 -65
  250. package/dist/http/routes/attachments.js +2 -2
  251. package/dist/http/routes/background.d.ts +3 -3
  252. package/dist/http/routes/background.js +9 -17
  253. package/dist/http/routes/capabilities.js +15 -18
  254. package/dist/http/routes/config-catalog.js +2 -2
  255. package/dist/http/routes/devices.d.ts +3 -3
  256. package/dist/http/routes/devices.js +4 -4
  257. package/dist/http/routes/diagnostics.d.ts +27 -3
  258. package/dist/http/routes/diagnostics.js +27 -21
  259. package/dist/http/routes/engine.js +2 -2
  260. package/dist/http/routes/fleet.js +5 -3
  261. package/dist/http/routes/images.js +10 -6
  262. package/dist/http/routes/leader.d.ts +7 -2
  263. package/dist/http/routes/leader.js +12 -3
  264. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  265. package/dist/http/routes/mcp-reconnect.js +7 -15
  266. package/dist/http/routes/memory-bundle.js +4 -7
  267. package/dist/http/routes/memory-compliance.js +4 -4
  268. package/dist/http/routes/memory-consolidation.js +6 -9
  269. package/dist/http/routes/memory-origin.d.ts +2 -0
  270. package/dist/http/routes/memory-origin.js +7 -8
  271. package/dist/http/routes/memory-policy.js +17 -12
  272. package/dist/http/routes/notify-wake.js +10 -19
  273. package/dist/http/routes/observability.js +3 -3
  274. package/dist/http/routes/principal-inbox.d.ts +1 -1
  275. package/dist/http/routes/principal-inbox.js +2 -2
  276. package/dist/http/routes/projects.d.ts +1 -1
  277. package/dist/http/routes/projects.js +3 -2
  278. package/dist/http/routes/retention-ops.js +6 -9
  279. package/dist/http/routes/rules.js +20 -5
  280. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  281. package/dist/http/routes/run-memory-capture.js +6 -12
  282. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  283. package/dist/http/routes/run-permission-mode.js +10 -17
  284. package/dist/http/routes/runs.js +146 -231
  285. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  286. package/dist/http/routes/session-memory-sync.js +7 -13
  287. package/dist/http/routes/session-sync.d.ts +4 -2
  288. package/dist/http/routes/session-sync.js +21 -20
  289. package/dist/http/routes/sessions-list.d.ts +3 -3
  290. package/dist/http/routes/sessions-list.js +9 -9
  291. package/dist/http/routes/sessions.js +87 -124
  292. package/dist/http/routes/shared-memory.js +6 -6
  293. package/dist/http/routes/side-query.js +2 -2
  294. package/dist/http/routes/tasks.js +136 -120
  295. package/dist/http/routes/trace-usage.d.ts +0 -12
  296. package/dist/http/routes/trace-usage.js +40 -46
  297. package/dist/http/routes/workflows.d.ts +39 -4
  298. package/dist/http/routes/workflows.js +42 -14
  299. package/dist/http/run-concurrency-cap.d.ts +20 -12
  300. package/dist/http/run-concurrency-cap.js +39 -26
  301. package/dist/http/run-read-face.d.ts +3 -5
  302. package/dist/http/run-read-face.js +8 -13
  303. package/dist/http/send.d.ts +12 -3
  304. package/dist/http/send.js +42 -6
  305. package/dist/http/server.d.ts +39 -40
  306. package/dist/http/server.js +36 -11
  307. package/dist/http/sse-log.d.ts +17 -10
  308. package/dist/http/sse-log.js +7 -7
  309. package/dist/http/stored-body-replay.d.ts +12 -0
  310. package/dist/http/stored-body-replay.js +2 -2
  311. package/dist/http/submit-ctx.d.ts +16 -8
  312. package/dist/http/submit-ctx.js +6 -2
  313. package/dist/http/submit-replay.d.ts +19 -6
  314. package/dist/http/submit-replay.js +18 -6
  315. package/dist/http/sync-submit-body.d.ts +3 -4
  316. package/dist/http/sync-submit-body.js +4 -5
  317. package/dist/http/wire-types.d.ts +4 -3
  318. package/dist/identity-source.d.ts +36 -5
  319. package/dist/identity-source.js +27 -0
  320. package/dist/index.d.ts +1 -0
  321. package/dist/index.js +1 -0
  322. package/dist/key-resolver.d.ts +32 -0
  323. package/dist/key-resolver.js +23 -9
  324. package/dist/leader/diffup.js +2 -1
  325. package/dist/leader/endpoint.d.ts +26 -5
  326. package/dist/leader/endpoint.js +154 -14
  327. package/dist/leader/fanout.d.ts +3 -0
  328. package/dist/leader/fanout.js +78 -63
  329. package/dist/leader/leader.d.ts +16 -0
  330. package/dist/leader/leader.js +43 -3
  331. package/dist/leader/merge.d.ts +9 -1
  332. package/dist/leader/merge.js +16 -1
  333. package/dist/leader/repair-wire.js +1 -1
  334. package/dist/leader/wire.d.ts +36 -3
  335. package/dist/leader/wire.js +59 -18
  336. package/dist/lsp-evict.d.ts +6 -4
  337. package/dist/lsp-evict.js +2 -3
  338. package/dist/memory-operator-faces.d.ts +5 -4
  339. package/dist/memory-operator-faces.js +1 -1
  340. package/dist/memory-scope.d.ts +29 -2
  341. package/dist/memory-scope.js +64 -15
  342. package/dist/memory-store-refusal.d.ts +5 -2
  343. package/dist/memory-sync-client.d.ts +3 -2
  344. package/dist/memory-sync-client.js +6 -3
  345. package/dist/model-compat.d.ts +17 -8
  346. package/dist/model-compat.js +6 -2
  347. package/dist/model-context-window.d.ts +18 -0
  348. package/dist/model-context-window.js +2 -0
  349. package/dist/model-entry-headers.d.ts +46 -4
  350. package/dist/model-entry-headers.js +2 -2
  351. package/dist/model-entry-refusal.d.ts +35 -16
  352. package/dist/model-entry-refusal.js +40 -27
  353. package/dist/model-plane-face.d.ts +19 -11
  354. package/dist/model-plane-face.js +9 -1
  355. package/dist/model-plane-probe.d.ts +2 -0
  356. package/dist/model-plane-probe.js +17 -0
  357. package/dist/model-provider.d.ts +3 -3
  358. package/dist/model-route-endpoint.d.ts +9 -5
  359. package/dist/model-route-endpoint.js +29 -7
  360. package/dist/model-select.d.ts +16 -0
  361. package/dist/model-select.js +4 -0
  362. package/dist/mountinfo.d.ts +37 -0
  363. package/dist/mountinfo.js +47 -0
  364. package/dist/namespaced-rule-name.d.ts +23 -14
  365. package/dist/namespaced-rule-name.js +8 -11
  366. package/dist/net-address.d.ts +1 -1
  367. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  368. package/dist/observability/corrupt-read-seat.js +5 -3
  369. package/dist/observability/fail-open.d.ts +58 -38
  370. package/dist/observability/fail-open.js +60 -38
  371. package/dist/observability/logger.d.ts +22 -1
  372. package/dist/observability/logger.js +89 -12
  373. package/dist/observability/metrics.js +3 -4
  374. package/dist/observability/otel-exporter.js +2 -1
  375. package/dist/observability/principal-context.d.ts +14 -7
  376. package/dist/observability/principal-context.js +8 -3
  377. package/dist/observability/run-terminal.d.ts +7 -1
  378. package/dist/observability/run-terminal.js +5 -2
  379. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  380. package/dist/orchestration/hardened-vm-runner.js +11 -5
  381. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  382. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  383. package/dist/orchestration/hardened-vm-worker.js +2 -1
  384. package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
  385. package/dist/orchestration/workflow-completion-inbox.js +3 -2
  386. package/dist/org-delivery-gate.d.ts +5 -4
  387. package/dist/org-delivery-gate.js +7 -6
  388. package/dist/outbound-dispatcher.d.ts +1 -1
  389. package/dist/outbound-dispatcher.js +6 -12
  390. package/dist/owner-brands.d.ts +81 -0
  391. package/dist/owner-brands.js +42 -0
  392. package/dist/owner-faces.d.ts +531 -0
  393. package/dist/owner-faces.js +126 -0
  394. package/dist/parked-decide.d.ts +67 -5
  395. package/dist/parked-decide.js +127 -5
  396. package/dist/parked-revive-surface.d.ts +14 -4
  397. package/dist/parked-revive-surface.js +5 -4
  398. package/dist/peer-directory.d.ts +6 -8
  399. package/dist/peer-directory.js +3 -2
  400. package/dist/permission-rule-vocab.d.ts +53 -8
  401. package/dist/permission-rule-vocab.js +30 -2
  402. package/dist/plugins/adoption-log-sql.d.ts +0 -22
  403. package/dist/plugins/adoption-log-sql.js +5 -3
  404. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  405. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  406. package/dist/plugins/approval-ask-store-file.d.ts +18 -7
  407. package/dist/plugins/approval-ask-store-file.js +37 -14
  408. package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
  409. package/dist/plugins/approval-ask-store-memory.js +24 -10
  410. package/dist/plugins/approval-ask-store-sql.d.ts +39 -20
  411. package/dist/plugins/approval-ask-store-sql.js +41 -10
  412. package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
  413. package/dist/plugins/approval-exemption-skill-m46.js +25 -0
  414. package/dist/plugins/approval-exemption-store.d.ts +6 -1
  415. package/dist/plugins/approval-exemption-store.js +14 -0
  416. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  417. package/dist/plugins/approval-nonce-store.js +72 -23
  418. package/dist/plugins/blob-backend.d.ts +2 -0
  419. package/dist/plugins/blob-backend.js +9 -6
  420. package/dist/plugins/caching-session-store.d.ts +13 -1
  421. package/dist/plugins/caching-session-store.js +43 -4
  422. package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
  423. package/dist/plugins/checkpoint-index-columns.js +36 -1
  424. package/dist/plugins/checkpoint-store-face.d.ts +83 -10
  425. package/dist/plugins/checkpoint-store-face.js +18 -1
  426. package/dist/plugins/device-store-sql.js +1 -0
  427. package/dist/plugins/ensure-index.d.ts +13 -1
  428. package/dist/plugins/ensure-index.js +154 -21
  429. package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
  430. package/dist/plugins/ensure-schema-lock-policy.js +3 -2
  431. package/dist/plugins/file-run-store.d.ts +63 -23
  432. package/dist/plugins/file-run-store.js +138 -83
  433. package/dist/plugins/host-platform.d.ts +24 -3
  434. package/dist/plugins/host-platform.js +15 -1
  435. package/dist/plugins/image-bake-store-sql.js +2 -0
  436. package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
  437. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  438. package/dist/plugins/k8s-pod-reaper.js +0 -1
  439. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  440. package/dist/plugins/leader-run-store-sql.js +34 -4
  441. package/dist/plugins/local-checkpoint-store.d.ts +58 -23
  442. package/dist/plugins/local-checkpoint-store.js +195 -76
  443. package/dist/plugins/local-data-dir-modes-m39.js +2 -1
  444. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  445. package/dist/plugins/local-docker-capacity.js +194 -0
  446. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  447. package/dist/plugins/local-docker-reaper.js +102 -0
  448. package/dist/plugins/local-engine-high-water.d.ts +4 -2
  449. package/dist/plugins/local-engine-high-water.js +4 -1
  450. package/dist/plugins/local-session-store.d.ts +358 -125
  451. package/dist/plugins/local-session-store.js +824 -251
  452. package/dist/plugins/local-session-window.d.ts +3 -2
  453. package/dist/plugins/local-session-window.js +3 -2
  454. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  455. package/dist/plugins/local-task-attachment-store.d.ts +18 -1
  456. package/dist/plugins/local-task-attachment-store.js +22 -1
  457. package/dist/plugins/memory-embedder.js +9 -7
  458. package/dist/plugins/memory-engine-pg.d.ts +3 -2
  459. package/dist/plugins/memory-engine-pg.js +14 -5
  460. package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
  461. package/dist/plugins/memory-engine-sql-apply.js +6 -8
  462. package/dist/plugins/memory-engine-tidb.d.ts +4 -2
  463. package/dist/plugins/memory-engine-tidb.js +11 -2
  464. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  465. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  466. package/dist/plugins/memory-run-store.d.ts +39 -27
  467. package/dist/plugins/memory-run-store.js +72 -70
  468. package/dist/plugins/one-time-migration-marker.d.ts +10 -0
  469. package/dist/plugins/one-time-migration-marker.js +7 -0
  470. package/dist/plugins/one-time-migrations.d.ts +186 -45
  471. package/dist/plugins/one-time-migrations.js +442 -119
  472. package/dist/plugins/org-delivery-quota-store.js +2 -1
  473. package/dist/plugins/permission-rule-store-file.d.ts +3 -3
  474. package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
  475. package/dist/plugins/permission-rule-store-sql.js +6 -86
  476. package/dist/plugins/pg-pool.d.ts +1 -31
  477. package/dist/plugins/pg-pool.js +16 -7
  478. package/dist/plugins/remote-env-e2b.d.ts +7 -25
  479. package/dist/plugins/remote-env-e2b.js +34 -25
  480. package/dist/plugins/remote-env-host.d.ts +2 -9
  481. package/dist/plugins/remote-env-host.js +34 -22
  482. package/dist/plugins/remote-env-k8s.d.ts +40 -45
  483. package/dist/plugins/remote-env-k8s.js +107 -58
  484. package/dist/plugins/remote-env-local-docker.d.ts +148 -14
  485. package/dist/plugins/remote-env-local-docker.js +367 -72
  486. package/dist/plugins/remote-scratchpad.js +4 -0
  487. package/dist/plugins/retention-deployment.d.ts +49 -17
  488. package/dist/plugins/retention-deployment.js +39 -8
  489. package/dist/plugins/run-preview-m45.d.ts +11 -0
  490. package/dist/plugins/run-preview-m45.js +19 -0
  491. package/dist/plugins/run-store-sql.d.ts +56 -68
  492. package/dist/plugins/run-store-sql.js +127 -116
  493. package/dist/plugins/s3-answer.d.ts +2 -1
  494. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  495. package/dist/plugins/sandbox-reaper.js +2 -0
  496. package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
  497. package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
  498. package/dist/plugins/scheduler-support.d.ts +16 -1
  499. package/dist/plugins/scheduler-support.js +22 -2
  500. package/dist/plugins/schema-consistency.d.ts +42 -9
  501. package/dist/plugins/schema-consistency.js +212 -11
  502. package/dist/plugins/schema-drift-sentence.d.ts +4 -1
  503. package/dist/plugins/schema-drift-sentence.js +4 -4
  504. package/dist/plugins/schema-ensure-legs.d.ts +9 -0
  505. package/dist/plugins/schema-ensure-legs.js +1 -1
  506. package/dist/plugins/schema-indexes.js +3 -0
  507. package/dist/plugins/schema-live-columns.d.ts +14 -5
  508. package/dist/plugins/schema-live-columns.js +10 -10
  509. package/dist/plugins/send-user-file.js +2 -1
  510. package/dist/plugins/session-birth.d.ts +37 -0
  511. package/dist/plugins/session-birth.js +38 -0
  512. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  513. package/dist/plugins/session-epoch-anchor.js +33 -11
  514. package/dist/plugins/session-ext-table.d.ts +27 -3
  515. package/dist/plugins/session-ext-table.js +19 -6
  516. package/dist/plugins/session-fork.d.ts +15 -1
  517. package/dist/plugins/session-fork.js +3 -0
  518. package/dist/plugins/session-ownership.d.ts +1 -1
  519. package/dist/plugins/session-placement.d.ts +22 -16
  520. package/dist/plugins/session-placement.js +15 -12
  521. package/dist/plugins/session-row-sql.d.ts +12 -0
  522. package/dist/plugins/session-row-sql.js +3 -3
  523. package/dist/plugins/session-run-rollup.d.ts +29 -0
  524. package/dist/plugins/session-run-rollup.js +40 -0
  525. package/dist/plugins/session-store-sql.d.ts +38 -12
  526. package/dist/plugins/session-store-sql.js +130 -30
  527. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  528. package/dist/plugins/session-withdraw-sql.js +42 -0
  529. package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
  530. package/dist/plugins/shared-memory-store-sql.js +2 -1
  531. package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
  532. package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
  533. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  534. package/dist/plugins/sql-driver.d.ts +1 -1
  535. package/dist/plugins/sql-driver.js +2 -1
  536. package/dist/plugins/sql-errors.d.ts +32 -5
  537. package/dist/plugins/sql-errors.js +55 -7
  538. package/dist/plugins/sql-json-column.d.ts +8 -7
  539. package/dist/plugins/sql-json-column.js +10 -6
  540. package/dist/plugins/store-backend.d.ts +84 -15
  541. package/dist/plugins/store-backend.js +186 -55
  542. package/dist/plugins/store-contracts.d.ts +90 -30
  543. package/dist/plugins/store-contracts.js +22 -1
  544. package/dist/plugins/store-fault.d.ts +28 -2
  545. package/dist/plugins/store-fault.js +20 -2
  546. package/dist/plugins/task-attachment-store.d.ts +15 -3
  547. package/dist/plugins/task-attachment-store.js +22 -9
  548. package/dist/plugins/tidb-pool.js +23 -8
  549. package/dist/plugins/web-search.js +5 -3
  550. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  551. package/dist/plugins/workflow-run-store-sql.js +11 -5
  552. package/dist/principal-jwt.d.ts +4 -4
  553. package/dist/principal-jwt.js +20 -5
  554. package/dist/principal-shape.d.ts +41 -0
  555. package/dist/principal-shape.js +19 -0
  556. package/dist/question.d.ts +13 -23
  557. package/dist/question.js +21 -39
  558. package/dist/request-declaration-refusal.d.ts +35 -12
  559. package/dist/request-declaration-refusal.js +21 -9
  560. package/dist/request-form.d.ts +58 -0
  561. package/dist/request-form.js +72 -0
  562. package/dist/request-image-urls.d.ts +8 -2
  563. package/dist/request-image-urls.js +2 -1
  564. package/dist/request-images.d.ts +20 -0
  565. package/dist/request-images.js +59 -0
  566. package/dist/request-key-closure.d.ts +6 -7
  567. package/dist/request-key-closure.js +15 -2
  568. package/dist/resource-suspend.d.ts +7 -16
  569. package/dist/resource-suspend.js +1 -1
  570. package/dist/retired-name-host-notice.d.ts +21 -0
  571. package/dist/retired-name-host-notice.js +12 -0
  572. package/dist/rule-entry-list.d.ts +2 -2
  573. package/dist/rule-entry-list.js +3 -4
  574. package/dist/rule-issue-reading.d.ts +58 -0
  575. package/dist/rule-issue-reading.js +14 -0
  576. package/dist/rules-consent.d.ts +5 -3
  577. package/dist/rules-consent.js +1 -0
  578. package/dist/run-acceptance.d.ts +3 -1
  579. package/dist/run-acceptance.js +3 -0
  580. package/dist/run-local.d.ts +14 -6
  581. package/dist/run-local.js +92 -80
  582. package/dist/run-stale-default.d.ts +7 -0
  583. package/dist/run-stale-default.js +2 -0
  584. package/dist/runs.d.ts +26 -15
  585. package/dist/runs.js +39 -27
  586. package/dist/runtime-caps-resolver.d.ts +21 -6
  587. package/dist/runtime-caps-resolver.js +17 -4
  588. package/dist/runtime-governance.d.ts +2 -2
  589. package/dist/runtime-governance.js +5 -3
  590. package/dist/sealed-key-layout.d.ts +12 -5
  591. package/dist/sealed-key-layout.js +5 -0
  592. package/dist/sealed-key.d.ts +12 -2
  593. package/dist/sealed-key.js +115 -27
  594. package/dist/security.d.ts +128 -158
  595. package/dist/security.js +163 -59
  596. package/dist/sema-config-dir.d.ts +20 -0
  597. package/dist/sema-config-dir.js +25 -0
  598. package/dist/server-secret-env.d.ts +21 -5
  599. package/dist/server-secret-env.js +14 -4
  600. package/dist/session-children-retire.d.ts +7 -5
  601. package/dist/session-children-retire.js +7 -2
  602. package/dist/session-deletion.d.ts +88 -0
  603. package/dist/session-deletion.js +8 -0
  604. package/dist/session-erase.d.ts +145 -0
  605. package/dist/session-erase.js +115 -0
  606. package/dist/session-error-wire.d.ts +5 -5
  607. package/dist/session-error-wire.js +1 -1
  608. package/dist/session-incarnation.d.ts +52 -5
  609. package/dist/session-incarnation.js +19 -2
  610. package/dist/session-policy-wire.d.ts +6 -3
  611. package/dist/session-policy-wire.js +11 -1
  612. package/dist/session-resident-background.d.ts +0 -71
  613. package/dist/session-resident-background.js +4 -3
  614. package/dist/session-row.d.ts +2 -1
  615. package/dist/session-rules-seat.d.ts +12 -0
  616. package/dist/session-rules-seat.js +19 -0
  617. package/dist/session-titler.d.ts +7 -15
  618. package/dist/session-titler.js +1 -1
  619. package/dist/spec-fields.d.ts +57 -3
  620. package/dist/spec-fields.js +72 -51
  621. package/dist/store-posture.d.ts +136 -20
  622. package/dist/store-posture.js +188 -3
  623. package/dist/stored-request-hooks-m20.js +2 -2
  624. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  625. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  626. package/dist/stores-sql/checkpoint-store-sql.d.ts +33 -28
  627. package/dist/stores-sql/checkpoint-store-sql.js +75 -44
  628. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  629. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  630. package/dist/stores-sql/pg-session-storage.d.ts +7 -5
  631. package/dist/stores-sql/pg-session-storage.js +54 -46
  632. package/dist/stores-sql/retention-store-sql.d.ts +87 -19
  633. package/dist/stores-sql/retention-store-sql.js +92 -27
  634. package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
  635. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  636. package/dist/stores-sql/session-write-hooks.d.ts +12 -6
  637. package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
  638. package/dist/stores-sql/tidb-session-storage.js +13 -8
  639. package/dist/stores-sql/tidb-session-store.d.ts +36 -17
  640. package/dist/stores-sql/tidb-session-store.js +69 -39
  641. package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
  642. package/dist/stores-sql/windowed-session-storage.js +9 -0
  643. package/dist/submission-exit.d.ts +50 -0
  644. package/dist/submission-exit.js +108 -0
  645. package/dist/task-a2a.d.ts +1 -1
  646. package/dist/task-a2a.js +3 -3
  647. package/dist/task-cwd.d.ts +20 -0
  648. package/dist/task-cwd.js +8 -0
  649. package/dist/task-mcp.d.ts +1 -1
  650. package/dist/task-mcp.js +3 -3
  651. package/dist/task-settings.d.ts +14 -10
  652. package/dist/task-settings.js +18 -7
  653. package/dist/terminal.d.ts +25 -43
  654. package/dist/terminal.js +31 -11
  655. package/dist/tool-approval.d.ts +131 -129
  656. package/dist/tool-approval.js +189 -193
  657. package/dist/trace/core-keyset-guard.d.ts +13 -6
  658. package/dist/trace/core-vocab-wire.d.ts +95 -0
  659. package/dist/trace/core-vocab-wire.js +15 -0
  660. package/dist/trace/exit-seat.d.ts +30 -4
  661. package/dist/trace/exit-seat.js +40 -36
  662. package/dist/trace/extension-call-face.d.ts +3 -2
  663. package/dist/trace/extension-call-face.js +3 -1
  664. package/dist/trace/ledger-events.d.ts +4 -7
  665. package/dist/trace/ledger-sink.d.ts +1 -30
  666. package/dist/trace/ledger-sink.js +0 -11
  667. package/dist/trace/model-segment.d.ts +5 -5
  668. package/dist/trace/model-segment.js +5 -5
  669. package/dist/trace/project.d.ts +55 -42
  670. package/dist/trace/project.js +52 -19
  671. package/dist/trace/redact.d.ts +123 -27
  672. package/dist/trace/redact.js +880 -260
  673. package/dist/trace/self-minted-wire.d.ts +487 -19
  674. package/dist/trace/self-minted-wire.js +172 -23
  675. package/dist/trace/wire-projection-faces.d.ts +5 -6
  676. package/dist/trace/wire-projection-faces.js +2 -2
  677. package/dist/upstream-body.d.ts +23 -0
  678. package/dist/upstream-body.js +16 -0
  679. package/dist/url-refusal.d.ts +3 -3
  680. package/dist/url-refusal.js +11 -4
  681. package/dist/user-authored-text.d.ts +1 -1
  682. package/dist/user-input-ledger.d.ts +7 -8
  683. package/dist/user-input-ledger.js +1 -1
  684. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  685. package/dist/web-admin-client/apply-effective.js +13 -16
  686. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  687. package/dist/web-admin-client/apply-ledger.js +5 -2
  688. package/dist/web-admin-client/center-request.d.ts +2 -2
  689. package/dist/web-admin-client/center-request.js +15 -15
  690. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  691. package/dist/web-admin-client/effective-keys.js +1 -1
  692. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  693. package/dist/web-admin-client/entry-metadata.js +13 -0
  694. package/dist/web-admin-client/http-client.d.ts +1 -1
  695. package/dist/web-admin-client/http-client.js +23 -4
  696. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  697. package/dist/web-admin-client/mcp-revocation.js +2 -1
  698. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  699. package/dist/web-admin-client/read-warnings.js +1 -0
  700. package/dist/web-admin-client/restart-signal.js +8 -4
  701. package/dist/web-admin-client/skills-mcp.d.ts +2 -2
  702. package/dist/web-admin-client/types.d.ts +1 -2
  703. package/dist/workspace-space.d.ts +3 -2
  704. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  705. package/package.json +6 -3
  706. package/scripts/drain-check-local.mjs +118 -147
  707. package/scripts/drain-check.mysql.sql +22 -2
  708. package/scripts/drain-check.pg.sql +22 -2
  709. package/wire-changes/server@7.148.0.json +1517 -0
  710. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  711. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  712. package/dist/http/memory-layer-reply.d.ts +0 -30
  713. package/dist/http/memory-layer-reply.js +0 -24
  714. package/dist/lsp/e2b-bridge.d.ts +0 -57
  715. package/dist/lsp/e2b-bridge.js +0 -139
  716. package/dist/lsp/e2b-manager.d.ts +0 -93
  717. package/dist/lsp/e2b-manager.js +0 -178
  718. package/dist/lsp/lsp-frames.d.ts +0 -14
  719. package/dist/lsp/lsp-frames.js +0 -25
  720. package/dist/lsp/manager.d.ts +0 -129
  721. package/dist/lsp/manager.js +0 -127
  722. package/dist/lsp/types.d.ts +0 -12
  723. package/dist/lsp/types.js +0 -2
  724. package/dist/lsp/ws-transport.d.ts +0 -40
  725. package/dist/lsp/ws-transport.js +0 -210
@@ -3,8 +3,9 @@ import { CATALOG_REPLACES_ENV_MODELS_CODE, SandboxGitConfig, WEB_ADMIN_ENV, envM
3
3
  import { modelKeyPoison } from "../key-resolver.js";
4
4
  import { DEFAULT_MODEL_REF, buildEnvModelIdNotServedNotice, mintCapabilityKeys, readAtMention, servedModelTableLeg } from "../model-select.js";
5
5
  import { applyAutoCompactWindow, buildModelCostKey, isRosterGateArmed, ownCredentialHitsInForce, parseAutonomy, unmatchableToolNamesRefusal } from "../config.js";
6
- import { NAME_TABLE_BEHAVIOR, retiredWithoutSuccessorEntries } from "../namespaced-rule-name.js";
6
+ import { NAME_TABLE_BEHAVIOR, retiredLeftOutEntries } from "../namespaced-rule-name.js";
7
7
  import { buildModelCompat, readModelCompat } from "../model-compat.js";
8
+ import { ASSUMED_CONTEXT_WINDOW } from "../model-context-window.js";
8
9
  import { buildModelHeadersKey } from "../model-entry-headers.js";
9
10
  import { validateCommandRules } from "../runtime-governance.js";
10
11
  import { stageLimits } from "./stage-limits.js";
@@ -14,11 +15,10 @@ import { crossInvariant } from "../config-invariants.js";
14
15
  import { DEFAULT_MODEL_MISSING_CODE, REFUSED_NAME_MINTED_CODE, judgeCatalogEntries, mintedRefusedNames, refusalEventOf, refusalWarnFields, refusedNameLogField, refusedNamesLogFields, malformedDroppedCarrierRefusal } from "../model-entry-refusal.js";
15
16
  import { judgeModelRouteEndpoint } from "../model-route-endpoint.js";
16
17
  import { gateIntentUnserviceableReason } from "../approval.js";
17
- import { refusedGroups } from "./apply-ledger.js";
18
+ import { modelPlaneOutcomeOf, refusedGroups } from "./apply-ledger.js";
18
19
  import { judgeConfigCandidate } from "./candidate-gate.js";
19
20
  import { declareServerWithheldEnv, withdrawServerWithheldEnv } from "../server-secret-env.js";
20
21
  import { MODEL_ROUTE_ENV_KEYS } from "../model-route-gap.js";
21
- const charsPerTokenOf = (v) => (typeof v === "number" && Number.isFinite(v) && v > 0 ? v : undefined);
22
22
  function envDerivedModel(config) {
23
23
  const m = config.envModel;
24
24
  if (m === undefined) {
@@ -41,21 +41,18 @@ function toModel(m, envDefaults = {}, logger) {
41
41
  api: m.api,
42
42
  baseUrl: m.baseUrl ?? "",
43
43
  ...mintCapabilityKeys({ reasoning: m.reasoning, vision: m.vision }),
44
- contextWindow: m.contextWindow ?? envDefaults.contextWindow ?? 262144,
44
+ contextWindow: m.contextWindow ?? envDefaults.contextWindow ?? ASSUMED_CONTEXT_WINDOW,
45
45
  maxTokens: m.maxTokens ?? envDefaults.maxTokens ?? 4096,
46
- ...(charsPerTokenOf(m.charsPerToken) !== undefined || envDefaults.charsPerToken !== undefined
47
- ? { charsPerToken: charsPerTokenOf(m.charsPerToken) ?? envDefaults.charsPerToken }
48
- : {}),
49
- ...buildModelCostKey(m.cost ? { input: m.cost.input, output: m.cost.output, cacheRead: m.cost.cacheRead ?? 0, cacheWrite: m.cost.cacheWrite ?? 0 } : undefined),
50
- params: { ...(m.tier ? { tier: m.tier } : {}), promptCacheFamily: m.provider === "anthropic" ? "input-excludes-cached" : "input-includes-cached" },
46
+ ...(m.charsPerToken !== undefined || envDefaults.charsPerToken !== undefined ? { charsPerToken: m.charsPerToken ?? envDefaults.charsPerToken } : {}),
47
+ ...buildModelCostKey(m.cost),
48
+ params: { tier: m.tier, promptCacheFamily: m.provider === "anthropic" ? "input-excludes-cached" : "input-includes-cached" },
51
49
  ...(thinkingDefault ? { defaultThinking: thinkingDefault } : {}),
52
50
  ...(compat ? { compat } : {}),
53
51
  ...(m.thinkingLevelMap !== undefined ? { thinkingLevelMap: m.thinkingLevelMap } : {}),
54
52
  ...(m.extraBody ? { extraBody: m.extraBody } : {}),
55
53
  ...buildModelHeadersKey(m.name, m.headers, m.api),
56
54
  };
57
- const explicitAct = m.autoCompactTokens;
58
- applyAutoCompactWindow(model, typeof explicitAct === "number" ? explicitAct : undefined);
55
+ applyAutoCompactWindow(model, m.autoCompactTokens);
59
56
  return model;
60
57
  }
61
58
  export function mutateInPlace(target, source) {
@@ -368,7 +365,7 @@ function stageModelPlane(config, eff, source, logger, sealedKeys) {
368
365
  return stageEnvModelPlane(config);
369
366
  const enabled = (eff.models?.models ?? []).filter((m) => m.enabled !== false);
370
367
  const verdict = judgeCatalogEntries(enabled, { anthropicRouteMounted: config.anthropic !== undefined }, eff.models?.droppedCatalogEntries);
371
- if (enabled.length === 0 && verdict.malformed.length === 0 && verdict.dropped.every((row) => row.identity?.enabled === false))
368
+ if (!verdict.manages)
372
369
  return { stages: {} };
373
370
  {
374
371
  for (const [name, r] of Object.entries(verdict.refused))
@@ -449,7 +446,7 @@ function stageModelPlane(config, eff, source, logger, sealedKeys) {
449
446
  const roles = { ...envPlane.roles, ...centerRoles };
450
447
  const activeTiers = {};
451
448
  for (const [tier, target] of Object.entries(resolveActiveTiers(eff.models) ?? {})) {
452
- if (models[target] !== undefined) {
449
+ if (Object.hasOwn(models, target)) {
453
450
  activeTiers[tier] = target;
454
451
  continue;
455
452
  }
@@ -458,7 +455,7 @@ function stageModelPlane(config, eff, source, logger, sealedKeys) {
458
455
  }
459
456
  let picked;
460
457
  if (usable.length > 0) {
461
- const decided = resolveCatalogDefaultModel(eff.models, (n) => models[n] !== undefined, usable[0].name);
458
+ const decided = resolveCatalogDefaultModel(eff.models, (n) => Object.hasOwn(models, n), usable[0].name);
462
459
  switch (decided.kind) {
463
460
  case "named":
464
461
  for (const d of decided.dangling) {
@@ -632,7 +629,7 @@ function stageApprovalRequire(raw) {
632
629
  kept: KEPT_WOULD_MATCH_NOTHING,
633
630
  };
634
631
  }
635
- return { ok: true, value: names, skipped: retiredWithoutSuccessorEntries(names, NAME_TABLE_BEHAVIOR) };
632
+ return { ok: true, value: names, skipped: retiredLeftOutEntries("published governance.approvalRequire", names) };
636
633
  }
637
634
  function unserviceableOnLeg(leg, candidate) {
638
635
  switch (leg.leg) {
@@ -755,7 +752,7 @@ export function logEffectiveDiff(config, eff, catalogSource, logger) {
755
752
  logger?.warn("web_admin_dry_run", {
756
753
  note: `DRY RUN — web-admin config NOT applied; unset ${WEB_ADMIN_ENV.dryRun} to go live`,
757
754
  version: eff.version,
758
- wouldOverrideModels: enabled.length > 0,
755
+ wouldOverrideModels: modelPlaneOutcomeOf(modelPlaneGroupReport(plane)) !== "unmanaged",
759
756
  wouldDefaultModel: plane.defaultName ?? null,
760
757
  ...(Object.keys(refused).length > 0 ? { wouldRefuse: Object.fromEntries(Object.entries(refused).map(([n, r]) => [n, r.code])) } : {}),
761
758
  ...(plane.rejected !== undefined ? { wouldRefuseModelPlane: { invariant: plane.rejected.invariant, code: plane.rejected.code, reason: plane.rejected.reason } } : {}),
@@ -70,11 +70,12 @@ export interface ConfigApplyGroupState {
70
70
  export interface ConfigApplyLedgerView {
71
71
  /** 本副本**最后**见到的源版本(身份标;拉到即算,哪怕候选被整拒)。 */
72
72
  readonly configTargetVersion: number;
73
- /** 最后一次成功 commit 的源版本(身份标)。 */
73
+ /** 最后一次**收口**的完整应用版本(身份标):这一代已提交、且应用它的那一拍的重启判定已发布(写口在 web-admin 的拍收口,
74
+ * 与 `/health.restart` 同一段同步写 ⇒ 读到它到版时 `restart` 已是这一拍的判定)。按组的落地另记在 `groups[*].appliedVersion`(提交即记)。 */
74
75
  readonly configAppliedVersion: number;
75
76
  /** [ref]:target 的收货序数(进程内单调)——「见过多少代」的推进判据,哈希方向免疫。 */
76
77
  readonly configTargetOrdinal: number;
77
- /** [ref]:applied 的收货序数。targetOrdinal 推进而这里停滞 = 「改了没生效」的机器判据。 */
78
+ /** [ref]:applied 的收货序数(与 `configAppliedVersion` 同一次写)。targetOrdinal 推进而这里停滞 = 「改了没生效」的机器判据。 */
78
79
  readonly configAppliedOrdinal: number;
79
80
  /** target≠applied 的**持续**时长(ms);收敛时键缺席(健康面不制造噪音)。 */
80
81
  readonly configApplyStaleMs?: number;
@@ -110,15 +111,23 @@ export declare function refusedGroups(report: ConfigApplyReport): Array<{
110
111
  readonly reason: string;
111
112
  }>;
112
113
  /**
113
- * O3:这一次 apply 的**模型面组**(组内各域 = `MODEL_PLANE_DOMAINS`)落地了没有(整组被拒 ⇒
114
- * false;报告缺席 = 没走到 commit ⇒ false,如实)。调用方据此决定「Runner 现在跑的是哪一代模型面」(`appliedPlaneEff`,swap 判据的
115
- * 基准)、名册门开不开、以及 boot 要不要按组回落 LKG —— 都只许从真落地的模型面推进。
114
+ * 一次 apply 里**模型面组**(组内各域 = `MODEL_PLANE_DOMAINS`)的结局 —— 闭集三词,调用方穷举:
115
+ * · `landed` —— 组内的域真落地了(Runner 换到这一代模型面);
116
+ * · `unmanaged` —— 候选**不管**模型面(目录条目批判据的判决位 `manages` 为假:零启用条目,含只有停用的被丢行;降档时服务的已是 env 表也是这一形)——
117
+ * 上一代 / env 继续服务,**不是拒,也不是落地**;
118
+ * · `refused` —— 整组拒(上一代继续服务)。
119
+ * 调用方据此决定「Runner 现在跑的是哪一代模型面」(`appliedPlaneEff`,swap 判据的基准)、名册门开不开、boot 要不要按组回落 LKG、
120
+ * 要不要说「在服 LKG 的模型面」—— 只有 `landed` 推进这些;`refused` 才走按组回落;`unmanaged` 两件都不做。
116
121
  */
117
- export declare function modelPlaneCommitted(report: ConfigApplyReport | undefined): boolean;
122
+ export type ModelPlaneOutcome = "landed" | "unmanaged" | "refused";
123
+ /** 模型面组报告 → 结局(组报告的唯一写者是 apply-effective 的 `modelPlaneGroupReport`:`applied` 非空 ⇔ 组内的域被 stage 出来并提交)。dry-run 读同一只。 */
124
+ export declare function modelPlaneOutcomeOf(group: ConfigApplyGroupReport): ModelPlaneOutcome;
125
+ /** 一次 apply 的模型面结局;报告缺席(没走到 commit:CAS 拒 / swap 席拒 / apply 抛)⇒ `undefined`,如实。 */
126
+ export declare function modelPlaneOutcome(report: ConfigApplyReport | undefined): ModelPlaneOutcome | undefined;
118
127
  export interface ConfigApplyLedger {
119
128
  /** 拉到一个候选(无论后续是否应用)。ordinal=收货序数,version=身份标。 */
120
129
  seenTarget(ordinal: number, version: number): void;
121
- /** 一个候选整体 commit 成功。 */
130
+ /** 应用这一代的那一拍收口(已提交 + 重启判定已发布;有组被拒的那一代只推进 target)。 */
122
131
  applied(ordinal: number, version: number): void;
123
132
  /** 消费 applyEffective 的报告(按组记账)。 */
124
133
  recordApply(report: ConfigApplyReport): void;
@@ -10,8 +10,11 @@ export function refusedGroups(report) {
10
10
  return r ? [{ group, keys: r.keys, reason: r.reason }] : [];
11
11
  });
12
12
  }
13
- export function modelPlaneCommitted(report) {
14
- return report !== undefined && report.groups.modelPlane.rejected === undefined;
13
+ export function modelPlaneOutcomeOf(group) {
14
+ return group.rejected !== undefined ? "refused" : group.applied.length > 0 ? "landed" : "unmanaged";
15
+ }
16
+ export function modelPlaneOutcome(report) {
17
+ return report === undefined ? undefined : modelPlaneOutcomeOf(report.groups.modelPlane);
15
18
  }
16
19
  export function createConfigApplyLedger(now = () => Date.now()) {
17
20
  let targetOrd = 0;
@@ -67,8 +67,8 @@ export declare function pullViewQuery(view: {
67
67
  readonly principal?: string | undefined;
68
68
  }): string;
69
69
  /**
70
- * 中心回了重定向(`egress-redirect.ts` 的判据:`opaqueredirect` 或任何 3xx;304 除外,见 {@link NOT_MODIFIED}):不跟、不重试,类型化拒。拒句是 `egress-redirect.ts` 既有 helper 的那一句(与 hook 直连腿 /
71
- * 记忆 embedder 同一条律),前面冠上这条请求打的那一席;不回显 `Location`。`status` 是中心回的码(续签器据此落「被拒」终态)。
70
+ * 中心回了重定向(`egress-redirect.ts` 的判据:`opaqueredirect` 或除 304 外的任何 3xx):不跟、不重试,类型化拒。拒句是 `egress-redirect.ts` 那一只出口的那一句(与本仓其余每个出站面同一条律),
71
+ * 前面冠上这条请求打的那一席;不回显 `Location`。`status` 是中心回的码(续签器据此落「被拒」终态)。
72
72
  */
73
73
  export declare class CenterRedirectRefusedError extends Error {
74
74
  readonly status: number;
@@ -4,7 +4,7 @@ import { FLEET_LIVE_PATHS, FLEET_PATHS } from "@sema-agent/settings-schema/fleet
4
4
  import { CenterCredentialUnavailableError } from "../center-credential.js";
5
5
  import { WEB_ADMIN_ENV, httpUrlFlaws, pathBaseUrlFlaws } from "@sema-agent/settings-schema";
6
6
  import { buildHttpUrlRefusal } from "../url-refusal.js";
7
- import { egressRedirectRefusal } from "../egress-redirect.js";
7
+ import { EgressRedirectRefusedError, createEgressFetch } from "../egress-redirect.js";
8
8
  export const SCHEMA_MAJOR_HEADER = "x-sema-schema-major";
9
9
  export const CENTER_PULL_TIMEOUT_MS = 8000;
10
10
  export const SETTINGS_SCHEMA_VERSION = settingsSchemaPackage.version;
@@ -67,21 +67,21 @@ export class CenterRedirectRefusedError extends Error {
67
67
  this.name = "CenterRedirectRefusedError";
68
68
  }
69
69
  }
70
- const NOT_MODIFIED = 304;
71
70
  async function sendToCenter(fix, url, wire) {
72
- const res = await (wire.fetchImpl ?? fetch)(url, {
73
- method: wire.method,
74
- headers: wire.headers,
75
- ...(wire.body !== undefined ? { body: wire.body } : {}),
76
- redirect: "manual",
77
- signal: AbortSignal.timeout(wire.timeoutMs),
78
- });
79
- if (res.status === NOT_MODIFIED)
80
- return res;
81
- const refusal = egressRedirectRefusal(res, fix);
82
- if (refusal !== undefined)
83
- throw new CenterRedirectRefusedError(res.status, `web-admin center request: ${refusal}`);
84
- return res;
71
+ const egress = createEgressFetch(fix, wire.fetchImpl);
72
+ try {
73
+ return await egress(url, {
74
+ method: wire.method,
75
+ headers: wire.headers,
76
+ ...(wire.body !== undefined ? { body: wire.body } : {}),
77
+ signal: AbortSignal.timeout(wire.timeoutMs),
78
+ });
79
+ }
80
+ catch (err) {
81
+ if (err instanceof EgressRedirectRefusedError)
82
+ throw new CenterRedirectRefusedError(err.status, `web-admin center request: ${err.message}`);
83
+ throw err;
84
+ }
85
85
  }
86
86
  export function pathBaseUrlRefusal(subject, raw) {
87
87
  const flaws = pathBaseUrlFlaws(raw);
@@ -18,7 +18,7 @@ export declare const EFFECTIVE_ENVELOPE_KEYS: readonly ["version", "updatedAt"];
18
18
  /** `governance` 域(治理三件)的键集——对账门与 schema `GovernanceConfig.shape` 钉集合等式。 */
19
19
  export declare const GOVERNANCE_DOMAIN_KEYS: readonly string[];
20
20
  /** EffectiveConfig 上**不是** settings-schema 域的顶层键(键 → 成文理由)。⚠️ 墓碑语义:任一键将来出现在 schema
21
- * `DOMAINS` 里 ⇒ 对账门红 ⇒ 清本行 + 接本地腿投影(mapToServiceEffective)+ 复核 restart 片归属。 */
21
+ * `DOMAINS` 里 ⇒ 对账门红 ⇒ 清本行 + 核本地腿线上视图(`publishLocalEffective`,契约投影整域承运)+ 复核 restart 片归属。 */
22
22
  export declare const NON_DOMAIN_EFFECTIVE_KEYS: Readonly<Record<string, string>>;
23
23
  /** schema `DOMAINS` 里 server **不消费**的域(域 → 成文理由)。⚠️ 新域(如 presets)到货而不入本表也不入
24
24
  * EffectiveConfig ⇒ 对账门红 ⇒ 逼一行显式决定(「加了域没人接」从此机器可见,[ref]③)。 */
@@ -36,6 +36,6 @@ export const DOMAINS_NOT_CONSUMED_BY_SERVER = {
36
36
  execution: "per-principal 执法面同 entitlement:ruling 骑 caps view(ExecutionRuling),/effective 域面 server 不读。",
37
37
  };
38
38
  export const LOCAL_LANE_REMOTE_ONLY_DOMAINS = {
39
- projects: "身份台账(design/142 §1.4,与租户身份同风险模型):settings-schema 便携表刻意排除(file-store.ts 成文)——本地腿无此域文件,mapToServiceEffective 不投影;远端腿 verbatim 消费(applyEffective → config.projects)。",
39
+ projects: "身份台账(design/142 §1.4,与租户身份同风险模型):settings-schema 便携表刻意排除(file-store.ts 成文)——本地腿无此域文件(线上视图里只有契约缺省的空登记簿,解出 `{}` 与缺席同);远端腿 verbatim 消费(applyEffective → config.projects)。",
40
40
  };
41
41
  //# sourceMappingURL=effective-keys.js.map
@@ -0,0 +1,8 @@
1
+ export declare const ENTRY_METADATA_KEYS: readonly ["notes", "rosters"];
2
+ type EntryMetadataKey = (typeof ENTRY_METADATA_KEYS)[number];
3
+ /** 条目去掉顶层元数据键之后的副本(浅拷;入参不动)。 */
4
+ export declare function withoutEntryMetadata<T extends object>(entry: T): Omit<T, EntryMetadataKey>;
5
+ /** MCP 条目的指纹面:减顶层元数据键 + 分组标签按挂载口的判据读(坏形 ≡ 缺席)。restart 的 mcp 片与撤销台账的恢复指纹同读这一只。 */
6
+ export declare function mcpEntryFingerprintFace(entry: object): Record<string, unknown>;
7
+ export {};
8
+ //# sourceMappingURL=entry-metadata.d.ts.map
@@ -0,0 +1,13 @@
1
+ import { isMcpSourceLabel } from "../mcp-source-label.js";
2
+ export const ENTRY_METADATA_KEYS = ["notes", "rosters"];
3
+ const METADATA = new Set(ENTRY_METADATA_KEYS);
4
+ export function withoutEntryMetadata(entry) {
5
+ return Object.fromEntries(Object.entries(entry).filter(([key]) => !METADATA.has(key)));
6
+ }
7
+ export function mcpEntryFingerprintFace(entry) {
8
+ const face = withoutEntryMetadata(entry);
9
+ if (!isMcpSourceLabel(face.source))
10
+ delete face.source;
11
+ return face;
12
+ }
13
+ //# sourceMappingURL=entry-metadata.js.map
@@ -4,7 +4,7 @@ import type { EffectiveConfig, ExecutionRuling } from "./types.js";
4
4
  import { type DroppedConfigEntry, type UnreadConfigFile } from "./read-warnings.js";
5
5
  import { type CenterEndpoint } from "./center-request.js";
6
6
  /** GET the effective config (Bearer + ETag). null = 304 (unchanged). Throws on transport/HTTP error, and on a
7
- * payload that is not an effective config at all(非对象 / version 非有限数 / gate 域坏形——[ref] 裁B)。
7
+ * payload that is not an effective config at all(非对象 / version 非有限数 / gate 域坏形——[ref] 裁B;这一类抛是 `ConfigCandidateRefusedError`,成因 `rejected`)。
8
8
  * `refusedDocuments`:被拒文档(契约类型 `ConfigDocumentRefusal`,与本地腿同键同义;wire 上只有一种 —— 带事实的退役域,墓碑,成因词 `retired_domain`)不抛 —— 交成发现、那一键不进 effective,
9
9
  * 候选判官整拒这份候选。
10
10
  * `domainErrors`:坏 catalog 域(schema default 已落)逐域单列——与本地腿 `FetchEffectiveResult` 同键同义,
@@ -3,15 +3,34 @@ import { isStringArray, readEffectiveWire, PrincipalCapsWire } from "@sema-agent
3
3
  import { separateRetiredDomains, splitFoldedReadWarnings, withDroppedCatalogEntries } from "./read-warnings.js";
4
4
  import { CENTER_PULL_TIMEOUT_MS, centerFetch } from "./center-request.js";
5
5
  import { answerStillCurrent } from "../center-credential.js";
6
+ import { candidateRefusedBy } from "../config-pull-failure.js";
7
+ import { readUpstreamJson } from "../upstream-body.js";
6
8
  export async function fetchEffective(center, etag, fetchImpl, worker) {
7
9
  const { res, identity } = await centerFetch(center, { kind: "effective", worker }, { etag, timeoutMs: CENTER_PULL_TIMEOUT_MS, fetchImpl });
8
10
  if (res.status === 304)
9
11
  return null;
10
12
  if (!res.ok)
11
13
  throw new Error(`web-admin HTTP ${res.status}`);
14
+ let raw;
15
+ try {
16
+ raw = await readUpstreamJson(res);
17
+ }
18
+ catch (bodyError) {
19
+ if (bodyError instanceof SyntaxError)
20
+ throw candidateRefusedBy(bodyError);
21
+ throw bodyError;
22
+ }
12
23
  const warnings = [];
13
- const { body, refusedDocuments } = separateRetiredDomains(await res.json());
14
- const wire = readEffectiveWire(body, (w) => warnings.push(w));
24
+ let body;
25
+ let refusedDocuments;
26
+ let wire;
27
+ try {
28
+ ({ body, refusedDocuments } = separateRetiredDomains(raw));
29
+ wire = readEffectiveWire(body, (w) => warnings.push(w));
30
+ }
31
+ catch (readerError) {
32
+ throw candidateRefusedBy(readerError);
33
+ }
15
34
  const { domainErrors, droppedEntries, droppedCatalogEntries, unreadFiles } = splitFoldedReadWarnings(warnings, "center");
16
35
  const effective = withDroppedCatalogEntries(wire, droppedCatalogEntries);
17
36
  return {
@@ -102,7 +121,7 @@ async function requestPrincipalView(center, principal, etag, fetchImpl, worker)
102
121
  if (!res.ok)
103
122
  throw new Error(`web-admin principal-caps HTTP ${res.status}`);
104
123
  const responseEtag = res.headers.get("etag");
105
- const json = await res.json();
124
+ const json = await readUpstreamJson(res);
106
125
  stillCurrent();
107
126
  return { json, ...(responseEtag !== null ? { etag: responseEtag } : {}) };
108
127
  }
@@ -141,7 +160,7 @@ export async function fetchPromptArtifact(center, artifactDigest, fetchImpl) {
141
160
  const { res } = await centerFetch(center, { kind: "prompt-artifact", digest: artifactDigest }, { timeoutMs: CENTER_PULL_TIMEOUT_MS, fetchImpl });
142
161
  if (!res.ok)
143
162
  throw new WebAdminHttpError(`prompt artifact HTTP ${res.status} for ${artifactDigest}`, res.status);
144
- return await res.json();
163
+ return await readUpstreamJson(res);
145
164
  }
146
165
  export async function fetchPromptBlob(center, contentDigest, fetchImpl) {
147
166
  const { res } = await centerFetch(center, { kind: "prompt-blob", digest: contentDigest }, { timeoutMs: CENTER_PULL_TIMEOUT_MS, fetchImpl });
@@ -45,7 +45,7 @@ export declare function createMcpRevocationLedger(onChange?: (ev: {
45
45
  restored: string[];
46
46
  }) => void): McpRevocationLedger;
47
47
  /** 一拍 EffectiveConfig 的 ENABLED MCP 服务器条目表(`resolveMcpServers` 同判据:`enabled !== false`;
48
- * 值=整条目的 key 排序 JSON 指纹,Map 插入序=发布序);mcp 域缺席 ⇒ `null`(台账不动)。
48
+ * 值=条目的指纹面(`entry-metadata.ts` `mcpEntryFingerprintFace`:减备注 / 名册标签,分组标签按挂载口判据读)的 key 排序 JSON 指纹,Map 插入序=发布序);mcp 域缺席 ⇒ `null`(台账不动)。
49
49
  * 指纹序列化器 = `@sema-agent/settings-schema/hash` 的 `stableStringify`([ref] 起;[ref] 2026-08-31 起与 restart-signal 同源:此前本文件
50
50
  * 持一份**逐字相同**的私有复刻 `fingerprintOf`;JSON 形输入上字节恒等,golden 钉 test/canonical-json-golden.test.ts)。
51
51
  * 两处指纹仍只在各自域内自比、不跨域比对——同源只是去掉一份多余的复刻,不引入跨域约束;也**不**改用
@@ -1,4 +1,5 @@
1
1
  import { stableStringify } from "@sema-agent/settings-schema/hash";
2
+ import { mcpEntryFingerprintFace } from "./entry-metadata.js";
2
3
  export function createMcpRevocationLedger(onChange) {
3
4
  let baseline;
4
5
  let seen;
@@ -41,7 +42,7 @@ export function enabledMcpEntries(mcp) {
41
42
  const out = new Map();
42
43
  for (const s of mcp.servers) {
43
44
  if (s.enabled !== false)
44
- out.set(s.name, stableStringify(s));
45
+ out.set(s.name, stableStringify(mcpEntryFingerprintFace(s)));
45
46
  }
46
47
  return out;
47
48
  }
@@ -143,6 +143,7 @@ export declare const DroppedCatalogEntryRow: z.ZodObject<{
143
143
  "entry-schema-invalid": "entry-schema-invalid";
144
144
  "entry-key-invalid": "entry-key-invalid";
145
145
  "entry-unreadable": "entry-unreadable";
146
+ "entry-unknown-key": "entry-unknown-key";
146
147
  }>;
147
148
  identity: z.ZodOptional<z.ZodObject<{
148
149
  name: z.ZodOptional<z.ZodString>;
@@ -209,6 +209,7 @@ function reasonCodeForWire(code) {
209
209
  case "entry-schema-invalid":
210
210
  case "entry-key-invalid":
211
211
  case "entry-unreadable":
212
+ case "entry-unknown-key":
212
213
  return code;
213
214
  default: {
214
215
  const never = code;
@@ -3,14 +3,18 @@ import { stableStringify } from "@sema-agent/settings-schema/hash";
3
3
  import { DEFAULT_PLUGIN_ALLOW_HOSTS, materializablePlugins } from "../capabilities/center-plugins.js";
4
4
  import { CENTER_READ_FACE_LIVE_KEYS } from "./read-face.js";
5
5
  import { enabledA2aPeerView } from "./skills-mcp.js";
6
+ import { mcpEntryFingerprintFace, withoutEntryMetadata } from "./entry-metadata.js";
6
7
  const RESTART_SLICES = ["skills", "mcp", "a2a", "scenarios", "degrade-route", "read-face", "memory-consolidation"];
7
8
  function enabledOnly(rows) {
8
9
  if (!rows)
9
10
  return null;
10
11
  return rows.filter((r) => r.enabled !== false);
11
12
  }
13
+ function enabledEntriesFingerprint(rows, face = withoutEntryMetadata) {
14
+ return enabledOnly(rows)?.map((r) => face(r)) ?? null;
15
+ }
12
16
  export function catalogEntryFingerprint(entry) {
13
- const { cost, quotaWeight: _quotaWeight, enabled: _enabled, ...route } = entry;
17
+ const { cost, quotaWeight: _quotaWeight, enabled: _enabled, ...route } = withoutEntryMetadata(entry);
14
18
  return { ...route, costDeclared: cost !== undefined };
15
19
  }
16
20
  function planeEntriesFingerprint(rows) {
@@ -35,19 +39,19 @@ function restartSliceValue(eff, slice, ctx) {
35
39
  return null;
36
40
  switch (slice) {
37
41
  case "skills": {
38
- const skills = enabledOnly(eff.skills?.skills);
42
+ const skills = enabledEntriesFingerprint(eff.skills?.skills);
39
43
  const materialized = materializablePlugins(eff, ctx?.pluginsAllowHosts ?? DEFAULT_PLUGIN_ALLOW_HOSTS);
40
44
  const plugins = materialized.length > 0 ? materialized : null;
41
45
  return skills === null && plugins === null ? null : { skills, plugins };
42
46
  }
43
47
  case "mcp":
44
- return enabledOnly(eff.mcp?.servers);
48
+ return enabledEntriesFingerprint(eff.mcp?.servers, mcpEntryFingerprintFace);
45
49
  case "a2a": {
46
50
  const views = (eff.a2a?.peers ?? []).flatMap((peer) => enabledA2aPeerView(peer) ?? []);
47
51
  return views.length > 0 ? views : null;
48
52
  }
49
53
  case "scenarios":
50
- return enabledOnly(eff.scenarios?.scenarios);
54
+ return enabledEntriesFingerprint(eff.scenarios?.scenarios);
51
55
  case "read-face": {
52
56
  const d = eff.readFace;
53
57
  if (!d)
@@ -17,8 +17,8 @@ export type SkillBodySource = Pick<ConfigProvider, "fetchSkillContent" | "skillB
17
17
  * **在场 ⇒ 整只数组原样**(含 `[]`;不去重、不排序、不判拼写 —— settings-schema 14.4.0 的读法一句话,判官在引擎:`allowedTools` 是 allow 规则来源、`disallowedTools` 拒侧读成空的条目让
18
18
  * 那次激活 fail-closed)。数组复制一份:规格上的数组是引擎规格自己的,不与配置源手里的 manifest / 本地店对象共享。
19
19
  *
20
- * 本函数住在技能域的读口旁,三个读者共用 —— 本地腿 CLOSED 投影(`config-provider.ts` 的 `mapToServiceEffective`)、manifest → 规格的铸点({@link applySkillsManifest})、
21
- * 已装技能 ↔ manifest 的投影一致判据({@link installedSkillMatchesManifest}):三处各写一份键表就是下一次同形丢位([ref] 族)。契约再加一个技能键时的看守不在这里,
20
+ * 本函数住在技能域的读口旁,两个读者共用 —— manifest → 规格的铸点({@link applySkillsManifest})、
21
+ * 已装技能 ↔ manifest 的投影一致判据({@link installedSkillMatchesManifest}):两处各写一份键表就是下一次同形丢位(本地腿的 manifest 由契约 `toSkillsManifest` 铸,条目整只过境,不再有第三份键表)。契约再加一个技能键时的看守不在这里,
22
22
  * 在 `test/skill-tool-lists-carry.test.ts` 的键处置表(按 `keyof SkillSpec` 铸型)与 `test/settings-schema-consumption-gates.test.ts` 门 4(叶路径由契约形状派生)。
23
23
  */
24
24
  export declare function skillToolListsOf(source: {
@@ -71,8 +71,7 @@ export interface CenterModel {
71
71
  * `readEffectiveWire`)都把它们当未知键剥掉(1.10.0 夹具实测:`unknown-keys-dropped
72
72
  * {keys:["models.0.defaultThinking","models.0.reasoningEffortLevels"]}`;settings-schema 3.0.0 起同一条
73
73
  * 告警的坐标是**段数组** `{keys:[["models",0,"defaultThinking"],…]}`,出门形走 `formatConfigPath`),
74
- * `mapToServiceEffective` 的
75
- * CLOSED 投影也从未列过它们。留着 = 一份读不到任何东西的类型承诺 + `compat.reasoningEffortLevels`
74
+ * 当年本地腿的 CLOSED 投影(已删)也从未列过它们。留着 = 一份读不到任何东西的类型承诺 + `compat.reasoningEffortLevels`
76
75
  * 之外的第二个写者([ref]:同一语义面禁两个写者)。roster 级 `defaultThinking` 若要真做,归 schema 补键
77
76
  * 另立单据(见 CHANGELOG 未闭环)。
78
77
  */
@@ -139,8 +139,9 @@ export interface EndedSpace {
139
139
  * no second read to fail — a head read that throws fails the delete itself (retried to convergence). */
140
140
  export type CacheReclaimReason = "delete_failed" | "budget";
141
141
  /**
142
- * The ONE reclaim seat for an ended space — called where a space ENDS: the session-delete coordinator (`boot/session-faces.ts` `purgeSession`)
143
- * and the managed-retention sweep after it deletes session trees (`boot/retention-lane.ts`); neither writes a reclaim of its own. It reclaims
142
+ * The ONE reclaim seat for an ended space — called where a space ENDS, through the one session-erase settler (`session-erase.ts`
143
+ * `createSessionEraseSettler`) both deciders run after a session tree is erased: the session-delete coordinator (`boot/session-faces.ts` `purgeSession`)
144
+ * and the managed-retention sweep (`boot/retention-lane.ts`); neither writes a reclaim of its own. It reclaims
144
145
  * everything the space left behind: the cache volume (when configured), the `space/` snapshot partition and the session's park snapshots whose names carry the ended occupant's ownership mark (when a
145
146
  * snapshot store is configured; old-form / `none` park objects are left to the bucket's lifecycle rule). ONE call runs under ONE
146
147
  * absolute deadline (`dataTimeoutMs`) built at its entry — the cache volume and the objects of every space in the call; a space the deadline passed
@@ -13,7 +13,7 @@ dials the device, so the device needs no inbound port, no public address and no
13
13
 
14
14
  | Plane | Transport | Who calls whom | Where it is specified |
15
15
  |---|---|---|---|
16
- | Management / enrollment / binding | HTTPS, JSON | the user's client calls the server | the repository's `docs/ASSISTANT-WIRE-CONTRACT.md` §14 (not shipped in the npm package) |
16
+ | Management / enrollment / binding | HTTPS, JSON | the user's client calls the server | the server's wire contract, device-management section (internal record, not shipped) |
17
17
  | Executor | WebSocket (upgrade on the WS path below), text frames, JSON | the device connects out to the server | **this document** |
18
18
 
19
19
  **Discovery before you connect**: `GET /v1/capabilities` carries a `deviceExecutor` key — either `false`
@@ -1103,6 +1103,6 @@ The short version for an executor implementer:
1103
1103
  *different* device is refused — changing devices is an explicit rebind action, never an implicit one;
1104
1104
  - a non-device deployment refuses the key outright rather than ignoring it.
1105
1105
 
1106
- The full contract — request shapes, every refusal code, the rebind verb, and the disclosed races — is in
1107
- the repository's `docs/ASSISTANT-WIRE-CONTRACT.md` §14.6 and, for the management verbs, §14.1–14.5 (not shipped in the npm package). It is not repeated
1108
- here.
1106
+ The full contract — request shapes, every refusal code, the rebind verb, and the disclosed races — is part of
1107
+ the server's wire contract, in its device-lane section (the first-bind write protocol and the management verbs;
1108
+ internal record, not shipped). It is not repeated here.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/server",
3
- "version": "7.147.0",
3
+ "version": "7.148.0",
4
4
  "description": "Sema Server — the server/API implementation layer for Sema, wiring core, registry, model providers, and cloud agent execution. Built on @sema-agent/core.",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",
@@ -14,6 +14,9 @@
14
14
  "./main": {
15
15
  "default": "./dist/main.js"
16
16
  },
17
+ "./model-plane-probe": {
18
+ "default": "./dist/model-plane-probe.js"
19
+ },
17
20
  "./device-protocol": {
18
21
  "types": "./dist/device-protocol.d.ts",
19
22
  "default": "./dist/device-protocol.js"
@@ -78,8 +81,8 @@
78
81
  },
79
82
  "dependencies": {
80
83
  "@modelcontextprotocol/server": "2.4.0",
81
- "@sema-agent/core": "7.65.0",
82
- "@sema-agent/settings-schema": "20.0.0",
84
+ "@sema-agent/core": "7.66.0",
85
+ "@sema-agent/settings-schema": "24.0.0",
83
86
  "e2b": "2.36.0",
84
87
  "libsodium-wrappers": "0.8.4",
85
88
  "mysql2": "3.22.6",