@mlola/browser-runtime 0.1.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 MLola
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # @mlola/browser-runtime
2
+
3
+ Reliable browser use with a fast path: a local-first browser runtime where
4
+ browser mechanics, safety, verification and recovery are deterministic, the
5
+ fast decision path (TypeSafe Jev) handles routine steps, stronger models handle
6
+ planning and recovery, and a person can take over whenever needed.
7
+
8
+ ```bash
9
+ npm install @mlola/browser-runtime
10
+ ```
11
+
12
+ ```ts
13
+ import { BrowserAgent } from "@mlola/browser-runtime";
14
+
15
+ const agent = new BrowserAgent({ decision: { provider: "typesafe" } });
16
+
17
+ const run = await agent.run({
18
+ goal: "Download my latest invoice, attach it to a new claim, then stop before submitting",
19
+ startUrl: "https://billing.example.com/invoices",
20
+ stopBefore: ["submit claim"],
21
+ });
22
+
23
+ console.log(run.status, run.verification?.status, run.artifacts);
24
+ ```
25
+
26
+ - Models never produce selectors, coordinates or code — only choices from the
27
+ runtime's own action space.
28
+ - `DONE` is a claim; completion is verified by independent evidence (artifacts,
29
+ URL/state, DOM, runtime events) or a person.
30
+ - Secrets (passwords, OTP, cards) are a takeover floor and never enter model
31
+ state or traces.
32
+
33
+ Full documentation: <https://mlola.com/browser-runtime>
@@ -0,0 +1,25 @@
1
+ /**
2
+ * BrowserAgent — the public SDK surface (PRD §58).
3
+ *
4
+ * const agent = new BrowserAgent(config);
5
+ * const run = await agent.run({ goal: "Download the latest invoice" });
6
+ * agent.pause(); agent.resume(); agent.stop();
7
+ * agent.on("step", handler);
8
+ */
9
+ import type { RunEvent, RunResult, TaskSpec } from "@mlola/browser-protocol";
10
+ import { type BrowserAgentConfig } from "./config.ts";
11
+ export type AgentEventName = "step" | "takeover-required" | "approval-required" | "artifact-created" | "fallback" | "completed" | "failed" | "event";
12
+ export type AgentEventHandler = (event: RunEvent) => void;
13
+ export declare class BrowserAgent {
14
+ #private;
15
+ constructor(config?: BrowserAgentConfig);
16
+ get status(): string;
17
+ /** Raw event log for the run in progress (or the last run). */
18
+ get events(): readonly RunEvent[];
19
+ on(event: AgentEventName, handler: AgentEventHandler): () => void;
20
+ run(task: TaskSpec | string): Promise<RunResult>;
21
+ pause(reason?: string): void;
22
+ resume(reason?: string): void;
23
+ stop(reason?: string): void;
24
+ }
25
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAE7E,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE1E,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,mBAAmB,GACnB,mBAAmB,GACnB,kBAAkB,GAClB,UAAU,GACV,WAAW,GACX,QAAQ,GACR,OAAO,CAAC;AAEZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAE1D,qBAAa,YAAY;;gBAMX,MAAM,GAAE,kBAAuB;IAI3C,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,+DAA+D;IAC/D,IAAI,MAAM,IAAI,SAAS,QAAQ,EAAE,CAEhC;IAED,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAc3D,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA4DtD,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAI5B,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IAI7B,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;CAG5B"}
package/dist/agent.js ADDED
@@ -0,0 +1,106 @@
1
+ /**
2
+ * BrowserAgent — the public SDK surface (PRD §58).
3
+ *
4
+ * const agent = new BrowserAgent(config);
5
+ * const run = await agent.run({ goal: "Download the latest invoice" });
6
+ * agent.pause(); agent.resume(); agent.stop();
7
+ * agent.on("step", handler);
8
+ */
9
+ import { TaskOrchestrator } from "@mlola/browser-core";
10
+ import { resolveAgentConfig } from "./config.js";
11
+ export class BrowserAgent {
12
+ #config;
13
+ #orchestrator;
14
+ #handlers = new Map();
15
+ #events = [];
16
+ constructor(config = {}) {
17
+ this.#config = config;
18
+ }
19
+ get status() {
20
+ return this.#orchestrator?.status ?? "created";
21
+ }
22
+ /** Raw event log for the run in progress (or the last run). */
23
+ get events() {
24
+ return this.#events;
25
+ }
26
+ on(event, handler) {
27
+ const set = this.#handlers.get(event) ?? new Set();
28
+ set.add(handler);
29
+ this.#handlers.set(event, set);
30
+ return () => {
31
+ set.delete(handler);
32
+ };
33
+ }
34
+ #emit(event, payload) {
35
+ for (const handler of this.#handlers.get("event") ?? [])
36
+ handler(payload);
37
+ for (const handler of this.#handlers.get(event) ?? [])
38
+ handler(payload);
39
+ }
40
+ async run(task) {
41
+ const spec = typeof task === "string" ? { goal: task } : task;
42
+ const resolved = resolveAgentConfig({
43
+ ...this.#config,
44
+ ...(spec.browser ? { browser: { ...this.#config.browser, ...spec.browser } } : {}),
45
+ ...(spec.policy ? { policy: { ...this.#config.policy, ...spec.policy } } : {}),
46
+ ...(spec.screenshot ? { screenshot: spec.screenshot } : {}),
47
+ });
48
+ this.#events = [];
49
+ this.#orchestrator = new TaskOrchestrator({
50
+ backend: resolved.backend,
51
+ providers: resolved.providers,
52
+ approvals: resolved.approvals,
53
+ policy: resolved.policy,
54
+ screenshot: resolved.screenshot,
55
+ ...(resolved.humanHelp ? { humanHelp: resolved.humanHelp } : {}),
56
+ ...(resolved.home ? { home: resolved.home } : {}),
57
+ onEvent: (event) => {
58
+ this.#events.push(event);
59
+ resolved.onEvent?.(event);
60
+ switch (event.type) {
61
+ case "STEP_COMPLETED":
62
+ this.#emit("step", event);
63
+ break;
64
+ case "HUMAN_HELP_REQUESTED":
65
+ this.#emit("takeover-required", event);
66
+ break;
67
+ case "APPROVAL_REQUESTED":
68
+ this.#emit("approval-required", event);
69
+ break;
70
+ case "ARTIFACT_CREATED":
71
+ this.#emit("artifact-created", event);
72
+ break;
73
+ case "FALLBACK_STARTED":
74
+ this.#emit("fallback", event);
75
+ break;
76
+ case "RUN_COMPLETED":
77
+ this.#emit("completed", event);
78
+ break;
79
+ case "RUN_FAILED":
80
+ this.#emit("failed", event);
81
+ break;
82
+ default:
83
+ break;
84
+ }
85
+ },
86
+ });
87
+ // Establish the fast-path connection while the browser is starting; the
88
+ // first decision of a session otherwise pays the TLS handshake premium.
89
+ const decision = resolved.providers.decision;
90
+ void decision.warmup?.().catch(() => undefined);
91
+ return this.#orchestrator.run({
92
+ ...spec,
93
+ budgets: { ...(this.#config.budgets ?? {}), ...(spec.budgets ?? {}) },
94
+ });
95
+ }
96
+ pause(reason) {
97
+ this.#orchestrator?.pause(reason);
98
+ }
99
+ resume(reason) {
100
+ this.#orchestrator?.resume(reason);
101
+ }
102
+ stop(reason) {
103
+ this.#orchestrator?.cancel(reason);
104
+ }
105
+ }
106
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAA2B,MAAM,aAAa,CAAC;AAc1E,MAAM,OAAO,YAAY;IACvB,OAAO,CAAqB;IAC5B,aAAa,CAA+B;IAC5C,SAAS,GAAG,IAAI,GAAG,EAA0C,CAAC;IAC9D,OAAO,GAAe,EAAE,CAAC;IAEzB,YAAY,SAA6B,EAAE;QACzC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,aAAa,EAAE,MAAM,IAAI,SAAS,CAAC;IACjD,CAAC;IAED,+DAA+D;IAC/D,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,EAAE,CAAC,KAAqB,EAAE,OAA0B;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,EAAqB,CAAC;QACtE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC/B,OAAO,GAAG,EAAE;YACV,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACtB,CAAC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,KAAqB,EAAE,OAAiB;QAC5C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1E,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAuB;QAC/B,MAAM,IAAI,GAAa,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACxE,MAAM,QAAQ,GAAG,kBAAkB,CAAC;YAClC,GAAG,IAAI,CAAC,OAAO;YACf,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,aAAa,GAAG,IAAI,gBAAgB,CAAC;YACxC,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;YAC/B,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC1B,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,gBAAgB;wBACnB,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;wBAC1B,MAAM;oBACR,KAAK,sBAAsB;wBACzB,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;wBACvC,MAAM;oBACR,KAAK,oBAAoB;wBACvB,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;wBACvC,MAAM;oBACR,KAAK,kBAAkB;wBACrB,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;wBACtC,MAAM;oBACR,KAAK,kBAAkB;wBACrB,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;wBAC9B,MAAM;oBACR,KAAK,eAAe;wBAClB,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;wBAC/B,MAAM;oBACR,KAAK,YAAY;wBACf,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;wBAC5B,MAAM;oBACR;wBACE,MAAM;gBACV,CAAC;YACH,CAAC;SACF,CAAC,CAAC;QAEH,wEAAwE;QACxE,wEAAwE;QACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,QAA4C,CAAC;QACjF,KAAK,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAEhD,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC5B,GAAG,IAAI;YACP,OAAO,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;SACtE,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAe;QACnB,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,MAAe;QACpB,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,MAAe;QAClB,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;CACF"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Agent configuration resolution (PRD §58).
3
+ *
4
+ * Turns a declarative config into concrete providers and a backend. Every
5
+ * provider is optional except the decision provider; when a provider is absent
6
+ * the runtime escalates to the person instead of guessing.
7
+ */
8
+ import { DEFAULT_POLICY, type ActionRisk, type Budgets, type BrowserConfig, type DecisionProvider, type PlannerProvider, type PolicyConfig, type TextProvider, type VisionProvider } from "@mlola/browser-protocol";
9
+ import { ApprovalBroker, type ApprovalBrokerOptions } from "@mlola/browser-policy";
10
+ import { type OrchestratorProviders } from "@mlola/browser-core";
11
+ import type { BrowserBackend } from "@mlola/browser-backend";
12
+ import type { HumanHelpHost } from "@mlola/browser-takeover";
13
+ export type DecisionProviderChoice = "typesafe" | "keyword" | DecisionProvider;
14
+ export type OptionalProviderChoice<T> = "auto" | "none" | T;
15
+ export interface BrowserAgentConfig {
16
+ browser?: Partial<BrowserConfig>;
17
+ /** Fast-path decision provider. Default: TypeSafe Jev. */
18
+ decision?: DecisionProviderChoice | {
19
+ provider: DecisionProviderChoice;
20
+ model?: string;
21
+ apiKey?: string;
22
+ baseUrl?: string;
23
+ };
24
+ /** Text helper for generated field values. */
25
+ text?: OptionalProviderChoice<TextProvider>;
26
+ /** Planner / strong-model fallback. */
27
+ planner?: OptionalProviderChoice<PlannerProvider>;
28
+ vision?: VisionProvider;
29
+ policy?: Partial<PolicyConfig>;
30
+ budgets?: Partial<Budgets>;
31
+ humanHelp?: HumanHelpHost;
32
+ /** Approval behaviour for `ask` policy modes. A broker instance is used as-is. */
33
+ approvals?: ApprovalBroker | (ApprovalBrokerOptions & {
34
+ autoApprove?: ActionRisk[];
35
+ });
36
+ /** Screenshot policy; default off in normal runs. */
37
+ screenshot?: "off" | "on-failure" | "always";
38
+ home?: string;
39
+ onEvent?: (event: import("@mlola/browser-protocol").RunEvent) => void;
40
+ }
41
+ export interface ResolvedAgentConfig {
42
+ backend: BrowserBackend;
43
+ providers: OrchestratorProviders;
44
+ policy: Partial<PolicyConfig>;
45
+ budgets?: Partial<Budgets>;
46
+ approvals: ApprovalBroker;
47
+ humanHelp?: HumanHelpHost;
48
+ home?: string;
49
+ screenshot: "off" | "on-failure" | "always";
50
+ onEvent?: (event: import("@mlola/browser-protocol").RunEvent) => void;
51
+ }
52
+ export declare const resolveAgentConfig: (config?: BrowserAgentConfig) => ResolvedAgentConfig;
53
+ export { DEFAULT_POLICY };
54
+ export type { ApprovalBrokerOptions };
55
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,cAAc,EAEd,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAkC,KAAK,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGjG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,MAAM,sBAAsB,GAAG,UAAU,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAC/E,MAAM,MAAM,sBAAsB,CAAC,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,sBAAsB,GAAG;QAAE,QAAQ,EAAE,sBAAsB,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5H,8CAA8C;IAC9C,IAAI,CAAC,EAAE,sBAAsB,CAAC,YAAY,CAAC,CAAC;IAC5C,uCAAuC;IACvC,OAAO,CAAC,EAAE,sBAAsB,CAAC,eAAe,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,kFAAkF;IAClF,SAAS,CAAC,EAAE,cAAc,GAAG,CAAC,qBAAqB,GAAG;QAAE,WAAW,CAAC,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC,CAAC;IACtF,qDAAqD;IACrD,UAAU,CAAC,EAAE,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,yBAAyB,EAAE,QAAQ,KAAK,IAAI,CAAC;CACvE;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,qBAAqB,CAAC;IACjC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3B,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,GAAG,YAAY,GAAG,QAAQ,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,yBAAyB,EAAE,QAAQ,KAAK,IAAI,CAAC;CACvE;AA4DD,eAAO,MAAM,kBAAkB,GAAI,SAAQ,kBAAuB,KAAG,mBAgCpE,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC;AAC1B,YAAY,EAAE,qBAAqB,EAAE,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Agent configuration resolution (PRD §58).
3
+ *
4
+ * Turns a declarative config into concrete providers and a backend. Every
5
+ * provider is optional except the decision provider; when a provider is absent
6
+ * the runtime escalates to the person instead of guessing.
7
+ */
8
+ import { DEFAULT_POLICY, RuntimeError, } from "@mlola/browser-protocol";
9
+ import { ApprovalBroker } from "@mlola/browser-policy";
10
+ import { createFallbackDecisionProvider } from "@mlola/browser-core";
11
+ import { JevDecisionProvider, KeywordDecisionProvider, OpenAIPlannerProvider, OpenAITextProvider } from "@mlola/decision-jev";
12
+ import { playwrightBackendFactory } from "@mlola/backend-playwright";
13
+ const buildBackend = (config) => {
14
+ const kind = config.browser?.backend ?? "playwright";
15
+ if (kind === "playwright")
16
+ return playwrightBackendFactory.create();
17
+ throw new RuntimeError("INTERNAL", `browser backend "${kind}" is not available in this build`, {
18
+ detail: "the Chrome extension backend arrives with the extension runtime; use backend: 'playwright'",
19
+ retryable: false,
20
+ });
21
+ };
22
+ const buildDecisionProvider = (config) => {
23
+ const spec = config.decision ?? "typesafe";
24
+ if (typeof spec === "object" && "decide" in spec)
25
+ return spec;
26
+ const choice = typeof spec === "string" ? spec : spec.provider;
27
+ const options = typeof spec === "object" ? spec : undefined;
28
+ switch (choice) {
29
+ case "keyword":
30
+ return new KeywordDecisionProvider();
31
+ case "typesafe":
32
+ return new JevDecisionProvider({
33
+ ...(options?.model ? { model: options.model } : {}),
34
+ ...(options?.apiKey ? { apiKey: options.apiKey } : {}),
35
+ ...(options?.baseUrl ? { baseUrl: options.baseUrl } : {}),
36
+ });
37
+ default:
38
+ throw new RuntimeError("INTERNAL", `unknown decision provider "${String(choice)}"`, { retryable: false });
39
+ }
40
+ };
41
+ const resolvePlanner = (choice) => {
42
+ if (choice === "none")
43
+ return undefined;
44
+ if (choice && choice !== "auto")
45
+ return choice;
46
+ const hasKey = Boolean(process.env["MLOLA_PLANNER_API_KEY"] ?? process.env["OPENAI_API_KEY"]);
47
+ if (!hasKey && choice === "auto")
48
+ return undefined;
49
+ if (!hasKey && choice === undefined)
50
+ return undefined;
51
+ try {
52
+ return new OpenAIPlannerProvider();
53
+ }
54
+ catch {
55
+ return undefined;
56
+ }
57
+ };
58
+ const resolveText = (choice) => {
59
+ if (choice === "none")
60
+ return undefined;
61
+ if (choice && choice !== "auto")
62
+ return choice;
63
+ const hasKey = Boolean(process.env["MLOLA_TEXT_API_KEY"] ??
64
+ process.env["MLOLA_PLANNER_API_KEY"] ??
65
+ process.env["OPENAI_API_KEY"]);
66
+ if (!hasKey)
67
+ return undefined;
68
+ try {
69
+ return new OpenAITextProvider();
70
+ }
71
+ catch {
72
+ return undefined;
73
+ }
74
+ };
75
+ export const resolveAgentConfig = (config = {}) => {
76
+ const decision = buildDecisionProvider(config);
77
+ const planner = resolvePlanner(config.planner);
78
+ const text = resolveText(config.text);
79
+ const providers = {
80
+ decision,
81
+ ...(planner ? { planner } : {}),
82
+ ...(text ? { text } : {}),
83
+ ...(config.vision ? { vision: config.vision } : {}),
84
+ };
85
+ if (planner?.chooseAction) {
86
+ providers.fallbackDecision = createFallbackDecisionProvider(planner);
87
+ }
88
+ const approvalsConfig = config.approvals;
89
+ const approvals = approvalsConfig !== undefined && typeof approvalsConfig.resolve === "function"
90
+ ? approvalsConfig
91
+ : new ApprovalBroker(approvalsConfig ?? {});
92
+ return {
93
+ backend: buildBackend(config),
94
+ providers,
95
+ policy: config.policy ?? {},
96
+ ...(config.budgets ? { budgets: config.budgets } : {}),
97
+ approvals,
98
+ ...(config.humanHelp ? { humanHelp: config.humanHelp } : {}),
99
+ ...(config.home ? { home: config.home } : {}),
100
+ screenshot: config.screenshot ?? "off",
101
+ ...(config.onEvent ? { onEvent: config.onEvent } : {}),
102
+ };
103
+ };
104
+ export { DEFAULT_POLICY };
105
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @mlola/browser-runtime — the public SDK.
3
+ *
4
+ * A reliable, model-routed browser runtime: deterministic browser mechanics,
5
+ * safety, verification and recovery, with a fast decision path (Jev) and
6
+ * selective escalation to a planner or a person.
7
+ */
8
+ export { BrowserAgent, type AgentEventName, type AgentEventHandler } from "./agent.ts";
9
+ export { resolveAgentConfig, DEFAULT_POLICY, type BrowserAgentConfig, type DecisionProviderChoice, type OptionalProviderChoice, type ResolvedAgentConfig, } from "./config.ts";
10
+ export { JevClient, JevDecisionProvider, OpenAIPlannerProvider, OpenAITextProvider, KeywordDecisionProvider, ScriptedDecisionProvider, buildQuestions, renderDecisionState, } from "@mlola/decision-jev";
11
+ export { PlaywrightBackend, playwrightBackendFactory, createPlaywrightBackend } from "@mlola/backend-playwright";
12
+ export { BackendRegistry } from "@mlola/browser-backend";
13
+ export type { BrowserBackend, BrowserSession, ActionOutcome, PreflightResult } from "@mlola/browser-backend";
14
+ export { TaskOrchestrator, Executor, BudgetManager, buildActionSpace, validateDecision, verifyStep, verifyCompletion, inferCompletionCriteria, resolveText, extractLiterals, createFallbackDecisionProvider, type OrchestratorOptions, type OrchestratorProviders, } from "@mlola/browser-core";
15
+ export { PolicyEngine, ApprovalBroker, assessRisk, quarantineCandidates, findInjectionSignals, type ApprovalBrokerOptions, } from "@mlola/browser-policy";
16
+ export { LoopDetector, nextStrategy, classifyError } from "@mlola/browser-recovery";
17
+ export { ArtifactRegistry, validateUpload, classifyDocumentType, sniffMime } from "@mlola/browser-artifacts";
18
+ export { HumanHelpBroker, UnavailableHumanHelpHost, evaluateCriteria } from "@mlola/browser-takeover";
19
+ export type { HumanHelpHost } from "@mlola/browser-takeover";
20
+ export { EventLog, computeMetrics, formatMetrics, listRuns, readRunEvents, readRunSummary, resolveHome, runPaths, } from "@mlola/browser-trace";
21
+ export * from "@mlola/browser-protocol";
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACd,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACjH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG7G,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,8BAA8B,EAC9B,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC7G,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACtG,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EACL,QAAQ,EACR,cAAc,EACd,aAAa,EACb,QAAQ,EACR,aAAa,EACb,cAAc,EACd,WAAW,EACX,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAG9B,cAAc,yBAAyB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @mlola/browser-runtime — the public SDK.
3
+ *
4
+ * A reliable, model-routed browser runtime: deterministic browser mechanics,
5
+ * safety, verification and recovery, with a fast decision path (Jev) and
6
+ * selective escalation to a planner or a person.
7
+ */
8
+ export { BrowserAgent } from "./agent.js";
9
+ export { resolveAgentConfig, DEFAULT_POLICY, } from "./config.js";
10
+ // Provider implementations, so SDK users can compose their own stacks.
11
+ export { JevClient, JevDecisionProvider, OpenAIPlannerProvider, OpenAITextProvider, KeywordDecisionProvider, ScriptedDecisionProvider, buildQuestions, renderDecisionState, } from "@mlola/decision-jev";
12
+ // Browser backends.
13
+ export { PlaywrightBackend, playwrightBackendFactory, createPlaywrightBackend } from "@mlola/backend-playwright";
14
+ export { BackendRegistry } from "@mlola/browser-backend";
15
+ // Runtime engine pieces.
16
+ export { TaskOrchestrator, Executor, BudgetManager, buildActionSpace, validateDecision, verifyStep, verifyCompletion, inferCompletionCriteria, resolveText, extractLiterals, createFallbackDecisionProvider, } from "@mlola/browser-core";
17
+ // Policy, recovery, artifacts, takeover.
18
+ export { PolicyEngine, ApprovalBroker, assessRisk, quarantineCandidates, findInjectionSignals, } from "@mlola/browser-policy";
19
+ export { LoopDetector, nextStrategy, classifyError } from "@mlola/browser-recovery";
20
+ export { ArtifactRegistry, validateUpload, classifyDocumentType, sniffMime } from "@mlola/browser-artifacts";
21
+ export { HumanHelpBroker, UnavailableHumanHelpHost, evaluateCriteria } from "@mlola/browser-takeover";
22
+ // Trace utilities.
23
+ export { EventLog, computeMetrics, formatMetrics, listRuns, readRunEvents, readRunSummary, resolveHome, runPaths, } from "@mlola/browser-trace";
24
+ // Protocol surface (types are the contract).
25
+ export * from "@mlola/browser-protocol";
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAA+C,MAAM,YAAY,CAAC;AACvF,OAAO,EACL,kBAAkB,EAClB,cAAc,GAKf,MAAM,aAAa,CAAC;AAErB,uEAAuE;AACvE,OAAO,EACL,SAAS,EACT,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,wBAAwB,EACxB,cAAc,EACd,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAE7B,oBAAoB;AACpB,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACjH,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,yBAAyB;AACzB,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,8BAA8B,GAG/B,MAAM,qBAAqB,CAAC;AAE7B,yCAAyC;AACzC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,oBAAoB,GAErB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC7G,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGtG,mBAAmB;AACnB,OAAO,EACL,QAAQ,EACR,cAAc,EACd,aAAa,EACb,QAAQ,EACR,aAAa,EACb,cAAc,EACd,WAAW,EACX,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAE9B,6CAA6C;AAC7C,cAAc,yBAAyB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@mlola/browser-runtime",
3
+ "version": "0.1.0",
4
+ "description": "Public SDK: BrowserAgent over the core runtime with the default Jev + Playwright stack.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "main": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "development": "./src/index.ts",
13
+ "default": "./dist/index.js"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "LICENSE",
19
+ "README.md"
20
+ ],
21
+ "sideEffects": false,
22
+ "engines": {
23
+ "node": ">=22.18"
24
+ },
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git+https://github.com/mlolahq/browser-runtime.git"
28
+ },
29
+ "homepage": "https://mlola.com/browser-runtime",
30
+ "bugs": {
31
+ "url": "https://github.com/mlolahq/browser-runtime.git/issues"
32
+ },
33
+ "keywords": [
34
+ "browser-automation",
35
+ "browser-agent",
36
+ "runtime",
37
+ "playwright",
38
+ "agent",
39
+ "jev",
40
+ "llm",
41
+ "automation"
42
+ ],
43
+ "scripts": {
44
+ "build": "tsc -b"
45
+ },
46
+ "publishConfig": {
47
+ "access": "public"
48
+ },
49
+ "dependencies": {
50
+ "@mlola/browser-protocol": "0.1.0",
51
+ "@mlola/browser-core": "0.1.0",
52
+ "@mlola/decision-jev": "0.1.0",
53
+ "@mlola/backend-playwright": "0.1.0"
54
+ }
55
+ }