aicodeman 1.23.1 → 1.23.2

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 (89) hide show
  1. package/README.md +1 -1
  2. package/dist/usage-telemetry.d.ts +7 -2
  3. package/dist/usage-telemetry.d.ts.map +1 -1
  4. package/dist/usage-telemetry.js +30 -2
  5. package/dist/usage-telemetry.js.map +1 -1
  6. package/dist/utils/codex-cli-resolver.d.ts +7 -0
  7. package/dist/utils/codex-cli-resolver.d.ts.map +1 -1
  8. package/dist/utils/codex-cli-resolver.js +81 -1
  9. package/dist/utils/codex-cli-resolver.js.map +1 -1
  10. package/dist/utils/index.d.ts +1 -1
  11. package/dist/utils/index.d.ts.map +1 -1
  12. package/dist/utils/index.js +1 -1
  13. package/dist/utils/index.js.map +1 -1
  14. package/dist/web/plan-usage-latest.d.ts +7 -5
  15. package/dist/web/plan-usage-latest.d.ts.map +1 -1
  16. package/dist/web/plan-usage-latest.js +12 -5
  17. package/dist/web/plan-usage-latest.js.map +1 -1
  18. package/dist/web/public/admin-ui.js.gz +0 -0
  19. package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
  20. package/dist/web/public/{app.c5cf1b8a.js → app.3734fd6f.js} +20 -18
  21. package/dist/web/public/app.3734fd6f.js.br +0 -0
  22. package/dist/web/public/app.3734fd6f.js.gz +0 -0
  23. package/dist/web/public/approvals-ui.js.gz +0 -0
  24. package/dist/web/public/constants.f4ea0a19.js.gz +0 -0
  25. package/dist/web/public/cron-ui.js.gz +0 -0
  26. package/dist/web/public/entrance-animations.js.gz +0 -0
  27. package/dist/web/public/home-sessions.js.gz +0 -0
  28. package/dist/web/public/i18n.9ae15b51.js.gz +0 -0
  29. package/dist/web/public/image-input.ee16ad88.js.gz +0 -0
  30. package/dist/web/public/index.html +4 -4
  31. package/dist/web/public/index.html.br +0 -0
  32. package/dist/web/public/index.html.gz +0 -0
  33. package/dist/web/public/input-cjk.87f14251.js.gz +0 -0
  34. package/dist/web/public/keyboard-accessory.0454a3e9.js.gz +0 -0
  35. package/dist/web/public/mobile-handlers.0f83a608.js.gz +0 -0
  36. package/dist/web/public/mobile-overview.js.gz +0 -0
  37. package/dist/web/public/mobile.cab92e3f.css.gz +0 -0
  38. package/dist/web/public/notification-manager.5d229063.js.gz +0 -0
  39. package/dist/web/public/orchestrator-panel.js.gz +0 -0
  40. package/dist/web/public/panels-ui.344de87d.js.gz +0 -0
  41. package/dist/web/public/ralph-panel.6de2d0f8.js.gz +0 -0
  42. package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
  43. package/dist/web/public/readmymind-ui.js.gz +0 -0
  44. package/dist/web/public/respawn-ui.ff0dae4c.js.gz +0 -0
  45. package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
  46. package/dist/web/public/session-lineage.js.gz +0 -0
  47. package/dist/web/public/session-ui.103656d3.js.gz +0 -0
  48. package/dist/web/public/settings-ui.3261b896.js.gz +0 -0
  49. package/dist/web/public/styles.0d71ea9a.css +1 -0
  50. package/dist/web/public/styles.0d71ea9a.css.br +0 -0
  51. package/dist/web/public/styles.0d71ea9a.css.gz +0 -0
  52. package/dist/web/public/subagent-windows.e6ca799f.js.gz +0 -0
  53. package/dist/web/public/sw.js.gz +0 -0
  54. package/dist/web/public/tab-rail-resize.42c24949.js.gz +0 -0
  55. package/dist/web/public/terminal-ui.5e0c230c.js.gz +0 -0
  56. package/dist/web/public/ultracode-panel.js.gz +0 -0
  57. package/dist/web/public/ultracode-windows.js.gz +0 -0
  58. package/dist/web/public/upload.html.gz +0 -0
  59. package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
  60. package/dist/web/public/vendor/marked.min.js.gz +0 -0
  61. package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
  62. package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
  63. package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
  64. package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
  65. package/dist/web/public/vendor/xterm-predictive-echo.bd6882b8.js.gz +0 -0
  66. package/dist/web/public/vendor/xterm-zerolag-input.6fee72f2.js.gz +0 -0
  67. package/dist/web/public/vendor/xterm.css.gz +0 -0
  68. package/dist/web/public/vendor/xterm.min.js.gz +0 -0
  69. package/dist/web/public/voice-input.4ec670b0.js.gz +0 -0
  70. package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
  71. package/dist/web/public/webview-tabs.js.gz +0 -0
  72. package/dist/web/routes/status-telemetry-routes.js +3 -3
  73. package/dist/web/routes/status-telemetry-routes.js.map +1 -1
  74. package/dist/web/schemas.js +1 -1
  75. package/dist/web/schemas.js.map +1 -1
  76. package/dist/web/server.d.ts +3 -0
  77. package/dist/web/server.d.ts.map +1 -1
  78. package/dist/web/server.js +33 -1
  79. package/dist/web/server.js.map +1 -1
  80. package/dist/web/sse-events.d.ts +1 -1
  81. package/dist/web/sse-events.d.ts.map +1 -1
  82. package/dist/web/sse-events.js +1 -1
  83. package/dist/web/sse-events.js.map +1 -1
  84. package/package.json +1 -1
  85. package/dist/web/public/app.c5cf1b8a.js.br +0 -0
  86. package/dist/web/public/app.c5cf1b8a.js.gz +0 -0
  87. package/dist/web/public/styles.1938fd02.css +0 -1
  88. package/dist/web/public/styles.1938fd02.css.br +0 -0
  89. package/dist/web/public/styles.1938fd02.css.gz +0 -0
