agents 0.15.0 → 0.16.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-tool-types-VPsjVYL0.d.ts → agent-tool-types-NofdbL9X.d.ts} +57 -4
- package/dist/agent-tool-types.d.ts +1 -1
- package/dist/{agent-tools-BGpgfpJT.d.ts → agent-tools-DLquv-dp.d.ts} +2 -2
- package/dist/agent-tools.d.ts +1 -1
- package/dist/browser/ai.d.ts +126 -7
- package/dist/browser/ai.js +73 -29
- package/dist/browser/ai.js.map +1 -1
- package/dist/browser/index.d.ts +81 -69
- package/dist/browser/index.js +3 -2
- package/dist/browser/tanstack-ai.d.ts +13 -7
- package/dist/browser/tanstack-ai.js +18 -19
- package/dist/browser/tanstack-ai.js.map +1 -1
- package/dist/chat/index.d.ts +111 -5
- package/dist/chat/index.js +207 -35
- package/dist/chat/index.js.map +1 -1
- package/dist/chat-sdk/index.d.ts +1 -1
- package/dist/{classPrivateFieldGet2-Beqsfu2Z.js → classPrivateFieldGet2-CZ7QjTXN.js} +5 -5
- package/dist/{classPrivateMethodInitSpec-B5ko1s2R.js → classPrivateMethodInitSpec-D-0__zd9.js} +2 -2
- package/dist/client.d.ts +19 -2
- package/dist/client.js +31 -11
- package/dist/client.js.map +1 -1
- package/dist/{compaction-helpers-BEUILPss.d.ts → compaction-helpers-DVcu5lPN.d.ts} +91 -12
- package/dist/connector-D6yYzYHg.js +1080 -0
- package/dist/connector-D6yYzYHg.js.map +1 -0
- package/dist/connector-DXursxV5.d.ts +340 -0
- package/dist/experimental/memory/session/index.d.ts +75 -12
- package/dist/experimental/memory/session/index.js +226 -21
- package/dist/experimental/memory/session/index.js.map +1 -1
- package/dist/experimental/memory/utils/index.d.ts +2 -2
- package/dist/{index-CPe1OtI0.d.ts → index-B7IbEeze.d.ts} +32 -1
- package/dist/index.d.ts +8 -2
- package/dist/index.js +116 -45
- package/dist/index.js.map +1 -1
- package/dist/mcp/client.d.ts +1 -1
- package/dist/mcp/index.d.ts +1 -1
- package/dist/mcp/index.js +1 -1
- package/dist/mcp/index.js.map +1 -1
- package/dist/observability/index.d.ts +1 -1
- package/dist/react.d.ts +12 -1
- package/dist/react.js +101 -30
- package/dist/react.js.map +1 -1
- package/dist/{retries-CF_HKSlJ.d.ts → retries-CwlpAGet.d.ts} +35 -5
- package/dist/retries.d.ts +9 -5
- package/dist/retries.js +87 -1
- package/dist/retries.js.map +1 -1
- package/dist/serializable.d.ts +1 -1
- package/dist/skills/index.js +2 -2
- package/dist/sub-routing.d.ts +1 -1
- package/dist/workflows.d.ts +1 -1
- package/package.json +10 -10
- package/dist/shared-4CAYLCTO.d.ts +0 -34
- package/dist/shared-wyII629d.js +0 -432
- package/dist/shared-wyII629d.js.map +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { n as AgentEmail } from "./internal_context-Dg4Cgjcu.js";
|
|
2
|
-
import { t as RetryOptions } from "./retries-
|
|
2
|
+
import { t as RetryOptions } from "./retries-CwlpAGet.js";
|
|
3
3
|
import {
|
|
4
4
|
n as Observability,
|
|
5
5
|
r as ObservabilityEvent,
|
|
6
6
|
s as MCPObservabilityEvent
|
|
7
|
-
} from "./index-
|
|
7
|
+
} from "./index-B7IbEeze.js";
|
|
8
8
|
import { t as AgentMcpOAuthProvider } from "./do-oauth-client-provider-D4ZwyBDu.js";
|
|
9
9
|
import {
|
|
10
10
|
_ as WorkflowPage,
|
|
@@ -2343,7 +2343,15 @@ interface AgentStaticOptions {
|
|
|
2343
2343
|
/**
|
|
2344
2344
|
* Maximum age in milliseconds of an unmanaged interrupted-fiber row before
|
|
2345
2345
|
* recovery stops retrying a repeatedly-throwing `onFiberRecovered()` hook
|
|
2346
|
-
* and discards the row
|
|
2346
|
+
* and discards the row (emitting `fiber:recovery:skipped` with reason
|
|
2347
|
+
* `max_age_exceeded`). Defaults to 24h.
|
|
2348
|
+
*
|
|
2349
|
+
* Set to `0` to retain rows indefinitely. NOTE: with `0`, a hook that keeps
|
|
2350
|
+
* throwing is retried forever — the recovery alarm backs off exponentially
|
|
2351
|
+
* (capped at 5 minutes) so it is not a busy-loop, but the Durable Object
|
|
2352
|
+
* stays warm (never idle-evicts) for as long as the un-recoverable row
|
|
2353
|
+
* exists. Prefer a finite age unless you intend to inspect/clear such rows
|
|
2354
|
+
* yourself.
|
|
2347
2355
|
*/
|
|
2348
2356
|
fiberRecoveryMaxAgeMs?: number;
|
|
2349
2357
|
/**
|
|
@@ -2467,6 +2475,13 @@ declare class Agent<
|
|
|
2467
2475
|
private _managedFiberTerminalWaiters;
|
|
2468
2476
|
/** @internal Prevents re-entrant recovery from overlapping alarm ticks. */
|
|
2469
2477
|
private _runFiberRecoveryInProgress;
|
|
2478
|
+
/**
|
|
2479
|
+
* @internal Consecutive runFiber-recovery scans that made NO forward progress
|
|
2480
|
+
* while work was still pending. Drives the exponential backoff of the
|
|
2481
|
+
* recovery follow-up alarm so a repeatedly-throwing recovery hook does not
|
|
2482
|
+
* busy-loop the DO. Reset to 0 whenever a scan recovers anything.
|
|
2483
|
+
*/
|
|
2484
|
+
private _recoveryNoProgressScans;
|
|
2470
2485
|
/** @internal Single-flight background recovery for parent agent-tool rows. */
|
|
2471
2486
|
private _agentToolRunRecoveryPromise;
|
|
2472
2487
|
private _ParentClass;
|
|
@@ -3296,6 +3311,18 @@ declare class Agent<
|
|
|
3296
3311
|
targetPath: ReadonlyArray<AgentPathStep>
|
|
3297
3312
|
): Promise<void>;
|
|
3298
3313
|
private _executeScheduleCallback;
|
|
3314
|
+
/**
|
|
3315
|
+
* Whether any runFiber recovery work is still outstanding: orphaned
|
|
3316
|
+
* `cf_agents_runs` rows left by a dead process (excluding fibers currently
|
|
3317
|
+
* executing in memory, which already hold a keepAlive ref) or managed
|
|
3318
|
+
* ledger fibers stuck in a non-terminal state with no live run row.
|
|
3319
|
+
*
|
|
3320
|
+
* Used by `_scheduleNextAlarm` to arm a follow-up alarm so multi-pass
|
|
3321
|
+
* recovery (e.g. after a scan-deadline yield, or while retrying a throwing
|
|
3322
|
+
* recovery hook) resumes instead of starving.
|
|
3323
|
+
* @internal
|
|
3324
|
+
*/
|
|
3325
|
+
private _hasPendingFiberRecovery;
|
|
3299
3326
|
private _scheduleNextAlarm;
|
|
3300
3327
|
/**
|
|
3301
3328
|
* Override PartyServer's onAlarm hook as a no-op.
|
|
@@ -3861,6 +3888,32 @@ declare class Agent<
|
|
|
3861
3888
|
* callers should treat it as fire-and-forget.
|
|
3862
3889
|
*/
|
|
3863
3890
|
destroy(): Promise<void>;
|
|
3891
|
+
/**
|
|
3892
|
+
* @internal Defer this agent's destruction to its own alarm invocation
|
|
3893
|
+
* instead of running it inline (#1625).
|
|
3894
|
+
*
|
|
3895
|
+
* `destroy()` is a multi-step I/O sequence (drop tables, delete alarm,
|
|
3896
|
+
* delete all storage, dispose connections). Running it on the `waitUntil`
|
|
3897
|
+
* of a request whose client has already disconnected — the MCP
|
|
3898
|
+
* Streamable-HTTP session-DELETE path — gives it little to no
|
|
3899
|
+
* post-invocation grace, so the runtime routinely cancels it mid-flight.
|
|
3900
|
+
* This method instead performs two fast storage writes (a durable
|
|
3901
|
+
* "condemned" marker and an immediate alarm) that the caller can await
|
|
3902
|
+
* before responding; the alarm then fires as a fresh invocation with its
|
|
3903
|
+
* own full execution budget and runs `destroy()` there. If even that
|
|
3904
|
+
* invocation is interrupted, the marker survives and the next wake
|
|
3905
|
+
* finishes teardown — see the `alarm()` preamble.
|
|
3906
|
+
*
|
|
3907
|
+
* Unlike `destroy()`, this method does not abort the isolate, so RPC
|
|
3908
|
+
* callers don't need to swallow an abort error.
|
|
3909
|
+
*/
|
|
3910
|
+
_cf_scheduleDestroy(): Promise<void>;
|
|
3911
|
+
/**
|
|
3912
|
+
* Whether a (deferred or interrupted) destroy is pending. Reads the
|
|
3913
|
+
* durable marker directly — the in-memory `_isFacet` flag may not be
|
|
3914
|
+
* hydrated yet at the call sites, but facets never write the marker.
|
|
3915
|
+
*/
|
|
3916
|
+
private _hasPendingDestroy;
|
|
3864
3917
|
/** @internal Drop every internal Agents SDK table during top-level destroy. */
|
|
3865
3918
|
protected _dropInternalTablesForDestroy(): void;
|
|
3866
3919
|
/**
|
|
@@ -4794,4 +4847,4 @@ export {
|
|
|
4794
4847
|
MCPServer as z,
|
|
4795
4848
|
WorkerTransport as zt
|
|
4796
4849
|
};
|
|
4797
|
-
//# sourceMappingURL=agent-tool-types-
|
|
4850
|
+
//# sourceMappingURL=agent-tool-types-NofdbL9X.d.ts.map
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
s as AgentToolInterruptedReason,
|
|
17
17
|
t as AgentToolChildAdapter,
|
|
18
18
|
u as AgentToolRunInspection
|
|
19
|
-
} from "./agent-tool-types-
|
|
19
|
+
} from "./agent-tool-types-NofdbL9X.js";
|
|
20
20
|
export {
|
|
21
21
|
AgentToolChildAdapter,
|
|
22
22
|
AgentToolDisplayMetadata,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
a as AgentToolEventState,
|
|
3
3
|
i as AgentToolEventMessage
|
|
4
|
-
} from "./agent-tool-types-
|
|
4
|
+
} from "./agent-tool-types-NofdbL9X.js";
|
|
5
5
|
|
|
6
6
|
//#region src/chat/agent-tools.d.ts
|
|
7
7
|
declare function createAgentToolEventState(): AgentToolEventState;
|
|
@@ -11,4 +11,4 @@ declare function applyAgentToolEvent(
|
|
|
11
11
|
): AgentToolEventState;
|
|
12
12
|
//#endregion
|
|
13
13
|
export { createAgentToolEventState as n, applyAgentToolEvent as t };
|
|
14
|
-
//# sourceMappingURL=agent-tools-
|
|
14
|
+
//# sourceMappingURL=agent-tools-DLquv-dp.d.ts.map
|
package/dist/agent-tools.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
s as AgentToolInterruptedReason,
|
|
17
17
|
t as AgentToolChildAdapter,
|
|
18
18
|
u as AgentToolRunInspection
|
|
19
|
-
} from "./agent-tool-types-
|
|
19
|
+
} from "./agent-tool-types-NofdbL9X.js";
|
|
20
20
|
import { Tool } from "ai";
|
|
21
21
|
|
|
22
22
|
//#region src/agent-tools.d.ts
|
package/dist/browser/ai.d.ts
CHANGED
|
@@ -1,21 +1,133 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
c as BrowserSessionStore,
|
|
3
|
+
f as BrowserBinding,
|
|
4
|
+
r as BrowserConnectorSessionOptions,
|
|
5
|
+
t as BrowserConnector
|
|
6
|
+
} from "../connector-DXursxV5.js";
|
|
2
7
|
import { ToolSet } from "ai";
|
|
8
|
+
import { CodemodeRuntimeHandle } from "@cloudflare/codemode";
|
|
3
9
|
|
|
4
10
|
//#region src/browser/ai.d.ts
|
|
11
|
+
interface CreateBrowserToolsOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Durable Object state. The codemode runtime that backs the browser tool
|
|
14
|
+
* lives in a facet of this DO, and browser session ids are stored in its
|
|
15
|
+
* storage — so the tool must be created from inside a Durable Object
|
|
16
|
+
* (e.g. an Agent).
|
|
17
|
+
*
|
|
18
|
+
* The worker must export the `CodemodeRuntime` class (the
|
|
19
|
+
* `@cloudflare/codemode/vite` plugin does this automatically, or add
|
|
20
|
+
* `export { CodemodeRuntime } from "@cloudflare/codemode"` to your entry).
|
|
21
|
+
*/
|
|
22
|
+
ctx: DurableObjectState;
|
|
23
|
+
/**
|
|
24
|
+
* WorkerLoader binding for sandboxed code execution.
|
|
25
|
+
*
|
|
26
|
+
* Requires `"worker_loaders": [{ "binding": "LOADER" }]` in wrangler.jsonc.
|
|
27
|
+
*/
|
|
28
|
+
loader: WorkerLoader;
|
|
29
|
+
/**
|
|
30
|
+
* Browser Rendering binding (Fetcher).
|
|
31
|
+
*
|
|
32
|
+
* This is the primary way to connect — works both locally in
|
|
33
|
+
* `wrangler dev` and when deployed to Cloudflare Workers.
|
|
34
|
+
*
|
|
35
|
+
* Requires `"browser": { "binding": "BROWSER" }` in wrangler.jsonc.
|
|
36
|
+
*/
|
|
37
|
+
browser?: BrowserBinding;
|
|
38
|
+
/**
|
|
39
|
+
* Optional CDP base URL override (e.g. `http://localhost:9222`).
|
|
40
|
+
*
|
|
41
|
+
* Use when connecting to a manually managed Chrome instance or
|
|
42
|
+
* a remote CDP endpoint behind a tunnel.
|
|
43
|
+
*/
|
|
44
|
+
cdpUrl?: string;
|
|
45
|
+
/**
|
|
46
|
+
* Headers to send with CDP URL discovery requests.
|
|
47
|
+
* Useful when the CDP endpoint requires authentication
|
|
48
|
+
* (e.g. Cloudflare Access headers).
|
|
49
|
+
*/
|
|
50
|
+
cdpHeaders?: Record<string, string>;
|
|
51
|
+
/**
|
|
52
|
+
* Browser session lifecycle (binding-backed only). Defaults to one fresh
|
|
53
|
+
* session per codemode execution (`one-shot`).
|
|
54
|
+
*/
|
|
55
|
+
session?: BrowserConnectorSessionOptions;
|
|
56
|
+
/**
|
|
57
|
+
* Durable store for Browser Run session ids. Defaults to a
|
|
58
|
+
* {@link DurableBrowserSessionStore} over `ctx.storage`.
|
|
59
|
+
*/
|
|
60
|
+
store?: BrowserSessionStore;
|
|
61
|
+
/**
|
|
62
|
+
* Sandbox execution timeout in milliseconds. Defaults to 30000 (30s).
|
|
63
|
+
* Also used as the per-CDP-command timeout.
|
|
64
|
+
*/
|
|
65
|
+
timeout?: number;
|
|
66
|
+
/**
|
|
67
|
+
* Codemode runtime name — the durable identity of the tool's executions
|
|
68
|
+
* and snippets. Defaults to `"browser"`.
|
|
69
|
+
*/
|
|
70
|
+
name?: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The browser tool's moving parts, for hosts that need more than the tools:
|
|
74
|
+
*
|
|
75
|
+
* - `runtime` — the codemode runtime handle (approve/reject paused runs,
|
|
76
|
+
* `expirePaused`, audit via `executions()`, snippets).
|
|
77
|
+
* - `connector` — host-side session helpers: `sessionInfo()`,
|
|
78
|
+
* `closeSession()`, and `sweep()` for a recurring cleanup task.
|
|
79
|
+
* - `tools` — what `createBrowserTools` returns.
|
|
80
|
+
*/
|
|
81
|
+
interface BrowserRuntime {
|
|
82
|
+
runtime: CodemodeRuntimeHandle;
|
|
83
|
+
connector: BrowserConnector;
|
|
84
|
+
tools: ToolSet;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Create the browser codemode runtime: the `browser_execute` tool plus the
|
|
88
|
+
* runtime handle and connector for host-side wiring (approvals, session info,
|
|
89
|
+
* sweeps).
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* ```ts
|
|
93
|
+
* export class MyAgent extends Agent<Env> {
|
|
94
|
+
* get browser() {
|
|
95
|
+
* return createBrowserRuntime({
|
|
96
|
+
* ctx: this.ctx,
|
|
97
|
+
* browser: this.env.BROWSER,
|
|
98
|
+
* loader: this.env.LOADER,
|
|
99
|
+
* session: { mode: "dynamic" }
|
|
100
|
+
* });
|
|
101
|
+
* }
|
|
102
|
+
*
|
|
103
|
+
* @callable()
|
|
104
|
+
* async closeBrowserSession() {
|
|
105
|
+
* await this.browser.connector.closeSession();
|
|
106
|
+
* }
|
|
107
|
+
* }
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
declare function createBrowserRuntime(
|
|
111
|
+
options: CreateBrowserToolsOptions
|
|
112
|
+
): BrowserRuntime;
|
|
5
113
|
/**
|
|
6
114
|
* Create AI SDK tools for browser automation via CDP code mode.
|
|
7
115
|
*
|
|
8
|
-
* Returns a `ToolSet` with `
|
|
9
|
-
*
|
|
116
|
+
* Returns a `ToolSet` with a single durable `browser_execute` tool backed by
|
|
117
|
+
* a codemode runtime: the model writes TypeScript against the `cdp` connector
|
|
118
|
+
* (`cdp.send`, `cdp.attachToTarget`, `cdp.spec`, …), executions are recorded
|
|
119
|
+
* for abort-and-replay, and browser sessions survive pauses.
|
|
10
120
|
*
|
|
11
121
|
* @example
|
|
12
122
|
* ```ts
|
|
13
123
|
* import { createBrowserTools } from "agents/browser/ai";
|
|
14
124
|
* import { generateText } from "ai";
|
|
15
125
|
*
|
|
126
|
+
* // inside a Durable Object / Agent:
|
|
16
127
|
* const browserTools = createBrowserTools({
|
|
17
|
-
*
|
|
18
|
-
*
|
|
128
|
+
* ctx: this.ctx,
|
|
129
|
+
* browser: this.env.BROWSER,
|
|
130
|
+
* loader: this.env.LOADER,
|
|
19
131
|
* });
|
|
20
132
|
*
|
|
21
133
|
* const result = await generateText({
|
|
@@ -25,7 +137,14 @@ import { ToolSet } from "ai";
|
|
|
25
137
|
* });
|
|
26
138
|
* ```
|
|
27
139
|
*/
|
|
28
|
-
declare function createBrowserTools(
|
|
140
|
+
declare function createBrowserTools(
|
|
141
|
+
options: CreateBrowserToolsOptions
|
|
142
|
+
): ToolSet;
|
|
29
143
|
//#endregion
|
|
30
|
-
export {
|
|
144
|
+
export {
|
|
145
|
+
BrowserRuntime,
|
|
146
|
+
CreateBrowserToolsOptions,
|
|
147
|
+
createBrowserRuntime,
|
|
148
|
+
createBrowserTools
|
|
149
|
+
};
|
|
31
150
|
//# sourceMappingURL=ai.d.ts.map
|
package/dist/browser/ai.js
CHANGED
|
@@ -1,21 +1,85 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { z } from "zod";
|
|
1
|
+
import { i as DurableBrowserSessionStore, t as BrowserConnector } from "../connector-D6yYzYHg.js";
|
|
2
|
+
import { DynamicWorkerExecutor, createCodemodeRuntime, truncateResult } from "@cloudflare/codemode";
|
|
4
3
|
//#region src/browser/ai.ts
|
|
4
|
+
let didWarnExperimental = false;
|
|
5
|
+
function connectorOptions(options) {
|
|
6
|
+
if (options.cdpUrl) return {
|
|
7
|
+
cdpUrl: options.cdpUrl,
|
|
8
|
+
cdpHeaders: options.cdpHeaders,
|
|
9
|
+
timeout: options.timeout
|
|
10
|
+
};
|
|
11
|
+
if (!options.browser) throw new Error("Either 'browser' (Fetcher binding) or 'cdpUrl' must be provided");
|
|
12
|
+
return {
|
|
13
|
+
browser: options.browser,
|
|
14
|
+
store: options.store ?? new DurableBrowserSessionStore(options.ctx.storage),
|
|
15
|
+
session: options.session,
|
|
16
|
+
timeout: options.timeout
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Create the browser codemode runtime: the `browser_execute` tool plus the
|
|
21
|
+
* runtime handle and connector for host-side wiring (approvals, session info,
|
|
22
|
+
* sweeps).
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* export class MyAgent extends Agent<Env> {
|
|
27
|
+
* get browser() {
|
|
28
|
+
* return createBrowserRuntime({
|
|
29
|
+
* ctx: this.ctx,
|
|
30
|
+
* browser: this.env.BROWSER,
|
|
31
|
+
* loader: this.env.LOADER,
|
|
32
|
+
* session: { mode: "dynamic" }
|
|
33
|
+
* });
|
|
34
|
+
* }
|
|
35
|
+
*
|
|
36
|
+
* @callable()
|
|
37
|
+
* async closeBrowserSession() {
|
|
38
|
+
* await this.browser.connector.closeSession();
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
function createBrowserRuntime(options) {
|
|
44
|
+
if (!didWarnExperimental) {
|
|
45
|
+
didWarnExperimental = true;
|
|
46
|
+
console.warn("[agents/browser] Browser tools are experimental and may change in a future release.");
|
|
47
|
+
}
|
|
48
|
+
const connector = new BrowserConnector(options.ctx, connectorOptions(options));
|
|
49
|
+
const runtime = createCodemodeRuntime({
|
|
50
|
+
ctx: options.ctx,
|
|
51
|
+
executor: new DynamicWorkerExecutor({
|
|
52
|
+
loader: options.loader,
|
|
53
|
+
timeout: options.timeout
|
|
54
|
+
}),
|
|
55
|
+
connectors: [connector],
|
|
56
|
+
name: options.name ?? "browser",
|
|
57
|
+
transformResult: truncateResult
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
runtime,
|
|
61
|
+
connector,
|
|
62
|
+
tools: { browser_execute: runtime.tool() }
|
|
63
|
+
};
|
|
64
|
+
}
|
|
5
65
|
/**
|
|
6
66
|
* Create AI SDK tools for browser automation via CDP code mode.
|
|
7
67
|
*
|
|
8
|
-
* Returns a `ToolSet` with `
|
|
9
|
-
*
|
|
68
|
+
* Returns a `ToolSet` with a single durable `browser_execute` tool backed by
|
|
69
|
+
* a codemode runtime: the model writes TypeScript against the `cdp` connector
|
|
70
|
+
* (`cdp.send`, `cdp.attachToTarget`, `cdp.spec`, …), executions are recorded
|
|
71
|
+
* for abort-and-replay, and browser sessions survive pauses.
|
|
10
72
|
*
|
|
11
73
|
* @example
|
|
12
74
|
* ```ts
|
|
13
75
|
* import { createBrowserTools } from "agents/browser/ai";
|
|
14
76
|
* import { generateText } from "ai";
|
|
15
77
|
*
|
|
78
|
+
* // inside a Durable Object / Agent:
|
|
16
79
|
* const browserTools = createBrowserTools({
|
|
17
|
-
*
|
|
18
|
-
*
|
|
80
|
+
* ctx: this.ctx,
|
|
81
|
+
* browser: this.env.BROWSER,
|
|
82
|
+
* loader: this.env.LOADER,
|
|
19
83
|
* });
|
|
20
84
|
*
|
|
21
85
|
* const result = await generateText({
|
|
@@ -26,29 +90,9 @@ import { z } from "zod";
|
|
|
26
90
|
* ```
|
|
27
91
|
*/
|
|
28
92
|
function createBrowserTools(options) {
|
|
29
|
-
|
|
30
|
-
return {
|
|
31
|
-
browser_search: tool({
|
|
32
|
-
description: SEARCH_DESCRIPTION,
|
|
33
|
-
inputSchema: z.object({ code: z.string().describe("JavaScript async arrow function that queries the CDP spec") }),
|
|
34
|
-
execute: async ({ code }) => {
|
|
35
|
-
const result = await handlers.search(code);
|
|
36
|
-
if (result.isError) throw new Error(result.text);
|
|
37
|
-
return result.text;
|
|
38
|
-
}
|
|
39
|
-
}),
|
|
40
|
-
browser_execute: tool({
|
|
41
|
-
description: EXECUTE_DESCRIPTION,
|
|
42
|
-
inputSchema: z.object({ code: z.string().describe("JavaScript async arrow function that uses the cdp helper") }),
|
|
43
|
-
execute: async ({ code }) => {
|
|
44
|
-
const result = await handlers.execute(code);
|
|
45
|
-
if (result.isError) throw new Error(result.text);
|
|
46
|
-
return result.text;
|
|
47
|
-
}
|
|
48
|
-
})
|
|
49
|
-
};
|
|
93
|
+
return createBrowserRuntime(options).tools;
|
|
50
94
|
}
|
|
51
95
|
//#endregion
|
|
52
|
-
export { createBrowserTools };
|
|
96
|
+
export { createBrowserRuntime, createBrowserTools };
|
|
53
97
|
|
|
54
98
|
//# sourceMappingURL=ai.js.map
|
package/dist/browser/ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","names":[],"sources":["../../src/browser/ai.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"ai.js","names":[],"sources":["../../src/browser/ai.ts"],"sourcesContent":["import type { ToolSet } from \"ai\";\nimport {\n createCodemodeRuntime,\n DynamicWorkerExecutor,\n truncateResult,\n type CodemodeRuntimeHandle\n} from \"@cloudflare/codemode\";\nimport type { BrowserBinding } from \"./browser-run\";\nimport {\n BrowserConnector,\n type BrowserConnectorOptions,\n type BrowserConnectorSessionOptions\n} from \"./connector\";\nimport {\n DurableBrowserSessionStore,\n type BrowserSessionStore\n} from \"./session-manager\";\n\nexport interface CreateBrowserToolsOptions {\n /**\n * Durable Object state. The codemode runtime that backs the browser tool\n * lives in a facet of this DO, and browser session ids are stored in its\n * storage — so the tool must be created from inside a Durable Object\n * (e.g. an Agent).\n *\n * The worker must export the `CodemodeRuntime` class (the\n * `@cloudflare/codemode/vite` plugin does this automatically, or add\n * `export { CodemodeRuntime } from \"@cloudflare/codemode\"` to your entry).\n */\n ctx: DurableObjectState;\n\n /**\n * WorkerLoader binding for sandboxed code execution.\n *\n * Requires `\"worker_loaders\": [{ \"binding\": \"LOADER\" }]` in wrangler.jsonc.\n */\n loader: WorkerLoader;\n\n /**\n * Browser Rendering binding (Fetcher).\n *\n * This is the primary way to connect — works both locally in\n * `wrangler dev` and when deployed to Cloudflare Workers.\n *\n * Requires `\"browser\": { \"binding\": \"BROWSER\" }` in wrangler.jsonc.\n */\n browser?: BrowserBinding;\n\n /**\n * Optional CDP base URL override (e.g. `http://localhost:9222`).\n *\n * Use when connecting to a manually managed Chrome instance or\n * a remote CDP endpoint behind a tunnel.\n */\n cdpUrl?: string;\n\n /**\n * Headers to send with CDP URL discovery requests.\n * Useful when the CDP endpoint requires authentication\n * (e.g. Cloudflare Access headers).\n */\n cdpHeaders?: Record<string, string>;\n\n /**\n * Browser session lifecycle (binding-backed only). Defaults to one fresh\n * session per codemode execution (`one-shot`).\n */\n session?: BrowserConnectorSessionOptions;\n\n /**\n * Durable store for Browser Run session ids. Defaults to a\n * {@link DurableBrowserSessionStore} over `ctx.storage`.\n */\n store?: BrowserSessionStore;\n\n /**\n * Sandbox execution timeout in milliseconds. Defaults to 30000 (30s).\n * Also used as the per-CDP-command timeout.\n */\n timeout?: number;\n\n /**\n * Codemode runtime name — the durable identity of the tool's executions\n * and snippets. Defaults to `\"browser\"`.\n */\n name?: string;\n}\n\n/**\n * The browser tool's moving parts, for hosts that need more than the tools:\n *\n * - `runtime` — the codemode runtime handle (approve/reject paused runs,\n * `expirePaused`, audit via `executions()`, snippets).\n * - `connector` — host-side session helpers: `sessionInfo()`,\n * `closeSession()`, and `sweep()` for a recurring cleanup task.\n * - `tools` — what `createBrowserTools` returns.\n */\nexport interface BrowserRuntime {\n runtime: CodemodeRuntimeHandle;\n connector: BrowserConnector;\n tools: ToolSet;\n}\n\nlet didWarnExperimental = false;\n\nfunction connectorOptions(\n options: CreateBrowserToolsOptions\n): BrowserConnectorOptions {\n if (options.cdpUrl) {\n return {\n cdpUrl: options.cdpUrl,\n cdpHeaders: options.cdpHeaders,\n timeout: options.timeout\n };\n }\n if (!options.browser) {\n throw new Error(\n \"Either 'browser' (Fetcher binding) or 'cdpUrl' must be provided\"\n );\n }\n return {\n browser: options.browser,\n store: options.store ?? new DurableBrowserSessionStore(options.ctx.storage),\n session: options.session,\n timeout: options.timeout\n };\n}\n\n/**\n * Create the browser codemode runtime: the `browser_execute` tool plus the\n * runtime handle and connector for host-side wiring (approvals, session info,\n * sweeps).\n *\n * @example\n * ```ts\n * export class MyAgent extends Agent<Env> {\n * get browser() {\n * return createBrowserRuntime({\n * ctx: this.ctx,\n * browser: this.env.BROWSER,\n * loader: this.env.LOADER,\n * session: { mode: \"dynamic\" }\n * });\n * }\n *\n * @callable()\n * async closeBrowserSession() {\n * await this.browser.connector.closeSession();\n * }\n * }\n * ```\n */\nexport function createBrowserRuntime(\n options: CreateBrowserToolsOptions\n): BrowserRuntime {\n if (!didWarnExperimental) {\n didWarnExperimental = true;\n console.warn(\n \"[agents/browser] Browser tools are experimental and may change in a future release.\"\n );\n }\n\n const connector = new BrowserConnector(\n options.ctx,\n connectorOptions(options)\n );\n const runtime = createCodemodeRuntime({\n ctx: options.ctx,\n executor: new DynamicWorkerExecutor({\n loader: options.loader,\n timeout: options.timeout\n }),\n connectors: [connector],\n name: options.name ?? \"browser\",\n transformResult: truncateResult\n });\n\n return {\n runtime,\n connector,\n tools: { browser_execute: runtime.tool() }\n };\n}\n\n/**\n * Create AI SDK tools for browser automation via CDP code mode.\n *\n * Returns a `ToolSet` with a single durable `browser_execute` tool backed by\n * a codemode runtime: the model writes TypeScript against the `cdp` connector\n * (`cdp.send`, `cdp.attachToTarget`, `cdp.spec`, …), executions are recorded\n * for abort-and-replay, and browser sessions survive pauses.\n *\n * @example\n * ```ts\n * import { createBrowserTools } from \"agents/browser/ai\";\n * import { generateText } from \"ai\";\n *\n * // inside a Durable Object / Agent:\n * const browserTools = createBrowserTools({\n * ctx: this.ctx,\n * browser: this.env.BROWSER,\n * loader: this.env.LOADER,\n * });\n *\n * const result = await generateText({\n * model,\n * tools: { ...browserTools, ...otherTools },\n * messages,\n * });\n * ```\n */\nexport function createBrowserTools(\n options: CreateBrowserToolsOptions\n): ToolSet {\n return createBrowserRuntime(options).tools;\n}\n"],"mappings":";;;AAuGA,IAAI,sBAAsB;AAE1B,SAAS,iBACP,SACyB;CACzB,IAAI,QAAQ,QACV,OAAO;EACL,QAAQ,QAAQ;EAChB,YAAY,QAAQ;EACpB,SAAS,QAAQ;CACnB;CAEF,IAAI,CAAC,QAAQ,SACX,MAAM,IAAI,MACR,iEACF;CAEF,OAAO;EACL,SAAS,QAAQ;EACjB,OAAO,QAAQ,SAAS,IAAI,2BAA2B,QAAQ,IAAI,OAAO;EAC1E,SAAS,QAAQ;EACjB,SAAS,QAAQ;CACnB;AACF;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,SAAgB,qBACd,SACgB;CAChB,IAAI,CAAC,qBAAqB;EACxB,sBAAsB;EACtB,QAAQ,KACN,qFACF;CACF;CAEA,MAAM,YAAY,IAAI,iBACpB,QAAQ,KACR,iBAAiB,OAAO,CAC1B;CACA,MAAM,UAAU,sBAAsB;EACpC,KAAK,QAAQ;EACb,UAAU,IAAI,sBAAsB;GAClC,QAAQ,QAAQ;GAChB,SAAS,QAAQ;EACnB,CAAC;EACD,YAAY,CAAC,SAAS;EACtB,MAAM,QAAQ,QAAQ;EACtB,iBAAiB;CACnB,CAAC;CAED,OAAO;EACL;EACA;EACA,OAAO,EAAE,iBAAiB,QAAQ,KAAK,EAAE;CAC3C;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,SAAgB,mBACd,SACS;CACT,OAAO,qBAAqB,OAAO,CAAC,CAAC;AACvC"}
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -1,82 +1,94 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
C as CdpSendOptions,
|
|
3
|
+
S as CdpAttachOptions,
|
|
4
|
+
T as connectUrl,
|
|
5
|
+
_ as connectBrowser,
|
|
6
|
+
a as BrowserConnectorSweepResult,
|
|
7
|
+
b as deleteBrowserSession,
|
|
8
|
+
c as BrowserSessionStore,
|
|
9
|
+
d as StoredBrowserSession,
|
|
10
|
+
f as BrowserBinding,
|
|
11
|
+
g as ConnectBrowserOptions,
|
|
12
|
+
h as BrowserTargetInfo,
|
|
13
|
+
i as BrowserConnectorSweepOptions,
|
|
14
|
+
l as DEFAULT_SWEEP_IDLE_MS,
|
|
15
|
+
m as BrowserSessionInfo,
|
|
16
|
+
n as BrowserConnectorOptions,
|
|
17
|
+
o as DEFAULT_EXEC_SWEEP_IDLE_MS,
|
|
18
|
+
p as BrowserRenderingError,
|
|
19
|
+
r as BrowserConnectorSessionOptions,
|
|
20
|
+
s as BrowserSessionLock,
|
|
21
|
+
t as BrowserConnector,
|
|
22
|
+
u as DurableBrowserSessionStore,
|
|
23
|
+
v as connectBrowserSession,
|
|
24
|
+
w as CdpSession,
|
|
25
|
+
x as listBrowserTargets,
|
|
26
|
+
y as createBrowserSession
|
|
27
|
+
} from "../connector-DXursxV5.js";
|
|
28
|
+
import { CodemodeRuntime } from "@cloudflare/codemode";
|
|
8
29
|
|
|
9
|
-
//#region src/browser/
|
|
10
|
-
interface
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
30
|
+
//#region src/browser/spec.d.ts
|
|
31
|
+
interface SearchableCdpSpec {
|
|
32
|
+
domains: Array<{
|
|
33
|
+
name: string;
|
|
34
|
+
description?: string;
|
|
35
|
+
commands: Array<{
|
|
36
|
+
name: string;
|
|
37
|
+
method: string;
|
|
38
|
+
description?: string;
|
|
39
|
+
}>;
|
|
40
|
+
events: Array<{
|
|
41
|
+
name: string;
|
|
42
|
+
event: string;
|
|
43
|
+
description?: string;
|
|
44
|
+
}>;
|
|
45
|
+
types: Array<{
|
|
46
|
+
id: string;
|
|
47
|
+
name: string;
|
|
48
|
+
description?: string;
|
|
49
|
+
}>;
|
|
50
|
+
}>;
|
|
14
51
|
}
|
|
15
|
-
interface
|
|
16
|
-
|
|
17
|
-
|
|
52
|
+
interface CdpSpecSource {
|
|
53
|
+
/** Browser Rendering binding (Fetcher) — used in production */
|
|
54
|
+
browser?: BrowserBinding;
|
|
55
|
+
/** CDP base URL override (e.g. http://localhost:9222) */
|
|
56
|
+
cdpUrl?: string;
|
|
57
|
+
/** Headers to send with CDP URL discovery requests */
|
|
58
|
+
cdpHeaders?: Record<string, string>;
|
|
18
59
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* A CDP session over an open WebSocket. Manages command correlation,
|
|
24
|
-
* timeouts, target sessions, and a debug event ring buffer.
|
|
25
|
-
*
|
|
26
|
-
* Used host-side (not in the sandbox) — the sandbox calls into this
|
|
27
|
-
* via DynamicWorkerExecutor's ToolDispatcher RPC.
|
|
28
|
-
*/
|
|
29
|
-
declare class CdpSession {
|
|
30
|
-
#private;
|
|
31
|
-
constructor(
|
|
32
|
-
socket: WebSocket,
|
|
33
|
-
defaultTimeoutMs?: number,
|
|
34
|
-
dispose?: () => void
|
|
35
|
-
);
|
|
36
|
-
send(
|
|
37
|
-
method: string,
|
|
38
|
-
params?: unknown,
|
|
39
|
-
options?: CdpSendOptions
|
|
40
|
-
): Promise<unknown>;
|
|
41
|
-
attachToTarget(targetId: string, options?: CdpAttachOptions): Promise<string>;
|
|
42
|
-
getDebugLog(limit?: number): DebugEntry[];
|
|
43
|
-
clearDebugLog(): void;
|
|
44
|
-
close(): void;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Connect to a browser via the Browser Rendering binding (Fetcher).
|
|
48
|
-
* Establishes a CDP WebSocket through the binding's fetch interface.
|
|
49
|
-
*/
|
|
50
|
-
declare function connectBrowser(
|
|
51
|
-
browser: Fetcher,
|
|
52
|
-
timeoutMs?: number
|
|
53
|
-
): Promise<CdpSession>;
|
|
54
|
-
/**
|
|
55
|
-
* Connect to a browser via a CDP base URL (e.g. http://localhost:9222).
|
|
56
|
-
* Discovers the WebSocket debugger URL via /json/version,
|
|
57
|
-
* rewrites localhost URLs to the base URL host, and opens the WebSocket.
|
|
58
|
-
*
|
|
59
|
-
* Useful for local development with `chrome --remote-debugging-port=9222`
|
|
60
|
-
* or when connecting through a tunnel.
|
|
61
|
-
*/
|
|
62
|
-
declare function connectUrl(
|
|
63
|
-
baseUrl: string,
|
|
64
|
-
options?: {
|
|
65
|
-
timeoutMs?: number;
|
|
66
|
-
headers?: Record<string, string>;
|
|
67
|
-
}
|
|
68
|
-
): Promise<CdpSession>;
|
|
60
|
+
/** Load the (cached) searchable CDP spec for a browser source. */
|
|
61
|
+
declare function loadCdpSpec(source: CdpSpecSource): Promise<SearchableCdpSpec>;
|
|
69
62
|
//#endregion
|
|
70
63
|
export {
|
|
71
|
-
type
|
|
64
|
+
type BrowserBinding,
|
|
65
|
+
BrowserConnector,
|
|
66
|
+
type BrowserConnectorOptions,
|
|
67
|
+
type BrowserConnectorSessionOptions,
|
|
68
|
+
type BrowserConnectorSweepOptions,
|
|
69
|
+
type BrowserConnectorSweepResult,
|
|
70
|
+
BrowserRenderingError,
|
|
71
|
+
type BrowserSessionInfo,
|
|
72
|
+
type BrowserSessionLock,
|
|
73
|
+
type BrowserSessionStore,
|
|
74
|
+
type BrowserTargetInfo,
|
|
72
75
|
type CdpAttachOptions,
|
|
73
76
|
type CdpSendOptions,
|
|
74
77
|
CdpSession,
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
type
|
|
78
|
+
type CdpSpecSource,
|
|
79
|
+
CodemodeRuntime,
|
|
80
|
+
type ConnectBrowserOptions,
|
|
81
|
+
DEFAULT_EXEC_SWEEP_IDLE_MS,
|
|
82
|
+
DEFAULT_SWEEP_IDLE_MS,
|
|
83
|
+
DurableBrowserSessionStore,
|
|
84
|
+
type SearchableCdpSpec,
|
|
85
|
+
type StoredBrowserSession,
|
|
78
86
|
connectBrowser,
|
|
87
|
+
connectBrowserSession,
|
|
79
88
|
connectUrl,
|
|
80
|
-
|
|
89
|
+
createBrowserSession,
|
|
90
|
+
deleteBrowserSession,
|
|
91
|
+
listBrowserTargets,
|
|
92
|
+
loadCdpSpec
|
|
81
93
|
};
|
|
82
94
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/browser/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
|
|
1
|
+
import { a as loadCdpSpec, c as connectBrowserSession, d as listBrowserTargets, f as CdpSession, i as DurableBrowserSessionStore, l as createBrowserSession, n as DEFAULT_EXEC_SWEEP_IDLE_MS, o as BrowserRenderingError, p as connectUrl, r as DEFAULT_SWEEP_IDLE_MS, s as connectBrowser, t as BrowserConnector, u as deleteBrowserSession } from "../connector-D6yYzYHg.js";
|
|
2
|
+
import { CodemodeRuntime } from "@cloudflare/codemode";
|
|
3
|
+
export { BrowserConnector, BrowserRenderingError, CdpSession, CodemodeRuntime, DEFAULT_EXEC_SWEEP_IDLE_MS, DEFAULT_SWEEP_IDLE_MS, DurableBrowserSessionStore, connectBrowser, connectBrowserSession, connectUrl, createBrowserSession, deleteBrowserSession, listBrowserTargets, loadCdpSpec };
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CreateBrowserToolsOptions } from "./ai.js";
|
|
2
2
|
import { ServerTool } from "@tanstack/ai";
|
|
3
3
|
|
|
4
4
|
//#region src/browser/tanstack-ai.d.ts
|
|
5
5
|
/**
|
|
6
6
|
* Create TanStack AI tools for browser automation via CDP code mode.
|
|
7
7
|
*
|
|
8
|
-
* Returns an array
|
|
9
|
-
*
|
|
8
|
+
* Returns an array with a single durable `browser_execute` `ServerTool`
|
|
9
|
+
* backed by the same codemode runtime as `agents/browser/ai` — the model
|
|
10
|
+
* writes TypeScript against the `cdp` connector and browser sessions
|
|
11
|
+
* survive pauses.
|
|
10
12
|
*
|
|
11
13
|
* @example
|
|
12
14
|
* ```ts
|
|
13
15
|
* import { createBrowserTools } from "agents/browser/tanstack-ai";
|
|
14
16
|
* import { chat } from "@tanstack/ai";
|
|
15
17
|
*
|
|
18
|
+
* // inside a Durable Object / Agent:
|
|
16
19
|
* const browserTools = createBrowserTools({
|
|
17
|
-
*
|
|
18
|
-
*
|
|
20
|
+
* ctx: this.ctx,
|
|
21
|
+
* browser: this.env.BROWSER,
|
|
22
|
+
* loader: this.env.LOADER,
|
|
19
23
|
* });
|
|
20
24
|
*
|
|
21
25
|
* const stream = chat({
|
|
@@ -25,7 +29,9 @@ import { ServerTool } from "@tanstack/ai";
|
|
|
25
29
|
* });
|
|
26
30
|
* ```
|
|
27
31
|
*/
|
|
28
|
-
declare function createBrowserTools(
|
|
32
|
+
declare function createBrowserTools(
|
|
33
|
+
options: CreateBrowserToolsOptions
|
|
34
|
+
): ServerTool[];
|
|
29
35
|
//#endregion
|
|
30
|
-
export { type
|
|
36
|
+
export { type CreateBrowserToolsOptions, createBrowserTools };
|
|
31
37
|
//# sourceMappingURL=tanstack-ai.d.ts.map
|