@mlola/browser-cli 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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +19 -0
  3. package/dist/args.d.ts +14 -0
  4. package/dist/args.d.ts.map +1 -0
  5. package/dist/args.js +58 -0
  6. package/dist/args.js.map +1 -0
  7. package/dist/bin.d.ts +7 -0
  8. package/dist/bin.d.ts.map +1 -0
  9. package/dist/bin.js +15 -0
  10. package/dist/bin.js.map +1 -0
  11. package/dist/commands/daemon.d.ts +6 -0
  12. package/dist/commands/daemon.d.ts.map +1 -0
  13. package/dist/commands/daemon.js +58 -0
  14. package/dist/commands/daemon.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +6 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +125 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/eval.d.ts +6 -0
  20. package/dist/commands/eval.d.ts.map +1 -0
  21. package/dist/commands/eval.js +51 -0
  22. package/dist/commands/eval.js.map +1 -0
  23. package/dist/commands/inspect.d.ts +9 -0
  24. package/dist/commands/inspect.d.ts.map +1 -0
  25. package/dist/commands/inspect.js +178 -0
  26. package/dist/commands/inspect.js.map +1 -0
  27. package/dist/commands/run.d.ts +6 -0
  28. package/dist/commands/run.d.ts.map +1 -0
  29. package/dist/commands/run.js +209 -0
  30. package/dist/commands/run.js.map +1 -0
  31. package/dist/human-host.d.ts +24 -0
  32. package/dist/human-host.d.ts.map +1 -0
  33. package/dist/human-host.js +60 -0
  34. package/dist/human-host.js.map +1 -0
  35. package/dist/index.d.ts +5 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +5 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/main.d.ts +5 -0
  40. package/dist/main.d.ts.map +1 -0
  41. package/dist/main.js +133 -0
  42. package/dist/main.js.map +1 -0
  43. package/dist/ui.d.ts +30 -0
  44. package/dist/ui.d.ts.map +1 -0
  45. package/dist/ui.js +106 -0
  46. package/dist/ui.js.map +1 -0
  47. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * `mlola browser run` — execute a goal against a real browser.
