pi-harness-runtime 0.9.7 → 0.9.11

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 (134) hide show
  1. package/CHANGELOG.md +24 -12
  2. package/README.md +42 -5
  3. package/footer-status.ts +108 -11
  4. package/harness/e2e/minimax-quota-scraper.ts +46 -4
  5. package/index.ts +224 -16
  6. package/mirror.ts +194 -18
  7. package/package.json +1 -1
  8. package/packages/a2a-adapter/package.json +1 -1
  9. package/packages/auth/package.json +1 -1
  10. package/packages/autonomous-refactor/package.json +1 -1
  11. package/packages/cache-strategy/package.json +1 -1
  12. package/packages/capability-registry/package.json +1 -1
  13. package/packages/checkpoint/package.json +1 -1
  14. package/packages/cli-plugin-sdk/package.json +1 -1
  15. package/packages/code-generation/package.json +1 -1
  16. package/packages/code-review/package.json +1 -1
  17. package/packages/codex-adapter/package.json +1 -1
  18. package/packages/context-compiler/package.json +1 -1
  19. package/packages/context-manager/package.json +1 -1
  20. package/packages/cookie-sanitizer/README.md +141 -0
  21. package/packages/cookie-sanitizer/dist/atomic-write.d.ts +38 -0
  22. package/packages/cookie-sanitizer/dist/atomic-write.d.ts.map +1 -0
  23. package/packages/cookie-sanitizer/dist/atomic-write.js +67 -0
  24. package/packages/cookie-sanitizer/dist/atomic-write.js.map +1 -0
  25. package/packages/cookie-sanitizer/dist/detect-format.d.ts +36 -0
  26. package/packages/cookie-sanitizer/dist/detect-format.d.ts.map +1 -0
  27. package/packages/cookie-sanitizer/dist/detect-format.js +88 -0
  28. package/packages/cookie-sanitizer/dist/detect-format.js.map +1 -0
  29. package/packages/cookie-sanitizer/dist/index.d.ts +41 -0
  30. package/packages/cookie-sanitizer/dist/index.d.ts.map +1 -0
  31. package/packages/cookie-sanitizer/dist/index.js +39 -0
  32. package/packages/cookie-sanitizer/dist/index.js.map +1 -0
  33. package/packages/cookie-sanitizer/dist/infer-provider.d.ts +29 -0
  34. package/packages/cookie-sanitizer/dist/infer-provider.d.ts.map +1 -0
  35. package/packages/cookie-sanitizer/dist/infer-provider.js +96 -0
  36. package/packages/cookie-sanitizer/dist/infer-provider.js.map +1 -0
  37. package/packages/cookie-sanitizer/dist/normalize.d.ts +26 -0
  38. package/packages/cookie-sanitizer/dist/normalize.d.ts.map +1 -0
  39. package/packages/cookie-sanitizer/dist/normalize.js +75 -0
  40. package/packages/cookie-sanitizer/dist/normalize.js.map +1 -0
  41. package/packages/cookie-sanitizer/dist/parse-json.d.ts +45 -0
  42. package/packages/cookie-sanitizer/dist/parse-json.d.ts.map +1 -0
  43. package/packages/cookie-sanitizer/dist/parse-json.js +108 -0
  44. package/packages/cookie-sanitizer/dist/parse-json.js.map +1 -0
  45. package/packages/cookie-sanitizer/dist/parse-netscape.d.ts +43 -0
  46. package/packages/cookie-sanitizer/dist/parse-netscape.d.ts.map +1 -0
  47. package/packages/cookie-sanitizer/dist/parse-netscape.js +99 -0
  48. package/packages/cookie-sanitizer/dist/parse-netscape.js.map +1 -0
  49. package/packages/cookie-sanitizer/dist/sync.d.ts +62 -0
  50. package/packages/cookie-sanitizer/dist/sync.d.ts.map +1 -0
  51. package/packages/cookie-sanitizer/dist/sync.js +266 -0
  52. package/packages/cookie-sanitizer/dist/sync.js.map +1 -0
  53. package/packages/cookie-sanitizer/dist/types.d.ts +100 -0
  54. package/packages/cookie-sanitizer/dist/types.d.ts.map +1 -0
  55. package/packages/cookie-sanitizer/dist/types.js +13 -0
  56. package/packages/cookie-sanitizer/dist/types.js.map +1 -0
  57. package/packages/cookie-sanitizer/dist/watcher.d.ts +51 -0
  58. package/packages/cookie-sanitizer/dist/watcher.d.ts.map +1 -0
  59. package/packages/cookie-sanitizer/dist/watcher.js +148 -0
  60. package/packages/cookie-sanitizer/dist/watcher.js.map +1 -0
  61. package/packages/cookie-sanitizer/package.json +27 -0
  62. package/packages/cookie-sanitizer/src/atomic-write.ts +79 -0
  63. package/packages/cookie-sanitizer/src/detect-format.ts +102 -0
  64. package/packages/cookie-sanitizer/src/index.ts +89 -0
  65. package/packages/cookie-sanitizer/src/infer-provider.ts +103 -0
  66. package/packages/cookie-sanitizer/src/normalize.ts +92 -0
  67. package/packages/cookie-sanitizer/src/parse-json.ts +122 -0
  68. package/packages/cookie-sanitizer/src/parse-netscape.ts +118 -0
  69. package/packages/cookie-sanitizer/src/sync.ts +304 -0
  70. package/packages/cookie-sanitizer/src/types.ts +101 -0
  71. package/packages/cookie-sanitizer/src/watcher.ts +180 -0
  72. package/packages/cookie-sanitizer/test/infer.test.ts +110 -0
  73. package/packages/cookie-sanitizer/test/normalize.test.ts +113 -0
  74. package/packages/cookie-sanitizer/test/parse.test.ts +204 -0
  75. package/packages/cookie-sanitizer/test/sync.test.ts +231 -0
  76. package/packages/cookie-sanitizer/test/watcher.test.ts +27 -0
  77. package/packages/cookie-sanitizer/tsconfig.json +8 -0
  78. package/packages/cost-optimizer/package.json +1 -1
  79. package/packages/django-plugin/package.json +1 -1
  80. package/packages/doc-generator/package.json +1 -1
  81. package/packages/evaluation-engine/package.json +1 -1
  82. package/packages/evaluation-runner/package.json +1 -1
  83. package/packages/experience-replay/package.json +1 -1
  84. package/packages/feedback-collector/package.json +1 -1
  85. package/packages/framework-detector/package.json +1 -1
  86. package/packages/framework-plugin-sdk/package.json +1 -1
  87. package/packages/frappe-plugin/package.json +1 -1
  88. package/packages/generic-web-plugin/package.json +1 -1
  89. package/packages/health-monitor/package.json +1 -1
  90. package/packages/laravel-plugin/package.json +1 -1
  91. package/packages/learning-engine/package.json +1 -1
  92. package/packages/mcp-adapter/package.json +1 -1
  93. package/packages/memory-engine/package.json +1 -1
  94. package/packages/model-registry/package.json +1 -1
  95. package/packages/nextjs-plugin/package.json +1 -1
  96. package/packages/notification/package.json +1 -1
  97. package/packages/observability/package.json +1 -1
  98. package/packages/performance-optimizer/package.json +1 -1
  99. package/packages/project-analyzer/package.json +1 -1
  100. package/packages/prompt-compiler/package.json +1 -1
  101. package/packages/prompt-versioning/package.json +1 -1
  102. package/packages/provider-adapter-sdk/package.json +1 -1
  103. package/packages/provider-router/package.json +1 -1
  104. package/packages/provider-selector/package.json +1 -1
  105. package/packages/providers/dist/index.d.ts +1 -0
  106. package/packages/providers/dist/index.d.ts.map +1 -1
  107. package/packages/providers/dist/index.js +1 -0
  108. package/packages/providers/dist/index.js.map +1 -1
  109. package/packages/providers/dist/provider-id.d.ts +39 -0
  110. package/packages/providers/dist/provider-id.d.ts.map +1 -0
  111. package/packages/providers/dist/provider-id.js +96 -0
  112. package/packages/providers/dist/provider-id.js.map +1 -0
  113. package/packages/providers/package.json +1 -1
  114. package/packages/providers/src/index.ts +1 -0
  115. package/packages/providers/src/provider-id.ts +110 -0
  116. package/packages/quota-manager/package.json +1 -1
  117. package/packages/rate-limiter/package.json +1 -1
  118. package/packages/react-vite-plugin/package.json +1 -1
  119. package/packages/release-manager/package.json +1 -1
  120. package/packages/requirement-compiler/package.json +1 -1
  121. package/packages/runtime/package.json +1 -1
  122. package/packages/scheduler/package.json +1 -1
  123. package/packages/session/package.json +1 -1
  124. package/packages/shared-context/package.json +1 -1
  125. package/packages/skill-registry/package.json +1 -1
  126. package/packages/sprint-planner/package.json +1 -1
  127. package/packages/task-compiler/package.json +1 -1
  128. package/packages/test-data-generator/package.json +1 -1
  129. package/packages/test-generator/package.json +1 -1
  130. package/packages/token-estimation/package.json +1 -1
  131. package/packages/token-optimizer/package.json +1 -1
  132. package/packages/tui/package.json +1 -1
  133. package/packages/types/package.json +1 -1
  134. package/packages/worktree/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/health-monitor",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "type": "module",
