@sema-agent/server 7.151.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 +266 -0
- package/README.md +15 -3
- package/README.zh-CN.md +10 -2
- package/USAGE.md +93 -64
- package/deploy/sema-up/README.md +5 -4
- package/deploy/sema-up/cluster-up.sh +6 -6
- package/deploy/sema-up/kube-up.sh +5 -5
- package/deploy/sema-up/lib/flagshape.sh +36 -8
- package/deploy/sema-up/machines.example.yaml +3 -1
- package/deploy/sema-up/sema-up.sh +22 -16
- 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 +10 -12
- package/dist/approval-gate-currency.d.ts +8 -8
- 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/bind-host.d.ts +1 -3
- package/dist/bind-host.js +2 -3
- 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/execution-env.d.ts +1 -0
- package/dist/boot/execution-env.js +31 -5
- 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/parked-revive-gate.js +3 -15
- package/dist/boot/reapers.d.ts +1 -1
- package/dist/boot/reapers.js +1 -1
- package/dist/boot/resolve-spec.js +12 -26
- package/dist/boot/runner-deps.d.ts +39 -35
- package/dist/boot/runner-deps.js +92 -89
- package/dist/boot/shutdown.d.ts +6 -0
- package/dist/boot/shutdown.js +10 -4
- package/dist/boot/stage-02-web-admin-pull.js +4 -5
- package/dist/boot/stage-05-execution-env.js +2 -1
- package/dist/boot/stage-06-runners.d.ts +2 -0
- package/dist/boot/stage-06-runners.js +10 -4
- package/dist/boot/stage-07-capability-layer.d.ts +1 -0
- package/dist/boot/stage-07-capability-layer.js +1 -1
- package/dist/boot/stage-08-reapers.d.ts +1 -0
- package/dist/boot/stage-09-leader.d.ts +1 -0
- package/dist/boot/stage-09-leader.js +2 -2
- package/dist/boot/stage-10-http-server.d.ts +8 -0
- package/dist/boot/stage-10-http-server.js +11 -15
- package/dist/boot/stores.js +7 -4
- package/dist/boot/web-admin.js +2 -7
- 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 +22 -20
- package/dist/capability-facts.js +18 -34
- package/dist/card-rule-offers.d.ts +32 -0
- package/dist/card-rule-offers.js +130 -0
- package/dist/config-catalog.js +12 -11
- package/dist/config-dir-trust.js +4 -2
- package/dist/config-invariants.d.ts +18 -7
- package/dist/config-invariants.js +51 -8
- 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 +28 -38
- package/dist/config.d.ts +7 -5
- package/dist/config.js +55 -16
- 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/device-ws-hub.d.ts +7 -0
- package/dist/device-ws-hub.js +7 -1
- package/dist/elicitation.js +2 -2
- package/dist/entry-problems.d.ts +40 -3
- package/dist/entry-problems.js +3 -1
- package/dist/execution-env-refusal.d.ts +8 -2
- package/dist/execution-env-refusal.js +3 -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 +16 -1
- package/dist/host-decision.d.ts +11 -11
- package/dist/http/active-run-conflict.d.ts +35 -2
- package/dist/http/active-run-conflict.js +48 -19
- package/dist/http/approval-sweeps.d.ts +1 -1
- package/dist/http/approval-sweeps.js +5 -2
- package/dist/http/checkpoint-ctx.d.ts +2 -0
- package/dist/http/checkpoint-ctx.js +1 -0
- package/dist/http/dispatch.d.ts +6 -2
- package/dist/http/dispatch.js +25 -5
- package/dist/http/durable-run-leg.js +0 -1
- package/dist/http/health-reader.d.ts +16 -9
- package/dist/http/health-reader.js +2 -1
- package/dist/http/health-self-report.js +1 -1
- package/dist/http/owner-access.d.ts +2 -3
- package/dist/http/owner-access.js +3 -4
- 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 +20 -3
- package/dist/http/resume-legs.d.ts +2 -2
- package/dist/http/resume-legs.js +111 -41
- package/dist/http/route-ctx.d.ts +73 -7
- package/dist/http/route-ctx.js +17 -0
- package/dist/http/route-table.d.ts +4 -0
- 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.js +3 -3
- package/dist/http/routes/adoption.js +3 -5
- package/dist/http/routes/approvals-assistant.d.ts +2 -1
- package/dist/http/routes/approvals-assistant.js +95 -48
- package/dist/http/routes/capabilities.d.ts +4 -0
- package/dist/http/routes/capabilities.js +30 -5
- 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/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/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 +73 -33
- package/dist/http/routes/session-sync.d.ts +18 -6
- package/dist/http/routes/session-sync.js +38 -36
- package/dist/http/routes/sessions.js +20 -9
- package/dist/http/routes/tasks.js +28 -37
- package/dist/http/routes/workflows.js +1 -1
- package/dist/http/server.d.ts +9 -3
- package/dist/http/server.js +15 -3
- package/dist/http/submit-ctx.d.ts +1 -1
- package/dist/http/submit-ctx.js +2 -0
- package/dist/human-facing-args.d.ts +33 -0
- package/dist/human-facing-args.js +33 -0
- package/dist/index.d.ts +1 -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 +1 -1
- package/dist/lane-home-probe.js +2 -1
- package/dist/leader/diffup.d.ts +19 -0
- package/dist/leader/diffup.js +7 -0
- package/dist/leader/leader.d.ts +114 -10
- 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/memory-scope.d.ts +20 -9
- package/dist/memory-scope.js +15 -3
- 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/fail-open.d.ts +20 -16
- package/dist/observability/fail-open.js +20 -16
- package/dist/observability/logger.js +3 -1
- package/dist/operator-roster.d.ts +68 -0
- package/dist/operator-roster.js +32 -0
- package/dist/orchestration/workflow-park-decision.d.ts +1 -1
- package/dist/outbound-dispatcher.d.ts +71 -8
- package/dist/outbound-dispatcher.js +48 -7
- package/dist/owner-faces.d.ts +1 -1
- package/dist/parked-decide.d.ts +2 -2
- package/dist/permission-mode-admission.d.ts +59 -26
- package/dist/permission-mode-admission.js +37 -10
- package/dist/plugins/approval-ask-store-file.d.ts +4 -0
- package/dist/plugins/approval-ask-store-file.js +3 -0
- package/dist/plugins/approval-ask-store-memory.d.ts +4 -0
- package/dist/plugins/approval-ask-store-memory.js +7 -1
- package/dist/plugins/approval-ask-store-sql.d.ts +26 -2
- package/dist/plugins/approval-ask-store-sql.js +12 -1
- package/dist/plugins/blob-backend.d.ts +83 -7
- package/dist/plugins/blob-backend.js +57 -6
- 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/landed-attendants.d.ts +2 -2
- package/dist/plugins/local-checkpoint-store.d.ts +13 -3
- package/dist/plugins/local-checkpoint-store.js +38 -49
- package/dist/plugins/one-time-migrations.d.ts +51 -21
- package/dist/plugins/one-time-migrations.js +67 -45
- package/dist/plugins/pg-pool.js +11 -9
- package/dist/plugins/remote-env-host.d.ts +29 -10
- package/dist/plugins/remote-env-host.js +99 -19
- package/dist/plugins/remote-env-k8s.d.ts +68 -2
- package/dist/plugins/remote-env-k8s.js +107 -24
- package/dist/plugins/replica-registration.d.ts +1 -1
- package/dist/plugins/replica-registration.js +1 -1
- package/dist/plugins/s3-presign.d.ts +23 -0
- package/dist/plugins/s3-presign.js +37 -3
- package/dist/plugins/scheduler-support.d.ts +2 -2
- package/dist/plugins/scheduler-support.js +0 -3
- 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 +2 -2
- package/dist/plugins/send-user-file.d.ts +3 -4
- package/dist/plugins/send-user-file.js +56 -52
- 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/snapshot-bucket-presence.d.ts +25 -2
- package/dist/plugins/snapshot-bucket-presence.js +8 -2
- package/dist/plugins/sql-json-column.d.ts +1 -1
- package/dist/plugins/store-backend.d.ts +44 -2
- package/dist/plugins/store-backend.js +75 -53
- package/dist/plugins/task-attachment-store.d.ts +2 -1
- package/dist/plugins/task-attachment-store.js +5 -1
- package/dist/plugins/tidb-pool.js +19 -24
- package/dist/plugins/workspace-custody.d.ts +4 -3
- 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/rule-issue-reading.d.ts +1 -1
- package/dist/rules-consent.d.ts +1 -1
- package/dist/run-local.js +8 -9
- package/dist/runs.d.ts +17 -8
- package/dist/runs.js +15 -2
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/sema-config-dir.d.ts +2 -1
- package/dist/session-sync.d.ts +27 -11
- package/dist/session-sync.js +15 -7
- 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 +64 -16
- package/dist/stores-sql/file-history-store-sql.js +100 -28
- package/dist/stores-sql/retention-store-sql.js +3 -9
- package/dist/task-settings.d.ts +6 -5
- package/dist/task-settings.js +3 -3
- package/dist/tool-approval.d.ts +342 -518
- package/dist/tool-approval.js +498 -1207
- 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 +287 -157
- package/dist/trace/self-minted-wire.js +93 -48
- 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 +1 -1
- package/package.json +6 -2
- package/scripts/embed-minimal.mjs +3 -3
- 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
|
@@ -49,6 +49,20 @@ export const SELF_MINTED_WIRE = {
|
|
|
49
49
|
},
|
|
50
50
|
retired: {},
|
|
51
51
|
},
|
|
52
|
+
fleetFlatEngineState: {
|
|
53
|
+
at: "fleet 心跳 POST <中心>/api/fleet/instances 体顶层 · GET /health 体顶层(8.0 平铺引擎态方言;引擎态改读 engineSignal)",
|
|
54
|
+
members: {},
|
|
55
|
+
retired: {
|
|
56
|
+
"POST /api/fleet/instances#ready": { attr: "boolean, always present (the readiness verdict; now engineSignal.ready)", since: "1.189.0", until: "7.152.0" },
|
|
57
|
+
"POST /api/fleet/instances#draining": { attr: "boolean, always present (true iff the drain fact is present; now engineSignal.draining present)", since: "1.189.0", until: "7.152.0" },
|
|
58
|
+
"POST /api/fleet/instances#restart": { attr: "present-iff a restart signal ({ reasons, version, since, withheld? }; now engineSignal.restart)", since: "7.102.0", until: "7.152.0" },
|
|
59
|
+
"POST /api/fleet/instances#generation": { attr: "present-iff fleet member (FLEET_GENERATION echo; now engineSignal.generation)", since: "7.121.0", until: "7.152.0" },
|
|
60
|
+
"POST /api/fleet/instances#leaseState": { attr: "present-iff fleet member (LeaseState word; now engineSignal.leaseState)", since: "7.121.0", until: "7.152.0" },
|
|
61
|
+
"POST /api/fleet/instances#leaseUntil": { attr: "present-iff leaseState granted (epoch ms; now engineSignal.leaseUntil)", since: "7.121.0", until: "7.152.0" },
|
|
62
|
+
"GET /health#draining": { attr: "true, present-iff draining (now engineSignal.draining present)", since: "1.189.0", until: "7.152.0" },
|
|
63
|
+
"GET /health#drainingSince": { attr: "epoch ms, present-iff draining (now engineSignal.draining.since)", since: "1.189.0", until: "7.152.0" },
|
|
64
|
+
},
|
|
65
|
+
},
|
|
52
66
|
sessionMemoryEraseStatus: {
|
|
53
67
|
at: "POST /v1/sessions/:id/memory/erase(已分类拒 errorCode → HTTP 状态)",
|
|
54
68
|
members: {
|
|
@@ -79,23 +93,13 @@ export const SELF_MINTED_WIRE = {
|
|
|
79
93
|
},
|
|
80
94
|
},
|
|
81
95
|
notPendingCause: {
|
|
82
|
-
at: "
|
|
83
|
-
members: {
|
|
84
|
-
routing_failure_fail_closed: { attr: "-", since: "7.124.0" },
|
|
85
|
-
run_cancelled: { attr: "-", since: "7.124.0" },
|
|
86
|
-
run_exited: { attr: "-", since: "7.124.0" },
|
|
87
|
-
batch_aborted: { attr: "-", since: "7.124.0" },
|
|
88
|
-
batch_sibling_withdrawn: { attr: "-", since: "7.124.0" },
|
|
89
|
-
batch_bound_elsewhere: { attr: "-", since: "7.124.0" },
|
|
90
|
-
adhoc_leg_no_durable_domain: { attr: "-", since: "7.124.0" },
|
|
91
|
-
orphan_ttl_exceeded: { attr: "-", since: "7.124.0" },
|
|
92
|
-
crashed_before_park: { attr: "-", since: "7.124.0" },
|
|
93
|
-
shutdown_before_park: { attr: "-", since: "7.124.0" },
|
|
96
|
+
at: "GET /v1/tasks/:taskId/asks/:askId 404 tool_approval.not_pending cause",
|
|
97
|
+
members: {
|
|
94
98
|
unknown_or_other_replica: { attr: "-", since: "7.40.0" },
|
|
95
99
|
},
|
|
96
100
|
},
|
|
97
101
|
toolApprovalReadState: {
|
|
98
|
-
at: "GET /v1/
|
|
102
|
+
at: "GET /v1/tasks/:taskId/asks/:askId 200 state",
|
|
99
103
|
members: {
|
|
100
104
|
pending: { attr: "-", since: "7.133.0" },
|
|
101
105
|
decided: { attr: "-", since: "7.133.0" },
|
|
@@ -104,7 +108,7 @@ export const SELF_MINTED_WIRE = {
|
|
|
104
108
|
},
|
|
105
109
|
},
|
|
106
110
|
toolApprovalReadVoidCause: {
|
|
107
|
-
at: "GET /v1/
|
|
111
|
+
at: "GET /v1/tasks/:taskId/asks/:askId 200 state:void cause",
|
|
108
112
|
members: {
|
|
109
113
|
routing_failure_fail_closed: { attr: "-", since: "7.133.0" },
|
|
110
114
|
run_cancelled: { attr: "-", since: "7.133.0" },
|
|
@@ -118,25 +122,6 @@ export const SELF_MINTED_WIRE = {
|
|
|
118
122
|
shutdown_before_park: { attr: "-", since: "7.133.0" },
|
|
119
123
|
},
|
|
120
124
|
},
|
|
121
|
-
toolApprovalCompleteCause: {
|
|
122
|
-
at: "tool_approval_complete frame cause",
|
|
123
|
-
members: {
|
|
124
|
-
ttl_expired: { attr: "key:cause", since: "7.124.0" },
|
|
125
|
-
broadcast_lost: { attr: "key:cause", since: "7.124.0" },
|
|
126
|
-
stream_disconnected: { attr: "key:cause", since: "7.124.0" },
|
|
127
|
-
undeliverable: { attr: "key:cause", since: "7.124.0" },
|
|
128
|
-
run_cancelled: { attr: "key:cause", since: "7.124.0" },
|
|
129
|
-
run_exited: { attr: "key:cause", since: "7.124.0" },
|
|
130
|
-
batch_aborted: { attr: "key:cause", since: "7.124.0" },
|
|
131
|
-
batch_sibling_withdrawn: { attr: "key:cause", since: "7.124.0" },
|
|
132
|
-
batch_bound_elsewhere: { attr: "key:cause", since: "7.124.0" },
|
|
133
|
-
routing_failure_fail_closed: { attr: "key:cause", since: "7.124.0" },
|
|
134
|
-
crashed_before_park: { attr: "key:cause", since: "7.124.0" },
|
|
135
|
-
shutdown_before_park: { attr: "key:cause", since: "7.124.0" },
|
|
136
|
-
orphan_ttl_exceeded: { attr: "key:cause", since: "7.124.0" },
|
|
137
|
-
adhoc_leg_no_durable_domain: { attr: "key:cause", since: "7.124.0" },
|
|
138
|
-
},
|
|
139
|
-
},
|
|
140
125
|
approvalCompleteCause: {
|
|
141
126
|
at: "approval_complete frame cause",
|
|
142
127
|
members: {
|
|
@@ -326,6 +311,28 @@ export const SELF_MINTED_WIRE = {
|
|
|
326
311
|
sealedModelKeys: { attr: "always", since: "1.214.2" },
|
|
327
312
|
sealedPoisonedModels: { attr: "always", since: "1.214.2" },
|
|
328
313
|
workflowRunStore: { attr: "always", since: "1.214.2" },
|
|
314
|
+
controlSocket: { attr: "present-iff the local control socket is listening (absolute path; exactly one of controlSocket / controlSocketUnavailable)", since: "7.152.0" },
|
|
315
|
+
controlSocketUnavailable: { attr: "present-iff the local control socket is not listening (reason word; exactly one of controlSocket / controlSocketUnavailable)", since: "7.152.0" },
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
controlSocketUnavailableReason: {
|
|
319
|
+
at: "stdout 启动协议行 listening controlSocketUnavailable",
|
|
320
|
+
members: {
|
|
321
|
+
unsupported_platform: { attr: "-", since: "7.152.0" },
|
|
322
|
+
data_root_not_exclusive: { attr: "-", since: "7.152.0" },
|
|
323
|
+
path_too_long: { attr: "-", since: "7.152.0" },
|
|
324
|
+
dir_not_private: { attr: "-", since: "7.152.0" },
|
|
325
|
+
path_occupied: { attr: "-", since: "7.152.0" },
|
|
326
|
+
bind_failed: { attr: "-", since: "7.152.0" },
|
|
327
|
+
},
|
|
328
|
+
},
|
|
329
|
+
healthAnonymousKey: {
|
|
330
|
+
at: "GET /health(匿名读者:配了服务凭据而未出示凭据、不经控制 socket)",
|
|
331
|
+
members: {
|
|
332
|
+
status: { attr: "always", since: "7.148.0" },
|
|
333
|
+
auth: { attr: "always", since: "7.148.0" },
|
|
334
|
+
operator: { attr: "always", since: "7.148.0" },
|
|
335
|
+
center: { attr: "always", since: "7.148.0" },
|
|
329
336
|
},
|
|
330
337
|
},
|
|
331
338
|
healthStoreKey: {
|
|
@@ -552,7 +559,6 @@ export const SELF_MINTED_WIRE = {
|
|
|
552
559
|
extensionRequesterSeat: {
|
|
553
560
|
at: "审批开卡帧上的 requestedBy(<帧>#requestedBy → 在场律)",
|
|
554
561
|
members: {
|
|
555
|
-
"tool_approval#requestedBy": { attr: "present-iff extension-initiated call", since: "7.138.0" },
|
|
556
562
|
"approval_request#requestedBy": { attr: "present-iff extension-initiated call", since: "7.138.0" },
|
|
557
563
|
},
|
|
558
564
|
},
|
|
@@ -602,6 +608,7 @@ export const SELF_MINTED_WIRE = {
|
|
|
602
608
|
members: {
|
|
603
609
|
not_in_roster: { attr: "-", since: "7.133.0" },
|
|
604
610
|
home_unresolvable: { attr: "-", since: "7.133.0" },
|
|
611
|
+
cc_rule_form: { attr: "-", since: "7.133.0" },
|
|
605
612
|
},
|
|
606
613
|
},
|
|
607
614
|
invalidJsonReason: {
|
|
@@ -714,6 +721,14 @@ export const SELF_MINTED_WIRE = {
|
|
|
714
721
|
repo: { attr: "-", since: "1.214.2" },
|
|
715
722
|
},
|
|
716
723
|
},
|
|
724
|
+
scenarioSource: {
|
|
725
|
+
at: "GET /v1/capabilities/scenario#source · 503 state.scenario_assignment_unknown 体根 source",
|
|
726
|
+
members: {
|
|
727
|
+
request: { attr: "-", since: "7.152.0" },
|
|
728
|
+
ruling: { attr: "-", since: "7.119.0" },
|
|
729
|
+
deployment: { attr: "-", since: "7.119.0" },
|
|
730
|
+
},
|
|
731
|
+
},
|
|
717
732
|
scenarioSkillSource: {
|
|
718
733
|
at: "GET /v1/capabilities/scenarios/:name#skills[].source",
|
|
719
734
|
members: {
|
|
@@ -797,7 +812,7 @@ export const SELF_MINTED_WIRE = {
|
|
|
797
812
|
},
|
|
798
813
|
},
|
|
799
814
|
livePendingAdoptedRowKey: {
|
|
800
|
-
at: "GET /v1/approvals livePending[] 行顶层 · /v1/approvals/stream live_pending 帧 · GET /v1/
|
|
815
|
+
at: "GET /v1/approvals livePending[] 行顶层 · /v1/approvals/stream live_pending 帧 · GET /v1/tasks/:taskId/asks/:askId pending 体(起服接管行)",
|
|
801
816
|
members: {
|
|
802
817
|
mandated: { attr: "present-iff recorded on the ask row (adopted rows; same value as row.frame)", since: "7.143.0" },
|
|
803
818
|
mandate: { attr: "present-iff recorded on the ask row (adopted rows; same value as row.frame)", since: "7.143.0" },
|
|
@@ -805,6 +820,15 @@ export const SELF_MINTED_WIRE = {
|
|
|
805
820
|
liveFactsUnknown: { attr: "present-iff row.frame.liveFactsUnknown (adopted rows only)", since: "7.143.0" },
|
|
806
821
|
},
|
|
807
822
|
},
|
|
823
|
+
livePendingRowSourceKey: {
|
|
824
|
+
at: "GET /v1/approvals livePending[] 行顶层 · /v1/approvals/stream live_pending 帧 · GET /v1/tasks/:taskId/asks/:askId pending 体(委派子代的行)",
|
|
825
|
+
members: {
|
|
826
|
+
sourceSessionId: { attr: "present-iff fromSubagent (the delegated child's session id; same value as the key on row.frame.card)", since: "7.152.0" },
|
|
827
|
+
},
|
|
828
|
+
retired: {
|
|
829
|
+
originTaskId: { attr: "present-iff fromSubagent (the delegated child's session id; the same value now under sourceSessionId)", since: "7.52.0", until: "7.152.0" },
|
|
830
|
+
},
|
|
831
|
+
},
|
|
808
832
|
approvalQueuePendingKey: {
|
|
809
833
|
at: "GET /v1/approvals pending[] 行 · GET /v1/approvals/stream pending 帧(停驻技能卡的批准绑定三位;与助手收件箱行同一只投影)",
|
|
810
834
|
members: {
|
|
@@ -816,7 +840,7 @@ export const SELF_MINTED_WIRE = {
|
|
|
816
840
|
approvalQueueRowVerdict: {
|
|
817
841
|
at: "GET /v1/approvals pending[] 行 · GET /v1/approvals/stream pending 帧(停驻门族)的 rowVerdict",
|
|
818
842
|
members: {
|
|
819
|
-
rowVerdict: { attr: "
|
|
843
|
+
rowVerdict: { attr: "always (every listed row is judged on this listing; 7.144.0–7.151.x: SQL rows could omit it)", since: "7.144.0" },
|
|
820
844
|
},
|
|
821
845
|
},
|
|
822
846
|
approvalQueueRowAgent: {
|
|
@@ -946,13 +970,14 @@ export const SELF_MINTED_WIRE = {
|
|
|
946
970
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#images_url_credential(新提交;体 request.field_invalid + field images[i].url + reason url_userinfo|url_credential_param)": { attr: 400, since: "7.136.0" },
|
|
947
971
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_malformed(新提交;列表不是数组 / 条目不是对象 / 键值判不出形;体 request.field_invalid)": { attr: 400, since: "7.136.0" },
|
|
948
972
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_unknown_key(新提交;词表外的键;体 request.body_shape + unknownKeys)": { attr: 400, since: "7.136.0" },
|
|
949
|
-
"POST /v1/tool-approvals/:id/respond#new_owner_after_adoption(收编之后的新属主;本副本上仍有引擎腿在等的活卡,决议交给那条腿)": { attr: 200, since: "7.136.0" },
|
|
950
|
-
"GET /v1/tool-approvals/:id#previous_owner_after_adoption(收编之后的前属主;按问读口)": { attr: 404, since: "7.136.0" },
|
|
951
|
-
"POST /v1/tool-approvals/:id/respond#edited_rule_text_refused_after_adoption(匿名活卡收编给具名主体后新属主交坏规则文本;体 request.body_shape;契约成文的判据,今天经 /v1/adoption 到不了)": { attr: 400, since: "7.136.0" },
|
|
952
973
|
"POST /v1/tasks|/v1/runs#command_line_slots_without_sealed_key_store(stdio MCP 的 command / args 与 command hook 的 command / args;体 conflict.checkpoint_ctx_unsealable + field + reason no_key_store;POST /v1/tasks/stream 在终局帧上带本码;本服务自己的装配下不可达(装配期已对「店在而封签器缺席」拒启,见 submit-ctx.ts 自述))": { attr: 409, since: "7.136.0" },
|
|
953
974
|
"ALL authenticated routes#bearer_token_without_scope_claim(鉴权桥验证腿;配了 service 凭据或多租 REQUIRE_PRINCIPAL 的部署;体通用 auth.unauthorized)": { attr: 401, since: "7.136.0" },
|
|
954
975
|
"ALL routes after the auth-bridge pre-authentication (not GET /health)#sso_token_foreign_scope(fleet 成员 FLEET_GENERATION 在场;验过签的登记中心登录令牌 scope ≠ FLEET_SCOPE〔缺席 = 缺省 scope〕;同一枚 Bearer 是本部署 service 凭据的不在此列;体 auth.scope_mismatch)": { attr: 403, since: "7.151.0" },
|
|
955
|
-
"
|
|
976
|
+
"ALL routes after the auth-bridge pre-authentication except POST /v1/admin/drain (not GET /health, /readyz, /metrics*)#drain_principal_confined(验过的人在 OPERATOR_DRAIN_PRINCIPALS;三来源同判:登记中心登录令牌 / 直连门 principal 令牌 / 受信主体头;先于门前读路、凭据门、写门与就绪 503、门后段与 405 / 404;体 auth.principal_confined)": { attr: 403, since: "7.152.0" },
|
|
977
|
+
"POST /v1/approvals/:sessionId/decide|POST /v1/assistant/tasks/:id/plan_review|peer_inbound 决断臂#direct_door_decider_confined(直连门:决定证明推出的决定者在 OPERATOR_DRAIN_PRINCIPALS;证明验过之后、任何归属读之前;零状态变化;体 auth.principal_confined)": { attr: 403, since: "7.152.0" },
|
|
978
|
+
"POST /v1/admin/drain#drain_principal(验过的人在 OPERATOR_DRAIN_PRINCIPALS;身份四元相符)": { attr: 200, since: "7.152.0" },
|
|
979
|
+
"GET /health#drain_principal_credential(配了 service 凭据;请求只带排空档主体的身份、没出示 service / trace 凭据 ⇒ 匿名四键形)": { attr: 200, since: "7.152.0" },
|
|
980
|
+
"POST /v1/tasks|/v1/tasks/stream|/v1/runs|其余 fail-closed 写口(计费提交 · bake · 改写门 · 破坏性会话写)与 POST /v1/tasks/:taskId/asks/:askId/decision 的停驻赎回臂#verified_sign_in_token_without_service_credential(部署只接了鉴权桥 —— AUTH_BRIDGE_ISSUER 或接了中心的回退 issuer —— 没配 SERVICE_AUTH_TOKEN(S)、没开 ALLOW_UNAUTHED_WRITES;请求出示鉴权桥验过的登记中心登录令牌;没带过门凭据的请求仍 503)": { attr: "该口自己的受理(POST /v1/runs 202 · POST /v1/tasks 同步 200 …)", since: "7.151.0" },
|
|
956
981
|
"ALL principal-reading routes#principal_not_a_name(主体头 / SSO 令牌的 sub / 直连门 JWT 的 sub 不是一位主体的名字:空 / 空白 / 带控制、行段分隔或不可见格式字符;体 principal_not_a_name)": { attr: 400, since: "7.137.0" },
|
|
957
982
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#promptProfile(新提交;体 request.body_shape + unknownKeys [promptProfile])": { attr: 400, since: "7.137.0" },
|
|
958
983
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#skills[i].mods|agents[i].skills[j].mods(新提交;体 request.field_invalid)": { attr: 400, since: "7.137.0" },
|
|
@@ -962,6 +987,10 @@ export const SELF_MINTED_WIRE = {
|
|
|
962
987
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#user 层 / 形路径规则而执行环境的配置根读不出(沙箱车道没转 SEMA_CONFIG_DIR 且 home 未知;体 request.unprocessable + problems[].reason home_unresolvable;续跑 409 同句)": { attr: 422, since: "7.141.0" },
|
|
963
988
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#settings.permissions.allow 带层条目 { rule, layer }(新提交;layer = 设置来源词)": { attr: 200, since: "7.143.0" },
|
|
964
989
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#allow 桶里 user 层 / 形路径规则而执行环境的配置根读不出(沙箱车道没转 SEMA_CONFIG_DIR 且 home 未知;体 request.unprocessable + field settings.permissions.allow + problems[].reason home_unresolvable;续跑 409 同句)": { attr: 422, since: "7.143.0" },
|
|
990
|
+
"POST /v1/tasks/:taskId/asks/:askId/decision#remember(本会话放行;只配 approve;体带 rememberApplied)": { attr: 200, since: "7.152.0" },
|
|
991
|
+
"POST /v1/tasks/:taskId/asks/:askId/decision#persistRule(不再询问;首决体带回执规则位 rulePersisted / ruleRefusal / persistedRule / persistedRules / persistedRuleAnchors)": { attr: 200, since: "7.152.0" },
|
|
992
|
+
"POST /v1/tasks/:taskId/asks/:askId/decision#readRootGrant(添加读目录;只随不带 remember 的 approve,只在单用户 host 车道受理)": { attr: 200, since: "7.152.0" },
|
|
993
|
+
"POST /v1/approvals/:sessionId/decide#persistRule(停驻工具审批卡的首决;体带回执规则位 rulePersisted / ruleRefusal / persistedRule / persistedRules / persistedRuleAnchors)": { attr: 200, since: "7.152.0" },
|
|
965
994
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#限制侧名内带 *(excludeTools)": { attr: 200, since: "7.137.0" },
|
|
966
995
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#限制侧名内带 *(skills[i].disallowedTools|agents[i].skills[j].disallowedTools)": { attr: 200, since: "7.137.0" },
|
|
967
996
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#限制侧名内带 *(agents[i].denyTools)": { attr: 200, since: "7.137.0" },
|
|
@@ -1010,6 +1039,9 @@ export const SELF_MINTED_WIRE = {
|
|
|
1010
1039
|
"POST /v1/approvals/:sessionId/decide|/v1/sessions/:id/wake|/v1/assistant/tasks/:id/resume|/v1/assistant/tasks/:id/plan_review#根会话 id 是本进程删过的会话 id、行上的住客不是删前属主(续跑家族 / 停驻赎回 / 工作流决断后的宿主新轮;认领之前,卡仍待决;体 resume_blocked_by_policy + blockedBy conflict.session_id_retired + retriable)": { attr: 409, since: "7.146.0" },
|
|
1011
1040
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#scenario_assignment_unavailable(新提交;部署接了配置中心、请求带主体,而中心答不出这位主体的场景裁定:不可达 / 超时 / 答复读不出 / 指派两键形不对或只发一键;点名与不点名同拒;零 run;体 state.scenario_assignment_unavailable + permanence: transient,无 detail)": { attr: 503, since: "7.147.0" },
|
|
1012
1041
|
"GET /v1/capabilities/mcp|/v1/sessions/:id/a2a#scenario_assignment_unavailable(与提交腿同一只场景门;缺席与点名的场景名同拒;整面;体同上)": { attr: 503, since: "7.147.0" },
|
|
1042
|
+
"GET /v1/capabilities/scenario#scenario_unknown|scenario_not_allowed|scenario_conflict(门拒原样:点名不在册 / 白名单外 / 场景头与 ?scenario= 不同;体与同一请求形的提交拒体逐字同)": { attr: 400, since: "7.152.0" },
|
|
1043
|
+
"GET /v1/capabilities/scenario#scenario_assignment_unknown|scenario_assignment_unavailable(门拒原样:指派悬空 / 中心答不出;体同提交腿;答不出不回落任何缺省)": { attr: 503, since: "7.152.0" },
|
|
1044
|
+
"GET /v1/capabilities/mcp#scenario_conflict(场景头 x-agent-scenario 与 ?scenario= 不同;与提交腿同一只点名读法)": { attr: 400, since: "7.152.0" },
|
|
1013
1045
|
"POST /v1/approvals/:sessionId/decide|/v1/sessions/:id/wake|/v1/assistant/tasks/:id/resume|/v1/assistant/tasks/:id/plan_review#scenario_assignment_unavailable(续跑家族经装配的那几条;认领之前,卡仍待决;不折 resume_blocked_by_policy;体 state.scenario_assignment_unavailable + permanence: transient + retriable)": { attr: 503, since: "7.147.0" },
|
|
1014
1046
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#settings.env 有成员不是帽内的串(新提交;只在采纳 env 的车道上:单用户 host / device,或采纳请求体 hooks 且请求带着 hooks;零 run;体 request.field_invalid + field settings.env,句子点名坐标、不回显值)": { attr: 400, since: "7.147.0" },
|
|
1015
1047
|
"POST /v1/approvals/:sessionId/decide|/v1/sessions/:id/wake|/v1/assistant/tasks/:id/resume|/v1/assistant/tasks/:id/plan_review#stored_unread_members(续跑将要跑的那一份体 —— 存量体,重述键在场时盖过重述之后 —— 里有本版读者读不出、而本部署本会采纳的成员:settings.hooks / settings.env / 其余 settings 延后键 / mcpServers[i].transport / a2aPeers[i].headers;认领之前,卡仍待决;体 resume_blocked_by_policy + blockedBy request.field_invalid + field + retriable)": { attr: 409, since: "7.147.0" },
|
|
@@ -1028,15 +1060,14 @@ export const SELF_MINTED_WIRE = {
|
|
|
1028
1060
|
"POST /v1/tasks#park_commit_ended(同步腿停在要批的门上,而停驻提交答出这条 run 没有停住、已收场 —— 停驻写之前已按下取消 / 被失联收割 / 别处终结;卡已作废;体 = 收场那一行的信封,与同键重放同一只:终局行的结果,取消那一形 terminal.code cancelled;行上无结果 ⇒ 回执三键)": { attr: 200, since: "7.149.0" },
|
|
1029
1061
|
"POST /v1/approvals/:sessionId/decide|/v1/sessions/:id/wake|/v1/assistant/tasks/:id/resume|/v1/assistant/tasks/:id/plan_review#resume_park_ended(续跑腿再停 / 重开时停驻提交答出这条 run 已收场;卡已作废;体 status / errorCode = 收场那一行的,不带 retriable)": { attr: 200, since: "7.149.0" },
|
|
1030
1062
|
"POST /v1/runs/:id/interrupt#body_with_fields(体带任何顶层键 —— 含早先版本受理的 text;非对象体同答;判在查 run 之前:任何 run 状态、属主、存在与否同一只体;体 request.body_shape + unknownKeys(键全在此)+ unsupportedKeys(恒空))": { attr: 400, since: "7.148.0" },
|
|
1031
|
-
"GET /v1/tool-approvals/:id#row_unreadable(有行的问,按 id 读行那一拍店抛 / 超时;本副本自己铸的活卡与起服接管的登记同答;体 not_found.ask,与查无 / 不是你的逐字节同)": { attr: 404, since: "7.149.0" },
|
|
1032
1063
|
"POST /v1/sessions/:id/sync/plan|POST /v1/sessions/:id/sync/import|PUT /v1/sessions/:id/sync/blobs/:hash#foreign_session_deleting(推送三口的门:id 上是别的主体正在删除的会话 —— 删除围栏已立、尚未删净;「被占着」读活行 ∪ 在删行,与对别人的活行同答;本人 / fleet 对自己在删的会话不变,拉取口仍只认活行;体 not_found.session,与对不存在 id 的拉取答复逐字节同)": { attr: 404, since: "7.149.0" },
|
|
1033
1064
|
"POST /v1/sessions/:id/sync/import#idle_id_other_principal_in_flight(第一阶段:id 上还没有会话行,而另一个主体在这只 id 上的第一阶段正在飞;导入租约键 = 落点属主格 + 会话 id,空闲 id 上各占各的;体 = 第一阶段的暂存回执 stagingId;先提交者得,输的那一份在提交前复判答 404 not_found.session,与赢家的提交撞在同一刻时由店的属主 CAS 拒 409 conflict)": { attr: 200, since: "7.149.0" },
|
|
1034
1065
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_headers_reserved_member(新提交;a2aPeers[i].headers 的成员名是 constructor / prototype —— 与 mcpServers[i].transport.headers / .env 同一张保留成员名表、同一只读法,大小写敏感;体 request.field_invalid + field 成员级路径 a2aPeers[i].headers.<名>;存盘续跑体里同形 ⇒ 续跑家族既有一面 #stored_unread_members 409)": { attr: 400, since: "7.149.0" },
|
|
1035
1066
|
"POST /v1/tasks|/v1/runs#rewindFilesTo_with_cascade(新提交;提交体同带非空串 `rewindFilesTo` 与 `cascade: true` —— 梯级每一级在引擎现铸的会话里跑、不取根,文件回退无处落地;拒在任何副作用之前、梯子一级都不起;体 request.field_conflict + reason cascade_verify + fields [rewindFilesTo, cascade];`/v1/tasks/stream` 上带 `cascade` 的提交本来就 400(同码),不入此面)": { attr: 400, since: "7.151.0" },
|
|
1036
|
-
"POST /v1/tasks/:taskId/asks/:askId/decision#parked_redeemed(问已转停驻、门仍开着,部署接了停驻赎回 —— 非直连门;交与 live 应答口停驻臂同一只赎回;体 = 本口基本键 + accepted parked_redeemed + 赎回受理体;受理之后决定记在问行上)": { attr: 200,
|
|
1037
|
-
"POST /v1/tasks/:taskId/asks/:askId/decision#parked_standing_same_key(问已转停驻、门上已站着一次决定,本次请求的 idempotencyKey 就是问行上记录的那一把;体 = 首决回放,与 DECIDED 行的回放同一只渲染)": { attr: 200,
|
|
1038
|
-
"POST /v1/tasks/:taskId/asks/:askId/decision#parked_standing_conflict(问已转停驻、门上已站着一次决定,本次请求不是记录上那一把键 / 没带键;体 conflict.ask_decided 回显首决;首决取问行上答的就是门上这一次的那份记录,否则取停驻门)": { attr: 409,
|
|
1039
|
-
"POST /v1/tasks/:taskId/asks/:askId/decision#parked_redemption_refused(问已转停驻、门仍开着,停驻赎回没生效且门此刻仍没决;体 = 赎回的拒原样:429 成本配额 + Retry-After / 503 服务凭据或就绪 / 409 approval_stale 或 conflict.not_resumable / 400 decide_requires_binding / 500;赎回的 404 改答本口的 not_found.ask)": { attr: "as the shared parked redemption answers (429 / 503 / 409 / 400 / 500; its 404 ⇒ 404 not_found.ask)",
|
|
1067
|
+
"POST /v1/tasks/:taskId/asks/:askId/decision#parked_redeemed(问已转停驻、门仍开着,部署接了停驻赎回 —— 非直连门;交与 live 应答口停驻臂同一只赎回;体 = 本口基本键 + accepted parked_redeemed + 赎回受理体;受理之后决定记在问行上)": { attr: 200, since: "7.151.0" },
|
|
1068
|
+
"POST /v1/tasks/:taskId/asks/:askId/decision#parked_standing_same_key(问已转停驻、门上已站着一次决定,本次请求的 idempotencyKey 就是问行上记录的那一把;体 = 首决回放,与 DECIDED 行的回放同一只渲染)": { attr: 200, since: "7.151.0" },
|
|
1069
|
+
"POST /v1/tasks/:taskId/asks/:askId/decision#parked_standing_conflict(问已转停驻、门上已站着一次决定,本次请求不是记录上那一把键 / 没带键;体 conflict.ask_decided 回显首决;首决取问行上答的就是门上这一次的那份记录,否则取停驻门)": { attr: 409, since: "7.151.0" },
|
|
1070
|
+
"POST /v1/tasks/:taskId/asks/:askId/decision#parked_redemption_refused(问已转停驻、门仍开着,停驻赎回没生效且门此刻仍没决;体 = 赎回的拒原样:429 成本配额 + Retry-After / 503 服务凭据或就绪 / 409 approval_stale 或 conflict.not_resumable / 400 decide_requires_binding / 500;赎回的 404 改答本口的 not_found.ask)": { attr: "as the shared parked redemption answers (429 / 503 / 409 / 400 / 500; its 404 ⇒ 404 not_found.ask)", since: "7.151.0" },
|
|
1040
1071
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#userAttachments 的 path 条目在 e2b / k8s / local-docker / adb 车道上(目标给得出那一次观测:Linux、挂着 /proc、有 timeout / readlink / stat / head / base64)与 device 车道上(执行器声明修订号 ≥ 6 且在 hello.supports 声明了 openBound)—— human_input.attachments[].outcome": { attr: "attached", since: "7.151.0" },
|
|
1041
1072
|
"GET /v1/device/ws#instruction kind openBound(server → executor;协议修订号 6 的 kind,只派发给声明修订号 ≥ 6 且 hello.supports 声明了它的执行器;args { path, op: open|size|readBytes|list, identity?, kind?, max? })": { attr: "dispatched-iff-declared", since: "7.151.0" },
|
|
1042
1073
|
"GET /v1/device/ws#result outcome stat.identity(openBound 开答的 <device>:<inode>;可选串,不是串 ⇒ bad_shape)": { attr: "accepted", since: "7.151.0" },
|
|
@@ -1160,8 +1191,6 @@ export const SELF_MINTED_WIRE = {
|
|
|
1160
1191
|
"session faces · list faces · /metrics family#dev-open-principal-header-not-owner": { attr: "each face's missing-row answer, same body as a missing row (404 not_found.session on GET /v1/sessions/:id · /head · /events · /memory-status · /execution-placement · PATCH /v1/sessions/:id · fork · sync reads (manifest · entries · history blob) · memory/erase · background · background/stop · mcp/reconnect · policy · notify; approval exemptions 404 not_found.session (not found); DELETE /v1/sessions/:id 200 {deleted:false}; sync push family (plan · import · blob put) 404 on another owner's session, its existing create answer on a missing id); GET /v1/sessions · /v1/fleet/stream · /v1/agents/roster · /v1/tasks (trace list) · /v1/usage/* · /v1/sendfile-links pinned to the named caller; /metrics* and GET /v1/tasks/source-summary 401 auth.unauthorized (operator sentence; METRICS_TOKEN, when configured, still opens /metrics* and is judged first); a Bearer this deployment cannot verify does not count as naming no principal (no fleet); a caller naming no principal and presenting no unverifiable credential unchanged (fleet); was 200 / fleet-wide (the principal header read as a label)", since: "7.149.0" },
|
|
1161
1192
|
"owner-only session ports#unreadable-archive-ownerless-session-fleet-or-operator": { attr: "answered as on a readable archive: background · background/stop · notify · mcp/reconnect · execution-placement · approval exemptions list / revoke (the gate skips the placement read only when both hypotheses admit the caller); was 500 corrupt_session", since: "7.148.0" },
|
|
1162
1193
|
"run faces#row-without-owner-cell-no-fleet-no-operator": { attr: "the face's missing-row answer for every caller without a fleet or operator qualification on that face; was: a caller without a principal passed on some faces (absent equals absent)", since: "7.148.0" },
|
|
1163
|
-
"POST /v1/tool-approvals/:id/respond#ask-not-visible-to-caller(查无 / 不是调用方的 / 行读不出 / 本 worker 没有问账)": { attr: "404 not_found.ask (no such approval ask (never existed, no longer kept, or not yours)), one body for every form, no state facts — the durable decision door's word; was 404 tool_approval.not_pending with cause unknown_or_other_replica (no cause on a worker without an ask ledger)", since: "7.148.0" },
|
|
1164
|
-
"GET /v1/tool-approvals/:id#ask-not-visible-to-caller(查无 / 不是调用方的 / 行读不出 / 本 worker 没有问账)": { attr: "404 not_found.ask, the same body as the respond door; was 404 tool_approval.not_pending with cause unknown_or_other_replica (no cause on a worker without an ask ledger)", since: "7.148.0" },
|
|
1165
1194
|
"GET /v1/workflows/:id · /journal · /stream · POST /v1/workflows/:id/agents/:label/steer#session-assertion-mismatch": { attr: "404 not_found.workflow (workflow not found), same body as a missing workflow; was 404 not_found.run (workflow not found)", since: "7.148.0" },
|
|
1166
1195
|
},
|
|
1167
1196
|
},
|
|
@@ -1177,6 +1206,17 @@ export const SELF_MINTED_WIRE = {
|
|
|
1177
1206
|
"409 conflict.session_active_run#activeTaskId": { attr: "always on this face;the run holding the session's durable claim (the message names it too)", since: "7.147.0" },
|
|
1178
1207
|
},
|
|
1179
1208
|
},
|
|
1209
|
+
sessionOccupantWire: {
|
|
1210
|
+
at: "session occupancy keys activeTaskId / activeTaskStatus (<face>#<key> → reading / presence)",
|
|
1211
|
+
members: {
|
|
1212
|
+
"GET /v1/sessions/:id/head 200#activeTaskId": { attr: "present-iff a durable run store is wired (DB_BACKEND=mysql|pg|local);the run holding the session's claim, null once released;same projection as the 409 conflict.session_active_run body;re-read of the head after a non-null holder, occupant changed ⇒ 404 like a missing session", since: "7.152.0" },
|
|
1213
|
+
"GET /v1/sessions/:id/head 200#activeTaskStatus": { attr: "present-iff activeTaskId names a run whose stored row is running | suspended | needs_review;same projection as the 409 body", since: "7.152.0" },
|
|
1214
|
+
"GET /v1/sessions/:id/head#ETag": { attr: "the sha256 base64url of the 200 body bytes (leaf and occupancy are both version);was the quoted leafId", since: "7.152.0" },
|
|
1215
|
+
"DELETE /v1/sessions/:id 409 conflict.session_active_run#activeTaskStatus": { attr: "present-iff the holder's stored row is running | suspended | needs_review;same projection as the head probe", since: "7.152.0" },
|
|
1216
|
+
"POST /v1/sessions/:id/rewind-files 409 conflict.session_active_run#activeTaskStatus": { attr: "present-iff the holder's stored row is running | suspended | needs_review;same projection as the head probe", since: "7.152.0" },
|
|
1217
|
+
"submit and resume faces 409 conflict.session_active_run#activeTaskId": { attr: "null when the claim was released between the write's collision and its observation;was the empty string", since: "7.152.0" },
|
|
1218
|
+
},
|
|
1219
|
+
},
|
|
1180
1220
|
adoptionImportOutcome: {
|
|
1181
1221
|
at: "POST /v1/adoption/:id/sessions 200 results[].outcome",
|
|
1182
1222
|
members: {
|
|
@@ -1301,13 +1341,13 @@ export const SELF_MINTED_WIRE = {
|
|
|
1301
1341
|
"413 request.payload_too_large#store_row_too_large(POST /v1/tasks|/v1/tasks/stream|/v1/runs;续跑输入一行装不下,row / statement / value 三墙)": { attr: "the database refused to store this task: it is larger than the database keeps in one row|accepts in one statement|PostgreSQL holds in one value — nothing was run; <出路>", since: "7.151.0" },
|
|
1302
1342
|
"adopt_failed|track_failed|snapshot_failed|restore_failed#store_fault(文件历史店的失败句:会话同步推送与 blob 交换的拒体 · rewind / restore 的逐文件失败句)": { attr: "<动作> failed: <类别句> [original code: <原码>]", since: "7.151.0" },
|
|
1303
1343
|
"子代失败句#store_fault(tool_end 子代卡 structured.errorMessage · 后台子代通告的 summary · GET /v1/runs/:id/subagents/:handle/output 的 content / output · 父模型读到的子代报告行)": { attr: "<类别句> [original code: <原码>](与 run 终局 terminal.failed.message 同一句)", since: "7.151.0" },
|
|
1344
|
+
"501 feature.approval_ask_disabled#POST /v1/tasks/:taskId/asks/:askId/decision · GET /v1/tasks/:taskId/asks/:askId": { attr: "the durable stream-approval ask ledger is not enabled on this worker (needs a store backend (DB_BACKEND) and DURABLE_APPROVAL)", since: "7.152.0" },
|
|
1304
1345
|
},
|
|
1305
1346
|
},
|
|
1306
1347
|
decisionBodyKey: {
|
|
1307
1348
|
at: "回决门族决断体的受理键(<端点>#<键> → 读法;只登本版新增的键)",
|
|
1308
1349
|
members: {
|
|
1309
1350
|
"POST /v1/assistant/tasks/:id/plan_review#checkpointId": { attr: "optional;non-empty-string≤128;not-current⇒409 approval_stale;direct-door:signed-envelope-ext", since: "7.137.0" },
|
|
1310
|
-
"POST /v1/tool-approvals/:id/respond#decidedVia": { attr: "optional;DECIDED_VIA word beside decidedBy \"policy\" only;else⇒400 request.field_invalid (this door: request.body_shape)", since: "7.143.0" },
|
|
1311
1351
|
"POST /v1/tasks/:taskId/asks/:askId/decision#decidedVia": { attr: "optional;DECIDED_VIA word beside decidedBy \"policy\" only;else⇒400 request.field_invalid", since: "7.143.0" },
|
|
1312
1352
|
"POST /v1/approvals/:sessionId/decide#decidedVia": { attr: "optional;DECIDED_VIA word beside decidedBy \"policy\" only;else⇒400 request.field_invalid;direct-door:never accepted", since: "7.143.0" },
|
|
1313
1353
|
"POST /v1/assistant/tasks/:id/plan_review#decidedVia": { attr: "optional;DECIDED_VIA word beside decidedBy \"policy\" only;else⇒400 request.field_invalid;direct-door:never accepted", since: "7.143.0" },
|
|
@@ -1356,6 +1396,7 @@ export const SELF_MINTED_WIRE = {
|
|
|
1356
1396
|
answer: { attr: "POST /v1/approvals/:sessionId/decide", since: "7.87.0" },
|
|
1357
1397
|
checkpointId: { attr: "POST /v1/assistant/tasks/:id/plan_review", since: "7.137.0" },
|
|
1358
1398
|
permissionModeAfter: { attr: "POST /v1/assistant/tasks/:id/plan_review", since: "7.87.0" },
|
|
1399
|
+
persistRule: { attr: "POST /v1/approvals/:sessionId/decide", since: "7.152.0" },
|
|
1359
1400
|
},
|
|
1360
1401
|
},
|
|
1361
1402
|
storeFaultPermanence: {
|
|
@@ -1466,6 +1507,10 @@ export const SELF_MINTED_WIRE = {
|
|
|
1466
1507
|
"GET /v1/runs/:id/events#text.text(段文本含只有 text_end 的块)": { attr: "segment-text=block-texts-concat;end-only-block=text_end.content", since: "7.144.0" },
|
|
1467
1508
|
"POST /v1/approvals/:sessionId/decide|/v1/assistant/tasks/:id/plan_review|/v1/assistant/tasks/:id/resume|/v1/sessions/:id/wake#errorCode(引擎拒 checkpoint.invalid_outcome)": { attr: "decision-cause⇒cause-code;row-own(reason)|no-cause⇒checkpoint.invalid_outcome", since: "7.147.0" },
|
|
1468
1509
|
"POST /v1/approvals/:sessionId/decide#errorCode(这一行自己的拒:读行臂 / 门型守卫之前)": { attr: "rowVerdict.code+reason+retriable:true(engine-judge;before-gate)", since: "7.147.0" },
|
|
1510
|
+
"GET /v1/approvals#pending[].input": { attr: "question|plan-whole;other-fold>32768-utf8-bytes;marker.bytes=utf8-bytes", since: "7.152.0" },
|
|
1511
|
+
"GET /v1/approvals#pending[](动作事实)": { attr: "one-whole-row-decode(the bytes resume executes);sql≡local;undecodable⇒null|absent+rowVerdict≠ok", since: "7.152.0" },
|
|
1512
|
+
"SSE question#questions": { attr: "redacted-whole;no-size-cap;unserializable⇒no-frame", since: "7.152.0" },
|
|
1513
|
+
"SSE tool_approval#args(approval_request card.args · card_json · acceptableForm 同读)": { attr: "question|plan-whole;other-omitted>32768-utf8-bytes", since: "7.152.0" },
|
|
1469
1514
|
},
|
|
1470
1515
|
},
|
|
1471
1516
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { expandTiers, modelOriginOf, resolveTaskModel as coreResolveTaskModel } from "@sema-agent/core";
|
|
2
2
|
import { CATALOG_REPLACES_ENV_MODELS_CODE, SandboxGitConfig, WEB_ADMIN_ENV, envModelsDecisionTag, formatConfigPath, narrowAtMention, parseDomainSalvaged, resolveActiveTiers, resolveCatalogDefaultModel, sanitizeZodError } from "@sema-agent/settings-schema";
|
|
3
3
|
import { modelKeyPoison } from "../key-resolver.js";
|
|
4
|
-
import { DEFAULT_MODEL_REF, buildEnvModelIdNotServedNotice, mintCapabilityKeys, readAtMention, servedModelTableLeg } from "../model-select.js";
|
|
4
|
+
import { CATALOG_REFUSAL_LEG, DEFAULT_MODEL_REF, buildEnvModelIdNotServedNotice, mintCapabilityKeys, readAtMention, servedModelTableLeg } from "../model-select.js";
|
|
5
5
|
import { applyAutoCompactWindow, buildModelCostKey, isRosterGateArmed, ownCredentialHitsInForce, parseAutonomy, unmatchableToolNamesRefusal } from "../config.js";
|
|
6
6
|
import { NAME_TABLE_BEHAVIOR, retiredLeftOutEntries } from "../namespaced-rule-name.js";
|
|
7
7
|
import { buildModelCompat, readModelCompat } from "../model-compat.js";
|
|
@@ -501,7 +501,7 @@ function stageModelPlane(config, eff, source, logger, sealedKeys) {
|
|
|
501
501
|
const noDefault = crossInvariant("default-model-resolvable").check({ live: config, next: nextView });
|
|
502
502
|
if (noDefault !== undefined)
|
|
503
503
|
return refuse(DEFAULT_MODEL_MISSING_CODE, noDefault);
|
|
504
|
-
const endpoint = judgeModelRouteEndpoint(nextView,
|
|
504
|
+
const endpoint = judgeModelRouteEndpoint(nextView, CATALOG_REFUSAL_LEG);
|
|
505
505
|
if (endpoint !== undefined)
|
|
506
506
|
return refuse(endpoint.code, endpoint.reason);
|
|
507
507
|
const minted = crossInvariant("refused-names-not-minted").check({ live: config, next: nextView });
|
|
@@ -28,8 +28,8 @@ import { z } from "zod";
|
|
|
28
28
|
import { type ConfigDocumentRefusal, type DroppedEntryIdentity, type DroppedEntryReasonCode, type EffectiveReadWarning } from "@sema-agent/settings-schema";
|
|
29
29
|
/**
|
|
30
30
|
* 远端读腿在过契约读腿(`readEffectiveWire`)**之前**把退役域键分出去:wire 体上每个退役域键过契约的同一只墓碑(`refuseRetiredDomain`)——
|
|
31
|
-
* 带事实 ⇒ 一份被拒文档(契约的类型 `ConfigDocumentRefusal` 的墓碑臂:`document` = 退役域名,`reason: "retired_domain"`,`error`
|
|
32
|
-
* `RetiredDomainError`
|
|
31
|
+
* 带事实 ⇒ 一份被拒文档(契约的类型 `ConfigDocumentRefusal` 的墓碑臂:`document` = 退役域名,`reason: "retired_domain"`,`error` 取
|
|
32
|
+
* `RetiredDomainError` 的拒句)、这一键从体上拿掉(其余域照读、版本照读,判官整拒这份候选);缺席 / `{}` ⇒ 不理会(契约读腿自己丢 `{}`)。
|
|
33
33
|
* 体不是对象 ⇒ 原样交回、不判(载荷形错,契约读腿抛)。墓碑判据只在契约包,这里只分键。
|
|
34
34
|
* 被拒文档是两条读腿同形的发现(判决只在候选判官 `candidate-gate.ts` 的 `judgeConfigCandidate`,成因词 = 发现自带的 `reason`):本地腿的被拒文档是契约单读口
|
|
35
35
|
* `FileConfigStore.read()` 那一读的拒单原样(`config-provider.ts`),wire 上没有文件层,只有这一种墓碑。`error` 本模块不脱敏(与折叠产物同律):各腿在自己的产出边界上过
|
|
@@ -12,7 +12,7 @@ export function separateRetiredDomains(body) {
|
|
|
12
12
|
catch (e) {
|
|
13
13
|
if (!(e instanceof RetiredDomainError))
|
|
14
14
|
throw e;
|
|
15
|
-
refused.push({ document: e.domain, reason: "retired_domain", error: e.message
|
|
15
|
+
refused.push({ document: e.domain, reason: "retired_domain", error: e.message });
|
|
16
16
|
delete rest[domain];
|
|
17
17
|
}
|
|
18
18
|
}
|
|
@@ -343,7 +343,7 @@ export interface EffectiveConfig {
|
|
|
343
343
|
* [ref] 批1 —— **limitsHttp 组的热更新发布域**([ref] §6 批1)。
|
|
344
344
|
*
|
|
345
345
|
* 限额五闸(rateLimitPerMin / maxTaskCostUsd / maxTaskTokens / maxPrincipalCostUsd / costQuotaWindowSec)与其余限额键的**唯一**发布位:
|
|
346
|
-
* settings-schema 11 退役了 `runtime` 域(
|
|
346
|
+
* settings-schema 11 退役了 `runtime` 域(它曾承载前五键;读腿对带事实的 `runtime` 整份拒 —— 搬它进本域的那一步一次性迁移随契约 26.0.0 删了,存量手写到本域),
|
|
347
347
|
* 本仓的旧位读法随之删 —— 一个键一个发布位,没有「两处同现谁赢」的优先级规则。两条腿都读它(本地腿:`config.d/limits.json`,
|
|
348
348
|
* `limits` 在 PORTABLE_DOMAINS 里)。
|
|
349
349
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Workspace persistence by **space** (k8s lane) — the closed word set, the defaults, the retention domain and
|
|
3
|
-
* the policy shape (pure leaf:
|
|
4
|
-
* in `plugins/` can all import it without a load cycle). The effective policy has ONE reading: the capability fact `workspaceSpace`
|
|
3
|
+
* the policy shape (pure leaf: its only value imports are a node builtin and the object-store name leaf `object-store-buckets.ts`, itself
|
|
4
|
+
* import-free — so `config.ts`, the capability fact, the boot bucket check and the adapter in `plugins/` can all import it without a load cycle). The effective policy has ONE reading: the capability fact `workspaceSpace`
|
|
5
5
|
* (`src/capability-facts.ts`).
|
|
6
6
|
*
|
|
7
7
|
* The law (one fact, one seat): a k8s pod's `/workspace` is durable across runs as an object-store "space" owned by the
|
|
@@ -63,8 +63,14 @@ export interface WorkspaceSpacePolicy {
|
|
|
63
63
|
export interface WorkspaceSyncCapability extends WorkspaceSpacePolicy {
|
|
64
64
|
timeoutMs: number;
|
|
65
65
|
}
|
|
66
|
-
/**
|
|
67
|
-
|
|
66
|
+
/**
|
|
67
|
+
* The key prefix of a k8s snapshot store — the ONE reading of `WORKSPACE_SNAPSHOT_PREFIX` (unset ⇒ `WORKSPACE_SNAPSHOT_PREFIX_DEFAULT`): the adapter
|
|
68
|
+
* signs every snapshot key under it, and the boot bucket check lists under it (`<prefix>/`), so the check asks for the same prefix the adapter writes —
|
|
69
|
+
* a credential whose listing is granted by prefix answers the check exactly as it answers the adapter. Its form is judged by {@link snapshotKeyPrefixProblem}.
|
|
70
|
+
*/
|
|
71
|
+
export declare function workspaceSnapshotPrefixOf(store: {
|
|
72
|
+
readonly keyPrefix?: string;
|
|
73
|
+
} | undefined): string;
|
|
68
74
|
/**
|
|
69
75
|
* The ONE form of a snapshot-key segment — the partition (incarnation / session id), the snapshot id, the object name and each segment of
|
|
70
76
|
* the key prefix all pass it before a key is signed: it starts with a letter or digit, then letters, digits, `.`, `_`, `-`. No `/`, no `..`,
|
package/dist/workspace-space.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { WORKSPACE_SNAPSHOT_PREFIX_DEFAULT } from "./object-store-buckets.js";
|
|
2
3
|
export const K8S_WORKSPACE_MOUNT_DEFAULT = "/workspace";
|
|
3
4
|
export const WORKSPACE_PERSIST_WORDS = ["space", "off"];
|
|
4
5
|
export const WORKSPACE_PERSIST_DEFAULT = "space";
|
|
@@ -9,7 +10,9 @@ export const WORKSPACE_SNAPSHOT_TIMEOUT_MS_RANGE = { min: 30_000, max: 3_600_000
|
|
|
9
10
|
export function workspaceSnapshotTimeoutOf(lane) {
|
|
10
11
|
return lane.workspaceSnapshotTimeoutMs ?? WORKSPACE_SNAPSHOT_TIMEOUT_MS_DEFAULT;
|
|
11
12
|
}
|
|
12
|
-
export
|
|
13
|
+
export function workspaceSnapshotPrefixOf(store) {
|
|
14
|
+
return store?.keyPrefix ?? WORKSPACE_SNAPSHOT_PREFIX_DEFAULT;
|
|
15
|
+
}
|
|
13
16
|
export const SNAPSHOT_KEY_SEGMENT = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
14
17
|
export const WORKSPACE_SNAPSHOT_PREFIX_INVALID = "config.workspace_snapshot_prefix_invalid";
|
|
15
18
|
export function snapshotKeyPrefixProblem(prefix) {
|
|
@@ -250,7 +250,7 @@ sign exactly these bytes with the device's Ed25519 private key.
|
|
|
250
250
|
|
|
251
251
|
| Code | Meaning | What the executor should do |
|
|
252
252
|
|---|---|---|
|
|
253
|
-
| `auth_failed` | deliberately ambiguous: unknown device id, malformed id, malformed epoch, bad signature,
|
|
253
|
+
| `auth_failed` | deliberately ambiguous: unknown device id, malformed id, malformed epoch, bad signature, the server's device registry was unreachable, or — on a deployment that confines service principals — the device's owner is currently named in the operator roster's drain-only tier (a tier whose identity counts only on the drain endpoint, so it may not use the device lane; the device registration and the key stay valid) | do **not** hammer: back off exponentially, and never delete the key on `auth_failed` alone. If it never clears, the enrollment may be gone — re-enroll — unless the owner is confined as described: registering again under that identity is refused with `403 auth.principal_confined`, and the cure is on the operator's side. The server will not tell you which of these it was (anti-enumeration); the confinement cause is judged after the signature verifies, so only the holder of the device key can ever meet it. It is not terminal: when the owner is back in the ordinary tier (the deployment's roster is read at process start), the next reconnect succeeds, and the code set and the revision are unchanged |
|
|
254
254
|
| `revoked` | this device has been revoked. Terminal | stop reconnecting, delete the private key, ask the user to re-enroll (it yields a new `deviceId`) |
|
|
255
255
|
| `protocol_version_unsupported` | your `protocolVersion` is outside the range this server accepts; the frame carries `minProtocolVersion` and a one-line `message` that names your revision, the range and — below the floor — the change at the floor revision (§2.1) | upgrade the executor (`message` is fit to show as is). Never retry-with-a-different-version in a loop |
|
|
256
256
|
| `draining` | this replica is shutting down or upgrading and takes no new connections | reconnect with backoff; a replacement replica will accept you |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/server",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.152.0",
|
|
4
4
|
"description": "Sema Server — the server/API implementation layer for Sema, wiring core, registry, model providers, and cloud agent execution. Built on @sema-agent/core.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "BUSL-1.1",
|
|
@@ -25,6 +25,10 @@
|
|
|
25
25
|
"types": "./dist/model-route-env.d.ts",
|
|
26
26
|
"default": "./dist/model-route-env.js"
|
|
27
27
|
},
|
|
28
|
+
"./object-store-buckets": {
|
|
29
|
+
"types": "./dist/object-store-buckets.d.ts",
|
|
30
|
+
"default": "./dist/object-store-buckets.js"
|
|
31
|
+
},
|
|
28
32
|
"./package.json": "./package.json",
|
|
29
33
|
"./deploy/sema-up/lanes.json": "./deploy/sema-up/lib/lanes.json",
|
|
30
34
|
"./deploy/facts/CHANGES.json": "./deploy/facts/CHANGES.json",
|
|
@@ -84,7 +88,7 @@
|
|
|
84
88
|
"dependencies": {
|
|
85
89
|
"@modelcontextprotocol/server": "2.4.0",
|
|
86
90
|
"@sema-agent/core": "7.66.1",
|
|
87
|
-
"@sema-agent/settings-schema": "
|
|
91
|
+
"@sema-agent/settings-schema": "26.0.0",
|
|
88
92
|
"e2b": "2.36.0",
|
|
89
93
|
"libsodium-wrappers": "0.8.4",
|
|
90
94
|
"mysql2": "3.22.6",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// and a clean-up that did not happen is `failed step=cleanup` — neither is ever reported as a refusal of the omitted seat.
|
|
11
11
|
//
|
|
12
12
|
// The assembly order is the README "Library embedding" chain: `declareServerWithheldEnv()` → `loadConfig()` → `composeExecutionLane(config, ctx)` →
|
|
13
|
-
// `judgeServedModelRoute(config, { envTableIsPlaceholder })` (the route judge, once after the config-source apply; `loadConfig()` does not judge routes) →
|
|
13
|
+
// `judgeServedModelRoute(config, { envTableIsPlaceholder, webAdminIsConfigSource })` (the route judge, once after the config-source apply; `loadConfig()` does not judge routes) →
|
|
14
14
|
// the nine required `createHttpServer` seats (the type `ServiceCoreDeps`) → `createHttpServer(deps)`. It imports the package root `@sema-agent/server` and the
|
|
15
15
|
// engine package `@sema-agent/core` (the server's pinned dependency, owner of the `Runner` class), never a path inside `dist/`.
|
|
16
16
|
// The service it assembles runs on the host lane against a throwaway local data root and listens on a kernel-assigned loopback port; it takes no task,
|
|
@@ -84,8 +84,8 @@ try {
|
|
|
84
84
|
const logger = createLogger("error");
|
|
85
85
|
const config = await composeExecutionLane(loadConfig(), { configSource: undefined, localRoot: dataRoot, logger, entry: HTTP_SERVICE_LANE_ENTRY });
|
|
86
86
|
// The route judge runs after the config-source apply, never inside `loadConfig()`: a model row with no endpoint would otherwise travel to the first model call.
|
|
87
|
-
// No center here ⇒ the env table is the served table, not a placeholder awaiting a catalog.
|
|
88
|
-
const routeGap = judgeServedModelRoute(config, { envTableIsPlaceholder: false });
|
|
87
|
+
// No center here ⇒ the env table is the served table, not a placeholder awaiting a catalog; and no web-admin config source either (`configSource: undefined` above).
|
|
88
|
+
const routeGap = judgeServedModelRoute(config, { envTableIsPlaceholder: false, webAdminIsConfigSource: false });
|
|
89
89
|
if (routeGap !== undefined) throw new Error(routeGap.reason);
|
|
90
90
|
|
|
91
91
|
// ── seats: peerDesk, deploymentMods (package root: createPeerDesk; `[]` = no mods) ────────────────────────────────────────────────────────
|