@sema-agent/sdk 0.0.114 → 0.0.116

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.
@@ -25,6 +25,13 @@ export declare class RegistryClient {
25
25
  private refreshInFlight;
26
26
  constructor(config: RegistryClientConfig);
27
27
  request<T>(opts: RegistryRequestOptions): Promise<T>;
28
+ /** 非抛的原始面(R2 的条件请求用:304/412 等**语义状态**要直出给调用方判别,不是错误)。
29
+ * 401 仍在这里走 single-flight refresh + 重试一次——凭证生命周期对所有面统一,绝不旁路。 */
30
+ requestRaw(opts: RegistryRequestOptions): Promise<{
31
+ status: number;
32
+ body: unknown;
33
+ headers: Headers;
34
+ }>;
28
35
  private refreshOnce;
29
36
  private rawRequest;
30
37
  private settle;
@@ -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;IAQ1D,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,OAAO,CAAC,MAAM;CAKf"}
@@ -25,12 +25,17 @@ export class RegistryClient {
25
25
  this.timeoutMs = config.timeoutMs ?? 30_000;
26
26
  }
27
27
  async request(opts) {
28
+ return this.settle(await this.requestRaw(opts));
29
+ }
30
+ /** 非抛的原始面(R2 的条件请求用:304/412 等**语义状态**要直出给调用方判别,不是错误)。
31
+ * 401 仍在这里走 single-flight refresh + 重试一次——凭证生命周期对所有面统一,绝不旁路。 */
32
+ async requestRaw(opts) {
28
33
  const first = await this.rawRequest(opts);
29
34
  if (first.status !== 401)
30
- return this.settle(first);
31
- // 401 → single-flight refresh → 原请求重试一次(仅一次:重试仍 401 = 服务端真拒,typed 直出)。
35
+ return first;
36
+ // 401 → single-flight refresh → 原请求重试一次(仅一次:重试仍 401 = 服务端真拒)。
32
37
  await this.refreshOnce(opts.signal);
33
- return this.settle(await this.rawRequest(opts));
38
+ return this.rawRequest(opts);
34
39
  }
35
40
  refreshOnce(signal) {
36
41
  if (!this.refreshInFlight) {
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/registry/client.ts"],"names":[],"mappings":"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"}
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"}
@@ -13,5 +13,8 @@ export { RegistryClient, type RegistryClientConfig, type RegistryRequestOptions
13
13
  export { InMemoryTokenProvider, type TokenProvider, type RegistryTokens } from "./token-provider.js";
14
14
  export { requestDeviceCode, pollUntilApproved, refreshTokens, logoutRegistry, REGISTRY_AUTH_PATHS, REGISTRY_DEVICE_GRANT_TYPE, type DeviceCodeResponse, type TokenGrantResponse, } from "./auth.js";
15
15
  export { probeRegistryHealth, type RegistryHealthResult } from "./health.js";
16
+ export { listScopes, switchScope, getEffective, REGISTRY_SCOPES_PATHS, type ScopesListResponse, type ScopeSwitchResponse, type EffectiveResult, } from "./scopes-effective.js";
16
17
  export { RegistryApiError, OAuthFlowError, type OAuthFlowErrorCode } from "./errors.js";
18
+ export { getMeConfig, putMeConfig, ConfigCasConflictError, type PersonalConfigDomain, type MeConfigValue, type MeConfigPut, type MeConfigPutResult, } from "./me-config.js";
19
+ export { getScopeConfigDraft, getScopeConfigPublished, putScopeConfigDraft, getPublishState, requestPublish, postFeedback, skillContentAddress, } from "./scope-config-feedback.js";
17
20
  //# sourceMappingURL=index.d.ts.map
@@ -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,EAAE,gBAAgB,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,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,EAAE,gBAAgB,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACxF,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,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,mBAAmB,GACpB,MAAM,4BAA4B,CAAC"}
@@ -13,5 +13,8 @@ export { RegistryClient } from "./client.js";
13
13
  export { InMemoryTokenProvider } from "./token-provider.js";
14
14
  export { requestDeviceCode, pollUntilApproved, refreshTokens, logoutRegistry, REGISTRY_AUTH_PATHS, REGISTRY_DEVICE_GRANT_TYPE, } from "./auth.js";
15
15
  export { probeRegistryHealth } from "./health.js";
16
+ export { listScopes, switchScope, getEffective, REGISTRY_SCOPES_PATHS, } from "./scopes-effective.js";
16
17
  export { RegistryApiError, OAuthFlowError } from "./errors.js";
18
+ export { getMeConfig, putMeConfig, ConfigCasConflictError, } from "./me-config.js";
19
+ export { getScopeConfigDraft, getScopeConfigPublished, putScopeConfigDraft, getPublishState, requestPublish, postFeedback, skillContentAddress, } from "./scope-config-feedback.js";
17
20
  //# sourceMappingURL=index.js.map
@@ -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,EAAE,gBAAgB,EAAE,cAAc,EAA2B,MAAM,aAAa,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,EAAE,gBAAgB,EAAE,cAAc,EAA2B,MAAM,aAAa,CAAC;AACxF,OAAO,EACL,WAAW,EACX,WAAW,EACX,sBAAsB,GAKvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,mBAAmB,GACpB,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { RegistryClient } from "./client.js";
2
+ /** 与壳 MeDomain 同值域;开放 string——registry 加域(如 plugins 之后的新域)SDK 不挡。 */
3
+ export type PersonalConfigDomain = "models" | "mcp" | "skills" | "plugins" | (string & {});
4
+ /** PUT 409:CAS 冲突——`currentUpdatedAt` 是服务端现值的锁(重 GET 后以它为 baseUpdatedAt 重试)。 */
5
+ export declare class ConfigCasConflictError extends Error {
6
+ readonly currentUpdatedAt: string | null;
7
+ constructor(currentUpdatedAt: string | null);
8
+ }
9
+ export interface MeConfigValue {
10
+ value: unknown;
11
+ updatedAt: string | null;
12
+ }
13
+ /** GET 个人域文档(managed 面传 `forUser`;403/404 的辖区语句 registry 原话直出在 RegistryApiError)。 */
14
+ export declare function getMeConfig(client: RegistryClient, domain: PersonalConfigDomain, opts?: {
15
+ forUser?: string;
16
+ signal?: AbortSignal;
17
+ }): Promise<MeConfigValue>;
18
+ export interface MeConfigPut {
19
+ value: unknown;
20
+ /** 变更摘要(registry 审计行)。 */
21
+ summary: string;
22
+ /** CAS 基线(上次 GET 的 updatedAt;首写 null)。 */
23
+ baseUpdatedAt: string | null;
24
+ }
25
+ export interface MeConfigPutResult {
26
+ ok: true;
27
+ scope: string;
28
+ updatedAt: string;
29
+ }
30
+ /** PUT 个人域文档(CAS)。409 ⇒ 无 `retryOn409` 时 typed 直抛;给了 merge 回调则
31
+ * 「refetch → merge(现值, 我值) → 以现值锁重 PUT」**一次**,再 409 上抛([1864] 逐字节奏)。
32
+ * 400 = registry DOMAIN_SCHEMAS 校验失败(zod issues 在 body,RegistryApiError.body 里可取)。 */
33
+ export declare function putMeConfig(client: RegistryClient, domain: PersonalConfigDomain, put: MeConfigPut, opts?: {
34
+ forUser?: string;
35
+ signal?: AbortSignal;
36
+ retryOn409?: {
37
+ merge: (currentValue: unknown, myValue: unknown) => unknown;
38
+ };
39
+ }): Promise<MeConfigPutResult>;
40
+ //# sourceMappingURL=me-config.d.ts.map
@@ -0,0 +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;CAC1B;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,CAQjK;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,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * G17 R3 — personal config(me/managed 两面)CAS 引擎([1864]§一坐标,壳 cloudResources.ts:214/262
3
+ * wire 真形亲读)。CAS 轴 = `updatedAt` 字符串乐观锁(⚠️ scopes 面的轴是 version 数字——两轴别混)。
4
+ * merge 是壳/端语义 ⇒ 回调注入,SDK 只做「409 → refetch → merge → 重 PUT **一次**」的节奏;二连
5
+ * 409 typed 上抛(无限重试=两个写者互相打转)。
6
+ */
7
+ import { RegistryApiError } from "./errors.js";
8
+ 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 重试)。 */
10
+ export class ConfigCasConflictError extends Error {
11
+ currentUpdatedAt;
12
+ constructor(currentUpdatedAt) {
13
+ super(`personal-config CAS conflict (currentUpdatedAt=${currentUpdatedAt ?? "unknown"}) — refetch, re-merge, retry with the fresh baseUpdatedAt`);
14
+ this.currentUpdatedAt = currentUpdatedAt;
15
+ this.name = "ConfigCasConflictError";
16
+ }
17
+ }
18
+ /** GET 个人域文档(managed 面传 `forUser`;403/404 的辖区语句 registry 原话直出在 RegistryApiError)。 */
19
+ export async function getMeConfig(client, domain, opts) {
20
+ 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
+ const b = r.body;
26
+ return { value: b.value ?? null, updatedAt: typeof b.updatedAt === "string" ? b.updatedAt : null };
27
+ }
28
+ /** PUT 个人域文档(CAS)。409 ⇒ 无 `retryOn409` 时 typed 直抛;给了 merge 回调则
29
+ * 「refetch → merge(现值, 我值) → 以现值锁重 PUT」**一次**,再 409 上抛([1864] 逐字节奏)。
30
+ * 400 = registry DOMAIN_SCHEMAS 校验失败(zod issues 在 body,RegistryApiError.body 里可取)。 */
31
+ export async function putMeConfig(client, domain, put, opts) {
32
+ const attempt = async (body) => {
33
+ const r = await client.requestRaw({ method: "PUT", path: personalPath(domain, opts?.forUser), body, ...(opts?.signal ? { signal: opts.signal } : {}) });
34
+ if (r.status === 409) {
35
+ const cur = r.body?.currentUpdatedAt;
36
+ return new ConfigCasConflictError(typeof cur === "string" ? cur : null);
37
+ }
38
+ const b = r.body;
39
+ if (r.status !== 200 || b?.ok !== true) {
40
+ const msg = r.body?.error;
41
+ throw new RegistryApiError(r.status, typeof msg === "string" ? msg : `personal-config write failed (HTTP ${r.status})`, r.body);
42
+ }
43
+ return { ok: true, scope: String(b.scope ?? ""), updatedAt: String(b.updatedAt ?? "") };
44
+ };
45
+ const first = await attempt(put);
46
+ if (!(first instanceof ConfigCasConflictError))
47
+ return first;
48
+ if (!opts?.retryOn409)
49
+ throw first;
50
+ // refetch-merge-once:现值+现锁 → 端语义 merge → 重 PUT 一次
51
+ const fresh = await getMeConfig(client, domain, { ...(opts.forUser ? { forUser: opts.forUser } : {}), ...(opts.signal ? { signal: opts.signal } : {}) });
52
+ const merged = opts.retryOn409.merge(fresh.value, put.value);
53
+ const second = await attempt({ value: merged, summary: put.summary, baseUpdatedAt: fresh.updatedAt });
54
+ if (second instanceof ConfigCasConflictError)
55
+ throw second; // 二连 409:上抛,绝不循环
56
+ return second;
57
+ }
58
+ //# sourceMappingURL=me-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"me-config.js","sourceRoot":"","sources":["../../src/registry/me-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { RegistryClient } from "./client.js";
2
+ import type { PersonalConfigDomain } from "./me-config.js";
3
+ /** DRAFT(工作区)读:{value, version}——version 即 PUT 的 CAS 基线。 */
4
+ export declare function getScopeConfigDraft(client: RegistryClient, space: string, domain: PersonalConfigDomain, opts?: {
5
+ signal?: AbortSignal;
6
+ }): Promise<{
7
+ value: unknown;
8
+ version: number;
9
+ }>;
10
+ /** PUBLISHED 快照读(members 实际拿到的):?source=published。 */
11
+ export declare function getScopeConfigPublished(client: RegistryClient, space: string, domain: PersonalConfigDomain, opts?: {
12
+ signal?: AbortSignal;
13
+ }): Promise<{
14
+ value: unknown;
15
+ published: boolean;
16
+ publishedAt?: string;
17
+ }>;
18
+ /** DRAFT 写(version-CAS)。409/400 等非 200 typed 直出(merge-retry 节奏留调用方——scope 面的
19
+ * 写者是发布工作流,自动 merge 比个人面更危险,SDK 不提供 retryOn409)。 */
20
+ export declare function putScopeConfigDraft(client: RegistryClient, space: string, domain: PersonalConfigDomain, put: {
21
+ value: unknown;
22
+ summary: string;
23
+ baseVersion: number;
24
+ }, opts?: {
25
+ signal?: AbortSignal;
26
+ }): Promise<{
27
+ ok: true;
28
+ version: number;
29
+ }>;
30
+ /** publish 状态读(pending 在 = 已有挂起请求,新请求开不了;字段 registry 原样直出)。 */
31
+ export declare function getPublishState(client: RegistryClient, space: string, opts?: {
32
+ signal?: AbortSignal;
33
+ }): Promise<{
34
+ published?: unknown;
35
+ pending?: unknown;
36
+ approvalsRequired: number;
37
+ }>;
38
+ /** 发布请求。判别结果:`published`(200,即时生效)| `pending`(202,审批闸空间——draft **未**生效,
39
+ * approvers 走 …/publish/approve;诚实判别位,消费方绝不许把 202 渲染成已发布)。 */
40
+ export declare function requestPublish(client: RegistryClient, space: string, opts?: {
41
+ signal?: AbortSignal;
42
+ }): Promise<{
43
+ status: "published" | "pending";
44
+ body: unknown;
45
+ }>;
46
+ /** POST /api/v1/feedback → {id}。body 开放域(壳的 FeedbackCenterSubmitData 投影自带;SDK 不重铸
47
+ * schema)。隐私闸(essential-traffic-only)是壳策略,调用前自查——SDK 不代判。响应无 id = 失败
48
+ * (壳同判据:「response did not return an id」)。 */
49
+ export declare function postFeedback(client: RegistryClient, body: Record<string, unknown>, opts?: {
50
+ signal?: AbortSignal;
51
+ }): Promise<{
52
+ id: string;
53
+ }>;
54
+ /** skills 域内容寻址:`sha256:<hex>`(壳 cloudConfigWire.sha256Address 同算法)。多端都要校验
55
+ * skills body 完整性 ⇒ 收编成跨平台纯 helper(web crypto,浏览器/Node ≥18 通用;async 因
56
+ * crypto.subtle 使然)。 */
57
+ export declare function skillContentAddress(content: string): Promise<string>;
58
+ //# sourceMappingURL=scope-config-feedback.d.ts.map
@@ -0,0 +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;AAU3D,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,CAAA;CAAE,CAAC,CAK5L;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,CAAA;CAAE,CAAC,CAKzN;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,CAAA;CAAE,CAAC,CAKxC;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,CAAA;CAAE,CAAC,CAK5L;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"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * G17 R3 — scopes 层配置(draft/published 双读 + version-CAS 写 + publish 闸)与 feedback
3
+ * ([1864]§二 C2-9/C2-4;壳 cloudResources.ts teamConfig 族 + runPublish + feedbackCenterSink 族 wire 真形亲读)。
4
+ *
5
+ * ⚠️ CAS 轴:scopes 面 = **version 数字**(me 面是 updatedAt 字符串——两轴别混,[1864] 原话)。
6
+ * publish 语义:审批闸空间 POST 答 **202 pending**——诚实判别位,绝不装已发布(壳 runPublish 同句)。
7
+ * feedback 的隐私闸(isEssentialTrafficOnly)是壳策略,**留壳不进 SDK**。
8
+ */
9
+ import { RegistryApiError } from "./errors.js";
10
+ const scopeConfigPath = (space, domain) => `/api/v1/scopes/${encodeURIComponent(space)}/config/${encodeURIComponent(domain)}`;
11
+ const fail = (r, what) => {
12
+ const msg = r.body?.error;
13
+ throw new RegistryApiError(r.status, typeof msg === "string" ? msg : `${what} failed (HTTP ${r.status})`, r.body);
14
+ };
15
+ /** DRAFT(工作区)读:{value, version}——version 即 PUT 的 CAS 基线。 */
16
+ export async function getScopeConfigDraft(client, space, domain, opts) {
17
+ const r = await client.requestRaw({ method: "GET", path: scopeConfigPath(space, domain), ...(opts?.signal ? { signal: opts.signal } : {}) });
18
+ if (r.status !== 200)
19
+ fail(r, `scope-config draft read`);
20
+ const b = r.body;
21
+ return { value: b.value ?? null, version: typeof b.version === "number" ? b.version : 0 };
22
+ }
23
+ /** PUBLISHED 快照读(members 实际拿到的):?source=published。 */
24
+ export async function getScopeConfigPublished(client, space, domain, opts) {
25
+ const r = await client.requestRaw({ method: "GET", path: `${scopeConfigPath(space, domain)}?source=published`, ...(opts?.signal ? { signal: opts.signal } : {}) });
26
+ if (r.status !== 200)
27
+ fail(r, `scope-config published read`);
28
+ const b = r.body;
29
+ return { value: b.value ?? null, published: b.published === true, ...(typeof b.publishedAt === "string" ? { publishedAt: b.publishedAt } : {}) };
30
+ }
31
+ /** DRAFT 写(version-CAS)。409/400 等非 200 typed 直出(merge-retry 节奏留调用方——scope 面的
32
+ * 写者是发布工作流,自动 merge 比个人面更危险,SDK 不提供 retryOn409)。 */
33
+ export async function putScopeConfigDraft(client, space, domain, put, opts) {
34
+ const r = await client.requestRaw({ method: "PUT", path: scopeConfigPath(space, domain), body: put, ...(opts?.signal ? { signal: opts.signal } : {}) });
35
+ const b = r.body;
36
+ if (r.status !== 200 || b?.ok !== true)
37
+ fail(r, `scope-config draft write`);
38
+ return { ok: true, version: typeof b.version === "number" ? b.version : 0 };
39
+ }
40
+ const publishPath = (space) => `/api/v1/scopes/${encodeURIComponent(space)}/publish`;
41
+ /** publish 状态读(pending 在 = 已有挂起请求,新请求开不了;字段 registry 原样直出)。 */
42
+ export async function getPublishState(client, space, opts) {
43
+ const r = await client.requestRaw({ method: "GET", path: publishPath(space), ...(opts?.signal ? { signal: opts.signal } : {}) });
44
+ if (r.status !== 200)
45
+ fail(r, `publish-state read`);
46
+ const b = r.body;
47
+ return { published: b.published, pending: b.pending, approvalsRequired: typeof b.approvalsRequired === "number" ? b.approvalsRequired : 0 };
48
+ }
49
+ /** 发布请求。判别结果:`published`(200,即时生效)| `pending`(202,审批闸空间——draft **未**生效,
50
+ * approvers 走 …/publish/approve;诚实判别位,消费方绝不许把 202 渲染成已发布)。 */
51
+ export async function requestPublish(client, space, opts) {
52
+ const r = await client.requestRaw({ method: "POST", path: publishPath(space), body: {}, ...(opts?.signal ? { signal: opts.signal } : {}) });
53
+ if (r.status === 200)
54
+ return { status: "published", body: r.body };
55
+ if (r.status === 202)
56
+ return { status: "pending", body: r.body };
57
+ return fail(r, `publish request`);
58
+ }
59
+ // ── feedback(C2-4)──────────────────────────────────────────────────────────────────────────────────────
60
+ /** POST /api/v1/feedback → {id}。body 开放域(壳的 FeedbackCenterSubmitData 投影自带;SDK 不重铸
61
+ * schema)。隐私闸(essential-traffic-only)是壳策略,调用前自查——SDK 不代判。响应无 id = 失败
62
+ * (壳同判据:「response did not return an id」)。 */
63
+ export async function postFeedback(client, body, opts) {
64
+ const r = await client.requestRaw({ method: "POST", path: "/api/v1/feedback", body, ...(opts?.signal ? { signal: opts.signal } : {}) });
65
+ const id = r.body?.id;
66
+ if (r.status < 200 || r.status >= 300 || typeof id !== "string" || id.length === 0)
67
+ fail(r, `feedback post`);
68
+ return { id: id };
69
+ }
70
+ // ── skillContentAddress(C2-3 表态:进 SDK 作纯 helper)──────────────────────────────────────────────────
71
+ /** skills 域内容寻址:`sha256:<hex>`(壳 cloudConfigWire.sha256Address 同算法)。多端都要校验
72
+ * skills body 完整性 ⇒ 收编成跨平台纯 helper(web crypto,浏览器/Node ≥18 通用;async 因
73
+ * crypto.subtle 使然)。 */
74
+ export async function skillContentAddress(content) {
75
+ const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(content));
76
+ const hex = Array.from(new Uint8Array(digest), (b) => b.toString(16).padStart(2, "0")).join("");
77
+ return `sha256:${hex}`;
78
+ }
79
+ //# sourceMappingURL=scope-config-feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-config-feedback.js","sourceRoot":"","sources":["../../src/registry/scope-config-feedback.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * G17 R2 — scopes(list/switch)+ effective 条件 GET(ETag/304 引擎)。
3
+ *
4
+ * 契约单源同 R1 纪律:scopes 真身 = `@sema-agent/registry-core` api/scopes.ts(type-only import +
5
+ * 路径常量值拷贝,同源锚测试对账)。effective 的 body 是**开放域**(壳/桌面各自投影;[1833]
6
+ * 「一棵树 4 份手抄」要收敛的是**条件 GET 引擎**,不是 body schema)⇒ 这里不造 schema。
7
+ * me.config CAS:cli 的消费坐标未到手,诚实不造——候坐标进 R3。
8
+ */
9
+ import type { ScopesListResponse, ScopeSwitchResponse } from "@sema-agent/registry-core";
10
+ import type { RegistryClient } from "./client.js";
11
+ import type { TokenProvider } from "./token-provider.js";
12
+ /** 值拷贝 ← registry-core SCOPES_V1_PATHS(同源锚测试对账)。 */
13
+ export declare const REGISTRY_SCOPES_PATHS: {
14
+ readonly scopes: "/api/v1/scopes";
15
+ readonly authScope: "/api/v1/auth/scope";
16
+ };
17
+ export type { ScopesListResponse, ScopeSwitchResponse };
18
+ /** GET /api/v1/scopes — 调用者可行动的 scope 列表(带各处的 effective role)。 */
19
+ export declare function listScopes(client: RegistryClient, opts?: {
20
+ signal?: AbortSignal;
21
+ }): Promise<ScopesListResponse>;
22
+ /** POST /api/v1/auth/scope — 换活跃 scope,铸一个绑定新 scope 的 access token。
23
+ * 🔴 关键语义(registry-core 成文):响应**只带 access_token,不带 refresh_token**(refresh grant
24
+ * 不动)⇒ 这里 set 时必须**保旧 refreshToken**——照抄 grant 形写 set 会把 refresh 清成 undefined,
25
+ * 下一次续期即登出事故。 */
26
+ export declare function switchScope(client: RegistryClient, tokens: TokenProvider, scope: string, opts?: {
27
+ signal?: AbortSignal;
28
+ }): Promise<ScopeSwitchResponse>;
29
+ /** effective 条件 GET 的判别结果:200=新 body(+etag 供下次条件请求);304=没变(复用你的缓存)。 */
30
+ export type EffectiveResult = {
31
+ status: 200;
32
+ etag?: string;
33
+ body: unknown;
34
+ } | {
35
+ status: 304;
36
+ etag?: string;
37
+ };
38
+ /** GET /api/v1/effective(ETag 引擎):传上次的 `etag` ⇒ 带 If-None-Match,没变答 304 零 body。
39
+ * `principal` ⇒ `?principal=` query([1864] C2-10 管理面消费形:查看**别人**的生效配置)。
40
+ * 走 RegistryClient 同一引擎(Bearer + 401 单飞 refresh 重试)——凭证生命周期不旁路。 */
41
+ export declare function getEffective(client: RegistryClient, opts?: {
42
+ etag?: string;
43
+ principal?: string;
44
+ signal?: AbortSignal;
45
+ }): Promise<EffectiveResult>;
46
+ //# sourceMappingURL=scopes-effective.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopes-effective.d.ts","sourceRoot":"","sources":["../../src/registry/scopes-effective.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,oDAAoD;AACpD,eAAO,MAAM,qBAAqB;;;CAGxB,CAAC;AAEX,YAAY,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,CAAC;AAExD,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"}
@@ -0,0 +1,40 @@
1
+ import { RegistryApiError } from "./errors.js";
2
+ /** 值拷贝 ← registry-core SCOPES_V1_PATHS(同源锚测试对账)。 */
3
+ export const REGISTRY_SCOPES_PATHS = {
4
+ scopes: "/api/v1/scopes",
5
+ authScope: "/api/v1/auth/scope",
6
+ };
7
+ /** GET /api/v1/scopes — 调用者可行动的 scope 列表(带各处的 effective role)。 */
8
+ export function listScopes(client, opts) {
9
+ return client.request({ method: "GET", path: REGISTRY_SCOPES_PATHS.scopes, ...(opts?.signal ? { signal: opts.signal } : {}) });
10
+ }
11
+ /** POST /api/v1/auth/scope — 换活跃 scope,铸一个绑定新 scope 的 access token。
12
+ * 🔴 关键语义(registry-core 成文):响应**只带 access_token,不带 refresh_token**(refresh grant
13
+ * 不动)⇒ 这里 set 时必须**保旧 refreshToken**——照抄 grant 形写 set 会把 refresh 清成 undefined,
14
+ * 下一次续期即登出事故。 */
15
+ export async function switchScope(client, tokens, scope, opts) {
16
+ const out = await client.request({ method: "POST", path: REGISTRY_SCOPES_PATHS.authScope, body: { scope }, ...(opts?.signal ? { signal: opts.signal } : {}) });
17
+ const held = await tokens.get();
18
+ if (held)
19
+ await tokens.set({ accessToken: out.access_token, refreshToken: held.refreshToken });
20
+ return out;
21
+ }
22
+ /** GET /api/v1/effective(ETag 引擎):传上次的 `etag` ⇒ 带 If-None-Match,没变答 304 零 body。
23
+ * `principal` ⇒ `?principal=` query([1864] C2-10 管理面消费形:查看**别人**的生效配置)。
24
+ * 走 RegistryClient 同一引擎(Bearer + 401 单飞 refresh 重试)——凭证生命周期不旁路。 */
25
+ export async function getEffective(client, opts) {
26
+ const r = await client.requestRaw({
27
+ method: "GET",
28
+ path: `/api/v1/effective${opts?.principal ? `?principal=${encodeURIComponent(opts.principal)}` : ""}`,
29
+ ...(opts?.etag ? { headers: { "if-none-match": opts.etag } } : {}),
30
+ ...(opts?.signal ? { signal: opts.signal } : {}),
31
+ });
32
+ const etag = r.headers.get("etag") ?? undefined;
33
+ if (r.status === 304)
34
+ return { status: 304, ...(etag !== undefined ? { etag } : {}) };
35
+ if (r.status >= 200 && r.status < 300)
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);
39
+ }
40
+ //# sourceMappingURL=scopes-effective.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopes-effective.js","sourceRoot":"","sources":["../../src/registry/scopes-effective.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sema-agent/sdk",
3
- "version": "0.0.114",
3
+ "version": "0.0.116",
4
4
  "description": "Typed, zero-runtime-dependency SDK for the Sema agent fleet usage plane. The shared substrate for all doors (CC/Codex MCP façade + web). Server-side only — tokens never enter the browser.",
5
5
  "type": "module",
6
6
  "license": "BUSL-1.1",