@sema-agent/server 7.138.0 → 7.140.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 (332) hide show
  1. package/MIGRATION.md +457 -7
  2. package/README.md +7 -4
  3. package/README.zh-CN.md +6 -4
  4. package/USAGE.md +91 -41
  5. package/deploy/sema-up/README.md +1 -1
  6. package/deploy/sema-up/lib/lanes.json +3 -2
  7. package/dist/adoption/runner.js +1 -1
  8. package/dist/adoption/sql.js +1 -1
  9. package/dist/adoption/wire.d.ts +3 -3
  10. package/dist/approval-card.d.ts +26 -26
  11. package/dist/bench/s1/arms.d.ts +1 -1
  12. package/dist/bench/s1/arms.js +1 -3
  13. package/dist/bench/s1/live-deps.js +3 -2
  14. package/dist/bench/s1/row.d.ts +5 -2
  15. package/dist/bench/s1/row.js +2 -22
  16. package/dist/bench/s1/run-firm.js +2 -2
  17. package/dist/boot/adoption.js +1 -1
  18. package/dist/boot/device-lane.d.ts +8 -3
  19. package/dist/boot/device-lane.js +7 -2
  20. package/dist/boot/execution-env.d.ts +4 -2
  21. package/dist/boot/execution-env.js +28 -34
  22. package/dist/boot/execution-lane.d.ts +9 -1
  23. package/dist/boot/execution-lane.js +6 -1
  24. package/dist/boot/governance-seams.d.ts +3 -2
  25. package/dist/boot/governance-seams.js +9 -11
  26. package/dist/boot/memory-boundary.d.ts +14 -51
  27. package/dist/boot/memory-boundary.js +10 -20
  28. package/dist/boot/memory-consolidation.d.ts +15 -11
  29. package/dist/boot/memory-consolidation.js +25 -14
  30. package/dist/boot/resolve-spec.d.ts +4 -6
  31. package/dist/boot/resolve-spec.js +10 -13
  32. package/dist/boot/retention-lane.d.ts +5 -5
  33. package/dist/boot/retention-lane.js +0 -6
  34. package/dist/boot/runner-deps.d.ts +6 -4
  35. package/dist/boot/runner-deps.js +3 -1
  36. package/dist/boot/session-faces.d.ts +0 -3
  37. package/dist/boot/session-faces.js +15 -8
  38. package/dist/boot/stage-02-web-admin-pull.js +2 -2
  39. package/dist/boot/stage-03-store-backend.d.ts +2 -6
  40. package/dist/boot/stage-03-store-backend.js +2 -3
  41. package/dist/boot/stage-04-stores.d.ts +2 -6
  42. package/dist/boot/stage-04-stores.js +5 -5
  43. package/dist/boot/stage-05-execution-env.d.ts +2 -6
  44. package/dist/boot/stage-05-execution-env.js +2 -2
  45. package/dist/boot/stage-06-runners.d.ts +2 -6
  46. package/dist/boot/stage-06-runners.js +2 -3
  47. package/dist/boot/stage-07-capability-layer.d.ts +2 -6
  48. package/dist/boot/stage-08-reapers.d.ts +2 -6
  49. package/dist/boot/stage-09-leader.d.ts +2 -6
  50. package/dist/boot/stage-09-leader.js +1 -2
  51. package/dist/boot/stage-10-http-server.d.ts +2 -6
  52. package/dist/boot/stage-10-http-server.js +7 -6
  53. package/dist/boot/stores.d.ts +3 -6
  54. package/dist/boot/stores.js +27 -40
  55. package/dist/boot/task-list-lane.d.ts +1 -1
  56. package/dist/boot/task-list-lane.js +1 -1
  57. package/dist/boot/web-admin.js +37 -11
  58. package/dist/capabilities/execution-lane.d.ts +2 -2
  59. package/dist/capabilities/mcp-probe.js +1 -1
  60. package/dist/capabilities/scenarios.d.ts +1 -1
  61. package/dist/capability-facts.d.ts +15 -7
  62. package/dist/capability-facts.js +8 -3
  63. package/dist/config-catalog.js +9 -8
  64. package/dist/config-invariants.d.ts +23 -3
  65. package/dist/config-invariants.js +42 -0
  66. package/dist/config-provider.d.ts +33 -37
  67. package/dist/config-provider.js +51 -30
  68. package/dist/config-types.d.ts +21 -7
  69. package/dist/config.d.ts +33 -0
  70. package/dist/config.js +46 -16
  71. package/dist/delegated-session-owner.d.ts +4 -3
  72. package/dist/delegated-session-owner.js +1 -1
  73. package/dist/deployment-shape.d.ts +10 -9
  74. package/dist/deployment-shape.js +4 -4
  75. package/dist/device-enrollment.d.ts +41 -2
  76. package/dist/device-enrollment.js +27 -12
  77. package/dist/device-store.d.ts +58 -85
  78. package/dist/device-store.js +19 -49
  79. package/dist/device-ws-hub.js +2 -1
  80. package/dist/env-name-allowlist-knobs.d.ts +5 -4
  81. package/dist/exec-cut.d.ts +60 -0
  82. package/dist/exec-cut.js +36 -0
  83. package/dist/execution-lane-caps.d.ts +115 -105
  84. package/dist/execution-lane-caps.js +76 -82
  85. package/dist/execution-placement.d.ts +259 -0
  86. package/dist/execution-placement.js +199 -0
  87. package/dist/field-conflict.d.ts +3 -2
  88. package/dist/field-conflict.js +1 -0
  89. package/dist/hosted-posture.d.ts +2 -2
  90. package/dist/http/admission.js +8 -19
  91. package/dist/http/checkpoint-ctx.d.ts +21 -12
  92. package/dist/http/checkpoint-ctx.js +4 -2
  93. package/dist/http/claimed-run.d.ts +1 -1
  94. package/dist/http/durable-run-leg.js +9 -5
  95. package/dist/http/execution-context.d.ts +218 -0
  96. package/dist/http/execution-context.js +330 -0
  97. package/dist/http/memory-compliance-failure-reply.d.ts +3 -1
  98. package/dist/http/memory-compliance-failure-reply.js +5 -0
  99. package/dist/http/memory-layer-reply.d.ts +30 -0
  100. package/dist/http/memory-layer-reply.js +24 -0
  101. package/dist/http/resume-legs.js +63 -36
  102. package/dist/http/retired-service-deps.d.ts +1 -1
  103. package/dist/http/retired-service-deps.js +1 -1
  104. package/dist/http/route-ctx.d.ts +14 -8
  105. package/dist/http/routes/adoption.js +1 -1
  106. package/dist/http/routes/background.d.ts +29 -1
  107. package/dist/http/routes/background.js +29 -2
  108. package/dist/http/routes/devices.d.ts +13 -19
  109. package/dist/http/routes/devices.js +21 -26
  110. package/dist/http/routes/memory-bundle.js +3 -0
  111. package/dist/http/routes/memory-compliance.js +8 -1
  112. package/dist/http/routes/memory-consolidation.js +12 -1
  113. package/dist/http/routes/memory-origin.js +14 -2
  114. package/dist/http/routes/memory-policy.js +5 -0
  115. package/dist/http/routes/session-sync.js +110 -15
  116. package/dist/http/routes/sessions.d.ts +6 -0
  117. package/dist/http/routes/sessions.js +143 -22
  118. package/dist/http/routes/side-query.d.ts +12 -4
  119. package/dist/http/routes/side-query.js +4 -5
  120. package/dist/http/routes/tasks.js +41 -33
  121. package/dist/http/server.d.ts +40 -44
  122. package/dist/http/server.js +13 -2
  123. package/dist/http/session-inherit-env.d.ts +3 -4
  124. package/dist/http/session-inherit-env.js +1 -1
  125. package/dist/http/wire-types.d.ts +8 -12
  126. package/dist/identity-source.d.ts +1 -1
  127. package/dist/identity-source.js +1 -1
  128. package/dist/index.d.ts +1 -0
  129. package/dist/lane-home-probe.d.ts +68 -42
  130. package/dist/lane-home-probe.js +53 -30
  131. package/dist/leader/wire.js +5 -4
  132. package/dist/memory-bundle-engine.d.ts +16 -9
  133. package/dist/memory-bundle-engine.js +29 -6
  134. package/dist/memory-operator-faces.d.ts +85 -30
  135. package/dist/memory-operator-faces.js +136 -30
  136. package/dist/memory-project-layer.d.ts +3 -21
  137. package/dist/memory-project-layer.js +11 -8
  138. package/dist/memory-scope-stores.d.ts +73 -0
  139. package/dist/memory-scope-stores.js +86 -0
  140. package/dist/memory-scope.d.ts +29 -5
  141. package/dist/memory-scope.js +16 -4
  142. package/dist/memory-sync-client.d.ts +70 -18
  143. package/dist/memory-sync-client.js +215 -117
  144. package/dist/memory-sync.d.ts +1 -1
  145. package/dist/memory-sync.js +3 -2
  146. package/dist/observability/cost-taxonomy.d.ts +2 -2
  147. package/dist/observability/fail-open.d.ts +12 -0
  148. package/dist/observability/fail-open.js +12 -0
  149. package/dist/observability/run-terminal.js +0 -1
  150. package/dist/orchestration/workflow-notify-journal.js +4 -4
  151. package/dist/org-memory-admission.d.ts +4 -3
  152. package/dist/org-memory-admission.js +6 -6
  153. package/dist/parked-decide.d.ts +34 -9
  154. package/dist/parked-decide.js +12 -19
  155. package/dist/parked-revive-surface.d.ts +12 -15
  156. package/dist/parked-revive-surface.js +3 -6
  157. package/dist/peer-seat.d.ts +13 -7
  158. package/dist/peer-seat.js +37 -3
  159. package/dist/plugins/adoption-log-sql.js +4 -4
  160. package/dist/plugins/approval-ask-store-file.d.ts +7 -0
  161. package/dist/plugins/approval-ask-store-file.js +11 -0
  162. package/dist/plugins/approval-ask-store-memory.d.ts +6 -0
  163. package/dist/plugins/approval-ask-store-memory.js +12 -0
  164. package/dist/plugins/approval-ask-store-sql.d.ts +22 -5
  165. package/dist/plugins/approval-ask-store-sql.js +44 -26
  166. package/dist/plugins/approval-nonce-store.js +4 -4
  167. package/dist/plugins/blob-backend.d.ts +4 -4
  168. package/dist/plugins/blob-backend.js +7 -7
  169. package/dist/plugins/breaker-state-sql.js +2 -2
  170. package/dist/plugins/caching-session-store.d.ts +6 -2
  171. package/dist/plugins/caching-session-store.js +9 -3
  172. package/dist/plugins/checkpoint-index-columns.js +2 -2
  173. package/dist/plugins/checkpoint-store-sql.d.ts +6 -5
  174. package/dist/plugins/checkpoint-store-sql.js +21 -23
  175. package/dist/plugins/device-store-sql.d.ts +25 -51
  176. package/dist/plugins/device-store-sql.js +68 -122
  177. package/dist/plugins/ensure-index.d.ts +1 -2
  178. package/dist/plugins/execution-placement-sql.d.ts +151 -0
  179. package/dist/plugins/execution-placement-sql.js +223 -0
  180. package/dist/plugins/file-history-store-sql.d.ts +9 -8
  181. package/dist/plugins/file-history-store-sql.js +9 -9
  182. package/dist/plugins/file-run-store.d.ts +6 -1
  183. package/dist/plugins/file-run-store.js +4 -0
  184. package/dist/plugins/fork-routing-session-store.d.ts +6 -0
  185. package/dist/plugins/fork-routing-session-store.js +16 -0
  186. package/dist/plugins/image-bake-store-sql.js +9 -9
  187. package/dist/plugins/image-index-sql.js +11 -11
  188. package/dist/plugins/leader-run-store-sql.js +4 -4
  189. package/dist/plugins/local-session-store.d.ts +149 -50
  190. package/dist/plugins/local-session-store.js +382 -107
  191. package/dist/plugins/mailbox-store-sql.d.ts +2 -1
  192. package/dist/plugins/mailbox-store-sql.js +4 -4
  193. package/dist/plugins/memory-engine-tidb.js +5 -5
  194. package/dist/plugins/memory-key-guards.d.ts +4 -0
  195. package/dist/plugins/memory-key-guards.js +1 -0
  196. package/dist/plugins/memory-optout-grant-store-sql.js +1 -1
  197. package/dist/plugins/memory-run-store.d.ts +1 -1
  198. package/dist/plugins/memory-sync-store-tidb.js +3 -3
  199. package/dist/plugins/one-time-migrations.d.ts +117 -8
  200. package/dist/plugins/one-time-migrations.js +408 -38
  201. package/dist/plugins/org-delivery-quota-store.js +2 -2
  202. package/dist/plugins/outcome-ledger-sql.d.ts +2 -2
  203. package/dist/plugins/outcome-ledger-sql.js +2 -2
  204. package/dist/plugins/permission-rule-store-sql.d.ts +17 -19
  205. package/dist/plugins/permission-rule-store-sql.js +29 -32
  206. package/dist/plugins/pg-pool.d.ts +7 -3
  207. package/dist/plugins/pg-session-storage.d.ts +31 -20
  208. package/dist/plugins/pg-session-storage.js +120 -52
  209. package/dist/plugins/remote-env-adb.d.ts +18 -19
  210. package/dist/plugins/remote-env-adb.js +91 -66
  211. package/dist/plugins/remote-env-device.d.ts +23 -31
  212. package/dist/plugins/remote-env-device.js +19 -17
  213. package/dist/plugins/remote-env-e2b.d.ts +27 -21
  214. package/dist/plugins/remote-env-e2b.js +91 -45
  215. package/dist/plugins/remote-env-file-error.d.ts +3 -1
  216. package/dist/plugins/remote-env-file-error.js +9 -3
  217. package/dist/plugins/remote-env-host.d.ts +31 -34
  218. package/dist/plugins/remote-env-host.js +91 -72
  219. package/dist/plugins/remote-env-k8s.d.ts +13 -29
  220. package/dist/plugins/remote-env-k8s.js +63 -55
  221. package/dist/plugins/remote-env-local-docker.d.ts +24 -12
  222. package/dist/plugins/remote-env-local-docker.js +49 -61
  223. package/dist/plugins/remote-env-ssh.d.ts +11 -19
  224. package/dist/plugins/remote-env-ssh.js +74 -57
  225. package/dist/plugins/remote-shell.d.ts +100 -3
  226. package/dist/plugins/remote-shell.js +166 -2
  227. package/dist/plugins/resume-anchor-store-sql.js +2 -2
  228. package/dist/plugins/retention-lane-store-sql.d.ts +1 -1
  229. package/dist/plugins/retention-lane-store-sql.js +2 -2
  230. package/dist/plugins/retention-store-sql.d.ts +10 -7
  231. package/dist/plugins/retention-store-sql.js +13 -7
  232. package/dist/plugins/run-store-sql.d.ts +13 -3
  233. package/dist/plugins/run-store-sql.js +20 -15
  234. package/dist/plugins/schema-consistency.d.ts +21 -11
  235. package/dist/plugins/schema-consistency.js +15 -9
  236. package/dist/plugins/schema-drift-sentence.d.ts +27 -0
  237. package/dist/plugins/schema-drift-sentence.js +38 -0
  238. package/dist/plugins/schema-ensure-legs.d.ts +2 -3
  239. package/dist/plugins/schema-ensure-legs.js +2 -2
  240. package/dist/plugins/schema-live-columns.d.ts +1 -1
  241. package/dist/plugins/session-capture-record-store-sql.js +1 -1
  242. package/dist/plugins/session-fork.d.ts +54 -0
  243. package/dist/plugins/session-fork.js +38 -1
  244. package/dist/plugins/session-row-sql.d.ts +22 -0
  245. package/dist/plugins/session-row-sql.js +81 -0
  246. package/dist/plugins/session-rules-column.d.ts +1 -1
  247. package/dist/plugins/session-rules-column.js +1 -1
  248. package/dist/plugins/session-store.d.ts +1 -1
  249. package/dist/plugins/session-workspace-cell.d.ts +1 -1
  250. package/dist/plugins/session-workspace-cell.js +1 -1
  251. package/dist/plugins/shared-memory-store-sql.js +2 -2
  252. package/dist/plugins/sql-driver.d.ts +10 -5
  253. package/dist/plugins/sql-driver.js +6 -6
  254. package/dist/plugins/sql-errors.js +1 -1
  255. package/dist/plugins/store-backend.d.ts +5 -7
  256. package/dist/plugins/store-backend.js +23 -11
  257. package/dist/plugins/store-contracts.d.ts +25 -5
  258. package/dist/plugins/task-list-store-sql.js +11 -11
  259. package/dist/plugins/tidb-pool.d.ts +12 -7
  260. package/dist/plugins/tidb-pool.js +13 -7
  261. package/dist/plugins/tidb-session-storage.js +4 -4
  262. package/dist/plugins/tidb-session-store.d.ts +57 -26
  263. package/dist/plugins/tidb-session-store.js +127 -59
  264. package/dist/plugins/tool-result-store-sql.d.ts +5 -4
  265. package/dist/plugins/tool-result-store-sql.js +21 -13
  266. package/dist/plugins/user-input-ledger-sql.js +2 -2
  267. package/dist/plugins/workflow-journal-store-sql.js +5 -5
  268. package/dist/plugins/workflow-run-store-sql.js +19 -19
  269. package/dist/plugins/write-behind-counter.d.ts +2 -3
  270. package/dist/plugins/write-behind-counter.js +5 -5
  271. package/dist/project-memory.d.ts +9 -15
  272. package/dist/project-memory.js +5 -4
  273. package/dist/request-key-closure.js +1 -1
  274. package/dist/request-value-closure.d.ts +6 -7
  275. package/dist/request-value-closure.js +1 -3
  276. package/dist/resource-suspend.d.ts +14 -12
  277. package/dist/resource-suspend.js +1 -1
  278. package/dist/resource-window.d.ts +4 -3
  279. package/dist/run-local.d.ts +6 -0
  280. package/dist/run-local.js +34 -35
  281. package/dist/runs.d.ts +10 -5
  282. package/dist/runs.js +52 -66
  283. package/dist/security.d.ts +38 -12
  284. package/dist/security.js +8 -2
  285. package/dist/server-secret-env.d.ts +9 -5
  286. package/dist/session-children-retire.d.ts +27 -9
  287. package/dist/session-children-retire.js +9 -5
  288. package/dist/session-incarnation.d.ts +20 -10
  289. package/dist/session-incarnation.js +5 -3
  290. package/dist/session-policy-wire.d.ts +1 -1
  291. package/dist/session-row.d.ts +114 -5
  292. package/dist/session-row.js +55 -5
  293. package/dist/session-titler.d.ts +2 -2
  294. package/dist/sql-engine-posture.d.ts +1 -1
  295. package/dist/sql-engine-posture.js +1 -1
  296. package/dist/{plugins → stores-sql}/background-agent-store-sql.d.ts +2 -2
  297. package/dist/{plugins → stores-sql}/background-agent-store-sql.js +8 -8
  298. package/dist/{plugins → stores-sql}/session-policy-store-sql.d.ts +7 -5
  299. package/dist/{plugins → stores-sql}/session-policy-store-sql.js +12 -12
  300. package/dist/{plugins → stores-sql}/usage-window-store-sql.d.ts +1 -1
  301. package/dist/{plugins → stores-sql}/usage-window-store-sql.js +3 -3
  302. package/dist/task-a2a.d.ts +1 -1
  303. package/dist/task-a2a.js +5 -6
  304. package/dist/task-cwd.d.ts +6 -1
  305. package/dist/task-mcp.d.ts +22 -9
  306. package/dist/task-mcp.js +17 -9
  307. package/dist/terminal.d.ts +27 -0
  308. package/dist/terminal.js +6 -0
  309. package/dist/tool-approval.d.ts +6 -0
  310. package/dist/tool-approval.js +8 -1
  311. package/dist/trace/project.d.ts +1 -0
  312. package/dist/trace/project.js +1 -0
  313. package/dist/trace/redact.d.ts +3 -1
  314. package/dist/trace/redact.js +80 -28
  315. package/dist/trace/self-minted-wire.d.ts +169 -2
  316. package/dist/trace/self-minted-wire.js +54 -1
  317. package/dist/url-refusal.d.ts +1 -1
  318. package/dist/web-admin-client/apply-effective.d.ts +17 -3
  319. package/dist/web-admin-client/apply-effective.js +20 -10
  320. package/dist/web-admin-client/candidate-gate.d.ts +11 -7
  321. package/dist/web-admin-client/candidate-gate.js +1 -1
  322. package/dist/web-admin-client/http-client.d.ts +5 -4
  323. package/dist/web-admin-client/http-client.js +2 -2
  324. package/dist/web-admin-client/read-warnings.d.ts +7 -17
  325. package/dist/web-admin-client/read-warnings.js +5 -9
  326. package/dist/web-admin-client/skills-mcp.js +3 -2
  327. package/dist/web-admin-client/types.d.ts +6 -0
  328. package/package.json +3 -3
  329. package/wire-changes/server@7.139.0.json +348 -0
  330. package/wire-changes/server@7.140.0.json +184 -0
  331. package/dist/http/device-placement.d.ts +0 -175
  332. package/dist/http/device-placement.js +0 -145
