@petukhovart/agent-view 0.16.1 → 0.17.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 (81) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/README.md +5 -3
  3. package/dist/cdp/transport.d.ts +2 -0
  4. package/dist/cdp/transport.d.ts.map +1 -1
  5. package/dist/cdp/transport.js +168 -9
  6. package/dist/cdp/transport.js.map +1 -1
  7. package/dist/cdp/types.d.ts +44 -1
  8. package/dist/cdp/types.d.ts.map +1 -1
  9. package/dist/cdp/types.js.map +1 -1
  10. package/dist/cli/client.d.ts.map +1 -1
  11. package/dist/cli/client.js +1 -3
  12. package/dist/cli/client.js.map +1 -1
  13. package/dist/cli/commands/act.d.ts +3 -0
  14. package/dist/cli/commands/act.d.ts.map +1 -0
  15. package/dist/cli/commands/act.js +19 -0
  16. package/dist/cli/commands/act.js.map +1 -0
  17. package/dist/cli/commands/click.d.ts +2 -0
  18. package/dist/cli/commands/click.d.ts.map +1 -1
  19. package/dist/cli/commands/click.js +9 -4
  20. package/dist/cli/commands/click.js.map +1 -1
  21. package/dist/cli/commands/dom.d.ts.map +1 -1
  22. package/dist/cli/commands/dom.js +1 -0
  23. package/dist/cli/commands/dom.js.map +1 -1
  24. package/dist/cli/commands/fill.d.ts +2 -0
  25. package/dist/cli/commands/fill.d.ts.map +1 -1
  26. package/dist/cli/commands/fill.js +11 -4
  27. package/dist/cli/commands/fill.js.map +1 -1
  28. package/dist/cli/commands/screenshot.d.ts +2 -0
  29. package/dist/cli/commands/screenshot.d.ts.map +1 -1
  30. package/dist/cli/commands/screenshot.js +10 -1
  31. package/dist/cli/commands/screenshot.js.map +1 -1
  32. package/dist/cli/commands/wait.d.ts +3 -1
  33. package/dist/cli/commands/wait.d.ts.map +1 -1
  34. package/dist/cli/commands/wait.js +6 -2
  35. package/dist/cli/commands/wait.js.map +1 -1
  36. package/dist/cli/commands/watch.js +1 -1
  37. package/dist/cli/commands/watch.js.map +1 -1
  38. package/dist/cli/index.js +46 -4
  39. package/dist/cli/index.js.map +1 -1
  40. package/dist/config/manager.d.ts.map +1 -1
  41. package/dist/config/manager.js +4 -0
  42. package/dist/config/manager.js.map +1 -1
  43. package/dist/config/types.d.ts +5 -0
  44. package/dist/config/types.d.ts.map +1 -1
  45. package/dist/inspectors/controls/index.d.ts +39 -0
  46. package/dist/inspectors/controls/index.d.ts.map +1 -0
  47. package/dist/inspectors/controls/index.js +140 -0
  48. package/dist/inspectors/controls/index.js.map +1 -0
  49. package/dist/inspectors/dom/index.d.ts +2 -0
  50. package/dist/inspectors/dom/index.d.ts.map +1 -1
  51. package/dist/inspectors/dom/index.js +21 -14
  52. package/dist/inspectors/dom/index.js.map +1 -1
  53. package/dist/server/act-replay.d.ts +23 -0
  54. package/dist/server/act-replay.d.ts.map +1 -0
  55. package/dist/server/act-replay.js +143 -0
  56. package/dist/server/act-replay.js.map +1 -0
  57. package/dist/server/act-script.d.ts +46 -0
  58. package/dist/server/act-script.d.ts.map +1 -0
  59. package/dist/server/act-script.js +46 -0
  60. package/dist/server/act-script.js.map +1 -0
  61. package/dist/server/act-session.d.ts +23 -0
  62. package/dist/server/act-session.d.ts.map +1 -0
  63. package/dist/server/act-session.js +304 -0
  64. package/dist/server/act-session.js.map +1 -0
  65. package/dist/server/locator.d.ts +19 -0
  66. package/dist/server/locator.d.ts.map +1 -0
  67. package/dist/server/locator.js +33 -0
  68. package/dist/server/locator.js.map +1 -0
  69. package/dist/server/port.d.ts +7 -0
  70. package/dist/server/port.d.ts.map +1 -0
  71. package/dist/server/port.js +19 -0
  72. package/dist/server/port.js.map +1 -0
  73. package/dist/server/server.d.ts +1 -0
  74. package/dist/server/server.d.ts.map +1 -1
  75. package/dist/server/server.js +76 -18
  76. package/dist/server/server.js.map +1 -1
  77. package/dist/types.d.ts +2 -0
  78. package/dist/types.d.ts.map +1 -1
  79. package/package.json +1 -1
  80. package/skills/verify/SKILL.md +12 -20
  81. package/skills/verify/references/commands.md +118 -4
