@eddyskywalker/dsh-chatgpt-subscription 0.4.0 → 0.6.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 (109) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +67 -1
  3. package/lib/client.js +2255 -742
  4. package/lib/client.js.map +1 -1
  5. package/lib/index.js +17139 -12058
  6. package/lib/types/client/CodexSubscriptionSection.d.ts +1 -1
  7. package/lib/types/client/CodexSubscriptionSection.d.ts.map +1 -1
  8. package/lib/types/client/ProviderHubSection.d.ts.map +1 -1
  9. package/lib/types/client/antigravity/AntigravitySection.d.ts.map +1 -1
  10. package/lib/types/client/antigravity/locales.d.ts +24 -192
  11. package/lib/types/client/antigravity/locales.d.ts.map +1 -1
  12. package/lib/types/client/api.d.ts +13 -1
  13. package/lib/types/client/api.d.ts.map +1 -1
  14. package/lib/types/client/command-code/CommandCodeSection.d.ts.map +1 -1
  15. package/lib/types/client/command-code/locales.d.ts +66 -201
  16. package/lib/types/client/command-code/locales.d.ts.map +1 -1
  17. package/lib/types/client/common/AccountPoolSection.d.ts +55 -0
  18. package/lib/types/client/common/AccountPoolSection.d.ts.map +1 -0
  19. package/lib/types/client/common/account-pool-labels.d.ts +43 -0
  20. package/lib/types/client/common/account-pool-labels.d.ts.map +1 -0
  21. package/lib/types/client/common/styles.d.ts +11 -0
  22. package/lib/types/client/common/styles.d.ts.map +1 -0
  23. package/lib/types/client/index.d.ts +1 -0
  24. package/lib/types/client/index.d.ts.map +1 -1
  25. package/lib/types/client/kimi-code/KimiCodeSection.d.ts.map +1 -1
  26. package/lib/types/client/kimi-code/locales.d.ts +63 -336
  27. package/lib/types/client/kimi-code/locales.d.ts.map +1 -1
  28. package/lib/types/client/locales.d.ts +41 -1
  29. package/lib/types/client/locales.d.ts.map +1 -1
  30. package/lib/types/client/workbuddy/WorkBuddyComposerQuota.d.ts +26 -0
  31. package/lib/types/client/workbuddy/WorkBuddyComposerQuota.d.ts.map +1 -0
  32. package/lib/types/client/workbuddy/WorkBuddySection.d.ts +41 -0
  33. package/lib/types/client/workbuddy/WorkBuddySection.d.ts.map +1 -0
  34. package/lib/types/client/workbuddy/locales.d.ts +563 -0
  35. package/lib/types/client/workbuddy/locales.d.ts.map +1 -0
  36. package/lib/types/client/workbuddy/styles.d.ts +11 -0
  37. package/lib/types/client/workbuddy/styles.d.ts.map +1 -0
  38. package/lib/types/host/antigravity/account-pool.d.ts +15 -5
  39. package/lib/types/host/antigravity/account-pool.d.ts.map +1 -1
  40. package/lib/types/host/antigravity/routes.d.ts.map +1 -1
  41. package/lib/types/host/codex-account-pool.d.ts +64 -0
  42. package/lib/types/host/codex-account-pool.d.ts.map +1 -0
  43. package/lib/types/host/command-code/account-pool.d.ts +60 -0
  44. package/lib/types/host/command-code/account-pool.d.ts.map +1 -0
  45. package/lib/types/host/command-code/adapter.d.ts +11 -1
  46. package/lib/types/host/command-code/adapter.d.ts.map +1 -1
  47. package/lib/types/host/command-code/client.d.ts +17 -1
  48. package/lib/types/host/command-code/client.d.ts.map +1 -1
  49. package/lib/types/host/command-code/oauth.d.ts +4 -1
  50. package/lib/types/host/command-code/oauth.d.ts.map +1 -1
  51. package/lib/types/host/command-code/routes.d.ts +11 -2
  52. package/lib/types/host/command-code/routes.d.ts.map +1 -1
  53. package/lib/types/host/common/account-pool.d.ts +197 -0
  54. package/lib/types/host/common/account-pool.d.ts.map +1 -0
  55. package/lib/types/host/common/home.d.ts +8 -0
  56. package/lib/types/host/common/home.d.ts.map +1 -0
  57. package/lib/types/host/kimi-code/account-pool.d.ts +48 -0
  58. package/lib/types/host/kimi-code/account-pool.d.ts.map +1 -0
  59. package/lib/types/host/kimi-code/adapter.d.ts +10 -1
  60. package/lib/types/host/kimi-code/adapter.d.ts.map +1 -1
  61. package/lib/types/host/kimi-code/client.d.ts +16 -0
  62. package/lib/types/host/kimi-code/client.d.ts.map +1 -1
  63. package/lib/types/host/kimi-code/oauth.d.ts +2 -0
  64. package/lib/types/host/kimi-code/oauth.d.ts.map +1 -1
  65. package/lib/types/host/kimi-code/routes.d.ts +10 -2
  66. package/lib/types/host/kimi-code/routes.d.ts.map +1 -1
  67. package/lib/types/host/oauth-service.d.ts +41 -2
  68. package/lib/types/host/oauth-service.d.ts.map +1 -1
  69. package/lib/types/host/preset-sync.d.ts +7 -1
  70. package/lib/types/host/preset-sync.d.ts.map +1 -1
  71. package/lib/types/host/responses-client.d.ts +15 -0
  72. package/lib/types/host/responses-client.d.ts.map +1 -1
  73. package/lib/types/host/routes.d.ts +2 -1
  74. package/lib/types/host/routes.d.ts.map +1 -1
  75. package/lib/types/host/usage-service.d.ts +15 -0
  76. package/lib/types/host/usage-service.d.ts.map +1 -1
  77. package/lib/types/host/workbuddy/account-pool.d.ts +106 -0
  78. package/lib/types/host/workbuddy/account-pool.d.ts.map +1 -0
  79. package/lib/types/host/workbuddy/adapter.d.ts +97 -0
  80. package/lib/types/host/workbuddy/adapter.d.ts.map +1 -0
  81. package/lib/types/host/workbuddy/client.d.ts +90 -0
  82. package/lib/types/host/workbuddy/client.d.ts.map +1 -0
  83. package/lib/types/host/workbuddy/mapper.d.ts +114 -0
  84. package/lib/types/host/workbuddy/mapper.d.ts.map +1 -0
  85. package/lib/types/host/workbuddy/model-catalog.d.ts +108 -0
  86. package/lib/types/host/workbuddy/model-catalog.d.ts.map +1 -0
  87. package/lib/types/host/workbuddy/oauth.d.ts +38 -0
  88. package/lib/types/host/workbuddy/oauth.d.ts.map +1 -0
  89. package/lib/types/host/workbuddy/routes.d.ts +33 -0
  90. package/lib/types/host/workbuddy/routes.d.ts.map +1 -0
  91. package/lib/types/host/workbuddy/token-store.d.ts +216 -0
  92. package/lib/types/host/workbuddy/token-store.d.ts.map +1 -0
  93. package/lib/types/host/workbuddy/types.d.ts +127 -0
  94. package/lib/types/host/workbuddy/types.d.ts.map +1 -0
  95. package/lib/types/index.d.ts +10 -0
  96. package/lib/types/index.d.ts.map +1 -1
  97. package/lib/types/shared/account-pool-contracts.d.ts +55 -0
  98. package/lib/types/shared/account-pool-contracts.d.ts.map +1 -0
  99. package/lib/types/shared/antigravity-contracts.d.ts +4 -10
  100. package/lib/types/shared/antigravity-contracts.d.ts.map +1 -1
  101. package/lib/types/shared/command-code-contracts.d.ts +14 -0
  102. package/lib/types/shared/command-code-contracts.d.ts.map +1 -1
  103. package/lib/types/shared/contracts.d.ts +6 -0
  104. package/lib/types/shared/contracts.d.ts.map +1 -1
  105. package/lib/types/shared/kimi-code-contracts.d.ts +14 -0
  106. package/lib/types/shared/kimi-code-contracts.d.ts.map +1 -1
  107. package/lib/types/shared/workbuddy-contracts.d.ts +204 -0
  108. package/lib/types/shared/workbuddy-contracts.d.ts.map +1 -0
  109. package/package.json +1 -1