5
5
  "description": "Health monitoring and auto-healing",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/laravel-plugin",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Laravel framework analysis — artisan commands, Eloquent models, Blade",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/learning-engine",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Learning engine for extracting lessons from runtime execution (RFC-0058)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/mcp-adapter",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "type": "module",
5
5
  "description": "MCP server adapter for pi-harness — exposes harness capabilities as MCP tools/resources/prompts (RFC-0068)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/memory-engine",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Memory engine with OKF integration for durable knowledge management (RFC-0060)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/model-registry",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Model Registry for pi-harness-runtime — centralized model metadata with pricing",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/nextjs-plugin",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Next.js framework detection and analysis for pi-harness-runtime (RFC-0062)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/notification",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "pi-harness-runtime — notification",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/observability",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Comprehensive observability system with structured logging, tracing, metrics, and alerting",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/performance-optimizer",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Performance optimization analyzer for pi-harness runtime (RFC-0056)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/project-analyzer",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Project analysis system for pi-harness-runtime - detects frameworks, rules, and project structure",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/prompt-compiler",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Deterministic prompt compiler for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/prompt-versioning",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "type": "module",
5
5
  "description": "Version control for prompts with rollback support (RFC-0019)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/provider-adapter-sdk",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "SDK for building, testing, and registering AI provider adapters",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/provider-router",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Enhanced Provider Router for pi-harness-runtime — intelligent routing with capabilities, costs, and quotas",