@@ -29,5 +29,10 @@ export type AgentViewConfig = {
29
29
  logFile?: string;
30
30
  /** Feed size cap in bytes. On overflow the feed rotates once to `<file>.prev`. Default 8 MB. */
31
31
  logMaxBytes?: number;
32
+ /**
33
+ * Attribute carrying the project's test ids, shown by `dom` and addressed by `--testid`.
34
+ * Missing: `data-testid`, `data-test-id`, `data-test`, `data-qa` and `data-cy` are all tried.
35
+ */
36
+ testIdAttribute?: string;
32
37
  };
33
38
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,WAAW,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,WAAW,CAAA;KACpB,CAAA;IACD;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,6EAA6E;IAC7E,cAAc,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC1C;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,kGAAkG;IAClG,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2HAA2H;IAC3H,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gGAAgG;IAChG,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAEjD,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,WAAW,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,WAAW,CAAA;KACpB,CAAA;IACD;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,6EAA6E;IAC7E,cAAc,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC1C;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,kGAAkG;IAClG,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,2HAA2H;IAC3H,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gGAAgG;IAChG,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA"}
@@ -0,0 +1,39 @@
1
+ import type { AXNode, LayoutSnapshot } from '../../cdp/types.js';
2
+ /** Rows text can be typed into. */
3
+ export declare const TEXT_ROLES: ReadonlySet<string>;
4
+ export declare const PASSWORD_MASK = "\u2022\u2022\u2022\u2022";
5
+ export type Control = {
6
+ backendDOMNodeId: number;
7
+ role: string;
8
+ name: string;
9
+ testid?: string;
10
+ value?: string;
11
+ states: string[];
12
+ isPassword: boolean;
13
+ };
14
+ /**
15
+ * Interactive AX nodes whose box is non-empty and intersects the viewport, in AX-tree order,
16
+ * then pointer-only `item` rows in layout order.
17
+ */
18
+ export declare function extractControls(ax: AXNode[], layout: LayoutSnapshot, testIdAttributes: readonly string[]): Control[];
19
+ export declare const describeControl: (c: Control) => string;
20
+ export declare function formatControlRow(c: Control, n: number): string;
21
+ type TableHeader = {
22
+ step: number;
23
+ maxSteps: number;
24
+ untilLabel: string;
25
+ };
26
+ export declare function formatControlTable(controls: Control[], header: TableHeader): string;
27
+ type RowResolution = {
28
+ control: Control;
29
+ } | {
30
+ gone: Control;
31
+ };
32
+ /**
33
+ * Stale guard: row n of the last printed table, located in a fresh snapshot.
34
+ * Same node still a visible control → it; else the unique control with the same
35
+ * fingerprint; else gone. Never a guess.
36
+ */
37
+ export declare function resolveRow(last: Control, current: Control[]): RowResolution;
38
+ export {};
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inspectors/controls/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAQ,MAAM,oBAAoB,CAAA;AAQtE,mCAAmC;AACnC,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,MAAM,CAA+D,CAAA;AAK1G,eAAO,MAAM,aAAa,6BAAS,CAAA;AAEnC,MAAM,MAAM,OAAO,GAAG;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,EAAE,CAsDpH;AAgDD,eAAO,MAAM,eAAe,GAAI,GAAG,OAAO,KAAG,MAAqD,CAAA;AAElG,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAA;AAEzE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAMnF;AAED,KAAK,aAAa,GACd;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAA;AAErB;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,aAAa,CAM3E"}
@@ -0,0 +1,140 @@
1
+ const INTERACTIVE_ROLES = new Set([
2
+ 'button', 'link', 'textbox', 'searchbox', 'combobox', 'checkbox', 'radio', 'switch', 'tab',
3
+ 'menuitem', 'menuitemcheckbox', 'menuitemradio', 'option', 'listbox', 'slider', 'spinbutton', 'treeitem',
4
+ ]);
5
+ /** Not interactive, but the decider must see why the form it just sent came back (a snackbar). */
6
+ const NOTICE_ROLES = new Set(['alert', 'status']);
7
+ /** Rows text can be typed into. */
8
+ export const TEXT_ROLES = new Set(['textbox', 'searchbox', 'combobox', 'spinbutton']);
9
+ const VALUE_ROLES = new Set([...TEXT_ROLES, 'slider']);
10
+ const STATE_PROPS = ['checked', 'expanded', 'selected', 'disabled'];
11
+ const MAX_ROWS = 150;
12
+ const NAME_SEARCH_DEPTH = 5;
13
+ export const PASSWORD_MASK = '••••';
14
+ /**
15
+ * Interactive AX nodes whose box is non-empty and intersects the viewport, in AX-tree order,
16
+ * then pointer-only `item` rows in layout order.
17
+ */
18
+ export function extractControls(ax, layout, testIdAttributes) {
19
+ const byId = new Map(ax.map(n => [n.nodeId, n]));
20
+ const childName = (node, depth) => {
21
+ if (depth <= 0)
22
+ return '';
23
+ for (const id of node.childIds ?? []) {
24
+ const child = byId.get(id);
25
+ if (!child)
26
+ continue;
27
+ const found = child.name?.value || childName(child, depth - 1);
28
+ if (found)
29
+ return found;
30
+ }
31
+ return '';
32
+ };
33
+ const controls = [];
34
+ for (const node of ax) {
35
+ const role = node.role?.value ?? '';
36
+ const id = node.backendDOMNodeId;
37
+ if (node.ignored || !(INTERACTIVE_ROLES.has(role) || NOTICE_ROLES.has(role)) || id === undefined)
38
+ continue;
39
+ const box = layout.nodes.get(id);
40
+ if (!box || !isOnScreen(box.rect, layout.viewport))
41
+ continue;
42
+ const name = node.name?.value || childName(node, NAME_SEARCH_DEPTH);
43
+ // Empty alerts are standing slots (Vuetify's per-field `v-messages`), not news.
44
+ if (NOTICE_ROLES.has(role) && !name)
45
+ continue;
46
+ const testAttr = testIdAttributes.find(a => box.attributes[a]);
47
+ const rawValue = node.value?.value;
48
+ controls.push({
49
+ backendDOMNodeId: id,
50
+ role,
51
+ name,
52
+ testid: testAttr ? box.attributes[testAttr] : undefined,
53
+ value: VALUE_ROLES.has(role) && (typeof rawValue === 'string' || typeof rawValue === 'number') && rawValue !== ''
54
+ ? String(rawValue)
55
+ : undefined,
56
+ states: STATE_PROPS.filter(p => isStateOn(node, p)),
57
+ isPassword: box.tag === 'input' && box.attributes['type']?.toLowerCase() === 'password',
58
+ });
59
+ }
60
+ // A field wrapper (Vuetify `v-field`) often repeats its input's role — one control,
61
+ // two rows. Names do not identify the pair: the wrapper's name turns into the typed
62
+ // value. The AX tree does not nest them (the input is listed apart), so the box does:
63
+ // the inner node carries the value, the wrapper around it goes. Fields only — a
64
+ // parent treeitem boxes its children and is still a control of its own.
65
+ const rectOf = (c) => layout.nodes.get(c.backendDOMNodeId).rect;
66
+ const isWrapper = (outer) => VALUE_ROLES.has(outer.role) && controls.some(inner => inner !== outer && inner.role === outer.role && isLarger(rectOf(outer), rectOf(inner)) && isInside(rectOf(inner), rectOf(outer)));
67
+ const axById = new Map(ax.map(n => [n.backendDOMNodeId, n]));
68
+ const nameOf = (id, attributes) => {
69
+ const node = axById.get(id);
70
+ return node?.name?.value || (node && childName(node, NAME_SEARCH_DEPTH)) || attributes['title'] || attributes['aria-label'] || '';
71
+ };
72
+ return [...controls.filter(c => !isWrapper(c)), ...pointerItems(controls, { layout, testIdAttributes, nameOf })];
73
+ }
74
+ /**
75
+ * A `div` with a pointer handler and no interactive role (a widget-bar item) is invisible to
76
+ * the AX filter above; a test id plus `cursor: pointer` marks it as meant to be pressed or dragged.
77
+ * `cursor` is inherited, so a tagged node inside a control is that control, not an item.
78
+ */
79
+ function pointerItems(controls, { layout, testIdAttributes, nameOf }) {
80
+ const controlRects = controls.map(c => layout.nodes.get(c.backendDOMNodeId).rect);
81
+ const items = [];
82
+ for (const [id, box] of layout.nodes) {
83
+ const testAttr = testIdAttributes.find(a => box.attributes[a]);
84
+ if (!testAttr || box.cursor !== 'pointer' || !isOnScreen(box.rect, layout.viewport))
85
+ continue;
86
+ if (controlRects.some(rect => isInside(box.rect, rect)))
87
+ continue;
88
+ const name = nameOf(id, box.attributes);
89
+ items.push({ backendDOMNodeId: id, role: 'item', name, testid: box.attributes[testAttr], states: [], isPassword: false });
90
+ }
91
+ return items;
92
+ }
93
+ const isLarger = (a, b) => a.width * a.height > b.width * b.height;
94
+ function isInside(inner, outer) {
95
+ return inner.x >= outer.x && inner.y >= outer.y
96
+ && inner.x + inner.width <= outer.x + outer.width && inner.y + inner.height <= outer.y + outer.height;
97
+ }
98
+ function isOnScreen(rect, viewport) {
99
+ const hasArea = rect.width > 0 && rect.height > 0;
100
+ const isIntersecting = rect.x < viewport.width && rect.y < viewport.height && rect.x + rect.width > 0 && rect.y + rect.height > 0;
101
+ return hasArea && isIntersecting;
102
+ }
103
+ function isStateOn(node, prop) {
104
+ const v = node.properties?.find(p => p.name === prop)?.value.value;
105
+ return v === true || v === 'true' || v === 'mixed';
106
+ }
107
+ /** Identity that survives a re-render: what the decider saw, not the DOM node. */
108
+ const fingerprint = (c) => `${c.role}|${c.name}|${c.testid ?? ''}`;
109
+ export const describeControl = (c) => (c.name ? `${c.role} "${c.name}"` : c.role);
110
+ export function formatControlRow(c, n) {
111
+ const parts = [`[${n}] ${describeControl(c)}${c.testid ? ` testid=${c.testid}` : ''}`];
112
+ if (c.isPassword)
113
+ parts.push(c.value === undefined ? 'empty' : PASSWORD_MASK);
114
+ else if (c.value !== undefined)
115
+ parts.push(JSON.stringify(c.value));
116
+ parts.push(...c.states);
117
+ return parts.join(' · ');
118
+ }
119
+ export function formatControlTable(controls, header) {
120
+ const head = [`act step ${header.step}/${header.maxSteps}`, `${controls.length} controls`, `until ${header.untilLabel}`];
121
+ const rows = controls.slice(0, MAX_ROWS).map((c, i) => formatControlRow(c, i + 1));
122
+ const hidden = controls.length - rows.length;
123
+ if (hidden > 0)
124
+ rows.push(`… ${hidden} more below — act scroll down`);
125
+ return [head.join(' · '), ...rows].join('\n');
126
+ }
127
+ /**
128
+ * Stale guard: row n of the last printed table, located in a fresh snapshot.
129
+ * Same node still a visible control → it; else the unique control with the same
130
+ * fingerprint; else gone. Never a guess.
131
+ */
132
+ export function resolveRow(last, current) {
133
+ const same = current.find(c => c.backendDOMNodeId === last.backendDOMNodeId);
134
+ if (same)
135
+ return { control: same };
136
+ const key = fingerprint(last);
137
+ const matches = current.filter(c => fingerprint(c) === key);
138
+ return matches.length === 1 ? { control: matches[0] } : { gone: last };
139
+ }
140
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inspectors/controls/index.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export type DOMSnapshotOptions = {
9
9
  startRef?: number;
10
10
  compact?: boolean;
11
11
  maxLines?: number;
12
+ /** `backendDOMNodeId` → test id. A node carrying one is printed even when it has no name. */
13
+ testIds?: ReadonlyMap<number, string>;
12
14
  };
