@sema-agent/sdk 0.0.75 → 0.0.76

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 (171) hide show
  1. package/dist/client.d.ts +48 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +55 -2
  4. package/dist/client.js.map +1 -1
  5. package/dist/control-client.d.ts +21 -0
  6. package/dist/control-client.d.ts.map +1 -1
  7. package/dist/control-client.js +42 -1
  8. package/dist/control-client.js.map +1 -1
  9. package/dist/control-types.d.ts +108 -0
  10. package/dist/control-types.d.ts.map +1 -1
  11. package/dist/control-types.js +15 -0
  12. package/dist/control-types.js.map +1 -1
  13. package/dist/errors.d.ts +88 -2
  14. package/dist/errors.d.ts.map +1 -1
  15. package/dist/errors.js +105 -8
  16. package/dist/errors.js.map +1 -1
  17. package/dist/events.d.ts +154 -16
  18. package/dist/events.d.ts.map +1 -1
  19. package/dist/events.js +1 -0
  20. package/dist/events.js.map +1 -1
  21. package/dist/health.d.ts +44 -0
  22. package/dist/health.d.ts.map +1 -1
  23. package/dist/health.js +32 -0
  24. package/dist/health.js.map +1 -1
  25. package/dist/idempotency.d.ts +8 -0
  26. package/dist/idempotency.d.ts.map +1 -1
  27. package/dist/idempotency.js +8 -0
  28. package/dist/idempotency.js.map +1 -1
  29. package/dist/index.d.ts +19 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +13 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/resources/approvals.d.ts +43 -0
  34. package/dist/resources/approvals.d.ts.map +1 -1
  35. package/dist/resources/approvals.js +23 -3
  36. package/dist/resources/approvals.js.map +1 -1
  37. package/dist/resources/assistant.d.ts +23 -0
  38. package/dist/resources/assistant.d.ts.map +1 -1
  39. package/dist/resources/assistant.js +22 -0
  40. package/dist/resources/assistant.js.map +1 -1
  41. package/dist/resources/control/auth-providers.d.ts +17 -0
  42. package/dist/resources/control/auth-providers.d.ts.map +1 -1
  43. package/dist/resources/control/auth-providers.js +6 -0
  44. package/dist/resources/control/auth-providers.js.map +1 -1
  45. package/dist/resources/control/config.d.ts +22 -0
  46. package/dist/resources/control/config.d.ts.map +1 -1
  47. package/dist/resources/control/config.js +12 -0
  48. package/dist/resources/control/config.js.map +1 -1
  49. package/dist/resources/control/fleet.d.ts +15 -0
  50. package/dist/resources/control/fleet.d.ts.map +1 -1
  51. package/dist/resources/control/fleet.js +8 -0
  52. package/dist/resources/control/fleet.js.map +1 -1
  53. package/dist/resources/control/images.d.ts +20 -0
  54. package/dist/resources/control/images.d.ts.map +1 -1
  55. package/dist/resources/control/images.js +10 -0
  56. package/dist/resources/control/images.js.map +1 -1
  57. package/dist/resources/control/lifecycle.d.ts +8 -0
  58. package/dist/resources/control/lifecycle.d.ts.map +1 -1
  59. package/dist/resources/control/lifecycle.js +3 -0
  60. package/dist/resources/control/lifecycle.js.map +1 -1
  61. package/dist/resources/control/publish.d.ts +12 -0
  62. package/dist/resources/control/publish.d.ts.map +1 -1
  63. package/dist/resources/control/publish.js +6 -0
  64. package/dist/resources/control/publish.js.map +1 -1
  65. package/dist/resources/control/secrets.d.ts +28 -0
  66. package/dist/resources/control/secrets.d.ts.map +1 -1
  67. package/dist/resources/control/secrets.js +16 -0
  68. package/dist/resources/control/secrets.js.map +1 -1
  69. package/dist/resources/control/users.d.ts +22 -0
  70. package/dist/resources/control/users.d.ts.map +1 -1
  71. package/dist/resources/control/users.js +12 -0
  72. package/dist/resources/control/users.js.map +1 -1
  73. package/dist/resources/control/versioning.d.ts +12 -0
  74. package/dist/resources/control/versioning.d.ts.map +1 -1
  75. package/dist/resources/control/versioning.js +6 -0
  76. package/dist/resources/control/versioning.js.map +1 -1
  77. package/dist/resources/control/workers.d.ts +14 -0
  78. package/dist/resources/control/workers.d.ts.map +1 -1
  79. package/dist/resources/control/workers.js +7 -0
  80. package/dist/resources/control/workers.js.map +1 -1
  81. package/dist/resources/elicitations.d.ts +43 -0
  82. package/dist/resources/elicitations.d.ts.map +1 -1
  83. package/dist/resources/elicitations.js +8 -0
  84. package/dist/resources/elicitations.js.map +1 -1
  85. package/dist/resources/fleet.d.ts +90 -0
  86. package/dist/resources/fleet.d.ts.map +1 -1
  87. package/dist/resources/fleet.js +27 -4
  88. package/dist/resources/fleet.js.map +1 -1
  89. package/dist/resources/images.d.ts +34 -0
  90. package/dist/resources/images.d.ts.map +1 -1
  91. package/dist/resources/images.js +29 -3
  92. package/dist/resources/images.js.map +1 -1
  93. package/dist/resources/leader.d.ts +10 -0
  94. package/dist/resources/leader.d.ts.map +1 -1
  95. package/dist/resources/leader.js +4 -0
  96. package/dist/resources/leader.js.map +1 -1
  97. package/dist/resources/memory.d.ts +37 -0
  98. package/dist/resources/memory.d.ts.map +1 -1
  99. package/dist/resources/memory.js +28 -0
  100. package/dist/resources/memory.js.map +1 -1
  101. package/dist/resources/models.d.ts +12 -0
  102. package/dist/resources/models.d.ts.map +1 -1
  103. package/dist/resources/models.js +4 -0
  104. package/dist/resources/models.js.map +1 -1
  105. package/dist/resources/ops.d.ts +16 -0
  106. package/dist/resources/ops.d.ts.map +1 -1
  107. package/dist/resources/ops.js +6 -0
  108. package/dist/resources/ops.js.map +1 -1
  109. package/dist/resources/policy.d.ts +8 -0
  110. package/dist/resources/policy.d.ts.map +1 -1
  111. package/dist/resources/policy.js +1 -0
  112. package/dist/resources/policy.js.map +1 -1
  113. package/dist/resources/questions.d.ts +57 -0
  114. package/dist/resources/questions.d.ts.map +1 -1
  115. package/dist/resources/questions.js +9 -0
  116. package/dist/resources/questions.js.map +1 -1
  117. package/dist/resources/runs.d.ts +143 -0
  118. package/dist/resources/runs.d.ts.map +1 -1
  119. package/dist/resources/runs.js +129 -2
  120. package/dist/resources/runs.js.map +1 -1
  121. package/dist/resources/session-sync.d.ts +61 -0
  122. package/dist/resources/session-sync.d.ts.map +1 -1
  123. package/dist/resources/session-sync.js +54 -1
  124. package/dist/resources/session-sync.js.map +1 -1
  125. package/dist/resources/sessions.d.ts +74 -0
  126. package/dist/resources/sessions.d.ts.map +1 -1
  127. package/dist/resources/sessions.js +64 -2
  128. package/dist/resources/sessions.js.map +1 -1
  129. package/dist/resources/side-query.d.ts +18 -0
  130. package/dist/resources/side-query.d.ts.map +1 -1
  131. package/dist/resources/side-query.js +1 -0
  132. package/dist/resources/side-query.js.map +1 -1
  133. package/dist/resources/tasks.d.ts +19 -0
  134. package/dist/resources/tasks.d.ts.map +1 -1
  135. package/dist/resources/tasks.js +21 -2
  136. package/dist/resources/tasks.js.map +1 -1
  137. package/dist/resources/tool-approvals.d.ts +53 -0
  138. package/dist/resources/tool-approvals.d.ts.map +1 -1
  139. package/dist/resources/tool-approvals.js +10 -0
  140. package/dist/resources/tool-approvals.js.map +1 -1
  141. package/dist/resources/trace.d.ts +23 -0
  142. package/dist/resources/trace.d.ts.map +1 -1
  143. package/dist/resources/trace.js +27 -2
  144. package/dist/resources/trace.js.map +1 -1
  145. package/dist/resources/usage.d.ts +21 -0
  146. package/dist/resources/usage.d.ts.map +1 -1
  147. package/dist/resources/usage.js +8 -0
  148. package/dist/resources/usage.js.map +1 -1
  149. package/dist/resources/workflows.d.ts +48 -0
  150. package/dist/resources/workflows.d.ts.map +1 -1
  151. package/dist/resources/workflows.js +40 -3
  152. package/dist/resources/workflows.js.map +1 -1
  153. package/dist/settings.d.ts +90 -0
  154. package/dist/settings.d.ts.map +1 -1
  155. package/dist/settings.js +24 -0
  156. package/dist/settings.js.map +1 -1
  157. package/dist/sse.d.ts +36 -0
  158. package/dist/sse.d.ts.map +1 -1
  159. package/dist/sse.js +53 -8
  160. package/dist/sse.js.map +1 -1
  161. package/dist/sync.d.ts +56 -0
  162. package/dist/sync.d.ts.map +1 -1
  163. package/dist/sync.js +48 -4
  164. package/dist/sync.js.map +1 -1
  165. package/dist/transport.d.ts +32 -0
  166. package/dist/transport.d.ts.map +1 -1
  167. package/dist/transport.js +40 -8
  168. package/dist/transport.js.map +1 -1
  169. package/dist/types.d.ts +691 -1
  170. package/dist/types.d.ts.map +1 -1
  171. package/package.json +1 -1
