browserclaw-agent 0.6.1 → 0.7.0
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/dist/agent-loop.d.ts.map +1 -1
- package/dist/agent-loop.js +130 -15
- package/dist/agent-loop.js.map +1 -1
- package/dist/api-types.d.ts +81 -0
- package/dist/api-types.d.ts.map +1 -0
- package/dist/api-types.js +6 -0
- package/dist/api-types.js.map +1 -0
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -10
- package/dist/config.js.map +1 -1
- package/dist/idempotency.d.ts +48 -0
- package/dist/idempotency.d.ts.map +1 -0
- package/dist/idempotency.js +99 -0
- package/dist/idempotency.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/llm.d.ts +2 -10
- package/dist/llm.d.ts.map +1 -1
- package/dist/llm.js +81 -272
- package/dist/llm.js.map +1 -1
- package/dist/parse-json-response.d.ts +4 -0
- package/dist/parse-json-response.d.ts.map +1 -1
- package/dist/parse-json-response.js +21 -3
- package/dist/parse-json-response.js.map +1 -1
- package/dist/prompt-log.d.ts +1 -1
- package/dist/prompt-log.d.ts.map +1 -1
- package/dist/routes.d.ts.map +1 -1
- package/dist/routes.js +108 -29
- package/dist/routes.js.map +1 -1
- package/dist/session-manager.d.ts +1 -1
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +16 -5
- package/dist/session-manager.js.map +1 -1
- package/dist/sse-stamp.d.ts +2 -0
- package/dist/sse-stamp.d.ts.map +1 -0
- package/dist/sse-stamp.js +9 -0
- package/dist/sse-stamp.js.map +1 -0
- package/dist/trajectory-store.d.ts +1 -0
- package/dist/trajectory-store.d.ts.map +1 -1
- package/dist/trajectory-store.js +1 -0
- package/dist/trajectory-store.js.map +1 -1
- package/dist/types.d.ts +3 -15
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { LlmConfig } from './types.js';
|
|
2
|
+
export declare const API_VERSION = 1;
|
|
3
|
+
export type ApiVersion = typeof API_VERSION;
|
|
4
|
+
export interface CreateSessionRequest {
|
|
5
|
+
prompt: string;
|
|
6
|
+
url?: string;
|
|
7
|
+
headless?: boolean;
|
|
8
|
+
skip_moderation?: boolean;
|
|
9
|
+
skip_postprocessing?: boolean;
|
|
10
|
+
llm_config?: LlmConfig;
|
|
11
|
+
}
|
|
12
|
+
export interface CreateSessionResponse {
|
|
13
|
+
session_id: string;
|
|
14
|
+
status: string;
|
|
15
|
+
created_at: string;
|
|
16
|
+
}
|
|
17
|
+
interface BaseSSEEvent {
|
|
18
|
+
apiVersion: ApiVersion;
|
|
19
|
+
}
|
|
20
|
+
export type SSEEvent = (BaseSSEEvent & {
|
|
21
|
+
type: 'connected';
|
|
22
|
+
session_id: string;
|
|
23
|
+
}) | (BaseSSEEvent & {
|
|
24
|
+
type: 'step';
|
|
25
|
+
step: number;
|
|
26
|
+
action?: unknown;
|
|
27
|
+
url?: string;
|
|
28
|
+
title?: string;
|
|
29
|
+
}) | (BaseSSEEvent & {
|
|
30
|
+
type: 'thinking';
|
|
31
|
+
step: number;
|
|
32
|
+
message: string;
|
|
33
|
+
}) | (BaseSSEEvent & {
|
|
34
|
+
type: 'completed';
|
|
35
|
+
answer?: string;
|
|
36
|
+
duration_ms?: number;
|
|
37
|
+
}) | (BaseSSEEvent & {
|
|
38
|
+
type: 'failed';
|
|
39
|
+
step?: number;
|
|
40
|
+
error: string;
|
|
41
|
+
}) | (BaseSSEEvent & {
|
|
42
|
+
type: 'step_error';
|
|
43
|
+
step: number;
|
|
44
|
+
action?: string;
|
|
45
|
+
error: string;
|
|
46
|
+
error_kind?: string;
|
|
47
|
+
}) | (BaseSSEEvent & {
|
|
48
|
+
type: 'context_compressed';
|
|
49
|
+
step: number;
|
|
50
|
+
droppedSteps: number;
|
|
51
|
+
summary: string;
|
|
52
|
+
summary_length: number;
|
|
53
|
+
}) | (BaseSSEEvent & {
|
|
54
|
+
type: 'context_compress_failed';
|
|
55
|
+
step: number;
|
|
56
|
+
error: string;
|
|
57
|
+
}) | (BaseSSEEvent & {
|
|
58
|
+
type: 'domain_blocked';
|
|
59
|
+
domain: string;
|
|
60
|
+
reason: string;
|
|
61
|
+
attempt: number;
|
|
62
|
+
}) | (BaseSSEEvent & {
|
|
63
|
+
type: 'skill_skipped';
|
|
64
|
+
domain: string;
|
|
65
|
+
reason: string;
|
|
66
|
+
}) | (BaseSSEEvent & {
|
|
67
|
+
type: 'user_interjection_timeout';
|
|
68
|
+
step: number;
|
|
69
|
+
question: string;
|
|
70
|
+
}) | (BaseSSEEvent & {
|
|
71
|
+
type: 'ask_user';
|
|
72
|
+
step: number;
|
|
73
|
+
question: string;
|
|
74
|
+
}) | (BaseSSEEvent & {
|
|
75
|
+
type: 'user_response';
|
|
76
|
+
step: number;
|
|
77
|
+
text: string;
|
|
78
|
+
});
|
|
79
|
+
export type SSEEventType = SSEEvent['type'];
|
|
80
|
+
export {};
|
|
81
|
+
//# sourceMappingURL=api-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-types.d.ts","sourceRoot":"","sources":["../src/api-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// CONTRACT MIRROR — keep in sync with src/Frontend/src/lib/api-types.ts.
|
|
2
|
+
// Separate tsconfig roots block a shared module; Frontend declares LlmConfig
|
|
3
|
+
// inline + adds ApiErrorBody, Services imports LlmConfig from ./types.js.
|
|
4
|
+
// Any SSEEvent / CreateSession* / API_VERSION change must be mirrored in both.
|
|
5
|
+
export const API_VERSION = 1;
|
|
6
|
+
//# sourceMappingURL=api-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-types.js","sourceRoot":"","sources":["../src/api-types.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,6EAA6E;AAC7E,0EAA0E;AAC1E,+EAA+E;AAI/E,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -18,6 +18,9 @@ export declare const SCROLL_PIXELS = 500;
|
|
|
18
18
|
export declare const USER_RESPONSE_TIMEOUT_MS: number;
|
|
19
19
|
export declare const MAX_STEPS: number;
|
|
20
20
|
export declare const LLM_MAX_TOKENS: number;
|
|
21
|
+
export declare const MAX_STEPS_HARD_CEILING: number;
|
|
22
|
+
export declare const INTERJECTION_TIMEOUT_CANCEL: boolean;
|
|
23
|
+
export declare const STRICT_NONIDEMPOTENT_BAN: boolean;
|
|
21
24
|
export declare const USER_INTERJECTION_ENABLED: boolean;
|
|
22
25
|
export declare const MAX_INTERJECTIONS_PER_RUN = 20;
|
|
23
26
|
export declare const INTERJECTION_MIN_INTERVAL_MS = 2000;
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAO/C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYlD;AAED,MAAM,WAAW,WAAW;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAYD,wBAAgB,kBAAkB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAWhF;AAID,eAAO,MAAM,kBAAkB,QAAwD,CAAC;AACxF,eAAO,MAAM,mBAAmB,QAAyD,CAAC;AAC1F,eAAO,MAAM,mBAAmB,QAAyD,CAAC;AAC1F,eAAO,MAAM,cAAc,QAAqD,CAAC;AACjF,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,wBAAwB,QAAiE,CAAC;AACvG,eAAO,MAAM,SAAS,QAA8C,CAAC;AACrE,eAAO,MAAM,cAAc,QAAqD,CAAC;AAGjF,eAAO,MAAM,sBAAsB,QAA4D,CAAC;AAChG,eAAO,MAAM,2BAA2B,SAAqD,CAAC;AAC9F,eAAO,MAAM,wBAAwB,SAAkD,CAAC;AAGxF,eAAO,MAAM,yBAAyB,SAAkD,CAAC;AACzF,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAC5C,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AAClD,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAC7C,eAAO,MAAM,gCAAgC,OAAQ,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,cAAc,IAAI,WAAW,CAO5C;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,cAAc,IAAI,YAAY,CAO7C"}
|
package/dist/config.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { getAvailableProviders, getActiveProvider, getModel } from './llm.js';
|
|
2
1
|
import { logger } from './logger.js';
|
|
3
2
|
export function requireEnv(name) {
|
|
4
3
|
const value = process.env[name];
|
|
@@ -52,6 +51,10 @@ export const SCROLL_PIXELS = 500;
|
|
|
52
51
|
export const USER_RESPONSE_TIMEOUT_MS = parseInt(process.env.USER_RESPONSE_TIMEOUT_MS ?? '300000', 10);
|
|
53
52
|
export const MAX_STEPS = parseInt(process.env.MAX_STEPS ?? '50', 10);
|
|
54
53
|
export const LLM_MAX_TOKENS = parseInt(process.env.LLM_MAX_TOKENS ?? '1024', 10);
|
|
54
|
+
// Optional opt-in flags. Defaults preserve pre-flag behavior (see .env.example).
|
|
55
|
+
export const MAX_STEPS_HARD_CEILING = parseInt(process.env.MAX_STEPS_HARD_CEILING ?? '100', 10);
|
|
56
|
+
export const INTERJECTION_TIMEOUT_CANCEL = process.env.INTERJECTION_TIMEOUT_CANCEL === 'true';
|
|
57
|
+
export const STRICT_NONIDEMPOTENT_BAN = process.env.STRICT_NONIDEMPOTENT_BAN === 'true';
|
|
55
58
|
// User-interjection limits (always-on user chat feature).
|
|
56
59
|
export const USER_INTERJECTION_ENABLED = process.env.ENABLE_USER_INTERJECTION === 'true';
|
|
57
60
|
export const MAX_INTERJECTIONS_PER_RUN = 20;
|
|
@@ -67,15 +70,6 @@ export function getMinioConfig() {
|
|
|
67
70
|
};
|
|
68
71
|
}
|
|
69
72
|
export function validateConfig() {
|
|
70
|
-
const available = getAvailableProviders();
|
|
71
|
-
if (available.length === 0) {
|
|
72
|
-
logger.fatal('No AI providers available — set at least one provider API key');
|
|
73
|
-
process.exit(1);
|
|
74
|
-
}
|
|
75
|
-
logger.info({ providers: available.map((p) => p.provider) }, 'Available providers');
|
|
76
|
-
// Validate LLM_PROVIDER + API key at startup so we fail fast
|
|
77
|
-
const active = getActiveProvider();
|
|
78
|
-
logger.info({ provider: active.provider, model: getModel() }, 'Active provider');
|
|
79
73
|
return {
|
|
80
74
|
port: requireEnvInt('PORT'),
|
|
81
75
|
rateLimitMax: requireEnvInt('RATE_LIMIT_MAX'),
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export declare const IDEMPOTENCY_TTL_MS: number;
|
|
2
|
+
export declare const IDEMPOTENCY_MAX_KEY_LENGTH = 256;
|
|
3
|
+
export interface FingerprintInput {
|
|
4
|
+
prompt: string;
|
|
5
|
+
url?: string;
|
|
6
|
+
headless?: boolean;
|
|
7
|
+
skip_moderation?: boolean;
|
|
8
|
+
skip_postprocessing?: boolean;
|
|
9
|
+
llm_config?: {
|
|
10
|
+
provider: string;
|
|
11
|
+
model: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare function buildRequestFingerprint(input: FingerprintInput): string;
|
|
15
|
+
export declare function getIdempotencyCacheKey(clientIp: string, idempotencyKey: string): string;
|
|
16
|
+
export declare function normalizeIdempotencyKey(raw: unknown): string | undefined;
|
|
17
|
+
export interface PendingIdempotencyEntry<T> {
|
|
18
|
+
kind: 'pending';
|
|
19
|
+
fingerprint: string;
|
|
20
|
+
createdAt: number;
|
|
21
|
+
promise: Promise<T>;
|
|
22
|
+
resolve: (value: T) => void;
|
|
23
|
+
reject: (error: Error) => void;
|
|
24
|
+
}
|
|
25
|
+
export interface CompletedIdempotencyEntry<T> {
|
|
26
|
+
kind: 'completed';
|
|
27
|
+
fingerprint: string;
|
|
28
|
+
createdAt: number;
|
|
29
|
+
response: T;
|
|
30
|
+
}
|
|
31
|
+
export type IdempotencyCacheEntry<T> = PendingIdempotencyEntry<T> | CompletedIdempotencyEntry<T>;
|
|
32
|
+
export type IdempotencyLookupResult<T> = {
|
|
33
|
+
kind: 'miss';
|
|
34
|
+
} | {
|
|
35
|
+
kind: 'fingerprint_mismatch';
|
|
36
|
+
} | {
|
|
37
|
+
kind: 'pending_match';
|
|
38
|
+
promise: Promise<T>;
|
|
39
|
+
} | {
|
|
40
|
+
kind: 'completed_match';
|
|
41
|
+
response: T;
|
|
42
|
+
};
|
|
43
|
+
export declare function expirePendingIdempotency<T>(cache: Map<string, IdempotencyCacheEntry<T>>, now: number): void;
|
|
44
|
+
export declare function lookupIdempotency<T>(cache: Map<string, IdempotencyCacheEntry<T>>, cacheKey: string, fingerprint: string, now: number): IdempotencyLookupResult<T>;
|
|
45
|
+
export declare function reserveIdempotency<T>(cache: Map<string, IdempotencyCacheEntry<T>>, cacheKey: string, fingerprint: string, now: number): PendingIdempotencyEntry<T>;
|
|
46
|
+
export declare function completeIdempotency<T>(cache: Map<string, IdempotencyCacheEntry<T>>, cacheKey: string, reservation: PendingIdempotencyEntry<T>, response: T, now: number): void;
|
|
47
|
+
export declare function failIdempotency<T>(cache: Map<string, IdempotencyCacheEntry<T>>, cacheKey: string, reservation: PendingIdempotencyEntry<T>, error: Error): void;
|
|
48
|
+
//# sourceMappingURL=idempotency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.d.ts","sourceRoot":"","sources":["../src/idempotency.ts"],"names":[],"mappings":"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"}
|
|
@@ -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/index.d.ts
CHANGED
|
@@ -8,4 +8,5 @@ export { fillIframeFieldByTokens } from './skills/fill-iframe-field.js';
|
|
|
8
8
|
export type { FillIframeFieldResult } from './skills/fill-iframe-field.js';
|
|
9
9
|
export type { AgentAction, AgentActionType, AgentLoopResult, AgentProgress, AgentStep, CatalogSkill, CreateSessionRequest, DomainLesson, DomainSkillEntry, LlmConfig, LlmProvider, Session, SessionStatus, SkillMetadata, SkillOutput, SkillStep, TaskLesson, UserMessage, } from './types.js';
|
|
10
10
|
export { HttpError, LlmParseError } from './types.js';
|
|
11
|
+
export * from 'browserclaw';
|
|
11
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/F,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAExG,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E,YAAY,EACV,WAAW,EACX,eAAe,EACf,eAAe,EACf,aAAa,EACb,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,OAAO,EACP,aAAa,EACb,aAAa,EACb,WAAW,EACX,SAAS,EACT,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/F,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAExG,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC3D,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAE3E,YAAY,EACV,WAAW,EACX,eAAe,EACf,eAAe,EACf,aAAa,EACb,SAAS,EACT,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,WAAW,EACX,OAAO,EACP,aAAa,EACb,aAAa,EACb,WAAW,EACX,SAAS,EACT,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtD,cAAc,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -3,4 +3,5 @@ export { defaultAgentConfig } from './config.js';
|
|
|
3
3
|
export { runWithLlmConfig, getTokenUsage } from './llm.js';
|
|
4
4
|
export { fillIframeFieldByTokens } from './skills/fill-iframe-field.js';
|
|
5
5
|
export { HttpError, LlmParseError } from './types.js';
|
|
6
|
+
export * from 'browserclaw';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAG/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAuBxE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAG/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAuBxE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtD,cAAc,aAAa,CAAC"}
|
package/dist/llm.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { LlmConfig } from './types.js';
|
|
2
2
|
export declare function sanitizeErrorText(text: string): string;
|
|
3
|
+
export declare function extractProviderMessage(err: unknown): string | null;
|
|
4
|
+
export declare function isFailFastError(err: unknown): boolean;
|
|
3
5
|
export interface TokenUsage {
|
|
4
6
|
input: number;
|
|
5
7
|
output: number;
|
|
@@ -15,16 +17,6 @@ export declare const BYOK_PROVIDERS: Partial<Record<string, {
|
|
|
15
17
|
baseURL: string;
|
|
16
18
|
useMaxCompletionTokens: boolean;
|
|
17
19
|
}>>;
|
|
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
20
|
export interface LLMRequest {
|
|
29
21
|
system: string;
|
|
30
22
|
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":"
|
|
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,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAsBlE;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"}
|