@sema-agent/server 7.146.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 (850) hide show
  1. package/MIGRATION.md +1423 -24
  2. package/README.md +21 -8
  3. package/README.zh-CN.md +15 -9
  4. package/USAGE.md +537 -216
  5. package/deploy/facts/lanes.json +7 -0
  6. package/deploy/sema-up/README.md +18 -7
  7. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  8. package/deploy/sema-up/chart/templates/_helpers.tpl +42 -4
  9. package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -4
  10. package/deploy/sema-up/chart/templates/server.yaml +5 -4
  11. package/deploy/sema-up/chart/values.yaml +4 -3
  12. package/deploy/sema-up/cluster-up.sh +75 -176
  13. package/deploy/sema-up/kube-up.sh +29 -49
  14. package/deploy/sema-up/lib/chart-run.sh +23 -0
  15. package/deploy/sema-up/lib/dataroot.sh +3 -3
  16. package/deploy/sema-up/lib/flagshape.sh +4 -0
  17. package/deploy/sema-up/lib/health.sh +62 -13
  18. package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
  19. package/deploy/sema-up/lib/helm-values-kube.py +35 -0
  20. package/deploy/sema-up/lib/lanes.json +2 -5
  21. package/deploy/sema-up/lib/regcred.py +8 -0
  22. package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
  23. package/deploy/sema-up/lib/remote/image-import.sh +6 -0
  24. package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
  25. package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
  26. package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
  27. package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
  28. package/deploy/sema-up/lib/render-stack.py +17 -0
  29. package/deploy/sema-up/lib/shell-text.sh +87 -0
  30. package/deploy/sema-up/lib/usage-flags.txt +10 -0
  31. package/deploy/sema-up/lib/usage-head.txt +1 -0
  32. package/deploy/sema-up/lib/usage-tail.txt +13 -0
  33. package/deploy/sema-up/preflight.sh +10 -8
  34. package/deploy/sema-up/sema-up.sh +26 -48
  35. package/deploy/sema-up/smoke.sh +7 -6
  36. package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
  37. package/deploy/sema-up/stack/compose.yaml +18 -5
  38. package/deploy/sema-up/stack/sema-stack-cluster.yaml +25 -3
  39. package/dist/adoption/plan.d.ts +24 -0
  40. package/dist/adoption/plan.js +53 -1
  41. package/dist/adoption/runner.d.ts +10 -1
  42. package/dist/adoption/runner.js +36 -16
  43. package/dist/adoption/wire.d.ts +3 -3
  44. package/dist/approval-card.d.ts +32 -34
  45. package/dist/approval-gate-currency.js +3 -2
  46. package/dist/approval-reconciler.d.ts +4 -13
  47. package/dist/approval-reconciler.js +2 -2
  48. package/dist/approval.d.ts +16 -14
  49. package/dist/approval.js +3 -3
  50. package/dist/audit.d.ts +10 -3
  51. package/dist/audit.js +17 -9
  52. package/dist/auth-bridge.d.ts +0 -14
  53. package/dist/auth-bridge.js +0 -7
  54. package/dist/auto-mode-face.d.ts +10 -7
  55. package/dist/auto-mode-face.js +7 -4
  56. package/dist/background-agent-name.d.ts +19 -1
  57. package/dist/background-agent-name.js +12 -2
  58. package/dist/background-session-reap.d.ts +1 -1
  59. package/dist/bake-runner/main.js +9 -6
  60. package/dist/bench/s1/arms.js +6 -5
  61. package/dist/bench/s1/live-deps.js +8 -3
  62. package/dist/bench/s1/run-firm.js +6 -5
  63. package/dist/bind-host.d.ts +25 -0
  64. package/dist/bind-host.js +25 -0
  65. package/dist/boot/adoption.d.ts +3 -0
  66. package/dist/boot/adoption.js +1 -0
  67. package/dist/boot/crash-last.js +2 -1
  68. package/dist/boot/deployment-mods.d.ts +1 -1
  69. package/dist/boot/device-lane.js +5 -5
  70. package/dist/boot/engine-lease.d.ts +12 -11
  71. package/dist/boot/execution-env.d.ts +19 -8
  72. package/dist/boot/execution-env.js +80 -62
  73. package/dist/boot/execution-lane.d.ts +37 -9
  74. package/dist/boot/execution-lane.js +74 -20
  75. package/dist/boot/exit-boundary.d.ts +3 -3
  76. package/dist/boot/exit-boundary.js +6 -5
  77. package/dist/boot/exit-last.js +2 -1
  78. package/dist/boot/fatal-exit.d.ts +3 -5
  79. package/dist/boot/fatal-exit.js +2 -2
  80. package/dist/boot/governance-seams.d.ts +2 -2
  81. package/dist/boot/leader.d.ts +15 -0
  82. package/dist/boot/leader.js +18 -16
  83. package/dist/boot/memory-boundary.d.ts +11 -11
  84. package/dist/boot/memory-boundary.js +3 -3
  85. package/dist/boot/memory-consolidation.d.ts +50 -53
  86. package/dist/boot/memory-consolidation.js +11 -18
  87. package/dist/boot/org-memory.js +4 -3
  88. package/dist/boot/parked-revive-gate.d.ts +1 -1
  89. package/dist/boot/parked-revive-gate.js +3 -3
  90. package/dist/boot/reapers.d.ts +4 -3
  91. package/dist/boot/reapers.js +20 -17
  92. package/dist/boot/resolve-spec.d.ts +5 -3
  93. package/dist/boot/resolve-spec.js +133 -165
  94. package/dist/boot/retention-lane.d.ts +7 -45
  95. package/dist/boot/retention-lane.js +2 -2
  96. package/dist/boot/runner-deps.d.ts +28 -7
  97. package/dist/boot/runner-deps.js +11 -4
  98. package/dist/boot/runtime-caps.d.ts +2 -2
  99. package/dist/boot/runtime-caps.js +16 -2
  100. package/dist/boot/session-faces.d.ts +17 -7
  101. package/dist/boot/session-faces.js +122 -96
  102. package/dist/boot/shutdown.d.ts +5 -4
  103. package/dist/boot/shutdown.js +6 -4
  104. package/dist/boot/stage-01-config.d.ts +1 -1
  105. package/dist/boot/stage-01-config.js +14 -2
  106. package/dist/boot/stage-02-web-admin-pull.d.ts +2 -1
  107. package/dist/boot/stage-02-web-admin-pull.js +15 -8
  108. package/dist/boot/stage-03-store-backend.d.ts +4 -1
  109. package/dist/boot/stage-03-store-backend.js +4 -3
  110. package/dist/boot/stage-04-stores.d.ts +3 -1
  111. package/dist/boot/stage-04-stores.js +2 -2
  112. package/dist/boot/stage-05-execution-env.d.ts +9 -5
  113. package/dist/boot/stage-05-execution-env.js +5 -5
  114. package/dist/boot/stage-06-runners.d.ts +13 -15
  115. package/dist/boot/stage-06-runners.js +24 -18
  116. package/dist/boot/stage-07-capability-layer.d.ts +14 -11
  117. package/dist/boot/stage-07-capability-layer.js +9 -12
  118. package/dist/boot/stage-08-reapers.d.ts +14 -11
  119. package/dist/boot/stage-08-reapers.js +3 -3
  120. package/dist/boot/stage-09-leader.d.ts +16 -18
  121. package/dist/boot/stage-09-leader.js +12 -4
  122. package/dist/boot/stage-10-http-server.d.ts +16 -18
  123. package/dist/boot/stage-10-http-server.js +9 -5
  124. package/dist/boot/store-evidence.d.ts +20 -0
  125. package/dist/boot/store-evidence.js +13 -0
  126. package/dist/boot/stores.d.ts +12 -0
  127. package/dist/boot/stores.js +39 -17
  128. package/dist/boot/task-list-lane.d.ts +4 -4
  129. package/dist/boot/web-admin.d.ts +4 -2
  130. package/dist/boot/web-admin.js +58 -38
  131. package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
  132. package/dist/boot-reclaim.d.ts +3 -1
  133. package/dist/boot-reclaim.js +1 -1
  134. package/dist/brain.d.ts +7 -18
  135. package/dist/brain.js +5 -17
  136. package/dist/budget.js +6 -6
  137. package/dist/capabilities/center-plugins.d.ts +9 -1
  138. package/dist/capabilities/center-plugins.js +37 -11
  139. package/dist/capabilities/center-wiring.js +1 -1
  140. package/dist/capabilities/composite-members.d.ts +3 -2
  141. package/dist/capabilities/composite-members.js +3 -2
  142. package/dist/capabilities/execution-lane.d.ts +7 -7
  143. package/dist/capabilities/execution-lane.js +2 -2
  144. package/dist/capabilities/hands-lane.d.ts +1 -1
  145. package/dist/capabilities/repo-tools.d.ts +2 -0
  146. package/dist/capabilities/repo-tools.js +14 -12
  147. package/dist/capabilities/scenarios.d.ts +38 -33
  148. package/dist/capabilities/scenarios.js +24 -25
  149. package/dist/capabilities/settings-contract.d.ts +29 -0
  150. package/dist/capabilities/settings-contract.js +14 -0
  151. package/dist/capabilities/skills.d.ts +6 -6
  152. package/dist/capabilities/tool-defer.d.ts +1 -1
  153. package/dist/capability-facts.d.ts +69 -4
  154. package/dist/capability-facts.js +77 -5
  155. package/dist/card-void.d.ts +4 -4
  156. package/dist/card-void.js +1 -1
  157. package/dist/center-credential-renewer.d.ts +6 -2
  158. package/dist/center-credential-renewer.js +10 -5
  159. package/dist/config-catalog.d.ts +16 -1
  160. package/dist/config-catalog.js +68 -61
  161. package/dist/config-dir-trust.d.ts +37 -4
  162. package/dist/config-dir-trust.js +88 -44
  163. package/dist/config-invariants.d.ts +58 -4
  164. package/dist/config-invariants.js +104 -23
  165. package/dist/config-lkg.d.ts +24 -2
  166. package/dist/config-lkg.js +22 -9
  167. package/dist/config-provider.d.ts +9 -9
  168. package/dist/config-provider.js +25 -108
  169. package/dist/config-pull-failure.d.ts +50 -0
  170. package/dist/config-pull-failure.js +48 -0
  171. package/dist/config-types.d.ts +215 -202
  172. package/dist/config.d.ts +69 -14
  173. package/dist/config.js +188 -96
  174. package/dist/degenerate-instrument.js +1 -1
  175. package/dist/delegated-session-owner.d.ts +1 -1
  176. package/dist/deleted-session-ids.d.ts +3 -2
  177. package/dist/deploy-facts.js +3 -2
  178. package/dist/deployment-governance.d.ts +3 -3
  179. package/dist/deployment-shape.d.ts +51 -16
  180. package/dist/deployment-shape.js +31 -6
  181. package/dist/egress-redirect.d.ts +25 -7
  182. package/dist/egress-redirect.js +20 -2
  183. package/dist/elicitation.d.ts +6 -5
  184. package/dist/elicitation.js +23 -22
  185. package/dist/engine-identity.d.ts +28 -0
  186. package/dist/engine-identity.js +10 -0
  187. package/dist/entry-problems.d.ts +5 -7
  188. package/dist/entry-problems.js +1 -1
  189. package/dist/env-facts.d.ts +7 -5
  190. package/dist/env-facts.js +12 -7
  191. package/dist/env-witness.d.ts +7 -0
  192. package/dist/env-witness.js +16 -0
  193. package/dist/execution-config-root.d.ts +5 -5
  194. package/dist/execution-config-root.js +5 -5
  195. package/dist/execution-env-purpose.d.ts +14 -0
  196. package/dist/execution-env-purpose.js +29 -0
  197. package/dist/execution-lane-caps.d.ts +53 -103
  198. package/dist/execution-lane-caps.js +51 -83
  199. package/dist/execution-placement.d.ts +65 -9
  200. package/dist/execution-placement.js +58 -0
  201. package/dist/field-conflict.d.ts +7 -11
  202. package/dist/field-conflict.js +3 -3
  203. package/dist/file-history-capture.d.ts +3 -3
  204. package/dist/file-history-disclosure.d.ts +2 -2
  205. package/dist/file-history-disclosure.js +1 -0
  206. package/dist/fleet/drain-entry.d.ts +17 -10
  207. package/dist/fleet/drain-entry.js +1 -1
  208. package/dist/fleet/fleet-bus.d.ts +21 -3
  209. package/dist/fleet/fleet-bus.js +35 -25
  210. package/dist/fleet/fleet-reconciler.js +2 -2
  211. package/dist/fleet/serving-lease.js +6 -7
  212. package/dist/fleet-client.js +3 -3
  213. package/dist/fleet-lease.d.ts +0 -1
  214. package/dist/fleet-lease.js +4 -5
  215. package/dist/history-anchor.d.ts +42 -0
  216. package/dist/history-anchor.js +34 -0
  217. package/dist/hitl-delivery.d.ts +90 -0
  218. package/dist/hitl-delivery.js +98 -0
  219. package/dist/hooks/classic-stations.d.ts +8 -11
  220. package/dist/hooks/classic-stations.js +0 -7
  221. package/dist/hooks/command-spawn.d.ts +1 -4
  222. package/dist/hooks/command-spawn.js +0 -11
  223. package/dist/hooks/hook-llm.d.ts +5 -1
  224. package/dist/hooks/hook-llm.js +24 -15
  225. package/dist/hooks/hook-runner.d.ts +119 -65
  226. package/dist/hooks/hook-runner.js +415 -217
  227. package/dist/host-lsp-manager.d.ts +22 -8
  228. package/dist/host-lsp-manager.js +4 -1
  229. package/dist/http/active-run-conflict.d.ts +2 -43
  230. package/dist/http/active-run-conflict.js +3 -7
  231. package/dist/http/admission.d.ts +4 -18
  232. package/dist/http/admission.js +75 -78
  233. package/dist/http/approval-sweeps.d.ts +5 -8
  234. package/dist/http/approval-sweeps.js +55 -30
  235. package/dist/http/caller-trust.d.ts +8 -10
  236. package/dist/http/caller-trust.js +1 -2
  237. package/dist/http/checkpoint-ctx.d.ts +17 -0
  238. package/dist/http/checkpoint-ctx.js +6 -0
  239. package/dist/http/claim-heartbeat.d.ts +49 -0
  240. package/dist/http/claim-heartbeat.js +46 -0
  241. package/dist/http/claim-latency.d.ts +10 -0
  242. package/dist/http/claim-latency.js +12 -0
  243. package/dist/http/claimed-run.d.ts +4 -3
  244. package/dist/http/dispatch.d.ts +8 -1
  245. package/dist/http/dispatch.js +77 -31
  246. package/dist/http/durable-run-leg.d.ts +3 -3
  247. package/dist/http/durable-run-leg.js +18 -12
  248. package/dist/http/execution-context.d.ts +18 -42
  249. package/dist/http/execution-context.js +11 -5
  250. package/dist/http/health-reader.d.ts +36 -0
  251. package/dist/http/health-reader.js +21 -0
  252. package/dist/http/health-self-report.d.ts +9 -9
  253. package/dist/http/health-self-report.js +4 -4
  254. package/dist/http/idempotency.d.ts +9 -5
  255. package/dist/http/idempotency.js +4 -4
  256. package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
  257. package/dist/http/memory-compliance-failure-reply.js +7 -2
  258. package/dist/http/memory-face-fault-reply.d.ts +67 -0
  259. package/dist/http/memory-face-fault-reply.js +71 -0
  260. package/dist/http/memory-store-refusal-reply.d.ts +3 -3
  261. package/dist/http/memory-store-refusal-reply.js +6 -0
  262. package/dist/http/owner-access.d.ts +391 -56
  263. package/dist/http/owner-access.js +372 -33
  264. package/dist/http/principal-gate.d.ts +26 -94
  265. package/dist/http/principal-gate.js +24 -81
  266. package/dist/http/refusal-body.d.ts +35 -2
  267. package/dist/http/refusal-body.js +34 -0
  268. package/dist/http/request-guards.d.ts +10 -14
  269. package/dist/http/request-guards.js +34 -68
  270. package/dist/http/resume-composition.d.ts +37 -0
  271. package/dist/http/resume-composition.js +18 -0
  272. package/dist/http/resume-ctx-read.d.ts +35 -12
  273. package/dist/http/resume-ctx-read.js +25 -6
  274. package/dist/http/resume-legs.d.ts +24 -24
  275. package/dist/http/resume-legs.js +260 -171
  276. package/dist/http/retired-skill-manifest.d.ts +1 -1
  277. package/dist/http/rewind-files-reply.d.ts +34 -0
  278. package/dist/http/rewind-files-reply.js +36 -0
  279. package/dist/http/route-ctx.d.ts +56 -47
  280. package/dist/http/route-table.js +2 -0
  281. package/dist/http/routes/a2a-serve.d.ts +43 -5
  282. package/dist/http/routes/a2a-serve.js +58 -37
  283. package/dist/http/routes/admin-config-refresh.js +2 -2
  284. package/dist/http/routes/admin-drain.js +2 -2
  285. package/dist/http/routes/admin-memory-optout.js +4 -3
  286. package/dist/http/routes/adoption.d.ts +3 -0
  287. package/dist/http/routes/adoption.js +17 -10
  288. package/dist/http/routes/agents-roster.js +13 -7
  289. package/dist/http/routes/approvals-assistant.js +73 -88
  290. package/dist/http/routes/attachments.js +2 -2
  291. package/dist/http/routes/background.d.ts +3 -3
  292. package/dist/http/routes/background.js +9 -17
  293. package/dist/http/routes/capabilities.js +23 -20
  294. package/dist/http/routes/config-catalog.js +2 -2
  295. package/dist/http/routes/devices.d.ts +3 -3
  296. package/dist/http/routes/devices.js +5 -5
  297. package/dist/http/routes/diagnostics.d.ts +27 -3
  298. package/dist/http/routes/diagnostics.js +27 -21
  299. package/dist/http/routes/engine.js +2 -2
  300. package/dist/http/routes/fleet.js +5 -3
  301. package/dist/http/routes/images.js +10 -6
  302. package/dist/http/routes/leader.d.ts +7 -2
  303. package/dist/http/routes/leader.js +12 -3
  304. package/dist/http/routes/mcp-reconnect.d.ts +1 -1
  305. package/dist/http/routes/mcp-reconnect.js +7 -15
  306. package/dist/http/routes/memory-bundle.js +4 -7
  307. package/dist/http/routes/memory-compliance.js +4 -4
  308. package/dist/http/routes/memory-consolidation.js +6 -9
  309. package/dist/http/routes/memory-origin.d.ts +3 -1
  310. package/dist/http/routes/memory-origin.js +7 -8
  311. package/dist/http/routes/memory-policy.js +17 -12
  312. package/dist/http/routes/notify-wake.js +12 -20
  313. package/dist/http/routes/observability.js +3 -3
  314. package/dist/http/routes/principal-inbox.d.ts +1 -1
  315. package/dist/http/routes/principal-inbox.js +2 -2
  316. package/dist/http/routes/projects.d.ts +70 -0
  317. package/dist/http/routes/projects.js +87 -0
  318. package/dist/http/routes/retention-ops.js +6 -9
  319. package/dist/http/routes/rules.js +50 -7
  320. package/dist/http/routes/run-memory-capture.d.ts +2 -2
  321. package/dist/http/routes/run-memory-capture.js +6 -12
  322. package/dist/http/routes/run-permission-mode.d.ts +2 -2
  323. package/dist/http/routes/run-permission-mode.js +10 -17
  324. package/dist/http/routes/runs.js +148 -233
  325. package/dist/http/routes/session-memory-sync.d.ts +2 -2
  326. package/dist/http/routes/session-memory-sync.js +7 -13
  327. package/dist/http/routes/session-sync.d.ts +4 -2
  328. package/dist/http/routes/session-sync.js +48 -30
  329. package/dist/http/routes/sessions-list.d.ts +3 -3
  330. package/dist/http/routes/sessions-list.js +9 -9
  331. package/dist/http/routes/sessions.d.ts +7 -1
  332. package/dist/http/routes/sessions.js +177 -112
  333. package/dist/http/routes/shared-memory.js +6 -6
  334. package/dist/http/routes/side-query.js +2 -2
  335. package/dist/http/routes/tasks.js +144 -122
  336. package/dist/http/routes/trace-usage.d.ts +0 -12
  337. package/dist/http/routes/trace-usage.js +40 -46
  338. package/dist/http/routes/workflows.d.ts +39 -4
  339. package/dist/http/routes/workflows.js +42 -14
  340. package/dist/http/run-concurrency-cap.d.ts +20 -12
  341. package/dist/http/run-concurrency-cap.js +39 -26
  342. package/dist/http/run-read-face.d.ts +3 -5
  343. package/dist/http/run-read-face.js +8 -13
  344. package/dist/http/send.d.ts +12 -3
  345. package/dist/http/send.js +42 -6
  346. package/dist/http/server.d.ts +63 -50
  347. package/dist/http/server.js +52 -16
  348. package/dist/http/sse-log.d.ts +17 -10
  349. package/dist/http/sse-log.js +7 -7
  350. package/dist/http/stored-body-replay.d.ts +17 -3
  351. package/dist/http/stored-body-replay.js +11 -2
  352. package/dist/http/submit-ctx.d.ts +16 -8
  353. package/dist/http/submit-ctx.js +6 -2
  354. package/dist/http/submit-replay.d.ts +19 -6
  355. package/dist/http/submit-replay.js +18 -6
  356. package/dist/http/sync-submit-body.d.ts +3 -4
  357. package/dist/http/sync-submit-body.js +4 -5
  358. package/dist/http/wire-types.d.ts +23 -13
  359. package/dist/identity-source.d.ts +36 -5
  360. package/dist/identity-source.js +27 -0
  361. package/dist/index.d.ts +3 -2
  362. package/dist/index.js +2 -1
  363. package/dist/instruction-source-notice.d.ts +1 -1
  364. package/dist/key-resolver.d.ts +32 -0
  365. package/dist/key-resolver.js +23 -9
  366. package/dist/leader/diffup.js +2 -1
  367. package/dist/leader/endpoint.d.ts +26 -5
  368. package/dist/leader/endpoint.js +154 -14
  369. package/dist/leader/fanout.d.ts +3 -0
  370. package/dist/leader/fanout.js +78 -63
  371. package/dist/leader/leader.d.ts +16 -0
  372. package/dist/leader/leader.js +43 -3
  373. package/dist/leader/merge.d.ts +9 -1
  374. package/dist/leader/merge.js +16 -1
  375. package/dist/leader/repair-wire.js +1 -1
  376. package/dist/leader/wire.d.ts +36 -3
  377. package/dist/leader/wire.js +59 -18
  378. package/dist/lsp-evict.d.ts +6 -4
  379. package/dist/lsp-evict.js +2 -3
  380. package/dist/memory-embedder-reembed.d.ts +38 -0
  381. package/dist/memory-embedder-reembed.js +20 -0
  382. package/dist/memory-incident-sink.d.ts +0 -28
  383. package/dist/memory-incident-sink.js +5 -0
  384. package/dist/memory-operator-faces.d.ts +5 -4
  385. package/dist/memory-operator-faces.js +1 -1
  386. package/dist/memory-scope.d.ts +31 -4
  387. package/dist/memory-scope.js +65 -16
  388. package/dist/memory-store-refusal.d.ts +20 -4
  389. package/dist/memory-store-refusal.js +1 -1
  390. package/dist/memory-sync-client.d.ts +5 -2
  391. package/dist/memory-sync-client.js +19 -14
  392. package/dist/memory-sync.js +1 -1
  393. package/dist/model-compat.d.ts +51 -28
  394. package/dist/model-compat.js +55 -23
  395. package/dist/model-context-window.d.ts +18 -0
  396. package/dist/model-context-window.js +2 -0
  397. package/dist/model-entry-headers.d.ts +46 -4
  398. package/dist/model-entry-headers.js +2 -2
  399. package/dist/model-entry-refusal.d.ts +46 -17
  400. package/dist/model-entry-refusal.js +47 -27
  401. package/dist/model-plane-face.d.ts +19 -11
  402. package/dist/model-plane-face.js +9 -1
  403. package/dist/model-plane-probe.d.ts +2 -0
  404. package/dist/model-plane-probe.js +17 -0
  405. package/dist/model-provider.d.ts +3 -3
  406. package/dist/model-route-endpoint.d.ts +9 -5
  407. package/dist/model-route-endpoint.js +29 -7
  408. package/dist/model-select.d.ts +16 -0
  409. package/dist/model-select.js +4 -0
  410. package/dist/mountinfo.d.ts +37 -0
  411. package/dist/mountinfo.js +47 -0
  412. package/dist/namespaced-rule-name.d.ts +28 -2
  413. package/dist/namespaced-rule-name.js +10 -1
  414. package/dist/net-address.d.ts +1 -1
  415. package/dist/observability/corrupt-read-seat.d.ts +4 -4
  416. package/dist/observability/corrupt-read-seat.js +5 -3
  417. package/dist/observability/fail-open.d.ts +75 -47
  418. package/dist/observability/fail-open.js +77 -47
  419. package/dist/observability/logger.d.ts +22 -1
  420. package/dist/observability/logger.js +89 -12
  421. package/dist/observability/metrics.d.ts +2 -0
  422. package/dist/observability/metrics.js +5 -4
  423. package/dist/observability/otel-exporter.js +2 -1
  424. package/dist/observability/principal-context.d.ts +14 -7
  425. package/dist/observability/principal-context.js +8 -3
  426. package/dist/observability/run-terminal.d.ts +7 -1
  427. package/dist/observability/run-terminal.js +5 -2
  428. package/dist/observability/secret-env-scrub.d.ts +30 -4
  429. package/dist/observability/secret-env-scrub.js +15 -3
  430. package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
  431. package/dist/orchestration/hardened-vm-runner.js +11 -5
  432. package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
  433. package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
  434. package/dist/orchestration/hardened-vm-worker.js +2 -1
  435. package/dist/orchestration/workflow-agent-session-index.d.ts +7 -12
  436. package/dist/orchestration/workflow-agent-session-index.js +1 -6
  437. package/dist/orchestration/workflow-completion-inbox.d.ts +29 -9
  438. package/dist/orchestration/workflow-completion-inbox.js +65 -46
  439. package/dist/org-delivery-gate.d.ts +5 -4
  440. package/dist/org-delivery-gate.js +7 -6
  441. package/dist/org-memory-admission.d.ts +5 -2
  442. package/dist/org-memory-admission.js +25 -10
  443. package/dist/outbound-dispatcher.d.ts +1 -1
  444. package/dist/outbound-dispatcher.js +6 -12
  445. package/dist/owner-brands.d.ts +81 -0
  446. package/dist/owner-brands.js +42 -0
  447. package/dist/owner-faces.d.ts +531 -0
  448. package/dist/owner-faces.js +126 -0
  449. package/dist/parked-decide.d.ts +100 -31
  450. package/dist/parked-decide.js +162 -48
  451. package/dist/parked-revive-surface.d.ts +14 -4
  452. package/dist/parked-revive-surface.js +5 -4
  453. package/dist/peer-directory.d.ts +6 -8
  454. package/dist/peer-directory.js +3 -2
  455. package/dist/permission-rule-vocab.d.ts +53 -8
  456. package/dist/permission-rule-vocab.js +30 -2
  457. package/dist/plugins/adoption-log-sql.d.ts +0 -22
  458. package/dist/plugins/adoption-log-sql.js +5 -3
  459. package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
  460. package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
  461. package/dist/plugins/approval-ask-store-file.d.ts +28 -9
  462. package/dist/plugins/approval-ask-store-file.js +74 -18
  463. package/dist/plugins/approval-ask-store-memory.d.ts +17 -7
  464. package/dist/plugins/approval-ask-store-memory.js +35 -12
  465. package/dist/plugins/approval-ask-store-sql.d.ts +42 -20
  466. package/dist/plugins/approval-ask-store-sql.js +44 -11
  467. package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
  468. package/dist/plugins/approval-exemption-skill-m46.js +25 -0
  469. package/dist/plugins/approval-exemption-store.d.ts +6 -1
  470. package/dist/plugins/approval-exemption-store.js +14 -0
  471. package/dist/plugins/approval-nonce-store.d.ts +39 -12
  472. package/dist/plugins/approval-nonce-store.js +72 -23
  473. package/dist/plugins/blob-backend.d.ts +40 -195
  474. package/dist/plugins/blob-backend.js +41 -234
  475. package/dist/plugins/caching-session-store.d.ts +22 -5
  476. package/dist/plugins/caching-session-store.js +43 -4
  477. package/dist/plugins/checkpoint-index-columns.d.ts +33 -6
  478. package/dist/plugins/checkpoint-index-columns.js +39 -3
  479. package/dist/plugins/checkpoint-store-face.d.ts +84 -11
  480. package/dist/plugins/checkpoint-store-face.js +18 -1
  481. package/dist/plugins/device-store-sql.d.ts +2 -2
  482. package/dist/plugins/device-store-sql.js +6 -10
  483. package/dist/plugins/ensure-index.d.ts +13 -1
  484. package/dist/plugins/ensure-index.js +154 -21
  485. package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
  486. package/dist/plugins/ensure-schema-lock-policy.js +3 -2
  487. package/dist/plugins/execution-lane-rename-m40.d.ts +20 -0
  488. package/dist/plugins/execution-lane-rename-m40.js +10 -0
  489. package/dist/plugins/execution-placement-sql.d.ts +63 -88
  490. package/dist/plugins/execution-placement-sql.js +94 -54
  491. package/dist/plugins/file-run-store.d.ts +89 -35
  492. package/dist/plugins/file-run-store.js +197 -142
  493. package/dist/plugins/host-platform.d.ts +24 -3
  494. package/dist/plugins/host-platform.js +15 -1
  495. package/dist/plugins/image-bake-store-sql.js +2 -0
  496. package/dist/plugins/imported-layer-root-retirement.d.ts +19 -10
  497. package/dist/plugins/imported-layer-root-retirement.js +4 -8
  498. package/dist/plugins/inbox-payload-column.d.ts +14 -0
  499. package/dist/plugins/inbox-payload-column.js +13 -0
  500. package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
  501. package/dist/plugins/k8s-pod-reaper.js +0 -1
  502. package/dist/plugins/leader-run-store-sql.d.ts +22 -0
  503. package/dist/plugins/leader-run-store-sql.js +34 -4
  504. package/dist/plugins/local-checkpoint-store.d.ts +63 -23
  505. package/dist/plugins/local-checkpoint-store.js +204 -81
  506. package/dist/plugins/local-data-dir-modes-m39.d.ts +48 -0
  507. package/dist/plugins/local-data-dir-modes-m39.js +183 -0
  508. package/dist/plugins/local-docker-capacity.d.ts +93 -0
  509. package/dist/plugins/local-docker-capacity.js +194 -0
  510. package/dist/plugins/local-docker-reaper.d.ts +92 -0
  511. package/dist/plugins/local-docker-reaper.js +102 -0
  512. package/dist/plugins/local-engine-high-water.d.ts +13 -0
  513. package/dist/plugins/local-engine-high-water.js +62 -0
  514. package/dist/plugins/local-session-store.d.ts +442 -143
  515. package/dist/plugins/local-session-store.js +941 -289
  516. package/dist/plugins/local-session-window.d.ts +3 -2
  517. package/dist/plugins/local-session-window.js +3 -2
  518. package/dist/plugins/local-sidecar-quarantine.js +3 -2
  519. package/dist/plugins/local-task-attachment-store.d.ts +20 -1
  520. package/dist/plugins/local-task-attachment-store.js +32 -12
  521. package/dist/plugins/memory-embedder-fingerprint.d.ts +33 -10
  522. package/dist/plugins/memory-embedder-fingerprint.js +52 -12
  523. package/dist/plugins/memory-embedder.d.ts +1 -1
  524. package/dist/plugins/memory-embedder.js +11 -9
  525. package/dist/plugins/memory-engine-pg.d.ts +7 -5
  526. package/dist/plugins/memory-engine-pg.js +18 -9
  527. package/dist/plugins/memory-engine-sql-apply.d.ts +21 -8
  528. package/dist/plugins/memory-engine-sql-apply.js +7 -9
  529. package/dist/plugins/memory-engine-tidb.d.ts +12 -7
  530. package/dist/plugins/memory-engine-tidb.js +18 -10
  531. package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
  532. package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
  533. package/dist/plugins/memory-run-store.d.ts +39 -27
  534. package/dist/plugins/memory-run-store.js +72 -70
  535. package/dist/plugins/one-time-migration-marker.d.ts +10 -0
  536. package/dist/plugins/one-time-migration-marker.js +7 -0
  537. package/dist/plugins/one-time-migrations.d.ts +325 -74
  538. package/dist/plugins/one-time-migrations.js +705 -230
  539. package/dist/plugins/org-delivery-quota-store.js +2 -1
  540. package/dist/plugins/owner-only-file-mode.d.ts +29 -0
  541. package/dist/plugins/owner-only-file-mode.js +141 -0
  542. package/dist/plugins/permission-rule-store-file.d.ts +11 -11
  543. package/dist/plugins/permission-rule-store-file.js +14 -2
  544. package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
  545. package/dist/plugins/permission-rule-store-sql.js +6 -86
  546. package/dist/plugins/pg-pool.d.ts +3 -32
  547. package/dist/plugins/pg-pool.js +27 -11
  548. package/dist/plugins/release-version.d.ts +20 -0
  549. package/dist/plugins/release-version.js +28 -0
  550. package/dist/plugins/remote-env-adb.d.ts +20 -4
  551. package/dist/plugins/remote-env-adb.js +39 -11
  552. package/dist/plugins/remote-env-e2b.d.ts +19 -28
  553. package/dist/plugins/remote-env-e2b.js +40 -29
  554. package/dist/plugins/remote-env-host.d.ts +11 -10
  555. package/dist/plugins/remote-env-host.js +40 -27
  556. package/dist/plugins/remote-env-k8s.d.ts +45 -47
  557. package/dist/plugins/remote-env-k8s.js +122 -62
  558. package/dist/plugins/remote-env-local-docker.d.ts +152 -15
  559. package/dist/plugins/remote-env-local-docker.js +370 -75
  560. package/dist/plugins/remote-env-ssh.d.ts +8 -2
  561. package/dist/plugins/remote-env-ssh.js +26 -24
  562. package/dist/plugins/remote-scratchpad.js +4 -0
  563. package/dist/plugins/remote-shell.d.ts +59 -30
  564. package/dist/plugins/remote-shell.js +175 -62
  565. package/dist/plugins/retention-declaration.d.ts +37 -0
  566. package/dist/plugins/retention-declaration.js +9 -0
  567. package/dist/plugins/retention-deployment.d.ts +158 -0
  568. package/dist/plugins/retention-deployment.js +119 -0
  569. package/dist/plugins/retention-lane-store-sql.d.ts +74 -4
  570. package/dist/plugins/retention-lane-store-sql.js +103 -1
  571. package/dist/plugins/retention-sql.d.ts +29 -0
  572. package/dist/plugins/retention-sql.js +8 -0
  573. package/dist/plugins/run-preview-m45.d.ts +11 -0
  574. package/dist/plugins/run-preview-m45.js +19 -0
  575. package/dist/plugins/run-store-sql.d.ts +56 -68
  576. package/dist/plugins/run-store-sql.js +127 -116
  577. package/dist/plugins/s3-answer.d.ts +2 -1
  578. package/dist/plugins/sandbox-reaper.d.ts +26 -0
  579. package/dist/plugins/sandbox-reaper.js +2 -0
  580. package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
  581. package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
  582. package/dist/plugins/scheduler-support.d.ts +16 -1
  583. package/dist/plugins/scheduler-support.js +22 -2
  584. package/dist/plugins/schema-consistency.d.ts +42 -15
  585. package/dist/plugins/schema-consistency.js +213 -13
  586. package/dist/plugins/schema-drift-sentence.d.ts +4 -1
  587. package/dist/plugins/schema-drift-sentence.js +4 -4
  588. package/dist/plugins/schema-ensure-legs.d.ts +10 -1
  589. package/dist/plugins/schema-ensure-legs.js +12 -2
  590. package/dist/plugins/schema-indexes.js +3 -0
  591. package/dist/plugins/schema-live-columns.d.ts +14 -5
  592. package/dist/plugins/schema-live-columns.js +10 -10
  593. package/dist/plugins/send-user-file.js +2 -1
  594. package/dist/plugins/session-birth.d.ts +37 -0
  595. package/dist/plugins/session-birth.js +38 -0
  596. package/dist/plugins/session-epoch-anchor.d.ts +40 -12
  597. package/dist/plugins/session-epoch-anchor.js +33 -11
  598. package/dist/plugins/session-ext-table.d.ts +98 -0
  599. package/dist/plugins/session-ext-table.js +134 -0
  600. package/dist/plugins/session-fork.d.ts +16 -2
  601. package/dist/plugins/session-fork.js +3 -0
  602. package/dist/plugins/session-ownership.d.ts +1 -1
  603. package/dist/plugins/session-placement.d.ts +22 -16
  604. package/dist/plugins/session-placement.js +15 -12
  605. package/dist/plugins/session-row-sql.d.ts +20 -7
  606. package/dist/plugins/session-row-sql.js +16 -8
  607. package/dist/plugins/session-run-rollup.d.ts +29 -0
  608. package/dist/plugins/session-run-rollup.js +40 -0
  609. package/dist/plugins/session-store-sql.d.ts +157 -0
  610. package/dist/plugins/session-store-sql.js +398 -0
  611. package/dist/plugins/session-withdraw-sql.d.ts +36 -0
  612. package/dist/plugins/session-withdraw-sql.js +42 -0
  613. package/dist/plugins/session-workspace-cell.d.ts +2 -2
  614. package/dist/plugins/session-workspace-cell.js +2 -2
  615. package/dist/plugins/shared-memory-store-sql.d.ts +10 -69
  616. package/dist/plugins/shared-memory-store-sql.js +15 -14
  617. package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
  618. package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
  619. package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
  620. package/dist/plugins/snapshot-bucket-presence.js +1 -1
  621. package/dist/plugins/sql-driver.d.ts +24 -8
  622. package/dist/plugins/sql-driver.js +43 -9
  623. package/dist/plugins/sql-errors.d.ts +35 -5
  624. package/dist/plugins/sql-errors.js +55 -3
  625. package/dist/plugins/sql-json-column.d.ts +8 -7
  626. package/dist/plugins/sql-json-column.js +10 -6
  627. package/dist/plugins/store-backend.d.ts +114 -18
  628. package/dist/plugins/store-backend.js +340 -87
  629. package/dist/plugins/store-contracts.d.ts +97 -30
  630. package/dist/plugins/store-contracts.js +23 -1
  631. package/dist/plugins/store-fault.d.ts +28 -2
  632. package/dist/plugins/store-fault.js +20 -2
  633. package/dist/plugins/task-attachment-store.d.ts +21 -11
  634. package/dist/plugins/task-attachment-store.js +37 -19
  635. package/dist/plugins/task-list-store-sql.d.ts +1 -1
  636. package/dist/plugins/text-column-capacity.d.ts +21 -0
  637. package/dist/plugins/text-column-capacity.js +5 -0
  638. package/dist/plugins/tidb-pool.d.ts +3 -2
  639. package/dist/plugins/tidb-pool.js +42 -39
  640. package/dist/plugins/user-input-ledger-sql.d.ts +1 -1
  641. package/dist/plugins/web-search.js +5 -3
  642. package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
  643. package/dist/plugins/workflow-run-store-sql.js +11 -5
  644. package/dist/principal-jwt.d.ts +4 -4
  645. package/dist/principal-jwt.js +20 -5
  646. package/dist/principal-shape.d.ts +41 -0
  647. package/dist/principal-shape.js +19 -0
  648. package/dist/question.d.ts +13 -23
  649. package/dist/question.js +21 -39
  650. package/dist/read-face-posture.d.ts +6 -6
  651. package/dist/read-face-posture.js +2 -2
  652. package/dist/request-declaration-refusal.d.ts +35 -12
  653. package/dist/request-declaration-refusal.js +21 -9
  654. package/dist/request-form.d.ts +58 -0
  655. package/dist/request-form.js +72 -0
  656. package/dist/request-image-urls.d.ts +8 -2
  657. package/dist/request-image-urls.js +2 -1
  658. package/dist/request-images.d.ts +20 -0
  659. package/dist/request-images.js +59 -0
  660. package/dist/request-key-closure.d.ts +6 -7
  661. package/dist/request-key-closure.js +15 -2
  662. package/dist/request-value-closure.d.ts +5 -5
  663. package/dist/request-value-closure.js +1 -1
  664. package/dist/resource-suspend.d.ts +7 -16
  665. package/dist/resource-suspend.js +1 -1
  666. package/dist/retired-name-host-notice.d.ts +21 -0
  667. package/dist/retired-name-host-notice.js +12 -0
  668. package/dist/rule-entry-list.d.ts +2 -2
  669. package/dist/rule-entry-list.js +3 -4
  670. package/dist/rule-issue-reading.d.ts +58 -0
  671. package/dist/rule-issue-reading.js +14 -0
  672. package/dist/rules-consent.d.ts +46 -16
  673. package/dist/rules-consent.js +102 -53
  674. package/dist/run-acceptance.d.ts +3 -1
  675. package/dist/run-acceptance.js +3 -0
  676. package/dist/run-local.d.ts +14 -6
  677. package/dist/run-local.js +109 -93
  678. package/dist/run-stale-default.d.ts +7 -0
  679. package/dist/run-stale-default.js +2 -0
  680. package/dist/runs.d.ts +73 -44
  681. package/dist/runs.js +65 -43
  682. package/dist/runtime-caps-resolver.d.ts +36 -14
  683. package/dist/runtime-caps-resolver.js +31 -14
  684. package/dist/runtime-governance.d.ts +2 -2
  685. package/dist/runtime-governance.js +5 -3
  686. package/dist/sealed-key-layout.d.ts +12 -6
  687. package/dist/sealed-key-layout.js +5 -1
  688. package/dist/sealed-key.d.ts +12 -2
  689. package/dist/sealed-key.js +116 -26
  690. package/dist/security.d.ts +133 -161
  691. package/dist/security.js +163 -59
  692. package/dist/sema-config-dir.d.ts +20 -0
  693. package/dist/sema-config-dir.js +27 -2
  694. package/dist/server-secret-env.d.ts +23 -5
  695. package/dist/server-secret-env.js +14 -4
  696. package/dist/service-version.d.ts +2 -1
  697. package/dist/service-version.js +2 -2
  698. package/dist/session-children-retire.d.ts +7 -5
  699. package/dist/session-children-retire.js +7 -2
  700. package/dist/session-deletion.d.ts +88 -0
  701. package/dist/session-deletion.js +8 -0
  702. package/dist/session-erase.d.ts +145 -0
  703. package/dist/session-erase.js +115 -0
  704. package/dist/session-error-wire.d.ts +6 -6
  705. package/dist/session-error-wire.js +1 -1
  706. package/dist/session-incarnation.d.ts +60 -10
  707. package/dist/session-incarnation.js +19 -2
  708. package/dist/session-policy-wire.d.ts +6 -3
  709. package/dist/session-policy-wire.js +11 -1
  710. package/dist/session-resident-background.d.ts +29 -47
  711. package/dist/session-resident-background.js +77 -8
  712. package/dist/session-row.d.ts +3 -2
  713. package/dist/session-rules-seat.d.ts +12 -0
  714. package/dist/session-rules-seat.js +19 -0
  715. package/dist/session-sync-kernel.d.ts +1 -1
  716. package/dist/session-titler.d.ts +7 -15
  717. package/dist/session-titler.js +1 -1
  718. package/dist/session-workspace.d.ts +11 -2
  719. package/dist/session-workspace.js +5 -0
  720. package/dist/sighup-idle.d.ts +1 -1
  721. package/dist/spec-fields.d.ts +57 -3
  722. package/dist/spec-fields.js +72 -51
  723. package/dist/store-posture.d.ts +138 -21
  724. package/dist/store-posture.js +188 -3
  725. package/dist/stored-request-hooks-m20.d.ts +3 -2
  726. package/dist/stored-request-hooks-m20.js +21 -16
  727. package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
  728. package/dist/stores-sql/background-agent-store-sql.js +73 -20
  729. package/dist/stores-sql/blob-index-sql.d.ts +148 -0
  730. package/dist/stores-sql/blob-index-sql.js +154 -0
  731. package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
  732. package/dist/stores-sql/checkpoint-store-sql.js +86 -71
  733. package/dist/{plugins → stores-sql}/file-history-store-sql.d.ts +23 -11
  734. package/dist/{plugins → stores-sql}/file-history-store-sql.js +23 -18
  735. package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
  736. package/dist/stores-sql/mailbox-store-sql.js +31 -32
  737. package/dist/{plugins → stores-sql}/pg-session-storage.d.ts +30 -81
  738. package/dist/{plugins → stores-sql}/pg-session-storage.js +123 -244
  739. package/dist/{plugins → stores-sql}/retention-store-sql.d.ts +197 -223
  740. package/dist/{plugins → stores-sql}/retention-store-sql.js +148 -207
  741. package/dist/{plugins → stores-sql}/session-event-payload.d.ts +1 -1
  742. package/dist/{plugins → stores-sql}/session-event-payload.js +1 -1
  743. package/dist/stores-sql/session-policy-store-sql.d.ts +33 -11
  744. package/dist/stores-sql/session-policy-store-sql.js +44 -36
  745. package/dist/stores-sql/session-write-hooks.d.ts +65 -0
  746. package/dist/stores-sql/session-write-hooks.js +2 -0
  747. package/dist/{plugins → stores-sql}/tidb-session-storage.d.ts +14 -15
  748. package/dist/{plugins → stores-sql}/tidb-session-storage.js +22 -28
  749. package/dist/{plugins → stores-sql}/tidb-session-store.d.ts +67 -138
  750. package/dist/{plugins → stores-sql}/tidb-session-store.js +130 -200
  751. package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
  752. package/dist/stores-sql/tool-result-store-sql.js +1 -1
  753. package/dist/stores-sql/windowed-session-storage.d.ts +61 -0
  754. package/dist/stores-sql/windowed-session-storage.js +70 -0
  755. package/dist/submission-exit.d.ts +50 -0
  756. package/dist/submission-exit.js +108 -0
  757. package/dist/task-a2a.d.ts +7 -1
  758. package/dist/task-a2a.js +18 -17
  759. package/dist/task-cwd.d.ts +31 -3
  760. package/dist/task-cwd.js +25 -1
  761. package/dist/task-mcp.d.ts +11 -3
  762. package/dist/task-mcp.js +16 -19
  763. package/dist/task-settings.d.ts +23 -14
  764. package/dist/task-settings.js +35 -13
  765. package/dist/terminal.d.ts +25 -43
  766. package/dist/terminal.js +31 -11
  767. package/dist/tool-approval.d.ts +152 -137
  768. package/dist/tool-approval.js +199 -199
  769. package/dist/trace/core-keyset-guard.d.ts +22 -9
  770. package/dist/trace/core-vocab-wire.d.ts +95 -0
  771. package/dist/trace/core-vocab-wire.js +15 -0
  772. package/dist/trace/engine-notice-wire.d.ts +1 -1
  773. package/dist/trace/engine-notice-wire.js +2 -0
  774. package/dist/trace/exit-seat.d.ts +52 -4
  775. package/dist/trace/exit-seat.js +43 -36
  776. package/dist/trace/extension-call-face.d.ts +3 -2
  777. package/dist/trace/extension-call-face.js +3 -1
  778. package/dist/trace/ledger-events.d.ts +4 -7
  779. package/dist/trace/ledger-sink.d.ts +1 -30
  780. package/dist/trace/ledger-sink.js +0 -11
  781. package/dist/trace/model-segment.d.ts +5 -5
  782. package/dist/trace/model-segment.js +5 -5
  783. package/dist/trace/project.d.ts +88 -58
  784. package/dist/trace/project.js +64 -28
  785. package/dist/trace/redact.d.ts +124 -28
  786. package/dist/trace/redact.js +936 -328
  787. package/dist/trace/self-minted-wire.d.ts +750 -29
  788. package/dist/trace/self-minted-wire.js +262 -25
  789. package/dist/trace/sema-provenance.d.ts +45 -41
  790. package/dist/trace/sema-provenance.js +81 -10
  791. package/dist/trace/task-notification-facets.d.ts +70 -2
  792. package/dist/trace/task-notification-facets.js +71 -1
  793. package/dist/trace/wire-projection-faces.d.ts +43 -8
  794. package/dist/trace/wire-projection-faces.js +28 -3
  795. package/dist/unread-request-members.d.ts +66 -0
  796. package/dist/unread-request-members.js +41 -0
  797. package/dist/upstream-body.d.ts +23 -0
  798. package/dist/upstream-body.js +16 -0
  799. package/dist/url-refusal.d.ts +3 -3
  800. package/dist/url-refusal.js +11 -4
  801. package/dist/user-authored-text.d.ts +1 -1
  802. package/dist/user-input-ledger.d.ts +7 -8
  803. package/dist/user-input-ledger.js +1 -1
  804. package/dist/web-admin-client/apply-effective.d.ts +6 -3
  805. package/dist/web-admin-client/apply-effective.js +33 -40
  806. package/dist/web-admin-client/apply-ledger.d.ts +16 -7
  807. package/dist/web-admin-client/apply-ledger.js +5 -2
  808. package/dist/web-admin-client/candidate-gate.d.ts +35 -3
  809. package/dist/web-admin-client/candidate-gate.js +53 -5
  810. package/dist/web-admin-client/center-request.d.ts +6 -3
  811. package/dist/web-admin-client/center-request.js +17 -16
  812. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  813. package/dist/web-admin-client/effective-keys.js +1 -2
  814. package/dist/web-admin-client/entry-metadata.d.ts +8 -0
  815. package/dist/web-admin-client/entry-metadata.js +13 -0
  816. package/dist/web-admin-client/facade.d.ts +1 -1
  817. package/dist/web-admin-client/http-client.d.ts +2 -1
  818. package/dist/web-admin-client/http-client.js +40 -13
  819. package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
  820. package/dist/web-admin-client/mcp-revocation.js +2 -1
  821. package/dist/web-admin-client/read-warnings.d.ts +1 -0
  822. package/dist/web-admin-client/read-warnings.js +1 -0
  823. package/dist/web-admin-client/restart-signal.js +13 -6
  824. package/dist/web-admin-client/skills-mcp.d.ts +22 -8
  825. package/dist/web-admin-client/skills-mcp.js +26 -21
  826. package/dist/web-admin-client/types.d.ts +35 -51
  827. package/dist/workspace-space.d.ts +3 -2
  828. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
  829. package/package.json +16 -12
  830. package/scripts/drain-check-local.mjs +118 -173
  831. package/scripts/drain-check.mysql.sql +20 -16
  832. package/scripts/drain-check.pg.sql +20 -16
  833. package/wire-changes/server@7.147.0.json +813 -0
  834. package/wire-changes/server@7.148.0.json +1517 -0
  835. package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
  836. package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
  837. package/dist/http/memory-layer-reply.d.ts +0 -30
  838. package/dist/http/memory-layer-reply.js +0 -24
  839. package/dist/lsp/e2b-bridge.d.ts +0 -57
  840. package/dist/lsp/e2b-bridge.js +0 -139
  841. package/dist/lsp/e2b-manager.d.ts +0 -93
  842. package/dist/lsp/e2b-manager.js +0 -178
  843. package/dist/lsp/lsp-frames.d.ts +0 -14
  844. package/dist/lsp/lsp-frames.js +0 -25
  845. package/dist/lsp/manager.d.ts +0 -129
  846. package/dist/lsp/manager.js +0 -127
  847. package/dist/lsp/types.d.ts +0 -12
  848. package/dist/lsp/types.js +0 -2
  849. package/dist/lsp/ws-transport.d.ts +0 -40
  850. package/dist/lsp/ws-transport.js +0 -210
