@sema-agent/sdk 12.0.1 → 13.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 (75) hide show
  1. package/README.md +101 -0
  2. package/dist/control-types.d.ts +2 -1
  3. package/dist/control-types.d.ts.map +1 -1
  4. package/dist/control-types.js.map +1 -1
  5. package/dist/errors.d.ts +121 -9
  6. package/dist/errors.d.ts.map +1 -1
  7. package/dist/errors.js +112 -14
  8. package/dist/errors.js.map +1 -1
  9. package/dist/events.d.ts +21 -1
  10. package/dist/events.d.ts.map +1 -1
  11. package/dist/events.js.map +1 -1
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/registry/client.d.ts +1 -0
  17. package/dist/registry/client.d.ts.map +1 -1
  18. package/dist/registry/client.js +3 -3
  19. package/dist/registry/client.js.map +1 -1
  20. package/dist/registry/errors.d.ts +27 -4
  21. package/dist/registry/errors.d.ts.map +1 -1
  22. package/dist/registry/errors.js +41 -1
  23. package/dist/registry/errors.js.map +1 -1
  24. package/dist/registry/index.d.ts +7 -1
  25. package/dist/registry/index.d.ts.map +1 -1
  26. package/dist/registry/index.js +7 -1
  27. package/dist/registry/index.js.map +1 -1
  28. package/dist/registry/me-config.d.ts +5 -2
  29. package/dist/registry/me-config.d.ts.map +1 -1
  30. package/dist/registry/me-config.js +21 -14
  31. package/dist/registry/me-config.js.map +1 -1
  32. package/dist/registry/scope-config-feedback.d.ts +6 -2
  33. package/dist/registry/scope-config-feedback.d.ts.map +1 -1
  34. package/dist/registry/scope-config-feedback.js +18 -9
  35. package/dist/registry/scope-config-feedback.js.map +1 -1
  36. package/dist/registry/scopes-effective.d.ts.map +1 -1
  37. package/dist/registry/scopes-effective.js +2 -3
  38. package/dist/registry/scopes-effective.js.map +1 -1
  39. package/dist/registry-conflict.d.ts +32 -0
  40. package/dist/registry-conflict.d.ts.map +1 -0
  41. package/dist/registry-conflict.js +37 -0
  42. package/dist/registry-conflict.js.map +1 -0
  43. package/dist/resources/control/config.d.ts +12 -6
  44. package/dist/resources/control/config.d.ts.map +1 -1
  45. package/dist/resources/control/config.js +10 -4
  46. package/dist/resources/control/config.js.map +1 -1
  47. package/dist/resources/control/versioning.d.ts +6 -2
  48. package/dist/resources/control/versioning.d.ts.map +1 -1
  49. package/dist/resources/control/versioning.js +4 -1
  50. package/dist/resources/control/versioning.js.map +1 -1
  51. package/dist/resources/session-sync.d.ts +9 -0
  52. package/dist/resources/session-sync.d.ts.map +1 -1
  53. package/dist/resources/session-sync.js.map +1 -1
  54. package/dist/resources/sessions.d.ts +11 -1
  55. package/dist/resources/sessions.d.ts.map +1 -1
  56. package/dist/resources/sessions.js +11 -1
  57. package/dist/resources/sessions.js.map +1 -1
  58. package/dist/resources/tasks.d.ts +18 -3
  59. package/dist/resources/tasks.d.ts.map +1 -1
  60. package/dist/resources/tasks.js +16 -1
  61. package/dist/resources/tasks.js.map +1 -1
  62. package/dist/resources/tool-approvals.d.ts +24 -2
  63. package/dist/resources/tool-approvals.d.ts.map +1 -1
  64. package/dist/resources/tool-approvals.js.map +1 -1
  65. package/dist/transport.d.ts +20 -0
  66. package/dist/transport.d.ts.map +1 -1
  67. package/dist/transport.js +35 -3
  68. package/dist/transport.js.map +1 -1
  69. package/dist/types.d.ts +159 -32
  70. package/dist/types.d.ts.map +1 -1
  71. package/dist/types.js +22 -1
  72. package/dist/types.js.map +1 -1
  73. package/openapi.yaml +293 -31
  74. package/package.json +2 -2
  75. package/registry-openapi.yaml +17 -4
@@ -34,6 +34,7 @@ export declare class RegistryClient {
34
34
  }>;
35
35
  private refreshOnce;
36
36
  private rawRequest;
37
+ /** 非 2xx ⇒ 本子路径唯一的构造点 {@link toRegistryApiError}(scope-gone 409 ⇒ `ScopeGoneError`,仍是 `RegistryApiError`)。 */
37
38
  private settle;
38
39
  }
39
40
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"AAYA,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;IAOlC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D;qEACiE;IAC3D,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;YASL,UAAU;IA0BxB,OAAO,CAAC,MAAM;CAKf"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"AAYA,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;IAOlC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1D;qEACiE;IAC3D,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;YASL,UAAU;IA0BxB,8GAA8G;IAC9G,OAAO,CAAC,MAAM;CAIf"}
@@ -8,7 +8,7 @@
8
8
  * buildHeaders 闭包捕获静态 token,而这里 token 每次请求都可能已被 refresh 换新(必须 per-request
9
9
  * 从 TokenProvider 读)。故 R1 用一个薄 fetch 引擎;若 R2 发现网络重试确有需要,再评估共享底座。
10
10
  */
11
- import { OAuthFlowError, RegistryApiError } from "./errors.js";
11
+ import { OAuthFlowError, toRegistryApiError } from "./errors.js";
12
12
  import { refreshTokens } from "./auth.js";
13
13
  export class RegistryClient {
14
14
  baseUrl;
@@ -72,11 +72,11 @@ export class RegistryClient {
72
72
  opts.signal?.removeEventListener("abort", onOuterAbort);
73
73
  }
74
74
  }
75
+ /** 非 2xx ⇒ 本子路径唯一的构造点 {@link toRegistryApiError}(scope-gone 409 ⇒ `ScopeGoneError`,仍是 `RegistryApiError`)。 */
75
76
  settle(r) {
76
77
  if (r.status >= 200 && r.status < 300)
77
78
  return r.body;
78
- const msg = r.body?.error;
79
- throw new RegistryApiError(r.status, typeof msg === "string" ? msg : `registry request failed (HTTP ${r.status})`, r.body);
79
+ throw toRegistryApiError(r.status, r.body, `registry request failed (HTTP ${r.status})`);
80
80
  }
81
81
  }
82
82
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/D,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;qEACiE;IACjE,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;IAEO,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,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,GAAY,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC9D,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC5D,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;IAEO,MAAM,CAAI,CAAoC;QACpD,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;YAAE,OAAO,CAAC,CAAC,IAAS,CAAC;QAC1D,MAAM,GAAG,GAAI,CAAC,CAAC,IAAwC,EAAE,KAAK,CAAC;QAC/D,MAAM,IAAI,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7H,CAAC;CACF"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,3 @@
1
- /**
2
- * registry user-plane 错误族(G17,设计稿 §2.3:worker 面的 toApiError 家族**不复用**——status 语义
3
- * 不同源;OAuth 错误按 RFC 是 400 + `error` 码,worker 的 400 是 validation)。
4
- */
5
1
  /** registry HTTP 面的通用 typed 错误(非 OAuth 端点,或 OAuth 端点的非 OAuth 形失败)。 */
