pi-harness-runtime 1.1.83 → 1.1.85
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.
- package/harness/e2e/chatgpt-quota-scraper.ts +56 -7
- package/index.ts +14 -3
- package/package.json +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/architecture-generator/package.json +1 -1
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard-plugin/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/config-capture/package.json +1 -1
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/file-copy-helper/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/jev-judge/dist/index.d.ts +2 -2
- package/packages/jev-judge/dist/index.d.ts.map +1 -1
- package/packages/jev-judge/dist/index.js +24 -4
- package/packages/jev-judge/dist/index.js.map +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/jev-judge/src/index.ts +25 -5
- package/packages/knowledge-graph/package.json +1 -1
- package/packages/knowledge-retrieval/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/milestone-manager/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/package.json +1 -1
- package/packages/observability/package.json +1 -1
- package/packages/okf-indexer/package.json +1 -1
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/privilege-broker/package.json +1 -1
- package/packages/project-analyzer/package.json +1 -1
- package/packages/project-bootstrap/package.json +1 -1
- package/packages/projection-engine/package.json +1 -1
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler-adapter/package.json +1 -1
- package/packages/session/package.json +1 -1
- package/packages/session-api/package.json +1 -1
- package/packages/session-export/package.json +1 -1
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-mcp-client/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/sprint-planner/package.json +1 -1
- package/packages/subscription-engine/package.json +1 -1
- package/packages/task-compiler/package.json +1 -1
- package/packages/tencentdb-memory/package.json +1 -1
- package/packages/tencentdb-sync/package.json +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/todo-bd-sync/package.json +1 -1
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/trajectory/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/workflow-events/package.json +1 -1
- package/packages/workspace-scanner/package.json +1 -1
- package/packages/worktree/package.json +1 -1
- package/packages/write-review/package.json +1 -1
|
@@ -29,6 +29,12 @@ import { homedir } from "node:os";
|
|
|
29
29
|
|
|
30
30
|
export interface ChatGPTQuotaData {
|
|
31
31
|
provider: "openai" | "openai-codex";
|
|
32
|
+
/** 5h used percentage (0-100) */
|
|
33
|
+
h5UsedPct: number;
|
|
34
|
+
/** When the 5h window resets (e.g., "4h 30m") */
|
|
35
|
+
h5ResetsAt: string;
|
|
36
|
+
/** Epoch ms when the 5h window resets */
|
|
37
|
+
h5ResetsAtEpoch?: number;
|
|
32
38
|
/** Weekly used percentage (0-100) */
|
|
33
39
|
weeklyUsedPct: number;
|
|
34
40
|
/** When the weekly window resets (e.g., "5d 16h") */
|
|
@@ -394,6 +400,12 @@ export class ChatGPTQuotaScraper {
|
|
|
394
400
|
reset_after_seconds?: number;
|
|
395
401
|
reset_at?: number;
|
|
396
402
|
};
|
|
403
|
+
secondary_window?: {
|
|
404
|
+
used_percent?: number;
|
|
405
|
+
limit_window_seconds?: number;
|
|
406
|
+
reset_after_seconds?: number;
|
|
407
|
+
reset_at?: number;
|
|
408
|
+
};
|
|
397
409
|
};
|
|
398
410
|
credits?: {
|
|
399
411
|
has_credits?: boolean;
|
|
@@ -402,23 +414,60 @@ export class ChatGPTQuotaScraper {
|
|
|
402
414
|
plan_type?: string;
|
|
403
415
|
};
|
|
404
416
|
|
|
417
|
+
// primary_window = 5h, secondary_window = weekly
|
|
405
418
|
const primaryWindow = data?.rate_limit?.primary_window;
|
|
406
|
-
const
|
|
407
|
-
|
|
408
|
-
|
|
419
|
+
const secondaryWindow = data?.rate_limit?.secondary_window;
|
|
420
|
+
|
|
421
|
+
// Determine which is 5h (smaller window) and which is weekly
|
|
422
|
+
const FIVE_HOURS_SEC = 5 * 60 * 60; // 18000 seconds
|
|
423
|
+
let h5UsedPct = 0;
|
|
424
|
+
let h5ResetAfter = 0;
|
|
425
|
+
let h5ResetAt: number | undefined;
|
|
426
|
+
let weeklyUsedPct = 0;
|
|
427
|
+
let weeklyResetAfter = 0;
|
|
428
|
+
let weeklyResetAt: number | undefined;
|
|
429
|
+
|
|
430
|
+
// Classify windows by duration
|
|
431
|
+
if (primaryWindow) {
|
|
432
|
+
const duration = primaryWindow.limit_window_seconds ?? 0;
|
|
433
|
+
if (duration <= FIVE_HOURS_SEC) {
|
|
434
|
+
h5UsedPct = primaryWindow.used_percent ?? 0;
|
|
435
|
+
h5ResetAfter = primaryWindow.reset_after_seconds ?? 0;
|
|
436
|
+
h5ResetAt = primaryWindow.reset_at;
|
|
437
|
+
} else {
|
|
438
|
+
weeklyUsedPct = primaryWindow.used_percent ?? 0;
|
|
439
|
+
weeklyResetAfter = primaryWindow.reset_after_seconds ?? 0;
|
|
440
|
+
weeklyResetAt = primaryWindow.reset_at;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
if (secondaryWindow) {
|
|
444
|
+
const duration = secondaryWindow.limit_window_seconds ?? 0;
|
|
445
|
+
if (duration <= FIVE_HOURS_SEC) {
|
|
446
|
+
h5UsedPct = secondaryWindow.used_percent ?? 0;
|
|
447
|
+
h5ResetAfter = secondaryWindow.reset_after_seconds ?? 0;
|
|
448
|
+
h5ResetAt = secondaryWindow.reset_at;
|
|
449
|
+
} else {
|
|
450
|
+
weeklyUsedPct = secondaryWindow.used_percent ?? 0;
|
|
451
|
+
weeklyResetAfter = secondaryWindow.reset_after_seconds ?? 0;
|
|
452
|
+
weeklyResetAt = secondaryWindow.reset_at;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
409
455
|
|
|
410
456
|
if (!this.config.quiet) {
|
|
411
457
|
console.log(
|
|
412
|
-
`[DEBUG ChatGPTQuotaScraper]
|
|
458
|
+
`[DEBUG ChatGPTQuotaScraper] 5h: ${h5UsedPct}%, Weekly: ${weeklyUsedPct}%`,
|
|
413
459
|
);
|
|
414
460
|
}
|
|
415
461
|
|
|
416
462
|
return {
|
|
417
463
|
provider: "openai",
|
|
464
|
+
h5UsedPct,
|
|
465
|
+
h5ResetsAt: formatRemainsSeconds(h5ResetAfter),
|
|
466
|
+
h5ResetsAtEpoch: h5ResetAt ? h5ResetAt * 1000 : undefined,
|
|
418
467
|
weeklyUsedPct,
|
|
419
|
-
weeklyResetsAt: formatRemainsSeconds(
|
|
420
|
-
weeklyResetsAtEpoch:
|
|
421
|
-
resetAfterSeconds,
|
|
468
|
+
weeklyResetsAt: formatRemainsSeconds(weeklyResetAfter),
|
|
469
|
+
weeklyResetsAtEpoch: weeklyResetAt ? weeklyResetAt * 1000 : undefined,
|
|
470
|
+
resetAfterSeconds: weeklyResetAfter,
|
|
422
471
|
creditBalance: data.credits?.has_credits ? data.credits.balance : undefined,
|
|
423
472
|
planType: data.plan_type,
|
|
424
473
|
apiEndpoint: USAGE_API,
|
package/index.ts
CHANGED
|
@@ -74,9 +74,20 @@ import { scheduleAutoResume, cancelAutoResume } from "./harness/index.js";
|
|
|
74
74
|
// Lazy import - only loads when packages/jev-judge exists and API key available
|
|
75
75
|
async function initAutoContinue(pi: ExtensionAPI): Promise<void> {
|
|
76
76
|
try {
|
|
77
|
-
// Check if
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
// Check if Jev API key is available (env var or keys file)
|
|
78
|
+
const homedir = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
|
|
79
|
+
const keysDir = `${homedir}/.pi-harness-runtime/keys`;
|
|
80
|
+
const { readFileSync, existsSync } = await import("fs");
|
|
81
|
+
const hasEnvKey =
|
|
82
|
+
process.env.TYPESAFE_API_KEY || process.env.OPENROUTER_API_KEY;
|
|
83
|
+
const hasFileKey =
|
|
84
|
+
existsSync(`${keysDir}/jev-api-key.txt`) &&
|
|
85
|
+
readFileSync(`${keysDir}/jev-api-key.txt`, "utf8").trim().length > 10;
|
|
86
|
+
|
|
87
|
+
if (!hasEnvKey && !hasFileKey) {
|
|
88
|
+
console.log(
|
|
89
|
+
"[auto-continue] No Jev API key found. Set TYPESAFE_API_KEY env or create ~/.pi-harness-runtime/keys/jev-api-key.txt"
|
|
90
|
+
);
|
|
80
91
|
return;
|
|
81
92
|
}
|
|
82
93
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pi-harness/capability-registry",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.85",
|
|
4
4
|
"description": "Capability Registry for pi-harness-runtime — tracks model capabilities and enables capability-based routing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -35,8 +35,8 @@ export declare const ENV_KEYS: {
|
|
|
35
35
|
readonly OPENROUTER_API_KEY: "OPENROUTER_API_KEY";
|
|
36
36
|
};
|
|
37
37
|
/**
|
|
38
|
-
* Get API key from environment
|
|
39
|
-
* Priority: TYPESAFE_API_KEY > OPENROUTER_API_KEY
|
|
38
|
+
* Get API key from environment or keys file
|
|
39
|
+
* Priority: TYPESAFE_API_KEY env > OPENROUTER_API_KEY env > keys file
|
|
40
40
|
*/
|
|
41
41
|
export declare function getApiKeyFromEnv(): string | undefined;
|
|
42
42
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EACV,cAAc,EAEd,YAAY,EAGZ,mBAAmB,EAInB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,eAAO,MAAM,QAAQ;aACnB,gBAAgB,EAAE,kBAAkB;aACpC,kBAAkB,EAAE,oBAAoB;CAChC,CAAC;AAEX;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EACV,cAAc,EAEd,YAAY,EAGZ,mBAAmB,EAInB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAMpB;;GAEG;AACH,eAAO,MAAM,QAAQ;aACnB,gBAAgB,EAAE,kBAAkB;aACpC,kBAAkB,EAAE,oBAAoB;CAChC,CAAC;AAEX;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAyBrD;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,QAAQ,CAQzE;AAYD;;GAEG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAA2B;IAEzC,YAAY,MAAM,EAAE,cAAc,EAWjC;IAED;;;;;;OAMG;IACG,QAAQ,CAAC,CAAC,SAAS,MAAM,EAC7B,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CA6FjC;IAED;;OAEG;IACG,IAAI,CACR,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;KAAE,CAAC,CAUlE;IAED;;OAEG;IACG,MAAM,CAAC,CAAC,SAAS,MAAM,EAC3B,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,EAAE,GACX,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAU5C;IAED;;OAEG;IACH,iBAAiB,CACf,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,MAAqC,GAC/C,iBAAiB,CASnB;IAED;;OAEG;IACG,aAAa,CAAC,CAAC,SAAS,MAAM,EAClC,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,EAC3B,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,EAC1B,OAAO,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GACrC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC,CAkBnC;IAOD,OAAO,CAAC,aAAa;IAkCrB,OAAO,CAAC,aAAa;CAStB;AAGD,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACxE,YAAY,EAAE,SAAS,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -37,12 +37,32 @@ export const ENV_KEYS = {
|
|
|
37
37
|
OPENROUTER_API_KEY: "OPENROUTER_API_KEY",
|
|
38
38
|
};
|
|
39
39
|
/**
|
|
40
|
-
* Get API key from environment
|
|
41
|
-
* Priority: TYPESAFE_API_KEY > OPENROUTER_API_KEY
|
|
40
|
+
* Get API key from environment or keys file
|
|
41
|
+
* Priority: TYPESAFE_API_KEY env > OPENROUTER_API_KEY env > keys file
|
|
42
42
|
*/
|
|
43
43
|
export function getApiKeyFromEnv() {
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
// First check environment variables
|
|
45
|
+
const envKey = process.env[ENV_KEYS.TYPESAFE_API_KEY] ||
|
|
46
|
+
process.env[ENV_KEYS.OPENROUTER_API_KEY];
|
|
47
|
+
if (envKey)
|
|
48
|
+
return envKey;
|
|
49
|
+
// Fall back to keys file (e.g., ~/.pi-harness-runtime/keys/jev-api-key.txt)
|
|
50
|
+
const homedir = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
|
|
51
|
+
const keysDir = `${homedir}/.pi-harness-runtime/keys`;
|
|
52
|
+
const keyFile = `${keysDir}/jev-api-key.txt`;
|
|
53
|
+
try {
|
|
54
|
+
const { readFileSync, existsSync } = require("fs");
|
|
55
|
+
if (existsSync(keyFile)) {
|
|
56
|
+
const key = readFileSync(keyFile, "utf8").trim();
|
|
57
|
+
if (key && key.length > 10) {
|
|
58
|
+
return key;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Ignore file read errors
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
46
66
|
}
|
|
47
67
|
/**
|
|
48
68
|
* Check if Jev API key is available
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAeH,+CAA+C;AAC/C,qDAAqD;AACrD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,gBAAgB,EAAE,kBAAkB;IACpC,kBAAkB,EAAE,oBAAoB;CAChC,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAeH,+CAA+C;AAC/C,qDAAqD;AACrD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,gBAAgB,EAAE,kBAAkB;IACpC,kBAAkB,EAAE,oBAAoB;CAChC,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,oCAAoC;IACpC,MAAM,MAAM,GACV,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IAC3C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,4EAA4E;IAC5E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,cAAc,CAAC;IAC9E,MAAM,OAAO,GAAG,GAAG,OAAO,2BAA2B,CAAC;IACtD,MAAM,OAAO,GAAG,GAAG,OAAO,kBAAkB,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;YACjD,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBAC3B,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAgC;IAC7D,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;IAClC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,CAAC,gBAAgB,OAAO,QAAQ,CAAC,kBAAkB,kBAAkB,CAC5G,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE,8BAA8B;IACvC,KAAK,EAAE,mBAAmB;IAC1B,gBAAgB,EAAE,GAAG;IACrB,SAAS,EAAE,KAAK;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,QAAQ;IACX,MAAM,CAAS;IACf,MAAM,CAA2B;IAEzC,YAAY,MAAsB;QAChC,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,cAAc;YACjB,GAAG,MAAM;SACkB,CAAC;QAE9B,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;YAC1B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;YAC5B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;SAC/B,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,CACZ,KAAsB,EACtB,SAA0B;QAE1B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,oCAAoC;QACpC,MAAM,QAAQ,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAE3E,gCAAgC;QAChC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;YAC/D,MAAM,WAAW,GAAG,CAAgB,CAAC;YACrC,MAAM,KAAK,GAA4B,EAAE,EAAE,EAAE,CAAC;YAC9C,IAAI,WAAW,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAChC,KAAK,CAAC,IAAI,GAAG,MAAM,CAAC;gBACpB,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;YAChD,CAAC;iBAAM,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACzC,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACtB,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;gBAC9C,KAAK,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;YACtC,CAAC;iBAAM,IAAI,WAAW,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACxC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;gBACrB,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC,YAAY,CAAC;gBAC9C,IAAI,WAAW,CAAC,GAAG,KAAK,SAAS;oBAAE,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;gBAC/D,IAAI,WAAW,CAAC,GAAG,KAAK,SAAS;oBAAE,KAAK,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;YACjE,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACzD,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE;wDACqC;iBAC/C;gBACD;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,UAAU,QAAQ;;;EAGnC,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;;mEAE0B;iBAC1D;aACF;YACD,eAAe,EAAE;gBACf,IAAI,EAAE,aAAa;aACpB;YACD,WAAW,EAAE,GAAG,EAAE,2CAA2C;SAC9D,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAEzC,iBAAiB;QACjB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC;QACtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,MAA+B,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QAED,sBAAsB;QACtB,MAAM,SAAS,GAAG,EAA+B,CAAC;QAElD,KAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/D,MAAM,YAAY,GAAG,QAAuB,CAAC;YAC7C,MAAM,YAAY,GAAI,MAAkC,CAAC,UAAU,CAEtD,CAAC;YAEd,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,SAAS;YACX,CAAC;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CACjC,UAAU,EACV,YAAY,EACZ,YAAY,CACb,CAAC;YACD,SAAyC,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;QACpE,CAAC;QAED,OAAO;YACL,SAAS;YACT,KAAK,EAAE,QAAQ;YACf,SAAS;YACT,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;SACzB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CACR,KAAsB,EACtB,QAAgB;QAEhB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACxC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE;SACjD,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,MAA+B,CAAC;QAClE,OAAO;YACL,IAAI,EAAG,QAAQ,CAAC,QAA4B,CAAC,IAAI;YACjD,UAAU,EAAE,QAAQ,CAAC,UAAU;SAChC,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACV,KAAsB,EACtB,QAAgB,EAChB,OAAY;QAEZ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;YACxC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE;SAC5D,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,MAA+B,CAAC;QAClE,OAAO;YACL,MAAM,EAAG,QAAQ,CAAC,QAAiC,CAAC,MAAM;YAC1D,UAAU,EAAG,QAAQ,CAAC,QAA8B,CAAC,UAAU;SAChE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,iBAAiB,CACf,WAAmB,EACnB,SAAS,GAAW,IAAI,CAAC,MAAM,CAAC,gBAAgB;QAEhD,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QAE9D,OAAO;YACL,SAAS,EAAE,WAAW,IAAI,SAAS;YACnC,WAAW;YACX,UAAU;YACV,MAAM,EAAE,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;SACjF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,MAA2B,EAC3B,SAA0B,EAC1B,OAAO,GAA6B,EAAE;QAEtC,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC;QAEpC,MAAM,OAAO,GAA6B,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAwB,EAAE,CAAC;QAExC,qBAAqB;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,kBAAkB;QAClB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,kBAAkB;IAElB,+EAA+E;IAC/E,+CAA+C;IAEvC,aAAa,CACnB,UAAa,EACb,QAAqB,EACrB,QAAqB;QAErB,IAAI,WAAmB,CAAC;QACxB,IAAI,UAAqC,CAAC;QAE1C,QAAQ,QAAQ,CAAC,IAAI,EAAE,CAAC;YACtB,KAAK,MAAM;gBACT,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC;gBAC5B,MAAM;YACR,KAAK,QAAQ;gBACX,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC;gBAClC,MAAM;YACR,KAAK,OAAO;gBACV,yBAAyB;gBACzB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBACpE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChE,WAAW,GAAG,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;gBACnD,MAAM;QACV,CAAC;QAED,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAE3E,OAAO;YACL,UAAU;YACV,QAAQ;YACR,QAAQ;YACR,WAAW;YACX,UAAU;SACX,CAAC;IACJ,CAAC;IAEO,aAAa,CACnB,WAAmB,EACnB,SAAiB;QAEjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;QACnD,IAAI,QAAQ,GAAG,GAAG;YAAE,OAAO,MAAM,CAAC;QAClC,IAAI,QAAQ,GAAG,IAAI;YAAE,OAAO,QAAQ,CAAC;QACrC,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,eAAe;AACf,cAAc,YAAY,CAAC;AAE3B,oBAAoB;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -53,14 +53,34 @@ export const ENV_KEYS = {
|
|
|
53
53
|
} as const;
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
|
-
* Get API key from environment
|
|
57
|
-
* Priority: TYPESAFE_API_KEY > OPENROUTER_API_KEY
|
|
56
|
+
* Get API key from environment or keys file
|
|
57
|
+
* Priority: TYPESAFE_API_KEY env > OPENROUTER_API_KEY env > keys file
|
|
58
58
|
*/
|
|
59
59
|
export function getApiKeyFromEnv(): string | undefined {
|
|
60
|
-
|
|
60
|
+
// First check environment variables
|
|
61
|
+
const envKey =
|
|
61
62
|
process.env[ENV_KEYS.TYPESAFE_API_KEY] ||
|
|
62
|
-
process.env[ENV_KEYS.OPENROUTER_API_KEY]
|
|
63
|
-
);
|
|
63
|
+
process.env[ENV_KEYS.OPENROUTER_API_KEY];
|
|
64
|
+
if (envKey) return envKey;
|
|
65
|
+
|
|
66
|
+
// Fall back to keys file (e.g., ~/.pi-harness-runtime/keys/jev-api-key.txt)
|
|
67
|
+
const homedir = process.env.HOME || process.env.USERPROFILE || "/home/frappe";
|
|
68
|
+
const keysDir = `${homedir}/.pi-harness-runtime/keys`;
|
|
69
|
+
const keyFile = `${keysDir}/jev-api-key.txt`;
|
|
70
|
+
|
|
71
|
+
try {
|
|
72
|
+
const { readFileSync, existsSync } = require("fs");
|
|
73
|
+
if (existsSync(keyFile)) {
|
|
74
|
+
const key = readFileSync(keyFile, "utf8").trim();
|
|
75
|
+
if (key && key.length > 10) {
|
|
76
|
+
return key;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
} catch {
|
|
80
|
+
// Ignore file read errors
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return undefined;
|
|
64
84
|
}
|
|
65
85
|
|
|
66
86
|
/**
|