@@ -12,7 +12,7 @@
12
12
  # MODEL_GATEWAY_BASEURL MODEL_ID MODEL_API_KEY
13
13
  # ALLOW_SMALL_CLUSTER=true 放行 <3 机(dev/CI 单节点验流程;生产必须 >=3 奇数)
14
14
  set -euo pipefail
15
- # >>> 自身目录(五个入口逐字同一段)
15
+ # [[[ 自身目录(五个入口逐字同一段)
16
16
  # HERE = 本脚本**真实文件**所在目录。经 npm bin 软链(node_modules/.bin/sema-up)调用时 $0 是软链路径,
17
17
  # 按它的目录找 lib/ 会落进 .bin/ ⇒ 逐跳解软链。只用不带参数的 readlink(macOS 自带 bash 3.2 / BSD readlink 没有 -f)。
18
18
  # 库要在知道 HERE 之后才找得到,所以这段不能收进库里:五个入口各持同一段,逐字一致由测试判。
@@ -24,7 +24,7 @@ while [ -L "$_self" ]; do
24
24
  done
25
25
  HERE="$(cd "$(dirname "$_self")" && pwd)"
26
26
  unset _self _hops _dir
27
- # <<< 自身目录
27
+ # ]]] 自身目录
28
28
  # `.env` 的文法与全部读写原语只在 lib/envf.sh 定义:本脚本不再有自己的 setk / `. "$ENVF"`。
