@sema-agent/server 7.148.0 → 7.150.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 (360) hide show
  1. package/MIGRATION.md +551 -9
  2. package/README.md +17 -2
  3. package/README.zh-CN.md +5 -1
  4. package/USAGE.md +126 -68
  5. package/dist/adoption/wire.d.ts +3 -3
  6. package/dist/approval-card.d.ts +33 -33
  7. package/dist/approval-gate-currency.d.ts +1 -1
  8. package/dist/approval-leg-origin.d.ts +33 -0
  9. package/dist/approval-leg-origin.js +4 -0
  10. package/dist/audit.d.ts +1 -1
  11. package/dist/audit.js +2 -2
  12. package/dist/auth-bridge.d.ts +9 -1
  13. package/dist/auth-bridge.js +4 -4
  14. package/dist/auth-keys.d.ts +10 -1
  15. package/dist/auth-keys.js +8 -0
  16. package/dist/background-session-reap.d.ts +1 -1
  17. package/dist/boot/deferred-sandbox-path-env.d.ts +5 -3
  18. package/dist/boot/deferred-sandbox-path-env.js +1 -2
  19. package/dist/boot/execution-env.js +10 -11
  20. package/dist/boot/execution-lane.d.ts +6 -4
  21. package/dist/boot/execution-lane.js +3 -1
  22. package/dist/boot/org-delivery.d.ts +3 -2
  23. package/dist/boot/parked-revive-gate.d.ts +5 -5
  24. package/dist/boot/parked-revive-gate.js +2 -3
  25. package/dist/boot/resolve-spec.d.ts +4 -5
  26. package/dist/boot/resolve-spec.js +66 -28
  27. package/dist/boot/retention-lane.d.ts +1 -1
  28. package/dist/boot/runner-deps.js +3 -1
  29. package/dist/boot/session-faces.js +21 -21
  30. package/dist/boot/stage-01-config.d.ts +1 -0
  31. package/dist/boot/stage-01-config.js +4 -3
  32. package/dist/boot/stage-02-web-admin-pull.d.ts +1 -0
  33. package/dist/boot/stage-02-web-admin-pull.js +10 -2
  34. package/dist/boot/stage-03-store-backend.d.ts +1 -0
  35. package/dist/boot/stage-03-store-backend.js +4 -4
  36. package/dist/boot/stage-04-stores.d.ts +1 -0
  37. package/dist/boot/stage-05-execution-env.d.ts +1 -0
  38. package/dist/boot/stage-06-runners.d.ts +2 -1
  39. package/dist/boot/stage-06-runners.js +1 -2
  40. package/dist/boot/stage-07-capability-layer.d.ts +2 -1
  41. package/dist/boot/stage-07-capability-layer.js +1 -1
  42. package/dist/boot/stage-08-reapers.d.ts +2 -1
  43. package/dist/boot/stage-09-leader.d.ts +2 -1
  44. package/dist/boot/stage-10-http-server.d.ts +35 -2
  45. package/dist/boot/stage-10-http-server.js +9 -4
  46. package/dist/boot/stores.d.ts +3 -0
  47. package/dist/boot/stores.js +22 -19
  48. package/dist/boot/web-admin.d.ts +1 -1
  49. package/dist/capabilities/tool-defer.d.ts +1 -1
  50. package/dist/capability-facts.d.ts +70 -60
  51. package/dist/capability-facts.js +45 -49
  52. package/dist/card-settle-stored-scope.d.ts +56 -0
  53. package/dist/card-settle-stored-scope.js +27 -0
  54. package/dist/card-void.d.ts +7 -12
  55. package/dist/card-void.js +2 -7
  56. package/dist/config-catalog.d.ts +12 -0
  57. package/dist/config-catalog.js +37 -33
  58. package/dist/config-invariants.d.ts +5 -4
  59. package/dist/config-invariants.js +4 -4
  60. package/dist/config-types.d.ts +49 -16
  61. package/dist/config.d.ts +6 -5
  62. package/dist/config.js +35 -24
  63. package/dist/context-window-notice.d.ts +31 -0
  64. package/dist/context-window-notice.js +28 -0
  65. package/dist/deployment-governance.d.ts +7 -28
  66. package/dist/deployment-governance.js +1 -14
  67. package/dist/deployment-shape.d.ts +20 -11
  68. package/dist/deployment-shape.js +1 -0
  69. package/dist/device-ws-hub.d.ts +1 -0
  70. package/dist/device-ws-hub.js +64 -28
  71. package/dist/device-ws-protocol.d.ts +20 -6
  72. package/dist/device-ws-protocol.js +9 -2
  73. package/dist/engine-identity.d.ts +7 -1
  74. package/dist/engine-identity.js +5 -0
  75. package/dist/env-name-allowlist-knobs.d.ts +6 -5
  76. package/dist/env-name-allowlist-knobs.js +5 -0
  77. package/dist/execution-lane-caps.d.ts +20 -5
  78. package/dist/execution-lane-caps.js +18 -4
  79. package/dist/field-conflict.d.ts +2 -2
  80. package/dist/fleet/engine-signal.d.ts +14 -1
  81. package/dist/fleet/engine-signal.js +5 -1
  82. package/dist/fleet/fleet-reconciler.d.ts +1 -1
  83. package/dist/fleet/serving-lease.d.ts +18 -3
  84. package/dist/fleet/serving-lease.js +81 -35
  85. package/dist/fleet-client.d.ts +13 -11
  86. package/dist/fleet-client.js +53 -33
  87. package/dist/history-anchor.js +1 -1
  88. package/dist/hitl-delivery.d.ts +1 -3
  89. package/dist/hitl-delivery.js +1 -1
  90. package/dist/hooks/command-spawn.d.ts +7 -2
  91. package/dist/hooks/command-spawn.js +13 -6
  92. package/dist/hooks/hook-runner.d.ts +5 -0
  93. package/dist/hooks/hook-runner.js +11 -7
  94. package/dist/http/active-run-conflict.d.ts +3 -7
  95. package/dist/http/active-run-conflict.js +2 -2
  96. package/dist/http/admission.js +5 -5
  97. package/dist/http/approval-sweeps.js +5 -3
  98. package/dist/http/caller-trust.d.ts +2 -2
  99. package/dist/http/caller-trust.js +3 -3
  100. package/dist/http/checkpoint-ctx.d.ts +18 -63
  101. package/dist/http/checkpoint-ctx.js +1 -24
  102. package/dist/http/claim-heartbeat.d.ts +6 -6
  103. package/dist/http/claim-heartbeat.js +6 -6
  104. package/dist/http/claimed-run.d.ts +16 -9
  105. package/dist/http/claimed-run.js +8 -0
  106. package/dist/http/dispatch.js +7 -5
  107. package/dist/http/durable-run-leg.d.ts +8 -1
  108. package/dist/http/durable-run-leg.js +34 -15
  109. package/dist/http/execution-context.d.ts +115 -14
  110. package/dist/http/execution-context.js +130 -40
  111. package/dist/http/owner-access.d.ts +246 -21
  112. package/dist/http/owner-access.js +186 -8
  113. package/dist/http/principal-gate.d.ts +18 -11
  114. package/dist/http/principal-gate.js +3 -1
  115. package/dist/http/readiness.d.ts +4 -2
  116. package/dist/http/resume-ctx-read.d.ts +14 -3
  117. package/dist/http/resume-ctx-read.js +24 -3
  118. package/dist/http/resume-legs.d.ts +35 -3
  119. package/dist/http/resume-legs.js +262 -106
  120. package/dist/http/route-ctx.d.ts +29 -11
  121. package/dist/http/routes/a2a-serve.js +17 -14
  122. package/dist/http/routes/approvals-assistant.d.ts +3 -2
  123. package/dist/http/routes/approvals-assistant.js +11 -11
  124. package/dist/http/routes/capabilities.js +5 -4
  125. package/dist/http/routes/config-catalog.d.ts +1 -1
  126. package/dist/http/routes/diagnostics.d.ts +3 -1
  127. package/dist/http/routes/diagnostics.js +30 -5
  128. package/dist/http/routes/mcp-reconnect.js +2 -2
  129. package/dist/http/routes/memory-origin.d.ts +1 -1
  130. package/dist/http/routes/notify-wake.js +2 -3
  131. package/dist/http/routes/principal-inbox.d.ts +3 -1
  132. package/dist/http/routes/principal-inbox.js +3 -2
  133. package/dist/http/routes/projects.d.ts +1 -0
  134. package/dist/http/routes/projects.js +5 -3
  135. package/dist/http/routes/retention-ops.d.ts +1 -1
  136. package/dist/http/routes/run-permission-mode.d.ts +1 -1
  137. package/dist/http/routes/run-permission-mode.js +2 -2
  138. package/dist/http/routes/runs.d.ts +1 -1
  139. package/dist/http/routes/runs.js +33 -37
  140. package/dist/http/routes/session-memory-sync.js +4 -5
  141. package/dist/http/routes/session-sync.d.ts +24 -5
  142. package/dist/http/routes/session-sync.js +45 -37
  143. package/dist/http/routes/sessions-list.d.ts +1 -1
  144. package/dist/http/routes/sessions.d.ts +1 -1
  145. package/dist/http/routes/sessions.js +18 -44
  146. package/dist/http/routes/tasks.js +136 -101
  147. package/dist/http/routes/trace-usage.js +14 -14
  148. package/dist/http/routes/workflows.d.ts +1 -0
  149. package/dist/http/routes/workflows.js +20 -38
  150. package/dist/http/server.d.ts +12 -9
  151. package/dist/http/server.js +35 -6
  152. package/dist/http/stored-body-replay.d.ts +3 -24
  153. package/dist/http/stored-body-replay.js +2 -12
  154. package/dist/http/submit-ctx.d.ts +2 -2
  155. package/dist/http/submit-ctx.js +5 -5
  156. package/dist/http/submit-replay.d.ts +15 -2
  157. package/dist/http/submit-replay.js +10 -4
  158. package/dist/http/wire-types.d.ts +6 -3
  159. package/dist/index.d.ts +3 -1
  160. package/dist/index.js +1 -0
  161. package/dist/leader/endpoint.js +9 -8
  162. package/dist/leg-facts.d.ts +13 -2
  163. package/dist/leg-facts.js +2 -0
  164. package/dist/local-store-declaration.d.ts +54 -0
  165. package/dist/local-store-declaration.js +59 -0
  166. package/dist/mcp-assertion-header.d.ts +1 -1
  167. package/dist/mcp-assertion-header.js +1 -1
  168. package/dist/mcp-authorization-face.d.ts +18 -14
  169. package/dist/mcp-authorization-face.js +3 -2
  170. package/dist/memory-project-layer.js +1 -1
  171. package/dist/memory-scope.d.ts +4 -4
  172. package/dist/memory-scope.js +4 -4
  173. package/dist/memory-store-refusal.d.ts +1 -1
  174. package/dist/memory-sync-client.js +2 -2
  175. package/dist/model-context-window.d.ts +50 -11
  176. package/dist/model-context-window.js +20 -1
  177. package/dist/model-entry-refusal.d.ts +5 -4
  178. package/dist/model-entry-refusal.js +17 -3
  179. package/dist/model-reach-scope.d.ts +2 -1
  180. package/dist/observability/corrupt-read-seat.d.ts +1 -1
  181. package/dist/observability/fail-open.d.ts +19 -7
  182. package/dist/observability/fail-open.js +19 -7
  183. package/dist/observability/logger.d.ts +7 -0
  184. package/dist/observability/logger.js +3 -1
  185. package/dist/observability/metrics.js +1 -1
  186. package/dist/observability/run-terminal.d.ts +1 -1
  187. package/dist/observability/run-terminal.js +1 -0
  188. package/dist/observability/secret-env-scrub.d.ts +1 -1
  189. package/dist/observability/secret-env-scrub.js +1 -1
  190. package/dist/org-delivery-gate.d.ts +31 -6
  191. package/dist/org-delivery-gate.js +7 -4
  192. package/dist/owner-faces.d.ts +30 -5
  193. package/dist/owner-faces.js +2 -0
  194. package/dist/park-row-commit.d.ts +67 -0
  195. package/dist/park-row-commit.js +76 -0
  196. package/dist/parked-decide.d.ts +9 -7
  197. package/dist/parked-decide.js +25 -6
  198. package/dist/peer-directory.d.ts +1 -1
  199. package/dist/peer-seat.d.ts +1 -1
  200. package/dist/peer-seat.js +52 -59
  201. package/dist/plugins/adoption-log-sql.d.ts +3 -3
  202. package/dist/plugins/adoption-log-sql.js +19 -19
  203. package/dist/plugins/approval-ask-store-sql.d.ts +1 -1
  204. package/dist/plugins/approval-ask-store-sql.js +3 -5
  205. package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
  206. package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
  207. package/dist/plugins/approval-exemption-skill-m46.d.ts +0 -6
  208. package/dist/plugins/approval-exemption-skill-m46.js +6 -10
  209. package/dist/plugins/approval-exemption-store.d.ts +26 -1
  210. package/dist/plugins/approval-exemption-store.js +28 -19
  211. package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -3
  212. package/dist/plugins/ensure-schema-lock-policy.js +75 -9
  213. package/dist/plugins/exec-path-law.d.ts +34 -0
  214. package/dist/plugins/exec-path-law.js +13 -0
  215. package/dist/plugins/file-run-store.d.ts +22 -9
  216. package/dist/plugins/file-run-store.js +51 -23
  217. package/dist/plugins/local-checkpoint-store.d.ts +8 -1
  218. package/dist/plugins/local-checkpoint-store.js +5 -1
  219. package/dist/plugins/local-data-root-admission.d.ts +52 -0
  220. package/dist/plugins/local-data-root-admission.js +100 -0
  221. package/dist/plugins/local-engine-high-water.d.ts +28 -7
  222. package/dist/plugins/local-engine-high-water.js +27 -22
  223. package/dist/plugins/local-session-store.d.ts +134 -49
  224. package/dist/plugins/local-session-store.js +149 -108
  225. package/dist/plugins/memory-run-store.d.ts +14 -9
  226. package/dist/plugins/memory-run-store.js +48 -22
  227. package/dist/plugins/one-time-migration-marker.d.ts +19 -3
  228. package/dist/plugins/one-time-migration-marker.js +7 -1
  229. package/dist/plugins/one-time-migrations.d.ts +110 -59
  230. package/dist/plugins/one-time-migrations.js +224 -136
  231. package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
  232. package/dist/plugins/org-delivery-quota-store.js +29 -14
  233. package/dist/plugins/permission-rule-store-sql.d.ts +1 -1
  234. package/dist/plugins/permission-rule-store-sql.js +5 -9
  235. package/dist/plugins/pg-pool.d.ts +1 -1
  236. package/dist/plugins/pg-pool.js +14 -12
  237. package/dist/plugins/posix-shell-fs.js +4 -2
  238. package/dist/plugins/remote-env-adb.js +3 -2
  239. package/dist/plugins/remote-env-device.d.ts +3 -2
  240. package/dist/plugins/remote-env-device.js +8 -6
  241. package/dist/plugins/remote-env-e2b.d.ts +4 -8
  242. package/dist/plugins/remote-env-e2b.js +21 -15
  243. package/dist/plugins/remote-env-host.d.ts +51 -10
  244. package/dist/plugins/remote-env-host.js +97 -31
  245. package/dist/plugins/remote-env-k8s.js +7 -4
  246. package/dist/plugins/remote-env-local-docker.d.ts +6 -3
  247. package/dist/plugins/remote-env-local-docker.js +11 -25
  248. package/dist/plugins/remote-env-ssh.js +4 -3
  249. package/dist/plugins/remote-shell.d.ts +3 -1
  250. package/dist/plugins/remote-shell.js +3 -3
  251. package/dist/plugins/replica-registration.d.ts +35 -0
  252. package/dist/plugins/replica-registration.js +48 -0
  253. package/dist/plugins/retention-lane-store-sql.d.ts +1 -1
  254. package/dist/plugins/run-store-sql.d.ts +27 -8
  255. package/dist/plugins/run-store-sql.js +46 -18
  256. package/dist/plugins/scenario-prefix-switch-m42.d.ts +8 -12
  257. package/dist/plugins/scenario-prefix-switch-m42.js +9 -6
  258. package/dist/plugins/schema-consistency.d.ts +91 -5
  259. package/dist/plugins/schema-consistency.js +189 -7
  260. package/dist/plugins/schema-drift-sentence.d.ts +6 -5
  261. package/dist/plugins/schema-drift-sentence.js +13 -5
  262. package/dist/plugins/serving-requirement.d.ts +49 -0
  263. package/dist/plugins/serving-requirement.js +53 -0
  264. package/dist/plugins/session-placement.d.ts +5 -4
  265. package/dist/plugins/shell-sentinel-owner-m48.d.ts +22 -0
  266. package/dist/plugins/shell-sentinel-owner-m48.js +6 -0
  267. package/dist/plugins/stop-then-start-sentence.d.ts +55 -0
  268. package/dist/plugins/stop-then-start-sentence.js +51 -0
  269. package/dist/plugins/store-backend.d.ts +23 -9
  270. package/dist/plugins/store-backend.js +58 -24
  271. package/dist/plugins/store-contracts.d.ts +45 -5
  272. package/dist/plugins/store-contracts.js +19 -0
  273. package/dist/plugins/tidb-pool.d.ts +11 -6
  274. package/dist/plugins/tidb-pool.js +22 -12
  275. package/dist/plugins/workspace-custody.d.ts +44 -0
  276. package/dist/plugins/workspace-custody.js +47 -0
  277. package/dist/process-instance.d.ts +3 -0
  278. package/dist/process-instance.js +7 -0
  279. package/dist/project-context.d.ts +66 -0
  280. package/dist/project-context.js +70 -0
  281. package/dist/project-identity.d.ts +8 -7
  282. package/dist/project-identity.js +40 -17
  283. package/dist/project-layer-key.d.ts +13 -2
  284. package/dist/project-layer-key.js +9 -1
  285. package/dist/question.d.ts +9 -21
  286. package/dist/question.js +28 -19
  287. package/dist/read-deny-floor-notice.d.ts +36 -0
  288. package/dist/read-deny-floor-notice.js +40 -0
  289. package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
  290. package/dist/request-declaration-disposition.js +39 -0
  291. package/dist/run-cancel-card.d.ts +28 -0
  292. package/dist/run-cancel-card.js +20 -0
  293. package/dist/run-cancel-context.d.ts +10 -0
  294. package/dist/run-cancel-context.js +1 -0
  295. package/dist/run-local.js +28 -13
  296. package/dist/runs.d.ts +31 -7
  297. package/dist/runs.js +34 -16
  298. package/dist/security.d.ts +3 -3
  299. package/dist/server-secret-env.d.ts +34 -20
  300. package/dist/server-secret-env.js +61 -18
  301. package/dist/session-agent.d.ts +4 -12
  302. package/dist/session-agent.js +0 -6
  303. package/dist/session-children-retire.d.ts +6 -3
  304. package/dist/session-children-retire.js +2 -5
  305. package/dist/session-incarnation.d.ts +18 -4
  306. package/dist/session-incarnation.js +4 -1
  307. package/dist/session-notify-door.d.ts +4 -4
  308. package/dist/session-notify-door.js +5 -6
  309. package/dist/session-rules-seat.d.ts +4 -3
  310. package/dist/session-rules-seat.js +3 -11
  311. package/dist/session-sync.js +3 -3
  312. package/dist/session-workspace.d.ts +3 -3
  313. package/dist/store-admission.d.ts +33 -0
  314. package/dist/store-admission.js +49 -0
  315. package/dist/store-posture.d.ts +5 -0
  316. package/dist/store-posture.js +18 -1
  317. package/dist/stores-sql/checkpoint-store-sql.d.ts +22 -3
  318. package/dist/stores-sql/checkpoint-store-sql.js +109 -23
  319. package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
  320. package/dist/stores-sql/file-history-store-sql.js +3 -5
  321. package/dist/stores-sql/retention-store-sql.d.ts +1 -1
  322. package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
  323. package/dist/stores-sql/tool-result-store-sql.js +4 -6
  324. package/dist/task-a2a.d.ts +3 -8
  325. package/dist/task-a2a.js +25 -27
  326. package/dist/task-cwd.d.ts +27 -10
  327. package/dist/task-cwd.js +3 -0
  328. package/dist/task-mcp.d.ts +3 -3
  329. package/dist/task-mcp.js +1 -1
  330. package/dist/task-settings.d.ts +13 -0
  331. package/dist/task-settings.js +14 -7
  332. package/dist/terminal.d.ts +2 -0
  333. package/dist/terminal.js +21 -6
  334. package/dist/tool-approval.d.ts +50 -41
  335. package/dist/tool-approval.js +96 -73
  336. package/dist/trace/engine-notice-wire.d.ts +38 -21
  337. package/dist/trace/engine-notice-wire.js +25 -4
  338. package/dist/trace/ledger-sink.d.ts +3 -1
  339. package/dist/trace/project.d.ts +8 -5
  340. package/dist/trace/project.js +11 -9
  341. package/dist/trace/projection-table.d.ts +33 -2
  342. package/dist/trace/redact.d.ts +12 -0
  343. package/dist/trace/redact.js +5 -1
  344. package/dist/trace/self-minted-wire.d.ts +268 -56
  345. package/dist/trace/self-minted-wire.js +110 -40
  346. package/dist/trace/tool-card.d.ts +3 -0
  347. package/dist/trace/tool-card.js +24 -0
  348. package/dist/trace/tool-output-media.d.ts +2 -1
  349. package/dist/unattended-permission-mode.d.ts +1 -1
  350. package/dist/web-admin-client/apply-effective.d.ts +1 -1
  351. package/dist/web-admin-client/apply-effective.js +22 -9
  352. package/dist/web-admin-client/effective-keys.d.ts +1 -1
  353. package/dist/web-admin-client/skills-mcp.d.ts +1 -1
  354. package/docs/DEVICE-EXECUTOR-PROTOCOL.md +57 -29
  355. package/docs/error-text-lexicon.json +317 -0
  356. package/package.json +4 -2
  357. package/scripts/embed-minimal.mjs +183 -0
  358. package/wire-changes/server@7.149.0.json +372 -0
  359. package/wire-changes/server@7.150.0.json +335 -0
  360. package/dist/plain-string-record.js +0 -70
