@claudexor/cli 3.24.0 → 3.25.1

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 (80) hide show
  1. package/dist/account-management.d.ts +17 -0
  2. package/dist/account-management.d.ts.map +1 -0
  3. package/dist/account-management.js +35 -0
  4. package/dist/account-management.js.map +1 -0
  5. package/dist/account-reset-command.d.ts +3 -0
  6. package/dist/account-reset-command.d.ts.map +1 -0
  7. package/dist/account-reset-command.js +32 -0
  8. package/dist/account-reset-command.js.map +1 -0
  9. package/dist/account-reset-services.d.ts +341 -0
  10. package/dist/account-reset-services.d.ts.map +1 -0
  11. package/dist/account-reset-services.js +183 -0
  12. package/dist/account-reset-services.js.map +1 -0
  13. package/dist/account-resource-query.d.ts +18 -0
  14. package/dist/account-resource-query.d.ts.map +1 -0
  15. package/dist/account-resource-query.js +62 -0
  16. package/dist/account-resource-query.js.map +1 -0
  17. package/dist/accounts-services.d.ts +1 -0
  18. package/dist/accounts-services.d.ts.map +1 -1
  19. package/dist/accounts-services.js +4 -2
  20. package/dist/accounts-services.js.map +1 -1
  21. package/dist/claude-account-resources.d.ts +5 -0
  22. package/dist/claude-account-resources.d.ts.map +1 -0
  23. package/dist/claude-account-resources.js +134 -0
  24. package/dist/claude-account-resources.js.map +1 -0
  25. package/dist/claude-oauth-codec.d.ts +4 -0
  26. package/dist/claude-oauth-codec.d.ts.map +1 -0
  27. package/dist/claude-oauth-codec.js +71 -0
  28. package/dist/claude-oauth-codec.js.map +1 -0
  29. package/dist/claude-oauth-credential.d.ts +6 -0
  30. package/dist/claude-oauth-credential.d.ts.map +1 -1
  31. package/dist/claude-oauth-credential.js +18 -0
  32. package/dist/claude-oauth-credential.js.map +1 -1
  33. package/dist/claude-oauth-fetch.d.ts +1 -1
  34. package/dist/claude-oauth-fetch.d.ts.map +1 -1
  35. package/dist/claude-oauth-fetch.js +3 -2
  36. package/dist/claude-oauth-fetch.js.map +1 -1
  37. package/dist/claude-oauth-usage.d.ts +5 -4
  38. package/dist/claude-oauth-usage.d.ts.map +1 -1
  39. package/dist/claude-oauth-usage.js +47 -75
  40. package/dist/claude-oauth-usage.js.map +1 -1
  41. package/dist/claude-resource-source.d.ts +18 -0
  42. package/dist/claude-resource-source.d.ts.map +1 -0
  43. package/dist/claude-resource-source.js +108 -0
  44. package/dist/claude-resource-source.js.map +1 -0
  45. package/dist/claude-resource-transport.d.ts +12 -0
  46. package/dist/claude-resource-transport.d.ts.map +1 -0
  47. package/dist/claude-resource-transport.js +47 -0
  48. package/dist/claude-resource-transport.js.map +1 -0
  49. package/dist/claudexord.d.ts.map +1 -1
  50. package/dist/claudexord.js +4 -3
  51. package/dist/claudexord.js.map +1 -1
  52. package/dist/cli.js +3 -0
  53. package/dist/cli.js.map +1 -1
  54. package/dist/codex-quota-source.d.ts +7 -2
  55. package/dist/codex-quota-source.d.ts.map +1 -1
  56. package/dist/codex-quota-source.js +72 -12
  57. package/dist/codex-quota-source.js.map +1 -1
  58. package/dist/command-flags.d.ts.map +1 -1
  59. package/dist/command-flags.js +5 -0
  60. package/dist/command-flags.js.map +1 -1
  61. package/dist/control-services.d.ts +264 -118
  62. package/dist/control-services.d.ts.map +1 -1
  63. package/dist/mcp-runner.d.ts.map +1 -1
  64. package/dist/mcp-runner.js +5 -0
  65. package/dist/mcp-runner.js.map +1 -1
  66. package/dist/ops-command-specs.d.ts.map +1 -1
  67. package/dist/ops-command-specs.js +11 -2
  68. package/dist/ops-command-specs.js.map +1 -1
  69. package/dist/quota-command.d.ts.map +1 -1
  70. package/dist/quota-command.js +38 -2
  71. package/dist/quota-command.js.map +1 -1
  72. package/dist/quota-refreshers.d.ts +3 -1
  73. package/dist/quota-refreshers.d.ts.map +1 -1
  74. package/dist/quota-refreshers.js +6 -2
  75. package/dist/quota-refreshers.js.map +1 -1
  76. package/dist/quota-services.d.ts +234 -2
  77. package/dist/quota-services.d.ts.map +1 -1
  78. package/dist/quota-services.js +49 -4
  79. package/dist/quota-services.js.map +1 -1
  80. package/package.json +25 -25
