@sema-agent/server 1.185.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/LICENSE +102 -0
- package/README.md +207 -0
- package/deploy/sema-up/README.md +145 -0
- package/deploy/sema-up/chart/Chart.yaml +11 -0
- package/deploy/sema-up/chart/templates/gitea.yaml +63 -0
- package/deploy/sema-up/chart/templates/minio.yaml +62 -0
- package/deploy/sema-up/chart/templates/namespace-sandbox.yaml +9 -0
- package/deploy/sema-up/chart/templates/pg-cluster.yaml +57 -0
- package/deploy/sema-up/chart/templates/registry.yaml +88 -0
- package/deploy/sema-up/chart/templates/sandbox-rbac.yaml +45 -0
- package/deploy/sema-up/chart/templates/server-v4pro.yaml +76 -0
- package/deploy/sema-up/chart/templates/server.yaml +88 -0
- package/deploy/sema-up/chart/values-full-single.yaml +9 -0
- package/deploy/sema-up/chart/values.yaml +100 -0
- package/deploy/sema-up/cluster-up.sh +432 -0
- package/deploy/sema-up/kube-up.sh +377 -0
- package/deploy/sema-up/lib/parse-machines.py +117 -0
- package/deploy/sema-up/machines.example.yaml +53 -0
- package/deploy/sema-up/preflight.sh +168 -0
- package/deploy/sema-up/sema-up.sh +758 -0
- package/deploy/sema-up/smoke.sh +100 -0
- package/deploy/sema-up/stack/compose.dataroot.yaml +16 -0
- package/deploy/sema-up/stack/compose.yaml +155 -0
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +189 -0
- package/dist/approval.d.ts +27 -0
- package/dist/approval.d.ts.map +1 -0
- package/dist/approval.js +127 -0
- package/dist/approval.js.map +1 -0
- package/dist/audit.d.ts +29 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +95 -0
- package/dist/audit.js.map +1 -0
- package/dist/auth-bridge.d.ts +29 -0
- package/dist/auth-bridge.d.ts.map +1 -0
- package/dist/auth-bridge.js +145 -0
- package/dist/auth-bridge.js.map +1 -0
- package/dist/bake-runner/main.d.ts +20 -0
- package/dist/bake-runner/main.d.ts.map +1 -0
- package/dist/bake-runner/main.js +216 -0
- package/dist/bake-runner/main.js.map +1 -0
- package/dist/bake-runner/protocol.d.ts +49 -0
- package/dist/bake-runner/protocol.d.ts.map +1 -0
- package/dist/bake-runner/protocol.js +86 -0
- package/dist/bake-runner/protocol.js.map +1 -0
- package/dist/bake-runner/runner.d.ts +86 -0
- package/dist/bake-runner/runner.d.ts.map +1 -0
- package/dist/bake-runner/runner.js +228 -0
- package/dist/bake-runner/runner.js.map +1 -0
- package/dist/bench/l8/artifact.d.ts +62 -0
- package/dist/bench/l8/artifact.d.ts.map +1 -0
- package/dist/bench/l8/artifact.js +129 -0
- package/dist/bench/l8/artifact.js.map +1 -0
- package/dist/bench/l8/escape.d.ts +18 -0
- package/dist/bench/l8/escape.d.ts.map +1 -0
- package/dist/bench/l8/escape.js +9 -0
- package/dist/bench/l8/escape.js.map +1 -0
- package/dist/bench/l8/index.d.ts +5 -0
- package/dist/bench/l8/index.d.ts.map +1 -0
- package/dist/bench/l8/index.js +5 -0
- package/dist/bench/l8/index.js.map +1 -0
- package/dist/bench/l8/probes.d.ts +75 -0
- package/dist/bench/l8/probes.d.ts.map +1 -0
- package/dist/bench/l8/probes.js +178 -0
- package/dist/bench/l8/probes.js.map +1 -0
- package/dist/bench/l8/run-probes.d.ts +21 -0
- package/dist/bench/l8/run-probes.d.ts.map +1 -0
- package/dist/bench/l8/run-probes.js +130 -0
- package/dist/bench/l8/run-probes.js.map +1 -0
- package/dist/bench/s1/arms.d.ts +84 -0
- package/dist/bench/s1/arms.d.ts.map +1 -0
- package/dist/bench/s1/arms.js +329 -0
- package/dist/bench/s1/arms.js.map +1 -0
- package/dist/bench/s1/live-deps.d.ts +25 -0
- package/dist/bench/s1/live-deps.d.ts.map +1 -0
- package/dist/bench/s1/live-deps.js +449 -0
- package/dist/bench/s1/live-deps.js.map +1 -0
- package/dist/bench/s1/oracle.d.ts +34 -0
- package/dist/bench/s1/oracle.d.ts.map +1 -0
- package/dist/bench/s1/oracle.js +29 -0
- package/dist/bench/s1/oracle.js.map +1 -0
- package/dist/bench/s1/repair-oracle-adapter.d.ts +9 -0
- package/dist/bench/s1/repair-oracle-adapter.d.ts.map +1 -0
- package/dist/bench/s1/repair-oracle-adapter.js +27 -0
- package/dist/bench/s1/repair-oracle-adapter.js.map +1 -0
- package/dist/bench/s1/reviewer.d.ts +31 -0
- package/dist/bench/s1/reviewer.d.ts.map +1 -0
- package/dist/bench/s1/reviewer.js +26 -0
- package/dist/bench/s1/reviewer.js.map +1 -0
- package/dist/bench/s1/row.d.ts +29 -0
- package/dist/bench/s1/row.d.ts.map +1 -0
- package/dist/bench/s1/row.js +55 -0
- package/dist/bench/s1/row.js.map +1 -0
- package/dist/bench/s1/run-firm.d.ts +49 -0
- package/dist/bench/s1/run-firm.d.ts.map +1 -0
- package/dist/bench/s1/run-firm.js +291 -0
- package/dist/bench/s1/run-firm.js.map +1 -0
- package/dist/bench/s1/runner-ctx.d.ts +44 -0
- package/dist/bench/s1/runner-ctx.d.ts.map +1 -0
- package/dist/bench/s1/runner-ctx.js +59 -0
- package/dist/bench/s1/runner-ctx.js.map +1 -0
- package/dist/bench/s1/tasks.d.ts +48 -0
- package/dist/bench/s1/tasks.d.ts.map +1 -0
- package/dist/bench/s1/tasks.js +194 -0
- package/dist/bench/s1/tasks.js.map +1 -0
- package/dist/boot-reclaim.d.ts +10 -0
- package/dist/boot-reclaim.d.ts.map +1 -0
- package/dist/boot-reclaim.js +13 -0
- package/dist/boot-reclaim.js.map +1 -0
- package/dist/brain.d.ts +8 -0
- package/dist/brain.d.ts.map +1 -0
- package/dist/brain.js +83 -0
- package/dist/brain.js.map +1 -0
- package/dist/budget.d.ts +25 -0
- package/dist/budget.d.ts.map +1 -0
- package/dist/budget.js +107 -0
- package/dist/budget.js.map +1 -0
- package/dist/capabilities/builtin-tools.d.ts +3 -0
- package/dist/capabilities/builtin-tools.d.ts.map +1 -0
- package/dist/capabilities/builtin-tools.js +11 -0
- package/dist/capabilities/builtin-tools.js.map +1 -0
- package/dist/capabilities/code-review-council.d.ts +21 -0
- package/dist/capabilities/code-review-council.d.ts.map +1 -0
- package/dist/capabilities/code-review-council.js +113 -0
- package/dist/capabilities/code-review-council.js.map +1 -0
- package/dist/capabilities/collab-wire.d.ts +34 -0
- package/dist/capabilities/collab-wire.d.ts.map +1 -0
- package/dist/capabilities/collab-wire.js +2 -0
- package/dist/capabilities/collab-wire.js.map +1 -0
- package/dist/capabilities/collab-workflows.d.ts +40 -0
- package/dist/capabilities/collab-workflows.d.ts.map +1 -0
- package/dist/capabilities/collab-workflows.js +90 -0
- package/dist/capabilities/collab-workflows.js.map +1 -0
- package/dist/capabilities/oa-tools.d.ts +9 -0
- package/dist/capabilities/oa-tools.d.ts.map +1 -0
- package/dist/capabilities/oa-tools.js +44 -0
- package/dist/capabilities/oa-tools.js.map +1 -0
- package/dist/capabilities/prompt.d.ts +3 -0
- package/dist/capabilities/prompt.d.ts.map +1 -0
- package/dist/capabilities/prompt.js +6 -0
- package/dist/capabilities/prompt.js.map +1 -0
- package/dist/capabilities/prompts/code-review.d.ts +11 -0
- package/dist/capabilities/prompts/code-review.d.ts.map +1 -0
- package/dist/capabilities/prompts/code-review.js +39 -0
- package/dist/capabilities/prompts/code-review.js.map +1 -0
- package/dist/capabilities/prompts/identity.d.ts +2 -0
- package/dist/capabilities/prompts/identity.d.ts.map +1 -0
- package/dist/capabilities/prompts/identity.js +6 -0
- package/dist/capabilities/prompts/identity.js.map +1 -0
- package/dist/capabilities/prompts/team.d.ts +6 -0
- package/dist/capabilities/prompts/team.d.ts.map +1 -0
- package/dist/capabilities/prompts/team.js +6 -0
- package/dist/capabilities/prompts/team.js.map +1 -0
- package/dist/capabilities/repo-tools.d.ts +19 -0
- package/dist/capabilities/repo-tools.d.ts.map +1 -0
- package/dist/capabilities/repo-tools.js +98 -0
- package/dist/capabilities/repo-tools.js.map +1 -0
- package/dist/capabilities/scenarios.d.ts +72 -0
- package/dist/capabilities/scenarios.d.ts.map +1 -0
- package/dist/capabilities/scenarios.js +241 -0
- package/dist/capabilities/scenarios.js.map +1 -0
- package/dist/capabilities/select-environment-tool.d.ts +22 -0
- package/dist/capabilities/select-environment-tool.d.ts.map +1 -0
- package/dist/capabilities/select-environment-tool.js +86 -0
- package/dist/capabilities/select-environment-tool.js.map +1 -0
- package/dist/capabilities/skills.d.ts +12 -0
- package/dist/capabilities/skills.d.ts.map +1 -0
- package/dist/capabilities/skills.js +50 -0
- package/dist/capabilities/skills.js.map +1 -0
- package/dist/capabilities/team.d.ts +31 -0
- package/dist/capabilities/team.d.ts.map +1 -0
- package/dist/capabilities/team.js +66 -0
- package/dist/capabilities/team.js.map +1 -0
- package/dist/config-provider.d.ts +47 -0
- package/dist/config-provider.d.ts.map +1 -0
- package/dist/config-provider.js +156 -0
- package/dist/config-provider.js.map +1 -0
- package/dist/config.d.ts +272 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +605 -0
- package/dist/config.js.map +1 -0
- package/dist/degenerate-instrument.d.ts +17 -0
- package/dist/degenerate-instrument.d.ts.map +1 -0
- package/dist/degenerate-instrument.js +113 -0
- package/dist/degenerate-instrument.js.map +1 -0
- package/dist/elicitation.d.ts +47 -0
- package/dist/elicitation.d.ts.map +1 -0
- package/dist/elicitation.js +151 -0
- package/dist/elicitation.js.map +1 -0
- package/dist/env-facts.d.ts +18 -0
- package/dist/env-facts.d.ts.map +1 -0
- package/dist/env-facts.js +26 -0
- package/dist/env-facts.js.map +1 -0
- package/dist/finance/cost-taxonomy.d.ts +34 -0
- package/dist/finance/cost-taxonomy.d.ts.map +1 -0
- package/dist/finance/cost-taxonomy.js +26 -0
- package/dist/finance/cost-taxonomy.js.map +1 -0
- package/dist/fleet/fleet-bus.d.ts +137 -0
- package/dist/fleet/fleet-bus.d.ts.map +1 -0
- package/dist/fleet/fleet-bus.js +249 -0
- package/dist/fleet/fleet-bus.js.map +1 -0
- package/dist/fleet-client.d.ts +50 -0
- package/dist/fleet-client.d.ts.map +1 -0
- package/dist/fleet-client.js +150 -0
- package/dist/fleet-client.js.map +1 -0
- package/dist/fleet-lease.d.ts +76 -0
- package/dist/fleet-lease.d.ts.map +1 -0
- package/dist/fleet-lease.js +124 -0
- package/dist/fleet-lease.js.map +1 -0
- package/dist/hooks/hook-runner.d.ts +41 -0
- package/dist/hooks/hook-runner.d.ts.map +1 -0
- package/dist/hooks/hook-runner.js +975 -0
- package/dist/hooks/hook-runner.js.map +1 -0
- package/dist/http/idempotency.d.ts +12 -0
- package/dist/http/idempotency.d.ts.map +1 -0
- package/dist/http/idempotency.js +49 -0
- package/dist/http/idempotency.js.map +1 -0
- package/dist/http/server.d.ts +185 -0
- package/dist/http/server.d.ts.map +1 -0
- package/dist/http/server.js +4845 -0
- package/dist/http/server.js.map +1 -0
- package/dist/http/wire-gate.d.ts +3 -0
- package/dist/http/wire-gate.d.ts.map +1 -0
- package/dist/http/wire-gate.js +6 -0
- package/dist/http/wire-gate.js.map +1 -0
- package/dist/images/bake-validate.d.ts +41 -0
- package/dist/images/bake-validate.d.ts.map +1 -0
- package/dist/images/bake-validate.js +183 -0
- package/dist/images/bake-validate.js.map +1 -0
- package/dist/images/manifest.d.ts +36 -0
- package/dist/images/manifest.d.ts.map +1 -0
- package/dist/images/manifest.js +69 -0
- package/dist/images/manifest.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/key-resolver.d.ts +5 -0
- package/dist/key-resolver.d.ts.map +1 -0
- package/dist/key-resolver.js +15 -0
- package/dist/key-resolver.js.map +1 -0
- package/dist/leader/diffout.d.ts +24 -0
- package/dist/leader/diffout.d.ts.map +1 -0
- package/dist/leader/diffout.js +54 -0
- package/dist/leader/diffout.js.map +1 -0
- package/dist/leader/diffup.d.ts +14 -0
- package/dist/leader/diffup.d.ts.map +1 -0
- package/dist/leader/diffup.js +81 -0
- package/dist/leader/diffup.js.map +1 -0
- package/dist/leader/endpoint.d.ts +30 -0
- package/dist/leader/endpoint.d.ts.map +1 -0
- package/dist/leader/endpoint.js +76 -0
- package/dist/leader/endpoint.js.map +1 -0
- package/dist/leader/fanout.d.ts +46 -0
- package/dist/leader/fanout.d.ts.map +1 -0
- package/dist/leader/fanout.js +109 -0
- package/dist/leader/fanout.js.map +1 -0
- package/dist/leader/grader-env-factory.d.ts +36 -0
- package/dist/leader/grader-env-factory.d.ts.map +1 -0
- package/dist/leader/grader-env-factory.js +73 -0
- package/dist/leader/grader-env-factory.js.map +1 -0
- package/dist/leader/leader.d.ts +102 -0
- package/dist/leader/leader.d.ts.map +1 -0
- package/dist/leader/leader.js +354 -0
- package/dist/leader/leader.js.map +1 -0
- package/dist/leader/merge.d.ts +109 -0
- package/dist/leader/merge.d.ts.map +1 -0
- package/dist/leader/merge.js +184 -0
- package/dist/leader/merge.js.map +1 -0
- package/dist/leader/planner.d.ts +26 -0
- package/dist/leader/planner.d.ts.map +1 -0
- package/dist/leader/planner.js +137 -0
- package/dist/leader/planner.js.map +1 -0
- package/dist/leader/repair-oracle.d.ts +34 -0
- package/dist/leader/repair-oracle.d.ts.map +1 -0
- package/dist/leader/repair-oracle.js +83 -0
- package/dist/leader/repair-oracle.js.map +1 -0
- package/dist/leader/repair-wire.d.ts +49 -0
- package/dist/leader/repair-wire.d.ts.map +1 -0
- package/dist/leader/repair-wire.js +90 -0
- package/dist/leader/repair-wire.js.map +1 -0
- package/dist/leader/wire.d.ts +66 -0
- package/dist/leader/wire.d.ts.map +1 -0
- package/dist/leader/wire.js +452 -0
- package/dist/leader/wire.js.map +1 -0
- package/dist/lsp/e2b-bridge.d.ts +8 -0
- package/dist/lsp/e2b-bridge.d.ts.map +1 -0
- package/dist/lsp/e2b-bridge.js +71 -0
- package/dist/lsp/e2b-bridge.js.map +1 -0
- package/dist/lsp/e2b-manager.d.ts +16 -0
- package/dist/lsp/e2b-manager.d.ts.map +1 -0
- package/dist/lsp/e2b-manager.js +49 -0
- package/dist/lsp/e2b-manager.js.map +1 -0
- package/dist/lsp/lsp-frames.d.ts +2 -0
- package/dist/lsp/lsp-frames.d.ts.map +1 -0
- package/dist/lsp/lsp-frames.js +25 -0
- package/dist/lsp/lsp-frames.js.map +1 -0
- package/dist/lsp/manager.d.ts +41 -0
- package/dist/lsp/manager.d.ts.map +1 -0
- package/dist/lsp/manager.js +84 -0
- package/dist/lsp/manager.js.map +1 -0
- package/dist/lsp/types.d.ts +2 -0
- package/dist/lsp/types.d.ts.map +1 -0
- package/dist/lsp/types.js +2 -0
- package/dist/lsp/types.js.map +1 -0
- package/dist/lsp/ws-transport.d.ts +28 -0
- package/dist/lsp/ws-transport.d.ts.map +1 -0
- package/dist/lsp/ws-transport.js +209 -0
- package/dist/lsp/ws-transport.js.map +1 -0
- package/dist/lsp-evict.d.ts +2 -0
- package/dist/lsp-evict.d.ts.map +1 -0
- package/dist/lsp-evict.js +14 -0
- package/dist/lsp-evict.js.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +1526 -0
- package/dist/main.js.map +1 -0
- package/dist/memory-export.d.ts +3 -0
- package/dist/memory-export.d.ts.map +1 -0
- package/dist/memory-export.js +8 -0
- package/dist/memory-export.js.map +1 -0
- package/dist/memory-sync-client.d.ts +29 -0
- package/dist/memory-sync-client.d.ts.map +1 -0
- package/dist/memory-sync-client.js +133 -0
- package/dist/memory-sync-client.js.map +1 -0
- package/dist/memory-sync.d.ts +41 -0
- package/dist/memory-sync.d.ts.map +1 -0
- package/dist/memory-sync.js +183 -0
- package/dist/memory-sync.js.map +1 -0
- package/dist/model-select.d.ts +8 -0
- package/dist/model-select.d.ts.map +1 -0
- package/dist/model-select.js +12 -0
- package/dist/model-select.js.map +1 -0
- package/dist/observability/cost-quota.d.ts +21 -0
- package/dist/observability/cost-quota.d.ts.map +1 -0
- package/dist/observability/cost-quota.js +42 -0
- package/dist/observability/cost-quota.js.map +1 -0
- package/dist/observability/logger.d.ts +9 -0
- package/dist/observability/logger.d.ts.map +1 -0
- package/dist/observability/logger.js +35 -0
- package/dist/observability/logger.js.map +1 -0
- package/dist/observability/metrics.d.ts +76 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +263 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/otel-exporter.d.ts +37 -0
- package/dist/observability/otel-exporter.d.ts.map +1 -0
- package/dist/observability/otel-exporter.js +95 -0
- package/dist/observability/otel-exporter.js.map +1 -0
- package/dist/observability/principal-context.d.ts +5 -0
- package/dist/observability/principal-context.d.ts.map +1 -0
- package/dist/observability/principal-context.js +9 -0
- package/dist/observability/principal-context.js.map +1 -0
- package/dist/observability/rate-limit.d.ts +18 -0
- package/dist/observability/rate-limit.d.ts.map +1 -0
- package/dist/observability/rate-limit.js +30 -0
- package/dist/observability/rate-limit.js.map +1 -0
- package/dist/observability/tool-trace.d.ts +6 -0
- package/dist/observability/tool-trace.d.ts.map +1 -0
- package/dist/observability/tool-trace.js +73 -0
- package/dist/observability/tool-trace.js.map +1 -0
- package/dist/orchestration/hardened-vm-runner.d.ts +26 -0
- package/dist/orchestration/hardened-vm-runner.d.ts.map +1 -0
- package/dist/orchestration/hardened-vm-runner.js +217 -0
- package/dist/orchestration/hardened-vm-runner.js.map +1 -0
- package/dist/orchestration/hardened-vm-worker-runner.d.ts +4 -0
- package/dist/orchestration/hardened-vm-worker-runner.d.ts.map +1 -0
- package/dist/orchestration/hardened-vm-worker-runner.js +79 -0
- package/dist/orchestration/hardened-vm-worker-runner.js.map +1 -0
- package/dist/orchestration/hardened-vm-worker.d.ts +2 -0
- package/dist/orchestration/hardened-vm-worker.d.ts.map +1 -0
- package/dist/orchestration/hardened-vm-worker.js +80 -0
- package/dist/orchestration/hardened-vm-worker.js.map +1 -0
- package/dist/orchestration/subagent-steer.d.ts +12 -0
- package/dist/orchestration/subagent-steer.d.ts.map +1 -0
- package/dist/orchestration/subagent-steer.js +45 -0
- package/dist/orchestration/subagent-steer.js.map +1 -0
- package/dist/orchestration/workflow-agent-steer.d.ts +14 -0
- package/dist/orchestration/workflow-agent-steer.d.ts.map +1 -0
- package/dist/orchestration/workflow-agent-steer.js +41 -0
- package/dist/orchestration/workflow-agent-steer.js.map +1 -0
- package/dist/orchestration/workflow-completion-inbox.d.ts +101 -0
- package/dist/orchestration/workflow-completion-inbox.d.ts.map +1 -0
- package/dist/orchestration/workflow-completion-inbox.js +327 -0
- package/dist/orchestration/workflow-completion-inbox.js.map +1 -0
- package/dist/orchestration/workflow-notify-journal.d.ts +120 -0
- package/dist/orchestration/workflow-notify-journal.d.ts.map +1 -0
- package/dist/orchestration/workflow-notify-journal.js +297 -0
- package/dist/orchestration/workflow-notify-journal.js.map +1 -0
- package/dist/per-task-image.d.ts +27 -0
- package/dist/per-task-image.d.ts.map +1 -0
- package/dist/per-task-image.js +37 -0
- package/dist/per-task-image.js.map +1 -0
- package/dist/plan-cache-probe.d.ts +21 -0
- package/dist/plan-cache-probe.d.ts.map +1 -0
- package/dist/plan-cache-probe.js +79 -0
- package/dist/plan-cache-probe.js.map +1 -0
- package/dist/plugins/approval-exemption-store.d.ts +56 -0
- package/dist/plugins/approval-exemption-store.d.ts.map +1 -0
- package/dist/plugins/approval-exemption-store.js +216 -0
- package/dist/plugins/approval-exemption-store.js.map +1 -0
- package/dist/plugins/background-shell-support.d.ts +64 -0
- package/dist/plugins/background-shell-support.d.ts.map +1 -0
- package/dist/plugins/background-shell-support.js +235 -0
- package/dist/plugins/background-shell-support.js.map +1 -0
- package/dist/plugins/blob-backend.d.ts +44 -0
- package/dist/plugins/blob-backend.d.ts.map +1 -0
- package/dist/plugins/blob-backend.js +188 -0
- package/dist/plugins/blob-backend.js.map +1 -0
- package/dist/plugins/caching-session-store.d.ts +51 -0
- package/dist/plugins/caching-session-store.d.ts.map +1 -0
- package/dist/plugins/caching-session-store.js +142 -0
- package/dist/plugins/caching-session-store.js.map +1 -0
- package/dist/plugins/file-outcome-sink.d.ts +20 -0
- package/dist/plugins/file-outcome-sink.d.ts.map +1 -0
- package/dist/plugins/file-outcome-sink.js +14 -0
- package/dist/plugins/file-outcome-sink.js.map +1 -0
- package/dist/plugins/file-resume-anchor-store.d.ts +19 -0
- package/dist/plugins/file-resume-anchor-store.d.ts.map +1 -0
- package/dist/plugins/file-resume-anchor-store.js +103 -0
- package/dist/plugins/file-resume-anchor-store.js.map +1 -0
- package/dist/plugins/file-run-store.d.ts +95 -0
- package/dist/plugins/file-run-store.d.ts.map +1 -0
- package/dist/plugins/file-run-store.js +446 -0
- package/dist/plugins/file-run-store.js.map +1 -0
- package/dist/plugins/file-workflow-journal-store.d.ts +2 -0
- package/dist/plugins/file-workflow-journal-store.d.ts.map +1 -0
- package/dist/plugins/file-workflow-journal-store.js +2 -0
- package/dist/plugins/file-workflow-journal-store.js.map +1 -0
- package/dist/plugins/host-platform.d.ts +19 -0
- package/dist/plugins/host-platform.d.ts.map +1 -0
- package/dist/plugins/host-platform.js +71 -0
- package/dist/plugins/host-platform.js.map +1 -0
- package/dist/plugins/local-checkpoint-store.d.ts +41 -0
- package/dist/plugins/local-checkpoint-store.d.ts.map +1 -0
- package/dist/plugins/local-checkpoint-store.js +217 -0
- package/dist/plugins/local-checkpoint-store.js.map +1 -0
- package/dist/plugins/local-session-store.d.ts +69 -0
- package/dist/plugins/local-session-store.d.ts.map +1 -0
- package/dist/plugins/local-session-store.js +431 -0
- package/dist/plugins/local-session-store.js.map +1 -0
- package/dist/plugins/memory-engine-pg.d.ts +47 -0
- package/dist/plugins/memory-engine-pg.d.ts.map +1 -0
- package/dist/plugins/memory-engine-pg.js +306 -0
- package/dist/plugins/memory-engine-pg.js.map +1 -0
- package/dist/plugins/memory-engine-tidb.d.ts +40 -0
- package/dist/plugins/memory-engine-tidb.d.ts.map +1 -0
- package/dist/plugins/memory-engine-tidb.js +296 -0
- package/dist/plugins/memory-engine-tidb.js.map +1 -0
- package/dist/plugins/memory-engine-vector-util.d.ts +2 -0
- package/dist/plugins/memory-engine-vector-util.d.ts.map +1 -0
- package/dist/plugins/memory-engine-vector-util.js +2 -0
- package/dist/plugins/memory-engine-vector-util.js.map +1 -0
- package/dist/plugins/memory-resume-anchor-store.d.ts +12 -0
- package/dist/plugins/memory-resume-anchor-store.d.ts.map +1 -0
- package/dist/plugins/memory-resume-anchor-store.js +31 -0
- package/dist/plugins/memory-resume-anchor-store.js.map +1 -0
- package/dist/plugins/memory-run-store.d.ts +75 -0
- package/dist/plugins/memory-run-store.d.ts.map +1 -0
- package/dist/plugins/memory-run-store.js +267 -0
- package/dist/plugins/memory-run-store.js.map +1 -0
- package/dist/plugins/memory-sync-store-pg.d.ts +78 -0
- package/dist/plugins/memory-sync-store-pg.d.ts.map +1 -0
- package/dist/plugins/memory-sync-store-pg.js +152 -0
- package/dist/plugins/memory-sync-store-pg.js.map +1 -0
- package/dist/plugins/memory-sync-store-tidb.d.ts +32 -0
- package/dist/plugins/memory-sync-store-tidb.d.ts.map +1 -0
- package/dist/plugins/memory-sync-store-tidb.js +146 -0
- package/dist/plugins/memory-sync-store-tidb.js.map +1 -0
- package/dist/plugins/pg-approval-store.d.ts +28 -0
- package/dist/plugins/pg-approval-store.d.ts.map +1 -0
- package/dist/plugins/pg-approval-store.js +107 -0
- package/dist/plugins/pg-approval-store.js.map +1 -0
- package/dist/plugins/pg-breaker-state.d.ts +20 -0
- package/dist/plugins/pg-breaker-state.d.ts.map +1 -0
- package/dist/plugins/pg-breaker-state.js +89 -0
- package/dist/plugins/pg-breaker-state.js.map +1 -0
- package/dist/plugins/pg-checkpoint-store.d.ts +34 -0
- package/dist/plugins/pg-checkpoint-store.d.ts.map +1 -0
- package/dist/plugins/pg-checkpoint-store.js +193 -0
- package/dist/plugins/pg-checkpoint-store.js.map +1 -0
- package/dist/plugins/pg-cost-quota.d.ts +18 -0
- package/dist/plugins/pg-cost-quota.d.ts.map +1 -0
- package/dist/plugins/pg-cost-quota.js +189 -0
- package/dist/plugins/pg-cost-quota.js.map +1 -0
- package/dist/plugins/pg-file-snapshot-store.d.ts +26 -0
- package/dist/plugins/pg-file-snapshot-store.d.ts.map +1 -0
- package/dist/plugins/pg-file-snapshot-store.js +181 -0
- package/dist/plugins/pg-file-snapshot-store.js.map +1 -0
- package/dist/plugins/pg-image-bake.d.ts +42 -0
- package/dist/plugins/pg-image-bake.d.ts.map +1 -0
- package/dist/plugins/pg-image-bake.js +471 -0
- package/dist/plugins/pg-image-bake.js.map +1 -0
- package/dist/plugins/pg-image-index.d.ts +23 -0
- package/dist/plugins/pg-image-index.d.ts.map +1 -0
- package/dist/plugins/pg-image-index.js +252 -0
- package/dist/plugins/pg-image-index.js.map +1 -0
- package/dist/plugins/pg-outcome-ledger.d.ts +23 -0
- package/dist/plugins/pg-outcome-ledger.d.ts.map +1 -0
- package/dist/plugins/pg-outcome-ledger.js +102 -0
- package/dist/plugins/pg-outcome-ledger.js.map +1 -0
- package/dist/plugins/pg-pool.d.ts +7 -0
- package/dist/plugins/pg-pool.d.ts.map +1 -0
- package/dist/plugins/pg-pool.js +233 -0
- package/dist/plugins/pg-pool.js.map +1 -0
- package/dist/plugins/pg-rate-limiter.d.ts +49 -0
- package/dist/plugins/pg-rate-limiter.d.ts.map +1 -0
- package/dist/plugins/pg-rate-limiter.js +193 -0
- package/dist/plugins/pg-rate-limiter.js.map +1 -0
- package/dist/plugins/pg-resume-anchor-store.d.ts +14 -0
- package/dist/plugins/pg-resume-anchor-store.d.ts.map +1 -0
- package/dist/plugins/pg-resume-anchor-store.js +23 -0
- package/dist/plugins/pg-resume-anchor-store.js.map +1 -0
- package/dist/plugins/pg-run-store.d.ts +76 -0
- package/dist/plugins/pg-run-store.d.ts.map +1 -0
- package/dist/plugins/pg-run-store.js +301 -0
- package/dist/plugins/pg-run-store.js.map +1 -0
- package/dist/plugins/pg-session-policy-store.d.ts +12 -0
- package/dist/plugins/pg-session-policy-store.d.ts.map +1 -0
- package/dist/plugins/pg-session-policy-store.js +88 -0
- package/dist/plugins/pg-session-policy-store.js.map +1 -0
- package/dist/plugins/pg-session-storage.d.ts +59 -0
- package/dist/plugins/pg-session-storage.d.ts.map +1 -0
- package/dist/plugins/pg-session-storage.js +484 -0
- package/dist/plugins/pg-session-storage.js.map +1 -0
- package/dist/plugins/pg-session-store.d.ts +2 -0
- package/dist/plugins/pg-session-store.d.ts.map +1 -0
- package/dist/plugins/pg-session-store.js +2 -0
- package/dist/plugins/pg-session-store.js.map +1 -0
- package/dist/plugins/pg-tool-result-store.d.ts +16 -0
- package/dist/plugins/pg-tool-result-store.d.ts.map +1 -0
- package/dist/plugins/pg-tool-result-store.js +52 -0
- package/dist/plugins/pg-tool-result-store.js.map +1 -0
- package/dist/plugins/pg-workflow-journal-store.d.ts +11 -0
- package/dist/plugins/pg-workflow-journal-store.d.ts.map +1 -0
- package/dist/plugins/pg-workflow-journal-store.js +28 -0
- package/dist/plugins/pg-workflow-journal-store.js.map +1 -0
- package/dist/plugins/pg-workflow-run-store.d.ts +55 -0
- package/dist/plugins/pg-workflow-run-store.d.ts.map +1 -0
- package/dist/plugins/pg-workflow-run-store.js +216 -0
- package/dist/plugins/pg-workflow-run-store.js.map +1 -0
- package/dist/plugins/remote-env-adb.d.ts +119 -0
- package/dist/plugins/remote-env-adb.d.ts.map +1 -0
- package/dist/plugins/remote-env-adb.js +502 -0
- package/dist/plugins/remote-env-adb.js.map +1 -0
- package/dist/plugins/remote-env-e2b.d.ts +162 -0
- package/dist/plugins/remote-env-e2b.d.ts.map +1 -0
- package/dist/plugins/remote-env-e2b.js +931 -0
- package/dist/plugins/remote-env-e2b.js.map +1 -0
- package/dist/plugins/remote-env-host.d.ts +141 -0
- package/dist/plugins/remote-env-host.d.ts.map +1 -0
- package/dist/plugins/remote-env-host.js +868 -0
- package/dist/plugins/remote-env-host.js.map +1 -0
- package/dist/plugins/remote-env-k8s.d.ts +209 -0
- package/dist/plugins/remote-env-k8s.d.ts.map +1 -0
- package/dist/plugins/remote-env-k8s.js +1206 -0
- package/dist/plugins/remote-env-k8s.js.map +1 -0
- package/dist/plugins/remote-env-local-docker.d.ts +124 -0
- package/dist/plugins/remote-env-local-docker.d.ts.map +1 -0
- package/dist/plugins/remote-env-local-docker.js +597 -0
- package/dist/plugins/remote-env-local-docker.js.map +1 -0
- package/dist/plugins/remote-env-ssh.d.ts +122 -0
- package/dist/plugins/remote-env-ssh.d.ts.map +1 -0
- package/dist/plugins/remote-env-ssh.js +511 -0
- package/dist/plugins/remote-env-ssh.js.map +1 -0
- package/dist/plugins/remote-shell.d.ts +7 -0
- package/dist/plugins/remote-shell.d.ts.map +1 -0
- package/dist/plugins/remote-shell.js +25 -0
- package/dist/plugins/remote-shell.js.map +1 -0
- package/dist/plugins/s3-presign.d.ts +13 -0
- package/dist/plugins/s3-presign.d.ts.map +1 -0
- package/dist/plugins/s3-presign.js +55 -0
- package/dist/plugins/s3-presign.js.map +1 -0
- package/dist/plugins/scheduler-support.d.ts +39 -0
- package/dist/plugins/scheduler-support.d.ts.map +1 -0
- package/dist/plugins/scheduler-support.js +141 -0
- package/dist/plugins/scheduler-support.js.map +1 -0
- package/dist/plugins/session-store.d.ts +7 -0
- package/dist/plugins/session-store.d.ts.map +1 -0
- package/dist/plugins/session-store.js +14 -0
- package/dist/plugins/session-store.js.map +1 -0
- package/dist/plugins/store-backend.d.ts +88 -0
- package/dist/plugins/store-backend.d.ts.map +1 -0
- package/dist/plugins/store-backend.js +197 -0
- package/dist/plugins/store-backend.js.map +1 -0
- package/dist/plugins/tidb-approval-store.d.ts +39 -0
- package/dist/plugins/tidb-approval-store.d.ts.map +1 -0
- package/dist/plugins/tidb-approval-store.js +81 -0
- package/dist/plugins/tidb-approval-store.js.map +1 -0
- package/dist/plugins/tidb-breaker-state.d.ts +18 -0
- package/dist/plugins/tidb-breaker-state.d.ts.map +1 -0
- package/dist/plugins/tidb-breaker-state.js +75 -0
- package/dist/plugins/tidb-breaker-state.js.map +1 -0
- package/dist/plugins/tidb-checkpoint-store.d.ts +50 -0
- package/dist/plugins/tidb-checkpoint-store.d.ts.map +1 -0
- package/dist/plugins/tidb-checkpoint-store.js +196 -0
- package/dist/plugins/tidb-checkpoint-store.js.map +1 -0
- package/dist/plugins/tidb-cost-quota.d.ts +16 -0
- package/dist/plugins/tidb-cost-quota.d.ts.map +1 -0
- package/dist/plugins/tidb-cost-quota.js +34 -0
- package/dist/plugins/tidb-cost-quota.js.map +1 -0
- package/dist/plugins/tidb-file-snapshot-store.d.ts +26 -0
- package/dist/plugins/tidb-file-snapshot-store.d.ts.map +1 -0
- package/dist/plugins/tidb-file-snapshot-store.js +183 -0
- package/dist/plugins/tidb-file-snapshot-store.js.map +1 -0
- package/dist/plugins/tidb-image-bake.d.ts +102 -0
- package/dist/plugins/tidb-image-bake.d.ts.map +1 -0
- package/dist/plugins/tidb-image-bake.js +400 -0
- package/dist/plugins/tidb-image-bake.js.map +1 -0
- package/dist/plugins/tidb-image-index.d.ts +71 -0
- package/dist/plugins/tidb-image-index.d.ts.map +1 -0
- package/dist/plugins/tidb-image-index.js +192 -0
- package/dist/plugins/tidb-image-index.js.map +1 -0
- package/dist/plugins/tidb-outcome-ledger.d.ts +58 -0
- package/dist/plugins/tidb-outcome-ledger.d.ts.map +1 -0
- package/dist/plugins/tidb-outcome-ledger.js +98 -0
- package/dist/plugins/tidb-outcome-ledger.js.map +1 -0
- package/dist/plugins/tidb-pool.d.ts +11 -0
- package/dist/plugins/tidb-pool.d.ts.map +1 -0
- package/dist/plugins/tidb-pool.js +485 -0
- package/dist/plugins/tidb-pool.js.map +1 -0
- package/dist/plugins/tidb-rate-limiter.d.ts +15 -0
- package/dist/plugins/tidb-rate-limiter.d.ts.map +1 -0
- package/dist/plugins/tidb-rate-limiter.js +34 -0
- package/dist/plugins/tidb-rate-limiter.js.map +1 -0
- package/dist/plugins/tidb-resume-anchor-store.d.ts +14 -0
- package/dist/plugins/tidb-resume-anchor-store.d.ts.map +1 -0
- package/dist/plugins/tidb-resume-anchor-store.js +23 -0
- package/dist/plugins/tidb-resume-anchor-store.js.map +1 -0
- package/dist/plugins/tidb-run-store.d.ts +107 -0
- package/dist/plugins/tidb-run-store.d.ts.map +1 -0
- package/dist/plugins/tidb-run-store.js +321 -0
- package/dist/plugins/tidb-run-store.js.map +1 -0
- package/dist/plugins/tidb-session-policy-store.d.ts +12 -0
- package/dist/plugins/tidb-session-policy-store.d.ts.map +1 -0
- package/dist/plugins/tidb-session-policy-store.js +88 -0
- package/dist/plugins/tidb-session-policy-store.js.map +1 -0
- package/dist/plugins/tidb-session-storage.d.ts +15 -0
- package/dist/plugins/tidb-session-storage.d.ts.map +1 -0
- package/dist/plugins/tidb-session-storage.js +101 -0
- package/dist/plugins/tidb-session-storage.js.map +1 -0
- package/dist/plugins/tidb-session-store.d.ts +46 -0
- package/dist/plugins/tidb-session-store.d.ts.map +1 -0
- package/dist/plugins/tidb-session-store.js +360 -0
- package/dist/plugins/tidb-session-store.js.map +1 -0
- package/dist/plugins/tidb-tool-result-store.d.ts +15 -0
- package/dist/plugins/tidb-tool-result-store.d.ts.map +1 -0
- package/dist/plugins/tidb-tool-result-store.js +41 -0
- package/dist/plugins/tidb-tool-result-store.js.map +1 -0
- package/dist/plugins/tidb-workflow-journal-store.d.ts +11 -0
- package/dist/plugins/tidb-workflow-journal-store.d.ts.map +1 -0
- package/dist/plugins/tidb-workflow-journal-store.js +28 -0
- package/dist/plugins/tidb-workflow-journal-store.js.map +1 -0
- package/dist/plugins/tidb-workflow-run-store.d.ts +61 -0
- package/dist/plugins/tidb-workflow-run-store.d.ts.map +1 -0
- package/dist/plugins/tidb-workflow-run-store.js +227 -0
- package/dist/plugins/tidb-workflow-run-store.js.map +1 -0
- package/dist/plugins/web-search.d.ts +27 -0
- package/dist/plugins/web-search.d.ts.map +1 -0
- package/dist/plugins/web-search.js +143 -0
- package/dist/plugins/web-search.js.map +1 -0
- package/dist/plugins/workflow-journal-limits.d.ts +2 -0
- package/dist/plugins/workflow-journal-limits.d.ts.map +1 -0
- package/dist/plugins/workflow-journal-limits.js +2 -0
- package/dist/plugins/workflow-journal-limits.js.map +1 -0
- package/dist/plugins/worktree-isolation.d.ts +16 -0
- package/dist/plugins/worktree-isolation.d.ts.map +1 -0
- package/dist/plugins/worktree-isolation.js +55 -0
- package/dist/plugins/worktree-isolation.js.map +1 -0
- package/dist/plugins/write-behind-counter.d.ts +43 -0
- package/dist/plugins/write-behind-counter.d.ts.map +1 -0
- package/dist/plugins/write-behind-counter.js +144 -0
- package/dist/plugins/write-behind-counter.js.map +1 -0
- package/dist/project-memory.d.ts +14 -0
- package/dist/project-memory.d.ts.map +1 -0
- package/dist/project-memory.js +96 -0
- package/dist/project-memory.js.map +1 -0
- package/dist/question.d.ts +42 -0
- package/dist/question.d.ts.map +1 -0
- package/dist/question.js +140 -0
- package/dist/question.js.map +1 -0
- package/dist/resource-suspend.d.ts +11 -0
- package/dist/resource-suspend.d.ts.map +1 -0
- package/dist/resource-suspend.js +6 -0
- package/dist/resource-suspend.js.map +1 -0
- package/dist/router/route-orchestration.d.ts +31 -0
- package/dist/router/route-orchestration.d.ts.map +1 -0
- package/dist/router/route-orchestration.js +49 -0
- package/dist/router/route-orchestration.js.map +1 -0
- package/dist/run-local.d.ts +26 -0
- package/dist/run-local.d.ts.map +1 -0
- package/dist/run-local.js +337 -0
- package/dist/run-local.js.map +1 -0
- package/dist/runs.d.ts +39 -0
- package/dist/runs.d.ts.map +1 -0
- package/dist/runs.js +392 -0
- package/dist/runs.js.map +1 -0
- package/dist/runtime-caps-resolver.d.ts +32 -0
- package/dist/runtime-caps-resolver.d.ts.map +1 -0
- package/dist/runtime-caps-resolver.js +134 -0
- package/dist/runtime-caps-resolver.js.map +1 -0
- package/dist/runtime-governance.d.ts +18 -0
- package/dist/runtime-governance.d.ts.map +1 -0
- package/dist/runtime-governance.js +103 -0
- package/dist/runtime-governance.js.map +1 -0
- package/dist/sandbox-pkg-source.d.ts +11 -0
- package/dist/sandbox-pkg-source.d.ts.map +1 -0
- package/dist/sandbox-pkg-source.js +56 -0
- package/dist/sandbox-pkg-source.js.map +1 -0
- package/dist/sealed-key.d.ts +29 -0
- package/dist/sealed-key.d.ts.map +1 -0
- package/dist/sealed-key.js +122 -0
- package/dist/sealed-key.js.map +1 -0
- package/dist/security.d.ts +153 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +292 -0
- package/dist/security.js.map +1 -0
- package/dist/sema-registry.d.ts +187 -0
- package/dist/sema-registry.d.ts.map +1 -0
- package/dist/sema-registry.js +456 -0
- package/dist/sema-registry.js.map +1 -0
- package/dist/session-sync.d.ts +96 -0
- package/dist/session-sync.d.ts.map +1 -0
- package/dist/session-sync.js +181 -0
- package/dist/session-sync.js.map +1 -0
- package/dist/session-titler.d.ts +30 -0
- package/dist/session-titler.d.ts.map +1 -0
- package/dist/session-titler.js +77 -0
- package/dist/session-titler.js.map +1 -0
- package/dist/spec-fields.d.ts +5 -0
- package/dist/spec-fields.d.ts.map +1 -0
- package/dist/spec-fields.js +43 -0
- package/dist/spec-fields.js.map +1 -0
- package/dist/task-cwd.d.ts +15 -0
- package/dist/task-cwd.d.ts.map +1 -0
- package/dist/task-cwd.js +33 -0
- package/dist/task-cwd.js.map +1 -0
- package/dist/task-mcp.d.ts +20 -0
- package/dist/task-mcp.d.ts.map +1 -0
- package/dist/task-mcp.js +93 -0
- package/dist/task-mcp.js.map +1 -0
- package/dist/task-settings.d.ts +36 -0
- package/dist/task-settings.d.ts.map +1 -0
- package/dist/task-settings.js +141 -0
- package/dist/task-settings.js.map +1 -0
- package/dist/task-workflow.d.ts +25 -0
- package/dist/task-workflow.d.ts.map +1 -0
- package/dist/task-workflow.js +43 -0
- package/dist/task-workflow.js.map +1 -0
- package/dist/trace/artifacts.d.ts +17 -0
- package/dist/trace/artifacts.d.ts.map +1 -0
- package/dist/trace/artifacts.js +65 -0
- package/dist/trace/artifacts.js.map +1 -0
- package/dist/trace/project.d.ts +170 -0
- package/dist/trace/project.d.ts.map +1 -0
- package/dist/trace/project.js +239 -0
- package/dist/trace/project.js.map +1 -0
- package/dist/trace/redact.d.ts +5 -0
- package/dist/trace/redact.d.ts.map +1 -0
- package/dist/trace/redact.js +83 -0
- package/dist/trace/redact.js.map +1 -0
- package/dist/usage-analytics.d.ts +36 -0
- package/dist/usage-analytics.d.ts.map +1 -0
- package/dist/usage-analytics.js +89 -0
- package/dist/usage-analytics.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# kube-up — sema-up 的 k8s 单机两态装配(helm chart 驱动;2026-07-12 一键补完批次)。
|
|
3
|
+
# KUBE_MODE=existing 已有 k8s(kubeconfig 指向;kind/k3d/k3s/云商托管都行)
|
|
4
|
+
# KUBE_MODE=k3s 本机现装 k3s 单机集群(Linux;需要 root/passwordless sudo)
|
|
5
|
+
# 多机 ssh 装配(machines.yaml)走 cluster-up.sh,不在本脚本。
|
|
6
|
+
# 纪律与 sema-up.sh 相同:幂等 check-then-apply;凭据只生成一次;密码不进日志/argv;
|
|
7
|
+
# 凭据经 stdin 给 helm -f -(不落远端、不进 /proc cmdline)。
|
|
8
|
+
#
|
|
9
|
+
# 输入(sema-up.sh 注入;也可单独跑):
|
|
10
|
+
# WORK(状态目录)PROJECT REGION KUBE_MODE [KUBECONFIG_PATH] [DRY_RUN]
|
|
11
|
+
# USERS REGISTRY_ENABLED GIT_MODE [GIT_URL GIT_TOKEN]
|
|
12
|
+
# SEMA_SERVER_IMAGE(必需)[SEMA_REGISTRY_IMAGE][GITEA_IMAGE]
|
|
13
|
+
# MODEL_GATEWAY_BASEURL MODEL_ID MODEL_API_KEY
|
|
14
|
+
# [NAMESPACE=sema][STORAGE_CLASS=集群默认][CNPG_VERSION]
|
|
15
|
+
set -euo pipefail
|
|
16
|
+
HERE="$(cd "$(dirname "$0")" && pwd)"
|
|
17
|
+
log() { printf '[kube-up] %s\n' "$*" >&2; }
|
|
18
|
+
die() { log "⛔ $*"; exit 1; }
|
|
19
|
+
|
|
20
|
+
: "${WORK:?WORK 未设置(状态目录,一般 ~/.sema-up/<project>)}"
|
|
21
|
+
PROJECT="${PROJECT:-sema}"
|
|
22
|
+
REGION="${REGION:-global}"
|
|
23
|
+
KUBE_MODE="${KUBE_MODE:?KUBE_MODE 未设置(existing|k3s)}"
|
|
24
|
+
DRY_RUN="${DRY_RUN:-false}"
|
|
25
|
+
USERS="${USERS:-single}"
|
|
26
|
+
REGISTRY_ENABLED="${REGISTRY_ENABLED:-true}"
|
|
27
|
+
GIT_MODE="${GIT_MODE:-none}"
|
|
28
|
+
NAMESPACE="${NAMESPACE:-sema}"
|
|
29
|
+
CNPG_VERSION="${CNPG_VERSION:-1.30.0}" # ⚠ in-tree barman 1.31 移除;升版前先迁 barman-cloud plugin
|
|
30
|
+
K3S_CHANNEL="${K3S_CHANNEL:-stable}"
|
|
31
|
+
|
|
32
|
+
# ── 0. kubeconfig / 工具解析 ─────────────────────────────────────────────────────
|
|
33
|
+
if [ "$KUBE_MODE" = "k3s" ]; then
|
|
34
|
+
[ "$(uname -s)" = "Linux" ] || die "--kube=k3s 只支持 Linux(本机装 k3s)。macOS 下一步:用 kind/k3d 起集群后 --kube=existing"
|
|
35
|
+
SUDO=""; [ "$(id -u)" != "0" ] && { sudo -n true 2>/dev/null || die "--kube=k3s 需要 root 或 passwordless sudo(装 k3s 是系统级动作)"; SUDO="sudo"; }
|
|
36
|
+
if ! $SUDO test -f /usr/local/bin/k3s || ! systemctl is-active --quiet k3s 2>/dev/null; then
|
|
37
|
+
if [ "$DRY_RUN" = "true" ]; then log "dry-run:将安装 k3s 单机($K3S_CHANNEL$([ "$REGION" = cn ] && echo ',国内镜像'))"
|
|
38
|
+
else
|
|
39
|
+
log "0/6 安装 k3s 单机($K3S_CHANNEL)"
|
|
40
|
+
MIRROR=""; [ "$REGION" = "cn" ] && MIRROR="INSTALL_K3S_MIRROR=cn "
|
|
41
|
+
curl -sfL https://get.k3s.io | env ${MIRROR}INSTALL_K3S_CHANNEL="$K3S_CHANNEL" $SUDO sh - >/dev/null \
|
|
42
|
+
|| die "k3s 安装失败。下一步:看上方安装器输出;网络不通时 --region=cn 走国内镜像"
|
|
43
|
+
fi
|
|
44
|
+
else log "0/6 k3s 已在跑,跳过安装"; fi
|
|
45
|
+
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
|
46
|
+
KUBECTL="$SUDO k3s kubectl"
|
|
47
|
+
else
|
|
48
|
+
KC="${KUBECONFIG_PATH:-${KUBECONFIG:-$HOME/.kube/config}}"
|
|
49
|
+
[ -r "$KC" ] || die "kubeconfig 不可读:$KC。下一步:--kubeconfig=<路径> 指向你的集群;没有集群可 --kube=k3s(Linux)或本机 kind create cluster"
|
|
50
|
+
export KUBECONFIG="$KC"
|
|
51
|
+
command -v kubectl >/dev/null || die "未装 kubectl。下一步:https://kubernetes.io/docs/tasks/tools/(macOS:brew install kubectl)"
|
|
52
|
+
KUBECTL="kubectl"
|
|
53
|
+
fi
|
|
54
|
+
command -v helm >/dev/null || {
|
|
55
|
+
if [ "$KUBE_MODE" = "k3s" ] && [ "$DRY_RUN" != "true" ]; then
|
|
56
|
+
log "装 helm(get-helm-3)"
|
|
57
|
+
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash >/dev/null || die "helm 安装失败"
|
|
58
|
+
else die "未装 helm。下一步:brew install helm(macOS)/ https://helm.sh/docs/intro/install/"; fi
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
# ── 1. 集群探测(可达/节点数/默认 SC/kata)────────────────────────────────────────
|
|
62
|
+
$KUBECTL get nodes >/dev/null 2>&1 || die "集群不可达(kubeconfig=$KUBECONFIG)。下一步:kubectl get nodes 手查;云商集群注意网络/凭据过期"
|
|
63
|
+
NODES=$($KUBECTL get nodes --no-headers | grep -cw Ready || true)
|
|
64
|
+
[ "$NODES" -ge 1 ] || die "没有 Ready 节点。下一步:kubectl get nodes -o wide 看节点状态"
|
|
65
|
+
|
|
66
|
+
# ── 节点容量测量+建议(建议不强求;某台确实过小才拦)────────────────────────────────
|
|
67
|
+
# allocatable 口径(比 capacity 更接近可用);盘容量 kubectl 不可见,PVC Pending 时按报错查 SC
|
|
68
|
+
NODE_CAPS=$($KUBECTL get nodes -o jsonpath='{range .items[*]}{.metadata.name}{" "}{.status.allocatable.cpu}{" "}{.status.allocatable.memory}{"\n"}{end}' 2>/dev/null)
|
|
69
|
+
while read -r n_name n_cpu n_mem; do
|
|
70
|
+
[ -z "$n_name" ] && continue
|
|
71
|
+
# cpu:"4"或"3900m"→ 毫核;memory:"8049856Ki"/"7Gi" → MB
|
|
72
|
+
case "$n_cpu" in *m) n_mcpu="${n_cpu%m}" ;; *) n_mcpu=$(( ${n_cpu:-0} * 1000 )) ;; esac
|
|
73
|
+
case "$n_mem" in
|
|
74
|
+
*Ki) n_mb=$(( ${n_mem%Ki} / 1024 )) ;;
|
|
75
|
+
*Mi) n_mb="${n_mem%Mi}" ;;
|
|
76
|
+
*Gi) n_mb=$(( ${n_mem%Gi} * 1024 )) ;;
|
|
77
|
+
*) n_mb=$(( ${n_mem:-0} / 1048576 )) ;;
|
|
78
|
+
esac
|
|
79
|
+
if [ "$n_mcpu" -lt 1000 ] || [ "$n_mb" -lt 2048 ]; then
|
|
80
|
+
die "节点 $n_name 过小(${n_mcpu}m CPU / ${n_mb}MB)——低于 1c/2G 硬底线,确实无法部署。下一步:换/扩这台节点,或用 nodeSelector 把它排除后重跑"
|
|
81
|
+
elif [ "$n_mcpu" -lt 2000 ] || [ "$n_mb" -lt 4096 ]; then
|
|
82
|
+
log "⚠ 节点 $n_name 偏小(${n_mcpu}m CPU / ${n_mb}MB,推荐 ≥2c/4G)——能跑,数据面/沙箱余量紧;建议升配或外接 S3/DB 减负"
|
|
83
|
+
fi
|
|
84
|
+
done <<EOF_NODES
|
|
85
|
+
$NODE_CAPS
|
|
86
|
+
EOF_NODES
|
|
87
|
+
[ "$NODES" -lt 3 ] && log "建议:准生产配置=3 节点(PG 反亲和 HA+副本打散);当前 $NODES 节点能跑,按单机形态缩放(不强求)"
|
|
88
|
+
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}')
|
|
89
|
+
STORAGE_CLASS="${STORAGE_CLASS:-}" # 空=用集群默认 SC;显式给了就用给的
|
|
90
|
+
if [ -z "$STORAGE_CLASS" ] && [ -z "$DEFAULT_SC" ]; then
|
|
91
|
+
die "集群没有默认 StorageClass,PVC 会永久 Pending。下一步:kubectl get sc 看有哪些,然后 STORAGE_CLASS=<名字> 重跑;或给集群设默认 SC"
|
|
92
|
+
fi
|
|
93
|
+
KATA_OK=false
|
|
94
|
+
$KUBECTL get runtimeclass kata-qemu >/dev/null 2>&1 && KATA_OK=true
|
|
95
|
+
RUNTIME_CLASS=$($KATA_OK && echo kata-qemu || echo "")
|
|
96
|
+
$KATA_OK || log "⚠ 集群无 kata-qemu runtimeclass——沙箱降级为 runc(容器隔离,弱于 VM)。要 VM 隔离:节点装 kata-deploy(见 cluster-up.sh 4/8)后重跑"
|
|
97
|
+
|
|
98
|
+
# 形态按节点数缩放(cluster-up 同款:<3 preferred,否则 required 永久 Pending——真踩)
|
|
99
|
+
PG_INSTANCES=$(( NODES >= 3 ? 3 : NODES ))
|
|
100
|
+
PG_AA=$([ "$NODES" -ge 3 ] && echo required || echo preferred)
|
|
101
|
+
SERVER_REPLICAS=$(( NODES >= 3 ? 3 : NODES ))
|
|
102
|
+
|
|
103
|
+
# ── 2. 输入校验(在 dry-run 打印之前,报错带下一步)───────────────────────────────
|
|
104
|
+
: "${SEMA_SERVER_IMAGE:?需要 SEMA_SERVER_IMAGE(server 镜像 registry 引用)}"
|
|
105
|
+
: "${MODEL_GATEWAY_BASEURL:?模型面必需(--gateway)}"; : "${MODEL_ID:?模型面必需(--model)}"
|
|
106
|
+
if [ "$REGISTRY_ENABLED" = "true" ] && [ -z "${SEMA_REGISTRY_IMAGE:-}" ]; then
|
|
107
|
+
die "registry=true(默认)需要 SEMA_REGISTRY_IMAGE。下一步:--registry-image=<仓>/sema-registry:<tag>,或 --registry=false"
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
ENVF="$WORK/.env"
|
|
111
|
+
if [ "$DRY_RUN" = "true" ]; then
|
|
112
|
+
{
|
|
113
|
+
echo "══════ kube-up dry-run(不写文件、不动集群)══════"
|
|
114
|
+
echo " 集群: $NODES 节点(mode=$KUBE_MODE,kubeconfig=$KUBECONFIG)"
|
|
115
|
+
echo " SC: ${STORAGE_CLASS:-默认($DEFAULT_SC)} kata: $KATA_OK(否=沙箱 runc 降级)"
|
|
116
|
+
echo " 形态: pg×$PG_INSTANCES($PG_AA) server×$SERVER_REPLICAS registry=$REGISTRY_ENABLED git=$GIT_MODE"
|
|
117
|
+
echo " 将执行: CNPG operator $CNPG_VERSION → helm upgrade --install sema-stack -n $NAMESPACE"
|
|
118
|
+
echo " → runner-token 复制 → MinIO 建桶 → $([ "$GIT_MODE" = provision ] && printf 'Gitea 引导(管理员/token/OAuth)→ ')smoke → summary"
|
|
119
|
+
echo " 凭据: $ENVF $([ -f "$ENVF" ] && echo '(已存在:只补缺不轮换)' || echo '(将新建)')"
|
|
120
|
+
echo " 卸载: helm -n $NAMESPACE uninstall sema-stack(数据 PVC 保留;sema-sandbox ns 有 keep 注记)"
|
|
121
|
+
echo "═══════════════════════════════════════════════"
|
|
122
|
+
} >&2
|
|
123
|
+
exit 0
|
|
124
|
+
fi
|
|
125
|
+
|
|
126
|
+
# ── 3. CNPG operator(钉版;server-side apply+重试——聚合 openapi 未就绪的瞬时错)──
|
|
127
|
+
log "1/6 CNPG operator $CNPG_VERSION"
|
|
128
|
+
if ! $KUBECTL get deployment -n cnpg-system cnpg-controller-manager >/dev/null 2>&1; then
|
|
129
|
+
ok=0
|
|
130
|
+
for t in 1 2 3 4 5; do
|
|
131
|
+
$KUBECTL apply --server-side -f \
|
|
132
|
+
"https://raw.githubusercontent.com/cloudnative-pg/cloudnative-pg/release-${CNPG_VERSION%.*}/releases/cnpg-$CNPG_VERSION.yaml" >/dev/null 2>&1 && { ok=1; break; }
|
|
133
|
+
sleep 10
|
|
134
|
+
done
|
|
135
|
+
[ "$ok" = 1 ] || die "CNPG manifest apply 重试耗尽。下一步:raw.githubusercontent.com 可达性(cn 网络可先手动下载后 kubectl apply -f 本地文件)"
|
|
136
|
+
fi
|
|
137
|
+
$KUBECTL rollout status deployment/cnpg-controller-manager -n cnpg-system --timeout=300s >/dev/null || die "CNPG operator 未就绪。下一步:kubectl -n cnpg-system get pods 看事件"
|
|
138
|
+
|
|
139
|
+
# ── 4. 凭据(.env 幂等,同 sema-up.sh 纪律)───────────────────────────────────────
|
|
140
|
+
mkdir -p "$WORK"; chmod 700 "$WORK" 2>/dev/null || true
|
|
141
|
+
touch "$ENVF"; chmod 600 "$ENVF"
|
|
142
|
+
setk() { grep -q "^$1=" "$ENVF" || printf '%s=%s\n' "$1" "$2" >> "$ENVF"; }
|
|
143
|
+
setk_new() { if grep -q "^$1=" "$ENVF"; then return 1; else printf '%s=%s\n' "$1" "$2" >> "$ENVF"; return 0; fi; }
|
|
144
|
+
has_env() { grep -q "^$1=..*" "$ENVF"; }
|
|
145
|
+
setk MINIO_PASSWORD "$(openssl rand -hex 24)"
|
|
146
|
+
setk SERVICE_AUTH_TOKEN "$(openssl rand -hex 24)"
|
|
147
|
+
NEW_REG_PW=false NEW_GIT_PW=false
|
|
148
|
+
if [ "$REGISTRY_ENABLED" = "true" ]; then
|
|
149
|
+
setk_new REGISTRY_ADMIN_PASSWORD "$(openssl rand -hex 24)" && NEW_REG_PW=true
|
|
150
|
+
setk REGISTRY_SESSION_SECRET "$(openssl rand -hex 24)"
|
|
151
|
+
setk REGISTRY_PULL_TOKEN "$(openssl rand -hex 24)"
|
|
152
|
+
fi
|
|
153
|
+
if [ "$GIT_MODE" = "provision" ]; then
|
|
154
|
+
setk GIT_ADMIN_USER "${GIT_ADMIN_USER:-sema}"
|
|
155
|
+
setk_new GIT_ADMIN_PASSWORD "$(openssl rand -hex 24)" && NEW_GIT_PW=true
|
|
156
|
+
fi
|
|
157
|
+
# openssl 失败会被 $() 吞成空串写进 .env(set -e 不管参数位替换)——断言长度,fail-loud
|
|
158
|
+
for k in MINIO_PASSWORD SERVICE_AUTH_TOKEN; do
|
|
159
|
+
grep -q "^$k=.\{32,\}$" "$ENVF" || die "$k 生成失败(openssl rand?)——检查 $ENVF"
|
|
160
|
+
done
|
|
161
|
+
. "$ENVF"
|
|
162
|
+
[ -n "${MODEL_API_KEY:-}" ] || die "需要 MODEL_API_KEY(--model-key 或 -f 配置)"
|
|
163
|
+
|
|
164
|
+
# 节点 IP(NodePort 入口;kind 场景宿主上不可达,summary 会给 port-forward 替代)
|
|
165
|
+
NODE_IP=$($KUBECTL get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}' | awk '{print $1}')
|
|
166
|
+
|
|
167
|
+
# ── 5. helm 装配(凭据经 stdin;两遍:git=provision 时先无 OAuth 起栈,引导完 Gitea
|
|
168
|
+
# 再带 OAuth 升级——registry 第一遍已可表单登录,不是半成品)────────────────────
|
|
169
|
+
helm_values() { # helm_values <giteaBaseUrl> <oauthId> <oauthSecret>
|
|
170
|
+
V_GITEA_URL="$1" V_OA_ID="$2" V_OA_SECRET="$3" \
|
|
171
|
+
V_MINIO_PW="$MINIO_PASSWORD" V_SVC_TOKEN="$SERVICE_AUTH_TOKEN" V_MODEL_KEY="$MODEL_API_KEY" \
|
|
172
|
+
V_MODEL_GATEWAY="$MODEL_GATEWAY_BASEURL" V_MODEL_ID="$MODEL_ID" \
|
|
173
|
+
V_SERVER_IMAGE="$SEMA_SERVER_IMAGE" V_REPLICAS="$SERVER_REPLICAS" \
|
|
174
|
+
V_PG_INSTANCES="$PG_INSTANCES" V_PG_AA="$PG_AA" V_SC="$STORAGE_CLASS" \
|
|
175
|
+
V_RT_CLASS="$RUNTIME_CLASS" V_REQ_PRINCIPAL="$([ "$USERS" = multi ] && echo true || echo false)" \
|
|
176
|
+
V_PKG_SOURCE="$([ "$REGION" = "global" ] && echo global || echo '')" \
|
|
177
|
+
V_REG_ENABLED="$REGISTRY_ENABLED" V_REG_IMAGE="${SEMA_REGISTRY_IMAGE:-}" \
|
|
178
|
+
V_REG_PW="${REGISTRY_ADMIN_PASSWORD:-}" V_REG_SS="${REGISTRY_SESSION_SECRET:-}" V_REG_PT="${REGISTRY_PULL_TOKEN:-}" \
|
|
179
|
+
V_GITEA_ENABLED="$([ "$GIT_MODE" = provision ] && echo true || echo false)" \
|
|
180
|
+
V_GITEA_IMAGE="${GITEA_IMAGE:-gitea/gitea:1.24}" V_NODE_IP="$NODE_IP" \
|
|
181
|
+
python3 - <<'PY'
|
|
182
|
+
import json, os
|
|
183
|
+
e = os.environ
|
|
184
|
+
# json 是合法 yaml;json.dumps 对任意凭据字符安全(引号/反斜杠/换行都正确转义)
|
|
185
|
+
v = {
|
|
186
|
+
# helm 的 values 合并是深合并——只给部分 parameters 时 values.yaml 里 3 机 as-built 的
|
|
187
|
+
# shared_buffers=8GB/effective_cache_size=86GB 会留下来,小集群 PG 直接起不来(内存不够)。
|
|
188
|
+
# 必须整组显式覆盖成保守值;真按机器规格调优的入口是 STORAGE/PG 显式 values(后续档)。
|
|
189
|
+
"pg": {"instances": int(e["V_PG_INSTANCES"]), "antiAffinity": e["V_PG_AA"],
|
|
190
|
+
"storageClass": e["V_SC"], "storageSize": "20Gi",
|
|
191
|
+
"parameters": {"shared_buffers": "256MB", "effective_cache_size": "1GB",
|
|
192
|
+
"maintenance_work_mem": "128MB", "random_page_cost": "1.1",
|
|
193
|
+
"effective_io_concurrency": "200", "checkpoint_completion_target": "0.9",
|
|
194
|
+
"max_parallel_workers": "2"}},
|
|
195
|
+
"minio": {"rootPassword": e["V_MINIO_PW"], "storageClass": e["V_SC"], "storageSize": "20Gi"},
|
|
196
|
+
"server": {
|
|
197
|
+
"image": e["V_SERVER_IMAGE"], "replicas": int(e["V_REPLICAS"]),
|
|
198
|
+
"serviceAuthToken": e["V_SVC_TOKEN"], "modelGatewayBaseurl": e["V_MODEL_GATEWAY"],
|
|
199
|
+
"modelId": e["V_MODEL_ID"], "modelApiKey": e["V_MODEL_KEY"],
|
|
200
|
+
"sandboxPkgSource": e["V_PKG_SOURCE"], "requirePrincipal": e["V_REQ_PRINCIPAL"],
|
|
201
|
+
},
|
|
202
|
+
"sandbox": {"runtimeClass": e["V_RT_CLASS"]},
|
|
203
|
+
"registry": {"enabled": e["V_REG_ENABLED"] == "true", "image": e["V_REG_IMAGE"],
|
|
204
|
+
"storageClass": e["V_SC"], "adminPassword": e["V_REG_PW"],
|
|
205
|
+
"sessionSecret": e["V_REG_SS"], "pullToken": e["V_REG_PT"],
|
|
206
|
+
"giteaBaseUrl": e["V_GITEA_URL"], "giteaOauthClientId": e["V_OA_ID"],
|
|
207
|
+
"giteaOauthClientSecret": e["V_OA_SECRET"]},
|
|
208
|
+
"gitea": {"enabled": e["V_GITEA_ENABLED"] == "true", "image": e["V_GITEA_IMAGE"],
|
|
209
|
+
"storageClass": e["V_SC"], "domain": e["V_NODE_IP"]},
|
|
210
|
+
}
|
|
211
|
+
print(json.dumps(v))
|
|
212
|
+
PY
|
|
213
|
+
}
|
|
214
|
+
helm_apply() { # helm_apply <giteaBaseUrl> <oauthId> <oauthSecret>
|
|
215
|
+
helm_values "$1" "$2" "$3" | helm upgrade --install sema-stack "$HERE/chart" \
|
|
216
|
+
-n "$NAMESPACE" --create-namespace -f - >/dev/null \
|
|
217
|
+
|| die "helm upgrade --install sema-stack 失败。下一步:helm -n $NAMESPACE status sema-stack;kubectl -n $NAMESPACE get events --sort-by=.lastTimestamp | tail"
|
|
218
|
+
}
|
|
219
|
+
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))"
|
|
220
|
+
OA_URL="${REGISTRY_GITEA_BASE_URL:-}"; OA_ID="${REGISTRY_GITEA_OAUTH_ID:-}"; OA_SECRET="${REGISTRY_GITEA_OAUTH_SECRET:-}"
|
|
221
|
+
# git=connect:先验连通(fail-loud),Gitea 顺手自动建 OAuth app
|
|
222
|
+
GIT_MANUAL=""
|
|
223
|
+
if [ "$GIT_MODE" = "connect" ]; then
|
|
224
|
+
: "${GIT_URL:?git=connect 需要 GIT_URL}"; : "${GIT_TOKEN:?git=connect 需要 GIT_TOKEN}"
|
|
225
|
+
if printf '%s' "$GIT_URL" | grep -q 'github.com'; then
|
|
226
|
+
C=$(curl -m10 -s -o /dev/null -w '%{http_code}' -H "Authorization: Bearer $GIT_TOKEN" https://api.github.com/user)
|
|
227
|
+
[ "$C" = "200" ] || die "GitHub token 验证失败(HTTP $C)。下一步:检查 token 有效性/scope"
|
|
228
|
+
GIT_MANUAL="配置中心 OAuth 登录只支持 Gitea——GitHub 仓可用但登录集成无法自动配(表单登录即可)"
|
|
229
|
+
else
|
|
230
|
+
VER=$(curl -m10 -s -H "Authorization: token $GIT_TOKEN" "$GIT_URL/api/v1/version" | python3 -c 'import json,sys
|
|
231
|
+
try: print(json.load(sys.stdin).get("version",""))
|
|
232
|
+
except Exception: print("")')
|
|
233
|
+
[ -n "$VER" ] || die "$GIT_URL 不像可达的 Gitea(/api/v1/version 无响应)。下一步:核对根地址与 token"
|
|
234
|
+
if [ "$REGISTRY_ENABLED" = "true" ] && [ -z "$OA_ID" ]; then
|
|
235
|
+
REDIRECT="http://$NODE_IP:30300/api/auth/oauth/callback"
|
|
236
|
+
RESP=$(curl -m10 -s -H "Authorization: token $GIT_TOKEN" -X POST "$GIT_URL/api/v1/user/applications/oauth2" \
|
|
237
|
+
-H 'Content-Type: application/json' -d "{\"name\":\"sema-registry\",\"redirect_uris\":[\"$REDIRECT\"],\"confidential_client\":true}")
|
|
238
|
+
OA_ID=$(printf '%s' "$RESP" | python3 -c 'import json,sys
|
|
239
|
+
try: print(json.load(sys.stdin).get("client_id",""))
|
|
240
|
+
except Exception: print("")')
|
|
241
|
+
OA_SECRET=$(printf '%s' "$RESP" | python3 -c 'import json,sys
|
|
242
|
+
try: print(json.load(sys.stdin).get("client_secret",""))
|
|
243
|
+
except Exception: print("")')
|
|
244
|
+
if [ -n "$OA_ID" ] && [ -n "$OA_SECRET" ]; then
|
|
245
|
+
setk REGISTRY_GITEA_BASE_URL "$GIT_URL"; setk REGISTRY_GITEA_OAUTH_ID "$OA_ID"; setk REGISTRY_GITEA_OAUTH_SECRET "$OA_SECRET"
|
|
246
|
+
OA_URL="$GIT_URL"
|
|
247
|
+
else GIT_MANUAL="OAuth app 自动创建失败(token 可能缺 write:user)——手动建后把 id/secret 写进 $ENVF 重跑"; fi
|
|
248
|
+
fi
|
|
249
|
+
fi
|
|
250
|
+
setk GIT_URL "$GIT_URL"; setk GIT_TOKEN "$GIT_TOKEN"
|
|
251
|
+
fi
|
|
252
|
+
helm_apply "$OA_URL" "$OA_ID" "$OA_SECRET"
|
|
253
|
+
|
|
254
|
+
# runner token 跨 ns 复制要赶在 server 起 pod 前(晚了=CreateContainerConfigError 干等——真踩)
|
|
255
|
+
log "3/6 runner-token 复制 + 等数据面"
|
|
256
|
+
TOK=""
|
|
257
|
+
for t in $(seq 1 24); do
|
|
258
|
+
TOK=$($KUBECTL get secret sema-runner-token -n sema-sandbox -o jsonpath='{.data.token}' 2>/dev/null || true)
|
|
259
|
+
[ -n "$TOK" ] && break; sleep 5
|
|
260
|
+
done
|
|
261
|
+
[ -n "$TOK" ] || die "sema-runner-token 未被控制器填充。下一步:kubectl -n sema-sandbox get secret,sa"
|
|
262
|
+
printf '%s' "$TOK" | base64 -d | $KUBECTL create secret generic sema-runner-token-copy -n "$NAMESPACE" \
|
|
263
|
+
--from-file=token=/dev/stdin --dry-run=client -o yaml | $KUBECTL apply -f - >/dev/null
|
|
264
|
+
# PG healthy(冷启拉镜像+init 可要几分钟)
|
|
265
|
+
s=""
|
|
266
|
+
for t in $(seq 1 120); do
|
|
267
|
+
s=$($KUBECTL get cluster sema-pg -n "$NAMESPACE" -o jsonpath='{.status.phase}' 2>/dev/null || true)
|
|
268
|
+
[ "$s" = "Cluster in healthy state" ] && break; sleep 5
|
|
269
|
+
done
|
|
270
|
+
[ "$s" = "Cluster in healthy state" ] || { $KUBECTL get cluster -n "$NAMESPACE" >&2 || true; die "PG 未达 healthy。下一步:kubectl -n $NAMESPACE describe cluster sema-pg;PVC Pending 时查 StorageClass"; }
|
|
271
|
+
$KUBECTL rollout status deployment/sema-minio -n "$NAMESPACE" --timeout=300s >/dev/null
|
|
272
|
+
# MinIO 建桶(幂等;备份桶+对象桶)
|
|
273
|
+
$KUBECTL exec deploy/sema-minio -n "$NAMESPACE" -- sh -c \
|
|
274
|
+
"mc alias set local http://localhost:9000 sema \"\$MINIO_ROOT_PASSWORD\" >/dev/null && mc mb --ignore-existing local/sema-pg-backup local/workspaces local/blobs local/backups" >/dev/null \
|
|
275
|
+
|| die "MinIO 建桶失败。下一步:kubectl -n $NAMESPACE logs deploy/sema-minio"
|
|
276
|
+
$KUBECTL rollout status deployment/sema-server -n "$NAMESPACE" --timeout=600s >/dev/null || die "sema-server 未就绪。下一步:kubectl -n $NAMESPACE logs deploy/sema-server(常见:镜像拉取失败→imagePullSecrets/私仓凭据)"
|
|
277
|
+
|
|
278
|
+
# ── Gitea 引导(provision:管理员/token/OAuth app;全部 in-pod 动作,不依赖 NodePort 可达)──
|
|
279
|
+
if [ "$GIT_MODE" = "provision" ]; then
|
|
280
|
+
log "4/6 Gitea 引导"
|
|
281
|
+
$KUBECTL rollout status deployment/sema-gitea -n "$NAMESPACE" --timeout=300s >/dev/null || die "Gitea 未就绪。下一步:kubectl -n $NAMESPACE logs deploy/sema-gitea"
|
|
282
|
+
. "$ENVF"
|
|
283
|
+
gexec() { $KUBECTL exec deploy/sema-gitea -n "$NAMESPACE" -- su git -c "$*"; }
|
|
284
|
+
if ! gexec "gitea admin user list" 2>/dev/null | awk '{print $2}' | grep -qx "$GIT_ADMIN_USER"; then
|
|
285
|
+
gexec "gitea admin user create --admin --username '$GIT_ADMIN_USER' --password '$GIT_ADMIN_PASSWORD' --email '${GIT_ADMIN_USER}@sema.local' --must-change-password=false" >/dev/null \
|
|
286
|
+
|| die "Gitea 管理员创建失败。下一步:kubectl -n $NAMESPACE logs deploy/sema-gitea"
|
|
287
|
+
fi
|
|
288
|
+
if ! has_env GIT_ADMIN_TOKEN; then
|
|
289
|
+
TOK_NAME="sema-up-$(openssl rand -hex 3)"
|
|
290
|
+
GTOK=$($KUBECTL exec deploy/sema-gitea -n "$NAMESPACE" -- \
|
|
291
|
+
curl -m10 -s -u "$GIT_ADMIN_USER:$GIT_ADMIN_PASSWORD" -X POST "http://127.0.0.1:3000/api/v1/users/$GIT_ADMIN_USER/tokens" \
|
|
292
|
+
-H 'Content-Type: application/json' -d "{\"name\":\"$TOK_NAME\",\"scopes\":[\"all\"]}" \
|
|
293
|
+
| python3 -c 'import json,sys
|
|
294
|
+
try: print(json.load(sys.stdin).get("sha1",""))
|
|
295
|
+
except Exception: print("")')
|
|
296
|
+
[ -n "$GTOK" ] || die "Gitea access token 生成失败。下一步:kubectl -n $NAMESPACE logs deploy/sema-gitea"
|
|
297
|
+
setk GIT_ADMIN_TOKEN "$GTOK"
|
|
298
|
+
fi
|
|
299
|
+
. "$ENVF"
|
|
300
|
+
if [ "$REGISTRY_ENABLED" = "true" ] && ! has_env REGISTRY_GITEA_OAUTH_ID; then
|
|
301
|
+
REDIRECT="http://$NODE_IP:30300/api/auth/oauth/callback"
|
|
302
|
+
RESP=$($KUBECTL exec deploy/sema-gitea -n "$NAMESPACE" -- \
|
|
303
|
+
curl -m10 -s -H "Authorization: token $GIT_ADMIN_TOKEN" -X POST "http://127.0.0.1:3000/api/v1/user/applications/oauth2" \
|
|
304
|
+
-H 'Content-Type: application/json' -d "{\"name\":\"sema-registry\",\"redirect_uris\":[\"$REDIRECT\"],\"confidential_client\":true}")
|
|
305
|
+
OA_ID=$(printf '%s' "$RESP" | python3 -c 'import json,sys
|
|
306
|
+
try: print(json.load(sys.stdin).get("client_id",""))
|
|
307
|
+
except Exception: print("")')
|
|
308
|
+
OA_SECRET=$(printf '%s' "$RESP" | python3 -c 'import json,sys
|
|
309
|
+
try: print(json.load(sys.stdin).get("client_secret",""))
|
|
310
|
+
except Exception: print("")')
|
|
311
|
+
if [ -n "$OA_ID" ] && [ -n "$OA_SECRET" ]; then
|
|
312
|
+
setk REGISTRY_GITEA_BASE_URL "http://$NODE_IP:30330"; setk REGISTRY_GITEA_OAUTH_ID "$OA_ID"; setk REGISTRY_GITEA_OAUTH_SECRET "$OA_SECRET"
|
|
313
|
+
log "Gitea→registry OAuth 已接,helm 二遍升级注入"
|
|
314
|
+
helm_apply "http://$NODE_IP:30330" "$OA_ID" "$OA_SECRET"
|
|
315
|
+
else
|
|
316
|
+
GIT_MANUAL="Gitea OAuth app 自动创建失败——registry 仍可表单登录;手动建(回调 $REDIRECT)后把 id/secret 写进 $ENVF 重跑"
|
|
317
|
+
fi
|
|
318
|
+
fi
|
|
319
|
+
fi
|
|
320
|
+
if [ "$REGISTRY_ENABLED" = "true" ]; then
|
|
321
|
+
$KUBECTL rollout status deployment/sema-registry -n "$NAMESPACE" --timeout=300s >/dev/null || die "registry 未就绪。下一步:kubectl -n $NAMESPACE logs deploy/sema-registry(常见:镜像拉取失败)"
|
|
322
|
+
fi
|
|
323
|
+
|
|
324
|
+
# ── smoke(port-forward 直验——kind/远程 kubeconfig 下 NodePort 对本机不可达,别靠它)──
|
|
325
|
+
log "5/6 smoke"
|
|
326
|
+
smoke_pf() { # smoke_pf <svc> <port> <path> → http code
|
|
327
|
+
local pf_pid code
|
|
328
|
+
$KUBECTL port-forward "svc/$1" -n "$NAMESPACE" "1$2:$2" >/dev/null 2>&1 &
|
|
329
|
+
pf_pid=$!
|
|
330
|
+
sleep 2
|
|
331
|
+
code=$(curl -m5 -s -o /dev/null -w '%{http_code}' "http://127.0.0.1:1$2$3" || echo 000)
|
|
332
|
+
kill $pf_pid 2>/dev/null; wait $pf_pid 2>/dev/null || true
|
|
333
|
+
printf '%s' "$code"
|
|
334
|
+
}
|
|
335
|
+
H=$(smoke_pf sema-server 8090 /health)
|
|
336
|
+
[ "$H" = "200" ] || die "smoke 失败:server /health=$H(期望 200)。下一步:kubectl -n $NAMESPACE logs deploy/sema-server"
|
|
337
|
+
A=$(smoke_pf sema-server 8090 /v1/runs)
|
|
338
|
+
[ "$A" = "401" ] || die "smoke 失败:无 token /v1/runs=$A(期望 401=auth 门在)。SERVICE_AUTH_TOKEN 未生效=裸奔,立刻查"
|
|
339
|
+
R="n/a"
|
|
340
|
+
if [ "$REGISTRY_ENABLED" = "true" ]; then
|
|
341
|
+
R=$(smoke_pf sema-registry 3000 /api/healthz)
|
|
342
|
+
[ "$R" = "200" ] || die "smoke 失败:registry healthz=$R。下一步:kubectl -n $NAMESPACE logs deploy/sema-registry"
|
|
343
|
+
fi
|
|
344
|
+
G="n/a"
|
|
345
|
+
if [ "$GIT_MODE" = "provision" ]; then
|
|
346
|
+
G=$(smoke_pf sema-gitea 3000 /api/healthz)
|
|
347
|
+
[ "$G" = "200" ] || die "smoke 失败:gitea healthz=$G"
|
|
348
|
+
fi
|
|
349
|
+
log "smoke ✓ health=$H auth=$A registry=$R gitea=$G"
|
|
350
|
+
|
|
351
|
+
# ── summary(一屏;凭据一次性显示)────────────────────────────────────────────────
|
|
352
|
+
log "6/6 完成"
|
|
353
|
+
. "$ENVF"
|
|
354
|
+
{
|
|
355
|
+
echo
|
|
356
|
+
echo "══════════════ kube-up 完成($NODES 节点,mode=$KUBE_MODE)══════════════"
|
|
357
|
+
echo " 引擎 NodePort 30890 → http://$NODE_IP:30890(API 凭据=SERVICE_AUTH_TOKEN)"
|
|
358
|
+
echo " 本机不可达 NodePort 时(kind/远程):kubectl -n $NAMESPACE port-forward svc/sema-server 8090:8090"
|
|
359
|
+
echo " 数据 CNPG sema-pg×$PG_INSTANCES($PG_AA)+ MinIO(桶:workspaces/blobs/backups/sema-pg-backup)"
|
|
360
|
+
if [ "$REGISTRY_ENABLED" = "true" ]; then
|
|
361
|
+
echo " 配置中心 NodePort 30300 → http://$NODE_IP:30300"
|
|
362
|
+
if $NEW_REG_PW; then echo " 首登:${REGISTRY_ADMIN_USER:-zhaoheran} / ${REGISTRY_ADMIN_PASSWORD}(⚠ 只显示这一次,之后看 .env)"
|
|
363
|
+
else echo " 首登:${REGISTRY_ADMIN_USER:-zhaoheran}(密码沿用上次,在 .env REGISTRY_ADMIN_PASSWORD)"; fi
|
|
364
|
+
fi
|
|
365
|
+
if [ "$GIT_MODE" = "provision" ]; then
|
|
366
|
+
echo " Git/Gitea NodePort 30330(http)/30322(ssh)→ http://$NODE_IP:30330"
|
|
367
|
+
if $NEW_GIT_PW; then echo " 管理员:${GIT_ADMIN_USER} / ${GIT_ADMIN_PASSWORD}(⚠ 只显示这一次,之后看 .env)"
|
|
368
|
+
else echo " 管理员:${GIT_ADMIN_USER}(密码在 .env GIT_ADMIN_PASSWORD)"; fi
|
|
369
|
+
elif [ "$GIT_MODE" = "connect" ]; then
|
|
370
|
+
echo " Git 已连接 ${GIT_URL}(token 在 .env GIT_TOKEN)"
|
|
371
|
+
fi
|
|
372
|
+
[ -n "$GIT_MANUAL" ] && echo " ⚠ 待人工 $GIT_MANUAL"
|
|
373
|
+
[ "$RUNTIME_CLASS" = "" ] && echo " ⚠ 沙箱 无 kata——runc 容器隔离(生产建议装 kata-deploy 后重跑)"
|
|
374
|
+
echo " 凭据 $ENVF(0600)"
|
|
375
|
+
echo " 卸载 helm -n $NAMESPACE uninstall sema-stack(PVC/数据留);CNPG operator/k3s 另卸"
|
|
376
|
+
echo "═══════════════════════════════════════════════════════════════════════"
|
|
377
|
+
} >&2
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""machines.yaml → env 行(sema-up.sh source 用)。
|
|
3
|
+
只解析 machines.example.yaml 的固定形状(2 级缩进+机器列表),标准库零依赖——
|
|
4
|
+
bootstrap 目标机不保证有 PyYAML,而形状是我们自己定的,mini-parser 覆盖即可;
|
|
5
|
+
遇到解析不了的结构 fail-loud 指出行号,绝不猜。
|
|
6
|
+
用法: parse-machines.py machines.yaml # stdout 一行一个 KEY=VALUE
|
|
7
|
+
"""
|
|
8
|
+
import re, shlex, sys
|
|
9
|
+
|
|
10
|
+
# 结构字段严格校验:值会被 sema-up.sh eval/嵌入 ssh 与远端 root shell——不是防操作员(yaml 就是
|
|
11
|
+
# 操作员写的),是防粘贴事故/特殊字符静默注入(一次在 parser 层根治)
|
|
12
|
+
VALIDATORS = {
|
|
13
|
+
"name": (r"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$", "RFC1123 节点名(小写字母数字与-)"),
|
|
14
|
+
"host": (r"^[A-Za-z0-9][A-Za-z0-9._-]{0,252}$", "IPv4/主机名(首字符字母数字——防 ssh 把 -o… 当选项)"),
|
|
15
|
+
"user": (r"^[a-z_][a-z0-9_-]{0,31}$", "unix 用户名"),
|
|
16
|
+
"role": (r"^(server|agent)$", "server|agent"),
|
|
17
|
+
"private_ip": (r"^\d{1,3}(\.\d{1,3}){3}$", "IPv4"),
|
|
18
|
+
"private_cidr":(r"^\d{1,3}(\.\d{1,3}){3}/\d{1,2}$", "IPv4/prefix"),
|
|
19
|
+
"public_iface":(r"^[A-Za-z0-9_.@-]{1,15}$", "接口名"),
|
|
20
|
+
}
|
|
21
|
+
def validate(field, value, ctx, ln=None):
|
|
22
|
+
if field in VALIDATORS and value:
|
|
23
|
+
pat, hint = VALIDATORS[field]
|
|
24
|
+
if not re.match(pat, value):
|
|
25
|
+
die(f"{ctx} 的 {field}={value!r} 不合法(期望 {hint})", ln)
|
|
26
|
+
|
|
27
|
+
def die(msg, ln=None):
|
|
28
|
+
sys.stderr.write(f"machines.yaml 解析失败{f'(第 {ln} 行)' if ln else ''}: {msg}\n")
|
|
29
|
+
sys.exit(1)
|
|
30
|
+
|
|
31
|
+
def strip_comment(v):
|
|
32
|
+
# 值内不含引号字符串的场景(我们的模板如此);"# " 之后为注释
|
|
33
|
+
return re.split(r"\s+#", v, maxsplit=1)[0].strip().strip('"').strip("'")
|
|
34
|
+
|
|
35
|
+
def main(path):
|
|
36
|
+
top = {} # 顶层标量
|
|
37
|
+
sections = {} # 顶层 section → {k: v}
|
|
38
|
+
machines = [] # [{host,user,ssh_key,password,role}]
|
|
39
|
+
cur_section = None
|
|
40
|
+
cur_machine = None
|
|
41
|
+
for ln, raw in enumerate(open(path, encoding="utf-8"), 1):
|
|
42
|
+
line = raw.rstrip("\n")
|
|
43
|
+
if not line.strip() or line.strip().startswith("#"):
|
|
44
|
+
continue
|
|
45
|
+
indent = len(line) - len(line.lstrip())
|
|
46
|
+
body = line.strip()
|
|
47
|
+
if indent == 0:
|
|
48
|
+
cur_machine = None
|
|
49
|
+
m = re.match(r"^([A-Za-z_][\w-]*):\s*(.*)$", body)
|
|
50
|
+
if not m: die(f"看不懂的顶层行: {body!r}", ln)
|
|
51
|
+
k, v = m.group(1), strip_comment(m.group(2))
|
|
52
|
+
if v:
|
|
53
|
+
top[k] = v; cur_section = None
|
|
54
|
+
else:
|
|
55
|
+
cur_section = k; sections.setdefault(k, {})
|
|
56
|
+
elif body.startswith("- "):
|
|
57
|
+
if cur_section != "machines": die(f"列表只允许出现在 machines: 下", ln)
|
|
58
|
+
cur_machine = {}
|
|
59
|
+
machines.append(cur_machine)
|
|
60
|
+
m = re.match(r"^-\s+([\w-]+):\s*(.*)$", body)
|
|
61
|
+
if not m: die(f"看不懂的列表项: {body!r}", ln)
|
|
62
|
+
cur_machine[m.group(1)] = strip_comment(m.group(2))
|
|
63
|
+
else:
|
|
64
|
+
m = re.match(r"^([\w-]+):\s*(.*)$", body)
|
|
65
|
+
if not m: die(f"看不懂的行: {body!r}", ln)
|
|
66
|
+
k, v = m.group(1), strip_comment(m.group(2))
|
|
67
|
+
if cur_section == "machines":
|
|
68
|
+
if cur_machine is None: die("machines 下的键不在任何 '- host:' 项里", ln)
|
|
69
|
+
cur_machine[k] = v
|
|
70
|
+
elif cur_section:
|
|
71
|
+
sections[cur_section][k] = v
|
|
72
|
+
else:
|
|
73
|
+
die(f"缩进了但没有所属 section: {body!r}", ln)
|
|
74
|
+
|
|
75
|
+
out = []
|
|
76
|
+
def emit(k, v):
|
|
77
|
+
if v is None or v == "": return
|
|
78
|
+
# shlex.quote:输出会被 shell eval,单引号量化让 $ ` 等永远是字面量(密码等自由字段也安全)
|
|
79
|
+
out.append(f"{k}={shlex.quote(v)}")
|
|
80
|
+
|
|
81
|
+
emit("PROFILE", top.get("profile"))
|
|
82
|
+
emit("REGION", top.get("region", "auto"))
|
|
83
|
+
emit("USERS", top.get("users", "single"))
|
|
84
|
+
# server 镜像(registry 引用;海外=docker.io/<ns>/sema-server:<tag>)
|
|
85
|
+
emit("SEMA_SERVER_IMAGE", top.get("server_image"))
|
|
86
|
+
emit("MACHINE_COUNT", str(len(machines)))
|
|
87
|
+
names = set()
|
|
88
|
+
for i, mch in enumerate(machines):
|
|
89
|
+
if "host" not in mch: die(f"machines[{i}] 缺 host")
|
|
90
|
+
# name=k3s node-name(必须全局唯一;缺省 sema-0<i+1>)。教训:裸机批次系统 hostname
|
|
91
|
+
# 常常整批相同,靠系统名注册 etcd 成员必撞;node-name 从第一次 join 就要唯一。
|
|
92
|
+
name = mch.get("name") or f"sema-{i+1:02d}"
|
|
93
|
+
if name in names: die(f"machines[{i}] name 重复: {name}")
|
|
94
|
+
names.add(name)
|
|
95
|
+
mch["name"] = name
|
|
96
|
+
for k in ("host", "user", "ssh_key", "password", "role", "name", "private_ip", "private_cidr", "public_iface"):
|
|
97
|
+
validate(k, mch.get(k), f"machines[{i}]")
|
|
98
|
+
emit(f"MACHINE_{i}_{k.upper()}", mch.get(k))
|
|
99
|
+
dp = sections.get("data_plane", {})
|
|
100
|
+
emit("DP_PG", dp.get("pg", "deploy"))
|
|
101
|
+
emit("DP_S3", dp.get("s3", "deploy"))
|
|
102
|
+
emit("DP_BACKUP", dp.get("backup", "true"))
|
|
103
|
+
sb = sections.get("sandbox", {})
|
|
104
|
+
emit("SANDBOX_LANE", sb.get("lane"))
|
|
105
|
+
emit("E2B_ENDPOINT", sb.get("e2b_endpoint"))
|
|
106
|
+
emit("E2B_API_KEY", sb.get("e2b_api_key"))
|
|
107
|
+
rg = sections.get("registry", {})
|
|
108
|
+
emit("REGISTRY_ENABLED", rg.get("enabled"))
|
|
109
|
+
emit("SEMA_REGISTRY_IMAGE", rg.get("image"))
|
|
110
|
+
ir = sections.get("image_registry", {})
|
|
111
|
+
emit("IMAGE_REGISTRY_MODE", ir.get("mode"))
|
|
112
|
+
emit("IMAGE_REGISTRY_ENDPOINT", ir.get("endpoint"))
|
|
113
|
+
print("\n".join(out))
|
|
114
|
+
|
|
115
|
+
if __name__ == "__main__":
|
|
116
|
+
if len(sys.argv) != 2: die("用法: parse-machines.py <machines.yaml>")
|
|
117
|
+
main(sys.argv[1])
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# sema-up 机器清单模板(DEPLOY-OVERSEAS-PILOT §5 Phase 0/1)
|
|
2
|
+
# 条目数决定模式:>=3 → cluster(k3s,embedded etcd HA);1 → single(docker compose)。
|
|
3
|
+
# 凭据二选一:password(bootstrap 用它铺 ssh key,不落盘不入日志)或 ssh_key(已互信)。
|
|
4
|
+
profile: full-cluster # full-cluster | full-single | data-center | local-plus
|
|
5
|
+
region: auto # auto | cn | global(auto=连通性探测,--region 可覆盖)
|
|
6
|
+
users: single # single(超管 turnkey,推荐)| multi(身份隔离+能力默认全开)
|
|
7
|
+
# server_image: ghcr.io/clayboby/sema-server:<tag> # 引擎镜像 registry 引用(GHCR/Docker Hub 公开仓,
|
|
8
|
+
# # 匿名可拉;CN 兜底=内网 Gitea registry。SWR 已弃用 2026-07-13);
|
|
9
|
+
# # 不填则要 env SEMA_SERVER_IMAGE 或 SEMA_SERVER_IMAGE_TAR(tar 预灌)
|
|
10
|
+
|
|
11
|
+
machines:
|
|
12
|
+
- host: 10.0.0.1 # ssh 可达地址(生产建议私网;公网入口走 LB,不直暴节点)
|
|
13
|
+
user: root
|
|
14
|
+
# password: "..." # 或
|
|
15
|
+
ssh_key: ~/.ssh/id_ed25519
|
|
16
|
+
role: server # server(k3s control-plane)| agent;single 模式忽略
|
|
17
|
+
# name: sema-01 # k3s node-name,缺省 sema-0N;必须唯一(裸机批次系统 hostname 常整批相同,
|
|
18
|
+
# # 靠系统名注册 etcd 成员必撞——Phase 1b 真踩)
|
|
19
|
+
# private_ip: 10.34.0.154 # 集群东西向走的私网 IP(VLAN);缺省用 host
|
|
20
|
+
# private_cidr: 10.34.0.0/24 # NodePort 限定网段;缺省从 private_ip 推 /24(非 /24 网段必填)
|
|
21
|
+
# public_iface: bond0 # 有公网口的机器填,VXLAN 8472 会在该口 DROP(隔离不变量)
|
|
22
|
+
- host: 10.0.0.2
|
|
23
|
+
user: root
|
|
24
|
+
ssh_key: ~/.ssh/id_ed25519
|
|
25
|
+
role: server
|
|
26
|
+
- host: 10.0.0.3
|
|
27
|
+
user: root
|
|
28
|
+
ssh_key: ~/.ssh/id_ed25519
|
|
29
|
+
role: server
|
|
30
|
+
|
|
31
|
+
data_plane:
|
|
32
|
+
pg: deploy # deploy(内置+自动调优)| 连接串 postgres://…(外接,先校验)
|
|
33
|
+
s3: deploy # deploy(内置 MinIO+自动调优)| endpoint+key(外接 S3 协议桶)
|
|
34
|
+
backup: true # PG 定时备份到 S3(data-center/full 默认 true)
|
|
35
|
+
|
|
36
|
+
sandbox:
|
|
37
|
+
lane: kata # kata(默认,需 KVM,预检不过不给)| e2b-cloud | e2b-self | runc
|
|
38
|
+
# e2b_endpoint: … # lane=e2b-self 时必填(校验连通+模板可用)
|
|
39
|
+
# e2b_api_key: …
|
|
40
|
+
|
|
41
|
+
registry:
|
|
42
|
+
enabled: true # sema-registry 配置中心(MCP/skill/模型配置云同步);data-center 也建议 true
|
|
43
|
+
# image: ghcr.io/clayboby/sema-registry:<tag> # enabled=true 必填(GHCR/Hub,迁移中;SWR 已弃用)
|
|
44
|
+
image_registry:
|
|
45
|
+
mode: dockerhub # dockerhub(现行:docker.io/claybobby 公开池,匿名可拉,clay 2026-07-12/13 拍
|
|
46
|
+
# # SWR 全面弃用)| swr-secret(已弃用:旧国内 SWR 拉取凭据)|
|
|
47
|
+
# # local(内网仓;CN 兜底=内网 Gitea registry)
|
|
48
|
+
# endpoint: … # mode=local 时的仓地址
|
|
49
|
+
# 拉取凭据一律 env,不写进本文件:cluster-up.sh 读 IMAGE_PULL_USER / IMAGE_PULL_TOKEN
|
|
50
|
+
# (+可选 IMAGE_PULL_REGISTRY,默认 https://index.docker.io/v1/)→ 建 secret sema-regcred
|
|
51
|
+
# 于 sema/sema-sandbox 两 ns 并 patch default SA(server 与沙箱 pod 全覆盖)。
|
|
52
|
+
# server 镜像即 SEMA_SERVER_IMAGE=ghcr.io/clayboby/sema-server:<tag>(public 匿名可拉;
|
|
53
|
+
# 仅换成 private 仓时才要上面的凭据)。
|