@sema-agent/server 7.138.0 → 7.139.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 +276 -7
- package/README.md +7 -4
- package/README.zh-CN.md +6 -4
- package/USAGE.md +73 -29
- package/deploy/sema-up/README.md +1 -1
- package/deploy/sema-up/lib/lanes.json +3 -2
- package/dist/adoption/wire.d.ts +3 -3
- package/dist/approval-card.d.ts +20 -20
- package/dist/bench/s1/arms.d.ts +1 -1
- package/dist/bench/s1/arms.js +1 -3
- package/dist/bench/s1/run-firm.js +2 -2
- package/dist/boot/device-lane.d.ts +8 -3
- package/dist/boot/device-lane.js +7 -2
- package/dist/boot/execution-env.d.ts +4 -2
- package/dist/boot/execution-env.js +16 -24
- package/dist/boot/execution-lane.d.ts +1 -1
- package/dist/boot/governance-seams.d.ts +3 -2
- package/dist/boot/governance-seams.js +9 -11
- package/dist/boot/memory-consolidation.js +2 -2
- package/dist/boot/resolve-spec.d.ts +1 -1
- package/dist/boot/resolve-spec.js +8 -9
- package/dist/boot/retention-lane.d.ts +5 -5
- package/dist/boot/retention-lane.js +0 -6
- package/dist/boot/runner-deps.d.ts +3 -1
- package/dist/boot/runner-deps.js +2 -1
- package/dist/boot/session-faces.d.ts +0 -3
- package/dist/boot/session-faces.js +15 -8
- package/dist/boot/stage-02-web-admin-pull.js +2 -2
- package/dist/boot/stage-05-execution-env.js +2 -2
- package/dist/boot/stage-06-runners.js +0 -1
- package/dist/boot/stage-09-leader.js +1 -2
- package/dist/boot/stage-10-http-server.js +2 -2
- package/dist/boot/stores.js +4 -4
- package/dist/boot/web-admin.js +2 -2
- package/dist/capabilities/mcp-probe.js +1 -1
- package/dist/capabilities/scenarios.d.ts +1 -1
- package/dist/capability-facts.d.ts +15 -7
- package/dist/capability-facts.js +8 -3
- package/dist/config-catalog.js +7 -7
- package/dist/config-invariants.d.ts +23 -3
- package/dist/config-invariants.js +42 -0
- package/dist/config-provider.d.ts +19 -24
- package/dist/config-provider.js +27 -12
- package/dist/config-types.d.ts +10 -5
- package/dist/config.d.ts +33 -0
- package/dist/config.js +44 -15
- package/dist/delegated-session-owner.d.ts +2 -2
- package/dist/deployment-shape.d.ts +1 -1
- package/dist/device-enrollment.d.ts +41 -2
- package/dist/device-enrollment.js +27 -12
- package/dist/device-store.d.ts +58 -85
- package/dist/device-store.js +19 -49
- package/dist/device-ws-hub.js +2 -1
- package/dist/env-name-allowlist-knobs.d.ts +5 -4
- package/dist/exec-cut.d.ts +60 -0
- package/dist/exec-cut.js +36 -0
- package/dist/execution-lane-caps.d.ts +19 -0
- package/dist/execution-lane-caps.js +10 -0
- package/dist/execution-placement.d.ts +259 -0
- package/dist/execution-placement.js +199 -0
- package/dist/field-conflict.d.ts +3 -2
- package/dist/field-conflict.js +1 -0
- package/dist/hosted-posture.d.ts +2 -2
- package/dist/http/admission.js +8 -19
- package/dist/http/checkpoint-ctx.d.ts +21 -12
- package/dist/http/checkpoint-ctx.js +4 -2
- package/dist/http/claimed-run.d.ts +1 -1
- package/dist/http/durable-run-leg.js +9 -5
- package/dist/http/execution-context.d.ts +218 -0
- package/dist/http/execution-context.js +330 -0
- package/dist/http/resume-legs.js +50 -20
- package/dist/http/route-ctx.d.ts +14 -8
- package/dist/http/routes/background.d.ts +29 -1
- package/dist/http/routes/background.js +29 -2
- package/dist/http/routes/devices.d.ts +13 -19
- package/dist/http/routes/devices.js +21 -26
- package/dist/http/routes/session-sync.js +110 -15
- package/dist/http/routes/sessions.d.ts +6 -0
- package/dist/http/routes/sessions.js +115 -11
- package/dist/http/routes/side-query.d.ts +12 -4
- package/dist/http/routes/side-query.js +4 -5
- package/dist/http/routes/tasks.js +37 -31
- package/dist/http/server.d.ts +35 -19
- package/dist/http/server.js +11 -0
- package/dist/http/session-inherit-env.d.ts +3 -4
- package/dist/http/session-inherit-env.js +1 -1
- package/dist/http/wire-types.d.ts +8 -12
- package/dist/index.d.ts +1 -0
- package/dist/memory-sync-client.d.ts +53 -14
- package/dist/memory-sync-client.js +196 -116
- package/dist/memory-sync.d.ts +1 -1
- package/dist/memory-sync.js +3 -2
- package/dist/observability/cost-taxonomy.d.ts +2 -2
- package/dist/observability/fail-open.d.ts +12 -0
- package/dist/observability/fail-open.js +12 -0
- package/dist/observability/run-terminal.js +0 -1
- package/dist/orchestration/workflow-notify-journal.js +4 -4
- package/dist/org-memory-admission.d.ts +4 -3
- package/dist/org-memory-admission.js +6 -6
- package/dist/parked-decide.d.ts +34 -9
- package/dist/parked-decide.js +12 -19
- package/dist/parked-revive-surface.d.ts +12 -15
- package/dist/parked-revive-surface.js +3 -6
- package/dist/peer-seat.d.ts +13 -7
- package/dist/peer-seat.js +37 -3
- package/dist/plugins/approval-ask-store-file.d.ts +7 -0
- package/dist/plugins/approval-ask-store-file.js +11 -0
- package/dist/plugins/approval-ask-store-memory.d.ts +6 -0
- package/dist/plugins/approval-ask-store-memory.js +12 -0
- package/dist/plugins/approval-ask-store-sql.d.ts +22 -5
- package/dist/plugins/approval-ask-store-sql.js +30 -12
- package/dist/plugins/caching-session-store.d.ts +6 -2
- package/dist/plugins/caching-session-store.js +9 -3
- package/dist/plugins/checkpoint-store-sql.d.ts +6 -5
- package/dist/plugins/checkpoint-store-sql.js +5 -7
- package/dist/plugins/device-store-sql.d.ts +25 -51
- package/dist/plugins/device-store-sql.js +49 -103
- package/dist/plugins/execution-placement-sql.d.ts +151 -0
- package/dist/plugins/execution-placement-sql.js +223 -0
- package/dist/plugins/file-history-store-sql.d.ts +7 -6
- package/dist/plugins/file-history-store-sql.js +5 -5
- package/dist/plugins/file-run-store.d.ts +6 -1
- package/dist/plugins/file-run-store.js +4 -0
- package/dist/plugins/fork-routing-session-store.d.ts +6 -0
- package/dist/plugins/fork-routing-session-store.js +16 -0
- package/dist/plugins/local-session-store.d.ts +149 -50
- package/dist/plugins/local-session-store.js +382 -107
- package/dist/plugins/memory-key-guards.d.ts +4 -0
- package/dist/plugins/memory-key-guards.js +1 -0
- package/dist/plugins/memory-run-store.d.ts +1 -1
- package/dist/plugins/one-time-migrations.d.ts +111 -3
- package/dist/plugins/one-time-migrations.js +380 -10
- package/dist/plugins/outcome-ledger-sql.d.ts +2 -2
- package/dist/plugins/permission-rule-store-sql.d.ts +13 -15
- package/dist/plugins/permission-rule-store-sql.js +13 -16
- package/dist/plugins/pg-pool.d.ts +7 -3
- package/dist/plugins/pg-session-storage.d.ts +31 -20
- package/dist/plugins/pg-session-storage.js +120 -52
- package/dist/plugins/remote-env-adb.d.ts +20 -4
- package/dist/plugins/remote-env-adb.js +70 -62
- package/dist/plugins/remote-env-device.d.ts +30 -12
- package/dist/plugins/remote-env-device.js +18 -17
- package/dist/plugins/remote-env-e2b.d.ts +18 -4
- package/dist/plugins/remote-env-e2b.js +41 -42
- package/dist/plugins/remote-env-file-error.d.ts +2 -0
- package/dist/plugins/remote-env-file-error.js +1 -1
- package/dist/plugins/remote-env-host.d.ts +21 -8
- package/dist/plugins/remote-env-host.js +66 -70
- package/dist/plugins/remote-env-k8s.d.ts +11 -16
- package/dist/plugins/remote-env-k8s.js +61 -54
- package/dist/plugins/remote-env-local-docker.d.ts +29 -6
- package/dist/plugins/remote-env-local-docker.js +46 -59
- package/dist/plugins/remote-env-ssh.d.ts +16 -4
- package/dist/plugins/remote-env-ssh.js +72 -56
- package/dist/plugins/remote-shell.d.ts +100 -3
- package/dist/plugins/remote-shell.js +166 -2
- package/dist/plugins/retention-store-sql.d.ts +9 -6
- package/dist/plugins/retention-store-sql.js +7 -1
- package/dist/plugins/run-store-sql.d.ts +13 -3
- package/dist/plugins/run-store-sql.js +5 -0
- package/dist/plugins/schema-consistency.d.ts +15 -5
- package/dist/plugins/schema-consistency.js +14 -8
- package/dist/plugins/schema-drift-sentence.d.ts +27 -0
- package/dist/plugins/schema-drift-sentence.js +38 -0
- package/dist/plugins/session-fork.d.ts +54 -0
- package/dist/plugins/session-fork.js +38 -1
- package/dist/plugins/session-row-sql.d.ts +22 -0
- package/dist/plugins/session-row-sql.js +81 -0
- package/dist/plugins/session-store.d.ts +1 -1
- package/dist/plugins/store-backend.d.ts +1 -1
- package/dist/plugins/store-backend.js +19 -7
- package/dist/plugins/store-contracts.d.ts +25 -5
- package/dist/plugins/tidb-pool.d.ts +12 -7
- package/dist/plugins/tidb-pool.js +9 -3
- package/dist/plugins/tidb-session-store.d.ts +57 -26
- package/dist/plugins/tidb-session-store.js +118 -50
- package/dist/plugins/tool-result-store-sql.d.ts +3 -2
- package/dist/plugins/tool-result-store-sql.js +18 -10
- package/dist/project-memory.d.ts +9 -15
- package/dist/project-memory.js +5 -4
- package/dist/request-key-closure.js +1 -1
- package/dist/request-value-closure.d.ts +6 -7
- package/dist/request-value-closure.js +1 -3
- package/dist/run-local.d.ts +6 -0
- package/dist/run-local.js +24 -20
- package/dist/runs.d.ts +2 -1
- package/dist/runs.js +3 -1
- package/dist/security.d.ts +38 -12
- package/dist/security.js +8 -2
- package/dist/server-secret-env.d.ts +9 -5
- package/dist/session-children-retire.d.ts +27 -9
- package/dist/session-children-retire.js +9 -5
- package/dist/session-incarnation.d.ts +19 -9
- package/dist/session-incarnation.js +4 -2
- package/dist/session-row.d.ts +114 -5
- package/dist/session-row.js +55 -5
- package/dist/session-titler.d.ts +2 -2
- package/dist/task-a2a.d.ts +1 -1
- package/dist/task-cwd.d.ts +6 -1
- package/dist/task-mcp.d.ts +3 -3
- package/dist/tool-approval.d.ts +6 -0
- package/dist/tool-approval.js +8 -1
- package/dist/trace/project.d.ts +1 -0
- package/dist/trace/project.js +1 -0
- package/dist/trace/self-minted-wire.d.ts +111 -2
- package/dist/trace/self-minted-wire.js +38 -1
- package/dist/url-refusal.d.ts +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +17 -3
- package/dist/web-admin-client/apply-effective.js +20 -10
- package/dist/web-admin-client/skills-mcp.js +3 -2
- package/dist/web-admin-client/types.d.ts +6 -0
- package/package.json +3 -3
- package/wire-changes/server@7.139.0.json +348 -0
- package/dist/http/device-placement.d.ts +0 -175
- package/dist/http/device-placement.js +0 -145
|
@@ -233,6 +233,18 @@ export const SELF_MINTED_WIRE = {
|
|
|
233
233
|
supportsThinkingOff: { attr: "always", since: "7.138.0" },
|
|
234
234
|
},
|
|
235
235
|
},
|
|
236
|
+
sessionBackgroundRowKey: {
|
|
237
|
+
at: "GET /v1/sessions/:id/background rows[] 行键(<键> → 在场律)",
|
|
238
|
+
members: {
|
|
239
|
+
sessionId: { attr: "present-iff background agent row bound to a child session", since: "7.139.0" },
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
sessionsListRowKey: {
|
|
243
|
+
at: "GET /v1/sessions sessions[] 行键 = PATCH /v1/sessions/:id 200 体 = 409 conflict.session_row_changed currentRow(<键> → 在场律)",
|
|
244
|
+
members: {
|
|
245
|
+
rowTag: { attr: "present-iff the row can be written conditionally (the store has the row write primitive and the row carries an incarnation)", since: "7.139.0" },
|
|
246
|
+
},
|
|
247
|
+
},
|
|
236
248
|
toolEndGateDispositionKey: {
|
|
237
249
|
at: "tool_end gate.disposition 键(<臂>#<键> → 在场律)",
|
|
238
250
|
members: {
|
|
@@ -283,6 +295,7 @@ export const SELF_MINTED_WIRE = {
|
|
|
283
295
|
file_history_restore: { attr: "-", since: "7.133.0" },
|
|
284
296
|
skills_disabled: { attr: "-", since: "7.133.0" },
|
|
285
297
|
existing_session: { attr: "-", since: "7.133.0" },
|
|
298
|
+
fork_target: { attr: "-", since: "7.139.0" },
|
|
286
299
|
scratchpad_root: { attr: "-", since: "7.133.0" },
|
|
287
300
|
ask_answer: { attr: "-", since: "7.133.0" },
|
|
288
301
|
policy_person_ask: { attr: "-", since: "7.133.0" },
|
|
@@ -441,6 +454,12 @@ export const SELF_MINTED_WIRE = {
|
|
|
441
454
|
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#限制侧名内带 *(agents[i].denyTools)": { attr: 200, since: "7.137.0" },
|
|
442
455
|
"POST /v1/assistant/tasks/:id/plan_review#checkpointId_not_current(体带的门身份不是该会话此刻待决的 plan 门;体 approval_stale + currentPending { checkpointId }?;不落决断、零状态改动)": { attr: 409, since: "7.137.0" },
|
|
443
456
|
"POST /v1/assistant/tasks/:id/plan_review#checkpointId_current(体带当前门的身份;受理形与不带键同)": { attr: 200, since: "7.137.0" },
|
|
457
|
+
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#rewindFiles(新提交;体 request.body_shape + unknownKeys [rewindFiles])": { attr: 400, since: "7.139.0" },
|
|
458
|
+
"POST /v1/side-query#uncoded_error_with_preflight_prefix(没有引擎码、英文开头与前缀表同形的错误;体 internal.error)": { attr: 500, since: "7.139.0" },
|
|
459
|
+
"PATCH /v1/sessions/:id#mirror_row(只读镜像行上的写,带不带 expectedRowTag;体 conflict.session_mirror + forkPath)": { attr: 409, since: "7.139.0" },
|
|
460
|
+
"PATCH /v1/sessions/:id#owner_changed_after_gate(门那一读之后同一会话的属主被改;体 not_found.session)": { attr: 404, since: "7.139.0" },
|
|
461
|
+
"PATCH /v1/sessions/:id#expectedRowTag_stale(行已不在那只标签上;体 conflict.session_row_changed + currentRow)": { attr: 409, since: "7.139.0" },
|
|
462
|
+
"PATCH /v1/sessions/:id#expectedRowTag_current(行仍在那只标签上;体 = 列表行)": { attr: 200, since: "7.139.0" },
|
|
444
463
|
},
|
|
445
464
|
},
|
|
446
465
|
refusalSentenceForm: {
|
|
@@ -471,6 +490,10 @@ export const SELF_MINTED_WIRE = {
|
|
|
471
490
|
"400 request.field_invalid#plan_review.checkpointId.not_non_empty_string": { attr: "checkpointId must be a non-empty string (the identity of the plan gate you decided on: …)", since: "7.137.0" },
|
|
472
491
|
"400 request.field_invalid#plan_review.checkpointId.too_large": { attr: "checkpointId too large (max <n> chars)", since: "7.137.0" },
|
|
473
492
|
"400 request.body_shape#/decide.checkpointId(落 unsupportedKeys)": { attr: "unsupported (a body field of POST /v1/assistant/tasks/:id/plan_review — send it there, this door never reads it): checkpointId", since: "7.137.0" },
|
|
493
|
+
"400 request.body_shape#PATCH /v1/sessions/:id": { attr: "the body must be a JSON object carrying at least one of `title` and `pinned` (and, optionally, `expectedRowTag`), and nothing else", since: "7.139.0" },
|
|
494
|
+
"400 request.field_invalid#PATCH /v1/sessions/:id.expectedRowTag": { attr: "expectedRowTag must be the `rowTag` string a session list row carries (43 characters: letters, digits, `-` and `_`)", since: "7.139.0" },
|
|
495
|
+
"409 conflict.session_mirror#PATCH /v1/sessions/:id": { attr: "this session is a read-only mirror of a session whose writer is elsewhere — it cannot be renamed or pinned here; fork it (forkPath) to continue here; nothing was written", since: "7.139.0" },
|
|
496
|
+
"409 conflict.session_row_changed#PATCH /v1/sessions/:id": { attr: "the session row changed since the rowTag you sent was read — nothing was written; currentRow is the row as it stands now: decide again, then send its rowTag", since: "7.139.0" },
|
|
474
497
|
},
|
|
475
498
|
},
|
|
476
499
|
decisionBodyKey: {
|
|
@@ -479,6 +502,14 @@ export const SELF_MINTED_WIRE = {
|
|
|
479
502
|
"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" },
|
|
480
503
|
},
|
|
481
504
|
},
|
|
505
|
+
sessionRowWriteKey: {
|
|
506
|
+
at: "PATCH /v1/sessions/:id 体受理键与 409 拒体键(<面>#<键> → 读法 / 在场律;只登本版新增的)",
|
|
507
|
+
members: {
|
|
508
|
+
"body#expectedRowTag": { attr: "optional;43×[A-Za-z0-9_-] else 400 request.field_invalid;alone 400 request.body_shape;stale⇒409 conflict.session_row_changed", since: "7.139.0" },
|
|
509
|
+
"409 conflict.session_row_changed#currentRow": { attr: "always", since: "7.139.0" },
|
|
510
|
+
"409 conflict.session_mirror#forkPath": { attr: "always", since: "7.139.0" },
|
|
511
|
+
},
|
|
512
|
+
},
|
|
482
513
|
approvalStaleBodyKey: {
|
|
483
514
|
at: "409 approval_stale 拒体(<端点>#<键> → 在场律)",
|
|
484
515
|
members: {
|
|
@@ -552,7 +583,13 @@ export const SELF_MINTED_WIRE = {
|
|
|
552
583
|
"GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_BUCKET].semantics": { attr: "boot-checks-bucket;runtime-latest-no-such-bucket-fails-run", since: "7.136.0" },
|
|
553
584
|
"GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_PREFIX].semantics": { attr: "multi-segment-prefix;bad-segment-refuses-boot", since: "7.136.0" },
|
|
554
585
|
"GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_PREFIX].derivedDefaultNote": { attr: "absent=>kata", since: "7.136.0" },
|
|
555
|
-
"GET /v1/config/catalog#rows[K8S_SANDBOX_ENV].semantics": { attr: "values-only-in-the-pod-own-secret;role-needs-secrets-create;denied-refuses-boot", since: "7.
|
|
586
|
+
"GET /v1/config/catalog#rows[K8S_SANDBOX_ENV].semantics": { attr: "values-only-in-the-pod-own-secret;role-needs-secrets-create;denied-refuses-boot;own-credential-name-refuses-boot", since: "7.139.0" },
|
|
587
|
+
"GET /v1/config/catalog#rows[K8S_NAMESPACE].semantics": { attr: "required-no-default;absent-or-blank-refuses-boot", since: "7.139.0" },
|
|
588
|
+
"GET /v1/config/catalog#rows[E2B_SANDBOX_ENV].semantics": { attr: "own-credential-name-refuses-boot", since: "7.139.0" },
|
|
589
|
+
"GET /v1/config/catalog#rows[DOCKER_SANDBOX_ENV].semantics": { attr: "own-credential-name-refuses-boot", since: "7.139.0" },
|
|
590
|
+
"GET /v1/config/catalog#rows[CONFIG_PROVIDER].semantics": { attr: "remote-without-center-url-refuses-boot", since: "7.139.0" },
|
|
591
|
+
"GET /v1/config/catalog#rows[RETENTION_MODE].semantics": { attr: "enforce-without-horizon-or-cadence-refuses-boot", since: "7.139.0" },
|
|
592
|
+
"GET /v1/config/catalog#rows[RETENTION_SWEEP_INTERVAL_SEC].semantics": { attr: "cadence-without-horizon-refuses-boot", since: "7.139.0" },
|
|
556
593
|
"GET /v1/sessions/:id/mcp#servers[].error": { attr: "exit-seat:mcp-remote-text(engine-mark=masked-value)+truncate:200", since: "7.138.0" },
|
|
557
594
|
"POST /v1/sessions/:id/mcp/reconnect#reason|status.error|listingIncomplete.error": { attr: "exit-seat:mcp-remote-text(engine-mark=masked-value)+truncate:200", since: "7.138.0" },
|
|
558
595
|
"GET /v1/config/catalog#rows[MODEL_VISION].semantics": { attr: "names-engine-notice:model.capability_downgraded", since: "7.137.0" },
|
package/dist/url-refusal.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* 拒句从源头不含解析记号 —— 判官只给规则词,值只经本模块的展示律出现。
|
|
13
13
|
*
|
|
14
14
|
* ## 读者
|
|
15
|
-
* 中心基址三席 + 公告地址 + 请求期 `centerFetch`(`web-admin-client/center-request.ts` `pathBaseUrlRefusal`:禁 userinfo / query / fragment)·
|
|
15
|
+
* 中心基址三席 + 公告地址 + 记忆同步中心基址 `MEMORY_SYNC_URL` + 请求期 `centerFetch`(`web-admin-client/center-request.ts` `pathBaseUrlRefusal`:禁 userinfo / query / fragment)·
|
|
16
16
|
* 续签 issuer(只问形)· 模型路由三键(`model-route-url.ts`:禁 userinfo / fragment,query 照收)· `MEMORY_EMBEDDER_ENDPOINT` 与
|
|
17
17
|
* `A2A_SERVE_URL`(禁 userinfo)· `SANDBOX_PKG_SOURCE=custom` 六只地址(形 + 带凭据,后者的判官是契约包根的 `findUrlCredential`,拒句经 {@link buildUrlCredentialRefusal})。
|
|
18
18
|
* 「scheme 只有判官与展示铸点读」由 `test/config-url-display-safe.test.ts` 的读者普查门钉住。
|
|
@@ -94,9 +94,11 @@ export declare function withModelPlaneOf<E extends EffectiveConfig>(target: E, s
|
|
|
94
94
|
*/
|
|
95
95
|
export declare function fullyLandedForLkg(read: ConfigCandidateRead, report: ApplyReport | undefined): boolean;
|
|
96
96
|
/**
|
|
97
|
-
* [ref]:组拒码 → 铸它的那条模型面不变量 ——
|
|
98
|
-
*
|
|
99
|
-
* (
|
|
97
|
+
* [ref]:组拒码 → 铸它的那条模型面不变量 —— **以码为键**。组拒码闭集的属主是 settings-schema `MODEL_PLANE_REFUSAL_CODES`,每个码恰有**一个铸码方**,
|
|
98
|
+
* 分两本账(下面两个表 + 三道编译门;那边加一个码而这两本都没收 ⇒ 本仓 tsc 红):
|
|
99
|
+
* · 本表 = **本仓模型面 stage 自己铸**的码 → 铸它的不变量。模型面 stage 的组拒按**码**铸(码是判决那刻的数据),不变量 id 由本表派生 —— 一个 id 两个码
|
|
100
|
+
* (`model-route-endpoint`)时码不可能从 id 反推,反过来查才是全函数;
|
|
101
|
+
* · {@link ENGINE_MINTED_PLANE_REFUSAL_CODES} = 契约包出码、执法者是本仓但**今天未执法**的码(名字里的 ENGINE 沿契约包的词义 = worker,即本仓),本仓 stage 现在不铸。
|
|
100
102
|
*/
|
|
101
103
|
export declare const PLANE_REFUSAL_INVARIANT_OF: {
|
|
102
104
|
readonly "config.default_model_missing": "default-model-resolvable";
|
|
@@ -104,6 +106,18 @@ export declare const PLANE_REFUSAL_INVARIANT_OF: {
|
|
|
104
106
|
readonly "config.model_route_endpoint_missing": "model-route-endpoint";
|
|
105
107
|
readonly "config.gateway_fallback_without_primary": "model-route-endpoint";
|
|
106
108
|
};
|
|
109
|
+
/**
|
|
110
|
+
* 契约包出码、执法者是本仓但今天**未执法**的两只组拒码:本地配置腿上「管模型面的目录会顶替已声明的 env 表、决定不是 `replaced`」那道闸,与「每个任务都要解的 summarize 落不到可服务条目」的不变量。
|
|
111
|
+
*
|
|
112
|
+
* 词义:settings-schema 发布说明里的「engine / 引擎一侧」指**本仓(worker)**,不是 `@sema-agent/core` —— 这两码要的全部输入(本地配置腿、env 表、模型面 stage 与组拒口)只在本仓,core 里没有读
|
|
113
|
+
* `MODEL_ID` / `config.d` 的地方、也没有组拒码。(契约包自己有几处把同一个词写成 core 7.58.0,那是它的叫法错。)所以本仓 stage 现在没有对应的不变量、不铸这两个码,不是因为「归引擎」,而是**还没做**,两码各自候什么:
|
|
114
|
+
* · `CATALOG_REPLACES_ENV_MODELS_CODE`:执法是一整组跨仓件 —— 开机迁移 SS-M11(铸决定文档)· 本地腿每拍读决定(读数身份进候选的 etag)· 目录信任判官走根级文档 · 命令行 / 桌面 / 客户端核心三个写者先接契约包的计划助手;
|
|
115
|
+
* 候设计票。在那之前,候选目录管着模型面而 env 表也声明了时,仍照旧由目录服务(与升级前逐位同)。
|
|
116
|
+
* · `SUMMARIZE_MODEL_MISSING_CODE`:码的前提是「summarize 落不到可服务条目 ⇒ 采纳后每个任务都被拒」,而本仓所钉 core 7.59.0 起非严格座位(summarize 在内)点名目录里没有的词时读作未设、沿自己的回落链走
|
|
117
|
+
* (summarize 的链是 → default,即回落缺省模型)并通告 `model.role_defaulted`;链上没有可解的模型才拒 —— 前提与所钉 core 相抵,候上游(settings-schema / core)重定义或退役这个码;在那之前 summarize 角色绑到不可用条目时仍是角色绑定那一行 warn(`ROLE_BINDING_UNAVAILABLE_HINT`),不是组拒。
|
|
118
|
+
* 两码开始被铸之后,它们进 `/health.modelRefusals.plane` 的座位是**另案设计**(现在没有座:见 `model-plane-face.ts` 对「装配期被引擎整份拒收」的披露),不在这张表里偷铸一个不变量替它占位。
|
|
119
|
+
*/
|
|
120
|
+
export declare const ENGINE_MINTED_PLANE_REFUSAL_CODES: readonly ["config.catalog_replaces_env_models", "config.summarize_model_missing"];
|
|
107
121
|
/**
|
|
108
122
|
* [ref] —— **「无中心配置」档的候选**:中心凭证换人时,server 把在用的中心配置降到这一档({@link applyEffective} 吃它,和吃任何候选走同一条 stage → swap → commit)。
|
|
109
123
|
* 它的意思是「**撤回**中心配置」—— 中心下发的每个热面回 env 底:
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { expandTiers, resolveTaskModel as coreResolveTaskModel } from "@sema-agent/core";
|
|
2
|
-
import { WEB_ADMIN_ENV, narrowAtMention, resolveActiveTiers, resolveCatalogDefaultModel } from "@sema-agent/settings-schema";
|
|
1
|
+
import { expandTiers, modelOriginOf, resolveTaskModel as coreResolveTaskModel } from "@sema-agent/core";
|
|
2
|
+
import { CATALOG_REPLACES_ENV_MODELS_CODE, SUMMARIZE_MODEL_MISSING_CODE, WEB_ADMIN_ENV, narrowAtMention, resolveActiveTiers, resolveCatalogDefaultModel } from "@sema-agent/settings-schema";
|
|
3
3
|
import { modelKeyPoison } from "../key-resolver.js";
|
|
4
4
|
import { buildEnvModelIdNotServedNotice, mintCapabilityKeys, readAtMention, servedModelTableLeg } from "../model-select.js";
|
|
5
|
-
import { applyAutoCompactWindow, buildModelCostKey, parseAutonomy, unmatchableToolNamesRefusal } from "../config.js";
|
|
5
|
+
import { applyAutoCompactWindow, buildModelCostKey, ownCredentialHitsInForce, parseAutonomy, unmatchableToolNamesRefusal } from "../config.js";
|
|
6
6
|
import { NAME_TABLE_BEHAVIOR } from "../namespaced-rule-name.js";
|
|
7
7
|
import { buildModelCompat, readModelCompat } from "../model-compat.js";
|
|
8
8
|
import { buildModelHeadersKey } from "../model-entry-headers.js";
|
|
@@ -118,7 +118,7 @@ export function applyEffective(config, eff, logger, opts) {
|
|
|
118
118
|
}
|
|
119
119
|
const mp = staged.modelPlaneGroup.stages.models;
|
|
120
120
|
if (mp !== undefined) {
|
|
121
|
-
declareCandidateWithheldEnv(mp.modelApiKeyEnv, staged.version);
|
|
121
|
+
declareCandidateWithheldEnv(config, mp.modelApiKeyEnv, staged.version);
|
|
122
122
|
if (opts.swapPlane !== undefined) {
|
|
123
123
|
try {
|
|
124
124
|
opts.swapPlane({ models: mp.models, tiers: mp.activeTiers });
|
|
@@ -171,17 +171,25 @@ export function applyEffective(config, eff, logger, opts) {
|
|
|
171
171
|
logger?.info("web_admin_projects", { projects: Object.keys(staged.projects) });
|
|
172
172
|
return true;
|
|
173
173
|
}
|
|
174
|
-
function declareCandidateWithheldEnv(modelApiKeyEnv, version) {
|
|
174
|
+
function declareCandidateWithheldEnv(seats, modelApiKeyEnv, version) {
|
|
175
|
+
const entries = Object.entries(modelApiKeyEnv)
|
|
176
|
+
.map(([model, envName]) => `${model}→${envName}`)
|
|
177
|
+
.join(", ");
|
|
175
178
|
try {
|
|
176
179
|
declareServerWithheldEnv(modelApiKeyEnv);
|
|
177
180
|
}
|
|
178
181
|
catch (err) {
|
|
179
|
-
const entries = Object.entries(modelApiKeyEnv)
|
|
180
|
-
.map(([model, envName]) => `${model}→${envName}`)
|
|
181
|
-
.join(", ");
|
|
182
182
|
throw new Error(`model catalog (effective v${version}): a model entry's apiKeyEnv names a variable the engine cannot withhold from model-driven shells — ` +
|
|
183
183
|
`the candidate is refused whole and the current generation keeps serving; fix that entry's apiKeyEnv (entries: ${entries}). Engine: ${err instanceof Error ? err.message : String(err)}`);
|
|
184
184
|
}
|
|
185
|
+
const handedOn = ownCredentialHitsInForce(seats);
|
|
186
|
+
if (handedOn.length === 0)
|
|
187
|
+
return;
|
|
188
|
+
withdrawServerWithheldEnv();
|
|
189
|
+
throw new Error(`model catalog (effective v${version}): a model entry's apiKeyEnv names a variable a name-list env knob hands on — ` +
|
|
190
|
+
handedOn.map((h) => `env ${h.knob} hands on ${h.name}, which this candidate makes ${h.problem}`).join("; ") +
|
|
191
|
+
`; or point that entry's apiKeyEnv at a variable no name list hands on. The name lists are read at boot (changing one takes a restart); ` +
|
|
192
|
+
`the candidate is refused whole and the current generation keeps serving (entries: ${entries}).`);
|
|
185
193
|
}
|
|
186
194
|
function commitStaged(config, staged) {
|
|
187
195
|
const mp = staged.modelPlaneGroup.stages.models;
|
|
@@ -240,13 +248,14 @@ export const PLANE_REFUSAL_INVARIANT_OF = {
|
|
|
240
248
|
"config.model_route_endpoint_missing": "model-route-endpoint",
|
|
241
249
|
"config.gateway_fallback_without_primary": "model-route-endpoint",
|
|
242
250
|
};
|
|
251
|
+
export const ENGINE_MINTED_PLANE_REFUSAL_CODES = [CATALOG_REPLACES_ENV_MODELS_CODE, SUMMARIZE_MODEL_MISSING_CODE];
|
|
243
252
|
function modelPlaneGroupReport(group) {
|
|
244
253
|
return {
|
|
245
254
|
applied: MODEL_PLANE_DOMAINS.flatMap((d) => (group.stages[d] !== undefined ? MODEL_PLANE_SURFACES[d] : [])),
|
|
246
255
|
...(group.rejected !== undefined ? { rejected: { keys: group.rejected.keys, reason: group.rejected.reason } } : {}),
|
|
247
256
|
};
|
|
248
257
|
}
|
|
249
|
-
const ROLE_BINDING_UNAVAILABLE_HINT = "
|
|
258
|
+
const ROLE_BINDING_UNAVAILABLE_HINT = "alias/tier expansion cannot mint this name, so the engine does not hold it: a strict seat (default, classifier) refuses the task loud; any other role reads as unset and falls back along its own chain with a model.role_defaulted notice (refused only when nothing on that chain resolves) — bind the role to a usable model, or make the entry usable (see the entry's own warn)";
|
|
250
259
|
export const NO_CENTER_EFFECTIVE = deepFreeze({ version: 0, updatedAt: "", models: { models: [], roles: {} }, mcp: { servers: [] } });
|
|
251
260
|
export const isNoCenterEffective = (eff) => eff === NO_CENTER_EFFECTIVE;
|
|
252
261
|
function deepFreeze(v) {
|
|
@@ -636,7 +645,8 @@ function engineDefaultOfSelect(select, models, activeTiers) {
|
|
|
636
645
|
catch (err) {
|
|
637
646
|
return { unresolved: err instanceof Error ? err.message : String(err) };
|
|
638
647
|
}
|
|
639
|
-
const
|
|
648
|
+
const origin = modelOriginOf(picked);
|
|
649
|
+
const name = Object.keys(models).find((n) => models[n] === origin);
|
|
640
650
|
return name !== undefined ? { name } : { unresolved: "the engine picked a model object that is not an entry of the usable catalog" };
|
|
641
651
|
}
|
|
642
652
|
export function logEffectiveDiff(config, eff, logger) {
|
|
@@ -174,12 +174,13 @@ export function resolveMcpServers(mcp, desk, rosterLease, logger) {
|
|
|
174
174
|
continue;
|
|
175
175
|
}
|
|
176
176
|
const sessionMetaKey = metaKey.key === undefined ? {} : { sessionMetaKey: metaKey.key };
|
|
177
|
+
const startupTimeout = s.startupTimeoutMs === undefined ? {} : { startupTimeoutMs: s.startupTimeoutMs };
|
|
177
178
|
if (s.transport.kind === "stdio") {
|
|
178
179
|
const env = resolveRefs(s.transport.envRefs, s.name, "env", logger);
|
|
179
180
|
if (env === null)
|
|
180
181
|
continue;
|
|
181
182
|
const draft = {
|
|
182
|
-
spec: { name: s.name, transport: { kind: "stdio", command: s.transport.command, args: s.transport.args }, ...allow, ...elicit, ...contentOrigin, ...source, ...toolFaces, ...toolAxes, ...sessionMetaKey },
|
|
183
|
+
spec: { name: s.name, transport: { kind: "stdio", command: s.transport.command, args: s.transport.args }, ...allow, ...elicit, ...contentOrigin, ...source, ...toolFaces, ...toolAxes, ...sessionMetaKey, ...startupTimeout },
|
|
183
184
|
pieces: env,
|
|
184
185
|
};
|
|
185
186
|
out.push({ scenarios: s.scenarios ?? [], spec: mintDeclaration(desk, draft, rosterLease) });
|
|
@@ -191,7 +192,7 @@ export function resolveMcpServers(mcp, desk, rosterLease, logger) {
|
|
|
191
192
|
if (withholdsMcpAssertionHeader(s.transport.assertionHeader))
|
|
192
193
|
noteMcpAssertionHeaderNotSent(logger, s.name);
|
|
193
194
|
const draft = {
|
|
194
|
-
spec: { name: s.name, transport: { kind: "http", url: s.transport.url, ...(s.transport.principalHeader ? { principalHeader: s.transport.principalHeader } : {}) }, ...allow, ...elicit, ...contentOrigin, ...source, ...toolFaces, ...toolAxes, ...sessionMetaKey },
|
|
195
|
+
spec: { name: s.name, transport: { kind: "http", url: s.transport.url, ...(s.transport.principalHeader ? { principalHeader: s.transport.principalHeader } : {}) }, ...allow, ...elicit, ...contentOrigin, ...source, ...toolFaces, ...toolAxes, ...sessionMetaKey, ...startupTimeout },
|
|
195
196
|
pieces: headers,
|
|
196
197
|
};
|
|
197
198
|
out.push({ scenarios: s.scenarios ?? [], spec: mintDeclaration(desk, draft, rosterLease) });
|
|
@@ -175,6 +175,12 @@ export interface CenterMcpServer {
|
|
|
175
175
|
* 承载形 `unknown`(与 {@link CenterMcpServer.toolAxes} 同姿):判官只有引擎根导出的 `judgeSessionMetaKey`(`resolveMcpServers` 在铸 spec 那一刻问它;坏形整条 server 不进)。
|
|
176
176
|
*/
|
|
177
177
|
sessionMetaKey?: unknown;
|
|
178
|
+
/**
|
|
179
|
+
* core 7.52.0 `McpServerSpec.startupTimeoutMs`(settings-schema 14.8.0 起解析透明)—— 这台服务器握手(连接 + initialize)与首次工具列举各带的启动界(整数毫秒),缺席读进程级缺省界;只界启动阶段,不动单次调用的超时。
|
|
180
|
+
* 承载形 `unknown`(与 {@link CenterMcpServer.sessionMetaKey} 同姿):是不是数、整数性、范围只有一只判官 —— 引擎根导出的 `mcpStartupTimeoutMs`,在**拨号时**判,
|
|
181
|
+
* 不合 ⇒ 拒这一台服务器的拨号(兄弟照挂)、点名 `config.mcp_startup_timeout_invalid`;本仓只承运,不判(判了就是第二只判官)。
|
|
182
|
+
*/
|
|
183
|
+
startupTimeoutMs?: unknown;
|
|
178
184
|
transport: {
|
|
179
185
|
kind: "stdio";
|
|
180
186
|
command: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/server",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.139.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",
|
|
@@ -69,8 +69,8 @@
|
|
|
69
69
|
"build:binary:run-local:darwin-arm64": "bun build --compile --target=bun-darwin-arm64 src/run-local.ts --outfile dist/run-local-darwin-arm64"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
|
-
"@sema-agent/core": "7.
|
|
73
|
-
"@sema-agent/settings-schema": "
|
|
72
|
+
"@sema-agent/core": "7.60.0",
|
|
73
|
+
"@sema-agent/settings-schema": "15.1.0",
|
|
74
74
|
"e2b": "^2.28.0",
|
|
75
75
|
"libsodium-wrappers": "^0.8.4",
|
|
76
76
|
"mysql2": "^3.22.4",
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
{
|
|
2
|
+
"repo": "server",
|
|
3
|
+
"version": "7.139.0",
|
|
4
|
+
"from": "v7.138.0",
|
|
5
|
+
"fromCommit": "8b41148fef6d0d0c316c0e963efec70714a24e98",
|
|
6
|
+
"to": "v7.139.0",
|
|
7
|
+
"generator": "scripts/wire-changes-server.mjs",
|
|
8
|
+
"sources": [
|
|
9
|
+
"docs/ASSISTANT-WIRE-CONTRACT.md#A.1",
|
|
10
|
+
"docs/ASSISTANT-WIRE-CONTRACT.md#A.1b",
|
|
11
|
+
"docs/ASSISTANT-WIRE-CONTRACT.md#B.1",
|
|
12
|
+
"docs/ASSISTANT-WIRE-CONTRACT.md#B.1a",
|
|
13
|
+
"docs/ASSISTANT-WIRE-CONTRACT.md#B.2b",
|
|
14
|
+
"docs/ASSISTANT-WIRE-CONTRACT.md#B.2",
|
|
15
|
+
"docs/ASSISTANT-WIRE-CONTRACT.md#D.3",
|
|
16
|
+
"src/trace/wire-projection-faces.ts",
|
|
17
|
+
"src/trace/self-minted-wire.ts",
|
|
18
|
+
"node_modules/@sema-agent/core/wire-changes"
|
|
19
|
+
],
|
|
20
|
+
"added": [
|
|
21
|
+
{
|
|
22
|
+
"id": "A1",
|
|
23
|
+
"source": "errorCode",
|
|
24
|
+
"member": "conflict.fork_id_taken",
|
|
25
|
+
"text": "附录 A.1 / A.1b 错误码新增 `conflict.fork_id_taken`(状态码 409)"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"id": "A2",
|
|
29
|
+
"source": "errorCode",
|
|
30
|
+
"member": "conflict.fork_in_progress",
|
|
31
|
+
"text": "附录 A.1 / A.1b 错误码新增 `conflict.fork_in_progress`(状态码 409)"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"id": "A3",
|
|
35
|
+
"source": "errorCode",
|
|
36
|
+
"member": "conflict.session_mirror",
|
|
37
|
+
"text": "附录 A.1 / A.1b 错误码新增 `conflict.session_mirror`(状态码 409)"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"id": "A4",
|
|
41
|
+
"source": "errorCode",
|
|
42
|
+
"member": "conflict.session_row_changed",
|
|
43
|
+
"text": "附录 A.1 / A.1b 错误码新增 `conflict.session_row_changed`(状态码 409)"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
"id": "A5",
|
|
47
|
+
"source": "errorCode",
|
|
48
|
+
"member": "conflict.session_writer",
|
|
49
|
+
"text": "附录 A.1 / A.1b 错误码新增 `conflict.session_writer`(状态码 409)"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"id": "A6",
|
|
53
|
+
"source": "errorCode",
|
|
54
|
+
"member": "execution_lane.not_served",
|
|
55
|
+
"text": "附录 A.1 / A.1b 错误码新增 `execution_lane.not_served`(状态码 409)"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": "A7",
|
|
59
|
+
"source": "errorCode",
|
|
60
|
+
"member": "execution_lane.tree_bound",
|
|
61
|
+
"text": "附录 A.1 / A.1b 错误码新增 `execution_lane.tree_bound`(状态码 409)"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"id": "A8",
|
|
65
|
+
"source": "errorCode",
|
|
66
|
+
"member": "state.fork_target_unsettled",
|
|
67
|
+
"text": "附录 A.1 / A.1b 错误码新增 `state.fork_target_unsettled`(状态码 503)"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"id": "A9",
|
|
71
|
+
"source": "selfMinted.endpointFaceStatus",
|
|
72
|
+
"member": "PATCH /v1/sessions/:id#expectedRowTag_current(行仍在那只标签上;体 = 列表行)",
|
|
73
|
+
"text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `PATCH /v1/sessions/:id#expectedRowTag_current(行仍在那只标签上;体 = 列表行)`(属性 200;since 7.139.0 = 本版新上 wire)"
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"id": "A10",
|
|
77
|
+
"source": "selfMinted.endpointFaceStatus",
|
|
78
|
+
"member": "PATCH /v1/sessions/:id#expectedRowTag_stale(行已不在那只标签上;体 conflict.session_row_changed + currentRow)",
|
|
79
|
+
"text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `PATCH /v1/sessions/:id#expectedRowTag_stale(行已不在那只标签上;体 conflict.session_row_changed + currentRow)`(属性 409;since 7.139.0 = 本版新上 wire)"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"id": "A11",
|
|
83
|
+
"source": "selfMinted.endpointFaceStatus",
|
|
84
|
+
"member": "PATCH /v1/sessions/:id#mirror_row(只读镜像行上的写,带不带 expectedRowTag;体 conflict.session_mirror + forkPath)",
|
|
85
|
+
"text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `PATCH /v1/sessions/:id#mirror_row(只读镜像行上的写,带不带 expectedRowTag;体 conflict.session_mirror + forkPath)`(属性 409;since 7.139.0 = 本版新上 wire)"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "A12",
|
|
89
|
+
"source": "selfMinted.endpointFaceStatus",
|
|
90
|
+
"member": "PATCH /v1/sessions/:id#owner_changed_after_gate(门那一读之后同一会话的属主被改;体 not_found.session)",
|
|
91
|
+
"text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `PATCH /v1/sessions/:id#owner_changed_after_gate(门那一读之后同一会话的属主被改;体 not_found.session)`(属性 404;since 7.139.0 = 本版新上 wire)"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"id": "A13",
|
|
95
|
+
"source": "selfMinted.endpointFaceStatus",
|
|
96
|
+
"member": "POST /v1/side-query#uncoded_error_with_preflight_prefix(没有引擎码、英文开头与前缀表同形的错误;体 internal.error)",
|
|
97
|
+
"text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/side-query#uncoded_error_with_preflight_prefix(没有引擎码、英文开头与前缀表同形的错误;体 internal.error)`(属性 500;since 7.139.0 = 本版新上 wire)"
|
|
98
|
+
},
|
|
99
|
+
{
|
|
100
|
+
"id": "A14",
|
|
101
|
+
"source": "selfMinted.endpointFaceStatus",
|
|
102
|
+
"member": "POST /v1/tasks|/v1/tasks/stream|/v1/runs#rewindFiles(新提交;体 request.body_shape + unknownKeys [rewindFiles])",
|
|
103
|
+
"text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/tasks|/v1/tasks/stream|/v1/runs#rewindFiles(新提交;体 request.body_shape + unknownKeys [rewindFiles])`(属性 400;since 7.139.0 = 本版新上 wire)"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "A15",
|
|
107
|
+
"source": "selfMinted.fieldConflictKind",
|
|
108
|
+
"member": "fork_target",
|
|
109
|
+
"text": "自铸 400 request.field_conflict detail.kind 新增 `fork_target`(属性 -;since 7.139.0 = 本版新上 wire)"
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "A16",
|
|
113
|
+
"source": "selfMinted.refusalSentenceForm",
|
|
114
|
+
"member": "400 request.body_shape#PATCH /v1/sessions/:id",
|
|
115
|
+
"text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.body_shape#PATCH /v1/sessions/:id`(属性 the body must be a JSON object carrying at least one of `title` and `pinned` (and, optionally, `expectedRowTag`), and nothing else;since 7.139.0 = 本版新上 wire)"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": "A17",
|
|
119
|
+
"source": "selfMinted.refusalSentenceForm",
|
|
120
|
+
"member": "400 request.field_invalid#PATCH /v1/sessions/:id.expectedRowTag",
|
|
121
|
+
"text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.field_invalid#PATCH /v1/sessions/:id.expectedRowTag`(属性 expectedRowTag must be the `rowTag` string a session list row carries (43 characters: letters, digits, `-` and `_`);since 7.139.0 = 本版新上 wire)"
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"id": "A18",
|
|
125
|
+
"source": "selfMinted.refusalSentenceForm",
|
|
126
|
+
"member": "409 conflict.session_mirror#PATCH /v1/sessions/:id",
|
|
127
|
+
"text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `409 conflict.session_mirror#PATCH /v1/sessions/:id`(属性 this session is a read-only mirror of a session whose writer is elsewhere — it cannot be renamed or pinned here; fork it (forkPath) to continue here; nothing was written;since 7.139.0 = 本版新上 wire)"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"id": "A19",
|
|
131
|
+
"source": "selfMinted.refusalSentenceForm",
|
|
132
|
+
"member": "409 conflict.session_row_changed#PATCH /v1/sessions/:id",
|
|
133
|
+
"text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `409 conflict.session_row_changed#PATCH /v1/sessions/:id`(属性 the session row changed since the rowTag you sent was read — nothing was written; currentRow is the row as it stands now: decide again, then send its rowTag;since 7.139.0 = 本版新上 wire)"
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id": "A20",
|
|
137
|
+
"source": "selfMinted.sessionBackgroundRowKey",
|
|
138
|
+
"member": "sessionId",
|
|
139
|
+
"text": "自铸 GET /v1/sessions/:id/background rows[] 行键(<键> → 在场律) 新增 `sessionId`(属性 present-iff background agent row bound to a child session;since 7.139.0 = 本版新上 wire)"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"id": "A21",
|
|
143
|
+
"source": "selfMinted.sessionRowWriteKey",
|
|
144
|
+
"member": "409 conflict.session_mirror#forkPath",
|
|
145
|
+
"text": "自铸 PATCH /v1/sessions/:id 体受理键与 409 拒体键(<面>#<键> → 读法 / 在场律;只登本版新增的) 新增 `409 conflict.session_mirror#forkPath`(属性 always;since 7.139.0 = 本版新上 wire)"
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"id": "A22",
|
|
149
|
+
"source": "selfMinted.sessionRowWriteKey",
|
|
150
|
+
"member": "409 conflict.session_row_changed#currentRow",
|
|
151
|
+
"text": "自铸 PATCH /v1/sessions/:id 体受理键与 409 拒体键(<面>#<键> → 读法 / 在场律;只登本版新增的) 新增 `409 conflict.session_row_changed#currentRow`(属性 always;since 7.139.0 = 本版新上 wire)"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"id": "A23",
|
|
155
|
+
"source": "selfMinted.sessionRowWriteKey",
|
|
156
|
+
"member": "body#expectedRowTag",
|
|
157
|
+
"text": "自铸 PATCH /v1/sessions/:id 体受理键与 409 拒体键(<面>#<键> → 读法 / 在场律;只登本版新增的) 新增 `body#expectedRowTag`(属性 optional;43×[A-Za-z0-9_-] else 400 request.field_invalid;alone 400 request.body_shape;stale⇒409 conflict.session_row_changed;since 7.139.0 = 本版新上 wire)"
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
"id": "A24",
|
|
161
|
+
"source": "selfMinted.sessionsListRowKey",
|
|
162
|
+
"member": "rowTag",
|
|
163
|
+
"text": "自铸 GET /v1/sessions sessions[] 行键 = PATCH /v1/sessions/:id 200 体 = 409 conflict.session_row_changed currentRow(<键> → 在场律) 新增 `rowTag`(属性 present-iff the row can be written conditionally (the store has the row write primitive and the row carries an incarnation);since 7.139.0 = 本版新上 wire)"
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"id": "A25",
|
|
167
|
+
"source": "selfMinted.wireValueRule",
|
|
168
|
+
"member": "GET /v1/config/catalog#rows[CONFIG_PROVIDER].semantics",
|
|
169
|
+
"text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[CONFIG_PROVIDER].semantics`(属性 remote-without-center-url-refuses-boot;since 7.139.0 = 本版新上 wire)"
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"id": "A26",
|
|
173
|
+
"source": "selfMinted.wireValueRule",
|
|
174
|
+
"member": "GET /v1/config/catalog#rows[DOCKER_SANDBOX_ENV].semantics",
|
|
175
|
+
"text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[DOCKER_SANDBOX_ENV].semantics`(属性 own-credential-name-refuses-boot;since 7.139.0 = 本版新上 wire)"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"id": "A27",
|
|
179
|
+
"source": "selfMinted.wireValueRule",
|
|
180
|
+
"member": "GET /v1/config/catalog#rows[E2B_SANDBOX_ENV].semantics",
|
|
181
|
+
"text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[E2B_SANDBOX_ENV].semantics`(属性 own-credential-name-refuses-boot;since 7.139.0 = 本版新上 wire)"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"id": "A28",
|
|
185
|
+
"source": "selfMinted.wireValueRule",
|
|
186
|
+
"member": "GET /v1/config/catalog#rows[K8S_NAMESPACE].semantics",
|
|
187
|
+
"text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[K8S_NAMESPACE].semantics`(属性 required-no-default;absent-or-blank-refuses-boot;since 7.139.0 = 本版新上 wire)"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"id": "A29",
|
|
191
|
+
"source": "selfMinted.wireValueRule",
|
|
192
|
+
"member": "GET /v1/config/catalog#rows[RETENTION_MODE].semantics",
|
|
193
|
+
"text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[RETENTION_MODE].semantics`(属性 enforce-without-horizon-or-cadence-refuses-boot;since 7.139.0 = 本版新上 wire)"
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"id": "A30",
|
|
197
|
+
"source": "selfMinted.wireValueRule",
|
|
198
|
+
"member": "GET /v1/config/catalog#rows[RETENTION_SWEEP_INTERVAL_SEC].semantics",
|
|
199
|
+
"text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[RETENTION_SWEEP_INTERVAL_SEC].semantics`(属性 cadence-without-horizon-refuses-boot;since 7.139.0 = 本版新上 wire)"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"id": "A31",
|
|
203
|
+
"source": "wireFace.coreKey",
|
|
204
|
+
"member": "status.seat",
|
|
205
|
+
"text": "投影面 status 新投 core 新键 seat(core 7.60.0 新增,面表没有把它登记进 excluded ⇒ 默认上 wire)"
|
|
206
|
+
}
|
|
207
|
+
],
|
|
208
|
+
"registered": [],
|
|
209
|
+
"excluded": [],
|
|
210
|
+
"removed": [],
|
|
211
|
+
"changed": [
|
|
212
|
+
{
|
|
213
|
+
"id": "C1",
|
|
214
|
+
"source": "engineNotice",
|
|
215
|
+
"member": "delegation.ask_unresolvable",
|
|
216
|
+
"text": "附录 D.3 engine_notice 码 `delegation.ask_unresolvable` 的detail:`{ sessionId, toolName, toolCallId, cause, parkLaneExisted }` —— `sessionId` 在 core 侧是 **REQUIRED** typed 键(委派子代上是**子代**的 session,归属标按 `fromSubagent`/`sourceTaskId` 同路);🔴 **`cause`(7.74.0 / core 7.17.0 [ref]② 起;旧名 `settlementKind` 已随该版**退役**,读它恒 `undefined`,无别名无双读)闭三词** `approver_unavailable`(被咨询的席答了 unavailable,其后无 park 接住)/ `no_approver_wired`(这条腿压根没接审批席或问答面,含 headless 的 `\"deny\"` 姿态)/ `mandate_unreconstructible`(祖先绑的 durable mandate 在这条腿上没有 park 设施可兑现 ⇒ 委派子代折内拒),逐字透传不窄化(词表属主在 core);`toolCallId` 与 `tool_approval` 卡帧同值可 join。🔴 **`remedies`(core 7.56.0;server 7.137.0 起过境)= 出路的数据形**:闭集 `approver` / `permission_mode` 上的非空表,恰在 `remedy`(无人可问的那一句)在场时带 —— `{ kind: \"approver\" }`(句子已说的那条:接一个审批席 / 让接着的那个能答)与 `{ kind: \"permission_mode\", value: \"bypassPermissions\", disclosedOn: \"gate.disposition.released\" }`(只在两臂上:模式放行这一问,放行披露在那只调用的 `tool_end.gate.disposition.released`)。`detail.remedies` 由宿主按 `kind` 渲染(或不渲染;`permission_mode` 是宿主只在运维放开该模式时才可提的出路,旁边带上 `disclosedOn` 指的披露),**server 只透传、不改写、不补句**;闭集外的 `kind` 属于更新的引擎,忽略。用户读的 `message` / `remedy` 自 core 7.56.0 起**不再教** `bypassPermissions`(那条出路只在 `remedies` 里) → `{ sessionId, toolName, toolCallId, cause, parkLaneExisted }` —— `sessionId` 在 core 侧是 **REQUIRED** typed 键 = 被拒那只调用**所在腿**的会话(委派子代上是**子代自己的** session);本服务按这一个键投给该会话**当前登记的腿**,不经 `fromSubagent` / `sourceTaskId`(那两键属于审批卡帧,不在本码 `detail` 上)转投父会话 —— 同步委派子代的会话本服务不登记腿,于是子代上的这一条今天**不上任何会话流**,只落运维日志行;父会话可见要等引擎为本码另铸父会话副本(`detail.sessionId` = 父会话 + `childSessionId`,`task.user_steer_undrained` 的同形先例),届时本服务零改动承载;🔴 **`cause`(7.74.0 / core 7.17.0 [ref]② 起;旧名 `settlementKind` 已随该版**退役**,读它恒 `undefined`,无别名无双读)闭三词** `approver_unavailable`(被咨询的席答了 unavailable,其后无 park 接住)/ `no_approver_wired`(这条腿压根没接审批席或问答面,含 headless 的 `\"deny\"` 姿态)/ `mandate_unreconstructible`(祖先绑的 durable mandate 在这条腿上没有 park 设施可兑现 ⇒ 委派子代折内拒),逐字透传不窄化(词表属主在 core);`toolCallId` 与 `tool_approval` 卡帧同值可 join。🔴 **`remedies`(core 7.56.0;server 7.137.0 起过境)= 出路的数据形**:闭集 `approver` / `permission_mode` 上的非空表,恰在 `remedy`(无人可问的那一句)在场时带 —— `{ kind: \"approver\" }`(句子已说的那条:接一个审批席 / 让接着的那个能答)与 `{ kind: \"permission_mode\", value: \"bypassPermissions\", disclosedOn: \"gate.disposition.released\" }`(只在两臂上:模式放行这一问,放行披露在那只调用的 `tool_end.gate.disposition.released`)。`detail.remedies` 由宿主按 `kind` 渲染(或不渲染;`permission_mode` 是宿主只在运维放开该模式时才可提的出路,旁边带上 `disclosedOn` 指的披露),**server 只透传、不改写、不补句**;闭集外的 `kind` 属于更新的引擎,忽略。用户读的 `message` / `remedy` 自 core 7.56.0 起**不再教** `bypassPermissions`(那条出路只在 `remedies` 里)"
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"id": "C2",
|
|
220
|
+
"source": "selfMinted.wireValueRule",
|
|
221
|
+
"member": "GET /v1/config/catalog#rows[K8S_SANDBOX_ENV].semantics",
|
|
222
|
+
"text": "自铸 出口值变换(<端点>#<键> → 变换) `GET /v1/config/catalog#rows[K8S_SANDBOX_ENV].semantics` 的属性:values-only-in-the-pod-own-secret;role-needs-secrets-create;denied-refuses-boot → values-only-in-the-pod-own-secret;role-needs-secrets-create;denied-refuses-boot;own-credential-name-refuses-boot(since 7.139.0)"
|
|
223
|
+
}
|
|
224
|
+
],
|
|
225
|
+
"narrowed": [],
|
|
226
|
+
"closedSetMembers": [
|
|
227
|
+
{
|
|
228
|
+
"set": "errorCode",
|
|
229
|
+
"at": [
|
|
230
|
+
"docs/ASSISTANT-WIRE-CONTRACT.md#A.1",
|
|
231
|
+
"docs/ASSISTANT-WIRE-CONTRACT.md#A.1b"
|
|
232
|
+
],
|
|
233
|
+
"added": [
|
|
234
|
+
"conflict.fork_id_taken",
|
|
235
|
+
"conflict.fork_in_progress",
|
|
236
|
+
"conflict.session_mirror",
|
|
237
|
+
"conflict.session_row_changed",
|
|
238
|
+
"conflict.session_writer",
|
|
239
|
+
"execution_lane.not_served",
|
|
240
|
+
"execution_lane.tree_bound",
|
|
241
|
+
"state.fork_target_unsettled"
|
|
242
|
+
],
|
|
243
|
+
"registered": [],
|
|
244
|
+
"removed": [],
|
|
245
|
+
"breaking": false
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"set": "selfMinted.endpointFaceStatus",
|
|
249
|
+
"at": [
|
|
250
|
+
"src/trace/self-minted-wire.ts#endpointFaceStatus"
|
|
251
|
+
],
|
|
252
|
+
"added": [
|
|
253
|
+
"PATCH /v1/sessions/:id#expectedRowTag_current(行仍在那只标签上;体 = 列表行)",
|
|
254
|
+
"PATCH /v1/sessions/:id#expectedRowTag_stale(行已不在那只标签上;体 conflict.session_row_changed + currentRow)",
|
|
255
|
+
"PATCH /v1/sessions/:id#mirror_row(只读镜像行上的写,带不带 expectedRowTag;体 conflict.session_mirror + forkPath)",
|
|
256
|
+
"PATCH /v1/sessions/:id#owner_changed_after_gate(门那一读之后同一会话的属主被改;体 not_found.session)",
|
|
257
|
+
"POST /v1/side-query#uncoded_error_with_preflight_prefix(没有引擎码、英文开头与前缀表同形的错误;体 internal.error)",
|
|
258
|
+
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#rewindFiles(新提交;体 request.body_shape + unknownKeys [rewindFiles])"
|
|
259
|
+
],
|
|
260
|
+
"registered": [],
|
|
261
|
+
"removed": [],
|
|
262
|
+
"breaking": false
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
"set": "selfMinted.fieldConflictKind",
|
|
266
|
+
"at": [
|
|
267
|
+
"src/trace/self-minted-wire.ts#fieldConflictKind"
|
|
268
|
+
],
|
|
269
|
+
"added": [
|
|
270
|
+
"fork_target"
|
|
271
|
+
],
|
|
272
|
+
"registered": [],
|
|
273
|
+
"removed": [],
|
|
274
|
+
"breaking": false
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"set": "selfMinted.refusalSentenceForm",
|
|
278
|
+
"at": [
|
|
279
|
+
"src/trace/self-minted-wire.ts#refusalSentenceForm"
|
|
280
|
+
],
|
|
281
|
+
"added": [
|
|
282
|
+
"400 request.body_shape#PATCH /v1/sessions/:id",
|
|
283
|
+
"400 request.field_invalid#PATCH /v1/sessions/:id.expectedRowTag",
|
|
284
|
+
"409 conflict.session_mirror#PATCH /v1/sessions/:id",
|
|
285
|
+
"409 conflict.session_row_changed#PATCH /v1/sessions/:id"
|
|
286
|
+
],
|
|
287
|
+
"registered": [],
|
|
288
|
+
"removed": [],
|
|
289
|
+
"breaking": false
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"set": "selfMinted.sessionBackgroundRowKey",
|
|
293
|
+
"at": [
|
|
294
|
+
"src/trace/self-minted-wire.ts#sessionBackgroundRowKey"
|
|
295
|
+
],
|
|
296
|
+
"added": [
|
|
297
|
+
"sessionId"
|
|
298
|
+
],
|
|
299
|
+
"registered": [],
|
|
300
|
+
"removed": [],
|
|
301
|
+
"breaking": false
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"set": "selfMinted.sessionRowWriteKey",
|
|
305
|
+
"at": [
|
|
306
|
+
"src/trace/self-minted-wire.ts#sessionRowWriteKey"
|
|
307
|
+
],
|
|
308
|
+
"added": [
|
|
309
|
+
"409 conflict.session_mirror#forkPath",
|
|
310
|
+
"409 conflict.session_row_changed#currentRow",
|
|
311
|
+
"body#expectedRowTag"
|
|
312
|
+
],
|
|
313
|
+
"registered": [],
|
|
314
|
+
"removed": [],
|
|
315
|
+
"breaking": false
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
"set": "selfMinted.sessionsListRowKey",
|
|
319
|
+
"at": [
|
|
320
|
+
"src/trace/self-minted-wire.ts#sessionsListRowKey"
|
|
321
|
+
],
|
|
322
|
+
"added": [
|
|
323
|
+
"rowTag"
|
|
324
|
+
],
|
|
325
|
+
"registered": [],
|
|
326
|
+
"removed": [],
|
|
327
|
+
"breaking": false
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
"set": "selfMinted.wireValueRule",
|
|
331
|
+
"at": [
|
|
332
|
+
"src/trace/self-minted-wire.ts#wireValueRule"
|
|
333
|
+
],
|
|
334
|
+
"added": [
|
|
335
|
+
"GET /v1/config/catalog#rows[CONFIG_PROVIDER].semantics",
|
|
336
|
+
"GET /v1/config/catalog#rows[DOCKER_SANDBOX_ENV].semantics",
|
|
337
|
+
"GET /v1/config/catalog#rows[E2B_SANDBOX_ENV].semantics",
|
|
338
|
+
"GET /v1/config/catalog#rows[K8S_NAMESPACE].semantics",
|
|
339
|
+
"GET /v1/config/catalog#rows[RETENTION_MODE].semantics",
|
|
340
|
+
"GET /v1/config/catalog#rows[RETENTION_SWEEP_INTERVAL_SEC].semantics"
|
|
341
|
+
],
|
|
342
|
+
"registered": [],
|
|
343
|
+
"removed": [],
|
|
344
|
+
"breaking": false
|
|
345
|
+
}
|
|
346
|
+
],
|
|
347
|
+
"breaking": 0
|
|
348
|
+
}
|