@mlola/browser-core 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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -0
  3. package/dist/action-space.d.ts +36 -0
  4. package/dist/action-space.d.ts.map +1 -0
  5. package/dist/action-space.js +264 -0
  6. package/dist/action-space.js.map +1 -0
  7. package/dist/budget.d.ts +32 -0
  8. package/dist/budget.d.ts.map +1 -0
  9. package/dist/budget.js +127 -0
  10. package/dist/budget.js.map +1 -0
  11. package/dist/decision-validation.d.ts +31 -0
  12. package/dist/decision-validation.d.ts.map +1 -0
  13. package/dist/decision-validation.js +114 -0
  14. package/dist/decision-validation.js.map +1 -0
  15. package/dist/executor.d.ts +37 -0
  16. package/dist/executor.d.ts.map +1 -0
  17. package/dist/executor.js +209 -0
  18. package/dist/executor.js.map +1 -0
  19. package/dist/fallback.d.ts +19 -0
  20. package/dist/fallback.d.ts.map +1 -0
  21. package/dist/fallback.js +36 -0
  22. package/dist/fallback.js.map +1 -0
  23. package/dist/index.d.ts +10 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +10 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/orchestrator.d.ts +50 -0
  28. package/dist/orchestrator.d.ts.map +1 -0
  29. package/dist/orchestrator.js +1168 -0
  30. package/dist/orchestrator.js.map +1 -0
  31. package/dist/state.d.ts +12 -0
  32. package/dist/state.d.ts.map +1 -0
  33. package/dist/state.js +60 -0
  34. package/dist/state.js.map +1 -0
  35. package/dist/text.d.ts +34 -0
  36. package/dist/text.d.ts.map +1 -0
  37. package/dist/text.js +137 -0
  38. package/dist/text.js.map +1 -0
  39. package/dist/verifier.d.ts +41 -0
  40. package/dist/verifier.d.ts.map +1 -0
  41. package/dist/verifier.js +237 -0
  42. package/dist/verifier.js.map +1 -0
  43. package/package.json +58 -0
