browserclaw-agent 0.6.2 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/agent-loop.d.ts +2 -0
  2. package/dist/agent-loop.d.ts.map +1 -1
  3. package/dist/agent-loop.js +257 -39
  4. package/dist/agent-loop.js.map +1 -1
  5. package/dist/api-types.d.ts +81 -0
  6. package/dist/api-types.d.ts.map +1 -0
  7. package/dist/api-types.js +6 -0
  8. package/dist/api-types.js.map +1 -0
  9. package/dist/config.d.ts +3 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +4 -10
  12. package/dist/config.js.map +1 -1
  13. package/dist/idempotency.d.ts +48 -0
  14. package/dist/idempotency.d.ts.map +1 -0
  15. package/dist/idempotency.js +99 -0
  16. package/dist/idempotency.js.map +1 -0
  17. package/dist/llm.d.ts +7 -10
  18. package/dist/llm.d.ts.map +1 -1
  19. package/dist/llm.js +104 -272
  20. package/dist/llm.js.map +1 -1
  21. package/dist/parse-json-response.d.ts +4 -0
  22. package/dist/parse-json-response.d.ts.map +1 -1
  23. package/dist/parse-json-response.js +21 -3
  24. package/dist/parse-json-response.js.map +1 -1
  25. package/dist/prompt-log.d.ts +9 -1
  26. package/dist/prompt-log.d.ts.map +1 -1
  27. package/dist/prompt-log.js.map +1 -1
  28. package/dist/proxy.d.ts +9 -0
  29. package/dist/proxy.d.ts.map +1 -0
  30. package/dist/proxy.js +85 -0
  31. package/dist/proxy.js.map +1 -0
  32. package/dist/routes.d.ts.map +1 -1
  33. package/dist/routes.js +116 -30
  34. package/dist/routes.js.map +1 -1
  35. package/dist/server.js +2 -0
  36. package/dist/server.js.map +1 -1
  37. package/dist/session-manager.d.ts +2 -8
  38. package/dist/session-manager.d.ts.map +1 -1
  39. package/dist/session-manager.js +196 -51
  40. package/dist/session-manager.js.map +1 -1
  41. package/dist/skills/press-and-hold.d.ts.map +1 -1
  42. package/dist/skills/press-and-hold.js +20 -14
  43. package/dist/skills/press-and-hold.js.map +1 -1
  44. package/dist/sse-stamp.d.ts +2 -0
  45. package/dist/sse-stamp.d.ts.map +1 -0
  46. package/dist/sse-stamp.js +9 -0
  47. package/dist/sse-stamp.js.map +1 -0
  48. package/dist/trajectory-store.d.ts +1 -0
  49. package/dist/trajectory-store.d.ts.map +1 -1
  50. package/dist/trajectory-store.js +1 -0
  51. package/dist/trajectory-store.js.map +1 -1
  52. package/dist/types.d.ts +9 -15
  53. package/dist/types.d.ts.map +1 -1
  54. package/dist/types.js.map +1 -1
  55. package/package.json +7 -3