package/README.md CHANGED
@@ -64,7 +64,7 @@ curl -fsSL https://getcodeman.com/install | bash
64
64
  This installs Node.js, tmux and a build toolchain if missing (node-pty ships no Linux prebuilds, so it compiles from source), clones Codeman to `~/.codeman/app`, and builds it. A few things worth knowing:
65
65
 
66
66
  - **It asks first.** Every system change (package installs, AI CLI download) is prompted, and a menu at the end lets you choose: run Codeman in this terminal, install it as a background service (systemd/launchd, auto-start on boot), or don't start yet. Nothing runs in the background unless you pick it.
67
- - **Network or local-only, your choice.** The installer asks whether the dashboard should be reachable from other devices on your network (`0.0.0.0`, the default, with a strongly recommended password prompt) or from this machine only (`127.0.0.1`, safest). Skipping the password on a network bind requires an explicit confirmation and ends with a loud warning. A bare `codeman web` started by hand still defaults to loopback.
67
+ - **How it's reachable, your choice.** The installer offers three ways to reach the dashboard: **Tailscale** (loopback bind fronted by `tailscale serve`, so you get `https://<machine>.<tailnet>.ts.net` with a real certificate and your tailnet as the login, no password needed), **any device on your network** (`0.0.0.0`, with a strongly recommended password prompt), or **this machine only** (`127.0.0.1`, safest). Skipping the password on a network bind requires an explicit confirmation and ends with a loud warning. The highlighted default reflects what is already on the machine (Tailscale when it is already in use, your existing binding on a re-run), and a bare Enter never pulls in new software. A bare `codeman web` started by hand still defaults to loopback.
68
68
  - **Re-run to update.** The same one-liner updates a finished install in place: local changes in `~/.codeman/app` are stashed (never discarded), and a running service is restarted and verified. If a first install was interrupted, re-running resumes the full setup instead. `install.sh update` and `install.sh uninstall` also exist.
69
69
  - **CI / headless:** without a terminal attached, steps that would change your system abort with instructions instead of running silently. Set `CODEMAN_NONINTERACTIVE=1` to approve them for automation.
70
70
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @fileoverview Pure parsing + formatting of Claude Code statusline telemetry.
2
+ * @fileoverview Pure parsing + formatting of Claude and Codex plan telemetry.
3
3
  *
4
4
  * Claude Code (v2.1.80+) pipes a JSON blob to a configured `statusLine.command`
5
5
  * on each render. On Pro/Max subscriptions that blob carries a `rate_limits`