29
29
  . "$HERE/lib/envf.sh"
30
30
  # 「壳怎么接这台引擎」的渲染(sema-up.sh / kube-up.sh 同一只)。
@@ -35,6 +35,8 @@ unset _self _hops _dir
35
35
  . "$HERE/lib/health.sh"
36
36
  # 对象存储桶的唯一表(sema-up.sh / kube-up.sh / smoke.sh 同读这一张)。
37
37
  . "$HERE/lib/buckets.sh"
38
+ # 跑图表的共用读法:只打 helm 输出里的 NOTES 段(kube-up.sh 同一只)。
39
+ . "$HERE/lib/chart-run.sh"
38
40
  log() { printf '[cluster-up] %s\n' "$*" >&2; }
39
41
  die() { log "⛔ $*"; exit 1; }
40
42
 
@@ -87,24 +89,25 @@ mscp() { # mscp <i> <local> <remote>
87
89
  rsudo() { local i="$1"; shift; if [ "$(mvar "$i" USER)" = "root" ]; then mssh "$i" bash -s -- "$@"; else mssh "$i" sudo bash -s -- "$@"; fi; }
88
90
  # 远端单命令(stdin 归命令用,如 kubectl apply -f -)
89
91
  rrun() { local i="$1"; shift; if [ "$(mvar "$i" USER)" = "root" ]; then mssh "$i" "$@"; else mssh "$i" sudo "$@"; fi; }
92
+ # 远端要跑的脚本有两种来路,都不用 here-document / here-string(正文超过管道缓冲时,先写后 fork 的写法会在管道配额吃紧的机器上永远写不完):
93
+ # · 全静态的正文 ⇒ 仓内文件 lib/remote/*.sh,`rsudo N < "$HERE/lib/remote/….sh"`(stdin 直接是文件,没有管道);要传给远端 $1… 的值放在 N 后面;
94
+ # · 要展开本地变量的正文 ⇒ `rsudo_text N "<双引号串>"`:文本(第 2 个参数)与改前展开后的字节相同,经 stdin 喂 `bash -s`。
95
+ # 文本是 shell 函数的参数、printf 是内建,所以口令(如 k3s token)既不落盘也不进任何进程的命令行;用进程替换而不是管道,rc 只取 rsudo 的。
96
+ rsudo_text() { local i="$1" t="$2"; shift 2; rsudo "$i" "$@" < <(printf '%s' "$t"); }
90
97
 
91
98
  # ── 0. 互达 + sudo + 硬件预检(在目标机上,§3d-2:错误带原因+建议)+ hostname 告警 ──
92
99
  log "0/8 机器预检($MACHINE_COUNT 台)"
93
100
  declare -a SYS_HOSTNAMES=()
94
101
  for ((i=0; i<MACHINE_COUNT; i++)); do
95
- out=$(rsudo "$i" <<'EOF'
96
- set -e
97
- command -v curl >/dev/null || { echo "FAIL curl 缺失——建议:apt-get install -y curl"; exit 1; }
98
- [ "$(uname -m)" = "x86_64" ] || [ "$(uname -m)" = "aarch64" ] || { echo "FAIL 架构 $(uname -m) 不支持——建议:x86_64/aarch64 机器"; exit 1; }
99
- ram=$(awk '/MemTotal/{printf "%d", $2/1024}' /proc/meminfo)
100
- [ "$ram" -ge 8192 ] || { echo "FAIL 内存 ${ram}MB < 8G——建议:full-cluster 节点至少 8G(数据面+沙箱同机)"; exit 1; }
101
- disk=$(df -m / | awk 'NR==2{print $4}')
102
- [ "$disk" -ge 40960 ] || { echo "FAIL 根盘可用 ${disk}MB < 40G——建议:Longhorn/镜像要空间,清盘或换机"; exit 1; }
103
- [ -e /dev/kvm ] || echo "WARN 无 /dev/kvm——kata VM 沙箱在本节点不可用(建议:开嵌套虚拟化/裸机;或全集群改 e2b lane)"
104
- hostname
105
- EOF
106
- ) || die "机器 $i($(mvar "$i" HOST))预检失败:${out:-ssh/sudo 不通——需要 key 互信 + passwordless sudo}"
107
- case "$out" in *WARN*) log " ⚠ $(mvar "$i" HOST):${out%%$'\n'*}" ;; esac
102
+ out=$(rsudo "$i" < "$HERE/lib/remote/machine-precheck.sh") || die "机器 $i($(mvar "$i" HOST))预检失败:${out:-ssh/sudo 不通——需要 key 互信 + passwordless sudo}"
103
+ # 每条 WARN 行都打(预检可能告不止一件:无 /dev/kvm、无 NFS 客户端……);末行是 hostname
104
+ _rest="$out"
105
+ while [ -n "$_rest" ]; do
106
+ _line="${_rest%%$'\n'*}"
107
+ case "$_line" in WARN*) log " ⚠ $(mvar "$i" HOST):$_line" ;; esac
108
+ [ "$_rest" = "$_line" ] && break
109
+ _rest="${_rest#*$'\n'}"
110
+ done
108
111
  SYS_HOSTNAMES+=("$(printf '%s\n' "$out" | tail -1)")
