@petukhovart/agent-view 0.15.0 → 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.
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +34 -11
- package/dist/cdp/png.d.ts +15 -0
- package/dist/cdp/png.d.ts.map +1 -0
- package/dist/cdp/png.js +147 -0
- package/dist/cdp/png.js.map +1 -0
- package/dist/cdp/transport.d.ts +2 -0
- package/dist/cdp/transport.d.ts.map +1 -1
- package/dist/cdp/transport.js +233 -50
- package/dist/cdp/transport.js.map +1 -1
- package/dist/cdp/types.d.ts +72 -6
- package/dist/cdp/types.d.ts.map +1 -1
- package/dist/cdp/types.js.map +1 -1
- package/dist/cli/client.d.ts.map +1 -1
- package/dist/cli/client.js +1 -3
- package/dist/cli/client.js.map +1 -1
- package/dist/cli/commands/act.d.ts +3 -0
- package/dist/cli/commands/act.d.ts.map +1 -0
- package/dist/cli/commands/act.js +19 -0
- package/dist/cli/commands/act.js.map +1 -0
- package/dist/cli/commands/click.d.ts +2 -0
- package/dist/cli/commands/click.d.ts.map +1 -1
- package/dist/cli/commands/click.js +9 -4
- package/dist/cli/commands/click.js.map +1 -1
- package/dist/cli/commands/dom.d.ts.map +1 -1
- package/dist/cli/commands/dom.js +1 -0
- package/dist/cli/commands/dom.js.map +1 -1
- package/dist/cli/commands/drag.d.ts +4 -0
- package/dist/cli/commands/drag.d.ts.map +1 -1
- package/dist/cli/commands/drag.js +18 -0
- package/dist/cli/commands/drag.js.map +1 -1
- package/dist/cli/commands/fill.d.ts +2 -0
- package/dist/cli/commands/fill.d.ts.map +1 -1
- package/dist/cli/commands/fill.js +11 -4
- package/dist/cli/commands/fill.js.map +1 -1
- package/dist/cli/commands/screenshot.d.ts +2 -0
- package/dist/cli/commands/screenshot.d.ts.map +1 -1
- package/dist/cli/commands/screenshot.js +10 -1
- package/dist/cli/commands/screenshot.js.map +1 -1
- package/dist/cli/commands/wait.d.ts +3 -1
- package/dist/cli/commands/wait.d.ts.map +1 -1
- package/dist/cli/commands/wait.js +6 -2
- package/dist/cli/commands/wait.js.map +1 -1
- package/dist/cli/commands/watch.js +1 -1
- package/dist/cli/commands/watch.js.map +1 -1
- package/dist/cli/index.js +51 -5
- package/dist/cli/index.js.map +1 -1
- package/dist/config/manager.d.ts.map +1 -1
- package/dist/config/manager.js +4 -0
- package/dist/config/manager.js.map +1 -1
- package/dist/config/types.d.ts +5 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/inspectors/controls/index.d.ts +39 -0
- package/dist/inspectors/controls/index.d.ts.map +1 -0
- package/dist/inspectors/controls/index.js +140 -0
- package/dist/inspectors/controls/index.js.map +1 -0
- package/dist/inspectors/dom/index.d.ts +2 -0
- package/dist/inspectors/dom/index.d.ts.map +1 -1
- package/dist/inspectors/dom/index.js +21 -14
- package/dist/inspectors/dom/index.js.map +1 -1
- package/dist/server/act-replay.d.ts +23 -0
- package/dist/server/act-replay.d.ts.map +1 -0
- package/dist/server/act-replay.js +143 -0
- package/dist/server/act-replay.js.map +1 -0
- package/dist/server/act-script.d.ts +46 -0
- package/dist/server/act-script.d.ts.map +1 -0
- package/dist/server/act-script.js +46 -0
- package/dist/server/act-script.js.map +1 -0
- package/dist/server/act-session.d.ts +23 -0
- package/dist/server/act-session.d.ts.map +1 -0
- package/dist/server/act-session.js +304 -0
- package/dist/server/act-session.js.map +1 -0
- package/dist/server/locator.d.ts +19 -0
- package/dist/server/locator.d.ts.map +1 -0
- package/dist/server/locator.js +33 -0
- package/dist/server/locator.js.map +1 -0
- package/dist/server/port.d.ts +7 -0
- package/dist/server/port.d.ts.map +1 -0
- package/dist/server/port.js +19 -0
- package/dist/server/port.js.map +1 -0
- package/dist/server/server.d.ts +1 -0
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +89 -25
- package/dist/server/server.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/verify/SKILL.md +12 -20
- package/skills/verify/references/commands.md +127 -6
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
import { isDeadSocket } from '../cdp/transport.js';
|
|
2
|
+
import { PASSWORD_MASK, TEXT_ROLES, describeControl, extractControls, formatControlRow, formatControlTable, resolveRow, } from '../inspectors/controls/index.js';
|
|
3
|
+
import { findByLocator, locatorFromArgs, testIdAttributes, testIdLocator } from './locator.js';
|
|
4
|
+
import { EDGES, edgePoint, isEdge, isScriptName, viewportBox, writeScript, } from './act-script.js';
|
|
5
|
+
import { replay } from './act-replay.js';
|
|
6
|
+
const DEFAULT_MAX_STEPS = 30;
|
|
7
|
+
const SETTLE_POLL_MS = 100;
|
|
8
|
+
const SETTLE_BUDGET_MS = 3_000;
|
|
9
|
+
/** Polls the table must stay unchanged, after it changed, to count as settled. */
|
|
10
|
+
const SETTLE_STABLE_POLLS = 2;
|
|
11
|
+
/** Polls an action that changed nothing waits before giving up on a reaction. */
|
|
12
|
+
const SETTLE_QUIET_POLLS = 4;
|
|
13
|
+
const ROW_OPS = ['click', 'type', 'select'];
|
|
14
|
+
const stepTarget = (c) => ({ testid: c.testid, role: c.role, name: c.name });
|
|
15
|
+
const str = (args, key) => typeof args[key] === 'string' ? args[key] : undefined;
|
|
16
|
+
const num = (value) => (typeof value === 'number' ? value : NaN);
|
|
17
|
+
const isRowOp = (op) => ROW_OPS.includes(op);
|
|
18
|
+
export async function runAct(holder, args, deps) {
|
|
19
|
+
const op = str(args, 'op') ?? '';
|
|
20
|
+
if (op === 'replay') {
|
|
21
|
+
const name = str(args, 'name');
|
|
22
|
+
if (!isScriptName(name))
|
|
23
|
+
return { ok: false, error: 'act replay <name>' };
|
|
24
|
+
return replay({ name, secret: str(args, 'secret'), testIdAttribute: str(args, 'testIdAttribute') }, deps);
|
|
25
|
+
}
|
|
26
|
+
if (op === 'start') {
|
|
27
|
+
// Done is agent-view's call, never the driver's: no run without a done condition.
|
|
28
|
+
if ((str(args, 'untilTestid') === undefined) === (str(args, 'untilSelector') === undefined)) {
|
|
29
|
+
return { ok: false, error: 'act start --until-testid <id> | --until-selector <css> — exactly one' };
|
|
30
|
+
}
|
|
31
|
+
holder.act = createSession(args);
|
|
32
|
+
return tableOrDone({ session: holder.act, deps });
|
|
33
|
+
}
|
|
34
|
+
const session = holder.act;
|
|
35
|
+
if (!session)
|
|
36
|
+
return { ok: false, error: 'run `agent-view act start` first' };
|
|
37
|
+
const run = { session, deps };
|
|
38
|
+
if (op === 'table')
|
|
39
|
+
return tableOrDone(run);
|
|
40
|
+
if (op === 'save')
|
|
41
|
+
return save(session, str(args, 'name'));
|
|
42
|
+
if (op === 'wait')
|
|
43
|
+
return finishStep(run, { before: tableKey(await snapshot(run)), done: 'wait', quietPolls: Infinity });
|
|
44
|
+
if (session.isDone)
|
|
45
|
+
return { ok: false, error: 'this act run is DONE — `agent-view act start` for a new one' };
|
|
46
|
+
if (session.steps.length >= session.maxSteps) {
|
|
47
|
+
return { ok: true, data: `BLOCKED: step budget ${session.maxSteps} exhausted\n${await printTable(run)}` };
|
|
48
|
+
}
|
|
49
|
+
if (op === 'scroll')
|
|
50
|
+
return scrollStep(run, str(args, 'direction'));
|
|
51
|
+
if (op === 'drag')
|
|
52
|
+
return dragStep(run, { n: num(args.n), to: str(args, 'to'), edge: str(args, 'edge') });
|
|
53
|
+
if (isRowOp(op))
|
|
54
|
+
return rowStep(run, { op, n: num(args.n), text: str(args, 'text') ?? '' });
|
|
55
|
+
if (op === 'do')
|
|
56
|
+
return batchStep(run, args.steps);
|
|
57
|
+
return { ok: false, error: `Unknown act op: ${op}` };
|
|
58
|
+
}
|
|
59
|
+
function createSession(args) {
|
|
60
|
+
const untilArgs = { testid: str(args, 'untilTestid'), selector: str(args, 'untilSelector') };
|
|
61
|
+
const testIdAttribute = str(args, 'testIdAttribute');
|
|
62
|
+
const maxSteps = typeof args.maxSteps === 'number' && args.maxSteps > 0 ? args.maxSteps : DEFAULT_MAX_STEPS;
|
|
63
|
+
return {
|
|
64
|
+
until: locatorFromArgs({ ...untilArgs, testIdAttribute }),
|
|
65
|
+
untilArgs,
|
|
66
|
+
maxSteps,
|
|
67
|
+
testIdAttribute,
|
|
68
|
+
rows: [],
|
|
69
|
+
steps: [],
|
|
70
|
+
startedAt: Date.now(),
|
|
71
|
+
saveAs: str(args, 'save'),
|
|
72
|
+
isDone: false,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/** `read` on the live socket; when the window reloaded under it, once more on a fresh one. */
|
|
76
|
+
async function onLiveConn(deps, read) {
|
|
77
|
+
try {
|
|
78
|
+
return await read();
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
if (!isDeadSocket(err))
|
|
82
|
+
throw err;
|
|
83
|
+
deps.conn = await deps.reconnect();
|
|
84
|
+
return read();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const unlessDeadSocket = (read, fallback) => read.catch((err) => {
|
|
88
|
+
if (isDeadSocket(err))
|
|
89
|
+
return fallback;
|
|
90
|
+
throw err;
|
|
91
|
+
});
|
|
92
|
+
async function snapshot({ session, deps }) {
|
|
93
|
+
deps.invalidateAxCache();
|
|
94
|
+
return onLiveConn(deps, async () => {
|
|
95
|
+
const [ax, layout] = await Promise.all([deps.conn.getAccessibilityTree(), deps.conn.getLayoutSnapshot()]);
|
|
96
|
+
return extractControls(ax, layout, testIdAttributes(session.testIdAttribute));
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
/** Prints `controls` (or a fresh snapshot) and makes it the table the next `n` refers to. */
|
|
100
|
+
async function printTable(run, controls) {
|
|
101
|
+
const { session } = run;
|
|
102
|
+
session.rows = controls ?? await snapshot(run);
|
|
103
|
+
return formatControlTable(session.rows, { step: session.steps.length, maxSteps: session.maxSteps, untilLabel: session.until.label });
|
|
104
|
+
}
|
|
105
|
+
async function rowStep(run, { op, n, text }) {
|
|
106
|
+
const located = await locate(run, n);
|
|
107
|
+
if (!('target' in located))
|
|
108
|
+
return located;
|
|
109
|
+
const { target, fresh } = located;
|
|
110
|
+
if (op === 'type' && !TEXT_ROLES.has(target.role)) {
|
|
111
|
+
return { ok: false, error: `[${n}] is a ${target.role}, not a text field — pick a textbox/combobox row` };
|
|
112
|
+
}
|
|
113
|
+
const { session, deps } = run;
|
|
114
|
+
const echo = op === 'click' ? '' : ` ${target.isPassword ? PASSWORD_MASK : JSON.stringify(text)}`;
|
|
115
|
+
const done = `${op} [${n}] ${describeControl(target)}${echo}`;
|
|
116
|
+
let isReloaded = false;
|
|
117
|
+
try {
|
|
118
|
+
if (op === 'click') {
|
|
119
|
+
await deps.conn.clickByNodeId(target.backendDOMNodeId);
|
|
120
|
+
}
|
|
121
|
+
else if (op === 'type') {
|
|
122
|
+
await deps.conn.fillByNodeId(target.backendDOMNodeId, text);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
const outcome = await deps.conn.selectOption(target.backendDOMNodeId, text);
|
|
126
|
+
if (outcome === 'not-select')
|
|
127
|
+
return { ok: false, error: 'not a native select — click it' };
|
|
128
|
+
if (outcome === 'no-option')
|
|
129
|
+
return { ok: false, error: `No option "${text}" in [${n}]` };
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
catch (err) {
|
|
133
|
+
// The window reloaded under the action (login, logout): the socket died, the action went out.
|
|
134
|
+
if (!isDeadSocket(err))
|
|
135
|
+
throw err;
|
|
136
|
+
isReloaded = true;
|
|
137
|
+
}
|
|
138
|
+
deps.invalidateAxCache();
|
|
139
|
+
session.steps.push({ op, target: stepTarget(target), value: op === 'click' ? undefined : text, isPassword: target.isPassword });
|
|
140
|
+
return finishStep(run, { before: tableKey(fresh), done: isReloaded ? `${done} · window reloaded` : done });
|
|
141
|
+
}
|
|
142
|
+
/** `type 3 a b` types `a b`: the text is the rest of the step, spaces kept. */
|
|
143
|
+
function parseRowStep(step) {
|
|
144
|
+
const m = /^\s*(\S+)\s+(\d+)(?:\s(.*))?$/s.exec(step);
|
|
145
|
+
return m && isRowOp(m[1]) ? { op: m[1], n: Number(m[2]), text: m[3] ?? '' } : undefined;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Several row ops decided from ONE table — a form fill is one decision, not three model
|
|
149
|
+
* turns. Every n refers to that table: it is re-pinned before each op, so the stale guard
|
|
150
|
+
* maps it onto whatever the previous op left. Stops at the first error, BLOCKED or DONE.
|
|
151
|
+
*/
|
|
152
|
+
async function batchStep(run, raw) {
|
|
153
|
+
const steps = Array.isArray(raw) ? raw.map(String) : [];
|
|
154
|
+
const parsed = steps.map(parseRowStep);
|
|
155
|
+
if (!parsed.every((p) => p !== undefined)) {
|
|
156
|
+
const bad = steps[parsed.indexOf(undefined)];
|
|
157
|
+
return { ok: false, error: `act do: "${bad}" — each step is click|type|select <n> [text]` };
|
|
158
|
+
}
|
|
159
|
+
const pinned = run.session.rows;
|
|
160
|
+
const lines = [];
|
|
161
|
+
for (const [i, step] of parsed.entries()) {
|
|
162
|
+
run.session.rows = pinned;
|
|
163
|
+
const result = await rowStep(run, step);
|
|
164
|
+
if (!result.ok)
|
|
165
|
+
return { ok: false, error: [...lines, result.error].join('\n') };
|
|
166
|
+
const out = String(result.data);
|
|
167
|
+
if (i === parsed.length - 1 || !out.startsWith('✓'))
|
|
168
|
+
return { ok: true, data: [...lines, out].join('\n') };
|
|
169
|
+
lines.push(out.split('\n')[0]);
|
|
170
|
+
}
|
|
171
|
+
return { ok: false, error: 'act do "<op> <n> [text]" …' };
|
|
172
|
+
}
|
|
173
|
+
/** Row n of the last table in a fresh snapshot: stale guard, then hit check. */
|
|
174
|
+
async function locate(run, n) {
|
|
175
|
+
const { session, deps } = run;
|
|
176
|
+
const last = session.rows[n - 1];
|
|
177
|
+
if (!last)
|
|
178
|
+
return { ok: false, error: `No row [${n}] in the last table (1-${session.rows.length})` };
|
|
179
|
+
const fresh = await snapshot(run);
|
|
180
|
+
const resolved = resolveRow(last, fresh);
|
|
181
|
+
if ('gone' in resolved)
|
|
182
|
+
return blocked(run, `[${n}] ${describeControl(last)} is gone`, fresh);
|
|
183
|
+
const covering = await deps.conn.hitTest(resolved.control.backendDOMNodeId, testIdAttributes(session.testIdAttribute));
|
|
184
|
+
if (covering)
|
|
185
|
+
return blocked(run, `[${n}] covered by ${covering}`, fresh);
|
|
186
|
+
return { target: resolved.control, fresh };
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Pointer drag of row n onto an edge of: row `to`, any visible element `testid=<id>`
|
|
190
|
+
* (drop zones are rarely controls), or the viewport.
|
|
191
|
+
*/
|
|
192
|
+
async function dragStep(run, { n, to, edge = 'center' }) {
|
|
193
|
+
if (!isEdge(edge))
|
|
194
|
+
return { ok: false, error: `act drag <n> [to] [edge] — edge is one of ${EDGES.join('|')}` };
|
|
195
|
+
const { session, deps } = run;
|
|
196
|
+
const located = await locate(run, n);
|
|
197
|
+
if (!('target' in located))
|
|
198
|
+
return located;
|
|
199
|
+
let destId;
|
|
200
|
+
let toLabel = 'viewport';
|
|
201
|
+
let toTarget;
|
|
202
|
+
if (to !== undefined && to !== 'center' && to.startsWith('testid=')) {
|
|
203
|
+
const testid = to.slice('testid='.length);
|
|
204
|
+
const found = await findByLocator(deps.conn, testIdLocator(testid, session.testIdAttribute));
|
|
205
|
+
if ('error' in found)
|
|
206
|
+
return { ok: false, error: found.error };
|
|
207
|
+
destId = found.backendDOMNodeId;
|
|
208
|
+
toLabel = to;
|
|
209
|
+
toTarget = { testid };
|
|
210
|
+
}
|
|
211
|
+
else if (to !== undefined && to !== 'center') {
|
|
212
|
+
const dest = await locate(run, Number(to));
|
|
213
|
+
if (!('target' in dest))
|
|
214
|
+
return dest;
|
|
215
|
+
destId = dest.target.backendDOMNodeId;
|
|
216
|
+
toLabel = `[${to}] ${describeControl(dest.target)}`;
|
|
217
|
+
toTarget = stepTarget(dest.target);
|
|
218
|
+
}
|
|
219
|
+
// Source first: scrolling it into view may move the target, so the target is measured after.
|
|
220
|
+
const from = await deps.conn.getBoxCenter(located.target.backendDOMNodeId);
|
|
221
|
+
const box = destId === undefined ? await viewportBox(deps.conn) : await deps.conn.getBoxRect(destId, { scrollIntoView: false });
|
|
222
|
+
await deps.conn.dragBetweenPositions(from, edgePoint(box, edge), { mode: 'pointer' });
|
|
223
|
+
deps.invalidateAxCache();
|
|
224
|
+
session.steps.push({ op: 'drag', target: stepTarget(located.target), to: toTarget, edge });
|
|
225
|
+
const source = `${describeControl(located.target)}${located.target.testid ? ` testid=${located.target.testid}` : ''}`;
|
|
226
|
+
return finishStep(run, { before: tableKey(located.fresh), done: `drag [${n}] ${source} → ${toLabel} ${edge}` });
|
|
227
|
+
}
|
|
228
|
+
async function scrollStep(run, direction) {
|
|
229
|
+
if (direction !== 'up' && direction !== 'down')
|
|
230
|
+
return { ok: false, error: 'act scroll <up|down>' };
|
|
231
|
+
const before = tableKey(await snapshot(run));
|
|
232
|
+
await run.deps.conn.scrollViewport(direction);
|
|
233
|
+
run.deps.invalidateAxCache();
|
|
234
|
+
run.session.steps.push({ op: 'scroll', direction });
|
|
235
|
+
return finishStep(run, { before, done: `scroll ${direction}` });
|
|
236
|
+
}
|
|
237
|
+
async function blocked(run, reason, fresh) {
|
|
238
|
+
return { ok: true, data: `BLOCKED: ${reason}\n${await printTable(run, fresh)}` };
|
|
239
|
+
}
|
|
240
|
+
const tableKey = (controls) => controls.map((c, i) => formatControlRow(c, i)).join('\n');
|
|
241
|
+
/** A table the decider asked for still ends the run when the goal was reached meanwhile. */
|
|
242
|
+
async function tableOrDone(run) {
|
|
243
|
+
const table = await printTable(run);
|
|
244
|
+
return { ok: true, data: await isUntilMet(run) ? await doneLine(run.session) : table };
|
|
245
|
+
}
|
|
246
|
+
/** The DONE line; with `start --save`, the recording is written here, sparing the decider a turn. */
|
|
247
|
+
async function doneLine(session) {
|
|
248
|
+
const line = `DONE: until ${session.until.label} · ${session.steps.length} steps · ${((Date.now() - session.startedAt) / 1000).toFixed(1)}s`;
|
|
249
|
+
const isFirstDone = !session.isDone;
|
|
250
|
+
session.isDone = true;
|
|
251
|
+
if (!session.saveAs || !isFirstDone)
|
|
252
|
+
return line;
|
|
253
|
+
const saved = await save(session, session.saveAs);
|
|
254
|
+
return `${line} · saved ${saved.ok ? saved.data : saved.error}`;
|
|
255
|
+
}
|
|
256
|
+
function isUntilMet({ session, deps }) {
|
|
257
|
+
return onLiveConn(deps, async () => !('error' in await findByLocator(deps.conn, session.until)));
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Settle, not sleep: poll until the until-condition holds, or the table changed and then
|
|
261
|
+
* held still for SETTLE_STABLE_POLLS polls, or never changed for `quietPolls`, or the
|
|
262
|
+
* budget runs out.
|
|
263
|
+
*/
|
|
264
|
+
async function finishStep(run, { before, done, quietPolls = SETTLE_QUIET_POLLS }) {
|
|
265
|
+
const t0 = Date.now();
|
|
266
|
+
let previous = before;
|
|
267
|
+
let hasChanged = false;
|
|
268
|
+
let stablePolls = 0;
|
|
269
|
+
let controls = [];
|
|
270
|
+
let isDone = false;
|
|
271
|
+
do {
|
|
272
|
+
await new Promise(r => setTimeout(r, SETTLE_POLL_MS));
|
|
273
|
+
// A socket that dies again mid-reload is a document between loads: an empty table.
|
|
274
|
+
controls = await unlessDeadSocket(snapshot(run), []);
|
|
275
|
+
isDone = await unlessDeadSocket(isUntilMet(run), false);
|
|
276
|
+
if (isDone)
|
|
277
|
+
break;
|
|
278
|
+
const key = tableKey(controls);
|
|
279
|
+
// An empty table is a document between loads, never a settled screen.
|
|
280
|
+
if (controls.length === 0 || key !== previous) {
|
|
281
|
+
hasChanged = true;
|
|
282
|
+
stablePolls = 0;
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
stablePolls++;
|
|
286
|
+
}
|
|
287
|
+
previous = key;
|
|
288
|
+
} while (stablePolls < (hasChanged ? SETTLE_STABLE_POLLS : quietPolls) && Date.now() - t0 < SETTLE_BUDGET_MS);
|
|
289
|
+
const elapsed = Date.now() - t0;
|
|
290
|
+
if (isDone)
|
|
291
|
+
return { ok: true, data: await doneLine(run.session) };
|
|
292
|
+
const table = await printTable(run, controls);
|
|
293
|
+
const { session } = run;
|
|
294
|
+
if (session.steps.length >= session.maxSteps)
|
|
295
|
+
return { ok: true, data: `BLOCKED: step budget ${session.maxSteps} exhausted\n${table}` };
|
|
296
|
+
return { ok: true, data: `✓ ${done} · ${elapsed}ms\n${table}` };
|
|
297
|
+
}
|
|
298
|
+
async function save(session, name) {
|
|
299
|
+
if (!isScriptName(name))
|
|
300
|
+
return { ok: false, error: 'act save <name> — letters, digits, . _ - only' };
|
|
301
|
+
const path = await writeScript(name, { until: session.untilArgs, steps: session.steps });
|
|
302
|
+
return { ok: true, data: `${path} · replay: agent-view act replay ${name}` };
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=act-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"act-session.js","sourceRoot":"","sources":["../../src/server/act-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PageSession } from '../cdp/types.js';
|
|
2
|
+
export declare function testIdAttributes(configured: string | undefined): readonly string[];
|
|
3
|
+
export type Locator = {
|
|
4
|
+
css: string;
|
|
5
|
+
label: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function locatorFromArgs(args: Record<string, unknown>): Locator | undefined;
|
|
8
|
+
export declare function testIdLocator(testid: string, testIdAttribute: string | undefined): Locator;
|
|
9
|
+
/**
|
|
10
|
+
* The first visible element a locator names. The label says when it was one of
|
|
11
|
+
* several, since acting on the first of many usually means the locator is too broad.
|
|
12
|
+
*/
|
|
13
|
+
export declare function findByLocator(conn: PageSession, locator: Locator): Promise<{
|
|
14
|
+
backendDOMNodeId: number;
|
|
15
|
+
label: string;
|
|
16
|
+
} | {
|
|
17
|
+
error: string;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=locator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locator.d.ts","sourceRoot":"","sources":["../../src/server/locator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AASlD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE,CAGlF;AAED,MAAM,MAAM,OAAO,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,GAAG,SAAS,CAIlF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAG1F;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAK1E"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attributes tried when `testIdAttribute` is not configured, in order. Projects
|
|
3
|
+
* rarely set more than one, so accepting all of them spares every project the
|
|
4
|
+
* config line.
|
|
5
|
+
*/
|
|
6
|
+
const DEFAULT_TEST_ID_ATTRIBUTES = ['data-testid', 'data-test-id', 'data-test', 'data-qa', 'data-cy'];
|
|
7
|
+
export function testIdAttributes(configured) {
|
|
8
|
+
// The DOM reports attribute names lowercased; a camel-cased config would match nothing.
|
|
9
|
+
return configured ? [configured.toLowerCase()] : DEFAULT_TEST_ID_ATTRIBUTES;
|
|
10
|
+
}
|
|
11
|
+
export function locatorFromArgs(args) {
|
|
12
|
+
const { testid, selector, testIdAttribute } = args;
|
|
13
|
+
if (typeof testid === 'string')
|
|
14
|
+
return testIdLocator(testid, typeof testIdAttribute === 'string' ? testIdAttribute : undefined);
|
|
15
|
+
return typeof selector === 'string' ? { css: selector, label: `selector "${selector}"` } : undefined;
|
|
16
|
+
}
|
|
17
|
+
export function testIdLocator(testid, testIdAttribute) {
|
|
18
|
+
const value = `"${testid.replace(/["\\]/g, '\\$&')}"`;
|
|
19
|
+
return { css: testIdAttributes(testIdAttribute).map(attr => `[${attr}=${value}]`).join(','), label: `testid "${testid}"` };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The first visible element a locator names. The label says when it was one of
|
|
23
|
+
* several, since acting on the first of many usually means the locator is too broad.
|
|
24
|
+
*/
|
|
25
|
+
export async function findByLocator(conn, locator) {
|
|
26
|
+
const { backendDOMNodeId, count } = await conn.queryVisible(locator.css);
|
|
27
|
+
if (count === 0)
|
|
28
|
+
return { error: `No element matches ${locator.label}` };
|
|
29
|
+
if (backendDOMNodeId === null)
|
|
30
|
+
return { error: `None of ${count} element(s) matching ${locator.label} is visible` };
|
|
31
|
+
return { backendDOMNodeId, label: count > 1 ? `${locator.label} (first visible of ${count})` : locator.label };
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=locator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locator.js","sourceRoot":"","sources":["../../src/server/locator.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,0BAA0B,GAAG,CAAC,aAAa,EAAE,cAAc,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,CAAU,CAAA;AAE9G,MAAM,UAAU,gBAAgB,CAAC,UAA8B;IAC7D,wFAAwF;IACxF,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,0BAA0B,CAAA;AAC7E,CAAC;AAID,MAAM,UAAU,eAAe,CAAC,IAA6B;IAC3D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;IAClD,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC,MAAM,EAAE,OAAO,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;IAC/H,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACtG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,eAAmC;IAC/E,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAA;IACrD,OAAO,EAAE,GAAG,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,MAAM,GAAG,EAAE,CAAA;AAC5H,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAiB,EACjB,OAAgB;IAEhB,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACxE,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,OAAO,CAAC,KAAK,EAAE,EAAE,CAAA;IACxE,IAAI,gBAAgB,KAAK,IAAI;QAAE,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,wBAAwB,OAAO,CAAC,KAAK,aAAa,EAAE,CAAA;IACnH,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,sBAAsB,KAAK,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;AAChH,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** `AGENT_VIEW_SERVER_PORT` runs a dev build next to the installed server. The spawned server inherits it. */
|
|
2
|
+
export declare const SERVER_PORT: number;
|
|
3
|
+
/** Home of the token files and saved act scripts. */
|
|
4
|
+
export declare const AGENT_VIEW_DIR: string;
|
|
5
|
+
/** Per-port token, so a dev server never overwrites the live server's token. */
|
|
6
|
+
export declare const TOKEN_PATH: string;
|
|
7
|
+
//# sourceMappingURL=port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.d.ts","sourceRoot":"","sources":["../../src/server/port.ts"],"names":[],"mappings":"AAKA,8GAA8G;AAC9G,eAAO,MAAM,WAAW,QAAiD,CAAA;AAEzE,qDAAqD;AACrD,eAAO,MAAM,cAAc,QAAiC,CAAA;AAE5D,gFAAgF;AAChF,eAAO,MAAM,UAAU,QAA+F,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { homedir } from 'node:os';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const DEFAULT_SERVER_PORT = 47922;
|
|
4
|
+
/** `AGENT_VIEW_SERVER_PORT` runs a dev build next to the installed server. The spawned server inherits it. */
|
|
5
|
+
export const SERVER_PORT = serverPort(process.env.AGENT_VIEW_SERVER_PORT);
|
|
6
|
+
/** Home of the token files and saved act scripts. */
|
|
7
|
+
export const AGENT_VIEW_DIR = join(homedir(), '.agent-view');
|
|
8
|
+
/** Per-port token, so a dev server never overwrites the live server's token. */
|
|
9
|
+
export const TOKEN_PATH = join(AGENT_VIEW_DIR, SERVER_PORT === DEFAULT_SERVER_PORT ? 'token' : `token-${SERVER_PORT}`);
|
|
10
|
+
function serverPort(raw) {
|
|
11
|
+
if (raw === undefined || raw === '')
|
|
12
|
+
return DEFAULT_SERVER_PORT;
|
|
13
|
+
const port = Number(raw);
|
|
14
|
+
// A typo must not fall back to the default: that is the live server the variable exists to avoid.
|
|
15
|
+
if (!Number.isInteger(port) || port < 1 || port > 65_535)
|
|
16
|
+
throw new Error(`AGENT_VIEW_SERVER_PORT=${raw} is not a port`);
|
|
17
|
+
return port;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.js","sourceRoot":"","sources":["../../src/server/port.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,mBAAmB,GAAG,KAAK,CAAA;AAEjC,8GAA8G;AAC9G,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;AAEzE,qDAAqD;AACrD,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAA;AAE5D,gFAAgF;AAChF,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,KAAK,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC,CAAA;AAEtH,SAAS,UAAU,CAAC,GAAuB;IACzC,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,mBAAmB,CAAA;IAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;IACxB,kGAAkG;IAClG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,gBAAgB,CAAC,CAAA;IACxH,OAAO,IAAI,CAAA;AACb,CAAC"}
|
package/dist/server/server.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAcA,OAAO,EAKL,KAAK,WAAW,EAEhB,KAAK,UAAU,EAKhB,MAAM,iBAAiB,CAAA;AAgExB,+FAA+F;AAC/F,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAK/F;AA6BD,KAAK,YAAY,GACb;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtC,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAIzG;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B5F;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAaxD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAUhG;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
|