@sema-agent/server 7.150.0 → 7.152.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 +451 -0
- package/README.md +15 -3
- package/README.zh-CN.md +10 -2
- package/USAGE.md +144 -87
- package/deploy/sema-up/README.md +11 -4
- package/deploy/sema-up/chart/Chart.yaml +1 -1
- package/deploy/sema-up/chart/templates/NOTES.txt +5 -0
- package/deploy/sema-up/chart/templates/_helpers.tpl +15 -16
- package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -3
- package/deploy/sema-up/chart/templates/server.yaml +5 -3
- package/deploy/sema-up/chart/values-full-single.yaml +3 -1
- package/deploy/sema-up/chart/values.yaml +8 -1
- package/deploy/sema-up/cluster-up.sh +7 -6
- package/deploy/sema-up/kube-up.sh +6 -6
- package/deploy/sema-up/lib/flagshape.sh +36 -8
- package/deploy/sema-up/lib/helm-values-cluster.py +2 -0
- package/deploy/sema-up/lib/helm-values-kube.py +2 -0
- package/deploy/sema-up/machines.example.yaml +3 -1
- package/deploy/sema-up/sema-up.sh +22 -16
- package/dist/adoption/import.js +3 -3
- package/dist/approval-ask-audit-store.d.ts +1 -1
- package/dist/approval-ask-machine.d.ts +4 -10
- package/dist/approval-ask-retention.d.ts +1 -1
- package/dist/approval-card.d.ts +12 -14
- package/dist/approval-gate-currency.d.ts +9 -9
- package/dist/approval-gate-currency.js +3 -4
- package/dist/approval-hmac.d.ts +17 -1
- package/dist/approval-hmac.js +7 -1
- package/dist/approval-queue-kind.d.ts +1 -1
- package/dist/approval.d.ts +2 -2
- package/dist/approval.js +2 -2
- package/dist/auth-bridge.d.ts +20 -0
- package/dist/auth-bridge.js +9 -0
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/bake-runner/main.d.ts +4 -2
- package/dist/bind-host.d.ts +3 -6
- package/dist/bind-host.js +4 -7
- package/dist/boot/budget-tracing.js +1 -1
- package/dist/boot/coordinators.d.ts +1 -1
- package/dist/boot/coordinators.js +9 -10
- package/dist/boot/device-lane.js +2 -0
- package/dist/boot/engine-lease.d.ts +5 -0
- package/dist/boot/engine-lease.js +1 -0
- package/dist/boot/execution-env.d.ts +9 -14
- package/dist/boot/execution-env.js +85 -22
- package/dist/boot/execution-lane.js +32 -5
- package/dist/boot/late-binds.d.ts +8 -4
- package/dist/boot/late-binds.js +7 -1
- package/dist/boot/leader.d.ts +31 -30
- package/dist/boot/leader.js +38 -28
- package/dist/boot/leg-path-adjudication.d.ts +40 -0
- package/dist/boot/leg-path-adjudication.js +18 -0
- package/dist/boot/memory-consolidation.d.ts +3 -2
- package/dist/boot/memory-consolidation.js +6 -6
- package/dist/boot/parked-revive-gate.js +3 -15
- package/dist/boot/reapers.d.ts +6 -1
- package/dist/boot/reapers.js +13 -2
- package/dist/boot/resolve-spec.d.ts +3 -3
- package/dist/boot/resolve-spec.js +43 -48
- package/dist/boot/runner-deps.d.ts +46 -35
- package/dist/boot/runner-deps.js +94 -91
- package/dist/boot/session-age-out.d.ts +36 -0
- package/dist/boot/session-age-out.js +101 -0
- package/dist/boot/session-faces.d.ts +5 -14
- package/dist/boot/session-faces.js +9 -5
- package/dist/boot/shutdown.d.ts +6 -0
- package/dist/boot/shutdown.js +10 -4
- package/dist/boot/stage-01-config.js +2 -0
- package/dist/boot/stage-02-web-admin-pull.js +4 -5
- package/dist/boot/stage-05-execution-env.d.ts +5 -3
- package/dist/boot/stage-05-execution-env.js +3 -2
- package/dist/boot/stage-06-runners.d.ts +9 -4
- package/dist/boot/stage-06-runners.js +24 -9
- package/dist/boot/stage-07-capability-layer.d.ts +8 -4
- package/dist/boot/stage-07-capability-layer.js +3 -2
- package/dist/boot/stage-08-reapers.d.ts +8 -4
- package/dist/boot/stage-08-reapers.js +4 -2
- package/dist/boot/stage-09-leader.d.ts +12 -5
- package/dist/boot/stage-09-leader.js +14 -5
- package/dist/boot/stage-10-http-server.d.ts +19 -5
- package/dist/boot/stage-10-http-server.js +14 -21
- package/dist/boot/stores.js +7 -4
- package/dist/boot/web-admin.js +5 -8
- package/dist/boot/workflow-orchestration.d.ts +7 -2
- package/dist/boot/workflow-orchestration.js +24 -7
- package/dist/bounded-rotation.d.ts +29 -0
- package/dist/bounded-rotation.js +24 -0
- package/dist/capabilities/approvals-push.d.ts +3 -3
- package/dist/capabilities/scenarios.d.ts +28 -13
- package/dist/capabilities/scenarios.js +2 -2
- package/dist/capability-facts.d.ts +43 -32
- package/dist/capability-facts.js +45 -51
- package/dist/card-rule-offers.d.ts +32 -0
- package/dist/card-rule-offers.js +130 -0
- package/dist/center-credential.d.ts +25 -6
- package/dist/center-credential.js +25 -5
- package/dist/config-catalog.d.ts +26 -7
- package/dist/config-catalog.js +26 -22
- package/dist/config-dir-trust.js +4 -2
- package/dist/config-invariants.d.ts +20 -8
- package/dist/config-invariants.js +55 -12
- package/dist/config-lkg.d.ts +5 -19
- package/dist/config-lkg.js +8 -62
- package/dist/config-provider.d.ts +1 -1
- package/dist/config-root-migration.d.ts +2 -2
- package/dist/config-types.d.ts +38 -42
- package/dist/config.d.ts +58 -7
- package/dist/config.js +90 -40
- package/dist/control-socket.d.ts +51 -0
- package/dist/control-socket.js +115 -0
- package/dist/deployment-governance.d.ts +2 -1
- package/dist/deployment-shape.d.ts +9 -1
- package/dist/deployment-shape.js +2 -1
- package/dist/device-protocol.d.ts +5 -4
- package/dist/device-protocol.js +1 -1
- package/dist/device-ws-hub.d.ts +7 -0
- package/dist/device-ws-hub.js +10 -3
- package/dist/device-ws-protocol.d.ts +63 -10
- package/dist/device-ws-protocol.js +56 -25
- package/dist/elicitation.js +2 -2
- package/dist/engine-identity.d.ts +19 -7
- package/dist/engine-identity.js +10 -2
- package/dist/entry-mode-clamp-notice.d.ts +2 -1
- package/dist/entry-problems.d.ts +40 -3
- package/dist/entry-problems.js +3 -1
- package/dist/execution-env-refusal.d.ts +29 -0
- package/dist/execution-env-refusal.js +8 -0
- package/dist/execution-lane-caps.d.ts +3 -1
- package/dist/field-conflict.d.ts +1 -1
- package/dist/file-history-capture.d.ts +11 -4
- package/dist/file-history-capture.js +9 -6
- package/dist/file-history-disclosure.d.ts +7 -5
- package/dist/file-history-disclosure.js +7 -5
- package/dist/fleet/drain-entry.d.ts +4 -0
- package/dist/fleet/engine-signal.d.ts +12 -29
- package/dist/fleet/engine-signal.js +1 -7
- package/dist/fleet-client.js +2 -5
- package/dist/gate-settlement.d.ts +1 -8
- package/dist/gate-settlement.js +0 -4
- package/dist/history-anchor.js +1 -1
- package/dist/hitl-delivery.d.ts +2 -3
- package/dist/hitl-delivery.js +0 -2
- package/dist/hooks/hook-llm.js +4 -2
- package/dist/hooks/hook-runner.d.ts +3 -2
- package/dist/hooks/hook-runner.js +18 -3
- package/dist/host-decision.d.ts +11 -11
- package/dist/host-lsp-manager.d.ts +2 -2
- package/dist/http/active-run-conflict.d.ts +35 -2
- package/dist/http/active-run-conflict.js +48 -19
- package/dist/http/admission.js +17 -2
- package/dist/http/approval-sweeps.d.ts +1 -1
- package/dist/http/approval-sweeps.js +10 -7
- package/dist/http/checkpoint-ctx.d.ts +4 -0
- package/dist/http/checkpoint-ctx.js +2 -0
- package/dist/http/dispatch.d.ts +8 -3
- package/dist/http/dispatch.js +59 -32
- package/dist/http/durable-run-leg.js +16 -17
- package/dist/http/health-reader.d.ts +16 -9
- package/dist/http/health-reader.js +2 -1
- package/dist/http/health-self-report.d.ts +9 -1
- package/dist/http/health-self-report.js +3 -1
- package/dist/http/owner-access.d.ts +33 -14
- package/dist/http/owner-access.js +40 -10
- package/dist/http/principal-gate.d.ts +49 -21
- package/dist/http/principal-gate.js +61 -11
- package/dist/http/request-channel.d.ts +23 -0
- package/dist/http/request-channel.js +9 -0
- package/dist/http/request-guards.js +17 -2
- package/dist/http/resume-ctx-read.js +42 -3
- package/dist/http/resume-legs.d.ts +4 -3
- package/dist/http/resume-legs.js +367 -117
- package/dist/http/route-ctx.d.ts +91 -15
- package/dist/http/route-ctx.js +17 -0
- package/dist/http/route-table.d.ts +5 -1
- package/dist/http/route-table.js +4 -0
- package/dist/http/routes/admin-config-refresh.js +3 -3
- package/dist/http/routes/admin-drain.d.ts +3 -0
- package/dist/http/routes/admin-drain.js +7 -7
- package/dist/http/routes/admin-memory-optout.d.ts +1 -1
- package/dist/http/routes/admin-memory-optout.js +3 -3
- package/dist/http/routes/adoption.js +3 -5
- package/dist/http/routes/agents-roster.js +2 -3
- package/dist/http/routes/approvals-assistant.d.ts +2 -1
- package/dist/http/routes/approvals-assistant.js +99 -51
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/capabilities.d.ts +4 -0
- package/dist/http/routes/capabilities.js +38 -10
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.js +1 -1
- package/dist/http/routes/diagnostics.d.ts +3 -3
- package/dist/http/routes/diagnostics.js +19 -7
- package/dist/http/routes/fleet.js +10 -8
- package/dist/http/routes/images.js +10 -10
- package/dist/http/routes/memory-bundle.js +3 -3
- package/dist/http/routes/memory-compliance.js +3 -3
- package/dist/http/routes/memory-consolidation.js +2 -2
- package/dist/http/routes/memory-origin.js +3 -3
- package/dist/http/routes/memory-policy.js +2 -2
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/projects.d.ts +3 -2
- package/dist/http/routes/projects.js +4 -5
- package/dist/http/routes/retention-ops.js +3 -3
- package/dist/http/routes/rules.js +5 -5
- package/dist/http/routes/run-permission-mode.d.ts +2 -1
- package/dist/http/routes/run-permission-mode.js +2 -2
- package/dist/http/routes/runs.d.ts +4 -9
- package/dist/http/routes/runs.js +171 -65
- package/dist/http/routes/session-sync.d.ts +22 -9
- package/dist/http/routes/session-sync.js +204 -107
- package/dist/http/routes/sessions-list.js +13 -7
- package/dist/http/routes/sessions.js +30 -15
- package/dist/http/routes/tasks.js +46 -41
- package/dist/http/routes/trace-usage.js +2 -2
- package/dist/http/routes/workflows.js +1 -1
- package/dist/http/server.d.ts +30 -30
- package/dist/http/server.js +16 -4
- package/dist/http/submit-ctx.d.ts +1 -1
- package/dist/http/submit-ctx.js +7 -4
- package/dist/http/wire-types.d.ts +14 -4
- package/dist/human-facing-args.d.ts +33 -0
- package/dist/human-facing-args.js +33 -0
- package/dist/identity-source.d.ts +20 -3
- package/dist/identity-source.js +14 -0
- package/dist/index.d.ts +5 -1
- package/dist/k8s-api-credentials.d.ts +29 -0
- package/dist/k8s-api-credentials.js +25 -0
- package/dist/lane-home-probe.d.ts +3 -7
- package/dist/lane-home-probe.js +2 -2
- package/dist/leader/diffup.d.ts +19 -0
- package/dist/leader/diffup.js +7 -0
- package/dist/leader/leader.d.ts +116 -11
- package/dist/leader/leader.js +69 -5
- package/dist/leader/repair-wire.js +2 -2
- package/dist/leader/run-entry.d.ts +2 -1
- package/dist/leader/run-entry.js +1 -1
- package/dist/leader/wire.d.ts +42 -132
- package/dist/leader/wire.js +81 -67
- package/dist/leg-facts.d.ts +13 -5
- package/dist/leg-facts.js +2 -1
- package/dist/memory-scope.d.ts +23 -11
- package/dist/memory-scope.js +18 -6
- package/dist/memory-sync-client.d.ts +30 -2
- package/dist/memory-sync-client.js +16 -9
- package/dist/model-entry-headers.d.ts +9 -10
- package/dist/model-entry-headers.js +0 -4
- package/dist/model-entry-refusal.d.ts +7 -4
- package/dist/model-entry-refusal.js +11 -5
- package/dist/model-plane-face.d.ts +1 -1
- package/dist/model-plane-face.js +3 -1
- package/dist/model-route-endpoint.d.ts +13 -7
- package/dist/model-route-endpoint.js +14 -11
- package/dist/model-select.d.ts +22 -0
- package/dist/model-select.js +9 -0
- package/dist/model-unreachable-notice.d.ts +11 -0
- package/dist/model-unreachable-notice.js +4 -4
- package/dist/object-store-buckets.d.ts +640 -6
- package/dist/object-store-buckets.js +166 -0
- package/dist/observability/err-text.d.ts +7 -0
- package/dist/observability/err-text.js +5 -0
- package/dist/observability/fail-open.d.ts +25 -17
- package/dist/observability/fail-open.js +25 -17
- package/dist/observability/logger.js +3 -1
- package/dist/observability/metrics.js +1 -0
- package/dist/operator-roster.d.ts +68 -0
- package/dist/operator-roster.js +32 -0
- package/dist/orchestration/workflow-notify-journal.d.ts +18 -1
- package/dist/orchestration/workflow-notify-journal.js +12 -1
- package/dist/orchestration/workflow-park-decision.d.ts +70 -18
- package/dist/orchestration/workflow-park-decision.js +49 -10
- package/dist/orchestration/workflow-park-holder.d.ts +65 -0
- package/dist/orchestration/workflow-park-holder.js +98 -0
- package/dist/orchestration/workflow-record-fence.d.ts +36 -0
- package/dist/orchestration/workflow-record-fence.js +42 -0
- package/dist/outbound-dispatcher.d.ts +71 -8
- package/dist/outbound-dispatcher.js +48 -7
- package/dist/owner-faces.d.ts +2 -2
- package/dist/parked-decide.d.ts +106 -55
- package/dist/parked-decide.js +153 -117
- package/dist/peer-directory.d.ts +2 -2
- package/dist/peer-inbound-face.d.ts +2 -6
- package/dist/peer-inbound-face.js +0 -3
- package/dist/permission-mode-admission.d.ts +74 -5
- package/dist/permission-mode-admission.js +56 -3
- package/dist/plugins/adoption-log-sql.d.ts +3 -1
- package/dist/plugins/adoption-log-sql.js +7 -1
- package/dist/plugins/approval-ask-store-file.d.ts +14 -2
- package/dist/plugins/approval-ask-store-file.js +11 -0
- package/dist/plugins/approval-ask-store-memory.d.ts +10 -1
- package/dist/plugins/approval-ask-store-memory.js +35 -10
- package/dist/plugins/approval-ask-store-sql.d.ts +69 -4
- package/dist/plugins/approval-ask-store-sql.js +45 -5
- package/dist/plugins/approval-exemption-store.js +3 -0
- package/dist/plugins/approval-nonce-store.js +2 -0
- package/dist/plugins/blob-backend.d.ts +83 -7
- package/dist/plugins/blob-backend.js +57 -6
- package/dist/plugins/breaker-state-sql.js +2 -0
- package/dist/plugins/caching-session-store.d.ts +9 -15
- package/dist/plugins/caching-session-store.js +6 -0
- package/dist/plugins/checkpoint-index-columns.d.ts +20 -16
- package/dist/plugins/checkpoint-index-columns.js +3 -6
- package/dist/plugins/checkpoint-store-face.d.ts +119 -61
- package/dist/plugins/checkpoint-store-face.js +134 -55
- package/dist/plugins/device-store-sql.js +6 -0
- package/dist/plugins/error-origin.d.ts +18 -0
- package/dist/plugins/error-origin.js +10 -0
- package/dist/plugins/execution-placement-sql.js +6 -6
- package/dist/plugins/image-bake-store-sql.js +6 -0
- package/dist/plugins/image-index-sql.js +4 -0
- package/dist/plugins/landed-attendants.d.ts +212 -0
- package/dist/plugins/landed-attendants.js +161 -0
- package/dist/plugins/leader-run-store-sql.js +4 -0
- package/dist/plugins/local-checkpoint-store.d.ts +13 -3
- package/dist/plugins/local-checkpoint-store.js +38 -49
- package/dist/plugins/local-session-live-reference.d.ts +40 -0
- package/dist/plugins/local-session-live-reference.js +39 -0
- package/dist/plugins/local-session-store.d.ts +71 -33
- package/dist/plugins/local-session-store.js +129 -27
- package/dist/plugins/memory-engine-pg.js +4 -0
- package/dist/plugins/memory-engine-sql-apply.js +5 -2
- package/dist/plugins/memory-engine-tidb.js +4 -0
- package/dist/plugins/memory-optout-grant-store-sql.js +4 -0
- package/dist/plugins/memory-sync-store-pg.js +5 -0
- package/dist/plugins/memory-sync-store-tidb.js +5 -0
- package/dist/plugins/one-time-migrations.d.ts +104 -80
- package/dist/plugins/one-time-migrations.js +226 -132
- package/dist/plugins/org-delivery-quota-store.js +4 -1
- package/dist/plugins/outcome-ledger-sql.js +2 -0
- package/dist/plugins/permission-rule-store-sql.js +11 -4
- package/dist/plugins/pg-cost-quota.js +4 -0
- package/dist/plugins/pg-pool.js +35 -10
- package/dist/plugins/pg-rate-limiter.js +2 -0
- package/dist/plugins/posix-shell-fs.d.ts +6 -1
- package/dist/plugins/posix-shell-fs.js +4 -1
- package/dist/plugins/remote-env-adb.d.ts +19 -15
- package/dist/plugins/remote-env-adb.js +41 -15
- package/dist/plugins/remote-env-connect-seat.d.ts +105 -0
- package/dist/plugins/remote-env-connect-seat.js +72 -0
- package/dist/plugins/remote-env-device.d.ts +22 -5
- package/dist/plugins/remote-env-device.js +106 -8
- package/dist/plugins/remote-env-e2b.d.ts +15 -6
- package/dist/plugins/remote-env-e2b.js +42 -32
- package/dist/plugins/remote-env-file-error.js +6 -2
- package/dist/plugins/remote-env-host.d.ts +46 -10
- package/dist/plugins/remote-env-host.js +124 -52
- package/dist/plugins/remote-env-k8s.d.ts +109 -41
- package/dist/plugins/remote-env-k8s.js +160 -54
- package/dist/plugins/remote-env-local-docker.d.ts +13 -8
- package/dist/plugins/remote-env-local-docker.js +34 -41
- package/dist/plugins/remote-env-ssh.d.ts +18 -12
- package/dist/plugins/remote-env-ssh.js +60 -59
- package/dist/plugins/remote-shell.d.ts +98 -1
- package/dist/plugins/remote-shell.js +218 -0
- package/dist/plugins/replica-registration.d.ts +1 -1
- package/dist/plugins/replica-registration.js +1 -1
- package/dist/plugins/resume-anchor-store-sql.d.ts +11 -2
- package/dist/plugins/resume-anchor-store-sql.js +12 -5
- package/dist/plugins/retention-lane-store-sql.js +4 -0
- package/dist/plugins/retention-sql.d.ts +20 -2
- package/dist/plugins/retention-sql.js +11 -0
- package/dist/plugins/run-store-sql.d.ts +21 -2
- package/dist/plugins/run-store-sql.js +31 -7
- package/dist/plugins/s3-presign.d.ts +23 -0
- package/dist/plugins/s3-presign.js +37 -3
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +1 -1
- package/dist/plugins/scenario-prefix-switch-m42.js +2 -2
- package/dist/plugins/scheduler-support.d.ts +2 -2
- package/dist/plugins/scheduler-support.js +0 -3
- package/dist/plugins/schema-consistency.d.ts +4 -2
- package/dist/plugins/schema-consistency.js +19 -2
- package/dist/plugins/schema-indexes.js +2 -0
- package/dist/plugins/send-file-ledger.d.ts +2 -2
- package/dist/plugins/send-file-ledger.js +5 -2
- package/dist/plugins/send-user-file.d.ts +3 -4
- package/dist/plugins/send-user-file.js +56 -52
- package/dist/plugins/serving-requirement.d.ts +26 -7
- package/dist/plugins/serving-requirement.js +11 -4
- package/dist/plugins/session-birth.d.ts +6 -2
- package/dist/plugins/session-blob-claim-token.d.ts +15 -0
- package/dist/plugins/session-blob-claim-token.js +20 -0
- package/dist/plugins/session-blob-namespace.d.ts +46 -0
- package/dist/plugins/session-blob-namespace.js +116 -0
- package/dist/plugins/session-capture-record-store-sql.js +2 -0
- package/dist/plugins/session-ext-table.d.ts +14 -1
- package/dist/plugins/session-ext-table.js +5 -1
- package/dist/plugins/session-row-sql.d.ts +49 -2
- package/dist/plugins/session-row-sql.js +56 -13
- package/dist/plugins/session-store-sql.d.ts +34 -18
- package/dist/plugins/session-store-sql.js +98 -17
- package/dist/plugins/shared-memory-store-sql.d.ts +1 -0
- package/dist/plugins/shared-memory-store-sql.js +6 -2
- package/dist/plugins/snapshot-bucket-presence.d.ts +25 -2
- package/dist/plugins/snapshot-bucket-presence.js +8 -2
- package/dist/plugins/sql-driver.d.ts +2 -1
- package/dist/plugins/sql-driver.js +18 -3
- package/dist/plugins/sql-errors.d.ts +11 -6
- package/dist/plugins/sql-errors.js +5 -6
- package/dist/plugins/sql-json-column.d.ts +1 -1
- package/dist/plugins/stop-then-start-sentence.d.ts +10 -4
- package/dist/plugins/stop-then-start-sentence.js +14 -10
- package/dist/plugins/stop-then-start.d.ts +109 -0
- package/dist/plugins/stop-then-start.js +104 -0
- package/dist/plugins/store-backend.d.ts +84 -15
- package/dist/plugins/store-backend.js +236 -72
- package/dist/plugins/store-boundary.d.ts +57 -0
- package/dist/plugins/store-boundary.js +139 -0
- package/dist/plugins/store-contracts.d.ts +17 -0
- package/dist/plugins/store-fault-sentence-m53.d.ts +7 -0
- package/dist/plugins/store-fault-sentence-m53.js +25 -0
- package/dist/plugins/store-fault.d.ts +26 -7
- package/dist/plugins/store-fault.js +18 -2
- package/dist/plugins/task-attachment-store.d.ts +2 -1
- package/dist/plugins/task-attachment-store.js +14 -1
- package/dist/plugins/task-list-store-sql.d.ts +2 -2
- package/dist/plugins/task-list-store-sql.js +10 -8
- package/dist/plugins/tidb-cost-quota.js +4 -0
- package/dist/plugins/tidb-pool.js +21 -25
- package/dist/plugins/tidb-rate-limiter.js +4 -0
- package/dist/plugins/user-input-ledger-sql.js +4 -0
- package/dist/plugins/workflow-run-store-sql.d.ts +28 -10
- package/dist/plugins/workflow-run-store-sql.js +64 -4
- package/dist/plugins/workspace-custody.d.ts +4 -3
- package/dist/plugins/workspace-fill.d.ts +4 -7
- package/dist/plugins/workspace-fill.js +2 -1
- package/dist/plugins/write-behind-counter.js +5 -0
- package/dist/project-context.d.ts +0 -2
- package/dist/project-context.js +4 -8
- package/dist/project-registry.d.ts +46 -0
- package/dist/project-registry.js +44 -0
- package/dist/question.d.ts +2 -1
- package/dist/question.js +5 -13
- package/dist/request-form.d.ts +6 -1
- package/dist/request-form.js +4 -1
- package/dist/request-key-closure.js +1 -1
- package/dist/request-value-closure.d.ts +4 -0
- package/dist/request-value-closure.js +10 -0
- package/dist/rule-issue-reading.d.ts +1 -1
- package/dist/rules-consent.d.ts +1 -1
- package/dist/run-acceptance.d.ts +3 -2
- package/dist/run-acceptance.js +4 -6
- package/dist/run-local.js +9 -9
- package/dist/runs.d.ts +54 -16
- package/dist/runs.js +67 -13
- package/dist/runtime-governance.d.ts +5 -4
- package/dist/security.d.ts +30 -32
- package/dist/security.js +41 -7
- package/dist/sema-config-dir.d.ts +2 -1
- package/dist/server-secret-env.d.ts +12 -10
- package/dist/server-secret-env.js +24 -15
- package/dist/session-bindings.d.ts +82 -0
- package/dist/session-bindings.js +18 -0
- package/dist/session-children-retire.d.ts +2 -2
- package/dist/session-children-retire.js +2 -6
- package/dist/session-deletion.d.ts +16 -1
- package/dist/session-error-wire.d.ts +3 -3
- package/dist/session-error-wire.js +3 -3
- package/dist/session-incarnation.d.ts +10 -0
- package/dist/session-incarnation.js +10 -1
- package/dist/session-kind.d.ts +57 -0
- package/dist/session-kind.js +22 -0
- package/dist/session-row.d.ts +21 -1
- package/dist/session-row.js +7 -1
- package/dist/session-sync-kernel.d.ts +24 -14
- package/dist/session-sync-kernel.js +3 -6
- package/dist/session-sync.d.ts +25 -103
- package/dist/session-sync.js +14 -76
- package/dist/session-titler.d.ts +10 -3
- package/dist/session-titler.js +19 -6
- package/dist/ssh-host-key.d.ts +5 -0
- package/dist/ssh-host-key.js +3 -0
- package/dist/stores-sql/blob-index-sql.d.ts +30 -9
- package/dist/stores-sql/blob-index-sql.js +40 -21
- package/dist/stores-sql/checkpoint-store-sql.d.ts +54 -27
- package/dist/stores-sql/checkpoint-store-sql.js +70 -146
- package/dist/stores-sql/file-history-store-sql.d.ts +113 -15
- package/dist/stores-sql/file-history-store-sql.js +205 -95
- package/dist/stores-sql/pg-session-storage.d.ts +34 -7
- package/dist/stores-sql/pg-session-storage.js +37 -13
- package/dist/stores-sql/retention-store-sql.d.ts +1 -9
- package/dist/stores-sql/retention-store-sql.js +5 -19
- package/dist/stores-sql/session-policy-store-sql.d.ts +30 -7
- package/dist/stores-sql/session-policy-store-sql.js +61 -44
- package/dist/stores-sql/session-write-hooks.d.ts +11 -0
- package/dist/stores-sql/tidb-session-store.d.ts +58 -7
- package/dist/stores-sql/tidb-session-store.js +37 -13
- package/dist/submission-exit.d.ts +3 -2
- package/dist/submission-exit.js +9 -1
- package/dist/task-cwd.d.ts +2 -2
- package/dist/task-settings.d.ts +7 -5
- package/dist/task-settings.js +3 -3
- package/dist/terminal.d.ts +33 -2
- package/dist/terminal.js +139 -9
- package/dist/tool-approval.d.ts +465 -507
- package/dist/tool-approval.js +606 -1222
- package/dist/trace/core-keyset-guard.d.ts +1 -1
- package/dist/trace/ledger-events.d.ts +3 -3
- package/dist/trace/project.d.ts +2 -3
- package/dist/trace/redact.js +3 -2
- package/dist/trace/self-minted-wire.d.ts +571 -178
- package/dist/trace/self-minted-wire.js +189 -56
- package/dist/web-admin-client/apply-effective.js +2 -2
- package/dist/web-admin-client/read-warnings.d.ts +2 -2
- package/dist/web-admin-client/read-warnings.js +1 -1
- package/dist/web-admin-client/types.d.ts +1 -1
- package/dist/workspace-space.d.ts +10 -4
- package/dist/workspace-space.js +4 -1
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +79 -28
- package/package.json +7 -3
- package/scripts/embed-minimal.mjs +3 -3
- package/wire-changes/server@7.151.0.json +762 -0
- package/wire-changes/server@7.152.0.json +900 -0
- package/dist/config-d-migration.d.ts +0 -37
- package/dist/config-d-migration.js +0 -60
- package/dist/http/session-inherit-env.d.ts +0 -36
- package/dist/http/session-inherit-env.js +0 -6
package/deploy/sema-up/README.md
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
```bash
|
|
7
7
|
# npm 分发姿势(package.json bin 已挂)
|
|
8
|
-
npx -p @sema-agent/server sema-up --profile=full-single --gateway=https://api.deepseek.com/v1 \
|
|
8
|
+
npx -p @sema-agent/server sema-up --profile=full-single --users=single --gateway=https://api.deepseek.com/v1 \
|
|
9
9
|
--model=deepseek-v4-flash --model-key=sk-… -f site.env --yes
|
|
10
|
+
# --users 必填(single = 只给一个人用 | multi = 一个团队):脚本不替你选人数,缺了即拒并给两条出路
|
|
10
11
|
# 或直接跑仓内脚本
|
|
11
12
|
deploy/sema-up/sema-up.sh
|
|
12
13
|
```
|
|
@@ -51,7 +52,7 @@ summary 会打印手动接法。
|
|
|
51
52
|
| flag | 默认 | 说明 |
|
|
52
53
|
|---|---|---|
|
|
53
54
|
| `--profile=P` | 交互问 | `full-single`/`data-center`/`local-plus`/`full-cluster` |
|
|
54
|
-
| `--users=U` |
|
|
55
|
+
| `--users=U` | **必填,没有缺省**(装 agent 的档:`full-single` / `local-plus` / `full-cluster`;`data-center` 不装 agent,不用) | `single`(只给一个人用,超管 turnkey;落 `OPERATOR_SINGLE_USER=true` = 每个调用方都是运维,server 单用户形起服要这一行)/`multi`(一个团队,身份隔离 REQUIRE_PRINCIPAL=true;`OPERATOR_SINGLE_USER=false`)。几个人用是这台部署自己的声明,脚本不替它选(缺省 single 会让忘设人数的团队集群每个调用方都成运维,缺省 multi 同样是替单人部署选):没给旗、`-f` 配置里也没有、这台部署的 `.env` 里也没有上一次落下的事实 ⇒ 拒并给 `--users=single` / `--users=multi` 两条出路(向导里问句的缺省只有事实词,没有事实就没有缺省,空答即拒;`kube-up.sh` / `cluster-up.sh` 单独跑时同一个词是环境变量 `USERS`)。两根键由同一个租户词派生,重跑即按租户词重写(kube 两条 helm 路径把声明写进 values 的 `server.operatorSingleUser`,图表自己不派生,见下「运维声明」);具名运维名单(`OPERATOR_PRINCIPALS`)本脚本不渲 |
|
|
55
56
|
| `--region=R` | `auto` | `cn`/`global`;auto=对 aliyun/npmjs 探测延迟 |
|
|
56
57
|
| `--project=NAME` | `sema` | compose project 名;并行试验/多套共存用。也是工作目录 `~/.sema-up/<名>` 与自动数据根 `<盘>/sema-data/<名>` 的一段 ⇒ 只收小写字母 / 数字 / `-` / `_`,首字符是字母或数字(别的写法在建任何目录之前拒) |
|
|
57
58
|
| `--dry-run` | — | 只打印执行计划,不写 .env、不起容器 |
|
|
@@ -154,6 +155,12 @@ data-center:2c/2G/20G)以下 BLOCK——确实无法稳定部署,提前警告不
|
|
|
154
155
|
- **MinIO**:钉死的 tag(`minio/minio:RELEASE.…`,chart / cluster 静态清单 / compose 三份同值;k8s `imagePullPolicy: IfNotPresent`,不再 `:latest` + `Always`)。换源 = 换整条引用:
|
|
155
156
|
compose 与 kube-up 读环境变量 `MINIO_IMAGE`(kube-up 给了才递给 chart),chart 直接 `--set minio.image=<源>/minio/minio:<tag>`(预灌镜像的节点 `--set minio.pullPolicy=Never`)。
|
|
156
157
|
|
|
158
|
+
## 运维声明(helm 图表的 `server.operatorSingleUser` / `server.requirePrincipal`)
|
|
159
|
+
|
|
160
|
+
「谁是运维」是部署写的声明,图表不替你派生:单人部署写 `server.operatorSingleUser=true`(每个调用方都是运维,env `OPERATOR_SINGLE_USER`),被不止一个人调用的部署写 `server.requirePrincipal=true`(多租;运维由具名名单另给,本图表不渲 `OPERATOR_PRINCIPALS`)。
|
|
161
|
+
两把键都没设 ⇒ `helm template` / `helm upgrade` 渲染即拒,句子就是出路;`server.operatorSingleUser` 只收布尔,字符串渲染即拒;只有 `operatorSingleUser=true` 与 `requirePrincipal=true` 同写才互斥,由服务端起服拒(图表不抄那一判);要用自己 env 补的具名运维名单 `OPERATOR_PRINCIPALS`(本图表不渲它)而不声明单人,写 `server.operatorSingleUser=false`。
|
|
162
|
+
`sema-up` 的 kube 两条 helm 路径(`--kube=existing` / `--kube=k3s`,`--kube=machines` 下 `STACK_ENGINE=helm`)按 `--users` 把 `operatorSingleUser` 写进它生成的 values;自己拼 values 的部署照上面写。
|
|
163
|
+
|
|
157
164
|
## 停驻钥匙的持久卷(三条交付路径同形;helm 图表的 `sealedKey` 块)
|
|
158
165
|
|
|
159
166
|
server 的钥匙保管目录存着停驻任务续跑上下文里请求凭据的封签钥匙(子目录 `checkpoint-ctx-keys/`)和模型钥匙 —— 私钥只在这个目录里、不进库。
|
|
@@ -196,8 +203,8 @@ Helm 形里,未启用 `serverV4pro`、钥匙卷是 `ReadWriteOnce` 的形(`serve
|
|
|
196
203
|
全部凭据生成一次、落 `~/.sema-up/<project>/.env`(0600),重跑**绝不轮换**;
|
|
197
204
|
summary 里管理员密码只显示一次(新生成那次),不进日志不进 git。
|
|
198
205
|
|
|
199
|
-
重跑时租户形与车道同一条规则:**决策 = 显式旗 ∨ 部署事实 ∨
|
|
200
|
-
上一次落下的 `REQUIRE_PRINCIPAL` / `REMOTE_EXEC` —— **不带旗重跑即沿用它**(多租部署、e2b
|
|
206
|
+
重跑时租户形与车道同一条规则:**决策 = 显式旗 ∨ 部署事实 ∨ 表缺省** —— 租户形**没有表缺省**(`--users` 必填:显式旗 ∨ 部署事实,都没有 ⇒ 拒),车道才有。部署事实 = `.env`(与 shell / `-f` 环境)里
|
|
207
|
+
上一次落下的 `REQUIRE_PRINCIPAL` / `REMOTE_EXEC` —— **不带旗重跑即沿用它**(多租部署、e2b 部署都不必再带旗;升级到本版的存量部署零动作,`.env` 里已有 `REQUIRE_PRINCIPAL`);显式
|
|
201
208
|
`--users` / `--sandbox` 与事实不一致 ⇒ 非零退出并点名两处(不静默覆盖;要换就先清掉旧值)。`.env` 与 shell / `-f`
|
|
202
209
|
两处都给了且不同 ⇒ 同样拒。读 `.env` 的这几个键(连同所选车道的必需键,如 `E2B_API_KEY`)只认 sema-up 自己写出的
|
|
203
210
|
**规范形**:一行、行首顶格 `K=<值>`,值是一个词或一对同型引号包住的一个词;`export ` 前缀、键旁空格、`K: v`、
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
{{- with (include "sema.operatorSingleUser" .) }}
|
|
2
|
+
运维声明:server.operatorSingleUser={{ . }} 已原样渲给每只 worker(env OPERATOR_SINGLE_USER);图表不从 server.requirePrincipal 派生它 —— 这是你写下的部署声明。
|
|
3
|
+
{{- else }}
|
|
4
|
+
运维声明:server.operatorSingleUser 未设,图表没有渲 OPERATOR_SINGLE_USER(不从 server.requirePrincipal 派生);单人部署缺这一行、又没有你自己补的具名运维名单 OPERATOR_PRINCIPALS ⇒ 服务端起服拒 —— 补一行 server.operatorSingleUser=true(或补名单)。
|
|
5
|
+
{{- end }}
|
|
1
6
|
{{- $persist := eq (include "sema.sealedKey.enabled" .) "true" }}
|
|
2
7
|
{{- if $persist }}
|
|
3
8
|
停驻封签钥匙:server 的 <数据根>/sealed-key/ 在持久卷 {{ include "sema.sealedKey.claimName" . }}(挂在容器内 {{ include "sema.sealedKey.mountPath" . }},{{ include "sema.sealedKey.accessMode" . }}),重启与换副本都不丢钥匙,停驻的任务照常续跑。PVC 带 helm.sh/resource-policy: keep(helm uninstall 与把 sealedKey.persistence.enabled 改成 false 的 upgrade 都不删它)。
|
|
@@ -113,25 +113,24 @@ false
|
|
|
113
113
|
{{- end -}}
|
|
114
114
|
|
|
115
115
|
{{- /*
|
|
116
|
-
单用户运维声明(env OPERATOR_SINGLE_USER)渲给 worker 的值 =
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
116
|
+
单用户运维声明(env OPERATOR_SINGLE_USER)渲给 worker 的值 = 部署写的显式键 `server.operatorSingleUser`(只收布尔),原样渲:`true` / `false` 逐字,不设 ⇒ 交回空(调用处不出这一行)。
|
|
117
|
+
**图表不替部署派生它**:「谁是运维」是部署的声明;从租户词 `server.requirePrincipal` 推出它(修前:未开 ⇒ `"true"`)会让忘设 `requirePrincipal` 的团队集群升级之后每个调用方都成运维 ——
|
|
118
|
+
服务端拒句里「不止一个人调用 ⇒ 设 REQUIRE_PRINCIPAL」那一道人判,对用模板的人永远不出现。两键都没设 ⇒ 渲染即拒(句子照服务端拒句的两条出路:单人 ⇒ operatorSingleUser;多人 ⇒ requirePrincipal),不静默二选一。
|
|
119
|
+
`requirePrincipal` 在这里只读「设没设」(nil 或空串 = 没设),不读它的值、不抄服务端的布尔词表(两条规则读同一个词表是第二份真源);单人声明与多租的互斥由服务端起服拒(唯一的判官)。
|
|
120
|
+
非布尔 ⇒ 渲染即拒:字符串 "false" 在模板里恒为真,会静默声明人人运维。两只 worker 都调这一只。
|
|
121
121
|
*/ -}}
|
|
122
122
|
{{- define "sema.operatorSingleUser" -}}
|
|
123
|
-
{{- $raw := .Values.server.
|
|
124
|
-
{{- $rp :=
|
|
125
|
-
{{- if
|
|
126
|
-
{{- $rp
|
|
127
|
-
{{-
|
|
128
|
-
{{-
|
|
129
|
-
{{-
|
|
130
|
-
{{-
|
|
131
|
-
{{-
|
|
132
|
-
{{- fail (printf "server.
|
|
123
|
+
{{- $raw := .Values.server.operatorSingleUser -}}
|
|
124
|
+
{{- $rp := .Values.server.requirePrincipal -}}
|
|
125
|
+
{{- if kindIs "invalid" $raw -}}
|
|
126
|
+
{{- if or (kindIs "invalid" $rp) (eq (toString $rp) "") -}}
|
|
127
|
+
{{- fail "neither server.operatorSingleUser nor server.requirePrincipal is set — the chart does not derive the operator declaration from the tenancy setting (a team cluster that forgot requirePrincipal would silently make every caller an operator). Declare it in one line: a deployment used by one person: set server.operatorSingleUser=true (every caller of this deployment is its operator); a deployment called by more than one person is multi-tenant: set server.requirePrincipal=true instead (its operators are then named in OPERATOR_PRINCIPALS); a deployment that names its operators in OPERATOR_PRINCIPALS through its own env (this chart does not render that list) states so with server.operatorSingleUser=false" -}}
|
|
128
|
+
{{- end -}}
|
|
129
|
+
{{- else if kindIs "bool" $raw -}}
|
|
130
|
+
{{- $raw -}}
|
|
131
|
+
{{- else -}}
|
|
132
|
+
{{- fail (printf "server.operatorSingleUser must be a boolean (true or false) or unset, got %s %q — a string such as \"false\" is truthy in a template and would silently declare every caller an operator" (kindOf $raw) (toString $raw)) -}}
|
|
133
133
|
{{- end -}}
|
|
134
|
-
{{- ternary "false" "true" (eq $rp "true") -}}
|
|
135
134
|
{{- end -}}
|
|
136
135
|
|
|
137
136
|
{{- /*
|
|
@@ -61,9 +61,11 @@ spec:
|
|
|
61
61
|
- { name: MODEL_VISION, value: {{ .Values.server.modelVision | quote }} }
|
|
62
62
|
{{/* 租户姿态与主 worker 同值(文件头「同 env 面」的承诺;修前缺席 ⇒ 主 worker 多租时本只仍单用户)。 */}}
|
|
63
63
|
- { name: REQUIRE_PRINCIPAL, value: {{ .Values.server.requirePrincipal | default "false" | quote }} }
|
|
64
|
-
{{/* 单用户运维声明 =
|
|
65
|
-
|
|
66
|
-
|
|
64
|
+
{{/* 单用户运维声明 = 部署写的显式键 server.operatorSingleUser(只收布尔),原样渲;不设 ⇒ 不出这一行。图表不从租户词派生它;
|
|
65
|
+
两键(operatorSingleUser / requirePrincipal)都没设 ⇒ 渲染即拒。判与句子见 _helpers.tpl 的 sema.operatorSingleUser。 */}}
|
|
66
|
+
{{- with (include "sema.operatorSingleUser" .) }}
|
|
67
|
+
- { name: OPERATOR_SINGLE_USER, value: {{ . | quote }} }
|
|
68
|
+
{{- end }}
|
|
67
69
|
- { name: SANDBOX_PKG_SOURCE, value: {{ .Values.server.sandboxPkgSource | quote }} }
|
|
68
70
|
{{/* 车道显式点名(REMOTE_EXEC)。REQUIRE_EXECUTION_LANE 是退役 env(设了即起服拒,拒句指向 REMOTE_EXEC),不再渲。
|
|
69
71
|
下面圈起来的一行取自车道表(lanes.json 的 kube 行),由生成器渲出,不要手改。 */}}
|
|
@@ -72,9 +72,11 @@ spec:
|
|
|
72
72
|
- { name: MODEL_API_KEY, valueFrom: { secretKeyRef: { name: sema-server-env, key: MODEL_API_KEY } } }
|
|
73
73
|
- { name: MODEL_VISION, value: {{ .Values.server.modelVision | quote }} }
|
|
74
74
|
- { name: REQUIRE_PRINCIPAL, value: {{ .Values.server.requirePrincipal | default "false" | quote }} }
|
|
75
|
-
{{/* 单用户运维声明 =
|
|
76
|
-
|
|
77
|
-
|
|
75
|
+
{{/* 单用户运维声明 = 部署写的显式键 server.operatorSingleUser(只收布尔),原样渲;不设 ⇒ 不出这一行。图表不从租户词派生它;
|
|
76
|
+
两键(operatorSingleUser / requirePrincipal)都没设 ⇒ 渲染即拒。判与句子见 _helpers.tpl 的 sema.operatorSingleUser。 */}}
|
|
77
|
+
{{- with (include "sema.operatorSingleUser" .) }}
|
|
78
|
+
- { name: OPERATOR_SINGLE_USER, value: {{ . | quote }} }
|
|
79
|
+
{{- end }}
|
|
78
80
|
- { name: SANDBOX_PKG_SOURCE, value: {{ .Values.server.sandboxPkgSource | quote }} }
|
|
79
81
|
{{/* 车道显式点名(REMOTE_EXEC)。REQUIRE_EXECUTION_LANE 是退役 env(设了即起服拒,拒句指向 REMOTE_EXEC),不再渲。
|
|
80
82
|
下面圈起来的一行取自车道表(lanes.json 的 kube 行),由生成器渲出,不要手改。 */}}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# full-single(单节点 k3s dev/测试)覆盖:1 实例 PG、preferred 反亲和(required 在单机=永久
|
|
2
2
|
# Pending——真踩)、2 副本 server(钥匙卷 RWO,见文末)。用法:
|
|
3
3
|
# helm upgrade --install sema-stack ./chart -n sema --create-namespace \
|
|
4
|
-
# -f chart/values-full-single.yaml --set server.image=… --set …(凭据)
|
|
4
|
+
# -f chart/values-full-single.yaml --set server.image=… --set …(凭据) --set server.operatorSingleUser=true
|
|
5
|
+
# 末尾那一键是运维声明:单节点不等于单用户,本覆盖文件不替你写。只给一个人用 ⇒ server.operatorSingleUser=true;被不止一个人调用 ⇒ 改成 --set server.requirePrincipal=true;
|
|
6
|
+
# 两键都不写渲染即拒(见 values.yaml 的 server 块)。
|
|
5
7
|
pg:
|
|
6
8
|
instances: 1
|
|
7
9
|
antiAffinity: preferred
|
|
@@ -48,7 +48,14 @@ server:
|
|
|
48
48
|
modelId: "" # REQUIRED
|
|
49
49
|
modelApiKey: "" # REQUIRED
|
|
50
50
|
modelVision: "false"
|
|
51
|
-
|
|
51
|
+
# 两把「谁是运维」的键 —— 部署自己写,图表不替部署派生、不给缺省:**两把都没设 ⇒ 渲染即拒**(一句话说清两条出路,不静默二选一)。
|
|
52
|
+
# operatorSingleUser(布尔 true / false;不设 ⇒ 不渲)= 单人部署:这台的每个调用方都是运维(env OPERATOR_SINGLE_USER);只给一个人用的部署写 true。
|
|
53
|
+
# requirePrincipal(env REQUIRE_PRINCIPAL;不设 ⇒ 渲服务端缺省 "false")= 多人部署:身份隔离,运维由具名名单另给(env OPERATOR_PRINCIPALS,本图表不渲);
|
|
54
|
+
# 被不止一个人调用的部署写 true(compose 路径同名 env)。值原样递给服务端读,图表不判词。
|
|
55
|
+
# 只有 operatorSingleUser=true 与 requirePrincipal=true 同写才互斥,由服务端起服拒,图表不抄那一判。operatorSingleUser=false 逐字渲(服务端读 false 与缺席同判):
|
|
56
|
+
# 给自己 env 补了具名运维名单 OPERATOR_PRINCIPALS 的部署用它表态「我不声明单人」。kube-up / cluster-up 按 --users 把 operatorSingleUser 写进 values。
|
|
57
|
+
operatorSingleUser: null
|
|
58
|
+
requirePrincipal: null
|
|
52
59
|
# 耐久审批(env DURABLE_APPROVAL;停驻 / 续跑 / /v1/approvals 整条路由)。留空 = 图表不渲这个 env,开关归引擎按姿态定
|
|
53
60
|
# (单用户 + 有耐久店 ⇒ 开;requirePrincipal=true 的多用户形 ⇒ 关);"true" / "false" = 显式表态,原样渲给每只 worker。
|
|
54
61
|
# sealedKey.persistence.enabled=false 时图表固定渲 "false"(钥匙跨不过重启,停驻行就续不了);此处再写 "true" ⇒ 渲染即拒。
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
#
|
|
8
8
|
# 输入(sema-up.sh 解析 machines.yaml 后注入):
|
|
9
9
|
# MACHINE_COUNT + MACHINE_<i>_{HOST,USER,SSH_KEY,NAME,ROLE,PRIVATE_IP,PUBLIC_IFACE}
|
|
10
|
-
# WORK(状态目录,.env 在此)REGION PROJECT USERS(single|multi
|
|
10
|
+
# WORK(状态目录,.env 在此)REGION PROJECT USERS(single|multi,必填、没有缺省〔重跑沿用 .env 里上一次的事实〕;翻成主 worker 的 REQUIRE_PRINCIPAL 与 OPERATOR_SINGLE_USER)
|
|
11
11
|
# SEMA_SERVER_IMAGE(registry 引用)或 SEMA_SERVER_IMAGE_TAR(本地 docker save tar[.gz])二选一
|
|
12
12
|
# MODEL_GATEWAY_BASEURL MODEL_ID MODEL_API_KEY
|
|
13
13
|
# ALLOW_SMALL_CLUSTER=true 放行 <3 机(dev/CI 单节点验流程;生产必须 >=3 奇数)
|
|
@@ -48,16 +48,16 @@ CNPG_VERSION="${CNPG_VERSION:-1.30.0}" # ⚠ in-tree barman 1.31 移除;升版
|
|
|
48
48
|
LONGHORN_VERSION="${LONGHORN_VERSION:-1.10.0}"
|
|
49
49
|
KATA_VERSION="${KATA_VERSION:-3.21.0}"
|
|
50
50
|
STACK_ENGINE="${STACK_ENGINE:-render}" # sema-stack 装配引擎:render(as-built 渲染 apply,缺省)| helm
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
USERS="${USERS:-}" # 租户形没有缺省(部署自己的声明):经 principal_of_users 翻成 REQUIRE_PRINCIPAL,两条装配路径同一次翻译
|
|
52
|
+
USERS_GIVEN="${USERS:+1}" # 显式给没给(决策见下方 users_decide)
|
|
53
53
|
NODEPORT=30890
|
|
54
54
|
|
|
55
55
|
# 取值旗的形——在对任何一台机器发起 ssh 之前。修前:REGION=eu 当成「非 cn 非 global」、STACK_ENGINE=x 当成 render。
|
|
56
56
|
flag_enum "--region(REGION)" "$REGION" $FLAG_WORDS_REGION
|
|
57
57
|
flag_enum "STACK_ENGINE" "$STACK_ENGINE" $FLAG_WORDS_STACK_ENGINE
|
|
58
|
-
flag_enum "--users(USERS)" "$USERS" $FLAG_WORDS_USERS
|
|
59
|
-
# 租户形 = 显式 USERS ∨
|
|
60
|
-
#
|
|
58
|
+
if [ -n "$USERS_GIVEN" ]; then flag_enum "--users(USERS)" "$USERS" $FLAG_WORDS_USERS; fi # 没给的由 users_decide 判(事实 ∨ 拒)
|
|
59
|
+
# 租户形 = 显式 USERS ∨ 上一次落下的部署事实;都没有 ⇒ 拒(没有缺省;lib/flagshape.sh 的 users_decide / flag_users_required)——在任何 ssh 之前判,
|
|
60
|
+
# 不带旗的重跑不会把多租部署降成单用户,首装忘设人数的部署也不会被脚本替选。
|
|
61
61
|
ENVF="$WORK/.env"
|
|
62
62
|
users_decide "$USERS_GIVEN"
|
|
63
63
|
log "租户形 users=$USERS(REQUIRE_PRINCIPAL=$(principal_of_users "$USERS"))"
|
|
@@ -316,6 +316,7 @@ if [ "$STACK_ENGINE" = "helm" ]; then
|
|
|
316
316
|
V_PKG_SOURCE="$([ "$REGION" = "global" ] && echo global || echo '')" \
|
|
317
317
|
V_PG_INSTANCES="$PG_INSTANCES" V_PG_AA="$PG_AA" V_REPLICAS="$SERVER_REPLICAS" \
|
|
318
318
|
V_REQ_PRINCIPAL="$(principal_of_users "$USERS")" \
|
|
319
|
+
V_OPERATOR_SINGLE_USER="$(operator_single_user_of_users "$USERS")" \
|
|
319
320
|
python3 - > "$VALSF" < "$HERE/lib/helm-values-cluster.py"
|
|
320
321
|
)
|
|
321
322
|
[ -s "$VALSF" ] || die "helm values 生成失败"
|
|
@@ -51,8 +51,8 @@ PROJECT="${PROJECT:-sema}"
|
|
|
51
51
|
REGION="${REGION:-global}"
|
|
52
52
|
KUBE_MODE="${KUBE_MODE:?KUBE_MODE 未设置(existing|k3s)}"
|
|
53
53
|
DRY_RUN="${DRY_RUN:-false}"
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
USERS="${USERS:-}" # 租户形没有缺省(部署自己的声明):显式 USERS ∨ 上一次落在 .env 的事实,都没有 ⇒ 拒(下方 users_decide 调 flag_users_required)
|
|
55
|
+
USERS_GIVEN="${USERS:+1}" # 显式给没给(决策见下方 users_decide)
|
|
56
56
|
REGISTRY_ENABLED="${REGISTRY_ENABLED:-true}"
|
|
57
57
|
GIT_MODE="${GIT_MODE:-none}"
|
|
58
58
|
NAMESPACE="${NAMESPACE:-sema}"
|
|
@@ -64,12 +64,12 @@ K3S_CHANNEL="${K3S_CHANNEL:-stable}"
|
|
|
64
64
|
# 修前:DRY_RUN=1 ≠ true ⇒ 当成真装;REGISTRY_ENABLED=yes 当关;USERS=team 当 single;KUBE_MODE=foo 走 existing 那一臂。
|
|
65
65
|
flag_enum "--kube(KUBE_MODE)" "$KUBE_MODE" $FLAG_WORDS_KUBE_SINGLE # machines 走 cluster-up.sh,不进本脚本
|
|
66
66
|
flag_bool "DRY_RUN(--dry-run)" "$DRY_RUN"
|
|
67
|
-
flag_enum "--users(USERS)" "$USERS" $FLAG_WORDS_USERS
|
|
67
|
+
if [ -n "$USERS_GIVEN" ]; then flag_enum "--users(USERS)" "$USERS" $FLAG_WORDS_USERS; fi # 没给的由 users_decide 判(事实 ∨ 拒)
|
|
68
68
|
flag_bool "--registry(REGISTRY_ENABLED)" "$REGISTRY_ENABLED"
|
|
69
69
|
flag_enum "--git(GIT_MODE)" "$GIT_MODE" $FLAG_WORDS_GIT
|
|
70
70
|
flag_enum "--region(REGION)" "$REGION" $FLAG_WORDS_REGION
|
|
71
|
-
# 租户形 = 显式 USERS ∨
|
|
72
|
-
#
|
|
71
|
+
# 租户形 = 显式 USERS ∨ 上一次落下的部署事实;都没有 ⇒ 拒(没有缺省;规则与拒句在 lib/flagshape.sh 的 users_decide / flag_users_required)——
|
|
72
|
+
# 在动集群之前判,不带旗的重跑不会把多租部署降成单用户,首装忘设人数的部署也不会被脚本替选。
|
|
73
73
|
ENVF="$WORK/.env"
|
|
74
74
|
users_decide "$USERS_GIVEN"
|
|
75
75
|
|
|
@@ -222,7 +222,7 @@ helm_values() { # helm_values <giteaBaseUrl> <oauthId> <oauthSecret>
|
|
|
222
222
|
V_MODEL_GATEWAY="$MODEL_GATEWAY_BASEURL" V_MODEL_ID="$MODEL_ID" \
|
|
223
223
|
V_SERVER_IMAGE="$SEMA_SERVER_IMAGE" V_REPLICAS="$SERVER_REPLICAS" \
|
|
224
224
|
V_PG_INSTANCES="$PG_INSTANCES" V_PG_AA="$PG_AA" V_SC="$STORAGE_CLASS" V_SK_SC="$SEALED_KEY_SC" \
|
|
225
|
-
V_RT_CLASS="$RUNTIME_CLASS" V_REQ_PRINCIPAL="$(principal_of_users "$USERS")" \
|
|
225
|
+
V_RT_CLASS="$RUNTIME_CLASS" V_REQ_PRINCIPAL="$(principal_of_users "$USERS")" V_OPERATOR_SINGLE_USER="$(operator_single_user_of_users "$USERS")" \
|
|
226
226
|
V_PKG_SOURCE="$([ "$REGION" = "global" ] && echo global || echo '')" \
|
|
227
227
|
V_REG_ENABLED="$REGISTRY_ENABLED" V_REG_IMAGE="${SEMA_REGISTRY_IMAGE:-}" \
|
|
228
228
|
V_REG_PW="${REGISTRY_ADMIN_PASSWORD:-}" V_REG_SS="${REGISTRY_SESSION_SECRET:-}" V_REG_PT="${REGISTRY_PULL_TOKEN:-}" \
|
|
@@ -18,26 +18,54 @@
|
|
|
18
18
|
# ── 词表(单一属主)──────────────────────────────────────────────────────────────────────────────
|
|
19
19
|
FLAG_WORDS_PROFILE="full-single data-center local-plus full-cluster"
|
|
20
20
|
FLAG_WORDS_USERS="single multi"
|
|
21
|
+
# 租户形的释义 —— 拒句(flag_users_required)按词表逐词取,与词表同批改(词表加一个词而这里没有它 ⇒ 拒句生成处非零退出,不静默少一条出路)。
|
|
22
|
+
users_gloss() {
|
|
23
|
+
case "$1" in
|
|
24
|
+
single) printf '%s' "只给一个人用:这台部署的每个调用方都是它的运维,身份隔离关" ;;
|
|
25
|
+
multi) printf '%s' "被不止一个人调用(团队):身份隔离开,运维由具名名单 OPERATOR_PRINCIPALS 另给" ;;
|
|
26
|
+
*) return 1 ;;
|
|
27
|
+
esac
|
|
28
|
+
}
|
|
21
29
|
# 租户形 ⇒ 容器上 REQUIRE_PRINCIPAL 的值 —— 这条翻译的**唯一**定义(7.105.0 从 sema-up.sh 搬来):sema-up 的 compose 生成段 /
|
|
22
30
|
# 事实核对,kube-up 的 helm values,cluster-up 的渲染清单与 helm values 同调这一只(修前 kube-up 另写一份同义翻译;
|
|
23
|
-
# cluster-up 一份都没有 ⇒ --users=multi 在 --kube=machines 路径上被静默丢成单用户)
|
|
24
|
-
|
|
31
|
+
# cluster-up 一份都没有 ⇒ --users=multi 在 --kube=machines 路径上被静默丢成单用户)。**闭集**:只认 single / multi 两词,
|
|
32
|
+
# 别的词(含空串)⇒ 非零退出、零输出 —— 不再有「认不出的词当 single」那一臂(缺省派生藏在翻译里,就是部署脚本替部署选了人数)。
|
|
33
|
+
principal_of_users() { case "$1" in multi) echo true ;; single) echo false ;; *) return 1 ;; esac; }
|
|
25
34
|
# 租户形 ⇒ 单用户运维声明 OPERATOR_SINGLE_USER 的值(唯一定义;三只脚本 / 渲染段同调):server 装配运维面时要单用户部署说出谁是运维,
|
|
26
35
|
# 不声明不起服(声明与具名名单 OPERATOR_PRINCIPALS 二选一;本工具渲前者)。single = 这台只有一个人 ⇒ 他就是运维(true);
|
|
27
|
-
# multi = 多租,运维由具名名单另给 ⇒ 不声明(false;多租形上声明本身会被 server 拒)
|
|
28
|
-
|
|
36
|
+
# multi = 多租,运维由具名名单另给 ⇒ 不声明(false;多租形上声明本身会被 server 拒)。同样是闭集(别的词 / 空串 ⇒ 非零、零输出)。
|
|
37
|
+
# 这句翻译只翻**部署自己给的那一词**(`--users` / `-f` 配置 / 这台部署上一次落下的事实 / 向导里人答的那一句);词没有给 ⇒ 过不到这里(见 users_decide /
|
|
38
|
+
# flag_users_required)。helm 图表不派生它:kube-up / cluster-up 的 helm 路径把这一句的结果写进 values 的 server.operatorSingleUser。
|
|
39
|
+
operator_single_user_of_users() { case "$1" in single) echo true ;; multi) echo false ;; *) return 1 ;; esac; }
|
|
40
|
+
# flag_users_required <称呼> —— `--users`(几个人用)**必填,没有缺省**:这一词是部署自己的声明,部署脚本 / 模板不替它选。缺省 single 会让
|
|
41
|
+
# 用模板起团队集群又忘设人数的部署每个调用方都成运维(服务端拒句里「不止一个人调用 ⇒ 设 REQUIRE_PRINCIPAL」那一道人判,对用脚本的人永远不出现);
|
|
42
|
+
# 缺省 multi 同样是替部署选(替单人部署开身份隔离)。拒 = log 两行 + exit 1。**拒句只在这里写一次**(sema-up / kube-up / cluster-up 同调;词从
|
|
43
|
+
# FLAG_WORDS_USERS 取,释义从 users_gloss 取),与随包 helm 图表的「两键都没设 ⇒ 渲染即拒」同一律同一组出路。
|
|
44
|
+
flag_users_required() {
|
|
45
|
+
local w g out=""
|
|
46
|
+
for w in $FLAG_WORDS_USERS; do
|
|
47
|
+
g="$(users_gloss "$w")" || { log "⛔ 内部不一致:租户词 $w 在 FLAG_WORDS_USERS 里却没有释义 —— 词表与 users_gloss 要同批改"; exit 1; }
|
|
48
|
+
out="${out:+$out / }--users=$w($g)"
|
|
49
|
+
done
|
|
50
|
+
log "⛔ $1 没给 —— 几个人用是这台部署自己的声明:部署脚本不替你选(缺省 single = 忘设人数的团队集群每个调用方都成运维;缺省 multi = 替单人部署开身份隔离)"
|
|
51
|
+
log " ↳ 下一步(二选一):$out;kube-up.sh / cluster-up.sh 单独跑时同一个词写成环境变量 USERS=<词>"
|
|
52
|
+
exit 1
|
|
53
|
+
}
|
|
29
54
|
|
|
30
55
|
# users_decide <显式给了 USERS 吗(1 / 空)> —— kube 两条装配路径(kube-up / cluster-up)的租户形决策,与 sema-up 的
|
|
31
|
-
# compose 档同一条规则:**决策 = 显式 USERS ∨ 上一次落在 $ENVF 的部署事实 REQUIRE_PRINCIPAL
|
|
32
|
-
#
|
|
56
|
+
# compose 档同一条规则:**决策 = 显式 USERS ∨ 上一次落在 $ENVF 的部署事实 REQUIRE_PRINCIPAL;都没有 ⇒ 拒(flag_users_required,没有缺省)**;
|
|
57
|
+
# 显式值与事实不一致 ⇒ 拒并点名两处(不静默把一台多租部署降成单用户,也不静默把单用户升成多租)。事实 → 租户词只经
|
|
33
58
|
# principal_of_users 反查(两词逐个过正向比,不另写反表);认不出的事实值 ⇒ 拒。设 USERS。
|
|
34
59
|
# codex 一轮 [high]:machines 路径开始认 --users 之后,一次不带旗的重跑会拿缺省 single 把多租部署的
|
|
35
|
-
# REQUIRE_PRINCIPAL 翻回 false(kube-up 路径此前就同形)—— 事实由两只脚本各自在写凭据的同一处 resetk
|
|
60
|
+
# REQUIRE_PRINCIPAL 翻回 false(kube-up 路径此前就同形)—— 事实由两只脚本各自在写凭据的同一处 resetk 落盘;缺省 single 本身随后退役(没有缺省)。
|
|
36
61
|
# 调用方先 source lib/envf.sh 并定好 ENVF(文件可以还不存在 = 首装,无事实)。
|
|
37
62
|
users_decide() {
|
|
38
63
|
local given="$1" fact fact_users="" u
|
|
39
64
|
fact="$(envf_get REQUIRE_PRINCIPAL)" || exit 1
|
|
40
|
-
[ -
|
|
65
|
+
if [ -z "$fact" ]; then
|
|
66
|
+
[ -n "$given" ] || flag_users_required "--users(USERS)"
|
|
67
|
+
return 0
|
|
68
|
+
fi
|
|
41
69
|
for u in $FLAG_WORDS_USERS; do [ "$(principal_of_users "$u")" = "$fact" ] && fact_users="$u"; done
|
|
42
70
|
if [ -z "$fact_users" ]; then
|
|
43
71
|
log "⛔ 部署事实 $ENVF 里 REQUIRE_PRINCIPAL=$(flag_show "$fact"):本工具只读自己写出的两形 $(principal_of_users multi) / $(principal_of_users single)"
|
|
@@ -10,6 +10,8 @@ print(json.dumps({
|
|
|
10
10
|
"modelGatewayBaseurl": e["V_MODEL_GATEWAY"], "modelId": e["V_MODEL_ID"],
|
|
11
11
|
"modelApiKey": e["V_MODEL_KEY"], "sandboxPkgSource": e["V_PKG_SOURCE"],
|
|
12
12
|
"requirePrincipal": e["V_REQ_PRINCIPAL"],
|
|
13
|
+
# 单用户运维声明由部署工具按 --users 写(图表不派生);值是 flagshape 那一句翻译的 true / false,JSON 布尔 = 图表只收的类型。
|
|
14
|
+
"operatorSingleUser": e["V_OPERATOR_SINGLE_USER"] == "true",
|
|
13
15
|
},
|
|
14
16
|
# chart 0.3.0 起 registry.enabled 默认 true(单机档语义)——machines 多机路径的 registry/git
|
|
15
17
|
# 面还没接线,必须显式关,不然 helm 撞 registry.image required(2026-07-12 自查)
|
|
@@ -17,6 +17,8 @@ v = {
|
|
|
17
17
|
"serviceAuthToken": e["V_SVC_TOKEN"], "modelGatewayBaseurl": e["V_MODEL_GATEWAY"],
|
|
18
18
|
"modelId": e["V_MODEL_ID"], "modelApiKey": e["V_MODEL_KEY"],
|
|
19
19
|
"sandboxPkgSource": e["V_PKG_SOURCE"], "requirePrincipal": e["V_REQ_PRINCIPAL"],
|
|
20
|
+
# 单用户运维声明由部署工具按 --users 写(图表不派生);值是 flagshape 那一句翻译的 true / false,JSON 布尔 = 图表只收的类型。
|
|
21
|
+
"operatorSingleUser": e["V_OPERATOR_SINGLE_USER"] == "true",
|
|
20
22
|
},
|
|
21
23
|
"sandbox": {"runtimeClass": e["V_RT_CLASS"],
|
|
22
24
|
"networkPolicy": {"nodeCidrs": json.loads(e["V_NODE_CIDRS"])}},
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
# 凭据二选一:password(bootstrap 用它铺 ssh key,不落盘不入日志)或 ssh_key(已互信)。
|
|
4
4
|
profile: full-cluster # full-cluster | full-single | data-center | local-plus
|
|
5
5
|
region: auto # auto | cn | global(auto=连通性探测,--region 可覆盖)
|
|
6
|
-
users: single
|
|
6
|
+
# users: single|multi # 必填(这里不写缺省,也不替你选):几个人用是这台部署自己的声明。取消注释写一个,或每次带 sema-up 的 --users=<词>;
|
|
7
|
+
# # single = 只给一个人用(每个调用方都是运维;超管 turnkey)| multi = 一个团队(身份隔离+能力默认全开,运维由具名名单另给)。
|
|
8
|
+
# # 重跑沿用 ~/.sema-up/<project>/.env 里上一次落下的,不必再写;都没有 ⇒ sema-up 拒并给两条出路。
|
|
7
9
|
# server_image: ghcr.io/sema-agent/sema-server:<tag> # 引擎镜像 registry 引用(GHCR/Docker Hub 公开仓,
|
|
8
10
|
# # 匿名可拉;CN 兜底=内网 Gitea registry。SWR 已弃用 2026-07-13);
|
|
9
11
|
# # 不填则要 env SEMA_SERVER_IMAGE 或 SEMA_SERVER_IMAGE_TAR(tar 预灌)
|
|
@@ -56,7 +56,7 @@ usage() {
|
|
|
56
56
|
cat "$HERE/lib/usage-head.txt"
|
|
57
57
|
# 闭集词表从 lib/flagshape.sh 渲(单一属主):加 / 删一个词,这几行自己跟着变
|
|
58
58
|
printf ' --profile=P %s\n' "$(printf '%s' "$FLAG_WORDS_PROFILE" | tr ' ' '|')"
|
|
59
|
-
printf ' --users=U %s\n' "$(printf '%s' "$FLAG_WORDS_USERS" | tr ' ' '|')"
|
|
59
|
+
printf ' --users=U %s(必填,没有缺省;重跑沿用 .env 里上一次落下的;data-center 档不装 agent,不用)\n' "$(printf '%s' "$FLAG_WORDS_USERS" | tr ' ' '|')"
|
|
60
60
|
printf ' --region=R %s\n' "$(printf '%s' "$FLAG_WORDS_REGION" | tr ' ' '|')"
|
|
61
61
|
cat "$HERE/lib/usage-flags.txt"
|
|
62
62
|
# 词表从 lib/lanes.json 渲(单一属主):加/删一条车道,这行自己跟着变
|
|
@@ -327,7 +327,7 @@ fi
|
|
|
327
327
|
"data-center:只装数据面(PG+MinIO+备份)——agent 在你自己机器上,数据放这里" \
|
|
328
328
|
"full-cluster:k8s 准生产——3 机 ssh 装配 / 已有集群 kubeconfig / 本机装 k3s" \
|
|
329
329
|
"local-plus:本机只跑 agent,连一个已经部署好的 data-center 数据面")
|
|
330
|
-
# ── 两个决策(租户形 / 车道)同一条规则:决策 = 显式旗 ∨ 部署事实 ∨ 表缺省 ─────────────────────
|
|
330
|
+
# ── 两个决策(租户形 / 车道)同一条规则:决策 = 显式旗 ∨ 部署事实 ∨ 表缺省 —— 租户形**没有表缺省**(见下)─────────────────────
|
|
331
331
|
# 「部署事实」= 同一只 `$WORK/.env`:compose 的 agent 档由本脚本写,full-cluster 由 kube-up / cluster-up 在写凭据的同一处
|
|
332
332
|
# 写(修前 kube 两条路径不落这条事实 ⇒ 不带旗重跑拿缺省 single 把多租部署降回单用户);data-center 不起 agent。事实 → 决策词只经属主翻译,本脚本不抄第二份:
|
|
333
333
|
# · REQUIRE_PRINCIPAL → --users:只认 sema-up 自己写出的两形 true / false(别的写法 ⇒ 拒;不复刻 server 的布尔词表);
|
|
@@ -335,18 +335,20 @@ fi
|
|
|
335
335
|
# 不带旗重跑 ⇒ 沿用事实(多租部署重跑不必再带 --users=multi);显式旗与事实不一致 ⇒ fact_conflict 拒并点名两处。
|
|
336
336
|
# 🔴 为什么缺省不能先于事实(合并复审两条真案):把表缺省当成意图去和事实比,合法的无旗重跑就被拒;
|
|
337
337
|
# 反过来若只比不拒,保留的多租 `.env` 在缺省 single 下会被车道表判成 host —— 容器拿到 REQUIRE_PRINCIPAL=true ∧ host。
|
|
338
|
+
# 🔴 租户形不取缺省(单用户声明由部署写,脚本不替它选):显式旗(`--users` / `-f` 配置)∨ 部署事实 ∨ 向导里人答的那一句,都没有 ⇒ 拒
|
|
339
|
+
# (`flag_users_required`,拒句与 kube-up / cluster-up 同一只判官)。缺省 single = 用模板起团队集群又忘设人数的部署人人是运维;缺省 multi 同样是
|
|
340
|
+
# 替部署选。data-center 档不装 agent,没有声明可言:不问、不拒(USERS 留空,汇总行写 n/a)。
|
|
338
341
|
# 租户形 ⇒ 容器上 REQUIRE_PRINCIPAL 的值:`principal_of_users`(lib/flagshape.sh,三只脚本共用的唯一定义;kube-up /
|
|
339
|
-
# cluster-up 也调它)。正向(生成段 setk、事实核对)与反向(事实 →
|
|
342
|
+
# cluster-up 也调它)。正向(生成段 setk、事实核对)与反向(事实 → 向导问句的缺省词)都经它:反向是拿两个租户词逐个过这只函数去比,
|
|
340
343
|
# 不另写一张反表(与车道的 `lanes choice-of` 同一姿势)。
|
|
341
|
-
USERS_DEF="
|
|
344
|
+
USERS_DEF="" RP_FACT="" RP_FACT_SRC="" REQUIRE_PRINCIPAL_WANT=""
|
|
342
345
|
case "$PROFILE" in
|
|
343
346
|
# full-cluster 也读 —— kube-up / cluster-up 在写凭据的同一处把 REQUIRE_PRINCIPAL 落进同一只 .env(它们自己
|
|
344
347
|
# 单独跑时也按同一条规则判,见 lib/flagshape.sh 的 users_decide)。
|
|
345
348
|
full-single|local-plus|full-cluster)
|
|
346
349
|
deploy_fact REQUIRE_PRINCIPAL; RP_FACT="$FACT_VAL" RP_FACT_SRC="$FACT_SRC"
|
|
347
350
|
if [ -n "$RP_FACT" ]; then
|
|
348
|
-
USERS_DEF=""
|
|
349
|
-
for _u in single multi; do [ "$(principal_of_users "$_u")" = "$RP_FACT" ] && USERS_DEF="$_u"; done
|
|
351
|
+
for _u in $FLAG_WORDS_USERS; do [ "$(principal_of_users "$_u")" = "$RP_FACT" ] && USERS_DEF="$_u"; done
|
|
350
352
|
if [ -z "$USERS_DEF" ]; then
|
|
351
353
|
log "⛔ 部署事实 REQUIRE_PRINCIPAL=$RP_FACT(来自 $RP_FACT_SRC):本脚本只读自己写出的两形 $(principal_of_users multi) / $(principal_of_users single)"
|
|
352
354
|
log " ↳ 下一步:改成 REQUIRE_PRINCIPAL=$(principal_of_users multi)(多人,身份隔离)或 REQUIRE_PRINCIPAL=$(principal_of_users single)(单人),再重跑"
|
|
@@ -354,13 +356,17 @@ case "$PROFILE" in
|
|
|
354
356
|
exit 1
|
|
355
357
|
fi
|
|
356
358
|
fi
|
|
359
|
+
if [ -z "$USERS" ]; then
|
|
360
|
+
# 无人值守没有人答 ⇒ 没有事实就没有词:拒。向导(tty / json)里问句的缺省只有事实词(重跑),没有事实 ⇒ 缺省为空,空答由 ask 的闭集句拒(同样列两词)。
|
|
361
|
+
if [ -z "$USERS_DEF" ] && [ "$MODE_INTERACTIVE" = "none" ]; then flag_users_required "--users(USERS)"; fi
|
|
362
|
+
USERS=$(ask users "几个人用?" "$USERS_DEF" "这是这台部署自己的声明,没有缺省(重跑沿用上一次落下的);单人可跳过全部权限配置,多人要开身份隔离" \
|
|
363
|
+
"single:就我一个(超级管理员 turnkey,零权限配置)" \
|
|
364
|
+
"multi:一个团队(身份隔离 ON,能力默认全开,之后可用 policy 收紧)")
|
|
365
|
+
fi
|
|
366
|
+
REQUIRE_PRINCIPAL_WANT="$(principal_of_users "$USERS")"
|
|
367
|
+
fact_conflict REQUIRE_PRINCIPAL "$RP_FACT" "$RP_FACT_SRC" "$REQUIRE_PRINCIPAL_WANT" "--users=$USERS"
|
|
357
368
|
;;
|
|
358
369
|
esac
|
|
359
|
-
[ -z "$USERS" ] && USERS=$(ask users "几个人用?" "$USERS_DEF" "单人可跳过全部权限配置,多人要开身份隔离" \
|
|
360
|
-
"single:就我一个(超级管理员 turnkey,零权限配置)" \
|
|
361
|
-
"multi:一个团队(身份隔离 ON,能力默认全开,之后可用 policy 收紧)")
|
|
362
|
-
REQUIRE_PRINCIPAL_WANT="$(principal_of_users "$USERS")"
|
|
363
|
-
fact_conflict REQUIRE_PRINCIPAL "$RP_FACT" "$RP_FACT_SRC" "$REQUIRE_PRINCIPAL_WANT" "--users=$USERS"
|
|
364
370
|
|
|
365
371
|
# registry:各档默认带上(clay 2026-07-12 拍;显式 --registry=false 可关)。
|
|
366
372
|
# local-plus 例外默认 false——它的数据面在远端,配置中心应随数据面部署,本机再起一个=两个配置中心。
|
|
@@ -544,7 +550,7 @@ HOSTIP=$(host_ip)
|
|
|
544
550
|
# test srv796 实测 NEW-5)。7.104.0 起REGISTRY_ENABLED 在建工作目录之前已过形判(只会是 true / false,或空 =
|
|
545
551
|
# 走档位缺省,缺省在上面已落定),registry 仍收成 on/off 决策词。region/profile/users/lane/git 到这里都已定死
|
|
546
552
|
# (形判在参数解析之后、交互答案在 ask() 里、车道在车道块)。
|
|
547
|
-
log "region=$REGION profile=$PROFILE users=$USERS sandbox=${SANDBOX_LANE:-n/a} lane=${LANE_REMOTE_EXEC:-n/a} registry=$([ "$REGISTRY_ENABLED" = "true" ] && echo on || echo off) git=$GIT_MODE"
|
|
553
|
+
log "region=$REGION profile=$PROFILE users=${USERS:-n/a} sandbox=${SANDBOX_LANE:-n/a} lane=${LANE_REMOTE_EXEC:-n/a} registry=$([ "$REGISTRY_ENABLED" = "true" ] && echo on || echo off) git=$GIT_MODE"
|
|
548
554
|
|
|
549
555
|
# ── 数据根(一条规则 —— 数据根归一个项目所有;判据全在 lib/dataroot.sh)───────────────────────────
|
|
550
556
|
# 取哪条根:`.env` 首装值(已装的项目不漂移,不搬数据)∨ --data-root / -f 的 DATA_ROOT ∨ 多盘机自动选大容量盘
|
|
@@ -616,7 +622,7 @@ fi
|
|
|
616
622
|
if $DRY_RUN; then
|
|
617
623
|
{
|
|
618
624
|
echo "══════ sema-up dry-run(不写文件、不起容器)══════"
|
|
619
|
-
echo " profile=$PROFILE users=$USERS region=$REGION registry=$REGISTRY_ENABLED git=$GIT_MODE"
|
|
625
|
+
echo " profile=$PROFILE users=${USERS:-n/a} region=$REGION registry=$REGISTRY_ENABLED git=$GIT_MODE"
|
|
620
626
|
echo " compose profiles: $COMPOSE_PROFILES(project=$PROJECT)"
|
|
621
627
|
echo " 凭据文件: $ENVF $([ -f "$ENVF" ] && echo '(已存在:只补缺,已有凭据不轮换)' || echo '(将新建,0600)')"
|
|
622
628
|
echo " 将执行:"
|
|
@@ -680,8 +686,8 @@ if [ "$PROFILE" = "full-single" ] || [ "$PROFILE" = "local-plus" ]; then
|
|
|
680
686
|
setk MODEL_ID "$MODEL"
|
|
681
687
|
[ -n "$MODEL_KEY" ] && setk MODEL_API_KEY "$MODEL_KEY"
|
|
682
688
|
setk REQUIRE_PRINCIPAL "$REQUIRE_PRINCIPAL_WANT"
|
|
683
|
-
#
|
|
684
|
-
#
|
|
689
|
+
# 单用户运维声明:由部署自己给的那一个租户词翻译(`--users` / 配置 / 上一次的事实 / 向导答案;缺了就在上面拒,没有缺省;lib/flagshape.sh 唯一定义),
|
|
690
|
+
# 每次重写 —— 它不是第二个部署事实,是 REQUIRE_PRINCIPAL 那一个事实的另一根键。不写 ⇒ 单用户 server 起服拒(没人能当运维);升级路径上旧 .env 没有这一行,resetk 补上。
|
|
685
691
|
resetk OPERATOR_SINGLE_USER "$(operator_single_user_of_users "$USERS")"
|
|
686
692
|
setk SANDBOX_PKG_SOURCE "$([ "$REGION" = "global" ] && echo global || echo '')"
|
|
687
693
|
[ -n "${SEMA_SERVER_IMAGE:-}" ] && setk SEMA_SERVER_IMAGE "$SEMA_SERVER_IMAGE"
|
|
@@ -1084,7 +1090,7 @@ else
|
|
|
1084
1090
|
echo " 数据卷 $(printf ',%s,' "$COMPOSE_PROFILES" | grep -q ',pg,' && printf '%s_pgdata ' "$PROJECT")$(printf ',%s,' "$COMPOSE_PROFILES" | grep -q ',s3,' && printf '%s_miniodata ' "$PROJECT")$([ "$REGISTRY_ENABLED" = "true" ] && printf '%s_registrydata ' "$PROJECT")$([ "$GIT_MODE" = "provision" ] && printf '%s_gitdata ' "$PROJECT")$(printf ',%s,' "$COMPOSE_PROFILES" | grep -q ',agent,' && printf '%s_sealedkey' "$PROJECT")$([ -n "$DATA_ROOT" ] && printf '(bind 落 %s)' "$DATA_ROOT")"
|
|
1085
1091
|
echo " 重入 再跑同命令=幂等升级(凭据不轮换);验证=smoke.sh --project=$PROJECT"
|
|
1086
1092
|
echo " 卸载 $0 --project=$PROJECT --teardown(留数据)/--teardown-volumes(连卷删)"
|
|
1087
|
-
[ "$PROFILE" = "data-center" ] && echo " 接入 别处 agent 连这个数据面 = sema-up.sh --profile=local-plus --pg-host=$HOSTIP --minio-endpoint=http://$HOSTIP:$MINIO_PORT + 两个密码(本机 .env 里)"
|
|
1093
|
+
[ "$PROFILE" = "data-center" ] && echo " 接入 别处 agent 连这个数据面 = sema-up.sh --profile=local-plus --users=<single|multi> --pg-host=$HOSTIP --minio-endpoint=http://$HOSTIP:$MINIO_PORT + 两个密码(本机 .env 里)"
|
|
1088
1094
|
echo "═══════════════════════════════════════════════════════════"
|
|
1089
1095
|
} >&2
|
|
1090
1096
|
fi
|
package/dist/adoption/import.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import { SessionError } from "@sema-agent/core";
|
|
3
|
-
import { createStagedLogFeed, MalformedImportEntryError, newStagingToken,
|
|
3
|
+
import { createStagedLogFeed, MalformedImportEntryError, newStagingToken, StagedCommitOccupantChangedError } from "../session-sync-kernel.js";
|
|
4
4
|
import { STAGED_IMPORT_INVALID_SENTENCE } from "../session-error-wire.js";
|
|
5
5
|
import { recordFailOpen } from "../observability/fail-open.js";
|
|
6
6
|
import { AdoptionImportBodySchema, AdoptionImportEnvelopeSchema, ADOPTION_IMPORT_CLIENT_SESSION_ID_MAX_CHARS } from "./wire.js";
|
|
@@ -93,11 +93,11 @@ async function importOne(target, clientSessionId, entries) {
|
|
|
93
93
|
throw e;
|
|
94
94
|
}
|
|
95
95
|
try {
|
|
96
|
-
await handle.commit(target.toPrincipal, {
|
|
96
|
+
await handle.commit(target.toPrincipal, { expectedOccupant: undefined });
|
|
97
97
|
}
|
|
98
98
|
catch (e) {
|
|
99
99
|
await handle.abort().catch(() => undefined);
|
|
100
|
-
if (e instanceof
|
|
100
|
+
if (e instanceof StagedCommitOccupantChangedError)
|
|
101
101
|
return { clientSessionId, outcome: "already_imported", sessionId };
|
|
102
102
|
throw e;
|
|
103
103
|
}
|
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
* 本店是协调器侧的审计 sink,不是跨后端 store 契约的一员(SQL 车道有真 ask 店,永不装本店)——
|
|
167
167
|
* 装配点在 `boot/coordinators.ts`(判据:`toolApprovalEnabled` ∧ `backend.kind === "local"` ∧
|
|
168
168
|
* `config.localDataRoot` 在场;真实 boot 恒铸 `localDataRoot`,缺席只发生在 stub-harness 上,判据
|
|
169
|
-
*
|
|
169
|
+
* 只填被测键的 harness 要的必然是「别碰真盘」)。root 与 `LocalBackend`
|
|
170
170
|
* 同源(`store-backend.ts:780` 的 `config.localDataRoot`),数据落 `<root>/approval-ask-audit/`。
|
|
171
171
|
*
|
|
172
172
|
* ## 体量与保留
|
|
@@ -6,19 +6,13 @@ export declare const ASK_TERMINAL: ReadonlySet<AskState>;
|
|
|
6
6
|
/** 批侧终态集合(无出边的 2 态)。 */
|
|
7
7
|
export declare const BATCH_TERMINAL: ReadonlySet<BatchState>;
|
|
8
8
|
/**
|
|
9
|
-
* [ref]:回决理由(`AskRow.decisionNote` → `decision_note` 列)
|
|
10
|
-
*
|
|
11
|
-
* 🔴 为什么住在这个模块:两个消费者分别是 durable 腿的 zod 体(`http/routes/runs.ts` 的
|
|
12
|
-
* `AskDecisionBodySchema`)与 live 腿的手写 parser(`tool-approval.ts` 的 `parseToolApprovalResponse`),
|
|
13
|
-
* 两处都在 ask 状态机的**同一张行**上写同一列。上限各写一份字面量 = 同一列上两个口径,而分歧只会在
|
|
14
|
-
* 「一条腿收下、另一条腿 400」的那天才被发现。本模块是两腿唯一的共同上游(askId/batchId 铸造与转移表
|
|
15
|
-
* 都在这里),放这里不引新依赖边。
|
|
9
|
+
* [ref]:回决理由(`AskRow.decisionNote` → `decision_note` 列)的字符上限 —— 列的口径住在行的状态机模块里(askId/batchId 铸造与转移表都在这里),
|
|
10
|
+
* 唯一的人决口(`http/routes/runs.ts` 的 `AskDecisionBodySchema`)读它。
|
|
16
11
|
*/
|
|
17
12
|
export declare const MAX_DECISION_NOTE_CHARS = 2048;
|
|
18
13
|
/**
|
|
19
|
-
* 回决回执上「理由记上了吗」(`noteRecorded`)一格的**唯一判官与唯一组句器** ——
|
|
20
|
-
*
|
|
21
|
-
* 回体(PARKED 行经赎回腿受理的那一腿除外:它的理由走检查点回决链、不写 ask 行,尚无「记在哪张行」的定义,契约里点名为未覆盖)都经这两只函数说这件事,
|
|
14
|
+
* 回决回执上「理由记上了吗」(`noteRecorded`)一格的**唯一判官与唯一组句器** —— 决断口 `POST /v1/tasks/:taskId/asks/:askId/decision` 的每一个 200
|
|
15
|
+
* 回体(活卡首决 / 回放,与 PARKED 行经停驻赎回受理的那一腿:停驻门受理之后决定记在这只问的行上,理由就在那一列)都经这两只函数说这件事,
|
|
22
16
|
* 不在各自的回体字面量里手写第二份。
|
|
23
17
|
*
|
|
24
18
|
* 三态同一份契约:请求**没带** `note` ⇒ 键缺席(不是 `false`);带了 ⇒ `true | false`:`true` = **已确认**持久行上那段文本就是这次提交的
|
|
@@ -43,7 +43,7 @@ import type { BackgroundAgentRecord } from "@sema-agent/core";
|
|
|
43
43
|
export declare const APPROVAL_ASK_RETENTION_DEFAULT_MS: number;
|
|
44
44
|
/**
|
|
45
45
|
* 正值的下限:1 天(低于即钳到 1 天并点名)。还能动的 run 的问本来就不删(见文件头);下限管的是**刚结束**的 run:
|
|
46
|
-
* 客户端在 run 结束后还可能对它的卡做幂等重试 / 晚答(
|
|
46
|
+
* 客户端在 run 结束后还可能对它的卡做幂等重试 / 晚答(决断口对已决行同键回放首决、否则 409,对作废行 410,而不是 404),一天吸收这一段。
|
|
47
47
|
*/
|
|
48
48
|
export declare const APPROVAL_ASK_RETENTION_FLOOR_MS = 86400000;
|
|
49
49
|
/** 两次清扫之间的最短间隔(见文件头「节律」)。 */
|