109
112
  done
110
113
  if [ "$(printf '%s\n' "${SYS_HOSTNAMES[@]}" | sort -u | wc -l)" -lt "$MACHINE_COUNT" ]; then
@@ -113,12 +116,7 @@ fi
113
116
 
114
117
  # region=auto:从目标机(不是操作员机)探测网络亲和
115
118
  if [ "$REGION" = "auto" ]; then
116
- REGION=$(rsudo 0 <<'EOF'
117
- a=$(curl -m3 -so /dev/null -w '%{time_total}' https://mirrors.aliyun.com 2>/dev/null || echo 99)
118
- b=$(curl -m3 -so /dev/null -w '%{time_total}' https://registry.npmjs.org 2>/dev/null || echo 99)
119
- awk -v a="$a" -v b="$b" 'BEGIN{print (a<b)?"cn":"global"}'
120
- EOF
121
- )
119
+ REGION=$(rsudo 0 < "$HERE/lib/remote/region-probe.sh")
122
120
  log "region=auto → $REGION(目标机探测)"
123
121
  fi
124
122
 
@@ -139,81 +137,58 @@ node_flags() { # node_flags <i> → 该机的 k3s server 通用 flag(字段已
139
137
  }
140
138
  K3S0_IP="$(mvar 0 PRIVATE_IP)"; [ -z "$K3S0_IP" ] && K3S0_IP="$(mvar 0 HOST)"
141
139
 
142
- if rsudo 0 <<<'test -f /usr/local/bin/k3s && systemctl is-active --quiet k3s' 2>/dev/null; then
140
+ if rsudo_text 0 'test -f /usr/local/bin/k3s && systemctl is-active --quiet k3s'$'\n' 2>/dev/null; then
143
141
  log "1/8 k3s 首节点已在跑,跳过安装"
144
142
  else
145
143
  log "1/8 k3s 首节点($(mvar 0 NAME) @ $(mvar 0 HOST))"
146
- rsudo 0 <<EOF
147
- set -e
144
+ rsudo_text 0 "set -e
148
145
  curl -sfL https://get.k3s.io | $(k3s_install_env)INSTALL_K3S_CHANNEL=$K3S_CHANNEL \
149
- INSTALL_K3S_EXEC="server --cluster-init $(node_flags 0)" sh -
150
- EOF
146
+ INSTALL_K3S_EXEC=\"server --cluster-init $(node_flags 0)\" sh -
147
+ "
151
148
  fi
152
- TOKEN="$(rsudo 0 <<<'cat /var/lib/rancher/k3s/server/node-token')" || die "读不到 k3s node-token"
149
+ TOKEN="$(rsudo_text 0 'cat /var/lib/rancher/k3s/server/node-token'$'\n')" || die "读不到 k3s node-token"
153
150
  for ((i=1; i<MACHINE_COUNT; i++)); do
154
- if rsudo "$i" <<<'test -f /usr/local/bin/k3s && systemctl is-active --quiet k3s' 2>/dev/null; then
151
+ if rsudo_text "$i" 'test -f /usr/local/bin/k3s && systemctl is-active --quiet k3s'$'\n' 2>/dev/null; then
155
152
  # 活着 ≠ 属于本集群:被复用的机器可能挂在别的集群上,静默跳过=幽灵成员
156
- if rsudo 0 <<<"k3s kubectl get node $(mvar "$i" NAME) --no-headers >/dev/null 2>&1"; then
153
+ if rsudo_text 0 "k3s kubectl get node $(mvar "$i" NAME) --no-headers >/dev/null 2>&1"$'\n'; then
157
154
  log "1/8 节点 $(mvar "$i" NAME) 已是本集群成员,跳过"
158
155
  continue
159
156
  fi
160
157
  die "机器 $(mvar "$i" HOST) 上 k3s 在跑但不是本集群成员($(mvar "$i" NAME) 不在)——先在该机跑 k3s-uninstall.sh 再重来"
161
158
  fi
162
159
  log "1/8 加入节点 $(mvar "$i" NAME) @ $(mvar "$i" HOST)"
163
- rsudo "$i" <<EOF
164
- set -e
160
+ rsudo_text "$i" "set -e
165
161
  curl -sfL https://get.k3s.io | $(k3s_install_env)INSTALL_K3S_CHANNEL=$K3S_CHANNEL \
166
- K3S_TOKEN='$TOKEN' INSTALL_K3S_EXEC="server --server https://$K3S0_IP:6443 $(node_flags "$i")" sh -
167
- EOF
162
+ K3S_TOKEN='$TOKEN' INSTALL_K3S_EXEC=\"server --server https://$K3S0_IP:6443 $(node_flags "$i")\" sh -
163
+ "
168
164
  done
169
165
  # Ready 等待(embedded etcd 首次选主可能要 ~1min)
170
- rsudo 0 <<EOF || die "k3s 节点未全 Ready"
171
- set -e
166
+ rsudo_text 0 "set -e
172
167
  for t in \$(seq 1 60); do
173
168
  n=\$(k3s kubectl get nodes --no-headers 2>/dev/null | grep -cw Ready || true)
174
- [ "\$n" -ge "$MACHINE_COUNT" ] && { k3s kubectl get nodes -o wide; exit 0; }
169
+ [ \"\$n\" -ge \"$MACHINE_COUNT\" ] && { k3s kubectl get nodes -o wide; exit 0; }
175
170
  sleep 5
176
171
  done
177
172
  k3s kubectl get nodes -o wide; exit 1
178
- EOF
173
+ " || die "k3s 节点未全 Ready"
179
174
 
180
175
  # ── 2. VXLAN 守卫(有公网口的机器:flannel 8472 只许私网,公网口 DROP;systemd 常驻,
181
176
  # k3s 重装会重置 iptables——unit 常驻保证 reboot/重装后规则还在)────────────────
182
177
  log "2/8 VXLAN 公网口守卫"
183
178
  for ((i=0; i<MACHINE_COUNT; i++)); do
184
179
  iface="$(mvar "$i" PUBLIC_IFACE)"; [ -z "$iface" ] && continue
185
- rsudo "$i" <<EOF
186
- set -e
187
- cat > /etc/systemd/system/sema-vxlan-guard.service <<'UNIT'
188
- [Unit]
189
- Description=Drop flannel VXLAN on public iface (sema isolation invariant)
190
- After=network-online.target k3s.service
191
- [Service]
192
- Type=oneshot
193
- RemainAfterExit=yes
194
- ExecStart=/bin/sh -c 'iptables -C INPUT -i $iface -p udp --dport 8472 -j DROP 2>/dev/null || iptables -I INPUT -i $iface -p udp --dport 8472 -j DROP'
195
- [Install]
196
- WantedBy=multi-user.target
197
- UNIT
198
- systemctl daemon-reload && systemctl enable --now sema-vxlan-guard.service
199
- iptables -C INPUT -i $iface -p udp --dport 8472 -j DROP
200
- EOF
180
+ rsudo "$i" "$iface" < "$HERE/lib/remote/vxlan-guard.sh"
201
181
  log " $(mvar "$i" NAME):8472/udp DROP on $iface ✓"
202
182
  done
203
183
 
204
184
  # ── 3. helm(装配工具,仅首节点)────────────────────────────────────────────────
205
185
  log "3/8 helm + 基础组件"
206
- rsudo 0 <<'EOF'
207
- set -e
208
- command -v helm >/dev/null && exit 0
209
- curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash >/dev/null
210
- EOF
186
+ rsudo 0 < "$HERE/lib/remote/helm-install.sh"
211
187
  KC="--kubeconfig /etc/rancher/k3s/k3s.yaml"
212
188
 
213
189
  # Longhorn(分布式存储;replica 数=min(机器数,2)——RAID1 之上跨机冗余)
214
190
  LH_REPLICAS=$(( MACHINE_COUNT < 2 ? 1 : 2 ))
215
- rsudo 0 <<EOF
216
- set -e
191
+ rsudo_text 0 "set -e
217
192
  if ! k3s kubectl get storageclass longhorn >/dev/null 2>&1; then
218
193
  helm $KC repo add longhorn https://charts.longhorn.io >/dev/null
219
194
  helm $KC repo update >/dev/null
@@ -224,40 +199,38 @@ if ! k3s kubectl get storageclass longhorn >/dev/null 2>&1; then
224
199
  --set persistence.defaultClassReplicaCount=$LH_REPLICAS --wait --timeout 10m >/dev/null
225
200
  fi
226
201
  # longhorn=默认 SC,local-path 摘掉 default 标(两个 default 会让 PVC 行为不定)
227
- k3s kubectl patch storageclass local-path -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}' >/dev/null 2>&1 || true
228
- k3s kubectl patch storageclass longhorn -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' >/dev/null
202
+ k3s kubectl patch storageclass local-path -p '{\"metadata\":{\"annotations\":{\"storageclass.kubernetes.io/is-default-class\":\"false\"}}}' >/dev/null 2>&1 || true
203
+ k3s kubectl patch storageclass longhorn -p '{\"metadata\":{\"annotations\":{\"storageclass.kubernetes.io/is-default-class\":\"true\"}}}' >/dev/null
229
204
  echo LONGHORN_OK
230
- EOF
205
+ "
231
206
 
232
207
  # kata-deploy(官方 helm chart;kustomize remote base 老路径已失效——真踩)
233
208
  log "4/8 kata-deploy(VM 沙箱运行时)"
234
- rsudo 0 <<EOF
235
- set -e
209
+ rsudo_text 0 "set -e
236
210
  k3s kubectl get runtimeclass kata-qemu >/dev/null 2>&1 && { echo KATA_ALREADY; exit 0; }
237
211
  helm $KC upgrade --install kata-deploy oci://ghcr.io/kata-containers/kata-deploy-charts/kata-deploy \
238
212
  --version $KATA_VERSION --namespace kube-system --set k8sDistribution=k3s --wait --timeout 10m >/dev/null
239
213
  for t in \$(seq 1 36); do k3s kubectl get runtimeclass kata-qemu >/dev/null 2>&1 && break; sleep 5; done
240
214
  k3s kubectl get runtimeclass kata-qemu >/dev/null
241
215
  echo KATA_OK
242
- EOF
216
+ "
243
217
 
244
218
  # CNPG operator(钉 $CNPG_VERSION)
245
219
  log "5/8 CNPG operator $CNPG_VERSION"
246
- rsudo 0 <<EOF
247
- set -e
220
+ rsudo_text 0 "set -e
248
221
  if ! k3s kubectl get deployment -n cnpg-system cnpg-controller-manager >/dev/null 2>&1; then
249
- # 组件刚装完 apiserver 聚合 openapi 可能未就绪(瞬时 "unable to handle the request")——重试非降级
222
+ # 组件刚装完 apiserver 聚合 openapi 可能未就绪(瞬时 \"unable to handle the request\")——重试非降级
250
223
  ok=0
251
224
  for t in 1 2 3 4 5; do
252
225
  k3s kubectl apply --server-side -f \
253
- "https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-${CNPG_VERSION%.*}/releases/cnpg-$CNPG_VERSION.yaml" >/dev/null && { ok=1; break; }
226
+ \"https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-${CNPG_VERSION%.*}/releases/cnpg-$CNPG_VERSION.yaml\" >/dev/null && { ok=1; break; }
254
227
  sleep 15
255
228
  done
256
- [ "\$ok" = 1 ] || { echo "CNPG manifest apply 重试耗尽" >&2; exit 1; }
229
+ [ \"\$ok\" = 1 ] || { echo \"CNPG manifest apply 重试耗尽\" >&2; exit 1; }
257
230
  fi
258
231
  k3s kubectl rollout status deployment/cnpg-controller-manager -n cnpg-system --timeout=300s >/dev/null
259
232
  echo CNPG_OK
260
- EOF
233
+ "
261
234
 
262
235
  # ── 6. server 镜像:registry 引用 or tar 预灌 ─────────────────────────────────────
263
236
  log "6/8 server 镜像"
@@ -272,14 +245,7 @@ elif [ -n "${SEMA_SERVER_IMAGE_TAR:-}" ]; then
272
245
  # ⚠ 每台都灌,包括"看起来已有"的——k3s-uninstall 重装过的节点镜像会被清(复审真抓)
273
246
  log " 预灌 $(mvar "$i" NAME) …"
274
247
  mscp "$i" "$SEMA_SERVER_IMAGE_TAR" /tmp/sema-server-image.tar.upload
275
- rsudo "$i" <<'EOF'
276
- set -e
277
- trap 'rm -f /tmp/sema-server-image.tar.upload /tmp/sema-server-image.tar' EXIT
278
- f=/tmp/sema-server-image.tar.upload
279
- case "$(head -c2 "$f" | od -An -tx1 | tr -d ' ')" in 1f8b) gunzip -c "$f" > /tmp/sema-server-image.tar && f=/tmp/sema-server-image.tar ;; esac
280
- k3s ctr images import "$f" >/dev/null
281
- k3s ctr images ls | grep -q sema-server
282
- EOF
248
+ rsudo "$i" < "$HERE/lib/remote/image-import.sh"
283
249
  done
284
250
  else
285
251
  die "需要 SEMA_SERVER_IMAGE(registry 引用)或 SEMA_SERVER_IMAGE_TAR(docker save 包)之一"
@@ -305,22 +271,12 @@ if [ -n "${IMAGE_PULL_USER:-}" ] && [ -n "${IMAGE_PULL_TOKEN:-}" ]; then
305
271
  rrun 0 k3s kubectl annotate ns "$ns" meta.helm.sh/release-name=sema-stack meta.helm.sh/release-namespace=sema --overwrite >/dev/null
306
272
  fi
307
273
  IPS_NS="$ns" IPS_REG="${IMAGE_PULL_REGISTRY:-https://index.docker.io/v1/}" \
308
- IPS_USER="$IMAGE_PULL_USER" IPS_TOKEN="$IMAGE_PULL_TOKEN" python3 - <<'PY' | rrun 0 k3s kubectl apply -f - >/dev/null
309
- import base64, json, os
310
- u, p = os.environ["IPS_USER"], os.environ["IPS_TOKEN"]
311
- cfg = {"auths": {os.environ["IPS_REG"]: {"username": u, "password": p,
312
- "auth": base64.b64encode(f"{u}:{p}".encode()).decode()}}}
313
- b64 = base64.b64encode(json.dumps(cfg).encode()).decode()
314
- print(json.dumps({"apiVersion": "v1", "kind": "Secret", "type": "kubernetes.io/dockerconfigjson",
315
- "metadata": {"name": "sema-regcred", "namespace": os.environ["IPS_NS"]},
316
- "data": {".dockerconfigjson": b64}}))
317
- PY
274
+ IPS_USER="$IMAGE_PULL_USER" IPS_TOKEN="$IMAGE_PULL_TOKEN" python3 - < "$HERE/lib/regcred.py" | rrun 0 k3s kubectl apply -f - >/dev/null
318
275
  # default SA 由 ns 控制器异步建——等它出现再 patch(幂等)
319
- rsudo 0 <<EOF
320
- set -e
276
+ rsudo_text 0 "set -e
321
277
  for t in \$(seq 1 12); do k3s kubectl get sa default -n $ns >/dev/null 2>&1 && break; sleep 5; done
322
- k3s kubectl patch sa default -n $ns -p '{"imagePullSecrets":[{"name":"sema-regcred"}]}' >/dev/null
323
- EOF
278
+ k3s kubectl patch sa default -n $ns -p '{\"imagePullSecrets\":[{\"name\":\"sema-regcred\"}]}' >/dev/null
279
+ "
324
280
  done
325
281
  elif [ -n "${IMAGE_PULL_USER:-}${IMAGE_PULL_TOKEN:-}" ]; then
326
282
  die "IMAGE_PULL_USER/IMAGE_PULL_TOKEN 只给了一个——两个都要(或都不给=公共镜像)"
@@ -360,33 +316,16 @@ if [ "$STACK_ENGINE" = "helm" ]; then
360
316
  V_PKG_SOURCE="$([ "$REGION" = "global" ] && echo global || echo '')" \
361
317
  V_PG_INSTANCES="$PG_INSTANCES" V_PG_AA="$PG_AA" V_REPLICAS="$SERVER_REPLICAS" \
362
318
  V_REQ_PRINCIPAL="$(principal_of_users "$USERS")" \
363
- python3 - > "$VALSF" <<'PY'
364
- import json, os
365
- e = os.environ
366
- # json 是合法 yaml;json.dumps 对任意凭据字符安全(引号/反斜杠/换行都正确转义)
367
- print(json.dumps({
368
- "pg": {"instances": int(e["V_PG_INSTANCES"]), "antiAffinity": e["V_PG_AA"]},
369
- "minio": {"rootPassword": e["V_MINIO_PW"]},
370
- "server": {
371
- "image": e["V_SERVER_IMAGE"], "pullPolicy": e["V_PULL_POLICY"],
372
- "replicas": int(e["V_REPLICAS"]), "serviceAuthToken": e["V_SVC_TOKEN"],
373
- "modelGatewayBaseurl": e["V_MODEL_GATEWAY"], "modelId": e["V_MODEL_ID"],
374
- "modelApiKey": e["V_MODEL_KEY"], "sandboxPkgSource": e["V_PKG_SOURCE"],
375
- "requirePrincipal": e["V_REQ_PRINCIPAL"],
376
- },
377
- # chart 0.3.0 起 registry.enabled 默认 true(单机档语义)——machines 多机路径的 registry/git
378
- # 面还没接线,必须显式关,不然 helm 撞 registry.image required(2026-07-12 自查)
379
- "registry": {"enabled": False},
380
- "gitea": {"enabled": False},
381
- }))
382
- PY
319
+ python3 - > "$VALSF" < "$HERE/lib/helm-values-cluster.py"
383
320
  )
384
321
  [ -s "$VALSF" ] || die "helm values 生成失败"
385
- # 失败也删 values 文件(die 在 rm 之前退出会把含 MODEL_API_KEY 的 0600 文件留在 WORK)
386
- rrun 0 helm --kubeconfig /etc/rancher/k3s/k3s.yaml upgrade --install sema-stack \
387
- /tmp/sema-stack-chart/chart -n sema --create-namespace -f - < "$VALSF" >/dev/null \
322
+ # 失败也删 values 文件(die 在 rm 之前退出会把含 MODEL_API_KEY 的 0600 文件留在 WORK)。
323
+ # helm 的 stdout 收进变量,只把图表 NOTES 段打进日志(lib/chart-run.sh helm_notes:开着调试时 stdout 还有 values / 渲出的 Secret,那些不打)。
324
+ _helm_out=$(rrun 0 helm --kubeconfig /etc/rancher/k3s/k3s.yaml upgrade --install sema-stack \
325
+ /tmp/sema-stack-chart/chart -n sema --create-namespace -f - < "$VALSF") \
388
326
  || { rm -f "$VALSF"; die "helm upgrade --install sema-stack 失败"; }
389
327
  rm -f "$VALSF"
328
+ helm_notes "$_helm_out" >&2
390
329
  rrun 0 rm -rf /tmp/sema-stack-chart
391
330
  else
392
331
  RENDERED="$WORK/sema-stack-cluster.rendered.yaml"
@@ -399,77 +338,37 @@ RENDERED="$WORK/sema-stack-cluster.rendered.yaml"
399
338
  R_PKG_SOURCE="$([ "$REGION" = "global" ] && echo global || echo '')" \
400
339
  R_PG_INSTANCES="$PG_INSTANCES" R_PG_AA="$PG_AA" R_REPLICAS="$SERVER_REPLICAS" \
401
340
  R_REQ_PRINCIPAL="$(principal_of_users "$USERS")" \
402
- python3 - "$HERE/stack/sema-stack-cluster.yaml" > "$RENDERED" <<'PY'
403
- import os, sys
404
- MAP = {"__MINIO_PW__":"R_MINIO_PW", "__SVC_TOKEN__":"R_SVC_TOKEN", "__MODEL_KEY__":"R_MODEL_KEY",
405
- "__MODEL_GATEWAY__":"R_MODEL_GATEWAY", "__MODEL_ID__":"R_MODEL_ID",
406
- "__SERVER_IMAGE__":"R_SERVER_IMAGE", "__SERVER_PULL_POLICY__":"R_PULL_POLICY",
407
- "__PKG_SOURCE__":"R_PKG_SOURCE", "__PG_INSTANCES__":"R_PG_INSTANCES",
408
- "__PG_ANTI_AFFINITY__":"R_PG_AA", "__SERVER_REPLICAS__":"R_REPLICAS",
409
- "__REQUIRE_PRINCIPAL__":"R_REQ_PRINCIPAL"}
410
- t = open(sys.argv[1], encoding="utf-8").read()
411
- for ph, env in MAP.items():
412
- v = os.environ.get(env)
413
- if v is None: raise SystemExit(f"渲染缺 {env}({ph})")
414
- if any(c in v for c in "\n\"\\"): raise SystemExit(f"{env} 含 YAML 危险字符(换行/引号/反斜杠)")
415
- t = t.replace(ph, v)
416
- import re
417
- left = sorted(set(re.findall(r"__[A-Z_]+__", t)))
418
- if left: raise SystemExit(f"未渲染占位符残留: {left}")
419
- sys.stdout.write(t)
420
- PY
341
+ R_OPERATOR_SINGLE_USER="$(operator_single_user_of_users "$USERS")" \
342
+ python3 - "$HERE/stack/sema-stack-cluster.yaml" > "$RENDERED" < "$HERE/lib/render-stack.py"
421
343
  )