@@ -15,7 +15,10 @@
15
15
  * Only those two windows exist (no Opus-weekly field). `rate_limits` is absent
16
16
  * before the first API response and for non-subscriber auth — both yield null.
17
17
  *
18
- * All functions are pure for testability. See `test/usage-telemetry.test.ts`.
18
+ * The Codex parser consumes the read-only `account/rateLimits/read` app-server
19
+ * response and selects only the main `codex` bucket, excluding model-specific
20
+ * buckets. All functions are pure for testability. See
21
+ * `test/usage-telemetry.test.ts` and `test/codex-plan-usage.test.ts`.
19
22
  *
20
23
  * @module usage-telemetry
21
24
  */
@@ -67,6 +70,8 @@ export interface RawStatuslinePayload {
67
70
  * non-subscriber account) so the caller can skip broadcasting.
68
71
  */
69
72
  export declare function parseStatusTelemetry(data: RawStatuslinePayload | undefined): StatusTelemetry | null;
73
+ /** Normalize the main Codex app-server bucket into the chip's two known windows. */
74
+ export declare function parseCodexRateLimitsResponse(value: unknown): StatusTelemetry | null;
70
75
  /**
71
76
  * Current-session status for the in-terminal statusline footer. This is the
72
77
  * "status of the current session" the user sees in Claude's footer — distinct
@@ -1 +1 @@
1
- {"version":3,"file":"usage-telemetry.d.ts","sourceRoot":"","sources":["../src/usage-telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,6CAA6C;AAC7C,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,8EAA8E;IAC9E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,gFAAgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE;QACZ,SAAS,CAAC,EAAE;YAAE,eAAe,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7D,SAAS,CAAC,EAAE;YAAE,eAAe,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC9D,CAAC;IACF,cAAc,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzG,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,KAAK,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnC;AAaD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS,GAAG,eAAe,GAAG,IAAI,CAmBnG;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AASD,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS,GAAG,aAAa,GAAG,IAAI,CAiB/F;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,CAUvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAO7D"}
1
+ {"version":3,"file":"usage-telemetry.d.ts","sourceRoot":"","sources":["../src/usage-telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,6CAA6C;AAC7C,MAAM,WAAW,WAAW;IAC1B,6CAA6C;IAC7C,cAAc,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,yDAAyD;AACzD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,8EAA8E;IAC9E,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,gFAAgF;AAChF,MAAM,WAAW,oBAAoB;IACnC,WAAW,CAAC,EAAE;QACZ,SAAS,CAAC,EAAE;YAAE,eAAe,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7D,SAAS,CAAC,EAAE;YAAE,eAAe,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAC9D,CAAC;IACF,cAAc,CAAC,EAAE;QAAE,eAAe,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACzG,IAAI,CAAC,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,KAAK,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACnC;AA6BD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS,GAAG,eAAe,GAAG,IAAI,CAmBnG;AAED,oFAAoF;AACpF,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAoBnF;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AASD,oEAAoE;AACpE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,GAAG,SAAS,GAAG,aAAa,GAAG,IAAI,CAiB/F;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,MAAM,CAUvE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAO7D"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @fileoverview Pure parsing + formatting of Claude Code statusline telemetry.
2
+ * @fileoverview Pure parsing + formatting of Claude and Codex plan telemetry.
3
3
  *
4
4
  * Claude Code (v2.1.80+) pipes a JSON blob to a configured `statusLine.command`
5
5
  * on each render. On Pro/Max subscriptions that blob carries a `rate_limits`
@@ -15,7 +15,10 @@
15
15
  * Only those two windows exist (no Opus-weekly field). `rate_limits` is absent
16
16
  * before the first API response and for non-subscriber auth — both yield null.
17
17
  *
18
- * All functions are pure for testability. See `test/usage-telemetry.test.ts`.
18
+ * The Codex parser consumes the read-only `account/rateLimits/read` app-server
19
+ * response and selects only the main `codex` bucket, excluding model-specific
20
+ * buckets. All functions are pure for testability. See
21
+ * `test/usage-telemetry.test.ts` and `test/codex-plan-usage.test.ts`.
19
22
  *
20
23
  * @module usage-telemetry
21
24
  */
@@ -59,6 +62,31 @@ export function parseStatusTelemetry(data) {
59
62
  }
60
63
  return t;
61
64
  }