6
2
  export declare class RegistryApiError extends Error {
7
3
  readonly status: number;
@@ -11,6 +7,33 @@ export declare class RegistryApiError extends Error {
11
7
  /** 服务端 body(已 parse;parse 失败为 undefined)。诊断用,分支请用 status。 */
12
8
  body?: unknown | undefined);
13
9
  }
10
+ /**
11
+ * **409 scope-gone**(K-17;web-admin wave41 W41F 起)—— 写的**目标空间**在途中被删、或删了又同名重建;个人层两门
12
+ * (`PUT /api/v1/me/config/{domain}` / `PUT /api/v1/users/{username}/config/{domain}`)= token 所指的空间已不在。
13
+ * **一个字都没写。** 判读见 {@link import("../registry-conflict.js").classifyRegistryConflict}(本包唯一一只)。
14
+ *
15
+ * 🔴 **不可自动重试,也不是 CAS 冲突**:没有 `currentVersion` / `currentUpdatedAt`(体上本就不带),刻意**不**是
16
+ * {@link import("./scope-config-feedback.js").ScopeConfigCasConflictError} / {@link import("./me-config.js").ConfigCasConflictError}
17
+ * —— 「冲突 ⇒ 重读 ⇒ 重发」的分支接不到它。重读读到的是**替身空间**,旧草稿会写进一个没人审过的空间;正确处置是停下、
18
+ * 保住草稿、让人确认空间还是不是要写的那一个(web-admin 控制台同一处置:`ScopeGoneError`,不重放)。
19
+ * `putMeConfig` 的 `retryOn409` 遇之**不进 merge 腿**(请求计数恒 1)。
20
+ *
21
+ * 仍是 {@link RegistryApiError}(`status` 恒 409、`body` 原样、`message` 与全族同规则 = 体上 `error` 原词):存量
22
+ * `instanceof RegistryApiError` 的 catch 不落空(`RegistryAdmin.rollback` 等经 `RegistryClient.request` 的门,此前正是裸本基类)。
23
+ */
24
+ export declare class ScopeGoneError extends RegistryApiError {
25
+ constructor(message: string, body?: unknown);
26
+ }
27
+ /**
28
+ * registry 子路径 REST 门「非成功应答 → typed 错误」的**唯一**构造点(K-17 收拢:此前 `RegistryClient.request` /
29
+ * scope-config 族 / me-config 两处 / effective 五处各写一遍 `new RegistryApiError(status, typeof error === "string" ? error : fallback, body)`)。
30
+ * `message` = 体上 `error` 原词,否则 `fallback`;scope-gone 409 ⇒ {@link ScopeGoneError},其余 ⇒ 裸 {@link RegistryApiError}
31
+ * (与 12.0.1 逐字同)。各门自己的 CAS 类(`ScopeConfigCasConflictError` / `ConfigCasConflictError`)只在分类为 `"conflict"`
32
+ * 时由门自己铸,不走这里 —— 这里从不铸「可重试」的形。
33
+ * 射程外(如实):`auth.ts` 的 device flow / refresh 三扇 OAuth 门按 RFC 8628 先判 {@link OAuthFlowError}、余者用各自的固定
34
+ * 文案 —— 它们不写配置,不会答 scope-gone,文案规则也不同,不并进来。
35
+ */
36
+ export declare function toRegistryApiError(status: number, body: unknown, fallback: string): RegistryApiError;
14
37
  /** RFC 8628/OAuth 错误码集——**值拷贝** ← `@sema-agent/settings-schema` 的 `OAUTH_ERROR_CODES`
15
38
  * (真身在那边的 `./api/auth`;SDK 保持零运行时依赖 ⇒ 此处拷值)。成员与顺序由
16
39
  * `test/registry-auth.test.ts` 的 describe「G17 R1 — 契约同源锚」用例
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/registry/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sEAAsE;AACtE,qBAAa,gBAAiB,SAAQ,KAAK;IAEvC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAEvB,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO;gBAHd,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM;IACf,6DAA6D;IACpD,IAAI,CAAC,EAAE,OAAO,YAAA;CAK1B;AAED;;;;;;oCAMoC;AACpC,eAAO,MAAM,0BAA0B,iKAS7B,CAAC;AAEX;+BAC+B;AAC/B,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7E;;gEAEgE;AAChE,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,IAAI,EAAE,kBAAkB;gBAAxB,IAAI,EAAE,kBAAkB,EACjC,WAAW,CAAC,EAAE,MAAM;CAKvB"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/registry/errors.ts"],"names":[],"mappings":"AAMA,sEAAsE;AACtE,qBAAa,gBAAiB,SAAQ,KAAK;IAEvC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAEvB,6DAA6D;IAC7D,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO;gBAHd,MAAM,EAAE,MAAM,EACvB,OAAO,EAAE,MAAM;IACf,6DAA6D;IACpD,IAAI,CAAC,EAAE,OAAO,YAAA;CAK1B;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAe,SAAQ,gBAAgB;gBACtC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;CAG5C;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAUpG;AAED;;;;;;oCAMoC;AACpC,eAAO,MAAM,0BAA0B,iKAS7B,CAAC;AAEX;+BAC+B;AAC/B,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7E;;gEAEgE;AAChE,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,IAAI,EAAE,kBAAkB;gBAAxB,IAAI,EAAE,kBAAkB,EACjC,WAAW,CAAC,EAAE,MAAM;CAKvB"}
@@ -2,6 +2,7 @@
2
2
  * registry user-plane 错误族(G17,设计稿 §2.3:worker 面的 toApiError 家族**不复用**——status 语义
3
3
  * 不同源;OAuth 错误按 RFC 是 400 + `error` 码,worker 的 400 是 validation)。
4
4
  */
5
+ import { classifyRegistryConflict } from "../registry-conflict.js";
5
6
  /** registry HTTP 面的通用 typed 错误(非 OAuth 端点,或 OAuth 端点的非 OAuth 形失败)。 */