@@ -69,6 +69,8 @@ export declare function inputModalitiesForEntry(modelId: string, catalog: readon
69
69
  /** Build the picker entries the settings card renders. */
70
70
  export declare function buildModelOptions(catalog: readonly KimiCodeCatalogModel[], enabledModelIds: readonly string[], contextWindowOverrides: Record<string, number>): KimiCodeModelOption[];
71
71
  export declare function getCachedQuota(): KimiCodeAccountQuota | null;
72
+ /** The cached snapshot only when it belongs to this account. */
73
+ export declare function getCachedQuotaFor(accountId?: string | null): KimiCodeAccountQuota | null;
72
74
  export declare function clearCachedQuota(): void;
73
75
  /**
74
76
  * Read the windowed quota block.
@@ -121,6 +123,20 @@ export interface QuotaFetchOptions {
121
123
  signal?: AbortSignal;
122
124
  /** Bypass the local cache and read the service again. */
123
125
  force?: boolean;
126
+ /**
127
+ * Credentials to read usage for.
128
+ *
129
+ * A pool supplies the active account's credential here; without it the single
130
+ * stored account is refreshed and used.
131
+ */
132
+ credentials?: KimiCodeCredentials;
133
+ /**
134
+ * Account the snapshot belongs to.
135
+ *
136
+ * With a pool the card must never render one account's quota under another
137
+ * account's name, so a snapshot is only reused for the same id.
138
+ */
139
+ accountId?: string;
124
140
  }
125
141
  /**
126
142
  * Fetch and cache the account's quota snapshot.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/host/kimi-code/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/host/kimi-code/client.ts"],"names":[],"mappings":"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"}
@@ -129,5 +129,7 @@ export declare function beginWebLogin(store: FileCredentialStore, options?: {
129
129
  fetchFn?: typeof fetch;
130
130
  openBrowser?: (url: string) => void;
131
131
  region?: KimiCodeRegion;
132
+ /** Called with the validated credential so a pool can keep every sign-in. */
133
+ onSave?: (credentials: KimiCodeCredentials) => Promise<unknown>;
132
134
  }): Promise<KimiCodeLoginFlowStatus>;
133
135
  //# sourceMappingURL=oauth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/host/kimi-code/oauth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../../src/host/kimi-code/oauth.ts"],"names":[],"mappings":"AA+BA,OAAO,EACL,mBAAmB,EAInB,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAA;AAclG,qFAAqF;AACrF,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AAED,iEAAiE;AACjE,qBAAa,sBAAuB,SAAQ,KAAK;IAClB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;gBAAzC,OAAO,EAAE,MAAM,EAAW,KAAK,CAAC,EAAE,OAAO,YAAA;CAItD;AAED,oEAAoE;AACpE,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,EAAE,MAAM;CAI5B;AA0BD,oDAAoD;AACpD,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAEpE;AAwBD;;;;;;GAMG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAgBnD;AAED,0EAA0E;AAC1E,wBAAsB,mBAAmB,CAAC,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkB7G;AA4CD,4CAA4C;AAC5C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;;;GAIG;AACH,wBAAsB,0BAA0B,CAAC,OAAO,GAAE;IACxD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;IACtB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,MAAM,CAAC,EAAE,cAAc,CAAA;CACnB,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAyCrE;AAuDD,wEAAwE;AACxE,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAanF;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAYhG;AAED,wEAAwE;AACxE,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;CAClB;AAmBD,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE5D;AAoBD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,cAAc,CAAA;CAAO,GACrG,OAAO,CAAC,UAAU,CAAC,CA6CrB;AASD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;IACtB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,mBAAmB,CAAC,CAmD9B;AASD,wBAAgB,iBAAiB,IAAI,uBAAuB,CAE3D;AAED,mFAAmF;AACnF,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAgB7C;AA4FD;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,mBAAmB,EAC1B,OAAO,GAAE;IACP,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;IACtB,WAAW,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,CAAC,WAAW,EAAE,mBAAmB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC3D,GACL,OAAO,CAAC,uBAAuB,CAAC,CAwClC"}