@@ -1,26 +1,22 @@
1
1
  import { z } from "zod";
2
2
  import { DROPPED_ENTRY_REASON_CODES, ModelRole, RETIRED_DOMAINS, RetiredDomainError, formatConfigPath, isDisclosableIdentity, isRetiredDomainName, refuseRetiredDomain, renderQuotedSentence, } from "@sema-agent/settings-schema";
3
- export function retiredDomainFindingOf(e) {
4
- return e instanceof RetiredDomainError ? { domain: e.domain, error: e.message, migration: e.migration } : undefined;
5
- }
6
3
  export function separateRetiredDomains(body) {
7
4
  if (body === null || typeof body !== "object" || Array.isArray(body))
8
- return { body, retiredDomains: [] };
9
- const findings = [];
5
+ return { body, refusedDocuments: [] };
6
+ const refused = [];
10
7
  const rest = { ...body };
11
8
  for (const domain of Object.keys(RETIRED_DOMAINS).filter(isRetiredDomainName)) {
12
9
  try {
13
10
  refuseRetiredDomain(domain, rest[domain]);
14
11
  }
15
12
  catch (e) {
16
- const finding = retiredDomainFindingOf(e);
17
- if (finding === undefined)
13
+ if (!(e instanceof RetiredDomainError))
18
14
  throw e;
19
- findings.push(finding);
15
+ refused.push({ document: e.domain, reason: "retired_domain", error: e.message, migration: e.migration });
20
16
  delete rest[domain];
21
17
  }
22
18
  }
23
- return findings.length === 0 ? { body, retiredDomains: [] } : { body: rest, retiredDomains: findings };
19
+ return refused.length === 0 ? { body, refusedDocuments: [] } : { body: rest, refusedDocuments: refused };
24
20
  }