@@ -0,0 +1,99 @@
1
+ import { createHash } from 'node:crypto';
2
+ export const IDEMPOTENCY_TTL_MS = 5 * 60 * 1000;
3
+ export const IDEMPOTENCY_MAX_KEY_LENGTH = 256;
4
+ // api_key is intentionally NOT in the fingerprint: don't retain digests of
5
+ // secrets in memory, and BYOK clients can rotate keys without losing replay.
6
+ export function buildRequestFingerprint(input) {
7
+ const canonical = {
8
+ prompt: input.prompt,
9
+ url: input.url ?? null,
10
+ headless: input.headless ?? null,
11
+ skip_moderation: input.skip_moderation ?? false,
12
+ skip_postprocessing: input.skip_postprocessing ?? false,
13
+ llm_provider: input.llm_config?.provider ?? null,
14
+ llm_model: input.llm_config?.model ?? null,
15
+ };
16
+ return createHash('sha256').update(JSON.stringify(canonical)).digest('hex');
17
+ }
18
+ // Tuple-encoded so colons in IPv6 / opaque keys can't cause ambiguous collapses.
19
+ export function getIdempotencyCacheKey(clientIp, idempotencyKey) {
20
+ return JSON.stringify([clientIp, idempotencyKey]);
21
+ }
22
+ export function normalizeIdempotencyKey(raw) {
23
+ const value = Array.isArray(raw) ? raw[0] : raw;
24
+ if (typeof value !== 'string')
25
+ return undefined;
26
+ const trimmed = value.trim();
27
+ if (trimmed === '' || trimmed.length > IDEMPOTENCY_MAX_KEY_LENGTH)
28
+ return undefined;
29
+ return trimmed;
30
+ }
31
+ // Reject + evict any pending entry older than IDEMPOTENCY_TTL_MS so a wedged
32
+ // createSession can't poison the (clientIp, key) slot indefinitely. Waiters
33
+ // awaiting the rejected promise unblock with a clean error.
34
+ export function expirePendingIdempotency(cache, now) {
35
+ for (const [key, entry] of cache) {
36
+ if (entry.kind === 'pending' && now - entry.createdAt > IDEMPOTENCY_TTL_MS) {
37
+ cache.delete(key);
38
+ entry.reject(new Error('Idempotency reservation expired (original request did not complete in time)'));
39
+ }
40
+ }
41
+ }
42
+ export function lookupIdempotency(cache, cacheKey, fingerprint, now) {
43
+ const entry = cache.get(cacheKey);
44
+ if (entry === undefined)
45
+ return { kind: 'miss' };
46
+ if (now - entry.createdAt > IDEMPOTENCY_TTL_MS) {
47
+ cache.delete(cacheKey);
48
+ if (entry.kind === 'pending') {
49
+ entry.reject(new Error('Idempotency reservation expired (original request did not complete in time)'));
50
+ }
51
+ return { kind: 'miss' };
52
+ }
53
+ if (entry.fingerprint !== fingerprint) {
54
+ return { kind: 'fingerprint_mismatch' };
55
+ }
56
+ if (entry.kind === 'pending') {
57
+ return { kind: 'pending_match', promise: entry.promise };
58
+ }
59
+ return { kind: 'completed_match', response: entry.response };
60
+ }
61
+ export function reserveIdempotency(cache, cacheKey, fingerprint, now) {
62
+ let resolve;
63
+ let reject;
64
+ const promise = new Promise((res, rej) => {
65
+ resolve = res;
66
+ reject = rej;
67
+ });
68
+ promise.catch(() => undefined);
69
+ const entry = {
70
+ kind: 'pending',
71
+ fingerprint,
72
+ createdAt: now,
73
+ promise,
74
+ resolve,
75
+ reject,
76
+ };
77
+ cache.set(cacheKey, entry);
78
+ return entry;
79
+ }
80
+ // Reservation passed to complete/fail so a wedged-then-recovered handler can't
81
+ // overwrite a fresh entry that another request created after cleanup evicted us.
82
+ export function completeIdempotency(cache, cacheKey, reservation, response, now) {
83
+ if (cache.get(cacheKey) !== reservation)
84
+ return;
85
+ cache.set(cacheKey, {
86
+ kind: 'completed',
87
+ fingerprint: reservation.fingerprint,
88
+ createdAt: now,
89
+ response,
90
+ });
91
+ reservation.resolve(response);
92
+ }
93
+ export function failIdempotency(cache, cacheKey, reservation, error) {
94
+ if (cache.get(cacheKey) === reservation) {
95
+ cache.delete(cacheKey);
96
+ }
97
+ reservation.reject(error);
98
+ }
99
+ //# sourceMappingURL=idempotency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"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"}
package/dist/llm.d.ts CHANGED
@@ -1,5 +1,12 @@
1
1
  import type { LlmConfig } from './types.js';
