pi-harness-runtime 1.1.407 → 1.1.410

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 (207) hide show
  1. package/harness/key-file-audit.ts +2 -2
  2. package/index.ts +78 -0
  3. package/package.json +1 -1
  4. package/packages/a2a-adapter/package.json +1 -1
  5. package/packages/agent-policy/package.json +1 -1
  6. package/packages/architecture-generator/package.json +1 -1
  7. package/packages/auth/package.json +1 -1
  8. package/packages/autonomous-refactor/package.json +1 -1
  9. package/packages/autonomous-runtime/package.json +1 -1
  10. package/packages/cache-strategy/package.json +1 -1
  11. package/packages/capability-registry/package.json +1 -1
  12. package/packages/checkpoint/package.json +1 -1
  13. package/packages/cli-plugin-sdk/package.json +1 -1
  14. package/packages/clipboard/package.json +1 -1
  15. package/packages/clipboard-plugin/package.json +1 -1
  16. package/packages/code-generation/package.json +1 -1
  17. package/packages/code-review/package.json +1 -1
  18. package/packages/codex-adapter/package.json +1 -1
  19. package/packages/codex-watcher/package.json +1 -1
  20. package/packages/config-capture/package.json +1 -1
  21. package/packages/connection-runtime/package.json +1 -1
  22. package/packages/context-compiler/package.json +1 -1
  23. package/packages/context-discovery/package.json +1 -1
  24. package/packages/context-manager/package.json +1 -1
  25. package/packages/contracts/package.json +1 -1
  26. package/packages/cookie-sanitizer/package.json +1 -1
  27. package/packages/cost-optimizer/package.json +1 -1
  28. package/packages/dependency-analyzer/package.json +1 -1
  29. package/packages/django-plugin/package.json +1 -1
  30. package/packages/doc-generator/package.json +1 -1
  31. package/packages/durable-review/package.json +1 -1
  32. package/packages/e2e-tester/package.json +1 -1
  33. package/packages/evaluation-engine/package.json +1 -1
  34. package/packages/evaluation-runner/package.json +1 -1
  35. package/packages/event-bus/package.json +1 -1
  36. package/packages/event-sink/package.json +1 -1
  37. package/packages/event-store/package.json +1 -1
  38. package/packages/experience-replay/package.json +1 -1
  39. package/packages/feedback-collector/package.json +1 -1
  40. package/packages/file-copy-helper/package.json +1 -1
  41. package/packages/framework-detector/package.json +1 -1
  42. package/packages/framework-plugin-sdk/package.json +1 -1
  43. package/packages/frappe-plugin/package.json +1 -1
  44. package/packages/generic-web-plugin/package.json +1 -1
  45. package/packages/health-monitor/package.json +1 -1
  46. package/packages/intent-analyzer/package.json +1 -1
  47. package/packages/jev-judge/package.json +1 -1
  48. package/packages/knowledge-graph/package.json +1 -1
  49. package/packages/knowledge-retrieval/package.json +1 -1
  50. package/packages/laravel-plugin/package.json +1 -1
  51. package/packages/learning-engine/package.json +1 -1
  52. package/packages/logging/package.json +1 -1
  53. package/packages/mcp-adapter/package.json +1 -1
  54. package/packages/memory-engine/package.json +1 -1
  55. package/packages/milestone-manager/package.json +1 -1
  56. package/packages/model-registry/package.json +1 -1
  57. package/packages/nextjs-plugin/package.json +1 -1
  58. package/packages/notification/package.json +1 -1
  59. package/packages/observability/package.json +1 -1
  60. package/packages/okf-indexer/package.json +1 -1
  61. package/packages/paperclip-integration/package.json +1 -1
  62. package/packages/performance-optimizer/package.json +1 -1
  63. package/packages/permission-mode/package.json +1 -1
  64. package/packages/privilege-broker/package.json +1 -1
  65. package/packages/project-analyzer/package.json +1 -1
  66. package/packages/project-bootstrap/package.json +1 -1
  67. package/packages/projection-engine/package.json +1 -1
  68. package/packages/prompt-compiler/package.json +1 -1
  69. package/packages/prompt-versioning/package.json +1 -1
  70. package/packages/provider-adapter-sdk/package.json +1 -1
  71. package/packages/provider-router/package.json +1 -1
  72. package/packages/provider-selector/package.json +1 -1
  73. package/packages/providers/dist/adapters.d.ts +1 -1
  74. package/packages/providers/dist/adapters.d.ts.map +1 -1
  75. package/packages/providers/dist/deepagents-adapter.d.ts +22 -1
  76. package/packages/providers/dist/deepagents-adapter.d.ts.map +1 -1
  77. package/packages/providers/dist/deepagents-adapter.js +3 -8
  78. package/packages/providers/dist/deepagents-adapter.js.map +1 -1
  79. package/packages/providers/package.json +1 -1
  80. package/packages/providers/src/adapters.ts +1 -1
  81. package/packages/providers/src/deepagents-adapter.ts +28 -31
  82. package/packages/qdrant-skills/dist/embedder.d.ts +5 -1
  83. package/packages/qdrant-skills/dist/embedder.d.ts.map +1 -1
  84. package/packages/qdrant-skills/dist/embedder.js +52 -37
  85. package/packages/qdrant-skills/dist/embedder.js.map +1 -1
  86. package/packages/qdrant-skills/package.json +1 -1
  87. package/packages/qdrant-skills/src/embedder.ts +56 -40
  88. package/packages/qdrant-skills/test/embedder.test.ts +97 -0
  89. package/packages/quota-manager/dist/quota-manager.d.ts +1 -1
  90. package/packages/quota-manager/dist/quota-manager.d.ts.map +1 -1
  91. package/packages/quota-manager/dist/quota-manager.js +10 -8
  92. package/packages/quota-manager/dist/quota-manager.js.map +1 -1
  93. package/packages/quota-manager/dist/tui-usage-monitor.d.ts +5 -3
  94. package/packages/quota-manager/dist/tui-usage-monitor.d.ts.map +1 -1
  95. package/packages/quota-manager/dist/tui-usage-monitor.js +30 -10
  96. package/packages/quota-manager/dist/tui-usage-monitor.js.map +1 -1
  97. package/packages/quota-manager/package.json +1 -1
  98. package/packages/quota-manager/src/quota-manager.ts +10 -9
  99. package/packages/quota-manager/src/tui-usage-monitor.ts +40 -17
  100. package/packages/rate-limiter/package.json +1 -1
  101. package/packages/react-vite-plugin/package.json +1 -1
  102. package/packages/relay/package.json +1 -1
  103. package/packages/release-manager/package.json +1 -1
  104. package/packages/requirement-compiler/package.json +1 -1
  105. package/packages/runtime/package.json +1 -1
  106. package/packages/scheduler/package.json +1 -1
  107. package/packages/scheduler-adapter/package.json +1 -1
  108. package/packages/session/package.json +1 -1
  109. package/packages/session-api/package.json +1 -1
  110. package/packages/session-export/package.json +1 -1
  111. package/packages/shared-context/package.json +1 -1
  112. package/packages/skill-mcp-client/package.json +1 -1
  113. package/packages/skill-registry/package.json +1 -1
  114. package/packages/skills/dist/loader.d.ts.map +1 -1
  115. package/packages/skills/dist/loader.js +9 -6
  116. package/packages/skills/dist/loader.js.map +1 -1
  117. package/packages/skills/package.json +1 -1
  118. package/packages/skills/src/loader.ts +13 -6
  119. package/packages/sprint-planner/package.json +1 -1
  120. package/packages/subscription-engine/package.json +1 -1
  121. package/packages/task-compiler/package.json +1 -1
  122. package/packages/telegram/package.json +1 -1
  123. package/packages/tencentdb-memory/package.json +1 -1
  124. package/packages/tencentdb-sync/package.json +1 -1
  125. package/packages/test-data-generator/package.json +1 -1
  126. package/packages/test-generator/package.json +1 -1
  127. package/packages/todo-bd-sync/package.json +1 -1
  128. package/packages/token-estimation/package.json +1 -1
  129. package/packages/token-optimizer/package.json +1 -1
  130. package/packages/tooling-preference/package.json +1 -1
  131. package/packages/trajectory/package.json +1 -1
  132. package/packages/tui/package.json +1 -1
  133. package/packages/two-phase-review/dist/classify.d.ts +56 -0
  134. package/packages/two-phase-review/dist/classify.d.ts.map +1 -0
  135. package/packages/two-phase-review/dist/classify.js +108 -0
  136. package/packages/two-phase-review/dist/classify.js.map +1 -0
  137. package/packages/two-phase-review/dist/index.d.ts +20 -0
  138. package/packages/two-phase-review/dist/index.d.ts.map +1 -0
  139. package/packages/two-phase-review/dist/index.js +14 -0
  140. package/packages/two-phase-review/dist/index.js.map +1 -0
  141. package/packages/two-phase-review/dist/rules.d.ts +81 -0
  142. package/packages/two-phase-review/dist/rules.d.ts.map +1 -0
  143. package/packages/two-phase-review/dist/rules.js +195 -0
  144. package/packages/two-phase-review/dist/rules.js.map +1 -0
  145. package/packages/two-phase-review/dist/runtime.d.ts +70 -0
  146. package/packages/two-phase-review/dist/runtime.d.ts.map +1 -0
  147. package/packages/two-phase-review/dist/runtime.js +298 -0
  148. package/packages/two-phase-review/dist/runtime.js.map +1 -0
  149. package/packages/two-phase-review/dist/scope.d.ts +68 -0
  150. package/packages/two-phase-review/dist/scope.d.ts.map +1 -0
  151. package/packages/two-phase-review/dist/scope.js +205 -0
  152. package/packages/two-phase-review/dist/scope.js.map +1 -0
  153. package/packages/two-phase-review/dist/signals.d.ts +74 -0
  154. package/packages/two-phase-review/dist/signals.d.ts.map +1 -0
  155. package/packages/two-phase-review/dist/signals.js +297 -0
  156. package/packages/two-phase-review/dist/signals.js.map +1 -0
  157. package/packages/two-phase-review/dist/state.d.ts +72 -0
  158. package/packages/two-phase-review/dist/state.d.ts.map +1 -0
  159. package/packages/two-phase-review/dist/state.js +238 -0
  160. package/packages/two-phase-review/dist/state.js.map +1 -0
  161. package/packages/two-phase-review/dist/types.d.ts +62 -0
  162. package/packages/two-phase-review/dist/types.d.ts.map +1 -0
  163. package/packages/two-phase-review/dist/types.js +9 -0
  164. package/packages/two-phase-review/dist/types.js.map +1 -0
  165. package/packages/two-phase-review/package.json +21 -0
  166. package/packages/two-phase-review/src/classify.ts +129 -0
  167. package/packages/two-phase-review/src/index.ts +110 -0
  168. package/packages/two-phase-review/src/rules.ts +236 -0
  169. package/packages/two-phase-review/src/runtime.ts +392 -0
  170. package/packages/two-phase-review/src/scope.ts +247 -0
  171. package/packages/two-phase-review/src/signals.ts +340 -0
  172. package/packages/two-phase-review/src/state.ts +280 -0
  173. package/packages/two-phase-review/src/types.ts +72 -0
  174. package/packages/two-phase-review/test/classify.test.ts +102 -0
  175. package/packages/two-phase-review/test/helpers.ts +72 -0
  176. package/packages/two-phase-review/test/rules.test.ts +150 -0
  177. package/packages/two-phase-review/test/runtime.test.ts +362 -0
  178. package/packages/two-phase-review/test/scope.test.ts +186 -0
  179. package/packages/two-phase-review/test/signals.test.ts +183 -0
  180. package/packages/two-phase-review/test/state.test.ts +201 -0
  181. package/packages/types/package.json +1 -1
  182. package/packages/voice-api/package.json +1 -1
  183. package/packages/webmcp-tester/package.json +1 -1
  184. package/packages/wiki/package.json +1 -1
  185. package/packages/workflow-events/package.json +1 -1
  186. package/packages/workspace-scanner/package.json +1 -1
  187. package/packages/worktree/dist/worktree.d.ts +32 -1
  188. package/packages/worktree/dist/worktree.d.ts.map +1 -1
  189. package/packages/worktree/dist/worktree.js +21 -8
  190. package/packages/worktree/dist/worktree.js.map +1 -1
  191. package/packages/worktree/package.json +1 -1
  192. package/packages/worktree/src/worktree.ts +50 -9
  193. package/packages/worktree/test/worktree.test.ts +27 -27
  194. package/packages/write-review/package.json +1 -1
  195. package/scripts/typecheck-packages.mjs +3 -3
  196. package/packages/providers/adapters.ts +0 -362
  197. package/packages/providers/deepagents-adapter.ts +0 -458
  198. package/packages/providers/glm-usage.ts +0 -248
  199. package/packages/providers/index.ts +0 -85
  200. package/packages/providers/openai-usage.ts +0 -263
  201. package/packages/trajectory/dist/test/store.test.d.ts +0 -2
  202. package/packages/trajectory/dist/test/store.test.d.ts.map +0 -1
  203. package/packages/trajectory/dist/test/store.test.js +0 -228
  204. package/packages/trajectory/dist/test/store.test.js.map +0 -1
  205. package/packages/types/src/agent-worker-types.d.ts +0 -206
  206. package/packages/types/src/agent-worker-types.js +0 -41
  207. package/packages/worktree/worktree.ts +0 -293
