@sema-agent/sdk 26.0.0 → 27.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.
- package/README.md +129 -1
- package/dist/abort.d.ts +25 -0
- package/dist/abort.d.ts.map +1 -0
- package/dist/abort.js +42 -0
- package/dist/abort.js.map +1 -0
- package/dist/client.d.ts +8 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +5 -4
- package/dist/client.js.map +1 -1
- package/dist/control-client.d.ts +4 -2
- package/dist/control-client.d.ts.map +1 -1
- package/dist/control-client.js +3 -3
- package/dist/control-client.js.map +1 -1
- package/dist/errors.d.ts +80 -8
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +32 -6
- package/dist/errors.js.map +1 -1
- package/dist/events.d.ts +31 -2
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +12 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/model-route-env/index.d.ts +11 -4
- package/dist/model-route-env/index.d.ts.map +1 -1
- package/dist/model-route-env/index.js +52 -3
- package/dist/model-route-env/index.js.map +1 -1
- package/dist/registry/auth.d.ts.map +1 -1
- package/dist/registry/auth.js +23 -13
- package/dist/registry/auth.js.map +1 -1
- package/dist/registry/client.d.ts +9 -1
- package/dist/registry/client.d.ts.map +1 -1
- package/dist/registry/client.js +17 -2
- package/dist/registry/client.js.map +1 -1
- package/dist/registry/read-body.d.ts +2 -0
- package/dist/registry/read-body.d.ts.map +1 -0
- package/dist/registry/read-body.js +24 -0
- package/dist/registry/read-body.js.map +1 -0
- package/dist/registry/scopes-effective.d.ts.map +1 -1
- package/dist/registry/scopes-effective.js +4 -2
- package/dist/registry/scopes-effective.js.map +1 -1
- package/dist/resources/approvals.d.ts +27 -10
- package/dist/resources/approvals.d.ts.map +1 -1
- package/dist/resources/approvals.js +5 -4
- package/dist/resources/approvals.js.map +1 -1
- package/dist/resources/attachments.d.ts +2 -1
- package/dist/resources/attachments.d.ts.map +1 -1
- package/dist/resources/attachments.js +3 -9
- package/dist/resources/attachments.js.map +1 -1
- package/dist/resources/fleet.d.ts +4 -36
- package/dist/resources/fleet.d.ts.map +1 -1
- package/dist/resources/fleet.js +40 -1
- package/dist/resources/fleet.js.map +1 -1
- package/dist/resources/ops.d.ts +2 -1
- package/dist/resources/ops.d.ts.map +1 -1
- package/dist/resources/ops.js +4 -6
- package/dist/resources/ops.js.map +1 -1
- package/dist/resources/rules.d.ts +1 -1
- package/dist/resources/runs.d.ts +4 -1
- package/dist/resources/runs.d.ts.map +1 -1
- package/dist/resources/runs.js +4 -1
- package/dist/resources/runs.js.map +1 -1
- package/dist/resources/session-sync.d.ts +20 -5
- package/dist/resources/session-sync.d.ts.map +1 -1
- package/dist/resources/session-sync.js +16 -10
- package/dist/resources/session-sync.js.map +1 -1
- package/dist/resources/sessions.d.ts +14 -6
- package/dist/resources/sessions.d.ts.map +1 -1
- package/dist/resources/sessions.js +15 -15
- package/dist/resources/sessions.js.map +1 -1
- package/dist/resources/side-query.d.ts +8 -0
- package/dist/resources/side-query.d.ts.map +1 -1
- package/dist/resources/side-query.js.map +1 -1
- package/dist/resources/tasks.d.ts +2 -0
- package/dist/resources/tasks.d.ts.map +1 -1
- package/dist/resources/tasks.js +2 -0
- package/dist/resources/tasks.js.map +1 -1
- package/dist/resources/tool-approvals.d.ts +61 -8
- package/dist/resources/tool-approvals.d.ts.map +1 -1
- package/dist/resources/tool-approvals.js +32 -9
- package/dist/resources/tool-approvals.js.map +1 -1
- package/dist/settings.d.ts +1 -1
- package/dist/sse.d.ts.map +1 -1
- package/dist/sse.js +4 -4
- package/dist/sse.js.map +1 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +2 -0
- package/dist/sync.js.map +1 -1
- package/dist/transport.d.ts +66 -23
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +129 -27
- package/dist/transport.js.map +1 -1
- package/dist/types.d.ts +134 -27
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/openapi.yaml +418 -54
- package/package.json +2 -3
|
@@ -24,15 +24,23 @@ export declare class RegistryClient {
|
|
|
24
24
|
* single-use,两个并发 refresh 里后到的那个必吃 invalid_grant 并把刚续上的会话整个清掉。 */
|
|
25
25
|
private refreshInFlight;
|
|
26
26
|
constructor(config: RegistryClientConfig);
|
|
27
|
+
/** 同 {@link RegistryClient.requestRaw}(非 2xx 抛类型错);取消律在共享刷新在飞时的例外见 `requestRaw`。 */
|
|
27
28
|
request<T>(opts: RegistryRequestOptions): Promise<T>;
|
|
28
29
|
/** 非抛的原始面(R2 的条件请求用:304/412 等**语义状态**要直出给调用方判别,不是错误)。
|
|
29
|
-
* 401 仍在这里走 single-flight refresh + 重试一次——凭证生命周期对所有面统一,绝不旁路。
|
|
30
|
+
* 401 仍在这里走 single-flight refresh + 重试一次——凭证生命周期对所有面统一,绝不旁路。
|
|
31
|
+
* 🔴 **取消律的一处例外(共享刷新)**:请求在 401 后加入一次**在飞的共享刷新**再被 abort,不会立即以 `signal.reason` 拒 —— 它等这次刷新落定:
|
|
32
|
+
* 刷新失败 ⇒ 以**刷新自己的错误**拒(不是 `signal.reason`);刷新成功 ⇒ 不再重发、以 `signal.reason` 拒。
|
|
33
|
+
* 另一面:刷新用的是发起它的那个请求的 `signal` —— 发起者 abort ⇒ 刷新随之取消(`fetch` 听 signal 时),加入这次刷新的别的请求哪怕自己没 abort,也以发起者的 `signal.reason` 拒(abort 落在刷新请求在途时两版同;落在读刷新应答体时 26.1.0 拒 `TypeError`)。 */
|
|
30
34
|
requestRaw(opts: RegistryRequestOptions): Promise<{
|
|
31
35
|
status: number;
|
|
32
36
|
body: unknown;
|
|
33
37
|
headers: Headers;
|
|
34
38
|
}>;
|
|
35
39
|
private refreshOnce;
|
|
40
|
+
/** 单发一次(网络重试不在本引擎,见模块头)。取消律与 worker 传输层的重试器同一条规则(同一只 `throwIfAborted`):
|
|
41
|
+
* 已 abort ⇒ 以 `signal.reason` 拒、**不发请求**(本引擎把调用方 signal 经 `abort` 事件桥到自己的 controller,监听器挂在一只**已** abort 的 signal 上永不触发 ——
|
|
42
|
+
* 所以查在取令牌与「没登录」判之后、挂监听之前 —— 没登录的事实先于取消,与 26.1.0 同);飞行中 abort 而请求以失败告终 ⇒ 以 `signal.reason` 拒(内部 controller 的拒因是平台 `AbortError`,不交出去);
|
|
43
|
+
* 读体走子路径唯一的读体口 {@link readJsonBody}(体被 abort 截断 ⇒ `signal.reason`;读完的体从不因 abort 丢弃)。 */
|
|
36
44
|
private rawRequest;
|
|
37
45
|
/** 非 2xx ⇒ 本子路径唯一的构造点 {@link toRegistryApiError}(scope-gone 409 ⇒ `ScopeGoneError`,仍是 `RegistryApiError`)。 */
|
|
38
46
|
private settle;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,uEAAuE;IACvE,OAAO,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,MAAM,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC;uEACmE;IACnE,OAAO,CAAC,eAAe,CAA+B;gBAE1C,MAAM,EAAE,oBAAoB;IAOxC,oFAAoF;IAC9E,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D;;;;oLAIgL;IAC1K,UAAU,CAAC,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAQ5G,OAAO,CAAC,WAAW;IASnB;;;6FAGyF;YAC3E,UAAU;IA8BxB,8GAA8G;IAC9G,OAAO,CAAC,MAAM;CAIf"}
|
package/dist/registry/client.js
CHANGED
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
* buildHeaders 闭包捕获静态 token,而这里 token 每次请求都可能已被 refresh 换新(必须 per-request
|
|
9
9
|
* 从 TokenProvider 读)。故 R1 用一个薄 fetch 引擎;若 R2 发现网络重试确有需要,再评估共享底座。
|
|
10
10
|
*/
|
|
11
|
+
import { throwIfAborted } from "../abort.js";
|
|
11
12
|
import { OAuthFlowError, toRegistryApiError } from "./errors.js";
|
|
13
|
+
import { readJsonBody } from "./read-body.js";
|
|
12
14
|
import { refreshTokens } from "./auth.js";
|
|
13
15
|
export class RegistryClient {
|
|
14
16
|
baseUrl;
|
|
@@ -24,11 +26,15 @@ export class RegistryClient {
|
|
|
24
26
|
this.fetchImpl = config.fetch ?? fetch;
|
|
25
27
|
this.timeoutMs = config.timeoutMs ?? 30_000;
|
|
26
28
|
}
|
|
29
|
+
/** 同 {@link RegistryClient.requestRaw}(非 2xx 抛类型错);取消律在共享刷新在飞时的例外见 `requestRaw`。 */
|
|
27
30
|
async request(opts) {
|
|
28
31
|
return this.settle(await this.requestRaw(opts));
|
|
29
32
|
}
|
|
30
33
|
/** 非抛的原始面(R2 的条件请求用:304/412 等**语义状态**要直出给调用方判别,不是错误)。
|
|
31
|
-
* 401 仍在这里走 single-flight refresh + 重试一次——凭证生命周期对所有面统一,绝不旁路。
|
|
34
|
+
* 401 仍在这里走 single-flight refresh + 重试一次——凭证生命周期对所有面统一,绝不旁路。
|
|
35
|
+
* 🔴 **取消律的一处例外(共享刷新)**:请求在 401 后加入一次**在飞的共享刷新**再被 abort,不会立即以 `signal.reason` 拒 —— 它等这次刷新落定:
|
|
36
|
+
* 刷新失败 ⇒ 以**刷新自己的错误**拒(不是 `signal.reason`);刷新成功 ⇒ 不再重发、以 `signal.reason` 拒。
|
|
37
|
+
* 另一面:刷新用的是发起它的那个请求的 `signal` —— 发起者 abort ⇒ 刷新随之取消(`fetch` 听 signal 时),加入这次刷新的别的请求哪怕自己没 abort,也以发起者的 `signal.reason` 拒(abort 落在刷新请求在途时两版同;落在读刷新应答体时 26.1.0 拒 `TypeError`)。 */
|
|
32
38
|
async requestRaw(opts) {
|
|
33
39
|
const first = await this.rawRequest(opts);
|
|
34
40
|
if (first.status !== 401)
|
|
@@ -45,10 +51,15 @@ export class RegistryClient {
|
|
|
45
51
|
}
|
|
46
52
|
return this.refreshInFlight;
|
|
47
53
|
}
|
|
54
|
+
/** 单发一次(网络重试不在本引擎,见模块头)。取消律与 worker 传输层的重试器同一条规则(同一只 `throwIfAborted`):
|
|
55
|
+
* 已 abort ⇒ 以 `signal.reason` 拒、**不发请求**(本引擎把调用方 signal 经 `abort` 事件桥到自己的 controller,监听器挂在一只**已** abort 的 signal 上永不触发 ——
|
|
56
|
+
* 所以查在取令牌与「没登录」判之后、挂监听之前 —— 没登录的事实先于取消,与 26.1.0 同);飞行中 abort 而请求以失败告终 ⇒ 以 `signal.reason` 拒(内部 controller 的拒因是平台 `AbortError`,不交出去);
|
|
57
|
+
* 读体走子路径唯一的读体口 {@link readJsonBody}(体被 abort 截断 ⇒ `signal.reason`;读完的体从不因 abort 丢弃)。 */
|
|
48
58
|
async rawRequest(opts) {
|
|
49
59
|
const current = await this.tokens.get();
|
|
50
60
|
if (!current)
|
|
51
61
|
throw new OAuthFlowError("invalid_grant", "not logged in (TokenProvider is empty) — run the device flow first");
|
|
62
|
+
throwIfAborted(opts.signal);
|
|
52
63
|
const ac = new AbortController();
|
|
53
64
|
const timer = setTimeout(() => ac.abort(), this.timeoutMs);
|
|
54
65
|
const onOuterAbort = () => ac.abort();
|
|
@@ -64,9 +75,13 @@ export class RegistryClient {
|
|
|
64
75
|
...(opts.body !== undefined ? { body: JSON.stringify(opts.body) } : {}),
|
|
65
76
|
signal: ac.signal,
|
|
66
77
|
});
|
|
67
|
-
const body = await res.
|
|
78
|
+
const body = await readJsonBody(res, opts.signal);
|
|
68
79
|
return { status: res.status, body, headers: res.headers };
|
|
69
80
|
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
throwIfAborted(opts.signal); // 取消律:飞行中 abort 而请求失败 ⇒ 以 signal.reason 拒,不论 fetch 拿什么拒
|
|
83
|
+
throw e;
|
|
84
|
+
}
|
|
70
85
|
finally {
|
|
71
86
|
clearTimeout(timer);
|
|
72
87
|
opts.signal?.removeEventListener("abort", onOuterAbort);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAqB1C,MAAM,OAAO,cAAc;IACR,OAAO,CAAS;IAChB,MAAM,CAAgB;IACtB,SAAS,CAAe;IACxB,SAAS,CAAS;IACnC;uEACmE;IAC3D,eAAe,CAA+B;IAEtD,YAAY,MAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,IAA4B;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAI,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC;IAED;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAqB1C,MAAM,OAAO,cAAc;IACR,OAAO,CAAS;IAChB,MAAM,CAAgB;IACtB,SAAS,CAAe;IACxB,SAAS,CAAS;IACnC;uEACmE;IAC3D,eAAe,CAA+B;IAEtD,YAAY,MAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,CAAC;IAED,oFAAoF;IACpF,KAAK,CAAC,OAAO,CAAI,IAA4B;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAI,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,CAAC;IAED;;;;oLAIgL;IAChL,KAAK,CAAC,UAAU,CAAC,IAA4B;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,KAAK,CAAC;QACvC,8DAA8D;QAC9D,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEO,WAAW,CAAC,MAAoB;QACtC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBAC7I,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;YACnC,CAAC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;;6FAGyF;IACjF,KAAK,CAAC,UAAU,CAAC,IAA4B;QACnD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,cAAc,CAAC,eAAe,EAAE,oEAAoE,CAAC,CAAC;QAC9H,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,YAAY,GAAG,GAAS,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE;gBAC7E,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE;oBAC9C,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1E,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;iBACxB;gBACD,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvE,MAAM,EAAE,EAAE,CAAC,MAAM;aAClB,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC5D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,wDAAwD;YACrF,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,8GAA8G;IACtG,MAAM,CAAI,CAAoC;QACpD,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;YAAE,OAAO,CAAC,CAAC,IAAS,CAAC;QAC1D,MAAM,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,iCAAiC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3F,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-body.d.ts","sourceRoot":"","sources":["../../src/registry/read-body.ts"],"names":[],"mappings":"AAQA,wBAAsB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAanG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* registry 子路径**唯一的读体口**(`RegistryClient.rawRequest` 与设备码 / 刷新 / 登出共用的 `postJson` 都经它读应答体)。一条规则:
|
|
3
|
+
* · 体**读不出**(读到一半被截断)⇒ 调用方已 abort 则以 `signal.reason` 拒(取消不报成「200 空体」/ 丢了码的错 / `TypeError`);没 abort(连接被重置、本引擎自己的超时)⇒ `undefined`(既有读法);
|
|
4
|
+
* · 体**读完了** ⇒ 从不因 abort 丢弃(取消不吞一次已经发生的写 / 换发):JSON 解析失败(空体 / 非 JSON)读作 `undefined`,与是否 abort 无关。
|
|
5
|
+
* 读与解析分两步做,正是为了把「读不出」与「读完了但不是 JSON」分开 —— 一只 `res.json().catch(…)` 分不出这两件事。
|
|
6
|
+
*/
|
|
7
|
+
import { throwIfAborted } from "../abort.js";
|
|
8
|
+
export async function readJsonBody(res, signal) {
|
|
9
|
+
let text;
|
|
10
|
+
try {
|
|
11
|
+
text = await res.text();
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
throwIfAborted(signal);
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
return text ? JSON.parse(text) : undefined;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=read-body.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read-body.js","sourceRoot":"","sources":["../../src/registry/read-body.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAa,EAAE,MAA+B;IAC/E,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,cAAc,CAAC,MAAM,CAAC,CAAC;QACvB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scopes-effective.d.ts","sourceRoot":"","sources":["../../src/registry/scopes-effective.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,sDAAsD;AACtD,eAAO,MAAM,qBAAqB;;;CAGxB,CAAC;AAEX;;;;+EAI+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACrF,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;mGAEmG;AACnG,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,QAAQ,CAAC;IACrB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,IAAI,EAAE,WAAW,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE/G;AAED;;;kBAGkB;AAClB,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CAK9B;AAED,uEAAuE;AACvE,MAAM,MAAM,eAAe,GAAG;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7G;;oEAEoE;AACpE,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"scopes-effective.d.ts","sourceRoot":"","sources":["../../src/registry/scopes-effective.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,sDAAsD;AACtD,eAAO,MAAM,qBAAqB;;;CAGxB,CAAC;AAEX;;;;+EAI+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,WAAW,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAC;IACrF,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;mGAEmG;AACnG,MAAM,WAAW,mBAAmB;IAClC,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,QAAQ,CAAC;IACrB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,qCAAqC;IACrC,IAAI,EAAE,WAAW,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE/G;AAED;;;kBAGkB;AAClB,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAC9B,OAAO,CAAC,mBAAmB,CAAC,CAK9B;AAED,uEAAuE;AACvE,MAAM,MAAM,eAAe,GAAG;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7G;;oEAEoE;AACpE,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAavJ"}
|
|
@@ -23,14 +23,16 @@ export async function switchScope(client, tokens, scope, opts) {
|
|
|
23
23
|
* `principal` ⇒ `?principal=` query([1864] C2-10 管理面消费形:查看**别人**的生效配置)。
|
|
24
24
|
* 走 RegistryClient 同一引擎(Bearer + 401 单飞 refresh 重试)——凭证生命周期不旁路。 */
|
|
25
25
|
export async function getEffective(client, opts) {
|
|
26
|
+
// 304 只是条件请求的答案(与 worker 传输层同一条律):带了非空 `etag` ⇒ 发 `if-none-match`、304 读作没变;没带 ⇒ 304 与其它非 2xx 同是类型错(调用方没有缓存可复用)。
|
|
27
|
+
const validator = opts?.etag || undefined;
|
|
26
28
|
const r = await client.requestRaw({
|
|
27
29
|
method: "GET",
|
|
28
30
|
path: `/api/v1/effective${opts?.principal ? `?principal=${encodeURIComponent(opts.principal)}` : ""}`,
|
|
29
|
-
...(
|
|
31
|
+
...(validator !== undefined ? { headers: { "if-none-match": validator } } : {}),
|
|
30
32
|
...(opts?.signal ? { signal: opts.signal } : {}),
|
|
31
33
|
});
|
|
32
34
|
const etag = r.headers.get("etag") ?? undefined;
|
|
33
|
-
if (r.status === 304)
|
|
35
|
+
if (r.status === 304 && validator !== undefined)
|
|
34
36
|
return { status: 304, ...(etag !== undefined ? { etag } : {}) };
|
|
35
37
|
if (r.status >= 200 && r.status < 300)
|
|
36
38
|
return { status: 200, ...(etag !== undefined ? { etag } : {}), body: r.body };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scopes-effective.js","sourceRoot":"","sources":["../../src/registry/scopes-effective.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAIjD,sDAAsD;AACtD,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,MAAM,EAAE,gBAAgB;IACxB,SAAS,EAAE,oBAAoB;CACvB,CAAC;AA4BX,kEAAkE;AAClE,MAAM,UAAU,UAAU,CAAC,MAAsB,EAAE,IAA+B;IAChF,OAAO,MAAM,CAAC,OAAO,CAAqB,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACrJ,CAAC;AAED;;;kBAGkB;AAClB,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAsB,EACtB,MAAqB,EACrB,KAAa,EACb,IAA+B;IAE/B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAAsB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACpL,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IAChC,IAAI,IAAI;QAAE,MAAM,MAAM,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;IAC/F,OAAO,GAAG,CAAC;AACb,CAAC;AAKD;;oEAEoE;AACpE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAsB,EAAE,IAAkE;IAC3H,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;QAChC,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,oBAAoB,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,cAAc,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QACrG,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"scopes-effective.js","sourceRoot":"","sources":["../../src/registry/scopes-effective.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import type { Transport } from "../transport.js";
|
|
5
5
|
import type { ApprovalDecisionResult, AskClass, PendingList } from "../types.js";
|
|
6
6
|
import type { QuestionAnswer } from "./questions.js";
|
|
7
|
-
import type { AskOrigin, BoundGrantAbsence, PersistedRuleMandate, RuleOffersAbsence, ToolApprovalCardWord } from "./tool-approvals.js";
|
|
7
|
+
import type { AskOrigin, AutoModeFallbackCause, BoundGrantAbsence, BoundSkillGrants, PersistedRuleMandate, RuleOffersAbsence, ToolApprovalCardWord } from "./tool-approvals.js";
|
|
8
8
|
/** One per-session approval exemption ("本会话不再询问", service exemptions ruling — an APPROVAL MEMORY, not a
|
|
9
9
|
* policy loosen: deny/neverAuto always outrank it). Keyed in CANONICAL tool-name space (service
|
|
10
10
|
* `ApprovalExemptionRow`, approval-exemption-store.ts). */
|
|
@@ -72,6 +72,11 @@ export interface ApprovalStreamEvent {
|
|
|
72
72
|
/** 只 `pending` 帧(server ≥7.129.0 / core 7.51.0 #1688):park 行的授予绑定缺席词,= {@link PendingCheckpoint.boundGrantAbsence} 展开(读法同那一键)。
|
|
73
73
|
* `live_pending` 帧的行顶层**不带** —— 那一位在它的 `frame` 里({@link LivePendingRow.frame})。 */
|
|
74
74
|
boundGrantAbsence?: BoundGrantAbsence;
|
|
75
|
+
/** 只 `pending` 帧(server ≥7.136.0):停驻的技能卡的授予绑定三位 = {@link PendingCheckpoint.boundGrantDigest} / `.boundGrants` / `.classifierNoRuling` 展开(同一只投影;读法逐键见那三键;在场才带,普通卡三位都缺席)。
|
|
76
|
+
* `live_pending` 帧的行顶层**不带** —— 三位在它的 `frame` 里({@link LivePendingRow.frame})。 */
|
|
77
|
+
boundGrantDigest?: string;
|
|
78
|
+
boundGrants?: BoundSkillGrants;
|
|
79
|
+
classifierNoRuling?: AutoModeFallbackCause;
|
|
75
80
|
/** 只 `pending` 帧(K-37 扩项;server ≥7.109.0 / S-934 ②):park 行的类对(= {@link PendingCheckpoint.askClass} / `.classes` 展开,两键同在同缺)。
|
|
76
81
|
* `live_pending` 帧的行顶层**不带** —— 那一对在它的 `frame` 里({@link LivePendingRow.frame})。 */
|
|
77
82
|
askClass?: AskClass;
|
|
@@ -127,7 +132,7 @@ export declare const APPROVAL_DECIDED_BY: readonly ["person", "policy"];
|
|
|
127
132
|
/** {@link APPROVAL_DECIDED_BY} 的成员型 —— 四条决定口(三条工具审批口 + server ≥7.126.0 的 `plan_review`)请求体 `decidedBy` 的值域。 */
|
|
128
133
|
export type ApprovalDecidedBy = (typeof APPROVAL_DECIDED_BY)[number];
|
|
129
134
|
/**
|
|
130
|
-
* 两只**人工决断口**各自受理的停驻门种 —— server 的闭集照抄,单一属主在 server(`src/
|
|
135
|
+
* 两只**人工决断口**各自受理的停驻门种 —— server 的闭集照抄,单一属主在 server(`src/approval-content-kind.ts` `APPROVAL_GATE_KINDS`〔server ≥7.135.0 起,由引擎停驻登记表派生;7.134.x 及更早在 `src/tool-approval.ts`〕 /
|
|
131
136
|
* `src/http/wire-gate.ts` `WIRE_GATE_KINDS`),本包 live 契约套对发布字节钉等值(`test/live/decision-door-gate-kinds.test.ts`)。
|
|
132
137
|
* · 耐久决断口 `POST /v1/approvals/:sessionId/decide`(本资源 {@link ApprovalsResource.decide})只收 {@link APPROVAL_DECIDE_GATE_KINDS}:
|
|
133
138
|
* `human` / `irreversible_ask`;活卡口 `POST /v1/tool-approvals/:id/respond` 答的是同一族卡。
|
|
@@ -180,23 +185,35 @@ export interface ApprovalDecision {
|
|
|
180
185
|
* · 拒决(`decision: "deny"`)或 `decidedBy: "policy"` 带它 ⇒ `400 request.field_conflict`,`detail.kind: "approval_feedback"`、
|
|
181
186
|
* `detail.fields` = `["feedback", "decision"]` / `["feedback", "decidedBy"]`(拒决的话写进 {@link reason});
|
|
182
187
|
* · 非字符串 ⇒ `400 request.field_invalid`;直连门(D-G)部署 ⇒ `400 feedback_not_in_proof`(不在决策证明的签名载荷里,同 `remember` / `decidedBy`);
|
|
183
|
-
* · 话里带 `<system-reminder>` ⇒ `409
|
|
188
|
+
* · 话里带 `<system-reminder>` 标签(开或闭)⇒ 引擎在 CAS 之前拒:**server ≥7.135.0(引擎 7.55.0)`409 resume_outcome_invalid` + `field: "feedback"` + `retriable: true`**
|
|
189
|
+
* (落 {@link import("../errors.js").ResumeOutcomeInvalidError},`err.extra.field` 读得出;引擎原句点名 `feedback`,卡留 pending)—— 出路是**去掉或改那段话**再决,**别按码自动重取再决**;
|
|
190
|
+
* 7.134.x 借 `approval_binding_mismatch`(无 `field`),按那个码分支的消费端改读新码;
|
|
184
191
|
* · 后台停驻子代卡与 workflow 子代卡走同一口、同一读法;live `POST /v1/tool-approvals/:id/respond` **不收**这只键。
|
|
185
192
|
* 老 server(≤7.133.x)对它答 `400 request.body_shape`(`unknownKeys: ["feedback"]`)。没有专门的能力位:按 server 版本发。 */
|
|
186
193
|
feedback?: string;
|
|
187
194
|
}
|
|
188
195
|
/** Accepted shape of a decide that hit a **parked background agent** checkpoint (server 1.267, design/153
|
|
189
|
-
* 件3d;ASSISTANT-WIRE-CONTRACT §4a parked variant).
|
|
190
|
-
* not completed;
|
|
196
|
+
* 件3d;ASSISTANT-WIRE-CONTRACT §4a parked variant). **Two arms, read by `status`** —
|
|
197
|
+
* · `status: "resuming"` —— **受理回执**:复活异步驱动,200 = accepted, not completed;a failed drive honestly re-parks the row and the pending re-appears on `list()`;
|
|
198
|
+
* · `status: "failed"`(**server ≥7.136.0**,`decision` 恒 `"deny"`)—— **作废回执**:复活不了的停驻行(后台子代省略了 `name` 的无名行 / 行上没有根会话锚)上 **deny = 作废这张卡**:
|
|
199
|
+
* 卡按自己的 scope CAS 作废、离开待决队列与 `/v1/approvals/stream` 快照,子代由引擎的对账翻成终局 `failed`,被门的工具零执行、不授予 `remember`;**没有任何续跑在飞**(别等一个永远不来的复活)。
|
|
200
|
+
* 这两形的 approve 仍是 `409 decide.row_unrevivable`;作废的 CAS 输了(卡已被窗到期收走 / 另一次作废)⇒ 既有的 `409 decide.gate_moved`。
|
|
191
201
|
* ⚠️ #316(server ≥7.37):`status === "resuming"` **不再单独判别这形** —— 任务级 decide 在 durable 部署
|
|
192
202
|
* 上也改答受理形 `{taskId, sessionId, status:"resuming", bindingEnforced:true}`(见 `decide()` 顶注)。
|
|
193
|
-
* 判别改用:`decision`
|
|
194
|
-
|
|
203
|
+
* 判别改用:`decision` 在场且 `sessionId` 缺席 = parked 回执(两臂都是),再看 `status` 分臂;`sessionId`/`bindingEnforced` 在场 = 任务级受理。
|
|
204
|
+
* 🔴 27.0.0:输出型放宽 —— 此前本型的 `status` 恒为字面 `"resuming"`,把它当字面读的代码(`const s: "resuming" = r.status`)编不过,按 `status` 穷举 switch 补一臂 `"failed"`。
|
|
205
|
+
* 另:本型由 interface 改成**联合型别名**,所以 `interface X extends ParkedDecideAccepted` ⇒ TS2312、`class X implements ParkedDecideAccepted` ⇒ TS2422(改成 `type X = ParkedDecideAccepted & { … }` 或按臂各自声明)。 */
|
|
206
|
+
export type ParkedDecideAccepted = {
|
|
195
207
|
/** The background agent handle (`a*`). */
|
|
196
208
|
taskId: string;
|
|
197
209
|
status: "resuming";
|
|
198
210
|
decision: "approve" | "deny";
|
|
199
|
-
}
|
|
211
|
+
} | {
|
|
212
|
+
/** The background agent handle (`a*`). */
|
|
213
|
+
taskId: string;
|
|
214
|
+
status: "failed";
|
|
215
|
+
decision: "deny";
|
|
216
|
+
};
|
|
200
217
|
export declare class ApprovalsResource {
|
|
201
218
|
private readonly t;
|
|
202
219
|
constructor(t: Transport);
|
|
@@ -245,8 +262,8 @@ export declare class ApprovalsResource {
|
|
|
245
262
|
* 等于把结果扔掉,腿如实保持同步)。
|
|
246
263
|
*
|
|
247
264
|
* **Parked background-agent variant**(server 1.267,ASSISTANT-WIRE-CONTRACT §4a):当该 sessionId 的
|
|
248
|
-
* pending checkpoint 属于一个 parked 后台子代时,成功形是 {@link ParkedDecideAccepted}(
|
|
249
|
-
* `
|
|
265
|
+
* pending checkpoint 属于一个 parked 后台子代时,成功形是 {@link ParkedDecideAccepted}(两臂,按 `status` 读:
|
|
266
|
+
* `"resuming"` = 受理语义,复活异步驱动,失败会诚实 re-park 并重新出现在 `list()`;`"failed"`〔server ≥7.136.0〕= 复活不了的行上 deny 的作废回执,卡已关、没有续跑)。该腿的专有 4xx/5xx:
|
|
250
267
|
* `decide.claim_lost`/`decide.gate_moved`/`decide.not_parked`(409,行被并发 decide/stop 抢走——重查列表)、
|
|
251
268
|
* `decide.revive_rejected`(409)/`decide.revive_failed`(500,claim 已回滚可重试)、`decide.store_unreachable`
|
|
252
269
|
* (503)、`decide.parked_question_unsupported`/`decide.parked_answer_unsupported`(400——parked 腿不支持
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../src/resources/approvals.ts"],"names":[],"mappings":"AAAA;;mFAEmF;AACnF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,QAAQ,EAAqC,WAAW,EAAE,MAAM,aAAa,CAAC;AACpH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"approvals.d.ts","sourceRoot":"","sources":["../../src/resources/approvals.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { readSseFrames, HEARTBEAT_GRACE_MS, isTerminalFrame, STREAM_READ_ADVISORY_CODE } from "../sse.js";
|
|
2
|
+
import { sleep } from "../abort.js";
|
|
2
3
|
import { APIError } from "../errors.js";
|
|
3
4
|
/**
|
|
4
5
|
* `GET /v1/approvals/stream` **读失败**的两只机读错误帧的码(server ≥7.133.0;`event: error` `{ type: "error", errorCode, message }`)。此前读失败只会让这条流静默成「只有心跳」,
|
|
@@ -36,7 +37,7 @@ export const APPROVALS_STREAM_READ_ERROR_CODES = Object.freeze([STREAM_READ_ADVI
|
|
|
36
37
|
*/
|
|
37
38
|
export const APPROVAL_DECIDED_BY = Object.freeze(["person", "policy"]);
|
|
38
39
|
/**
|
|
39
|
-
* 两只**人工决断口**各自受理的停驻门种 —— server 的闭集照抄,单一属主在 server(`src/
|
|
40
|
+
* 两只**人工决断口**各自受理的停驻门种 —— server 的闭集照抄,单一属主在 server(`src/approval-content-kind.ts` `APPROVAL_GATE_KINDS`〔server ≥7.135.0 起,由引擎停驻登记表派生;7.134.x 及更早在 `src/tool-approval.ts`〕 /
|
|
40
41
|
* `src/http/wire-gate.ts` `WIRE_GATE_KINDS`),本包 live 契约套对发布字节钉等值(`test/live/decision-door-gate-kinds.test.ts`)。
|
|
41
42
|
* · 耐久决断口 `POST /v1/approvals/:sessionId/decide`(本资源 {@link ApprovalsResource.decide})只收 {@link APPROVAL_DECIDE_GATE_KINDS}:
|
|
42
43
|
* `human` / `irreversible_ask`;活卡口 `POST /v1/tool-approvals/:id/respond` 答的是同一族卡。
|
|
@@ -109,8 +110,8 @@ export class ApprovalsResource {
|
|
|
109
110
|
* 等于把结果扔掉,腿如实保持同步)。
|
|
110
111
|
*
|
|
111
112
|
* **Parked background-agent variant**(server 1.267,ASSISTANT-WIRE-CONTRACT §4a):当该 sessionId 的
|
|
112
|
-
* pending checkpoint 属于一个 parked 后台子代时,成功形是 {@link ParkedDecideAccepted}(
|
|
113
|
-
* `
|
|
113
|
+
* pending checkpoint 属于一个 parked 后台子代时,成功形是 {@link ParkedDecideAccepted}(两臂,按 `status` 读:
|
|
114
|
+
* `"resuming"` = 受理语义,复活异步驱动,失败会诚实 re-park 并重新出现在 `list()`;`"failed"`〔server ≥7.136.0〕= 复活不了的行上 deny 的作废回执,卡已关、没有续跑)。该腿的专有 4xx/5xx:
|
|
114
115
|
* `decide.claim_lost`/`decide.gate_moved`/`decide.not_parked`(409,行被并发 decide/stop 抢走——重查列表)、
|
|
115
116
|
* `decide.revive_rejected`(409)/`decide.revive_failed`(500,claim 已回滚可重试)、`decide.store_unreachable`
|
|
116
117
|
* (503)、`decide.parked_question_unsupported`/`decide.parked_answer_unsupported`(400——parked 腿不支持
|
|
@@ -228,7 +229,7 @@ export class ApprovalsResource {
|
|
|
228
229
|
catch (e) {
|
|
229
230
|
if (++failures >= 5)
|
|
230
231
|
throw e;
|
|
231
|
-
await
|
|
232
|
+
await sleep(500 * failures, opts?.signal).catch(() => undefined); // 重连退避可被 abort 打断:醒来后环首的 aborted 检查安静结束(`sleep` 只会因 abort 而拒)
|
|
232
233
|
continue;
|
|
233
234
|
}
|
|
234
235
|
if (!res.ok)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/resources/approvals.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAC1G,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"approvals.js","sourceRoot":"","sources":["../../src/resources/approvals.ts"],"names":[],"mappings":"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"}
|
|
@@ -42,7 +42,8 @@ export declare class AttachmentsResource {
|
|
|
42
42
|
mime?: string;
|
|
43
43
|
signal?: AbortSignal;
|
|
44
44
|
}): Promise<AttachmentInfo>;
|
|
45
|
-
/** GET /v1/attachments/:id — 取回字节(content-type=存储 mime)。未知/他人 → 404(NotFoundError)。
|
|
45
|
+
/** GET /v1/attachments/:id — 取回字节(content-type=存储 mime)。未知/他人 → 404(NotFoundError)。
|
|
46
|
+
* 开请求遇可重试状态(408 / 429 / 5xx,`permanence: "terminal"` 与确定性失败码除外)由本包重试(至多 `maxRetries` 次、只在首字节之前、abort 立即停)—— GET 读口同律,与 `manifest()` 同一只重试器;读体失败不重试。 */
|
|
46
47
|
get(id: string, opts?: {
|
|
47
48
|
signal?: AbortSignal;
|
|
48
49
|
}): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/resources/attachments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC;wEACoE;IAC9D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAYtH
|
|
1
|
+
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../src/resources/attachments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAAD,CAAC,EAAE,SAAS;IAEzC;wEACoE;IAC9D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC;IAYtH;4JACwJ;IAClJ,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAKpG,mEAAmE;IAC7D,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CASzE"}
|
|
@@ -17,16 +17,10 @@ export class AttachmentsResource {
|
|
|
17
17
|
throw await this.t.errorFrom(res);
|
|
18
18
|
return (await res.json());
|
|
19
19
|
}
|
|
20
|
-
/** GET /v1/attachments/:id — 取回字节(content-type=存储 mime)。未知/他人 → 404(NotFoundError)。
|
|
20
|
+
/** GET /v1/attachments/:id — 取回字节(content-type=存储 mime)。未知/他人 → 404(NotFoundError)。
|
|
21
|
+
* 开请求遇可重试状态(408 / 429 / 5xx,`permanence: "terminal"` 与确定性失败码除外)由本包重试(至多 `maxRetries` 次、只在首字节之前、abort 立即停)—— GET 读口同律,与 `manifest()` 同一只重试器;读体失败不重试。 */
|
|
21
22
|
async get(id, opts) {
|
|
22
|
-
const res = await this.t.
|
|
23
|
-
method: "GET",
|
|
24
|
-
path: `/v1/attachments/${encodeURIComponent(id)}`,
|
|
25
|
-
accept: "*/*",
|
|
26
|
-
...(opts?.signal ? { signal: opts.signal } : {}),
|
|
27
|
-
});
|
|
28
|
-
if (!res.ok)
|
|
29
|
-
throw await this.t.errorFrom(res);
|
|
23
|
+
const res = await this.t.openRawGet({ path: `/v1/attachments/${encodeURIComponent(id)}`, accept: "*/*", signal: opts?.signal }); // success = 2xx only (no validator sent ⇒ a 304 is a typed error too); a failed open throws the typed error after the retrier is done
|
|
30
24
|
return { bytes: new Uint8Array(await res.arrayBuffer()), mime: res.headers.get("content-type") ?? "application/octet-stream" };
|
|
31
25
|
}
|
|
32
26
|
/** DELETE /v1/attachments/:id — 204;未知/他人 → 404(NotFoundError)。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/resources/attachments.ts"],"names":[],"mappings":"AAqCA,MAAM,OAAO,mBAAmB;IACD;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C;wEACoE;IACpE,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,KAAiB,EAAE,IAA8C;QAC1F,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,EAAE;YACxD,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI,0BAA0B;YACrD,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;IAC9C,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../src/resources/attachments.ts"],"names":[],"mappings":"AAqCA,MAAM,OAAO,mBAAmB;IACD;IAA7B,YAA6B,CAAY;QAAZ,MAAC,GAAD,CAAC,CAAW;IAAG,CAAC;IAE7C;wEACoE;IACpE,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,KAAiB,EAAE,IAA8C;QAC1F,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,wBAAwB,kBAAkB,CAAC,IAAI,CAAC,EAAE;YACxD,OAAO,EAAE,KAAK;YACd,WAAW,EAAE,IAAI,EAAE,IAAI,IAAI,0BAA0B;YACrD,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjD,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAC/C,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAmB,CAAC;IAC9C,CAAC;IAED;4JACwJ;IACxJ,KAAK,CAAC,GAAG,CAAC,EAAU,EAAE,IAA+B;QACnD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,mBAAmB,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,sIAAsI;QACvQ,OAAO,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,0BAA0B,EAAE,CAAC;IACjI,CAAC;IAED,mEAAmE;IACnE,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAA+B;QACtD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,QAAQ;YAChB,IAAI,EAAE,mBAAmB,kBAAkB,CAAC,EAAE,CAAC,EAAE;YACjD,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjD,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO;QAC/B,MAAM,MAAM,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -1,39 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MF-Fleet (shell-host data contract) — `GET /v1/fleet/stream` LIVE multi-row fleet view as an SSE PUSH stream.
|
|
3
|
-
*
|
|
4
|
-
* The fleet view animates a MULTI-ROW tree: every active task's `status/elapsedMs/tokens` and every
|
|
5
|
-
* workflow's `doneCount N/M · failedCount` TRANSITION over time. This is a *push* stream, not a one-shot read —
|
|
6
|
-
* the service sends a SNAPSHOT on connect, then a per-row delta for every transition, with STABLE per-row
|
|
7
|
-
* identity (`row.id`) so the consumer updates the right row in place.
|
|
8
|
-
*
|
|
9
|
-
* 🔴 THE SDK PRODUCES FRAMES, IT DOES NOT MAINTAIN STATE. `stream()` yields each decoded {@link FleetFrame}; the
|
|
10
|
-
* consumer (the shell renderer) owns the active-set Map and does the update-in-place / remove. The shell-local
|
|
11
|
-
* render state (`main`/tree-`selection`/`timeline`/`depth`/`viewed`/`bulletColor`, MF-Fleet.md) is NOT on the
|
|
12
|
-
* wire and the SDK does NOT synthesize it — only the data that transitions rides the frames.
|
|
13
|
-
*
|
|
14
|
-
* 🔒 owner-scoped: the route filters to the caller's own active runs (by the credential-derived principal — NOT a
|
|
15
|
-
* spoofable header) UNLESS the caller is fleet-wide (an operator / deployment trace token sees every tenant's
|
|
16
|
-
* rows, like the trace API). The `scope` field is wire-STRIPPED by the service after the owner-gate — it never
|
|
17
|
-
* reaches this SDK, so {@link FleetTaskRow}/{@link FleetWorkflowRow} carry NO `scope`. The connect-time `meta`
|
|
18
|
-
* frame's `scoped` flag tells the consumer whether this view is owner-scoped (true) or fleet-wide (false).
|
|
19
|
-
* 🔴 **server ≥7.134.0:「service 凭据 + 验过的主体头」= 那位主体** —— 带主体头的 service 凭据读到的是那位主体的行(`meta.scoped: true`),
|
|
20
|
-
* 不再是全舰队;`?owner=` / `?scope=` / `?principal=` 对钉住的主体不生效。全舰队视图 = 不带主体头的 service 凭据,或只读令牌。
|
|
21
|
-
* (≤7.133.x:出示 service 凭据即全舰队,不看主体头。)同一读法也落在 `GET /v1/sessions`、`GET /v1/agents/roster`、trace / 用量各口与同步族上。
|
|
22
|
-
*
|
|
23
|
-
* 🔁 SNAPSHOT-RESUME semantics(#13,server ≥1.296 advertises `capabilities.fleet.resume === "snapshot"`):
|
|
24
|
-
* a drop ends the iterator, and re-`stream()` IS the resume — the bus is latest-state (not an event log)
|
|
25
|
-
* and every connection OPENS with a full `snapshot` frame, so row state cannot be "missed"; transient
|
|
26
|
-
* bg_notification frames re-deliver through the durable completion inbox. There is deliberately NO
|
|
27
|
-
* last-event-id cursor (it would duplicate what the snapshot already guarantees).
|
|
28
|
-
* Mirrors `workflows.stream`/`trace.stream` framing but with the fleet vocabulary
|
|
29
|
-
* (`meta`/`snapshot`/`task`/`task_remove`/`workflow`/`workflow_remove`). Deliberately uses the vocabulary-
|
|
30
|
-
* agnostic `readSseFrames` (NOT `parseSse`, which is hardcoded to the AgentEvent union + auto-reconnect).
|
|
31
|
-
* Gated off (no `fleetBus` wired) → 501 (typed error) before any frame.
|
|
32
|
-
*
|
|
33
|
-
* Verified against sema-server **5.3.0** (2026-08-02 亲读): handler `streamFleet` (`src/http/routes/fleet.ts`)
|
|
34
|
-
* + `src/fleet/fleet-bus.ts` types. (4.3.0 坐标刷新:此前钉的是 commit `1bf7a5c`,在 server 仓已不可定位为
|
|
35
|
-
* 近期点 —— 版本号比 commit 短哈希更能被下一个人重放。)
|
|
36
|
-
*/
|
|
37
1
|
import type { Transport } from "../transport.js";
|
|
38
2
|
/** The fleet vocabulary the shell renders (MF-Fleet `FleetTask.status`, byte-aligned to service `FleetTaskStatus`
|
|
39
3
|
* fleet-bus.ts:27-36). The service maps its run/workflow status onto this NEUTRAL set:
|
|
@@ -174,6 +138,10 @@ export interface FleetWorkflowRow {
|
|
|
174
138
|
* 停驻的 workflow run 读作 `status: "failed"` + `errorCode: "workflow.agent_parked"`(停驻而非失败;`status` 词表不加字)。
|
|
175
139
|
* 快照行、`workflow` 增量帧与终态窗并入的行经同一只铸点;`?session=` 订阅方的降权行也带。**键缺席 = 老 server 或这一行没有码** —— 退回只读 `status`。 */
|
|
176
140
|
errorCode?: string;
|
|
141
|
+
/** server ≥7.135.0:**恒字面 `true`、永不 `false`** —— run 在跑(`running`)且有 agent 停在审批门上;否则键**缺席**。读作「这条 run 在等人」(停驻不是失败 —— 排空后的停驻终态仍读 `status: "failed"` + `errorCode: "workflow.agent_parked"`,本位缺席)。
|
|
142
|
+
* `GET /v1/workflows/:id` 与 `GET /v1/workflows` 列表行同位同读法。🔴 **fleet 总线上的 workflow 行 server ≥7.135.0 起按整行替换**(此前增量帧按 `id` 合并进旧行):消费端对 `workflow` 帧的处理是「用这一行换掉旧行」,
|
|
143
|
+
* 本位随停驻解除而**消失**(别因为合并语义留着旧的 `true`)。老 server(≤7.134.x)不发本位。 */
|
|
144
|
+
parked?: true;
|
|
177
145
|
}
|
|
178
146
|
/**
|
|
179
147
|
* One decoded frame off the fleet stream (service `streamFleet` emit set, src/http/routes/fleet.ts). The SDK
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../src/resources/fleet.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fleet.d.ts","sourceRoot":"","sources":["../../src/resources/fleet.ts"],"names":[],"mappings":"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"}
|
package/dist/resources/fleet.js
CHANGED
|
@@ -1,3 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MF-Fleet (shell-host data contract) — `GET /v1/fleet/stream` LIVE multi-row fleet view as an SSE PUSH stream.
|
|
3
|
+
*
|
|
4
|
+
* The fleet view animates a MULTI-ROW tree: every active task's `status/elapsedMs/tokens` and every
|
|
5
|
+
* workflow's `doneCount N/M · failedCount` TRANSITION over time. This is a *push* stream, not a one-shot read —
|
|
6
|
+
* the service sends a SNAPSHOT on connect, then a per-row delta for every transition, with STABLE per-row
|
|
7
|
+
* identity (`row.id`) so the consumer updates the right row in place.
|
|
8
|
+
*
|
|
9
|
+
* 🔴 THE SDK PRODUCES FRAMES, IT DOES NOT MAINTAIN STATE. `stream()` yields each decoded {@link FleetFrame}; the
|
|
10
|
+
* consumer (the shell renderer) owns the active-set Map and does the update-in-place / remove. The shell-local
|
|
11
|
+
* render state (`main`/tree-`selection`/`timeline`/`depth`/`viewed`/`bulletColor`, MF-Fleet.md) is NOT on the
|
|
12
|
+
* wire and the SDK does NOT synthesize it — only the data that transitions rides the frames.
|
|
13
|
+
*
|
|
14
|
+
* 🔒 owner-scoped: the route filters to the caller's own active runs (by the credential-derived principal — NOT a
|
|
15
|
+
* spoofable header) UNLESS the caller is fleet-wide (an operator / deployment trace token sees every tenant's
|
|
16
|
+
* rows, like the trace API). The `scope` field is wire-STRIPPED by the service after the owner-gate — it never
|
|
17
|
+
* reaches this SDK, so {@link FleetTaskRow}/{@link FleetWorkflowRow} carry NO `scope`. The connect-time `meta`
|
|
18
|
+
* frame's `scoped` flag tells the consumer whether this view is owner-scoped (true) or fleet-wide (false).
|
|
19
|
+
* 🔴 **server ≥7.134.0:「service 凭据 + 验过的主体头」= 那位主体** —— 带主体头的 service 凭据读到的是那位主体的行(`meta.scoped: true`),
|
|
20
|
+
* 不再是全舰队;`?owner=` / `?scope=` / `?principal=` 对钉住的主体不生效。全舰队视图 = 不带主体头的 service 凭据,或只读令牌。
|
|
21
|
+
* (≤7.133.x:出示 service 凭据即全舰队,不看主体头。)同一读法也落在 `GET /v1/sessions`、`GET /v1/agents/roster`、trace / 用量各口与同步族上。
|
|
22
|
+
*
|
|
23
|
+
* 🔁 SNAPSHOT-RESUME semantics(#13,server ≥1.296 advertises `capabilities.fleet.resume === "snapshot"`):
|
|
24
|
+
* a drop ends the iterator, and re-`stream()` IS the resume — the bus is latest-state (not an event log)
|
|
25
|
+
* and every connection OPENS with a full `snapshot` frame, so row state cannot be "missed"; transient
|
|
26
|
+
* bg_notification frames re-deliver through the durable completion inbox. There is deliberately NO
|
|
27
|
+
* last-event-id cursor (it would duplicate what the snapshot already guarantees).
|
|
28
|
+
* Mirrors `workflows.stream`/`trace.stream` framing but with the fleet vocabulary
|
|
29
|
+
* (`meta`/`snapshot`/`task`/`task_remove`/`workflow`/`workflow_remove`). Deliberately uses the vocabulary-
|
|
30
|
+
* agnostic `readSseFrames` (NOT `parseSse`, which is hardcoded to the AgentEvent union + auto-reconnect).
|
|
31
|
+
* Gated off (no `fleetBus` wired) → 501 (typed error) before any frame.
|
|
32
|
+
*
|
|
33
|
+
* Verified against sema-server **5.3.0** (2026-08-02 亲读): handler `streamFleet` (`src/http/routes/fleet.ts`)
|
|
34
|
+
* + `src/fleet/fleet-bus.ts` types. (4.3.0 坐标刷新:此前钉的是 commit `1bf7a5c`,在 server 仓已不可定位为
|
|
35
|
+
* 近期点 —— 版本号比 commit 短哈希更能被下一个人重放。)
|
|
36
|
+
*/
|
|
37
|
+
import { throwIfAborted } from "../abort.js";
|
|
1
38
|
import { readSseFrames } from "../sse.js";
|
|
2
39
|
export class FleetResource {
|
|
3
40
|
t;
|
|
@@ -23,6 +60,7 @@ export class FleetResource {
|
|
|
23
60
|
* 本 verb 把「取首帧即断」封装成一等语义(带 `session` 过滤时天然配 `observe:1` 防烧 durable 投递)。
|
|
24
61
|
* 超时(缺省 5s)内没等到 snapshot 帧 ⇒ throw(流开了但契约帧缺席=真异常,不静默空答)。 */
|
|
25
62
|
async snapshot(opts) {
|
|
63
|
+
throwIfAborted(opts?.signal); // 取消律:signal 已 abort ⇒ 以 signal.reason 拒、不开流(下面的 `abort` 监听挂在已 abort 的 signal 上永不触发)
|
|
26
64
|
const ctl = new AbortController();
|
|
27
65
|
const onCaller = () => ctl.abort();
|
|
28
66
|
opts?.signal?.addEventListener("abort", onCaller, { once: true });
|
|
@@ -35,7 +73,8 @@ export class FleetResource {
|
|
|
35
73
|
throw new Error("fleet stream ended before a snapshot frame (contract: snapshot is the second frame)");
|
|
36
74
|
}
|
|
37
75
|
catch (e) {
|
|
38
|
-
|
|
76
|
+
throwIfAborted(opts?.signal); // 取消律:调用方 abort ⇒ 以 signal.reason 拒(不是自己 controller 的 AbortError,也不是「流在 snapshot 帧前结束」)
|
|
77
|
+
if (ctl.signal.aborted)
|
|
39
78
|
throw new Error(`fleet snapshot timed out (${opts?.timeoutMs ?? 5_000}ms) before the snapshot frame`);
|
|
40
79
|
throw e;
|
|
41
80
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../src/resources/fleet.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fleet.js","sourceRoot":"","sources":["../../src/resources/fleet.ts"],"names":[],"mappings":"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"}
|