2
2
  export declare function sanitizeErrorText(text: string): string;
3
+ export interface ProviderError {
4
+ status: number | null;
5
+ message: string;
6
+ }
7
+ export declare function extractProviderError(err: unknown): ProviderError | null;
8
+ export declare function extractProviderMessage(err: unknown): string | null;
9
+ export declare function isFailFastError(err: unknown): boolean;
3
10
  export interface TokenUsage {
4
11
  input: number;
5
12
  output: number;
@@ -15,16 +22,6 @@ export declare const BYOK_PROVIDERS: Partial<Record<string, {
15
22
  baseURL: string;
16
23
  useMaxCompletionTokens: boolean;
17
24
  }>>;
18
- export interface ProviderConfig {
19
- provider: string;
20
- label: string;
21
- baseURL: string;
22
- envVar: string;
23
- useMaxCompletionTokens: boolean;
24
- }
25
- export declare function getAvailableProviders(): ProviderConfig[];
26
- export declare function getActiveProvider(): ProviderConfig;
27
- export declare function getModel(): string;
28
25
  export interface LLMRequest {
29
26
  system: string;
30
27
  message: string;
package/dist/llm.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAW5C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAWD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEvF;AAaD,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,sBAAsB,EAAE,OAAO,CAAA;CAAE,CAAC,CAKxG,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAwJD,wBAAgB,qBAAqB,IAAI,cAAc,EAAE,CAExD;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAKlD;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAOjC;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAwGD,wBAAgB,eAAe,IAAI,MAAM,CAGxC;AAED,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAWxC;AA2FD,wBAAsB,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAgD/D;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAU5D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkDrG"}
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAW5C,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAiDvE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAElE;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAMrD;AAmBD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAID;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEvF;AAQD,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,sBAAsB,EAAE,OAAO,CAAA;CAAE,CAAC,CAKxG,CAAC;AAQF,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAuFD,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,aAAa,IAAI,UAAU,CAG1C;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAKxC;AAuFD,wBAAsB,GAAG,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAoB/D;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAkB5D;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmCrG"}
package/dist/llm.js CHANGED
@@ -1,7 +1,5 @@
1
1
  import OpenAI from 'openai';
2
2
  import { AsyncLocalStorage } from 'node:async_hooks';
3
- import fs from 'node:fs';
4
- import path from 'node:path';
5
3
  import { parseJsonResponse } from './parse-json-response.js';
6
4
  import { logger } from './logger.js';
7
5
  import { LlmParseError } from './types.js';
@@ -13,6 +11,74 @@ const SENSITIVE_PATTERN = /(?:eyJ[A-Za-z0-9_-]{20,}|sk-[A-Za-z0-9]{20,}|gsk_[A-Z
13
11
  export function sanitizeErrorText(text) {
14
12
  return text.replace(SENSITIVE_PATTERN, '[REDACTED]').slice(0, 500);
15
13
  }
14
+ export function extractProviderError(err) {
15
+ if (err instanceof OpenAI.APIError) {
16
+ const status = typeof err.status === 'number' ? err.status : null;
17
+ const body = err.error;
18
+ if (typeof body?.message === 'string' && body.message.trim() !== '') {
19
+ return { status, message: body.message.trim() };
20
+ }
21
+ if (typeof err.message === 'string' && err.message.trim() !== '') {
22
+ let msg = err.message.trim();
23
+ while (/^\d{3}\s+/.test(msg))
24
+ msg = msg.slice(msg.indexOf(' ') + 1).trim();
25
+ return { status, message: msg };
26
+ }
27
+ return null;
28
+ }
29
+ if (!(err instanceof Error))
30
+ return null;
31
+ const raw = err.message;
32
+ const bodyStart = raw.indexOf('{');
33
+ if (bodyStart !== -1) {
34
+ let parsed = null;
35
+ try {
36
+ parsed = JSON.parse(raw.slice(bodyStart));
37
+ }
38
+ catch (parseErr) {
39
+ logger.warn({ err: parseErr instanceof Error ? parseErr.name : 'unknown' }, 'extractProviderError: substring after { is not JSON');
40
+ }
41
+ if (parsed !== null && typeof parsed === 'object') {
42
+ const obj = parsed;
43
+ const candidates = [
44
+ obj.error?.message,
45
+ typeof obj.error === 'string' ? obj.error : undefined,
46
+ obj.message,
47
+ obj.detail,
48
+ ];
49
+ for (const c of candidates) {
50
+ if (typeof c === 'string' && c.trim() !== '') {
51
+ const statusMatch = /^(\d{3})\s/.exec(raw);
52
+ return { status: statusMatch ? parseInt(statusMatch[1], 10) : null, message: c };
53
+ }
54
+ }
55
+ }
56
+ }
57
+ const m = /^(\d{3})\s+(.+)$/s.exec(raw);
58
+ if (m)
59
+ return { status: parseInt(m[1], 10), message: m[2].trim() };
60
+ return null;
61
+ }
62
+ export function extractProviderMessage(err) {
63
+ return extractProviderError(err)?.message ?? null;
64
+ }
65
+ export function isFailFastError(err) {
66
+ if (!(err instanceof Error))
67
+ return false;
68
+ const m = err.message;
69
+ if (/insufficient_quota/i.test(m))
70
+ return true;
71
+ if (/^(401|403)\s/.test(m))
72
+ return true;
73
+ return /token_expired|invalid_api_key|invalid_grant|invalid_client|unauthorized/i.test(m);
74
+ }
75
+ function requireCtx() {
76
+ const ctx = sessionLlmStore.getStore();
77
+ if (ctx === undefined) {
78
+ throw new Error('LLM call outside of runWithLlmConfig — BYOK config is required');
79
+ }
80
+ return ctx;
81
+ }
16
82
  const sessionLlmStore = new AsyncLocalStorage();
17
83
  /**
18
84
  * Run an async function with a BYOK LLM config scoped to the current async context.
@@ -23,15 +89,9 @@ export function runWithLlmConfig(config, fn) {
23
89
  return sessionLlmStore.run({ llmConfig: config, llmCallCount: 0, inputTokens: 0, outputTokens: 0 }, fn);
24
90
  }
25
91
  function recordUsage(input, output) {
26
- const ctx = sessionLlmStore.getStore();
27
- if (ctx) {
28
- ctx.inputTokens += input;
29
- ctx.outputTokens += output;
30
- }
31
- else {
32
- _fallbackInputTokens += input;
33
- _fallbackOutputTokens += output;
34
- }
92
+ const ctx = requireCtx();
93
+ ctx.inputTokens += input;
94
+ ctx.outputTokens += output;
35
95
  }
36
96
  export const BYOK_PROVIDERS = {
37
97
  anthropic: { baseURL: 'https://api.anthropic.com/v1/', useMaxCompletionTokens: false },
@@ -39,170 +99,7 @@ export const BYOK_PROVIDERS = {
39
99
  'openai-oauth': { baseURL: 'https://chatgpt.com/backend-api', useMaxCompletionTokens: true },
40
100
  gemini: { baseURL: 'https://generativelanguage.googleapis.com/v1beta/openai/', useMaxCompletionTokens: false },
41
101
  };
42
- const PROVIDERS = [
43
- {
44
- provider: 'groq',
45
- label: 'Groq',
46
- baseURL: 'https://api.groq.com/openai/v1',
47
- envVar: 'GROQ_API_KEY',
48
- useMaxCompletionTokens: false,
49
- },
50
- {
51
- provider: 'gemini',
52
- label: 'Gemini',
53
- baseURL: 'https://generativelanguage.googleapis.com/v1beta/openai/',
54
- envVar: 'GEMINI_API_KEY',
55
- useMaxCompletionTokens: false,
56
- },
57
- {
58
- provider: 'openai',
59
- label: 'OpenAI',
60
- baseURL: 'https://api.openai.com/v1',
61
- envVar: 'OPENAI_API_KEY',
62
- useMaxCompletionTokens: true,
63
- },
64
- {
65
- provider: 'openai-oauth',
66
- label: 'OpenAI (Subscription)',
67
- baseURL: 'https://chatgpt.com/backend-api',
68
- envVar: 'OPENAI_OAUTH_TOKEN',
69
- useMaxCompletionTokens: true,
70
- },
71
- {
72
- provider: 'anthropic',
73
- label: 'Anthropic',
74
- baseURL: 'https://api.anthropic.com/v1/',
75
- envVar: 'ANTHROPIC_API_KEY',
76
- useMaxCompletionTokens: false,
77
- },
78
- ];
79
- const CLIENT_ID = 'app_EMoamEEZ73f0CkXaXp7hrann';
80
- const TOKEN_URL = 'https://auth.openai.com/oauth/token';
81
- const REFRESH_LIFETIME_FRACTION = 0.8;
82
- const clientCache = new Map();
83
- // Concurrent callers share a single in-flight refresh so we don't race on process.env.
84
- let oauthRefreshInFlight = null;
85
- async function refreshOAuthToken() {
86
- if (oauthRefreshInFlight !== null)
87
- return oauthRefreshInFlight;
88
- oauthRefreshInFlight = (async () => {
89
- const refreshToken = process.env.OPENAI_REFRESH_TOKEN;
90
- if (refreshToken === undefined || refreshToken === '')
91
- throw new Error('OPENAI_REFRESH_TOKEN is required to refresh the access token');
92
- logger.info('Refreshing OpenAI OAuth token');
93
- const res = await fetch(TOKEN_URL, {
94
- method: 'POST',
95
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
96
- body: new URLSearchParams({
97
- grant_type: 'refresh_token',
98
- client_id: CLIENT_ID,
99
- refresh_token: refreshToken,
100
- }),
101
- });
102
- if (!res.ok) {
103
- const text = await res.text();
104
- throw new Error(`OAuth token refresh failed (${String(res.status)}): ${sanitizeErrorText(text)}`);
105
- }
106
- const token = (await res.json());
107
- process.env.OPENAI_OAUTH_TOKEN = token.access_token;
108
- if (token.refresh_token !== undefined) {
109
- process.env.OPENAI_REFRESH_TOKEN = token.refresh_token;
110
- }
111
- persistOAuthTokens(token.access_token, token.refresh_token);
112
- clientCache.delete('openai-oauth');
113
- logger.info('OpenAI OAuth token refreshed successfully');
114
- })();
115
- try {
116
- await oauthRefreshInFlight;
117
- }
118
- finally {
119
- oauthRefreshInFlight = null;
120
- }
121
- }
122
- function parseJwtTimes(jwt) {
123
- try {
124
- const parts = jwt.split('.');
125
- if (parts.length !== 3)
126
- return null;
127
- const payload = JSON.parse(Buffer.from(parts[1], 'base64url').toString());
128
- if (typeof payload.iat === 'number' && typeof payload.exp === 'number') {
129
- return { iat: payload.iat * 1000, exp: payload.exp * 1000 };
130
- }
131
- return null;
132
- }
133
- catch {
134
- return null;
135
- }
136
- }
137
- function shouldRefreshOAuthToken() {
138
- const token = process.env.OPENAI_OAUTH_TOKEN;
139
- if (token === undefined || token === '')
140
- return false;
141
- const times = parseJwtTimes(token);
142
- if (times === null)
143
- return false;
144
- const lifetime = times.exp - times.iat;
145
- const elapsed = Date.now() - times.iat;
146
- return elapsed > lifetime * REFRESH_LIFETIME_FRACTION;
147
- }
148
- function persistOAuthTokens(accessToken, refreshToken) {
149
- const envPath = path.join(process.cwd(), '.env.local');
150
- if (!fs.existsSync(envPath))
151
- return;
152
- try {
153
- let content = fs.readFileSync(envPath, 'utf-8');
154
- if (/^OPENAI_OAUTH_TOKEN=.*$/m.test(content)) {
155
- content = content.replace(/^OPENAI_OAUTH_TOKEN=.*$/m, `OPENAI_OAUTH_TOKEN=${accessToken}`);
156
- }
157
- if (refreshToken !== undefined && /^OPENAI_REFRESH_TOKEN=.*$/m.test(content)) {
158
- content = content.replace(/^OPENAI_REFRESH_TOKEN=.*$/m, `OPENAI_REFRESH_TOKEN=${refreshToken}`);
159
- }
160
- fs.writeFileSync(envPath, content);
161
- logger.info('Persisted rotated OAuth tokens to .env.local');
162
- }
163
- catch (err) {
164
- logger.warn({ err: err instanceof Error ? err.message : err }, 'Failed to persist OAuth tokens');
165
- }
166
- }
167
- function resolveProvider(name) {
168
- const found = PROVIDERS.find((p) => p.provider === name);
169
- if (!found)
170
- throw new Error(`Unknown provider: ${name}. Valid: ${PROVIDERS.map((p) => p.provider).join(', ')}`);
171
- const apiKey = process.env[found.envVar];
172
- if (apiKey === undefined || apiKey === '')
173
- throw new Error(`${found.envVar} is required for provider "${name}"`);
174
- return found;
175
- }
176
- function getClient(config) {
177
- const cached = clientCache.get(config.provider);
178
- if (cached)
179
- return cached;
180
- const client = new OpenAI({
181
- apiKey: process.env[config.envVar],
182
- baseURL: config.baseURL,
183
- });
184
- clientCache.set(config.provider, client);
185
- return client;
186
- }
187
- export function getAvailableProviders() {
188
- return PROVIDERS.filter((p) => Boolean(process.env[p.envVar]));
189
- }
190
- export function getActiveProvider() {
191
- const name = process.env.LLM_PROVIDER;
192
- if (name === undefined || name === '')
193
- throw new Error(`LLM_PROVIDER is required. Valid: ${PROVIDERS.map((p) => p.provider).join(', ')}`);
194
- return resolveProvider(name);
195
- }
196
- export function getModel() {
197
- const model = process.env.LLM_MODEL;
198
- if (model === undefined || model === '') {
199
- logger.fatal('LLM_MODEL is required but not set');
200
- process.exit(1);
201
- }
202
- return model;
203
- }
204
- async function callCodexResponsesAPI(provider, model, req, apiKeyOverride) {
205
- const apiKey = apiKeyOverride ?? process.env[provider.envVar] ?? '';
102
+ async function callCodexResponsesAPI(provider, model, req, apiKey) {
206
103
  const url = `${provider.baseURL}/codex/responses`;
207
104
  const res = await fetch(url, {
208
105
  method: 'POST',
@@ -261,8 +158,7 @@ async function callCodexResponsesAPI(provider, model, req, apiKeyOverride) {
261
158
  return { text: textParts.join('') };
262
159
  throw new Error('Codex Responses API returned no completed response');
263
160
  }
264
- async function callChatCompletions(provider, model, req, clientOverride) {
265
- const client = clientOverride ?? getClient(provider);
161
+ async function callChatCompletions(provider, model, req, client) {
266
162
  const response = await client.chat.completions.create({
267
163
  model,
268
164
  ...(provider.useMaxCompletionTokens ? { max_completion_tokens: req.maxTokens } : { max_tokens: req.maxTokens }),
@@ -279,41 +175,18 @@ async function callChatCompletions(provider, model, req, clientOverride) {
279
175
  throw new Error('LLM returned empty response');
280
176
  return { text: content };
281
177
  }
282
- async function callLLM(provider, model, req) {
283
- if (provider.provider === 'openai-oauth') {
284
- // Raw fetch — no SDK retries, so we add our own
285
- return retryTransient(() => callCodexResponsesAPI(provider, model, req), 'Codex API');
286
- }
287
- // OpenAI SDK handles its own retries for chat completions
288
- return callChatCompletions(provider, model, req);
289
- }
290
- // Per-session LLM call counter backed by AsyncLocalStorage.
291
- // Falls back to a module-level counter for calls outside a session context.
292
- let _fallbackLlmCallCount = 0;
293
- let _fallbackInputTokens = 0;
294
- let _fallbackOutputTokens = 0;
295
178
  export function getLLMCallCount() {
296
- const ctx = sessionLlmStore.getStore();
297
- return ctx ? ctx.llmCallCount : _fallbackLlmCallCount;
179
+ return requireCtx().llmCallCount;
298
180
  }
299
181
  export function getTokenUsage() {
300
- const ctx = sessionLlmStore.getStore();
301
- const input = ctx ? ctx.inputTokens : _fallbackInputTokens;
302
- const output = ctx ? ctx.outputTokens : _fallbackOutputTokens;
303
- return { input, output, total: input + output };
182
+ const ctx = requireCtx();
183
+ return { input: ctx.inputTokens, output: ctx.outputTokens, total: ctx.inputTokens + ctx.outputTokens };
304
184
  }
305
185
  export function resetLLMCallCount() {
306
- const ctx = sessionLlmStore.getStore();
307
- if (ctx) {
308
- ctx.llmCallCount = 0;
309
- ctx.inputTokens = 0;
310
- ctx.outputTokens = 0;
311
- }
312
- else {
313
- _fallbackLlmCallCount = 0;
314
- _fallbackInputTokens = 0;
315
- _fallbackOutputTokens = 0;
316
- }
186
+ const ctx = requireCtx();
187
+ ctx.llmCallCount = 0;
188
+ ctx.inputTokens = 0;
189
+ ctx.outputTokens = 0;
317
190
  }
318
191
  async function withTimeout(promise, timeoutMs, label) {
319
192
  if (timeoutMs <= 0)
@@ -381,59 +254,29 @@ async function retryTransient(fn, label) {
381
254
  }
382
255
  throw lastErr;
383
256
  }
384
- function resolveByokProvider(config) {
257
+ function resolveProvider(config) {
385
258
  const byok = BYOK_PROVIDERS[config.provider];
386
259
  if (!byok)
387
- throw new Error(`Unsupported BYOK provider: ${config.provider}`);
260
+ throw new Error(`Unsupported provider: ${config.provider}`);
388
261
  return {
389
262
  provider: config.provider,
390
- label: config.provider,
391
263
  baseURL: byok.baseURL,
392
- envVar: '', // not used for BYOK
393
264
  useMaxCompletionTokens: byok.useMaxCompletionTokens,
394
265
  };
395
266
  }
396
- function getByokClient(config, providerConfig) {
397
- return new OpenAI({
398
- apiKey: config.api_key,
399
- baseURL: providerConfig.baseURL,
400
- });
267
+ function getClient(ctx, provider) {
268
+ ctx.byokClient ??= new OpenAI({ apiKey: ctx.llmConfig.api_key, baseURL: provider.baseURL });
269
+ return ctx.byokClient;
401
270
  }
402
271
  export async function llm(req) {
403
- const ctx = sessionLlmStore.getStore();
404
- if (ctx) {
405
- ctx.llmCallCount++;
406
- }
407
- else {
408
- _fallbackLlmCallCount++;
409
- }
410
- if (ctx) {
411
- const byokConfig = ctx.llmConfig;
412
- const providerConfig = resolveByokProvider(byokConfig);
413
- if (byokConfig.provider === 'openai-oauth') {
414
- return await withTimeout(retryTransient(() => callCodexResponsesAPI(providerConfig, byokConfig.model, req, byokConfig.api_key), 'BYOK Codex API'), LLM_CODEX_TIMEOUT_MS, 'LLM call (BYOK OAuth)');
415
- }
416
- // Cache the BYOK client in the session context to avoid creating a new one per call
417
- ctx.byokClient ??= getByokClient(byokConfig, providerConfig);
418
- return await withTimeout(callChatCompletions(providerConfig, byokConfig.model, req, ctx.byokClient), LLM_TIMEOUT_MS, 'LLM call (BYOK)');
419
- }
420
- // Fall back to server-configured provider
421
- const provider = getActiveProvider();
422
- const model = getModel();
423
- const isSubscription = provider.provider === 'openai-oauth';
424
- if (isSubscription && shouldRefreshOAuthToken()) {
425
- await refreshOAuthToken();
426
- }
427
- try {
428
- return await withTimeout(callLLM(provider, model, req), LLM_TIMEOUT_MS, 'LLM call');
429
- }
430
- catch (err) {
431
- if (isSubscription && err instanceof Error && err.message.includes('401')) {
432
- await refreshOAuthToken();
433
- return withTimeout(callLLM(provider, model, req), LLM_TIMEOUT_MS, 'LLM call (retry)');
434
- }
435
- throw err;
436
- }
272
+ const ctx = requireCtx();
273
+ ctx.llmCallCount++;
274
+ const config = ctx.llmConfig;
275
+ const provider = resolveProvider(config);
276
+ if (config.provider === 'openai-oauth') {
277
+ return await withTimeout(retryTransient(() => callCodexResponsesAPI(provider, config.model, req, config.api_key), 'BYOK Codex API'), LLM_CODEX_TIMEOUT_MS, 'LLM call (BYOK OAuth)');
278
+ }
279
+ return await withTimeout(callChatCompletions(provider, config.model, req, getClient(ctx, provider)), LLM_TIMEOUT_MS, 'LLM call (BYOK)');
437
280
  }
438
281
  export async function llmJson(req) {
439
282
  const { text } = await llm(req);
@@ -442,6 +285,11 @@ export async function llmJson(req) {
442
285
  }
443
286
  catch (err) {
444
287
  if (err instanceof SyntaxError) {
288
+ logger.warn({
289
+ parseError: err.message,
290
+ rawSnippet: text.length > 500 ? `${text.slice(0, 500)}…[truncated ${String(text.length - 500)} chars]` : text,
291
+ rawLength: text.length,
292
+ }, 'LLM JSON parse failed');
445
293
  throw new LlmParseError(err.message, text);
446
294
  }
447
295
  throw err;
@@ -451,29 +299,13 @@ export async function llmJson(req) {
451
299
  * Call the LLM with a screenshot image for visual extraction.
452
300
  */
453
301
  export async function llmVision(system, message, imageBase64) {
454
- const ctx = sessionLlmStore.getStore();
455
- if (ctx) {
456
- ctx.llmCallCount++;
457
- }
458
- else {
459
- _fallbackLlmCallCount++;
460
- }
461
- let provider;
462
- let model;
463
- let client;
464
- if (ctx) {
465
- provider = resolveByokProvider(ctx.llmConfig);
466
- model = ctx.llmConfig.model;
467
- ctx.byokClient ??= getByokClient(ctx.llmConfig, provider);
468
- client = ctx.byokClient;
469
- }
470
- else {
471
- provider = getActiveProvider();
472
- model = getModel();
473
- client = getClient(provider);
474
- }
302
+ const ctx = requireCtx();
303
+ ctx.llmCallCount++;
304
+ const config = ctx.llmConfig;
305
+ const provider = resolveProvider(config);
306
+ const client = getClient(ctx, provider);
475
307
  const response = await retryTransient(() => withTimeout(client.chat.completions.create({
476
- model,
308
+ model: config.model,
477
309
  max_tokens: 2048,
478
310
  messages: [
479
311
  { role: 'system', content: system },
package/dist/llm.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../src/llm.ts"],"names":[],"mappings":"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"}