@@ -5,21 +5,37 @@ export class FleetResource {
5
5
  constructor(t) {
6
6
  this.t = t;
7
7
  }
8
+ /**
9
+ * GET /v1/fleet/stream — the LIVE fleet (active task + workflow rows). SSE; the SDK PRODUCES frames, the
10
+ * consumer maintains the active-set state (update-in-place / remove by `id`).
11
+ *
12
+ * Emit order: `meta` (`{version, scoped}`) → `snapshot` (full visible set) → then a `task`/`workflow` upsert
13
+ * per transition + `task_remove`/`workflow_remove` per departure. Each `task`/`workflow` frame is the POST-MERGE
14
+ * FULL row (NOT a sparse patch) → replace by `row.id`. Heartbeat comment frames are swallowed.
15
+ *
16
+ * 🔴 NOT RESUMABLE: a drop just ends the generator (re-call for a fresh snapshot). Owner-scoped by the
17
+ * credential principal unless fleet-wide; `scope` is wire-stripped (never appears on a row). 501 (typed) before
18
+ * any frame when fleet wiring is absent.
19
+ */
8
20
  async *stream(opts) {
9
21
  const o = { method: "GET", path: "/v1/fleet/stream" };
10
22
  if (opts?.signal)
11
23
  o.signal = opts.signal;
12
24
  const res = await this.t.openStream(o);
13
25
  if (!res.ok)
14
- throw toApiError(res.status, await res.json().catch(() => ({})));
26
+ throw toApiError(res.status, await res.json().catch(() => ({}))); // 501 (no fleet wiring) / 401 — before any frame
15
27
  try {
16
28
  for await (const frame of readSseFrames(res, undefined, opts?.signal)) {
17
29
  if (!frame.data)
18
- continue;
19
- const data = JSON.parse(frame.data);
30
+ continue; // heartbeat / comment (`: hb`)
31
+ const data = JSON.parse(frame.data); // SyntaxError = contract breach → rethrown
20
32
  const event = frame.event ?? "message";
21
33
  switch (event) {
22
34
  case "meta": {
35
+ // server 契约方复审 F1(行为错·最高):这里原是白名单重构——server 1.247+ 的
36
+ // `sessionScoped`/`bgNotifyFailClosed`(cli 代际让位判别的两个键)被中继剥掉,cli 的
37
+ // [1510] 让位臂全程死代码(0.0.69 只加了类型没改运行时)。改为 rest 透传:规范字段
38
+ // 归一在前,其余(含未来新键)原样随帧——meta 是声明帧,透传即前向兼容。
23
39
  const { version: _v, scoped: _s, ts: _t, ...metaRest } = data;
24
40
  yield { type: "meta", version: Number(data.version ?? 1), scoped: Boolean(data.scoped), ...(typeof data.ts === "number" ? { ts: data.ts } : {}), ...metaRest };
25
41
  break;
@@ -45,18 +61,25 @@ export class FleetResource {
45
61
  yield { type: "workflow_remove", id: String(data.id), ts: Number(data.ts ?? 0) };
46
62
  break;
47
63
  case "bg_notification": {
64
+ // Wire: `{ type:'bg_notification', ...notification, ts }` (the service inlines the payload —
65
+ // its frame bridge contract dispatches on data.type). Re-nest for the typed consumer.
48
66
  const { type: _t, ts, ...notification } = data;
49
67
  yield { type: "bg_notification", notification: notification, ts: Number(ts ?? 0) };
50
68
  break;
51
69
  }
52
70
  default:
71
+ // [1338]⑥ OPEN-SET PASSTHROUGH — a `default: break` here silently ATE every frame vocabulary
72
+ // addition (bg_notification rode the wire for weeks while consumers saw nothing, and every
73
+ // consumer had to tee the raw response body to get at it). Unknown frames now yield verbatim;
74
+ // consumers ignore what they don't render, and a future service vocabulary lands without an
75
+ // SDK release in between.
53
76
  yield { type: "unknown", event, data };
54
77
  break;
55
78
  }
56
79
  }
57
80
  }
58
81
  finally {
59
- res.body?.cancel().catch(() => { });
82
+ res.body?.cancel().catch(() => { }); // disconnect = stop the in-process subscription
60
83
  }
61
84
  }
62
85
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../src/resources/fleet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../src/resources/fleet.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,18 @@
1
+ /** images — §sandbox-image catalog(service IMAGE-API §7)。门B「选沙箱模板」的**只读**数据源。
2
+ *
3
+ * `list` = `GET /v1/images` 目录(visibility 按 principal scoped;分页 cursor/limit)。
4
+ * `select` = `POST /v1/images/select` 纯 resolution **预览**(仅供 UI 显"这 profile 解析到哪个 digest/能力")。
5
+ *
6
+ * 🔴 **绑定不靠 select**(方案 b):用户选 profile → 提交时 `TaskRequest.sandboxImageProfile` 送 **profile**,
7
+ * service 内部按 trusted principal `latestPublished(profile, viewer)` fail-closed 解析 digest + 再准入。
8
+ * caller **永远只送 profile,绝不送/缓存/重算 digest**(信 caller digest = fail-OPEN)。select 仅 UI 预览,非绑定凭证。 */
1
9
  import type { Transport } from "../transport.js";
2
10
  import type { ImageIndexEntry, ImageSelectResult } from "../types.js";
3
11
  export declare class ImagesResource {
4
12
  private readonly t;
5
13
  constructor(t: Transport);
14
+ /** GET /v1/images — 分页镜像目录(visibility 按 principal scoped)。filter: profile/capability/status/latest。
15
+ * 信封 `{images, nextCursor?}`(cursor-agnostic:UI 用 nextCursor 翻页,不假设 cursor 内部形态)。 */
6
16
  list(opts?: {
7
17
  profile?: string;
8
18
  capability?: string;
@@ -15,30 +25,41 @@ export declare class ImagesResource {
15
25
  images: ImageIndexEntry[];
16
26
  nextCursor?: string;
17
27
  }>;
28
+ /** POST /v1/images/select {profile, capabilitiesNeeded?} → resolution **预览**(digest/podContract/capabilities)。
29
+ * 🔴 仅 UI 预览,**绝非绑定凭证**;绑定走 `TaskRequest.sandboxImageProfile`(service 内部 re-admit)。
30
+ * 不可见/未发布/能力不满足 → 4xx(caller 透传提示,不向用户 surface digest 解析细节超出预览)。 */
18
31
  select(body: {
19
32
  profile: string;
20
33
  capabilitiesNeeded?: string[];
21
34
  signal?: AbortSignal;
22
35
  }): Promise<ImageSelectResult>;
36
+ /** POST /v1/images/register — 登记一条镜像索引条目(server.ts:3780 实拆)→ `{ id }`。operator 面。 */
23
37
  register(body: Record<string, unknown>, opts?: {
24
38
  signal?: AbortSignal;
25
39
  }): Promise<{
26
40
  id: string;
27
41
  }>;
42
+ /** GET /v1/images/:profile — 取 profile 最新已发布条目(server.ts:3835 实拆)→ `{ image: entry }`。 */
28
43
  byProfile(profile: string, opts?: {
29
44
  signal?: AbortSignal;
30
45
  }): Promise<{
31
46
  image: Record<string, unknown>;
32
47
  }>;
48
+ /** GET /v1/images/digests/:digest — 按不可变 digest 取条目(server.ts:3823 实拆)→ `{ image: entry }`。 */
33
49
  byDigest(digest: string, opts?: {
34
50
  signal?: AbortSignal;
35
51
  }): Promise<{
36
52
  image: Record<string, unknown>;
37
53
  }>;
38
54
  }
55
+ /** bakes — sandbox 镜像烧制控制面(IMAGE-API-DESIGN.md §P2;server.ts:3488 区实拆)。两种主体:
56
+ * operator(create/get/cancel/events)与 bake-runner 凭证(claim/ingest——runner 机对机面,ingest 需
57
+ * claim 响应里的 per-bake `ingestSecret` 回带)。挂 `client.images.bakes`。 */
39
58
  export declare class BakesResource {
40
59
  private readonly t;
41
60
  constructor(t: Transport);
61
+ /** POST /v1/images/bakes → 202 `{ bakeId, eventsUrl, status, state }`(白名单验参 400/501;同 argv 在飞
62
+ * 幂等复用 202;繁忙 409 `{activeBakeId?, eventsUrl?}`;429 提交限速带 retryAfterSec)。operator-only。 */
42
63
  create(body: Record<string, unknown>, opts?: {
43
64
  signal?: AbortSignal;
44
65
  }): Promise<{
@@ -48,11 +69,15 @@ export declare class BakesResource {
48
69
  state?: string;
49
70
  [k: string]: unknown;
50
71
  }>;
72
+ /** GET /v1/images/bakes/:id → `{ bake: bakeView }`(bakeId/status/state/profile/bands/baseRef/push/dryRun/
73
+ * logs/digest/repo…,开集)。operator-only。 */
51
74
  get(bakeId: string, opts?: {
52
75
  signal?: AbortSignal;
53
76
  }): Promise<{
54
77
  bake: Record<string, unknown>;
55
78
  }>;
79
+ /** POST /v1/images/bakes/:id/cancel → 202 `{ bakeId, cancelRequested: true, note }`(只 flag 非终态行;
80
+ * runner 在下个 heartbeat 杀构建;已终态=no-op 诚实注记)。operator-only。 */
56
81
  cancel(bakeId: string, opts?: {
57
82
  signal?: AbortSignal;
58
83
  }): Promise<{
@@ -60,16 +85,22 @@ export declare class BakesResource {
60
85
  cancelRequested: boolean;
61
86
  note?: string;
62
87
  }>;
88
+ /** POST /v1/images/bakes/claim — runner 领取最老 queued bake(发现+单飞 CAS 一步;204=队空 → null)。
89
+ * 响应=`{ bakeId, argv, push, dryRun, logs, profile, bands, ingestSecret, leaseUntil }`。runner 凭证面。 */
63
90
  claimNext(body?: {
64
91
  runnerId?: string;
65
92
  }, opts?: {
66
93
  signal?: AbortSignal;
67
94
  }): Promise<BakeClaim | null>;
95
+ /** POST /v1/images/bakes/:id/claim — 领取指定 queued bake(输单飞=409)。runner 凭证面。 */
68
96
  claim(bakeId: string, body?: {
69
97
  runnerId?: string;
70
98
  }, opts?: {
71
99
  signal?: AbortSignal;
72
100
  }): Promise<BakeClaim>;
101
+ /** POST /v1/images/bakes/:id/ingest — runner 回传一行 build.sh 事件 + lease 心跳(`x-bake-ingest-secret`
102
+ * 头带 claim 时铸的 secret;line=`{event,...}`,event=heartbeat 只续约)。响应恒带
103
+ * `{ accepted, leaseValid, cancelRequested }`(409=lease 失效/被抢;cancelRequested=true → runner 应杀构建)。 */
73
104
  ingest(bakeId: string, ingestSecret: string, line: Record<string, unknown>, opts?: {
74
105
  signal?: AbortSignal;
75
106
  }): Promise<{
@@ -78,6 +109,8 @@ export declare class BakesResource {
78
109
  cancelRequested: boolean;
79
110
  [k: string]: unknown;
80
111
  }>;
112
+ /** GET /v1/images/bakes/:id/events — 烧制实况 SSE(§P2.2,run-trace-SSE 同形;resumable,`id:` 行=事件 seq,
113
+ * Last-Event-ID 续传)。开集帧——按 event 分派,未知帧泛渲不崩;终态帧 = `done`/`error`。operator-only。 */
81
114
  events(bakeId: string, opts?: {
82
115
  signal?: AbortSignal;
83
116
  lastEventId?: string;
@@ -87,6 +120,7 @@ export declare class BakesResource {
87
120
  data: Record<string, unknown>;
88
121
  }>;
89
122
  }
123
+ /** claim 响应(server claimResponse 实拆)。argv=服务端整装白名单 argv(runner 逐字执行,绝不自拼)。 */
90
124
  export interface BakeClaim {
91
125
  bakeId: string;
92
126
  argv: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/resources/images.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"images.d.ts","sourceRoot":"","sources":["../../src/resources/images.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ export class ImagesResource {
4
4
  constructor(t) {
5
5
  this.t = t;
6
6
  }
7
+ /** GET /v1/images — 分页镜像目录(visibility 按 principal scoped)。filter: profile/capability/status/latest。
8
+ * 信封 `{images, nextCursor?}`(cursor-agnostic:UI 用 nextCursor 翻页,不假设 cursor 内部形态)。 */
7
9
  async list(opts) {
8
10
  const q = new URLSearchParams();
9
11
  if (opts?.profile)
@@ -21,45 +23,66 @@ export class ImagesResource {
21
23
  const qs = q.toString();
22
24
  return this.t.request({ method: "GET", path: `/v1/images${qs ? `?${qs}` : ""}`, signal: opts?.signal });
23
25
  }
26
+ /** POST /v1/images/select {profile, capabilitiesNeeded?} → resolution **预览**(digest/podContract/capabilities)。
27
+ * 🔴 仅 UI 预览,**绝非绑定凭证**;绑定走 `TaskRequest.sandboxImageProfile`(service 内部 re-admit)。
28
+ * 不可见/未发布/能力不满足 → 4xx(caller 透传提示,不向用户 surface digest 解析细节超出预览)。 */
24
29
  async select(body) {
25
30
  const { signal, ...payload } = body;
26
31
  return this.t.request({ method: "POST", path: "/v1/images/select", body: payload, signal });
27
32
  }
33
+ /** POST /v1/images/register — 登记一条镜像索引条目(server.ts:3780 实拆)→ `{ id }`。operator 面。 */
28
34
  async register(body, opts) {
29
35
  return this.t.request({ method: "POST", path: "/v1/images/register", body, signal: opts?.signal });
30
36
  }
37
+ /** GET /v1/images/:profile — 取 profile 最新已发布条目(server.ts:3835 实拆)→ `{ image: entry }`。 */
31
38
  async byProfile(profile, opts) {
32
39
  return this.t.request({ method: "GET", path: `/v1/images/${encodeURIComponent(profile)}`, signal: opts?.signal });
33
40
  }
41
+ /** GET /v1/images/digests/:digest — 按不可变 digest 取条目(server.ts:3823 实拆)→ `{ image: entry }`。 */
34
42
  async byDigest(digest, opts) {
35
43
  return this.t.request({ method: "GET", path: `/v1/images/digests/${encodeURIComponent(digest)}`, signal: opts?.signal });
36
44
  }
37
45
  }
46
+ /** bakes — sandbox 镜像烧制控制面(IMAGE-API-DESIGN.md §P2;server.ts:3488 区实拆)。两种主体:
47
+ * operator(create/get/cancel/events)与 bake-runner 凭证(claim/ingest——runner 机对机面,ingest 需
48
+ * claim 响应里的 per-bake `ingestSecret` 回带)。挂 `client.images.bakes`。 */
38
49
  export class BakesResource {
39
50
  t;
40
51
  constructor(t) {
41
52
  this.t = t;
42
53
  }
54
+ /** POST /v1/images/bakes → 202 `{ bakeId, eventsUrl, status, state }`(白名单验参 400/501;同 argv 在飞
55
+ * 幂等复用 202;繁忙 409 `{activeBakeId?, eventsUrl?}`;429 提交限速带 retryAfterSec)。operator-only。 */
43
56
  async create(body, opts) {
44
57
  return this.t.request({ method: "POST", path: "/v1/images/bakes", body, signal: opts?.signal });
45
58
  }
59
+ /** GET /v1/images/bakes/:id → `{ bake: bakeView }`(bakeId/status/state/profile/bands/baseRef/push/dryRun/
60
+ * logs/digest/repo…,开集)。operator-only。 */
46
61
  async get(bakeId, opts) {
47
62
  return this.t.request({ method: "GET", path: `/v1/images/bakes/${encodeURIComponent(bakeId)}`, signal: opts?.signal });
48
63
  }
64
+ /** POST /v1/images/bakes/:id/cancel → 202 `{ bakeId, cancelRequested: true, note }`(只 flag 非终态行;
65
+ * runner 在下个 heartbeat 杀构建;已终态=no-op 诚实注记)。operator-only。 */
49
66
  async cancel(bakeId, opts) {
50
67
  return this.t.request({ method: "POST", path: `/v1/images/bakes/${encodeURIComponent(bakeId)}/cancel`, body: {}, signal: opts?.signal });
51
68
  }
69
+ /** POST /v1/images/bakes/claim — runner 领取最老 queued bake(发现+单飞 CAS 一步;204=队空 → null)。
70
+ * 响应=`{ bakeId, argv, push, dryRun, logs, profile, bands, ingestSecret, leaseUntil }`。runner 凭证面。 */
52
71
  async claimNext(body, opts) {
53
72
  const res = await this.t.openRaw({ method: "POST", path: "/v1/images/bakes/claim", rawBody: JSON.stringify(body ?? {}), contentType: "application/json", ...(opts?.signal ? { signal: opts.signal } : {}) });
54
73
  if (res.status === 204)
55
- return null;
74
+ return null; // queue empty — the runner idle-polls
56
75
  if (!res.ok)
57
76
  throw new Error(`POST /v1/images/bakes/claim → HTTP ${res.status}: ${await res.text()}`);
58
77
  return (await res.json());
59
78
  }
79
+ /** POST /v1/images/bakes/:id/claim — 领取指定 queued bake(输单飞=409)。runner 凭证面。 */
60
80
  async claim(bakeId, body, opts) {
61
81
  return this.t.request({ method: "POST", path: `/v1/images/bakes/${encodeURIComponent(bakeId)}/claim`, body: body ?? {}, signal: opts?.signal });
62
82
  }
83
+ /** POST /v1/images/bakes/:id/ingest — runner 回传一行 build.sh 事件 + lease 心跳(`x-bake-ingest-secret`
84
+ * 头带 claim 时铸的 secret;line=`{event,...}`,event=heartbeat 只续约)。响应恒带
85
+ * `{ accepted, leaseValid, cancelRequested }`(409=lease 失效/被抢;cancelRequested=true → runner 应杀构建)。 */
63
86
  async ingest(bakeId, ingestSecret, line, opts) {
64
87
  const res = await this.t.openRaw({
65
88
  method: "POST",
@@ -70,10 +93,13 @@ export class BakesResource {
70
93
  ...(opts?.signal ? { signal: opts.signal } : {}),
71
94
  });
72
95
  const body = (await res.json());
96
+ // 409 = lease 失效/被抢——契约上仍带三态体(runner 用 cancelRequested/leaseValid 决策),不抛;其余非 2xx 抛。
73
97
  if (!res.ok && res.status !== 409)
74
98
  throw new Error(`POST /v1/images/bakes/:id/ingest → HTTP ${res.status}: ${JSON.stringify(body)}`);
75
99
  return body;
76
100
  }
101
+ /** GET /v1/images/bakes/:id/events — 烧制实况 SSE(§P2.2,run-trace-SSE 同形;resumable,`id:` 行=事件 seq,
102
+ * Last-Event-ID 续传)。开集帧——按 event 分派,未知帧泛渲不崩;终态帧 = `done`/`error`。operator-only。 */
77
103
  async *events(bakeId, opts) {
78
104
  let first = opts?.lastEventId;
79
105
  const frames = parseFrameStream((lastEventId) => {
@@ -88,8 +114,8 @@ export class BakesResource {
88
114
  }, (f) => f.event === "done" || f.event === "error", opts?.signal ? { signal: opts.signal } : undefined);
89
115
  for await (const f of frames) {
90
116
  if (f.event === "heartbeat" || !f.data)
91
- continue;
92
- const data = JSON.parse(f.data);
117
+ continue; // keep-alive/comment beats swallowed (trace.stream 同款)
118
+ const data = JSON.parse(f.data); // SyntaxError = contract breach → rethrown by reader
93
119
  const ev = { event: f.event ?? "message", data };
94
120
  if (f.id)
95
121
  ev.id = f.id;
@@ -1 +1 @@
1
- {"version":3,"file":"images.js","sourceRoot":"","sources":["../../src/resources/images.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"images.js","sourceRoot":"","sources":["../../src/resources/images.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,17 @@
1
+ /** leader — the **v2 leader pipeline** (E2B workers + git push). POST /v1/leader → 202 / GET /v1/leader/:id.
2
+ * 🔴 NOT door B's brain. Gated server-side (`LEADER_ENABLED` + `REMOTE_EXEC=e2b`, both default OFF). Its mode is a
3
+ * SERVER deploy flag, not a client choice: `LEADER_FANOUT_ENABLED=true` (default) = router can fan out to N workers
4
+ * (= the value-HOLD correctness path); `=false` pins a deterministic single worker. **Door B's brain is the strong
5
+ * single agent via `/v1/tasks`+`/v1/runs`+`scenario`** (live today); planner-light currently lives only inside this
6
+ * leader router (and its decompose = N-worker fan-out). See DIRECTION §1. Keep this v2/optional. */
1
7
  import type { Transport } from "../transport.js";
2
8
  import type { LeaderReceipt, LeaderRecord } from "../types.js";
3
9
  export declare class LeaderResource {
4
10
  private readonly t;
5
11
  constructor(t: Transport);
12
+ /** POST /v1/leader → 202 receipt(server.ts:3429 区实拆:同 /v1/runs 的身份门——REQUIRE_PRINCIPAL 下
13
+ * 验证主体 401 先行,记录为 run owner;限速/配额/lease 门同任务提交)。LEADER_ENABLED 关闭时 404/501
14
+ * 由 server leaderEndpoint 决定。(SDK 全覆盖批 2026-07-17:原 TODO(M3+) 桩接线。) */
6
15
  create(req: {
7
16
  objective: string;
8
17
  sessionId?: string;
@@ -12,6 +21,7 @@ export declare class LeaderResource {
12
21
  idempotencyKey?: string | null;
13
22
  signal?: AbortSignal;
14
23
  }): Promise<LeaderReceipt>;
24
+ /** GET /v1/leader/:id — leader run 记录(非 owner=404 无 oracle)。 */
15
25
  get(leaderRunId: string, opts?: {
16
26
  signal?: AbortSignal;
17
27
  }): Promise<LeaderRecord>;
@@ -1 +1 @@
1
- {"version":3,"file":"leader.d.ts","sourceRoot":"","sources":["../../src/resources/leader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAKnC,MAAM,CAAC,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAKrL,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC;CAGvF"}
1
+ {"version":3,"file":"leader.d.ts","sourceRoot":"","sources":["../../src/resources/leader.ts"],"names":[],"mappings":"AAAA;;;;;qGAKqG;AACrG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC;;4EAEwE;IAClE,MAAM,CAAC,GAAG,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAI3L,gEAAgE;IAC1D,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC;CAGvF"}
@@ -3,9 +3,13 @@ export class LeaderResource {
3
3
  constructor(t) {
4
4
  this.t = t;
5
5
  }
6
+ /** POST /v1/leader → 202 receipt(server.ts:3429 区实拆:同 /v1/runs 的身份门——REQUIRE_PRINCIPAL 下
7
+ * 验证主体 401 先行,记录为 run owner;限速/配额/lease 门同任务提交)。LEADER_ENABLED 关闭时 404/501
8
+ * 由 server leaderEndpoint 决定。(SDK 全覆盖批 2026-07-17:原 TODO(M3+) 桩接线。) */
6
9
  async create(req, opts) {
7
10
  return this.t.request({ method: "POST", path: "/v1/leader", body: req, idempotencyKey: opts?.idempotencyKey, signal: opts?.signal });
8
11
  }
12
+ /** GET /v1/leader/:id — leader run 记录(非 owner=404 无 oracle)。 */
9
13
  async get(leaderRunId, opts) {
10
14
  return this.t.request({ method: "GET", path: `/v1/leader/${encodeURIComponent(leaderRunId)}`, signal: opts?.signal });
11
15
  }
@@ -1 +1 @@
1
- {"version":3,"file":"leader.js","sourceRoot":"","sources":["../../src/resources/leader.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAK7C,KAAK,CAAC,MAAM,CAAC,GAAoF,EAAE,IAA+D;QAChK,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACvI,CAAC;IAGD,KAAK,CAAC,GAAG,CAAC,WAAmB,EAAE,IAA+B;QAC5D,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,kBAAkB,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxH,CAAC;CACF"}
1
+ {"version":3,"file":"leader.js","sourceRoot":"","sources":["../../src/resources/leader.ts"],"names":[],"mappings":"AASA,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C;;4EAEwE;IACxE,KAAK,CAAC,MAAM,CAAC,GAAoF,EAAE,IAA+D;QAChK,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACvI,CAAC;IAED,gEAAgE;IAChE,KAAK,CAAC,GAAG,CAAC,WAAmB,EAAE,IAA+B;QAC5D,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,kBAAkB,CAAC,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxH,CAAC;CACF"}
@@ -1,30 +1,62 @@
1
+ /** memory — the user's `<user_memory>` transparency surface (LIVE, service 170c384).
2
+ * Owner-scoped BY CONSTRUCTION: the scope derives from the request principal (same rule as task execution),
3
+ * so a caller cannot address anyone else's memory. No principal header → 401. Check capabilities().memory.
4
+ *
5
+ * ⚠️ 2026-07 server 现状(SDK 全覆盖批盘点):legacy MemoryStore 面已随 store 下线——server capabilities
6
+ * 硬编码 `memory:false`/`memoryWrite:false`(server.ts:1333),下方五个 legacy 动词(get/clear/append/
7
+ * update/remove)对现行 server 恒 404/501,仅为旧部署兼容保留,均已 @deprecated。现行记忆面 =
8
+ * memory-engine(DB twins):{@link exportScope}(GET /v1/memory/export)+ {@link sync}
9
+ * (POST /v1/memory/sync/:scope)。 */
1
10
  import type { Transport } from "../transport.js";
2
11
  import type { MemoryRecord, MemoryWriteAck } from "../types.js";
3
12
  export declare class MemoryResource {
4
13
  private readonly t;
5
14
  constructor(t: Transport);
15
+ /** GET /v1/memory — read your own memory (content null = empty).
16
+ * @deprecated legacy MemoryStore 面已在 server 下线(capabilities memory:false)——现行 server 恒不可用。 */
6
17
  get(opts?: {
7
18
  signal?: AbortSignal;
8
19
  }): Promise<MemoryRecord>;
20
+ /** DELETE /v1/memory — clear the WHOLE scope (per-entry deletion is a future additive).
21
+ * Not a submit → no SDK retry.
22
+ * @deprecated legacy MemoryStore 面已在 server 下线(capabilities memory:false)——现行 server 恒不可用。 */
9
23
  clear(opts?: {
10
24
  signal?: AbortSignal;
11
25
  }): Promise<{
12
26
  ok: boolean;
13
27
  scope: string;
14
28
  }>;
29
+ /** MF-30 append a note — POST /v1/sessions/:id/memory {content} → `{ok,id,scope}` (unified shape; service:
30
+ * the old src:2880 summary comment dropped `ok` by mistake, the handler always returned it — code-authoritative).
31
+ * 🔴 per-PRINCIPAL not per-session: the `:id` is only the shell's addressing context; the note is visible from
32
+ * ALL the caller's sessions. `content` stored VERBATIM (≤8 KiB, user-authored → NOT redacted); empty/oversized → 400.
33
+ * Always available when `capabilities().memoryWrite`. Not idempotent → no SDK retry.
34
+ * @deprecated legacy MemoryStore 面已在 server 下线(capabilities `memoryWrite:false`)——现行 server 恒不可用。
35
+ */
15
36
  append(sessionId: string, body: {
16
37
  content: string;
17
38
  }, opts?: {
18
39
  signal?: AbortSignal;
19
40
  }): Promise<MemoryWriteAck>;
41
+ /** MF-30 edit one note by id — PATCH /v1/sessions/:id/memory/:noteId {content} → `{ok,id,scope}` (id unchanged).
42
+ * 🔴 **501** when the backend lacks id-addressable update (honest degrade, never a fake 200). per-PRINCIPAL (see append).
43
+ * @deprecated legacy MemoryStore 面已在 server 下线(capabilities `memoryWrite:false`)——现行 server 恒不可用。
44
+ */
20
45
  edit(sessionId: string, noteId: string, body: {
21
46
  content: string;
22
47
  }, opts?: {
23
48
  signal?: AbortSignal;
24
49
  }): Promise<MemoryWriteAck>;
50
+ /** MF-30 forget one note by id — DELETE /v1/sessions/:id/memory/:noteId → `{ok,id,scope}`.
51
+ * 🔴 **501** when the backend lacks id-addressable delete. per-PRINCIPAL (see append). Not a submit → no SDK retry.
52
+ * @deprecated legacy MemoryStore 面已在 server 下线(capabilities `memoryWrite:false`)——现行 server 恒不可用。
53
+ */
25
54
  remove(sessionId: string, noteId: string, opts?: {
26
55
  signal?: AbortSignal;
27
56
  }): Promise<MemoryWriteAck>;
57
+ /** GET /v1/memory/export?scope= — 按 scope 导出记忆引擎条目(server.ts:4480 实拆;memory-engine DB twins 面)。
58
+ * `{ scope, exportedAt, entries }`。owner 门:scope 必须=本人 user 盘或 explicit operator(否则 404 无
59
+ * oracle);file 形态/未接 memoryExport = 501 诚实。 */
28
60
  exportScope(scope: string, opts?: {
29
61
  signal?: AbortSignal;
30
62
  }): Promise<{
@@ -33,6 +65,11 @@ export declare class MemoryResource {
33
65
  entries: unknown[];
34
66
  [k: string]: unknown;
35
67
  }>;
68
+ /** POST /v1/memory/sync/:scope — 中枢侧记忆 sync 入站半场(142-S2.5;server.ts:4517 实拆)。:scope 走
69
+ * percent-encoding(scope 键含 `:`/`@`/`/`);门序=auth 401 → 后端形态 501(file=TOC 自身,无中心半场)
70
+ * → owner 门 404 无 oracle → 验型 422 typed。500=applyPatches 可能已落库而 cursor 未推进——**按同一
71
+ * baseRevs 重放即幂等自愈**(identical revs 全程 no-op),绝不静默吞。body/响应形=core memory-sync 契约
72
+ * (开集透传;真源在 core reconcile/nextSyncBaseline 纯函数)。 */
36
73
  sync(scope: string, body: Record<string, unknown>, opts?: {
37
74
  signal?: AbortSignal;
38
75
  }): Promise<Record<string, unknown>>;
@@ -1 +1 @@
1
- {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/resources/memory.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEhE,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAInC,GAAG,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAO3D,KAAK,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAW/E,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAa9G,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAa5H,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAWnG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IASrJ,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAG5H"}
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/resources/memory.ts"],"names":[],"mappings":"AAAA;;;;;;;;qCAQqC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEhE,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC;mGAC+F;IACzF,GAAG,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC;IAIjE;;mGAE+F;IACzF,KAAK,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAIrF;;;;;;OAMG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IASpH;;;OAGG;IACG,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IASlI;;;OAGG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAQzG;;oDAEgD;IAC1C,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAI3J;;;;0DAIsD;IAChD,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAG5H"}
@@ -3,12 +3,24 @@ export class MemoryResource {
3
3
  constructor(t) {
4
4
  this.t = t;
5
5
  }
6
+ /** GET /v1/memory — read your own memory (content null = empty).
7
+ * @deprecated legacy MemoryStore 面已在 server 下线(capabilities memory:false)——现行 server 恒不可用。 */
6
8
  async get(opts) {
7
9
  return this.t.request({ method: "GET", path: "/v1/memory", signal: opts?.signal });
8
10
  }
11
+ /** DELETE /v1/memory — clear the WHOLE scope (per-entry deletion is a future additive).
12
+ * Not a submit → no SDK retry.
13
+ * @deprecated legacy MemoryStore 面已在 server 下线(capabilities memory:false)——现行 server 恒不可用。 */
9
14
  async clear(opts) {
10
15
  return this.t.request({ method: "DELETE", path: "/v1/memory", signal: opts?.signal });
11
16
  }
17
+ /** MF-30 append a note — POST /v1/sessions/:id/memory {content} → `{ok,id,scope}` (unified shape; service:
18
+ * the old src:2880 summary comment dropped `ok` by mistake, the handler always returned it — code-authoritative).
19
+ * 🔴 per-PRINCIPAL not per-session: the `:id` is only the shell's addressing context; the note is visible from
20
+ * ALL the caller's sessions. `content` stored VERBATIM (≤8 KiB, user-authored → NOT redacted); empty/oversized → 400.
21
+ * Always available when `capabilities().memoryWrite`. Not idempotent → no SDK retry.
22
+ * @deprecated legacy MemoryStore 面已在 server 下线(capabilities `memoryWrite:false`)——现行 server 恒不可用。
23
+ */
12
24
  async append(sessionId, body, opts) {
13
25
  return this.t.request({
14
26
  method: "POST",
@@ -17,6 +29,10 @@ export class MemoryResource {
17
29
  signal: opts?.signal,
18
30
  });
19
31
  }
32
+ /** MF-30 edit one note by id — PATCH /v1/sessions/:id/memory/:noteId {content} → `{ok,id,scope}` (id unchanged).
33
+ * 🔴 **501** when the backend lacks id-addressable update (honest degrade, never a fake 200). per-PRINCIPAL (see append).
34
+ * @deprecated legacy MemoryStore 面已在 server 下线(capabilities `memoryWrite:false`)——现行 server 恒不可用。
35
+ */
20
36
  async edit(sessionId, noteId, body, opts) {
21
37
  return this.t.request({
22
38
  method: "PATCH",
@@ -25,6 +41,10 @@ export class MemoryResource {
25
41
  signal: opts?.signal,
26
42
  });
27
43
  }
44
+ /** MF-30 forget one note by id — DELETE /v1/sessions/:id/memory/:noteId → `{ok,id,scope}`.
45
+ * 🔴 **501** when the backend lacks id-addressable delete. per-PRINCIPAL (see append). Not a submit → no SDK retry.
46
+ * @deprecated legacy MemoryStore 面已在 server 下线(capabilities `memoryWrite:false`)——现行 server 恒不可用。
47
+ */
28
48
  async remove(sessionId, noteId, opts) {
29
49
  return this.t.request({
30
50
  method: "DELETE",
@@ -32,9 +52,17 @@ export class MemoryResource {
32
52
  signal: opts?.signal,
33
53
  });
34
54
  }
55
+ /** GET /v1/memory/export?scope= — 按 scope 导出记忆引擎条目(server.ts:4480 实拆;memory-engine DB twins 面)。
56
+ * `{ scope, exportedAt, entries }`。owner 门:scope 必须=本人 user 盘或 explicit operator(否则 404 无
57
+ * oracle);file 形态/未接 memoryExport = 501 诚实。 */
35
58
  async exportScope(scope, opts) {
36
59
  return this.t.request({ method: "GET", path: `/v1/memory/export?scope=${encodeURIComponent(scope)}`, signal: opts?.signal });
37
60
  }
61
+ /** POST /v1/memory/sync/:scope — 中枢侧记忆 sync 入站半场(142-S2.5;server.ts:4517 实拆)。:scope 走
62
+ * percent-encoding(scope 键含 `:`/`@`/`/`);门序=auth 401 → 后端形态 501(file=TOC 自身,无中心半场)
63
+ * → owner 门 404 无 oracle → 验型 422 typed。500=applyPatches 可能已落库而 cursor 未推进——**按同一
64
+ * baseRevs 重放即幂等自愈**(identical revs 全程 no-op),绝不静默吞。body/响应形=core memory-sync 契约
65
+ * (开集透传;真源在 core reconcile/nextSyncBaseline 纯函数)。 */
38
66
  async sync(scope, body, opts) {
39
67
  return this.t.request({ method: "POST", path: `/v1/memory/sync/${encodeURIComponent(scope)}`, body, signal: opts?.signal });
40
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/resources/memory.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAI7C,KAAK,CAAC,GAAG,CAAC,IAA+B;QACvC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAe,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACnG,CAAC;IAKD,KAAK,CAAC,KAAK,CAAC,IAA+B;QACzC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAiC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxH,CAAC;IASD,KAAK,CAAC,MAAM,CAAC,SAAiB,EAAE,IAAyB,EAAE,IAA+B;QACxF,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAiB;YACpC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,SAAS;YAC5D,IAAI;YACJ,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAMD,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,MAAc,EAAE,IAAyB,EAAE,IAA+B;QACtG,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAiB;YACpC,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE;YAC1F,IAAI;YACJ,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAMD,KAAK,CAAC,MAAM,CAAC,SAAiB,EAAE,MAAc,EAAE,IAA+B;QAC7E,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAiB;YACpC,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE;YAC1F,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAKD,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,IAA+B;QAC9D,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/H,CAAC;IAOD,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,IAA6B,EAAE,IAA+B;QACtF,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9H,CAAC;CACF"}
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/resources/memory.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C;mGAC+F;IAC/F,KAAK,CAAC,GAAG,CAAC,IAA+B;QACvC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAe,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACnG,CAAC;IAED;;mGAE+F;IAC/F,KAAK,CAAC,KAAK,CAAC,IAA+B;QACzC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAiC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACxH,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,SAAiB,EAAE,IAAyB,EAAE,IAA+B;QACxF,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAiB;YACpC,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,SAAS;YAC5D,IAAI;YACJ,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,MAAc,EAAE,IAAyB,EAAE,IAA+B;QACtG,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAiB;YACpC,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE;YAC1F,IAAI;YACJ,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,SAAiB,EAAE,MAAc,EAAE,IAA+B;QAC7E,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAiB;YACpC,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,gBAAgB,kBAAkB,CAAC,SAAS,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE;YAC1F,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;IACL,CAAC;IAED;;oDAEgD;IAChD,KAAK,CAAC,WAAW,CAAC,KAAa,EAAE,IAA+B;QAC9D,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/H,CAAC;IAED;;;;0DAIsD;IACtD,KAAK,CAAC,IAAI,CAAC,KAAa,EAAE,IAA6B,EAAE,IAA+B;QACtF,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9H,CAAC;CACF"}
@@ -1,8 +1,20 @@
1
+ /** models — `@model` 切换的**只读**模型目录(service `GET /v1/models`,server.ts:535;core 1.116 `@model` mention 线)。
2
+ *
3
+ * 用户用 **`@<name>`** 在消息正文里 per-task 选已配置模型(service `parseModelMention` 解析,main.ts:718;
4
+ * 无 mention → `default` 角色)。本资源给 client 列**可选模型名**(autocomplete/picker 用),让用户知道能 @ 谁。
5
+ *
6
+ * 🔴 **非密钥**:只返 name/id/provider/reasoning/vision,**绝不** baseUrl/apiKey/headers(service 侧已剥,server.ts:531-534)。
7
+ * 🔴 **只读 + 不是绑定凭证**:切换靠用户在正文打 `@name`(service 内部 allowlist 解析,client 不重算/不注入 Model 对象)。
8
+ * `default` 内部别名 service 已隐藏(fallback ref,非用户可选)。 */
1
9
  import type { Transport } from "../transport.js";
2
10
  import type { ModelInfo } from "../types.js";
3
11
  export declare class ModelsResource {
4
12
  private readonly t;
5
13
  constructor(t: Transport);
14
+ /** GET /v1/models — 非密钥模型目录。信封 `{models, default}`(`default`=部署默认模型 id,仅展示用)。
15
+ * filter 无(目录小、全列);失败由 caller fail-safe(空目录 → picker 不显,同 images 范式)。
16
+ * 每条 `ModelInfo` 现带 E4 `contextWindow`/`maxOutputTokens`(%-上下文仪表分母)+ E7 `supportedEffortLevels`
17
+ * (`/effort` picker 选项,仅 reasoning 模型)—— 均 SHIPPED 自 service,soft-degrade(未知则缺)。 */
6
18
  list(opts?: {
7
19
  signal?: AbortSignal;
8
20
  }): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/resources/models.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAMnC,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAG/F"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/resources/models.ts"],"names":[],"mappings":"AAAA;;;;;;;yDAOyD;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC;;;yFAGqF;IAC/E,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAG/F"}
@@ -3,6 +3,10 @@ export class ModelsResource {
3
3
  constructor(t) {
4
4
  this.t = t;
5
5
  }
6
+ /** GET /v1/models — 非密钥模型目录。信封 `{models, default}`(`default`=部署默认模型 id,仅展示用)。
7
+ * filter 无(目录小、全列);失败由 caller fail-safe(空目录 → picker 不显,同 images 范式)。
8
+ * 每条 `ModelInfo` 现带 E4 `contextWindow`/`maxOutputTokens`(%-上下文仪表分母)+ E7 `supportedEffortLevels`
9
+ * (`/effort` picker 选项,仅 reasoning 模型)—— 均 SHIPPED 自 service,soft-degrade(未知则缺)。 */
6
10
  async list(opts) {
7
11
  return this.t.request({ method: "GET", path: "/v1/models", signal: opts?.signal });
8
12
  }
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/resources/models.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAM7C,KAAK,CAAC,IAAI,CAAC,IAA+B;QACxC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC;CACF"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/resources/models.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,cAAc;IACI;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C;;;yFAGqF;IACrF,KAAK,CAAC,IAAI,CAAC,IAA+B;QACxC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC;CACF"}