@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.
- package/MIGRATION.md +1039 -24
- package/README.md +20 -7
- package/README.zh-CN.md +14 -8
- package/USAGE.md +380 -163
- package/deploy/sema-up/README.md +16 -5
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
- package/deploy/sema-up/chart/values.yaml +3 -2
- package/deploy/sema-up/cluster-up.sh +74 -176
- package/deploy/sema-up/kube-up.sh +29 -49
- package/deploy/sema-up/lib/chart-run.sh +23 -0
- package/deploy/sema-up/lib/dataroot.sh +3 -3
- package/deploy/sema-up/lib/health.sh +62 -13
- package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
- package/deploy/sema-up/lib/helm-values-kube.py +35 -0
- package/deploy/sema-up/lib/regcred.py +8 -0
- package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
- package/deploy/sema-up/lib/remote/image-import.sh +6 -0
- package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
- package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
- package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
- package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
- package/deploy/sema-up/lib/render-stack.py +17 -0
- package/deploy/sema-up/lib/shell-text.sh +87 -0
- package/deploy/sema-up/lib/usage-flags.txt +10 -0
- package/deploy/sema-up/lib/usage-head.txt +1 -0
- package/deploy/sema-up/lib/usage-tail.txt +13 -0
- package/deploy/sema-up/preflight.sh +10 -8
- package/deploy/sema-up/sema-up.sh +14 -39
- package/deploy/sema-up/smoke.sh +7 -6
- package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
- package/deploy/sema-up/stack/compose.yaml +13 -1
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
- package/dist/adoption/plan.d.ts +24 -0
- package/dist/adoption/plan.js +53 -1
- package/dist/adoption/runner.d.ts +10 -1
- package/dist/adoption/runner.js +36 -16
- package/dist/adoption/wire.d.ts +3 -3
- package/dist/approval-card.d.ts +28 -30
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-reconciler.d.ts +4 -13
- package/dist/approval-reconciler.js +2 -2
- package/dist/approval.d.ts +13 -11
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +15 -7
- package/dist/auth-bridge.d.ts +0 -14
- package/dist/auth-bridge.js +0 -7
- package/dist/auto-mode-face.d.ts +10 -7
- package/dist/auto-mode-face.js +7 -4
- package/dist/background-agent-name.d.ts +19 -1
- package/dist/background-agent-name.js +12 -2
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/bake-runner/main.js +9 -6
- package/dist/bench/s1/arms.js +6 -5
- package/dist/bench/s1/live-deps.js +5 -2
- package/dist/bench/s1/run-firm.js +6 -5
- package/dist/bind-host.d.ts +25 -0
- package/dist/bind-host.js +25 -0
- package/dist/boot/adoption.d.ts +3 -0
- package/dist/boot/adoption.js +1 -0
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/execution-env.d.ts +17 -7
- package/dist/boot/execution-env.js +37 -31
- package/dist/boot/exit-boundary.d.ts +2 -2
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +17 -15
- package/dist/boot/memory-consolidation.d.ts +37 -29
- package/dist/boot/memory-consolidation.js +11 -5
- package/dist/boot/org-memory.js +1 -1
- package/dist/boot/parked-revive-gate.js +2 -2
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +19 -16
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +55 -67
- package/dist/boot/retention-lane.d.ts +4 -4
- package/dist/boot/retention-lane.js +2 -2
- package/dist/boot/runner-deps.d.ts +28 -7
- package/dist/boot/runner-deps.js +11 -4
- package/dist/boot/runtime-caps.d.ts +2 -2
- package/dist/boot/runtime-caps.js +16 -2
- package/dist/boot/session-faces.d.ts +16 -7
- package/dist/boot/session-faces.js +114 -94
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.js +9 -1
- package/dist/boot/stage-02-web-admin-pull.d.ts +1 -0
- package/dist/boot/stage-02-web-admin-pull.js +6 -1
- package/dist/boot/stage-03-store-backend.d.ts +3 -0
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +2 -0
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +7 -3
- package/dist/boot/stage-05-execution-env.js +2 -2
- package/dist/boot/stage-06-runners.d.ts +10 -12
- package/dist/boot/stage-06-runners.js +23 -15
- package/dist/boot/stage-07-capability-layer.d.ts +11 -8
- package/dist/boot/stage-07-capability-layer.js +5 -3
- package/dist/boot/stage-08-reapers.d.ts +11 -8
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +12 -15
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +12 -15
- package/dist/boot/stage-10-http-server.js +7 -4
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +3 -0
- package/dist/boot/stores.js +21 -10
- package/dist/boot/task-list-lane.d.ts +4 -4
- package/dist/boot/web-admin.d.ts +4 -2
- package/dist/boot/web-admin.js +55 -35
- package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
- package/dist/boot-reclaim.d.ts +3 -1
- package/dist/boot-reclaim.js +1 -1
- package/dist/brain.d.ts +7 -18
- package/dist/brain.js +5 -17
- package/dist/budget.js +6 -6
- package/dist/capabilities/center-plugins.d.ts +7 -1
- package/dist/capabilities/center-plugins.js +32 -10
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +2 -2
- package/dist/capabilities/composite-members.js +2 -2
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +6 -15
- package/dist/capabilities/scenarios.js +11 -16
- package/dist/capabilities/skills.d.ts +1 -1
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +38 -11
- package/dist/capability-facts.js +47 -8
- package/dist/card-void.d.ts +4 -4
- package/dist/card-void.js +1 -1
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +7 -3
- package/dist/config-catalog.d.ts +16 -1
- package/dist/config-catalog.js +62 -56
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +42 -3
- package/dist/config-invariants.js +69 -5
- package/dist/config-lkg.d.ts +23 -1
- package/dist/config-lkg.js +17 -3
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -110
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +26 -17
- package/dist/config.d.ts +8 -16
- package/dist/config.js +113 -47
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +30 -4
- package/dist/deployment-shape.js +7 -0
- package/dist/egress-redirect.d.ts +25 -7
- package/dist/egress-redirect.js +20 -2
- package/dist/elicitation.d.ts +6 -5
- package/dist/elicitation.js +23 -22
- package/dist/engine-identity.d.ts +28 -0
- package/dist/engine-identity.js +10 -0
- package/dist/entry-problems.d.ts +5 -7
- package/dist/entry-problems.js +1 -1
- package/dist/env-facts.js +2 -1
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-lane-caps.d.ts +5 -18
- package/dist/execution-lane-caps.js +0 -22
- package/dist/execution-placement.d.ts +58 -18
- package/dist/execution-placement.js +41 -2
- package/dist/field-conflict.d.ts +7 -11
- package/dist/field-conflict.js +3 -3
- package/dist/file-history-capture.d.ts +3 -3
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/fleet-bus.d.ts +21 -3
- package/dist/fleet/fleet-bus.js +35 -25
- package/dist/fleet/fleet-reconciler.js +2 -2
- package/dist/fleet/serving-lease.js +3 -3
- package/dist/fleet-client.js +3 -3
- package/dist/fleet-lease.d.ts +0 -1
- package/dist/fleet-lease.js +4 -5
- package/dist/history-anchor.d.ts +23 -3
- package/dist/history-anchor.js +24 -4
- package/dist/hitl-delivery.d.ts +90 -0
- package/dist/hitl-delivery.js +98 -0
- package/dist/hooks/classic-stations.d.ts +8 -11
- package/dist/hooks/classic-stations.js +0 -7
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +67 -57
- package/dist/hooks/hook-runner.js +260 -186
- package/dist/host-lsp-manager.d.ts +22 -8
- package/dist/host-lsp-manager.js +4 -1
- package/dist/http/active-run-conflict.d.ts +2 -43
- package/dist/http/active-run-conflict.js +3 -7
- package/dist/http/admission.d.ts +4 -18
- package/dist/http/admission.js +75 -78
- package/dist/http/approval-sweeps.d.ts +3 -3
- package/dist/http/approval-sweeps.js +54 -30
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claimed-run.d.ts +4 -3
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +76 -30
- package/dist/http/durable-run-leg.d.ts +3 -3
- package/dist/http/durable-run-leg.js +17 -12
- package/dist/http/execution-context.d.ts +17 -43
- package/dist/http/execution-context.js +7 -5
- package/dist/http/health-reader.d.ts +36 -0
- package/dist/http/health-reader.js +21 -0
- package/dist/http/health-self-report.d.ts +9 -9
- package/dist/http/health-self-report.js +4 -4
- package/dist/http/idempotency.d.ts +9 -5
- package/dist/http/idempotency.js +4 -4
- package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
- package/dist/http/memory-compliance-failure-reply.js +4 -2
- package/dist/http/memory-face-fault-reply.d.ts +67 -0
- package/dist/http/memory-face-fault-reply.js +71 -0
- package/dist/http/memory-store-refusal-reply.d.ts +1 -1
- package/dist/http/memory-store-refusal-reply.js +3 -0
- package/dist/http/owner-access.d.ts +391 -67
- package/dist/http/owner-access.js +371 -35
- package/dist/http/principal-gate.d.ts +24 -81
- package/dist/http/principal-gate.js +24 -68
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +9 -13
- package/dist/http/request-guards.js +34 -68
- package/dist/http/resume-composition.d.ts +37 -0
- package/dist/http/resume-composition.js +18 -0
- package/dist/http/resume-ctx-read.d.ts +35 -12
- package/dist/http/resume-ctx-read.js +25 -6
- package/dist/http/resume-legs.d.ts +21 -18
- package/dist/http/resume-legs.js +189 -129
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/route-ctx.d.ts +25 -32
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +58 -37
- package/dist/http/routes/admin-config-refresh.js +2 -2
- package/dist/http/routes/admin-drain.js +2 -2
- package/dist/http/routes/admin-memory-optout.js +4 -3
- package/dist/http/routes/adoption.d.ts +3 -0
- package/dist/http/routes/adoption.js +17 -10
- package/dist/http/routes/agents-roster.js +13 -7
- package/dist/http/routes/approvals-assistant.js +70 -65
- package/dist/http/routes/attachments.js +2 -2
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/background.js +9 -17
- package/dist/http/routes/capabilities.js +15 -18
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +4 -4
- package/dist/http/routes/diagnostics.d.ts +27 -3
- package/dist/http/routes/diagnostics.js +27 -21
- package/dist/http/routes/engine.js +2 -2
- package/dist/http/routes/fleet.js +5 -3
- package/dist/http/routes/images.js +10 -6
- package/dist/http/routes/leader.d.ts +7 -2
- package/dist/http/routes/leader.js +12 -3
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +7 -15
- package/dist/http/routes/memory-bundle.js +4 -7
- package/dist/http/routes/memory-compliance.js +4 -4
- package/dist/http/routes/memory-consolidation.js +6 -9
- package/dist/http/routes/memory-origin.d.ts +2 -0
- package/dist/http/routes/memory-origin.js +7 -8
- package/dist/http/routes/memory-policy.js +17 -12
- package/dist/http/routes/notify-wake.js +10 -19
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/principal-inbox.d.ts +1 -1
- package/dist/http/routes/principal-inbox.js +2 -2
- package/dist/http/routes/projects.d.ts +1 -1
- package/dist/http/routes/projects.js +3 -2
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +20 -5
- package/dist/http/routes/run-memory-capture.d.ts +2 -2
- package/dist/http/routes/run-memory-capture.js +6 -12
- package/dist/http/routes/run-permission-mode.d.ts +2 -2
- package/dist/http/routes/run-permission-mode.js +10 -17
- package/dist/http/routes/runs.js +146 -231
- package/dist/http/routes/session-memory-sync.d.ts +2 -2
- package/dist/http/routes/session-memory-sync.js +7 -13
- package/dist/http/routes/session-sync.d.ts +4 -2
- package/dist/http/routes/session-sync.js +21 -20
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.js +87 -124
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +136 -120
- package/dist/http/routes/trace-usage.d.ts +0 -12
- package/dist/http/routes/trace-usage.js +40 -46
- package/dist/http/routes/workflows.d.ts +39 -4
- package/dist/http/routes/workflows.js +42 -14
- package/dist/http/run-concurrency-cap.d.ts +20 -12
- package/dist/http/run-concurrency-cap.js +39 -26
- package/dist/http/run-read-face.d.ts +3 -5
- package/dist/http/run-read-face.js +8 -13
- package/dist/http/send.d.ts +12 -3
- package/dist/http/send.js +42 -6
- package/dist/http/server.d.ts +39 -40
- package/dist/http/server.js +36 -11
- package/dist/http/sse-log.d.ts +17 -10
- package/dist/http/sse-log.js +7 -7
- package/dist/http/stored-body-replay.d.ts +12 -0
- package/dist/http/stored-body-replay.js +2 -2
- package/dist/http/submit-ctx.d.ts +16 -8
- package/dist/http/submit-ctx.js +6 -2
- package/dist/http/submit-replay.d.ts +19 -6
- package/dist/http/submit-replay.js +18 -6
- package/dist/http/sync-submit-body.d.ts +3 -4
- package/dist/http/sync-submit-body.js +4 -5
- package/dist/http/wire-types.d.ts +4 -3
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/key-resolver.d.ts +32 -0
- package/dist/key-resolver.js +23 -9
- package/dist/leader/diffup.js +2 -1
- package/dist/leader/endpoint.d.ts +26 -5
- package/dist/leader/endpoint.js +154 -14
- package/dist/leader/fanout.d.ts +3 -0
- package/dist/leader/fanout.js +78 -63
- package/dist/leader/leader.d.ts +16 -0
- package/dist/leader/leader.js +43 -3
- package/dist/leader/merge.d.ts +9 -1
- package/dist/leader/merge.js +16 -1
- package/dist/leader/repair-wire.js +1 -1
- package/dist/leader/wire.d.ts +36 -3
- package/dist/leader/wire.js +59 -18
- package/dist/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-scope.d.ts +29 -2
- package/dist/memory-scope.js +64 -15
- package/dist/memory-store-refusal.d.ts +5 -2
- package/dist/memory-sync-client.d.ts +3 -2
- package/dist/memory-sync-client.js +6 -3
- package/dist/model-compat.d.ts +17 -8
- package/dist/model-compat.js +6 -2
- package/dist/model-context-window.d.ts +18 -0
- package/dist/model-context-window.js +2 -0
- package/dist/model-entry-headers.d.ts +46 -4
- package/dist/model-entry-headers.js +2 -2
- package/dist/model-entry-refusal.d.ts +35 -16
- package/dist/model-entry-refusal.js +40 -27
- package/dist/model-plane-face.d.ts +19 -11
- package/dist/model-plane-face.js +9 -1
- package/dist/model-plane-probe.d.ts +2 -0
- package/dist/model-plane-probe.js +17 -0
- package/dist/model-provider.d.ts +3 -3
- package/dist/model-route-endpoint.d.ts +9 -5
- package/dist/model-route-endpoint.js +29 -7
- package/dist/model-select.d.ts +16 -0
- package/dist/model-select.js +4 -0
- package/dist/mountinfo.d.ts +37 -0
- package/dist/mountinfo.js +47 -0
- package/dist/namespaced-rule-name.d.ts +23 -14
- package/dist/namespaced-rule-name.js +8 -11
- package/dist/net-address.d.ts +1 -1
- package/dist/observability/corrupt-read-seat.d.ts +4 -4
- package/dist/observability/corrupt-read-seat.js +5 -3
- package/dist/observability/fail-open.d.ts +58 -38
- package/dist/observability/fail-open.js +60 -38
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.js +3 -4
- package/dist/observability/otel-exporter.js +2 -1
- package/dist/observability/principal-context.d.ts +14 -7
- package/dist/observability/principal-context.js +8 -3
- package/dist/observability/run-terminal.d.ts +7 -1
- package/dist/observability/run-terminal.js +5 -2
- package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
- package/dist/orchestration/hardened-vm-runner.js +11 -5
- package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
- package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
- package/dist/orchestration/hardened-vm-worker.js +2 -1
- package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
- package/dist/orchestration/workflow-completion-inbox.js +3 -2
- package/dist/org-delivery-gate.d.ts +5 -4
- package/dist/org-delivery-gate.js +7 -6
- package/dist/outbound-dispatcher.d.ts +1 -1
- package/dist/outbound-dispatcher.js +6 -12
- package/dist/owner-brands.d.ts +81 -0
- package/dist/owner-brands.js +42 -0
- package/dist/owner-faces.d.ts +531 -0
- package/dist/owner-faces.js +126 -0
- package/dist/parked-decide.d.ts +67 -5
- package/dist/parked-decide.js +127 -5
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +6 -8
- package/dist/peer-directory.js +3 -2
- package/dist/permission-rule-vocab.d.ts +53 -8
- package/dist/permission-rule-vocab.js +30 -2
- package/dist/plugins/adoption-log-sql.d.ts +0 -22
- package/dist/plugins/adoption-log-sql.js +5 -3
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
- package/dist/plugins/approval-ask-store-file.d.ts +18 -7
- package/dist/plugins/approval-ask-store-file.js +37 -14
- package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
- package/dist/plugins/approval-ask-store-memory.js +24 -10
- package/dist/plugins/approval-ask-store-sql.d.ts +39 -20
- package/dist/plugins/approval-ask-store-sql.js +41 -10
- package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
- package/dist/plugins/approval-exemption-skill-m46.js +25 -0
- package/dist/plugins/approval-exemption-store.d.ts +6 -1
- package/dist/plugins/approval-exemption-store.js +14 -0
- package/dist/plugins/approval-nonce-store.d.ts +39 -12
- package/dist/plugins/approval-nonce-store.js +72 -23
- package/dist/plugins/blob-backend.d.ts +2 -0
- package/dist/plugins/blob-backend.js +9 -6
- package/dist/plugins/caching-session-store.d.ts +13 -1
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
- package/dist/plugins/checkpoint-index-columns.js +36 -1
- package/dist/plugins/checkpoint-store-face.d.ts +83 -10
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.js +1 -0
- package/dist/plugins/ensure-index.d.ts +13 -1
- package/dist/plugins/ensure-index.js +154 -21
- package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
- package/dist/plugins/ensure-schema-lock-policy.js +3 -2
- package/dist/plugins/file-run-store.d.ts +63 -23
- package/dist/plugins/file-run-store.js +138 -83
- package/dist/plugins/host-platform.d.ts +24 -3
- package/dist/plugins/host-platform.js +15 -1
- package/dist/plugins/image-bake-store-sql.js +2 -0
- package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
- package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
- package/dist/plugins/k8s-pod-reaper.js +0 -1
- package/dist/plugins/leader-run-store-sql.d.ts +22 -0
- package/dist/plugins/leader-run-store-sql.js +34 -4
- package/dist/plugins/local-checkpoint-store.d.ts +58 -23
- package/dist/plugins/local-checkpoint-store.js +195 -76
- package/dist/plugins/local-data-dir-modes-m39.js +2 -1
- package/dist/plugins/local-docker-capacity.d.ts +93 -0
- package/dist/plugins/local-docker-capacity.js +194 -0
- package/dist/plugins/local-docker-reaper.d.ts +92 -0
- package/dist/plugins/local-docker-reaper.js +102 -0
- package/dist/plugins/local-engine-high-water.d.ts +4 -2
- package/dist/plugins/local-engine-high-water.js +4 -1
- package/dist/plugins/local-session-store.d.ts +358 -125
- package/dist/plugins/local-session-store.js +824 -251
- package/dist/plugins/local-session-window.d.ts +3 -2
- package/dist/plugins/local-session-window.js +3 -2
- package/dist/plugins/local-sidecar-quarantine.js +3 -2
- package/dist/plugins/local-task-attachment-store.d.ts +18 -1
- package/dist/plugins/local-task-attachment-store.js +22 -1
- package/dist/plugins/memory-embedder.js +9 -7
- package/dist/plugins/memory-engine-pg.d.ts +3 -2
- package/dist/plugins/memory-engine-pg.js +14 -5
- package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
- package/dist/plugins/memory-engine-sql-apply.js +6 -8
- package/dist/plugins/memory-engine-tidb.d.ts +4 -2
- package/dist/plugins/memory-engine-tidb.js +11 -2
- package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
- package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
- package/dist/plugins/memory-run-store.d.ts +39 -27
- package/dist/plugins/memory-run-store.js +72 -70
- package/dist/plugins/one-time-migration-marker.d.ts +10 -0
- package/dist/plugins/one-time-migration-marker.js +7 -0
- package/dist/plugins/one-time-migrations.d.ts +186 -45
- package/dist/plugins/one-time-migrations.js +442 -119
- package/dist/plugins/org-delivery-quota-store.js +2 -1
- package/dist/plugins/permission-rule-store-file.d.ts +3 -3
- package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
- package/dist/plugins/permission-rule-store-sql.js +6 -86
- package/dist/plugins/pg-pool.d.ts +1 -31
- package/dist/plugins/pg-pool.js +16 -7
- package/dist/plugins/remote-env-e2b.d.ts +7 -25
- package/dist/plugins/remote-env-e2b.js +34 -25
- package/dist/plugins/remote-env-host.d.ts +2 -9
- package/dist/plugins/remote-env-host.js +34 -22
- package/dist/plugins/remote-env-k8s.d.ts +40 -45
- package/dist/plugins/remote-env-k8s.js +107 -58
- package/dist/plugins/remote-env-local-docker.d.ts +148 -14
- package/dist/plugins/remote-env-local-docker.js +367 -72
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/retention-deployment.d.ts +49 -17
- package/dist/plugins/retention-deployment.js +39 -8
- package/dist/plugins/run-preview-m45.d.ts +11 -0
- package/dist/plugins/run-preview-m45.js +19 -0
- package/dist/plugins/run-store-sql.d.ts +56 -68
- package/dist/plugins/run-store-sql.js +127 -116
- package/dist/plugins/s3-answer.d.ts +2 -1
- package/dist/plugins/sandbox-reaper.d.ts +26 -0
- package/dist/plugins/sandbox-reaper.js +2 -0
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
- package/dist/plugins/scheduler-support.d.ts +16 -1
- package/dist/plugins/scheduler-support.js +22 -2
- package/dist/plugins/schema-consistency.d.ts +42 -9
- package/dist/plugins/schema-consistency.js +212 -11
- package/dist/plugins/schema-drift-sentence.d.ts +4 -1
- package/dist/plugins/schema-drift-sentence.js +4 -4
- package/dist/plugins/schema-ensure-legs.d.ts +9 -0
- package/dist/plugins/schema-ensure-legs.js +1 -1
- package/dist/plugins/schema-indexes.js +3 -0
- package/dist/plugins/schema-live-columns.d.ts +14 -5
- package/dist/plugins/schema-live-columns.js +10 -10
- package/dist/plugins/send-user-file.js +2 -1
- package/dist/plugins/session-birth.d.ts +37 -0
- package/dist/plugins/session-birth.js +38 -0
- package/dist/plugins/session-epoch-anchor.d.ts +40 -12
- package/dist/plugins/session-epoch-anchor.js +33 -11
- package/dist/plugins/session-ext-table.d.ts +27 -3
- package/dist/plugins/session-ext-table.js +19 -6
- package/dist/plugins/session-fork.d.ts +15 -1
- package/dist/plugins/session-fork.js +3 -0
- package/dist/plugins/session-ownership.d.ts +1 -1
- package/dist/plugins/session-placement.d.ts +22 -16
- package/dist/plugins/session-placement.js +15 -12
- package/dist/plugins/session-row-sql.d.ts +12 -0
- package/dist/plugins/session-row-sql.js +3 -3
- package/dist/plugins/session-run-rollup.d.ts +29 -0
- package/dist/plugins/session-run-rollup.js +40 -0
- package/dist/plugins/session-store-sql.d.ts +38 -12
- package/dist/plugins/session-store-sql.js +130 -30
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
- package/dist/plugins/shared-memory-store-sql.js +2 -1
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
- package/dist/plugins/sql-driver.d.ts +1 -1
- package/dist/plugins/sql-driver.js +2 -1
- package/dist/plugins/sql-errors.d.ts +32 -5
- package/dist/plugins/sql-errors.js +55 -7
- package/dist/plugins/sql-json-column.d.ts +8 -7
- package/dist/plugins/sql-json-column.js +10 -6
- package/dist/plugins/store-backend.d.ts +84 -15
- package/dist/plugins/store-backend.js +186 -55
- package/dist/plugins/store-contracts.d.ts +90 -30
- package/dist/plugins/store-contracts.js +22 -1
- package/dist/plugins/store-fault.d.ts +28 -2
- package/dist/plugins/store-fault.js +20 -2
- package/dist/plugins/task-attachment-store.d.ts +15 -3
- package/dist/plugins/task-attachment-store.js +22 -9
- package/dist/plugins/tidb-pool.js +23 -8
- package/dist/plugins/web-search.js +5 -3
- package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
- package/dist/plugins/workflow-run-store-sql.js +11 -5
- package/dist/principal-jwt.d.ts +4 -4
- package/dist/principal-jwt.js +20 -5
- package/dist/principal-shape.d.ts +41 -0
- package/dist/principal-shape.js +19 -0
- package/dist/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/request-declaration-refusal.d.ts +35 -12
- package/dist/request-declaration-refusal.js +21 -9
- package/dist/request-form.d.ts +58 -0
- package/dist/request-form.js +72 -0
- package/dist/request-image-urls.d.ts +8 -2
- package/dist/request-image-urls.js +2 -1
- package/dist/request-images.d.ts +20 -0
- package/dist/request-images.js +59 -0
- package/dist/request-key-closure.d.ts +6 -7
- package/dist/request-key-closure.js +15 -2
- package/dist/resource-suspend.d.ts +7 -16
- package/dist/resource-suspend.js +1 -1
- package/dist/retired-name-host-notice.d.ts +21 -0
- package/dist/retired-name-host-notice.js +12 -0
- package/dist/rule-entry-list.d.ts +2 -2
- package/dist/rule-entry-list.js +3 -4
- package/dist/rule-issue-reading.d.ts +58 -0
- package/dist/rule-issue-reading.js +14 -0
- package/dist/rules-consent.d.ts +5 -3
- package/dist/rules-consent.js +1 -0
- package/dist/run-acceptance.d.ts +3 -1
- package/dist/run-acceptance.js +3 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +92 -80
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +26 -15
- package/dist/runs.js +39 -27
- package/dist/runtime-caps-resolver.d.ts +21 -6
- package/dist/runtime-caps-resolver.js +17 -4
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -5
- package/dist/sealed-key-layout.js +5 -0
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +115 -27
- package/dist/security.d.ts +128 -158
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +25 -0
- package/dist/server-secret-env.d.ts +21 -5
- package/dist/server-secret-env.js +14 -4
- package/dist/session-children-retire.d.ts +7 -5
- package/dist/session-children-retire.js +7 -2
- package/dist/session-deletion.d.ts +88 -0
- package/dist/session-deletion.js +8 -0
- package/dist/session-erase.d.ts +145 -0
- package/dist/session-erase.js +115 -0
- package/dist/session-error-wire.d.ts +5 -5
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +52 -5
- package/dist/session-incarnation.js +19 -2
- package/dist/session-policy-wire.d.ts +6 -3
- package/dist/session-policy-wire.js +11 -1
- package/dist/session-resident-background.d.ts +0 -71
- package/dist/session-resident-background.js +4 -3
- package/dist/session-row.d.ts +2 -1
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-posture.d.ts +136 -20
- package/dist/store-posture.js +188 -3
- package/dist/stored-request-hooks-m20.js +2 -2
- package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
- package/dist/stores-sql/background-agent-store-sql.js +73 -20
- package/dist/stores-sql/checkpoint-store-sql.d.ts +33 -28
- package/dist/stores-sql/checkpoint-store-sql.js +75 -44
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/stores-sql/pg-session-storage.d.ts +7 -5
- package/dist/stores-sql/pg-session-storage.js +54 -46
- package/dist/stores-sql/retention-store-sql.d.ts +87 -19
- package/dist/stores-sql/retention-store-sql.js +92 -27
- package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +12 -6
- package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
- package/dist/stores-sql/tidb-session-storage.js +13 -8
- package/dist/stores-sql/tidb-session-store.d.ts +36 -17
- package/dist/stores-sql/tidb-session-store.js +69 -39
- package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
- package/dist/stores-sql/windowed-session-storage.js +9 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +1 -1
- package/dist/task-a2a.js +3 -3
- package/dist/task-cwd.d.ts +20 -0
- package/dist/task-cwd.js +8 -0
- package/dist/task-mcp.d.ts +1 -1
- package/dist/task-mcp.js +3 -3
- package/dist/task-settings.d.ts +14 -10
- package/dist/task-settings.js +18 -7
- package/dist/terminal.d.ts +25 -43
- package/dist/terminal.js +31 -11
- package/dist/tool-approval.d.ts +131 -129
- package/dist/tool-approval.js +189 -193
- package/dist/trace/core-keyset-guard.d.ts +13 -6
- package/dist/trace/core-vocab-wire.d.ts +95 -0
- package/dist/trace/core-vocab-wire.js +15 -0
- package/dist/trace/exit-seat.d.ts +30 -4
- package/dist/trace/exit-seat.js +40 -36
- package/dist/trace/extension-call-face.d.ts +3 -2
- package/dist/trace/extension-call-face.js +3 -1
- package/dist/trace/ledger-events.d.ts +4 -7
- package/dist/trace/ledger-sink.d.ts +1 -30
- package/dist/trace/ledger-sink.js +0 -11
- package/dist/trace/model-segment.d.ts +5 -5
- package/dist/trace/model-segment.js +5 -5
- package/dist/trace/project.d.ts +55 -42
- package/dist/trace/project.js +52 -19
- package/dist/trace/redact.d.ts +123 -27
- package/dist/trace/redact.js +880 -260
- package/dist/trace/self-minted-wire.d.ts +487 -19
- package/dist/trace/self-minted-wire.js +172 -23
- package/dist/trace/wire-projection-faces.d.ts +5 -6
- package/dist/trace/wire-projection-faces.js +2 -2
- package/dist/upstream-body.d.ts +23 -0
- package/dist/upstream-body.js +16 -0
- package/dist/url-refusal.d.ts +3 -3
- package/dist/url-refusal.js +11 -4
- package/dist/user-authored-text.d.ts +1 -1
- package/dist/user-input-ledger.d.ts +7 -8
- package/dist/user-input-ledger.js +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +6 -3
- package/dist/web-admin-client/apply-effective.js +13 -16
- package/dist/web-admin-client/apply-ledger.d.ts +16 -7
- package/dist/web-admin-client/apply-ledger.js +5 -2
- package/dist/web-admin-client/center-request.d.ts +2 -2
- package/dist/web-admin-client/center-request.js +15 -15
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -1
- package/dist/web-admin-client/entry-metadata.d.ts +8 -0
- package/dist/web-admin-client/entry-metadata.js +13 -0
- package/dist/web-admin-client/http-client.d.ts +1 -1
- package/dist/web-admin-client/http-client.js +23 -4
- package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
- package/dist/web-admin-client/mcp-revocation.js +2 -1
- package/dist/web-admin-client/read-warnings.d.ts +1 -0
- package/dist/web-admin-client/read-warnings.js +1 -0
- package/dist/web-admin-client/restart-signal.js +8 -4
- package/dist/web-admin-client/skills-mcp.d.ts +2 -2
- package/dist/web-admin-client/types.d.ts +1 -2
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/package.json +6 -3
- package/scripts/drain-check-local.mjs +118 -147
- package/scripts/drain-check.mysql.sql +22 -2
- package/scripts/drain-check.pg.sql +22 -2
- package/wire-changes/server@7.148.0.json +1517 -0
- package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
- package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
- package/dist/http/memory-layer-reply.d.ts +0 -30
- package/dist/http/memory-layer-reply.js +0 -24
- package/dist/lsp/e2b-bridge.d.ts +0 -57
- package/dist/lsp/e2b-bridge.js +0 -139
- package/dist/lsp/e2b-manager.d.ts +0 -93
- package/dist/lsp/e2b-manager.js +0 -178
- package/dist/lsp/lsp-frames.d.ts +0 -14
- package/dist/lsp/lsp-frames.js +0 -25
- package/dist/lsp/manager.d.ts +0 -129
- package/dist/lsp/manager.js +0 -127
- package/dist/lsp/types.d.ts +0 -12
- package/dist/lsp/types.js +0 -2
- package/dist/lsp/ws-transport.d.ts +0 -40
- package/dist/lsp/ws-transport.js +0 -210
package/deploy/sema-up/README.md
CHANGED
|
@@ -154,11 +154,18 @@ data-center:2c/2G/20G)以下 BLOCK——确实无法稳定部署,提前警告不
|
|
|
154
154
|
- **MinIO**:钉死的 tag(`minio/minio:RELEASE.…`,chart / cluster 静态清单 / compose 三份同值;k8s `imagePullPolicy: IfNotPresent`,不再 `:latest` + `Always`)。换源 = 换整条引用:
|
|
155
155
|
compose 与 kube-up 读环境变量 `MINIO_IMAGE`(kube-up 给了才递给 chart),chart 直接 `--set minio.image=<源>/minio/minio:<tag>`(预灌镜像的节点 `--set minio.pullPolicy=Never`)。
|
|
156
156
|
|
|
157
|
-
## 停驻钥匙的持久卷(helm 图表的 `sealedKey` 块)
|
|
157
|
+
## 停驻钥匙的持久卷(三条交付路径同形;helm 图表的 `sealedKey` 块)
|
|
158
158
|
|
|
159
|
-
server
|
|
160
|
-
|
|
161
|
-
|
|
159
|
+
server 的钥匙保管目录存着停驻任务续跑上下文里请求凭据的封签钥匙(子目录 `checkpoint-ctx-keys/`)和模型钥匙 —— 私钥只在这个目录里、不进库。
|
|
160
|
+
三条交付路径都照随包部署事实 `deploy/facts/sealed-key.json` 装:给 server 设绝对路径的 `SEALED_KEY_DIR=/root/.ai-agent/sealed-key`,那个目录整个是一只持久卷 ——
|
|
161
|
+
|
|
162
|
+
- **图表**(`kube-up.sh` 的 `--kube=existing|k3s`、`cluster-up.sh` 的 `STACK_ENGINE=helm`):缺省挂一只 PVC `sema-server-sealed-key`(`sealedKey.persistence.enabled: true`),
|
|
163
|
+
主 worker 与启用的 `serverV4pro` 共用;`kube-up.sh` 的 `STORAGE_CLASS` 同样用于新建的这只卷(已在的卷沿用它建好时的类,PVC 的存储类建好后不可改)。下面几条是图表的旋钮。
|
|
164
|
+
- **cluster 静态清单**(`cluster-up.sh` 的缺省 `STACK_ENGINE=render`):同名 PVC,`ReadWriteMany`(本清单副本数恒 > 1)、存储类 `longhorn` —— **每个节点要装 NFS 客户端**
|
|
165
|
+
(Debian / Ubuntu `nfs-common`,RHEL 系 `nfs-utils`;机器预检缺它会告警,缺了 server Pod 挂不上卷、第 7 步等不到就绪而失败)。要单副本 / RWO / 关持久,改走图表路径。
|
|
166
|
+
- **单机 compose**(`full-single` / `local-plus`):具名卷 `<项目>_sealedkey`(`--data-root` 时落 `<数据根>/sealedkey`);`--teardown-volumes` 删卷对象 —— docker 管的卷连钥匙一起没,`--data-root` 的 bind 目录留在盘上。
|
|
167
|
+
|
|
168
|
+
重启与换副本都不丢钥匙,停驻的任务照常续跑。两条 helm 路径都把 helm 输出里的安装说明(NOTES 段)打进日志 —— 只这一段:开着 helm 调试时 stdout 里还有 values 与渲出的 Secret,那些不打。
|
|
162
169
|
|
|
163
170
|
- **访问模式缺省随共享这只卷的 pod 数**:`server.replicas`(加上启用的 `serverV4pro.replicas`)为 1 ⇒ `ReadWriteOnce`,多于 1 ⇒ `ReadWriteMany`,**要集群的存储类支持 RWX**
|
|
164
171
|
(Longhorn 走 NFS 共享管理器、每个节点要装 NFS 客户端;`local-path` 与多数云盘类不支持 ⇒ PVC 一直 Pending、server Pod 起不来)。点名存储类:`--set sealedKey.persistence.storageClass=<支持 RWX 的类>`。
|
|
@@ -166,7 +173,7 @@ server 的 `<数据根>/sealed-key/` 存着停驻任务续跑上下文里请求
|
|
|
166
173
|
有效访问模式是 `ReadWriteOnce` 时 Deployment 用 `Recreate`(RWO 卷同时只能被一个节点挂,滚动更新的新 Pod 落在别的节点就永远等不到卷;代价是升级窗口内短暂没有副本)。
|
|
167
174
|
- **没有 RWX 的集群**:`--set server.replicas=1`,或单节点多副本盖 RWO(上一条),或关持久 `--set sealedKey.persistence.enabled=false` —— 关掉时图表**显式**给每只 worker 设 `DURABLE_APPROVAL=false`
|
|
168
175
|
(耐久审批整条关,不产生续不了的停驻行;`helm install` 打印的安装说明里也有这一句),且同时配 `server.durableApproval=true` 渲染即拒。
|
|
169
|
-
- **首装是空卷**:多个 pod
|
|
176
|
+
- **首装是空卷**:多个 pod 并发首启也只出一把钥匙(7.148.0 起,首把钥匙只有一个创建口:空目录里以 `wx` 独占创建互斥文件 `.keygen.lock` 分先后,其余 pod 等它发布后读到同一把),不必重启;要求存储类的 `O_EXCL` 独占创建是原子的(本地盘与 NFSv3 及以上按协议满足,别的存储请向存储方确认)。7.147.x 及更早版本首装出多把钥匙的卷(各 pod 各持自己那一把、互相答 `key_not_held`):执行 `kubectl -n <ns> rollout restart deploy/sema-server`(启用 `serverV4pro` 时再加 `deploy/sema-server-v4pro`)一次,之后每个 pod 读到全部钥匙。
|
|
170
177
|
- PVC 的 `accessModes` 建好后不可改:副本数跨过 1 的边界时 `helm upgrade` 会撞「spec is immutable」;卷里是私钥,换卷前先结掉停驻行或备份钥匙文件。
|
|
171
178
|
PVC 带 `helm.sh/resource-policy: keep`:`helm uninstall` 与把 `enabled` 改成 `false` 的 upgrade 都不删它(确认不要了再 `kubectl -n <ns> delete pvc sema-server-sealed-key`)。
|
|
172
179
|
|
|
@@ -249,4 +256,8 @@ machines.example.yaml 多机清单模板
|
|
|
249
256
|
lib/parse-machines.py machines.yaml mini-parser(标准库零依赖,fail-loud)
|
|
250
257
|
lib/dataroot.sh 数据根归属规则(自动根按项目分 / 项目标记 / 拒 / 卸载提示;sema-up 与 preflight 同读)
|
|
251
258
|
lib/shell-access.sh 汇总里「壳接入」一段的唯一渲染(sema-up / kube-up / cluster-up 同读;只给位置不给值)
|
|
259
|
+
lib/shell-text.sh 把一段文本按行 / 按词 / 按分隔字符读进变量(sema-up / kube-up / preflight 同读;不用 here-document / here-string,因为正文长过管道缓冲时在管道配额吃紧的机器上会永远写不完)
|
|
260
|
+
lib/remote/*.sh cluster-up 送去目标机 `bash -s` 跑的脚本(经 stdin 重定向喂入,不内嵌在入口脚本里;要传值的以位置参数递给远端)
|
|
261
|
+
lib/*.py 渲染 helm values / 栈清单、生成镜像拉取凭据的 python 正文(经 stdin 重定向喂入)
|
|
262
|
+
lib/usage-*.txt `sema-up.sh --help` 里不随词表变的静态文本段
|
|
252
263
|
```
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
多个 pod 共用这只卷,存储类必须支持 ReadWriteMany(PVC 一直 Pending 就是它不支持:出路 server.replicas=1,或 sealedKey.persistence.enabled=false 并接受耐久审批随之关)。
|
|
9
9
|
{{- end }}
|
|
10
10
|
{{- if gt (int (include "sema.sealedKey.podCount" .)) 1 }}
|
|
11
|
-
|
|
11
|
+
首装是空卷:多个副本并发首启也只出一把钥匙(7.148.0 起首把钥匙只有一个创建口,不必重启);7.147.x 及更早版本首装出多把钥匙的卷(各副本各持自己那一把、互相答 key_not_held)执行一次 kubectl -n {{ .Release.Namespace }} rollout restart deploy/sema-server{{ if .Values.serverV4pro.enabled }} deploy/sema-server-v4pro{{ end }},此后每个副本读到目录里的全部钥匙。
|
|
12
12
|
{{- end }}
|
|
13
13
|
{{- else }}
|
|
14
14
|
停驻封签钥匙:sealedKey.persistence.enabled=false —— 不建卷,图表已给每只 worker 显式设上 DURABLE_APPROVAL=false(耐久审批整条关,不产生续不了的停驻行;代价见 values.yaml 的 sealedKey 块;要重新打开,把它改回 true)。关持久 + 提交体没声明 settings.approvalFrameFamilies 的客户端 ⇒ 受门工具当场拒(没有耐久店,无处停驻;7.134.0 起审批卡只发给声明认得这一族的客户端)。
|
|
@@ -14,8 +14,16 @@
|
|
|
14
14
|
{{- /* 卷 / PVC 的名字。 */ -}}
|
|
15
15
|
{{- define "sema.sealedKey.claimName" -}}sema-server-sealed-key{{- end -}}
|
|
16
16
|
|
|
17
|
-
{{- /*
|
|
18
|
-
|
|
17
|
+
{{- /*
|
|
18
|
+
容器内挂载点 = 引擎的钥匙保管目录(整个目录:模型钥匙 + checkpoint-ctx-keys/ 同一卷),也是给引擎设的 SEALED_KEY_DIR 的值(随包部署事实 sealed-key.json:
|
|
19
|
+
安装器显式设绝对路径,不靠引擎的数据根回落)。值只有一处定义:sema-up 三条交付路径(本图表 · cluster 静态清单 · 单机 compose)的挂载位由
|
|
20
|
+
scripts/gen-deploy-lanes.ts 的 SEMA_UP_SEALED_KEY_DIR 渲出,下面圈起来的一行不要手改。
|
|
21
|
+
*/ -}}
|
|
22
|
+
{{- define "sema.sealedKey.mountPath" -}}
|
|
23
|
+
{{/* @generated-begin sealed-key-dir */}}
|
|
24
|
+
{{- "/root/.ai-agent/sealed-key" -}}
|
|
25
|
+
{{/* @generated-end sealed-key-dir */}}
|
|
26
|
+
{{- end -}}
|
|
19
27
|
|
|
20
28
|
{{- /*
|
|
21
29
|
持久开关,且**只收布尔**:`--set-string ...enabled=false` / values 里带引号的 "false" 是字符串,模板里字符串恒为真 ⇒ 会静默保持持久开,
|
|
@@ -126,11 +134,19 @@ false
|
|
|
126
134
|
{{- ternary "false" "true" (eq $rp "true") -}}
|
|
127
135
|
{{- end -}}
|
|
128
136
|
|
|
129
|
-
{{- /*
|
|
137
|
+
{{- /*
|
|
138
|
+
worker 容器 env 里与钥匙卷同源的两条(`indent 12` 之后接在 env 列表里):持久开 ⇒ SEALED_KEY_DIR = 挂载点(安装契约:显式绝对路径);
|
|
139
|
+
耐久审批的显式表态(值为空 ⇒ 不出这一条)。持久关 ⇒ 不设 SEALED_KEY_DIR(没有卷可指),只出 DURABLE_APPROVAL=false。
|
|
140
|
+
*/ -}}
|
|
130
141
|
{{- define "sema.sealedKey.env" -}}
|
|
142
|
+
{{- $lines := list -}}
|
|
143
|
+
{{- if eq (include "sema.sealedKey.enabled" .) "true" -}}
|
|
144
|
+
{{- $lines = append $lines (printf "- { name: SEALED_KEY_DIR, value: %s }" (include "sema.sealedKey.mountPath" . | quote)) -}}
|
|
145
|
+
{{- end -}}
|
|
131
146
|
{{- with (include "sema.durableApproval" .) -}}
|
|
132
|
-
- { name: DURABLE_APPROVAL, value:
|
|
147
|
+
{{- $lines = append $lines (printf "- { name: DURABLE_APPROVAL, value: %s }" (. | quote)) -}}
|
|
133
148
|
{{- end -}}
|
|
149
|
+
{{- join "\n" $lines -}}
|
|
134
150
|
{{- end -}}
|
|
135
151
|
|
|
136
152
|
{{- /* worker 容器的 volumeMounts 块(`nindent 10`);持久关 ⇒ 什么都不出。 */ -}}
|
|
@@ -86,8 +86,9 @@ server:
|
|
|
86
86
|
# 这只卷里是私钥,不要为了过这个错直接删 PVC:先把停驻行结掉(随包排空检查脚本数一数)或备份钥匙文件,再换卷。
|
|
87
87
|
# PVC 带 helm.sh/resource-policy: keep:`helm uninstall` 与把 enabled 改成 false 的 upgrade 都不删它(钥匙留着;确认不要了再 `kubectl -n <ns> delete pvc sema-server-sealed-key`);
|
|
88
88
|
# 同名 release 重装会接管这只留下的 PVC。
|
|
89
|
-
#
|
|
90
|
-
#
|
|
89
|
+
# 空卷上多副本并发首启也只出一把钥匙(7.148.0 起:首把钥匙只有一个创建口,空目录里以独占创建的互斥文件分先后,其余副本等它发布后读到同一把;要求存储类的 O_EXCL 独占创建是原子的),不必重启。
|
|
90
|
+
# 7.147.x 及更早版本首装出多把钥匙的卷(各副本各持自己那一把、互相答 key_not_held):执行一次 `kubectl -n <ns> rollout restart deploy/sema-server`
|
|
91
|
+
# (启用 serverV4pro 时再加 deploy/sema-server-v4pro;NOTES 也说这句),重启之后每个副本读到目录里的全部钥匙,从此一致。
|
|
91
92
|
sealedKey:
|
|
92
93
|
persistence:
|
|
93
94
|
# true(缺省)= 建 PVC 并挂到上面的路径。
|
|
@@ -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"
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
[
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
150
|
-
|
|
146
|
+
INSTALL_K3S_EXEC=\"server --cluster-init $(node_flags 0)\" sh -
|
|
147
|
+
"
|
|
151
148
|
fi
|
|
152
|
-
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
|
|
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
|
|
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
|
-
|
|
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
|
|
167
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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"
|
|
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
|
|
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
|
-
|
|
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"
|
|
228
|
-
k3s kubectl patch storageclass longhorn -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class"
|
|
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
|
-
|
|
205
|
+
"
|
|
231
206
|
|
|
232
207
|
# kata-deploy(官方 helm chart;kustomize remote base 老路径已失效——真踩)
|
|
233
208
|
log "4/8 kata-deploy(VM 沙箱运行时)"
|
|
234
|
-
|
|
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
|
-
|
|
216
|
+
"
|
|
243
217
|
|
|
244
218
|
# CNPG operator(钉 $CNPG_VERSION)
|
|
245
219
|
log "5/8 CNPG operator $CNPG_VERSION"
|
|
246
|
-
|
|
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
|
|
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
|
-
|
|
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"
|
|
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 -
|
|
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
|
-
|
|
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"
|
|
323
|
-
|
|
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"
|
|
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
|
-
|
|
387
|
-
|
|
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"
|
|
@@ -400,77 +339,36 @@ RENDERED="$WORK/sema-stack-cluster.rendered.yaml"
|
|
|
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
341
|
R_OPERATOR_SINGLE_USER="$(operator_single_user_of_users "$USERS")" \
|
|
403
|
-
python3 - "$HERE/stack/sema-stack-cluster.yaml" > "$RENDERED"
|
|
404
|
-
import os, sys
|
|
405
|
-
MAP = {"__MINIO_PW__":"R_MINIO_PW", "__SVC_TOKEN__":"R_SVC_TOKEN", "__MODEL_KEY__":"R_MODEL_KEY",
|
|
406
|
-
"__MODEL_GATEWAY__":"R_MODEL_GATEWAY", "__MODEL_ID__":"R_MODEL_ID",
|
|
407
|
-
"__SERVER_IMAGE__":"R_SERVER_IMAGE", "__SERVER_PULL_POLICY__":"R_PULL_POLICY",
|
|
408
|
-
"__PKG_SOURCE__":"R_PKG_SOURCE", "__PG_INSTANCES__":"R_PG_INSTANCES",
|
|
409
|
-
"__PG_ANTI_AFFINITY__":"R_PG_AA", "__SERVER_REPLICAS__":"R_REPLICAS",
|
|
410
|
-
"__REQUIRE_PRINCIPAL__":"R_REQ_PRINCIPAL", "__OPERATOR_SINGLE_USER__":"R_OPERATOR_SINGLE_USER"}
|
|
411
|
-
t = open(sys.argv[1], encoding="utf-8").read()
|
|
412
|
-
for ph, env in MAP.items():
|
|
413
|
-
v = os.environ.get(env)
|
|
414
|
-
if v is None: raise SystemExit(f"渲染缺 {env}({ph})")
|
|
415
|
-
if any(c in v for c in "\n\"\\"): raise SystemExit(f"{env} 含 YAML 危险字符(换行/引号/反斜杠)")
|
|
416
|
-
t = t.replace(ph, v)
|
|
417
|
-
import re
|
|
418
|
-
left = sorted(set(re.findall(r"__[A-Z_]+__", t)))
|
|
419
|
-
if left: raise SystemExit(f"未渲染占位符残留: {left}")
|
|
420
|
-
sys.stdout.write(t)
|
|
421
|
-
PY
|
|
342
|
+
python3 - "$HERE/stack/sema-stack-cluster.yaml" > "$RENDERED" < "$HERE/lib/render-stack.py"
|
|
422
343
|
)
|
|
423
344
|
[ -s "$RENDERED" ] || die "sema-stack 渲染失败"
|
|
424
345
|
# 凭据清单经 stdin 直接 apply,不落远端盘(落 /tmp 失败时会残留)
|
|
425
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 挂不上卷就是缺它),重启与换副本都不丢钥匙"
|
|
426
349
|
fi
|
|
427
|
-
rsudo 0 $(buckets_prefixed local/ $(buckets_k8s))
|
|
428
|
-
set -e
|
|
429
|
-
BUCKETS=("$@") # 要建的桶(local/<桶>):清单只在 lib/buckets.sh 一处,经位置参数递给远端
|
|
430
|
-
# runner token 跨 ns 复制要赶在 server 起 pod 前(晚了=CreateContainerConfigError 干等——真踩);
|
|
431
|
-
# SA token secret 由控制器异步填充,先等它有值
|
|
432
|
-
TOK=""
|
|
433
|
-
for t in $(seq 1 24); do
|
|
434
|
-
TOK=$(k3s kubectl get secret sema-runner-token -n sema-sandbox -o jsonpath='{.data.token}' 2>/dev/null || true)
|
|
435
|
-
[ -n "$TOK" ] && break; sleep 5
|
|
436
|
-
done
|
|
437
|
-
[ -n "$TOK" ] || { echo "sema-runner-token 未被控制器填充" >&2; exit 1; }
|
|
438
|
-
k3s kubectl create secret generic sema-runner-token-copy -n sema --from-literal=token="$(printf '%s' "$TOK" | base64 -d)" \
|
|
439
|
-
--dry-run=client -o yaml | k3s kubectl apply -f - >/dev/null
|
|
440
|
-
# MinIO 建桶(备份桶+引擎桶)—— 排在等 PG healthy 与等 server rollout **之前**:引擎起服会核快照桶在不在,桶缺时 server 不就绪、rollout 永远等不到,而建桶又排在它后面 ⇒ 互等;
|
|
441
|
-
# MinIO 不依赖 PG,建桶也就不必陪着等 PG(冷启拉镜像 + init 可要几分钟,会把引擎的等桶窗耗掉)
|
|
442
|
-
k3s kubectl rollout status deployment/sema-minio -n sema --timeout=300s >/dev/null
|
|
443
|
-
PW=$(k3s kubectl get secret sema-minio -n sema -o jsonpath='{.data.rootPassword}' | base64 -d)
|
|
444
|
-
k3s kubectl exec deploy/sema-minio -n sema -- sh -c \
|
|
445
|
-
"mc alias set local http://localhost:9000 sema '$PW' >/dev/null && mc mb --ignore-existing ${BUCKETS[*]}" >/dev/null
|
|
446
|
-
# PG healthy(冷启拉镜像+init 可要几分钟)
|
|
447
|
-
for t in $(seq 1 120); do
|
|
448
|
-
s=$(k3s kubectl get cluster sema-pg -n sema -o jsonpath='{.status.phase}' 2>/dev/null || true)
|
|
449
|
-
[ "$s" = "Cluster in healthy state" ] && break; sleep 5
|
|
450
|
-
done
|
|
451
|
-
[ "$s" = "Cluster in healthy state" ] || { k3s kubectl get cluster -n sema; echo "PG 未达 healthy" >&2; exit 1; }
|
|
452
|
-
k3s kubectl rollout status deployment/sema-server -n sema --timeout=300s >/dev/null
|
|
453
|
-
echo STACK_OK
|
|
454
|
-
EOF
|
|
350
|
+
rsudo 0 $(buckets_prefixed local/ $(buckets_k8s)) < "$HERE/lib/remote/stack-ready.sh"
|
|
455
351
|
|
|
456
352
|
# ── 8. smoke(节点内经 NodePort;外网入口=LB 在云商侧配,打印指引)────────────────
|
|
457
353
|
log "8/8 smoke"
|
|
458
354
|
# NodePort 被 nodeport-addresses 钉在节点网段——loopback 不在其内,必须打 node-ip(真踩 curl exit 7)
|
|
459
355
|
# 第一行 = 两个 HTTP 码,其后 = /health 体(后端位在里面:200 + 401 测不出「服务在内存里跑」,验收必须读那一位)
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
printf '%s' "\$
|
|
466
|
-
|
|
467
|
-
)
|
|
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
|
+
")
|
|
468
367
|
SMOKE="${SMOKE_OUT%%$'\n'*}"
|
|
469
368
|
case "$SMOKE" in *"health=200 auth=401"*) : ;; *) die "smoke 失败:$SMOKE(期望 health=200 auth=401)" ;; esac
|
|
470
369
|
BK_WHY=$(health_backend_check "${SMOKE_OUT#*$'\n'}") || die "smoke 失败:$BK_WHY。下一步:kubectl -n sema logs deploy/sema-server(引擎在库没连上时不会再退内存起服 —— 它会拒启;读到 memory 多半是旧镜像)"
|
|
471
|
-
log "smoke ✓ $SMOKE backend=$SEMA_UP_EXPECT_SESSION_BACKEND"
|
|
472
|
-
|
|
473
|
-
|
|
370
|
+
log "smoke ✓ $SMOKE backend=$SEMA_UP_EXPECT_SESSION_BACKEND durability=$(health_store_durability "${SMOKE_OUT#*$'\n'}")${BK_WHY:+ — $BK_WHY}"
|
|
371
|
+
printf '%s' "
|
|
474
372
|
══════════ cluster-up 完成($MACHINE_COUNT 节点)══════════
|
|
475
373
|
入口 NodePort $NODEPORT(限私网段)。公网入口在云商 LB 上配:
|
|
476
374
|
listener TCP:8090 → pool(每节点 private_ip:$NODEPORT,member 必带 subnet_id——Gcore 真踩)
|
|
@@ -479,7 +377,7 @@ cat >&2 <<EOF
|
|
|
479
377
|
沙箱 kata-qemu runtimeclass(ns sema-sandbox,SA sema-runner)
|
|
480
378
|
凭据 $ENVF(0600;SERVICE_AUTH_TOKEN=API 门)
|
|
481
379
|
管理 ssh 隧道 6443(kubeconfig 在首节点 /etc/rancher/k3s/k3s.yaml,server 改 127.0.0.1)
|
|
482
|
-
|
|
380
|
+
" >&2
|
|
483
381
|
# 壳对 NodePort / LB 的明文 http 按设计拒连(非回环要 https)⇒ 经 ssh 隧道把首节点的 NodePort 带到本机回环再 connect
|
|
484
382
|
# (NodePort 钉在节点网段、不在节点自己的回环上 —— **转发目标**写节点私网 IP,见上面 smoke 的同一条注;**ssh 目标**是本次部署
|
|
485
383
|
# 连得上的那一台 = machines.yaml 的 HOST / USER / SSH_KEY,与 mssh 同一组,私网 IP 与 HOST 可以不同 —— 车内 codex r1-F4)。
|