@@ -5,6 +5,9 @@
5
5
  * Used to store skills in Qdrant for semantic search.
6
6
  */
7
7
 
8
+ import { existsSync, readFileSync } from "node:fs";
9
+ import { homedir as osHomedir } from "node:os";
10
+ import { join } from "node:path";
8
11
  import type { SkillPoint } from "./client.js";
9
12
 
10
13
  /**
@@ -15,55 +18,68 @@ export interface EmbeddingResult {
15
18
  tokens: number;
16
19
  }
17
20
 
21
+ /** The embeddings endpoint of OpenAI. */
22
+ const OPENAI_EMBEDDINGS_URL = "https://api.openai.com/v1/embeddings";
23
+
24
+ /** The home directory of the current user. */
25
+ function homeDir(): string {
26
+ return process.env.HOME || process.env.USERPROFILE || osHomedir();
27
+ }
28
+
18
29
  /**
19
- * Get OpenAI API key for embeddings
30
+ * Read a key file. A file that cannot be read is no key - the caller must
31
+ * not see an exception of an unreadable file as a broken installation.
20
32
  */
21
- export function getOpenAIApiKey(): string | null {
22
- // 1. Env vars (same priority as Jev)
23
- if (process.env.OPENAI_API_KEY) {
24
- return process.env.OPENAI_API_KEY;
25
- }
26
- if (process.env.TYPESAFE_API_KEY) {
27
- return process.env.TYPESAFE_API_KEY;
28
- }
29
- if (process.env.OPENROUTER_API_KEY) {
30
- return process.env.OPENROUTER_API_KEY;
31
- }
32
-
33
- // 2. Keys file
33
+ function readKeyFile(path: string): string | null {
34
34
  try {
35
- const { existsSync, readFileSync } = require("node:fs");
36
- const homedir = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
37
- const keyPath = `${homedir}/.pi-harness-runtime/keys/openai-api-key.txt`;
38
- if (existsSync(keyPath)) {
39
- const val = readFileSync(keyPath, "utf-8").trim();
40
- if (val.length > 5) return val;
41
- }
35
+ if (!existsSync(path)) return null;
36
+ const value = readFileSync(path, "utf8").trim();
37
+ return value.length > 5 ? value : null;
42
38
  } catch {
43
- // ignore
39
+ return null;
44
40
  }
41
+ }
45
42
 
46
- // 3. pi.dev auth.json (OpenAI OAuth tokens stored by pi.dev login)
43
+ /**
44
+ * The OpenAI token of a pi.dev login (an OAuth access token).
45
+ */
46
+ function readPiAuthToken(): string | null {
47
+ const authPath = join(homeDir(), ".pi", "agent", "auth.json");
47
48
  try {
48
- const { existsSync, readFileSync } = require("node:fs");
49
- const homedir = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
50
- const authPath = `${homedir}/.pi/agent/auth.json`;
51
- if (existsSync(authPath)) {
52
- const auth = JSON.parse(readFileSync(authPath, "utf-8")) as {
53
- openai?: { type?: string; key?: string; access?: string };
54
- "openai-codex"?: { type?: string; key?: string; access?: string };
55
- };
56
- // Try openai first (API key), then openai-codex (OAuth access token)
57
- const entry = auth.openai ?? auth["openai-codex"];
58
- if (entry) {
59
- return entry.access ?? entry.key ?? null;
60
- }
61
- }
49
+ if (!existsSync(authPath)) return null;
50
+ const auth = JSON.parse(readFileSync(authPath, "utf8")) as {
51
+ openai?: { key?: string; access?: string };
52
+ "openai-codex"?: { key?: string; access?: string };
53
+ };
54
+ // The api key first, then the OAuth access token of the codex login.
55
+ const entry = auth.openai ?? auth["openai-codex"];
56
+ if (!entry) return null;
57
+ return (entry.access ?? entry.key ?? "").trim() || null;
62
58
  } catch {
63
- // ignore
59
+ return null;
64
60
  }
61
+ }
62
+
63
+ /**
64
+ * Get the OpenAI API key for embeddings.
65
+ *
66
+ * Only a key of OpenAI belongs here: the embeddings endpoint of OpenAI does
67
+ * not accept the key of another provider. A TypeSafe or an OpenRouter key is
68
+ * a different credential and must never be sent to that endpoint.
69
+ */
70
+ export function getOpenAIApiKey(): string | null {
71
+ // 1. The environment.
72
+ const fromEnv = process.env.OPENAI_API_KEY?.trim();
73
+ if (fromEnv) return fromEnv;
74
+
75
+ // 2. The key file of the installation.
76
+ const fromFile = readKeyFile(
77
+ join(homeDir(), ".pi-harness-runtime", "keys", "openai-api-key.txt"),
78
+ );
79
+ if (fromFile) return fromFile;
65
80
 
66
- return null;
81
+ // 3. pi.dev auth.json (the OpenAI token of a pi.dev login).
82
+ return readPiAuthToken();
67
83
  }
68
84
 
69
85
  /**
@@ -78,7 +94,7 @@ export async function createEmbedding(
78
94
  throw new Error("No OpenAI API key available for embeddings");
79
95
  }
80
96
 
81
- const response = await fetch("https://api.openai.com/v1/embeddings", {
97
+ const response = await fetch(OPENAI_EMBEDDINGS_URL, {
82
98
  method: "POST",
83
99
  headers: {
84
100
  "Content-Type": "application/json",
@@ -0,0 +1,97 @@
1
+ /**
2
+ * The OpenAI key of the embedder.
3
+ *
4
+ * The embeddings endpoint of OpenAI accepts only an OpenAI key. The key of
5
+ * another provider is a different credential and must never be sent there.
6
+ * The loader must also work in ESM, where `require` does not exist.
7
+ */
8
+
9
+ import { describe, it, expect, beforeEach, afterEach } from "bun:test";
10
+ import { mkdirSync, mkdtempSync, rmSync, writeFileSync } from "node:fs";
11
+ import { homedir } from "node:os";
12
+ import { join } from "node:path";
13
+ import { getOpenAIApiKey } from "../src/embedder.js";
14
+
15
+ /** The environment variables the loader looks at. */
16
+ const ENV_KEYS = [
17
+ "OPENAI_API_KEY",
18
+ "TYPESAFE_API_KEY",
19
+ "OPENROUTER_API_KEY",
20
+ "HOME",
21
+ "USERPROFILE",
22
+ ] as const;
23
+
24
+ let saved: Record<string, string | undefined> = {};
25
+ let tempHome: string;
26
+
27
+ beforeEach(() => {
28
+ saved = {};
29
+ for (const key of ENV_KEYS) {
30
+ saved[key] = process.env[key];
31
+ delete process.env[key];
32
+ }
33
+ // The home directory points at a fresh directory, so the test never
34
+ // reads the key of the machine it runs on.
35
+ tempHome = mkdtempSync(join(homedir(), ".test-qdrant-embedder-"));
36
+ process.env.HOME = tempHome;
37
+ process.env.USERPROFILE = tempHome;
38
+ });
39
+
40
+ afterEach(() => {
41
+ for (const key of ENV_KEYS) {
42
+ if (saved[key] === undefined) delete process.env[key];
43
+ else process.env[key] = saved[key];
44
+ }
45
+ rmSync(tempHome, { recursive: true, force: true });
46
+ });
47
+
48
+ /** Write a key file of the installation. */
49
+ function writeKeyFile(name: string, content: string): void {
50
+ const dir = join(tempHome, ".pi-harness-runtime", "keys");
51
+ mkdirSync(dir, { recursive: true });
52
+ writeFileSync(join(dir, name), content, "utf8");
53
+ }
54
+
55
+ describe("the OpenAI key of the embedder", () => {
56
+ it("takes the key of the environment", () => {
57
+ process.env.OPENAI_API_KEY = "sk-openai-from-env";
58
+ expect(getOpenAIApiKey()).toBe("sk-openai-from-env");
59
+ });
60
+
61
+ it("takes the key file of the installation", () => {
62
+ writeKeyFile("openai-api-key.txt", "sk-openai-from-file\n");
63
+ expect(getOpenAIApiKey()).toBe("sk-openai-from-file");
64
+ });
65
+
66
+ it("takes the token of a pi.dev login", () => {
67
+ const dir = join(tempHome, ".pi", "agent");
68
+ mkdirSync(dir, { recursive: true });
69
+ writeFileSync(
70
+ join(dir, "auth.json"),
71
+ JSON.stringify({ openai: { access: "openai-oauth-token" } }),
72
+ "utf8",
73
+ );
74
+ expect(getOpenAIApiKey()).toBe("openai-oauth-token");
75
+ });
76
+
77
+ it("never takes the key of another provider", () => {
78
+ // A TypeSafe key and an OpenRouter key are different credentials:
79
+ // the embeddings endpoint of OpenAI rejects them.
80
+ process.env.TYPESAFE_API_KEY = "ts-key-of-another-provider";
81
+ expect(getOpenAIApiKey()).toBeNull();
82
+
83
+ process.env.OPENROUTER_API_KEY = "or-key-of-another-provider";
84
+ expect(getOpenAIApiKey()).toBeNull();
85
+ });
86
+
87
+ it("prefers the OpenAI key over the key of another provider", () => {
88
+ process.env.OPENAI_API_KEY = "sk-openai-from-env";
89
+ process.env.TYPESAFE_API_KEY = "ts-key-of-another-provider";
90
+ process.env.OPENROUTER_API_KEY = "or-key-of-another-provider";
91
+ expect(getOpenAIApiKey()).toBe("sk-openai-from-env");
92
+ });
93
+
94
+ it("finds no key when there is none", () => {
95
+ expect(getOpenAIApiKey()).toBeNull();
96
+ });
97
+ });
@@ -4,7 +4,7 @@
4
4
  * Collects quota signals from API responses, provider status,
5
5
  * Playwright, and local estimates. Produces provider availability state.
6
6
  */
7
- import type { QuotaSignal, QuotaState } from "../../types/src/runtime-types.js";
7
+ import type { QuotaSignal, QuotaState } from "../../types/dist/runtime-types.js";
8
8
  export interface QuotaSignalInput {
9
9
  provider: string;
10
10
  source: "api_response" | "provider_status" | "playwright" | "local_estimate" | "tui_message";
@@ -1 +1 @@
1
- {"version":3,"file":"quota-manager.d.ts","sourceRoot":"","sources":["../src/quota-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAEhF,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EACH,cAAc,GACd,iBAAiB,GACjB,YAAY,GACZ,gBAAgB,GAChB,aAAa,CAAC;IACjB,UAAU,EAAE,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,YAAY;IACxB,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,YAAY,gBAAgB,GAAE,MAAuB,EAEpD;IAED;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAe1C;IAED;;OAEG;IACH,eAAe,CACd,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAChD,WAAW,GAAG,IAAI,CAkCpB;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CA8B7C;IAED;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAgB1C;IAED;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErC;IAED;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErC;IAED;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM3C;IAED;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAerD;IAED;;OAEG;IACH,UAAU,IAAI,IAAI,CAcjB;IAED;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CA8B1C;CACD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAmCpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CA0CnE"}
1
+ {"version":3,"file":"quota-manager.d.ts","sourceRoot":"","sources":["../src/quota-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAEjF,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EACH,cAAc,GACd,iBAAiB,GACjB,YAAY,GACZ,gBAAgB,GAChB,aAAa,CAAC;IACjB,UAAU,EAAE,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,YAAY;IACxB,OAAO,CAAC,OAAO,CAAyC;IACxD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,YAAY,gBAAgB,GAAE,MAAuB,EAEpD;IAED;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAe1C;IAED;;OAEG;IACH,eAAe,CACd,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAChD,WAAW,GAAG,IAAI,CAkCpB;IAED;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CA8B7C;IAED;;OAEG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAgB1C;IAED;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErC;IAED;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAErC;IAED;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM3C;IAED;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAerD;IAED;;OAEG;IACH,UAAU,IAAI,IAAI,CAcjB;IAED;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CA+B1C;CACD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CAmCpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,IAAI,CA0CnE"}
@@ -40,7 +40,7 @@ export class QuotaManager {
40
40
  // Return most recent across all window types
41
41
  let latest = null;
42
42
  let latestTs = 0;
43
- for (const entry of Array.from(this.signals.entries())) {
43
+ for (const entry of this.signals.entries()) {
44
44
  const [k, sigs] = entry;
45
45
  if (k.startsWith(`${provider}:`)) {
46
46
  const mostRecent = sigs.sort((a, b) => Date.parse(b.capturedAt) - Date.parse(a.capturedAt))[0];
@@ -87,7 +87,7 @@ export class QuotaManager {
87
87
  getSignals(provider) {
88
88
  const result = [];
89
89
  const cutoff = Date.now() - this.staleThresholdMs;
90
- for (const entry of Array.from(this.signals.entries())) {
90
+ for (const entry of this.signals.entries()) {
91
91
  const [key, sigs] = entry;
92
92
  if (key.startsWith(`${provider}:`)) {
93
93
  for (const signal of sigs) {
@@ -143,7 +143,7 @@ export class QuotaManager {
143
143
  */
144
144
  clearStale() {
145
145
  const cutoff = Date.now() - this.staleThresholdMs;
146
- for (const entry of Array.from(this.signals.entries())) {
146
+ for (const entry of this.signals.entries()) {
147
147
  const [key, sigs] = entry;
148
148
  const fresh = sigs.filter((s) => Date.parse(s.capturedAt) >= cutoff);
149
149
  if (fresh.length === 0) {
@@ -162,11 +162,13 @@ export class QuotaManager {
162
162
  for (const provider of providers) {
163
163
  const state = this.getProviderState(provider);
164
164
  const latest = this.getLatestSignal(provider);
165
- const status = state.exhausted
166
- ? "EXHAUSTED"
167
- : state.limited
168
- ? "LIMITED"
169
- : "AVAILABLE";
165
+ let status = "AVAILABLE";
166
+ if (state.exhausted) {
167
+ status = "EXHAUSTED";
168
+ }
169
+ else if (state.limited) {
170
+ status = "LIMITED";
171
+ }
170
172
  lines.push(`${provider}: ${status}`);
171
173
  if (latest) {
172
174
  lines.push(` Latest: ${latest.usedPct ?? 0}% used`);
@@ -1 +1 @@
1
- {"version":3,"file":"quota-manager.js","sourceRoot":"","sources":["../src/quota-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"quota-manager.js","sourceRoot":"","sources":["../src/quota-manager.ts"],"names":[],"mappings":"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"}
@@ -15,8 +15,10 @@
15
15
  */
16
16
  import { EventEmitter } from "node:events";
17
17
  import type { QuotaManager } from "./quota-manager.js";
18
+ /** The providers the monitor can recognize. */
19
+ export type TUIProvider = "openai" | "glm" | "minimax" | "anthropic" | "openrouter";
18
20
  export interface TUIUsageSignal {
19
- provider: "openai" | "glm" | "anthropic" | "openrouter" | "unknown";
21
+ provider: TUIProvider | "unknown";
20
22
  timestamp: string;
21
23
  /** Usage percentage (0-100), if available */
22
24
  usedPct?: number;
@@ -49,11 +51,11 @@ export declare class TUIUsageMonitor extends EventEmitter {
49
51
  /**
50
52
  * Detect which provider the message is about
51
53
  */
52
- detectProvider(message: string): "openai" | "glm" | "anthropic" | "openrouter" | null;
54
+ detectProvider(message: string): TUIProvider | null;
53
55
  /**
54
56
  * Get the last signal for a provider
55
57
  */
56
- getLastSignal(provider: "openai" | "glm" | "anthropic" | "openrouter"): TUIUsageSignal | null;
58
+ getLastSignal(provider: TUIProvider): TUIUsageSignal | null;
57
59
  /**
58
60
  * Get all last signals
59
61
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tui-usage-monitor.d.ts","sourceRoot":"","sources":["../src/tui-usage-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,SAAS,EAAE,QAAQ,GAAG,gBAAgB,GAAG,YAAY,GAAG,SAAS,CAAC;IAClE,uBAAuB;IACvB,eAAe,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACrC,iDAAiD;IACjD,YAAY,EAAE,YAAY,CAAC;IAC3B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AA8DD,qBAAa,eAAgB,SAAQ,YAAY;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,WAAW,CAA0C;IAE7D,YAAY,MAAM,EAAE,qBAAqB,EAIxC;IAED;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA4BrD;IAED;;OAEG;IACH,cAAc,CACb,OAAO,EAAE,MAAM,GACb,QAAQ,GAAG,KAAK,GAAG,WAAW,GAAG,YAAY,GAAG,IAAI,CAStD;IAED;;OAEG;IACH,aAAa,CACZ,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,WAAW,GAAG,YAAY,GACrD,cAAc,GAAG,IAAI,CAEvB;IAED;;OAEG;IACH,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAE/C;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAEZ;IAED;;OAEG;IACH,OAAO,CAAC,WAAW;IAqCnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAsCvB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAcjC;;OAEG;IACH,OAAO,CAAC,cAAc;IA2CtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAmB5B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE;IACH,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,KAAK,IAAI,CAAC;CAC3E,EACD,MAAM,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,eAAe,CAgBjB"}
1
+ {"version":3,"file":"tui-usage-monitor.d.ts","sourceRoot":"","sources":["../src/tui-usage-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,+CAA+C;AAC/C,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;AAEpF,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,WAAW,GAAG,SAAS,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0BAA0B;IAC1B,SAAS,EAAE,QAAQ,GAAG,gBAAgB,GAAG,YAAY,GAAG,SAAS,CAAC;IAClE,uBAAuB;IACvB,eAAe,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACrC,iDAAiD;IACjD,YAAY,EAAE,YAAY,CAAC;IAC3B,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AA4ED,qBAAa,eAAgB,SAAQ,YAAY;IAChD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,WAAW,CAA0C;IAE7D,YAAY,MAAM,EAAE,qBAAqB,EAIxC;IAED;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA4BrD;IAED;;OAEG;IACH,cAAc,CACb,OAAO,EAAE,MAAM,GACb,WAAW,GAAG,IAAI,CAepB;IAED;;OAEG;IACH,aAAa,CACZ,QAAQ,EAAE,WAAW,GACnB,cAAc,GAAG,IAAI,CAEvB;IAED;;OAEG;IACH,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAE/C;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAEZ;IAED;;OAEG;IACH,OAAO,CAAC,WAAW;IAqCnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAsCvB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAcjC;;OAEG;IACH,OAAO,CAAC,cAAc;IA2CtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAmB5B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE;IACH,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,KAAK,IAAI,CAAC;CAC3E,EACD,MAAM,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1B,eAAe,CAgBjB"}
@@ -17,14 +17,19 @@ import { EventEmitter } from "node:events";
17
17
  /**
18
18
  * Provider-specific patterns
19
19
  */
20
+ /**
21
+ * The patterns that name the provider.
22
+ *
23
+ * A pattern that names the provider wins over a bare error code: the message
24
+ * "Claude overloaded_error" is about Anthropic, not about the provider that
25
+ * happens to use the error code first.
26
+ */
20
27
  const PROVIDER_PATTERNS = {
21
28
  openai: [
22
29
  /(?:^|\s)OpenAI(?:$|\s)/i,
23
30
  /(?:^|\s)GPT(?:$|\s)/i,
24
31
  /openai.*(?:quota|limit|exhausted)/i,
25
32
  /gpt.*(?:quota|limit|exhausted)/i,
26
- /insufficient_quota/i,
27
- /context_length_exceeded/i,
28
33
  /openai.*rate.?limit/i,
29
34
  /429.*openai/i,
30
35
  /openai.*context.*(?:window|length)/i,
@@ -37,30 +42,39 @@ const PROVIDER_PATTERNS = {
37
42
  /glm.*context.*(?:window|length)/i,
38
43
  /glm.*rate.?limit/i,
39
44
  /glm.*429/i,
40
- /code.*1308/i, // GLM specific error code
41
- /Usage limit reached/i,
42
- /5 hour.*quota/i,
43
45
  ],
44
46
  minimax: [
45
47
  /(?:^|\s)Minimax(?:$|\s)/i,
46
48
  /minimax.*(?:overload|surge|busy)/i,
47
- /overloaded_error/i,
48
49
  /529.*minimax/i,
49
- /peak.?hour.*surge/i,
50
50
  ],
51
51
  anthropic: [
52
52
  /(?:^|\s)Claude(?:$|\s)/i,
53
53
  /(?:^|\s)Anthropic(?:$|\s)/i,
54
54
  /anthropic.*(?:quota|limit|exhausted)/i,
55
55
  /claude.*(?:quota|limit|exhausted)/i,
56
- /overloaded_error/i,
57
- /rate_limit_error/i,
58
56
  ],
59
57
  openrouter: [
60
58
  /(?:^|\s)OpenRouter(?:$|\s)/i,
61
59
  /openrouter.*(?:quota|limit|exhausted)/i,
62
60
  ],
63
61
  };
62
+ /**
63
+ * The error codes without a provider name.
64
+ *
65
+ * They are checked only when no pattern names a provider. A code that several
66
+ * providers share belongs to the one that reported it first.
67
+ */
68
+ const GENERIC_PATTERNS = [
69
+ { provider: "openai", pattern: /insufficient_quota/i },
70
+ { provider: "openai", pattern: /context_length_exceeded/i },
71
+ { provider: "glm", pattern: /code.*1308/i },
72
+ { provider: "glm", pattern: /Usage limit reached/i },
73
+ { provider: "glm", pattern: /5 hour.*quota/i },
74
+ { provider: "minimax", pattern: /overloaded_error/i },
75
+ { provider: "minimax", pattern: /peak.?hour.*surge/i },
76
+ { provider: "anthropic", pattern: /rate_limit_error/i },
77
+ ];
64
78
  const RESET_TIME_PATTERNS = [
65
79
  // GLM specific: "reset at 2026-08-25 01:47:16" or "reset at 2026-08-25T01:47:16"
66
80
  /reset\s+(?:at\s+)?(\d{4}-\d{2}-\d{2}[T ]?\d{2}:\d{2}:\d{2})/i,
@@ -108,6 +122,7 @@ export class TUIUsageMonitor extends EventEmitter {
108
122
  * Detect which provider the message is about
109
123
  */
110
124
  detectProvider(message) {
125
+ // The named provider first, the bare error codes second.
111
126
  for (const [provider, patterns] of Object.entries(PROVIDER_PATTERNS)) {
112
127
  for (const pattern of patterns) {
113
128
  if (pattern.test(message)) {
@@ -115,6 +130,11 @@ export class TUIUsageMonitor extends EventEmitter {
115
130
  }
116
131
  }
117
132
  }
133
+ for (const { provider, pattern } of GENERIC_PATTERNS) {
134
+ if (pattern.test(message)) {
135
+ return provider;
136
+ }
137
+ }
118
138
  return null;
119
139
  }
120
140
  /**
@@ -221,7 +241,7 @@ export class TUIUsageMonitor extends EventEmitter {
221
241
  // GLM full datetime format: "2026-08-25 01:47:16" or "2026-08-25T01:47:16"
222
242
  const datetimeStr = match[1].replace(" ", "T");
223
243
  const date = new Date(datetimeStr);
224
- if (!isNaN(date.getTime())) {
244
+ if (!Number.isNaN(date.getTime())) {
225
245
  return date.toISOString();
226
246
  }
227
247
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tui-usage-monitor.js","sourceRoot":"","sources":["../src/tui-usage-monitor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA2B3C;;GAEG;AACH,MAAM,iBAAiB,GAAG;IACzB,MAAM,EAAE;QACP,yBAAyB;QACzB,sBAAsB;QACtB,oCAAoC;QACpC,iCAAiC;QACjC,qBAAqB;QACrB,0BAA0B;QAC1B,sBAAsB;QACtB,cAAc;QACd,qCAAqC;KACrC;IACD,GAAG,EAAE;QACJ,sBAAsB;QACtB,wBAAwB;QACxB,iCAAiC;QACjC,mCAAmC;QACnC,kCAAkC;QAClC,mBAAmB;QACnB,WAAW;QACX,aAAa,EAAE,0BAA0B;QACzC,sBAAsB;QACtB,gBAAgB;KAChB;IACD,OAAO,EAAE;QACR,0BAA0B;QAC1B,mCAAmC;QACnC,mBAAmB;QACnB,eAAe;QACf,oBAAoB;KACpB;IAED,SAAS,EAAE;QACV,yBAAyB;QACzB,4BAA4B;QAC5B,uCAAuC;QACvC,oCAAoC;QACpC,mBAAmB;QACnB,mBAAmB;KACnB;IACD,UAAU,EAAE;QACX,6BAA6B;QAC7B,wCAAwC;KACxC;CACD,CAAC;AAEF,MAAM,mBAAmB,GAAG;IAC3B,iFAAiF;IACjF,8DAA8D;IAC9D,8CAA8C;IAC9C,gCAAgC;IAChC,oCAAoC;IACpC,gCAAgC;CAChC,CAAC;AAEF,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAEpC,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC/B,YAAY,CAAe;IAC3B,KAAK,CAAU;IACxB,WAAW,GAAgC,IAAI,GAAG,EAAE,CAAC;IAE7D,YAAY,MAA6B;QACxC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,OAAe;QAC7B,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACb,CAAC;QAED,mBAAmB;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO,IAAI,CAAC;QACb,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEvC,yBAAyB;QACzB,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAElC,aAAa;QACb,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAE5B,YAAY;QACZ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAED;;OAEG;IACH,cAAc,CACb,OAAe;QAEf,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACtE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAChC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC3B,OAAO,QAAyD,CAAC;gBAClE,CAAC;YACF,CAAC;QACF,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;OAEG;IACH,aAAa,CACZ,QAAuD;QAEvD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,iBAAiB;QAChB,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK;QACJ,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,WAAW,CAClB,OAAe,EACf,QAAuD;QAEvD,uBAAuB;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAEhD,mBAAmB;QACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE9C,gCAAgC;QAChC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEjE,yBAAyB;QACzB,MAAM,SAAS,GACd,OAAO,KAAK,SAAS;YACpB,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC;YACzC,CAAC,CAAC,OAAO,IAAI,GAAG,CAAC;QAEnB,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,qBAAqB;YACrB,OAAO,IAAI,CAAC;QACb,CAAC;QAED,OAAO;YACN,QAAQ;YACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO;YACP,YAAY,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO;YACvD,SAAS;YACT,QAAQ;YACR,SAAS;YACT,eAAe,EAAE,OAAO;SACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe,CACtB,OAAe;QAEf,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QAEvC,iBAAiB;QACjB,IACC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5B,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC3B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAC3B,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACzB,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,EAC9B,CAAC;YACF,OAAO,gBAAgB,CAAC;QACzB,CAAC;QAED,aAAa;QACb,IACC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;YACzB,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;YACxB,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EACrC,CAAC;YACF,OAAO,YAAY,CAAC;QACrB,CAAC;QAED,yBAAyB;QACzB,IACC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1B,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;YAC9B,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5B,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EACzB,CAAC;YACF,OAAO,QAAQ,CAAC;QACjB,CAAC;QAED,OAAO,SAAS,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,OAAe;QAChD,MAAM,QAAQ,GAAG;YAChB,WAAW;YACX,OAAO;YACP,OAAO;YACP,YAAY;YACZ,KAAK;YACL,UAAU;YACV,SAAS;SACT,CAAC;QACF,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACvC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,OAAe;QACrC,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;YAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,KAAK,EAAE,CAAC;gBACX,6DAA6D;gBAC7D,IAAI,OAAO,KAAK,mBAAmB,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAClE,2EAA2E;oBAC3E,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC/C,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;oBACnC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;wBAC5B,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC3B,CAAC;gBACF,CAAC;gBAED,qBAAqB;gBACrB,IAAI,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEtC,eAAe;gBACf,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,EAAE,CAAC,CAAC;gBAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAEpC,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE;oBAAE,IAAI,IAAI,EAAE,CAAC;gBAClC,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE;oBAAE,IAAI,GAAG,CAAC,CAAC;gBAElC,wBAAwB;gBACxB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;gBACvB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAEvC,4CAA4C;gBAC5C,IAAI,SAAS,IAAI,GAAG,EAAE,CAAC;oBACtB,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC5C,CAAC;gBAED,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC;YAChC,CAAC;QACF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,MAAsB;QAClD,gCAAgC;QAChC,IAAI,UAAU,GAA0C,IAAI,CAAC;QAE7D,IAAI,MAAM,CAAC,SAAS,KAAK,gBAAgB,EAAE,CAAC;YAC3C,8DAA8D;YAC9D,UAAU,GAAG,OAAO,CAAC;QACtB,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,MAAM,EAAE,aAAa;YACrB,UAAU;YACV,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;SACzB,CAAC,CAAC;IACJ,CAAC;CACD;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACpC,YAA0B,EAC1B,EAEC,EACD,MAA4B;IAE5B,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC;QACnC,YAAY;QACZ,KAAK,EAAE,MAAM,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,sBAAsB;IACtB,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAA0B,EAAE,EAAE;QAC7C,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAA0B,EAAE,EAAE;QAC/C,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"tui-usage-monitor.js","sourceRoot":"","sources":["../src/tui-usage-monitor.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/quota-manager",
3
- "version": "1.1.407",
3
+ "version": "1.1.410",
4
4
  "description": "pi-harness-runtime — quota-manager",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -5,7 +5,7 @@
5
5
  * Playwright, and local estimates. Produces provider availability state.
6
6
  */
7
7
 
8
- import type { QuotaSignal, QuotaState } from "../../types/src/runtime-types.js";
8
+ import type { QuotaSignal, QuotaState } from "../../types/dist/runtime-types.js";
9
9
 
10
10
  export interface QuotaSignalInput {
11
11
  provider: string;
@@ -72,7 +72,7 @@ export class QuotaManager {
72
72
  let latest: QuotaSignal | null = null;
73
73
  let latestTs = 0;
74
74
 
75
- for (const entry of Array.from(this.signals.entries())) {
75
+ for (const entry of this.signals.entries()) {
76
76
  const [k, sigs] = entry;
77
77
  if (k.startsWith(`${provider}:`)) {
78
78
  const mostRecent = sigs.sort(
@@ -134,7 +134,7 @@ export class QuotaManager {
134
134
  const result: QuotaSignal[] = [];
135
135
  const cutoff = Date.now() - this.staleThresholdMs;
136
136
 
137
- for (const entry of Array.from(this.signals.entries())) {
137
+ for (const entry of this.signals.entries()) {
138
138
  const [key, sigs] = entry;
139
139
  if (key.startsWith(`${provider}:`)) {
140
140
  for (const signal of sigs) {
@@ -199,7 +199,7 @@ export class QuotaManager {
199
199
  clearStale(): void {
200
200
  const cutoff = Date.now() - this.staleThresholdMs;
201
201
 
202
- for (const entry of Array.from(this.signals.entries())) {
202
+ for (const entry of this.signals.entries()) {
203
203
  const [key, sigs] = entry;
204
204
  const fresh = sigs.filter(
205
205
  (s: QuotaSignal) => Date.parse(s.capturedAt) >= cutoff,
@@ -222,11 +222,12 @@ export class QuotaManager {
222
222
  const state = this.getProviderState(provider);
223
223
  const latest = this.getLatestSignal(provider);
224
224
 
225
- const status = state.exhausted
226
- ? "EXHAUSTED"
227
- : state.limited
228
- ? "LIMITED"
229
- : "AVAILABLE";
225
+ let status = "AVAILABLE";
226
+ if (state.exhausted) {
227
+ status = "EXHAUSTED";
228
+ } else if (state.limited) {
229
+ status = "LIMITED";
230
+ }
230
231
 
231
232
  lines.push(`${provider}: ${status}`);
232
233