6
7
  export class RegistryApiError extends Error {
7
8
  status;
@@ -12,7 +13,46 @@ export class RegistryApiError extends Error {
12
13
  super(message);
13
14
  this.status = status;
14
15
  this.body = body;
15
- this.name = "RegistryApiError";
16
+ this.name = new.target.name;
17
+ }
18
+ }
19
+ /**
20
+ * **409 scope-gone**(K-17;web-admin wave41 W41F 起)—— 写的**目标空间**在途中被删、或删了又同名重建;个人层两门
21
+ * (`PUT /api/v1/me/config/{domain}` / `PUT /api/v1/users/{username}/config/{domain}`)= token 所指的空间已不在。
22
+ * **一个字都没写。** 判读见 {@link import("../registry-conflict.js").classifyRegistryConflict}(本包唯一一只)。
23
+ *
24
+ * 🔴 **不可自动重试,也不是 CAS 冲突**:没有 `currentVersion` / `currentUpdatedAt`(体上本就不带),刻意**不**是
25
+ * {@link import("./scope-config-feedback.js").ScopeConfigCasConflictError} / {@link import("./me-config.js").ConfigCasConflictError}
26
+ * —— 「冲突 ⇒ 重读 ⇒ 重发」的分支接不到它。重读读到的是**替身空间**,旧草稿会写进一个没人审过的空间;正确处置是停下、
27
+ * 保住草稿、让人确认空间还是不是要写的那一个(web-admin 控制台同一处置:`ScopeGoneError`,不重放)。
28
+ * `putMeConfig` 的 `retryOn409` 遇之**不进 merge 腿**(请求计数恒 1)。
29
+ *
30
+ * 仍是 {@link RegistryApiError}(`status` 恒 409、`body` 原样、`message` 与全族同规则 = 体上 `error` 原词):存量
31
+ * `instanceof RegistryApiError` 的 catch 不落空(`RegistryAdmin.rollback` 等经 `RegistryClient.request` 的门,此前正是裸本基类)。
32
+ */
33
+ export class ScopeGoneError extends RegistryApiError {
34
+ constructor(message, body) {
35
+ super(409, message, body);
36
+ }
37
+ }
38
+ /**
39
+ * registry 子路径 REST 门「非成功应答 → typed 错误」的**唯一**构造点(K-17 收拢:此前 `RegistryClient.request` /
40
+ * scope-config 族 / me-config 两处 / effective 五处各写一遍 `new RegistryApiError(status, typeof error === "string" ? error : fallback, body)`)。
41
+ * `message` = 体上 `error` 原词,否则 `fallback`;scope-gone 409 ⇒ {@link ScopeGoneError},其余 ⇒ 裸 {@link RegistryApiError}
42
+ * (与 12.0.1 逐字同)。各门自己的 CAS 类(`ScopeConfigCasConflictError` / `ConfigCasConflictError`)只在分类为 `"conflict"`
43
+ * 时由门自己铸,不走这里 —— 这里从不铸「可重试」的形。
44
+ * 射程外(如实):`auth.ts` 的 device flow / refresh 三扇 OAuth 门按 RFC 8628 先判 {@link OAuthFlowError}、余者用各自的固定
45
+ * 文案 —— 它们不写配置,不会答 scope-gone,文案规则也不同,不并进来。
46
+ */
47
+ export function toRegistryApiError(status, body, fallback) {
48
+ const error = body?.error;
49
+ const message = typeof error === "string" ? error : fallback;
50
+ switch (classifyRegistryConflict(status, body)) {
51
+ case "gone":
52
+ return new ScopeGoneError(message, body);
53
+ case "conflict":
54
+ case "none":
55
+ return new RegistryApiError(status, message, body);
16
56
  }
17
57
  }
18
58
  /** RFC 8628/OAuth 错误码集——**值拷贝** ← `@sema-agent/settings-schema` 的 `OAUTH_ERROR_CODES`
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/registry/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,sEAAsE;AACtE,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAE9B;IAGA;IAJX,YACW,MAAc,EACvB,OAAe;IACf,6DAA6D;IACpD,IAAc;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;QALN,WAAM,GAAN,MAAM,CAAQ;QAGd,SAAI,GAAJ,IAAI,CAAU;QAGvB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;;;;;oCAMoC;AACpC,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,uBAAuB;IACvB,WAAW;IACX,eAAe;IACf,eAAe;IACf,iBAAiB;IACjB,wBAAwB;IACxB,eAAe;IACf,cAAc;CACN,CAAC;AAMX;;gEAEgE;AAChE,MAAM,OAAO,cAAe,SAAQ,KAAK;IAE5B;IADX,YACW,IAAwB,EACjC,WAAoB;QAEpB,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAH7C,SAAI,GAAJ,IAAI,CAAoB;QAIjC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/registry/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,sEAAsE;AACtE,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAE9B;IAGA;IAJX,YACW,MAAc,EACvB,OAAe;IACf,6DAA6D;IACpD,IAAc;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;QALN,WAAM,GAAN,MAAM,CAAQ;QAGd,SAAI,GAAJ,IAAI,CAAU;QAGvB,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,CAAC;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IAClD,YAAY,OAAe,EAAE,IAAc;QACzC,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,IAAa,EAAE,QAAgB;IAChF,MAAM,KAAK,GAAI,IAA+C,EAAE,KAAK,CAAC;IACtE,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC7D,QAAQ,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QAC/C,KAAK,MAAM;YACT,OAAO,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC3C,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,IAAI,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED;;;;;;oCAMoC;AACpC,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,uBAAuB;IACvB,WAAW;IACX,eAAe;IACf,eAAe;IACf,iBAAiB;IACjB,wBAAwB;IACxB,eAAe;IACf,cAAc;CACN,CAAC;AAMX;;gEAEgE;AAChE,MAAM,OAAO,cAAe,SAAQ,KAAK;IAE5B;IADX,YACW,IAAwB,EACjC,WAAoB;QAEpB,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAH7C,SAAI,GAAJ,IAAI,CAAoB;QAIjC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
@@ -20,7 +20,13 @@ export { RegistryApiError, OAuthFlowError, type OAuthFlowErrorCode,
20
20
  * (`settings-schema` 的 `OAUTH_ERROR_CODES`)正是因为消费端需要在运行时枚举:渲染错误码表、
21
21
  * 给 exhaustive switch 的 `default` 写断言、校验一个外来字符串是不是合法码 —— 三件事都拿不到它,
22
22
  * 只能再手抄一份,而那正是这条常量存在要消除的东西。纯 additive。 */
23
- REGISTRY_OAUTH_ERROR_CODES, } from "./errors.js";
23
+ REGISTRY_OAUTH_ERROR_CODES,
24
+ /** K-17:409 scope-gone(目标空间在途中被删 / 同名重建;个人层 = token 所指空间已不在)—— 不可自动重试、不是 CAS 冲突,
25
+ * 仍是 `RegistryApiError`。 */
26
+ ScopeGoneError, } from "./errors.js";
27
+ /** K-17:registry 409 的**唯一**判读函数(入参 = 状态 + 体,出参 = 闭集三词 `gone` / `conflict` / `none`)。本子路径的门都经它;
28
+ * 自己用 `RegistryClient.requestRaw` 打写门的调用方(如 scope 草稿的手写 PUT)也用它分支,别比线上的串。 */
29
+ export { classifyRegistryConflict, type RegistryConflictClass } from "../registry-conflict.js";
24
30
  export { getMeConfig, putMeConfig, ConfigCasConflictError, type PersonalConfigDomain, type MeConfigValue, type MeConfigPut, type MeConfigPutResult, } from "./me-config.js";
25
31
  export { RegistryAdmin, ADMIN_ENDPOINTS } from "./admin.js";
26
32
  export { ScopeConfigCasConflictError, getScopeConfigDraft, getScopeConfigPublished, putScopeConfigDraft, getPublishState, requestPublish, postFeedback, skillContentAddress, } from "./scope-config-feedback.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrG,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,0BAA0B,EAC1B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,KAAK,kBAAkB;AACvB;;;;2CAI2C;AAC3C,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,mBAAmB,GACpB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrG,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,0BAA0B,EAC1B,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,GACxB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,KAAK,kBAAkB;AACvB;;;;2CAI2C;AAC3C,0BAA0B;AAC1B;6BAC6B;AAC7B,cAAc,GACf,MAAM,aAAa,CAAC;AACrB;8EAC8E;AAC9E,OAAO,EAAE,wBAAwB,EAAE,KAAK,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EACL,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,iBAAiB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,mBAAmB,GACpB,MAAM,4BAA4B,CAAC"}