@@ -1,6 +1,7 @@
1
1
  import type { IncomingMessage, ServerResponse } from "node:http";
2
2
  import type { ServiceConfig } from "../config-types.js";
3
3
  import { type Person, type Subject } from "../owner-brands.js";
4
+ import type { Caller } from "../owner-faces.js";
4
5
  import { type IdentitySource, type RunIdentity } from "../identity-source.js";
5
6
  import type { Logger } from "../observability/logger.js";
6
7
  /** Coerce a possibly-repeated request header to a single string (or undefined). */
@@ -96,22 +97,28 @@ export declare function sendUnauthorized(res: ServerResponse, face: Unauthorized
96
97
  /**
97
98
  * 🔴 **dev-open 的判据** = 部署形表行 `identityBoundary` 不成立(`deployment-shape.ts`;「这台部署有没有身份边界」的唯一答者):
98
99
  * 没声明 `REQUIRE_PRINCIPAL`、配置没接任何已验身份来源(没配 service token、没配鉴权桥 issuer —— 含中心回退、没开直连门)、也没声明只读 trace token:
99
- * 请求里没有任何东西替主体头作保,头是谁都能自报的**标签**(过滤 / 展示用),不是身份。只读配置:鉴权桥的验签器由起服第 9 段按同一个配置读数建
100
+ * 请求里没有任何东西替主体头作保,头是谁都能自报的(不是认证)—— 但报了它的请求仍是「为那位主体」,不是为部署本人({@link actsForDeployment})。只读配置:鉴权桥的验签器由起服第 9 段按同一个配置读数建
100
101
  * (配置里有桥 ⇔ 装了验签器;验签器与配置里的桥两者不一致的装配(任一方向)在 `createHttpServer` 拒),所以这里与先于验签器的一次性迁移段读到同一个答案。
101
- * 两处读它、不各写一份:调用方的 fleet 一格(属主存取器 `owner-access.ts` 的 `callerOf` —— 面表的 `dev_open` 资格与 fleet 列表面都经它)、
102
- * `/metrics` 族的免凭据臂(`dispatch.ts`)—— 于是「调用方是谁」在列表、单行面与指标面上只有一只读法。
102
+ * 这是部署事实,不是调用方事实:「这位调用方代不代部署本人说话」只有 {@link actsForDeployment} 一只读法(本函数是它的一臂);另一个读者 `dispatch.ts` 的 `/metrics` 族
103
+ * 只拿它判「配了只读凭据的这台部署上免凭据臂关着,不必读调用方」(凭据先于主体判),不判调用方是谁。
103
104
  */
104
105
  export declare function devOpenDeployment(config: ServiceConfig): boolean;
106
+ /** 代部署本人说话的那一格 = 属主存取器 `Caller.fleet` 的词(闭集只在 `owner-faces.ts` 拼一次):`dev_open` = 没有身份边界的部署上不报主体的调用方;`deployment_token` = 出示部署让它代自己说话的 service 凭据、不报主体的调用方。 */
107
+ export type DeploymentVoice = NonNullable<Caller["fleet"]>;
105
108
  /**
106
- * 🔴 **律(一句,一个参数)**:出示这台部署的 service 凭据且不报主体的调用方代部署本人说话(fleet),**除非部署声明 `SERVICE_TOKEN_ACTS_FOR_DEPLOYMENT=false`**
107
- * —— 此时它是无身份调用方,按各面既有的「过了凭据门、没有主体」那一臂答。带主体头的 service 凭据请求是前端(BFF)代那位主体发的 —— 它读那位主体,
108
- * 不读全舰队(两形同读);部署姿态(单用户 / 多租)不改这一句(单用户形上的主体头同样是「这次请求为谁」)。
109
- * 本函数是这条律的**唯一实施点**:声明位({@link ServiceConfig.serviceTokenActsForDeployment},env 一处)是这里的一个合取项,两个读者一次继承 ——
110
- * 调用方的 fleet 一格(属主存取器 `owner-access.ts` 的 `callerOf`)与 `/metrics` 族的 service 臂(`dispatch.ts`);不加拒码、不加闸点。自报位 `/health.auth.serviceTokenActsForDeployment`
111
- * 投的是同一只读法({@link serviceTokenDeclaredActsForDeployment})与同一只武装谓词(`http/health-self-report.ts`)。先判声明与凭据、后取主体:`subject` 只在两者都成立时才求值(调用点那一次 {@link gatedSubject}),
112
- * 没带凭据的请求不因主体头的形而改答。
109
+ * 🔴 **律(一句)**:**报了主体的调用方恒是那位主体** —— 每一口、每一种部署形(单用户 / 多租、有没有身份边界)都不改这一句;只有**不报主体**的调用方才代部署本人说话(fleet):
110
+ * 部署没有身份边界({@link devOpenDeployment} ⇒ `dev_open`:整台一人,不报主体的就是那一位 —— 「不报」= 没有主体头,也没出示一枚这台部署验不过的凭据
111
+ * ({@link bearerPresentedButUnverified}:出示了验不过 ≠ 没出示 —— 那枚凭据把主体头抹成「没有可信身份」,不许再落回最宽的那一格)),或出示这台部署的 service 凭据且部署没声明
112
+ * `SERVICE_TOKEN_ACTS_FOR_DEPLOYMENT=false`(⇒ `deployment_token`;声明了 ⇒ 它是无身份调用方,按各面既有的「过了凭据门、没有主体」那一臂答)。
113
+ * 带主体头的请求是前端(BFF)代那位主体发的、或调用方自报的「这次请求为谁」—— 它读那位主体、动那位主体的,不读全舰队;dev-open 上主体头谁都能自报,
114
+ * 那是部署选了不验身份(要隔离就给部署接一个身份来源),不是把头读成「为部署本人」的理由:提交的挂接(`security.ts` 的认领面)一向按它判属主,读面、列表与存续面同读这一句。
115
+ * 本函数是这条律的**唯一实施点**,两个读者一次继承 —— 调用方的 fleet 一格(属主存取器 `owner-access.ts` 的 `callerOf`)与 `/metrics` 族(`dispatch.ts`:`dev_open` 臂在没配
116
+ * `METRICS_TOKEN` 时免凭据,`deployment_token` 臂即 service 臂);不加拒码、不加闸点。自报位 `/health.auth.serviceTokenActsForDeployment` 投的是声明位的同一只读法
117
+ * ({@link serviceTokenDeclaredActsForDeployment})与同一只武装谓词(`http/health-self-report.ts`)。
118
+ * 主体只在部署那一格成立时求值(调用点那一次 {@link gatedSubject}):有身份边界的部署上没带 service 凭据的请求不因主体头的形而改答;dev-open 上要判「报没报主体」,
119
+ * 主体头形不合的请求与其余各口同答那一只 400。
113
120
  */
114
- export declare function actsForDeployment(req: IncomingMessage, config: ServiceConfig, subject: () => Subject | undefined): boolean;
121
+ export declare function actsForDeployment(req: IncomingMessage, config: ServiceConfig, subject: () => Subject | undefined): DeploymentVoice | undefined;
115
122
  /**
116
123
  * 声明位 `SERVICE_TOKEN_ACTS_FOR_DEPLOYMENT` 的**唯一读法**:门({@link actsForDeployment})、自报位(`http/health-self-report.ts`)、起服行
117
124
  * ({@link buildServiceTokenPostureNotice})三处都经它,不各写一份真值判断。只有字面 `true` 是「代部署本人」:`loadConfig` 恒写这一格(缺省 `true`),
@@ -152,7 +152,9 @@ export function devOpenDeployment(config) {
152
152
  return !DEPLOYMENT_SHAPE_PREDICATES.identityBoundary.holds(config);
153
153
  }
154
154
  export function actsForDeployment(req, config, subject) {
155
- return serviceTokenDeclaredActsForDeployment(config) && systemFor(req, config) !== undefined && subject() === undefined;
155
+ if (devOpenDeployment(config))
156
+ return subject() === undefined && !bearerPresentedButUnverified(req, config) ? "dev_open" : undefined;
157
+ return serviceTokenDeclaredActsForDeployment(config) && systemFor(req, config) !== undefined && subject() === undefined ? "deployment_token" : undefined;
156
158
  }
157
159
  export function serviceTokenDeclaredActsForDeployment(config) {
158
160
  return config.serviceTokenActsForDeployment === true;
@@ -72,7 +72,8 @@ export declare function sendReadyz(res: ServerResponse, v: ReadinessVerdict): vo
72
72
  export declare const BILLABLE_KINDS: readonly ["submit", "hitl-answer", "resume"];
73
73
  export type BillableKind = (typeof BILLABLE_KINDS)[number];
74
74
  /**
75
- * 计费面的拒因(**数组序 = 优先序**):就绪原因({@link READINESS_REASONS})∪ `lease_expired`(服务租约过期且中心不可达满 `T_max`)。
75
+ * 计费面的拒因(**数组序 = 优先序**):就绪原因({@link READINESS_REASONS})∪ `lease_expired`(服务租约过期且中心不可达满 `T_max` —— 含从起步起一直没听到
76
+ * 中心的成员:推定在围栏内,钟从本进程起点)。
76
77
  * `lease_expired` 刻意不是就绪原因:它不翻 `/readyz`(中心不可达不是本实例的病,摘它出路由只会把取消 / HITL / 读面一起摘掉)。
77
78
  */
78
79
  export declare const ADMISSION_REFUSALS: readonly ["draining", "model_roster_pending", "lease_expired"];
@@ -80,7 +81,8 @@ export type AdmissionRefusal = (typeof ADMISSION_REFUSALS)[number];
80
81
  /**
81
82
  * 计费面请求的**唯一**准入判(dispatch 的计费门、a2a `message/send`、PARKED 赎回席同调):按 {@link ADMISSION_REFUSALS} 序找第一条
82
83
  * 成立且按 {@link ADMISSION_TABLE} 拒这一种的拒因;没有 ⇒ `undefined`(放行)。入参是**判决**而不是 deps:就绪判由调用点经唯一谓词
83
- * {@link readinessOf} 现读(模块边界上那一只 —— 谓词单源钉注入它,任何读点自己读 `drainState` 都会当场红),租约读数取 `deps.servingLease`。
84
+ * {@link readinessOf} 现读(模块边界上那一只 —— 谓词单源钉注入它,任何读点自己读 `drainState` 都会当场红),租约读数经唯一读者
85
+ * `fleet/engine-signal.ts` 的 `memberLeaseOf`(只有 fleet 成员有租约;成员没有任何中心读数之前是推定的 `expired`,同一臂)。
84
86
  */
85
87
  export declare function admissionRefusalOf(verdict: ReadinessVerdict, lease: ServingLeaseView | undefined, kind: BillableKind): BillableRefusal | undefined;
86
88
  /** 计费提交门的拒绝(首条 reason 定码)。`retryAfterSec` 由发送形(`sendBillableRefusal`)镜像成头;交回
@@ -58,10 +58,11 @@ export interface CheckpointCtxOpening {
58
58
  }
59
59
  export declare function readResumeCtx(load: Promise<StoredCheckpointCtx | null>, opening: CheckpointCtxOpening): Promise<ResumeCtxRead>;
60
60
  /**
61
- * 续跑家族一次店读失败的落点 —— 判官的五词逐词表态,**只在这一处**(本口读续跑上下文那一读,与续跑腿读「这张卡归哪条 run」那一读同读它):
62
- * `corrupt` ⇒ 坏体(带坐标);`connection` / `deployment` / `unclassified` ⇒ 读不出;`defect` ⇒ 原样上抛。
61
+ * 续跑家族一次店往返失败的落点 —— 判官的五词逐词表态,**只在这一处**。三个读者同读它:本口读续跑上下文那一读、续跑腿读「这张卡归哪条 run」那一读,
62
+ * 与续跑腿的认领(`resume-legs.ts` 的 `resumeClaimFaultAnswerOf`:认领那一笔,或认领之后执行席那一次读 / 写失败 —— 后者的认领已由写口撤回)。
63
+ * `corrupt` ⇒ 坏体(带坐标);`connection` / `deployment` / `unclassified` ⇒ 读不出 / 写不进;`defect` ⇒ 原样上抛。
63
64
  */
64
- export declare function resumeStoreReadFailureOf(e: unknown): {
65
+ export declare function resumeStoreFailureOf(e: unknown): {
65
66
  readonly kind: "corrupt";
66
67
  readonly where: string;
67
68
  } | {
@@ -77,6 +78,16 @@ export declare function resumeCtxUnreadableAnswer(): {
77
78
  status: number;
78
79
  body: RefusalBody;
79
80
  };
81
+ /**
82
+ * 续跑腿**认领**撞店故障的对外答复 —— 认领那一笔(`markResuming` / wake 现建行的 `createRun`)或认领之后那一次提交(执行席的再读 / 落格)。
83
+ * 与 {@link resumeCtxUnreadableAnswer} **同码同状态**(503 `state.resume_context_unreadable`:店这一拍没答出来,这一请求没有执行,稍后原样重发;一直如此 ⇒ 请运维查库),
84
+ * 句子说的是这一形自己的事:读或写这条任务的存储状态失败了,卡仍待决(认领之后那一形的认领已由写口撤回到取来时的样子)。句子不带店层 detail。
85
+ * 🔴 形是给冻结门看的(与 {@link resumeCtxCorruptAnswer} 同一条):`status: <三位数>, body: refusalBody({ errorCode: "<码>", message: "<整句双引号字面>"`,中间只许有空白。
86
+ */
87
+ export declare function resumeClaimFaultAnswer(): {
88
+ status: number;
89
+ body: RefusalBody;
90
+ };
80
91
  /**
81
92
  * 开不开的对外答复([ref])—— 409 `conflict.checkpoint_ctx_unsealable`,机读 `field`(哪一个凭据位,提交体路径;键名不是秘密,值从不进来)+ `reason`
82
93
  * (闭集 `CHECKPOINT_CTX_UNSEALABLE_REASONS`)。句子说「这条任务的续跑上下文里带的凭据本服务开不开」、五种成因与出路(按 `reason` 修好保管目录后原样重发,
@@ -1,12 +1,27 @@
1
1
  import { openCheckpointCtx } from "./checkpoint-ctx.js";
2
2
  import { storeFaultClassOf } from "../plugins/store-fault.js";
3
3
  import { refusalBody } from "./refusal-body.js";
4
+ import { frozenProjectContextOf } from "../project-context.js";
4
5
  export async function readResumeCtx(load, opening) {
5
6
  const read = await readStoredCtx(load);
6
7
  if (read.kind !== "ok")
7
8
  return read;
8
9
  const opened = openCheckpointCtx(read.ctx, opening.opener, opening.sessionId);
9
- return opened.kind === "ok" ? { kind: "ok", ctx: opened.ctx } : { kind: "unsealable", field: opened.field, reason: opened.reason };
10
+ if (opened.kind !== "ok")
11
+ return { kind: "unsealable", field: opened.field, reason: opened.reason };
12
+ const frozen = frozenProjectContextOf(opened.ctx.projectContext);
13
+ switch (frozen.kind) {
14
+ case "absent":
15
+ return { kind: "ok", ctx: opened.ctx };
16
+ case "malformed":
17
+ return { kind: "corrupt", where: `checkpoint ctx for session ${JSON.stringify(opening.sessionId)}: projectContext` };
18
+ case "ok":
19
+ return { kind: "ok", ctx: { ...opened.ctx, projectContext: frozen.context } };
20
+ default: {
21
+ const unhandled = frozen;
22
+ throw new Error(`resume-ctx-read: unplaced frozen project context reading ${JSON.stringify(unhandled)}`);
23
+ }
24
+ }
10
25
  }
11
26
  async function readStoredCtx(load) {
12
27
  let stored;
@@ -14,11 +29,11 @@ async function readStoredCtx(load) {
14
29
  stored = await load;
15
30
  }
16
31
  catch (e) {
17
- return resumeStoreReadFailureOf(e);
32
+ return resumeStoreFailureOf(e);
18
33
  }
19
34
  return stored == null ? { kind: "absent" } : { kind: "ok", ctx: stored };
20
35
  }
21
- export function resumeStoreReadFailureOf(e) {
36
+ export function resumeStoreFailureOf(e) {
22
37
  const fault = storeFaultClassOf(e);
23
38
  switch (fault) {
24
39
  case "corrupt":
@@ -41,6 +56,12 @@ export function resumeCtxUnreadableAnswer() {
41
56
  body: refusalBody({ errorCode: "state.resume_context_unreadable", message: "this session's stored resume context could not be read just now (reading it failed), so this request was not carried out. Send it again later; if this keeps happening, ask whoever operates this deployment to check its database." }),
42
57
  };
43
58
  }
59
+ export function resumeClaimFaultAnswer() {
60
+ return {
61
+ status: 503,
62
+ body: refusalBody({ errorCode: "state.resume_context_unreadable", message: "the stored state of this task could not be read or written just now (the store failed), so this request was not carried out and the task is still waiting for it. Send it again later; if this keeps happening, ask whoever operates this deployment to check its database." }),
63
+ };
64
+ }
44
65
  export function resumeCtxUnsealableAnswer(read) {
45
66
  return {
46
67
  status: 409,
@@ -12,13 +12,14 @@
12
12
  * (`RunRegistry` / `RouteHelpers` / `RouteLegs` / `ReturnType<typeof createRequestGuards>`),不手抄签名 ⇒ 不会漂。
13
13
  */
14
14
  import type { IncomingMessage } from "node:http";
15
- import { CheckpointError, type QuestionAnswer, type CheckpointToken, type PendingSteerInput } from "@sema-agent/core";
15
+ import { CheckpointError, type QuestionAnswer, type CheckpointToken, type CheckpointRowVerdict, type PendingSteerInput } from "@sema-agent/core";
16
16
  import type { DecideBinding, DecidedAction } from "./wire-types.js";
17
17
  import { type KeyCaller } from "../owner-faces.js";
18
18
  import { type Subject } from "../owner-brands.js";
19
19
  import type { CheckpointStoreFull } from "../plugins/store-backend.js";
20
20
  import type { HostDecision } from "../host-decision.js";
21
21
  import { type GateSighting } from "../approval-gate-currency.js";
22
+ import { type CancelRunReader } from "../run-cancel-card.js";
22
23
  import { type PlanApprovePermissionModeAfter } from "../task-settings.js";
23
24
  import type { RouteCtxBase, DriveResumeArgs, PreparedPlanReview, RememberSessionRequest, ResumeCheckpointOutcome, ResumeLegOutcome, WorkflowDecisionDelivery } from "./route-ctx.js";
24
25
  import type { RunRegistry, RouteHelpers, RouteLegs } from "./route-ctx.js";
@@ -54,6 +55,34 @@ export declare const CHECKPOINT_ERROR_DISPOSITION: Readonly<Record<CheckpointErr
54
55
  * ⇒ `"terminal"`:与 `by_reason` 认不得的词同一条 fail-closed 方向(不宽容默认成可重试),也与修前手列串的缺省逐字相同。
55
56
  */
56
57
  export declare function resumeRefusalDisposition(e: CheckpointError): "cancelled" | "retriable" | "terminal";
58
+ type NotOkRowVerdict = Exclude<CheckpointRowVerdict, {
59
+ readonly kind: "ok";
60
+ }>;
61
+ /**
62
+ * 🔴 **判官判「本引擎续不了」的一张卡,人从哪儿出去 —— 闭集**(这一行在本引擎上不收任何决定,批 / 拒 / 驳 / 改同拒;出路只看判决与这张卡本身,不看门的哪一扇、也不看决定词)。
63
+ * 唯一铸法 {@link rowWayOutOf};读面 = 决断类续跑拒体上的 `wayOut`(`/decide` 的这一行自己的拒 · `/plan_review` 与 `/resume` 上引擎对这张卡的拒 · 读行臂)。
64
+ * · `cancel_run` —— 判决 `damaged`,且取消动词会结算这一张卡:`POST /v1/runs/:id/cancel` 按店 CAS 把卡 expire、再驱 run 终局(不经判官),之后另起任务;
65
+ * · `newer_worker` —— 判决 `lacking`:更新引擎停驻的行,不低于停驻它那一版的 worker 续得了它,同一决定在那里落得下;卡留 pending(cancel 在这里是放弃它)。
66
+ * 缺席 = 本服务说不出一个客户端落得下的出路(判 `damaged` 而取消动词不会结算这张卡 —— 它停在已终局的 run 的纯 park 上、归属说不出的老行,或店此刻答不出这一问)。
67
+ */
68
+ export type RowWayOut = "cancel_run" | "newer_worker";
69
+ /**
70
+ * 出路铸法要问店的那一问的座:`cs` + run 店 + 这张卡的令牌 + 铸不成时留痕的日志口(铸法不抛 —— 出路是给客户端的指路,店答不出这一问时拒本身一字不变、只是不指路,并响亮留一行)。
71
+ * 读行抛的五个读者(读行臂)与载入行的三扇门各自在自己的位置上拿着 `cs` 与令牌,同交一座。
72
+ */
73
+ export interface WayOutSeat {
74
+ readonly cs: Pick<CheckpointStoreFull, "hostSessionOfCard" | "findPendingTokenBySession">;
75
+ /** 取消动词那一问也要看 run 行(只对停着的 run 结算卡);没有耐久 run 店 ⇒ 缺席(取消口恒 501)。 */
76
+ readonly runs: CancelRunReader | undefined;
77
+ readonly token: CheckpointToken;
78
+ readonly logger: FlatServiceDeps["logger"];
79
+ }
80
+ /**
81
+ * {@link RowWayOut} 的唯一铸法:穷尽 core 的非 ok 判决 kind(core 加一种 ⇒ tsc 红,先来这里定它的出路)。
82
+ * `damaged` ⇒ `cancel_run` 当且仅当**取消动词会结算这一张卡**({@link cancelSettlesCard}:问的就是取消动词自己那一问,只读店的列,与行体坏成什么样无关 ——
83
+ * 判坏的卡的行体可以读不成检查点、属主格可以丢,取消照样落得下;投影若另按载入的行体判,就是同一件事的第二个读者)。
84
+ */
85
+ export declare function rowWayOutOf(seat: WayOutSeat, kind: NotOkRowVerdict["kind"]): Promise<RowWayOut | undefined>;
57
86
  /**
58
87
  * 🔴 **停驻行读者上「读行抛」的答复 —— 五个读者(决断口含停驻赎回与 SLA 拒扫的 `resumeCheckpoint` · 续跑 `resumePreempted` · 唤醒 `resumeWake` · 计划审阅
59
88
  * `preparePlanReview` · 活卡迟到回决 `redeemParkedAsk`)在各自的披露闸(`mayDiscloseRowError` / `decisionRowAdmits`)与各自的 404 句之后,catch 尾同调这一只**([ref])。
@@ -64,14 +93,16 @@ export declare function resumeRefusalDisposition(e: CheckpointError): "cancelled
64
93
  *
65
94
  * 写者位交空:版本键只长在 `checkpoint.unsupported_version` 上,而一份读不成检查点的字节,判官(core 全函数,读不动的值落 `damaged`)恒判 `damaged`,到不了那一码。
66
95
  * 店日后若交出一只 `lacking` 判决,键缺席(不编值);不为这条到不了的臂再开一条读续跑上下文的口(`getCtx` 的结果只交 `readResumeCtx`,读口律;多一个读者就是多一处要记得)。
67
- * 门型守卫那一臂(行已读出、判官判 `lacking` 可达)自带写者位,见 {@link createResumeLegs} 决断口的 `rowOwnRefusal`。
96
+ * 载入行那一问(行已读出、判官判 `lacking` 可达)自带写者位,见 {@link loadedRowRefusal}。
97
+ * `seat` 缺席 ⇒ 这个读者不带出路词(`/wake`:成文律,它的拒从不带 `wayOut`)。
68
98
  */
69
- export declare function rowReadRefusalAnswer(e: unknown): ResumeRefusalAnswer;
99
+ export declare function rowReadRefusalAnswer(e: unknown, seat: WayOutSeat | undefined): Promise<ResumeRefusalAnswer>;
70
100
  export declare function checkpointRefusalAnswer(e: CheckpointError, at: {
71
101
  readonly gate: string;
72
102
  readonly retriable: boolean;
73
103
  readonly taskId?: string;
74
104
  readonly versionKeys: Readonly<Record<string, string>>;
105
+ readonly wayOut?: RowWayOut;
75
106
  }): ResumeRefusalAnswer;
76
107
  /**
77
108
  * 一个答案只属于它被展示的那一个动作 —— 决断绑定的**唯一判官**:决断方点名它看到的那一对(`boundCallId` + `boundInputHash`,
@@ -116,4 +147,5 @@ export declare function createResumeLegs(ctx: {
116
147
  drivePlanReview: (prepared: PreparedPlanReview, decision: "approve" | "edit" | "reject", editedPlan: string | undefined, reason: string | undefined, hostDecision: HostDecision, req: IncomingMessage | undefined, acceptEarly?: boolean, permissionModeAfter?: PlanApprovePermissionModeAfter) => Promise<ResumeLegOutcome>;
117
148
  sessionNotifyDoor: import("../session-notify-door.js").SessionNotifyDoor;
118
149
  };
150
+ export {};
119
151
  //# sourceMappingURL=resume-legs.d.ts.map