@@ -1,6 +1,7 @@
1
1
  import type { Context } from '@deepseek-ai/cordis';
2
2
  import { PROVIDER_ID, PROVIDER_NAME } from './types.ts';
3
3
  import { FileCredentialStore, FileModelSettingsStore, type KimiCodeCatalogModel, type KimiCodePreferenceStore } from './token-store.ts';
4
+ import { KimiCodeAccountPool } from './account-pool.ts';
4
5
  import { type KimiCodeWebStatus } from '../../shared/kimi-code-contracts.ts';
5
6
  /**
6
7
  * The selection the card should show.
@@ -17,10 +18,17 @@ export interface KimiCodeStatusOptions {
17
18
  serving?: boolean | (() => boolean);
18
19
  /** Diagnostic when another plugin owns the provider route; re-read on every status. */
19
20
  conflict?: string | null | (() => string | null);
21
+ /**
22
+ * Account pool to report on.
23
+ *
24
+ * Only the plugin entry installs one, because it owns the pool's storage; a
25
+ * caller that passes none keeps the single-account behavior.
26
+ */
27
+ accountPool?: KimiCodeAccountPool;
20
28
  }
21
29
  /** Everything the settings card renders: account, quota, and the model catalog. */
22
- export declare function getKimiCodeWebStatus(store: FileCredentialStore, modelSettings: FileModelSettingsStore, preferences?: KimiCodePreferenceStore, options?: KimiCodeStatusOptions): Promise<KimiCodeWebStatus>;
30
+ export declare function getKimiCodeWebStatus(store: FileCredentialStore, modelSettings: FileModelSettingsStore, preferences?: KimiCodePreferenceStore, options?: KimiCodeStatusOptions, accountPool?: KimiCodeAccountPool | undefined): Promise<KimiCodeWebStatus>;
23
31
  /** Register the Kimi Code settings routes under `/kimi-code/api`. */
24
- export declare function registerKimiCodeRoutes(ctx: Context, store: FileCredentialStore, modelSettings: FileModelSettingsStore, preferences?: KimiCodePreferenceStore, options?: KimiCodeStatusOptions): () => void;
32
+ export declare function registerKimiCodeRoutes(ctx: Context, store: FileCredentialStore, modelSettings: FileModelSettingsStore, preferences?: KimiCodePreferenceStore, options?: KimiCodeStatusOptions, accountPool?: KimiCodeAccountPool | undefined): () => void;
25
33
  export { PROVIDER_ID, PROVIDER_NAME };
26
34
  //# sourceMappingURL=routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../src/host/kimi-code/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EAEL,WAAW,EACX,aAAa,EAId,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EAEtB,KAAK,oBAAoB,EAEzB,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAA;AAazB,OAAO,EAML,KAAK,iBAAiB,EACvB,MAAM,qCAAqC,CAAA;AAqE5C;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,OAAO,UAAO,GACb,MAAM,EAAE,CAUV;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;IACtB,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAA;IACnC,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAA;CACjD;AAMD,mFAAmF;AACnF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,sBAAsB,EACrC,WAAW,CAAC,EAAE,uBAAuB,EACrC,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,iBAAiB,CAAC,CA4C5B;AAQD,qEAAqE;AACrE,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,sBAAsB,EACrC,WAAW,CAAC,EAAE,uBAAuB,EACrC,OAAO,GAAE,qBAA0B,GAClC,MAAM,IAAI,CAkKZ;AAED,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,CAAA"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../../src/host/kimi-code/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EAEL,WAAW,EACX,aAAa,EAId,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EAEtB,KAAK,oBAAoB,EAGzB,KAAK,uBAAuB,EAC7B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAavD,OAAO,EAML,KAAK,iBAAiB,EACvB,MAAM,qCAAqC,CAAA;AAqE5C;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,OAAO,UAAO,GACb,MAAM,EAAE,CAUV;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;IACtB,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAA;IACnC,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAA;IAChD;;;;;OAKG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAA;CAClC;AAMD,mFAAmF;AACnF,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,sBAAsB,EACrC,WAAW,CAAC,EAAE,uBAAuB,EACrC,OAAO,GAAE,qBAA0B,EACnC,WAAW,GAAE,mBAAmB,GAAG,SAA+B,GACjE,OAAO,CAAC,iBAAiB,CAAC,CAgE5B;AAQD,qEAAqE;AACrE,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,mBAAmB,EAC1B,aAAa,EAAE,sBAAsB,EACrC,WAAW,CAAC,EAAE,uBAAuB,EACrC,OAAO,GAAE,qBAA0B,EACnC,WAAW,GAAE,mBAAmB,GAAG,SAA+B,GACjE,MAAM,IAAI,CAkQZ;AAED,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import type { LoginEventDto, LoginStartDto, OAuthStatusDto, PublicErrorDto } from '../shared/contracts.ts';
2
+ import type { CodexAccountPool } from './codex-account-pool.ts';
2
3
  import type { StoredOAuthCredentials, TokenStore } from './token-store.ts';
3
4
  type FetchLike = typeof fetch;
4
5
  type LoginListener = (event: LoginEventDto) => void;
@@ -19,7 +20,11 @@ interface OAuthClaims {
19
20
  }
20
21
  export declare class OAuthServiceError extends Error {
21
22
  readonly code: PublicErrorDto['code'];
22
- constructor(code: PublicErrorDto['code'], message: string);
23
+ /** Token-endpoint status when the failure came from a response. */
24
+ readonly status?: number | undefined;
25
+ constructor(code: PublicErrorDto['code'], message: string,
26
+ /** Token-endpoint status when the failure came from a response. */
27
+ status?: number | undefined);
23
28
  }
