@sema-agent/server 7.135.0 → 7.136.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 +64 -2
- package/USAGE.md +62 -25
- package/deploy/sema-up/README.md +1 -1
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/values.yaml +1 -1
- package/dist/approval-card.d.ts +60 -4
- package/dist/approval-card.js +18 -1
- package/dist/approval-content-kind.d.ts +1 -0
- package/dist/approval-content-kind.js +1 -1
- package/dist/auth-bridge.d.ts +34 -5
- package/dist/auth-bridge.js +20 -3
- package/dist/boot/budget-tracing.d.ts +1 -2
- package/dist/boot/budget-tracing.js +2 -2
- package/dist/boot/org-memory.js +1 -1
- package/dist/boot/resolve-spec.js +10 -7
- package/dist/boot/runner-deps.js +4 -2
- package/dist/boot/stage-04-stores.d.ts +1 -1
- package/dist/boot/stage-05-execution-env.d.ts +1 -1
- package/dist/boot/stage-06-runners.d.ts +1 -1
- package/dist/boot/stage-07-capability-layer.d.ts +1 -1
- package/dist/boot/stage-08-reapers.d.ts +1 -1
- package/dist/boot/stage-09-leader.d.ts +1 -1
- package/dist/boot/stage-10-http-server.d.ts +1 -1
- package/dist/boot/stores.js +2 -3
- package/dist/boot/web-admin.js +10 -17
- package/dist/brain.js +12 -3
- package/dist/budget.d.ts +3 -3
- package/dist/budget.js +4 -0
- package/dist/capabilities/mcp-probe.d.ts +5 -4
- package/dist/capability-facts.d.ts +3 -7
- package/dist/capability-facts.js +3 -5
- package/dist/center-credential.d.ts +18 -4
- package/dist/center-credential.js +18 -3
- package/dist/config-catalog.js +12 -10
- package/dist/config-d-migration.js +1 -1
- package/dist/config-invariants.d.ts +1 -1
- package/dist/config-invariants.js +8 -0
- package/dist/config-lkg.d.ts +0 -38
- package/dist/config-lkg.js +1 -83
- package/dist/config-types.d.ts +12 -4
- package/dist/config.js +26 -8
- package/dist/deployment-shape.d.ts +1 -1
- package/dist/elicitation.d.ts +8 -7
- package/dist/elicitation.js +9 -8
- package/dist/file-history-disclosure.d.ts +6 -4
- package/dist/file-history-disclosure.js +22 -6
- package/dist/fleet-client.d.ts +32 -1
- package/dist/fleet-client.js +24 -4
- package/dist/fleet-lease.d.ts +7 -3
- package/dist/fleet-lease.js +31 -23
- package/dist/hooks/hook-llm.js +14 -8
- package/dist/hooks/hook-runner.d.ts +4 -4
- package/dist/hooks/hook-runner.js +2 -2
- package/dist/http/checkpoint-ctx.d.ts +28 -9
- package/dist/http/checkpoint-ctx.js +5 -1
- package/dist/http/dispatch.js +9 -9
- package/dist/http/resume-ctx-read.d.ts +2 -16
- package/dist/http/resume-ctx-read.js +2 -3
- package/dist/http/routes/approvals-assistant.d.ts +0 -2
- package/dist/http/routes/approvals-assistant.js +47 -12
- package/dist/http/routes/runs.js +2 -2
- package/dist/http/routes/session-sync.js +31 -9
- package/dist/http/routes/sessions.js +18 -14
- package/dist/http/submit-ctx.js +1 -1
- package/dist/http/wire-types.d.ts +5 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/model-route-gap.d.ts +49 -4
- package/dist/model-route-gap.js +34 -1
- package/dist/object-store-buckets.d.ts +13 -0
- package/dist/object-store-buckets.js +3 -0
- package/dist/observability/fail-open.d.ts +6 -6
- package/dist/observability/fail-open.js +6 -6
- package/dist/observability/metrics.js +1 -1
- package/dist/observability/principal-context.d.ts +4 -1
- package/dist/observability/principal-context.js +6 -1
- package/dist/parked-decide.d.ts +4 -3
- package/dist/parked-decide.js +26 -7
- package/dist/peer-directory.d.ts +2 -1
- package/dist/peer-directory.js +5 -5
- package/dist/plugins/approval-ask-store-sql.d.ts +8 -0
- package/dist/plugins/approval-ask-store-sql.js +3 -0
- package/dist/plugins/blob-backend.js +2 -1
- package/dist/plugins/checkpoint-index-columns.d.ts +50 -1
- package/dist/plugins/checkpoint-index-columns.js +28 -0
- package/dist/plugins/checkpoint-store-sql.d.ts +27 -3
- package/dist/plugins/checkpoint-store-sql.js +58 -29
- package/dist/plugins/file-history-store-sql.d.ts +6 -0
- package/dist/plugins/file-history-store-sql.js +30 -23
- package/dist/plugins/local-checkpoint-store.js +4 -3
- package/dist/plugins/one-time-migrations.d.ts +21 -28
- package/dist/plugins/one-time-migrations.js +39 -123
- package/dist/plugins/remote-env-k8s.d.ts +18 -5
- package/dist/plugins/remote-env-k8s.js +24 -7
- package/dist/plugins/s3-answer.d.ts +15 -0
- package/dist/plugins/s3-answer.js +5 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +39 -4
- package/dist/plugins/snapshot-bucket-presence.js +35 -7
- package/dist/plugins/sql-errors.d.ts +39 -0
- package/dist/plugins/sql-errors.js +49 -1
- package/dist/plugins/store-fault.d.ts +4 -0
- package/dist/plugins/store-fault.js +8 -0
- package/dist/plugins/tidb-pool.js +1 -1
- package/dist/plugins/web-search.d.ts +1 -1
- package/dist/plugins/web-search.js +2 -2
- package/dist/request-declaration-refusal.d.ts +94 -0
- package/dist/request-declaration-refusal.js +78 -0
- package/dist/request-image-urls.d.ts +6 -0
- package/dist/request-image-urls.js +27 -0
- package/dist/request-key-closure.d.ts +5 -0
- package/dist/request-key-closure.js +4 -1
- package/dist/runtime-caps-resolver.js +1 -1
- package/dist/sandbox-pkg-source.d.ts +28 -1
- package/dist/sandbox-pkg-source.js +1 -2
- package/dist/sealed-key.d.ts +19 -0
- package/dist/sealed-key.js +47 -4
- package/dist/session-incarnation.d.ts +16 -5
- package/dist/session-incarnation.js +7 -4
- package/dist/session-row.d.ts +3 -17
- package/dist/session-row.js +4 -0
- package/dist/session-sync.d.ts +15 -3
- package/dist/session-sync.js +5 -2
- package/dist/task-a2a.d.ts +52 -81
- package/dist/task-a2a.js +219 -89
- package/dist/task-mcp.d.ts +6 -14
- package/dist/task-mcp.js +16 -51
- package/dist/tool-approval.d.ts +23 -10
- package/dist/tool-approval.js +51 -36
- package/dist/trace/core-keyset-guard.d.ts +2 -2
- package/dist/trace/exit-seat.js +37 -13
- package/dist/trace/redact.d.ts +28 -12
- package/dist/trace/redact.js +233 -94
- package/dist/trace/self-minted-wire.d.ts +267 -0
- package/dist/trace/self-minted-wire.js +79 -0
- package/dist/url-credential-refusal.d.ts +52 -0
- package/dist/url-credential-refusal.js +14 -0
- package/dist/url-refusal.d.ts +13 -4
- package/dist/url-refusal.js +8 -2
- package/dist/workspace-space.d.ts +27 -0
- package/dist/workspace-space.js +26 -0
- package/package.json +3 -2
- package/scripts/drain-check-local.mjs +2 -1
- package/scripts/drain-check.mysql.sql +3 -1
- package/scripts/drain-check.pg.sql +3 -1
- package/skills/schedule.md +1 -1
- package/wire-changes/server@7.104.0.json +134 -0
- package/wire-changes/server@7.105.0.json +53 -0
- package/wire-changes/server@7.106.0.json +475 -0
- package/wire-changes/server@7.107.0.json +64 -0
- package/wire-changes/server@7.108.0.json +153 -0
- package/wire-changes/server@7.109.0.json +46 -0
- package/wire-changes/server@7.110.0.json +90 -0
- package/wire-changes/server@7.111.0.json +86 -0
- package/wire-changes/server@7.112.0.json +60 -0
- package/wire-changes/server@7.113.0.json +26 -0
- package/wire-changes/server@7.114.0.json +26 -0
- package/wire-changes/server@7.115.0.json +97 -0
- package/wire-changes/server@7.116.0.json +218 -0
- package/wire-changes/server@7.116.1.json +26 -0
- package/wire-changes/server@7.117.0.json +65 -0
- package/wire-changes/server@7.118.0.json +129 -0
- package/wire-changes/server@7.119.0.json +65 -0
- package/wire-changes/server@7.120.0.json +89 -0
- package/wire-changes/server@7.121.0.json +219 -0
- package/wire-changes/server@7.122.0.json +54 -0
- package/wire-changes/server@7.123.0.json +26 -0
- package/wire-changes/server@7.124.0.json +336 -0
- package/wire-changes/server@7.124.1.json +26 -0
- package/wire-changes/server@7.125.0.json +111 -0
- package/wire-changes/server@7.126.0.json +285 -0
- package/wire-changes/server@7.127.0.json +77 -0
- package/wire-changes/server@7.127.1.json +26 -0
- package/wire-changes/server@7.127.2.json +53 -0
- package/wire-changes/server@7.128.0.json +26 -0
- package/wire-changes/server@7.129.0.json +106 -0
- package/wire-changes/server@7.129.1.json +26 -0
- package/wire-changes/server@7.130.0.json +26 -0
- package/wire-changes/server@7.131.0.json +118 -0
- package/wire-changes/server@7.132.0.json +226 -0
- package/wire-changes/server@7.133.0.json +1155 -0
- package/wire-changes/server@7.134.0.json +107 -0
- package/wire-changes/server@7.135.0.json +174 -0
- package/wire-changes/server@7.136.0.json +448 -0
- package/dist/url-credential.d.ts +0 -52
- package/dist/url-credential.js +0 -49
|
@@ -831,6 +831,215 @@ export declare const SELF_MINTED_WIRE: {
|
|
|
831
831
|
};
|
|
832
832
|
};
|
|
833
833
|
};
|
|
834
|
+
/**
|
|
835
|
+
* 呈卡帧 `approval_request` 的 `card`(= `card_json` 的耐久卡信封)上本版新铸的键:引擎卡词 `approvalCard`。活铸帧的 `card`、落库的卡信封、断连重放帧的 `card` 三面同源同词
|
|
836
|
+
* (帧顶层那一份照旧在,同值)。在场律 `present-iff`:引擎铸了卡词且过了闭集窄读才有,引擎没铸 ⇒ 缺席(不编 `generic`);本版之前落下的行卡上没有 ⇒ 重放照旧不带。
|
|
837
|
+
* 卡信封的其余键不在本表(它们不是本版新上 wire)。
|
|
838
|
+
*/
|
|
839
|
+
readonly approvalRequestCardKey: {
|
|
840
|
+
readonly at: "approval_request 帧 card.<键>(活铸帧的 card · 落库的卡信封 card_json · 断连重放帧的 card)";
|
|
841
|
+
readonly members: {
|
|
842
|
+
readonly approvalCard: {
|
|
843
|
+
readonly attr: "present-iff";
|
|
844
|
+
readonly since: "7.136.0";
|
|
845
|
+
};
|
|
846
|
+
};
|
|
847
|
+
};
|
|
848
|
+
/**
|
|
849
|
+
* 停驻技能卡的「批它放行了什么」三位,本版起在运维队列行与订阅流 `pending` 帧上也带(此前只有助手收件箱行与活卡帧带)。三位由一只投影 `skillCardFacts` 投,
|
|
850
|
+
* `satisfies Record<keyof SkillCardFacts, …>`:投影加 / 删一位而本表没跟 ⇒ tsc 红。在场律 `present-iff`:只在这一行有该位时才带键(普通卡三位三面都缺席,缺席不是断言)。
|
|
851
|
+
*/
|
|
852
|
+
readonly approvalQueuePendingKey: {
|
|
853
|
+
readonly at: "GET /v1/approvals pending[] 行 · GET /v1/approvals/stream pending 帧(停驻技能卡的批准绑定三位;与助手收件箱行同一只投影)";
|
|
854
|
+
readonly members: {
|
|
855
|
+
boundGrantDigest: {
|
|
856
|
+
attr: string;
|
|
857
|
+
since: string;
|
|
858
|
+
};
|
|
859
|
+
boundGrants: {
|
|
860
|
+
attr: string;
|
|
861
|
+
since: string;
|
|
862
|
+
};
|
|
863
|
+
classifierNoRuling: {
|
|
864
|
+
attr: string;
|
|
865
|
+
since: string;
|
|
866
|
+
};
|
|
867
|
+
};
|
|
868
|
+
};
|
|
869
|
+
/**
|
|
870
|
+
* 逐端点「应答面 → HTTP 状态」映射里**本版改了状态的面**(形照 `submitIdempotency`:`<端点>#<面>` → 状态;面是调用方能观察到的那一形,不是内部分支名)。
|
|
871
|
+
* `since` 记**这一面以这个状态答**的起始版本;每个成员的旧状态写在 CHANGELOG 对应条里(旧状态的那一形此前没有登记,清单里它们是「本版新上 wire」,不是 changed)。
|
|
872
|
+
* 同一端点上状态没变的面(如 `/decide` 对同一张卡的 approve 仍 409)不入表。
|
|
873
|
+
*/
|
|
874
|
+
readonly endpointFaceStatus: {
|
|
875
|
+
readonly at: "逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面)";
|
|
876
|
+
readonly members: {
|
|
877
|
+
readonly "POST /v1/approvals/:sessionId/decide#deny(\u590D\u6D3B\u4E0D\u4E86\u7684\u505C\u9A7B\u884C:\u65E0 agent \u540D / \u65E0\u6839\u4F1A\u8BDD\u951A;\u4F53 { taskId, status: failed, decision: deny })": {
|
|
878
|
+
readonly attr: 200;
|
|
879
|
+
readonly since: "7.136.0";
|
|
880
|
+
};
|
|
881
|
+
readonly "GET /v1/sessions/:id/sync/manifest#store_connection_fault(\u4F53 state.file_history_unreadable + permanence: transient)": {
|
|
882
|
+
readonly attr: 503;
|
|
883
|
+
readonly since: "7.136.0";
|
|
884
|
+
};
|
|
885
|
+
readonly "GET /v1/sessions/:id/sync/entries#store_connection_fault(\u5E94\u7B54\u5934\u53D1\u51FA\u4E4B\u524D;\u4F53\u540C\u4E0A)": {
|
|
886
|
+
readonly attr: 503;
|
|
887
|
+
readonly since: "7.136.0";
|
|
888
|
+
};
|
|
889
|
+
readonly "GET /v1/sessions/:id/sync/history/blobs/:hash#store_connection_fault(\u4F53\u540C\u4E0A)": {
|
|
890
|
+
readonly attr: 503;
|
|
891
|
+
readonly since: "7.136.0";
|
|
892
|
+
};
|
|
893
|
+
readonly "GET /v1/sessions/:id/events#corrupt_archive(DB_BACKEND=local;\u5F00\u6D41\u4E4B\u524D;\u4F53 corrupt_session)": {
|
|
894
|
+
readonly attr: 500;
|
|
895
|
+
readonly since: "7.136.0";
|
|
896
|
+
};
|
|
897
|
+
readonly "PATCH /v1/sessions/:id#corrupt_archive(DB_BACKEND=local;\u4F53 corrupt_session)": {
|
|
898
|
+
readonly attr: 500;
|
|
899
|
+
readonly since: "7.136.0";
|
|
900
|
+
};
|
|
901
|
+
readonly "POST /v1/sessions/:id/sync/import#identical_repush_blob_missing(\u4F53 missing_blob)": {
|
|
902
|
+
readonly attr: 422;
|
|
903
|
+
readonly since: "7.136.0";
|
|
904
|
+
};
|
|
905
|
+
readonly "PATCH /v1/sessions/:id#title_no_visible_character(\u4F53 request.field_invalid)": {
|
|
906
|
+
readonly attr: 400;
|
|
907
|
+
readonly since: "7.136.0";
|
|
908
|
+
};
|
|
909
|
+
readonly "POST /v1/sessions/:id/sync/import#title_no_visible_character(Phase A \u4F53\u7684 title;\u4F53 request.field_invalid)": {
|
|
910
|
+
readonly attr: 400;
|
|
911
|
+
readonly since: "7.136.0";
|
|
912
|
+
};
|
|
913
|
+
readonly "POST /v1/tasks|/v1/tasks/stream|/v1/runs#images_url_credential(\u65B0\u63D0\u4EA4;\u4F53 request.field_invalid + field images[i].url + reason url_userinfo|url_credential_param)": {
|
|
914
|
+
readonly attr: 400;
|
|
915
|
+
readonly since: "7.136.0";
|
|
916
|
+
};
|
|
917
|
+
readonly "POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_malformed(\u65B0\u63D0\u4EA4;\u5217\u8868\u4E0D\u662F\u6570\u7EC4 / \u6761\u76EE\u4E0D\u662F\u5BF9\u8C61 / \u952E\u503C\u5224\u4E0D\u51FA\u5F62;\u4F53 request.field_invalid)": {
|
|
918
|
+
readonly attr: 400;
|
|
919
|
+
readonly since: "7.136.0";
|
|
920
|
+
};
|
|
921
|
+
readonly "POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_unknown_key(\u65B0\u63D0\u4EA4;\u8BCD\u8868\u5916\u7684\u952E;\u4F53 request.body_shape + unknownKeys)": {
|
|
922
|
+
readonly attr: 400;
|
|
923
|
+
readonly since: "7.136.0";
|
|
924
|
+
};
|
|
925
|
+
readonly "POST /v1/tool-approvals/:id/respond#new_owner_after_adoption(\u6536\u7F16\u4E4B\u540E\u7684\u65B0\u5C5E\u4E3B;\u672C\u526F\u672C\u4E0A\u4ECD\u6709\u5F15\u64CE\u817F\u5728\u7B49\u7684\u6D3B\u5361,\u51B3\u8BAE\u4EA4\u7ED9\u90A3\u6761\u817F)": {
|
|
926
|
+
readonly attr: 200;
|
|
927
|
+
readonly since: "7.136.0";
|
|
928
|
+
};
|
|
929
|
+
readonly "GET /v1/tool-approvals/:id#previous_owner_after_adoption(\u6536\u7F16\u4E4B\u540E\u7684\u524D\u5C5E\u4E3B;\u6309\u95EE\u8BFB\u53E3)": {
|
|
930
|
+
readonly attr: 404;
|
|
931
|
+
readonly since: "7.136.0";
|
|
932
|
+
};
|
|
933
|
+
readonly "POST /v1/tool-approvals/:id/respond#edited_rule_text_refused_after_adoption(\u533F\u540D\u6D3B\u5361\u6536\u7F16\u7ED9\u5177\u540D\u4E3B\u4F53\u540E\u65B0\u5C5E\u4E3B\u4EA4\u574F\u89C4\u5219\u6587\u672C;\u4F53 request.body_shape;\u5951\u7EA6\u6210\u6587\u7684\u5224\u636E,\u4ECA\u5929\u7ECF /v1/adoption \u5230\u4E0D\u4E86)": {
|
|
934
|
+
readonly attr: 400;
|
|
935
|
+
readonly since: "7.136.0";
|
|
936
|
+
};
|
|
937
|
+
readonly "POST /v1/tasks|/v1/runs#command_line_slots_without_sealed_key_store(stdio MCP \u7684 command / args \u4E0E command hook \u7684 command / args;\u4F53 conflict.checkpoint_ctx_unsealable + field + reason no_key_store;POST /v1/tasks/stream \u5728\u7EC8\u5C40\u5E27\u4E0A\u5E26\u672C\u7801;\u672C\u670D\u52A1\u81EA\u5DF1\u7684\u88C5\u914D\u4E0B\u4E0D\u53EF\u8FBE(\u88C5\u914D\u671F\u5DF2\u5BF9\u300C\u5E97\u5728\u800C\u5C01\u7B7E\u5668\u7F3A\u5E2D\u300D\u62D2\u542F,\u89C1 submit-ctx.ts \u81EA\u8FF0))": {
|
|
938
|
+
readonly attr: 409;
|
|
939
|
+
readonly since: "7.136.0";
|
|
940
|
+
};
|
|
941
|
+
readonly "ALL authenticated routes#bearer_token_without_scope_claim(\u9274\u6743\u6865\u9A8C\u8BC1\u817F;\u914D\u4E86 service \u51ED\u636E\u6216\u591A\u79DF REQUIRE_PRINCIPAL \u7684\u90E8\u7F72;\u4F53\u901A\u7528 auth.unauthorized)": {
|
|
942
|
+
readonly attr: 401;
|
|
943
|
+
readonly since: "7.136.0";
|
|
944
|
+
};
|
|
945
|
+
};
|
|
946
|
+
};
|
|
947
|
+
/**
|
|
948
|
+
* 拒体 / 应答体**句子的形**里本版换了或新增的(`<码>#<座>` → 句型)。句子是展示文本,机读分支按 `errorCode` / `field` / `reason`;本表登记的是「句型换了」,
|
|
949
|
+
* 给按字面匹配句子的消费方对账(码、状态、体键在这些成员上都没变,变的只有 `message`)。`attr` 写句型的骨架(`<…>` 是占位),旧句型写在 CHANGELOG 对应条里。
|
|
950
|
+
*/
|
|
951
|
+
readonly refusalSentenceForm: {
|
|
952
|
+
readonly at: "拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变)";
|
|
953
|
+
readonly members: {
|
|
954
|
+
readonly "409 decide.row_unrevivable#no_agent_name": {
|
|
955
|
+
readonly attr: "ends: deny it to close the card (the agent then ends as failed)";
|
|
956
|
+
readonly since: "7.136.0";
|
|
957
|
+
};
|
|
958
|
+
readonly "409 decide.row_unrevivable#no_root_anchor": {
|
|
959
|
+
readonly attr: "ends: deny it to close the card (the agent then ends as failed)";
|
|
960
|
+
readonly since: "7.136.0";
|
|
961
|
+
};
|
|
962
|
+
readonly "400 request.field_invalid#mcpServers.over_cap(\u53D7\u7406\u53E3 \u00B7 POST /v1/capabilities/mcp/probe \u540C\u53E5)": {
|
|
963
|
+
readonly attr: "head: <field> has <count> entries — at most <cap> are accepted";
|
|
964
|
+
readonly since: "7.136.0";
|
|
965
|
+
};
|
|
966
|
+
readonly "400 request.field_invalid#a2aPeers.over_cap": {
|
|
967
|
+
readonly attr: "tail: 声明列表拒绝骨架的句尾(与 mcpServers 共用 request-declaration-refusal)";
|
|
968
|
+
readonly since: "7.136.0";
|
|
969
|
+
};
|
|
970
|
+
readonly "400 request.field_invalid#a2aPeers[i].url|cardUrl.credential": {
|
|
971
|
+
readonly attr: "<field> (peer <name>) is not a usable declaration — <rule> …";
|
|
972
|
+
readonly since: "7.136.0";
|
|
973
|
+
};
|
|
974
|
+
readonly "400 request.field_invalid#title.no_visible_character(PATCH /v1/sessions/:id \u00B7 \u4F1A\u8BDD\u540C\u6B65 2c \u5BFC\u5165\u7684 title)": {
|
|
975
|
+
readonly attr: "title must contain at least one visible character";
|
|
976
|
+
readonly since: "7.136.0";
|
|
977
|
+
};
|
|
978
|
+
readonly "503 state.file_history_unreadable#store_connection_fault(\u4F1A\u8BDD\u540C\u6B65\u4E09\u6761\u62C9\u53D6\u8BFB\u817F)": {
|
|
979
|
+
readonly attr: "this session's stored state could not be read right now (the store connection failed), so nothing was exported — retry later";
|
|
980
|
+
readonly since: "7.136.0";
|
|
981
|
+
};
|
|
982
|
+
readonly "connect_failed(run \u5931\u8D25\u7EC8\u5C40)#snapshot_bucket_missing(k8s \u8F66\u9053\u8BFB latest \u5F97 404 NoSuchBucket;\u8FDE\u6C99\u7BB1\u5931\u8D25,\u4E00\u53EA pod \u90FD\u4E0D\u5EFA)": {
|
|
983
|
+
readonly attr: "workspace space pointer read failed (snapshot_bucket_missing): the workspace snapshot bucket <name> (WORKSPACE_SNAPSHOT_BUCKET; default workspaces) does not exist in the object store — refusing to start this run … Ways out: create the bucket, or set WORKSPACE_SNAPSHOT_BUCKET to one that exists, or set WORKSPACE_PERSIST=off …";
|
|
984
|
+
readonly since: "7.136.0";
|
|
985
|
+
};
|
|
986
|
+
readonly "400 request.field_invalid#images[i].url.credential": {
|
|
987
|
+
readonly attr: "<field> <规则句> — the URL is kept as written (a parked task's resume context, logs), while images[i] can carry the image bytes inline: send { data, mimeType } instead of a URL that holds the credential";
|
|
988
|
+
readonly since: "7.136.0";
|
|
989
|
+
};
|
|
990
|
+
readonly "400 request.field_invalid#a2aPeers.not_array": {
|
|
991
|
+
readonly attr: "head: a2aPeers is <shape>, not an array of A2A peer declarations";
|
|
992
|
+
readonly since: "7.136.0";
|
|
993
|
+
};
|
|
994
|
+
readonly "400 request.field_invalid#a2aPeers[i].not_object": {
|
|
995
|
+
readonly attr: "head: a2aPeers[i] is <shape>, not an A2A peer declaration (an object)";
|
|
996
|
+
readonly since: "7.136.0";
|
|
997
|
+
};
|
|
998
|
+
readonly "400 request.field_invalid#a2aPeers[i].<key>.unusable(url / cardUrl \u51ED\u636E\u62D2\u4E4B\u5916\u7684\u952E\u503C\u574F\u5F62)": {
|
|
999
|
+
readonly attr: "<field> (peer <name>) is not a usable declaration — <rule> …";
|
|
1000
|
+
readonly since: "7.136.0";
|
|
1001
|
+
};
|
|
1002
|
+
readonly "400 request.body_shape#a2aPeers[i].unknown_key": {
|
|
1003
|
+
readonly attr: "body: unrecognized key(s) on an A2A peer declaration — refused rather than dropped …; Accepted per entry: <keys>";
|
|
1004
|
+
readonly since: "7.136.0";
|
|
1005
|
+
};
|
|
1006
|
+
readonly "409 conflict.checkpoint_ctx_unsealable#submit(\u63D0\u4EA4\u9762:\u672C\u670D\u52A1\u6CA1\u6709\u4FDD\u7BA1\u5E97)": {
|
|
1007
|
+
readonly attr: "slots: static request headers, the command lines and environment values given to MCP stdio servers and command hooks, settings.env, or settings.webSearch.apiKey";
|
|
1008
|
+
readonly since: "7.136.0";
|
|
1009
|
+
};
|
|
1010
|
+
readonly "409 conflict.checkpoint_ctx_unsealable#resume(\u7EED\u8DD1\u4E0A\u4E0B\u6587\u8BFB\u53E3)": {
|
|
1011
|
+
readonly attr: "slots: static request headers, the command lines and environment values given to MCP stdio servers and command hooks, settings.env, or settings.webSearch.apiKey";
|
|
1012
|
+
readonly since: "7.136.0";
|
|
1013
|
+
};
|
|
1014
|
+
};
|
|
1015
|
+
};
|
|
1016
|
+
/**
|
|
1017
|
+
* 文件历史店的故障答里 `permanence`(店对这次故障的重试类判断,体键,店没判则缺席)的 `transient` 一词:本版起库断连等**连接类故障**店判 `transient`,
|
|
1018
|
+
* 出现在 `422 adopt_failed` / `restore_failed` 等店答与 `503 state.file_history_unreadable` 体上(词表属主 = 引擎的 `GovernanceRetryClass` 两词,另一词 `terminal` 自 7.135.0 起由永久码带,不在本表)。
|
|
1019
|
+
* 在场律 `present-iff`:店判了才带,没判缺席。
|
|
1020
|
+
*/
|
|
1021
|
+
readonly storeFaultPermanence: {
|
|
1022
|
+
readonly at: "文件历史店故障答的体键 permanence(422 adopt_failed · restore_failed 等 · 503 state.file_history_unreadable)";
|
|
1023
|
+
readonly members: {
|
|
1024
|
+
readonly transient: {
|
|
1025
|
+
readonly attr: "present-iff";
|
|
1026
|
+
readonly since: "7.136.0";
|
|
1027
|
+
};
|
|
1028
|
+
};
|
|
1029
|
+
};
|
|
1030
|
+
/**
|
|
1031
|
+
* `GET /v1/config/catalog` 的 `rows[]` 里**本版新增的行**(成员 = 行名,属性 = 行的域)。目录行集本身是 `config-catalog.ts` 的 `CONFIG_CATALOG`,不在本表整份登记 ——
|
|
1032
|
+
* 本表只登「这一版新上 wire 的行」;已有行的字面(`semantics` / `derivedDefaultNote`)改动登在 `wireValueRule`。钉 `test/wire-changes-server.test.ts` ⑥:成员必须是目录里的行、域一致。
|
|
1033
|
+
*/
|
|
1034
|
+
readonly configCatalogRow: {
|
|
1035
|
+
readonly at: "GET /v1/config/catalog rows[](<行名> → 域;只登本版新增的行)";
|
|
1036
|
+
readonly members: {
|
|
1037
|
+
readonly SEALED_KEY_DIR: {
|
|
1038
|
+
readonly attr: "store";
|
|
1039
|
+
readonly since: "7.136.0";
|
|
1040
|
+
};
|
|
1041
|
+
};
|
|
1042
|
+
};
|
|
834
1043
|
/** 本仓在出口对 core 值做的变换(值变、键不变)。 */
|
|
835
1044
|
readonly wireValueRule: {
|
|
836
1045
|
readonly at: "出口值变换(<端点>#<键> → 变换)";
|
|
@@ -897,6 +1106,64 @@ export declare const SELF_MINTED_WIRE: {
|
|
|
897
1106
|
readonly attr: "durableMediaCardKeyDropped";
|
|
898
1107
|
readonly since: "7.127.2";
|
|
899
1108
|
};
|
|
1109
|
+
/**
|
|
1110
|
+
* 7.136.0:助手收件箱行的 `objective` 值语义换了(键名与可空性不变):此前 = 停驻上下文里的目标原文(不截断、不脱敏),本版起 = 这道门所属 run 的目标预览
|
|
1111
|
+
* (run 行的 `objectivePreview` 列,写入时已脱敏、约 120 字符;与 tasks 视图读同一列)。
|
|
1112
|
+
*/
|
|
1113
|
+
readonly "GET /v1/assistant/inbox#objective": {
|
|
1114
|
+
readonly attr: "runRowObjectivePreview";
|
|
1115
|
+
readonly since: "7.136.0";
|
|
1116
|
+
};
|
|
1117
|
+
/**
|
|
1118
|
+
* 7.136.0:`elicitation_complete.action` 的取词律 —— 没人应答的释放(答题窗到期 · run 中止 · 腿退出时仍挂着)一律放 `cancel`,`decline` 只留给「拒」;
|
|
1119
|
+
* 此前答题窗到期那一帧放 `decline`。词表(accept / decline / cancel)与帧形不变,变的是到期那一帧的值。
|
|
1120
|
+
*/
|
|
1121
|
+
readonly "SSE elicitation_complete#action(\u6CA1\u4EBA\u5E94\u7B54\u7684\u91CA\u653E)": {
|
|
1122
|
+
readonly attr: "cancel-not-decline";
|
|
1123
|
+
readonly since: "7.136.0";
|
|
1124
|
+
};
|
|
1125
|
+
/**
|
|
1126
|
+
* 7.136.0:`GET /v1/config/catalog` 已有行的字面(`semantics` 说明句 / `derivedDefaultNote` 缺席说明;键与行集不变,只是字面换了或新增):
|
|
1127
|
+
* `MCP_ELICITATION_*` 四行的缺席出厂窗来源词由「core 出厂窗」改成「本服务出厂窗(DEFAULT_ELICITATION_THROTTLE)」;两条 `ANTHROPIC_*` 凭据行改述「只发某一种头、互斥、同设拒启」;
|
|
1128
|
+
* `WORKSPACE_SNAPSHOT_BUCKET` 补上起服核桶与运行期读 `latest` 的处置;`WORKSPACE_SNAPSHOT_PREFIX` 改述多段路径与拒启条件并新增缺席说明。
|
|
1129
|
+
* 成员写成 `GET /v1/config/catalog#rows[<行名>].<semantics|derivedDefaultNote>`,行名与字段由 `test/wire-changes-server.test.ts` ⑥ 对着 `CONFIG_CATALOG` 核。
|
|
1130
|
+
*/
|
|
1131
|
+
readonly "GET /v1/config/catalog#rows[MCP_ELICITATION_MAX_CONCURRENT].derivedDefaultNote": {
|
|
1132
|
+
readonly attr: "default-window-source:server";
|
|
1133
|
+
readonly since: "7.136.0";
|
|
1134
|
+
};
|
|
1135
|
+
readonly "GET /v1/config/catalog#rows[MCP_ELICITATION_MAX_TOTAL].derivedDefaultNote": {
|
|
1136
|
+
readonly attr: "default-window-source:server";
|
|
1137
|
+
readonly since: "7.136.0";
|
|
1138
|
+
};
|
|
1139
|
+
readonly "GET /v1/config/catalog#rows[MCP_ELICITATION_MIN_INTERVAL_MS].derivedDefaultNote": {
|
|
1140
|
+
readonly attr: "default-window-source:server";
|
|
1141
|
+
readonly since: "7.136.0";
|
|
1142
|
+
};
|
|
1143
|
+
readonly "GET /v1/config/catalog#rows[MCP_ELICITATION_TTL_MS].derivedDefaultNote": {
|
|
1144
|
+
readonly attr: "default-window-source:server";
|
|
1145
|
+
readonly since: "7.136.0";
|
|
1146
|
+
};
|
|
1147
|
+
readonly "GET /v1/config/catalog#rows[ANTHROPIC_API_KEY].semantics": {
|
|
1148
|
+
readonly attr: "x-api-key-only;mutually-exclusive;both-set-refuses-boot";
|
|
1149
|
+
readonly since: "7.136.0";
|
|
1150
|
+
};
|
|
1151
|
+
readonly "GET /v1/config/catalog#rows[ANTHROPIC_AUTH_TOKEN].semantics": {
|
|
1152
|
+
readonly attr: "bearer-only;mutually-exclusive;both-set-refuses-boot";
|
|
1153
|
+
readonly since: "7.136.0";
|
|
1154
|
+
};
|
|
1155
|
+
readonly "GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_BUCKET].semantics": {
|
|
1156
|
+
readonly attr: "boot-checks-bucket;runtime-latest-no-such-bucket-fails-run";
|
|
1157
|
+
readonly since: "7.136.0";
|
|
1158
|
+
};
|
|
1159
|
+
readonly "GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_PREFIX].semantics": {
|
|
1160
|
+
readonly attr: "multi-segment-prefix;bad-segment-refuses-boot";
|
|
1161
|
+
readonly since: "7.136.0";
|
|
1162
|
+
};
|
|
1163
|
+
readonly "GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_PREFIX].derivedDefaultNote": {
|
|
1164
|
+
readonly attr: "absent=>kata";
|
|
1165
|
+
readonly since: "7.136.0";
|
|
1166
|
+
};
|
|
900
1167
|
};
|
|
901
1168
|
};
|
|
902
1169
|
};
|
|
@@ -287,6 +287,74 @@ export const SELF_MINTED_WIRE = {
|
|
|
287
287
|
aliases: { attr: "always", since: "7.135.0" },
|
|
288
288
|
},
|
|
289
289
|
},
|
|
290
|
+
approvalRequestCardKey: {
|
|
291
|
+
at: "approval_request 帧 card.<键>(活铸帧的 card · 落库的卡信封 card_json · 断连重放帧的 card)",
|
|
292
|
+
members: {
|
|
293
|
+
approvalCard: { attr: "present-iff", since: "7.136.0" },
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
approvalQueuePendingKey: {
|
|
297
|
+
at: "GET /v1/approvals pending[] 行 · GET /v1/approvals/stream pending 帧(停驻技能卡的批准绑定三位;与助手收件箱行同一只投影)",
|
|
298
|
+
members: {
|
|
299
|
+
boundGrantDigest: { attr: "present-iff", since: "7.136.0" },
|
|
300
|
+
boundGrants: { attr: "present-iff", since: "7.136.0" },
|
|
301
|
+
classifierNoRuling: { attr: "present-iff", since: "7.136.0" },
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
endpointFaceStatus: {
|
|
305
|
+
at: "逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面)",
|
|
306
|
+
members: {
|
|
307
|
+
"POST /v1/approvals/:sessionId/decide#deny(复活不了的停驻行:无 agent 名 / 无根会话锚;体 { taskId, status: failed, decision: deny })": { attr: 200, since: "7.136.0" },
|
|
308
|
+
"GET /v1/sessions/:id/sync/manifest#store_connection_fault(体 state.file_history_unreadable + permanence: transient)": { attr: 503, since: "7.136.0" },
|
|
309
|
+
"GET /v1/sessions/:id/sync/entries#store_connection_fault(应答头发出之前;体同上)": { attr: 503, since: "7.136.0" },
|
|
310
|
+
"GET /v1/sessions/:id/sync/history/blobs/:hash#store_connection_fault(体同上)": { attr: 503, since: "7.136.0" },
|
|
311
|
+
"GET /v1/sessions/:id/events#corrupt_archive(DB_BACKEND=local;开流之前;体 corrupt_session)": { attr: 500, since: "7.136.0" },
|
|
312
|
+
"PATCH /v1/sessions/:id#corrupt_archive(DB_BACKEND=local;体 corrupt_session)": { attr: 500, since: "7.136.0" },
|
|
313
|
+
"POST /v1/sessions/:id/sync/import#identical_repush_blob_missing(体 missing_blob)": { attr: 422, since: "7.136.0" },
|
|
314
|
+
"PATCH /v1/sessions/:id#title_no_visible_character(体 request.field_invalid)": { attr: 400, since: "7.136.0" },
|
|
315
|
+
"POST /v1/sessions/:id/sync/import#title_no_visible_character(Phase A 体的 title;体 request.field_invalid)": { attr: 400, since: "7.136.0" },
|
|
316
|
+
"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" },
|
|
317
|
+
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_malformed(新提交;列表不是数组 / 条目不是对象 / 键值判不出形;体 request.field_invalid)": { attr: 400, since: "7.136.0" },
|
|
318
|
+
"POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_unknown_key(新提交;词表外的键;体 request.body_shape + unknownKeys)": { attr: 400, since: "7.136.0" },
|
|
319
|
+
"POST /v1/tool-approvals/:id/respond#new_owner_after_adoption(收编之后的新属主;本副本上仍有引擎腿在等的活卡,决议交给那条腿)": { attr: 200, since: "7.136.0" },
|
|
320
|
+
"GET /v1/tool-approvals/:id#previous_owner_after_adoption(收编之后的前属主;按问读口)": { attr: 404, since: "7.136.0" },
|
|
321
|
+
"POST /v1/tool-approvals/:id/respond#edited_rule_text_refused_after_adoption(匿名活卡收编给具名主体后新属主交坏规则文本;体 request.body_shape;契约成文的判据,今天经 /v1/adoption 到不了)": { attr: 400, since: "7.136.0" },
|
|
322
|
+
"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" },
|
|
323
|
+
"ALL authenticated routes#bearer_token_without_scope_claim(鉴权桥验证腿;配了 service 凭据或多租 REQUIRE_PRINCIPAL 的部署;体通用 auth.unauthorized)": { attr: 401, since: "7.136.0" },
|
|
324
|
+
},
|
|
325
|
+
},
|
|
326
|
+
refusalSentenceForm: {
|
|
327
|
+
at: "拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变)",
|
|
328
|
+
members: {
|
|
329
|
+
"409 decide.row_unrevivable#no_agent_name": { attr: "ends: deny it to close the card (the agent then ends as failed)", since: "7.136.0" },
|
|
330
|
+
"409 decide.row_unrevivable#no_root_anchor": { attr: "ends: deny it to close the card (the agent then ends as failed)", since: "7.136.0" },
|
|
331
|
+
"400 request.field_invalid#mcpServers.over_cap(受理口 · POST /v1/capabilities/mcp/probe 同句)": { attr: "head: <field> has <count> entries — at most <cap> are accepted", since: "7.136.0" },
|
|
332
|
+
"400 request.field_invalid#a2aPeers.over_cap": { attr: "tail: 声明列表拒绝骨架的句尾(与 mcpServers 共用 request-declaration-refusal)", since: "7.136.0" },
|
|
333
|
+
"400 request.field_invalid#a2aPeers[i].url|cardUrl.credential": { attr: "<field> (peer <name>) is not a usable declaration — <rule> …", since: "7.136.0" },
|
|
334
|
+
"400 request.field_invalid#title.no_visible_character(PATCH /v1/sessions/:id · 会话同步 2c 导入的 title)": { attr: "title must contain at least one visible character", since: "7.136.0" },
|
|
335
|
+
"503 state.file_history_unreadable#store_connection_fault(会话同步三条拉取读腿)": { attr: "this session's stored state could not be read right now (the store connection failed), so nothing was exported — retry later", since: "7.136.0" },
|
|
336
|
+
"connect_failed(run 失败终局)#snapshot_bucket_missing(k8s 车道读 latest 得 404 NoSuchBucket;连沙箱失败,一只 pod 都不建)": { attr: "workspace space pointer read failed (snapshot_bucket_missing): the workspace snapshot bucket <name> (WORKSPACE_SNAPSHOT_BUCKET; default workspaces) does not exist in the object store — refusing to start this run … Ways out: create the bucket, or set WORKSPACE_SNAPSHOT_BUCKET to one that exists, or set WORKSPACE_PERSIST=off …", since: "7.136.0" },
|
|
337
|
+
"400 request.field_invalid#images[i].url.credential": { attr: "<field> <规则句> — the URL is kept as written (a parked task's resume context, logs), while images[i] can carry the image bytes inline: send { data, mimeType } instead of a URL that holds the credential", since: "7.136.0" },
|
|
338
|
+
"400 request.field_invalid#a2aPeers.not_array": { attr: "head: a2aPeers is <shape>, not an array of A2A peer declarations", since: "7.136.0" },
|
|
339
|
+
"400 request.field_invalid#a2aPeers[i].not_object": { attr: "head: a2aPeers[i] is <shape>, not an A2A peer declaration (an object)", since: "7.136.0" },
|
|
340
|
+
"400 request.field_invalid#a2aPeers[i].<key>.unusable(url / cardUrl 凭据拒之外的键值坏形)": { attr: "<field> (peer <name>) is not a usable declaration — <rule> …", since: "7.136.0" },
|
|
341
|
+
"400 request.body_shape#a2aPeers[i].unknown_key": { attr: "body: unrecognized key(s) on an A2A peer declaration — refused rather than dropped …; Accepted per entry: <keys>", since: "7.136.0" },
|
|
342
|
+
"409 conflict.checkpoint_ctx_unsealable#submit(提交面:本服务没有保管店)": { attr: "slots: static request headers, the command lines and environment values given to MCP stdio servers and command hooks, settings.env, or settings.webSearch.apiKey", since: "7.136.0" },
|
|
343
|
+
"409 conflict.checkpoint_ctx_unsealable#resume(续跑上下文读口)": { attr: "slots: static request headers, the command lines and environment values given to MCP stdio servers and command hooks, settings.env, or settings.webSearch.apiKey", since: "7.136.0" },
|
|
344
|
+
},
|
|
345
|
+
},
|
|
346
|
+
storeFaultPermanence: {
|
|
347
|
+
at: "文件历史店故障答的体键 permanence(422 adopt_failed · restore_failed 等 · 503 state.file_history_unreadable)",
|
|
348
|
+
members: {
|
|
349
|
+
transient: { attr: "present-iff", since: "7.136.0" },
|
|
350
|
+
},
|
|
351
|
+
},
|
|
352
|
+
configCatalogRow: {
|
|
353
|
+
at: "GET /v1/config/catalog rows[](<行名> → 域;只登本版新增的行)",
|
|
354
|
+
members: {
|
|
355
|
+
SEALED_KEY_DIR: { attr: "store", since: "7.136.0" },
|
|
356
|
+
},
|
|
357
|
+
},
|
|
290
358
|
wireValueRule: {
|
|
291
359
|
at: "出口值变换(<端点>#<键> → 变换)",
|
|
292
360
|
members: {
|
|
@@ -298,6 +366,17 @@ export const SELF_MINTED_WIRE = {
|
|
|
298
366
|
"GET /v1/runs/:id/events#tool_end.output[](媒体块)": { attr: "durableMediaDescriptor+totalChars", since: "7.127.0" },
|
|
299
367
|
"SSE tool_end#structured.file.base64(媒体卡)": { attr: "verbatim-bytes;backlog>64MiB⇒key-dropped", since: "7.127.2" },
|
|
300
368
|
"GET /v1/runs/:id/events#tool_end.structured.file.base64(媒体卡)": { attr: "durableMediaCardKeyDropped", since: "7.127.2" },
|
|
369
|
+
"GET /v1/assistant/inbox#objective": { attr: "runRowObjectivePreview", since: "7.136.0" },
|
|
370
|
+
"SSE elicitation_complete#action(没人应答的释放)": { attr: "cancel-not-decline", since: "7.136.0" },
|
|
371
|
+
"GET /v1/config/catalog#rows[MCP_ELICITATION_MAX_CONCURRENT].derivedDefaultNote": { attr: "default-window-source:server", since: "7.136.0" },
|
|
372
|
+
"GET /v1/config/catalog#rows[MCP_ELICITATION_MAX_TOTAL].derivedDefaultNote": { attr: "default-window-source:server", since: "7.136.0" },
|
|
373
|
+
"GET /v1/config/catalog#rows[MCP_ELICITATION_MIN_INTERVAL_MS].derivedDefaultNote": { attr: "default-window-source:server", since: "7.136.0" },
|
|
374
|
+
"GET /v1/config/catalog#rows[MCP_ELICITATION_TTL_MS].derivedDefaultNote": { attr: "default-window-source:server", since: "7.136.0" },
|
|
375
|
+
"GET /v1/config/catalog#rows[ANTHROPIC_API_KEY].semantics": { attr: "x-api-key-only;mutually-exclusive;both-set-refuses-boot", since: "7.136.0" },
|
|
376
|
+
"GET /v1/config/catalog#rows[ANTHROPIC_AUTH_TOKEN].semantics": { attr: "bearer-only;mutually-exclusive;both-set-refuses-boot", since: "7.136.0" },
|
|
377
|
+
"GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_BUCKET].semantics": { attr: "boot-checks-bucket;runtime-latest-no-such-bucket-fails-run", since: "7.136.0" },
|
|
378
|
+
"GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_PREFIX].semantics": { attr: "multi-segment-prefix;bad-segment-refuses-boot", since: "7.136.0" },
|
|
379
|
+
"GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_PREFIX].derivedDefaultNote": { attr: "absent=>kata", since: "7.136.0" },
|
|
301
380
|
},
|
|
302
381
|
},
|
|
303
382
|
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **请求面「URL 里带凭据」座位的拒体铸点**([ref] / [ref];判官本身在契约包)。
|
|
3
|
+
*
|
|
4
|
+
* ## 谁判、谁铸
|
|
5
|
+
* 「这个 URL 里带着凭据吗」的**判官**(`findUrlCredential` / `findUrlUserinfo` / 规则句 `urlCredentialRule` / 拒因词 `URL_CREDENTIAL_REASONS` / 凭据名表 `CREDENTIAL_PARAM_NAMES`)
|
|
6
|
+
* 住 `@sema-agent/settings-schema` 包根(14.5.0 起;规则、拒因词与规则句由本仓上移时逐字搬走,本仓零副本)。规则一条:URL 里的凭据 = 日志脱敏器已经在用的那个定义 ——
|
|
7
|
+
* userinfo(只有用户名也算),或 query / fragment 里名字整名在凭据名表上的参数(名字按收方的读法读:`URLSearchParams` 解一次码,ASCII 大小写不敏感);答首个命中,值从不进答案。
|
|
8
|
+
* 契约包只判「有没有」:**拒体的形**(HTTP 码、字段坐标、出路句)是座位自己的铸点 —— 本模块就是这一处,下面的导出之外没有第二处。
|
|
9
|
+
*
|
|
10
|
+
* ## 座位(同读包根的判官;座位只决定读哪个值、坐标怎么写、凭据改走哪个已封签的位)
|
|
11
|
+
* · 请求面 MCP `transport.url`(`task-mcp.ts` 条目判官表):读器只判 `http(s)://` 前缀,解析不了的 url 由拨号期失败答(fetch 对带 userinfo 的 URL 本就构造即抛);
|
|
12
|
+
* · 请求面 A2A 对端 `url` / `cardUrl`(`task-a2a.ts` 的条目判官表 `assertRequestA2aEntries`,fresh 腿):`url` / `cardUrl` 先判是 http(s) 串、再问判官;超过 32 条的列表整份 400(判官看过每一条,或这份体不收);
|
|
13
|
+
* · 请求面图片 `images[i].url`(`request-image-urls.ts` 的 `assertRequestImageUrls`,fresh 腿):`{ url }` 臂的串值;没有封签的头位,出路是图片字节走内联 `{ data, mimeType }`;
|
|
14
|
+
* · 请求面 http 钩子 `url`(`hooks/hook-runner.ts` 的 `hooksUrlCredentialIssue`,`admission.ts` 的 settings 子树门):按配置序扫读者交回的配置;
|
|
15
|
+
* · 请求面搜索后端 `endpoint`(`plugins/web-search.ts` 的 `judgeFreshRequestWebSearch`,fresh 提交门):载体之间有差 —— 部署 env 与续跑重放读法只因 userinfo 拒(`findUrlUserinfo`),凭据名参数只在 fresh 门拒;
|
|
16
|
+
* · `SANDBOX_PKG_SOURCE=custom` 的六只地址(`sandbox-pkg-source.ts` 唯一读口):不是层级式 http(s) / 含反斜杠 ⇒ 起服拒(读者是包管理器,不是 WHATWG);拒句走 `url-refusal.ts` 的另一只铸点(值只回显 origin)。
|
|
17
|
+
* 请求面五类座位的拒是同一个形:`400 request.field_invalid` + 体顶层 `field`(体内全坐标)/ `reason`(判官的拒因闭集两词),机读位、原因句骨架与整句只在本模块的铸点
|
|
18
|
+
* ({@link urlCredentialFacts} / {@link urlCredentialRefusalReason} / {@link buildRequestUrlCredentialRefusal})。
|
|
19
|
+
*
|
|
20
|
+
* ## 为什么拒、而不是封或剥
|
|
21
|
+
* 条目有凭据座位的地方(MCP 的 `transport.headers` 是停驻封签位之一),凭据只走那个座:URL 照原样进停驻上下文、日志与读面,封签闭集刻意不收 URL 一类自由文本。
|
|
22
|
+
* 剥掉 / 改写 = 交引擎的不是申报的那一份;半封一只 URL = 封签规则多一种半值封法。受理口拒,拒句点名座位。
|
|
23
|
+
*/
|
|
24
|
+
import { type UrlCredential, type UrlCredentialReason } from "@sema-agent/settings-schema";
|
|
25
|
+
/** 拒体上的机读位(加性键:直接当 `request.field_invalid` 的附加键用)。 */
|
|
26
|
+
export type UrlCredentialFacts = {
|
|
27
|
+
readonly field: string;
|
|
28
|
+
readonly reason: UrlCredentialReason;
|
|
29
|
+
};
|
|
30
|
+
/** 机读位的唯一铸点:`field` 是座位给的体内全坐标,`reason` 是判官的拒因词(不另造)。 */
|
|
31
|
+
export declare function urlCredentialFacts(field: string, credential: UrlCredential): UrlCredentialFacts;
|
|
32
|
+
/**
|
|
33
|
+
* 出路句(停驻封签的位是请求头):凭据改写进这一条的 `headers`(停驻任务的续跑上下文里只以封签存在)。MCP `transport.headers` · A2A 对端 `headers` ·
|
|
34
|
+
* http 钩子条目 `headers` 三座同一句骨架,`place` 是那一条的 `headers` 在请求体里的坐标。
|
|
35
|
+
*/
|
|
36
|
+
export declare function urlCredentialHeaderExit(place: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* 原因句骨架(各座同一句,值不回显):规则句 + 「URL 原样存」的事实 + 出路。`exit` 是座位给的出路句(`urlCredentialHeaderExit` 或座位自己的)。
|
|
39
|
+
* 为什么说「原样存」:封签闭集刻意不收 URL 一类自由文本,所以 URL 照原样进停驻上下文、日志与读面 —— 凭据只许走为它设的座。
|
|
40
|
+
*/
|
|
41
|
+
export declare function urlCredentialRefusalReason(credential: UrlCredential, exit: string): string;
|
|
42
|
+
/** 一处请求面拒的整句 + 机读位({@link buildRequestUrlCredentialRefusal} 的产物)。 */
|
|
43
|
+
export interface UrlCredentialRefusal {
|
|
44
|
+
readonly message: string;
|
|
45
|
+
readonly facts: UrlCredentialFacts;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* 请求面 URL 座位的拒(整句 + 机读位),`<field>[ (<subject>)] <原因句>`。`subject` 是座位给的条目指认(MCP 的 server 名 / A2A 的 peer 名;坐标本身唯一的座位不带)。
|
|
49
|
+
* MCP 与 A2A 两座的整句要接条目判官表的统一句尾(`request-declaration-refusal.ts`),所以它们取 {@link urlCredentialRefusalReason} + {@link urlCredentialFacts},另几座(http 钩子 / 搜索后端 / 图片)走这一只。
|
|
50
|
+
*/
|
|
51
|
+
export declare function buildRequestUrlCredentialRefusal(field: string, credential: UrlCredential, exit: string, subject?: string): UrlCredentialRefusal;
|
|
52
|
+
//# sourceMappingURL=url-credential-refusal.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { urlCredentialRule } from "@sema-agent/settings-schema";
|
|
2
|
+
export function urlCredentialFacts(field, credential) {
|
|
3
|
+
return { field, reason: credential.reason };
|
|
4
|
+
}
|
|
5
|
+
export function urlCredentialHeaderExit(place) {
|
|
6
|
+
return `${place} is stored sealed: send the credential as a header in ${place} (for example "Authorization": "Bearer …")`;
|
|
7
|
+
}
|
|
8
|
+
export function urlCredentialRefusalReason(credential, exit) {
|
|
9
|
+
return `${urlCredentialRule(credential)} — the URL is kept as written (a parked task's resume context, logs), while ${exit}`;
|
|
10
|
+
}
|
|
11
|
+
export function buildRequestUrlCredentialRefusal(field, credential, exit, subject) {
|
|
12
|
+
return { message: `${field}${subject === undefined ? "" : ` (${subject})`} ${urlCredentialRefusalReason(credential, exit)}`, facts: urlCredentialFacts(field, credential) };
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=url-credential-refusal.js.map
|
package/dist/url-refusal.d.ts
CHANGED
|
@@ -14,11 +14,10 @@
|
|
|
14
14
|
* ## 读者
|
|
15
15
|
* 中心基址三席 + 公告地址 + 请求期 `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
|
-
* `A2A_SERVE_URL`(禁 userinfo)· `SANDBOX_PKG_SOURCE=custom` 六只地址(形 +
|
|
17
|
+
* `A2A_SERVE_URL`(禁 userinfo)· `SANDBOX_PKG_SOURCE=custom` 六只地址(形 + 带凭据,后者的判官是契约包根的 `findUrlCredential`,拒句经 {@link buildUrlCredentialRefusal})。
|
|
18
18
|
* 「scheme 只有判官与展示铸点读」由 `test/config-url-display-safe.test.ts` 的读者普查门钉住。
|
|
19
19
|
*/
|
|
20
|
-
import { type HttpUrlFlaw } from "@sema-agent/settings-schema";
|
|
21
|
-
import { type UrlCredential } from "./url-credential.js";
|
|
20
|
+
import { type HttpUrlFlaw, type UrlCredential } from "@sema-agent/settings-schema";
|
|
22
21
|
/**
|
|
23
22
|
* 拒句里值的样子(纯函数):合格的 http(s) 形 ⇒ 只到 origin(`scheme://host[:port]`,过展示铸点),origin 之后还有东西(userinfo /
|
|
24
23
|
* 路径 / query / fragment)⇒ 接一枚 `/…`;其余(不透明 / 不可解析 / 层级式非 http(s))⇒ 展示铸点的占位 `«redacted:url»` ——
|
|
@@ -29,11 +28,21 @@ import { type UrlCredential } from "./url-credential.js";
|
|
|
29
28
|
* 这几处不赌形状律的覆盖面:座位名 + 规则词已经说清了哪一席错在哪,值只需要认得出是哪一台主机。
|
|
30
29
|
*/
|
|
31
30
|
export declare function buildRefusalShownUrl(raw: string): string;
|
|
31
|
+
/**
|
|
32
|
+
* **自由文本里每一条嵌着的 http(s) URL 换成它的展示形**({@link buildRefusalShownUrl}:`scheme://host[:port]`,origin 之后还有东西接 `/…`;读法不唯一 / 读不出的串给展示铸点的占位),
|
|
33
|
+
* 句子其余部分逐字不动。用在宿主不控制句子的日志面 —— 引擎把「拨不通的 A2A 对端 / MCP 服务器」连同被拨的 URL 拼成一句交来(`onError`),宿主手里没有那条 URL 的结构化值,
|
|
34
|
+
* 只能在文本上换。展示形的铸点仍只有 {@link buildRefusalShownUrl} 一只(userinfo / 路径 / query / fragment 一个字节不进,不赌形状律认得出的令牌形);本函数只负责「找到文本里的 URL」。
|
|
35
|
+
* 非 http(s) 的 scheme 不在射程(这两座的 URL 读器只收 http(s))。纯函数。
|
|
36
|
+
*
|
|
37
|
+
* 已知的界(不是兜底):URL 串里含**裸空白**的(userinfo 里写了空格)在第一个空白处被截 —— 余下的尾巴留在句里。那一形是调用方在受理口就被拒的(userinfo 一律 400),
|
|
38
|
+
* 到不了这里的只有存量停驻体 / 部署基线;引擎的警告句对该形也是把 URL 原样拼进去,没有结构化值可救。
|
|
39
|
+
*/
|
|
40
|
+
export declare function buildShownUrlsInText(text: string): string;
|
|
32
41
|
/**
|
|
33
42
|
* 拒句的**唯一**铸点:`<subject> <规则句>[; <规则句>…]; got "<值的样子>"`(`build*` = 纯数据)。
|
|
34
43
|
* 值只经 {@link buildRefusalShownUrl} 出现;`flaws` 来自 settings-schema 的 `httpUrlFlaws`(调用方按首个拒因选自己的码与出路句)。
|
|
35
44
|
*/
|
|
36
45
|
export declare function buildHttpUrlRefusal(subject: string, raw: string, flaws: readonly HttpUrlFlaw[]): string;
|
|
37
|
-
/** 「带凭据」那一形的拒句([ref];判官
|
|
46
|
+
/** 「带凭据」那一形的拒句([ref];判官 = 契约包根的 `findUrlCredential`):同一只铸点形,规则句换成凭据判官的那一句。 */
|
|
38
47
|
export declare function buildUrlCredentialRefusal(subject: string, raw: string, credential: UrlCredential): string;
|
|
39
48
|
//# sourceMappingURL=url-refusal.d.ts.map
|
package/dist/url-refusal.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { httpUrlRule, isHierarchicalUrl } from "@sema-agent/settings-schema";
|
|
1
|
+
import { httpUrlRule, isHierarchicalUrl, urlCredentialRule } from "@sema-agent/settings-schema";
|
|
2
2
|
import { DISPLAY_SAFE_URL_TOKEN, buildDisplaySafeUrl } from "./trace/redact.js";
|
|
3
|
-
import { urlCredentialRule } from "./url-credential.js";
|
|
4
3
|
export function buildRefusalShownUrl(raw) {
|
|
5
4
|
if (!isHierarchicalUrl(raw))
|
|
6
5
|
return DISPLAY_SAFE_URL_TOKEN;
|
|
@@ -12,6 +11,13 @@ export function buildRefusalShownUrl(raw) {
|
|
|
12
11
|
const origin = `${u.protocol}//${u.host}`;
|
|
13
12
|
return `${buildDisplaySafeUrl(origin)}${u.href === `${origin}/` ? "" : "/…"}`;
|
|
14
13
|
}
|
|
14
|
+
const EMBEDDED_HTTP_URL = /https?:\/\/[^\s"'`<>()[\]{}]+/gi;
|
|
15
|
+
export function buildShownUrlsInText(text) {
|
|
16
|
+
return text.replace(EMBEDDED_HTTP_URL, (token) => {
|
|
17
|
+
const trail = /[.,;:!?]+$/.exec(token)?.[0] ?? "";
|
|
18
|
+
return buildRefusalShownUrl(trail === "" ? token : token.slice(0, -trail.length)) + trail;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
15
21
|
export function buildHttpUrlRefusal(subject, raw, flaws) {
|
|
16
22
|
return composeUrlRefusal(subject, raw, flaws.map(httpUrlRule));
|
|
17
23
|
}
|
|
@@ -63,6 +63,33 @@ export interface WorkspaceSpacePolicy {
|
|
|
63
63
|
export interface WorkspaceSyncCapability extends WorkspaceSpacePolicy {
|
|
64
64
|
timeoutMs: number;
|
|
65
65
|
}
|
|
66
|
+
/** `WORKSPACE_SNAPSHOT_PREFIX` unset ⇒ this prefix (the first segment of every snapshot object key of both lanes). */
|
|
67
|
+
export declare const WORKSPACE_SNAPSHOT_PREFIX_DEFAULT = "kata";
|
|
68
|
+
/**
|
|
69
|
+
* The ONE form of a snapshot-key segment — the partition (incarnation / session id), the snapshot id, the object name and each segment of
|
|
70
|
+
* the key prefix all pass it before a key is signed: it starts with a letter or digit, then letters, digits, `.`, `_`, `-`. No `/`, no `..`,
|
|
71
|
+
* no empty segment, no character a key could be rewritten or traversed by.
|
|
72
|
+
*/
|
|
73
|
+
export declare const SNAPSHOT_KEY_SEGMENT: RegExp;
|
|
74
|
+
/** The refusal code of a `WORKSPACE_SNAPSHOT_PREFIX` outside the closed form (the `config.*` family; fatal-exit prints it). */
|
|
75
|
+
export declare const WORKSPACE_SNAPSHOT_PREFIX_INVALID = "config.workspace_snapshot_prefix_invalid";
|
|
76
|
+
/**
|
|
77
|
+
* Why a snapshot key prefix is outside the closed form (`undefined` = inside): a prefix is a `/`-separated path of {@link SNAPSHOT_KEY_SEGMENT}s —
|
|
78
|
+
* one segment (`kata`, the form every release has accepted) or several (`libA/ws`, so one bucket can be partitioned by owner). Answers the
|
|
79
|
+
* first bad segment (1-based) and why. The ONE judge: the config loader refuses boot with it, the adapter refuses to sign a key with it.
|
|
80
|
+
*/
|
|
81
|
+
export declare function snapshotKeyPrefixProblem(prefix: string): {
|
|
82
|
+
readonly segment: number;
|
|
83
|
+
readonly of: number;
|
|
84
|
+
readonly value: string;
|
|
85
|
+
readonly why: string;
|
|
86
|
+
} | undefined;
|
|
87
|
+
/**
|
|
88
|
+
* `WORKSPACE_SNAPSHOT_PREFIX` — the key prefix of both lanes' snapshot objects (`<prefix>/<incarnation>/space/…`, `<prefix>/<sessionId>/…`): a
|
|
89
|
+
* `/`-separated path of plain segments, one or more (`kata`, `libA/ws`). Unset / empty ⇒ `undefined` (the adapter's default
|
|
90
|
+
* {@link WORKSPACE_SNAPSHOT_PREFIX_DEFAULT} holds). A bad value refuses boot naming the first bad segment — the value is a path, never a secret, so it is echoed.
|
|
91
|
+
*/
|
|
92
|
+
export declare function parseWorkspaceSnapshotPrefix(raw: string | undefined): string | undefined;
|
|
66
93
|
/** The refusal code of a `WORKSPACE_SNAPSHOT_EXCLUDE` item outside the closed form (the `config.*` family; fatal-exit prints it). */
|
|
67
94
|
export declare const WORKSPACE_SNAPSHOT_EXCLUDE_INVALID = "config.workspace_snapshot_exclude_invalid";
|
|
68
95
|
/**
|
package/dist/workspace-space.js
CHANGED
|
@@ -9,6 +9,32 @@ export const WORKSPACE_SNAPSHOT_TIMEOUT_MS_RANGE = { min: 30_000, max: 3_600_000
|
|
|
9
9
|
export function workspaceSnapshotTimeoutOf(lane) {
|
|
10
10
|
return lane.workspaceSnapshotTimeoutMs ?? WORKSPACE_SNAPSHOT_TIMEOUT_MS_DEFAULT;
|
|
11
11
|
}
|
|
12
|
+
export const WORKSPACE_SNAPSHOT_PREFIX_DEFAULT = "kata";
|
|
13
|
+
export const SNAPSHOT_KEY_SEGMENT = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
14
|
+
export const WORKSPACE_SNAPSHOT_PREFIX_INVALID = "config.workspace_snapshot_prefix_invalid";
|
|
15
|
+
export function snapshotKeyPrefixProblem(prefix) {
|
|
16
|
+
const segments = prefix.split("/");
|
|
17
|
+
for (const [i, value] of segments.entries()) {
|
|
18
|
+
if (SNAPSHOT_KEY_SEGMENT.test(value))
|
|
19
|
+
continue;
|
|
20
|
+
const why = value === ""
|
|
21
|
+
? "empty (a leading, trailing or doubled /)"
|
|
22
|
+
: value === "." || value === ".."
|
|
23
|
+
? "a . / .. segment (it would walk out of its own prefix)"
|
|
24
|
+
: "not a plain key segment (it must start with a letter or digit and hold only letters, digits, . _ -)";
|
|
25
|
+
return { segment: i + 1, of: segments.length, value, why };
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
export function parseWorkspaceSnapshotPrefix(raw) {
|
|
30
|
+
if (raw === undefined || raw === "")
|
|
31
|
+
return undefined;
|
|
32
|
+
const bad = snapshotKeyPrefixProblem(raw);
|
|
33
|
+
if (bad === undefined)
|
|
34
|
+
return raw;
|
|
35
|
+
throw Object.assign(new Error(`env WORKSPACE_SNAPSHOT_PREFIX: segment #${bad.segment} of ${bad.of} (${JSON.stringify(bad.value)}) is ${bad.why} — the prefix is a "/"-separated path of plain key segments ` +
|
|
36
|
+
"(each starts with a letter or digit, then letters, digits, . _ -; e.g. WORKSPACE_SNAPSHOT_PREFIX=kata or libA/ws); refusing to start rather than sign snapshot keys under a prefix that does not say what it means"), { code: WORKSPACE_SNAPSHOT_PREFIX_INVALID });
|
|
37
|
+
}
|
|
12
38
|
export const WORKSPACE_SNAPSHOT_EXCLUDE_INVALID = "config.workspace_snapshot_exclude_invalid";
|
|
13
39
|
export function parseWorkspaceSnapshotExclude(raw) {
|
|
14
40
|
if (raw === undefined || raw.trim() === "")
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sema-agent/server",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.136.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",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"scripts/drain-check.pg.sql",
|
|
38
38
|
"deploy/sema-up",
|
|
39
39
|
"docs/DEVICE-EXECUTOR-PROTOCOL.md",
|
|
40
|
+
"wire-changes/",
|
|
40
41
|
"USAGE.md",
|
|
41
42
|
"MIGRATION.md"
|
|
42
43
|
],
|
|
@@ -69,7 +70,7 @@
|
|
|
69
70
|
},
|
|
70
71
|
"dependencies": {
|
|
71
72
|
"@sema-agent/core": "7.55.0",
|
|
72
|
-
"@sema-agent/settings-schema": "14.
|
|
73
|
+
"@sema-agent/settings-schema": "14.5.0",
|
|
73
74
|
"e2b": "^2.28.0",
|
|
74
75
|
"libsodium-wrappers": "^0.8.4",
|
|
75
76
|
"mysql2": "^3.22.4",
|