422
344
  [ -s "$RENDERED" ] || die "sema-stack 渲染失败"
423
345
  # 凭据清单经 stdin 直接 apply,不落远端盘(落 /tmp 失败时会残留)
424
346
  rrun 0 k3s kubectl apply -f - < "$RENDERED" >/dev/null
347
+ # 与 helm 路径的图表 NOTES 同一组事实(本清单不经 helm,NOTES 由这里说):钥匙卷是 ReadWriteMany(本清单副本数恒 > 1),Longhorn 的 RWX 要节点上的 NFS 客户端。
348
+ log " 停驻封签钥匙:引擎的钥匙保管目录在持久卷 sema-server-sealed-key(ReadWriteMany,longhorn;每个节点要装 NFS 客户端,server Pod 挂不上卷就是缺它),重启与换副本都不丢钥匙"
425
349
  fi
426
- rsudo 0 $(buckets_prefixed local/ $(buckets_k8s)) <<'EOF'
427
- set -e
428
- BUCKETS=("$@") # 要建的桶(local/<桶>):清单只在 lib/buckets.sh 一处,经位置参数递给远端
429
- # runner token 跨 ns 复制要赶在 server 起 pod 前(晚了=CreateContainerConfigError 干等——真踩);
430
- # SA token secret 由控制器异步填充,先等它有值
431
- TOK=""
432
- for t in $(seq 1 24); do
433
- TOK=$(k3s kubectl get secret sema-runner-token -n sema-sandbox -o jsonpath='{.data.token}' 2>/dev/null || true)
434
- [ -n "$TOK" ] && break; sleep 5
435
- done
436
- [ -n "$TOK" ] || { echo "sema-runner-token 未被控制器填充" >&2; exit 1; }
437
- k3s kubectl create secret generic sema-runner-token-copy -n sema --from-literal=token="$(printf '%s' "$TOK" | base64 -d)" \
438
- --dry-run=client -o yaml | k3s kubectl apply -f - >/dev/null
439
- # MinIO 建桶(备份桶+引擎桶)—— 排在等 PG healthy 与等 server rollout **之前**:引擎起服会核快照桶在不在,桶缺时 server 不就绪、rollout 永远等不到,而建桶又排在它后面 ⇒ 互等;
440
- # MinIO 不依赖 PG,建桶也就不必陪着等 PG(冷启拉镜像 + init 可要几分钟,会把引擎的等桶窗耗掉)
441
- k3s kubectl rollout status deployment/sema-minio -n sema --timeout=300s >/dev/null
442
- PW=$(k3s kubectl get secret sema-minio -n sema -o jsonpath='{.data.rootPassword}' | base64 -d)
443
- k3s kubectl exec deploy/sema-minio -n sema -- sh -c \
444
- "mc alias set local http://localhost:9000 sema '$PW' >/dev/null && mc mb --ignore-existing ${BUCKETS[*]}" >/dev/null
445
- # PG healthy(冷启拉镜像+init 可要几分钟)
446
- for t in $(seq 1 120); do
447
- s=$(k3s kubectl get cluster sema-pg -n sema -o jsonpath='{.status.phase}' 2>/dev/null || true)
448
- [ "$s" = "Cluster in healthy state" ] && break; sleep 5
449
- done
450
- [ "$s" = "Cluster in healthy state" ] || { k3s kubectl get cluster -n sema; echo "PG 未达 healthy" >&2; exit 1; }
451
- k3s kubectl rollout status deployment/sema-server -n sema --timeout=300s >/dev/null
452
- echo STACK_OK
453
- EOF
350
+ rsudo 0 $(buckets_prefixed local/ $(buckets_k8s)) < "$HERE/lib/remote/stack-ready.sh"
454
351
 