24
29
  export interface OAuthServiceOptions {
25
30
  fetchFn?: FetchLike;
@@ -28,6 +33,14 @@ export interface OAuthServiceOptions {
28
33
  logger?: Pick<Console, 'info' | 'warn'>;
29
34
  /** Test seam; production always uses the five-minute compatibility default. */
30
35
  loginTimeoutMs?: number;
36
+ /**
37
+ * Account pool this service drives.
38
+ *
39
+ * With a pool the service signs accounts in and refreshes them per account
40
+ * while the pool decides which one serves a request; without one it keeps
41
+ * serving the single stored credential exactly as before.
42
+ */
43
+ pool?: CodexAccountPool;
31
44
  }
32
45
  export declare class OAuthService {
33
46
  private readonly store;
@@ -42,17 +55,43 @@ export declare class OAuthService {
42
55
  private refreshPromise;
43
56
  private lastLoginError;
44
57
  private disposed;
58
+ private readonly pool;
59
+ private readonly refreshInFlight;
45
60
  constructor(store: TokenStore, options?: OAuthServiceOptions);
46
61
  status(): Promise<OAuthStatusDto>;
62
+ /**
63
+ * The pool slice of the status DTO.
64
+ *
65
+ * A pool that cannot be read is reported as empty rather than failing the
66
+ * whole status call: the card must still render the connection section.
67
+ */
68
+ private readPoolStatus;
47
69
  startLogin(): Promise<LoginStartDto>;
48
70
  cancelLogin(loginId: string): void;
49
71
  subscribe(loginId: string, listener: LoginListener): (() => void) | null;
50
72
  refresh(): Promise<OAuthStatusDto>;
51
- logout(): Promise<void>;
73
+ /**
74
+ * Sign out.
75
+ *
76
+ * @param accountId - pooled account to remove; omit to remove the account
77
+ * that would serve the next request (the pool promotes another one), which
78
+ * is what a single "sign out" button means to a pool user.
79
+ */
80
+ logout(accountId?: string): Promise<void>;
52
81
  credentials(forceRefresh?: boolean): Promise<StoredOAuthCredentials>;
53
82
  dispose(): void;
54
83
  private exchangeCode;
55
84
  private refreshCredentials;
85
+ /**
86
+ * Refresh one account's tokens on behalf of the pool.
87
+ *
88
+ * Deliberately different from the single-credential path: a rejected refresh
89
+ * token must NOT wipe the whole credential store (other pooled accounts are
90
+ * unaffected), and the write-back belongs to the pool, which owns the account
91
+ * record. Concurrent calls for one identity share a single redemption, since
92
+ * the refresh token rotates.
93
+ */
94
+ refreshAccount(credentials: StoredOAuthCredentials, fetchFn?: FetchLike): Promise<StoredOAuthCredentials>;
56
95
  private performRefresh;
57
96
  private loadAuthenticated;
58
97
  private statusFromCredentials;
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-service.d.ts","sourceRoot":"","sources":["../../../src/host/oauth-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-service.d.ts","sourceRoot":"","sources":["../../../src/host/oauth-service.ts"],"names":[],"mappings":"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"}
@@ -27,10 +27,16 @@
27
27
  */
28
28
  /** The preset directory this package ships. */
29
29
  export declare const BUNDLED_PRESET_IDS: readonly string[];
30
+ /**
31
+ * Whether a package is installed in any candidate node_modules tree.
32
+ * Matches DSH agent-presets' own discovery check.
33
+ */
34
+ export declare function packageInstalled(specifier: string, roots?: readonly string[]): boolean;
30
35
  /**
31
36
  * Whether a bare specifier resolves from this module in the running
32
37
  * installation. A harness whose Node build exposes no `import.meta.resolve`
33
- * answers `false` for everything, which leaves every bundled spelling in place.
38
+ * or whose plugin is executed from outside the profile tree falls through to
39
+ * checking candidate `node_modules` trees across the running harness home.
34
40
  * @param specifier - bare package specifier.
35
41
  * @returns whether the specifier resolves.
36
42
  */
@@ -1 +1 @@
1
- {"version":3,"file":"preset-sync.d.ts","sourceRoot":"","sources":["../../../src/host/preset-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAMH,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAiB,CAAA;AAuCjE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAS3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAUvG;AA6CD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAEjG;AAED,sEAAsE;AACtE,MAAM,MAAM,iBAAiB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;AAEjF,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,EAAE,iBACY,CAAA;AAE5C,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,mDAAmD;IACnD,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,iEAAiE;IACjE,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACvC,2EAA2E;IAC3E,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAQpC;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AA0FD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GAChD,QAAQ,GAAG,SAAS,CA+CtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,SAAS,MAAM,EAAO,EAC9B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,gBAAgB,CAiClB"}
1
+ {"version":3,"file":"preset-sync.d.ts","sourceRoot":"","sources":["../../../src/host/preset-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAOH,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAAiB,CAAA;AA0EjE;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,SAAS,MAAM,EAA4B,GACjD,OAAO,CAYT;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAW3D;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAUvG;AA6CD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAEjG;AAED,sEAAsE;AACtE,MAAM,MAAM,iBAAiB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,CAAA;AAEjF,4EAA4E;AAC5E,eAAO,MAAM,iBAAiB,EAAE,iBACY,CAAA;AAE5C,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAC/B,sDAAsD;IACtD,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,mDAAmD;IACnD,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,iEAAiE;IACjE,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACvC,2EAA2E;IAC3E,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,IAAI,MAAM,CAQpC;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AA0FD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GAChD,QAAQ,GAAG,SAAS,CA+CtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,SAAS,MAAM,EAAO,EAC9B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,gBAAgB,CAiClB"}
@@ -1,4 +1,5 @@
1
1
  import { type GenerateOptions, type StreamChunk } from '@deepseek-ai/dsh-llm';
2
+ import type { CodexAccountPool } from './codex-account-pool.ts';
2
3
  import { OAuthService } from './oauth-service.ts';
3
4
  import { type LocalRawImageOptions } from './responses-mapper.ts';
4
5
  import type { AttachmentStore } from '@deepseek-ai/dsh-attachment';
@@ -11,6 +12,8 @@ export interface ResponsesClientOptions {
11
12
  outputVerbosity?: () => CodexOutputVerbosity | null;
12
13
  fastMode?: () => boolean;
13
14
  reasoningSummary?: () => CodexReasoningSummary | null;
15
+ /** Account pool to rotate over; without one the single stored credential is used. */
16
+ accountPool?: CodexAccountPool;
14
17
  }
15
18
  export declare class ResponsesClient {
16
19
  private readonly oauth;
@@ -20,10 +23,22 @@ export declare class ResponsesClient {
20
23
  private readonly outputVerbosity;
21
24
  private readonly fastMode;
22
25
  private readonly reasoningSummary;
26
+ private readonly accountPool;
23
27
  constructor(oauth: OAuthService, attachments: Pick<AttachmentStore, 'readImage'> & Partial<Pick<AttachmentStore, 'imageLimits'>>, options?: ResponsesClientOptions);
24
28
  private readonly localRawImages;
25
29
  stream(options: GenerateOptions): AsyncIterable<StreamChunk>;
26
30
  private send;
31
+ /**
32
+ * Send one payload with account rotation.
33
+ *
34
+ * The pool picks the account — skipping cooling, quota-exhausted and failed
35
+ * ones — and has already refreshed a token that was about to expire. A 429
36
+ * cools that account down and retries the identical payload on the next
37
+ * eligible account; a 401 forces exactly one refresh, and an account whose
38
+ * refresh is rejected leaves the rotation instead of invalidating the others.
39
+ * The payload is account-independent, so it is never rebuilt between attempts.
40
+ */
41
+ private sendWithPool;
27
42
  private request;
28
43
  }
29
44
  export declare function parseResponsesStream(response: Response, signal?: AbortSignal, hiddenSandboxControls?: ReadonlySet<string>): AsyncIterable<StreamChunk>;
@@ -1 +1 @@
1
- {"version":3,"file":"responses-client.d.ts","sourceRoot":"","sources":["../../../src/host/responses-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,WAAW,EAEjB,MAAM,sBAAsB,CAAA;AAI7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAwD,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAEvH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEzF,KAAK,SAAS,GAAG,OAAO,KAAK,CAAA;AAK7B,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,cAAc,CAAC,EAAE,oBAAoB,CAAA;IACrC,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAA;IACjC,eAAe,CAAC,EAAE,MAAM,oBAAoB,GAAG,IAAI,CAAA;IACnD,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,qBAAqB,GAAG,IAAI,CAAA;CACtD;AAED,qBAAa,eAAe;IAQxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAR9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IACnE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoC;gBAGlD,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,EAChH,OAAO,GAAE,sBAA2B;IAUtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IAE9C,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,CAAC,WAAW,CAAC;YA6CrD,IAAI;YAYJ,OAAO;CAsBtB;AAWD,wBAAuB,oBAAoB,CACzC,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,WAAW,EACpB,qBAAqB,GAAE,WAAW,CAAC,MAAM,CAAa,GACrD,aAAa,CAAC,WAAW,CAAC,CAwQ5B"}
1
+ {"version":3,"file":"responses-client.d.ts","sourceRoot":"","sources":["../../../src/host/responses-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,WAAW,EAEjB,MAAM,sBAAsB,CAAA;AAI7B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAwD,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAEvH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEzF,KAAK,SAAS,GAAG,OAAO,KAAK,CAAA;AAO7B,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,cAAc,CAAC,EAAE,oBAAoB,CAAA;IACrC,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAA;IACjC,eAAe,CAAC,EAAE,MAAM,oBAAoB,GAAG,IAAI,CAAA;IACnD,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAA;IACxB,gBAAgB,CAAC,EAAE,MAAM,qBAAqB,GAAG,IAAI,CAAA;IACrD,qFAAqF;IACrF,WAAW,CAAC,EAAE,gBAAgB,CAAA;CAC/B;AAED,qBAAa,eAAe;IASxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAT9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAY;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IACnE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoC;IACrE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;gBAGlC,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC,EAChH,OAAO,GAAE,sBAA2B;IAWtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IAE9C,MAAM,CAAC,OAAO,EAAE,eAAe,GAAG,aAAa,CAAC,WAAW,CAAC;YA6CrD,IAAI;IAalB;;;;;;;;;OASG;YACW,YAAY;YAqCZ,OAAO;CAsBtB;AAWD,wBAAuB,oBAAoB,CACzC,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,WAAW,EACpB,qBAAqB,GAAE,WAAW,CAAC,MAAM,CAAa,GACrD,aAAa,CAAC,WAAW,CAAC,CAwQ5B"}
@@ -1,5 +1,6 @@
1
1
  import type { Context } from '@deepseek-ai/cordis';
2
2
  import type { SubagentRouteAuditDto } from '../shared/contracts.ts';
3
+ import type { CodexAccountPool } from './codex-account-pool.ts';
3
4
  import { OAuthService } from './oauth-service.ts';
4
5
  import { type SubscriptionPreferenceStore } from './preferences.ts';
5
6
  import type { ProxyManager } from './proxy-manager.ts';
@@ -7,5 +8,5 @@ import type { SearchProviderSwitcher } from './search-provider-switcher.ts';
7
8
  import { UsageService } from './usage-service.ts';
8
9
  /** Read-only audit provider the optional route serves. */
9
10
  export type RouteAuditReader = (sessionId: string) => Promise<SubagentRouteAuditDto>;
10
- export declare function registerRoutes(ctx: Context, oauth: OAuthService, usage: UsageService, preferences: SubscriptionPreferenceStore, proxyManager?: ProxyManager, searchSwitcher?: SearchProviderSwitcher, routeAudit?: RouteAuditReader): () => void;
11
+ export declare function registerRoutes(ctx: Context, oauth: OAuthService, usage: UsageService, preferences: SubscriptionPreferenceStore, proxyManager?: ProxyManager, searchSwitcher?: SearchProviderSwitcher, routeAudit?: RouteAuditReader, accountPool?: CodexAccountPool): () => void;
11
12
  //# sourceMappingURL=routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/host/routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,KAAK,EAIV,qBAAqB,EAEtB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAmB,KAAK,2BAA2B,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAqB,MAAM,oBAAoB,CAAA;AAIpE,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;AAEpF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,2BAA2B,EACxC,YAAY,CAAC,EAAE,YAAY,EAC3B,cAAc,CAAC,EAAE,sBAAsB,EACvC,UAAU,CAAC,EAAE,gBAAgB,GAC5B,MAAM,IAAI,CA2LZ"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/host/routes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,KAAK,EAIV,qBAAqB,EAEtB,MAAM,wBAAwB,CAAA;AAG/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAmB,KAAK,2BAA2B,EAAE,MAAM,kBAAkB,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAA;AAC3E,OAAO,EAAE,YAAY,EAAqB,MAAM,oBAAoB,CAAA;AAIpE,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;AAEpF,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,YAAY,EACnB,WAAW,EAAE,2BAA2B,EACxC,YAAY,CAAC,EAAE,YAAY,EAC3B,cAAc,CAAC,EAAE,sBAAsB,EACvC,UAAU,CAAC,EAAE,gBAAgB,EAC7B,WAAW,CAAC,EAAE,gBAAgB,GAC7B,MAAM,IAAI,CA2NZ"}
@@ -1,5 +1,6 @@
1
1
  import type { ConnectionTestDto, PublicErrorDto, QuotaBucketDto, QuotaUsageDto, QuotaStatusDto } from '../shared/contracts.ts';
2
2
  import { OAuthService } from './oauth-service.ts';
3
+ import type { StoredOAuthCredentials } from './token-store.ts';
3
4
  type FetchLike = typeof fetch;
4
5
  export interface UsageServiceOptions {
5
6
  fetchFn?: FetchLike;
@@ -10,6 +11,7 @@ export declare class UsageService {
10
11
  private readonly fetchFn;
11
12
  private readonly now;
12
13
  private cache;
14
+ private readonly snapshots;
13
15
  private lastUpstreamAt;
14
16
  private blockedUntil;
15
17
  private invalidated;
@@ -18,7 +20,20 @@ export declare class UsageService {
18
20
  constructor(oauth: OAuthService, options?: UsageServiceOptions);
19
21
  status(authenticated: boolean, force?: boolean): Promise<QuotaStatusDto>;
20
22
  invalidate(): void;
23
+ /**
24
+ * When one credential's Codex window reopens, from the last snapshot.
25
+ *
26
+ * Undefined means nothing is known or nothing is spent (the account stays
27
+ * routable). A spent window with no stated reset blocks for the default
28
+ * cooldown rather than forever, so a missing upstream field cannot strand an
29
+ * account permanently.
30
+ */
31
+ blockedUntilFor(credentials: StoredOAuthCredentials, now: number): number | undefined;
32
+ /** Remember the newest snapshot for one account, bounded to the accounts in use. */
33
+ private rememberSnapshot;
21
34
  clear(): void;
35
+ /** Drop the remembered snapshot of one account, after its window is known to have reset. */
36
+ forgetSnapshot(credentials: StoredOAuthCredentials): void;
22
37
  consumeResetCredit(): Promise<QuotaStatusDto>;
23
38
  private consumeResetCreditUpstream;
24
39
  testConnection(): Promise<ConnectionTestDto>;
@@ -1 +1 @@
1
- {"version":3,"file":"usage-service.d.ts","sourceRoot":"","sources":["../../../src/host/usage-service.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EAEf,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAIjD,KAAK,SAAS,GAAG,OAAO,KAAK,CAAA;AAgB7B,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED,qBAAa,YAAY;IAUX,OAAO,CAAC,QAAQ,CAAC,KAAK;IATlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,KAAK,CAA0B;IACvC,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,oBAAoB,CAAuC;gBAEtC,KAAK,EAAE,YAAY,EAAE,OAAO,GAAE,mBAAwB;IAK7E,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;IA2B5E,UAAU,IAAI,IAAI;IAIlB,KAAK,IAAI,IAAI;IAMP,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC;YAQrC,0BAA0B;IA2DlC,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC;YASpC,eAAe;IA4C7B,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,OAAO;CAGhB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC9B,QAAQ,CAAC,WAAW,EAAE,cAAc;gBAA3B,WAAW,EAAE,cAAc;CAGjD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE,CAE9D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAwB7D;AAuED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE,CAmBpI"}
1
+ {"version":3,"file":"usage-service.d.ts","sourceRoot":"","sources":["../../../src/host/usage-service.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EAEf,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAE9D,KAAK,SAAS,GAAG,OAAO,KAAK,CAAA;AAgB7B,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED,qBAAa,YAAY;IAaX,OAAO,CAAC,QAAQ,CAAC,KAAK;IAZlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAW;IACnC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,KAAK,CAA0B;IAGvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiE;IAC3F,OAAO,CAAC,cAAc,CAAI;IAC1B,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,oBAAoB,CAAuC;gBAEtC,KAAK,EAAE,YAAY,EAAE,OAAO,GAAE,mBAAwB;IAK7E,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;IAkC5E,UAAU,IAAI,IAAI;IAIlB;;;;;;;OAOG;IACH,eAAe,CAAC,WAAW,EAAE,sBAAsB,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAerF,oFAAoF;IACpF,OAAO,CAAC,gBAAgB;IASxB,KAAK,IAAI,IAAI;IAMb,4FAA4F;IAC5F,cAAc,CAAC,WAAW,EAAE,sBAAsB,GAAG,IAAI;IAInD,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC;YAQrC,0BAA0B;IA2DlC,cAAc,IAAI,OAAO,CAAC,iBAAiB,CAAC;YASpC,eAAe;IA6C7B,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,OAAO;CAGhB;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC9B,QAAQ,CAAC,WAAW,EAAE,cAAc;gBAA3B,WAAW,EAAE,cAAc;CAGjD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,EAAE,CAE9D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAwB7D;AAuED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAAE,CAmBpI"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * WorkBuddy's account pool.
3
+ *
4
+ * This line is the one that adopts accounts it does not own: alongside the
5
+ * accounts a user signs in through this plugin, it reads the CodeBuddy desktop
6
+ * client's own `*.info` credentials so an existing IDE sign-in needs no second
7
+ * login. Both kinds take part in scheduling through the shared
8
+ * {@link AccountPoolCore}, and the difference is enforced here:
9
+ *
10
+ * - **managed** accounts were signed in through this plugin. They live in the
11
+ * pool's encrypted storage and may be deleted.
12
+ * - **desktop** accounts belong to the IDE. Their credential is re-read from the
13
+ * IDE's file on every pick, because the IDE rotates it on its own schedule and
14
+ * a cached copy would go stale; they are never deleted, only hidden.
15
+ */
16
+ import { AccountPoolCore, type PoolAccountShape, type PoolData } from '../common/account-pool.ts';
17
+ import type { CredentialStore } from '../token-store.ts';
18
+ import { FileCredentialStore, type WorkBuddyCredentials } from './token-store.ts';
19
+ import type { WorkBuddyAccountSummaryDto, WorkBuddyRegion } from '../../shared/workbuddy-contracts.ts';
20
+ /** One pooled WorkBuddy account: the credential plus the facts the card renders. */
21
+ export interface WorkBuddyPoolAccount extends PoolAccountShape<WorkBuddyCredentials> {
22
+ region: WorkBuddyRegion;
23
+ nickname?: string;
24
+ uin?: string;
25
+ /** Which store owns the credential; only managed accounts may be deleted. */
26
+ source: 'desktop' | 'managed';
27
+ /** IDE file a desktop account came from; absent for managed accounts. */
28
+ sourceFile?: string;
29
+ }
30
+ /** Encrypted pool file this line owns. */
31
+ export declare function workBuddyPoolPath(): string;
32
+ /**
33
+ * Validate and normalize one whole pool document.
34
+ *
35
+ * A record whose credential is unusable is dropped rather than repaired: the
36
+ * account can always be adopted again from its file or by signing in again, and
37
+ * keeping a credential-less row would offer the user an account nothing can use.
38
+ */
39
+ export declare function parseWorkBuddyPoolData(value: unknown): PoolData<WorkBuddyPoolAccount>;
40
+ export interface WorkBuddyAccountPoolOptions {
41
+ /** Credential store the desktop scan reads through; the pool owns scheduling. */
42
+ store?: FileCredentialStore;
43
+ /** Test seam; production builds the platform backend from the pool path. */
44
+ backend?: CredentialStore<PoolData<WorkBuddyPoolAccount>>;
45
+ maxAccounts?: number;
46
+ /**
47
+ * The settings selection: the account the user pinned and the ones hidden.
48
+ *
49
+ * Read on every pick rather than captured once, because both change from the
50
+ * settings card while the adapter is serving requests.
51
+ */
52
+ selection?: () => {
53
+ selectedAccountId: string | null;
54
+ hiddenAccountIds: readonly string[];
55
+ };
56
+ }
57
+ /**
58
+ * WorkBuddy's account pool.
59
+ *
60
+ * Desktop accounts are adopted into the pool so they can be scheduled and
61
+ * cooled down like any other, but they stay owned by the IDE: the pool refreshes
62
+ * their credential from the IDE's own file on every pick, and deletion is
63
+ * refused for them.
64
+ */
65
+ export declare class WorkBuddyAccountPool extends AccountPoolCore<WorkBuddyCredentials, WorkBuddyPoolAccount, WorkBuddyAccountSummaryDto> {
66
+ private readonly store;
67
+ private readonly options_selection;
68
+ constructor(options?: WorkBuddyAccountPoolOptions);
69
+ /**
70
+ * Adopt any desktop credential the pool does not know yet.
71
+ *
72
+ * The IDE's directory is the source of truth for its own accounts, so a
73
+ * credential that appears there joins the pool. Nothing is ever removed: a
74
+ * file that disappears (the IDE signed out, a profile was moved) leaves the
75
+ * account in place, where the user can hide or delete the managed ones.
76
+ */
77
+ syncDesktopAccounts(): Promise<WorkBuddyAccountSummaryDto[]>;
78
+ /**
79
+ * Pick the account for the next request.
80
+ *
81
+ * A desktop account's credential is re-read from the IDE's file first: the IDE
82
+ * refreshes its own token, so the copy the pool adopted can be older than what
83
+ * is on disk.
84
+ */
85
+ getEffectiveCredential(excludeIds?: ReadonlySet<string>, fetchFn?: typeof fetch): Promise<{
86
+ account: WorkBuddyPoolAccount;
87
+ credentials: WorkBuddyCredentials;
88
+ }>;
89
+ /**
90
+ * Whether an account may serve a request.
91
+ *
92
+ * A hidden account keeps its place, its alias and its history, but the user
93
+ * has taken it out of this plugin's rotation, so it is not eligible.
94
+ */
95
+ protected isEligible(account: WorkBuddyPoolAccount, now: number, triedAccountIds?: ReadonlySet<string>): boolean;
96
+ private selection;
97
+ /**
98
+ * Delete one account.
99
+ *
100
+ * A desktop account is refused: the plugin does not own that credential file,
101
+ * so removing it from the pool would strand the IDE's session while telling
102
+ * the user their account was deleted. Hiding is the supported action there.
103
+ */
104
+ deleteAccount(accountId: string): Promise<void>;
105
+ }
106
+ //# sourceMappingURL=account-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account-pool.d.ts","sourceRoot":"","sources":["../../../../src/host/workbuddy/account-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EACL,eAAe,EAGf,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACd,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EACL,mBAAmB,EAGnB,KAAK,oBAAoB,EAC1B,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,EACV,0BAA0B,EAC1B,eAAe,EAChB,MAAM,qCAAqC,CAAA;AAE5C,oFAAoF;AACpF,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB,CAAC,oBAAoB,CAAC;IAClF,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,6EAA6E;IAC7E,MAAM,EAAE,SAAS,GAAG,SAAS,CAAA;IAC7B,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,0CAA0C;AAC1C,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AASD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAyCrF;AAwCD,MAAM,WAAW,2BAA2B;IAC1C,iFAAiF;IACjF,KAAK,CAAC,EAAE,mBAAmB,CAAA;IAC3B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAA;IACzD,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM;QAAE,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAA;CAC5F;AAED;;;;;;;GAOG;AACH,qBAAa,oBAAqB,SAAQ,eAAe,CACvD,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,CAC3B;IACC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA0C;gBAEhE,OAAO,GAAE,2BAAgC;IAkErD;;;;;;;OAOG;IACG,mBAAmB,IAAI,OAAO,CAAC,0BAA0B,EAAE,CAAC;IAmBlE;;;;;;OAMG;IACG,sBAAsB,CAC1B,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,EAChC,OAAO,GAAE,OAAO,KAAa,GAC5B,OAAO,CAAC;QAAE,OAAO,EAAE,oBAAoB,CAAC;QAAC,WAAW,EAAE,oBAAoB,CAAA;KAAE,CAAC;IAmBhF;;;;;OAKG;cACgB,UAAU,CAC3B,OAAO,EAAE,oBAAoB,EAC7B,GAAG,EAAE,MAAM,EACX,eAAe,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GACpC,OAAO;IAMV,OAAO,CAAC,SAAS;IAIjB;;;;;;OAMG;IACY,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO/D"}
@@ -0,0 +1,97 @@
1
+ import { LlmAdapter, LlmError, ReasoningEffortId, type GenerateOptions, type LlmModelInfo, type LlmProviderInfo, type LlmResolvedModelInfo, type PreparedAdapterCall, type ResolvedRetryPolicy, type StreamChunk } from '@deepseek-ai/dsh-llm';
2
+ import { PROVIDER_ID, PROVIDER_NAME } from './types.ts';
3
+ import { FileCredentialStore, FileModelSettingsStore, type WorkBuddyPreferenceStore } from './token-store.ts';
4
+ import { type WorkBuddyModelEntry } from './model-catalog.ts';
5
+ import { type AttachmentImageReader } from './mapper.ts';
6
+ import type { WorkBuddyCredentials } from './token-store.ts';
7
+ import type { WorkBuddyAccountPool } from './account-pool.ts';
8
+ /**
9
+ * Effort this route materializes when the caller names none.
10
+ *
11
+ * Preference order: the user's configured level when the model accepts it,
12
+ * otherwise the level the gateway's own catalog declares for that model (the
13
+ * same default the official CLI applies), otherwise nothing — which leaves the
14
+ * provider's own default in charge. A configured level the model does not
15
+ * accept is ignored rather than sent, since the endpoint rejects an unsupported
16
+ * level with `code 11150`.
17
+ */
18
+ export declare function resolveDefaultReasoningEffort(efforts: readonly string[], configuredEffort?: string | null, modelDefaultEffort?: string | null): ReasoningEffortId | undefined;
19
+ /** Cooldown a 429 imposes when the service names no reset instant. */
20
+ export declare const POOL_COOLDOWN_MS: number;
21
+ export interface WorkBuddyAdapterOptions {
22
+ fetchFn?: typeof fetch;
23
+ attachments?: AttachmentImageReader;
24
+ /** Live catalog loader seam; defaults to the gateway `/v3/config` call. */
25
+ loadCatalog?: (credentials: WorkBuddyCredentials) => Promise<WorkBuddyModelEntry[]>;
26
+ /**
27
+ * Multi-account pool this adapter rotates through.
28
+ *
29
+ * Absent leaves the line on its single-credential path, which is what the
30
+ * headless tests and any caller that predates the pool use.
31
+ */
32
+ accountPool?: WorkBuddyAccountPool;
33
+ }
34
+ export declare class WorkBuddyAdapter extends LlmAdapter {
35
+ private readonly store;
36
+ private readonly modelSettings;
37
+ private readonly preferences?;
38
+ private readonly options;
39
+ /** Null keeps the pre-pool single-credential path. */
40
+ private readonly accountPool;
41
+ constructor(store?: FileCredentialStore, modelSettings?: FileModelSettingsStore, preferences?: WorkBuddyPreferenceStore | undefined, options?: WorkBuddyAdapterOptions);
42
+ providerInfo(provider: string): LlmProviderInfo;
43
+ providerRetryPolicy(): ResolvedRetryPolicy;
44
+ imageRequestPricing(): undefined;
45
+ private settings;
46
+ private credentials;
47
+ /**
48
+ * Catalog for the picker: the live gateway listing when reachable, the
49
+ * shipped table otherwise.
50
+ *
51
+ * The gateway is the authority on capabilities, so its answer replaces the
52
+ * fallback rather than merging with it — a model whose context window changed
53
+ * upstream must not keep a stale local value.
54
+ */
55
+ private catalog;
56
+ /**
57
+ * Models the picker may offer.
58
+ *
59
+ * The catalog is filtered by the account's own region: asking a region for a
60
+ * model it does not serve answers 400 `code 11102`, so offering one would
61
+ * hand the user a model that cannot work.
62
+ */
63
+ listModels(provider?: string): Promise<readonly LlmModelInfo[]>;
64
+ resolveModel(provider: string, modelId: string, signal?: AbortSignal): Promise<LlmResolvedModelInfo>;
65
+ prepareCall(provider: string, model: string, signal?: AbortSignal): Promise<PreparedAdapterCall>;
66
+ stream(options: GenerateOptions): AsyncIterable<StreamChunk>;
67
+ /**
68
+ * Effort this request should carry, or `undefined` to send none.
69
+ *
70
+ * Order: the caller's explicit choice, then the user's configured level, then
71
+ * the level the gateway catalog declares for this model. The last step
72
+ * matters because the endpoint returns an **empty `reasoning_content`** when
73
+ * no `reasoning_effort` is present, even for a reasoning-only model: measured
74
+ * on `deepseek-v4.1-flash`, the same prompt yields 0 reasoning characters
75
+ * with no field and 130-215 with one. Omitting it therefore silently drops
76
+ * the model's thinking instead of letting the provider pick, so the catalog's
77
+ * own default (which is what the official CLI sends) is materialized here.
78
+ *
79
+ * A candidate the model does not accept is discarded rather than sent, since
80
+ * the endpoint rejects an unsupported level with `code 11150`.
81
+ */
82
+ private effortFor;
83
+ private requestStream;
84
+ }
85
+ /**
86
+ * Map one failed HTTP response onto a DSH failure.
87
+ *
88
+ * The subscription reports its own conditions inside a JSON `code` while the
89
+ * status line stays generic, so the body is read for the specific cases the
90
+ * status alone cannot express — notably the quota signal, whose message carries
91
+ * the instant the allowance resets.
92
+ */
93
+ export declare function classifyFailure(status: number, detail: string, headers?: Headers): LlmError;
94
+ /** Read the subscription's own numeric error code out of a response body. */
95
+ export declare function readErrorCode(detail: string): number | null;
96
+ export { PROVIDER_ID, PROVIDER_NAME };
97
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/host/workbuddy/adapter.ts"],"names":[],"mappings":"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"}