@@ -1,5 +1,6 @@
1
1
  import { ControlProblem, ControlQuotaResponse } from "@claudexor/schema";
2
- import { flagBool } from "./args.js";
2
+ import { accountResourceQuery, parseAccountTarget } from "./account-resource-query.js";
3
+ import { flagBool, flagStr } from "./args.js";
3
4
  import { print, printJson, quotaRefreshLabel } from "./cli-io.js";
4
5
  import { renderCliFailure } from "./cli-error.js";
5
6
  import { ensureDaemon } from "./daemon-run.js";
@@ -16,11 +17,46 @@ export async function quotaCommand(args, json) {
16
17
  return 0;
17
18
  }
18
19
  try {
20
+ const profile = flagStr(args, "profile");
21
+ const model = flagStr(args, "model");
22
+ if (profile && !flagBool(args, "refresh"))
23
+ throw new Error("--profile requires --refresh");
24
+ if (model && !flagBool(args, "refresh"))
25
+ throw new Error("--model requires --refresh");
26
+ if (flagBool(args, "resources")) {
27
+ const value = await accountResourceQuery("resources", {
28
+ refresh: flagBool(args, "refresh"),
29
+ ...(profile ? { target: parseAccountTarget(profile) } : {}),
30
+ ...(model ? { model } : {}),
31
+ });
32
+ if (json)
33
+ printJson(value);
34
+ else {
35
+ printQuota(value);
36
+ for (const row of value.resources) {
37
+ print(`${row.target.harness}/${row.target.profile_id}: resources`);
38
+ for (const key of ["balances", "spending", "resets", "diagnostics"])
39
+ print(` ${key}: ${row[key].freshness}; ${JSON.stringify(row[key].value)}${row[key].last_error ? ` (${row[key].last_error})` : ""}`);
40
+ }
41
+ }
42
+ return 0;
43
+ }
19
44
  const { addr } = await ensureDaemon();
20
45
  const refresh = flagBool(args, "refresh");
21
46
  const response = await controlApiFetch(addr, "/quota", {
22
47
  method: refresh ? "POST" : "GET",
23
- headers: { Authorization: `Bearer ${addr.token}` },
48
+ headers: {
49
+ Authorization: `Bearer ${addr.token}`,
50
+ ...(refresh ? { "Content-Type": "application/json" } : {}),
51
+ },
52
+ ...(refresh
53
+ ? {
54
+ body: JSON.stringify({
55
+ ...(profile ? { target: parseAccountTarget(profile) } : {}),
56
+ ...(model ? { model } : {}),
57
+ }),
58
+ }
59
+ : {}),
24
60
  });
25
61
  const payload = await response.json();
26
62
  if (!response.ok) {
@@ -1 +1 @@
1
- {"version":3,"file":"quota-command.js","sourceRoot":"","sources":["../src/quota-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quota-command.js","sourceRoot":"","sources":["../src/quota-command.ts"],"names":[],"mappings":"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"}
@@ -24,7 +24,9 @@ export declare const QUOTA_REFRESHER_REGISTRATIONS: readonly [{
24
24
  }, {
25
25
  readonly source: "claude_statusline";
26
26
  readonly vendor: "claude";
27
- readonly refresh: () => Promise<import("@claudexor/daemon").QuotaRefreshResult>;
27
+ readonly refresh: (cycle?: QuotaRefreshCycle) => Promise<import("@claudexor/daemon").QuotaRefreshResult> | Promise<{
28
+ snapshots: never[];
29
+ }>;
28
30
  }, {
29
31
  readonly source: "claude_oauth_usage";
30
32
  readonly vendor: "claude";
@@ -1 +1 @@
1
- {"version":3,"file":"quota-refreshers.d.ts","sourceRoot":"","sources":["../src/quota-refreshers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B;;;;gDAI4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,CAChB,KAAK,CAAC,EAAE,iBAAiB,EACzB,UAAU,CAAC,EAAE,mBAAmB,KAC7B,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;CAClD;AAED;;;;;qBAKqB;AACrB,eAAO,MAAM,6BAA6B;qBAE9B,kBAAkB;qBAClB,OAAO;+BACG,iBAAiB,eAAe,mBAAmB;;qBAG7D,mBAAmB;qBAAU,QAAQ;;;qBAErC,oBAAoB;qBACpB,QAAQ;+BACE,iBAAiB,eAAe,mBAAmB;;qBAG7D,mBAAmB;qBAAU,KAAK;;EACY,CAAC;AAE3D,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,mBAAmB,GAAG,oBAAoB,EAAE,CAKxF"}
1
+ {"version":3,"file":"quota-refreshers.d.ts","sourceRoot":"","sources":["../src/quota-refreshers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B;;;;gDAI4C;IAC5C,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAE,CAChB,KAAK,CAAC,EAAE,iBAAiB,EACzB,UAAU,CAAC,EAAE,mBAAmB,KAC7B,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,CAAC;CAClD;AAED;;;;;qBAKqB;AACrB,eAAO,MAAM,6BAA6B;qBAE9B,kBAAkB;qBAClB,OAAO;+BACG,iBAAiB,eAAe,mBAAmB;;qBAI7D,mBAAmB;qBACnB,QAAQ;+BACE,iBAAiB;;;;qBAI3B,oBAAoB;qBACpB,QAAQ;+BACE,iBAAiB,eAAe,mBAAmB;;qBAG7D,mBAAmB;qBAAU,KAAK;;EACY,CAAC;AAE3D,wBAAgB,eAAe,CAAC,UAAU,CAAC,EAAE,mBAAmB,GAAG,oBAAoB,EAAE,CAKxF"}
@@ -12,9 +12,13 @@ export const QUOTA_REFRESHER_REGISTRATIONS = [
12
12
  {
13
13
  source: "codex_app_server",
14
14
  vendor: "codex",
15
- refresh: (cycle, diagnostic) => refreshCodexQuota({ diagnostic, foreground: cycle?.foreground }),
15
+ refresh: (cycle, diagnostic) => refreshCodexQuota({ diagnostic, foreground: cycle?.foreground, cycle }),
16
+ },
17
+ {
18
+ source: "claude_statusline",
19
+ vendor: "claude",
20
+ refresh: (cycle) => cycle?.target ? Promise.resolve({ snapshots: [] }) : refreshClaudeStatuslineQuota(),
16
21
  },
17
- { source: "claude_statusline", vendor: "claude", refresh: () => refreshClaudeStatuslineQuota() },
18
22
  {
19
23
  source: "claude_oauth_usage",
20
24
  vendor: "claude",
@@ -1 +1 @@
1
- {"version":3,"file":"quota-refreshers.js","sourceRoot":"","sources":["../src/quota-refreshers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAiBxD;;;;;qBAKqB;AACrB,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C;QACE,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,CAAC,KAAyB,EAAE,UAAgC,EAAE,EAAE,CACvE,iBAAiB,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;KACnE;IACD,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,4BAA4B,EAAE,EAAE;IAChG;QACE,MAAM,EAAE,oBAAoB;QAC5B,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,CAAC,KAAyB,EAAE,UAAgC,EAAE,EAAE,CACvE,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC;KACxE;IACD,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE,EAAE;CACxB,CAAC;AAE3D,MAAM,UAAU,eAAe,CAAC,UAAgC;IAC9D,OAAO,6BAA6B,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM;QACN,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;KAC/C,CAAC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"quota-refreshers.js","sourceRoot":"","sources":["../src/quota-refreshers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,4BAA4B,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAiBxD;;;;;qBAKqB;AACrB,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C;QACE,MAAM,EAAE,kBAAkB;QAC1B,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,CAAC,KAAyB,EAAE,UAAgC,EAAE,EAAE,CACvE,iBAAiB,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;KAC1E;IACD;QACE,MAAM,EAAE,mBAAmB;QAC3B,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,CAAC,KAAyB,EAAE,EAAE,CACrC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,4BAA4B,EAAE;KACtF;IACD;QACE,MAAM,EAAE,oBAAoB;QAC5B,MAAM,EAAE,QAAQ;QAChB,OAAO,EAAE,CAAC,KAAyB,EAAE,UAAgC,EAAE,EAAE,CACvE,4BAA4B,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC;KACxE;IACD,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE,EAAE;CACxB,CAAC;AAE3D,MAAM,UAAU,eAAe,CAAC,UAAgC;IAC9D,OAAO,6BAA6B,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM;QACN,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;KAC/C,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1,12 +1,101 @@
1
1
  /** /v2/quota control services over the daemon's QuotaRegistry. */
2
2
  import type { QuotaRegistry } from "@claudexor/daemon";
3
+ import { ControlQuotaRefreshRequest, type ControlQuotaResponse, type ControlAccountResourcesResponse, type AccountResourceSnapshot } from "@claudexor/schema";
4
+ export declare function accountResourcesResponse(registry: QuotaRegistry, response?: ControlQuotaResponse, resources?: AccountResourceSnapshot[]): ControlAccountResourcesResponse;
5
+ /** Compatibility text belongs at the old wire boundary, never in canonical
6
+ * quota evidence or admission. Rich clients get typed reset inventory only. */
7
+ export declare function legacyQuotaResponse(registry: QuotaRegistry, response: ControlQuotaResponse, resources?: {
8
+ target: {
9
+ harness: string;
10
+ profile_id: string;
11
+ };
12
+ balances: {
13
+ value: {
14
+ id: string;
15
+ label: string;
16
+ amount: string | null;
17
+ unit: string;
18
+ currency: string | null;
19
+ decimal_places: number | null;
20
+ has_balance: boolean | null;
21
+ unlimited: boolean | null;
22
+ }[] | null;
23
+ source: string | null;
24
+ observed_at: string | null;
25
+ freshness: "fresh" | "stale" | "unknown";
26
+ last_attempt_at: string | null;
27
+ last_error: string | null;
28
+ };
29
+ spending: {
30
+ value: {
31
+ id: string;
32
+ label: string;
33
+ enabled: boolean | null;
34
+ used: string | null;
35
+ limit: string | null;
36
+ unit: string;
37
+ currency: string | null;
38
+ decimal_places: number | null;
39
+ resets_at: string | null;
40
+ reason: string | null;
41
+ }[] | null;
42
+ source: string | null;
43
+ observed_at: string | null;
44
+ freshness: "fresh" | "stale" | "unknown";
45
+ last_attempt_at: string | null;
46
+ last_error: string | null;
47
+ };
48
+ resets: {
49
+ value: {
50
+ id: string;
51
+ kind: "granted_reset" | "session_refill";
52
+ label: string;
53
+ description: string | null;
54
+ available_count: number | null;
55
+ eligible: boolean | null;
56
+ usable_now: boolean | null;
57
+ reason: string | null;
58
+ resets_at: string | null;
59
+ weekly_limit_applies: boolean;
60
+ grants: {
61
+ id: string;
62
+ label: string;
63
+ description: string | null;
64
+ available_count: number | null;
65
+ total_count: number | null;
66
+ usable_now: boolean | null;
67
+ starts_at: string | null;
68
+ expires_at: string | null;
69
+ clears: string[];
70
+ }[] | null;
71
+ }[] | null;
72
+ source: string | null;
73
+ observed_at: string | null;
74
+ freshness: "fresh" | "stale" | "unknown";
75
+ last_attempt_at: string | null;
76
+ last_error: string | null;
77
+ };
78
+ diagnostics: {
79
+ value: {
80
+ code: string;
81
+ detail: string | null;
82
+ }[] | null;
83
+ source: string | null;
84
+ observed_at: string | null;
85
+ freshness: "fresh" | "stale" | "unknown";
86
+ last_attempt_at: string | null;
87
+ last_error: string | null;
88
+ };
89
+ }[]): ControlQuotaResponse;
3
90
  /** Bind GET/POST /v2/quota to the registry. Both routes decorate each snapshot
4
91
  * with the derived model-aware availability projection at the response
5
92
  * boundary; the registry's own read()/journal/projection-signature stay
6
93
  * byte-identical. The atomic Accounts response uses the same decorator at its
7
94
  * own boundary. POST accepts an optional model to compute state against. */
8
95
  export declare function quotaControlServices(quotaRegistry: () => QuotaRegistry): {
9
- quota: () => Promise<{
96
+ quota: (input?: {
97
+ view?: "resources";
98
+ }) => Promise<{
10
99
  snapshots: {
11
100
  subject: {
12
101
  harness: string;
@@ -65,7 +154,9 @@ export declare function quotaControlServices(quotaRegistry: () => QuotaRegistry)
65
154
  not_before: string;
66
155
  }[] | undefined;
67
156
  }>;
68
- refreshQuota: (input?: unknown) => Promise<{
157
+ refreshQuota: (input?: ControlQuotaRefreshRequest & {
158
+ view?: "resources";
159
+ }) => Promise<{
69
160
  snapshots: {
70
161
  subject: {
71
162
  harness: string;
@@ -123,6 +214,147 @@ export declare function quotaControlServices(quotaRegistry: () => QuotaRegistry)
123
214
  } | undefined;
124
215
  not_before: string;
125
216
  }[] | undefined;
217
+ } | {
218
+ snapshots: {
219
+ subject: {
220
+ harness: string;
221
+ credential_route: "local" | "managed_api_key" | "vendor_native";
222
+ plan_label: string | null;
223
+ subject_id: string | null;
224
+ };
225
+ constraints: {
226
+ id: string;
227
+ label: string;
228
+ applies_to_models?: string[] | null | undefined;
229
+ applies_to_model_prefixes?: string[] | undefined;
230
+ applies_to_unspecified_model?: boolean | undefined;
231
+ used_ratio: number | null;
232
+ window_seconds: number | null;
233
+ resets_at: string | null;
234
+ cooldown_until: string | null;
235
+ }[];
236
+ source: "agy_command_usage" | "claude_api_retry" | "claude_oauth_usage" | "claude_rate_limit_event" | "claude_statusline" | "codex_app_server" | "codex_app_server_event" | "codex_rollout" | "cursor_rate_limit";
237
+ observed_at: string;
238
+ freshness: "fresh" | "stale" | "unknown";
239
+ snapshot_id?: string | undefined;
240
+ availability?: {
241
+ state: "available" | "cooldown" | "exhausted";
242
+ blocking_constraints: string[];
243
+ resets_at: string | null;
244
+ model_scoped_exhaustions: {
245
+ constraint_id: string;
246
+ applies_to_models: string[];
247
+ applies_to_model_prefixes?: string[] | undefined;
248
+ resets_at: string | null;
249
+ }[];
250
+ } | undefined;
251
+ }[];
252
+ absences: {
253
+ subject: {
254
+ harness: string;
255
+ credential_route: "local" | "managed_api_key" | "vendor_native";
256
+ plan_label: string | null;
257
+ subject_id: string | null;
258
+ };
259
+ reason: "auth_revoked" | "credential_profile_ambiguous" | "no_source" | "not_logged_in" | "platform_unsupported" | "poll_paced" | "probe_skipped_rate_limited" | "rate_limited" | "refresh_failed" | "transport_unavailable";
260
+ detail: string | null;
261
+ observed_at: string;
262
+ retry_after_ms?: number | undefined;
263
+ }[];
264
+ refreshed_at: string | null;
265
+ refresh_skipped?: {
266
+ vendor: string;
267
+ subject?: {
268
+ harness: string;
269
+ credential_route: "local" | "managed_api_key" | "vendor_native";
270
+ plan_label: string | null;
271
+ subject_id: string | null;
272
+ } | undefined;
273
+ not_before: string;
274
+ }[] | undefined;
275
+ resources: {
276
+ target: {
277
+ harness: string;
278
+ profile_id: string;
279
+ };
280
+ balances: {
281
+ value: {
282
+ id: string;
283
+ label: string;
284
+ amount: string | null;
285
+ unit: string;
286
+ currency: string | null;
287
+ decimal_places: number | null;
288
+ has_balance: boolean | null;
289
+ unlimited: boolean | null;
290
+ }[] | null;
291
+ source: string | null;
292
+ observed_at: string | null;
293
+ freshness: "fresh" | "stale" | "unknown";
294
+ last_attempt_at: string | null;
295
+ last_error: string | null;
296
+ };
297
+ spending: {
298
+ value: {
299
+ id: string;
300
+ label: string;
301
+ enabled: boolean | null;
302
+ used: string | null;
303
+ limit: string | null;
304
+ unit: string;
305
+ currency: string | null;
306
+ decimal_places: number | null;
307
+ resets_at: string | null;
308
+ reason: string | null;
309
+ }[] | null;
310
+ source: string | null;
311
+ observed_at: string | null;
312
+ freshness: "fresh" | "stale" | "unknown";
313
+ last_attempt_at: string | null;
314
+ last_error: string | null;
315
+ };
316
+ resets: {
317
+ value: {
318
+ id: string;
319
+ kind: "granted_reset" | "session_refill";
320
+ label: string;
321
+ description: string | null;
322
+ available_count: number | null;
323
+ eligible: boolean | null;
324
+ usable_now: boolean | null;
325
+ reason: string | null;
326
+ resets_at: string | null;
327
+ weekly_limit_applies: boolean;
328
+ grants: {
329
+ id: string;
330
+ label: string;
331
+ description: string | null;
332
+ available_count: number | null;
333
+ total_count: number | null;
334
+ usable_now: boolean | null;
335
+ starts_at: string | null;
336
+ expires_at: string | null;
337
+ clears: string[];
338
+ }[] | null;
339
+ }[] | null;
340
+ source: string | null;
341
+ observed_at: string | null;
342
+ freshness: "fresh" | "stale" | "unknown";
343
+ last_attempt_at: string | null;
344
+ last_error: string | null;
345
+ };
346
+ diagnostics: {
347
+ value: {
348
+ code: string;
349
+ detail: string | null;
350
+ }[] | null;
351
+ source: string | null;
352
+ observed_at: string | null;
353
+ freshness: "fresh" | "stale" | "unknown";
354
+ last_attempt_at: string | null;
355
+ last_error: string | null;
356
+ };
357
+ }[];
126
358
  }>;
127
359
  };
128
360
  //# sourceMappingURL=quota-services.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"quota-services.d.ts","sourceRoot":"","sources":["../src/quota-services.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD;;;;4EAI4E;AAC5E,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,aAAa;IAEnE,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IACL,YAAY,WAAiB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKvC"}
1
+ {"version":3,"file":"quota-services.d.ts","sourceRoot":"","sources":["../src/quota-services.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EACL,0BAA0B,EAE1B,KAAK,oBAAoB,EACzB,KAAK,+BAA+B,EACpC,KAAK,uBAAuB,EAC7B,MAAM,mBAAmB,CAAC;AAG3B,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,aAAa,EACvB,QAAQ,GAAE,oBAAsC,EAChD,SAAS,GAAE,uBAAuB,EAA6B,GAC9D,+BAA+B,CAEjC;AAED;+EAC+E;AAC/E,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,oBAAoB,EAC9B,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAmC,GAC3C,oBAAoB,CA+BtB;AAED;;;;4EAI4E;AAC5E,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,aAAa;IAEnE,KAAK,WAAiB;QAAE,IAAI,CAAC,EAAE,WAAW,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAI5C,YAAY,WAAiB,0BAA0B,GAAG;QAAE,IAAI,CAAC,EAAE,WAAW,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBnF"}
@@ -1,4 +1,37 @@
1
- import { ControlQuotaRefreshRequest, withQuotaAvailability } from "@claudexor/schema";
1
+ import { ControlQuotaRefreshRequest, withQuotaAvailability, } from "@claudexor/schema";
2
+ import { accountManagementTarget } from "./account-management.js";
3
+ export function accountResourcesResponse(registry, response = registry.read(), resources = registry.readResources()) {
4
+ return { ...withQuotaAvailability(response), resources };
5
+ }
6
+ /** Compatibility text belongs at the old wire boundary, never in canonical
7
+ * quota evidence or admission. Rich clients get typed reset inventory only. */
8
+ export function legacyQuotaResponse(registry, response, resources = registry.readResources?.() ?? []) {
9
+ const decorated = withQuotaAvailability(response);
10
+ return {
11
+ ...decorated,
12
+ snapshots: decorated.snapshots.map((snapshot) => {
13
+ const row = resources.find((row) => row.target.harness === snapshot.subject.harness &&
14
+ row.target.profile_id === snapshot.subject.subject_id);
15
+ const count = row?.resets.value?.find((offer) => offer.id === "codex_granted")?.available_count;
16
+ return typeof count === "number" && count > 0 && snapshot.source === "codex_app_server"
17
+ ? {
18
+ ...snapshot,
19
+ constraints: [
20
+ ...snapshot.constraints.filter((constraint) => constraint.id !== "reset_credits"),
21
+ {
22
+ id: "reset_credits",
23
+ label: `${count} reset credit${count === 1 ? "" : "s"} available`,
24
+ used_ratio: null,
25
+ window_seconds: null,
26
+ resets_at: null,
27
+ cooldown_until: null,
28
+ },
29
+ ],
30
+ }
31
+ : snapshot;
32
+ }),
33
+ };
34
+ }
2
35
  /** Bind GET/POST /v2/quota to the registry. Both routes decorate each snapshot
3
36
  * with the derived model-aware availability projection at the response
4
37
  * boundary; the registry's own read()/journal/projection-signature stay
@@ -6,10 +39,22 @@ import { ControlQuotaRefreshRequest, withQuotaAvailability } from "@claudexor/sc
6
39
  * own boundary. POST accepts an optional model to compute state against. */
7
40
  export function quotaControlServices(quotaRegistry) {
8
41
  return {
9
- quota: async () => withQuotaAvailability(quotaRegistry().read()),
42
+ quota: async (input) => input?.view === "resources"
43
+ ? accountResourcesResponse(quotaRegistry())
44
+ : legacyQuotaResponse(quotaRegistry(), quotaRegistry().read()),
10
45
  refreshQuota: async (input) => {
11
- const request = ControlQuotaRefreshRequest.parse(input ?? {});
12
- return withQuotaAvailability(await quotaRegistry().refresh(), { model: request.model });
46
+ const { view, ...body } = input ?? {};
47
+ const request = ControlQuotaRefreshRequest.parse(body);
48
+ if (request.target)
49
+ accountManagementTarget(request.target);
50
+ if (view === "resources") {
51
+ const result = await quotaRegistry().refreshResources(request.target);
52
+ return {
53
+ ...withQuotaAvailability(result, { model: request.model }),
54
+ resources: result.resources,
55
+ };
56
+ }
57
+ return withQuotaAvailability(legacyQuotaResponse(quotaRegistry(), await quotaRegistry().refresh(request.target)), { model: request.model });
13
58
  },
14
59
  };
15
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"quota-services.js","sourceRoot":"","sources":["../src/quota-services.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAEtF;;;;4EAI4E;AAC5E,MAAM,UAAU,oBAAoB,CAAC,aAAkC;IACrE,OAAO;QACL,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,CAAC;QAChE,YAAY,EAAE,KAAK,EAAE,KAAe,EAAE,EAAE;YACtC,MAAM,OAAO,GAAG,0BAA0B,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAC9D,OAAO,qBAAqB,CAAC,MAAM,aAAa,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1F,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"quota-services.js","sourceRoot":"","sources":["../src/quota-services.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@claudexor/cli",
3
- "version": "3.24.0",
3
+ "version": "3.25.1",
4
4
  "license": "MIT",
5
5
  "description": "Claudexor CLI (claudexor). Thin surface over the orchestrator.",
6
6
  "type": "module",
@@ -10,30 +10,30 @@
10
10
  "dist"
11
11
  ],
12
12
  "dependencies": {
13
- "@claudexor/artifact-store": "3.24.0",
14
- "@claudexor/acp-server": "3.24.0",
15
- "@claudexor/config": "3.24.0",
16
- "@claudexor/core": "3.24.0",
17
- "@claudexor/control-api": "3.24.0",
18
- "@claudexor/daemon": "3.24.0",
19
- "@claudexor/delivery": "3.24.0",
20
- "@claudexor/harness-agy": "3.24.0",
21
- "@claudexor/harness-claude": "3.24.0",
22
- "@claudexor/harness-fake": "3.24.0",
23
- "@claudexor/harness-opencode": "3.24.0",
24
- "@claudexor/harness-cursor": "3.24.0",
25
- "@claudexor/harness-codex": "3.24.0",
26
- "@claudexor/harness-raw-api": "3.24.0",
27
- "@claudexor/journal": "3.24.0",
28
- "@claudexor/orchestrator": "3.24.0",
29
- "@claudexor/schema": "3.24.0",
30
- "@claudexor/secrets": "3.24.0",
31
- "@claudexor/review": "3.24.0",
32
- "@claudexor/mcp-server": "3.24.0",
33
- "@claudexor/util": "3.24.0",
34
- "@claudexor/harness-acp": "3.24.0",
35
- "@claudexor/gateway": "3.24.0",
36
- "@claudexor/workspace": "3.24.0"
13
+ "@claudexor/artifact-store": "3.25.1",
14
+ "@claudexor/config": "3.25.1",
15
+ "@claudexor/acp-server": "3.25.1",
16
+ "@claudexor/control-api": "3.25.1",
17
+ "@claudexor/core": "3.25.1",
18
+ "@claudexor/daemon": "3.25.1",
19
+ "@claudexor/delivery": "3.25.1",
20
+ "@claudexor/gateway": "3.25.1",
21
+ "@claudexor/harness-agy": "3.25.1",
22
+ "@claudexor/harness-claude": "3.25.1",
23
+ "@claudexor/harness-codex": "3.25.1",
24
+ "@claudexor/harness-fake": "3.25.1",
25
+ "@claudexor/harness-cursor": "3.25.1",
26
+ "@claudexor/harness-opencode": "3.25.1",
27
+ "@claudexor/harness-raw-api": "3.25.1",
28
+ "@claudexor/journal": "3.25.1",
29
+ "@claudexor/secrets": "3.25.1",
30
+ "@claudexor/schema": "3.25.1",
31
+ "@claudexor/review": "3.25.1",
32
+ "@claudexor/mcp-server": "3.25.1",
33
+ "@claudexor/util": "3.25.1",
34
+ "@claudexor/workspace": "3.25.1",
35
+ "@claudexor/harness-acp": "3.25.1",
36
+ "@claudexor/orchestrator": "3.25.1"
37
37
  },
38
38
  "repository": {
39
39
  "type": "git",