65
+ /** Normalize the main Codex app-server bucket into the chip's two known windows. */
66
+ export function parseCodexRateLimitsResponse(value) {
67
+ if (!value || typeof value !== 'object')
68
+ return null;
69
+ const response = value;
70
+ const snapshot = response.rateLimitsByLimitId?.codex ?? response.rateLimits;
71
+ if (!snapshot || typeof snapshot !== 'object')
72
+ return null;
73
+ const telemetry = {};
74
+ for (const window of [snapshot.primary, snapshot.secondary]) {
75
+ if (!window || typeof window.usedPercent !== 'number' || !Number.isFinite(window.usedPercent))
76
+ continue;
77
+ if (window.windowDurationMins !== 300 && window.windowDurationMins !== 10_080)
78
+ continue;
79
+ const resetsAt = typeof window.resetsAt === 'number' && Number.isFinite(window.resetsAt) && window.resetsAt > 0
80
+ ? Math.round(window.resetsAt * 1000)
81
+ : 0;
82
+ const normalized = { usedPercentage: clampPct(window.usedPercent), resetAt: resetsAt };
83
+ if (window.windowDurationMins === 300)
84
+ telemetry.fiveHour = normalized;
85
+ if (window.windowDurationMins === 10_080)
86
+ telemetry.sevenDay = normalized;
87
+ }
88
+ return telemetry.fiveHour || telemetry.sevenDay ? telemetry : null;
89
+ }
62
90
  /** Group a non-negative integer with thousands separators: 562411 → "562,411". */
