@tangle-network/browser-agent-driver 0.24.2 → 0.26.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 (66) hide show
  1. package/dist/brain/index.d.ts.map +1 -1
  2. package/dist/brain/index.js +1 -0
  3. package/dist/brain/index.js.map +1 -1
  4. package/dist/cli-preview.d.ts +59 -0
  5. package/dist/cli-preview.d.ts.map +1 -0
  6. package/dist/cli-preview.js +144 -0
  7. package/dist/cli-preview.js.map +1 -0
  8. package/dist/cli-share.d.ts +77 -0
  9. package/dist/cli-share.d.ts.map +1 -0
  10. package/dist/cli-share.js +141 -0
  11. package/dist/cli-share.js.map +1 -0
  12. package/dist/cli-ui.d.ts.map +1 -1
  13. package/dist/cli-ui.js +8 -4
  14. package/dist/cli-ui.js.map +1 -1
  15. package/dist/cli.js +153 -5
  16. package/dist/cli.js.map +1 -1
  17. package/dist/drivers/cursor-overlay.d.ts +18 -10
  18. package/dist/drivers/cursor-overlay.d.ts.map +1 -1
  19. package/dist/drivers/cursor-overlay.js +221 -30
  20. package/dist/drivers/cursor-overlay.js.map +1 -1
  21. package/dist/drivers/overlay-label.d.ts +33 -0
  22. package/dist/drivers/overlay-label.d.ts.map +1 -0
  23. package/dist/drivers/overlay-label.js +92 -0
  24. package/dist/drivers/overlay-label.js.map +1 -0
  25. package/dist/drivers/playwright.d.ts +22 -0
  26. package/dist/drivers/playwright.d.ts.map +1 -1
  27. package/dist/drivers/playwright.js +87 -9
  28. package/dist/drivers/playwright.js.map +1 -1
  29. package/dist/drivers/snapshot.d.ts +12 -0
  30. package/dist/drivers/snapshot.d.ts.map +1 -1
  31. package/dist/drivers/snapshot.js +17 -0
  32. package/dist/drivers/snapshot.js.map +1 -1
  33. package/dist/drivers/types.d.ts +8 -0
  34. package/dist/drivers/types.d.ts.map +1 -1
  35. package/dist/runner/fan-out.d.ts +91 -0
  36. package/dist/runner/fan-out.d.ts.map +1 -0
  37. package/dist/runner/fan-out.js +183 -0
  38. package/dist/runner/fan-out.js.map +1 -0
  39. package/dist/runner/interrupt-controller.d.ts +67 -0
  40. package/dist/runner/interrupt-controller.d.ts.map +1 -0
  41. package/dist/runner/interrupt-controller.js +142 -0
  42. package/dist/runner/interrupt-controller.js.map +1 -0
  43. package/dist/runner/overlay-narration.d.ts +83 -0
  44. package/dist/runner/overlay-narration.d.ts.map +1 -0
  45. package/dist/runner/overlay-narration.js +172 -0
  46. package/dist/runner/overlay-narration.js.map +1 -0
  47. package/dist/runner/runner.d.ts +9 -0
  48. package/dist/runner/runner.d.ts.map +1 -1
  49. package/dist/runner/runner.js +93 -0
  50. package/dist/runner/runner.js.map +1 -1
  51. package/dist/runner/stream-webhook.d.ts +70 -0
  52. package/dist/runner/stream-webhook.d.ts.map +1 -0
  53. package/dist/runner/stream-webhook.js +132 -0
  54. package/dist/runner/stream-webhook.js.map +1 -0
  55. package/dist/skills/macro-loader.d.ts +1 -1
  56. package/dist/skills/macro-loader.d.ts.map +1 -1
  57. package/dist/supervisor/policy.js +11 -0
  58. package/dist/supervisor/policy.js.map +1 -1
  59. package/dist/test-runner.d.ts +7 -0
  60. package/dist/test-runner.d.ts.map +1 -1
  61. package/dist/test-runner.js +3 -0
  62. package/dist/test-runner.js.map +1 -1
  63. package/dist/types.d.ts +36 -1
  64. package/dist/types.d.ts.map +1 -1
  65. package/dist/viewer/viewer.html +264 -16
  66. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-narration.js","sourceRoot":"","sources":["../../src/runner/overlay-narration.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,14 @@ export interface BrowserAgentOptions {
45
45
  config?: AgentConfig;
46
46
  /** Called after each turn */
47
47
  onTurn?: (turn: Turn) => void;
48
+ /**
49
+ * Gen 32 — called at the top of every turn BEFORE observe().
50
+ * Used by the interrupt controller to block the loop while the user
51
+ * has the run paused (`p` keypress in an interactive attach). The
52
+ * promise resolves on resume or rejects with an abort signal to
53
+ * bail out cleanly.
54
+ */
55
+ beforeTurn?: (turn: number) => Promise<void>;
48
56
  /** Called when a first-time phase timing is observed */
49
57
  onPhaseTiming?: (phase: 'navigate' | 'observe' | 'decide' | 'execute', durationMs: number) => void;
50
58
  /** Reference trajectory to inject into brain context */
@@ -120,6 +128,7 @@ export declare class BrowserAgent {
120
128
  private brain;
121
129
  private config;
122
130
  private onTurn?;
131
+ private beforeTurn?;
123
132
  private onPhaseTiming?;
124
133
  private referenceTrajectory?;
125
134
  private projectStore?;
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/runner/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAkC,MAAM,aAAa,CAAC;AAKvH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAuB/D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAa,MAAM,aAAa,CAAC;AAGtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAiDzF;AA4CD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,wDAAwD;IACxD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACnG,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sEAAsE;IACtE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,sDAAsD;IACtD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;;;;OAOG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAgB3D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CA2BtF;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,MAAM,CAAC,CAAuB;IACtC,OAAO,CAAC,aAAa,CAAC,CAAqF;IAC3G,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,SAAS,CAAC,CAAe;IACjC,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,GAAG,CAAe;IAC1B,OAAO,CAAC,YAAY,CAAM;IAK1B,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,UAAU,CAAC,CAAqB;IACxC,0EAA0E;IAC1E,OAAO,CAAC,gBAAgB,CAAC,CAAS;gBAEtB,OAAO,EAAE,mBAAmB;IA6BlC,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;IAm6DnD,OAAO,CAAC,qBAAqB;IA2B7B,qEAAqE;IACrE,OAAO,CAAC,UAAU;IAkClB;;;;;;;;;;;;OAYG;IACH;;;;;;;;;;;;;;;;;;;OAmBG;YACW,WAAW;YAofX,YAAY;YAkCZ,+BAA+B;YAgE/B,mCAAmC;YAwCnC,6BAA6B;YA4C7B,qCAAqC;YAqBrC,4BAA4B;YA4B5B,4BAA4B;YAkC5B,wBAAwB;CASvC;AAED,2BAA2B;AAC3B,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,GAC5C,OAAO,CAAC,WAAW,CAAC,CAGtB"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/runner/runner.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@ import { buildOverrideProducers, buildScoutLinkRecommendationText, buildBranchLi
34
34
  import { RunRegistry } from '../memory/run-registry.js';
35
35
  import { ensureBus } from './events.js';
36
36
  import { DecisionCache } from './decision-cache.js';
37
+ import { VerdictTracker, extractCurrentMarker, buildProgressLabel, } from './overlay-narration.js';
37
38
  import { matchDeterministicPattern } from './deterministic-patterns.js';
38
39
  /**
39
40
  * Gen 6.1: detect that the agent is filling a multi-field form one input at
@@ -245,6 +246,7 @@ export class BrowserAgent {
245
246
  brain;
246
247
  config;
247
248
  onTurn;
249
+ beforeTurn;
248
250
  onPhaseTiming;
249
251
  referenceTrajectory;
250
252
  projectStore;
@@ -267,6 +269,7 @@ export class BrowserAgent {
267
269
  this.config = options.config || {};
268
270
  this.brain = new Brain(this.config);
269
271
  this.onTurn = options.onTurn;
272
+ this.beforeTurn = options.beforeTurn;
270
273
  this.onPhaseTiming = options.onPhaseTiming;
271
274
  this.referenceTrajectory = options.referenceTrajectory;
272
275
  this.bus = ensureBus(options.eventBus);
@@ -650,7 +653,26 @@ export class BrowserAgent {
650
653
  }
651
654
  }
652
655
  }
656
+ // Gen 32 — overlay narration tracker. Per-session; accumulates verdict
657
+ // markers so a ledger the agent keeps re-emitting doesn't spam badges.
658
+ const verdictTracker = new VerdictTracker();
653
659
  for (let i = 1 + plannerStartTurn; i <= maxTurns; i++) {
660
+ // Gen 32 — honor user-driven pause from the interrupt controller.
661
+ // Blocks until `r` is pressed (resume) or `q` is pressed (abort).
662
+ // A rejected beforeTurn is treated as an abort.
663
+ if (this.beforeTurn) {
664
+ try {
665
+ await this.beforeTurn(i);
666
+ }
667
+ catch (err) {
668
+ return buildResult({
669
+ success: false,
670
+ reason: err instanceof Error ? err.message : 'aborted',
671
+ turns,
672
+ totalMs: Date.now() - startTime,
673
+ });
674
+ }
675
+ }
654
676
  if (scenario.signal?.aborted) {
655
677
  return buildResult({
656
678
  success: false,
@@ -1255,6 +1277,30 @@ export class BrowserAgent {
1255
1277
  durationMs: decideDurationMs,
1256
1278
  });
1257
1279
  }
1280
+ // -- 4a. Gen 32 — narrate to the cursor overlay. Fire-and-forget.
1281
+ // Four signals pushed to the page-context overlay so a viewer of
1282
+ // the recorded video can READ the agent's work, not just watch it:
1283
+ // 1. Reasoning panel (top-right) — the agent's own text
1284
+ // 2. Progress bar + chip (top) — turn N with optional ledger marker
1285
+ // 3. Verdict badges (bottom-left) — POSITIVE/CLEARED/REVIEW events
1286
+ // All methods are no-ops when the overlay is disabled, and all page
1287
+ // calls are wrapped by the driver so a navigation race here can
1288
+ // never bubble up and break the run.
1289
+ try {
1290
+ if (this.driver.setOverlayReasoning) {
1291
+ void this.driver.setOverlayReasoning(reasoning ?? '');
1292
+ }
1293
+ if (this.driver.setOverlayProgress) {
1294
+ const marker = extractCurrentMarker(reasoning);
1295
+ void this.driver.setOverlayProgress(i, maxTurns, buildProgressLabel(i, maxTurns, marker));
1296
+ }
1297
+ if (this.driver.pushOverlayBadge) {
1298
+ const fresh = verdictTracker.accept(reasoning);
1299
+ for (const v of fresh)
1300
+ void this.driver.pushOverlayBadge(v.kind, v.text);
1301
+ }
1302
+ }
1303
+ catch { /* overlay narration is cosmetic; never let it break a run */ }
1258
1304
  // -- 4b. Override pipeline — scored selection of post-decision overrides --
1259
1305
  const overrideCtx = {
1260
1306
  state,
@@ -1444,6 +1490,53 @@ export class BrowserAgent {
1444
1490
  this.onTurn?.(turn);
1445
1491
  continue;
1446
1492
  }
1493
+ // -- Gen 33: mid-run parallel fan-out. Agent picked N candidates
1494
+ // from the current page and wants to explore each in its own tab.
1495
+ // We spawn sub-agents in the same BrowserContext, collect their
1496
+ // verdicts, and inject the merged result as feedback for the next
1497
+ // turn. Parent page state is untouched.
1498
+ if (action.action === 'fanOut') {
1499
+ const page = this.driver.getPage?.();
1500
+ const context = page?.context();
1501
+ if (!context) {
1502
+ this.brain.injectFeedback('FAN-OUT ERROR: driver does not expose a BrowserContext — fanOut only works with the Playwright driver.');
1503
+ turn.durationMs = Date.now() - turnStart;
1504
+ turns.push(turn);
1505
+ this.onTurn?.(turn);
1506
+ continue;
1507
+ }
1508
+ const { executeFanOut } = await import('./fan-out.js');
1509
+ const topDriverOptions = this.driver.getDriverOptions?.();
1510
+ const fanOutResult = await executeFanOut(action, {
1511
+ context,
1512
+ config: this.config,
1513
+ currentUrl: state.url,
1514
+ ...(topDriverOptions
1515
+ ? { driverOptions: (() => { const { showCursor: _sc, ...rest } = topDriverOptions; return rest; })() }
1516
+ : {}),
1517
+ ...(this.projectStore ? { projectStore: this.projectStore } : {}),
1518
+ ...(this.macroPromptBlock ? { macroPromptBlock: this.macroPromptBlock } : {}),
1519
+ onBranchStart: (_idx, label) => {
1520
+ // Fire and forget — this is purely cosmetic narration on
1521
+ // the overlay. Errors are swallowed by the driver.
1522
+ if (this.driver.setOverlayReasoning) {
1523
+ void this.driver.setOverlayReasoning(`Fan-out: launching ${label}…`);
1524
+ }
1525
+ },
1526
+ });
1527
+ // Nice-to-have: surface fan-out completion as a badge moment so
1528
+ // the viewer sees the parallel exploration punctuated clearly.
1529
+ if (this.driver.pushOverlayBadge) {
1530
+ const ok = fanOutResult.branches.filter((b) => b.success).length;
1531
+ const total = fanOutResult.branches.length;
1532
+ void this.driver.pushOverlayBadge(ok === total ? 'cleared' : ok === 0 ? 'review' : 'info', `Fan-out · ${ok}/${total} branches ok`);
1533
+ }
1534
+ this.brain.injectFeedback(fanOutResult.feedback);
1535
+ turn.durationMs = Date.now() - turnStart;
1536
+ turns.push(turn);
1537
+ this.onTurn?.(turn);
1538
+ continue;
1539
+ }
1447
1540
  // -- 6. Check for terminal actions --
1448
1541
  if (action.action === 'complete') {
1449
1542
  // Step 1: Goal verification — did the agent actually achieve the goal?