5
5
  "type": "module",
6
6
  "main": "./dist/provider-router.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/provider-selector",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Multi-Provider Selector — route requests by cost, quality, and latency (RFC-0012)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -7,4 +7,5 @@ export * from "./adapters.js";
7
7
  export * from "./deepagents-adapter.js";
8
8
  export * from "./glm-usage.js";
9
9
  export * from "./openai-usage.js";
10
+ export * from "./provider-id.js";
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -7,4 +7,5 @@ export * from "./adapters.js";
7
7
  export * from "./deepagents-adapter.js";
8
8
  export * from "./glm-usage.js";
9
9
  export * from "./openai-usage.js";
10
+ export * from "./provider-id.js";
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,eAAe,CAAC;AAC9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Provider ID — single source of truth for "which provider does this model id belong to".
3
+ *
4
+ * Used by:
5
+ * - `index.ts` to gate fetcher calls (replaces the old `isMiniMaxModel` check)
6
+ * - `mirror.ts` to key per-provider records
7
+ * - the footer renderer to label lines correctly
8
+ * - the cookie sanitizer and quota manager
9
+ *
10
+ * Provider boundaries (model-id prefix → provider id):
11
+ *
12
+ * | Model id prefix | Provider | Notes |
13
+ * |-----------------|----------------|--------------------------------------|
14
+ * | `minimax/` | minimax | Playwright scrape path |
15
+ * | `openai/` | openai | TUI signal path |
16
+ * | `openai-codex/` | openai-codex | OAuth (different auth shape) |
17
+ * | `zai/` | glm | Z.ai / Zhipu |
18
+ * | `zhipu/` | glm | alt alias |
19
+ * | `anthropic/` | anthropic | TUI signal path |
20
+ * | `openrouter/` | openrouter | TUI signal path |
21
+ * | other | null | unknown — caller decides default |
22
+ *
23
+ * Match is case-insensitive on the prefix portion.
24
+ *
25
+ * The set is intentionally small and explicit. To add a provider: add
26
+ * a row to MODEL_PREFIXES and to the sanitization doc in
27
+ * wiki/bugs/multi-provider-usage-status.md.
28
+ */
29
+ export type KnownProvider = "minimax" | "openai" | "openai-codex" | "glm" | "anthropic" | "openrouter";
30
+ export type ProviderId = KnownProvider | (string & {});
31
+ /** Return the provider id for a model id, or null if unknown. */
32
+ export declare function providerFromModelId(modelId: string | null | undefined): ProviderId | null;
33
+ /** Display name for the provider (used in the footer label). */
34
+ export declare function providerDisplayName(provider: ProviderId): string;
35
+ /** True if this provider has a continuous scrape path today (only MiniMax). */
36
+ export declare function providerHasContinuousScrape(provider: ProviderId): boolean;
37
+ /** True if this provider has a TUI-driven signal path today. */
38
+ export declare function providerHasTUISignal(provider: ProviderId): boolean;
39
+ //# sourceMappingURL=provider-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-id.d.ts","sourceRoot":"","sources":["../src/provider-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,MAAM,MAAM,aAAa,GACtB,SAAS,GACT,QAAQ,GACR,cAAc,GACd,KAAK,GACL,WAAW,GACX,YAAY,CAAC;AAEhB,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAYvD,iEAAiE;AACjE,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,UAAU,GAAG,IAAI,CAqBnB;AAED,gEAAgE;AAChE,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAiBhE;AAED,+EAA+E;AAC/E,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAEzE;AAED,gEAAgE;AAChE,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAQlE"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Provider ID — single source of truth for "which provider does this model id belong to".
3
+ *
4
+ * Used by:
5
+ * - `index.ts` to gate fetcher calls (replaces the old `isMiniMaxModel` check)
6
+ * - `mirror.ts` to key per-provider records
7
+ * - the footer renderer to label lines correctly
8
+ * - the cookie sanitizer and quota manager
9
+ *
10
+ * Provider boundaries (model-id prefix → provider id):
11
+ *
12
+ * | Model id prefix | Provider | Notes |
13
+ * |-----------------|----------------|--------------------------------------|
14
+ * | `minimax/` | minimax | Playwright scrape path |
15
+ * | `openai/` | openai | TUI signal path |
16
+ * | `openai-codex/` | openai-codex | OAuth (different auth shape) |
17
+ * | `zai/` | glm | Z.ai / Zhipu |
18
+ * | `zhipu/` | glm | alt alias |
19
+ * | `anthropic/` | anthropic | TUI signal path |
20
+ * | `openrouter/` | openrouter | TUI signal path |
21
+ * | other | null | unknown — caller decides default |
22
+ *
23
+ * Match is case-insensitive on the prefix portion.
24
+ *
25
+ * The set is intentionally small and explicit. To add a provider: add
26
+ * a row to MODEL_PREFIXES and to the sanitization doc in
27
+ * wiki/bugs/multi-provider-usage-status.md.
28
+ */
29
+ const MODEL_PREFIXES = [
30
+ { prefix: "minimax/", provider: "minimax" },
31
+ { prefix: "openai-codex/", provider: "openai-codex" },
32
+ { prefix: "openai/", provider: "openai" },
33
+ { prefix: "anthropic/", provider: "anthropic" },
34
+ { prefix: "openrouter/", provider: "openrouter" },
35
+ { prefix: "zai/", provider: "glm" },
36
+ { prefix: "zhipu/", provider: "glm" },
37
+ ];
38
+ /** Return the provider id for a model id, or null if unknown. */
39
+ export function providerFromModelId(modelId) {
40
+ if (!modelId || typeof modelId !== "string")
41
+ return null;
42
+ const lower = modelId.toLowerCase();
43
+ for (const { prefix, provider } of MODEL_PREFIXES) {
44
+ if (lower.startsWith(prefix))
45
+ return provider;
46
+ }
47
+ // Some model ids may be just the provider name (no `/` separator) —
48
+ // common when the user picks via a friendly picker.
49
+ if (lower.startsWith("minimax"))
50
+ return "minimax";
51
+ if (lower.startsWith("openai-codex"))
52
+ return "openai-codex";
53
+ if (lower.startsWith("openai"))
54
+ return "openai";
55
+ if (lower.startsWith("anthropic") || lower.startsWith("claude"))
56
+ return "anthropic";
57
+ if (lower.startsWith("openrouter"))
58
+ return "openrouter";
59
+ if (lower.startsWith("zai") ||
60
+ lower.startsWith("zhipu") ||
61
+ lower.startsWith("glm"))
62
+ return "glm";
63
+ return null;
64
+ }
65
+ /** Display name for the provider (used in the footer label). */
66
+ export function providerDisplayName(provider) {
67
+ switch (provider) {
68
+ case "minimax":
69
+ return "MiniMax";
70
+ case "openai":
71
+ return "OpenAI";
72
+ case "openai-codex":
73
+ return "OpenAI Codex";
74
+ case "glm":
75
+ return "GLM";
76
+ case "anthropic":
77
+ return "Anthropic";
78
+ case "openrouter":
79
+ return "OpenRouter";
80
+ default:
81
+ return provider;
82
+ }
83
+ }
84
+ /** True if this provider has a continuous scrape path today (only MiniMax). */
85
+ export function providerHasContinuousScrape(provider) {
86
+ return provider === "minimax";
87
+ }
88
+ /** True if this provider has a TUI-driven signal path today. */
89
+ export function providerHasTUISignal(provider) {
90
+ return (provider === "openai" ||
91
+ provider === "openai-codex" ||
92
+ provider === "glm" ||
93
+ provider === "anthropic" ||
94
+ provider === "openrouter");
95
+ }
96
+ //# sourceMappingURL=provider-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-id.js","sourceRoot":"","sources":["../src/provider-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAYH,MAAM,cAAc,GAAoD;IACvE,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE;IAC3C,EAAE,MAAM,EAAE,eAAe,EAAE,QAAQ,EAAE,cAAc,EAAE;IACrD,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;IACzC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE;IAC/C,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE;IACjD,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE;IACnC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE;CACrC,CAAC;AAEF,iEAAiE;AACjE,MAAM,UAAU,mBAAmB,CAClC,OAAkC;IAElC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,KAAK,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,cAAc,EAAE,CAAC;QACnD,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,QAAQ,CAAC;IAC/C,CAAC;IACD,oEAAoE;IACpE,oDAAoD;IACpD,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,IAAI,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,cAAc,CAAC;IAC5D,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChD,IAAI,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC;QAC9D,OAAO,WAAW,CAAC;IACpB,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,YAAY,CAAC;IACxD,IACC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QACvB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;QACzB,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QAEvB,OAAO,KAAK,CAAC;IACd,OAAO,IAAI,CAAC;AACb,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,mBAAmB,CAAC,QAAoB;IACvD,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,SAAS;YACb,OAAO,SAAS,CAAC;QAClB,KAAK,QAAQ;YACZ,OAAO,QAAQ,CAAC;QACjB,KAAK,cAAc;YAClB,OAAO,cAAc,CAAC;QACvB,KAAK,KAAK;YACT,OAAO,KAAK,CAAC;QACd,KAAK,WAAW;YACf,OAAO,WAAW,CAAC;QACpB,KAAK,YAAY;YAChB,OAAO,YAAY,CAAC;QACrB;YACC,OAAO,QAAQ,CAAC;IAClB,CAAC;AACF,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,2BAA2B,CAAC,QAAoB;IAC/D,OAAO,QAAQ,KAAK,SAAS,CAAC;AAC/B,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,oBAAoB,CAAC,QAAoB;IACxD,OAAO,CACN,QAAQ,KAAK,QAAQ;QACrB,QAAQ,KAAK,cAAc;QAC3B,QAAQ,KAAK,KAAK;QAClB,QAAQ,KAAK,WAAW;QACxB,QAAQ,KAAK,YAAY,CACzB,CAAC;AACH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/providers",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "pi-harness-runtime — providers",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -8,3 +8,4 @@ export * from "./adapters.js";
8
8
  export * from "./deepagents-adapter.js";