63
91
  function withCommas(n) {
64
92
  return Math.max(0, Math.round(n))
@@ -1 +1 @@
1
- {"version":3,"file":"usage-telemetry.js","sourceRoot":"","sources":["../src/usage-telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage-telemetry.js","sourceRoot":"","sources":["../src/usage-telemetry.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@
6
6
  *
7
7
  * @module utils/codex-cli-resolver
8
8
  */
9
+ import { type StatusTelemetry } from '../usage-telemetry.js';
9
10
  /**
10
11
  * Finds the directory containing the `codex` binary.
11
12
  * Checks `which codex` first, then falls back to common install locations.
@@ -14,9 +15,15 @@
14
15
  * @returns Directory path, or null if not found
15
16
  */
16
17
  export declare function resolveCodexDir(): string | null;
18
+ /** Absolute Codex executable path, for direct app-server requests. */
19
+ export declare function resolveCodexBinaryPath(): string | null;
17
20
  /**
18
21
  * Check if Codex CLI is available on the system.
19
22
  */
20
23
  export declare function isCodexAvailable(): boolean;
21
24
  export declare function getCodexNotFoundMessage(): string;
25
+ type CodexRateLimitsRequest = (binaryPath: string, clientVersion: string) => Promise<unknown>;
26
+ /** Read the signed-in host account's main Codex limits without exposing credentials. */
27
+ export declare function readCodexPlanUsage(binaryPath: string, clientVersion: string, request?: CodexRateLimitsRequest): Promise<StatusTelemetry | null>;
28
+ export {};
22
29
  //# sourceMappingURL=codex-cli-resolver.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-cli-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/codex-cli-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD"}
1
+ {"version":3,"file":"codex-cli-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/codex-cli-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAAgC,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAgB3F;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,IAAI,CAE/C;AAED,sEAAsE;AACtE,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAEtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAE1C;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,KAAK,sBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAoE9F,wFAAwF;AACxF,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,OAAO,GAAE,sBAA+C,GACvD,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAEjC"}
@@ -8,7 +8,9 @@
8
8
  */
9
9
  import { join } from 'node:path';
10
10
  import { homedir } from 'node:os';
11
+ import { spawn } from 'node:child_process';
11
12
  import { createCliExecutableResolver, formatCliNotFoundMessage } from './cli-executable-resolver.js';
13
+ import { parseCodexRateLimitsResponse } from '../usage-telemetry.js';
12
14
  /** Common directories where the Codex CLI binary may be installed */
13
15
  const CODEX_SEARCH_DIRS = [
14
16
  join(homedir(), '.codex', 'bin'), // Default install location
@@ -18,7 +20,8 @@ const CODEX_SEARCH_DIRS = [
18
20
  join(homedir(), '.npm-global', 'bin'), // npm global
19
21
  join(homedir(), 'bin'), // User bin
20
22
  ];
21
- const codexResolver = createCliExecutableResolver({ binary: 'codex', searchDirs: CODEX_SEARCH_DIRS });
23
+ const CODEX_BINARY = process.platform === 'win32' ? 'codex.exe' : 'codex';
24
+ const codexResolver = createCliExecutableResolver({ binary: CODEX_BINARY, searchDirs: CODEX_SEARCH_DIRS });
22
25
  const CODEX_NOT_FOUND = 'Codex CLI not found. Install with: npm install -g @openai/codex';
23
26
  /**
24
27
  * Finds the directory containing the `codex` binary.
@@ -30,6 +33,10 @@ const CODEX_NOT_FOUND = 'Codex CLI not found. Install with: npm install -g @open
30
33
  export function resolveCodexDir() {
31
34
  return codexResolver.resolve()?.directory ?? null;
32
35
  }
36
+ /** Absolute Codex executable path, for direct app-server requests. */
37
+ export function resolveCodexBinaryPath() {
38
+ return codexResolver.resolve()?.binaryPath ?? null;
39
+ }
33
40
  /**
34
41
  * Check if Codex CLI is available on the system.
35
42
  */
@@ -39,4 +46,77 @@ export function isCodexAvailable() {
39
46
  export function getCodexNotFoundMessage() {
40
47
  return formatCliNotFoundMessage(CODEX_NOT_FOUND, codexResolver.diagnostics());
41
48
  }
49
+ const APP_SERVER_TIMEOUT_MS = 10_000;
50
+ const APP_SERVER_MAX_OUTPUT_BYTES = 256 * 1024;
51
+ function requestCodexRateLimits(binaryPath, clientVersion) {
52
+ return new Promise((resolve) => {
53
+ let settled = false;
54
+ let initialized = false;
55
+ let buffer = '';
56
+ const child = spawn(binaryPath, ['app-server', '--stdio'], {
57
+ stdio: ['pipe', 'pipe', 'ignore'],
58
+ windowsHide: true,
59
+ });
60
+ const timeout = setTimeout(() => finish(null), APP_SERVER_TIMEOUT_MS);
61
+ const finish = (value) => {
62
+ if (settled)
63
+ return;
64
+ settled = true;
65
+ clearTimeout(timeout);
66
+ child.stdin.end();
67
+ child.kill();
68
+ resolve(value);
69
+ };
70
+ const send = (message) => {
71
+ if (!settled && child.stdin.writable)
72
+ child.stdin.write(`${JSON.stringify(message)}\n`);
73
+ };
74
+ const handleLine = (line) => {
75
+ if (!line.trim())
76
+ return;
77
+ let message;
78
+ try {
79
+ message = JSON.parse(line);
80
+ }
81
+ catch {
82
+ return;
83
+ }
84
+ if (message.id === 1) {
85
+ if (message.error)
86
+ return finish(null);
87
+ if (!initialized) {
88
+ initialized = true;
89
+ send({ method: 'account/rateLimits/read', id: 2 });
90
+ }
91
+ }
92
+ else if (message.id === 2) {
93
+ finish(message.error ? null : message.result);
94
+ }
95
+ };
96
+ child.on('error', () => finish(null));
97
+ child.on('close', () => finish(null));
98
+ child.stdin.on('error', () => finish(null));
99
+ child.stdout.on('data', (chunk) => {
100
+ buffer += chunk.toString('utf8');
101
+ if (Buffer.byteLength(buffer) > APP_SERVER_MAX_OUTPUT_BYTES)
102
+ return finish(null);
103
+ const lines = buffer.split(/\r?\n/);
104
+ buffer = lines.pop() ?? '';
105
+ for (const line of lines)
106
+ handleLine(line);
107
+ });
108
+ send({
109
+ method: 'initialize',
110
+ id: 1,
111
+ params: {
112
+ clientInfo: { name: 'codeman', title: 'Codeman', version: clientVersion },
113
+ capabilities: null,
114
+ },
115
+ });
116
+ });
117
+ }
118
+ /** Read the signed-in host account's main Codex limits without exposing credentials. */
119
+ export async function readCodexPlanUsage(binaryPath, clientVersion, request = requestCodexRateLimits) {
120
+ return parseCodexRateLimitsResponse(await request(binaryPath, clientVersion));
121
+ }
42
122
  //# sourceMappingURL=codex-cli-resolver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-cli-resolver.js","sourceRoot":"","sources":["../../src/utils/codex-cli-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAErG,qEAAqE;AACrE,MAAM,iBAAiB,GAAG;IACxB,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,2BAA2B;IAC7D,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,+BAA+B;IACjE,gBAAgB,EAAE,oBAAoB;IACtC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,aAAa;IAC7C,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,aAAa;IACpD,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,EAAE,WAAW;CACpC,CAAC;AAEF,MAAM,aAAa,GAAG,2BAA2B,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACtG,MAAM,eAAe,GAAG,iEAAiE,CAAC;AAE1F;;;;;;GAMG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,aAAa,CAAC,OAAO,EAAE,EAAE,SAAS,IAAI,IAAI,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO,eAAe,EAAE,KAAK,IAAI,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,uBAAuB;IACrC,OAAO,wBAAwB,CAAC,eAAe,EAAE,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"codex-cli-resolver.js","sourceRoot":"","sources":["../../src/utils/codex-cli-resolver.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,7 @@ export { resolveLocalShell, loginShellArgs } from './shell-resolver.js';
21
21
  export { findClaudeDir, getAugmentedPath, getClaudeCliVersion, getClaudeBinaryPath, getClaudeNotFoundMessage, } from './claude-cli-resolver.js';
22
22
  export { spawnPtyWithHelperRepair } from './node-pty-repair.js';
23
23
  export { resolveOpenCodeDir, getOpenCodeNotFoundMessage } from './opencode-cli-resolver.js';
24
- export { resolveCodexDir, isCodexAvailable, getCodexNotFoundMessage } from './codex-cli-resolver.js';
24
+ export { resolveCodexDir, resolveCodexBinaryPath, isCodexAvailable, getCodexNotFoundMessage, readCodexPlanUsage, } from './codex-cli-resolver.js';
25
25
  export { resolveGeminiDir, isGeminiAvailable, getGeminiNotFoundMessage } from './gemini-cli-resolver.js';
26
26
  export { resolveAntigravityDir, isAntigravityAvailable, getAntigravityNotFoundMessage, } from './antigravity-cli-resolver.js';
27
27
  export { resolvePiDir, isPiAvailable, getPiCliVersion, getPiNotFoundMessage } from './pi-cli-resolver.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,EACb,eAAe,EACf,2BAA2B,EAC3B,SAAS,EACT,iBAAiB,EACjB,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzG,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACpH,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,EACpB,6BAA6B,EAC7B,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,EACb,eAAe,EACf,2BAA2B,EAC3B,SAAS,EACT,iBAAiB,EACjB,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzG,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACpH,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,EACpB,6BAA6B,EAC7B,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,MAAM,4BAA4B,CAAC;AACpC,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -20,7 +20,7 @@ export { resolveLocalShell, loginShellArgs } from './shell-resolver.js';
20
20
  export { findClaudeDir, getAugmentedPath, getClaudeCliVersion, getClaudeBinaryPath, getClaudeNotFoundMessage, } from './claude-cli-resolver.js';
21
21
  export { spawnPtyWithHelperRepair } from './node-pty-repair.js';
22
22
  export { resolveOpenCodeDir, getOpenCodeNotFoundMessage } from './opencode-cli-resolver.js';
23
- export { resolveCodexDir, isCodexAvailable, getCodexNotFoundMessage } from './codex-cli-resolver.js';
23
+ export { resolveCodexDir, resolveCodexBinaryPath, isCodexAvailable, getCodexNotFoundMessage, readCodexPlanUsage, } from './codex-cli-resolver.js';
24
24
  export { resolveGeminiDir, isGeminiAvailable, getGeminiNotFoundMessage } from './gemini-cli-resolver.js';
25
25
  export { resolveAntigravityDir, isAntigravityAvailable, getAntigravityNotFoundMessage, } from './antigravity-cli-resolver.js';
26
26
  export { resolvePiDir, isPiAvailable, getPiCliVersion, getPiNotFoundMessage } from './pi-cli-resolver.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,EACb,eAAe,EACf,2BAA2B,EAC3B,SAAS,EACT,iBAAiB,EACjB,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzG,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACpH,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,EACpB,6BAA6B,EAC7B,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,aAAa,EACb,eAAe,EACf,2BAA2B,EAC3B,SAAS,EACT,iBAAiB,EACjB,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzG,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,6BAA6B,GAC9B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACpH,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,0BAA0B,EAC1B,oBAAoB,EACpB,6BAA6B,EAC7B,mBAAmB,EACnB,cAAc,EACd,aAAa,GACd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
@@ -1,15 +1,17 @@
1
1
  /**
2
2
  * @fileoverview Process-wide last-known plan-usage telemetry (account-global).
3
3
  *
4
- * The status-telemetry route writes the latest broadcast value here; the SSE
5
- * init snapshot (`getLightState`) replays it so the header "Plan Usage Limits"
6
- * chip shows immediately on a fresh page load / SSE reconnect before any new
7
- * statusline render arrives, and without relying on per-browser localStorage.
4
+ * The Claude status-telemetry route and host Codex poll merge their latest
5
+ * values here. The SSE init snapshot (`getLightState`) replays the combined
6
+ * value so the header "Plan Usage Limits" chip shows immediately on a fresh
7
+ * page load / SSE reconnect before either source emits another sample, and
8
+ * without relying on per-browser localStorage.
8
9
  *
9
10
  * Null until the first telemetry of the process; cleared naturally on restart.
10
11
  *
11
12
  * @module plan-usage-latest
12
13
  */
13
- export declare function setLatestPlanUsage(value: Record<string, unknown>): void;
14
+ export declare function setLatestPlanUsage(value: Record<string, unknown>): Record<string, unknown>;
15
+ export declare function setLatestCodexPlanUsage(value: object | null): Record<string, unknown>;
14
16
  export declare function getLatestPlanUsage(): Record<string, unknown> | null;
15
17
  //# sourceMappingURL=plan-usage-latest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan-usage-latest.d.ts","sourceRoot":"","sources":["../../src/web/plan-usage-latest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAEvE;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAEnE"}
1
+ {"version":3,"file":"plan-usage-latest.d.ts","sourceRoot":"","sources":["../../src/web/plan-usage-latest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAI1F;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGrF;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAEnE"}
@@ -1,10 +1,11 @@
1
1
  /**
2
2
  * @fileoverview Process-wide last-known plan-usage telemetry (account-global).
3
3
  *
4
- * The status-telemetry route writes the latest broadcast value here; the SSE
5
- * init snapshot (`getLightState`) replays it so the header "Plan Usage Limits"
6
- * chip shows immediately on a fresh page load / SSE reconnect before any new
7
- * statusline render arrives, and without relying on per-browser localStorage.
4
+ * The Claude status-telemetry route and host Codex poll merge their latest
5
+ * values here. The SSE init snapshot (`getLightState`) replays the combined
6
+ * value so the header "Plan Usage Limits" chip shows immediately on a fresh
7
+ * page load / SSE reconnect before either source emits another sample, and
8
+ * without relying on per-browser localStorage.
8
9
  *
9
10
  * Null until the first telemetry of the process; cleared naturally on restart.
10
11
  *
@@ -12,7 +13,13 @@
12
13
  */
13
14
  let latest = null;
14
15
  export function setLatestPlanUsage(value) {
15
- latest = value;
16
+ const codex = latest?.codex;
17
+ latest = { ...value, ...(codex !== undefined ? { codex } : {}) };
18
+ return latest;
19
+ }
20
+ export function setLatestCodexPlanUsage(value) {
21
+ latest = { ...(latest ?? {}), codex: value };
22
+ return latest;
16
23
  }
17
24
  export function getLatestPlanUsage() {
18
25
  return latest;
@@ -1 +1 @@
1
- {"version":3,"file":"plan-usage-latest.js","sourceRoot":"","sources":["../../src/web/plan-usage-latest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,IAAI,MAAM,GAAmC,IAAI,CAAC;AAElD,MAAM,UAAU,kBAAkB,CAAC,KAA8B;IAC/D,MAAM,GAAG,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"plan-usage-latest.js","sourceRoot":"","sources":["../../src/web/plan-usage-latest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,IAAI,MAAM,GAAmC,IAAI,CAAC;AAElD,MAAM,UAAU,kBAAkB,CAAC,KAA8B;IAC/D,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC;IAC5B,MAAM,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAoB;IAC1D,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC"}
Binary file