3
+ */
4
+ import { type ParsedArgs } from "../args.ts";
5
+ export declare const runCommand: (args: ParsedArgs) => Promise<number>;
6
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkBH,OAAO,EAAoC,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAmB/E,eAAO,MAAM,UAAU,GAAU,MAAM,UAAU,KAAG,OAAO,CAAC,MAAM,CAoGjE,CAAC"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * `mlola browser run` — execute a goal against a real browser.
3
+ */
4
+ import { readFileSync } from "node:fs";
5
+ import { resolve } from "node:path";
6
+ import { parseOrThrow, policyFileSchema, taskFileSchema, DEFAULT_POLICY, } from "@mlola/browser-protocol";
7
+ import { computeMetrics, formatMetrics, resolveHome } from "@mlola/browser-trace";
8
+ import { BrowserAgent } from "@mlola/browser-runtime";
9
+ import { flagBool, flagNumber, flagString } from "../args.js";
10
+ import { createCliApprovalBroker, CliHumanHelpHost } from "../human-host.js";
11
+ import { c, formatDuration, heading, isInteractive, kv, out, printErr } from "../ui.js";
12
+ const ALL_RISKS = [
13
+ "read",
14
+ "navigate",
15
+ "download",
16
+ "upload",
17
+ "send_message",
18
+ "publish",
19
+ "purchase",
20
+ "delete",
21
+ "credential_change",
22
+ "permission_change",
23
+ "irreversible",
24
+ "unknown",
25
+ ];
26
+ export const runCommand = async (args) => {
27
+ const { flags, positional } = args;
28
+ // Task: inline goal, positional file, or --task file.
29
+ const taskPath = flagString(flags, "task") ?? positional.find((p) => p.endsWith(".json"));
30
+ let task;
31
+ if (taskPath) {
32
+ const raw = JSON.parse(readFileSync(resolve(taskPath), "utf8"));
33
+ const parsed = parseOrThrow(taskFileSchema, raw, "task file");
34
+ task = parsed;
35
+ }
36
+ else {
37
+ const goal = flagString(flags, "goal") ?? positional.filter((p) => !p.endsWith(".json")).join(" ");
38
+ if (!goal || goal.trim().length === 0) {
39
+ printErr("error: provide a goal, e.g. mlola browser run --goal \"Download my latest invoice\"");
40
+ return 2;
41
+ }
42
+ task = { goal: goal.trim() };
43
+ }
44
+ const provider = flagString(flags, "provider") ?? "typesafe";
45
+ const json = flagBool(flags, "json");
46
+ const quiet = flagBool(flags, "quiet") || json;
47
+ const yes = flagBool(flags, "yes") || flagBool(flags, "y");
48
+ const noHuman = flagBool(flags, "no-human");
49
+ const headless = flagBool(flags, "headless");
50
+ const channel = flagString(flags, "browser") ?? process.env["MLOLA_CHROME_CHANNEL"] ?? "chrome";
51
+ const cdpUrl = flagString(flags, "cdp") ?? process.env["MLOLA_CDP_URL"];
52
+ const profile = flagString(flags, "profile");
53
+ const maxSteps = flagNumber(flags, "max-steps");
54
+ const screenshot = (flagString(flags, "screenshot") ?? "on-failure");
55
+ const stopBefore = flagString(flags, "stop-before");
56
+ const browser = {
57
+ backend: "playwright",
58
+ headless,
59
+ channel: cdpUrl ? undefined : channel,
60
+ ...(cdpUrl ? { mode: "cdp", cdpUrl } : {}),
61
+ ...(profile ? { userDataDir: resolve(profile) } : {}),
62
+ };
63
+ let policy = {};
64
+ const policyPath = flagString(flags, "policy");
65
+ if (policyPath) {
66
+ const raw = JSON.parse(readFileSync(resolve(policyPath), "utf8"));
67
+ policy = parseOrThrow(policyFileSchema, raw, "policy file");
68
+ }
69
+ if (yes)
70
+ policy = { ...policy, defaults: { ...DEFAULT_POLICY.defaults, ...(policy.defaults ?? {}) } };
71
+ const spec = {
72
+ ...task,
73
+ ...(flagString(flags, "url") ? { startUrl: flagString(flags, "url") } : {}),
74
+ ...(stopBefore ? { stopBefore: stopBefore.split(",").map((s) => s.trim()).filter(Boolean) } : {}),
75
+ ...(maxSteps ? { budgets: { ...(task.budgets ?? {}), maxSteps } } : {}),
76
+ browser: { ...(task.browser ?? {}), ...browser },
77
+ };
78
+ const agent = new BrowserAgent({
79
+ decision: provider === "keyword"
80
+ ? "keyword"
81
+ : {
82
+ provider: "typesafe",
83
+ ...(flagString(flags, "model") ? { model: flagString(flags, "model") } : {}),
84
+ },
85
+ humanHelp: new CliHumanHelpHost(!noHuman),
86
+ approvals: createCliApprovalBroker({
87
+ autoApprove: yes ? ALL_RISKS : [],
88
+ interactive: !yes && isInteractive(),
89
+ }),
90
+ policy,
91
+ screenshot,
92
+ onEvent: (event) => {
93
+ if (quiet)
94
+ return;
95
+ renderEvent(event);
96
+ },
97
+ });
98
+ if (!quiet) {
99
+ heading(`mlola browser run ${c.dim(provider)}`);
100
+ kv("goal", spec.goal);
101
+ if (spec.startUrl)
102
+ kv("start url", spec.startUrl);
103
+ kv("browser", `${browser.mode === "cdp" ? `cdp ${cdpUrl}` : channel}${headless ? " (headless)" : ""}`);
104
+ if (provider === "keyword")
105
+ kv("note", c.yellow("offline keyword baseline — not the Jev fast path"));
106
+ }
107
+ let result;
108
+ try {
109
+ result = await agent.run(spec);
110
+ }
111
+ catch (error) {
112
+ printErr(c.red(`run failed to start: ${error instanceof Error ? error.message : String(error)}`));
113
+ return 1;
114
+ }
115
+ if (json) {
116
+ out(JSON.stringify({ result, metrics: computeMetrics(agent.events) }, null, 2));
117
+ }
118
+ else {
119
+ printSummary(result, agent);
120
+ }
121
+ return result.status === "completed" ? 0 : 1;
122
+ };
123
+ const renderEvent = (event) => {
124
+ switch (event.type) {
125
+ case "DECISION_RECEIVED": {
126
+ const d = event.payload.decision;
127
+ const target = d.target !== undefined ? ` → ${d.target}` : "";
128
+ const tag = d.provider === "typesafe" ? "" : `[${d.provider}] `;
129
+ out(`${c.dim(`step ${tag}${d.operation.toLowerCase()}${target}`)} ${c.dim(`(${Math.round(d.latencyMs)}ms, conf ${d.operationConfidence.toFixed(2)})`)}`);
130
+ break;
131
+ }
132
+ case "ACTION_EXECUTED":
133
+ out(` ${c.green("→")} ${event.payload.action} ${c.dim(`(${Math.round(event.payload.latencyMs)}ms)`)}`);
134
+ break;
135
+ case "ACTION_FAILED":
136
+ out(` ${c.red("✖")} ${event.payload.action} ${c.dim(event.payload.failure.message)}`);
137
+ break;
138
+ case "RECOVERY_STARTED":
139
+ out(` ${c.yellow("↻")} recovering: ${event.payload.strategy} ${c.dim(`(${event.payload.failure.message.slice(0, 80)})`)}`);
140
+ break;
141
+ case "LOOP_DETECTED":
142
+ out(` ${c.yellow("↻")} loop detected: ${event.payload.kind}`);
143
+ break;
144
+ case "FALLBACK_STARTED":
145
+ out(` ${c.magenta("⇧")} escalating to ${event.payload.to} ${c.dim(event.payload.reason)}`);
146
+ break;
147
+ case "POLICY_DENIED":
148
+ out(` ${c.red("⊘")} policy denied: ${event.payload.outcome.reason}`);
149
+ break;
150
+ case "TAKEOVER_STARTED":
151
+ out(` ${c.magenta("✋")} takeover: ${event.payload.reason}`);
152
+ break;
153
+ case "DOWNLOAD_COMPLETED":
154
+ out(` ${c.cyan("⤓")} downloaded ${event.payload.artifact.name} (${event.payload.artifact.documentType ?? event.payload.artifact.mimeType})`);
155
+ break;
156
+ case "UPLOAD_COMPLETED":
157
+ out(` ${c.cyan("⤒")} uploaded ${event.payload.artifactId}: ${event.payload.evidence}`);
158
+ break;
159
+ case "VERIFICATION_RESULT": {
160
+ const v = event.payload.verification;
161
+ const mark = v.status === "verified" ? c.green("✔") : v.status === "refuted" ? c.red("✖") : c.yellow("?");
162
+ out(` ${mark} ${v.status}: ${v.evidence.map((e) => e.detail).slice(0, 2).join("; ")}`);
163
+ break;
164
+ }
165
+ case "SUBGOAL_STARTED":
166
+ out(`${c.bold("▸")} subgoal ${event.payload.index + 1}: ${event.payload.subgoal}`);
167
+ break;
168
+ case "BUDGET_WARNING":
169
+ out(` ${c.yellow("!")} ${event.payload.reason}`);
170
+ break;
171
+ case "NOTE":
172
+ out(` ${c.dim(`note: ${event.payload.text}`)}`);
173
+ break;
174
+ case "SCREENSHOT_CAPTURED":
175
+ out(` ${c.dim(`screenshot: ${event.payload.path}`)}`);
176
+ break;
177
+ default:
178
+ break;
179
+ }
180
+ };
181
+ const printSummary = (result, agent) => {
182
+ const metrics = computeMetrics(agent.events);
183
+ heading(result.status === "completed" ? c.green("run completed") : c.red(`run ${result.status}`));
184
+ kv("goal", result.reason);
185
+ kv("steps", `${result.steps} in ${formatDuration(result.durationMs)}`);
186
+ kv("verification", result.verification ? `${result.verification.status} — ${result.verification.evidence[0]?.detail ?? ""}` : "not attempted");
187
+ if (result.artifacts.length > 0) {
188
+ out(c.dim(" artifacts"));
189
+ for (const artifact of result.artifacts) {
190
+ out(` ${c.cyan(artifact.id)} ${artifact.name} ${c.dim(`${artifact.documentType ?? artifact.mimeType}, ${artifact.verified ? "verified" : "unverified"}`)}`);
191
+ }
192
+ }
193
+ kv("usage", `decision ${result.usage.decision} · planner ${result.usage.planner} · text ${result.usage.text} · $${result.usage.costUsd.toFixed(4)}`);
194
+ kv("fast path", `${Math.round(metrics.fastPathShare * 100)}% of executed steps`);
195
+ if (metrics.recoveries > 0)
196
+ kv("recovery", `${metrics.recoveries} attempt(s), ${metrics.recoveriesSucceeded} recovered`);
197
+ if (result.interventionCount > 0)
198
+ kv("human", `${result.interventionCount} intervention(s)`);
199
+ if (result.tracePath)
200
+ kv("trace", c.dim(result.tracePath));
201
+ if (result.status !== "completed" && metrics.decisionLatencyMs.samples > 0) {
202
+ out(c.dim(formatMetrics(metrics)));
203
+ }
204
+ if (result.status !== "completed")
205
+ out(c.dim(`hint: run mlola browser trace show ${result.runId}`));
206
+ out("");
207
+ void resolveHome;
208
+ };
209
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Interactive human loop for the CLI (PRD §19, §20).
3
+ *
4
+ * The terminal is the person: takeover prompts, approval requests and
5
+ * confirmation of unverifiable completions all funnel through here.
6
+ */
7
+ import type { ActionRisk, HumanHelpRequest, HumanHelpResolution } from "@mlola/browser-protocol";
8
+ import { ApprovalBroker } from "@mlola/browser-policy";
9
+ import type { HumanHelpHost } from "@mlola/browser-takeover";
10
+ export declare class CliHumanHelpHost implements HumanHelpHost {
11
+ #private;
12
+ constructor(enabled: boolean);
13
+ ask(request: HumanHelpRequest): Promise<HumanHelpResolution>;
14
+ }
15
+ export interface CliApprovalOptions {
16
+ /** Risks approved without asking (e.g. everything under --yes). */
17
+ autoApprove?: ActionRisk[];
18
+ /** Risks denied without asking. */
19
+ autoDeny?: ActionRisk[];
20
+ /** Ask interactively (default true when stdin is a TTY). */
21
+ interactive?: boolean;
22
+ }
23
+ export declare const createCliApprovalBroker: (options?: CliApprovalOptions) => ApprovalBroker;
24
+ //# sourceMappingURL=human-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-host.d.ts","sourceRoot":"","sources":["../src/human-host.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAG7D,qBAAa,gBAAiB,YAAW,aAAa;;gBAGxC,OAAO,EAAE,OAAO;IAItB,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAsBnE;AAED,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;IAC3B,mCAAmC;IACnC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,eAAO,MAAM,uBAAuB,GAAI,UAAS,kBAAuB,KAAG,cAwB1E,CAAC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Interactive human loop for the CLI (PRD §19, §20).
3
+ *
4
+ * The terminal is the person: takeover prompts, approval requests and
5
+ * confirmation of unverifiable completions all funnel through here.
6
+ */
7
+ import { ApprovalBroker } from "@mlola/browser-policy";
8
+ import { c, confirm, isInteractive, out, waitForHuman } from "./ui.js";
9
+ export class CliHumanHelpHost {
10
+ #enabled;
11
+ constructor(enabled) {
12
+ this.#enabled = enabled;
13
+ }
14
+ async ask(request) {
15
+ if (!this.#enabled || !isInteractive()) {
16
+ out(c.yellow("human help is unavailable in this mode; the runtime will stop safely"));
17
+ return "cancelled";
18
+ }
19
+ out("");
20
+ out(`${c.magenta(c.bold("human needed"))} ${c.dim(request.kind)}`);
21
+ for (const line of request.prompt.split("\n"))
22
+ out(` ${line}`);
23
+ if (request.targets && request.targets.length > 0) {
24
+ out("");
25
+ out(c.dim(" relevant controls:"));
26
+ for (const target of request.targets) {
27
+ out(` ${c.dim(`[${target.ref.index}]`)} ${target.role} ${JSON.stringify(target.label)}`);
28
+ }
29
+ }
30
+ if (request.url)
31
+ out(c.dim(` page: ${request.url}`));
32
+ out("");
33
+ const answer = await waitForHuman("Take over the browser, finish this step, then hand control back.");
34
+ return answer === "cancel" ? "cancelled" : "completed";
35
+ }
36
+ }
37
+ export const createCliApprovalBroker = (options = {}) => {
38
+ let broker;
39
+ const interactive = options.interactive ?? isInteractive();
40
+ broker = new ApprovalBroker({
41
+ ...(options.autoApprove && options.autoApprove.length > 0 ? { autoApprove: options.autoApprove } : {}),
42
+ ...(options.autoDeny && options.autoDeny.length > 0 ? { autoDeny: options.autoDeny } : {}),
43
+ onRequest: (request) => {
44
+ out("");
45
+ out(c.yellow(c.bold("approval required")));
46
+ out(` ${request.summary}`);
47
+ out(c.dim(` risk: ${request.risk} page: ${request.url}`));
48
+ out("");
49
+ if (!interactive) {
50
+ broker.resolve(request.id, "denied");
51
+ return;
52
+ }
53
+ void confirm(`Approve this ${request.risk} action?`, false).then((approved) => {
54
+ broker.resolve(request.id, approved ? "approved" : "denied");
55
+ });
56
+ },
57
+ });
58
+ return broker;
59
+ };
60
+ //# sourceMappingURL=human-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-host.js","sourceRoot":"","sources":["../src/human-host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { run as runCli } from "./main.ts";
2
+ export * from "./args.ts";
3
+ export * from "./ui.ts";
4
+ export * from "./human-host.ts";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC;AAC1C,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { run as runCli } from "./main.js";
2
+ export * from "./args.js";
3
+ export * from "./ui.js";
4
+ export * from "./human-host.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,MAAM,WAAW,CAAC;AAC1C,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * `mlola browser <command>` entry point.
3
+ */
4
+ export declare const run: (argv: string[]) => Promise<number>;
5
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiDH,eAAO,MAAM,GAAG,GAAU,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,MAAM,CAoDxD,CAAC"}
package/dist/main.js ADDED
@@ -0,0 +1,133 @@
1
+ /**
2
+ * `mlola browser <command>` entry point.
3
+ */
4
+ import { readdirSync, existsSync, mkdirSync } from "node:fs";
5
+ import { join } from "node:path";
6
+ import { resolveHome } from "@mlola/browser-trace";
7
+ import { parseArgs } from "./args.js";
8
+ import { runCommand } from "./commands/run.js";
9
+ import { doctorCommand } from "./commands/doctor.js";
10
+ import { sessionsCommand, traceCommand } from "./commands/inspect.js";
11
+ import { evalCommand } from "./commands/eval.js";
12
+ import { daemonCommand } from "./commands/daemon.js";
13
+ import { bullet, c, heading, kv, out, printErr } from "./ui.js";
14
+ const VERSION = "0.1.0";
15
+ const HELP = `
16
+ mlola browser — reliable browser runtime
17
+
18
+ usage
19
+ mlola browser run [--goal "<goal>" | <task.json>] [options]
20
+ mlola browser doctor [--json]
21
+ mlola browser sessions [list | show <runId>]
22
+ mlola browser trace [show <runId> | summary <runId>] [--type EVENT] [--limit N]
23
+ mlola browser tabs [list]
24
+ mlola browser profiles
25
+ mlola browser eval [--suite core|matrix|security|regression|stress|all] [--provider scripted|keyword|typesafe]
26
+ mlola browser daemon <start|stop|status> [--port N]
27
+ mlola browser version | help
28
+
29
+ run options
30
+ --goal <text> goal to accomplish (or pass a task JSON file)
31
+ --task <file.json> task specification file
32
+ --url <url> start URL
33
+ --provider <name> typesafe (default fast path) | keyword (offline baseline)
34
+ --model <name> overrides the fast-path model
35
+ --browser <channel> chrome (default) | chromium | msedge
36
+ --headless run without a visible window
37
+ --profile <dir> persistent browser profile directory
38
+ --cdp <url> attach to an existing Chrome (http://127.0.0.1:9222)
39
+ --policy <file.json> policy configuration
40
+ --stop-before <list> comma-separated action boundary patterns
41
+ --max-steps <n> step budget
42
+ --screenshot <mode> off | on-failure (default) | always
43
+ --yes auto-approve approval-required actions
44
+ --no-human disable human help (unattended)
45
+ --json machine-readable result
46
+ --quiet only print the final summary
47
+ `;
48
+ export const run = async (argv) => {
49
+ let args = argv;
50
+ if (args[0] === "browser")
51
+ args = args.slice(1);
52
+ if (args[0] === "help" || args[0] === undefined || args[0] === "--help" || args[0] === "-h") {
53
+ out(HELP);
54
+ return 0;
55
+ }
56
+ if (args[0] === "version" || args[0] === "--version" || args[0] === "-v") {
57
+ out(`mlola browser ${VERSION}`);
58
+ return 0;
59
+ }
60
+ const parsed = parseArgs(args);
61
+ const command = parsed.positional[0];
62
+ const rest = {
63
+ command: [command ?? ""],
64
+ flags: parsed.flags,
65
+ positional: parsed.positional.slice(1),
66
+ };
67
+ try {
68
+ switch (command) {
69
+ case "run":
70
+ return await runCommand(rest);
71
+ case "doctor":
72
+ return await doctorCommand(rest);
73
+ case "sessions":
74
+ return await sessionsCommand(rest);
75
+ case "trace":
76
+ return await traceCommand(rest);
77
+ case "inspect": {
78
+ const runId = rest.positional[0];
79
+ return await sessionsCommand({ ...rest, positional: runId ? ["show", runId] : ["list"] });
80
+ }
81
+ case "eval":
82
+ return await evalCommand(rest);
83
+ case "daemon":
84
+ return await daemonCommand(rest);
85
+ case "tabs":
86
+ return await tabsCommand();
87
+ case "profiles":
88
+ return profilesCommand();
89
+ default:
90
+ printErr(`unknown command: ${command ?? "(none)"}`);
91
+ out(HELP);
92
+ return 2;
93
+ }
94
+ }
95
+ catch (error) {
96
+ printErr(c.red(error instanceof Error ? `${error.message}` : String(error)));
97
+ if (error instanceof Error && error.stack && process.env["MLOLA_DEBUG"])
98
+ printErr(c.dim(error.stack));
99
+ return 1;
100
+ }
101
+ };
102
+ const tabsCommand = async () => {
103
+ const { daemonStatus, readDaemonState } = await import("@mlola/browser-daemon");
104
+ const status = await daemonStatus();
105
+ heading("tabs");
106
+ if (!status.running || !readDaemonState()) {
107
+ bullet("no daemon is running — start it with: mlola browser daemon start");
108
+ bullet(c.dim("in-process runs own their tabs for the duration of the run and clean them up after"));
109
+ out("");
110
+ return 1;
111
+ }
112
+ bullet(c.dim("live tab inspection is served by the daemon API; use: mlola browser sessions list"));
113
+ out("");
114
+ return 0;
115
+ };
116
+ const profilesCommand = () => {
117
+ const dir = join(resolveHome(), "profiles");
118
+ mkdirSync(dir, { recursive: true });
119
+ const profiles = existsSync(dir) ? readdirSync(dir, { withFileTypes: true }).filter((d) => d.isDirectory()) : [];
120
+ heading("browser profiles");
121
+ if (profiles.length === 0) {
122
+ bullet(c.dim(`(none) — managed profiles live in ${dir}`));
123
+ bullet(c.dim("create one with: mlola browser run --profile ./work-profile --goal \"...\""));
124
+ }
125
+ else {
126
+ for (const profile of profiles)
127
+ bullet(join(dir, profile.name));
128
+ }
129
+ out("");
130
+ void kv;
131
+ return 0;
132
+ };
133
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
package/dist/ui.d.ts ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Terminal UI helpers: colours, tables, prompts. Deliberately tiny and
3
+ * dependency-free, and respectful of NO_COLOR / non-TTY environments.
4
+ */
5
+ export declare const c: {
6
+ bold: (t: string) => string;
7
+ dim: (t: string) => string;
8
+ red: (t: string) => string;
9
+ green: (t: string) => string;
10
+ yellow: (t: string) => string;
11
+ blue: (t: string) => string;
12
+ magenta: (t: string) => string;
13
+ cyan: (t: string) => string;
14
+ };
15
+ export declare const out: (text?: string) => void;
16
+ export declare const printErr: (text: string) => void;
17
+ export declare const heading: (text: string) => void;
18
+ export declare const kv: (key: string, value: string) => void;
19
+ export declare const bullet: (text: string, marker?: string) => void;
20
+ export declare const table: (rows: string[][], headers?: string[]) => void;
21
+ export declare const isInteractive: () => boolean;
22
+ export declare const ask: (question: string) => Promise<string>;
23
+ export declare const confirm: (question: string, def?: boolean) => Promise<boolean>;
24
+ /** Waits for the person to press Enter (or type "cancel"). */
25
+ export declare const waitForHuman: (question: string) => Promise<"done" | "cancel">;
26
+ export declare const progress: (text: string) => void;
27
+ export declare const clearProgress: () => void;
28
+ export declare const formatDuration: (ms: number) => string;
29
+ export declare const formatAge: (timestamp: number) => string;
30
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../src/ui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,eAAO,MAAM,CAAC;cACF,MAAM;aACP,MAAM;aACN,MAAM;eACJ,MAAM;gBACL,MAAM;cACR,MAAM;iBACH,MAAM;cACT,MAAM;CACjB,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,aAAS,KAAG,IAE/B,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,IAEvC,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,KAAG,IAItC,CAAC;AAEF,eAAO,MAAM,EAAE,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAE/C,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,eAAY,KAAG,IAEnD,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,EAAE,EAAE,UAAU,MAAM,EAAE,KAAG,IAmB5D,CAAC;AAMF,eAAO,MAAM,aAAa,QAAO,OAAwE,CAAC;AAE1G,eAAO,MAAM,GAAG,GAAI,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CAWjD,CAAC;AAEL,eAAO,MAAM,OAAO,GAAU,UAAU,MAAM,EAAE,aAAW,KAAG,OAAO,CAAC,OAAO,CAK5E,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,YAAY,GAAU,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,QAAQ,CAI9E,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,IAGvC,CAAC;AAEF,eAAO,MAAM,aAAa,QAAO,IAEhC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,MACsB,CAAC;AAEnE,eAAO,MAAM,SAAS,GAAI,WAAW,MAAM,KAAG,MAM7C,CAAC"}