@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
|
@@ -27,16 +27,15 @@
|
|
|
27
27
|
* 执法点 = [ref] 的逐条判据 `judgeCatalogEntry`(同一个码、同一条 warn、同一条「显式选中它 ⇒ `request.model_unavailable`」的路),
|
|
28
28
|
* 其余条目照常服务。拒因与 warn **只回显名字**(过 {@link displayHeaderName}),从不回显值。
|
|
29
29
|
*
|
|
30
|
-
* ##
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* `
|
|
34
|
-
* 承载形(与 `compat` 同一种 parse-transparent + 自由形安全判),判据仍是本模块这一处 —— 或者整张表搬进 schema、本仓 import;
|
|
35
|
-
* 二选一候裁,不许两处各有一份。
|
|
30
|
+
* ## 容器形不是本模块的判据(settings-schema 26.0.0 起)
|
|
31
|
+
* 「`headers` 是一只纯 JSON 对象」由契约包判(`ModelEntry` 的自由形对象键,与 `extraBody` 同一只判官):严写面整份拒,读腿上那一条目 `entry-dropped`
|
|
32
|
+
* (唯一 / 被引用时 `models` 整域退缺省并发 `domain-defaulted`),绕过读腿的输入在 `judgeCatalogEntry` 首判(`ModelEntry.safeParse`)拒、字段点名 `headers`。
|
|
33
|
+
* 到这里的袋恒是对象(型 `ModelEntry["headers"]`);本模块只判契约不判的那三件 —— 头名闭集 × 线路 × 值形。
|
|
36
34
|
*
|
|
37
|
-
* 依赖纪律:叶(只 type-import core、值引 `trace/redact.ts` 的名字回显尺)。
|
|
35
|
+
* 依赖纪律:叶(只 type-import core 与 settings-schema、值引 `trace/redact.ts` 的名字回显尺)。
|
|
38
36
|
*/
|
|
39
37
|
import type { Model } from "@sema-agent/core";
|
|
38
|
+
import type { ModelEntry } from "@sema-agent/settings-schema";
|
|
40
39
|
/** 条目的线路词(core `Model["api"]`,不手抄)。 */
|
|
41
40
|
type ModelApi = Model["api"];
|
|
42
41
|
/**
|
|
@@ -69,17 +68,17 @@ export type CatalogEntryHeadersVerdict = {
|
|
|
69
68
|
readonly issue: string;
|
|
70
69
|
};
|
|
71
70
|
/**
|
|
72
|
-
* **唯一判据**:条目的 `headers`(`unknown
|
|
71
|
+
* **唯一判据**:条目的 `headers`(契约包已判过容器形的袋;值仍是 `unknown`)+ 条目的线路词(`api`)—— 两者都取判官那一次 settings-schema 解析的读数
|
|
73
72
|
* (缺席的 `api` 即 schema 的缺省),判据与铸点读同一只值,见 `judgeCatalogEntry`。
|
|
74
73
|
* 整只判:任一名字 / 值不合 ⇒ 整只不收(留下好的那几个 = 让运维以为整袋生效了)。坏字段逐个列出(`headers.<名>`)。
|
|
75
74
|
*/
|
|
76
|
-
export declare function readCatalogEntryHeaders(raw:
|
|
75
|
+
export declare function readCatalogEntryHeaders(raw: ModelEntry["headers"], api: ModelApi): CatalogEntryHeadersVerdict;
|
|
77
76
|
/**
|
|
78
77
|
* **唯一铸点**(`toModel` 调):判过的袋 → `Model.headers` 的键。缺席 ⇒ 不铸键(一个 `undefined` 值的键也不铸:
|
|
79
78
|
* 缺席只有一种拼法)。判不过 ⇒ **抛**:到这里的条目已经过 [ref] 逐条判据(判不过的进 `modelRefusals`、到不了 `toModel`),
|
|
80
79
|
* 抛 = 两处判据分叉了,stage 整候选拒、响亮,不静默丢头。
|
|
81
80
|
*/
|
|
82
|
-
export declare function buildModelHeadersKey(entryName: string, raw:
|
|
81
|
+
export declare function buildModelHeadersKey(entryName: string, raw: ModelEntry["headers"], api: ModelApi): {
|
|
83
82
|
headers?: Record<string, string>;
|
|
84
83
|
};
|
|
85
84
|
export {};
|
|
@@ -15,10 +15,6 @@ function isCatalogEntryHeaderName(name) {
|
|
|
15
15
|
export function readCatalogEntryHeaders(raw, api) {
|
|
16
16
|
if (raw === undefined)
|
|
17
17
|
return { ok: true, headers: undefined };
|
|
18
|
-
const proto = typeof raw === "object" && raw !== null ? Object.getPrototypeOf(raw) : undefined;
|
|
19
|
-
if (typeof raw !== "object" || raw === null || Array.isArray(raw) || (proto !== Object.prototype && proto !== null)) {
|
|
20
|
-
return { ok: false, fields: ["headers"], issue: `headers: expected a plain object of { <header name>: <value> } (allowed names: ${CATALOG_ENTRY_HEADER_NAMES.join(", ")})` };
|
|
21
|
-
}
|
|
22
18
|
const fields = [];
|
|
23
19
|
const issues = [];
|
|
24
20
|
const bag = {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ModelEntry, type ModelEntryRefusalCode, type ModelPlaneRefusalCode, type ModelRefusalsSignal } from "@sema-agent/settings-schema";
|
|
2
2
|
import { type DroppedCatalogEntry } from "./web-admin-client/read-warnings.js";
|
|
3
|
-
import { type
|
|
3
|
+
import { type ModelRefusalLeg } from "./model-select.js";
|
|
4
4
|
import type { CandidateRejectionNote } from "./web-admin-client/candidate-gate.js";
|
|
5
5
|
/**
|
|
6
6
|
* 条目拒因码 → 本仓铸它的成因 —— **以码为键**([ref]):码闭集的属主是 settings-schema(`MODEL_ENTRY_REFUSAL_CODES`,6.2.0 起;此前本仓
|
|
@@ -173,11 +173,14 @@ export interface DefaultModelView {
|
|
|
173
173
|
* **之后**判的理由(此前 `parseModelDomain` 在目录应用之前就对 `MODEL_ID` 空串拒启,把只配了目录的用户无谓拒掉)。
|
|
174
174
|
*
|
|
175
175
|
* 拒因一句:码 + 这条腿上**真实**的出路 + 若目录在场但每条都不可用,点名它们与各自的码。env 腿句首保留 `MODEL_ID is required`
|
|
176
|
-
* 这个既有的可 grep 片段(壳与运维脚本认它);目录腿不提 `MODEL_ID`(见 {@link
|
|
176
|
+
* 这个既有的可 grep 片段(壳与运维脚本认它);目录腿不提 `MODEL_ID`(见 {@link ModelRefusalLeg})。
|
|
177
177
|
* env 腿若是因「候选被判官整拒」才回落到这张表({@link DefaultModelView.candidateRejectionNotes}),同一行再追加「回落原因」:被拒的文档名 + 拒码 + 原因类词 + 文档路径 ——
|
|
178
|
-
* 不带配置值、不带链接指向的目标路径、不抄任何 `error` 原文;只追加,句首的 grep
|
|
178
|
+
* 不带配置值、不带链接指向的目标路径、不抄任何 `error` 原文;只追加,句首的 grep 锚不动。
|
|
179
|
+
* env 腿句尾的「出路」按**这个进程的配置源是不是 web-admin**说真话({@link ModelRefusalLeg.webAdminIsConfigSource},调用点读 `configSourceKind` 递进来;本函数不读 env、
|
|
180
|
+
* 不读配置):是 ⇒ `MODEL_ID` 或目录(`config.d/models.json` 或 web-admin;web-admin 在 boot 预算之后才答的算 boot 时缺席,`CONFIG_BOOT_FETCH_BUDGET_MS` 调大才等得到它),
|
|
181
|
+
* 整句逐字是此前那一句;不是 ⇒ 只说 `MODEL_ID` 与 `config.d/models.json` 两条,不提 web-admin 与那根旋钮(对这个进程它们不是出路)。句首锚两形都不动。
|
|
179
182
|
*/
|
|
180
|
-
export declare function defaultModelRefusal(view: DefaultModelView,
|
|
183
|
+
export declare function defaultModelRefusal(view: DefaultModelView, target: ModelRefusalLeg): string | undefined;
|
|
181
184
|
/** 一个被铸出的被拒名字:`name` = 被拒条目的名字,`target` = 增广把它指向的那条条目,`via` = 它是以什么身份被铸出的。 */
|
|
182
185
|
export interface MintedRefusedName {
|
|
183
186
|
readonly name: string;
|
|
@@ -185,24 +185,30 @@ function candidateFellBackClause(notes) {
|
|
|
185
185
|
const rows = notes.map((n) => `"${n.document}" [${n.code}] ${n.cause}${n.path !== undefined ? `: ${n.path}` : ""}`);
|
|
186
186
|
return ` (the config candidate was rejected whole and none of its domains applied, so its catalog is not in this table; fix or remove the named document(s) — the config_candidate_rejected warn line has the full diagnostics — rejected: ${rows.join(" | ")})`;
|
|
187
187
|
}
|
|
188
|
-
export function defaultModelRefusal(view,
|
|
188
|
+
export function defaultModelRefusal(view, target) {
|
|
189
189
|
if (Object.hasOwn(view.models, DEFAULT_MODEL_REF) && view.models[DEFAULT_MODEL_REF] !== undefined)
|
|
190
190
|
return undefined;
|
|
191
191
|
const refused = Object.entries(view.modelRefusals).map(([n, r]) => `${nameSlot(n)} [${r.code}]`);
|
|
192
192
|
const unavailable = refused.length > 0 ? ` (every enabled catalog entry is unavailable on this host: ${refused.join(", ")})` : "";
|
|
193
|
-
switch (leg) {
|
|
193
|
+
switch (target.leg) {
|
|
194
194
|
case "env":
|
|
195
195
|
return (`MODEL_ID is required when no catalog default resolves [${DEFAULT_MODEL_MISSING_CODE}] — this model table has no default model` +
|
|
196
196
|
unavailable +
|
|
197
197
|
candidateFellBackClause(view.candidateRejectionNotes) +
|
|
198
|
-
". Set MODEL_ID=<model name your gateway serves>, or enable at least one model this host can serve in the catalog " +
|
|
199
|
-
|
|
200
|
-
|
|
198
|
+
". Set MODEL_ID=<model name your gateway serves>, or enable at least one model this host can serve in the catalog (config.d/models.json" +
|
|
199
|
+
(target.webAdminIsConfigSource
|
|
200
|
+
? ", or the web-admin) — either one is enough (a web-admin that answers after the boot budget " +
|
|
201
|
+
"counts as absent at boot: raise CONFIG_BOOT_FETCH_BUDGET_MS to wait for it)."
|
|
202
|
+
: ") — either one is enough."));
|
|
201
203
|
case "catalog":
|
|
202
204
|
return (`this catalog candidate has no default model [${DEFAULT_MODEL_MISSING_CODE}]` +
|
|
203
205
|
unavailable +
|
|
204
206
|
" — fix the named entries (each has its own warn with the reason) or enable / bind a default this host can serve, in the catalog itself " +
|
|
205
207
|
"(a catalog in force replaces the env model table, so MODEL_ID cannot stand in for it).");
|
|
208
|
+
default: {
|
|
209
|
+
const unreachable = target;
|
|
210
|
+
throw new Error(`defaultModelRefusal: leg outside the closed set: ${JSON.stringify(unreachable)}`);
|
|
211
|
+
}
|
|
206
212
|
}
|
|
207
213
|
}
|
|
208
214
|
function mintedVia(name, own, tiers) {
|
|
@@ -61,5 +61,5 @@ export interface ModelPlaneSeats {
|
|
|
61
61
|
* `modelPlane` 的**唯一读口**(起服后的 HTTP 路由与起服前的探针各调一次,见文件头「两条读路,一只读口」):进程事实只在这里取齐 ——
|
|
62
62
|
* 名册布防读 `isRosterGateArmed(config.webAdmin)`(装配第 2 段的路由判官传的同一只谓词),两只座读调用方递来的运行时取值口 —— 再交铸点。
|
|
63
63
|
*/
|
|
64
|
-
export declare function readModelPlaneFace(config: ServedModelRouteView & Pick<ServiceConfig, "webAdmin">, seats: ModelPlaneSeats): ModelPlaneFace;
|
|
64
|
+
export declare function readModelPlaneFace(config: ServedModelRouteView & Pick<ServiceConfig, "webAdmin" | "configProvider">, seats: ModelPlaneSeats): ModelPlaneFace;
|
|
65
65
|
//# sourceMappingURL=model-plane-face.d.ts.map
|
package/dist/model-plane-face.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { judgeServedModelRoute } from "./model-route-endpoint.js";
|
|
2
2
|
import { servedModelTableLeg } from "./model-select.js";
|
|
3
|
+
import { configSourceKind } from "./config-provider.js";
|
|
3
4
|
import { isRosterGateArmed } from "./config.js";
|
|
4
5
|
export const CATALOG_STANCES = ["absent", "adopted", "refused"];
|
|
5
6
|
function catalogStanceOf(served, wholeRefused) {
|
|
@@ -15,6 +16,7 @@ function catalogStanceOf(served, wholeRefused) {
|
|
|
15
16
|
export function readModelPlaneFace(config, seats) {
|
|
16
17
|
return buildModelPlaneFace(config, {
|
|
17
18
|
envTableIsPlaceholder: isRosterGateArmed(config.webAdmin),
|
|
19
|
+
webAdminIsConfigSource: configSourceKind(config) === "remote",
|
|
18
20
|
candidateRejection: seats.candidateRejectionState?.(),
|
|
19
21
|
latestPlaneRefusal: seats.latestPlaneRefusalState?.(),
|
|
20
22
|
});
|
|
@@ -22,7 +24,7 @@ export function readModelPlaneFace(config, seats) {
|
|
|
22
24
|
function buildModelPlaneFace(config, facts) {
|
|
23
25
|
const servedTable = servedModelTableLeg(config);
|
|
24
26
|
const wholeRefused = facts.candidateRejection !== undefined || facts.latestPlaneRefusal !== undefined;
|
|
25
|
-
const verdict = judgeServedModelRoute(config, { envTableIsPlaceholder: facts.envTableIsPlaceholder });
|
|
27
|
+
const verdict = judgeServedModelRoute(config, { envTableIsPlaceholder: facts.envTableIsPlaceholder, webAdminIsConfigSource: facts.webAdminIsConfigSource });
|
|
26
28
|
return {
|
|
27
29
|
servedTable,
|
|
28
30
|
catalog: catalogStanceOf(servedTable, wholeRefused),
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* 缓存口径答它,而条目行上的 `api` / 缓存族仍按词写),网关在不在都一样。
|
|
19
19
|
*
|
|
20
20
|
* ## 执法点(判据只在这里,执法点在调用处 —— 与 [ref] `gateway-url-userinfo` 同形)
|
|
21
|
-
* **判官只判「将要服务的那张表」,拒因句按视图说真话**(视图词 = {@link
|
|
21
|
+
* **判官只判「将要服务的那张表」,拒因句按视图说真话**(视图词 = {@link ModelRefusalLeg},进判据入参,不靠调用方拼句):
|
|
22
22
|
* · boot:装配第 2 段**目录应用之后**的跨域不变量区(`boot/stage-02-web-admin-pull.ts`,锚 `CROSS-INVARIANT:model-route-endpoint`)⇒ 拒启 ——
|
|
23
23
|
* 经 {@link judgeServedModelRoute}:目录被采纳 ⇒ 判目录表(目录视图),目录缺席 / 被整拒 / 没有启用条目 ⇒ 判 env 表(env 视图);
|
|
24
24
|
* 严格名册布防(`isRosterGateArmed`)时 env 表是占位、从不被派发 ⇒ 不判它(备用网关那一条与表无关,照判)。
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
* `brain.ts` / `hooks/hook-llm.ts` 都可以安全引它。
|
|
41
41
|
*/
|
|
42
42
|
import type { Model } from "@sema-agent/core";
|
|
43
|
-
import { type
|
|
43
|
+
import { type ModelRefusalLeg } from "./model-select.js";
|
|
44
44
|
/** 机读码(拼法随 `config.*` 家族,按**规则**命名不按键名):一条 openai 路由解析不到端点。 */
|
|
45
45
|
export declare const MODEL_ROUTE_ENDPOINT_MISSING_CODE = "config.model_route_endpoint_missing";
|
|
46
46
|
/** 同族第二码:备用网关设了、主网关没设。与上一码分开是因为出路不同(补主网关 / 撤备用 vs 补主网关 / 给条目 baseUrl)。 */
|
|
@@ -83,7 +83,7 @@ export type OpenaiRouteEndpoint = {
|
|
|
83
83
|
* 单条 openai 路由的有效端点 / 拒因(拒因与部署级判据是**同一只**铸点 {@link routeEndpointMissingRefusal};`leg` = 这条路由所在的表的视图词)。
|
|
84
84
|
* `route` = 这条路由的条目(只读 `baseUrl` 与 `provider`);条目都没有(模型名解不出)⇒ 传 `undefined`,按「无自有 baseUrl、非 anthropic 词」判。
|
|
85
85
|
*/
|
|
86
|
-
export declare function resolveOpenaiRouteEndpoint(routeName: string, route: Pick<Model, "baseUrl" | "provider"> | undefined, gatewayBaseUrl: string | undefined, leg:
|
|
86
|
+
export declare function resolveOpenaiRouteEndpoint(routeName: string, route: Pick<Model, "baseUrl" | "provider"> | undefined, gatewayBaseUrl: string | undefined, leg: ModelRefusalLeg): OpenaiRouteEndpoint;
|
|
87
87
|
/** 部署级判据读的切面(`ServiceConfig` 与 `CrossInvariantView` 都结构满足)。 */
|
|
88
88
|
export interface ModelRouteEndpointView {
|
|
89
89
|
readonly gatewayBaseUrl?: string;
|
|
@@ -104,7 +104,7 @@ export interface ModelRouteEndpointView {
|
|
|
104
104
|
* `default` 键是目录里另一条的别名(env 腿 `{default: m, [m.id]: m}`、center 腿 `models.default = models[picked]`),
|
|
105
105
|
* 与别的键指同一只对象时不重复点名;只有它一个键时(手搓夹具)照样点名 `default`。
|
|
106
106
|
*/
|
|
107
|
-
export declare function modelRouteEndpointRefusal(view: ModelRouteEndpointView, leg:
|
|
107
|
+
export declare function modelRouteEndpointRefusal(view: ModelRouteEndpointView, leg: ModelRefusalLeg): string | undefined;
|
|
108
108
|
/** [ref]:部署级判决的结构化形 —— 码与拒因句由**同一次**判决给出(一个不变量 id 两个码,组拒码在判决那刻当数据带出,不从句子里抠)。 */
|
|
109
109
|
export interface ModelRouteEndpointVerdict {
|
|
110
110
|
readonly code: typeof GATEWAY_FALLBACK_WITHOUT_PRIMARY_CODE | typeof MODEL_ROUTE_ENDPOINT_MISSING_CODE;
|
|
@@ -115,9 +115,9 @@ export interface ModelRouteEndpointVerdict {
|
|
|
115
115
|
/**
|
|
116
116
|
* **判据属主**([ref] 起的结构化形;{@link modelRouteEndpointRefusal} 是它的句子投影):`undefined` = 通过。判序即 {@link modelRouteEndpointRefusal}
|
|
117
117
|
* 头注所列 —— ① 备用无主先说,② 逐条目解析不到端点全部点名。加一枝 = 在这里同时给出码与句(返回型强制两者同在)。
|
|
118
|
-
* `leg` = `view.models` 是哪一张表({@link
|
|
118
|
+
* `leg` = `view.models` 是哪一张表(+ env 腿句尾要的部署事实,{@link ModelRefusalLeg}):判据本身两视图同一把,**句子**按视图铸(出路在 env 表与目录表上不是同一组;env 腿句尾提不提 web-admin 看它是不是配置源)。
|
|
119
119
|
*/
|
|
120
|
-
export declare function judgeModelRouteEndpoint(view: ModelRouteEndpointView, leg:
|
|
120
|
+
export declare function judgeModelRouteEndpoint(view: ModelRouteEndpointView, leg: ModelRefusalLeg): ModelRouteEndpointVerdict | undefined;
|
|
121
121
|
/** {@link judgeServedModelRoute} 读的切面:路由判据的切面 + 「服务的是哪张表」的事实(`ServiceConfig` 结构满足)。 */
|
|
122
122
|
export interface ServedModelRouteView extends ModelRouteEndpointView {
|
|
123
123
|
readonly model: object;
|
|
@@ -131,6 +131,12 @@ export interface ServedModelRouteOptions {
|
|
|
131
131
|
* 布防是中心接入的事实,配置读不出 ⇒ 由调用方给。没有名册门的入口(run-local)传 `false`。
|
|
132
132
|
*/
|
|
133
133
|
readonly envTableIsPlaceholder: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* **web-admin 是不是这个进程的配置源**(`configSourceKind(config) === "remote"`;只有服务的是 env 表时句子读它):env 腿拒因句「让目录缺省来服务」那一条出路是否提 web-admin
|
|
136
|
+
* (与缺省模型拒启句同一件事实,类型见 {@link ModelRefusalLeg})。配置源判官在 `config-provider.ts`,判官这一侧引不得它(环)⇒ 由调用点读、递进来;必填、没有缺省值 ——
|
|
137
|
+
* 少递编译红。没有配置源的装配(见 {@link assertServedModelRoute})不经本字段。
|
|
138
|
+
*/
|
|
139
|
+
readonly webAdminIsConfigSource: boolean;
|
|
134
140
|
}
|
|
135
141
|
/**
|
|
136
142
|
* **起服段的路由判官:只判「将要服务的那张表」**。`undefined` = 通过。
|
|
@@ -149,5 +155,5 @@ export declare function judgeServedModelRoute(config: ServedModelRouteView, opts
|
|
|
149
155
|
* 全零统计、退出 0)。装配第 2 段与 `run-local` 要锚、要在目录应用之后判,调的是 {@link judgeServedModelRoute};本函数只是它的抛出形。
|
|
150
156
|
* 源码类钉(`test/served-model-route.test.ts` ⑨):`src/` 与 `scripts/` 里每个调 `loadConfig()` 的入口,要么在同文件里判过路由,要么是登记在册的例外。
|
|
151
157
|
*/
|
|
152
|
-
export declare function assertServedModelRoute(config: ServedModelRouteView, opts: ServedModelRouteOptions): void;
|
|
158
|
+
export declare function assertServedModelRoute(config: ServedModelRouteView, opts: Omit<ServedModelRouteOptions, "webAdminIsConfigSource">): void;
|
|
153
159
|
//# sourceMappingURL=model-route-endpoint.d.ts.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { brainLaneFor, catalogBrainLane, declaredRootUrl, routeTableOf } from "./model-provider.js";
|
|
2
|
-
import { DEFAULT_MODEL_REF, servedModelTableLeg } from "./model-select.js";
|
|
2
|
+
import { DEFAULT_MODEL_REF, modelRefusalLegOf, servedModelTableLeg } from "./model-select.js";
|
|
3
3
|
export const MODEL_ROUTE_ENDPOINT_MISSING_CODE = "config.model_route_endpoint_missing";
|
|
4
4
|
export const GATEWAY_FALLBACK_WITHOUT_PRIMARY_CODE = "config.gateway_fallback_without_primary";
|
|
5
5
|
export const MODEL_ROUTE_GAP_WORDS = ["endpoint_missing", "lane_credential_missing"];
|
|
@@ -54,29 +54,32 @@ export function judgeModelRouteEndpoint(view, leg) {
|
|
|
54
54
|
}
|
|
55
55
|
return endpointMissing === undefined ? undefined : { code: MODEL_ROUTE_ENDPOINT_MISSING_CODE, gap: "endpoint_missing", reason: endpointMissing };
|
|
56
56
|
}
|
|
57
|
-
function
|
|
57
|
+
function catalogSourcesPhrase(target) {
|
|
58
|
+
return target.webAdminIsConfigSource ? "config.d/models.json, or the web-admin" : "config.d/models.json";
|
|
59
|
+
}
|
|
60
|
+
function laneUnmountedRefusal(quotedNames, target) {
|
|
58
61
|
const one = quotedNames.length === 1;
|
|
59
62
|
const head = `${one ? `model ${quotedNames[0]} asks` : `models ${quotedNames.join(", ")} ask`} for the anthropic lane (provider "anthropic"), but no Anthropic route is mounted on this ` +
|
|
60
63
|
`deployment — ANTHROPIC_API_KEY and ANTHROPIC_AUTH_TOKEN are both unset [${MODEL_ROUTE_ENDPOINT_MISSING_CODE}]. ${one ? "It is" : "They are"} not served rather than ` +
|
|
61
64
|
"handed to the openai-compatible gateway under an anthropic label (that lane would answer with its own key, its own wire format and its own cache accounting). ";
|
|
62
|
-
switch (leg) {
|
|
65
|
+
switch (target.leg) {
|
|
63
66
|
case "env":
|
|
64
67
|
return (head +
|
|
65
68
|
"Pick one way out: (1) set ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN (plus ANTHROPIC_BASE_URL for a non-default endpoint); " +
|
|
66
69
|
"(2) set MODEL_PROVIDER=gateway (or vllm) to serve the env model on the openai-compatible gateway; " +
|
|
67
|
-
|
|
70
|
+
`(3) leave MODEL_ID unset and let the default entry of a catalog (${catalogSourcesPhrase(target)}) serve — a catalog in force replaces the env model table.`);
|
|
68
71
|
case "catalog":
|
|
69
72
|
return head + `Set ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN in this service's env, or change ${one ? "the entry's" : "each named entry's"} provider to an OpenAI-compatible route ("gateway" / "vllm") with its own baseUrl.`;
|
|
70
73
|
}
|
|
71
74
|
}
|
|
72
|
-
function routeEndpointMissingRefusal(quotedNames,
|
|
75
|
+
function routeEndpointMissingRefusal(quotedNames, target) {
|
|
73
76
|
const one = quotedNames.length === 1;
|
|
74
77
|
const subject = one ? `model ${quotedNames[0]} rides` : `models ${quotedNames.join(", ")} ride`;
|
|
75
78
|
const head = `${subject} the openai-compatible lane but ${one ? "resolves" : "resolve"} to no endpoint [${MODEL_ROUTE_ENDPOINT_MISSING_CODE}] — `;
|
|
76
79
|
const noDefault = "MODEL_GATEWAY_BASEURL has no factory default: the former silent placeholder (this machine's port 8000) let such a " +
|
|
77
80
|
"deployment start fine and then fail on the first model call, far from the cause (\"fetch failed … ECONNREFUSED\", or " +
|
|
78
81
|
"a container dialling its own loopback when compose passes an empty value). ";
|
|
79
|
-
switch (leg) {
|
|
82
|
+
switch (target.leg) {
|
|
80
83
|
case "catalog":
|
|
81
84
|
return (head +
|
|
82
85
|
`${one ? "it has no" : "none has a"} baseUrl of its own, and MODEL_GATEWAY_BASEURL is unset. ` +
|
|
@@ -89,17 +92,17 @@ function routeEndpointMissingRefusal(quotedNames, leg) {
|
|
|
89
92
|
`This process serves the env model table because no catalog is in force (none configured, the config source unreachable, the candidate refused, or no enabled model in it). Pick one way out: ` +
|
|
90
93
|
`(1) set MODEL_GATEWAY_BASEURL explicitly — for a gateway on this machine: ${LOCAL_GATEWAY_HINT}; ` +
|
|
91
94
|
"(2) mount the Anthropic route — MODEL_PROVIDER=anthropic with ANTHROPIC_API_KEY or ANTHROPIC_AUTH_TOKEN (plus ANTHROPIC_BASE_URL for a non-default endpoint); " +
|
|
92
|
-
|
|
95
|
+
`(3) leave MODEL_ID unset and let the default entry of a catalog (${catalogSourcesPhrase(target)}) serve — a catalog in force replaces the env model table. ` +
|
|
93
96
|
"(With CONFIG_REQUIRE_ROSTER=true on a remote registry the env model is declared a placeholder that is never served, and is not judged here.)");
|
|
94
97
|
}
|
|
95
98
|
}
|
|
96
99
|
export function judgeServedModelRoute(config, opts) {
|
|
97
|
-
const
|
|
98
|
-
const view =
|
|
99
|
-
return judgeModelRouteEndpoint(view,
|
|
100
|
+
const served = servedModelTableLeg(config);
|
|
101
|
+
const view = served === "env" && opts.envTableIsPlaceholder ? { ...config, models: {} } : config;
|
|
102
|
+
return judgeModelRouteEndpoint(view, modelRefusalLegOf(served, opts.webAdminIsConfigSource));
|
|
100
103
|
}
|
|
101
104
|
export function assertServedModelRoute(config, opts) {
|
|
102
|
-
const verdict = judgeServedModelRoute(config, opts);
|
|
105
|
+
const verdict = judgeServedModelRoute(config, { ...opts, webAdminIsConfigSource: false });
|
|
103
106
|
if (verdict !== undefined)
|
|
104
107
|
throw new Error(verdict.reason);
|
|
105
108
|
}
|
package/dist/model-select.d.ts
CHANGED
|
@@ -53,6 +53,28 @@ export declare function servedModelTableLeg(config: {
|
|
|
53
53
|
readonly model: object;
|
|
54
54
|
readonly envModel: object;
|
|
55
55
|
}): ModelTableLeg;
|
|
56
|
+
/**
|
|
57
|
+
* 拒因句的**腿**:进程服务的是哪张表({@link ModelTableLeg} 两词)+ env 腿的句子要的一件**部署事实**。缺省模型判官(`defaultModelRefusal`)与路由端点判官
|
|
58
|
+
* (`judgeModelRouteEndpoint` / `modelRouteEndpointRefusal` / `resolveOpenaiRouteEndpoint`)的 env 腿句尾读的是**同一件事实、同一个类型** —— 再有一条 env 腿的拒因句
|
|
59
|
+
* 要说「目录从哪来」,也读这一只,不另立第二份。
|
|
60
|
+
* 这一件事实只有 env 腿的句尾读(目录腿的句子不提 `MODEL_ID`、也不提 web-admin),所以挂在 `env` 这一支上 —— 目录腿的调用点(热路径的候选判)手里没有也不需要它,
|
|
61
|
+
* 少递这一格的 env 腿调用点编译红(必填,没有缺省值)。
|
|
62
|
+
* · `webAdminIsConfigSource` —— **web-admin 是不是这个进程的配置源**(`configSourceKind(config) === "remote"`,配置源判官的唯一读法;调用点读、判官不读):
|
|
63
|
+
* 是 ⇒ 目录只可能从 web-admin 来(远端源不读本地 `config.d`),句尾的出路里 web-admin 与「boot 预算之后才答的算缺席」这根旋钮是真的;
|
|
64
|
+
* 不是 ⇒ 句尾只剩 `MODEL_ID` 与 `config.d/models.json`。判据**只有这一个事实**:配没配中心本身不是它(`CONFIG_PROVIDER=local` 而配了中心的部署,中心照样管 fleet 面,
|
|
65
|
+
* 模型目录却只读本地 `config.d`);中心车道配齐的谓词 `centerLaneConfigured` 也不是它(那是 fleet 租约 / 用量环的门,要 worker 与已声明的凭证,比「目录从中心来」窄)。
|
|
66
|
+
* 判官不能自己读它:配置源判官住在 `config-provider.ts`,后者经 `config-invariants.ts` 引路由端点判官 —— 反向再引就是环。
|
|
67
|
+
*/
|
|
68
|
+
export type ModelRefusalLeg = {
|
|
69
|
+
readonly leg: "env";
|
|
70
|
+
readonly webAdminIsConfigSource: boolean;
|
|
71
|
+
} | {
|
|
72
|
+
readonly leg: "catalog";
|
|
73
|
+
};
|
|
74
|
+
/** 调用点把「服务的是哪张表」(`servedModelTableLeg`)与那件部署事实合成判官的腿;穷举 switch —— {@link ModelTableLeg} 加一词不补臂 ⇒ 编译红。 */
|
|
75
|
+
export declare function modelRefusalLegOf(served: ModelTableLeg, webAdminIsConfigSource: boolean): ModelRefusalLeg;
|
|
76
|
+
/** 目录腿(判的是一份目录候选 / 目录表):不带部署事实,所以是一个常量 —— 热路径的两处判官调用点共用它。 */
|
|
77
|
+
export declare const CATALOG_REFUSAL_LEG: ModelRefusalLeg;
|
|
56
78
|
/**
|
|
57
79
|
* 目录服务、而 env 里还设着 `MODEL_ID` ⇒ 启动时说一行(沿 `config_env_set_but_ineffective` 通告族:值合法、却不参与服务)。
|
|
58
80
|
* 这不是拒:目录一旦被采纳就整张换掉 env 表,`MODEL_ID` 在这一形下本来就不是缺省来源(缺省来自目录)—— 运维该知道自己的那一行
|
package/dist/model-select.js
CHANGED
|
@@ -11,6 +11,15 @@ export const MODEL_TABLE_LEGS = ["env", "catalog"];
|
|
|
11
11
|
export function servedModelTableLeg(config) {
|
|
12
12
|
return config.model === config.envModel ? "env" : "catalog";
|
|
13
13
|
}
|
|
14
|
+
export function modelRefusalLegOf(served, webAdminIsConfigSource) {
|
|
15
|
+
switch (served) {
|
|
16
|
+
case "env":
|
|
17
|
+
return { leg: "env", webAdminIsConfigSource };
|
|
18
|
+
case "catalog":
|
|
19
|
+
return { leg: "catalog" };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export const CATALOG_REFUSAL_LEG = { leg: "catalog" };
|
|
14
23
|
export function buildEnvModelIdNotServedNotice(config) {
|
|
15
24
|
if (servedModelTableLeg(config) !== "catalog" || config.envModel.id === "")
|
|
16
25
|
return undefined;
|
|
@@ -8,6 +8,17 @@
|
|
|
8
8
|
* (test 立案原话)。core 没有现成的「模型不可达」用户通告码 ⇒ 本仓铸,走既有的本仓铸码族([ref] 形:白名单 / 归属 / 消毒 / 隔离四件判据
|
|
9
9
|
* 一个不绕),不开第二条通道。core 7.38.0([ref])起本码在 core 码册里:受众 `NOTICE_AUDIENCE` = user、铸者 `NOTICE_MINTER` = `"server"`。
|
|
10
10
|
*
|
|
11
|
+
* ## 建议句(7.152.0):**说这一次失败真实的出路**
|
|
12
|
+
* 7.151.0 及以前,正文末句与 `detail.remedy` 对所有建连失败一律说「查 VPN / 代理;代理变过就重启」—— 对「拒连到一个没人监听的地址」(本机模型服务没起、
|
|
13
|
+
* 网关地址写错了端口)是错的方向:没走代理、没有 VPN 的人被指去查 VPN。现在建议句取自**失败类上的一张闭表**(`outbound-dispatcher.ts` 的
|
|
14
|
+
* `MODEL_UNREACHABLE_REMEDIES`,选句 {@link connectFailureRemedyOf} —— 运维日志 `outbound_connect_failed` 的 `hint` 尾句读同一行),
|
|
15
|
+
* 正文末句(`advice`)与 `detail.remedy` 是**同一行的两句**,不各写各的;失败类取自那张码闭集上每个码的 `failureClass`,本文件不另写码 → 类的映射。
|
|
16
|
+
* 选句规则(模型调用这一臂)三条,先到先得:
|
|
17
|
+
* ① 这一跳走了代理(`proxyInUse` 非空)⇒ 通用句(拒连 / 解析不了可能是**代理**那一头的事,出路仍是「查 VPN / 代理」);
|
|
18
|
+
* ② 失败类 `refused`(直连)⇒ 查那个地址上有没有服务在听、模型网关地址配得对不对;`unresolved`(直连)⇒ 地址写法 / DNS / VPN;`unreachable` ⇒ 通用句;
|
|
19
|
+
* ③ 码不在闭集里(类型上到不了,读者收 `string`)⇒ 通用句 —— 声明的未分类臂({@link connectFailureRemedyOf} 里写明),不抛、不静默。
|
|
20
|
+
* 建议句(`advice` / `remedy`)里没有任何配置值、代理地址、凭据(出路只说「那个地址」「网关地址配置」;模型端点的 `host:port` 只在正文前半句与 `detail.targetHost`,与既有一致,代理只以变量名出现)。
|
|
21
|
+
*
|
|
11
22
|
* ## 判据(一句):**这一次模型调用的终局是 `stopReason: "error"`,且它发出的最后一条请求在建连时就失败了**
|
|
12
23
|
* 「最后一条请求落在哪」由出网观察者记在调用作用域上(`model-reach-scope.ts`,undici 诊断通道,见 `outbound-dispatcher.ts`)——
|
|
13
24
|
* 不按目标主机 + 时间去猜。于是:
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
import { currentModelReachLeg, withModelCallReach } from "./model-reach-scope.js";
|
|
2
|
+
import { connectFailureRemedyOf } from "./outbound-dispatcher.js";
|
|
2
3
|
import { defaultEngineNoticeRouter } from "./trace/engine-notice-wire.js";
|
|
3
4
|
const SERVER_MODEL_UNREACHABLE = "server.model_unreachable";
|
|
4
|
-
const MODEL_UNREACHABLE_REMEDY = "check VPN / proxy; restart if the proxy changed since boot";
|
|
5
5
|
function announceModelUnreachable(leg, failure, router = defaultEngineNoticeRouter) {
|
|
6
6
|
if (leg.announced.has(failure.targetHost))
|
|
7
7
|
return;
|
|
8
8
|
leg.announced.add(failure.targetHost);
|
|
9
9
|
const via = failure.proxyInUse !== null ? ` through the proxy from ${failure.proxyInUse}` : "";
|
|
10
|
+
const { advice, remedy } = connectFailureRemedyOf(failure, "model_call");
|
|
10
11
|
router.route({
|
|
11
12
|
code: SERVER_MODEL_UNREACHABLE,
|
|
12
|
-
message: `The model endpoint could not be reached: the connection to ${failure.targetHost}${via} failed (${failure.code}).
|
|
13
|
-
"Check the VPN / proxy; if the proxy changed since the server started, restart it (proxy settings are read once at startup).",
|
|
13
|
+
message: `The model endpoint could not be reached: the connection to ${failure.targetHost}${via} failed (${failure.code}). ${advice}`,
|
|
14
14
|
detail: {
|
|
15
15
|
code: failure.code,
|
|
16
16
|
targetHost: failure.targetHost,
|
|
17
17
|
...(failure.proxyInUse !== null ? { proxyInUse: failure.proxyInUse } : {}),
|
|
18
|
-
remedy
|
|
18
|
+
remedy,
|
|
19
19
|
sessionId: leg.sessionId,
|
|
20
20
|
...(leg.taskId !== undefined ? { taskId: leg.taskId } : {}),
|
|
21
21
|
},
|