455
352
  # ── 8. smoke(节点内经 NodePort;外网入口=LB 在云商侧配,打印指引)────────────────
456
353
  log "8/8 smoke"
457
354
  # NodePort 被 nodeport-addresses 钉在节点网段——loopback 不在其内,必须打 node-ip(真踩 curl exit 7)
458
355
  # 第一行 = 两个 HTTP 码,其后 = /health 体(后端位在里面:200 + 401 测不出「服务在内存里跑」,验收必须读那一位)
459
- SMOKE_OUT=$(rsudo 0 <<EOF
460
- HB=\$(curl -m5 -s -w '\n%{http_code}' "http://$K3S0_IP:$NODEPORT/health" || printf '\n000')
461
- H="\${HB##*\$'\n'}"
462
- A=\$(curl -m5 -s -o /dev/null -w '%{http_code}' "http://$K3S0_IP:$NODEPORT/v1/runs" || echo 000)
463
- echo "health=\$H auth=\$A"
464
- printf '%s' "\${HB%\$'\n'*}"
465
- EOF
466
- )
356
+ # /health 带服务凭据读(配了服务凭据的引擎只对出示凭据的读者给后端位 / 持久性):凭据经 stdin 喂 curl 的 `-K -` 配置,不进远端任何进程的 argv。
357
+ # 值是数据不是代码:curl 配置行由 lib/health.sh 的 health_curl_config 按配置文法转义,再整行过 `printf '%q'` 才进远端 shell 文本。
358
+ _health_cfg="$(health_curl_config "$SERVICE_AUTH_TOKEN")" || die "SERVICE_AUTH_TOKEN 含控制字符 —— 那不是能放进 Authorization 头的凭据;检查 $ENVF"
359
+ _health_cfg_q="$(printf '%q' "$_health_cfg")"
360
+ SMOKE_OUT=$(rsudo_text 0 "CFG=$_health_cfg_q
361
+ HB=\$(printf '%s\n' \"\$CFG\" | curl -K - -m5 -s -w '\n%{http_code}' \"http://$K3S0_IP:$NODEPORT/health\" || printf '\n000')
362
+ H=\"\${HB##*\$'\n'}\"
363
+ A=\$(curl -m5 -s -o /dev/null -w '%{http_code}' \"http://$K3S0_IP:$NODEPORT/v1/runs\" || echo 000)
364
+ echo \"health=\$H auth=\$A\"
365
+ printf '%s' \"\${HB%\$'\n'*}\"
366
+ ")
467
367
  SMOKE="${SMOKE_OUT%%$'\n'*}"
468
368
  case "$SMOKE" in *"health=200 auth=401"*) : ;; *) die "smoke 失败:$SMOKE(期望 health=200 auth=401)" ;; esac
469
369
  BK_WHY=$(health_backend_check "${SMOKE_OUT#*$'\n'}") || die "smoke 失败:$BK_WHY。下一步:kubectl -n sema logs deploy/sema-server(引擎在库没连上时不会再退内存起服 —— 它会拒启;读到 memory 多半是旧镜像)"
470
- log "smoke ✓ $SMOKE backend=$SEMA_UP_EXPECT_SESSION_BACKEND"
471
- cat >&2 <<EOF
472
-
370
+ log "smoke ✓ $SMOKE backend=$SEMA_UP_EXPECT_SESSION_BACKEND durability=$(health_store_durability "${SMOKE_OUT#*$'\n'}")${BK_WHY:+ — $BK_WHY}"
371
+ printf '%s' "
473
372
  ══════════ cluster-up 完成($MACHINE_COUNT 节点)══════════
474
373
  入口 NodePort $NODEPORT(限私网段)。公网入口在云商 LB 上配:
475
374
  listener TCP:8090 → pool(每节点 private_ip:$NODEPORT,member 必带 subnet_id——Gcore 真踩)
@@ -478,7 +377,7 @@ cat >&2 <<EOF
478
377
  沙箱 kata-qemu runtimeclass(ns sema-sandbox,SA sema-runner)
479
378
  凭据 $ENVF(0600;SERVICE_AUTH_TOKEN=API 门)
480
379
  管理 ssh 隧道 6443(kubeconfig 在首节点 /etc/rancher/k3s/k3s.yaml,server 改 127.0.0.1)
481
- EOF
380
+ " >&2
482
381
  # 壳对 NodePort / LB 的明文 http 按设计拒连(非回环要 https)⇒ 经 ssh 隧道把首节点的 NodePort 带到本机回环再 connect
483
382
  # (NodePort 钉在节点网段、不在节点自己的回环上 —— **转发目标**写节点私网 IP,见上面 smoke 的同一条注;**ssh 目标**是本次部署
484
383
  # 连得上的那一台 = machines.yaml 的 HOST / USER / SSH_KEY,与 mssh 同一组,私网 IP 与 HOST 可以不同 —— 车内 codex r1-F4)。
@@ -13,7 +13,7 @@
13
13
  # MODEL_GATEWAY_BASEURL MODEL_ID MODEL_API_KEY
14
14
  # [NAMESPACE=sema][STORAGE_CLASS=集群默认][CNPG_VERSION]
15
15
  set -euo pipefail
16
- # >>> 自身目录(五个入口逐字同一段)
16
+ # [[[ 自身目录(五个入口逐字同一段)
17
17
  # HERE = 本脚本**真实文件**所在目录。经 npm bin 软链(node_modules/.bin/sema-up)调用时 $0 是软链路径,
18
18
  # 按它的目录找 lib/ 会落进 .bin/ ⇒ 逐跳解软链。只用不带参数的 readlink(macOS 自带 bash 3.2 / BSD readlink 没有 -f)。
19
19
  # 库要在知道 HERE 之后才找得到,所以这段不能收进库里:五个入口各持同一段,逐字一致由测试判。
@@ -25,7 +25,7 @@ while [ -L "$_self" ]; do
25
25
  done
26
26
  HERE="$(cd "$(dirname "$_self")" && pwd)"
27
27
  unset _self _hops _dir
28
- # <<< 自身目录
28
+ # ]]] 自身目录
29
29
  # `.env` 的文法与全部读写原语(envf_get / envf_has / envf_load / envf_put / setk / setk_new / resetk)只在这一处
30
30
  # 定义,sema-up.sh / cluster-up.sh / smoke.sh 同源:本脚本不再有自己的 setk / has_env / `. "$ENVF"`。
31
31
  . "$HERE/lib/envf.sh"
@@ -39,6 +39,10 @@ unset _self _hops _dir
39
39
  . "$HERE/lib/buckets.sh"
40
40
  # 集群节点地址的唯一读法(NodePort 入口 + 沙箱出网策略要拒的全部节点地址;同读一份节点表)。
41
41
  . "$HERE/lib/node-addrs.sh"
42
+ # 把一段文本按行 / 按词读进变量的三只函数(不用 here-document / here-string)。
43
+ . "$HERE/lib/shell-text.sh"
44
+ # 跑图表的共用读法:只打 helm 输出里的 NOTES 段、钥匙卷的存储类(cluster-up.sh 同一只)。
45
+ . "$HERE/lib/chart-run.sh"
42
46
  log() { printf '[kube-up] %s\n' "$*" >&2; }
43
47
  die() { log "⛔ $*"; exit 1; }
44
48
 
@@ -106,7 +110,9 @@ NODES=$($KUBECTL get nodes --no-headers | grep -cw Ready || true)
106
110
  # ── 节点容量测量+建议(建议不强求;某台确实过小才拦)────────────────────────────────
107
111
  # allocatable 口径(比 capacity 更接近可用);盘容量 kubectl 不可见,PVC Pending 时按报错查 SC
108
112
  NODE_CAPS=$($KUBECTL get nodes -o jsonpath='{range .items[*]}{.metadata.name}{" "}{.status.allocatable.cpu}{" "}{.status.allocatable.memory}{"\n"}{end}' 2>/dev/null)
109
- while read -r n_name n_cpu n_mem; do
113
+ caps_rest="$NODE_CAPS"$'\n'
114
+ while text_pop_line caps_rest caps_line; do
115
+ text_words "$caps_line" n_name n_cpu n_mem
110
116
  [ -z "$n_name" ] && continue
111
117
  # cpu:"4"或"3900m"→ 毫核;memory:"8049856Ki"/"7Gi" → MB
112
118
  case "$n_cpu" in *m) n_mcpu="${n_cpu%m}" ;; *) n_mcpu=$(( ${n_cpu:-0} * 1000 )) ;; esac
