@sema-agent/server 7.147.0 → 7.149.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 +1468 -24
- package/README.md +35 -7
- package/README.zh-CN.md +18 -8
- package/USAGE.md +444 -193
- 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/approval-card.d.ts +36 -38
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-leg-origin.d.ts +33 -0
- package/dist/approval-leg-origin.js +4 -0
- 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 +9 -15
- package/dist/auth-bridge.js +4 -11
- package/dist/auth-keys.d.ts +10 -1
- package/dist/auth-keys.js +8 -0
- 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 +47 -42
- package/dist/boot/execution-lane.d.ts +6 -4
- package/dist/boot/execution-lane.js +3 -1
- 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-delivery.d.ts +3 -2
- 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 +60 -70
- 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 +14 -5
- 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.d.ts +1 -0
- package/dist/boot/stage-01-config.js +13 -4
- package/dist/boot/stage-02-web-admin-pull.d.ts +2 -0
- package/dist/boot/stage-02-web-admin-pull.js +16 -3
- package/dist/boot/stage-03-store-backend.d.ts +4 -0
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +3 -0
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +8 -3
- package/dist/boot/stage-05-execution-env.js +2 -2
- package/dist/boot/stage-06-runners.d.ts +12 -13
- package/dist/boot/stage-06-runners.js +23 -15
- package/dist/boot/stage-07-capability-layer.d.ts +13 -9
- package/dist/boot/stage-07-capability-layer.js +5 -3
- package/dist/boot/stage-08-reapers.d.ts +13 -9
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +14 -16
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +14 -16
- 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 +6 -0
- package/dist/boot/stores.js +41 -27
- 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 +39 -11
- package/dist/capability-facts.js +35 -7
- package/dist/card-settle-stored-scope.d.ts +56 -0
- package/dist/card-settle-stored-scope.js +27 -0
- package/dist/card-void.d.ts +8 -13
- package/dist/card-void.js +2 -7
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +7 -3
- package/dist/config-catalog.d.ts +28 -1
- package/dist/config-catalog.js +95 -85
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +43 -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 +62 -21
- package/dist/config.d.ts +14 -21
- package/dist/config.js +141 -64
- package/dist/context-window-notice.d.ts +31 -0
- package/dist/context-window-notice.js +28 -0
- 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 +46 -11
- package/dist/deployment-shape.js +8 -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-name-allowlist-knobs.d.ts +6 -5
- package/dist/env-name-allowlist-knobs.js +5 -0
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-lane-caps.d.ts +25 -23
- package/dist/execution-lane-caps.js +18 -26
- 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/command-spawn.d.ts +7 -2
- package/dist/hooks/command-spawn.js +13 -6
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +72 -57
- package/dist/hooks/hook-runner.js +271 -193
- 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 +76 -79
- package/dist/http/approval-sweeps.d.ts +3 -3
- package/dist/http/approval-sweeps.js +56 -31
- 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 +16 -8
- package/dist/http/claimed-run.js +8 -0
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +78 -30
- package/dist/http/durable-run-leg.d.ts +11 -4
- package/dist/http/durable-run-leg.js +45 -21
- package/dist/http/execution-context.d.ts +122 -47
- package/dist/http/execution-context.js +135 -43
- 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 +392 -67
- package/dist/http/owner-access.js +370 -35
- package/dist/http/principal-gate.d.ts +39 -89
- package/dist/http/principal-gate.js +26 -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 +46 -12
- package/dist/http/resume-ctx-read.js +31 -6
- package/dist/http/resume-legs.d.ts +54 -19
- package/dist/http/resume-legs.js +408 -196
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/route-ctx.d.ts +31 -32
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +60 -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 +73 -67
- 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 +16 -19
- 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 +29 -3
- package/dist/http/routes/diagnostics.js +49 -18
- 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 +4 -2
- package/dist/http/routes/principal-inbox.js +5 -4
- 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 +155 -237
- 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 +28 -7
- package/dist/http/routes/session-sync.js +63 -50
- 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 +237 -187
- 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 +43 -45
- package/dist/http/server.js +61 -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 +17 -8
- package/dist/http/submit-ctx.js +8 -5
- 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 +4 -1
- package/dist/index.js +2 -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/leg-facts.d.ts +7 -2
- package/dist/leg-facts.js +1 -0
- package/dist/local-store-declaration.d.ts +54 -0
- package/dist/local-store-declaration.js +59 -0
- package/dist/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/mcp-assertion-header.d.ts +1 -1
- package/dist/mcp-assertion-header.js +1 -1
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-project-layer.js +1 -1
- package/dist/memory-scope.d.ts +33 -6
- package/dist/memory-scope.js +68 -19
- package/dist/memory-store-refusal.d.ts +5 -2
- package/dist/memory-sync-client.d.ts +3 -2
- package/dist/memory-sync-client.js +8 -5
- package/dist/model-compat.d.ts +17 -8
- package/dist/model-compat.js +6 -2
- package/dist/model-context-window.d.ts +57 -0
- package/dist/model-context-window.js +21 -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 +40 -20
- package/dist/model-entry-refusal.js +57 -30
- 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-reach-scope.d.ts +2 -1
- 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 +72 -40
- package/dist/observability/fail-open.js +74 -40
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.js +4 -5
- 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 +6 -2
- package/dist/observability/secret-env-scrub.d.ts +1 -1
- package/dist/observability/secret-env-scrub.js +1 -1
- 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 +36 -10
- package/dist/org-delivery-gate.js +12 -8
- 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 +532 -0
- package/dist/owner-faces.js +126 -0
- package/dist/park-row-commit.d.ts +67 -0
- package/dist/park-row-commit.js +76 -0
- package/dist/parked-decide.d.ts +76 -12
- package/dist/parked-decide.js +152 -11
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +7 -9
- 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 +3 -25
- package/dist/plugins/adoption-log-sql.js +23 -21
- 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 +40 -21
- package/dist/plugins/approval-ask-store-sql.js +44 -15
- package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
- package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
- package/dist/plugins/approval-exemption-skill-m46.d.ts +14 -0
- package/dist/plugins/approval-exemption-skill-m46.js +21 -0
- package/dist/plugins/approval-exemption-store.d.ts +32 -2
- package/dist/plugins/approval-exemption-store.js +42 -19
- 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 +36 -18
- package/dist/plugins/ensure-schema-lock-policy.js +76 -9
- package/dist/plugins/file-run-store.d.ts +85 -32
- package/dist/plugins/file-run-store.js +177 -94
- 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 +62 -23
- package/dist/plugins/local-checkpoint-store.js +197 -77
- package/dist/plugins/local-data-dir-modes-m39.js +2 -1
- package/dist/plugins/local-data-root-admission.d.ts +52 -0
- package/dist/plugins/local-data-root-admission.js +100 -0
- 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 +29 -6
- package/dist/plugins/local-engine-high-water.js +27 -19
- package/dist/plugins/local-session-store.d.ts +458 -140
- package/dist/plugins/local-session-store.js +906 -292
- 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 +53 -36
- package/dist/plugins/memory-run-store.js +116 -88
- package/dist/plugins/one-time-migration-marker.d.ts +26 -0
- package/dist/plugins/one-time-migration-marker.js +13 -0
- package/dist/plugins/one-time-migrations.d.ts +214 -47
- package/dist/plugins/one-time-migrations.js +481 -135
- package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
- package/dist/plugins/org-delivery-quota-store.js +31 -15
- package/dist/plugins/permission-rule-store-file.d.ts +3 -3
- package/dist/plugins/permission-rule-store-sql.d.ts +5 -64
- package/dist/plugins/permission-rule-store-sql.js +11 -95
- package/dist/plugins/pg-pool.d.ts +2 -32
- package/dist/plugins/pg-pool.js +24 -17
- package/dist/plugins/remote-env-device.d.ts +3 -2
- package/dist/plugins/remote-env-e2b.d.ts +8 -32
- package/dist/plugins/remote-env-e2b.js +44 -32
- package/dist/plugins/remote-env-host.d.ts +51 -17
- package/dist/plugins/remote-env-host.js +111 -42
- package/dist/plugins/remote-env-k8s.d.ts +40 -45
- package/dist/plugins/remote-env-k8s.js +111 -60
- package/dist/plugins/remote-env-local-docker.d.ts +152 -15
- package/dist/plugins/remote-env-local-docker.js +352 -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 +82 -75
- package/dist/plugins/run-store-sql.js +164 -125
- 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 +56 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +56 -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 +131 -14
- package/dist/plugins/schema-consistency.js +388 -18
- package/dist/plugins/schema-drift-sentence.d.ts +10 -6
- package/dist/plugins/schema-drift-sentence.js +15 -7
- 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 +27 -20
- 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 +42 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +9 -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/stop-then-start-sentence.d.ts +16 -0
- package/dist/plugins/stop-then-start-sentence.js +7 -0
- package/dist/plugins/store-backend.d.ts +99 -16
- package/dist/plugins/store-backend.js +230 -65
- package/dist/plugins/store-contracts.d.ts +123 -33
- package/dist/plugins/store-contracts.js +38 -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.d.ts +11 -6
- package/dist/plugins/tidb-pool.js +39 -18
- 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/plugins/workspace-custody.d.ts +44 -0
- package/dist/plugins/workspace-custody.js +47 -0
- 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/project-identity.d.ts +8 -7
- package/dist/project-identity.js +40 -17
- package/dist/project-layer-key.d.ts +13 -2
- package/dist/project-layer-key.js +9 -1
- package/dist/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/read-deny-floor-notice.d.ts +36 -0
- package/dist/read-deny-floor-notice.js +40 -0
- package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
- package/dist/request-declaration-disposition.js +39 -0
- 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-cancel-card.d.ts +28 -0
- package/dist/run-cancel-card.js +19 -0
- package/dist/run-cancel-context.d.ts +10 -0
- package/dist/run-cancel-context.js +1 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +117 -90
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +56 -21
- package/dist/runs.js +73 -43
- 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 +55 -25
- package/dist/server-secret-env.js +75 -22
- package/dist/session-agent.d.ts +3 -2
- package/dist/session-children-retire.d.ts +13 -8
- package/dist/session-children-retire.js +9 -7
- 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/session-workspace.d.ts +3 -3
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-admission.d.ts +33 -0
- package/dist/store-admission.js +49 -0
- package/dist/store-posture.d.ts +141 -20
- package/dist/store-posture.js +205 -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 +34 -29
- package/dist/stores-sql/checkpoint-store-sql.js +78 -49
- package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
- package/dist/stores-sql/file-history-store-sql.js +3 -5
- 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/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +4 -6
- 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 +3 -8
- package/dist/task-a2a.js +28 -30
- package/dist/task-cwd.d.ts +43 -7
- package/dist/task-cwd.js +11 -0
- package/dist/task-mcp.d.ts +3 -3
- package/dist/task-mcp.js +4 -4
- package/dist/task-settings.d.ts +14 -10
- package/dist/task-settings.js +19 -7
- package/dist/terminal.d.ts +27 -43
- package/dist/terminal.js +49 -14
- package/dist/tool-approval.d.ts +173 -163
- package/dist/tool-approval.js +247 -232
- 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/engine-notice-wire.d.ts +24 -21
- package/dist/trace/engine-notice-wire.js +7 -3
- 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 +4 -31
- 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 +59 -44
- package/dist/trace/project.js +60 -26
- package/dist/trace/redact.d.ts +135 -27
- package/dist/trace/redact.js +884 -260
- package/dist/trace/self-minted-wire.d.ts +567 -20
- package/dist/trace/self-minted-wire.js +205 -24
- 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 +33 -23
- 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/docs/error-text-lexicon.json +317 -0
- package/package.json +8 -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/scripts/embed-minimal.mjs +183 -0
- package/wire-changes/server@7.148.0.json +1517 -0
- package/wire-changes/server@7.149.0.json +372 -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/dist/plain-string-record.js +0 -70
|
@@ -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
|
-
|
|
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
|
|
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 -
|
|
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
|
-
|
|
266
|
-
|
|
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=$(
|
|
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 ≠
|
|
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
|
|
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 <根> —— 落定(只在真跑、判定之后调)
|
|
112
|
+
# dataroot_settle <根> —— 落定(只在真跑、判定之后调):建根与各只卷目录,new / backfill 时写标记。
|
|
113
113
|
# 写标记用 noclobber(O_EXCL):两次 sema-up 同时认领同一条新根时,后到的那次读到对方的标记 ⇒ 拒,不互相覆盖。
|
|
114
114
|
dataroot_settle() {
|
|
115
115
|
local root="${DATAROOT_PHYS:-$1}" v
|
|
@@ -1,13 +1,40 @@
|
|
|
1
|
-
# lib/health.sh — 「装好的引擎 /health
|
|
1
|
+
# lib/health.sh — 「装好的引擎 /health 体说它落在哪个后端、店活不活得过替换」的唯一读法 + sema-up 部署的期望值。
|
|
2
2
|
# smoke.sh / kube-up.sh / cluster-up.sh 三处验收都调它,不各写一份(各写一份的下场:有一处还只看 HTTP 200,把退到内存的服务判绿)。
|
|
3
3
|
#
|
|
4
4
|
# 事实(出处是引擎,不是推测):
|
|
5
|
-
# · `/health` 体里的 `sessionBackend`
|
|
6
|
-
#
|
|
5
|
+
# · `/health` 体里的 `sessionBackend` = 会话店**装配后**落在哪种后端:`pg` | `mysql` | `local` | `memory`(只说种类;
|
|
6
|
+
# 引擎侧只有一只读法:src/store-posture.ts 的 `sessionStoreLabelOf`);
|
|
7
|
+
# · `/health` 体里的 `store.durability` = 店活不活得过容器 / Pod 替换:`durable` | `ephemeral` | `unknown`(三根取最弱:数据根、
|
|
8
|
+
# 封签钥匙目录、file 记忆根;与 GET /v1/capabilities 的 `store.durability` 同一只读数;逐根明细在 GET /v1/diagnostics/wiring 的 `storeDurability.roots`);
|
|
9
|
+
# · 这两位只给**出示了服务凭据**的读者:sema-up 部署的引擎一律配了 `SERVICE_AUTH_TOKEN`,而配了服务凭据的引擎对匿名 `/health` 只给存活位与自报位三键
|
|
10
|
+
# (src/http/health-reader.ts),不给 `sessionBackend` / `store`。三处验收读 `/health` 都带这枚凭据:本机两处(smoke.sh / kube-up.sh)走 `health_curl`,
|
|
11
|
+
# 多机那一处(cluster-up.sh)是同一句话在远端节点上的写法(凭据经 stdin 配置喂 curl,不进远端 argv);
|
|
7
12
|
# · sema-up 三条路径(compose / kube / 多机)起的引擎一律 `DB_BACKEND=pg`(stack/compose.yaml、chart/templates/server.yaml、
|
|
8
|
-
# stack/sema-stack-cluster.yaml 逐份写死),所以装好的引擎必须读到 `
|
|
13
|
+
# stack/sema-stack-cluster.yaml 逐份写死),所以装好的引擎必须读到 `sessionBackend=pg`。读到 `memory` = 会话 / 停驻 / run 账本在进程内存里、
|
|
9
14
|
# 重启即丢 —— /health 照样 200、401 门照样在,只有这一位说了实话,验收必须看它。
|
|
10
|
-
|
|
15
|
+
# · `store.durability` 必须读得到(三词之一;读不到 = 引擎早于这一读法,或体不是引擎的);它不是 `durable` 时验收**照过**、但把读数与指路说出来
|
|
16
|
+
# (与引擎自己的起服审计同一律:会话店在 pg 上恒持久,别的根判不出 / 易失只 warn)。三条路径都给封签钥匙目录挂了卷,读数随卷的形走:
|
|
17
|
+
# 多机清单的 Longhorn RWX(NFS)读 `durable`;compose 的具名卷 / `--data-root` bind、图表路径上 hostPath 形的存储类(如 local-path)是绑定挂载一只子目录,
|
|
18
|
+
# 判不出它跟着谁走,读 `unknown`。
|
|
19
|
+
SEMA_UP_EXPECT_SESSION_BACKEND="pg"
|
|
20
|
+
|
|
21
|
+
# health_curl <服务凭据|空串> <curl 实参…> —— 本机读 `/health`:有凭据就带 `Authorization: Bearer`(全键),空串 = 不带(没配服务凭据的引擎本来就给全键)。
|
|
22
|
+
# 凭据只上本机 curl 的实参(与 smoke.sh 的 POST /v1/tasks 同一处境)。
|
|
23
|
+
health_curl() {
|
|
24
|
+
local tok="$1"; shift
|
|
25
|
+
if [ -n "$tok" ]; then curl "$@" -H "Authorization: Bearer $tok"; else curl "$@"; fi
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
# health_curl_config <服务凭据> —— 多机验收在远端节点上读 `/health` 用的 curl 配置行(经 stdin 喂 `curl -K -`,凭据不进远端 argv):
|
|
29
|
+
# 打印 `header = "Authorization: Bearer <凭据>"`,凭据里的反斜杠与双引号按 curl 配置文法转义(原样读回);凭据含控制字符(换行 / 回车 …)⇒ rc 1、不打印 ——
|
|
30
|
+
# 那不是能放进 Authorization 头的值,更不能让它多出一行配置。调用方再过一道 `printf '%q'` 才把这一行放进远端 shell 文本(值是数据,不是代码)。
|
|
31
|
+
health_curl_config() {
|
|
32
|
+
local t="$1"
|
|
33
|
+
case "$t" in *[[:cntrl:]]*) return 1 ;; esac
|
|
34
|
+
t="${t//\\/\\\\}"
|
|
35
|
+
t="${t//\"/\\\"}"
|
|
36
|
+
printf 'header = "Authorization: Bearer %s"' "$t"
|
|
37
|
+
}
|
|
11
38
|
|
|
12
39
|
# health_session_backend <health 体> → 打印 `sessionBackend` 的值;体读不成 JSON / 没有这一位 ⇒ 打印空串(调用方按「读不出」处置,不猜)。
|
|
13
40
|
health_session_backend() {
|
|
@@ -19,15 +46,37 @@ except Exception:
|
|
|
19
46
|
print("")' 2>/dev/null
|
|
20
47
|
}
|
|
21
48
|
|
|
22
|
-
#
|
|
49
|
+
# health_store_durability <health 体> → 打印 `store.durability`(三词之一);体读不成 JSON / 没有这一位 / 不是三词之一 ⇒ 打印空串。
|
|
50
|
+
health_store_durability() {
|
|
51
|
+
printf '%s' "$1" | python3 -c 'import json,sys
|
|
52
|
+
try:
|
|
53
|
+
s = json.load(sys.stdin).get("store", {})
|
|
54
|
+
v = s.get("durability", "") if isinstance(s, dict) else ""
|
|
55
|
+
print(v if v in ("durable", "ephemeral", "unknown") else "")
|
|
56
|
+
except Exception:
|
|
57
|
+
print("")' 2>/dev/null
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# health_backend_check <health 体> → 0 = 落在期望的后端且读得到持久性(stdout:持久性不是 `durable` 时一句读数 + 指路,调用方拼进成功行);
|
|
61
|
+
# 1 = 不是(stdout 打一句人话,供调用方拼进失败行)。
|
|
23
62
|
health_backend_check() {
|
|
24
|
-
local got
|
|
63
|
+
local got dur
|
|
25
64
|
got="$(health_session_backend "$1")"
|
|
26
|
-
|
|
27
|
-
if [
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
65
|
+
dur="$(health_store_durability "$1")"
|
|
66
|
+
if [ "$got" != "$SEMA_UP_EXPECT_SESSION_BACKEND" ]; then
|
|
67
|
+
if [ -z "$got" ]; then
|
|
68
|
+
printf '/health 体里读不出 sessionBackend(期望 %s)' "$SEMA_UP_EXPECT_SESSION_BACKEND"
|
|
69
|
+
else
|
|
70
|
+
printf '/health.sessionBackend=%s,期望 %s' "$got" "$SEMA_UP_EXPECT_SESSION_BACKEND"
|
|
71
|
+
fi
|
|
72
|
+
return 1
|
|
73
|
+
fi
|
|
74
|
+
if [ -z "$dur" ]; then
|
|
75
|
+
printf '/health 体里读不出 store.durability(期望 durable / ephemeral / unknown 之一;读不到多半是旧镜像)'
|
|
76
|
+
return 1
|
|
77
|
+
fi
|
|
78
|
+
if [ "$dur" != "durable" ]; then
|
|
79
|
+
printf 'store.durability=%s(至少一根活不过容器替换或判不出;逐根看 GET /v1/diagnostics/wiring 的 storeDurability.roots,给那只目录挂持久卷)' "$dur"
|
|
31
80
|
fi
|
|
32
|
-
return
|
|
81
|
+
return 0
|
|
33
82
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import json, os
|
|
2
|
+
e = os.environ
|
|
3
|
+
# json 是合法 yaml;json.dumps 对任意凭据字符安全(引号/反斜杠/换行都正确转义)
|
|
4
|
+
print(json.dumps({
|
|
5
|
+
"pg": {"instances": int(e["V_PG_INSTANCES"]), "antiAffinity": e["V_PG_AA"]},
|
|
6
|
+
"minio": {"rootPassword": e["V_MINIO_PW"]},
|
|
7
|
+
"server": {
|
|
8
|
+
"image": e["V_SERVER_IMAGE"], "pullPolicy": e["V_PULL_POLICY"],
|
|
9
|
+
"replicas": int(e["V_REPLICAS"]), "serviceAuthToken": e["V_SVC_TOKEN"],
|
|
10
|
+
"modelGatewayBaseurl": e["V_MODEL_GATEWAY"], "modelId": e["V_MODEL_ID"],
|
|
11
|
+
"modelApiKey": e["V_MODEL_KEY"], "sandboxPkgSource": e["V_PKG_SOURCE"],
|
|
12
|
+
"requirePrincipal": e["V_REQ_PRINCIPAL"],
|
|
13
|
+
},
|
|
14
|
+
# chart 0.3.0 起 registry.enabled 默认 true(单机档语义)——machines 多机路径的 registry/git
|
|
15
|
+
# 面还没接线,必须显式关,不然 helm 撞 registry.image required(2026-07-12 自查)
|
|
16
|
+
"registry": {"enabled": False},
|
|
17
|
+
"gitea": {"enabled": False},
|
|
18
|
+
}))
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import json, os
|
|
2
|
+
e = os.environ
|
|
3
|
+
# json 是合法 yaml;json.dumps 对任意凭据字符安全(引号/反斜杠/换行都正确转义)
|
|
4
|
+
v = {
|
|
5
|
+
# helm 的 values 合并是深合并——只给部分 parameters 时 values.yaml 里 3 机 as-built 的
|
|
6
|
+
# shared_buffers=8GB/effective_cache_size=86GB 会留下来,小集群 PG 直接起不来(内存不够)。
|
|
7
|
+
# 必须整组显式覆盖成保守值;真按机器规格调优的入口是 STORAGE/PG 显式 values(后续档)。
|
|
8
|
+
"pg": {"instances": int(e["V_PG_INSTANCES"]), "antiAffinity": e["V_PG_AA"],
|
|
9
|
+
"storageClass": e["V_SC"], "storageSize": "20Gi",
|
|
10
|
+
"parameters": {"shared_buffers": "256MB", "effective_cache_size": "1GB",
|
|
11
|
+
"maintenance_work_mem": "128MB", "random_page_cost": "1.1",
|
|
12
|
+
"effective_io_concurrency": "200", "checkpoint_completion_target": "0.9",
|
|
13
|
+
"max_parallel_workers": "2"}},
|
|
14
|
+
"minio": {"rootPassword": e["V_MINIO_PW"], "storageClass": e["V_SC"], "storageSize": "20Gi"},
|
|
15
|
+
"server": {
|
|
16
|
+
"image": e["V_SERVER_IMAGE"], "replicas": int(e["V_REPLICAS"]),
|
|
17
|
+
"serviceAuthToken": e["V_SVC_TOKEN"], "modelGatewayBaseurl": e["V_MODEL_GATEWAY"],
|
|
18
|
+
"modelId": e["V_MODEL_ID"], "modelApiKey": e["V_MODEL_KEY"],
|
|
19
|
+
"sandboxPkgSource": e["V_PKG_SOURCE"], "requirePrincipal": e["V_REQ_PRINCIPAL"],
|
|
20
|
+
},
|
|
21
|
+
"sandbox": {"runtimeClass": e["V_RT_CLASS"],
|
|
22
|
+
"networkPolicy": {"nodeCidrs": json.loads(e["V_NODE_CIDRS"])}},
|
|
23
|
+
"registry": {"enabled": e["V_REG_ENABLED"] == "true", "image": e["V_REG_IMAGE"],
|
|
24
|
+
"storageClass": e["V_SC"], "adminPassword": e["V_REG_PW"],
|
|
25
|
+
"sessionSecret": e["V_REG_SS"], "pullToken": e["V_REG_PT"],
|
|
26
|
+
"giteaBaseUrl": e["V_GITEA_URL"], "giteaOauthClientId": e["V_OA_ID"],
|
|
27
|
+
"giteaOauthClientSecret": e["V_OA_SECRET"]},
|
|
28
|
+
"gitea": {"enabled": e["V_GITEA_ENABLED"] == "true", "image": e["V_GITEA_IMAGE"],
|
|
29
|
+
"storageClass": e["V_SC"], "domain": e["V_NODE_IP"]},
|
|
30
|
+
# 钥匙卷的存储类:kube-up 按 lib/chart-run.sh sealed_key_class 定(新建 = STORAGE_CLASS;已在 = 它建好时的类,不可改)。其余 sealedKey 键照图表缺省。
|
|
31
|
+
"sealedKey": {"persistence": {"storageClass": e["V_SK_SC"]}},
|
|
32
|
+
}
|
|
33
|
+
# MinIO 镜像:给了才递(默认只在 chart values.yaml 写一处,不在脚本里再抄一份);国内源 = 整条引用
|
|
34
|
+
if e["V_MINIO_IMAGE"]: v["minio"]["image"] = e["V_MINIO_IMAGE"]
|
|
35
|
+
print(json.dumps(v))
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import base64, json, os
|
|
2
|
+
u, p = os.environ["IPS_USER"], os.environ["IPS_TOKEN"]
|
|
3
|
+
cfg = {"auths": {os.environ["IPS_REG"]: {"username": u, "password": p,
|
|
4
|
+
"auth": base64.b64encode(f"{u}:{p}".encode()).decode()}}}
|
|
5
|
+
b64 = base64.b64encode(json.dumps(cfg).encode()).decode()
|
|
6
|
+
print(json.dumps({"apiVersion": "v1", "kind": "Secret", "type": "kubernetes.io/dockerconfigjson",
|
|
7
|
+
"metadata": {"name": "sema-regcred", "namespace": os.environ["IPS_NS"]},
|
|
8
|
+
"data": {".dockerconfigjson": b64}}))
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
set -e
|
|
2
|
+
trap 'rm -f /tmp/sema-server-image.tar.upload /tmp/sema-server-image.tar' EXIT
|
|
3
|
+
f=/tmp/sema-server-image.tar.upload
|
|
4
|
+
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
|
|
5
|
+
k3s ctr images import "$f" >/dev/null
|
|
6
|
+
k3s ctr images ls | grep -q sema-server
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
set -e
|
|
2
|
+
command -v curl >/dev/null || { echo "FAIL curl 缺失——建议:apt-get install -y curl"; exit 1; }
|
|
3
|
+
[ "$(uname -m)" = "x86_64" ] || [ "$(uname -m)" = "aarch64" ] || { echo "FAIL 架构 $(uname -m) 不支持——建议:x86_64/aarch64 机器"; exit 1; }
|
|
4
|
+
ram=$(awk '/MemTotal/{printf "%d", $2/1024}' /proc/meminfo)
|
|
5
|
+
[ "$ram" -ge 8192 ] || { echo "FAIL 内存 ${ram}MB < 8G——建议:full-cluster 节点至少 8G(数据面+沙箱同机)"; exit 1; }
|
|
6
|
+
disk=$(df -m / | awk 'NR==2{print $4}')
|
|
7
|
+
[ "$disk" -ge 40960 ] || { echo "FAIL 根盘可用 ${disk}MB < 40G——建议:Longhorn/镜像要空间,清盘或换机"; exit 1; }
|
|
8
|
+
[ -e /dev/kvm ] || echo "WARN 无 /dev/kvm——kata VM 沙箱在本节点不可用(建议:开嵌套虚拟化/裸机;或全集群改 e2b lane)"
|
|
9
|
+
# 钥匙卷是 ReadWriteMany(多副本共用一份钥匙);Longhorn 的 RWX 由节点上的 NFS 客户端挂载 —— 缺它 server Pod 挂不上卷、rollout 等不到就绪
|
|
10
|
+
{ [ -x /sbin/mount.nfs ] || [ -x /usr/sbin/mount.nfs ]; } || echo "WARN 无 NFS 客户端(mount.nfs)——server 的钥匙卷(ReadWriteMany)在本节点挂不上(建议:apt-get install -y nfs-common / yum install -y nfs-utils)"
|
|
11
|
+
hostname
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
set -e
|
|
2
|
+
BUCKETS=("$@") # 要建的桶(local/<桶>):清单只在 lib/buckets.sh 一处,经位置参数递给远端
|
|
3
|
+
# runner token 跨 ns 复制要赶在 server 起 pod 前(晚了=CreateContainerConfigError 干等——真踩);
|
|
4
|
+
# SA token secret 由控制器异步填充,先等它有值
|
|
5
|
+
TOK=""
|
|
6
|
+
for t in $(seq 1 24); do
|
|
7
|
+
TOK=$(k3s kubectl get secret sema-runner-token -n sema-sandbox -o jsonpath='{.data.token}' 2>/dev/null || true)
|
|
8
|
+
[ -n "$TOK" ] && break; sleep 5
|
|
9
|
+
done
|
|
10
|
+
[ -n "$TOK" ] || { echo "sema-runner-token 未被控制器填充" >&2; exit 1; }
|
|
11
|
+
k3s kubectl create secret generic sema-runner-token-copy -n sema --from-literal=token="$(printf '%s' "$TOK" | base64 -d)" \
|
|
12
|
+
--dry-run=client -o yaml | k3s kubectl apply -f - >/dev/null
|
|
13
|
+
# MinIO 建桶(备份桶+引擎桶)—— 排在等 PG healthy 与等 server rollout **之前**:引擎起服会核快照桶在不在,桶缺时 server 不就绪、rollout 永远等不到,而建桶又排在它后面 ⇒ 互等;
|
|
14
|
+
# MinIO 不依赖 PG,建桶也就不必陪着等 PG(冷启拉镜像 + init 可要几分钟,会把引擎的等桶窗耗掉)
|
|
15
|
+
k3s kubectl rollout status deployment/sema-minio -n sema --timeout=300s >/dev/null
|
|
16
|
+
PW=$(k3s kubectl get secret sema-minio -n sema -o jsonpath='{.data.rootPassword}' | base64 -d)
|
|
17
|
+
k3s kubectl exec deploy/sema-minio -n sema -- sh -c \
|
|
18
|
+
"mc alias set local http://localhost:9000 sema '$PW' >/dev/null && mc mb --ignore-existing ${BUCKETS[*]}" >/dev/null
|
|
19
|
+
# PG healthy(冷启拉镜像+init 可要几分钟)
|
|
20
|
+
for t in $(seq 1 120); do
|
|
21
|
+
s=$(k3s kubectl get cluster sema-pg -n sema -o jsonpath='{.status.phase}' 2>/dev/null || true)
|
|
22
|
+
[ "$s" = "Cluster in healthy state" ] && break; sleep 5
|
|
23
|
+
done
|
|
24
|
+
[ "$s" = "Cluster in healthy state" ] || { k3s kubectl get cluster -n sema; echo "PG 未达 healthy" >&2; exit 1; }
|
|
25
|
+
k3s kubectl rollout status deployment/sema-server -n sema --timeout=300s >/dev/null
|
|
26
|
+
echo STACK_OK
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
set -e
|
|
2
|
+
iface="$1"
|
|
3
|
+
printf '%s\n' '[Unit]' 'Description=Drop flannel VXLAN on public iface (sema isolation invariant)' \
|
|
4
|
+
'After=network-online.target k3s.service' '[Service]' 'Type=oneshot' 'RemainAfterExit=yes' \
|
|
5
|
+
"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'" \
|
|
6
|
+
'[Install]' 'WantedBy=multi-user.target' > /etc/systemd/system/sema-vxlan-guard.service
|
|
7
|
+
systemctl daemon-reload && systemctl enable --now sema-vxlan-guard.service
|
|
8
|
+
iptables -C INPUT -i "$iface" -p udp --dport 8472 -j DROP
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import os, sys
|
|
2
|
+
MAP = {"__MINIO_PW__":"R_MINIO_PW", "__SVC_TOKEN__":"R_SVC_TOKEN", "__MODEL_KEY__":"R_MODEL_KEY",
|
|
3
|
+
"__MODEL_GATEWAY__":"R_MODEL_GATEWAY", "__MODEL_ID__":"R_MODEL_ID",
|
|
4
|
+
"__SERVER_IMAGE__":"R_SERVER_IMAGE", "__SERVER_PULL_POLICY__":"R_PULL_POLICY",
|
|
5
|
+
"__PKG_SOURCE__":"R_PKG_SOURCE", "__PG_INSTANCES__":"R_PG_INSTANCES",
|
|
6
|
+
"__PG_ANTI_AFFINITY__":"R_PG_AA", "__SERVER_REPLICAS__":"R_REPLICAS",
|
|
7
|
+
"__REQUIRE_PRINCIPAL__":"R_REQ_PRINCIPAL", "__OPERATOR_SINGLE_USER__":"R_OPERATOR_SINGLE_USER"}
|
|
8
|
+
t = open(sys.argv[1], encoding="utf-8").read()
|
|
9
|
+
for ph, env in MAP.items():
|
|
10
|
+
v = os.environ.get(env)
|
|
11
|
+
if v is None: raise SystemExit(f"渲染缺 {env}({ph})")
|
|
12
|
+
if any(c in v for c in "\n\"\\"): raise SystemExit(f"{env} 含 YAML 危险字符(换行/引号/反斜杠)")
|
|
13
|
+
t = t.replace(ph, v)
|
|
14
|
+
import re
|
|
15
|
+
left = sorted(set(re.findall(r"__[A-Z_]+__", t)))
|
|
16
|
+
if left: raise SystemExit(f"未渲染占位符残留: {left}")
|
|
17
|
+
sys.stdout.write(t)
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# shell-text.sh —— 把一段文本「按行 / 按词 / 按分隔字符」读进变量的三只函数(被 source,不单独执行)。
|
|
3
|
+
#
|
|
4
|
+
# ── 为什么有这只 lib ─────────────────────────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
# `read … ` 与 `while read …; done` 后面接 here-string(把一段文本直接当输入的那种写法)时,靠 bash 先把整段文本写进一根管道、读者随后才读。
|
|
6
|
+
# 全机管道配额吃紧时,内核只给新管道很小的缓冲(事故里读到的形:512 B),文本一长就写不完,链路停在本机、日志里什么也没有。
|
|
7
|
+
# registry 的一行读数里装着本包的全部版本号(几 KB),恰是这一类。这条死法与脚本逻辑无关,只与「脚本里有没有 here-document / here-string」有关,
|
|
8
|
+
# 所以发车链的两个脚本目录与部署脚本目录(deploy/ 下全部 .sh)的每一行都不许有这两种写法(由仓内测试逐行钉住);
|
|
9
|
+
# 要把一段文本读进变量,走这里:全程只用参数展开,不开管道、不开文件描述符、不起子进程,更不起子 shell(变量赋值与 `return` 留在调用方的 shell 里)。
|
|
10
|
+
# 本文件有两份逐字节相同的拷贝:发车链用的一份在 scripts/lib/,随部署包落到运维机的一份在 deploy/sema-up/lib/(部署目录要能脱离 scripts/ 单独落机)。改一处必须同改另一处,仓内测试逐字节比。
|
|
11
|
+
#
|
|
12
|
+
# ── 三只函数 ────────────────────────────────────────────────────────────────────────────────────────────────────────
|
|
13
|
+
# text_words <文本> <变量名>… = `read -r <变量名>…` 读 here-string 的文本:只读文本的第一行,按空格 / 制表切词;
|
|
14
|
+
# 前 N-1 个词依次给前 N-1 个变量,第 N 个变量拿剩下的整段(去掉两头的空白);词不够 ⇒ 余下的变量写空串。
|
|
15
|
+
# 分隔符取自 IFS 里的空格与制表(IFS 没设 ⇒ 默认,两者都是;`IFS=' ' text_words …` ⇒ 只认空格)。
|
|
16
|
+
# IFS 里有空格 / 制表 / 换行之外的字符,或一个空格与制表都没有 ⇒ rc 2、stderr 一句(不静默换一种切法)。
|
|
17
|
+
# text_split <分隔字符> <文本> <变量名>… = `IFS=<分隔字符> read -r <变量名>…` 读 here-string 的文本:只读文本的第一行;分隔字符是单个字符(不是空格 / 制表 / 换行),
|
|
18
|
+
# 每个分隔字符都切一刀、空段照留;前 N-1 段依次给前 N-1 个变量,第 N 个变量拿剩下的整段(其中还有分隔字符就原样留着),
|
|
19
|
+
# 例外一处与 read 一致:剩下的整段里只有末尾恰一个分隔字符、别无他个 ⇒ 那一个算终结符、不算内容;段不够 ⇒ 余下的变量写空串。
|
|
20
|
+
# text_pop_line <存余变量名> <行变量名> 从名为 <存余变量名> 的变量里削下第一行放进 <行变量名>,<存余变量名> 留剩下的;存余为空 ⇒ rc 1(没有行了)。
|
|
21
|
+
# 逐行遍历的写法(同 `while IFS= read -r l; do …; done` 读 here-string 的文本):
|
|
22
|
+
# rest="$文本"$'\n' # here-string 在文本末尾补的那个换行;空文本 ⇒ 恰好读到一行空行
|
|
23
|
+
# while text_pop_line rest line; do …; done
|
|
24
|
+
# 变量名只许是调用方的普通变量名(printf -v 写它);本文件的内部变量一律 _ts_ 起头,调用方别用这个前缀。
|
|
25
|
+
# bash 3.2 兼容(发车机 /bin/bash 可能是它):不用关联数组 / mapfile / nameref。
|
|
26
|
+
|
|
27
|
+
_TS_NL=$'\n'
|
|
28
|
+
_TS_TAB=$'\t'
|
|
29
|
+
|
|
30
|
+
text_words() { # <文本> <变量名>…
|
|
31
|
+
[ "$#" -ge 2 ] || { echo "text_words: 用法 text_words <文本> <变量名>…" >&2; return 2; }
|
|
32
|
+
local _ts_ifs _ts_ws="" _ts_rest _ts_lead _ts_word _ts_tail
|
|
33
|
+
if [ -z "${IFS+x}" ]; then _ts_ifs=" $_TS_TAB$_TS_NL"; else _ts_ifs="$IFS"; fi
|
|
34
|
+
[ -z "${_ts_ifs//[ $_TS_TAB$_TS_NL]/}" ] || { echo "text_words: IFS 里有空格 / 制表 / 换行以外的字符,不支持" >&2; return 2; }
|
|
35
|
+
case "$_ts_ifs" in *" "*) _ts_ws=" " ;; esac
|
|
36
|
+
case "$_ts_ifs" in *"$_TS_TAB"*) _ts_ws="$_ts_ws$_TS_TAB" ;; esac
|
|
37
|
+
[ -n "$_ts_ws" ] || { echo "text_words: IFS 里既没有空格也没有制表,没有可切的分隔符" >&2; return 2; }
|
|
38
|
+
_ts_rest="${1%%"$_TS_NL"*}"
|
|
39
|
+
shift
|
|
40
|
+
while [ "$#" -gt 1 ]; do
|
|
41
|
+
_ts_lead="${_ts_rest%%[!$_ts_ws]*}"
|
|
42
|
+
_ts_rest="${_ts_rest#"$_ts_lead"}"
|
|
43
|
+
_ts_word="${_ts_rest%%[$_ts_ws]*}"
|
|
44
|
+
_ts_rest="${_ts_rest#"$_ts_word"}"
|
|
45
|
+
printf -v "$1" '%s' "$_ts_word" || return 2
|
|
46
|
+
shift
|
|
47
|
+
done
|
|
48
|
+
_ts_lead="${_ts_rest%%[!$_ts_ws]*}"
|
|
49
|
+
_ts_rest="${_ts_rest#"$_ts_lead"}"
|
|
50
|
+
_ts_tail="${_ts_rest##*[!$_ts_ws]}"
|
|
51
|
+
_ts_rest="${_ts_rest%"$_ts_tail"}"
|
|
52
|
+
printf -v "$1" '%s' "$_ts_rest" || return 2
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
text_pop_line() { # <存余变量名> <行变量名>
|
|
56
|
+
[ "$#" -eq 2 ] || { echo "text_pop_line: 用法 text_pop_line <存余变量名> <行变量名>" >&2; return 2; }
|
|
57
|
+
local _ts_all="${!1}"
|
|
58
|
+
[ -n "$_ts_all" ] || return 1
|
|
59
|
+
printf -v "$2" '%s' "${_ts_all%%"$_TS_NL"*}" || return 2
|
|
60
|
+
case "$_ts_all" in
|
|
61
|
+
*"$_TS_NL"*) printf -v "$1" '%s' "${_ts_all#*"$_TS_NL"}" || return 2 ;;
|
|
62
|
+
*) printf -v "$1" '%s' "" || return 2 ;;
|
|
63
|
+
esac
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
text_split() { # <分隔字符> <文本> <变量名>…
|
|
67
|
+
[ "$#" -ge 3 ] || { echo "text_split: 用法 text_split <分隔字符> <文本> <变量名>…" >&2; return 2; }
|
|
68
|
+
local _ts_sep="$1" _ts_rest="${2%%"$_TS_NL"*}" _ts_field
|
|
69
|
+
case "$_ts_sep" in
|
|
70
|
+
" " | "$_TS_TAB" | "$_TS_NL") echo "text_split: 分隔字符不能是空格 / 制表 / 换行(要按空白切词用 text_words)" >&2; return 2 ;;
|
|
71
|
+
esac
|
|
72
|
+
[ "${#_ts_sep}" -eq 1 ] || { echo "text_split: 分隔符必须恰是一个字符" >&2; return 2; }
|
|
73
|
+
shift 2
|
|
74
|
+
while [ "$#" -gt 1 ]; do
|
|
75
|
+
_ts_field="${_ts_rest%%"$_ts_sep"*}"
|
|
76
|
+
case "$_ts_rest" in *"$_ts_sep"*) _ts_rest="${_ts_rest#*"$_ts_sep"}" ;; *) _ts_rest="" ;; esac
|
|
77
|
+
printf -v "$1" '%s' "$_ts_field" || return 2
|
|
78
|
+
shift
|
|
79
|
+
done
|
|
80
|
+
case "$_ts_rest" in
|
|
81
|
+
*"$_ts_sep")
|
|
82
|
+
_ts_field="${_ts_rest%"$_ts_sep"}"
|
|
83
|
+
case "$_ts_field" in *"$_ts_sep"*) ;; *) _ts_rest="$_ts_field" ;; esac
|
|
84
|
+
;;
|
|
85
|
+
esac
|
|
86
|
+
printf -v "$1" '%s' "$_ts_rest" || return 2
|
|
87
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
--interactive=json 机器可读交互协议(sema cloud deploy 渲染用)
|
|
2
|
+
--yes 全默认无人值守(与 -f 组合)
|
|
3
|
+
-f FILE site 配置(env 形式;machines.yaml=固定形状 mini-parser)
|
|
4
|
+
--project=NAME compose project 名(默认 sema;并行试验用)。也是工作目录 ~/.sema-up/<名> 与自动数据根
|
|
5
|
+
<盘>/sema-data/<名> 的一段 ⇒ 只收小写字母 / 数字 / - / _,首字符是字母或数字
|
|
6
|
+
--data-root=DIR 数据卷 bind 到这条目录(缺省:多盘机自动选大盘 <盘>/sema-data/<project>);首装落定不漂移,
|
|
7
|
+
一条数据根只归一个项目(根里的 .sema-up-project 标记,别的项目的根一律拒)
|
|
8
|
+
--dry-run 只打印将执行计划(不写 .env、不起任何容器)
|
|
9
|
+
--port=N 服务端口(默认 8090);--pg-port/--minio-port/--minio-console-port 同理(端口旗只收 1–65535 的整数)
|
|
10
|
+
--gateway=URL --model=ID --model-key=K 模型面(带 agent 的档必需)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
用法: sema-up.sh [选项]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
--registry=true|false 配置中心网站(默认 true;local-plus 默认 false;只收这两个词)
|
|
2
|
+
--registry-image=REF sema-registry 镜像(registry=true 必需,可 -f 配置 SEMA_REGISTRY_IMAGE)
|
|
3
|
+
--git=MODE none(默认)|provision(一键自建 Gitea)|connect(接已有 git)
|
|
4
|
+
--git-url=URL --git-token=T git=connect 的已有服务(Gitea/GitHub/任意三方 git;自动识别,证书不校验)
|
|
5
|
+
--pg-url=URL 外接第三方 PG(postgres://user:pass@host:port/db;连不上会先检,不部署本地 PG)
|
|
6
|
+
--s3-endpoint=URL --s3-access-key=K --s3-secret-key=S 外接第三方 S3(兼容协议即可;不部署本地 MinIO)
|
|
7
|
+
--git-http-port=N --git-ssh-port=N 自建 Gitea 端口(默认 3300/2222)
|
|
8
|
+
--gitea-image=REF 自建 Gitea 镜像(默认 gitea/gitea:1.24)
|
|
9
|
+
--pg-host=H --pg-password=P --minio-endpoint=URL --minio-password=P local-plus 远端数据面
|
|
10
|
+
--kube=MODE full-cluster 单机两态:existing(已有 kubeconfig)|k3s(本机装 k3s)
|
|
11
|
+
--kubeconfig=PATH --kube=existing 的 kubeconfig(缺省 $KUBECONFIG 或 ~/.kube/config)
|
|
12
|
+
--teardown 卸载本 project(数据卷保留;--teardown-volumes 连卷删)
|
|
13
|
+
--skip-preflight 跳过预检(不建议)
|