@sema-agent/sdk 25.0.0 → 26.0.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 (56) hide show
  1. package/README.md +103 -3
  2. package/dist/client.d.ts +0 -4
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +0 -5
  5. package/dist/client.js.map +1 -1
  6. package/dist/errors.d.ts +57 -25
  7. package/dist/errors.d.ts.map +1 -1
  8. package/dist/errors.js +40 -35
  9. package/dist/errors.js.map +1 -1
  10. package/dist/events.d.ts +13 -2
  11. package/dist/events.d.ts.map +1 -1
  12. package/dist/events.js.map +1 -1
  13. package/dist/index.d.ts +17 -14
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +6 -3
  16. package/dist/index.js.map +1 -1
  17. package/dist/resources/approvals.d.ts +16 -2
  18. package/dist/resources/approvals.d.ts.map +1 -1
  19. package/dist/resources/approvals.js +7 -2
  20. package/dist/resources/approvals.js.map +1 -1
  21. package/dist/resources/fleet.d.ts +8 -12
  22. package/dist/resources/fleet.d.ts.map +1 -1
  23. package/dist/resources/fleet.js.map +1 -1
  24. package/dist/resources/rules.d.ts +2 -5
  25. package/dist/resources/rules.d.ts.map +1 -1
  26. package/dist/resources/rules.js.map +1 -1
  27. package/dist/resources/session-sync.d.ts +27 -32
  28. package/dist/resources/session-sync.d.ts.map +1 -1
  29. package/dist/resources/session-sync.js +25 -39
  30. package/dist/resources/session-sync.js.map +1 -1
  31. package/dist/resources/tool-approvals.d.ts +60 -99
  32. package/dist/resources/tool-approvals.d.ts.map +1 -1
  33. package/dist/resources/tool-approvals.js +41 -35
  34. package/dist/resources/tool-approvals.js.map +1 -1
  35. package/dist/settings.d.ts +13 -0
  36. package/dist/settings.d.ts.map +1 -1
  37. package/dist/settings.js +0 -24
  38. package/dist/settings.js.map +1 -1
  39. package/dist/sync.d.ts +5 -5
  40. package/dist/sync.d.ts.map +1 -1
  41. package/dist/sync.js +13 -55
  42. package/dist/sync.js.map +1 -1
  43. package/dist/transport.d.ts +2 -0
  44. package/dist/transport.d.ts.map +1 -1
  45. package/dist/transport.js +3 -0
  46. package/dist/transport.js.map +1 -1
  47. package/dist/types.d.ts +132 -110
  48. package/dist/types.d.ts.map +1 -1
  49. package/dist/types.js +5 -0
  50. package/dist/types.js.map +1 -1
  51. package/openapi.yaml +237 -532
  52. package/package.json +1 -1
  53. package/dist/resources/workspace.d.ts +0 -95
  54. package/dist/resources/workspace.d.ts.map +0 -1
  55. package/dist/resources/workspace.js +0 -60
  56. package/dist/resources/workspace.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/sdk",
3
- "version": "25.0.0",
3
+ "version": "26.0.0",
4
4
  "description": "Typed, zero-runtime-dependency SDK for the Sema agent fleet usage plane. The shared substrate for all doors (CC/Codex MCP façade + web). Server-side only — tokens never enter the browser.",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",
