@sema-agent/sdk 4.2.0 → 4.3.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.
- package/README.md +12 -0
- package/dist/control-types.d.ts +22 -4
- package/dist/control-types.d.ts.map +1 -1
- package/dist/control-types.js +3 -1
- package/dist/control-types.js.map +1 -1
- package/dist/health.d.ts +76 -7
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js +40 -2
- package/dist/health.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/registry/health.d.ts +6 -1
- package/dist/registry/health.d.ts.map +1 -1
- package/dist/registry/health.js +6 -4
- package/dist/registry/health.js.map +1 -1
- package/dist/registry/index.d.ts +7 -1
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +7 -1
- package/dist/registry/index.js.map +1 -1
- package/dist/resources/attachments.d.ts +9 -2
- package/dist/resources/attachments.d.ts.map +1 -1
- package/dist/resources/attachments.js.map +1 -1
- package/dist/resources/control/secrets.d.ts +10 -1
- package/dist/resources/control/secrets.d.ts.map +1 -1
- package/dist/resources/control/secrets.js +10 -1
- package/dist/resources/control/secrets.js.map +1 -1
- package/dist/resources/fleet.d.ts +3 -2
- package/dist/resources/fleet.d.ts.map +1 -1
- package/dist/resources/fleet.js.map +1 -1
- package/dist/resources/images.d.ts +10 -1
- package/dist/resources/images.d.ts.map +1 -1
- package/dist/resources/images.js +20 -5
- package/dist/resources/images.js.map +1 -1
- package/dist/resources/leader.d.ts +7 -3
- package/dist/resources/leader.d.ts.map +1 -1
- package/dist/resources/leader.js +7 -3
- package/dist/resources/leader.js.map +1 -1
- package/dist/resources/ops.d.ts +29 -2
- package/dist/resources/ops.d.ts.map +1 -1
- package/dist/resources/ops.js +6 -1
- package/dist/resources/ops.js.map +1 -1
- package/dist/resources/session-sync.d.ts +77 -17
- package/dist/resources/session-sync.d.ts.map +1 -1
- package/dist/resources/session-sync.js +81 -20
- package/dist/resources/session-sync.js.map +1 -1
- package/dist/resources/sessions.d.ts +72 -12
- package/dist/resources/sessions.d.ts.map +1 -1
- package/dist/resources/sessions.js +29 -6
- package/dist/resources/sessions.js.map +1 -1
- package/dist/resources/trace.d.ts +17 -3
- package/dist/resources/trace.d.ts.map +1 -1
- package/dist/resources/trace.js +25 -5
- package/dist/resources/trace.js.map +1 -1
- package/dist/resources/workflows.d.ts +42 -10
- package/dist/resources/workflows.d.ts.map +1 -1
- package/dist/resources/workflows.js +46 -9
- package/dist/resources/workflows.js.map +1 -1
- package/dist/resources/workspace.d.ts +36 -11
- package/dist/resources/workspace.d.ts.map +1 -1
- package/dist/resources/workspace.js.map +1 -1
- package/dist/sync.d.ts +37 -8
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +24 -8
- package/dist/sync.js.map +1 -1
- package/dist/transport.d.ts +17 -3
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +18 -1
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +86 -9
- package/dist/types.d.ts.map +1 -1
- package/openapi.yaml +172 -54
- package/package.json +2 -2
- package/registry-openapi.yaml +34 -3
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
* 不复用 `parseSse`(其硬编码 AgentEvent + 自动重连,与 workflow 帧/无-resume 语义冲突)→ 留**专用 reader follow-on**。 */
|
|
10
10
|
import type { Transport } from "../transport.js";
|
|
11
11
|
import type { WorkflowRunSummary, WorkflowRun, WorkflowStreamEvent } from "../types.js";
|
|
12
|
-
/** workflow-agent steer 200 receipt (server
|
|
13
|
-
* `delivery:"applied"`, `marker` = the engine-minted delivery marker; NO `note`, unlike the
|
|
12
|
+
/** workflow-agent steer 200 receipt (server 5.3.0 `src/http/routes/workflows.ts:279` — exact literal:
|
|
13
|
+
* `status:"running"`, `delivery:"applied"`, `marker` = the engine-minted delivery marker; NO `note`, unlike the
|
|
14
|
+
* run-subagent verb). (4.3.0 坐标刷新:此前写的是 `server 1.214 server.js:1755`,那是 routes 拆分前的门牌。) */
|
|
14
15
|
export interface WorkflowAgentSteerReceipt {
|
|
15
16
|
runId: string;
|
|
16
17
|
label: string;
|
|
@@ -73,9 +74,16 @@ export declare class WorkflowsResource {
|
|
|
73
74
|
* 批次①-5:此前单一必填-status 形状不诚实,截断行现网真的没有 status)。`nextOffset` = the pagination
|
|
74
75
|
* cursor, present only when the page came back exactly `limit`-sized (more may exist) — 🔴 此前类型上
|
|
75
76
|
* 完全没有这个字段,消费方读不到分页续读钩子。
|
|
77
|
+
*
|
|
78
|
+
* 🔴 **分页入参(4.3.0,FW-2)**:`limit` 缺省 20、**上限 50**;`offset` >= 0(server `routes/workflows.ts:123-124`)。
|
|
79
|
+
* 在此之前 SDK 补了 `nextOffset` 字段却没补能用它的入口 —— 一个 21 个 agent 的 workflow 拿回 20 条 +
|
|
80
|
+
* `nextOffset: 20`,消费方握着游标却发现没有任何参数能把它送回去,第 21 条 agent 的失败诊断在 SDK 通路上
|
|
81
|
+
* **不可达**,只能绕过 SDK 裸拼 URL(而绕过 SDK 正是这个包存在的理由被否定的那一刻)。
|
|
76
82
|
* 404 = run 不存在/非 owner(无存在性 oracle);501 = journal store 未接(self-orchestration off)。 */
|
|
77
83
|
journal(runId: string, opts?: {
|
|
78
84
|
session?: string;
|
|
85
|
+
limit?: number;
|
|
86
|
+
offset?: number;
|
|
79
87
|
signal?: AbortSignal;
|
|
80
88
|
}): Promise<WorkflowJournalPage>;
|
|
81
89
|
/** `session` filter semantics(distinct from the per-id accept-phase): present = strict-equality filter
|
|
@@ -95,24 +103,39 @@ export declare class WorkflowsResource {
|
|
|
95
103
|
session?: string;
|
|
96
104
|
signal?: AbortSignal;
|
|
97
105
|
}): Promise<WorkflowRun>;
|
|
98
|
-
/** server
|
|
106
|
+
/** server 5.3.0 (`src/http/routes/workflows.ts:25` 的 `WORKFLOW_AGENT_STEER_RE` 常量 / `:194` 的处理段)
|
|
107
|
+
* — STEER a RUNNING AGENT of a WORKFLOW run
|
|
99
108
|
* (the S8 self-orchestration sibling of `runs.steerSubagent`): inject `content` into the labelled live agent;
|
|
100
109
|
* it drains at the agent's next tool round. `label` = the workflow-graph agent label (NOT a toolCallId);
|
|
101
110
|
* a label shared by >1 live agents → 409 `steering.ambiguous_label`. Body `{ content }` (non-empty, else 400).
|
|
102
111
|
* 200 {@link WorkflowAgentSteerReceipt} (`marker`, no `note`).
|
|
103
112
|
*
|
|
104
113
|
* 🔴 REPLICA-LOCAL live handle: 409 `steering.not_running` = agent settled / workflow not running / live on
|
|
105
|
-
* another replica (cross-replica live-steer unsupported).
|
|
106
|
-
*
|
|
114
|
+
* another replica (cross-replica live-steer unsupported).
|
|
115
|
+
*
|
|
116
|
+
* 🔴 **413 `steer.content_too_large`**(4.3.0 补,FW-12):`content` 超过 `STEER_IN_MAX_REQUEST_CHARS` 时
|
|
117
|
+
* server **拒收**(`routes/workflows.ts:232-240`),而不是先截断再投递 —— `:229-231` 写明了为什么必须是拒:
|
|
118
|
+
* 先截会让引擎的 `[+N chars]` 披露低报,且脱敏门要同步、还烧事件循环。消费方应当分出这条臂并提示
|
|
119
|
+
* 「内容太长,请缩短」,而不是落进「未知错误 / 服务异常」兜底(用户根本不知道该怎么办)。
|
|
120
|
+
*
|
|
121
|
+
* 🔴 **501 的门是 `capabilities.workflowsList`,不是 `capabilities.workflows`**(4.3.0 更正,FW-5):
|
|
122
|
+
* 501 的真判据是 `!deps.workflowRunStore`(`routes/workflows.ts:197-200`),而
|
|
123
|
+
* `workflows: deps.workflowsCapable ?? Boolean(deps.workflowRunStore)` 与
|
|
124
|
+
* `workflowsList: Boolean(deps.workflowRunStore)` 是**两个不同的量**(`routes/capabilities.ts:276-289` 的注
|
|
125
|
+
* 逐字区分:`workflows` = ENGINE-CAN「引擎能不能自编排」,`workflowsList` = 能不能 durable 列 run)。
|
|
126
|
+
* 同一判据也管着 `list`/`get`/`journal`/`stream` 四条读面。查错了键的后果双向都有:
|
|
127
|
+
* `workflows:true, workflowsList:false` ⇒ 入口被点亮、每次点都吃 501;反过来则把一个能用的面藏起来。
|
|
128
|
+
* Owner-scoped 404 (operator principals bypass). AT-MOST-ONCE (no retry). */
|
|
107
129
|
steerAgent(runId: string, label: string, message: {
|
|
108
130
|
content: string;
|
|
109
131
|
}, opts?: {
|
|
110
132
|
session?: string;
|
|
111
133
|
signal?: AbortSignal;
|
|
112
134
|
}): Promise<WorkflowAgentSteerReceipt>;
|
|
113
|
-
/** GET /v1/workflows/:id/stream — LIVE S8 self-orchestration progress (`streamWorkflowRun
|
|
114
|
-
* core `subscribeWorkflow
|
|
115
|
-
* frame carries a core `WorkflowEvent` (its `type`
|
|
135
|
+
/** GET /v1/workflows/:id/stream — LIVE S8 self-orchestration progress (`streamWorkflowRun`,
|
|
136
|
+
* server 5.3.0 `src/http/routes/workflows.ts:483` + core `subscribeWorkflow`). SSE; FIRST frame is `meta`
|
|
137
|
+
* `{type:"meta", version, runId}`, then each subsequent frame carries a core `WorkflowEvent` (its `type`
|
|
138
|
+
* becomes the SSE `event` name; see `WorkflowStreamEvent`).
|
|
116
139
|
*
|
|
117
140
|
* 🔴 NOT RESUMABLE (unlike `runs.events`/`trace.stream`): the source is REPLICA-LOCAL + in-process — there is
|
|
118
141
|
* NO durable seq / Last-Event-ID, so a drop is a FULL restart (re-`get()` for the snapshot), not a resume.
|
|
@@ -120,8 +143,17 @@ export declare class WorkflowsResource {
|
|
|
120
143
|
* would silently lose/duplicate frames here). TRANSIENT: a disconnect just ends the iterator. S8 flag-gated
|
|
121
144
|
* off → the route returns 501 (typed error) before any frame; owner-gated (non-owner → 404).
|
|
122
145
|
*
|
|
123
|
-
*
|
|
124
|
-
*
|
|
146
|
+
* 🔴 **There IS one terminal frame, and it means FAILURE** (4.3.0 更正,FW-3): if the core subscription
|
|
147
|
+
* throws mid-stream the server emits `event: error` with
|
|
148
|
+
* `data: {type:"error", errorCode:"workflow.stream_error", message:"workflow stream error"}`
|
|
149
|
+
* (`routes/workflows.ts:517`; `:515-516` 写明了加 `errorCode` 的理由 —— 此前只发人话 message,消费端要么
|
|
150
|
+
* 锚文案、要么把「流断了」和「流正常结束」混为一谈)。这条注释此前写的是「没有终态帧保证」,照它写的消费方
|
|
151
|
+
* 会把一个**失败的** workflow 报成跑完了。正确姿势:分支
|
|
152
|
+
* `if (f.event === "error" && f.data.errorCode === "workflow.stream_error")`,别锚 `message`。
|
|
153
|
+
* 除这条之外没有正常终态帧 —— 迭代器自然结束 ⇒ 用 `get()` 取权威终态 `status`。
|
|
154
|
+
*
|
|
155
|
+
* 保活是**真帧** `event: heartbeat\ndata: {}` @15s(`routes/workflows.ts:496`,旁注写明**故意不用 SSE 注释**:
|
|
156
|
+
* 逐帧解析的 BFF 会把注释丢掉,下游于是看到一个零帧窗口)。别按「跳过以 `:` 开头的行」实现读端。 */
|
|
125
157
|
stream(runId: string, opts?: {
|
|
126
158
|
session?: string;
|
|
127
159
|
signal?: AbortSignal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/resources/workflows.ts"],"names":[],"mappings":"AAAA;;;;;;;;sGAQsG;AACtG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGxF;
|
|
1
|
+
{"version":3,"file":"workflows.d.ts","sourceRoot":"","sources":["../../src/resources/workflows.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,9 +24,22 @@ export class WorkflowsResource {
|
|
|
24
24
|
* 批次①-5:此前单一必填-status 形状不诚实,截断行现网真的没有 status)。`nextOffset` = the pagination
|
|
25
25
|
* cursor, present only when the page came back exactly `limit`-sized (more may exist) — 🔴 此前类型上
|
|
26
26
|
* 完全没有这个字段,消费方读不到分页续读钩子。
|
|
27
|
+
*
|
|
28
|
+
* 🔴 **分页入参(4.3.0,FW-2)**:`limit` 缺省 20、**上限 50**;`offset` >= 0(server `routes/workflows.ts:123-124`)。
|
|
29
|
+
* 在此之前 SDK 补了 `nextOffset` 字段却没补能用它的入口 —— 一个 21 个 agent 的 workflow 拿回 20 条 +
|
|
30
|
+
* `nextOffset: 20`,消费方握着游标却发现没有任何参数能把它送回去,第 21 条 agent 的失败诊断在 SDK 通路上
|
|
31
|
+
* **不可达**,只能绕过 SDK 裸拼 URL(而绕过 SDK 正是这个包存在的理由被否定的那一刻)。
|
|
27
32
|
* 404 = run 不存在/非 owner(无存在性 oracle);501 = journal store 未接(self-orchestration off)。 */
|
|
28
33
|
async journal(runId, opts) {
|
|
29
|
-
|
|
34
|
+
const q = new URLSearchParams();
|
|
35
|
+
if (opts?.session !== undefined)
|
|
36
|
+
q.set("session", opts.session);
|
|
37
|
+
if (opts?.limit !== undefined)
|
|
38
|
+
q.set("limit", String(opts.limit));
|
|
39
|
+
if (opts?.offset !== undefined)
|
|
40
|
+
q.set("offset", String(opts.offset));
|
|
41
|
+
const qs = q.toString();
|
|
42
|
+
return this.t.request({ method: "GET", path: `/v1/workflows/${encodeURIComponent(runId)}/journal${qs ? `?${qs}` : ""}`, signal: opts?.signal });
|
|
30
43
|
}
|
|
31
44
|
/** `session` filter semantics(distinct from the per-id accept-phase): present = strict-equality filter
|
|
32
45
|
* on the run's `originatingSessionId` (fieldless pre-core-1.210 rows are dropped); absent = full list.
|
|
@@ -47,15 +60,29 @@ export class WorkflowsResource {
|
|
|
47
60
|
async get(runId, opts) {
|
|
48
61
|
return this.t.request({ method: "GET", path: `/v1/workflows/${encodeURIComponent(runId)}${this.sessionQs(opts?.session)}`, signal: opts?.signal });
|
|
49
62
|
}
|
|
50
|
-
/** server
|
|
63
|
+
/** server 5.3.0 (`src/http/routes/workflows.ts:25` 的 `WORKFLOW_AGENT_STEER_RE` 常量 / `:194` 的处理段)
|
|
64
|
+
* — STEER a RUNNING AGENT of a WORKFLOW run
|
|
51
65
|
* (the S8 self-orchestration sibling of `runs.steerSubagent`): inject `content` into the labelled live agent;
|
|
52
66
|
* it drains at the agent's next tool round. `label` = the workflow-graph agent label (NOT a toolCallId);
|
|
53
67
|
* a label shared by >1 live agents → 409 `steering.ambiguous_label`. Body `{ content }` (non-empty, else 400).
|
|
54
68
|
* 200 {@link WorkflowAgentSteerReceipt} (`marker`, no `note`).
|
|
55
69
|
*
|
|
56
70
|
* 🔴 REPLICA-LOCAL live handle: 409 `steering.not_running` = agent settled / workflow not running / live on
|
|
57
|
-
* another replica (cross-replica live-steer unsupported).
|
|
58
|
-
*
|
|
71
|
+
* another replica (cross-replica live-steer unsupported).
|
|
72
|
+
*
|
|
73
|
+
* 🔴 **413 `steer.content_too_large`**(4.3.0 补,FW-12):`content` 超过 `STEER_IN_MAX_REQUEST_CHARS` 时
|
|
74
|
+
* server **拒收**(`routes/workflows.ts:232-240`),而不是先截断再投递 —— `:229-231` 写明了为什么必须是拒:
|
|
75
|
+
* 先截会让引擎的 `[+N chars]` 披露低报,且脱敏门要同步、还烧事件循环。消费方应当分出这条臂并提示
|
|
76
|
+
* 「内容太长,请缩短」,而不是落进「未知错误 / 服务异常」兜底(用户根本不知道该怎么办)。
|
|
77
|
+
*
|
|
78
|
+
* 🔴 **501 的门是 `capabilities.workflowsList`,不是 `capabilities.workflows`**(4.3.0 更正,FW-5):
|
|
79
|
+
* 501 的真判据是 `!deps.workflowRunStore`(`routes/workflows.ts:197-200`),而
|
|
80
|
+
* `workflows: deps.workflowsCapable ?? Boolean(deps.workflowRunStore)` 与
|
|
81
|
+
* `workflowsList: Boolean(deps.workflowRunStore)` 是**两个不同的量**(`routes/capabilities.ts:276-289` 的注
|
|
82
|
+
* 逐字区分:`workflows` = ENGINE-CAN「引擎能不能自编排」,`workflowsList` = 能不能 durable 列 run)。
|
|
83
|
+
* 同一判据也管着 `list`/`get`/`journal`/`stream` 四条读面。查错了键的后果双向都有:
|
|
84
|
+
* `workflows:true, workflowsList:false` ⇒ 入口被点亮、每次点都吃 501;反过来则把一个能用的面藏起来。
|
|
85
|
+
* Owner-scoped 404 (operator principals bypass). AT-MOST-ONCE (no retry). */
|
|
59
86
|
async steerAgent(runId, label, message, opts) {
|
|
60
87
|
return this.t.request({
|
|
61
88
|
method: "POST",
|
|
@@ -64,9 +91,10 @@ export class WorkflowsResource {
|
|
|
64
91
|
signal: opts?.signal,
|
|
65
92
|
});
|
|
66
93
|
}
|
|
67
|
-
/** GET /v1/workflows/:id/stream — LIVE S8 self-orchestration progress (`streamWorkflowRun
|
|
68
|
-
* core `subscribeWorkflow
|
|
69
|
-
* frame carries a core `WorkflowEvent` (its `type`
|
|
94
|
+
/** GET /v1/workflows/:id/stream — LIVE S8 self-orchestration progress (`streamWorkflowRun`,
|
|
95
|
+
* server 5.3.0 `src/http/routes/workflows.ts:483` + core `subscribeWorkflow`). SSE; FIRST frame is `meta`
|
|
96
|
+
* `{type:"meta", version, runId}`, then each subsequent frame carries a core `WorkflowEvent` (its `type`
|
|
97
|
+
* becomes the SSE `event` name; see `WorkflowStreamEvent`).
|
|
70
98
|
*
|
|
71
99
|
* 🔴 NOT RESUMABLE (unlike `runs.events`/`trace.stream`): the source is REPLICA-LOCAL + in-process — there is
|
|
72
100
|
* NO durable seq / Last-Event-ID, so a drop is a FULL restart (re-`get()` for the snapshot), not a resume.
|
|
@@ -74,8 +102,17 @@ export class WorkflowsResource {
|
|
|
74
102
|
* would silently lose/duplicate frames here). TRANSIENT: a disconnect just ends the iterator. S8 flag-gated
|
|
75
103
|
* off → the route returns 501 (typed error) before any frame; owner-gated (non-owner → 404).
|
|
76
104
|
*
|
|
77
|
-
*
|
|
78
|
-
*
|
|
105
|
+
* 🔴 **There IS one terminal frame, and it means FAILURE** (4.3.0 更正,FW-3): if the core subscription
|
|
106
|
+
* throws mid-stream the server emits `event: error` with
|
|
107
|
+
* `data: {type:"error", errorCode:"workflow.stream_error", message:"workflow stream error"}`
|
|
108
|
+
* (`routes/workflows.ts:517`; `:515-516` 写明了加 `errorCode` 的理由 —— 此前只发人话 message,消费端要么
|
|
109
|
+
* 锚文案、要么把「流断了」和「流正常结束」混为一谈)。这条注释此前写的是「没有终态帧保证」,照它写的消费方
|
|
110
|
+
* 会把一个**失败的** workflow 报成跑完了。正确姿势:分支
|
|
111
|
+
* `if (f.event === "error" && f.data.errorCode === "workflow.stream_error")`,别锚 `message`。
|
|
112
|
+
* 除这条之外没有正常终态帧 —— 迭代器自然结束 ⇒ 用 `get()` 取权威终态 `status`。
|
|
113
|
+
*
|
|
114
|
+
* 保活是**真帧** `event: heartbeat\ndata: {}` @15s(`routes/workflows.ts:496`,旁注写明**故意不用 SSE 注释**:
|
|
115
|
+
* 逐帧解析的 BFF 会把注释丢掉,下游于是看到一个零帧窗口)。别按「跳过以 `:` 开头的行」实现读端。 */
|
|
79
116
|
async *stream(runId, opts) {
|
|
80
117
|
const o = {
|
|
81
118
|
method: "GET",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/resources/workflows.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/resources/workflows.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,6 +24,40 @@ export interface WorkspaceFile {
|
|
|
24
24
|
/** [1894]③ 二进制判别(server 首 8KiB NUL 嗅探,git 同判据)——web 预览器分流用。 */
|
|
25
25
|
binary: boolean;
|
|
26
26
|
}
|
|
27
|
+
/** `GET …/workspace` 的 200 信封(server `routes/sessions.ts:624-629`)。
|
|
28
|
+
*
|
|
29
|
+
* 🔴 4.3.0 提成 **exported type**(此前是 `list()` 返回位上的**内联闭合字面量**):两道 spec 门谁都扫不到
|
|
30
|
+
* 方法返回位置的内联形 —— `spec-field-drift-gate` 只扫 `src/types.ts` 的 exported interface,
|
|
31
|
+
* `spec-resource-schema-gate` 只扫 `src/resources/*.ts` 的 exported type。于是这个信封漏了 `sessionId`
|
|
32
|
+
* (server 与 spec 都把它列为 required)整整一个 major 版本而 CI 全绿。提出来 = 让第二道门罩住它。 */
|
|
33
|
+
export interface WorkspaceSnapshotPage {
|
|
34
|
+
/** 恒发 —— 回声校验(拿它与请求的 id 对一遍防串会话)在 TS 下此前根本写不出来,只能强制断言绕过。 */
|
|
35
|
+
sessionId: string;
|
|
36
|
+
snapshots: WorkspaceSnapshotRow[];
|
|
37
|
+
/** 最新快照键;无快照时缺席。与展示行**同源**(server 防 ghost key:latest 绝不指向已被 reap 的快照)。 */
|
|
38
|
+
latest?: string;
|
|
39
|
+
/** ⚠️ **本页行数,不是快照总数** —— `total = snapshots.length`(server `:628`)。而且这条腿**没有任何
|
|
40
|
+
* 分页游标**:超过 `limit`(上限 100)的老快照取不到。渲「共 N 个快照」会在快照多于 limit 时永远显示
|
|
41
|
+
* limit,用户以为老快照被清了。
|
|
42
|
+
* 🔴 同族的 {@link WorkspaceTreePage} 用**同一个键名**表示 `all.length` 的**全量** —— 同名键在同一族的
|
|
43
|
+
* 两条腿上语义相反,这是 server 侧的既成事实,别把两处的 `total` 当同一个量读。 */
|
|
44
|
+
total: number;
|
|
45
|
+
[k: string]: unknown;
|
|
46
|
+
}
|
|
47
|
+
/** `GET …/workspace/:key/tree` 的 200 信封(server `routes/sessions.ts:651-657`)。提成 exported type 的
|
|
48
|
+
* 理由同 {@link WorkspaceSnapshotPage}。 */
|
|
49
|
+
export interface WorkspaceTreePage {
|
|
50
|
+
/** 恒发(server 与 spec 均列为 required)。 */
|
|
51
|
+
sessionId: string;
|
|
52
|
+
/** 解析后的**真实**快照键 —— 请求里传 `"latest"` 别名时,这里回的是它解析到的那个 uuidv7 键。 */
|
|
53
|
+
key: string;
|
|
54
|
+
entries: WorkspaceTreeEntry[];
|
|
55
|
+
/** ⚠️ 这条腿的 `total` 是**真·全量**(`all.length`),与 {@link WorkspaceSnapshotPage.total} 语义相反。 */
|
|
56
|
+
total: number;
|
|
57
|
+
/** 在场 = 还有下一页;把它当 `offset` 送回来。 */
|
|
58
|
+
nextOffset?: number;
|
|
59
|
+
[k: string]: unknown;
|
|
60
|
+
}
|
|
27
61
|
export declare class WorkspaceResource {
|
|
28
62
|
private readonly t;
|
|
29
63
|
constructor(t: Transport);
|
|
@@ -31,23 +65,14 @@ export declare class WorkspaceResource {
|
|
|
31
65
|
list(sessionId: string, opts?: {
|
|
32
66
|
limit?: number;
|
|
33
67
|
signal?: AbortSignal;
|
|
34
|
-
}): Promise<
|
|
35
|
-
snapshots: WorkspaceSnapshotRow[];
|
|
36
|
-
latest?: string;
|
|
37
|
-
total: number;
|
|
38
|
-
}>;
|
|
68
|
+
}): Promise<WorkspaceSnapshotPage>;
|
|
39
69
|
/** `GET …/workspace/:key/tree` — 文件树(path 序稳定;limit 1..2000 默认 500 + offset 分页;
|
|
40
70
|
* `key="latest"` 别名可用)。`nextOffset` 在场=还有下一页。 */
|
|
41
71
|
tree(sessionId: string, key: string, opts?: {
|
|
42
72
|
limit?: number;
|
|
43
73
|
offset?: number;
|
|
44
74
|
signal?: AbortSignal;
|
|
45
|
-
}): Promise<
|
|
46
|
-
key: string;
|
|
47
|
-
entries: WorkspaceTreeEntry[];
|
|
48
|
-
total: number;
|
|
49
|
-
nextOffset?: number;
|
|
50
|
-
}>;
|
|
75
|
+
}): Promise<WorkspaceTreePage>;
|
|
51
76
|
/** `GET …/workspace/:key/file?path=` — 单文件字节(≤ capabilities.workspace.maxFileBytes,默认 8MiB)。
|
|
52
77
|
* 超限=413 结构化信封([1894]①)⇒ typed {@link WorkspaceFileTooLargeError}(带 sizeBytes/limit)——
|
|
53
78
|
* web 渲「文件过大,下载查看」卡,archive 口是退路。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/resources/workspace.ts"],"names":[],"mappings":"AAAA;;;;;sEAKsE;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,
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/resources/workspace.ts"],"names":[],"mappings":"AAAA;;;;;sEAKsE;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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/resources/workspace.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/resources/workspace.ts"],"names":[],"mappings":"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"}
|
package/dist/sync.d.ts
CHANGED
|
@@ -11,8 +11,14 @@
|
|
|
11
11
|
* entry id 是 uuidv7、**不是内容寻址**,而 wire 本身就收调用方给的 entries ⇒「同 id、异载荷」结构上完全可能。
|
|
12
12
|
* 于是集合比较会把它判成 `identical`,entries **整段跳过**,调用方拿到"已同步"而目的端仍是自己那份内容。
|
|
13
13
|
* 集合比较能精确回答的是「**id 集合**是否分叉」,**不能**回答「内容是否相同」—— 这两件事在这个契约里被
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* 长期混为一谈。
|
|
15
|
+
*
|
|
16
|
+
* ✅ **真修已接线(4.3.0)**:方案 B 的 `logDigest`(黑板 [1701]/[1702] 三端对齐)此前只在 server 落地,SDK 这一端
|
|
17
|
+
* 从未送过这个键 ⇒ `payloadVerified:true` 在本 SDK 上**结构性不可达**,而三处 JSDoc 把「SDK 的遗漏」写成了
|
|
18
|
+
* 「server 的现状」(「现值恒 `entry-ids`」/「现值恒 `false`」)。现在 {@link PushSessionOptions.logDigest} 会
|
|
19
|
+
* 透传到 Phase A,且**给了摘要就不再在本地短路 identical** —— 因为本地 dry-run 只比 id 集合,短路会把服务端
|
|
20
|
+
* 唯一能做内容判定的那一步跳掉。给了摘要 ⇒ 由 server 判:相等 ⇒ `basis:"entry-ids+digest"` + `payloadVerified:true`;
|
|
21
|
+
* 不等/不可比 ⇒ 开 staging 走完整同步(安全方向)。不给 ⇒ 与 4.2.0 逐字节同行为。
|
|
16
22
|
*
|
|
17
23
|
* No I/O, no dependencies — a byte-faithful copy so the local peer and the cloud agree on the relation without a
|
|
18
24
|
* round-trip. `srcIds`/`dstIds` are OLDEST-FIRST so the fork `commonAncestor` (the deepest shared id) and the
|
|
@@ -33,6 +39,19 @@ export interface PushSessionOptions {
|
|
|
33
39
|
/** Echoed into import Phase A. REQUIRED to apply a `fork`/`stale` push (dst history would be lost);
|
|
34
40
|
* never defaulted — the caller must have shown the divergence to a human first. */
|
|
35
41
|
resolution?: "overwrite-dst";
|
|
42
|
+
/** 🔴 源端整条 entry 日志的**内容摘要**(core `sessionLogDigest`,scheme `sema-log-v3`;server 这条腿的
|
|
43
|
+
* core 下限是 ^1.416.0)。SDK 零运行时依赖、**不自己算** —— 手里已有 core 的调用方透传它,没有的省略。
|
|
44
|
+
*
|
|
45
|
+
* 给了它会改变两件事(缺省不给 = 与 4.2.0 逐字节同行为):
|
|
46
|
+
* ① **本地 dry-run 的 `identical` 短路被跳过** —— 本地 plan 只比 id 集合,短路会把服务端唯一能做内容
|
|
47
|
+
* 判定的那一步跳掉。给了摘要就一路走到 Phase A,让 server 拿它自己的日志算一次摘要来判。
|
|
48
|
+
* ② Phase A 回的 {@link PushSessionResult.payloadVerified} 才可能为 `true`(相等 ⇒ 真短路);
|
|
49
|
+
* 不等或不可比 ⇒ server 开 staging 走完整同步 —— 「同 id 异载荷」的分叉会话不再被判成已同步。 */
|
|
50
|
+
logDigest?: string;
|
|
51
|
+
/** Phase B 用**真流式**请求体(`ReadableStream`,常量内存)而不是先在内存里拼完整条 NDJSON。
|
|
52
|
+
* opt-in:流式请求体要求运行时 `fetch` 支持 `duplex:"half"`(Node ≥18 undici / Deno 有;polyfill 未必)。
|
|
53
|
+
* 详见 {@link import("./resources/session-sync.js").SessionSyncResource.importEntries}。 */
|
|
54
|
+
stream?: boolean;
|
|
36
55
|
signal?: AbortSignal;
|
|
37
56
|
}
|
|
38
57
|
export interface PushSessionResult {
|
|
@@ -42,11 +61,14 @@ export interface PushSessionResult {
|
|
|
42
61
|
* ⚠️ 后一种情况下**不能**推断"dst 已逐字持有" —— 这个类型此前的注释就是这么写的,而它不成立
|
|
43
62
|
* (见文件顶注的纠正)。要判"内容真的同步了",看 {@link payloadVerified}。 */
|
|
44
63
|
pushed: boolean;
|
|
45
|
-
/** 🔴 分类**判据**(server ≥1.277 / 本地 dry-run 同值)
|
|
64
|
+
/** 🔴 分类**判据**(server ≥1.277 / 本地 dry-run 同值)。两个真值:
|
|
65
|
+
* - `"entry-ids"` —— 只比了 entry id 集合,**内容未校验**(没送 {@link PushSessionOptions.logDigest} 时的形);
|
|
66
|
+
* - `"entry-ids+digest"` —— 调用方送了可比摘要且相等,**内容真的验过**。
|
|
46
67
|
* 开集串,未知值按"未验证内容"降级。仅在 `identical` 这类**跳过写入**的路径上有值 —— 真走完 Phase B 时
|
|
47
68
|
* entries 是实际传输过去的,不存在"判据"问题,那时本字段缺席。 */
|
|
48
|
-
basis?: "entry-ids" | (string & {});
|
|
49
|
-
/** 🔴
|
|
69
|
+
basis?: "entry-ids" | "entry-ids+digest" | (string & {});
|
|
70
|
+
/** 🔴 是否**验证过载荷**。要它为 `true`,调用方必须送 {@link PushSessionOptions.logDigest}(4.3.0 起可送);
|
|
71
|
+
* 不送则恒 `false` —— 那是判据的如实回声,不是 bug。
|
|
50
72
|
* ⚠️ **缺席 ≠ 已验证**:老 server(<1.277)不带这个字段而判据同样只有 id 集合;真走完 Phase B 时也缺席
|
|
51
73
|
* (那时内容确实传过去了)。所以要表达"内容未被校验"请配合 `relation` 一起读:
|
|
52
74
|
* `relation === "identical" && payloadVerified !== true` 才是"跳过了写入且未校验内容"。 */
|
|
@@ -67,8 +89,13 @@ export interface PushSessionResult {
|
|
|
67
89
|
/**
|
|
68
90
|
* PUSH one session from peer `src` into peer `dst` (same-id, cross-backend):
|
|
69
91
|
* src manifest → dst dry-run plan (§7 classify) → [conflict? return, don't write] → blobs (content-addressed
|
|
70
|
-
* PUTs) → import Phase A (small metadata + lease/active-run guards) → Phase B (
|
|
71
|
-
*
|
|
92
|
+
* PUTs) → import Phase A (small metadata + lease/active-run guards) → Phase B (the src entry stream into the
|
|
93
|
+
* staged import).
|
|
94
|
+
*
|
|
95
|
+
* 🔴 Phase B memory (corrected 4.3.0): by default the NDJSON body is BUILT IN MEMORY first — peak = the whole log.
|
|
96
|
+
* This module used to claim the opposite ("never materializes the whole log in memory beyond the NDJSON body") and
|
|
97
|
+
* `pullSessionBundle`'s "unlike the push pipe" contrast was written against that false premise. Pass
|
|
98
|
+
* {@link PushSessionOptions.stream `stream:true`} for the constant-memory streaming body.
|
|
72
99
|
*
|
|
73
100
|
* Conflict contract (③): a `fork`/`stale` seen at plan time is RETURNED (`{pushed:false, conflict}`) so the
|
|
74
101
|
* caller can render the divergence; a TOCTOU flip after the plan (dst advanced mid-push) THROWS the typed
|
|
@@ -92,7 +119,9 @@ export interface PulledSession {
|
|
|
92
119
|
/**
|
|
93
120
|
* PULL one session OUT of peer `src` into memory (manifest + full entry log [+ blobs]) for callers that land
|
|
94
121
|
* the state outside an engine — e.g. the sema shell converting entries into its CC-format `<id>.jsonl`.
|
|
95
|
-
* 🔴 This MATERIALIZES the whole entry log
|
|
122
|
+
* 🔴 This MATERIALIZES the whole entry log — the caller owns the memory trade-off. (Until 4.3.0 this line read
|
|
123
|
+
* "unlike the push pipe"; that contrast was FALSE — the push path also built the whole NDJSON body in memory.
|
|
124
|
+
* It now holds only against `pushSessionBundle(..., {stream:true})`.)
|
|
96
125
|
* A truncated entry stream throws SyncTruncatedError (the NDJSON trailer guard) — never a silently short log.
|
|
97
126
|
*/
|
|
98
127
|
export declare function pullSessionBundle(src: SessionSyncPeer, sessionId: string, opts?: PullSessionOptions): Promise<PulledSession>;
|
package/dist/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EACV,eAAe,EACf,aAAa,EACb,oBAAoB,EAEpB,YAAY,EACb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAEvE;2GAC2G;AAC3G,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,YAAY,CAkCrG;AAoBD,gHAAgH;AAChH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE;QAAE,IAAI,EAAE,mBAAmB,CAAA;KAAE,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IACjC;wFACoF;IACpF,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B;;;;;;;0EAOsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;8FAE0F;IAC1F,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,gHAAgH;IAChH,QAAQ,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IACnC;;4DAEwD;IACxD,MAAM,EAAE,OAAO,CAAC;IAChB;;;;8CAI0C;IAC1C,KAAK,CAAC,EAAE,WAAW,GAAG,kBAAkB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACzD;;;;kFAI8E;IAC9E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;8GAC0G;IAC1G,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,WAAW,EAAE,MAAM,CAAC;IACpB,mGAAmG;IACnG,QAAQ,EAAE,eAAe,CAAC;IAC1B;sFACkF;IAClF,IAAI,EAAE,YAAY,CAAC;CACpB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,eAAe,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CA0E5B;AAED,MAAM,WAAW,kBAAkB;IACjC;6GACyG;IACzG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,eAAe,CAAC;IAC1B,wEAAwE;IACxE,MAAM,EAAE,aAAa,CAAC;IACtB,6EAA6E;IAC7E,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,eAAe,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,aAAa,CAAC,CAyBxB;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC,EAC5D,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CA8D5B"}
|
package/dist/sync.js
CHANGED
|
@@ -36,8 +36,13 @@ export function classifySyncRelationshipByIds(srcIds, dstIds) {
|
|
|
36
36
|
/**
|
|
37
37
|
* PUSH one session from peer `src` into peer `dst` (same-id, cross-backend):
|
|
38
38
|
* src manifest → dst dry-run plan (§7 classify) → [conflict? return, don't write] → blobs (content-addressed
|
|
39
|
-
* PUTs) → import Phase A (small metadata + lease/active-run guards) → Phase B (
|
|
40
|
-
*
|
|
39
|
+
* PUTs) → import Phase A (small metadata + lease/active-run guards) → Phase B (the src entry stream into the
|
|
40
|
+
* staged import).
|
|
41
|
+
*
|
|
42
|
+
* 🔴 Phase B memory (corrected 4.3.0): by default the NDJSON body is BUILT IN MEMORY first — peak = the whole log.
|
|
43
|
+
* This module used to claim the opposite ("never materializes the whole log in memory beyond the NDJSON body") and
|
|
44
|
+
* `pullSessionBundle`'s "unlike the push pipe" contrast was written against that false premise. Pass
|
|
45
|
+
* {@link PushSessionOptions.stream `stream:true`} for the constant-memory streaming body.
|
|
41
46
|
*
|
|
42
47
|
* Conflict contract (③): a `fork`/`stale` seen at plan time is RETURNED (`{pushed:false, conflict}`) so the
|
|
43
48
|
* caller can render the divergence; a TOCTOU flip after the plan (dst advanced mid-push) THROWS the typed
|
|
@@ -50,7 +55,9 @@ export async function pushSessionBundle(src, dst, sessionId, opts) {
|
|
|
50
55
|
// Dry-run classify BEFORE any write (and before any blob upload — don't spend bandwidth on a push the
|
|
51
56
|
// conflict gate will refuse).
|
|
52
57
|
const rel = await dst.sessions.sync.plan(sessionId, { entryIds: manifest.entryIds }, sopts);
|
|
53
|
-
|
|
58
|
+
// 🔴 只在**没有内容摘要**时本地短路 identical:本地 dry-run 只比 id 集合,短路会把服务端唯一能做内容判定的
|
|
59
|
+
// 那一步(Phase A 拿 logDigest 与目的端日志摘要对比)整个跳掉 —— 「同 id 异载荷」就永远被判成已同步。
|
|
60
|
+
if (rel.relation === "identical" && opts?.logDigest === undefined) {
|
|
54
61
|
// 本地 dry-run 判 identical ⇒ 同样只比了 id 集合,如实标注(否则调用方在这条路上连字段都看不到)
|
|
55
62
|
return { relation: "identical", pushed: true, entryCount: 0, blobsPushed: 0, manifest, plan: rel, basis: "entry-ids", payloadVerified: false };
|
|
56
63
|
}
|
|
@@ -88,6 +95,7 @@ export async function pushSessionBundle(src, dst, sessionId, opts) {
|
|
|
88
95
|
policy: manifest.policy,
|
|
89
96
|
anchors: manifest.anchors,
|
|
90
97
|
...(opts?.resolution ? { resolution: opts.resolution } : {}),
|
|
98
|
+
...(opts?.logDigest !== undefined ? { logDigest: opts.logDigest } : {}),
|
|
91
99
|
}, sopts);
|
|
92
100
|
if (!staged.stagingId) {
|
|
93
101
|
// Phase A itself classified `identical` (raced to equality) — dst already holds the log.
|
|
@@ -99,14 +107,17 @@ export async function pushSessionBundle(src, dst, sessionId, opts) {
|
|
|
99
107
|
...(staged.payloadVerified !== undefined ? { payloadVerified: staged.payloadVerified } : {}),
|
|
100
108
|
};
|
|
101
109
|
}
|
|
102
|
-
// Phase B —
|
|
103
|
-
|
|
110
|
+
// Phase B — the src entry stream into the staged import (async-iterable in, NDJSON out; `stream:true` makes it
|
|
111
|
+
// a real constant-memory pipe, see PushSessionOptions.stream).
|
|
112
|
+
const committed = await dst.sessions.sync.importEntries(sessionId, staged.stagingId, src.sessions.sync.entries(sessionId, undefined, sopts), { ...sopts, ...(opts?.stream === true ? { stream: true } : {}) });
|
|
104
113
|
return { relation: committed.relation, pushed: true, entryCount: manifest.entryCount, blobsPushed, manifest, plan: rel };
|
|
105
114
|
}
|
|
106
115
|
/**
|
|
107
116
|
* PULL one session OUT of peer `src` into memory (manifest + full entry log [+ blobs]) for callers that land
|
|
108
117
|
* the state outside an engine — e.g. the sema shell converting entries into its CC-format `<id>.jsonl`.
|
|
109
|
-
* 🔴 This MATERIALIZES the whole entry log
|
|
118
|
+
* 🔴 This MATERIALIZES the whole entry log — the caller owns the memory trade-off. (Until 4.3.0 this line read
|
|
119
|
+
* "unlike the push pipe"; that contrast was FALSE — the push path also built the whole NDJSON body in memory.
|
|
120
|
+
* It now holds only against `pushSessionBundle(..., {stream:true})`.)
|
|
110
121
|
* A truncated entry stream throws SyncTruncatedError (the NDJSON trailer guard) — never a silently short log.
|
|
111
122
|
*/
|
|
112
123
|
export async function pullSessionBundle(src, sessionId, opts) {
|
|
@@ -150,7 +161,8 @@ export async function importSessionBundle(dst, pulled, opts) {
|
|
|
150
161
|
const { manifest, bundle, blobs } = pulled;
|
|
151
162
|
const sessionId = bundle.sessionId;
|
|
152
163
|
const rel = await dst.sessions.sync.plan(sessionId, { entryIds: manifest.entryIds }, sopts);
|
|
153
|
-
|
|
164
|
+
// 与 pushSessionBundle 同判据:给了 logDigest 就不本地短路,交给 Phase A 做内容判定。
|
|
165
|
+
if (rel.relation === "identical" && opts?.logDigest === undefined) {
|
|
154
166
|
// 本地 dry-run 判 identical ⇒ 同样只比了 id 集合,如实标注(否则调用方在这条路上连字段都看不到)
|
|
155
167
|
return { relation: "identical", pushed: true, entryCount: 0, blobsPushed: 0, manifest, plan: rel, basis: "entry-ids", payloadVerified: false };
|
|
156
168
|
}
|
|
@@ -185,6 +197,7 @@ export async function importSessionBundle(dst, pulled, opts) {
|
|
|
185
197
|
policy: bundle.policy,
|
|
186
198
|
anchors: bundle.anchors,
|
|
187
199
|
...(opts?.resolution ? { resolution: opts.resolution } : {}),
|
|
200
|
+
...(opts?.logDigest !== undefined ? { logDigest: opts.logDigest } : {}),
|
|
188
201
|
}, sopts);
|
|
189
202
|
if (!staged.stagingId) {
|
|
190
203
|
// 透传服务端的判据 —— cli 黑板 [1704] 抓到的管道缺口:字段只加在 `ImportStaged` 上、这一层没穿透,
|
|
@@ -195,7 +208,10 @@ export async function importSessionBundle(dst, pulled, opts) {
|
|
|
195
208
|
...(staged.payloadVerified !== undefined ? { payloadVerified: staged.payloadVerified } : {}),
|
|
196
209
|
};
|
|
197
210
|
}
|
|
198
|
-
const committed = await dst.sessions.sync.importEntries(sessionId, staged.stagingId, bundle.entries,
|
|
211
|
+
const committed = await dst.sessions.sync.importEntries(sessionId, staged.stagingId, bundle.entries, {
|
|
212
|
+
...sopts,
|
|
213
|
+
...(opts?.stream === true ? { stream: true } : {}),
|
|
214
|
+
});
|
|
199
215
|
return { relation: committed.relation, pushed: true, entryCount: bundle.entries.length, blobsPushed, manifest, plan: rel };
|
|
200
216
|
}
|
|
201
217
|
//# sourceMappingURL=sync.js.map
|
package/dist/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.d.ts
CHANGED
|
@@ -24,7 +24,18 @@ export interface TransportOptions {
|
|
|
24
24
|
* identity header. */
|
|
25
25
|
principalHeader?: string;
|
|
26
26
|
}
|
|
27
|
-
/** Statuses the SDK retries (with backoff). 409 is NOT here — it's a semantic conflict, surfaced typed.
|
|
27
|
+
/** Statuses the SDK retries (with backoff). 409 is NOT here — it's a semantic conflict, surfaced typed.
|
|
28
|
+
*
|
|
29
|
+
* 🔴 [2400] X-16 —— **request() 这一条腿的闭集重试矩阵**,六个码,没有第七个。
|
|
30
|
+
* - 语义:只重试「同一个请求再发一次是安全的、且服务端明确表示了这次不算数」的码。
|
|
31
|
+
* 408 请求超时 / 429 限流 / 500 / 502 / 503 / 504 —— 全是「重来可能成功」且**不会**产生第二份副作用的形。
|
|
32
|
+
* - **不在集内的一律不重试**,尤其是 409(冲突:CAS 基线错了,重发只会再错一次)、400 / 422(形错)、
|
|
33
|
+
* 401 / 403(凭证/权限)、404、413 —— 这些码重试是纯浪费,且会把一个确定性的失败拖成一串超时。
|
|
34
|
+
* - **只有 {@link Transport.request} 消费它**。{@link Transport.openStream} 与 {@link Transport.openRaw}
|
|
35
|
+
* 是 SINGLE-SHOT by construction:它们各自只发一次 fetch、把 Response 原样交出去,**从不查这张表**。
|
|
36
|
+
* 流的「重试」在语义上是「从 Last-Event-ID 重开」,只有调用方的游标知道从哪继续 —— 所以那件事归
|
|
37
|
+
* `parseSse` / `parseFrameStream` / `approvals.stream` 的循环,不归 transport。别把这张表读成全局策略。
|
|
38
|
+
* - 另有一层**正交**的门:非幂等的提交类动词即使拿到 503 也不重试(见 `request` 的 `submit` 判据)。 */
|
|
28
39
|
export declare const RETRYABLE_STATUS: Set<number>;
|
|
29
40
|
/**
|
|
30
41
|
* 🔴 **非 2xx `Response` → typed Error 的唯一拼装口**(S2 收编,SDK 1.1.0)。
|
|
@@ -85,8 +96,11 @@ export declare class Transport {
|
|
|
85
96
|
openRaw(opts: {
|
|
86
97
|
method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
87
98
|
path: string;
|
|
88
|
-
/** RAW request body (bytes for a blob PUT, an NDJSON string for a Phase-B stream). NOT JSON-serialized.
|
|
89
|
-
|
|
99
|
+
/** RAW request body (bytes for a blob PUT, an NDJSON string for a Phase-B stream). NOT JSON-serialized.
|
|
100
|
+
* 🔴 A `ReadableStream<Uint8Array>` is a TRUE streaming body (constant memory — session-sync Phase B's
|
|
101
|
+
* `stream:true` leg). It requires `duplex: "half"`, which this method sets; Node ≥18 undici and Deno honor
|
|
102
|
+
* it, a polyfilled `fetch` may not — that is why every streaming leg in the SDK is opt-in, never the default. */
|
|
103
|
+
rawBody?: Uint8Array | string | ReadableStream<Uint8Array>;
|
|
90
104
|
accept?: string;
|
|
91
105
|
contentType?: string;
|
|
92
106
|
/** Generic caller extras — SAME reserved-guard + merge order as openStream (built-ins always win;
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAeA;;sGAEsG;AACtG,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;AAE1F,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB;;;;;4GAKwG;IACxG,YAAY,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzE;;6GAEyG;IACzG,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB;;;2BAGuB;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAeA;;sGAEsG;AACtG,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,KAAK,CAAC;AAE1F,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,KAAK,CAAC;IACxB;;;;;4GAKwG;IACxG,YAAY,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzE;;6GAEyG;IACzG,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB;;;2BAGuB;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;wEAWwE;AACxE,eAAO,MAAM,gBAAgB,aAA0C,CAAC;AAExE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAE,WAAwB,GAAG,OAAO,CAAC,KAAK,CAAC,CAGzG;AAgBD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;CAClC;AAED,qBAAa,SAAS;IAKR,OAAO,CAAC,QAAQ,CAAC,CAAC;IAJ9B;yGACqG;IACrG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAc;gBAEV,CAAC,EAAE,gBAAgB;IAIhD,OAAO,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAI/D,+DAA+D;IACzD,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC;IA8ClD;;;;;;;;;;;4GAWwG;IAClG,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAetH;;;;;gHAK4G;IACtG,OAAO,CAAC,IAAI,EAAE;QAClB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;QACpD,IAAI,EAAE,MAAM,CAAC;QACb;;;0HAGkH;QAClH,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB;4FACoF;QACpF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;KAClC,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwBrB;;;;2CAIuC;IACvC,SAAS,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC;IAIxC;8CAC0C;IAC1C,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK;IAKlD,8FAA8F;IAC9F,OAAO,CAAC,aAAa;CAatB"}
|