effect-browserbase 0.1.0-beta.104 → 0.2.0-beta.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/README.md +61 -305
- package/dist/Account.d.mts +4 -6
- package/dist/Account.mjs +4 -9
- package/dist/Account.mjs.map +1 -1
- package/dist/{Acquisition-WBafHwXH.mjs → Acquisition-D8o4jtCg.mjs} +22 -68
- package/dist/Acquisition-D8o4jtCg.mjs.map +1 -0
- package/dist/Agents.d.mts +4 -6
- package/dist/Agents.mjs +3 -19
- package/dist/Agents.mjs.map +1 -1
- package/dist/Allocation.d.mts +9 -11
- package/dist/Allocation.mjs +2 -4
- package/dist/Allocation.mjs.map +1 -1
- package/dist/Browser.d.mts +23 -141
- package/dist/Browser.mjs +208 -164
- package/dist/Browser.mjs.map +1 -1
- package/dist/BrowserBinding.d.mts +7 -34
- package/dist/BrowserBinding.mjs +30 -1
- package/dist/BrowserBinding.mjs.map +1 -0
- package/dist/Certificates.d.mts +3 -5
- package/dist/Certificates.mjs +2 -7
- package/dist/Certificates.mjs.map +1 -1
- package/dist/{Cleanup-G2YpTCuU.d.mts → Cleanup-DMTDBir8.d.mts} +5 -6
- package/dist/Cleanup.d.mts +3 -2
- package/dist/Cleanup.mjs +1 -6
- package/dist/Cleanup.mjs.map +1 -1
- package/dist/{Client-D1_xYM9o.mjs → Client-BQteUePT.mjs} +2 -4
- package/dist/{Client-D1_xYM9o.mjs.map → Client-BQteUePT.mjs.map} +1 -1
- package/dist/Client.d.mts +51 -2
- package/dist/Client.mjs +1 -1
- package/dist/Connection-DcvJZEdc.mjs +65 -0
- package/dist/Connection-DcvJZEdc.mjs.map +1 -0
- package/dist/ContextCoordination.d.mts +5 -6
- package/dist/ContextCoordination.mjs +1 -8
- package/dist/ContextCoordination.mjs.map +1 -1
- package/dist/Contexts.d.mts +4 -6
- package/dist/Contexts.mjs +2 -8
- package/dist/Contexts.mjs.map +1 -1
- package/dist/Downloads.d.mts +6 -8
- package/dist/Downloads.mjs +3 -8
- package/dist/Downloads.mjs.map +1 -1
- package/dist/Errors.d.mts +3 -26
- package/dist/Errors.mjs +1 -137
- package/dist/Errors.mjs.map +1 -1
- package/dist/{Extensions-ClZbYb1H.mjs → Extensions-nMNMPGCc.mjs} +3 -9
- package/dist/{Extensions-ClZbYb1H.mjs.map → Extensions-nMNMPGCc.mjs.map} +1 -1
- package/dist/Extensions.d.mts +4 -6
- package/dist/Extensions.mjs +1 -1
- package/dist/Functions.d.mts +4 -6
- package/dist/Functions.mjs +3 -17
- package/dist/Functions.mjs.map +1 -1
- package/dist/{Launch-BHcAEq05.mjs → Launch-m0fxzJ49.mjs} +5 -5
- package/dist/Launch-m0fxzJ49.mjs.map +1 -0
- package/dist/Launch.d.mts +130 -2
- package/dist/Launch.mjs +4 -11
- package/dist/Launch.mjs.map +1 -1
- package/dist/PageFetch.d.mts +3 -5
- package/dist/PageFetch.mjs +2 -8
- package/dist/PageFetch.mjs.map +1 -1
- package/dist/Projects.d.mts +3 -5
- package/dist/Projects.mjs +2 -8
- package/dist/Projects.mjs.map +1 -1
- package/dist/Recordings.d.mts +6 -8
- package/dist/Recordings.mjs +3 -5
- package/dist/Recordings.mjs.map +1 -1
- package/dist/{References-URDAtapt.d.mts → References-DOH3Wu44.d.mts} +5 -6
- package/dist/References.d.mts +3 -2
- package/dist/References.mjs +10 -18
- package/dist/References.mjs.map +1 -1
- package/dist/Replays.d.mts +6 -8
- package/dist/Replays.mjs +3 -5
- package/dist/Replays.mjs.map +1 -1
- package/dist/Search.d.mts +3 -5
- package/dist/Search.mjs +2 -9
- package/dist/Search.mjs.map +1 -1
- package/dist/{SessionData-DRKcKCqw.d.mts → SessionData-5xYZDshJ.d.mts} +5 -6
- package/dist/SessionData.d.mts +3 -2
- package/dist/SessionData.mjs +1 -8
- package/dist/SessionData.mjs.map +1 -1
- package/dist/{Sessions-CtbseWEh.mjs → Sessions-DoQGg9nB.mjs} +34 -18
- package/dist/Sessions-DoQGg9nB.mjs.map +1 -0
- package/dist/{Sessions-B8E4kMxo.d.mts → Sessions-tFJYaXFq.d.mts} +8 -8
- package/dist/Sessions.d.mts +4 -3
- package/dist/Sessions.mjs +1 -1
- package/dist/{Transfers-Czv5IZzJ.d.mts → Transfers-GVqzrDWl.d.mts} +22 -9
- package/dist/Transfers.d.mts +3 -2
- package/dist/Transfers.mjs +12 -28
- package/dist/Transfers.mjs.map +1 -1
- package/dist/Uploads.d.mts +6 -8
- package/dist/Uploads.mjs +3 -5
- package/dist/Uploads.mjs.map +1 -1
- package/dist/Webhooks.d.mts +3 -5
- package/dist/Webhooks.mjs +2 -11
- package/dist/Webhooks.mjs.map +1 -1
- package/dist/{WriterFacts-osvYAsIx.d.mts → WriterFacts-5CPBGG1P.d.mts} +4 -3
- package/dist/index.d.mts +27 -31
- package/dist/index.mjs +26 -31
- package/package.json +3 -28
- package/dist/Acquisition-WBafHwXH.mjs.map +0 -1
- package/dist/Association-CEps4hYP.mjs +0 -10
- package/dist/Association-CEps4hYP.mjs.map +0 -1
- package/dist/Bootstrap-BXuzZojd.mjs +0 -194
- package/dist/Bootstrap-BXuzZojd.mjs.map +0 -1
- package/dist/Bootstrap-m7lHgj0D.d.mts +0 -177
- package/dist/Bootstrap.d.mts +0 -2
- package/dist/Bootstrap.mjs +0 -2
- package/dist/BrowserBinding-DlJTGYZL.mjs +0 -2508
- package/dist/BrowserBinding-DlJTGYZL.mjs.map +0 -1
- package/dist/BrowserData-LpcAuAub.d.mts +0 -369
- package/dist/BrowserData.d.mts +0 -2
- package/dist/BrowserData.mjs +0 -442
- package/dist/BrowserData.mjs.map +0 -1
- package/dist/Capture-Bc0z9IAi.mjs +0 -571
- package/dist/Capture-Bc0z9IAi.mjs.map +0 -1
- package/dist/Capture-BvWI-l1A.d.mts +0 -168
- package/dist/Capture.d.mts +0 -2
- package/dist/Capture.mjs +0 -2
- package/dist/Client-Ca0zSg1n.d.mts +0 -53
- package/dist/Images-DgscEfSf.mjs +0 -127
- package/dist/Images-DgscEfSf.mjs.map +0 -1
- package/dist/Launch-BHcAEq05.mjs.map +0 -1
- package/dist/Launch-C8CfaYxb.d.mts +0 -132
- package/dist/LocalBrowser-BLancJ3R.d.mts +0 -79
- package/dist/LocalBrowser-DsQLWNL1.mjs +0 -439
- package/dist/LocalBrowser-DsQLWNL1.mjs.map +0 -1
- package/dist/LocalBrowser.d.mts +0 -2
- package/dist/LocalBrowser.mjs +0 -2
- package/dist/PageControl.d.mts +0 -16
- package/dist/PageControl.mjs +0 -36
- package/dist/PageControl.mjs.map +0 -1
- package/dist/PageControlAssociation-DabEg5AR.mjs +0 -10
- package/dist/PageControlAssociation-DabEg5AR.mjs.map +0 -1
- package/dist/Session-D4nT9hOO.mjs +0 -1379
- package/dist/Session-D4nT9hOO.mjs.map +0 -1
- package/dist/Sessions-CtbseWEh.mjs.map +0 -1
- package/dist/rolldown-runtime-D7D4PA-g.mjs +0 -13
|
@@ -1,57 +1,15 @@
|
|
|
1
1
|
import { Identifier, SessionReference } from "./References.mjs";
|
|
2
2
|
import { AllocationError, ContextError, SessionError } from "./Errors.mjs";
|
|
3
|
-
import { t as BrowserbaseClient } from "./Client-
|
|
4
|
-
import { t as compileLaunch } from "./Launch-
|
|
5
|
-
import { ProviderSession } from "./SessionData.mjs";
|
|
3
|
+
import { t as BrowserbaseClient } from "./Client-BQteUePT.mjs";
|
|
4
|
+
import { t as compileLaunch } from "./Launch-m0fxzJ49.mjs";
|
|
6
5
|
import { CleanupIssue, CleanupResult } from "./Cleanup.mjs";
|
|
7
6
|
import { i as requireContextWriterPermit } from "./ContextWriter-BrQmoXRg.mjs";
|
|
8
|
-
import {
|
|
9
|
-
import { t as
|
|
10
|
-
import { Cause, Clock, Data, Effect, ErrorReporter, Exit, Option,
|
|
11
|
-
|
|
12
|
-
const Connection = Schema.Struct({
|
|
13
|
-
...ProviderSession.fields,
|
|
14
|
-
connectUrl: Schema.String.check(Schema.isMaxLength(16384))
|
|
15
|
-
});
|
|
16
|
-
/** A provider-issued endpoint is authority, not a persisted session identifier. */
|
|
17
|
-
const connectionUrl = Schema.String.check(Schema.isMaxLength(16384), Schema.makeFilter((value) => {
|
|
18
|
-
try {
|
|
19
|
-
const url = new URL(value);
|
|
20
|
-
return url.protocol === "wss:" && !url.username && !url.password && !url.port && !url.hash && url.hostname.endsWith(".browserbase.com");
|
|
21
|
-
} catch {
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
}));
|
|
25
|
-
const connectionAddress = Effect.fnUntraced(function* (client, sessions, reference, timeoutMillis) {
|
|
26
|
-
const fail = (reason) => SessionError.make({
|
|
27
|
-
operation: "session-connect",
|
|
28
|
-
reason
|
|
29
|
-
});
|
|
30
|
-
const ref = yield* Schema.decodeEffect(SessionReference)(reference).pipe(Effect.mapError(() => fail("configuration")));
|
|
31
|
-
if (ref.projectId !== client.projectId) return yield* fail("authorization");
|
|
32
|
-
const deadline = yield* deadlineAfter(timeoutMillis);
|
|
33
|
-
yield* sessions.waitUntilRunning(ref, { timeoutMillis });
|
|
34
|
-
if ((yield* nowMillis) >= deadline) return yield* fail("timeout");
|
|
35
|
-
const raw = yield* until(client.json("GET", `/v1/sessions/${encodeURIComponent(ref.sessionId)}`, void 0, deadline), deadline, () => fail("timeout")).pipe(Effect.mapError((error) => fail(error.reason)));
|
|
36
|
-
const value = yield* Schema.decodeUnknownEffect(Connection)(raw).pipe(Effect.mapError(() => fail("malformed")));
|
|
37
|
-
if (value.id !== ref.sessionId || value.projectId !== ref.projectId) return yield* fail("malformed");
|
|
38
|
-
if (value.status !== "RUNNING") return yield* fail("expired");
|
|
39
|
-
const url = yield* Schema.decodeEffect(connectionUrl)(value.connectUrl).pipe(Effect.mapError(() => fail("unsafe-url")));
|
|
40
|
-
return Redacted.make(url);
|
|
41
|
-
});
|
|
42
|
-
//#endregion
|
|
7
|
+
import { t as BrowserbaseSessions } from "./Sessions-DoQGg9nB.mjs";
|
|
8
|
+
import { t as connectionAddress } from "./Connection-DcvJZEdc.mjs";
|
|
9
|
+
import { Cause, Clock, Data, Effect, ErrorReporter, Exit, Option, Schema, Scope } from "effect";
|
|
10
|
+
import { cleanupStep, noConnection, reported } from "effect-browser/browser-runtime";
|
|
43
11
|
//#region src/internal/session/Cleanup.ts
|
|
44
|
-
const noLocalConnection =
|
|
45
|
-
fence: Effect.void,
|
|
46
|
-
capture: Effect.void,
|
|
47
|
-
initialization: Effect.void,
|
|
48
|
-
disconnect: Effect.succeed("not-connected")
|
|
49
|
-
};
|
|
50
|
-
/** Bounded host notification of canonical facts. Reporting never changes them. */
|
|
51
|
-
const reported = (effect) => effect.pipe(Effect.interruptible, Effect.timeoutOrElse({
|
|
52
|
-
duration: 2e3,
|
|
53
|
-
orElse: () => Effect.void
|
|
54
|
-
}), Effect.ignore);
|
|
12
|
+
const noLocalConnection = noConnection;
|
|
55
13
|
const defaultCleanupLimits = {
|
|
56
14
|
localStepMillis: 3e3,
|
|
57
15
|
releaseMillis: 4e3,
|
|
@@ -67,36 +25,28 @@ const makeCleanup = Effect.fnUntraced(function* (reference, ownership, sessions,
|
|
|
67
25
|
return {
|
|
68
26
|
close: yield* Effect.cached(Effect.uninterruptible(Effect.gen(function* () {
|
|
69
27
|
const issues = [];
|
|
70
|
-
const step = (name, action, milliseconds) => action.pipe(Effect.
|
|
71
|
-
|
|
72
|
-
orElse: () => Effect.fail(CleanupIssue.make({
|
|
28
|
+
const step = (name, action, milliseconds) => cleanupStep(action, milliseconds).pipe(Effect.tap((result) => Effect.sync(() => {
|
|
29
|
+
if (result._tag === "Failure") issues.push(CleanupIssue.make({
|
|
73
30
|
step: name,
|
|
74
|
-
reason:
|
|
75
|
-
}))
|
|
76
|
-
}), Effect.exit, Effect.tap((exit) => Effect.sync(() => {
|
|
77
|
-
if (Exit.isSuccess(exit)) return;
|
|
78
|
-
const reason = Cause.findErrorOption(exit.cause);
|
|
79
|
-
issues.push(CleanupIssue.make({
|
|
80
|
-
step: name,
|
|
81
|
-
reason: Option.isSome(reason) && reason.value instanceof CleanupIssue ? reason.value.reason : Cause.hasInterrupts(exit.cause) ? "interrupted" : "failed"
|
|
31
|
+
reason: result.reason
|
|
82
32
|
}));
|
|
83
33
|
})));
|
|
84
34
|
yield* step("fence", local.fence, limits.localStepMillis);
|
|
85
35
|
yield* step("capture", local.capture, limits.localStepMillis);
|
|
86
36
|
yield* step("initialization", local.initialization, limits.localStepMillis);
|
|
87
37
|
const disconnected = yield* step("disconnect", local.disconnect, limits.localStepMillis);
|
|
88
|
-
const localState =
|
|
38
|
+
const localState = disconnected._tag === "Success" ? disconnected.value : "failed";
|
|
89
39
|
let releaseRequested = false;
|
|
90
40
|
let remote = ownership === "borrowed" ? "not-owned" : "unknown";
|
|
91
41
|
let observedStatus;
|
|
92
42
|
if (ownership === "owned") {
|
|
93
43
|
const requested = yield* step("release", sessions.requestRelease(reference), limits.releaseMillis);
|
|
94
|
-
releaseRequested =
|
|
44
|
+
releaseRequested = requested._tag === "Success";
|
|
95
45
|
const terminal = yield* step("status", sessions.waitForTerminal(reference, { timeoutMillis: limits.terminalMillis }), limits.terminalMillis);
|
|
96
|
-
if (
|
|
46
|
+
if (terminal._tag === "Success") {
|
|
97
47
|
remote = "confirmed";
|
|
98
48
|
observedStatus = terminal.value.status;
|
|
99
|
-
} else if (
|
|
49
|
+
} else if (requested._tag === "Success") remote = "pending";
|
|
100
50
|
}
|
|
101
51
|
const result = CleanupResult.make({
|
|
102
52
|
reference,
|
|
@@ -216,8 +166,12 @@ const acquireRemote = Effect.fnUntraced(function* (options, local = noLocalConne
|
|
|
216
166
|
cleanup = result;
|
|
217
167
|
writer?.completed(attempt, result);
|
|
218
168
|
}, limits)).close;
|
|
219
|
-
|
|
220
|
-
|
|
169
|
+
const result = cleanup;
|
|
170
|
+
const notify = options.onCleanup;
|
|
171
|
+
if (result !== void 0) {
|
|
172
|
+
yield* reported(Effect.suspend(() => reportCleanup(result)));
|
|
173
|
+
if (notify !== void 0) yield* reported(Effect.suspend(() => notify(result)));
|
|
174
|
+
}
|
|
221
175
|
})));
|
|
222
176
|
const closeScope = yield* Effect.cached(Scope.close(resourceScope, Exit.void));
|
|
223
177
|
yield* Scope.addFinalizer(resourceScope, terminate);
|
|
@@ -275,6 +229,6 @@ const acquireRemote = Effect.fnUntraced(function* (options, local = noLocalConne
|
|
|
275
229
|
}));
|
|
276
230
|
});
|
|
277
231
|
//#endregion
|
|
278
|
-
export { reported as a, noLocalConnection as i, reportCleanup as n,
|
|
232
|
+
export { reported as a, noLocalConnection as i, reportCleanup as n, makeCleanup as r, acquireRemote as t };
|
|
279
233
|
|
|
280
|
-
//# sourceMappingURL=Acquisition-
|
|
234
|
+
//# sourceMappingURL=Acquisition-D8o4jtCg.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Acquisition-D8o4jtCg.mjs","names":[],"sources":["../src/internal/session/Cleanup.ts","../src/internal/session/Diagnostics.ts","../src/internal/session/Acquisition.ts"],"sourcesContent":["import { Effect, Option } from \"effect\";\nimport { cleanupStep, noConnection, type ConnectionCleanup } from \"effect-browser/browser-runtime\";\n\nexport { reported } from \"effect-browser/browser-runtime\";\nexport type { ConnectionCleanup as LocalCleanup } from \"effect-browser/browser-runtime\";\n\nimport { CleanupIssue, CleanupResult } from \"../../Cleanup.ts\";\nimport type { SessionReference } from \"../../References.ts\";\nimport type { SessionStatus } from \"../../SessionData.ts\";\nimport type { BrowserbaseSessions } from \"../../Sessions.ts\";\n\nexport const noLocalConnection = noConnection;\n\n/** Internal limits, also injectable by deterministic failure tests. */\nexport interface CleanupLimits {\n readonly localStepMillis: number;\n readonly releaseMillis: number;\n readonly terminalMillis: number;\n}\n\nexport const defaultCleanupLimits: CleanupLimits = {\n localStepMillis: 3000,\n releaseMillis: 4000,\n terminalMillis: 4000,\n};\n\n/**\n * Close is one uninterruptible, bounded transaction over *local cleanup evidence*, not\n * a transaction over the remote browser. Each step observes its own Exit so failures\n * cannot suppress a later disconnect, release request, or exact-session status read.\n */\nexport const makeCleanup = Effect.fnUntraced(function* (\n reference: SessionReference,\n ownership: CleanupResult[\"ownership\"],\n sessions: BrowserbaseSessions[\"Service\"],\n local: ConnectionCleanup,\n report: (result: CleanupResult) => void,\n limits: CleanupLimits = defaultCleanupLimits,\n) {\n let latest: CleanupResult | undefined;\n\n const close = yield* Effect.cached(\n Effect.uninterruptible(\n Effect.gen(function* () {\n const issues: CleanupIssue[] = [];\n\n const step = <A, E>(\n name: CleanupIssue[\"step\"],\n action: Effect.Effect<A, E>,\n milliseconds: number,\n ) =>\n cleanupStep(action, milliseconds).pipe(\n Effect.tap((result) =>\n Effect.sync(() => {\n if (result._tag === \"Failure\")\n issues.push(CleanupIssue.make({ step: name, reason: result.reason }));\n }),\n ),\n );\n\n // The fence runs synchronously before interruptible native teardown begins.\n yield* step(\"fence\", local.fence, limits.localStepMillis);\n yield* step(\"capture\", local.capture, limits.localStepMillis);\n yield* step(\"initialization\", local.initialization, limits.localStepMillis);\n const disconnected = yield* step(\"disconnect\", local.disconnect, limits.localStepMillis);\n const localState = disconnected._tag === \"Success\" ? disconnected.value : \"failed\";\n\n let releaseRequested = false;\n let remote: CleanupResult[\"remote\"] = ownership === \"borrowed\" ? \"not-owned\" : \"unknown\";\n let observedStatus: SessionStatus | undefined;\n\n if (ownership === \"owned\") {\n const requested = yield* step(\n \"release\",\n sessions.requestRelease(reference),\n limits.releaseMillis,\n );\n\n releaseRequested = requested._tag === \"Success\";\n\n // A POST response is never substituted for a passive terminal-state observation.\n const terminal = yield* step(\n \"status\",\n sessions.waitForTerminal(reference, { timeoutMillis: limits.terminalMillis }),\n limits.terminalMillis,\n );\n\n if (terminal._tag === \"Success\") {\n remote = \"confirmed\";\n observedStatus = terminal.value.status;\n } else if (requested._tag === \"Success\") {\n remote = \"pending\";\n }\n }\n\n const result = CleanupResult.make({\n reference,\n ownership,\n releaseRequested,\n remote,\n local: localState,\n ...(observedStatus === undefined ? {} : { observedStatus }),\n issues,\n });\n\n Object.freeze(result.issues);\n latest = Object.freeze(result);\n report(latest);\n\n return latest;\n }),\n ),\n );\n\n return {\n close,\n result: Effect.sync(() => Option.fromNullishOr(latest)),\n };\n});\n","import { Cause, Data, Effect, ErrorReporter } from \"effect\";\n\nimport type { CleanupResult } from \"../../Cleanup.ts\";\nimport type { AllocationAttempt } from \"../../References.ts\";\n\n/**\n * Operator-visible evidence that a session's fate was not settled. It carries identity and\n * outcome labels only: no provider body, connection URL, credential or page content. The\n * transport deliberately disables tracing where credentials travel, so without this an\n * unconfirmed release or an allocation of unknown outcome would leave no trace for anyone who\n * did not register a callback.\n */\nclass SessionUnsettled extends Data.TaggedError(\"BrowserbaseSessionUnsettled\")<{\n readonly message: string;\n readonly details: Readonly<Record<string, string | number>>;\n}> {\n readonly [ErrorReporter.severity] = \"Warn\" as const;\n\n get [ErrorReporter.attributes]() {\n return this.details;\n }\n}\n\nconst surface = (message: string, details: Readonly<Record<string, string | number>>) =>\n Effect.logWarning(message).pipe(\n Effect.annotateLogs(details),\n Effect.andThen(ErrorReporter.report(Cause.fail(new SessionUnsettled({ message, details })))),\n );\n\n/** A borrowed scope never owns release, so only its local teardown can be unsettled. */\nexport const reportCleanup = (result: CleanupResult): Effect.Effect<void> => {\n const remoteUnsettled =\n result.ownership === \"owned\" && (result.remote !== \"confirmed\" || !result.releaseRequested);\n\n if (!remoteUnsettled && result.local !== \"failed\" && result.issues.length === 0)\n return Effect.void;\n\n return surface(\"Browserbase session cleanup ended without confirmation\", {\n projectId: result.reference.projectId,\n sessionId: result.reference.sessionId,\n ownership: result.ownership,\n remote: result.remote,\n local: result.local,\n observedStatus: result.observedStatus ?? \"unobserved\",\n issues: result.issues.map((issue) => `${issue.step}:${issue.reason}`).join(\",\") || \"none\",\n });\n};\n\n/** The provider may have allocated a session this process has no reference for. */\nexport const reportAllocationUncertain = (attempt: AllocationAttempt): Effect.Effect<void> =>\n surface(\"Browserbase allocation outcome is unknown\", {\n projectId: attempt.projectId,\n attemptId: attempt.attemptId,\n requestedAtMillis: attempt.requestedAtMillis,\n });\n","import { Clock, Effect, Exit, Option, Schema, Scope } from \"effect\";\n\nimport type { CleanupResult } from \"../../Cleanup.ts\";\nimport { BrowserbaseClient } from \"../../Client.ts\";\nimport { AllocationError, ContextError, type ClientError, SessionError } from \"../../Errors.ts\";\nimport type { LaunchRecipe } from \"../../Launch.ts\";\nimport { type AllocationAttempt, Identifier, SessionReference } from \"../../References.ts\";\nimport { BrowserbaseSessions } from \"../../Sessions.ts\";\nimport { connectionAddress } from \"../provider/Connection.ts\";\nimport { compileLaunch } from \"../provider/Launch.ts\";\nimport {\n makeCleanup,\n noLocalConnection,\n reported,\n type CleanupLimits,\n type LocalCleanup,\n} from \"./Cleanup.ts\";\nimport { requireContextWriterPermit, type ContextWriterPermitInternal } from \"./ContextWriter.ts\";\nimport { reportAllocationUncertain, reportCleanup } from \"./Diagnostics.ts\";\nimport type { ContextWriterPermit } from \"./WriterFacts.ts\";\n\nconst AllocatedIdentity = Schema.Struct({ id: Identifier, projectId: Identifier });\n\nexport interface AcquisitionOptions {\n readonly launch: LaunchRecipe;\n readonly contextWriter?: ContextWriterPermit;\n readonly allocationDeadline?: number;\n /** Bounded host notification of the canonical facts. Reporting never changes them. */\n readonly onCleanup?: (result: CleanupResult) => Effect.Effect<void>;\n /** Exactly one notification when a creation attempt's effect on the provider is unknown. */\n readonly onAllocationUncertain?: (attempt: AllocationAttempt) => Effect.Effect<void>;\n}\n\n/**\n * The remote lease is registered before POST. Local connection work is supplied by\n * the same browser owner; the control plane never invents a second operation owner.\n */\nexport const acquireRemote = Effect.fnUntraced(function* (\n options: AcquisitionOptions,\n local: LocalCleanup = noLocalConnection,\n limits?: CleanupLimits,\n) {\n const client = yield* BrowserbaseClient;\n const sessions = yield* BrowserbaseSessions;\n const parent = yield* Scope.Scope;\n\n const launch = yield* compileLaunch(options.launch, {\n projectId: client.projectId,\n attemptId: globalThis.crypto.randomUUID(),\n requestedAtMillis: yield* Clock.currentTimeMillis,\n });\n\n const attempt = launch.attempt;\n let writer: ContextWriterPermitInternal | undefined;\n\n if (launch.context?.persist) {\n if (options.contextWriter === undefined) {\n return yield* ContextError.make({\n operation: \"writer-authority\",\n reason: \"authorization\",\n outcome: \"undispatched\",\n });\n }\n writer = yield* requireContextWriterPermit(options.contextWriter, {\n provider: \"browserbase\",\n projectId: client.projectId,\n contextId: launch.context.id,\n });\n } else if (options.contextWriter !== undefined) {\n return yield* ContextError.make({\n operation: \"writer-authority\",\n reason: \"configuration\",\n outcome: \"undispatched\",\n });\n }\n\n return yield* Effect.uninterruptibleMask((restore) =>\n Effect.gen(function* () {\n const resourceScope = yield* Scope.make();\n let reference: SessionReference | undefined;\n let admitted = false;\n let knownRejection = false;\n let closing = false;\n let cleanup: CleanupResult | undefined;\n\n let uncertainReported = false;\n\n const allocationUncertain = Effect.suspend(() => {\n if (uncertainReported) return Effect.void;\n uncertainReported = true;\n\n return reportAllocationUncertain(attempt).pipe(\n Effect.andThen(\n options.onAllocationUncertain === undefined\n ? Effect.void\n : reported(options.onAllocationUncertain(attempt)),\n ),\n );\n });\n\n const terminate = yield* Effect.cached(\n Effect.uninterruptible(\n Effect.gen(function* () {\n closing = true;\n if (reference === undefined) {\n if (admitted && !knownRejection) {\n writer?.uncertain(attempt);\n yield* allocationUncertain;\n }\n\n return;\n }\n\n const coordinator = yield* makeCleanup(\n reference,\n \"owned\",\n sessions,\n local,\n (result) => {\n cleanup = result;\n writer?.completed(attempt, result);\n },\n limits,\n );\n\n yield* coordinator.close;\n const result = cleanup;\n const notify = options.onCleanup;\n\n if (result !== undefined) {\n yield* reported(Effect.suspend(() => reportCleanup(result)));\n if (notify !== undefined) yield* reported(Effect.suspend(() => notify(result)));\n }\n }),\n ),\n );\n\n const closeScope = yield* Effect.cached(Scope.close(resourceScope, Exit.void));\n\n yield* Scope.addFinalizer(resourceScope, terminate);\n yield* Scope.addFinalizer(parent, closeScope);\n\n const failedAllocation = (error: ClientError): AllocationError => {\n knownRejection = error.outcome === \"rejected\" || error.outcome === \"undispatched\";\n if (knownRejection) writer?.rejected(attempt);\n else writer?.uncertain(attempt);\n const reason = error.reason;\n\n return AllocationError.make({\n attempt,\n outcome: knownRejection ? \"rejected\" : \"unknown\",\n reason:\n reason === \"authorization\" ||\n reason === \"rate-limited\" ||\n reason === \"configuration\" ||\n reason === \"transport\" ||\n reason === \"timeout\" ||\n reason === \"malformed\"\n ? reason\n : \"provider\",\n ...(error.status === undefined ? {} : { status: error.status }),\n ...(error.retryAfterMillis === undefined\n ? {}\n : { retryAfterMillis: error.retryAfterMillis }),\n });\n };\n\n const allocate = Effect.gen(function* () {\n if (writer !== undefined) yield* writer.recordAttempt(attempt);\n admitted = true;\n\n const raw = yield* restore(\n client.json(\"POST\", \"/v1/sessions\", launch.body, options.allocationDeadline),\n ).pipe(Effect.mapError(failedAllocation));\n\n const identity = yield* Schema.decodeUnknownEffect(AllocatedIdentity)(raw).pipe(\n Effect.mapError(() =>\n AllocationError.make({ attempt, outcome: \"unknown\", reason: \"malformed\" }),\n ),\n );\n\n // Save identity before interpreting any connection credentials or provider metadata.\n reference = Object.freeze(\n SessionReference.make({\n provider: \"browserbase\",\n projectId: identity.projectId,\n sessionId: identity.id,\n }),\n );\n writer?.recordSession(attempt, reference);\n if (reference.projectId !== client.projectId) {\n return yield* AllocationError.make({\n attempt,\n reference,\n outcome: \"unknown\",\n reason: \"malformed\",\n });\n }\n const ref = reference;\n\n return {\n reference: ref,\n attempt,\n launch,\n resourceScope,\n isClosed: () => closing,\n connection: (timeoutMillis: number) =>\n Effect.suspend(() =>\n closing\n ? Effect.fail(\n SessionError.make({\n operation: \"session-connect\",\n reason: \"expired\",\n outcome: \"undispatched\",\n }),\n )\n : connectionAddress(client, sessions, ref, timeoutMillis),\n ),\n release: closeScope.pipe(\n Effect.andThen(\n Effect.suspend(() =>\n cleanup === undefined\n ? Effect.die(new Error(\"Owned session closed without cleanup evidence\"))\n : Effect.succeed(cleanup),\n ),\n ),\n ),\n cleanupResult: Effect.sync(() => Option.fromNullishOr(cleanup)),\n };\n });\n\n return yield* allocate.pipe(\n Effect.onError(() => closeScope),\n Effect.onInterrupt(() => closeScope),\n );\n }),\n );\n});\n\nexport type RemoteAcquisition = Effect.Success<ReturnType<typeof acquireRemote>>;\n"],"mappings":";;;;;;;;;;;AAWA,MAAa,oBAAoB;AASjC,MAAa,uBAAsC;CACjD,iBAAiB;CACjB,eAAe;CACf,gBAAgB;AAClB;;;;;;AAOA,MAAa,cAAc,OAAO,WAAW,WAC3C,WACA,WACA,UACA,OACA,QACA,SAAwB,sBACxB;CACA,IAAI;CA2EJ,OAAO;EACL,OAAA,OA1EmB,OAAO,OAC1B,OAAO,gBACL,OAAO,IAAI,aAAa;GACtB,MAAM,SAAyB,CAAC;GAEhC,MAAM,QACJ,MACA,QACA,iBAEA,YAAY,QAAQ,YAAY,CAAC,CAAC,KAChC,OAAO,KAAK,WACV,OAAO,WAAW;IAChB,IAAI,OAAO,SAAS,WAClB,OAAO,KAAK,aAAa,KAAK;KAAE,MAAM;KAAM,QAAQ,OAAO;IAAO,CAAC,CAAC;GACxE,CAAC,CACH,CACF;GAGF,OAAO,KAAK,SAAS,MAAM,OAAO,OAAO,eAAe;GACxD,OAAO,KAAK,WAAW,MAAM,SAAS,OAAO,eAAe;GAC5D,OAAO,KAAK,kBAAkB,MAAM,gBAAgB,OAAO,eAAe;GAC1E,MAAM,eAAe,OAAO,KAAK,cAAc,MAAM,YAAY,OAAO,eAAe;GACvF,MAAM,aAAa,aAAa,SAAS,YAAY,aAAa,QAAQ;GAE1E,IAAI,mBAAmB;GACvB,IAAI,SAAkC,cAAc,aAAa,cAAc;GAC/E,IAAI;GAEJ,IAAI,cAAc,SAAS;IACzB,MAAM,YAAY,OAAO,KACvB,WACA,SAAS,eAAe,SAAS,GACjC,OAAO,aACT;IAEA,mBAAmB,UAAU,SAAS;IAGtC,MAAM,WAAW,OAAO,KACtB,UACA,SAAS,gBAAgB,WAAW,EAAE,eAAe,OAAO,eAAe,CAAC,GAC5E,OAAO,cACT;IAEA,IAAI,SAAS,SAAS,WAAW;KAC/B,SAAS;KACT,iBAAiB,SAAS,MAAM;IAClC,OAAO,IAAI,UAAU,SAAS,WAC5B,SAAS;GAEb;GAEA,MAAM,SAAS,cAAc,KAAK;IAChC;IACA;IACA;IACA;IACA,OAAO;IACP,GAAI,mBAAmB,KAAA,IAAY,CAAC,IAAI,EAAE,eAAe;IACzD;GACF,CAAC;GAED,OAAO,OAAO,OAAO,MAAM;GAC3B,SAAS,OAAO,OAAO,MAAM;GAC7B,OAAO,MAAM;GAEb,OAAO;EACT,CAAC,CACH,CACF;EAIE,QAAQ,OAAO,WAAW,OAAO,cAAc,MAAM,CAAC;CACxD;AACF,CAAC;;;;;;;;;;AC1GD,IAAM,mBAAN,cAA+B,KAAK,YAAY,6BAA6B,CAAC,CAG3E;CACD,CAAU,cAAc,YAAY;CAEpC,KAAK,cAAc,cAAc;EAC/B,OAAO,KAAK;CACd;AACF;AAEA,MAAM,WAAW,SAAiB,YAChC,OAAO,WAAW,OAAO,CAAC,CAAC,KACzB,OAAO,aAAa,OAAO,GAC3B,OAAO,QAAQ,cAAc,OAAO,MAAM,KAAK,IAAI,iBAAiB;CAAE;CAAS;AAAQ,CAAC,CAAC,CAAC,CAAC,CAC7F;;AAGF,MAAa,iBAAiB,WAA+C;CAI3E,IAAI,EAFF,OAAO,cAAc,YAAY,OAAO,WAAW,eAAe,CAAC,OAAO,sBAEpD,OAAO,UAAU,YAAY,OAAO,OAAO,WAAW,GAC5E,OAAO,OAAO;CAEhB,OAAO,QAAQ,0DAA0D;EACvE,WAAW,OAAO,UAAU;EAC5B,WAAW,OAAO,UAAU;EAC5B,WAAW,OAAO;EAClB,QAAQ,OAAO;EACf,OAAO,OAAO;EACd,gBAAgB,OAAO,kBAAkB;EACzC,QAAQ,OAAO,OAAO,KAAK,UAAU,GAAG,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,CAAC,KAAK,GAAG,KAAK;CACrF,CAAC;AACH;;AAGA,MAAa,6BAA6B,YACxC,QAAQ,6CAA6C;CACnD,WAAW,QAAQ;CACnB,WAAW,QAAQ;CACnB,mBAAmB,QAAQ;AAC7B,CAAC;;;ACjCH,MAAM,oBAAoB,OAAO,OAAO;CAAE,IAAI;CAAY,WAAW;AAAW,CAAC;;;;;AAgBjF,MAAa,gBAAgB,OAAO,WAAW,WAC7C,SACA,QAAsB,mBACtB,QACA;CACA,MAAM,SAAS,OAAO;CACtB,MAAM,WAAW,OAAO;CACxB,MAAM,SAAS,OAAO,MAAM;CAE5B,MAAM,SAAS,OAAO,cAAc,QAAQ,QAAQ;EAClD,WAAW,OAAO;EAClB,WAAW,WAAW,OAAO,WAAW;EACxC,mBAAmB,OAAO,MAAM;CAClC,CAAC;CAED,MAAM,UAAU,OAAO;CACvB,IAAI;CAEJ,IAAI,OAAO,SAAS,SAAS;EAC3B,IAAI,QAAQ,kBAAkB,KAAA,GAC5B,OAAO,OAAO,aAAa,KAAK;GAC9B,WAAW;GACX,QAAQ;GACR,SAAS;EACX,CAAC;EAEH,SAAS,OAAO,2BAA2B,QAAQ,eAAe;GAChE,UAAU;GACV,WAAW,OAAO;GAClB,WAAW,OAAO,QAAQ;EAC5B,CAAC;CACH,OAAO,IAAI,QAAQ,kBAAkB,KAAA,GACnC,OAAO,OAAO,aAAa,KAAK;EAC9B,WAAW;EACX,QAAQ;EACR,SAAS;CACX,CAAC;CAGH,OAAO,OAAO,OAAO,qBAAqB,YACxC,OAAO,IAAI,aAAa;EACtB,MAAM,gBAAgB,OAAO,MAAM,KAAK;EACxC,IAAI;EACJ,IAAI,WAAW;EACf,IAAI,iBAAiB;EACrB,IAAI,UAAU;EACd,IAAI;EAEJ,IAAI,oBAAoB;EAExB,MAAM,sBAAsB,OAAO,cAAc;GAC/C,IAAI,mBAAmB,OAAO,OAAO;GACrC,oBAAoB;GAEpB,OAAO,0BAA0B,OAAO,CAAC,CAAC,KACxC,OAAO,QACL,QAAQ,0BAA0B,KAAA,IAC9B,OAAO,OACP,SAAS,QAAQ,sBAAsB,OAAO,CAAC,CACrD,CACF;EACF,CAAC;EAED,MAAM,YAAY,OAAO,OAAO,OAC9B,OAAO,gBACL,OAAO,IAAI,aAAa;GACtB,UAAU;GACV,IAAI,cAAc,KAAA,GAAW;IAC3B,IAAI,YAAY,CAAC,gBAAgB;KAC/B,QAAQ,UAAU,OAAO;KACzB,OAAO;IACT;IAEA;GACF;GAcA,QAAO,OAZoB,YACzB,WACA,SACA,UACA,QACC,WAAW;IACV,UAAU;IACV,QAAQ,UAAU,SAAS,MAAM;GACnC,GACA,MACF,EAAA,CAEmB;GACnB,MAAM,SAAS;GACf,MAAM,SAAS,QAAQ;GAEvB,IAAI,WAAW,KAAA,GAAW;IACxB,OAAO,SAAS,OAAO,cAAc,cAAc,MAAM,CAAC,CAAC;IAC3D,IAAI,WAAW,KAAA,GAAW,OAAO,SAAS,OAAO,cAAc,OAAO,MAAM,CAAC,CAAC;GAChF;EACF,CAAC,CACH,CACF;EAEA,MAAM,aAAa,OAAO,OAAO,OAAO,MAAM,MAAM,eAAe,KAAK,IAAI,CAAC;EAE7E,OAAO,MAAM,aAAa,eAAe,SAAS;EAClD,OAAO,MAAM,aAAa,QAAQ,UAAU;EAE5C,MAAM,oBAAoB,UAAwC;GAChE,iBAAiB,MAAM,YAAY,cAAc,MAAM,YAAY;GACnE,IAAI,gBAAgB,QAAQ,SAAS,OAAO;QACvC,QAAQ,UAAU,OAAO;GAC9B,MAAM,SAAS,MAAM;GAErB,OAAO,gBAAgB,KAAK;IAC1B;IACA,SAAS,iBAAiB,aAAa;IACvC,QACE,WAAW,mBACX,WAAW,kBACX,WAAW,mBACX,WAAW,eACX,WAAW,aACX,WAAW,cACP,SACA;IACN,GAAI,MAAM,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ,MAAM,OAAO;IAC7D,GAAI,MAAM,qBAAqB,KAAA,IAC3B,CAAC,IACD,EAAE,kBAAkB,MAAM,iBAAiB;GACjD,CAAC;EACH;EAkEA,OAAO,OAhEU,OAAO,IAAI,aAAa;GACvC,IAAI,WAAW,KAAA,GAAW,OAAO,OAAO,cAAc,OAAO;GAC7D,WAAW;GAEX,MAAM,MAAM,OAAO,QACjB,OAAO,KAAK,QAAQ,gBAAgB,OAAO,MAAM,QAAQ,kBAAkB,CAC7E,CAAC,CAAC,KAAK,OAAO,SAAS,gBAAgB,CAAC;GAExC,MAAM,WAAW,OAAO,OAAO,oBAAoB,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,KACzE,OAAO,eACL,gBAAgB,KAAK;IAAE;IAAS,SAAS;IAAW,QAAQ;GAAY,CAAC,CAC3E,CACF;GAGA,YAAY,OAAO,OACjB,iBAAiB,KAAK;IACpB,UAAU;IACV,WAAW,SAAS;IACpB,WAAW,SAAS;GACtB,CAAC,CACH;GACA,QAAQ,cAAc,SAAS,SAAS;GACxC,IAAI,UAAU,cAAc,OAAO,WACjC,OAAO,OAAO,gBAAgB,KAAK;IACjC;IACA;IACA,SAAS;IACT,QAAQ;GACV,CAAC;GAEH,MAAM,MAAM;GAEZ,OAAO;IACL,WAAW;IACX;IACA;IACA;IACA,gBAAgB;IAChB,aAAa,kBACX,OAAO,cACL,UACI,OAAO,KACL,aAAa,KAAK;KAChB,WAAW;KACX,QAAQ;KACR,SAAS;IACX,CAAC,CACH,IACA,kBAAkB,QAAQ,UAAU,KAAK,aAAa,CAC5D;IACF,SAAS,WAAW,KAClB,OAAO,QACL,OAAO,cACL,YAAY,KAAA,IACR,OAAO,oBAAI,IAAI,MAAM,+CAA+C,CAAC,IACrE,OAAO,QAAQ,OAAO,CAC5B,CACF,CACF;IACA,eAAe,OAAO,WAAW,OAAO,cAAc,OAAO,CAAC;GAChE;EACF,CAEqB,CAAC,CAAC,KACrB,OAAO,cAAc,UAAU,GAC/B,OAAO,kBAAkB,UAAU,CACrC;CACF,CAAC,CACH;AACF,CAAC"}
|
package/dist/Agents.d.mts
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { n as ContextReference } from "./References-
|
|
1
|
+
import { n as ContextReference } from "./References-DOH3Wu44.mjs";
|
|
2
2
|
import { PlatformError } from "./Errors.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { BrowserbaseClient } from "./Client.mjs";
|
|
4
4
|
import { Context, Effect, Layer, Schema } from "effect";
|
|
5
|
-
|
|
6
|
-
export { AgentDefinition, AgentListQuery, AgentMessageQuery, AgentMessages, AgentMetadata, AgentRun, AgentRunListQuery, AgentRunMessage, AgentRunRequest, AgentRunStatus, AgentRunWaitOptions, AgentUpdate, BrowserbaseAgents, Page, isTerminalAgentRunStatus };
|
|
7
|
-
}
|
|
5
|
+
//#region src/Agents.d.ts
|
|
8
6
|
export declare const AgentRunStatus: Schema.Literals<readonly ["PENDING", "RUNNING", "COMPLETED", "FAILED", "STOPPED", "TIMED_OUT"]>;
|
|
9
7
|
export type AgentRunStatus = typeof AgentRunStatus.Type;
|
|
10
8
|
export declare const isTerminalAgentRunStatus: (status: AgentRunStatus) => boolean;
|
|
@@ -152,5 +150,5 @@ export declare class BrowserbaseAgents extends BrowserbaseAgents_base {
|
|
|
152
150
|
static readonly layer: Layer.Layer<BrowserbaseAgents, never, BrowserbaseClient>;
|
|
153
151
|
}
|
|
154
152
|
//#endregion
|
|
155
|
-
export {
|
|
153
|
+
export {};
|
|
156
154
|
//# sourceMappingURL=Agents.d.mts.map
|
package/dist/Agents.mjs
CHANGED
|
@@ -1,28 +1,12 @@
|
|
|
1
|
-
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
1
|
import { ContextReference, Identifier } from "./References.mjs";
|
|
3
2
|
import { PlatformError } from "./Errors.mjs";
|
|
4
|
-
import { t as BrowserbaseClient } from "./Client-
|
|
3
|
+
import { t as BrowserbaseClient } from "./Client-BQteUePT.mjs";
|
|
5
4
|
import { t as resource } from "./Resource-DBksC4zB.mjs";
|
|
6
5
|
import { ProxyRule } from "./Launch.mjs";
|
|
7
|
-
import { n as proxy } from "./Launch-
|
|
6
|
+
import { n as proxy } from "./Launch-m0fxzJ49.mjs";
|
|
8
7
|
import { n as isContextWriterBusy } from "./ContextWriter-BrQmoXRg.mjs";
|
|
9
8
|
import { Clock, Context, Effect, Layer, Schema } from "effect";
|
|
10
9
|
//#region src/Agents.ts
|
|
11
|
-
var Agents_exports = /* @__PURE__ */ __exportAll({
|
|
12
|
-
AgentDefinition: () => AgentDefinition,
|
|
13
|
-
AgentListQuery: () => AgentListQuery,
|
|
14
|
-
AgentMessageQuery: () => AgentMessageQuery,
|
|
15
|
-
AgentMetadata: () => AgentMetadata,
|
|
16
|
-
AgentRun: () => AgentRun,
|
|
17
|
-
AgentRunListQuery: () => AgentRunListQuery,
|
|
18
|
-
AgentRunMessage: () => AgentRunMessage,
|
|
19
|
-
AgentRunRequest: () => AgentRunRequest,
|
|
20
|
-
AgentRunStatus: () => AgentRunStatus,
|
|
21
|
-
AgentRunWaitOptions: () => AgentRunWaitOptions,
|
|
22
|
-
AgentUpdate: () => AgentUpdate,
|
|
23
|
-
BrowserbaseAgents: () => BrowserbaseAgents,
|
|
24
|
-
isTerminalAgentRunStatus: () => isTerminalAgentRunStatus
|
|
25
|
-
});
|
|
26
10
|
const Timestamp = Schema.String.check(Schema.isMaxLength(64));
|
|
27
11
|
const Cursor = Schema.NonEmptyString.check(Schema.isMaxLength(4096));
|
|
28
12
|
const JsonObject = Schema.Record(Schema.String, Schema.Json);
|
|
@@ -302,6 +286,6 @@ var BrowserbaseAgents = class BrowserbaseAgents extends Context.Service()("effec
|
|
|
302
286
|
}));
|
|
303
287
|
};
|
|
304
288
|
//#endregion
|
|
305
|
-
export { AgentDefinition, AgentListQuery, AgentMessageQuery, AgentMetadata, AgentRun, AgentRunListQuery, AgentRunMessage, AgentRunRequest, AgentRunStatus, AgentRunWaitOptions, AgentUpdate, BrowserbaseAgents, isTerminalAgentRunStatus
|
|
289
|
+
export { AgentDefinition, AgentListQuery, AgentMessageQuery, AgentMetadata, AgentRun, AgentRunListQuery, AgentRunMessage, AgentRunRequest, AgentRunStatus, AgentRunWaitOptions, AgentUpdate, BrowserbaseAgents, isTerminalAgentRunStatus };
|
|
306
290
|
|
|
307
291
|
//# sourceMappingURL=Agents.mjs.map
|
package/dist/Agents.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Agents.mjs","names":[],"sources":["../src/Agents.ts"],"sourcesContent":["import { Clock, Context, Effect, Layer, Schema } from \"effect\";\n\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport { PlatformError } from \"./Errors.ts\";\nimport { resource } from \"./internal/http/Resource.ts\";\nimport { proxy } from \"./internal/provider/Launch.ts\";\nimport { isContextWriterBusy } from \"./internal/session/ContextWriter.ts\";\nimport { ProxyRule } from \"./Launch.ts\";\nimport { ContextReference, Identifier } from \"./References.ts\";\n\nconst Timestamp = Schema.String.check(Schema.isMaxLength(64));\nconst Cursor = Schema.NonEmptyString.check(Schema.isMaxLength(4096));\nconst JsonObject = Schema.Record(Schema.String, Schema.Json);\nconst Prompt = Schema.String.check(Schema.isMaxLength(100_000));\n\nexport const AgentRunStatus = Schema.Literals([\n \"PENDING\",\n \"RUNNING\",\n \"COMPLETED\",\n \"FAILED\",\n \"STOPPED\",\n \"TIMED_OUT\",\n]);\n\nexport type AgentRunStatus = typeof AgentRunStatus.Type;\n\nexport const isTerminalAgentRunStatus = (status: AgentRunStatus): boolean =>\n status !== \"PENDING\" && status !== \"RUNNING\";\n\nexport class AgentMetadata extends Schema.Class<AgentMetadata>(\"BrowserbaseAgentMetadata\")({\n agentId: Identifier,\n name: Schema.String.check(Schema.isMaxLength(255)),\n systemPrompt: Schema.optionalKey(Prompt),\n resultSchema: Schema.optionalKey(JsonObject),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n}) {}\n\nexport class AgentRun extends Schema.Class<AgentRun>(\"BrowserbaseAgentRun\")({\n runId: Identifier,\n agentId: Schema.optionalKey(Identifier),\n task: Prompt,\n status: AgentRunStatus,\n sessionId: Schema.optionalKey(Identifier),\n sandboxId: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(256))),\n resultSchema: Schema.optionalKey(JsonObject),\n result: Schema.optionalKey(JsonObject),\n cause: Schema.optionalKey(\n Schema.Struct({\n code: Schema.String.check(Schema.isMaxLength(64)),\n message: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(500))),\n }),\n ),\n startedAt: Schema.optionalKey(Timestamp),\n endedAt: Schema.optionalKey(Timestamp),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n}) {}\n\nexport class AgentRunMessage extends Schema.Class<AgentRunMessage>(\"BrowserbaseAgentRunMessage\")({\n id: Schema.String.check(Schema.isMaxLength(256)),\n createdAt: Timestamp,\n role: Schema.Literals([\"assistant\", \"tool\"]),\n content: Schema.Json,\n}) {}\n\nexport const AgentDefinition = Schema.Struct({\n name: Schema.NonEmptyString.check(Schema.isMaxLength(255)),\n systemPrompt: Schema.optionalKey(Prompt),\n resultSchema: Schema.optionalKey(JsonObject),\n});\n\nexport type AgentDefinition = typeof AgentDefinition.Type;\n\nexport const AgentUpdate = Schema.Struct({\n name: Schema.optionalKey(AgentDefinition.fields.name),\n systemPrompt: Schema.optionalKey(Prompt),\n resultSchema: Schema.optionalKey(JsonObject),\n});\n\nexport type AgentUpdate = typeof AgentUpdate.Type;\n\nexport const AgentRunRequest = Schema.Struct({\n task: Schema.NonEmptyString.check(Schema.isMaxLength(100_000)),\n agentId: Schema.optionalKey(Identifier),\n resultSchema: Schema.optionalKey(JsonObject),\n variables: Schema.optionalKey(\n Schema.Record(\n Schema.String.check(Schema.isMaxLength(128)),\n Schema.Struct({\n value: Schema.String.check(Schema.isMaxLength(100_000)),\n description: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(1024))),\n }),\n ),\n ),\n browserSettings: Schema.optionalKey(\n Schema.Struct({\n /**\n * A persisting run writes the Context from Browserbase's side, outside\n * `ContextCoordination.withWriter`. It is refused while a local writer holds the\n * Context, but nothing stops a later local writer from racing the hosted run.\n */\n context: Schema.optionalKey(\n Schema.Struct({ reference: ContextReference, persist: Schema.Boolean }),\n ),\n proxies: Schema.optionalKey(\n Schema.Union([Schema.Boolean, Schema.Array(ProxyRule).check(Schema.isMaxLength(64))]),\n ),\n verified: Schema.optionalKey(Schema.Boolean),\n }),\n ),\n});\n\nexport type AgentRunRequest = typeof AgentRunRequest.Type;\n\nconst Window = {\n startAt: Schema.optionalKey(Timestamp),\n endAt: Schema.optionalKey(Timestamp),\n cursor: Schema.optionalKey(Cursor),\n};\n\nexport const AgentListQuery = Schema.Struct({\n ...Window,\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 1000 }))),\n});\n\nexport type AgentListQuery = typeof AgentListQuery.Type;\n\nexport const AgentRunListQuery = Schema.Struct({\n ...Window,\n status: Schema.optionalKey(AgentRunStatus),\n agentId: Schema.optionalKey(Identifier),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 1000 }))),\n});\n\nexport type AgentRunListQuery = typeof AgentRunListQuery.Type;\n\nexport const AgentMessageQuery = Schema.Struct({\n since: Schema.optionalKey(Cursor),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 }))),\n all: Schema.optionalKey(Schema.Boolean),\n});\n\nexport type AgentMessageQuery = typeof AgentMessageQuery.Type;\n\nexport const AgentRunWaitOptions = Schema.Struct({\n timeoutMillis: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 21_600_000 })),\n pollIntervalMillis: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 250, maximum: 60_000 })),\n ),\n});\n\nexport type AgentRunWaitOptions = typeof AgentRunWaitOptions.Type;\n\nexport interface Page<A> {\n readonly items: ReadonlyArray<A>;\n readonly nextCursor: string | undefined;\n}\n\nexport interface AgentMessages {\n readonly messages: ReadonlyArray<AgentRunMessage>;\n readonly nextSince: string | undefined;\n}\n\nconst ProviderAgent = Schema.Struct({\n agentId: Identifier,\n name: AgentMetadata.fields.name,\n systemPrompt: Schema.optionalKey(Prompt),\n resultSchema: Schema.optionalKey(JsonObject),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n});\n\nconst ProviderPage = <S extends Schema.Top>(item: S) =>\n Schema.Struct({\n data: Schema.Array(item).check(Schema.isMaxLength(1000)),\n nextCursor: Schema.optionalKey(Schema.NullOr(Schema.String.check(Schema.isMaxLength(4096)))),\n });\n\nconst ProviderMessages = Schema.Struct({\n data: Schema.Array(\n Schema.Struct({\n id: AgentRunMessage.fields.id,\n createdAt: Timestamp,\n message: Schema.Struct({ role: AgentRunMessage.fields.role, content: Schema.Json }),\n }),\n ).check(Schema.isMaxLength(100)),\n nextSince: Schema.optionalKey(Schema.NullOr(Schema.String.check(Schema.isMaxLength(4096)))),\n});\n\nconst now = Clock.monotonicTimeNanos.pipe(Effect.map((value) => Number(value) / 1_000_000));\n\n/**\n * Browserbase Agents: hosted autonomous runs that allocate their own browser sessions and\n * bill inference. Creating or stopping a run is never retried; a lost reply is `unknown`.\n */\nexport class BrowserbaseAgents extends Context.Service<\n BrowserbaseAgents,\n {\n readonly create: (definition: AgentDefinition) => Effect.Effect<AgentMetadata, PlatformError>;\n readonly list: (query?: AgentListQuery) => Effect.Effect<Page<AgentMetadata>, PlatformError>;\n readonly retrieve: (agentId: string) => Effect.Effect<AgentMetadata, PlatformError>;\n readonly update: (\n agentId: string,\n update: AgentUpdate,\n ) => Effect.Effect<AgentMetadata, PlatformError>;\n readonly delete: (agentId: string) => Effect.Effect<void, PlatformError>;\n readonly run: (request: AgentRunRequest) => Effect.Effect<AgentRun, PlatformError>;\n readonly retrieveRun: (runId: string) => Effect.Effect<AgentRun, PlatformError>;\n readonly listRuns: (query?: AgentRunListQuery) => Effect.Effect<Page<AgentRun>, PlatformError>;\n readonly stopRun: (runId: string) => Effect.Effect<AgentRun, PlatformError>;\n readonly messages: (\n runId: string,\n query?: AgentMessageQuery,\n ) => Effect.Effect<AgentMessages, PlatformError>;\n /** Polls until the run is terminal. Interrupting the wait does not stop the run. */\n readonly waitForRun: (\n runId: string,\n options: AgentRunWaitOptions,\n ) => Effect.Effect<AgentRun, PlatformError>;\n }\n>()(\"effect-browserbase/Agents\") {\n static readonly layer: Layer.Layer<BrowserbaseAgents, never, BrowserbaseClient> = Layer.effect(\n BrowserbaseAgents,\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n\n const api = resource<PlatformError>(client, (failure) =>\n PlatformError.make({ ...failure, service: \"agents\" }),\n );\n\n const agentPath = (id: string) => `/v1/agents/${api.segment(id)}`;\n const runPath = (id: string) => `/v1/agents/runs/${api.segment(id)}`;\n\n const agent = (operation: PlatformError[\"operation\"], mutation: boolean, expected?: string) =>\n Effect.fnUntraced(function* (value: typeof ProviderAgent.Type) {\n if (expected !== undefined && value.agentId !== expected)\n return yield* api.malformed(operation, mutation);\n\n return AgentMetadata.make(value);\n });\n\n const run = (operation: PlatformError[\"operation\"], mutation: boolean, expected?: string) =>\n Effect.fnUntraced(function* (value: AgentRun) {\n if (expected !== undefined && value.runId !== expected)\n return yield* api.malformed(operation, mutation);\n\n return value;\n });\n\n const create = Effect.fn(\"BrowserbaseAgents.create\")(function* (definition: AgentDefinition) {\n const value = yield* api.input(AgentDefinition, definition, \"agent-create\");\n\n return yield* api\n .request(\"POST\", \"/v1/agents\", ProviderAgent, \"agent-create\", value)\n .pipe(Effect.flatMap(agent(\"agent-create\", true)));\n });\n\n const list = Effect.fn(\"BrowserbaseAgents.list\")(function* (query: AgentListQuery = {}) {\n const value = yield* api.input(AgentListQuery, query, \"agent-list\");\n\n const page = yield* api.request(\n \"GET\",\n `/v1/agents${api.query(value)}`,\n ProviderPage(ProviderAgent),\n \"agent-list\",\n );\n\n return {\n items: page.data.map((row) => AgentMetadata.make(row)),\n nextCursor: page.nextCursor ?? undefined,\n };\n });\n\n const retrieve = Effect.fn(\"BrowserbaseAgents.retrieve\")(function* (agentId: string) {\n const id = yield* api.input(Identifier, agentId, \"agent-retrieve\");\n\n return yield* api\n .request(\"GET\", agentPath(id), ProviderAgent, \"agent-retrieve\")\n .pipe(Effect.flatMap(agent(\"agent-retrieve\", false, id)));\n });\n\n const update = Effect.fn(\"BrowserbaseAgents.update\")(function* (\n agentId: string,\n changes: AgentUpdate,\n ) {\n const id = yield* api.input(Identifier, agentId, \"agent-update\");\n const value = yield* api.input(AgentUpdate, changes, \"agent-update\");\n\n if (Object.keys(value).length === 0) return yield* api.configuration(\"agent-update\");\n\n return yield* api\n .request(\"PATCH\", agentPath(id), ProviderAgent, \"agent-update\", value)\n .pipe(Effect.flatMap(agent(\"agent-update\", true, id)));\n });\n\n const remove = Effect.fn(\"BrowserbaseAgents.delete\")(function* (agentId: string) {\n const id = yield* api.input(Identifier, agentId, \"agent-delete\");\n\n yield* api.remove(agentPath(id), \"agent-delete\");\n });\n\n const start = Effect.fn(\"BrowserbaseAgents.run\")(function* (request: AgentRunRequest) {\n const value = yield* api.input(AgentRunRequest, request, \"agent-run\");\n const settings = value.browserSettings;\n const context = settings?.context;\n\n if (context !== undefined) {\n if (context.reference.projectId !== client.projectId)\n return yield* api.make({\n operation: \"agent-run\",\n reason: \"authorization\",\n outcome: \"undispatched\",\n });\n if (context.persist && isContextWriterBusy(context.reference))\n return yield* api.make({\n operation: \"agent-run\",\n reason: \"active\",\n outcome: \"undispatched\",\n });\n }\n\n const body: Schema.Json = {\n task: value.task,\n ...(value.agentId === undefined ? {} : { agentId: value.agentId }),\n ...(value.resultSchema === undefined ? {} : { resultSchema: value.resultSchema }),\n ...(value.variables === undefined ? {} : { variables: value.variables }),\n ...(settings === undefined\n ? {}\n : {\n browserSettings: {\n ...(context === undefined\n ? {}\n : {\n context: { id: context.reference.contextId, persist: context.persist },\n }),\n ...(settings.proxies === undefined\n ? {}\n : {\n proxies:\n typeof settings.proxies === \"boolean\"\n ? settings.proxies\n : settings.proxies.map(proxy),\n }),\n ...(settings.verified === undefined ? {} : { verified: settings.verified }),\n },\n }),\n };\n\n return yield* api.request(\"POST\", \"/v1/agents/runs\", AgentRun, \"agent-run\", body);\n });\n\n const retrieveRun = Effect.fn(\"BrowserbaseAgents.retrieveRun\")(function* (runId: string) {\n const id = yield* api.input(Identifier, runId, \"agent-run-retrieve\");\n\n return yield* api\n .request(\"GET\", runPath(id), AgentRun, \"agent-run-retrieve\")\n .pipe(Effect.flatMap(run(\"agent-run-retrieve\", false, id)));\n });\n\n const listRuns = Effect.fn(\"BrowserbaseAgents.listRuns\")(function* (\n query: AgentRunListQuery = {},\n ) {\n const value = yield* api.input(AgentRunListQuery, query, \"agent-run-list\");\n\n const page = yield* api.request(\n \"GET\",\n `/v1/agents/runs${api.query(value)}`,\n ProviderPage(AgentRun),\n \"agent-run-list\",\n );\n\n return { items: page.data, nextCursor: page.nextCursor ?? undefined };\n });\n\n const stopRun = Effect.fn(\"BrowserbaseAgents.stopRun\")(function* (runId: string) {\n const id = yield* api.input(Identifier, runId, \"agent-run-stop\");\n\n return yield* api\n .request(\"POST\", `${runPath(id)}/stop`, AgentRun, \"agent-run-stop\")\n .pipe(Effect.flatMap(run(\"agent-run-stop\", true, id)));\n });\n\n const messages = Effect.fn(\"BrowserbaseAgents.messages\")(function* (\n runId: string,\n query: AgentMessageQuery = {},\n ) {\n const id = yield* api.input(Identifier, runId, \"agent-run-messages\");\n const value = yield* api.input(AgentMessageQuery, query, \"agent-run-messages\");\n\n const page = yield* api.request(\n \"GET\",\n `${runPath(id)}/messages${api.query(value)}`,\n ProviderMessages,\n \"agent-run-messages\",\n );\n\n return {\n messages: page.data.map((row) =>\n AgentRunMessage.make({\n id: row.id,\n createdAt: row.createdAt,\n role: row.message.role,\n content: row.message.content,\n }),\n ),\n nextSince: page.nextSince ?? undefined,\n };\n });\n\n const waitForRun = Effect.fn(\"BrowserbaseAgents.waitForRun\")(function* (\n runId: string,\n options: AgentRunWaitOptions,\n ) {\n const bounds = yield* api.input(AgentRunWaitOptions, options, \"agent-run-wait\");\n const deadline = (yield* now) + bounds.timeoutMillis;\n\n for (;;) {\n const current = yield* retrieveRun(runId);\n\n if (isTerminalAgentRunStatus(current.status)) return current;\n const remaining = deadline - (yield* now);\n\n if (remaining <= 0)\n return yield* api.make({ operation: \"agent-run-wait\", reason: \"timeout\" });\n yield* Effect.sleep(Math.min(bounds.pollIntervalMillis ?? 2_000, remaining));\n }\n });\n\n return BrowserbaseAgents.of({\n create,\n list,\n retrieve,\n update,\n delete: remove,\n run: start,\n retrieveRun,\n listRuns,\n stopRun,\n messages,\n waitForRun,\n });\n }),\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Agents.mjs","names":[],"sources":["../src/Agents.ts"],"sourcesContent":["import { Clock, Context, Effect, Layer, Schema } from \"effect\";\n\nimport { BrowserbaseClient } from \"./Client.ts\";\nimport { PlatformError } from \"./Errors.ts\";\nimport { resource } from \"./internal/http/Resource.ts\";\nimport { proxy } from \"./internal/provider/Launch.ts\";\nimport { isContextWriterBusy } from \"./internal/session/ContextWriter.ts\";\nimport { ProxyRule } from \"./Launch.ts\";\nimport { ContextReference, Identifier } from \"./References.ts\";\n\nconst Timestamp = Schema.String.check(Schema.isMaxLength(64));\nconst Cursor = Schema.NonEmptyString.check(Schema.isMaxLength(4096));\nconst JsonObject = Schema.Record(Schema.String, Schema.Json);\nconst Prompt = Schema.String.check(Schema.isMaxLength(100_000));\n\nexport const AgentRunStatus = Schema.Literals([\n \"PENDING\",\n \"RUNNING\",\n \"COMPLETED\",\n \"FAILED\",\n \"STOPPED\",\n \"TIMED_OUT\",\n]);\n\nexport type AgentRunStatus = typeof AgentRunStatus.Type;\n\nexport const isTerminalAgentRunStatus = (status: AgentRunStatus): boolean =>\n status !== \"PENDING\" && status !== \"RUNNING\";\n\nexport class AgentMetadata extends Schema.Class<AgentMetadata>(\"BrowserbaseAgentMetadata\")({\n agentId: Identifier,\n name: Schema.String.check(Schema.isMaxLength(255)),\n systemPrompt: Schema.optionalKey(Prompt),\n resultSchema: Schema.optionalKey(JsonObject),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n}) {}\n\nexport class AgentRun extends Schema.Class<AgentRun>(\"BrowserbaseAgentRun\")({\n runId: Identifier,\n agentId: Schema.optionalKey(Identifier),\n task: Prompt,\n status: AgentRunStatus,\n sessionId: Schema.optionalKey(Identifier),\n sandboxId: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(256))),\n resultSchema: Schema.optionalKey(JsonObject),\n result: Schema.optionalKey(JsonObject),\n cause: Schema.optionalKey(\n Schema.Struct({\n code: Schema.String.check(Schema.isMaxLength(64)),\n message: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(500))),\n }),\n ),\n startedAt: Schema.optionalKey(Timestamp),\n endedAt: Schema.optionalKey(Timestamp),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n}) {}\n\nexport class AgentRunMessage extends Schema.Class<AgentRunMessage>(\"BrowserbaseAgentRunMessage\")({\n id: Schema.String.check(Schema.isMaxLength(256)),\n createdAt: Timestamp,\n role: Schema.Literals([\"assistant\", \"tool\"]),\n content: Schema.Json,\n}) {}\n\nexport const AgentDefinition = Schema.Struct({\n name: Schema.NonEmptyString.check(Schema.isMaxLength(255)),\n systemPrompt: Schema.optionalKey(Prompt),\n resultSchema: Schema.optionalKey(JsonObject),\n});\n\nexport type AgentDefinition = typeof AgentDefinition.Type;\n\nexport const AgentUpdate = Schema.Struct({\n name: Schema.optionalKey(AgentDefinition.fields.name),\n systemPrompt: Schema.optionalKey(Prompt),\n resultSchema: Schema.optionalKey(JsonObject),\n});\n\nexport type AgentUpdate = typeof AgentUpdate.Type;\n\nexport const AgentRunRequest = Schema.Struct({\n task: Schema.NonEmptyString.check(Schema.isMaxLength(100_000)),\n agentId: Schema.optionalKey(Identifier),\n resultSchema: Schema.optionalKey(JsonObject),\n variables: Schema.optionalKey(\n Schema.Record(\n Schema.String.check(Schema.isMaxLength(128)),\n Schema.Struct({\n value: Schema.String.check(Schema.isMaxLength(100_000)),\n description: Schema.optionalKey(Schema.String.check(Schema.isMaxLength(1024))),\n }),\n ),\n ),\n browserSettings: Schema.optionalKey(\n Schema.Struct({\n /**\n * A persisting run writes the Context from Browserbase's side, outside\n * `ContextCoordination.withWriter`. It is refused while a local writer holds the\n * Context, but nothing stops a later local writer from racing the hosted run.\n */\n context: Schema.optionalKey(\n Schema.Struct({ reference: ContextReference, persist: Schema.Boolean }),\n ),\n proxies: Schema.optionalKey(\n Schema.Union([Schema.Boolean, Schema.Array(ProxyRule).check(Schema.isMaxLength(64))]),\n ),\n verified: Schema.optionalKey(Schema.Boolean),\n }),\n ),\n});\n\nexport type AgentRunRequest = typeof AgentRunRequest.Type;\n\nconst Window = {\n startAt: Schema.optionalKey(Timestamp),\n endAt: Schema.optionalKey(Timestamp),\n cursor: Schema.optionalKey(Cursor),\n};\n\nexport const AgentListQuery = Schema.Struct({\n ...Window,\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 1000 }))),\n});\n\nexport type AgentListQuery = typeof AgentListQuery.Type;\n\nexport const AgentRunListQuery = Schema.Struct({\n ...Window,\n status: Schema.optionalKey(AgentRunStatus),\n agentId: Schema.optionalKey(Identifier),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 1000 }))),\n});\n\nexport type AgentRunListQuery = typeof AgentRunListQuery.Type;\n\nexport const AgentMessageQuery = Schema.Struct({\n since: Schema.optionalKey(Cursor),\n limit: Schema.optionalKey(Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 100 }))),\n all: Schema.optionalKey(Schema.Boolean),\n});\n\nexport type AgentMessageQuery = typeof AgentMessageQuery.Type;\n\nexport const AgentRunWaitOptions = Schema.Struct({\n timeoutMillis: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 21_600_000 })),\n pollIntervalMillis: Schema.optionalKey(\n Schema.Int.check(Schema.isBetween({ minimum: 250, maximum: 60_000 })),\n ),\n});\n\nexport type AgentRunWaitOptions = typeof AgentRunWaitOptions.Type;\n\nexport interface Page<A> {\n readonly items: ReadonlyArray<A>;\n readonly nextCursor: string | undefined;\n}\n\nexport interface AgentMessages {\n readonly messages: ReadonlyArray<AgentRunMessage>;\n readonly nextSince: string | undefined;\n}\n\nconst ProviderAgent = Schema.Struct({\n agentId: Identifier,\n name: AgentMetadata.fields.name,\n systemPrompt: Schema.optionalKey(Prompt),\n resultSchema: Schema.optionalKey(JsonObject),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n});\n\nconst ProviderPage = <S extends Schema.Top>(item: S) =>\n Schema.Struct({\n data: Schema.Array(item).check(Schema.isMaxLength(1000)),\n nextCursor: Schema.optionalKey(Schema.NullOr(Schema.String.check(Schema.isMaxLength(4096)))),\n });\n\nconst ProviderMessages = Schema.Struct({\n data: Schema.Array(\n Schema.Struct({\n id: AgentRunMessage.fields.id,\n createdAt: Timestamp,\n message: Schema.Struct({ role: AgentRunMessage.fields.role, content: Schema.Json }),\n }),\n ).check(Schema.isMaxLength(100)),\n nextSince: Schema.optionalKey(Schema.NullOr(Schema.String.check(Schema.isMaxLength(4096)))),\n});\n\nconst now = Clock.monotonicTimeNanos.pipe(Effect.map((value) => Number(value) / 1_000_000));\n\n/**\n * Browserbase Agents: hosted autonomous runs that allocate their own browser sessions and\n * bill inference. Creating or stopping a run is never retried; a lost reply is `unknown`.\n */\nexport class BrowserbaseAgents extends Context.Service<\n BrowserbaseAgents,\n {\n readonly create: (definition: AgentDefinition) => Effect.Effect<AgentMetadata, PlatformError>;\n readonly list: (query?: AgentListQuery) => Effect.Effect<Page<AgentMetadata>, PlatformError>;\n readonly retrieve: (agentId: string) => Effect.Effect<AgentMetadata, PlatformError>;\n readonly update: (\n agentId: string,\n update: AgentUpdate,\n ) => Effect.Effect<AgentMetadata, PlatformError>;\n readonly delete: (agentId: string) => Effect.Effect<void, PlatformError>;\n readonly run: (request: AgentRunRequest) => Effect.Effect<AgentRun, PlatformError>;\n readonly retrieveRun: (runId: string) => Effect.Effect<AgentRun, PlatformError>;\n readonly listRuns: (query?: AgentRunListQuery) => Effect.Effect<Page<AgentRun>, PlatformError>;\n readonly stopRun: (runId: string) => Effect.Effect<AgentRun, PlatformError>;\n readonly messages: (\n runId: string,\n query?: AgentMessageQuery,\n ) => Effect.Effect<AgentMessages, PlatformError>;\n /** Polls until the run is terminal. Interrupting the wait does not stop the run. */\n readonly waitForRun: (\n runId: string,\n options: AgentRunWaitOptions,\n ) => Effect.Effect<AgentRun, PlatformError>;\n }\n>()(\"effect-browserbase/Agents\") {\n static readonly layer: Layer.Layer<BrowserbaseAgents, never, BrowserbaseClient> = Layer.effect(\n BrowserbaseAgents,\n Effect.gen(function* () {\n const client = yield* BrowserbaseClient;\n\n const api = resource<PlatformError>(client, (failure) =>\n PlatformError.make({ ...failure, service: \"agents\" }),\n );\n\n const agentPath = (id: string) => `/v1/agents/${api.segment(id)}`;\n const runPath = (id: string) => `/v1/agents/runs/${api.segment(id)}`;\n\n const agent = (operation: PlatformError[\"operation\"], mutation: boolean, expected?: string) =>\n Effect.fnUntraced(function* (value: typeof ProviderAgent.Type) {\n if (expected !== undefined && value.agentId !== expected)\n return yield* api.malformed(operation, mutation);\n\n return AgentMetadata.make(value);\n });\n\n const run = (operation: PlatformError[\"operation\"], mutation: boolean, expected?: string) =>\n Effect.fnUntraced(function* (value: AgentRun) {\n if (expected !== undefined && value.runId !== expected)\n return yield* api.malformed(operation, mutation);\n\n return value;\n });\n\n const create = Effect.fn(\"BrowserbaseAgents.create\")(function* (definition: AgentDefinition) {\n const value = yield* api.input(AgentDefinition, definition, \"agent-create\");\n\n return yield* api\n .request(\"POST\", \"/v1/agents\", ProviderAgent, \"agent-create\", value)\n .pipe(Effect.flatMap(agent(\"agent-create\", true)));\n });\n\n const list = Effect.fn(\"BrowserbaseAgents.list\")(function* (query: AgentListQuery = {}) {\n const value = yield* api.input(AgentListQuery, query, \"agent-list\");\n\n const page = yield* api.request(\n \"GET\",\n `/v1/agents${api.query(value)}`,\n ProviderPage(ProviderAgent),\n \"agent-list\",\n );\n\n return {\n items: page.data.map((row) => AgentMetadata.make(row)),\n nextCursor: page.nextCursor ?? undefined,\n };\n });\n\n const retrieve = Effect.fn(\"BrowserbaseAgents.retrieve\")(function* (agentId: string) {\n const id = yield* api.input(Identifier, agentId, \"agent-retrieve\");\n\n return yield* api\n .request(\"GET\", agentPath(id), ProviderAgent, \"agent-retrieve\")\n .pipe(Effect.flatMap(agent(\"agent-retrieve\", false, id)));\n });\n\n const update = Effect.fn(\"BrowserbaseAgents.update\")(function* (\n agentId: string,\n changes: AgentUpdate,\n ) {\n const id = yield* api.input(Identifier, agentId, \"agent-update\");\n const value = yield* api.input(AgentUpdate, changes, \"agent-update\");\n\n if (Object.keys(value).length === 0) return yield* api.configuration(\"agent-update\");\n\n return yield* api\n .request(\"PATCH\", agentPath(id), ProviderAgent, \"agent-update\", value)\n .pipe(Effect.flatMap(agent(\"agent-update\", true, id)));\n });\n\n const remove = Effect.fn(\"BrowserbaseAgents.delete\")(function* (agentId: string) {\n const id = yield* api.input(Identifier, agentId, \"agent-delete\");\n\n yield* api.remove(agentPath(id), \"agent-delete\");\n });\n\n const start = Effect.fn(\"BrowserbaseAgents.run\")(function* (request: AgentRunRequest) {\n const value = yield* api.input(AgentRunRequest, request, \"agent-run\");\n const settings = value.browserSettings;\n const context = settings?.context;\n\n if (context !== undefined) {\n if (context.reference.projectId !== client.projectId)\n return yield* api.make({\n operation: \"agent-run\",\n reason: \"authorization\",\n outcome: \"undispatched\",\n });\n if (context.persist && isContextWriterBusy(context.reference))\n return yield* api.make({\n operation: \"agent-run\",\n reason: \"active\",\n outcome: \"undispatched\",\n });\n }\n\n const body: Schema.Json = {\n task: value.task,\n ...(value.agentId === undefined ? {} : { agentId: value.agentId }),\n ...(value.resultSchema === undefined ? {} : { resultSchema: value.resultSchema }),\n ...(value.variables === undefined ? {} : { variables: value.variables }),\n ...(settings === undefined\n ? {}\n : {\n browserSettings: {\n ...(context === undefined\n ? {}\n : {\n context: { id: context.reference.contextId, persist: context.persist },\n }),\n ...(settings.proxies === undefined\n ? {}\n : {\n proxies:\n typeof settings.proxies === \"boolean\"\n ? settings.proxies\n : settings.proxies.map(proxy),\n }),\n ...(settings.verified === undefined ? {} : { verified: settings.verified }),\n },\n }),\n };\n\n return yield* api.request(\"POST\", \"/v1/agents/runs\", AgentRun, \"agent-run\", body);\n });\n\n const retrieveRun = Effect.fn(\"BrowserbaseAgents.retrieveRun\")(function* (runId: string) {\n const id = yield* api.input(Identifier, runId, \"agent-run-retrieve\");\n\n return yield* api\n .request(\"GET\", runPath(id), AgentRun, \"agent-run-retrieve\")\n .pipe(Effect.flatMap(run(\"agent-run-retrieve\", false, id)));\n });\n\n const listRuns = Effect.fn(\"BrowserbaseAgents.listRuns\")(function* (\n query: AgentRunListQuery = {},\n ) {\n const value = yield* api.input(AgentRunListQuery, query, \"agent-run-list\");\n\n const page = yield* api.request(\n \"GET\",\n `/v1/agents/runs${api.query(value)}`,\n ProviderPage(AgentRun),\n \"agent-run-list\",\n );\n\n return { items: page.data, nextCursor: page.nextCursor ?? undefined };\n });\n\n const stopRun = Effect.fn(\"BrowserbaseAgents.stopRun\")(function* (runId: string) {\n const id = yield* api.input(Identifier, runId, \"agent-run-stop\");\n\n return yield* api\n .request(\"POST\", `${runPath(id)}/stop`, AgentRun, \"agent-run-stop\")\n .pipe(Effect.flatMap(run(\"agent-run-stop\", true, id)));\n });\n\n const messages = Effect.fn(\"BrowserbaseAgents.messages\")(function* (\n runId: string,\n query: AgentMessageQuery = {},\n ) {\n const id = yield* api.input(Identifier, runId, \"agent-run-messages\");\n const value = yield* api.input(AgentMessageQuery, query, \"agent-run-messages\");\n\n const page = yield* api.request(\n \"GET\",\n `${runPath(id)}/messages${api.query(value)}`,\n ProviderMessages,\n \"agent-run-messages\",\n );\n\n return {\n messages: page.data.map((row) =>\n AgentRunMessage.make({\n id: row.id,\n createdAt: row.createdAt,\n role: row.message.role,\n content: row.message.content,\n }),\n ),\n nextSince: page.nextSince ?? undefined,\n };\n });\n\n const waitForRun = Effect.fn(\"BrowserbaseAgents.waitForRun\")(function* (\n runId: string,\n options: AgentRunWaitOptions,\n ) {\n const bounds = yield* api.input(AgentRunWaitOptions, options, \"agent-run-wait\");\n const deadline = (yield* now) + bounds.timeoutMillis;\n\n for (;;) {\n const current = yield* retrieveRun(runId);\n\n if (isTerminalAgentRunStatus(current.status)) return current;\n const remaining = deadline - (yield* now);\n\n if (remaining <= 0)\n return yield* api.make({ operation: \"agent-run-wait\", reason: \"timeout\" });\n yield* Effect.sleep(Math.min(bounds.pollIntervalMillis ?? 2_000, remaining));\n }\n });\n\n return BrowserbaseAgents.of({\n create,\n list,\n retrieve,\n update,\n delete: remove,\n run: start,\n retrieveRun,\n listRuns,\n stopRun,\n messages,\n waitForRun,\n });\n }),\n );\n}\n"],"mappings":"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"}
|
package/dist/Allocation.d.mts
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AllocationError,
|
|
3
|
-
import {
|
|
4
|
-
import { t as BrowserbaseSessions } from "./Sessions-
|
|
5
|
-
import { n as CleanupResult } from "./Cleanup-
|
|
6
|
-
import { n as ContextWriterPermit } from "./WriterFacts-
|
|
1
|
+
import { a as SessionReference, n as ContextReference, r as ExtensionReference, t as AllocationAttempt } from "./References-DOH3Wu44.mjs";
|
|
2
|
+
import { AllocationError, ContextError } from "./Errors.mjs";
|
|
3
|
+
import { BrowserbaseClient } from "./Client.mjs";
|
|
4
|
+
import { t as BrowserbaseSessions } from "./Sessions-tFJYaXFq.mjs";
|
|
5
|
+
import { n as CleanupResult } from "./Cleanup-DMTDBir8.mjs";
|
|
6
|
+
import { n as ContextWriterPermit } from "./WriterFacts-5CPBGG1P.mjs";
|
|
7
7
|
import "./ContextCoordination.mjs";
|
|
8
8
|
import { Effect, Option } from "effect";
|
|
9
|
-
|
|
10
|
-
export { AllocatedSession, AllocationOptions, scoped };
|
|
11
|
-
}
|
|
9
|
+
//#region src/Allocation.d.ts
|
|
12
10
|
/** A session this process allocated and owns, with no browser connected to it. */
|
|
13
11
|
export interface AllocatedSession {
|
|
14
12
|
readonly reference: SessionReference;
|
|
@@ -93,7 +91,7 @@ export declare const scoped: (launch: {
|
|
|
93
91
|
readonly [x: string]: import("effect/Schema").Json;
|
|
94
92
|
} | undefined;
|
|
95
93
|
};
|
|
96
|
-
}, options?: AllocationOptions | undefined) => Effect.Effect<AllocatedSession, AllocationError | BrowserError | ContextError, BrowserbaseClient | BrowserbaseSessions | import("effect/Scope").Scope>;
|
|
94
|
+
}, options?: AllocationOptions | undefined) => Effect.Effect<AllocatedSession, AllocationError | import("effect-browser/errors").BrowserError | ContextError, BrowserbaseClient | BrowserbaseSessions | import("effect/Scope").Scope>;
|
|
97
95
|
//#endregion
|
|
98
|
-
export {
|
|
96
|
+
export {};
|
|
99
97
|
//# sourceMappingURL=Allocation.d.mts.map
|
package/dist/Allocation.mjs
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { t as
|
|
2
|
-
import { t as acquireRemote } from "./Acquisition-WBafHwXH.mjs";
|
|
1
|
+
import { t as acquireRemote } from "./Acquisition-D8o4jtCg.mjs";
|
|
3
2
|
import { Effect } from "effect";
|
|
4
3
|
//#region src/Allocation.ts
|
|
5
|
-
var Allocation_exports = /* @__PURE__ */ __exportAll({ scoped: () => scoped });
|
|
6
4
|
/**
|
|
7
5
|
* Allocate a session without connecting a browser, for a caller that drives the remote
|
|
8
6
|
* session with its own automation client. This is the allocation path the browser owner
|
|
@@ -24,6 +22,6 @@ const scoped = Effect.fnUntraced(function* (launch, options = {}) {
|
|
|
24
22
|
};
|
|
25
23
|
});
|
|
26
24
|
//#endregion
|
|
27
|
-
export { scoped
|
|
25
|
+
export { scoped };
|
|
28
26
|
|
|
29
27
|
//# sourceMappingURL=Allocation.mjs.map
|
package/dist/Allocation.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Allocation.mjs","names":[],"sources":["../src/Allocation.ts"],"sourcesContent":["import { Effect, type Option } from \"effect\";\n\nimport type { CleanupResult } from \"./Cleanup.ts\";\nimport type { ContextWriterPermit } from \"./ContextCoordination.ts\";\nimport { acquireRemote } from \"./internal/session/Acquisition.ts\";\nimport type { LaunchRecipe } from \"./Launch.ts\";\nimport type { AllocationAttempt, SessionReference } from \"./References.ts\";\n\n/** A session this process allocated and owns, with no browser connected to it. */\nexport interface AllocatedSession {\n readonly reference: SessionReference;\n /** The creation attempt, retained so an unknown provider outcome stays attributable. */\n readonly attempt: AllocationAttempt;\n /**\n * Release now and read the cleanup evidence. The scope finalizer performs the same\n * release, so an uncalled `release` is a scope that has not closed yet, not a leak.\n */\n readonly release: Effect.Effect<CleanupResult>;\n /** The cleanup evidence once it exists, and `None` while the session is still held. */\n readonly cleanupResult: Effect.Effect<Option.Option<CleanupResult>>;\n}\n\nexport interface AllocationOptions {\n /** Required exactly when the recipe persists a Context, and refused when it does not. */\n readonly contextWriter?: ContextWriterPermit;\n readonly allocationDeadline?: number;\n /** Bounded host notification of the canonical facts. Reporting never changes them. */\n readonly onCleanup?: (result: CleanupResult) => Effect.Effect<void>;\n /** Exactly one notification when a creation attempt's effect on the provider is unknown. */\n readonly onAllocationUncertain?: (attempt: AllocationAttempt) => Effect.Effect<void>;\n}\n\n/**\n * Allocate a session without connecting a browser, for a caller that drives the remote\n * session with its own automation client. This is the allocation path the browser owner\n * uses, so release, unknown-outcome reporting and Context writer authority keep a single\n * owner: the creation request is never retried, a foreign project is refused before it is\n * sent, and no native peer is loaded. The scope owns the release; closing it releases the\n * session whether or not the caller ever connected to it.\n */\nexport const scoped = Effect.fnUntraced(function* (\n launch: LaunchRecipe,\n options: AllocationOptions = {},\n) {\n const acquisition = yield* acquireRemote({ launch, ...options });\n\n const allocated: AllocatedSession = {\n reference: acquisition.reference,\n attempt: acquisition.attempt,\n release: acquisition.release,\n cleanupResult: acquisition.cleanupResult,\n };\n\n return allocated;\n});\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Allocation.mjs","names":[],"sources":["../src/Allocation.ts"],"sourcesContent":["import { Effect, type Option } from \"effect\";\n\nimport type { CleanupResult } from \"./Cleanup.ts\";\nimport type { ContextWriterPermit } from \"./ContextCoordination.ts\";\nimport { acquireRemote } from \"./internal/session/Acquisition.ts\";\nimport type { LaunchRecipe } from \"./Launch.ts\";\nimport type { AllocationAttempt, SessionReference } from \"./References.ts\";\n\n/** A session this process allocated and owns, with no browser connected to it. */\nexport interface AllocatedSession {\n readonly reference: SessionReference;\n /** The creation attempt, retained so an unknown provider outcome stays attributable. */\n readonly attempt: AllocationAttempt;\n /**\n * Release now and read the cleanup evidence. The scope finalizer performs the same\n * release, so an uncalled `release` is a scope that has not closed yet, not a leak.\n */\n readonly release: Effect.Effect<CleanupResult>;\n /** The cleanup evidence once it exists, and `None` while the session is still held. */\n readonly cleanupResult: Effect.Effect<Option.Option<CleanupResult>>;\n}\n\nexport interface AllocationOptions {\n /** Required exactly when the recipe persists a Context, and refused when it does not. */\n readonly contextWriter?: ContextWriterPermit;\n readonly allocationDeadline?: number;\n /** Bounded host notification of the canonical facts. Reporting never changes them. */\n readonly onCleanup?: (result: CleanupResult) => Effect.Effect<void>;\n /** Exactly one notification when a creation attempt's effect on the provider is unknown. */\n readonly onAllocationUncertain?: (attempt: AllocationAttempt) => Effect.Effect<void>;\n}\n\n/**\n * Allocate a session without connecting a browser, for a caller that drives the remote\n * session with its own automation client. This is the allocation path the browser owner\n * uses, so release, unknown-outcome reporting and Context writer authority keep a single\n * owner: the creation request is never retried, a foreign project is refused before it is\n * sent, and no native peer is loaded. The scope owns the release; closing it releases the\n * session whether or not the caller ever connected to it.\n */\nexport const scoped = Effect.fnUntraced(function* (\n launch: LaunchRecipe,\n options: AllocationOptions = {},\n) {\n const acquisition = yield* acquireRemote({ launch, ...options });\n\n const allocated: AllocatedSession = {\n reference: acquisition.reference,\n attempt: acquisition.attempt,\n release: acquisition.release,\n cleanupResult: acquisition.cleanupResult,\n };\n\n return allocated;\n});\n"],"mappings":";;;;;;;;;;;AAwCA,MAAa,SAAS,OAAO,WAAW,WACtC,QACA,UAA6B,CAAC,GAC9B;CACA,MAAM,cAAc,OAAO,cAAc;EAAE;EAAQ,GAAG;CAAQ,CAAC;CAS/D,OAAO;EANL,WAAW,YAAY;EACvB,SAAS,YAAY;EACrB,SAAS,YAAY;EACrB,eAAe,YAAY;CAGd;AACjB,CAAC"}
|