13
15
  export type DOMSnapshotResult = {
14
16
  text: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inspectors/dom/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,gBAAgB,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAQD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAqD9D;AAuHD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAiDnB;AA+DD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,OAAO,CAAM,GACzD,cAAc,CAehB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inspectors/dom/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,gBAAgB,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6FAA6F;IAC7F,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACtC,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAQD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAqD9D;AAsID,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CA+CnB;AA8DD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,QAAQ,GAAG,OAAO,CAAM,GACzD,cAAc,CAehB"}
@@ -64,6 +64,17 @@ export function diffDomText(prev, curr) {
64
64
  const ALWAYS_SKIP_ROLES = new Set(['InlineTextBox']);
65
65
  const SKIP_WHEN_EMPTY_ROLES = new Set(['none', 'generic', 'StaticText']);
66
66
  const HARD_MAX_DEPTH = 100;
67
+ function testIdOf(node, ctx) {
68
+ return node.backendDOMNodeId === undefined ? undefined : ctx.testIds?.get(node.backendDOMNodeId);
69
+ }
70
+ function isSkipped(node, role, name, ctx) {
71
+ return SKIP_WHEN_EMPTY_ROLES.has(role) && !name && testIdOf(node, ctx) === undefined;
72
+ }
73
+ function formatLabel(node, role, name, isFallback, ctx) {
74
+ const nameStr = name ? ` "${name}"${isFallback ? ' [fallback]' : ''}` : '';
75
+ const testId = testIdOf(node, ctx);
76
+ return `${role}${nameStr}${testId === undefined ? '' : ` [testid=${testId}]`}`;
77
+ }
67
78
  function resolveNameFromChildren(node, nodeMap, depthLimit = 5) {
68
79
  if (depthLimit <= 0 || !node.childIds)
69
80
  return '';
@@ -145,7 +156,7 @@ function walkVisibleNodes(nodeId, indent, ctx, onVisit) {
145
156
  const name = ownName || fallbackName;
146
157
  if (ALWAYS_SKIP_ROLES.has(role))
147
158
  return;
148
- const skip = SKIP_WHEN_EMPTY_ROLES.has(role) && !name;
159
+ const skip = isSkipped(node, role, name, ctx);
149
160
  if (!skip) {
150
161
  if (nodePassesFilter(node, name, role, ctx)) {
151
162
  onVisit(node, name, !ownName && !!fallbackName, indent);
@@ -160,7 +171,8 @@ function walkVisibleNodes(nodeId, indent, ctx, onVisit) {
160
171
  }
161
172
  }
162
173
  }
163
- function effectiveChildren(node, nodeMap) {
174
+ function effectiveChildren(node, ctx) {
175
+ const { nodeMap } = ctx;
164
176
  if (!node.childIds)
165
177
  return [];
166
178
  return node.childIds.filter(childId => {
@@ -173,9 +185,7 @@ function effectiveChildren(node, nodeMap) {
173
185
  const childName = child.name?.value ?? '';
174
186
  const fallback = !childName ? resolveNameFromChildren(child, nodeMap) : '';
175
187
  const resolvedName = childName || fallback;
176
- if (SKIP_WHEN_EMPTY_ROLES.has(childRole) && !resolvedName)
177
- return false;
178
- return true;
188
+ return !isSkipped(child, childRole, resolvedName, ctx);
179
189
  });
180
190
  }
181
191
  export function formatAccessibilityTree(nodes, options = {}) {
@@ -190,7 +200,7 @@ export function formatAccessibilityTree(nodes, options = {}) {
190
200
  const rootNodeId = nodes[0]?.nodeId;
191
201
  if (!rootNodeId)
192
202
  return { text: '(empty)', refs: [], nextRef };
193
- const ctx = { nodeMap, lowerFilter: filter?.toLowerCase(), maxDepth };
203
+ const ctx = { nodeMap, lowerFilter: filter?.toLowerCase(), maxDepth, testIds: options.testIds };
194
204
  if (!compact) {
195
205
  walkVisibleNodes(rootNodeId, 0, ctx, (node, name, isFallback, indent) => {
196
206
  const ref = nextRef++;
@@ -198,9 +208,7 @@ export function formatAccessibilityTree(nodes, options = {}) {
198
208
  refs.push({ ref, backendDOMNodeId: node.backendDOMNodeId });
199
209
  }
200
210
  const padding = ' '.repeat(indent);
201
- const role = node.role?.value ?? '';
202
- const nameStr = name ? ` "${name}"${isFallback ? ' [fallback]' : ''}` : '';
203
- lines.push(`${padding}${role}${nameStr} [ref=${ref}]`);
211
+ lines.push(`${padding}${formatLabel(node, node.role?.value ?? '', name, isFallback, ctx)} [ref=${ref}]`);
204
212
  });
205
213
  }
206
214
  else {
@@ -238,7 +246,7 @@ function walkCompact(nodeId, indent, chain, chainIndent, ctx, sink) {
238
246
  const name = ownName || fallbackName;
239
247
  if (ALWAYS_SKIP_ROLES.has(role))
240
248
  return;
241
- const skip = SKIP_WHEN_EMPTY_ROLES.has(role) && !name;
249
+ const skip = isSkipped(node, role, name, ctx);
242
250
  if (skip) {
243
251
  if (node.childIds) {
244
252
  for (const childId of node.childIds) {
@@ -250,17 +258,16 @@ function walkCompact(nodeId, indent, chain, chainIndent, ctx, sink) {
250
258
  if (!nodePassesFilter(node, name, role, ctx))
251
259
  return;
252
260
  const ref = sink.allocRef(node.backendDOMNodeId);
253
- const effChildren = effectiveChildren(node, ctx.nodeMap);
261
+ const effChildren = effectiveChildren(node, ctx);
254
262
  const isSingleChild = effChildren.length === 1;
255
- if (isSingleChild && !ownName) {
263
+ if (isSingleChild && !ownName && testIdOf(node, ctx) === undefined) {
256
264
  walkCompact(effChildren[0], indent + 1, [...chain, role], chainIndent, ctx, sink);
257
265
  return;
258
266
  }
259
267
  const isFallback = !ownName && !!fallbackName;
260
- const nameStr = name ? ` "${name}"${isFallback ? ' [fallback]' : ''}` : '';
261
268
  const padding = ' '.repeat(chainIndent);
262
269
  const chainPrefix = chain.length > 0 ? `${chain.join(' > ')} > ` : '';
263
- sink.pushLine(`${padding}${chainPrefix}${role}${nameStr} [ref=${ref}]`);
270
+ sink.pushLine(`${padding}${chainPrefix}${formatLabel(node, role, name, isFallback, ctx)} [ref=${ref}]`);
264
271
  if (node.childIds) {
265
272
  for (const childId of node.childIds) {
266
273
  walkCompact(childId, indent + 1, [], chainIndent + 1, ctx, sink);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inspectors/dom/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inspectors/dom/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { PageSession } from '../cdp/types.js';
2
+ import type { ServerResponse } from '../types.js';
3
+ /** What an act run needs from the server. */
4
+ export type ActDeps = {
5
+ /** Replaced by `reconnect` when the window reloads under a step. */
6
+ conn: PageSession;
7
+ invalidateAxCache: () => void;
8
+ /** Fresh session after the window reloaded under us. */
9
+ reconnect: () => Promise<PageSession>;
10
+ };
11
+ /**
12
+ * A saved `act` run, executed with no model and no settle: each step waits only until
13
+ * its own target is on screen, enabled and uncovered, then acts. First line of the
14
+ * result: `DONE` (until met), `FAIL` (the app did not answer: until never came, or a
15
+ * control stayed disabled or covered — a bug) or `STALE` (a step's control is gone —
16
+ * the script no longer fits the app).
17
+ */
18
+ export declare function replay({ name, secret, testIdAttribute }: {
19
+ name: string;
20
+ secret?: string;
21
+ testIdAttribute?: string;
22
+ }, deps: ActDeps): Promise<ServerResponse>;
23
+ //# sourceMappingURL=act-replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"act-replay.d.ts","sourceRoot":"","sources":["../../src/server/act-replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAYjD,6CAA6C;AAC7C,MAAM,MAAM,OAAO,GAAG;IACpB,oEAAoE;IACpE,IAAI,EAAE,WAAW,CAAA;IACjB,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAC7B,wDAAwD;IACxD,SAAS,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;CACtC,CAAA;AAED;;;;;;GAMG;AACH,wBAAsB,MAAM,CAC1B,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9F,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,cAAc,CAAC,CAiHzB"}
@@ -0,0 +1,143 @@
1
+ import { isDeadSocket } from '../cdp/transport.js';
2
+ import { extractControls } from '../inspectors/controls/index.js';
3
+ import { findByLocator, locatorFromArgs, testIdAttributes, testIdLocator } from './locator.js';
4
+ import { edgePoint, readScript, viewportBox } from './act-script.js';
5
+ const POLL_MS = 50;
6
+ const STEP_TIMEOUT_MS = 10_000;
7
+ const UNTIL_TIMEOUT_MS = 15_000;
8
+ const EXIT_DONE = 0;
9
+ const EXIT_FAIL = 1;
10
+ const EXIT_STALE = 3;
11
+ /**
12
+ * A saved `act` run, executed with no model and no settle: each step waits only until
13
+ * its own target is on screen, enabled and uncovered, then acts. First line of the
14
+ * result: `DONE` (until met), `FAIL` (the app did not answer: until never came, or a
15
+ * control stayed disabled or covered — a bug) or `STALE` (a step's control is gone —
16
+ * the script no longer fits the app).
17
+ */
18
+ export async function replay({ name, secret, testIdAttribute }, deps) {
19
+ const script = await readScript(name);
20
+ if (!script)
21
+ return { ok: false, error: `No saved script "${name}" — record one with act start … --save ${name}` };
22
+ if (script.steps.some(s => 'isPassword' in s && s.isPassword) && !secret) {
23
+ return { ok: false, error: `"${name}" types a password — set AGENT_VIEW_SECRET` };
24
+ }
25
+ const until = locatorFromArgs({ ...script.until, testIdAttribute });
26
+ if (!until)
27
+ return { ok: false, error: `"${name}" has no done condition — re-record it with act start --until-testid …` };
28
+ const attributes = testIdAttributes(testIdAttribute);
29
+ const t0 = Date.now();
30
+ const elapsed = () => `${((Date.now() - t0) / 1000).toFixed(1)}s`;
31
+ const verdict = (exitCode, line) => ({ ok: true, data: `${line} · ${elapsed()}`, exitCode });
32
+ /** Polls until `probe` yields a value or time runs out; rides over the window reloading. */
33
+ const poll = async (probe, timeoutMs) => {
34
+ const end = Date.now() + timeoutMs;
35
+ for (;;) {
36
+ try {
37
+ const value = await probe(deps.conn);
38
+ if (value !== undefined)
39
+ return value;
40
+ }
41
+ catch (err) {
42
+ if (!isDeadSocket(err))
43
+ throw err;
44
+ // Between documents the window is not there yet; the next poll tries again.
45
+ deps.conn = await deps.reconnect().catch(() => deps.conn);
46
+ }
47
+ if (Date.now() > end)
48
+ return undefined;
49
+ await new Promise(r => setTimeout(r, POLL_MS));
50
+ }
51
+ };
52
+ /** The control, or why it is not usable yet: absent, or present but disabled / covered. */
53
+ const find = async (target, { isEnabledRequired }) => {
54
+ let seen;
55
+ const control = await poll(async (c) => {
56
+ deps.invalidateAxCache();
57
+ const [ax, layout] = await Promise.all([c.getAccessibilityTree(), c.getLayoutSnapshot()]);
58
+ const hit = extractControls(ax, layout, attributes).find(ctl => target.testid ? ctl.testid === target.testid : ctl.role === target.role && ctl.name === target.name);
59
+ seen = undefined;
60
+ if (!hit)
61
+ return undefined;
62
+ if (isEnabledRequired && hit.states.includes('disabled')) {
63
+ seen = 'disabled';
64
+ return undefined;
65
+ }
66
+ let covering;
67
+ try {
68
+ covering = await c.hitTest(hit.backendDOMNodeId, attributes);
69
+ }
70
+ catch (err) {
71
+ if (isDeadSocket(err))
72
+ throw err;
73
+ return undefined; // detached between the snapshot and the hit test: look again
74
+ }
75
+ if (covering)
76
+ seen = `covered by ${covering}`;
77
+ return covering ? undefined : hit;
78
+ }, STEP_TIMEOUT_MS);
79
+ return { control, seen };
80
+ };
81
+ const findTestId = (testid) => poll(async (c) => {
82
+ const found = await findByLocator(c, testIdLocator(testid, testIdAttribute));
83
+ return 'error' in found ? undefined : found;
84
+ }, STEP_TIMEOUT_MS);
85
+ const describe = (t) => (t.name ? `${t.role} "${t.name}"` : t.role) + (t.testid ? ` testid=${t.testid}` : '');
86
+ for (const [i, step] of script.steps.entries()) {
87
+ const at = `step ${i + 1}/${script.steps.length}`;
88
+ if (step.op === 'scroll') {
89
+ await poll(async (c) => { await c.scrollViewport(step.direction); return true; }, STEP_TIMEOUT_MS);
90
+ continue;
91
+ }
92
+ const { control, seen } = await find(step.target, { isEnabledRequired: step.op !== 'drag' });
93
+ if (!control) {
94
+ // Present but unusable is the app misbehaving; absent is the script out of date.
95
+ return seen
96
+ ? verdict(EXIT_FAIL, `FAIL: ${at} ${step.op} ${describe(step.target)} — still ${seen} after ${STEP_TIMEOUT_MS / 1000}s`)
97
+ : verdict(EXIT_STALE, `STALE: ${at} ${step.op} ${describe(step.target)} — not on screen within ${STEP_TIMEOUT_MS / 1000}s`);
98
+ }
99
+ try {
100
+ if (step.op !== 'drag') {
101
+ if (step.op === 'click') {
102
+ await deps.conn.clickByNodeId(control.backendDOMNodeId);
103
+ }
104
+ else if (step.op === 'type') {
105
+ await deps.conn.fillByNodeId(control.backendDOMNodeId, step.isPassword ? secret : step.value ?? '');
106
+ }
107
+ else {
108
+ const outcome = await deps.conn.selectOption(control.backendDOMNodeId, step.value ?? '');
109
+ const reason = outcome === 'no-option' ? `no option "${step.value}"` : 'not a native select';
110
+ if (outcome !== 'ok')
111
+ return verdict(EXIT_STALE, `STALE: ${at} select ${describe(step.target)} — ${reason}`);
112
+ }
113
+ }
114
+ else {
115
+ const to = step.to;
116
+ const dest = !to ? undefined : 'role' in to ? (await find(to, { isEnabledRequired: false })).control : await findTestId(to.testid);
117
+ if (to && !dest) {
118
+ const label = 'role' in to ? describe(to) : `testid=${to.testid}`;
119
+ return verdict(EXIT_STALE, `STALE: ${at} drag target ${label} not found`);
120
+ }
121
+ const from = await deps.conn.getBoxCenter(control.backendDOMNodeId);
122
+ const box = dest ? await deps.conn.getBoxRect(dest.backendDOMNodeId, { scrollIntoView: false }) : await viewportBox(deps.conn);
123
+ await deps.conn.dragBetweenPositions(from, edgePoint(box, step.edge), { mode: 'pointer' });
124
+ }
125
+ }
126
+ catch (err) {
127
+ // The window reloaded under the action (login, logout): it went out; the next poll reconnects.
128
+ // Any other failure means the control vanished between finding and acting (a panel
129
+ // that toggled shut): the app is not in the state the script was recorded in.
130
+ if (!isDeadSocket(err)) {
131
+ const reason = err instanceof Error ? err.message : String(err);
132
+ return verdict(EXIT_STALE, `STALE: ${at} ${step.op} ${describe(step.target)} — ${reason}`);
133
+ }
134
+ }
135
+ }
136
+ // Split the total: our steps vs the app answering them (auth, reload) — only the first is ours to speed up.
137
+ const stepsTime = elapsed();
138
+ const isMet = await poll(async (c) => ('error' in await findByLocator(c, until) ? undefined : true), UNTIL_TIMEOUT_MS);
139
+ return isMet
140
+ ? verdict(EXIT_DONE, `DONE: replay ${name} · ${script.steps.length} steps in ${stepsTime}, then ${until.label}`)
141
+ : verdict(EXIT_FAIL, `FAIL: replay ${name} — steps ran, ${until.label} not visible after ${UNTIL_TIMEOUT_MS / 1000}s`);
142
+ }
143
+ //# sourceMappingURL=act-replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"act-replay.js","sourceRoot":"","sources":["../../src/server/act-replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { PageSession, Point, Rect } from '../cdp/types.js';
2
+ /** How a replay finds a control again: its test id, else role + name. */
3
+ export type StepTarget = {
4
+ testid?: string;
5
+ role: string;
6
+ name: string;
7
+ };
8
+ /** A drop target: a row, or any element by its test id. */
9
+ export type DropTarget = StepTarget | {
10
+ testid: string;
11
+ };
12
+ export type RecordedStep = {
13
+ op: 'click' | 'type' | 'select';
14
+ target: StepTarget;
15
+ value?: string;
16
+ isPassword: boolean;
17
+ } | {
18
+ op: 'scroll';
19
+ direction: 'up' | 'down';
20
+ }
21
+ /** `to`: a row, any element by test id, or absent = the viewport. */
22
+ | {
23
+ op: 'drag';
24
+ target: StepTarget;
25
+ to?: DropTarget;
26
+ edge: Edge;
27
+ };
28
+ export type UntilArgs = {
29
+ testid?: string;
30
+ selector?: string;
31
+ };
32
+ export type ActScript = {
33
+ until: UntilArgs;
34
+ steps: RecordedStep[];
35
+ };
36
+ export declare const isScriptName: (name: string | undefined) => name is string;
37
+ /** Steps are stored by what identifies a control across runs, never by row number. Passwords are not stored. */
38
+ export declare function writeScript(name: string, { until, steps }: ActScript): Promise<string>;
39
+ export declare function readScript(name: string): Promise<ActScript | undefined>;
40
+ export declare const EDGES: readonly ["left", "right", "top", "bottom", "center"];
41
+ export type Edge = typeof EDGES[number];
42
+ export declare const isEdge: (value: string) => value is Edge;
43
+ /** Drop point inside `box`, on its midline, inset from `edge` — a centre drop replaces instead of splitting. */
44
+ export declare function edgePoint(box: Rect, edge: Edge): Point;
45
+ export declare function viewportBox(conn: PageSession): Promise<Rect>;
46
+ //# sourceMappingURL=act-script.d.ts.map