@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.
Files changed (185) hide show
  1. package/MIGRATION.md +64 -2
  2. package/USAGE.md +62 -25
  3. package/deploy/sema-up/README.md +1 -1
  4. package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
  5. package/deploy/sema-up/chart/values.yaml +1 -1
  6. package/dist/approval-card.d.ts +60 -4
  7. package/dist/approval-card.js +18 -1
  8. package/dist/approval-content-kind.d.ts +1 -0
  9. package/dist/approval-content-kind.js +1 -1
  10. package/dist/auth-bridge.d.ts +34 -5
  11. package/dist/auth-bridge.js +20 -3
  12. package/dist/boot/budget-tracing.d.ts +1 -2
  13. package/dist/boot/budget-tracing.js +2 -2
  14. package/dist/boot/org-memory.js +1 -1
  15. package/dist/boot/resolve-spec.js +10 -7
  16. package/dist/boot/runner-deps.js +4 -2
  17. package/dist/boot/stage-04-stores.d.ts +1 -1
  18. package/dist/boot/stage-05-execution-env.d.ts +1 -1
  19. package/dist/boot/stage-06-runners.d.ts +1 -1
  20. package/dist/boot/stage-07-capability-layer.d.ts +1 -1
  21. package/dist/boot/stage-08-reapers.d.ts +1 -1
  22. package/dist/boot/stage-09-leader.d.ts +1 -1
  23. package/dist/boot/stage-10-http-server.d.ts +1 -1
  24. package/dist/boot/stores.js +2 -3
  25. package/dist/boot/web-admin.js +10 -17
  26. package/dist/brain.js +12 -3
  27. package/dist/budget.d.ts +3 -3
  28. package/dist/budget.js +4 -0
  29. package/dist/capabilities/mcp-probe.d.ts +5 -4
  30. package/dist/capability-facts.d.ts +3 -7
  31. package/dist/capability-facts.js +3 -5
  32. package/dist/center-credential.d.ts +18 -4
  33. package/dist/center-credential.js +18 -3
  34. package/dist/config-catalog.js +12 -10
  35. package/dist/config-d-migration.js +1 -1
  36. package/dist/config-invariants.d.ts +1 -1
  37. package/dist/config-invariants.js +8 -0
  38. package/dist/config-lkg.d.ts +0 -38
  39. package/dist/config-lkg.js +1 -83
  40. package/dist/config-types.d.ts +12 -4
  41. package/dist/config.js +26 -8
  42. package/dist/deployment-shape.d.ts +1 -1
  43. package/dist/elicitation.d.ts +8 -7
  44. package/dist/elicitation.js +9 -8
  45. package/dist/file-history-disclosure.d.ts +6 -4
  46. package/dist/file-history-disclosure.js +22 -6
  47. package/dist/fleet-client.d.ts +32 -1
  48. package/dist/fleet-client.js +24 -4
  49. package/dist/fleet-lease.d.ts +7 -3
  50. package/dist/fleet-lease.js +31 -23
  51. package/dist/hooks/hook-llm.js +14 -8
  52. package/dist/hooks/hook-runner.d.ts +4 -4
  53. package/dist/hooks/hook-runner.js +2 -2
  54. package/dist/http/checkpoint-ctx.d.ts +28 -9
  55. package/dist/http/checkpoint-ctx.js +5 -1
  56. package/dist/http/dispatch.js +9 -9
  57. package/dist/http/resume-ctx-read.d.ts +2 -16
  58. package/dist/http/resume-ctx-read.js +2 -3
  59. package/dist/http/routes/approvals-assistant.d.ts +0 -2
  60. package/dist/http/routes/approvals-assistant.js +47 -12
  61. package/dist/http/routes/runs.js +2 -2
  62. package/dist/http/routes/session-sync.js +31 -9
  63. package/dist/http/routes/sessions.js +18 -14
  64. package/dist/http/submit-ctx.js +1 -1
  65. package/dist/http/wire-types.d.ts +5 -3
  66. package/dist/index.d.ts +1 -0
  67. package/dist/index.js +1 -0
  68. package/dist/model-route-gap.d.ts +49 -4
  69. package/dist/model-route-gap.js +34 -1
  70. package/dist/object-store-buckets.d.ts +13 -0
  71. package/dist/object-store-buckets.js +3 -0
  72. package/dist/observability/fail-open.d.ts +6 -6
  73. package/dist/observability/fail-open.js +6 -6
  74. package/dist/observability/metrics.js +1 -1
  75. package/dist/observability/principal-context.d.ts +4 -1
  76. package/dist/observability/principal-context.js +6 -1
  77. package/dist/parked-decide.d.ts +4 -3
  78. package/dist/parked-decide.js +26 -7
  79. package/dist/peer-directory.d.ts +2 -1
  80. package/dist/peer-directory.js +5 -5
  81. package/dist/plugins/approval-ask-store-sql.d.ts +8 -0
  82. package/dist/plugins/approval-ask-store-sql.js +3 -0
  83. package/dist/plugins/blob-backend.js +2 -1
  84. package/dist/plugins/checkpoint-index-columns.d.ts +50 -1
  85. package/dist/plugins/checkpoint-index-columns.js +28 -0
  86. package/dist/plugins/checkpoint-store-sql.d.ts +27 -3
  87. package/dist/plugins/checkpoint-store-sql.js +58 -29
  88. package/dist/plugins/file-history-store-sql.d.ts +6 -0
  89. package/dist/plugins/file-history-store-sql.js +30 -23
  90. package/dist/plugins/local-checkpoint-store.js +4 -3
  91. package/dist/plugins/one-time-migrations.d.ts +21 -28
  92. package/dist/plugins/one-time-migrations.js +39 -123
  93. package/dist/plugins/remote-env-k8s.d.ts +18 -5
  94. package/dist/plugins/remote-env-k8s.js +24 -7
  95. package/dist/plugins/s3-answer.d.ts +15 -0
  96. package/dist/plugins/s3-answer.js +5 -0
  97. package/dist/plugins/snapshot-bucket-presence.d.ts +39 -4
  98. package/dist/plugins/snapshot-bucket-presence.js +35 -7
  99. package/dist/plugins/sql-errors.d.ts +39 -0
  100. package/dist/plugins/sql-errors.js +49 -1
  101. package/dist/plugins/store-fault.d.ts +4 -0
  102. package/dist/plugins/store-fault.js +8 -0
  103. package/dist/plugins/tidb-pool.js +1 -1
  104. package/dist/plugins/web-search.d.ts +1 -1
  105. package/dist/plugins/web-search.js +2 -2
  106. package/dist/request-declaration-refusal.d.ts +94 -0
  107. package/dist/request-declaration-refusal.js +78 -0
  108. package/dist/request-image-urls.d.ts +6 -0
  109. package/dist/request-image-urls.js +27 -0
  110. package/dist/request-key-closure.d.ts +5 -0
  111. package/dist/request-key-closure.js +4 -1
  112. package/dist/runtime-caps-resolver.js +1 -1
  113. package/dist/sandbox-pkg-source.d.ts +28 -1
  114. package/dist/sandbox-pkg-source.js +1 -2
  115. package/dist/sealed-key.d.ts +19 -0
  116. package/dist/sealed-key.js +47 -4
  117. package/dist/session-incarnation.d.ts +16 -5
  118. package/dist/session-incarnation.js +7 -4
  119. package/dist/session-row.d.ts +3 -17
  120. package/dist/session-row.js +4 -0
  121. package/dist/session-sync.d.ts +15 -3
  122. package/dist/session-sync.js +5 -2
  123. package/dist/task-a2a.d.ts +52 -81
  124. package/dist/task-a2a.js +219 -89
  125. package/dist/task-mcp.d.ts +6 -14
  126. package/dist/task-mcp.js +16 -51
  127. package/dist/tool-approval.d.ts +23 -10
  128. package/dist/tool-approval.js +51 -36
  129. package/dist/trace/core-keyset-guard.d.ts +2 -2
  130. package/dist/trace/exit-seat.js +37 -13
  131. package/dist/trace/redact.d.ts +28 -12
  132. package/dist/trace/redact.js +233 -94
  133. package/dist/trace/self-minted-wire.d.ts +267 -0
  134. package/dist/trace/self-minted-wire.js +79 -0
  135. package/dist/url-credential-refusal.d.ts +52 -0
  136. package/dist/url-credential-refusal.js +14 -0
  137. package/dist/url-refusal.d.ts +13 -4
  138. package/dist/url-refusal.js +8 -2
  139. package/dist/workspace-space.d.ts +27 -0
  140. package/dist/workspace-space.js +26 -0
  141. package/package.json +3 -2
  142. package/scripts/drain-check-local.mjs +2 -1
  143. package/scripts/drain-check.mysql.sql +3 -1
  144. package/scripts/drain-check.pg.sql +3 -1
  145. package/skills/schedule.md +1 -1
  146. package/wire-changes/server@7.104.0.json +134 -0
  147. package/wire-changes/server@7.105.0.json +53 -0
  148. package/wire-changes/server@7.106.0.json +475 -0
  149. package/wire-changes/server@7.107.0.json +64 -0
  150. package/wire-changes/server@7.108.0.json +153 -0
  151. package/wire-changes/server@7.109.0.json +46 -0
  152. package/wire-changes/server@7.110.0.json +90 -0
  153. package/wire-changes/server@7.111.0.json +86 -0
  154. package/wire-changes/server@7.112.0.json +60 -0
  155. package/wire-changes/server@7.113.0.json +26 -0
  156. package/wire-changes/server@7.114.0.json +26 -0
  157. package/wire-changes/server@7.115.0.json +97 -0
  158. package/wire-changes/server@7.116.0.json +218 -0
  159. package/wire-changes/server@7.116.1.json +26 -0
  160. package/wire-changes/server@7.117.0.json +65 -0
  161. package/wire-changes/server@7.118.0.json +129 -0
  162. package/wire-changes/server@7.119.0.json +65 -0
  163. package/wire-changes/server@7.120.0.json +89 -0
  164. package/wire-changes/server@7.121.0.json +219 -0
  165. package/wire-changes/server@7.122.0.json +54 -0
  166. package/wire-changes/server@7.123.0.json +26 -0
  167. package/wire-changes/server@7.124.0.json +336 -0
  168. package/wire-changes/server@7.124.1.json +26 -0
  169. package/wire-changes/server@7.125.0.json +111 -0
  170. package/wire-changes/server@7.126.0.json +285 -0
  171. package/wire-changes/server@7.127.0.json +77 -0
  172. package/wire-changes/server@7.127.1.json +26 -0
  173. package/wire-changes/server@7.127.2.json +53 -0
  174. package/wire-changes/server@7.128.0.json +26 -0
  175. package/wire-changes/server@7.129.0.json +106 -0
  176. package/wire-changes/server@7.129.1.json +26 -0
  177. package/wire-changes/server@7.130.0.json +26 -0
  178. package/wire-changes/server@7.131.0.json +118 -0
  179. package/wire-changes/server@7.132.0.json +226 -0
  180. package/wire-changes/server@7.133.0.json +1155 -0
  181. package/wire-changes/server@7.134.0.json +107 -0
  182. package/wire-changes/server@7.135.0.json +174 -0
  183. package/wire-changes/server@7.136.0.json +448 -0
  184. package/dist/url-credential.d.ts +0 -52
  185. package/dist/url-credential.js +0 -49