25
21
  export function buildUnreadConfigKeyFields(k, dir) {
26
22
  return {
@@ -174,12 +174,13 @@ export function resolveMcpServers(mcp, desk, rosterLease, logger) {
174
174
  continue;
175
175
  }
176
176
  const sessionMetaKey = metaKey.key === undefined ? {} : { sessionMetaKey: metaKey.key };
177
+ const startupTimeout = s.startupTimeoutMs === undefined ? {} : { startupTimeoutMs: s.startupTimeoutMs };
177
178
  if (s.transport.kind === "stdio") {
178
179
  const env = resolveRefs(s.transport.envRefs, s.name, "env", logger);
179
180
  if (env === null)
180
181
  continue;
181
182
  const draft = {
182
- spec: { name: s.name, transport: { kind: "stdio", command: s.transport.command, args: s.transport.args }, ...allow, ...elicit, ...contentOrigin, ...source, ...toolFaces, ...toolAxes, ...sessionMetaKey },
183
+ spec: { name: s.name, transport: { kind: "stdio", command: s.transport.command, args: s.transport.args }, ...allow, ...elicit, ...contentOrigin, ...source, ...toolFaces, ...toolAxes, ...sessionMetaKey, ...startupTimeout },
183
184
  pieces: env,
184
185
  };
185
186
  out.push({ scenarios: s.scenarios ?? [], spec: mintDeclaration(desk, draft, rosterLease) });
@@ -191,7 +192,7 @@ export function resolveMcpServers(mcp, desk, rosterLease, logger) {
191
192
  if (withholdsMcpAssertionHeader(s.transport.assertionHeader))
192
193
  noteMcpAssertionHeaderNotSent(logger, s.name);
193
194
  const draft = {
194
- spec: { name: s.name, transport: { kind: "http", url: s.transport.url, ...(s.transport.principalHeader ? { principalHeader: s.transport.principalHeader } : {}) }, ...allow, ...elicit, ...contentOrigin, ...source, ...toolFaces, ...toolAxes, ...sessionMetaKey },
195
+ spec: { name: s.name, transport: { kind: "http", url: s.transport.url, ...(s.transport.principalHeader ? { principalHeader: s.transport.principalHeader } : {}) }, ...allow, ...elicit, ...contentOrigin, ...source, ...toolFaces, ...toolAxes, ...sessionMetaKey, ...startupTimeout },
195
196
  pieces: headers,
196
197
  };
197
198
  out.push({ scenarios: s.scenarios ?? [], spec: mintDeclaration(desk, draft, rosterLease) });
@@ -175,6 +175,12 @@ export interface CenterMcpServer {
175
175
  * 承载形 `unknown`(与 {@link CenterMcpServer.toolAxes} 同姿):判官只有引擎根导出的 `judgeSessionMetaKey`(`resolveMcpServers` 在铸 spec 那一刻问它;坏形整条 server 不进)。
176
176
  */
177
177
  sessionMetaKey?: unknown;
178
+ /**
179
+ * core 7.52.0 `McpServerSpec.startupTimeoutMs`(settings-schema 14.8.0 起解析透明)—— 这台服务器握手(连接 + initialize)与首次工具列举各带的启动界(整数毫秒),缺席读进程级缺省界;只界启动阶段,不动单次调用的超时。
180
+ * 承载形 `unknown`(与 {@link CenterMcpServer.sessionMetaKey} 同姿):是不是数、整数性、范围只有一只判官 —— 引擎根导出的 `mcpStartupTimeoutMs`,在**拨号时**判,
181
+ * 不合 ⇒ 拒这一台服务器的拨号(兄弟照挂)、点名 `config.mcp_startup_timeout_invalid`;本仓只承运,不判(判了就是第二只判官)。
182
+ */
183
+ startupTimeoutMs?: unknown;
178
184
  transport: {
179
185
  kind: "stdio";
180
186
  command: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/server",
3
- "version": "7.138.0",
3
+ "version": "7.140.0",
4
4
  "description": "Sema Server — the server/API implementation layer for Sema, wiring core, registry, model providers, and cloud agent execution. Built on @sema-agent/core.",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",
@@ -69,8 +69,8 @@
69
69
  "build:binary:run-local:darwin-arm64": "bun build --compile --target=bun-darwin-arm64 src/run-local.ts --outfile dist/run-local-darwin-arm64"
70
70
  },
71
71
  "dependencies": {
72
- "@sema-agent/core": "7.59.0",
73
- "@sema-agent/settings-schema": "14.7.0",
72
+ "@sema-agent/core": "7.60.0",
73
+ "@sema-agent/settings-schema": "15.2.0",
74
74
  "e2b": "^2.28.0",
75
75
  "libsodium-wrappers": "^0.8.4",
76
76
  "mysql2": "^3.22.4",
@@ -0,0 +1,348 @@
1
+ {
2
+ "repo": "server",
3
+ "version": "7.139.0",
4
+ "from": "v7.138.0",
5
+ "fromCommit": "8b41148fef6d0d0c316c0e963efec70714a24e98",
6
+ "to": "v7.139.0",
7
+ "generator": "scripts/wire-changes-server.mjs",
8
+ "sources": [
9
+ "docs/ASSISTANT-WIRE-CONTRACT.md#A.1",
10
+ "docs/ASSISTANT-WIRE-CONTRACT.md#A.1b",
11
+ "docs/ASSISTANT-WIRE-CONTRACT.md#B.1",
12
+ "docs/ASSISTANT-WIRE-CONTRACT.md#B.1a",
13
+ "docs/ASSISTANT-WIRE-CONTRACT.md#B.2b",
14
+ "docs/ASSISTANT-WIRE-CONTRACT.md#B.2",
15
+ "docs/ASSISTANT-WIRE-CONTRACT.md#D.3",
16
+ "src/trace/wire-projection-faces.ts",
17
+ "src/trace/self-minted-wire.ts",
18
+ "node_modules/@sema-agent/core/wire-changes"
19
+ ],
20
+ "added": [
21
+ {
22
+ "id": "A1",
23
+ "source": "errorCode",
24
+ "member": "conflict.fork_id_taken",
25
+ "text": "附录 A.1 / A.1b 错误码新增 `conflict.fork_id_taken`(状态码 409)"
26
+ },
27
+ {
28
+ "id": "A2",
29
+ "source": "errorCode",
30
+ "member": "conflict.fork_in_progress",
31
+ "text": "附录 A.1 / A.1b 错误码新增 `conflict.fork_in_progress`(状态码 409)"
32
+ },
33
+ {
34
+ "id": "A3",
35
+ "source": "errorCode",
36
+ "member": "conflict.session_mirror",
37
+ "text": "附录 A.1 / A.1b 错误码新增 `conflict.session_mirror`(状态码 409)"
38
+ },
39
+ {
40
+ "id": "A4",
41
+ "source": "errorCode",
42
+ "member": "conflict.session_row_changed",
43
+ "text": "附录 A.1 / A.1b 错误码新增 `conflict.session_row_changed`(状态码 409)"
44
+ },
45
+ {
46
+ "id": "A5",
47
+ "source": "errorCode",
48
+ "member": "conflict.session_writer",
49
+ "text": "附录 A.1 / A.1b 错误码新增 `conflict.session_writer`(状态码 409)"
50
+ },
51
+ {
52
+ "id": "A6",
53
+ "source": "errorCode",
54
+ "member": "execution_lane.not_served",
55
+ "text": "附录 A.1 / A.1b 错误码新增 `execution_lane.not_served`(状态码 409)"
56
+ },
57
+ {
58
+ "id": "A7",
59
+ "source": "errorCode",
60
+ "member": "execution_lane.tree_bound",
61
+ "text": "附录 A.1 / A.1b 错误码新增 `execution_lane.tree_bound`(状态码 409)"
62
+ },
63
+ {
64
+ "id": "A8",
65
+ "source": "errorCode",
66
+ "member": "state.fork_target_unsettled",
67
+ "text": "附录 A.1 / A.1b 错误码新增 `state.fork_target_unsettled`(状态码 503)"
68
+ },
69
+ {
70
+ "id": "A9",
71
+ "source": "selfMinted.endpointFaceStatus",
72
+ "member": "PATCH /v1/sessions/:id#expectedRowTag_current(行仍在那只标签上;体 = 列表行)",
73
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `PATCH /v1/sessions/:id#expectedRowTag_current(行仍在那只标签上;体 = 列表行)`(属性 200;since 7.139.0 = 本版新上 wire)"
74
+ },
75
+ {
76
+ "id": "A10",
77
+ "source": "selfMinted.endpointFaceStatus",
78
+ "member": "PATCH /v1/sessions/:id#expectedRowTag_stale(行已不在那只标签上;体 conflict.session_row_changed + currentRow)",
79
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `PATCH /v1/sessions/:id#expectedRowTag_stale(行已不在那只标签上;体 conflict.session_row_changed + currentRow)`(属性 409;since 7.139.0 = 本版新上 wire)"
80
+ },
81
+ {
82
+ "id": "A11",
83
+ "source": "selfMinted.endpointFaceStatus",
84
+ "member": "PATCH /v1/sessions/:id#mirror_row(只读镜像行上的写,带不带 expectedRowTag;体 conflict.session_mirror + forkPath)",
85
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `PATCH /v1/sessions/:id#mirror_row(只读镜像行上的写,带不带 expectedRowTag;体 conflict.session_mirror + forkPath)`(属性 409;since 7.139.0 = 本版新上 wire)"
86
+ },
87
+ {
88
+ "id": "A12",
89
+ "source": "selfMinted.endpointFaceStatus",
90
+ "member": "PATCH /v1/sessions/:id#owner_changed_after_gate(门那一读之后同一会话的属主被改;体 not_found.session)",
91
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `PATCH /v1/sessions/:id#owner_changed_after_gate(门那一读之后同一会话的属主被改;体 not_found.session)`(属性 404;since 7.139.0 = 本版新上 wire)"
92
+ },
93
+ {
94
+ "id": "A13",
95
+ "source": "selfMinted.endpointFaceStatus",
96
+ "member": "POST /v1/side-query#uncoded_error_with_preflight_prefix(没有引擎码、英文开头与前缀表同形的错误;体 internal.error)",
97
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/side-query#uncoded_error_with_preflight_prefix(没有引擎码、英文开头与前缀表同形的错误;体 internal.error)`(属性 500;since 7.139.0 = 本版新上 wire)"
98
+ },
99
+ {
100
+ "id": "A14",
101
+ "source": "selfMinted.endpointFaceStatus",
102
+ "member": "POST /v1/tasks|/v1/tasks/stream|/v1/runs#rewindFiles(新提交;体 request.body_shape + unknownKeys [rewindFiles])",
103
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/tasks|/v1/tasks/stream|/v1/runs#rewindFiles(新提交;体 request.body_shape + unknownKeys [rewindFiles])`(属性 400;since 7.139.0 = 本版新上 wire)"
104
+ },
105
+ {
106
+ "id": "A15",
107
+ "source": "selfMinted.fieldConflictKind",
108
+ "member": "fork_target",
109
+ "text": "自铸 400 request.field_conflict detail.kind 新增 `fork_target`(属性 -;since 7.139.0 = 本版新上 wire)"
110
+ },
111
+ {
112
+ "id": "A16",
113
+ "source": "selfMinted.refusalSentenceForm",
114
+ "member": "400 request.body_shape#PATCH /v1/sessions/:id",
115
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.body_shape#PATCH /v1/sessions/:id`(属性 the body must be a JSON object carrying at least one of `title` and `pinned` (and, optionally, `expectedRowTag`), and nothing else;since 7.139.0 = 本版新上 wire)"
116
+ },
117
+ {
118
+ "id": "A17",
119
+ "source": "selfMinted.refusalSentenceForm",
120
+ "member": "400 request.field_invalid#PATCH /v1/sessions/:id.expectedRowTag",
121
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `400 request.field_invalid#PATCH /v1/sessions/:id.expectedRowTag`(属性 expectedRowTag must be the `rowTag` string a session list row carries (43 characters: letters, digits, `-` and `_`);since 7.139.0 = 本版新上 wire)"
122
+ },
123
+ {
124
+ "id": "A18",
125
+ "source": "selfMinted.refusalSentenceForm",
126
+ "member": "409 conflict.session_mirror#PATCH /v1/sessions/:id",
127
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `409 conflict.session_mirror#PATCH /v1/sessions/:id`(属性 this session is a read-only mirror of a session whose writer is elsewhere — it cannot be renamed or pinned here; fork it (forkPath) to continue here; nothing was written;since 7.139.0 = 本版新上 wire)"
128
+ },
129
+ {
130
+ "id": "A19",
131
+ "source": "selfMinted.refusalSentenceForm",
132
+ "member": "409 conflict.session_row_changed#PATCH /v1/sessions/:id",
133
+ "text": "自铸 拒体 message 的句型(<码>#<座> → 句型骨架;码 / 状态 / 机读位不变) 新增 `409 conflict.session_row_changed#PATCH /v1/sessions/:id`(属性 the session row changed since the rowTag you sent was read — nothing was written; currentRow is the row as it stands now: decide again, then send its rowTag;since 7.139.0 = 本版新上 wire)"
134
+ },
135
+ {
136
+ "id": "A20",
137
+ "source": "selfMinted.sessionBackgroundRowKey",
138
+ "member": "sessionId",
139
+ "text": "自铸 GET /v1/sessions/:id/background rows[] 行键(<键> → 在场律) 新增 `sessionId`(属性 present-iff background agent row bound to a child session;since 7.139.0 = 本版新上 wire)"
140
+ },
141
+ {
142
+ "id": "A21",
143
+ "source": "selfMinted.sessionRowWriteKey",
144
+ "member": "409 conflict.session_mirror#forkPath",
145
+ "text": "自铸 PATCH /v1/sessions/:id 体受理键与 409 拒体键(<面>#<键> → 读法 / 在场律;只登本版新增的) 新增 `409 conflict.session_mirror#forkPath`(属性 always;since 7.139.0 = 本版新上 wire)"
146
+ },
147
+ {
148
+ "id": "A22",
149
+ "source": "selfMinted.sessionRowWriteKey",
150
+ "member": "409 conflict.session_row_changed#currentRow",
151
+ "text": "自铸 PATCH /v1/sessions/:id 体受理键与 409 拒体键(<面>#<键> → 读法 / 在场律;只登本版新增的) 新增 `409 conflict.session_row_changed#currentRow`(属性 always;since 7.139.0 = 本版新上 wire)"
152
+ },
153
+ {
154
+ "id": "A23",
155
+ "source": "selfMinted.sessionRowWriteKey",
156
+ "member": "body#expectedRowTag",
157
+ "text": "自铸 PATCH /v1/sessions/:id 体受理键与 409 拒体键(<面>#<键> → 读法 / 在场律;只登本版新增的) 新增 `body#expectedRowTag`(属性 optional;43×[A-Za-z0-9_-] else 400 request.field_invalid;alone 400 request.body_shape;stale⇒409 conflict.session_row_changed;since 7.139.0 = 本版新上 wire)"
158
+ },
159
+ {
160
+ "id": "A24",
161
+ "source": "selfMinted.sessionsListRowKey",
162
+ "member": "rowTag",
163
+ "text": "自铸 GET /v1/sessions sessions[] 行键 = PATCH /v1/sessions/:id 200 体 = 409 conflict.session_row_changed currentRow(<键> → 在场律) 新增 `rowTag`(属性 present-iff the row can be written conditionally (the store has the row write primitive and the row carries an incarnation);since 7.139.0 = 本版新上 wire)"
164
+ },
165
+ {
166
+ "id": "A25",
167
+ "source": "selfMinted.wireValueRule",
168
+ "member": "GET /v1/config/catalog#rows[CONFIG_PROVIDER].semantics",
169
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[CONFIG_PROVIDER].semantics`(属性 remote-without-center-url-refuses-boot;since 7.139.0 = 本版新上 wire)"
170
+ },
171
+ {
172
+ "id": "A26",
173
+ "source": "selfMinted.wireValueRule",
174
+ "member": "GET /v1/config/catalog#rows[DOCKER_SANDBOX_ENV].semantics",
175
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[DOCKER_SANDBOX_ENV].semantics`(属性 own-credential-name-refuses-boot;since 7.139.0 = 本版新上 wire)"
176
+ },
177
+ {
178
+ "id": "A27",
179
+ "source": "selfMinted.wireValueRule",
180
+ "member": "GET /v1/config/catalog#rows[E2B_SANDBOX_ENV].semantics",
181
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[E2B_SANDBOX_ENV].semantics`(属性 own-credential-name-refuses-boot;since 7.139.0 = 本版新上 wire)"
182
+ },
183
+ {
184
+ "id": "A28",
185
+ "source": "selfMinted.wireValueRule",
186
+ "member": "GET /v1/config/catalog#rows[K8S_NAMESPACE].semantics",
187
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[K8S_NAMESPACE].semantics`(属性 required-no-default;absent-or-blank-refuses-boot;since 7.139.0 = 本版新上 wire)"
188
+ },
189
+ {
190
+ "id": "A29",
191
+ "source": "selfMinted.wireValueRule",
192
+ "member": "GET /v1/config/catalog#rows[RETENTION_MODE].semantics",
193
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[RETENTION_MODE].semantics`(属性 enforce-without-horizon-or-cadence-refuses-boot;since 7.139.0 = 本版新上 wire)"
194
+ },
195
+ {
196
+ "id": "A30",
197
+ "source": "selfMinted.wireValueRule",
198
+ "member": "GET /v1/config/catalog#rows[RETENTION_SWEEP_INTERVAL_SEC].semantics",
199
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/config/catalog#rows[RETENTION_SWEEP_INTERVAL_SEC].semantics`(属性 cadence-without-horizon-refuses-boot;since 7.139.0 = 本版新上 wire)"
200
+ },
201
+ {
202
+ "id": "A31",
203
+ "source": "wireFace.coreKey",
204
+ "member": "status.seat",
205
+ "text": "投影面 status 新投 core 新键 seat(core 7.60.0 新增,面表没有把它登记进 excluded ⇒ 默认上 wire)"
206
+ }
207
+ ],
208
+ "registered": [],
209
+ "excluded": [],
210
+ "removed": [],
211
+ "changed": [
212
+ {
213
+ "id": "C1",
214
+ "source": "engineNotice",
215
+ "member": "delegation.ask_unresolvable",
216
+ "text": "附录 D.3 engine_notice 码 `delegation.ask_unresolvable` 的detail:`{ sessionId, toolName, toolCallId, cause, parkLaneExisted }` —— `sessionId` 在 core 侧是 **REQUIRED** typed 键(委派子代上是**子代**的 session,归属标按 `fromSubagent`/`sourceTaskId` 同路);🔴 **`cause`(7.74.0 / core 7.17.0 [ref]② 起;旧名 `settlementKind` 已随该版**退役**,读它恒 `undefined`,无别名无双读)闭三词** `approver_unavailable`(被咨询的席答了 unavailable,其后无 park 接住)/ `no_approver_wired`(这条腿压根没接审批席或问答面,含 headless 的 `\"deny\"` 姿态)/ `mandate_unreconstructible`(祖先绑的 durable mandate 在这条腿上没有 park 设施可兑现 ⇒ 委派子代折内拒),逐字透传不窄化(词表属主在 core);`toolCallId` 与 `tool_approval` 卡帧同值可 join。🔴 **`remedies`(core 7.56.0;server 7.137.0 起过境)= 出路的数据形**:闭集 `approver` / `permission_mode` 上的非空表,恰在 `remedy`(无人可问的那一句)在场时带 —— `{ kind: \"approver\" }`(句子已说的那条:接一个审批席 / 让接着的那个能答)与 `{ kind: \"permission_mode\", value: \"bypassPermissions\", disclosedOn: \"gate.disposition.released\" }`(只在两臂上:模式放行这一问,放行披露在那只调用的 `tool_end.gate.disposition.released`)。`detail.remedies` 由宿主按 `kind` 渲染(或不渲染;`permission_mode` 是宿主只在运维放开该模式时才可提的出路,旁边带上 `disclosedOn` 指的披露),**server 只透传、不改写、不补句**;闭集外的 `kind` 属于更新的引擎,忽略。用户读的 `message` / `remedy` 自 core 7.56.0 起**不再教** `bypassPermissions`(那条出路只在 `remedies` 里) → `{ sessionId, toolName, toolCallId, cause, parkLaneExisted }` —— `sessionId` 在 core 侧是 **REQUIRED** typed 键 = 被拒那只调用**所在腿**的会话(委派子代上是**子代自己的** session);本服务按这一个键投给该会话**当前登记的腿**,不经 `fromSubagent` / `sourceTaskId`(那两键属于审批卡帧,不在本码 `detail` 上)转投父会话 —— 同步委派子代的会话本服务不登记腿,于是子代上的这一条今天**不上任何会话流**,只落运维日志行;父会话可见要等引擎为本码另铸父会话副本(`detail.sessionId` = 父会话 + `childSessionId`,`task.user_steer_undrained` 的同形先例),届时本服务零改动承载;🔴 **`cause`(7.74.0 / core 7.17.0 [ref]② 起;旧名 `settlementKind` 已随该版**退役**,读它恒 `undefined`,无别名无双读)闭三词** `approver_unavailable`(被咨询的席答了 unavailable,其后无 park 接住)/ `no_approver_wired`(这条腿压根没接审批席或问答面,含 headless 的 `\"deny\"` 姿态)/ `mandate_unreconstructible`(祖先绑的 durable mandate 在这条腿上没有 park 设施可兑现 ⇒ 委派子代折内拒),逐字透传不窄化(词表属主在 core);`toolCallId` 与 `tool_approval` 卡帧同值可 join。🔴 **`remedies`(core 7.56.0;server 7.137.0 起过境)= 出路的数据形**:闭集 `approver` / `permission_mode` 上的非空表,恰在 `remedy`(无人可问的那一句)在场时带 —— `{ kind: \"approver\" }`(句子已说的那条:接一个审批席 / 让接着的那个能答)与 `{ kind: \"permission_mode\", value: \"bypassPermissions\", disclosedOn: \"gate.disposition.released\" }`(只在两臂上:模式放行这一问,放行披露在那只调用的 `tool_end.gate.disposition.released`)。`detail.remedies` 由宿主按 `kind` 渲染(或不渲染;`permission_mode` 是宿主只在运维放开该模式时才可提的出路,旁边带上 `disclosedOn` 指的披露),**server 只透传、不改写、不补句**;闭集外的 `kind` 属于更新的引擎,忽略。用户读的 `message` / `remedy` 自 core 7.56.0 起**不再教** `bypassPermissions`(那条出路只在 `remedies` 里)"
217
+ },
218
+ {
219
+ "id": "C2",
220
+ "source": "selfMinted.wireValueRule",
221
+ "member": "GET /v1/config/catalog#rows[K8S_SANDBOX_ENV].semantics",
222
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) `GET /v1/config/catalog#rows[K8S_SANDBOX_ENV].semantics` 的属性:values-only-in-the-pod-own-secret;role-needs-secrets-create;denied-refuses-boot → values-only-in-the-pod-own-secret;role-needs-secrets-create;denied-refuses-boot;own-credential-name-refuses-boot(since 7.139.0)"
223
+ }
224
+ ],
225
+ "narrowed": [],
226
+ "closedSetMembers": [
227
+ {
228
+ "set": "errorCode",
229
+ "at": [
230
+ "docs/ASSISTANT-WIRE-CONTRACT.md#A.1",
231
+ "docs/ASSISTANT-WIRE-CONTRACT.md#A.1b"
232
+ ],
233
+ "added": [
234
+ "conflict.fork_id_taken",
235
+ "conflict.fork_in_progress",
236
+ "conflict.session_mirror",
237
+ "conflict.session_row_changed",
238
+ "conflict.session_writer",
239
+ "execution_lane.not_served",
240
+ "execution_lane.tree_bound",
241
+ "state.fork_target_unsettled"
242
+ ],
243
+ "registered": [],
244
+ "removed": [],
245
+ "breaking": false
246
+ },
247
+ {
248
+ "set": "selfMinted.endpointFaceStatus",
249
+ "at": [
250
+ "src/trace/self-minted-wire.ts#endpointFaceStatus"
251
+ ],
252
+ "added": [
253
+ "PATCH /v1/sessions/:id#expectedRowTag_current(行仍在那只标签上;体 = 列表行)",
254
+ "PATCH /v1/sessions/:id#expectedRowTag_stale(行已不在那只标签上;体 conflict.session_row_changed + currentRow)",
255
+ "PATCH /v1/sessions/:id#mirror_row(只读镜像行上的写,带不带 expectedRowTag;体 conflict.session_mirror + forkPath)",
256
+ "PATCH /v1/sessions/:id#owner_changed_after_gate(门那一读之后同一会话的属主被改;体 not_found.session)",
257
+ "POST /v1/side-query#uncoded_error_with_preflight_prefix(没有引擎码、英文开头与前缀表同形的错误;体 internal.error)",
258
+ "POST /v1/tasks|/v1/tasks/stream|/v1/runs#rewindFiles(新提交;体 request.body_shape + unknownKeys [rewindFiles])"
259
+ ],
260
+ "registered": [],
261
+ "removed": [],
262
+ "breaking": false
263
+ },
264
+ {
265
+ "set": "selfMinted.fieldConflictKind",
266
+ "at": [
267
+ "src/trace/self-minted-wire.ts#fieldConflictKind"
268
+ ],
269
+ "added": [
270
+ "fork_target"
271
+ ],
272
+ "registered": [],
273
+ "removed": [],
274
+ "breaking": false
275
+ },
276
+ {
277
+ "set": "selfMinted.refusalSentenceForm",
278
+ "at": [
279
+ "src/trace/self-minted-wire.ts#refusalSentenceForm"
280
+ ],
281
+ "added": [
282
+ "400 request.body_shape#PATCH /v1/sessions/:id",
283
+ "400 request.field_invalid#PATCH /v1/sessions/:id.expectedRowTag",
284
+ "409 conflict.session_mirror#PATCH /v1/sessions/:id",
285
+ "409 conflict.session_row_changed#PATCH /v1/sessions/:id"
286
+ ],
287
+ "registered": [],
288
+ "removed": [],
289
+ "breaking": false
290
+ },
291
+ {
292
+ "set": "selfMinted.sessionBackgroundRowKey",
293
+ "at": [
294
+ "src/trace/self-minted-wire.ts#sessionBackgroundRowKey"
295
+ ],
296
+ "added": [
297
+ "sessionId"
298
+ ],
299
+ "registered": [],
300
+ "removed": [],
301
+ "breaking": false
302
+ },
303
+ {
304
+ "set": "selfMinted.sessionRowWriteKey",
305
+ "at": [
306
+ "src/trace/self-minted-wire.ts#sessionRowWriteKey"
307
+ ],
308
+ "added": [
309
+ "409 conflict.session_mirror#forkPath",
310
+ "409 conflict.session_row_changed#currentRow",
311
+ "body#expectedRowTag"
312
+ ],
313
+ "registered": [],
314
+ "removed": [],
315
+ "breaking": false
316
+ },
317
+ {
318
+ "set": "selfMinted.sessionsListRowKey",
319
+ "at": [
320
+ "src/trace/self-minted-wire.ts#sessionsListRowKey"
321
+ ],
322
+ "added": [
323
+ "rowTag"
324
+ ],
325
+ "registered": [],
326
+ "removed": [],
327
+ "breaking": false
328
+ },
329
+ {
330
+ "set": "selfMinted.wireValueRule",
331
+ "at": [
332
+ "src/trace/self-minted-wire.ts#wireValueRule"
333
+ ],
334
+ "added": [
335
+ "GET /v1/config/catalog#rows[CONFIG_PROVIDER].semantics",
336
+ "GET /v1/config/catalog#rows[DOCKER_SANDBOX_ENV].semantics",
337
+ "GET /v1/config/catalog#rows[E2B_SANDBOX_ENV].semantics",
338
+ "GET /v1/config/catalog#rows[K8S_NAMESPACE].semantics",
339
+ "GET /v1/config/catalog#rows[RETENTION_MODE].semantics",
340
+ "GET /v1/config/catalog#rows[RETENTION_SWEEP_INTERVAL_SEC].semantics"
341
+ ],
342
+ "registered": [],
343
+ "removed": [],
344
+ "breaking": false
345
+ }
346
+ ],
347
+ "breaking": 0
348
+ }
@@ -0,0 +1,184 @@
1
+ {
2
+ "repo": "server",
3
+ "version": "7.140.0",
4
+ "from": "v7.139.0",
5
+ "fromCommit": "c00fd6fb591f29cbd4435b9d0af52b4a952dfb95",
6
+ "to": "v7.140.0",
7
+ "generator": "scripts/wire-changes-server.mjs",
8
+ "sources": [
9
+ "docs/ASSISTANT-WIRE-CONTRACT.md#A.1",
10
+ "docs/ASSISTANT-WIRE-CONTRACT.md#A.1b",
11
+ "docs/ASSISTANT-WIRE-CONTRACT.md#B.1",
12
+ "docs/ASSISTANT-WIRE-CONTRACT.md#B.1a",
13
+ "docs/ASSISTANT-WIRE-CONTRACT.md#B.2b",
14
+ "docs/ASSISTANT-WIRE-CONTRACT.md#B.2",
15
+ "docs/ASSISTANT-WIRE-CONTRACT.md#D.3",
16
+ "src/trace/wire-projection-faces.ts",
17
+ "src/trace/self-minted-wire.ts",
18
+ "node_modules/@sema-agent/core/wire-changes"
19
+ ],
20
+ "added": [
21
+ {
22
+ "id": "A1",
23
+ "source": "errorCode",
24
+ "member": "config.read_deny_floor_unkept",
25
+ "text": "附录 A.1 / A.1b 错误码新增 `config.read_deny_floor_unkept`(状态码 409)"
26
+ },
27
+ {
28
+ "id": "A2",
29
+ "source": "errorCode",
30
+ "member": "memory.erasure_store_unjudged",
31
+ "text": "附录 A.1 / A.1b 错误码新增 `memory.erasure_store_unjudged`(状态码 409)"
32
+ },
33
+ {
34
+ "id": "A3",
35
+ "source": "errorCode",
36
+ "member": "request.memory_layer",
37
+ "text": "附录 A.1 / A.1b 错误码新增 `request.memory_layer`(状态码 400)"
38
+ },
39
+ {
40
+ "id": "A4",
41
+ "source": "selfMinted.endpointFaceStatus",
42
+ "member": "GET /v1/memory/entries/:entryId/provenance|POST /v1/memory/erase|GET /v1/memory/origin/clearances|POST /v1/memory/origin/entries/:entryId/clear#layer_unaddressed_two_stores(不点名层的条目 id / 店级账本请求,本部署点名的层分住两只店;体 request.memory_layer)",
43
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `GET /v1/memory/entries/:entryId/provenance|POST /v1/memory/erase|GET /v1/memory/origin/clearances|POST /v1/memory/origin/entries/:entryId/clear#layer_unaddressed_two_stores(不点名层的条目 id / 店级账本请求,本部署点名的层分住两只店;体 request.memory_layer)`(属性 400;since 7.140.0 = 本版新上 wire)"
44
+ },
45
+ {
46
+ "id": "A5",
47
+ "source": "selfMinted.endpointFaceStatus",
48
+ "member": "POST /v1/memory/erase|POST /v1/sessions/:id/memory/erase#erasure_store_unjudged(抹除落到部署的店之外的那只店:点名的层住在个人挂载上,或按会话抹除而这只会话在另一只店有贡献 / 那只店的账读不出;体 memory.erasure_store_unjudged,什么都没删)",
49
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/memory/erase|POST /v1/sessions/:id/memory/erase#erasure_store_unjudged(抹除落到部署的店之外的那只店:点名的层住在个人挂载上,或按会话抹除而这只会话在另一只店有贡献 / 那只店的账读不出;体 memory.erasure_store_unjudged,什么都没删)`(属性 409;since 7.140.0 = 本版新上 wire)"
50
+ },
51
+ {
52
+ "id": "A6",
53
+ "source": "selfMinted.endpointFaceStatus",
54
+ "member": "POST /v1/memory/export|POST /v1/memory/import|GET /v1/memory/origin/external|POST /v1/memory/erase#layers_span_two_stores(请求点名的层分住两只店;体 request.memory_layer)",
55
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `POST /v1/memory/export|POST /v1/memory/import|GET /v1/memory/origin/external|POST /v1/memory/erase#layers_span_two_stores(请求点名的层分住两只店;体 request.memory_layer)`(属性 400;since 7.140.0 = 本版新上 wire)"
56
+ },
57
+ {
58
+ "id": "A7",
59
+ "source": "selfMinted.endpointFaceStatus",
60
+ "member": "记忆诸口 + POST /v1/admin/memory/consolidation/run|GET /v1/admin/memory/consolidation|GET /v1/memory/export|POST /v1/memory/sync/:scope#layer_unreadable(请求点名的层引擎读不出;体 request.memory_layer)",
61
+ "text": "自铸 逐端点应答面 → 状态(<端点>#<面> → 状态;只登记本版改了状态的面) 新增 `记忆诸口 + POST /v1/admin/memory/consolidation/run|GET /v1/admin/memory/consolidation|GET /v1/memory/export|POST /v1/memory/sync/:scope#layer_unreadable(请求点名的层引擎读不出;体 request.memory_layer)`(属性 400;since 7.140.0 = 本版新上 wire)"
62
+ },
63
+ {
64
+ "id": "A8",
65
+ "source": "selfMinted.memoryLayerSeatKey",
66
+ "member": "GET /v1/memory/entries/:entryId/provenance#query.scope",
67
+ "text": "自铸 记忆动词的层座(<端点>#<query | body>.scope → 读法;只登本版新增的) 新增 `GET /v1/memory/entries/:entryId/provenance#query.scope`(属性 optional;non-empty-string else 400 request.field_invalid;names the layer whose store answers;since 7.140.0 = 本版新上 wire)"
68
+ },
69
+ {
70
+ "id": "A9",
71
+ "source": "selfMinted.memoryLayerSeatKey",
72
+ "member": "GET /v1/memory/origin/clearances#query.scope",
73
+ "text": "自铸 记忆动词的层座(<端点>#<query | body>.scope → 读法;只登本版新增的) 新增 `GET /v1/memory/origin/clearances#query.scope`(属性 optional;non-empty-string else 400 request.field_invalid;names the layer whose store answers;since 7.140.0 = 本版新上 wire)"
74
+ },
75
+ {
76
+ "id": "A10",
77
+ "source": "selfMinted.memoryLayerSeatKey",
78
+ "member": "GET /v1/sessions/:id/memory-status#query.scope",
79
+ "text": "自铸 记忆动词的层座(<端点>#<query | body>.scope → 读法;只登本版新增的) 新增 `GET /v1/sessions/:id/memory-status#query.scope`(属性 optional;non-empty-string else 400 request.field_invalid;names the layer whose store answers;absent ⇒ every store of this deployment, folded;cache keyed by (session, store control plane);since 7.140.0 = 本版新上 wire)"
80
+ },
81
+ {
82
+ "id": "A11",
83
+ "source": "selfMinted.memoryLayerSeatKey",
84
+ "member": "POST /v1/memory/origin/entries/:entryId/clear#body.scope",
85
+ "text": "自铸 记忆动词的层座(<端点>#<query | body>.scope → 读法;只登本版新增的) 新增 `POST /v1/memory/origin/entries/:entryId/clear#body.scope`(属性 optional;non-empty-string else 400 request.field_invalid;names the layer whose store answers;not passed to the engine;since 7.140.0 = 本版新上 wire)"
86
+ },
87
+ {
88
+ "id": "A12",
89
+ "source": "selfMinted.memoryLayerSeatKey",
90
+ "member": "POST /v1/sessions/:id/memory/erase#body.scope",
91
+ "text": "自铸 记忆动词的层座(<端点>#<query | body>.scope → 读法;只登本版新增的) 新增 `POST /v1/sessions/:id/memory/erase#body.scope`(属性 optional;non-empty-string else 400 request.field_invalid;names the layer whose store answers;absent ⇒ the deployment's store;selector still minted from the path;since 7.140.0 = 本版新上 wire)"
92
+ },
93
+ {
94
+ "id": "A13",
95
+ "source": "selfMinted.sessionMemoryEraseStatus",
96
+ "member": "memory.erasure_store_unjudged",
97
+ "text": "自铸 POST /v1/sessions/:id/memory/erase(已分类拒 errorCode → HTTP 状态) 新增 `memory.erasure_store_unjudged`(属性 409;since 7.140.0 = 本版新上 wire)"
98
+ },
99
+ {
100
+ "id": "A14",
101
+ "source": "selfMinted.wireValueRule",
102
+ "member": "GET /v1/sessions/:id/memory-status#committedCount|foldedCount|lastCaptureAt|captureOptedOut|optOutSource(不带层座)",
103
+ "text": "自铸 出口值变换(<端点>#<键> → 变换) 新增 `GET /v1/sessions/:id/memory-status#committedCount|foldedCount|lastCaptureAt|captureOptedOut|optOutSource(不带层座)`(属性 fold-across-deployment-stores(sum|max|any-record|absent-if-any-unreadable);one-store⇒identity;since 7.140.0 = 本版新上 wire)"
104
+ }
105
+ ],
106
+ "registered": [],
107
+ "excluded": [],
108
+ "removed": [],
109
+ "changed": [],
110
+ "narrowed": [],
111
+ "closedSetMembers": [
112
+ {
113
+ "set": "errorCode",
114
+ "at": [
115
+ "docs/ASSISTANT-WIRE-CONTRACT.md#A.1",
116
+ "docs/ASSISTANT-WIRE-CONTRACT.md#A.1b"
117
+ ],
118
+ "added": [
119
+ "config.read_deny_floor_unkept",
120
+ "memory.erasure_store_unjudged",
121
+ "request.memory_layer"
122
+ ],
123
+ "registered": [],
124
+ "removed": [],
125
+ "breaking": false
126
+ },
127
+ {
128
+ "set": "selfMinted.endpointFaceStatus",
129
+ "at": [
130
+ "src/trace/self-minted-wire.ts#endpointFaceStatus"
131
+ ],
132
+ "added": [
133
+ "GET /v1/memory/entries/:entryId/provenance|POST /v1/memory/erase|GET /v1/memory/origin/clearances|POST /v1/memory/origin/entries/:entryId/clear#layer_unaddressed_two_stores(不点名层的条目 id / 店级账本请求,本部署点名的层分住两只店;体 request.memory_layer)",
134
+ "POST /v1/memory/erase|POST /v1/sessions/:id/memory/erase#erasure_store_unjudged(抹除落到部署的店之外的那只店:点名的层住在个人挂载上,或按会话抹除而这只会话在另一只店有贡献 / 那只店的账读不出;体 memory.erasure_store_unjudged,什么都没删)",
135
+ "POST /v1/memory/export|POST /v1/memory/import|GET /v1/memory/origin/external|POST /v1/memory/erase#layers_span_two_stores(请求点名的层分住两只店;体 request.memory_layer)",
136
+ "记忆诸口 + POST /v1/admin/memory/consolidation/run|GET /v1/admin/memory/consolidation|GET /v1/memory/export|POST /v1/memory/sync/:scope#layer_unreadable(请求点名的层引擎读不出;体 request.memory_layer)"
137
+ ],
138
+ "registered": [],
139
+ "removed": [],
140
+ "breaking": false
141
+ },
142
+ {
143
+ "set": "selfMinted.memoryLayerSeatKey",
144
+ "at": [
145
+ "src/trace/self-minted-wire.ts#memoryLayerSeatKey"
146
+ ],
147
+ "added": [
148
+ "GET /v1/memory/entries/:entryId/provenance#query.scope",
149
+ "GET /v1/memory/origin/clearances#query.scope",
150
+ "GET /v1/sessions/:id/memory-status#query.scope",
151
+ "POST /v1/memory/origin/entries/:entryId/clear#body.scope",
152
+ "POST /v1/sessions/:id/memory/erase#body.scope"
153
+ ],
154
+ "registered": [],
155
+ "removed": [],
156
+ "breaking": false
157
+ },
158
+ {
159
+ "set": "selfMinted.sessionMemoryEraseStatus",
160
+ "at": [
161
+ "src/trace/self-minted-wire.ts#sessionMemoryEraseStatus"
162
+ ],
163
+ "added": [
164
+ "memory.erasure_store_unjudged"
165
+ ],
166
+ "registered": [],
167
+ "removed": [],
168
+ "breaking": false
169
+ },
170
+ {
171
+ "set": "selfMinted.wireValueRule",
172
+ "at": [
173
+ "src/trace/self-minted-wire.ts#wireValueRule"
174
+ ],
175
+ "added": [
176
+ "GET /v1/sessions/:id/memory-status#committedCount|foldedCount|lastCaptureAt|captureOptedOut|optOutSource(不带层座)"
177
+ ],
178
+ "registered": [],
179
+ "removed": [],
180
+ "breaking": false
181
+ }
182
+ ],
183
+ "breaking": 0
184
+ }