@@ -20,7 +20,13 @@ export { RegistryApiError, OAuthFlowError,
20
20
  * (`settings-schema` 的 `OAUTH_ERROR_CODES`)正是因为消费端需要在运行时枚举:渲染错误码表、
21
21
  * 给 exhaustive switch 的 `default` 写断言、校验一个外来字符串是不是合法码 —— 三件事都拿不到它,
22
22
  * 只能再手抄一份,而那正是这条常量存在要消除的东西。纯 additive。 */
23
- REGISTRY_OAUTH_ERROR_CODES, } from "./errors.js";
23
+ REGISTRY_OAUTH_ERROR_CODES,
24
+ /** K-17:409 scope-gone(目标空间在途中被删 / 同名重建;个人层 = token 所指空间已不在)—— 不可自动重试、不是 CAS 冲突,
25
+ * 仍是 `RegistryApiError`。 */
26
+ ScopeGoneError, } from "./errors.js";
27
+ /** K-17:registry 409 的**唯一**判读函数(入参 = 状态 + 体,出参 = 闭集三词 `gone` / `conflict` / `none`)。本子路径的门都经它;
28
+ * 自己用 `RegistryClient.requestRaw` 打写门的调用方(如 scope 草稿的手写 PUT)也用它分支,别比线上的串。 */
29
+ export { classifyRegistryConflict } from "../registry-conflict.js";
24
30
  export { getMeConfig, putMeConfig, ConfigCasConflictError, } from "./me-config.js";
25
31
  export { RegistryAdmin, ADMIN_ENDPOINTS } from "./admin.js";
26
32
  export { ScopeConfigCasConflictError, getScopeConfigDraft, getScopeConfigPublished, putScopeConfigDraft, getPublishState, requestPublish, postFeedback, skillContentAddress, } from "./scope-config-feedback.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAA0D,MAAM,aAAa,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAA2C,MAAM,qBAAqB,CAAC;AACrG,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,0BAA0B,GAG3B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAA6B,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,qBAAqB,GAItB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,cAAc;AAEd;;;;2CAI2C;AAC3C,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,WAAW,EACX,WAAW,EACX,sBAAsB,GAKvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,mBAAmB,GACpB,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/registry/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,cAAc,EAA0D,MAAM,aAAa,CAAC;AACrG,OAAO,EAAE,qBAAqB,EAA2C,MAAM,qBAAqB,CAAC;AACrG,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,0BAA0B,GAG3B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAA6B,MAAM,aAAa,CAAC;AAC7E,OAAO,EACL,UAAU,EACV,WAAW,EACX,YAAY,EACZ,qBAAqB,GAItB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,EAChB,cAAc;AAEd;;;;2CAI2C;AAC3C,0BAA0B;AAC1B;6BAC6B;AAC7B,cAAc,GACf,MAAM,aAAa,CAAC;AACrB;8EAC8E;AAC9E,OAAO,EAAE,wBAAwB,EAA8B,MAAM,yBAAyB,CAAC;AAC/F,OAAO,EACL,WAAW,EACX,WAAW,EACX,sBAAsB,GAKvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,mBAAmB,GACpB,MAAM,4BAA4B,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import type { RegistryClient } from "./client.js";
2
2
  /** 与壳 MeDomain 同值域;开放 string——registry 加域(如 plugins 之后的新域)SDK 不挡。 */
3
3
  export type PersonalConfigDomain = "models" | "mcp" | "skills" | "plugins" | (string & {});