@@ -0,0 +1,448 @@
1
+ {
2
+ "repo": "server",
3
+ "version": "7.136.0",
4
+ "from": "v7.135.0",
5
+ "fromCommit": "e1ea5bd2c52cc6359ca0318bb1f6545592e8b7f5",
6
+ "to": "v7.136.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
+ ],
19
+ "added": [
20
+ {
21
+ "id": "A1",
22
+ "source": "selfMinted.approvalQueuePendingKey",
23
+ "member": "boundGrantDigest",
24
+ "text": "自铸 GET /v1/approvals pending[] 行 · GET /v1/approvals/stream pending 帧(停驻技能卡的批准绑定三位;与助手收件箱行同一只投影) 新增 `boundGrantDigest`(属性 present-iff;since 7.136.0 = 本版新上 wire)"
25
+ },
26
+ {
27
+ "id": "A2",
28
+ "source": "selfMinted.approvalQueuePendingKey",
29
+ "member": "boundGrants",
30
+ "text": "自铸 GET /v1/approvals pending[] 行 · GET /v1/approvals/stream pending 帧(停驻技能卡的批准绑定三位;与助手收件箱行同一只投影) 新增 `boundGrants`(属性 present-iff;since 7.136.0 = 本版新上 wire)"
31
+ },
32
+ {
33
+ "id": "A3",
34
+ "source": "selfMinted.approvalQueuePendingKey",
35
+ "member": "classifierNoRuling",
36
+ "text": "自铸 GET /v1/approvals pending[] 行 · GET /v1/approvals/stream pending 帧(停驻技能卡的批准绑定三位;与助手收件箱行同一只投影) 新增 `classifierNoRuling`(属性 present-iff;since 7.136.0 = 本版新上 wire)"
37
+ },
38
+ {
39
+ "id": "A4",
40
+ "source": "selfMinted.approvalRequestCardKey",
41
+ "member": "approvalCard",
42
+ "text": "自铸 approval_request 帧 card.<键>(活铸帧的 card · 落库的卡信封 card_json · 断连重放帧的 card) 新增 `approvalCard`(属性 present-iff;since 7.136.0 = 本版新上 wire)"
43
+ },
44
+ {
45
+ "id": "A5",
46
+ "source": "selfMinted.configCatalogRow",
47
+ "member": "SEALED_KEY_DIR",
48
+ "text": "自铸 GET /v1/config/catalog rows[](<行名> → 域;只登本版新增的行) 新增 `SEALED_KEY_DIR`(属性 store;since 7.136.0 = 本版新上 wire)"
49
+ },
50
+ {
51
+ "id": "A6",
52
+ "source": "selfMinted.endpointFaceStatus",
53
+ "member": "ALL authenticated routes#bearer_token_without_scope_claim(鉴权桥验证腿;配了 service 凭据或多租 REQUIRE_PRINCIPAL 的部署;体通用 auth.unauthorized)",
54
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `ALL authenticated routes#bearer_token_without_scope_claim(鉴权桥验证腿;配了 service 凭据或多租 REQUIRE_PRINCIPAL 的部署;体通用 auth.unauthorized)`(属性 401;since 7.136.0 = 本版新上 wire)"
55
+ },
56
+ {
57
+ "id": "A7",
58
+ "source": "selfMinted.endpointFaceStatus",
59
+ "member": "GET /v1/sessions/:id/events#corrupt_archive(DB_BACKEND=local;开流之前;体 corrupt_session)",
60
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `GET /v1/sessions/:id/events#corrupt_archive(DB_BACKEND=local;开流之前;体 corrupt_session)`(属性 500;since 7.136.0 = 本版新上 wire)"
61
+ },
62
+ {
63
+ "id": "A8",
64
+ "source": "selfMinted.endpointFaceStatus",
65
+ "member": "GET /v1/sessions/:id/sync/entries#store_connection_fault(应答头发出之前;体同上)",
66
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `GET /v1/sessions/:id/sync/entries#store_connection_fault(应答头发出之前;体同上)`(属性 503;since 7.136.0 = 本版新上 wire)"
67
+ },
68
+ {
69
+ "id": "A9",
70
+ "source": "selfMinted.endpointFaceStatus",
71
+ "member": "GET /v1/sessions/:id/sync/history/blobs/:hash#store_connection_fault(体同上)",
72
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `GET /v1/sessions/:id/sync/history/blobs/:hash#store_connection_fault(体同上)`(属性 503;since 7.136.0 = 本版新上 wire)"
73
+ },
74
+ {
75
+ "id": "A10",
76
+ "source": "selfMinted.endpointFaceStatus",
77
+ "member": "GET /v1/sessions/:id/sync/manifest#store_connection_fault(体 state.file_history_unreadable + permanence: transient)",
78
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `GET /v1/sessions/:id/sync/manifest#store_connection_fault(体 state.file_history_unreadable + permanence: transient)`(属性 503;since 7.136.0 = 本版新上 wire)"
79
+ },
80
+ {
81
+ "id": "A11",
82
+ "source": "selfMinted.endpointFaceStatus",
83
+ "member": "GET /v1/tool-approvals/:id#previous_owner_after_adoption(收编之后的前属主;按问读口)",
84
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `GET /v1/tool-approvals/:id#previous_owner_after_adoption(收编之后的前属主;按问读口)`(属性 404;since 7.136.0 = 本版新上 wire)"
85
+ },
86
+ {
87
+ "id": "A12",
88
+ "source": "selfMinted.endpointFaceStatus",
89
+ "member": "PATCH /v1/sessions/:id#corrupt_archive(DB_BACKEND=local;体 corrupt_session)",
90
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `PATCH /v1/sessions/:id#corrupt_archive(DB_BACKEND=local;体 corrupt_session)`(属性 500;since 7.136.0 = 本版新上 wire)"
91
+ },
92
+ {
93
+ "id": "A13",
94
+ "source": "selfMinted.endpointFaceStatus",
95
+ "member": "PATCH /v1/sessions/:id#title_no_visible_character(体 request.field_invalid)",
96
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `PATCH /v1/sessions/:id#title_no_visible_character(体 request.field_invalid)`(属性 400;since 7.136.0 = 本版新上 wire)"
97
+ },
98
+ {
99
+ "id": "A14",
100
+ "source": "selfMinted.endpointFaceStatus",
101
+ "member": "POST /v1/approvals/:sessionId/decide#deny(复活不了的停驻行:无 agent 名 / 无根会话锚;体 { taskId, status: failed, decision: deny })",
102
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/approvals/:sessionId/decide#deny(复活不了的停驻行:无 agent 名 / 无根会话锚;体 { taskId, status: failed, decision: deny })`(属性 200;since 7.136.0 = 本版新上 wire)"
103
+ },
104
+ {
105
+ "id": "A15",
106
+ "source": "selfMinted.endpointFaceStatus",
107
+ "member": "POST /v1/sessions/:id/sync/import#identical_repush_blob_missing(体 missing_blob)",
108
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/sessions/:id/sync/import#identical_repush_blob_missing(体 missing_blob)`(属性 422;since 7.136.0 = 本版新上 wire)"
109
+ },
110
+ {
111
+ "id": "A16",
112
+ "source": "selfMinted.endpointFaceStatus",
113
+ "member": "POST /v1/sessions/:id/sync/import#title_no_visible_character(Phase A 体的 title;体 request.field_invalid)",
114
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/sessions/:id/sync/import#title_no_visible_character(Phase A 体的 title;体 request.field_invalid)`(属性 400;since 7.136.0 = 本版新上 wire)"
115
+ },
116
+ {
117
+ "id": "A17",
118
+ "source": "selfMinted.endpointFaceStatus",
119
+ "member": "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 自述))",
120
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `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 自述))`(属性 409;since 7.136.0 = 本版新上 wire)"
121
+ },
122
+ {
123
+ "id": "A18",
124
+ "source": "selfMinted.endpointFaceStatus",
125
+ "member": "POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_malformed(新提交;列表不是数组 / 条目不是对象 / 键值判不出形;体 request.field_invalid)",
126
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_malformed(新提交;列表不是数组 / 条目不是对象 / 键值判不出形;体 request.field_invalid)`(属性 400;since 7.136.0 = 本版新上 wire)"
127
+ },
128
+ {
129
+ "id": "A19",
130
+ "source": "selfMinted.endpointFaceStatus",
131
+ "member": "POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_unknown_key(新提交;词表外的键;体 request.body_shape + unknownKeys)",
132
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_unknown_key(新提交;词表外的键;体 request.body_shape + unknownKeys)`(属性 400;since 7.136.0 = 本版新上 wire)"
133
+ },
134
+ {
135
+ "id": "A20",
136
+ "source": "selfMinted.endpointFaceStatus",
137
+ "member": "POST /v1/tasks|/v1/tasks/stream|/v1/runs#images_url_credential(新提交;体 request.field_invalid + field images[i].url + reason url_userinfo|url_credential_param)",
138
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/tasks|/v1/tasks/stream|/v1/runs#images_url_credential(新提交;体 request.field_invalid + field images[i].url + reason url_userinfo|url_credential_param)`(属性 400;since 7.136.0 = 本版新上 wire)"
139
+ },
140
+ {
141
+ "id": "A21",
142
+ "source": "selfMinted.endpointFaceStatus",
143
+ "member": "POST /v1/tool-approvals/:id/respond#edited_rule_text_refused_after_adoption(匿名活卡收编给具名主体后新属主交坏规则文本;体 request.body_shape;契约成文的判据,今天经 /v1/adoption 到不了)",
144
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/tool-approvals/:id/respond#edited_rule_text_refused_after_adoption(匿名活卡收编给具名主体后新属主交坏规则文本;体 request.body_shape;契约成文的判据,今天经 /v1/adoption 到不了)`(属性 400;since 7.136.0 = 本版新上 wire)"
145
+ },
146
+ {
147
+ "id": "A22",
148
+ "source": "selfMinted.endpointFaceStatus",
149
+ "member": "POST /v1/tool-approvals/:id/respond#new_owner_after_adoption(收编之后的新属主;本副本上仍有引擎腿在等的活卡,决议交给那条腿)",
150
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/tool-approvals/:id/respond#new_owner_after_adoption(收编之后的新属主;本副本上仍有引擎腿在等的活卡,决议交给那条腿)`(属性 200;since 7.136.0 = 本版新上 wire)"
151
+ },
152
+ {
153
+ "id": "A23",
154
+ "source": "selfMinted.refusalSentenceForm",
155
+ "member": "400 request.body_shape#a2aPeers[i].unknown_key",
156
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.body_shape#a2aPeers[i].unknown_key`(属性 body: unrecognized key(s) on an A2A peer declaration — refused rather than dropped …; Accepted per entry: <keys>;since 7.136.0 = 本版新上 wire)"
157
+ },
158
+ {
159
+ "id": "A24",
160
+ "source": "selfMinted.refusalSentenceForm",
161
+ "member": "400 request.field_invalid#a2aPeers.not_array",
162
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.field_invalid#a2aPeers.not_array`(属性 head: a2aPeers is <shape>, not an array of A2A peer declarations;since 7.136.0 = 本版新上 wire)"
163
+ },
164
+ {
165
+ "id": "A25",
166
+ "source": "selfMinted.refusalSentenceForm",
167
+ "member": "400 request.field_invalid#a2aPeers.over_cap",
168
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.field_invalid#a2aPeers.over_cap`(属性 tail: 声明列表拒绝骨架的句尾(与 mcpServers 共用 request-declaration-refusal);since 7.136.0 = 本版新上 wire)"
169
+ },
170
+ {
171
+ "id": "A26",
172
+ "source": "selfMinted.refusalSentenceForm",
173
+ "member": "400 request.field_invalid#a2aPeers[i].<key>.unusable(url / cardUrl 凭据拒之外的键值坏形)",
174
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.field_invalid#a2aPeers[i].<key>.unusable(url / cardUrl 凭据拒之外的键值坏形)`(属性 <field> (peer <name>) is not a usable declaration — <rule> …;since 7.136.0 = 本版新上 wire)"
175
+ },
176
+ {
177
+ "id": "A27",
178
+ "source": "selfMinted.refusalSentenceForm",
179
+ "member": "400 request.field_invalid#a2aPeers[i].not_object",
180
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.field_invalid#a2aPeers[i].not_object`(属性 head: a2aPeers[i] is <shape>, not an A2A peer declaration (an object);since 7.136.0 = 本版新上 wire)"
181
+ },
182
+ {
183
+ "id": "A28",
184
+ "source": "selfMinted.refusalSentenceForm",
185
+ "member": "400 request.field_invalid#a2aPeers[i].url|cardUrl.credential",
186
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.field_invalid#a2aPeers[i].url|cardUrl.credential`(属性 <field> (peer <name>) is not a usable declaration — <rule> …;since 7.136.0 = 本版新上 wire)"
187
+ },
188
+ {
189
+ "id": "A29",
190
+ "source": "selfMinted.refusalSentenceForm",
191
+ "member": "400 request.field_invalid#images[i].url.credential",
192
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.field_invalid#images[i].url.credential`(属性 <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 = 本版新上 wire)"
193
+ },
194
+ {
195
+ "id": "A30",
196
+ "source": "selfMinted.refusalSentenceForm",
197
+ "member": "400 request.field_invalid#mcpServers.over_cap(受理口 · POST /v1/capabilities/mcp/probe 同句)",
198
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.field_invalid#mcpServers.over_cap(受理口 · POST /v1/capabilities/mcp/probe 同句)`(属性 head: <field> has <count> entries — at most <cap> are accepted;since 7.136.0 = 本版新上 wire)"
199
+ },
200
+ {
201
+ "id": "A31",
202
+ "source": "selfMinted.refusalSentenceForm",
203
+ "member": "400 request.field_invalid#title.no_visible_character(PATCH /v1/sessions/:id · 会话同步 2c 导入的 title)",
204
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.field_invalid#title.no_visible_character(PATCH /v1/sessions/:id · 会话同步 2c 导入的 title)`(属性 title must contain at least one visible character;since 7.136.0 = 本版新上 wire)"
205
+ },
206
+ {
207
+ "id": "A32",
208
+ "source": "selfMinted.refusalSentenceForm",
209
+ "member": "409 conflict.checkpoint_ctx_unsealable#resume(续跑上下文读口)",
210
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `409 conflict.checkpoint_ctx_unsealable#resume(续跑上下文读口)`(属性 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 = 本版新上 wire)"
211
+ },
212
+ {
213
+ "id": "A33",
214
+ "source": "selfMinted.refusalSentenceForm",
215
+ "member": "409 conflict.checkpoint_ctx_unsealable#submit(提交面:本服务没有保管店)",
216
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `409 conflict.checkpoint_ctx_unsealable#submit(提交面:本服务没有保管店)`(属性 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 = 本版新上 wire)"
217
+ },
218
+ {
219
+ "id": "A34",
220
+ "source": "selfMinted.refusalSentenceForm",
221
+ "member": "409 decide.row_unrevivable#no_agent_name",
222
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `409 decide.row_unrevivable#no_agent_name`(属性 ends: deny it to close the card (the agent then ends as failed);since 7.136.0 = 本版新上 wire)"
223
+ },
224
+ {
225
+ "id": "A35",
226
+ "source": "selfMinted.refusalSentenceForm",
227
+ "member": "409 decide.row_unrevivable#no_root_anchor",
228
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `409 decide.row_unrevivable#no_root_anchor`(属性 ends: deny it to close the card (the agent then ends as failed);since 7.136.0 = 本版新上 wire)"
229
+ },
230
+ {
231
+ "id": "A36",
232
+ "source": "selfMinted.refusalSentenceForm",
233
+ "member": "503 state.file_history_unreadable#store_connection_fault(会话同步三条拉取读腿)",
234
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `503 state.file_history_unreadable#store_connection_fault(会话同步三条拉取读腿)`(属性 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 = 本版新上 wire)"
235
+ },
236
+ {
237
+ "id": "A37",
238
+ "source": "selfMinted.refusalSentenceForm",
239
+ "member": "connect_failed(run 失败终局)#snapshot_bucket_missing(k8s 车道读 latest 得 404 NoSuchBucket;连沙箱失败,一只 pod 都不建)",
240
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `connect_failed(run 失败终局)#snapshot_bucket_missing(k8s 车道读 latest 得 404 NoSuchBucket;连沙箱失败,一只 pod 都不建)`(属性 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 = 本版新上 wire)"
241
+ },
242
+ {
243
+ "id": "A38",
244
+ "source": "selfMinted.storeFaultPermanence",
245
+ "member": "transient",
246
+ "text": "自铸 文件历史店故障答的体键 permanence(422 adopt_failed · restore_failed 等 · 503 state.file_history_unreadable) 新增 `transient`(属性 present-iff;since 7.136.0 = 本版新上 wire)"
247
+ },
248
+ {
249
+ "id": "A39",
250
+ "source": "selfMinted.wireValueRule",
251
+ "member": "GET /v1/assistant/inbox#objective",
252
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/assistant/inbox#objective`(属性 runRowObjectivePreview;since 7.136.0 = 本版新上 wire)"
253
+ },
254
+ {
255
+ "id": "A40",
256
+ "source": "selfMinted.wireValueRule",
257
+ "member": "GET /v1/config/catalog#rows[ANTHROPIC_API_KEY].semantics",
258
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[ANTHROPIC_API_KEY].semantics`(属性 x-api-key-only;mutually-exclusive;both-set-refuses-boot;since 7.136.0 = 本版新上 wire)"
259
+ },
260
+ {
261
+ "id": "A41",
262
+ "source": "selfMinted.wireValueRule",
263
+ "member": "GET /v1/config/catalog#rows[ANTHROPIC_AUTH_TOKEN].semantics",
264
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[ANTHROPIC_AUTH_TOKEN].semantics`(属性 bearer-only;mutually-exclusive;both-set-refuses-boot;since 7.136.0 = 本版新上 wire)"
265
+ },
266
+ {
267
+ "id": "A42",
268
+ "source": "selfMinted.wireValueRule",
269
+ "member": "GET /v1/config/catalog#rows[MCP_ELICITATION_MAX_CONCURRENT].derivedDefaultNote",
270
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[MCP_ELICITATION_MAX_CONCURRENT].derivedDefaultNote`(属性 default-window-source:server;since 7.136.0 = 本版新上 wire)"
271
+ },
272
+ {
273
+ "id": "A43",
274
+ "source": "selfMinted.wireValueRule",
275
+ "member": "GET /v1/config/catalog#rows[MCP_ELICITATION_MAX_TOTAL].derivedDefaultNote",
276
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[MCP_ELICITATION_MAX_TOTAL].derivedDefaultNote`(属性 default-window-source:server;since 7.136.0 = 本版新上 wire)"
277
+ },
278
+ {
279
+ "id": "A44",
280
+ "source": "selfMinted.wireValueRule",
281
+ "member": "GET /v1/config/catalog#rows[MCP_ELICITATION_MIN_INTERVAL_MS].derivedDefaultNote",
282
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[MCP_ELICITATION_MIN_INTERVAL_MS].derivedDefaultNote`(属性 default-window-source:server;since 7.136.0 = 本版新上 wire)"
283
+ },
284
+ {
285
+ "id": "A45",
286
+ "source": "selfMinted.wireValueRule",
287
+ "member": "GET /v1/config/catalog#rows[MCP_ELICITATION_TTL_MS].derivedDefaultNote",
288
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[MCP_ELICITATION_TTL_MS].derivedDefaultNote`(属性 default-window-source:server;since 7.136.0 = 本版新上 wire)"
289
+ },
290
+ {
291
+ "id": "A46",
292
+ "source": "selfMinted.wireValueRule",
293
+ "member": "GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_BUCKET].semantics",
294
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_BUCKET].semantics`(属性 boot-checks-bucket;runtime-latest-no-such-bucket-fails-run;since 7.136.0 = 本版新上 wire)"
295
+ },
296
+ {
297
+ "id": "A47",
298
+ "source": "selfMinted.wireValueRule",
299
+ "member": "GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_PREFIX].derivedDefaultNote",
300
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_PREFIX].derivedDefaultNote`(属性 absent=>kata;since 7.136.0 = 本版新上 wire)"
301
+ },
302
+ {
303
+ "id": "A48",
304
+ "source": "selfMinted.wireValueRule",
305
+ "member": "GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_PREFIX].semantics",
306
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_PREFIX].semantics`(属性 multi-segment-prefix;bad-segment-refuses-boot;since 7.136.0 = 本版新上 wire)"
307
+ },
308
+ {
309
+ "id": "A49",
310
+ "source": "selfMinted.wireValueRule",
311
+ "member": "SSE elicitation_complete#action(没人应答的释放)",
312
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `SSE elicitation_complete#action(没人应答的释放)`(属性 cancel-not-decline;since 7.136.0 = 本版新上 wire)"
313
+ }
314
+ ],
315
+ "registered": [],
316
+ "removed": [],
317
+ "changed": [],
318
+ "narrowed": [],
319
+ "closedSetMembers": [
320
+ {
321
+ "set": "selfMinted.approvalQueuePendingKey",
322
+ "at": [
323
+ "src/trace/self-minted-wire.ts#approvalQueuePendingKey"
324
+ ],
325
+ "added": [
326
+ "boundGrantDigest",
327
+ "boundGrants",
328
+ "classifierNoRuling"
329
+ ],
330
+ "registered": [],
331
+ "removed": [],
332
+ "breaking": false
333
+ },
334
+ {
335
+ "set": "selfMinted.approvalRequestCardKey",
336
+ "at": [
337
+ "src/trace/self-minted-wire.ts#approvalRequestCardKey"
338
+ ],
339
+ "added": [
340
+ "approvalCard"
341
+ ],
342
+ "registered": [],
343
+ "removed": [],
344
+ "breaking": false
345
+ },
346
+ {
347
+ "set": "selfMinted.configCatalogRow",
348
+ "at": [
349
+ "src/trace/self-minted-wire.ts#configCatalogRow"
350
+ ],
351
+ "added": [
352
+ "SEALED_KEY_DIR"
353
+ ],
354
+ "registered": [],
355
+ "removed": [],
356
+ "breaking": false
357
+ },
358
+ {
359
+ "set": "selfMinted.endpointFaceStatus",
360
+ "at": [
361
+ "src/trace/self-minted-wire.ts#endpointFaceStatus"
362
+ ],
363
+ "added": [
364
+ "ALL authenticated routes#bearer_token_without_scope_claim(鉴权桥验证腿;配了 service 凭据或多租 REQUIRE_PRINCIPAL 的部署;体通用 auth.unauthorized)",
365
+ "GET /v1/sessions/:id/events#corrupt_archive(DB_BACKEND=local;开流之前;体 corrupt_session)",
366
+ "GET /v1/sessions/:id/sync/entries#store_connection_fault(应答头发出之前;体同上)",
367
+ "GET /v1/sessions/:id/sync/history/blobs/:hash#store_connection_fault(体同上)",
368
+ "GET /v1/sessions/:id/sync/manifest#store_connection_fault(体 state.file_history_unreadable + permanence: transient)",
369
+ "GET /v1/tool-approvals/:id#previous_owner_after_adoption(收编之后的前属主;按问读口)",
370
+ "PATCH /v1/sessions/:id#corrupt_archive(DB_BACKEND=local;体 corrupt_session)",
371
+ "PATCH /v1/sessions/:id#title_no_visible_character(体 request.field_invalid)",
372
+ "POST /v1/approvals/:sessionId/decide#deny(复活不了的停驻行:无 agent 名 / 无根会话锚;体 { taskId, status: failed, decision: deny })",
373
+ "POST /v1/sessions/:id/sync/import#identical_repush_blob_missing(体 missing_blob)",
374
+ "POST /v1/sessions/:id/sync/import#title_no_visible_character(Phase A 体的 title;体 request.field_invalid)",
375
+ "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 自述))",
376
+ "POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_malformed(新提交;列表不是数组 / 条目不是对象 / 键值判不出形;体 request.field_invalid)",
377
+ "POST /v1/tasks|/v1/tasks/stream|/v1/runs#a2aPeers_unknown_key(新提交;词表外的键;体 request.body_shape + unknownKeys)",
378
+ "POST /v1/tasks|/v1/tasks/stream|/v1/runs#images_url_credential(新提交;体 request.field_invalid + field images[i].url + reason url_userinfo|url_credential_param)",
379
+ "POST /v1/tool-approvals/:id/respond#edited_rule_text_refused_after_adoption(匿名活卡收编给具名主体后新属主交坏规则文本;体 request.body_shape;契约成文的判据,今天经 /v1/adoption 到不了)",
380
+ "POST /v1/tool-approvals/:id/respond#new_owner_after_adoption(收编之后的新属主;本副本上仍有引擎腿在等的活卡,决议交给那条腿)"
381
+ ],
382
+ "registered": [],
383
+ "removed": [],
384
+ "breaking": false
385
+ },
386
+ {
387
+ "set": "selfMinted.refusalSentenceForm",
388
+ "at": [
389
+ "src/trace/self-minted-wire.ts#refusalSentenceForm"
390
+ ],
391
+ "added": [
392
+ "400 request.body_shape#a2aPeers[i].unknown_key",
393
+ "400 request.field_invalid#a2aPeers.not_array",
394
+ "400 request.field_invalid#a2aPeers.over_cap",
395
+ "400 request.field_invalid#a2aPeers[i].<key>.unusable(url / cardUrl 凭据拒之外的键值坏形)",
396
+ "400 request.field_invalid#a2aPeers[i].not_object",
397
+ "400 request.field_invalid#a2aPeers[i].url|cardUrl.credential",
398
+ "400 request.field_invalid#images[i].url.credential",
399
+ "400 request.field_invalid#mcpServers.over_cap(受理口 · POST /v1/capabilities/mcp/probe 同句)",
400
+ "400 request.field_invalid#title.no_visible_character(PATCH /v1/sessions/:id · 会话同步 2c 导入的 title)",
401
+ "409 conflict.checkpoint_ctx_unsealable#resume(续跑上下文读口)",
402
+ "409 conflict.checkpoint_ctx_unsealable#submit(提交面:本服务没有保管店)",
403
+ "409 decide.row_unrevivable#no_agent_name",
404
+ "409 decide.row_unrevivable#no_root_anchor",
405
+ "503 state.file_history_unreadable#store_connection_fault(会话同步三条拉取读腿)",
406
+ "connect_failed(run 失败终局)#snapshot_bucket_missing(k8s 车道读 latest 得 404 NoSuchBucket;连沙箱失败,一只 pod 都不建)"
407
+ ],
408
+ "registered": [],
409
+ "removed": [],
410
+ "breaking": false
411
+ },
412
+ {
413
+ "set": "selfMinted.storeFaultPermanence",
414
+ "at": [
415
+ "src/trace/self-minted-wire.ts#storeFaultPermanence"
416
+ ],
417
+ "added": [
418
+ "transient"
419
+ ],
420
+ "registered": [],
421
+ "removed": [],
422
+ "breaking": false
423
+ },
424
+ {
425
+ "set": "selfMinted.wireValueRule",
426
+ "at": [
427
+ "src/trace/self-minted-wire.ts#wireValueRule"
428
+ ],
429
+ "added": [
430
+ "GET /v1/assistant/inbox#objective",
431
+ "GET /v1/config/catalog#rows[ANTHROPIC_API_KEY].semantics",
432
+ "GET /v1/config/catalog#rows[ANTHROPIC_AUTH_TOKEN].semantics",
433
+ "GET /v1/config/catalog#rows[MCP_ELICITATION_MAX_CONCURRENT].derivedDefaultNote",
434
+ "GET /v1/config/catalog#rows[MCP_ELICITATION_MAX_TOTAL].derivedDefaultNote",
435
+ "GET /v1/config/catalog#rows[MCP_ELICITATION_MIN_INTERVAL_MS].derivedDefaultNote",
436
+ "GET /v1/config/catalog#rows[MCP_ELICITATION_TTL_MS].derivedDefaultNote",
437
+ "GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_BUCKET].semantics",
438
+ "GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_PREFIX].derivedDefaultNote",
439
+ "GET /v1/config/catalog#rows[WORKSPACE_SNAPSHOT_PREFIX].semantics",
440
+ "SSE elicitation_complete#action(没人应答的释放)"
441
+ ],
442
+ "registered": [],
443
+ "removed": [],
444
+ "breaking": false
445
+ }
446
+ ],
447
+ "breaking": 0
448
+ }
@@ -1,52 +0,0 @@
1
- /** 拒因词(闭集;判序 = 本数组序)。wire 上即 `request.field_invalid` 拒体的 `reason`。 */
2
- export declare const URL_CREDENTIAL_REASONS: readonly ["url_userinfo", "url_credential_param"];
3
- export type UrlCredentialReason = (typeof URL_CREDENTIAL_REASONS)[number];
4
- /** 一处命中:`url_userinfo`,或 `url_credential_param` + 它在哪一段、表里的哪个词(小写;不是调用方的原字节)。 */
5
- export type UrlCredential = {
6
- readonly reason: "url_userinfo";
7
- } | {
8
- readonly reason: "url_credential_param";
9
- readonly at: "query" | "fragment";
10
- readonly name: string;
11
- };
12
- /**
13
- * 判:这个值作为 URL 读出来(WHATWG),带不带 **userinfo**(判官的第一问,也是 {@link findUrlCredential} 的第一步)。只问这一件的座位 —— 运行时本就拒带 userinfo 的 URL、
14
- * 而凭据名参数不由它拒的载体(搜索后端的部署 env 与续跑重放读法)—— 问这一只,不在座位里另写一份 userinfo 谓词。纯函数。
15
- */
16
- export declare function findUrlUserinfo(raw: string): Extract<UrlCredential, {
17
- readonly reason: "url_userinfo";
18
- }> | undefined;
19
- /**
20
- * 判:这个值作为 URL 读出来(WHATWG),带不带凭据。首个命中;没有(含不透明 / 解析不了的值)⇒ `undefined`。纯函数。
21
- */
22
- export declare function findUrlCredential(raw: string): UrlCredential | undefined;
23
- /** 一处命中的规则句(穷举;新拒因词不补 = 编译红)。只说规则与表词,不含值。 */
24
- export declare function urlCredentialRule(c: UrlCredential): string;
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 座的整句要接它自己的条目键律尾句,所以 MCP 直接取 {@link urlCredentialRefusalReason} + {@link urlCredentialFacts},另三座走这一只。
50
- */
51
- export declare function buildRequestUrlCredentialRefusal(field: string, credential: UrlCredential, exit: string, subject?: string): UrlCredentialRefusal;
52
- //# sourceMappingURL=url-credential.d.ts.map
@@ -1,49 +0,0 @@
1
- import { httpUrlFlaws, httpUrlRule, isHierarchicalUrl } from "@sema-agent/settings-schema";
2
- import { isCredentialParamName } from "./trace/redact.js";
3
- export const URL_CREDENTIAL_REASONS = ["url_userinfo", "url_credential_param"];
4
- function credentialParamIn(params) {
5
- for (const name of new URLSearchParams(params).keys()) {
6
- if (isCredentialParamName(name))
7
- return name.replace(/[A-Z]/g, (c) => c.toLowerCase());
8
- }
9
- return undefined;
10
- }
11
- export function findUrlUserinfo(raw) {
12
- return isHierarchicalUrl(raw) && httpUrlFlaws(raw, ["userinfo"]).includes("userinfo") ? { reason: "url_userinfo" } : undefined;
13
- }
14
- export function findUrlCredential(raw) {
15
- if (!isHierarchicalUrl(raw))
16
- return undefined;
17
- const userinfo = findUrlUserinfo(raw);
18
- if (userinfo !== undefined)
19
- return userinfo;
20
- const u = new URL(raw);
21
- const inQuery = credentialParamIn(u.search);
22
- if (inQuery !== undefined)
23
- return { reason: "url_credential_param", at: "query", name: inQuery };
24
- const inFragment = credentialParamIn(u.hash.slice(1));
25
- if (inFragment !== undefined)
26
- return { reason: "url_credential_param", at: "fragment", name: inFragment };
27
- return undefined;
28
- }
29
- export function urlCredentialRule(c) {
30
- switch (c.reason) {
31
- case "url_userinfo":
32
- return httpUrlRule("userinfo");
33
- case "url_credential_param":
34
- return `must not carry a credential parameter (the ${c.at} names "${c.name}", a name the service's log redactor treats as a credential)`;
35
- }
36
- }
37
- export function urlCredentialFacts(field, credential) {
38
- return { field, reason: credential.reason };
39
- }
40
- export function urlCredentialHeaderExit(place) {
41
- return `${place} is stored sealed: send the credential as a header in ${place} (for example "Authorization": "Bearer …")`;
42
- }
43
- export function urlCredentialRefusalReason(credential, exit) {
44
- return `${urlCredentialRule(credential)} — the URL is kept as written (a parked task's resume context, logs), while ${exit}`;
45
- }
46
- export function buildRequestUrlCredentialRefusal(field, credential, exit, subject) {
47
- return { message: `${field}${subject === undefined ? "" : ` (${subject})`} ${urlCredentialRefusalReason(credential, exit)}`, facts: urlCredentialFacts(field, credential) };
48
- }
49
- //# sourceMappingURL=url-credential.js.map