@@ -121,9 +127,7 @@ while read -r n_name n_cpu n_mem; do
121
127
  elif [ "$n_mcpu" -lt 2000 ] || [ "$n_mb" -lt 4096 ]; then
122
128
  log "⚠ 节点 $n_name 偏小(${n_mcpu}m CPU / ${n_mb}MB,推荐 ≥2c/4G)——能跑,数据面/沙箱余量紧;建议升配或外接 S3/DB 减负"
123
129
  fi
124
- done <<EOF_NODES
125
- $NODE_CAPS
126
- EOF_NODES
130
+ done
127
131
  [ "$NODES" -lt 3 ] && log "建议:准生产配置=3 节点(PG 反亲和 HA+副本打散);当前 $NODES 节点能跑,按单机形态缩放(不强求)"
128
132
  DEFAULT_SC=$($KUBECTL get storageclass -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.annotations.storageclass\.kubernetes\.io/is-default-class}{"\n"}{end}' 2>/dev/null | awk -F'\t' '$2=="true"{print $1; exit}')
129
133
  STORAGE_CLASS="${STORAGE_CLASS:-}" # 空=用集群默认 SC;显式给了就用给的
@@ -217,7 +221,7 @@ helm_values() { # helm_values <giteaBaseUrl> <oauthId> <oauthSecret>
217
221
  V_MINIO_PW="$MINIO_PASSWORD" V_SVC_TOKEN="$SERVICE_AUTH_TOKEN" V_MODEL_KEY="$MODEL_API_KEY" \
218
222
  V_MODEL_GATEWAY="$MODEL_GATEWAY_BASEURL" V_MODEL_ID="$MODEL_ID" \
219
223
  V_SERVER_IMAGE="$SEMA_SERVER_IMAGE" V_REPLICAS="$SERVER_REPLICAS" \
220
- V_PG_INSTANCES="$PG_INSTANCES" V_PG_AA="$PG_AA" V_SC="$STORAGE_CLASS" \
224
+ V_PG_INSTANCES="$PG_INSTANCES" V_PG_AA="$PG_AA" V_SC="$STORAGE_CLASS" V_SK_SC="$SEALED_KEY_SC" \
221
225
  V_RT_CLASS="$RUNTIME_CLASS" V_REQ_PRINCIPAL="$(principal_of_users "$USERS")" \
222
226
  V_PKG_SOURCE="$([ "$REGION" = "global" ] && echo global || echo '')" \
223
227
  V_REG_ENABLED="$REGISTRY_ENABLED" V_REG_IMAGE="${SEMA_REGISTRY_IMAGE:-}" \
@@ -225,47 +229,23 @@ helm_values() { # helm_values <giteaBaseUrl> <oauthId> <oauthSecret>
225
229
  V_GITEA_ENABLED="$([ "$GIT_MODE" = provision ] && echo true || echo false)" \
226
230
  V_GITEA_IMAGE="${GITEA_IMAGE:-gitea/gitea:1.24}" V_NODE_IP="$NODE_IP" V_NODE_CIDRS="$NODE_CIDRS" \
227
231
  V_MINIO_IMAGE="${MINIO_IMAGE:-}" \
228
- python3 - <<'PY'
229
- import json, os
230
- e = os.environ
231
- # json 是合法 yaml;json.dumps 对任意凭据字符安全(引号/反斜杠/换行都正确转义)
232
- v = {
233
- # helm 的 values 合并是深合并——只给部分 parameters 时 values.yaml 里 3 机 as-built 的
234
- # shared_buffers=8GB/effective_cache_size=86GB 会留下来,小集群 PG 直接起不来(内存不够)。
235
- # 必须整组显式覆盖成保守值;真按机器规格调优的入口是 STORAGE/PG 显式 values(后续档)。
236
- "pg": {"instances": int(e["V_PG_INSTANCES"]), "antiAffinity": e["V_PG_AA"],
237
- "storageClass": e["V_SC"], "storageSize": "20Gi",
238
- "parameters": {"shared_buffers": "256MB", "effective_cache_size": "1GB",
239
- "maintenance_work_mem": "128MB", "random_page_cost": "1.1",
240
- "effective_io_concurrency": "200", "checkpoint_completion_target": "0.9",
241
- "max_parallel_workers": "2"}},
242
- "minio": {"rootPassword": e["V_MINIO_PW"], "storageClass": e["V_SC"], "storageSize": "20Gi"},
243
- "server": {
244
- "image": e["V_SERVER_IMAGE"], "replicas": int(e["V_REPLICAS"]),
245
- "serviceAuthToken": e["V_SVC_TOKEN"], "modelGatewayBaseurl": e["V_MODEL_GATEWAY"],
246
- "modelId": e["V_MODEL_ID"], "modelApiKey": e["V_MODEL_KEY"],
247
- "sandboxPkgSource": e["V_PKG_SOURCE"], "requirePrincipal": e["V_REQ_PRINCIPAL"],
248
- },
249
- "sandbox": {"runtimeClass": e["V_RT_CLASS"],
250
- "networkPolicy": {"nodeCidrs": json.loads(e["V_NODE_CIDRS"])}},
251
- "registry": {"enabled": e["V_REG_ENABLED"] == "true", "image": e["V_REG_IMAGE"],
252
- "storageClass": e["V_SC"], "adminPassword": e["V_REG_PW"],
253
- "sessionSecret": e["V_REG_SS"], "pullToken": e["V_REG_PT"],
254
- "giteaBaseUrl": e["V_GITEA_URL"], "giteaOauthClientId": e["V_OA_ID"],
255
- "giteaOauthClientSecret": e["V_OA_SECRET"]},
256
- "gitea": {"enabled": e["V_GITEA_ENABLED"] == "true", "image": e["V_GITEA_IMAGE"],
257
- "storageClass": e["V_SC"], "domain": e["V_NODE_IP"]},
258
- }
259
- # MinIO 镜像:给了才递(默认只在 chart values.yaml 写一处,不在脚本里再抄一份);国内源 = 整条引用
260
- if e["V_MINIO_IMAGE"]: v["minio"]["image"] = e["V_MINIO_IMAGE"]
261
- print(json.dumps(v))
262
- PY
232
+ python3 - < "$HERE/lib/helm-values-kube.py"
263
233
  }
264
234
  helm_apply() { # helm_apply <giteaBaseUrl> <oauthId> <oauthSecret>
265
- helm_values "$1" "$2" "$3" | helm upgrade --install sema-stack "$HERE/chart" \
266
- -n "$NAMESPACE" --create-namespace -f - >/dev/null \
235
+ # helm 的 stdout 收进变量,只把图表 NOTES 段打进日志(lib/chart-run.sh helm_notes:开着调试时 stdout 还有 values / 渲出的 Secret,那些不打)。
236
+ local out
237
+ out=$(helm_values "$1" "$2" "$3" | helm upgrade --install sema-stack "$HERE/chart" \
238
+ -n "$NAMESPACE" --create-namespace -f -) \
267
239
  || die "helm upgrade --install sema-stack 失败。下一步:helm -n $NAMESPACE status sema-stack;kubectl -n $NAMESPACE get events --sort-by=.lastTimestamp | tail"
240
+ helm_notes "$out" >&2
268
241
  }
242
+ # 钥匙卷的存储类(lib/chart-run.sh sealed_key_class):卷已在 ⇒ 它建好时的类(不可改);新建 ⇒ STORAGE_CLASS。读不到(API 错)⇒ 停,不猜。
243
+ _sk_reading=$($KUBECTL get pvc sema-server-sealed-key -n "$NAMESPACE" --ignore-not-found -o jsonpath='{.metadata.name}/{.spec.storageClassName}') \
244
+ || die "读不到钥匙卷 PVC sema-server-sealed-key 的现状(-n $NAMESPACE)。下一步:kubectl -n $NAMESPACE get pvc 手查权限 / 连通"
245
+ SEALED_KEY_SC="$(sealed_key_class "$_sk_reading" "$STORAGE_CLASS")" || exit 1
246
+ if [ -n "$_sk_reading" ] && [ -n "$STORAGE_CLASS" ] && [ "$SEALED_KEY_SC" != "$STORAGE_CLASS" ]; then
247
+ log "钥匙卷 sema-server-sealed-key 已在存储类「${SEALED_KEY_SC:-<无>}」(建好后不可改)—— STORAGE_CLASS=$STORAGE_CLASS 不用于它"
248
+ fi
269
249
  log "2/6 helm 装配 sema-stack(-n $NAMESPACE,pg×$PG_INSTANCES server×$SERVER_REPLICAS registry=$REGISTRY_ENABLED gitea=$([ "$GIT_MODE" = provision ] && echo true || echo false))"
270
250
  # git 目标的解析 + OAuth 接线的锚校验,都排在读 OA_* 之前。
271
251
  # ① connect 的目标:**显式输入优先**;这次没给就沿用上次登记的连接(经严格读口;本脚本支持单独重跑,v7.97.0 靠
@@ -394,21 +374,21 @@ fi
394
374
 
395
375
  # ── smoke(port-forward 直验——kind/远程 kubeconfig 下 NodePort 对本机不可达,别靠它)──
396
376
  log "5/6 smoke"
397
- smoke_pf() { # smoke_pf <svc> <port> <path> → 第一行 http code,其后是响应体(调用方按需取)
377
+ smoke_pf() { # smoke_pf <svc> <port> <path> [<服务凭据>] → 第一行 http code,其后是响应体(调用方按需取);第 4 参缺省 = 不带凭据
398
378
  local pf_pid out code body
399
379
  $KUBECTL port-forward "svc/$1" -n "$NAMESPACE" "1$2:$2" >/dev/null 2>&1 &
400
380
  pf_pid=$!
401
381
  sleep 2
402
- out=$(curl -m5 -s -w '\n%{http_code}' "http://127.0.0.1:1$2$3" || printf '\n000')
382
+ out=$(health_curl "${4:-}" -m5 -s -w '\n%{http_code}' "http://127.0.0.1:1$2$3" || printf '\n000')
403
383
  kill $pf_pid 2>/dev/null; wait $pf_pid 2>/dev/null || true
404
384
  code="${out##*$'\n'}"; body="${out%$'\n'*}"
405
385
  [ "$out" = "$code" ] && body="" # 没有换行 = 只有码(假 curl / 空体)
406
386
  printf '%s\n%s' "$code" "$body"
407
387
  }
408
- HR=$(smoke_pf sema-server 8090 /health)
388
+ HR=$(smoke_pf sema-server 8090 /health "$SERVICE_AUTH_TOKEN") # 配了服务凭据的引擎只对出示凭据的读者给后端位 / 持久性
409
389
  H="${HR%%$'\n'*}"
410
390
  [ "$H" = "200" ] || die "smoke 失败:server /health=$H(期望 200)。下一步:kubectl -n $NAMESPACE logs deploy/sema-server"
411
- # /health 200 ≠ 数据落了库:后端位必须是期望的持久后端(durable(pg));读到 memory = 服务在内存里跑、重启即丢,不许判绿
391
+ # /health 200 ≠ 数据落了库:后端位必须是期望的后端(pg)且读得到 store.durability;读到 memory = 服务在内存里跑、重启即丢,不许判绿
412
392
  BK_WHY=$(health_backend_check "${HR#*$'\n'}") || die "smoke 失败:$BK_WHY。下一步:kubectl -n $NAMESPACE logs deploy/sema-server(引擎在库没连上时不会再退内存起服 —— 它会拒启;读到 memory 多半是旧镜像)"
413
393
  A=$(smoke_pf sema-server 8090 /v1/runs); A="${A%%$'\n'*}"
414
394
  [ "$A" = "401" ] || die "smoke 失败:无 token /v1/runs=$A(期望 401=auth 门在)。SERVICE_AUTH_TOKEN 未生效=裸奔,立刻查"
@@ -422,7 +402,7 @@ if [ "$GIT_MODE" = "provision" ]; then
422
402
  G=$(smoke_pf sema-gitea 3000 /api/healthz); G="${G%%$'\n'*}"
423
403
  [ "$G" = "200" ] || die "smoke 失败:gitea healthz=$G"
424
404
  fi
425
- log "smoke ✓ health=$H backend=$(health_session_backend "${HR#*$'\n'}") auth=$A registry=$R gitea=$G"
405
+ log "smoke ✓ health=$H backend=$(health_session_backend "${HR#*$'\n'}") durability=$(health_store_durability "${HR#*$'\n'}") auth=$A registry=$R gitea=$G${BK_WHY:+ — $BK_WHY}"
426
406
 
427
407
  # ── summary(一屏;凭据一次性显示)────────────────────────────────────────────────
428
408
  log "6/6 完成"
@@ -0,0 +1,23 @@
1
+ # lib/chart-run.sh —— 跑随包 helm 图表的两只共用读法(kube-up.sh / cluster-up.sh 被 source,不单独执行)。全程参数展开:不开管道、不用 here-string。
2
+ #
3
+ # helm_notes <helm upgrade 的 stdout> —— 只把图表 NOTES 那一段(最后一个 `NOTES:` 行之后的全部)打到 stdout,其余一字不打。
4
+ # helm 开着调试(HELM_DEBUG / --debug)时 stdout 里还有 USER-SUPPLIED / COMPUTED VALUES 与渲出的 MANIFEST —— 含凭据与 Secret 明文,那些不进日志;
5
+ # NOTES 恒是 helm 输出的最后一段(钥匙卷的挂载位 / 访问模式 / 关持久的后果在这里)。没有 NOTES 段 ⇒ 什么都不打。
6
+ helm_notes() {
7
+ local out="$1" nl=$'\n'
8
+ case "$out" in
9
+ *"${nl}NOTES:${nl}"*) printf '%s\n' "${out##*"${nl}NOTES:${nl}"}" ;;
10
+ esac
11
+ }
12
+
13
+ # sealed_key_class <现有钥匙卷的读数> <STORAGE_CLASS> —— 钥匙卷 PVC 该用的存储类。
14
+ # 读数 = `kubectl get pvc sema-server-sealed-key --ignore-not-found -o jsonpath='{.metadata.name}/{.spec.storageClassName}'` 的输出:
15
+ # 空 = 卷还没建 ⇒ STORAGE_CLASS(空 = 集群缺省);`<名>/<类>` = 卷已在 ⇒ 它建好时的类(PVC 的 storageClassName 建好后不可改,
16
+ # 换类会让 helm upgrade 撞「spec is immutable」;7.134.0–7.147.x 建的钥匙卷走的是集群缺省类,不随 STORAGE_CLASS)。
17
+ sealed_key_class() {
18
+ case "$1" in
19
+ "") printf '%s' "$2" ;;
20
+ */*) printf '%s' "${1#*/}" ;;
21
+ *) echo "sealed_key_class: 读不懂钥匙卷读数「$1」(期望空或 <名>/<类>)" >&2; return 2 ;;
22
+ esac
23
+ }
@@ -11,8 +11,8 @@
11
11
  # 调用方先定义:log(打到 stderr)、PROJECT、WORK、ENVF。拒 = 响亮一段 + exit 1(不静默另选一条根:替运维挑目录是替他做决定)。