@@ -1,95 +0,0 @@
1
- /** workspace 浏览面(#3;server 1.299–7.51 `/v1/sessions/:id/workspace*`,[1882] 设计稿 → [1894] 表态)——
2
- * E19 快照店的只读投影:任务产出的浏览/预览/打包下载。**不是**活工作区(运行中的实时浏览=v2 另立);
3
- * 看的是每轮结束时的定格,`latest` 别名=最新快照(web 首屏「看最终产出」一跳)。
4
- *
5
- * 🔴 **RETIRED(server ≥7.52,S-15/design/381)**:整树快照纪元退役 ⇒ 四条路由形保留但恒答
6
- * 501 `capability.workspace_retired`(拒因点名纪元退役,不让消费端拿 404 猜拼写),能力位
7
- * `capabilities.workspace` 恒 `false`(同谓词)。per-edited-file rewind 历史只备份代理亲手编辑过的
8
- * 文件,结构上不存在「整个工作区」的 manifest 可投影。四动词保留不删(支持区间地板 3.0.0 起的老
9
- * server 仍活着这个面;删导出符号=major)——消费姿势恒为先探 `capabilities().workspace`,false 即不渲。
10
- *
11
- * 探测走 `capabilities().workspace`(对象={browse, archive, maxFileBytes};false/缺席=面不在)——
12
- * DON'T trial-by-501。owner 门=session 面同款(非 owner → 404 无 oracle)。 */
13
- import type { Transport } from "../transport.js";
14
- export interface WorkspaceSnapshotRow {
15
- key: string;
16
- files: number;
17
- /** 快照总字节。SQL 后端在场时给;local 店缺 sizes 面=诚实省略([1894]② additive)。 */
18
- bytes?: number;
19
- }
20
- export interface WorkspaceTreeEntry {
21
- path: string;
22
- /** content-address(sha256)——端可做跨快照变更高亮([1894]②)。 */
23
- hash: string;
24
- size?: number;
25
- }
26
- export interface WorkspaceFile {
27
- bytes: Uint8Array;
28
- /** 保守表 content-type(html/svg 等可执行类型故意不在表内=octet-stream;nosniff 恒带)。 */
29
- contentType: string;
30
- /** [1894]③ 二进制判别(server 首 8KiB NUL 嗅探,git 同判据)——web 预览器分流用。 */
31
- binary: boolean;
32
- }
33
- /** `GET …/workspace` 的 200 信封(server `routes/sessions.ts:624-629`)。
34
- *
35
- * 🔴 4.3.0 提成 **exported type**(此前是 `list()` 返回位上的**内联闭合字面量**):两道 spec 门谁都扫不到
36
- * 方法返回位置的内联形 —— `spec-field-drift-gate` 只扫 `src/types.ts` 的 exported interface,
37
- * `spec-resource-schema-gate` 只扫 `src/resources/*.ts` 的 exported type。于是这个信封漏了 `sessionId`
38
- * (server 与 spec 都把它列为 required)整整一个 major 版本而 CI 全绿。提出来 = 让第二道门罩住它。 */
39
- export interface WorkspaceSnapshotPage {
40
- /** 恒发 —— 回声校验(拿它与请求的 id 对一遍防串会话)在 TS 下此前根本写不出来,只能强制断言绕过。 */
41
- sessionId: string;
42
- snapshots: WorkspaceSnapshotRow[];
43
- /** 最新快照键;无快照时缺席。与展示行**同源**(server 防 ghost key:latest 绝不指向已被 reap 的快照)。 */
44
- latest?: string;
45
- /** ⚠️ **本页行数,不是快照总数** —— `total = snapshots.length`(server `:628`)。而且这条腿**没有任何
46
- * 分页游标**:超过 `limit`(上限 100)的老快照取不到。渲「共 N 个快照」会在快照多于 limit 时永远显示
47
- * limit,用户以为老快照被清了。
48
- * 🔴 同族的 {@link WorkspaceTreePage} 用**同一个键名**表示 `all.length` 的**全量** —— 同名键在同一族的
49
- * 两条腿上语义相反,这是 server 侧的既成事实,别把两处的 `total` 当同一个量读。 */
50
- total: number;
51
- [k: string]: unknown;
52
- }
53
- /** `GET …/workspace/:key/tree` 的 200 信封(server `routes/sessions.ts:651-657`)。提成 exported type 的
54
- * 理由同 {@link WorkspaceSnapshotPage}。 */
55
- export interface WorkspaceTreePage {
56
- /** 恒发(server 与 spec 均列为 required)。 */
57
- sessionId: string;
58
- /** 解析后的**真实**快照键 —— 请求里传 `"latest"` 别名时,这里回的是它解析到的那个 uuidv7 键。 */
59
- key: string;
60
- entries: WorkspaceTreeEntry[];
61
- /** ⚠️ 这条腿的 `total` 是**真·全量**(`all.length`),与 {@link WorkspaceSnapshotPage.total} 语义相反。 */
62
- total: number;
63
- /** 在场 = 还有下一页;把它当 `offset` 送回来。 */
64
- nextOffset?: number;
65
- [k: string]: unknown;
66
- }
67
- export declare class WorkspaceResource {
68
- private readonly t;
69
- constructor(t: Transport);
70
- /** `GET …/workspace` — 列快照(新→旧;limit 1..100 默认 20)。`latest`=最新快照键(无快照=缺席)。 */
71
- list(sessionId: string, opts?: {
72
- limit?: number;
73
- signal?: AbortSignal;
74
- }): Promise<WorkspaceSnapshotPage>;
75
- /** `GET …/workspace/:key/tree` — 文件树(path 序稳定;limit 1..2000 默认 500 + offset 分页;
76
- * `key="latest"` 别名可用)。`nextOffset` 在场=还有下一页。 */
77
- tree(sessionId: string, key: string, opts?: {
78
- limit?: number;
79
- offset?: number;
80
- signal?: AbortSignal;
81
- }): Promise<WorkspaceTreePage>;
82
- /** `GET …/workspace/:key/file?path=` — 单文件字节(≤ capabilities.workspace.maxFileBytes,默认 8MiB)。
83
- * 超限=413 结构化信封([1894]①)⇒ typed {@link WorkspaceFileTooLargeError}(带 sizeBytes/limit)——
84
- * web 渲「文件过大,下载查看」卡,archive 口是退路。 */
85
- file(sessionId: string, key: string, path: string, opts?: {
86
- signal?: AbortSignal;
87
- }): Promise<WorkspaceFile>;
88
- /** `GET …/workspace/:key/archive` — 整快照 tar 流(ustar;`content-disposition: attachment`)。
89
- * 返回 Response(调用方自决流式落盘/管道——整 tar 可到快照 bounds 上限,不在 SDK 内吸成整块)。
90
- * 502=快照缺 blob(可重试/换快照);422=病态路径(>255B 不可入 ustar,点名前 5 条)。 */
91
- archive(sessionId: string, key: string, opts?: {
92
- signal?: AbortSignal;
93
- }): Promise<Response>;
94
- }
95
- //# sourceMappingURL=workspace.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/resources/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;sEAWsE;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AACD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,uEAAuE;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;yEAKyE;AACzE,MAAM,WAAW,qBAAqB;IACpC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;0DAIsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;yCACyC;AACzC,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,0FAA0F;IAC1F,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC,8EAA8E;IACxE,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAC9C,OAAO,CAAC,qBAAqB,CAAC;IAKjC;sDACkD;IAC5C,IAAI,CACR,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAC/D,OAAO,CAAC,iBAAiB,CAAC;IAQ7B;;0CAEsC;IAChC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAoBjH;;mEAE+D;IACzD,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;CAUlG"}
@@ -1,60 +0,0 @@
1
- export class WorkspaceResource {
2
- t;
3
- constructor(t) {
4
- this.t = t;
5
- }
6
- /** `GET …/workspace` — 列快照(新→旧;limit 1..100 默认 20)。`latest`=最新快照键(无快照=缺席)。 */
7
- async list(sessionId, opts) {
8
- const qs = opts?.limit !== undefined ? `?limit=${opts.limit}` : "";
9
- return this.t.request({ method: "GET", path: `/v1/sessions/${encodeURIComponent(sessionId)}/workspace${qs}`, signal: opts?.signal });
10
- }
11
- /** `GET …/workspace/:key/tree` — 文件树(path 序稳定;limit 1..2000 默认 500 + offset 分页;
12
- * `key="latest"` 别名可用)。`nextOffset` 在场=还有下一页。 */
13
- async tree(sessionId, key, opts) {
14
- const q = new URLSearchParams();
15
- if (opts?.limit !== undefined)
16
- q.set("limit", String(opts.limit));
17
- if (opts?.offset !== undefined)
18
- q.set("offset", String(opts.offset));
19
- const qs = q.size > 0 ? `?${q}` : "";
20
- return this.t.request({ method: "GET", path: `/v1/sessions/${encodeURIComponent(sessionId)}/workspace/${encodeURIComponent(key)}/tree${qs}`, signal: opts?.signal });
21
- }
22
- /** `GET …/workspace/:key/file?path=` — 单文件字节(≤ capabilities.workspace.maxFileBytes,默认 8MiB)。
23
- * 超限=413 结构化信封([1894]①)⇒ typed {@link WorkspaceFileTooLargeError}(带 sizeBytes/limit)——
24
- * web 渲「文件过大,下载查看」卡,archive 口是退路。 */
25
- async file(sessionId, key, path, opts) {
26
- const res = await this.t.openRaw({
27
- method: "GET",
28
- path: `/v1/sessions/${encodeURIComponent(sessionId)}/workspace/${encodeURIComponent(key)}/file?path=${encodeURIComponent(path)}`,
29
- accept: "application/octet-stream",
30
- signal: opts?.signal,
31
- });
32
- // 🔴 S2 收编(SDK 1.1.0):413 的 {@link WorkspaceFileTooLargeError} 铸型**已挪进全局 mapper**
33
- // (`classifyApiError`),这里不再手写分支 —— 手写分支正是 S2 的病灶本身:它此前读裸 `code`,
34
- // 于是那个 typed 类在真机上**从未触发过一次**,而全局 mapper 的所有测试一条都保护不到它。
35
- // 现在这条腿与其余 13 个 openRaw verb 走同一个装配口(body 容错读 + retry-after + 注入的 mapper),
36
- // 「某一条腿悄悄读错键」这种缺陷再没有单独的藏身处。
37
- if (!res.ok)
38
- throw await this.t.errorFrom(res);
39
- return {
40
- bytes: new Uint8Array(await res.arrayBuffer()),
41
- contentType: res.headers.get("content-type") ?? "application/octet-stream",
42
- binary: res.headers.get("x-sema-content-binary") === "true",
43
- };
44
- }
45
- /** `GET …/workspace/:key/archive` — 整快照 tar 流(ustar;`content-disposition: attachment`)。
46
- * 返回 Response(调用方自决流式落盘/管道——整 tar 可到快照 bounds 上限,不在 SDK 内吸成整块)。
47
- * 502=快照缺 blob(可重试/换快照);422=病态路径(>255B 不可入 ustar,点名前 5 条)。 */
48
- async archive(sessionId, key, opts) {
49
- const res = await this.t.openRaw({
50
- method: "GET",
51
- path: `/v1/sessions/${encodeURIComponent(sessionId)}/workspace/${encodeURIComponent(key)}/archive`,
52
- accept: "application/x-tar",
53
- signal: opts?.signal,
54
- });
55
- if (!res.ok)
56
- throw await this.t.errorFrom(res);
57
- return res;
58
- }
59
- }
60
- //# sourceMappingURL=workspace.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/resources/workspace.ts"],"names":[],"mappings":"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"}