4
- /** PUT 409:CAS 冲突——`currentUpdatedAt` 是服务端现值的锁(重 GET 后以它为 baseUpdatedAt 重试)。 */
4
+ /** PUT 409:CAS 冲突——`currentUpdatedAt` 是服务端现值的锁(重 GET 后以它为 baseUpdatedAt 重试)。
5
+ * K-17:只装分类为 `"conflict"` 的 409;scope-gone 409 是 {@link import("./errors.js").ScopeGoneError}(不是本类)。 */
5
6
  export declare class ConfigCasConflictError extends Error {
6
7
  readonly currentUpdatedAt: string | null;
7
8
  constructor(currentUpdatedAt: string | null);
@@ -34,7 +35,9 @@ export interface MeConfigPutResult {
34
35
  }
35
36
  /** PUT 个人域文档(CAS)。409 ⇒ 无 `retryOn409` 时 typed 直抛;给了 merge 回调则
36
37
  * 「refetch → merge(现值, 我值) → 以现值锁重 PUT」**一次**,再 409 上抛([1864] 逐字节奏)。
37
- * 400 = registry DOMAIN_SCHEMAS 校验失败(zod issues 在 body,RegistryApiError.body 里可取)。 */
38
+ * 400 = registry DOMAIN_SCHEMAS 校验失败(zod issues 在 body,RegistryApiError.body 里可取)。
39
+ * 🔴 K-17:scope-gone 409 ⇒ `ScopeGoneError` 直抛,**有没有 `retryOn409` 都一样**(不 refetch、不 merge、不第二发;
40
+ * 第二发撞上它同样直抛)。 */
38
41
  export declare function putMeConfig(client: RegistryClient, domain: PersonalConfigDomain, put: MeConfigPut, opts?: {
39
42
  forUser?: string;
40
43
  signal?: AbortSignal;
@@ -1 +1 @@
1
- {"version":3,"file":"me-config.d.ts","sourceRoot":"","sources":["../../src/registry/me-config.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,qEAAqE;AACrE,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAK3F,gFAAgF;AAChF,qBAAa,sBAAuB,SAAQ,KAAK;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;gBAA/B,gBAAgB,EAAE,MAAM,GAAG,IAAI;CAIrD;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;wEACoE;IACpE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,qFAAqF;AACrF,wBAAsB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CASjK;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,2DAA2D;IAC3D,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;uFAEuF;AACvF,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,oBAAoB,EAC5B,GAAG,EAAE,WAAW,EAChB,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAA;KAAE,CAAA;CAAE,GAC9H,OAAO,CAAC,iBAAiB,CAAC,CAwB5B"}
1
+ {"version":3,"file":"me-config.d.ts","sourceRoot":"","sources":["../../src/registry/me-config.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,qEAAqE;AACrE,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAK3F;yGACyG;AACzG,qBAAa,sBAAuB,SAAQ,KAAK;IACnC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,GAAG,IAAI;gBAA/B,gBAAgB,EAAE,MAAM,GAAG,IAAI;CAIrD;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB;wEACoE;IACpE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,qFAAqF;AACrF,wBAAsB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAMjK;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,OAAO,CAAC;IACf,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,IAAI,CAAC;IACT,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,2DAA2D;IAC3D,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED;;;;mBAImB;AACnB,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,oBAAoB,EAC5B,GAAG,EAAE,WAAW,EAChB,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAA;KAAE,CAAA;CAAE,GAC9H,OAAO,CAAC,iBAAiB,CAAC,CA0B5B"}
@@ -3,10 +3,14 @@
3
3
  * wire 真形亲读)。CAS 轴 = `updatedAt` 字符串乐观锁(⚠️ scopes 面的轴是 version 数字——两轴别混)。
4
4
  * merge 是壳/端语义 ⇒ 回调注入,SDK 只做「409 → refetch → merge → 重 PUT **一次**」的节奏;二连
5
5
  * 409 typed 上抛(无限重试=两个写者互相打转)。
6
+ * 🔴 K-17:「409」指分类为 `"conflict"` 的那一类(见 `../registry-conflict.ts`);scope-gone 409(token 所指的空间已不在)
7
+ * 是 `ScopeGoneError`,**不进** merge 腿 —— 12.0.1 对任何 409 都重取合并重发,空间若已同名重建,merge 后的值会写进替身。
6
8
  */
7
- import { RegistryApiError } from "./errors.js";
9
+ import { toRegistryApiError } from "./errors.js";
10
+ import { classifyRegistryConflict } from "../registry-conflict.js";
8
11
  const personalPath = (domain, forUser) => forUser ? `/api/v1/users/${encodeURIComponent(forUser)}/config/${encodeURIComponent(domain)}` : `/api/v1/me/config/${encodeURIComponent(domain)}`;
9
- /** PUT 409:CAS 冲突——`currentUpdatedAt` 是服务端现值的锁(重 GET 后以它为 baseUpdatedAt 重试)。 */
12
+ /** PUT 409:CAS 冲突——`currentUpdatedAt` 是服务端现值的锁(重 GET 后以它为 baseUpdatedAt 重试)。
13
+ * K-17:只装分类为 `"conflict"` 的 409;scope-gone 409 是 {@link import("./errors.js").ScopeGoneError}(不是本类)。 */
10
14
  export class ConfigCasConflictError extends Error {
11
15
  currentUpdatedAt;
12
16
  constructor(currentUpdatedAt) {
@@ -18,29 +22,32 @@ export class ConfigCasConflictError extends Error {
18
22
  /** GET 个人域文档(managed 面传 `forUser`;403/404 的辖区语句 registry 原话直出在 RegistryApiError)。 */
19
23
  export async function getMeConfig(client, domain, opts) {
20
24
  const r = await client.requestRaw({ method: "GET", path: personalPath(domain, opts?.forUser), ...(opts?.signal ? { signal: opts.signal } : {}) });
21
- if (r.status !== 200) {
22
- const msg = r.body?.error;
23
- throw new RegistryApiError(r.status, typeof msg === "string" ? msg : `personal-config read failed (HTTP ${r.status})`, r.body);
24
- }
25
+ if (r.status !== 200)
26
+ throw toRegistryApiError(r.status, r.body, `personal-config read failed (HTTP ${r.status})`);
25
27
  const b = (r.body ?? {});
26
28
  // 信封 VERBATIM + 行内归一(§12):兄弟键原样带,value/updatedAt 仍走既有形状守卫。
27
29
  return { ...b, value: b.value ?? null, updatedAt: typeof b.updatedAt === "string" ? b.updatedAt : null };
28
30
  }
29
31
  /** PUT 个人域文档(CAS)。409 ⇒ 无 `retryOn409` 时 typed 直抛;给了 merge 回调则
30
32
  * 「refetch → merge(现值, 我值) → 以现值锁重 PUT」**一次**,再 409 上抛([1864] 逐字节奏)。
31
- * 400 = registry DOMAIN_SCHEMAS 校验失败(zod issues 在 body,RegistryApiError.body 里可取)。 */
33
+ * 400 = registry DOMAIN_SCHEMAS 校验失败(zod issues 在 body,RegistryApiError.body 里可取)。
34
+ * 🔴 K-17:scope-gone 409 ⇒ `ScopeGoneError` 直抛,**有没有 `retryOn409` 都一样**(不 refetch、不 merge、不第二发;
35
+ * 第二发撞上它同样直抛)。 */
32
36
  export async function putMeConfig(client, domain, put, opts) {
33
37
  const attempt = async (body) => {
34
38
  const r = await client.requestRaw({ method: "PUT", path: personalPath(domain, opts?.forUser), body, ...(opts?.signal ? { signal: opts.signal } : {}) });
35
- if (r.status === 409) {
36
- const cur = r.body?.currentUpdatedAt;
37
- return new ConfigCasConflictError(typeof cur === "string" ? cur : null);
39
+ switch (classifyRegistryConflict(r.status, r.body)) {
40
+ case "conflict": {
41
+ const cur = r.body?.currentUpdatedAt;
42
+ return new ConfigCasConflictError(typeof cur === "string" ? cur : null);
43
+ }
44
+ case "gone": // 不是 CAS 冲突:下面的共用构造点铸 ScopeGoneError 并**抛出** ⇒ 不回到 merge 腿
45
+ case "none":
46
+ break;
38
47
  }
39
48
  const b = r.body;
40
- if (r.status !== 200 || b?.ok !== true) {
41
- const msg = r.body?.error;
42
- throw new RegistryApiError(r.status, typeof msg === "string" ? msg : `personal-config write failed (HTTP ${r.status})`, r.body);
43
- }
49
+ if (r.status !== 200 || b?.ok !== true)
50
+ throw toRegistryApiError(r.status, r.body, `personal-config write failed (HTTP ${r.status})`);
44
51
  return { ...b, ok: true, scope: typeof b.scope === "string" ? b.scope : null, updatedAt: typeof b.updatedAt === "string" ? b.updatedAt : null }; // [2400] RC-3(5.0.0):与同文件读腿 null 口径对齐,"" 是两边都不认的第三态
45
52
  };
46
53
  const first = await attempt(put);
@@ -1 +1 @@
1
- {"version":3,"file":"me-config.js","sourceRoot":"","sources":["../../src/registry/me-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"me-config.js","sourceRoot":"","sources":["../../src/registry/me-config.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,9 @@ import type { PersonalConfigDomain } from "./me-config.js";
4
4
  * 「typed verb 班车」件——此前裸 RegistryApiError,与个人面 ConfigCasConflictError(updatedAt 串轴)
5
5
  * 不对称,消费端只能靠 status===409 判且重试前要多一次 GET 取新基线)。`currentVersion`:registry 在
6
6
  * 409 body 里回了就带上(重试省一次 GET),没回=undefined 容缺。两轴刻意分两个类:字符串轴与数字轴
7
- * 的重试代码本就不同,一个类装两轴只会逼消费端再判形。 */
7
+ * 的重试代码本就不同,一个类装两轴只会逼消费端再判形。
8
+ * 🔴 K-17:**只**装分类为 `"conflict"` 的 409;scope-gone 409 是 {@link import("./errors.js").ScopeGoneError}(不可重试,
9
+ * 不是本类)—— 12.0.1 按状态 409 一律铸本类,调用方的「冲突 ⇒ 重读重发」会把旧草稿写进同名替身空间。 */
8
10
  export declare class ScopeConfigCasConflictError extends Error {
9
11
  readonly currentVersion?: number | undefined;
10
12
  constructor(message: string, currentVersion?: number | undefined);
@@ -27,7 +29,9 @@ export declare function getScopeConfigPublished(client: RegistryClient, space: s
27
29
  [k: string]: unknown;
28
30
  }>;
29
31
  /** DRAFT 写(version-CAS)。409/400 等非 200 typed 直出(merge-retry 节奏留调用方——scope 面的
30
- * 写者是发布工作流,自动 merge 比个人面更危险,SDK 不提供 retryOn409)。 */
32
+ * 写者是发布工作流,自动 merge 比个人面更危险,SDK 不提供 retryOn409)。
33
+ * 409 按 {@link classifyRegistryConflict} 分两类(K-17):`"conflict"` ⇒ {@link ScopeConfigCasConflictError}(可重读重试);
34
+ * `"gone"` ⇒ `ScopeGoneError`(空间在途中被删 / 同名重建,什么都没写,**别**重读重发)。 */
31
35
  export declare function putScopeConfigDraft(client: RegistryClient, space: string, domain: PersonalConfigDomain, put: {
32
36
  value: unknown;
33
37
  summary: string;
@@ -1 +1 @@
1
- {"version":3,"file":"scope-config-feedback.d.ts","sourceRoot":"","sources":["../../src/registry/scope-config-feedback.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAK3D;;;;iCAIiC;AACjC,qBAAa,2BAA4B,SAAQ,KAAK;IAGlD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM;gBADhC,OAAO,EAAE,MAAM,EACN,cAAc,CAAC,EAAE,MAAM,YAAA;CAKnC;AAOD,4DAA4D;AAC5D,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAKzN;AAED,sDAAsD;AACtD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAQ/O;AAED;qDACqD;AACrD,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,oBAAoB,EAC5B,GAAG,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAC7D,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAC9B,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAU/C;AAID,+DAA+D;AAC/D,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAKzN;AAED;+DAC+D;AAC/D,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAK7D;AAID;;8CAE8C;AAC9C,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAKlJ;AAID;;yBAEyB;AACzB,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI1E"}
1
+ {"version":3,"file":"scope-config-feedback.d.ts","sourceRoot":"","sources":["../../src/registry/scope-config-feedback.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAK3D;;;;;;iEAMiE;AACjE,qBAAa,2BAA4B,SAAQ,KAAK;IAGlD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM;gBADhC,OAAO,EAAE,MAAM,EACN,cAAc,CAAC,EAAE,MAAM,YAAA;CAKnC;AAMD,4DAA4D;AAC5D,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAKzN;AAED,sDAAsD;AACtD,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAQ/O;AAED;;;mEAGmE;AACnE,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,oBAAoB,EAC5B,GAAG,EAAE;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAC7D,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAC9B,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAe/C;AAID,+DAA+D;AAC/D,wBAAsB,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,CAKzN;AAED;+DAC+D;AAC/D,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAC9B,OAAO,CAAC;IAAE,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAK7D;AAID;;8CAE8C;AAC9C,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAKlJ;AAID;;yBAEyB;AACzB,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI1E"}
@@ -6,13 +6,16 @@
6
6
  * publish 语义:审批闸空间 POST 答 **202 pending**——诚实判别位,绝不装已发布(壳 runPublish 同句)。
7
7
  * feedback 的隐私闸(isEssentialTrafficOnly)是壳策略,**留壳不进 SDK**。
8
8
  */
9
- import { RegistryApiError } from "./errors.js";
9
+ import { toRegistryApiError } from "./errors.js";
10
+ import { classifyRegistryConflict } from "../registry-conflict.js";
10
11
  const scopeConfigPath = (space, domain) => `/api/v1/scopes/${encodeURIComponent(space)}/config/${encodeURIComponent(domain)}`;
11
12
  /** team 面(scope-config draft,version 数字轴)的 409 CAS 冲突 typed 类(2026-07-28,[1949] 回执的
12
13
  * 「typed verb 班车」件——此前裸 RegistryApiError,与个人面 ConfigCasConflictError(updatedAt 串轴)
13
14
  * 不对称,消费端只能靠 status===409 判且重试前要多一次 GET 取新基线)。`currentVersion`:registry 在
14
15
  * 409 body 里回了就带上(重试省一次 GET),没回=undefined 容缺。两轴刻意分两个类:字符串轴与数字轴
15
- * 的重试代码本就不同,一个类装两轴只会逼消费端再判形。 */
16
+ * 的重试代码本就不同,一个类装两轴只会逼消费端再判形。
17
+ * 🔴 K-17:**只**装分类为 `"conflict"` 的 409;scope-gone 409 是 {@link import("./errors.js").ScopeGoneError}(不可重试,
18
+ * 不是本类)—— 12.0.1 按状态 409 一律铸本类,调用方的「冲突 ⇒ 重读重发」会把旧草稿写进同名替身空间。 */
16
19
  export class ScopeConfigCasConflictError extends Error {
17
20
  currentVersion;
18
21
  constructor(message, currentVersion) {
@@ -22,8 +25,7 @@ export class ScopeConfigCasConflictError extends Error {
22
25
  }
23
26
  }
24
27
  const fail = (r, what) => {
25
- const msg = r.body?.error;
26
- throw new RegistryApiError(r.status, typeof msg === "string" ? msg : `${what} failed (HTTP ${r.status})`, r.body);
28
+ throw toRegistryApiError(r.status, r.body, `${what} failed (HTTP ${r.status})`);
27
29
  };
28
30
  /** DRAFT(工作区)读:{value, version}——version 即 PUT 的 CAS 基线。 */
29
31
  export async function getScopeConfigDraft(client, space, domain, opts) {
@@ -45,14 +47,21 @@ export async function getScopeConfigPublished(client, space, domain, opts) {
45
47
  return { ...rest, value: b.value ?? null, published: b.published === true, ...(typeof b.publishedAt === "string" ? { publishedAt: b.publishedAt } : {}) };
46
48
  }
47
49
  /** DRAFT 写(version-CAS)。409/400 等非 200 typed 直出(merge-retry 节奏留调用方——scope 面的
48
- * 写者是发布工作流,自动 merge 比个人面更危险,SDK 不提供 retryOn409)。 */
50
+ * 写者是发布工作流,自动 merge 比个人面更危险,SDK 不提供 retryOn409)。
51
+ * 409 按 {@link classifyRegistryConflict} 分两类(K-17):`"conflict"` ⇒ {@link ScopeConfigCasConflictError}(可重读重试);
52
+ * `"gone"` ⇒ `ScopeGoneError`(空间在途中被删 / 同名重建,什么都没写,**别**重读重发)。 */
49
53
  export async function putScopeConfigDraft(client, space, domain, put, opts) {
50
54
  const r = await client.requestRaw({ method: "PUT", path: scopeConfigPath(space, domain), body: put, ...(opts?.signal ? { signal: opts.signal } : {}) });
51
55
  const b = r.body;
52
- if (r.status === 409) {
53
- const cv = r.body?.currentVersion;
54
- const msg = r.body?.error;
55
- throw new ScopeConfigCasConflictError(typeof msg === "string" ? msg : "scope-config draft write conflict (HTTP 409)", typeof cv === "number" ? cv : undefined);
56
+ switch (classifyRegistryConflict(r.status, r.body)) {
57
+ case "conflict": {
58
+ const cv = r.body?.currentVersion;
59
+ const msg = r.body?.error;
60
+ throw new ScopeConfigCasConflictError(typeof msg === "string" ? msg : "scope-config draft write conflict (HTTP 409)", typeof cv === "number" ? cv : undefined);
61
+ }
62
+ case "gone": // 不是 CAS 冲突:落到下面的共用构造点 ⇒ ScopeGoneError
63
+ case "none":
64
+ break;
56
65
  }
57
66
  if (r.status !== 200 || b?.ok !== true)
58
67
  fail(r, `scope-config draft write`);
@@ -1 +1 @@
1
- {"version":3,"file":"scope-config-feedback.js","sourceRoot":"","sources":["../../src/registry/scope-config-feedback.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scope-config-feedback.js","sourceRoot":"","sources":["../../src/registry/scope-config-feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAInE,MAAM,eAAe,GAAG,CAAC,KAAa,EAAE,MAAc,EAAU,EAAE,CAChE,kBAAkB,kBAAkB,CAAC,KAAK,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;AAErF;;;;;;iEAMiE;AACjE,MAAM,OAAO,2BAA4B,SAAQ,KAAK;IAGzC;IAFX,YACE,OAAe,EACN,cAAuB;QAEhC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFN,mBAAc,GAAd,cAAc,CAAS;QAGhC,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AAED,MAAM,IAAI,GAAG,CAAC,CAAoC,EAAE,IAAY,EAAS,EAAE;IACzE,MAAM,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,IAAI,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAClF,CAAC,CAAC;AAEF,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAsB,EAAE,KAAa,EAAE,MAA4B,EAAE,IAA+B;IAC5I,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7I,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG;QAAE,IAAI,CAAC,CAAC,EAAE,yBAAyB,CAAC,CAAC;IACzD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAA2C,CAAC;IACnE,OAAO,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,wEAAwE;AAC9K,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAsB,EAAE,KAAa,EAAE,MAA4B,EAAE,IAA+B;IAChJ,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,mBAAmB,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnK,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG;QAAE,IAAI,CAAC,CAAC,EAAE,6BAA6B,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAoE,CAAC;IAC5F,wEAAwE;IACxE,0CAA0C;IAC1C,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;IACxC,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,KAAK,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC5J,CAAC;AAED;;;mEAGmE;AACnE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAsB,EACtB,KAAa,EACb,MAA4B,EAC5B,GAA6D,EAC7D,IAA+B;IAE/B,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxJ,MAAM,CAAC,GAAG,CAAC,CAAC,IAAuD,CAAC;IACpE,QAAQ,wBAAwB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,GAAI,CAAC,CAAC,IAAiD,EAAE,cAAc,CAAC;YAChF,MAAM,GAAG,GAAI,CAAC,CAAC,IAAwC,EAAE,KAAK,CAAC;YAC/D,MAAM,IAAI,2BAA2B,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,8CAA8C,EAAE,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjK,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,wCAAwC;QACrD,KAAK,MAAM;YACT,MAAM;IACV,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI;QAAE,IAAI,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC;IAC5E,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAE,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAE,CAAE,CAAC,OAAkB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,uBAAuB;AACvH,CAAC;AAED,MAAM,WAAW,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,kBAAkB,kBAAkB,CAAC,KAAK,CAAC,UAAU,CAAC;AAErG,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAsB,EAAE,KAAa,EAAE,IAA+B;IAC1G,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACjI,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG;QAAE,IAAI,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC;IACpD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAA4E,CAAC;IACpG,OAAO,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC,iBAAiB,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,iEAAiE;AACzN,CAAC;AAED;+DAC+D;AAC/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAsB,EACtB,KAAa,EACb,IAA+B;IAE/B,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,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;IAC5I,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjE,OAAO,IAAI,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC;AACpC,CAAC;AAED,0GAA0G;AAE1G;;8CAE8C;AAC9C,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAsB,EAAE,IAA6B,EAAE,IAA+B;IACvH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxI,MAAM,EAAE,GAAI,CAAC,CAAC,IAAqC,EAAE,EAAE,CAAC;IACxD,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,IAAI,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC;IAC7G,OAAO,EAAE,EAAE,EAAE,EAAY,EAAE,CAAC;AAC9B,CAAC;AAED,oGAAoG;AAEpG;;yBAEyB;AACzB,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAe;IACvD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IACxF,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChG,OAAO,UAAU,GAAG,EAAE,CAAC;AACzB,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,CAYvJ"}
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,CAWvJ"}
@@ -1,4 +1,4 @@
1
- import { RegistryApiError } from "./errors.js";
1
+ import { toRegistryApiError } from "./errors.js";
2
2
  /** 值拷贝 ← settings-schema SCOPES_V1_PATHS(同源锚测试对账)。 */
3
3
  export const REGISTRY_SCOPES_PATHS = {
4
4
  scopes: "/api/v1/scopes",
@@ -34,7 +34,6 @@ export async function getEffective(client, opts) {
34
34
  return { status: 304, ...(etag !== undefined ? { etag } : {}) };
35
35
  if (r.status >= 200 && r.status < 300)
36
36
  return { status: 200, ...(etag !== undefined ? { etag } : {}), body: r.body };
37
- const msg = r.body?.error;
38
- throw new RegistryApiError(r.status, typeof msg === "string" ? msg : `effective fetch failed (HTTP ${r.status})`, r.body);
37
+ throw toRegistryApiError(r.status, r.body, `effective fetch failed (HTTP ${r.status})`);
39
38
  }
40
39
  //# sourceMappingURL=scopes-effective.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scopes-effective.js","sourceRoot":"","sources":["../../src/registry/scopes-effective.ts"],"names":[],"mappings":"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"}
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,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACjD,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IAChD,IAAI,CAAC,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACtF,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrH,MAAM,kBAAkB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,gCAAgC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * K-17 —— **唯一**一只判读函数:sema-registry(sema-web-admin)的一个应答,对写者意味着什么。
3
+ *
4
+ * 为什么要有它(web-admin wave41 / W41F 起,2026-09-27):registry 的配置写门 / 回滚门在**同一个 HTTP 409** 上答两件相反的事 ——
5
+ * · `conflict`:普通 CAS 未中(你读到的 version / updatedAt 之后库动过)⇒ 重读、改基线、再写;
6
+ * · `scope_gone`:写的**目标空间**在途中被删、或删了又同名重建(个人层两门:token 所指的空间已不在)⇒ **一个字都没写**,
7
+ * 而重读读到的是**替身空间** —— 重读重发会把旧草稿写进一个没人审过的空间。**不可自动重试**。
8
+ * 机器词在信封的机器码位:v1 OAuth 形四门(`PUT /api/v1/scopes/{scope}/config/{domain}`、`POST /api/v1/scopes/{scope}/rollback`、
9
+ * `PUT /api/v1/me/config/{domain}`、`PUT /api/v1/users/{username}/config/{domain}`)在 `body.error`;legacy 控制面
10
+ * `POST /api/config/rollback` 在 `body.errorCode`、散文 `error` 逐字不变。两形都**不带** `currentVersion` / `currentUpdatedAt`。
11
+ * 属主坐标(sema-web-admin origin/main `6ea58dc`):词 = `src/lib/auth/refusal-codes.ts` `SCOPE_GONE_CODE`;属主自己的客户端在
12
+ * `src/lib/web/api.ts` `toError` 读机器码位,三步:`errorCode`(trim 后非空,取 trim 后的值)→ 对象形 `error.code`(同规;
13
+ * 老 server 形)→ `error` 串原样(`readNonEmptyString` = `src/lib/web/wire-read.ts`)。本函数逐步照同一条规则读,两个客户端
14
+ * 对同一个应答不给两个答案。
15
+ *
16
+ * 本包每一扇会碰到 registry 409 的门都从这里判读、对结果做穷尽 `switch`,**调用点零字符串比对**:控制面 `toControlError`
17
+ * (`errors.ts`)、registry 子路径的 `toRegistryApiError`(`registry/errors.ts`;`RegistryClient.request` 等全部非成功应答经它)、
18
+ * `putScopeConfigDraft` / `putMeConfig` 的 CAS 臂。机器词本身只在本模块出现一次(源码门:`test/registry-scope-gone.test.ts` ⑦)。
19
+ * 本模块两个入口共用(控制面根入口与 `@sema-agent/sdk/registry` 子路径),所以住在 `src/` 顶层、不属于任何一边。
20
+ */
21
+ /**
22
+ * 一个 registry 应答对写者的**闭集**分类(三词,本包自己的词;加词 = 每个调用点的穷尽 `switch` 在 `never` 处编译红):
23
+ * - `"gone"`:409 + 机器码 scope-gone —— 目标空间没了 / 被同名替换,什么都没写;**不可**当版本冲突重试;
24
+ * - `"conflict"`:其它任何 409(普通 CAS 冲突、发布闸 / 草稿冲突、无码 409 …)—— 各门既有的 409 语义,与 12.0.1 逐字同;
25
+ * - `"none"`:不是 409。
26
+ * 分类词刻意**不**与属主的机器词同拼:线上的词归属主,分类归本包;两者同拼时,「调用点有没有在比线上的串」这件事就
27
+ * 没法被机器看住了(源码门按 AST 数线上那个词的串字面量,恰一处 = 本模块的常量)。
28
+ */
29
+ export type RegistryConflictClass = "gone" | "conflict" | "none";
30
+ /** 入参 = 状态 + (已 parse 的)体;出参 = {@link RegistryConflictClass}。纯函数、零抛(任何体形都有答案)。 */
31
+ export declare function classifyRegistryConflict(status: number, body: unknown): RegistryConflictClass;
32
+ //# sourceMappingURL=registry-conflict.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-conflict.d.ts","sourceRoot":"","sources":["../src/registry-conflict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH;;;;;;;GAOG;AACH,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;AAQjE,kFAAkF;AAClF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,qBAAqB,CAM7F"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * K-17 —— **唯一**一只判读函数:sema-registry(sema-web-admin)的一个应答,对写者意味着什么。
3
+ *
4
+ * 为什么要有它(web-admin wave41 / W41F 起,2026-09-27):registry 的配置写门 / 回滚门在**同一个 HTTP 409** 上答两件相反的事 ——
5
+ * · `conflict`:普通 CAS 未中(你读到的 version / updatedAt 之后库动过)⇒ 重读、改基线、再写;
6
+ * · `scope_gone`:写的**目标空间**在途中被删、或删了又同名重建(个人层两门:token 所指的空间已不在)⇒ **一个字都没写**,
7
+ * 而重读读到的是**替身空间** —— 重读重发会把旧草稿写进一个没人审过的空间。**不可自动重试**。
8
+ * 机器词在信封的机器码位:v1 OAuth 形四门(`PUT /api/v1/scopes/{scope}/config/{domain}`、`POST /api/v1/scopes/{scope}/rollback`、
9
+ * `PUT /api/v1/me/config/{domain}`、`PUT /api/v1/users/{username}/config/{domain}`)在 `body.error`;legacy 控制面
10
+ * `POST /api/config/rollback` 在 `body.errorCode`、散文 `error` 逐字不变。两形都**不带** `currentVersion` / `currentUpdatedAt`。
11
+ * 属主坐标(sema-web-admin origin/main `6ea58dc`):词 = `src/lib/auth/refusal-codes.ts` `SCOPE_GONE_CODE`;属主自己的客户端在
12
+ * `src/lib/web/api.ts` `toError` 读机器码位,三步:`errorCode`(trim 后非空,取 trim 后的值)→ 对象形 `error.code`(同规;
13
+ * 老 server 形)→ `error` 串原样(`readNonEmptyString` = `src/lib/web/wire-read.ts`)。本函数逐步照同一条规则读,两个客户端
14
+ * 对同一个应答不给两个答案。
15
+ *
16
+ * 本包每一扇会碰到 registry 409 的门都从这里判读、对结果做穷尽 `switch`,**调用点零字符串比对**:控制面 `toControlError`
17
+ * (`errors.ts`)、registry 子路径的 `toRegistryApiError`(`registry/errors.ts`;`RegistryClient.request` 等全部非成功应答经它)、
18
+ * `putScopeConfigDraft` / `putMeConfig` 的 CAS 臂。机器词本身只在本模块出现一次(源码门:`test/registry-scope-gone.test.ts` ⑦)。
19
+ * 本模块两个入口共用(控制面根入口与 `@sema-agent/sdk/registry` 子路径),所以住在 `src/` 顶层、不属于任何一边。
20
+ */
21
+ /** 属主的机器词(web-admin `SCOPE_GONE_CODE`)。模块私有:调用方按分类分支,从不比这个串。 */
22
+ const SCOPE_GONE_CODE = "scope_gone";
23
+ /** 属主 `readNonEmptyString` 同律:串且 trim 后非空 ⇒ trim 后的值;否则缺席。 */
24
+ const nonBlank = (v) => {
25
+ const s = typeof v === "string" ? v.trim() : "";
26
+ return s === "" ? undefined : s;
27
+ };
28
+ /** 入参 = 状态 + (已 parse 的)体;出参 = {@link RegistryConflictClass}。纯函数、零抛(任何体形都有答案)。 */
29
+ export function classifyRegistryConflict(status, body) {
30
+ if (status !== 409)
31
+ return "none";
32
+ const b = typeof body === "object" && body !== null ? body : {};
33
+ const objectForm = typeof b.error === "object" && b.error !== null ? b.error.code : undefined;
34
+ const code = nonBlank(b.errorCode) ?? nonBlank(objectForm) ?? (typeof b.error === "string" ? b.error : undefined);
35
+ return code === SCOPE_GONE_CODE ? "gone" : "conflict";
36
+ }
37
+ //# sourceMappingURL=registry-conflict.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry-conflict.js","sourceRoot":"","sources":["../src/registry-conflict.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,gEAAgE;AAChE,MAAM,eAAe,GAAG,YAAY,CAAC;AAYrC,8DAA8D;AAC9D,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAsB,EAAE;IAClD,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC,CAAC;AAEF,kFAAkF;AAClF,MAAM,UAAU,wBAAwB,CAAC,MAAc,EAAE,IAAa;IACpE,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,MAAM,CAAC;IAClC,MAAM,CAAC,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAE,IAAiD,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9G,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAE,CAAC,CAAC,KAA4B,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACtH,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClH,OAAO,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC;AACxD,CAAC"}