12
12
 
13
13
  DATAROOT_MARKER=".sema-up-project"
14
- # sema-up 在数据根下建的四只卷目录(compose.dataroot.yaml 的 bind 源)= 存量数据根的指纹。
15
- DATAROOT_LAYOUT="pgdata miniodata registrydata gitdata"
14
+ # sema-up 在数据根下建的卷目录(compose.dataroot.yaml 的 bind 源)= 存量数据根的指纹。
15
+ DATAROOT_LAYOUT="pgdata miniodata registrydata gitdata sealedkey"
16
16
 
17
17
  # dataroot_for_disk <挂载点> <项目> —— 自动选盘的根。preflight 的建议句也用它(同一条规则,不另拼路径)。
18
18
  dataroot_for_disk() { printf '%s/sema-data/%s' "${1%/}" "$2"; }
@@ -109,7 +109,7 @@ dataroot_plan_line() {
109
109
  esac
110
110
  }
111
111
 
112
- # dataroot_settle <根> —— 落定(只在真跑、判定之后调):建根与四只卷目录,new / backfill 时写标记。
112
+ # dataroot_settle <根> —— 落定(只在真跑、判定之后调):建根与各只卷目录,new / backfill 时写标记。
113
113
  # 写标记用 noclobber(O_EXCL):两次 sema-up 同时认领同一条新根时,后到的那次读到对方的标记 ⇒ 拒,不互相覆盖。
114
114
  dataroot_settle() {
115
115
  local root="${DATAROOT_PHYS:-$1}" v