9
9
  export * from "./glm-usage.js";
10
10
  export * from "./openai-usage.js";
11
+ export * from "./provider-id.js";
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Provider ID — single source of truth for "which provider does this model id belong to".
3
+ *
4
+ * Used by:
5
+ * - `index.ts` to gate fetcher calls (replaces the old `isMiniMaxModel` check)
6
+ * - `mirror.ts` to key per-provider records
7
+ * - the footer renderer to label lines correctly
8
+ * - the cookie sanitizer and quota manager
9
+ *
10
+ * Provider boundaries (model-id prefix → provider id):
11
+ *
12
+ * | Model id prefix | Provider | Notes |
13
+ * |-----------------|----------------|--------------------------------------|
14
+ * | `minimax/` | minimax | Playwright scrape path |
15
+ * | `openai/` | openai | TUI signal path |
16
+ * | `openai-codex/` | openai-codex | OAuth (different auth shape) |
17
+ * | `zai/` | glm | Z.ai / Zhipu |
18
+ * | `zhipu/` | glm | alt alias |
19
+ * | `anthropic/` | anthropic | TUI signal path |
20
+ * | `openrouter/` | openrouter | TUI signal path |
21
+ * | other | null | unknown — caller decides default |
22
+ *
23
+ * Match is case-insensitive on the prefix portion.
24
+ *
25
+ * The set is intentionally small and explicit. To add a provider: add
26
+ * a row to MODEL_PREFIXES and to the sanitization doc in
27
+ * wiki/bugs/multi-provider-usage-status.md.
28
+ */
29
+
30
+ export type KnownProvider =
31
+ | "minimax"
32
+ | "openai"
33
+ | "openai-codex"
34
+ | "glm"
35
+ | "anthropic"
36
+ | "openrouter";
37
+
38
+ export type ProviderId = KnownProvider | (string & {});
39
+
40
+ const MODEL_PREFIXES: Array<{ prefix: string; provider: ProviderId }> = [
41
+ { prefix: "minimax/", provider: "minimax" },
42
+ { prefix: "openai-codex/", provider: "openai-codex" },
43
+ { prefix: "openai/", provider: "openai" },
44
+ { prefix: "anthropic/", provider: "anthropic" },
45
+ { prefix: "openrouter/", provider: "openrouter" },
46
+ { prefix: "zai/", provider: "glm" },
47
+ { prefix: "zhipu/", provider: "glm" },
48
+ ];
49
+
50
+ /** Return the provider id for a model id, or null if unknown. */
51
+ export function providerFromModelId(
52
+ modelId: string | null | undefined,
53
+ ): ProviderId | null {
54
+ if (!modelId || typeof modelId !== "string") return null;
55
+ const lower = modelId.toLowerCase();
56
+ for (const { prefix, provider } of MODEL_PREFIXES) {
57
+ if (lower.startsWith(prefix)) return provider;
58
+ }
59
+ // Some model ids may be just the provider name (no `/` separator) —
60
+ // common when the user picks via a friendly picker.
61
+ if (lower.startsWith("minimax")) return "minimax";
62
+ if (lower.startsWith("openai-codex")) return "openai-codex";
63
+ if (lower.startsWith("openai")) return "openai";
64
+ if (lower.startsWith("anthropic") || lower.startsWith("claude"))
65
+ return "anthropic";
66
+ if (lower.startsWith("openrouter")) return "openrouter";
67
+ if (
68
+ lower.startsWith("zai") ||
69
+ lower.startsWith("zhipu") ||
70
+ lower.startsWith("glm")
71
+ )
72
+ return "glm";
73
+ return null;
74
+ }
75
+
76
+ /** Display name for the provider (used in the footer label). */
77
+ export function providerDisplayName(provider: ProviderId): string {
78
+ switch (provider) {
79
+ case "minimax":
80
+ return "MiniMax";
81
+ case "openai":
82
+ return "OpenAI";
83
+ case "openai-codex":
84
+ return "OpenAI Codex";
85
+ case "glm":
86
+ return "GLM";
87
+ case "anthropic":
88
+ return "Anthropic";
89
+ case "openrouter":
90
+ return "OpenRouter";
91
+ default:
92
+ return provider;
93
+ }
94
+ }
95
+
96
+ /** True if this provider has a continuous scrape path today (only MiniMax). */
97
+ export function providerHasContinuousScrape(provider: ProviderId): boolean {
98
+ return provider === "minimax";
99
+ }
100
+
101
+ /** True if this provider has a TUI-driven signal path today. */
102
+ export function providerHasTUISignal(provider: ProviderId): boolean {
103
+ return (
104
+ provider === "openai" ||
105
+ provider === "openai-codex" ||
106
+ provider === "glm" ||
107
+ provider === "anthropic" ||
108
+ provider === "openrouter"
109
+ );
110
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/quota-manager",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "pi-harness-runtime — quota-manager",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/rate-limiter",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "type": "module",
5
5
  "description": "Rate limiting with token bucket algorithm (RFC-0023)",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/react-vite-plugin",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "React/Vite framework analysis — components, config, TypeScript setup",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/release-manager",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "type": "module",
5
5
  "description": "Release management for pi-harness",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/requirement-compiler",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Compiles raw requirements into validated CompiledRequirement with ambiguity detection and risk tagging",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/runtime",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "pi-harness-runtime — runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/scheduler",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "pi-harness-runtime — scheduler",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/session",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Session management system for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/shared-context",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "pi-harness-runtime — shared-context",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/skill-registry",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Skill Registry for pi-harness-runtime — dynamic skill discovery and invocation",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/sprint-planner",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "type": "module",
5
5
  "description": "Sprint planning engine for pi-harness",
6
6
  "main": "dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/task-compiler",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Task Compiler for pi-harness-runtime — produces deterministic task DAG from CompiledRequirement",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi/test-data-generator",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Test data generation for pi-harness-runtime",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/test-generator",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Auto-Test Generator — generate unit and E2E tests from source code (RFC-0013)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/token-estimation",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "pi-harness-runtime — token-estimation",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/token-optimizer",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Token Budget Optimizer — maximize prompt value within token limits (RFC-0011)",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/tui",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "pi-harness-runtime — tui",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/types",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "Shared TypeScript types for pi-harness-runtime packages",
5
5
  "type": "module",
6
6
  "main": "./src/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pi-harness/worktree",
3
- "version": "0.9.6",
3
+ "version": "0.9.11",
4
4
  "description": "pi-harness-runtime — worktree",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",