@@ -0,0 +1,237 @@
1
+ /**
2
+ * Verification (PRD §27, §51).
3
+ *
4
+ * Step verification compares the action's intent against the observation before
5
+ * and after execution. Completion verification is the independent oracle for
6
+ * `DONE`: runtime events, URL state, DOM evidence, artifacts — never the
7
+ * model's own claim.
8
+ */
9
+ import { verificationFromCriteria } from "@mlola/browser-takeover";
10
+ const ev = (kind, ok, detail) => ({
11
+ kind,
12
+ ok,
13
+ detail,
14
+ at: Date.now(),
15
+ });
16
+ const nodeById = (snapshot, nodeId) => snapshot.nodes.find((n) => n.nodeId === nodeId);
17
+ const norm = (s) => s.replace(/\s+/g, " ").trim();
18
+ export const verifyStep = (input) => {
19
+ const { action, before, after, outcome } = input;
20
+ const evidence = [];
21
+ const navigated = before.pageToken !== after.pageToken || before.url !== after.url;
22
+ const mutated = before.fingerprint !== after.fingerprint;
23
+ const dialogClosed = before.blockingUi !== undefined && after.blockingUi === undefined;
24
+ const dialogOpened = after.blockingUi !== undefined && before.blockingUi === undefined;
25
+ switch (action.op) {
26
+ case "CLICK": {
27
+ if (navigated) {
28
+ evidence.push(ev("url_state", true, `navigated to ${after.url}`));
29
+ return { status: "verified", evidence };
30
+ }
31
+ if (outcome.effect === "download_started" || outcome.downloadedFile) {
32
+ evidence.push(ev("runtime_event", true, "download started"));
33
+ return { status: "verified", evidence };
34
+ }
35
+ if (outcome.effect === "new_tab" || outcome.newTabId !== undefined) {
36
+ evidence.push(ev("runtime_event", true, `opened tab ${outcome.newTabId ?? "(unknown)"}`));
37
+ return { status: "verified", evidence };
38
+ }
39
+ if (dialogOpened) {
40
+ evidence.push(ev("dom", true, `dialog opened: ${after.blockingUi?.kind ?? "unknown"}`));
41
+ return { status: "verified", evidence };
42
+ }
43
+ if (mutated) {
44
+ evidence.push(ev("dom", true, "page structure changed after the click"));
45
+ return { status: "verified", evidence };
46
+ }
47
+ evidence.push(ev("dom", false, "no observable change after the click"));
48
+ return { status: "unverified", evidence, noEffect: true };
49
+ }
50
+ case "TYPE_TEXT": {
51
+ if (navigated) {
52
+ evidence.push(ev("url_state", true, `typing triggered navigation to ${after.url}`));
53
+ return { status: "verified", evidence };
54
+ }
55
+ const node = nodeById(after, action.ref.nodeId);
56
+ if (!node) {
57
+ evidence.push(ev("dom", false, "field disappeared after typing"));
58
+ return { status: "unverified", evidence, noEffect: !mutated };
59
+ }
60
+ const current = node.value ?? "";
61
+ if (norm(current) === norm(action.text)) {
62
+ evidence.push(ev("dom", true, `field value matches the typed text`));
63
+ return { status: "verified", evidence };
64
+ }
65
+ if (current.length === 0) {
66
+ evidence.push(ev("dom", false, "field is empty after typing"));
67
+ return { status: "unverified", evidence, noEffect: true };
68
+ }
69
+ evidence.push(ev("dom", false, `field value does not match the typed text`));
70
+ return { status: "refuted", evidence };
71
+ }
72
+ case "SELECT": {
73
+ const node = nodeById(after, action.ref.nodeId);
74
+ if (!node) {
75
+ evidence.push(ev("dom", false, "select disappeared after selection"));
76
+ return { status: "unverified", evidence, noEffect: !mutated };
77
+ }
78
+ const selected = node.options?.find((o) => o.selected);
79
+ if (selected && norm(selected.value) === norm(action.option.value)) {
80
+ evidence.push(ev("dom", true, `selected option "${selected.label}"`));
81
+ return { status: "verified", evidence };
82
+ }
83
+ if (!selected) {
84
+ evidence.push(ev("dom", false, "no option is selected"));
85
+ return { status: "unverified", evidence, noEffect: true };
86
+ }
87
+ evidence.push(ev("dom", false, `selected "${selected.label}" instead`));
88
+ return { status: "refuted", evidence };
89
+ }
90
+ case "SCROLL_UP":
91
+ case "SCROLL_DOWN": {
92
+ const moved = Math.abs(after.viewport.scrollY - before.viewport.scrollY) > 4;
93
+ evidence.push(ev("dom", moved, moved ? `scrolled to y=${Math.round(after.viewport.scrollY)}` : "scroll position did not change"));
94
+ return { status: moved ? "verified" : "unverified", evidence, ...(moved ? {} : { noEffect: true }) };
95
+ }
96
+ case "BACK":
97
+ case "FORWARD": {
98
+ evidence.push(ev("url_state", navigated, navigated ? `now at ${after.url}` : "history navigation had no effect"));
99
+ return { status: navigated ? "verified" : "unverified", evidence, ...(navigated ? {} : { noEffect: true }) };
100
+ }
101
+ case "OPEN_TAB": {
102
+ const opened = after.tabs.length > before.tabs.length || outcome.newTabId !== undefined;
103
+ evidence.push(ev("runtime_event", opened, opened ? `tabs: ${after.tabs.length}` : "no new tab detected"));
104
+ return { status: opened ? "verified" : "unverified", evidence, ...(opened ? {} : { noEffect: true }) };
105
+ }
106
+ case "SWITCH_TAB": {
107
+ const ok = after.activeTabId === action.tabId;
108
+ evidence.push(ev("runtime_event", ok, ok ? `active tab is ${action.tabId}` : `active tab is ${after.activeTabId}`));
109
+ return { status: ok ? "verified" : "unverified", evidence };
110
+ }
111
+ case "CLOSE_TAB": {
112
+ const gone = !after.tabs.some((t) => t.id === action.tabId);
113
+ evidence.push(ev("runtime_event", gone, gone ? `tab ${action.tabId} closed` : `tab ${action.tabId} is still open`));
114
+ return { status: gone ? "verified" : "unverified", evidence };
115
+ }
116
+ case "DOWNLOAD": {
117
+ if (input.artifact?.verified) {
118
+ evidence.push(ev("artifact", true, `artifact ${input.artifact.id} ${input.artifact.name} verified (${input.artifact.mimeType})`));
119
+ return { status: "verified", evidence };
120
+ }
121
+ if (outcome.downloadedFile) {
122
+ evidence.push(ev("artifact", false, outcome.downloadedFile.failure ?? "file captured but not yet verified"));
123
+ return { status: "unverified", evidence };
124
+ }
125
+ evidence.push(ev("artifact", false, "no downloaded file captured"));
126
+ return { status: "unverified", evidence, noEffect: true };
127
+ }
128
+ case "UPLOAD": {
129
+ // Strongest local evidence: the file input now holds the file.
130
+ const node = nodeById(after, action.ref.nodeId);
131
+ const artifact = input.artifacts.find((a) => a.id === action.artifactId);
132
+ if (node?.value && artifact && node.value.toLowerCase().includes(artifact.name.toLowerCase())) {
133
+ evidence.push(ev("dom", true, `file input holds "${artifact.name}"`));
134
+ return { status: "verified", evidence };
135
+ }
136
+ if (input.uploadEvidence) {
137
+ evidence.push(ev("dom", true, input.uploadEvidence));
138
+ return { status: "verified", evidence };
139
+ }
140
+ if (outcome.effect === "upload_dispatched") {
141
+ evidence.push(ev("runtime_event", true, "file dispatched to the input"));
142
+ return { status: "unverified", evidence };
143
+ }
144
+ evidence.push(ev("runtime_event", false, "upload could not be confirmed"));
145
+ return { status: "unverified", evidence };
146
+ }
147
+ case "WAIT": {
148
+ evidence.push(ev("runtime_event", true, `waited ${action.ms}ms`));
149
+ return { status: "verified", evidence };
150
+ }
151
+ case "ACCEPT_DIALOG":
152
+ case "DISMISS_DIALOG": {
153
+ evidence.push(ev("dom", dialogClosed, dialogClosed ? "dialog resolved" : "dialog still present"));
154
+ return { status: dialogClosed ? "verified" : "unverified", evidence, ...(dialogClosed ? {} : { noEffect: true }) };
155
+ }
156
+ case "PRESS": {
157
+ if (navigated || mutated) {
158
+ evidence.push(ev("dom", true, `key ${action.key} had an effect`));
159
+ return { status: "verified", evidence };
160
+ }
161
+ evidence.push(ev("dom", false, `key ${action.key} had no observable effect`));
162
+ return { status: "unverified", evidence, noEffect: true };
163
+ }
164
+ default: {
165
+ evidence.push(ev("runtime_event", true, "no verification rule for this operation"));
166
+ return { status: "unverified", evidence };
167
+ }
168
+ }
169
+ };
170
+ /* ───────────────────────── Completion oracle (PRD §27.1) ──────────────────── */
171
+ const DOCUMENT_TYPE_HINTS = [
172
+ { type: "invoice", re: /\b(invoice|faktur|tagihan)\b/i },
173
+ { type: "receipt", re: /\b(receipt|kuitansi|struk|bukti\s+pembayaran)\b/i },
174
+ { type: "statement", re: /\b(statement|mutasi|rekening\s+koran)\b/i },
175
+ { type: "payslip", re: /\b(payslip|slip\s+gaji|payroll)\b/i },
176
+ { type: "tax", re: /\b(tax|pajak|npwp|spt)\b/i },
177
+ { type: "ticket", re: /\b(ticket|tiket|boarding\s+pass)\b/i },
178
+ { type: "contract", re: /\b(contract|kontrak|agreement|perjanjian)\b/i },
179
+ { type: "report", re: /\b(report|laporan)\b/i },
180
+ { type: "resume", re: /\b(resume|cv|curriculum\s+vitae)\b/i },
181
+ { type: "identity", re: /\b(id\s+card|ktp|passport|paspor)\b/i },
182
+ { type: "payment", re: /\b(payment|pembayaran)\b/i },
183
+ ];
184
+ /**
185
+ * Deterministic, conservative oracle inference from the goal text. Used only
186
+ * when the caller did not supply explicit success criteria.
187
+ */
188
+ export const inferDocumentTypeHint = (goal) => DOCUMENT_TYPE_HINTS.find((h) => h.re.test(goal))?.type;
189
+ export const inferCompletionCriteria = (goal) => {
190
+ const downloadIntent = /\b(download|unduh|save|export|fetch|get\s+the|ambil|tarik)\b/i.test(goal);
191
+ const uploadIntent = /\b(upload|unggah|kirim|submit|attach|lampirkan)\b/i.test(goal);
192
+ const openIntent = /\b(open|visit|go\s+to|buka|navigate)\b/i.test(goal);
193
+ const urlMatch = /(https?:\/\/[^\s"'<>]+)/.exec(goal);
194
+ if (downloadIntent) {
195
+ const hinted = DOCUMENT_TYPE_HINTS.find((h) => h.re.test(goal));
196
+ if (hinted)
197
+ return { criteria: { kind: "artifact", documentType: hinted.type } };
198
+ return { criteria: { kind: "download_completed" } };
199
+ }
200
+ if (openIntent && urlMatch?.[1]) {
201
+ try {
202
+ const url = new URL(urlMatch[1]);
203
+ return { criteria: { kind: "url_contains", value: url.pathname === "/" ? url.host : url.pathname } };
204
+ }
205
+ catch {
206
+ return undefined;
207
+ }
208
+ }
209
+ if (uploadIntent) {
210
+ // The strongest local evidence for a "stop before submission" style goal is
211
+ // the attachment appearing; without more information we do not invent one.
212
+ return undefined;
213
+ }
214
+ return undefined;
215
+ };
216
+ export const verifyCompletion = (task, ctx) => {
217
+ const spec = task.successCriteria ?? inferCompletionCriteria(task.goal);
218
+ if (!spec) {
219
+ return {
220
+ status: "unverified",
221
+ evidence: [
222
+ ev("task_oracle", false, "no deterministic completion oracle is available for this goal; " +
223
+ "supply successCriteria for a verified result"),
224
+ ],
225
+ notes: "unverified completion claim (no oracle)",
226
+ };
227
+ }
228
+ const criteriaCtx = {
229
+ ...(ctx.snapshot ? { snapshot: ctx.snapshot } : {}),
230
+ artifacts: ctx.artifacts,
231
+ ...(ctx.events ? { events: ctx.events } : {}),
232
+ ...(ctx.manualConfirmed !== undefined ? { manualConfirmed: ctx.manualConfirmed } : {}),
233
+ };
234
+ const result = verificationFromCriteria(spec.criteria, criteriaCtx);
235
+ return result;
236
+ };
237
+ //# sourceMappingURL=verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifier.js","sourceRoot":"","sources":["../src/verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAaH,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAqBnE,MAAM,EAAE,GAAG,CAAC,IAAsB,EAAE,EAAW,EAAE,MAAc,EAAY,EAAE,CAAC,CAAC;IAC7E,IAAI;IACJ,EAAE;IACF,MAAM;IACN,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;CACf,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,CAAC,QAAyB,EAAE,MAAc,EAAE,EAAE,CAC7D,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AAElD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAElE,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,KAA4B,EAAoB,EAAE;IAC3E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACjD,MAAM,QAAQ,GAAe,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;IACnF,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CAAC;IACzD,MAAM,YAAY,GAAG,MAAM,CAAC,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC;IACvF,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,KAAK,SAAS,CAAC;IAEvF,QAAQ,MAAM,CAAC,EAAE,EAAE,CAAC;QAClB,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,SAAS,EAAE,CAAC;gBACd,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,gBAAgB,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBAClE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,kBAAkB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBACpE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC,CAAC;gBAC7D,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,EAAE,cAAc,OAAO,CAAC,QAAQ,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC;gBAC1F,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YACD,IAAI,YAAY,EAAE,CAAC;gBACjB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,kBAAkB,KAAK,CAAC,UAAU,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;gBACxF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,wCAAwC,CAAC,CAAC,CAAC;gBACzE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,sCAAsC,CAAC,CAAC,CAAC;YACxE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,IAAI,SAAS,EAAE,CAAC;gBACd,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,kCAAkC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACpF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YACD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,gCAAgC,CAAC,CAAC,CAAC;gBAClE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;YAChE,CAAC;YACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,oCAAoC,CAAC,CAAC,CAAC;gBACrE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC;gBAC/D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC5D,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,2CAA2C,CAAC,CAAC,CAAC;YAC7E,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QACzC,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,oCAAoC,CAAC,CAAC,CAAC;gBACtE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;YAChE,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YACvD,IAAI,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,oBAAoB,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACtE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC;gBACzD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC5D,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,aAAa,QAAQ,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC;YACxE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QACzC,CAAC;QAED,KAAK,WAAW,CAAC;QACjB,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7E,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAClI,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACvG,CAAC;QAED,KAAK,MAAM,CAAC;QACZ,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,UAAU,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC;YAClH,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/G,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC;YACxF,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC1G,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACzG,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,KAAK,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACpH,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC;QAC9D,CAAC;QAED,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5D,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACpH,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,CAAC;QAChE,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,IAAI,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CACX,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,YAAY,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,cAAc,KAAK,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CACnH,CAAC;gBACF,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YACD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CACX,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,OAAO,IAAI,oCAAoC,CAAC,CAC9F,CAAC;gBACF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;YAC5C,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,6BAA6B,CAAC,CAAC,CAAC;YACpE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,+DAA+D;YAC/D,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,UAAU,CAAC,CAAC;YACzE,IAAI,IAAI,EAAE,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC9F,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,qBAAqB,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;gBACtE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YACD,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;gBACrD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,mBAAmB,EAAE,CAAC;gBAC3C,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,EAAE,8BAA8B,CAAC,CAAC,CAAC;gBACzE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;YAC5C,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,+BAA+B,CAAC,CAAC,CAAC;YAC3E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;QAC5C,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,EAAE,UAAU,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAClE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAC1C,CAAC;QAED,KAAK,eAAe,CAAC;QACrB,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,QAAQ,CAAC,IAAI,CACX,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CACnF,CAAC;YACF,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACrH,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC;gBAClE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;YAC1C,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,MAAM,CAAC,GAAG,2BAA2B,CAAC,CAAC,CAAC;YAC9E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAC5D,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;YACR,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,EAAE,yCAAyC,CAAC,CAAC,CAAC;YACpF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,kFAAkF;AAElF,MAAM,mBAAmB,GAAgD;IACvE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,+BAA+B,EAAE;IACxD,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,kDAAkD,EAAE;IAC3E,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,0CAA0C,EAAE;IACrE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,oCAAoC,EAAE;IAC7D,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,2BAA2B,EAAE;IAChD,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,qCAAqC,EAAE;IAC7D,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,8CAA8C,EAAE;IACxE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,uBAAuB,EAAE;IAC/C,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,qCAAqC,EAAE;IAC7D,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,sCAAsC,EAAE;IAChE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,2BAA2B,EAAE;CACrD,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAsB,EAAE,CACxE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;AAEzD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAY,EAA8B,EAAE;IAClF,MAAM,cAAc,GAAG,+DAA+D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClG,MAAM,YAAY,GAAG,oDAAoD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrF,MAAM,UAAU,GAAG,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAExE,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtD,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,IAAI,MAAM;YAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACjF,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,OAAO,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;QACvG,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,4EAA4E;QAC5E,2EAA2E;QAC3E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAc,EAAE,GAAsB,EAAsB,EAAE;IAC7F,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,MAAM,EAAE,YAAY;YACpB,QAAQ,EAAE;gBACR,EAAE,CACA,aAAa,EACb,KAAK,EACL,iEAAiE;oBAC/D,8CAA8C,CACjD;aACF;YACD,KAAK,EAAE,yCAAyC;SACjD,CAAC;IACJ,CAAC;IACD,MAAM,WAAW,GAAoB;QACnC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvF,CAAC;IACF,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@mlola/browser-core",
3
+ "version": "0.1.0",
4
+ "description": "Task orchestrator, agent loop, router, planner, memory and verification.",
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-backend": "0.1.0",
52
+ "@mlola/browser-policy": "0.1.0",
53
+ "@mlola/browser-recovery": "0.1.0",
54
+ "@mlola/browser-artifacts": "0.1.0",
55
+ "@mlola/browser-takeover": "0.1.0",
56
+ "@mlola/browser-trace": "0.1.0"
57
+ }
58
+ }