tapline-host 1.3.1 → 1.4.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/dist/report.js ADDED
@@ -0,0 +1,298 @@
1
+ import { existsSync, readFileSync, readdirSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ /**
4
+ * AGENT-TOOLS 1.11 §16.1: `session_report` and `tapline report`. Reads the action log (§12), which also holds the
5
+ * agent's reads, and says where the calls went and which of them could have been saved.
6
+ */
7
+ /** Tools that touch the app one step at a time. `run` is its own thing. */
8
+ const ACTION_TOOLS = new Set(["tap", "long_press", "type_text", "toggle", "scroll", "swipe", "back", "open_url", "app_command"]);
9
+ /** Actions that act on an element, so a scroll hunt can end in one. */
10
+ const ELEMENT_TOOLS = new Set(["tap", "long_press", "type_text", "toggle"]);
11
+ export const REPORT_MAX_NUMBERS = 5;
12
+ export const REPORT_DEFAULT_WINDOW_MS = 24 * 3600 * 1000;
13
+ /** Groups the log's agent entries into calls, in order. Entries from before the call log have no call number: each is a call, a batch is one. */
14
+ export function buildCalls(entries) {
15
+ const groups = new Map();
16
+ let legacy = 0;
17
+ for (const entry of entries) {
18
+ if (entry.by !== "agent")
19
+ continue;
20
+ const key = entry.session !== undefined && entry.call !== undefined
21
+ ? `${entry.session}#${entry.call}`
22
+ : entry.batch !== undefined
23
+ ? `legacy-batch-${entry.batch.id}`
24
+ : `legacy#${legacy++}`;
25
+ const group = groups.get(key);
26
+ if (group === undefined)
27
+ groups.set(key, [entry]);
28
+ else
29
+ group.push(entry);
30
+ }
31
+ const calls = [];
32
+ for (const group of groups.values()) {
33
+ const first = group[0];
34
+ if (first === undefined)
35
+ continue;
36
+ const failedEntry = group.find((e) => !e.ok);
37
+ // A call whose actions went through but which failed as a whole (an expectation): failed, with its code.
38
+ const callFailed = failedEntry === undefined ? group.find((e) => e.call_failed !== undefined)?.call_failed : undefined;
39
+ const tool = first.of ?? (group.some((e) => e.batch !== undefined) ? "run" : first.tool);
40
+ const single = group.length === 1 && first.batch === undefined && tool !== "run";
41
+ calls.push({
42
+ n: 0,
43
+ session: first.session ?? "legacy",
44
+ tool,
45
+ ok: failedEntry === undefined && callFailed === undefined,
46
+ ...(failedEntry?.code !== undefined ? { code: failedEntry.code } : callFailed !== undefined ? { code: callFailed } : {}),
47
+ t: Date.parse(first.t),
48
+ listed: group.some((e) => e.listed === true),
49
+ dryRun: group.some((e) => e.dry_run === true),
50
+ ...(single && first.element !== undefined ? { element: first.element } : {}),
51
+ ...(single && first.target !== undefined ? { target: first.target } : {}),
52
+ ...(single && first.in_list !== undefined ? { inList: first.in_list } : {}),
53
+ ...(single && askedPicture(first) ? { askedPicture: true } : {}),
54
+ });
55
+ }
56
+ // Sessions in the order they began; inside one, the call numbers (legacy: the order read).
57
+ const callOf = new Map();
58
+ let position = 0;
59
+ for (const group of groups.values()) {
60
+ const c = group[0]?.call;
61
+ callOf.set(calls[position], c ?? position);
62
+ position++;
63
+ }
64
+ const sessionStart = new Map();
65
+ for (const c of calls)
66
+ sessionStart.set(c.session, Math.min(sessionStart.get(c.session) ?? Infinity, c.t));
67
+ calls.sort((a, b) => (sessionStart.get(a.session) ?? 0) - (sessionStart.get(b.session) ?? 0) ||
68
+ a.session.localeCompare(b.session) ||
69
+ (callOf.get(a) ?? 0) - (callOf.get(b) ?? 0));
70
+ // One session: the numbers the log has. Several: their place in the list, so a number is never two calls.
71
+ const sessions = new Set(calls.map((c) => c.session));
72
+ calls.forEach((c, i) => {
73
+ c.n = sessions.size === 1 && callOf.get(c) !== undefined && c.session !== "legacy" ? callOf.get(c) : i + 1;
74
+ });
75
+ return calls;
76
+ }
77
+ function askedPicture(entry) {
78
+ const asked = entry.look_args;
79
+ return asked !== undefined && (asked.screenshot === true || asked.width !== undefined || asked.labels === true);
80
+ }
81
+ function stringField(target, key) {
82
+ if (typeof target !== "object" || target === null)
83
+ return undefined;
84
+ const value = target[key];
85
+ return typeof value === "string" ? value.trim().toLowerCase() : undefined;
86
+ }
87
+ /** Whether a resolved element line is what the (failed) target asked for: its id, label or text. */
88
+ function sameElement(target, element) {
89
+ if (element === undefined)
90
+ return false;
91
+ const name = /"((?:[^"\\]|\\.)*)"/.exec(element)?.[1]?.trim().toLowerCase();
92
+ const id = /\bid=(\S+)/.exec(element)?.[1]?.toLowerCase();
93
+ const asked = [stringField(target, "id"), stringField(target, "label"), stringField(target, "text")].filter((v) => v !== undefined && v !== "");
94
+ return asked.some((v) => v === name || v === id);
95
+ }
96
+ function splitBySession(calls) {
97
+ const out = [];
98
+ for (const c of calls) {
99
+ const last = out[out.length - 1];
100
+ if (last !== undefined && last[0]?.session === c.session)
101
+ last.push(c);
102
+ else
103
+ out.push([c]);
104
+ }
105
+ return out;
106
+ }
107
+ export function analyze(calls) {
108
+ const counts = new Map();
109
+ const codes = new Map();
110
+ let failed = 0;
111
+ for (const c of calls) {
112
+ counts.set(c.tool, (counts.get(c.tool) ?? 0) + 1);
113
+ if (!c.ok) {
114
+ failed++;
115
+ const code = c.code ?? "error";
116
+ codes.set(code, (codes.get(code) ?? 0) + 1);
117
+ }
118
+ }
119
+ const byCount = (a, b) => b[1] - a[1] || a[0].localeCompare(b[0]);
120
+ // the earliest and the latest call: with several sessions the list is in session order, not time order
121
+ const times = calls.map((c) => c.t);
122
+ const first = times.length > 0 ? times.reduce((a, b) => Math.min(a, b)) : undefined;
123
+ const last = times.length > 0 ? times.reduce((a, b) => Math.max(a, b)) : undefined;
124
+ const minutes = first !== undefined && last !== undefined ? Math.max(1, Math.round((last - first) / 60000)) : 0;
125
+ const looks = [];
126
+ const retries = [];
127
+ const hunts = [];
128
+ const chains = [];
129
+ for (const seq of splitBySession(calls)) {
130
+ for (let i = 0; i < seq.length; i++) {
131
+ const c = seq[i];
132
+ const prev = seq[i - 1];
133
+ // 1. a look right after an action whose answer had the changes
134
+ if (c.tool === "look" && prev !== undefined && (ACTION_TOOLS.has(prev.tool) || prev.tool === "run") && prev.ok && prev.listed && !prev.dryRun && c.askedPicture !== true) {
135
+ looks.push(c.n);
136
+ }
137
+ // 2. a retry after not_found that found the same element by another target
138
+ if (!c.ok && c.code === "not_found" && ELEMENT_TOOLS.has(c.tool) && c.target !== undefined) {
139
+ for (let j = i + 1; j <= i + 3 && j < seq.length; j++) {
140
+ const r = seq[j];
141
+ if (r.tool !== c.tool || !r.ok)
142
+ continue;
143
+ if (JSON.stringify(r.target) !== JSON.stringify(c.target) && sameElement(c.target, r.element))
144
+ retries.push(r.n);
145
+ break;
146
+ }
147
+ }
148
+ }
149
+ // 3. a scroll hunt: 3 or more scrolls in a row, then an action on an element
150
+ for (let i = 0; i < seq.length;) {
151
+ if (seq[i].tool !== "scroll") {
152
+ i++;
153
+ continue;
154
+ }
155
+ let end = i;
156
+ while (end < seq.length && seq[end].tool === "scroll")
157
+ end++;
158
+ const next = seq[end];
159
+ if (end - i >= 3 && next !== undefined && ELEMENT_TOOLS.has(next.tool) && next.ok && next.inList !== false) {
160
+ hunts.push({ from: seq[i].n, to: next.n, exact: next.inList === true });
161
+ }
162
+ i = end;
163
+ }
164
+ // 4. 3 or more actions back to back with no answer read in between (a scroll or a failure ends the chain)
165
+ for (let i = 0; i < seq.length;) {
166
+ const c = seq[i];
167
+ if (!(ACTION_TOOLS.has(c.tool) && c.tool !== "scroll" && c.ok)) {
168
+ i++;
169
+ continue;
170
+ }
171
+ let end = i;
172
+ while (end < seq.length) {
173
+ const e = seq[end];
174
+ if (!(ACTION_TOOLS.has(e.tool) && e.tool !== "scroll" && e.ok))
175
+ break;
176
+ end++;
177
+ }
178
+ if (end - i >= 3)
179
+ chains.push({ from: c.n, to: seq[end - 1].n });
180
+ i = end;
181
+ }
182
+ }
183
+ const flags = [];
184
+ const numbers = (items) => `${items.slice(0, REPORT_MAX_NUMBERS).join(", ")}${items.length > REPORT_MAX_NUMBERS ? ", …" : ""}`;
185
+ const range = (r) => (r.from === r.to ? String(r.from) : `${r.from}–${r.to}`);
186
+ if (looks.length > 0) {
187
+ flags.push({
188
+ text: `${looks.length} ${looks.length === 1 ? "look" : "looks"} right after an action whose answer already had the changes (calls ${numbers(looks.map(String))})`,
189
+ });
190
+ }
191
+ if (retries.length > 0) {
192
+ flags.push({
193
+ text: `${retries.length} ${retries.length === 1 ? "retry" : "retries"} after not_found that found the same element by another target (calls ${numbers(retries.map(String))}): use its id first`,
194
+ });
195
+ }
196
+ if (hunts.length > 0) {
197
+ const maybe = hunts.filter((h) => !h.exact).length;
198
+ const tag = maybe === 0 ? "" : maybe === hunts.length ? " (maybe)" : ` (${maybe} maybe)`;
199
+ flags.push({
200
+ text: `${hunts.length} scroll ${hunts.length === 1 ? "hunt" : "hunts"}${tag} of 3 or more scrolls for an element already in the list (calls ${numbers(hunts.map(range))}): let the action scroll`,
201
+ });
202
+ }
203
+ if (chains.length > 0) {
204
+ flags.push({
205
+ text: `${chains.length} ${chains.length === 1 ? "run" : "runs"} of 3 or more actions with no answer read in between (calls ${numbers(chains.map(range))}): one run each`,
206
+ });
207
+ }
208
+ return {
209
+ calls: calls.length,
210
+ minutes,
211
+ toolCounts: [...counts].sort(byCount),
212
+ failed,
213
+ failedCodes: [...codes].sort(byCount),
214
+ flags,
215
+ };
216
+ }
217
+ const MAX_TOOLS_SHOWN = 8;
218
+ export function formatReport(report) {
219
+ if (report.calls === 0)
220
+ return "Session: 0 calls.\nWaste: none.";
221
+ const shown = report.toolCounts.slice(0, MAX_TOOLS_SHOWN).map(([tool, n]) => `${tool} ${n}`);
222
+ if (report.toolCounts.length > MAX_TOOLS_SHOWN)
223
+ shown.push("…");
224
+ const failed = report.failed === 0 ? "Failed: 0." : `Failed: ${report.failed} (${report.failedCodes.map(([code, n]) => `${code} ${n}`).join(", ")}).`;
225
+ const head = `Session: ${report.calls} ${report.calls === 1 ? "call" : "calls"} in ${report.minutes} min (${shown.join(", ")}). ${failed}`;
226
+ if (report.flags.length === 0)
227
+ return `${head}\nWaste: none.`;
228
+ return [head, "Waste:", ...report.flags.map((f) => `- ${f.text}`)].join("\n");
229
+ }
230
+ // ---- reading the log ---------------------------------------------------------
231
+ function isEntry(value) {
232
+ if (typeof value !== "object" || value === null)
233
+ return false;
234
+ const v = value;
235
+ return typeof v["t"] === "string" && typeof v["tool"] === "string" && typeof v["ok"] === "boolean" && (v["by"] === "agent" || v["by"] === "person") && Number.isFinite(Date.parse(v["t"]));
236
+ }
237
+ /** The log's entries from `sinceMs` on, oldest first. A line that isn't an entry is skipped. Never throws. */
238
+ export function readLogEntries(dir, sinceMs) {
239
+ const out = [];
240
+ try {
241
+ if (!existsSync(dir))
242
+ return out;
243
+ // A file is named by its UTC day; one day before `since` covers its edge.
244
+ const earliest = new Date(sinceMs - 24 * 3600 * 1000).toISOString().slice(0, 10);
245
+ const files = readdirSync(dir)
246
+ .filter((name) => /^actions-\d{4}-\d{2}-\d{2}\.jsonl$/.test(name) && name.slice(8, 18) >= earliest)
247
+ .sort();
248
+ for (const name of files) {
249
+ for (const line of readFileSync(join(dir, name), "utf8").split("\n")) {
250
+ if (line.trim() === "")
251
+ continue;
252
+ try {
253
+ const parsed = JSON.parse(line);
254
+ if (isEntry(parsed) && Date.parse(parsed.t) >= sinceMs)
255
+ out.push(parsed);
256
+ }
257
+ catch {
258
+ // a half-written line
259
+ }
260
+ }
261
+ }
262
+ }
263
+ catch {
264
+ // an unreadable folder is an empty log
265
+ }
266
+ return out;
267
+ }
268
+ /** The report text for a log folder: `since` on, optionally only one session's calls. */
269
+ export function reportFor(dir, sinceMs, onlySession) {
270
+ const entries = readLogEntries(dir, sinceMs).filter((e) => onlySession === undefined || e.session === onlySession);
271
+ return formatReport(analyze(buildCalls(entries)));
272
+ }
273
+ /** `--since`: epoch ms, an ISO date or time, or how long ago (`90m`, `2h`, `1d`). Null when it isn't one. */
274
+ export function parseSince(raw, now) {
275
+ const text = raw.trim();
276
+ const relative = /^(\d+(?:\.\d+)?)\s*([smhd])$/i.exec(text);
277
+ if (relative !== null) {
278
+ const unit = { s: 1000, m: 60_000, h: 3_600_000, d: 86_400_000 }[relative[2].toLowerCase()];
279
+ return now - Number(relative[1]) * unit;
280
+ }
281
+ if (/^\d{10,}$/.test(text))
282
+ return Number(text);
283
+ const parsed = Date.parse(text);
284
+ return Number.isFinite(parsed) ? parsed : null;
285
+ }
286
+ /** `tapline report [--since <time>]`: the text to print and the exit code. */
287
+ export function runReport(options) {
288
+ const now = options.now ?? Date.now();
289
+ let since = now - REPORT_DEFAULT_WINDOW_MS;
290
+ if (options.since !== undefined) {
291
+ const parsed = parseSince(options.since, now);
292
+ if (parsed === null)
293
+ return { text: `--since is a time: 90m, 2h, 1d, an ISO date or epoch milliseconds, not "${options.since}"`, code: 1 };
294
+ since = parsed;
295
+ }
296
+ return { text: reportFor(options.dir, since), code: 0 };
297
+ }
298
+ //# sourceMappingURL=report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"}
package/dist/run.js CHANGED
@@ -7,7 +7,7 @@ import { z } from "zod";
7
7
  */
8
8
  export const RUN_TOOLS = ["tap", "long_press", "type_text", "scroll", "toggle", "back", "swipe", "open_url", "wait", "wait_for", "app_command", "compare_screen", "performance"];
9
9
  /** Tools a step may not be (they read or manage, rather than act): `bad_params`. */
10
- export const NOT_IN_RUN = ["look", "run", "audit", "apps", "viewer", "record", "replay", "inspect", "check_layout", "pair", "open_app", "logs", "crash", "reload", "filmstrip"];
10
+ export const NOT_IN_RUN = ["look", "run", "audit", "apps", "viewer", "record", "replay", "inspect", "check_layout", "pair", "open_app", "logs", "crash", "reload", "filmstrip", "session_report"];
11
11
  /** AGENT-TOOLS §15.3: the limits a `performance` step may carry in `expect.under`. */
12
12
  export const UNDER_KEYS = ["launch_s", "memory_mb", "js_heap_mb", "cpu_percent", "fps_min", "drops", "busy_ms"];
13
13
  /** Limits Tapline can't measure: ignored with a note, one per key. */
package/dist/run.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
@@ -85,6 +85,7 @@ export declare const EXTRA_TOOL_TEXT: {
85
85
  readonly crash: "The app's newest crash (`all: true`: the last 5): when, the error, and the top frames with the app's own marked `*`. An answer whose call made the app stop already says `Note: the app crashed: …`.";
86
86
  readonly performance: "How the app performs: `launch: true` measures opening it; otherwise it measures for `seconds` (default 3), after tapping `tap` if given. Answers the time and the memory, CPU and frames the tool can measure (fps and drops over 50 ms), and names what it couldn't. In `run` and scripts, `expect: {\"under\": {\"launch_s\": 2, \"drops\": 0}}` on a `performance` step makes it a check.";
87
87
  readonly reload: "Reload the JavaScript bundle (development builds only), wait for the app to reconnect, and answer the screen. If it isn't back in time, it says so: `look` again shortly. Other builds answer `unsupported`.";
88
- readonly app_command: "Without `name`, lists the commands the app offers for testing (switch language, sign in as a test user, load sample data). With `name` and `args`, runs one and answers its result and what changed. Built in: `appearance` (`light`, `dark`, `system`).";
88
+ readonly app_command: "Without `name`, lists the commands the app offers for testing (switch language, sign in as a test user, load sample data). With `name` and `args`, runs one and answers its result and what changed. Built in: `appearance` (`light`, `dark`, `system`) and `network` (`offline`, `3g`, `lossy`, `normal`: the app's own requests only, back to normal by itself when the session ends). Standard names the app may provide: `language`, `region` and `text_size` (`{ language: \"ar\" }`, `{ region: \"QA\" }`, `{ size: \"xl\" }`: `xs`…`xxxl`, `ax1`–`ax5`, `l` the phone's default, `system` the phone's own).";
89
+ readonly session_report: "Where this session's calls went: calls per tool, failures by code, and waste to cut, each with the call numbers: looks right after an answer that already had the changes, retries after `not_found`, scroll hunts, and runs of actions that could have been one `run`. `since` (epoch ms) narrows it. Read it after a long session, and before writing the next one.";
89
90
  readonly pair: "Connect the user's phone. A development build that loads its JavaScript from this computer asks by itself within a few seconds: the user only taps Connect, and no `scheme` is needed. For TestFlight and release builds, pass the app's URL `scheme` to get a pairing link and QR code (valid 10 minutes, works once) and show the user the QR code.";
90
91
  };
@@ -87,7 +87,8 @@ export const EXTRA_TOOL_TEXT = {
87
87
  "crash": "The app's newest crash (`all: true`: the last 5): when, the error, and the top frames with the app's own marked `*`. An answer whose call made the app stop already says `Note: the app crashed: …`.",
88
88
  "performance": "How the app performs: `launch: true` measures opening it; otherwise it measures for `seconds` (default 3), after tapping `tap` if given. Answers the time and the memory, CPU and frames the tool can measure (fps and drops over 50 ms), and names what it couldn't. In `run` and scripts, `expect: {\"under\": {\"launch_s\": 2, \"drops\": 0}}` on a `performance` step makes it a check.",
89
89
  "reload": "Reload the JavaScript bundle (development builds only), wait for the app to reconnect, and answer the screen. If it isn't back in time, it says so: `look` again shortly. Other builds answer `unsupported`.",
90
- "app_command": "Without `name`, lists the commands the app offers for testing (switch language, sign in as a test user, load sample data). With `name` and `args`, runs one and answers its result and what changed. Built in: `appearance` (`light`, `dark`, `system`).",
90
+ "app_command": "Without `name`, lists the commands the app offers for testing (switch language, sign in as a test user, load sample data). With `name` and `args`, runs one and answers its result and what changed. Built in: `appearance` (`light`, `dark`, `system`) and `network` (`offline`, `3g`, `lossy`, `normal`: the app's own requests only, back to normal by itself when the session ends). Standard names the app may provide: `language`, `region` and `text_size` (`{ language: \"ar\" }`, `{ region: \"QA\" }`, `{ size: \"xl\" }`: `xs`…`xxxl`, `ax1`–`ax5`, `l` the phone's default, `system` the phone's own).",
91
+ "session_report": "Where this session's calls went: calls per tool, failures by code, and waste to cut, each with the call numbers: looks right after an answer that already had the changes, retries after `not_found`, scroll hunts, and runs of actions that could have been one `run`. `since` (epoch ms) narrows it. Read it after a long session, and before writing the next one.",
91
92
  "pair": "Connect the user's phone. A development build that loads its JavaScript from this computer asks by itself within a few seconds: the user only taps Connect, and no `scheme` is needed. For TestFlight and release builds, pass the app's URL `scheme` to get a pairing link and QR code (valid 10 minutes, works once) and show the user the QR code."
92
93
  };
93
94
  //# sourceMappingURL=tool-text-data.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-text-data.js","sourceRoot":"","sources":["../src/tool-text-data.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAC1G,4FAA4F;AAE5F,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAG,w7JAAw7J,CAAC;AAE19J,0DAA0D;AAC1D,MAAM,CAAC,MAAM,YAAY,GAAG,+jBAA+jB,CAAC;AAE5lB,6GAA6G;AAC7G,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,MAAM,EAAE;QACN,QAAQ,EAAE,wXAAwX;QAClY,SAAS,EAAE,kFAAkF;KAC9F;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,6WAA6W;QACvX,SAAS,EAAE,yCAAyC;KACrD;IACD,YAAY,EAAE;QACZ,QAAQ,EAAE,uJAAuJ;QACjK,SAAS,EAAE,qDAAqD;KACjE;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,kXAAkX;QAC5X,SAAS,EAAE,uDAAuD;KACnE;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,iYAAiY;QAC3Y,SAAS,EAAE,wFAAwF;KACpG;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,sLAAsL;QAChM,SAAS,EAAE,uCAAuC;KACnD;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,2KAA2K;QACrL,SAAS,EAAE,6DAA6D;KACzE;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,4FAA4F;QACtG,SAAS,EAAE,gGAAgG;KAC5G;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,oLAAoL;KAC/L;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,kPAAkP;QAC5P,SAAS,EAAE,4DAA4D;KACxE;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,wFAAwF;QAClG,SAAS,EAAE,iEAAiE;KAC7E;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,6IAA6I;QACvJ,SAAS,EAAE,0IAA0I;KACtJ;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,wKAAwK;QAClL,SAAS,EAAE,+LAA+L;KAC3M;IACD,OAAO,EAAE;QACP,QAAQ,EAAE,6JAA6J;QACvK,SAAS,EAAE,mPAAmP;KAC/P;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,s5BAAs5B;QACh6B,SAAS,EAAE,uEAAuE;KACnF;IACD,OAAO,EAAE;QACP,QAAQ,EAAE,6UAA6U;QACvV,SAAS,EAAE,0NAA0N;KACtO;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,kdAAkd;KAC7d;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,+YAA+Y;QACzZ,SAAS,EAAE,+FAA+F;KAC3G;CACwF,CAAC;AAE5F,4CAA4C;AAC5C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,cAAc,EAAE,2XAA2X;IAC3Y,SAAS,EAAE,gSAAgS;IAC3S,gBAAgB,EAAE,0hBAA0hB;IAC5iB,WAAW,EAAE,sKAAsK;IACnL,MAAM,EAAE,wXAAwX;IAChY,OAAO,EAAE,sMAAsM;IAC/M,aAAa,EAAE,8XAA8X;IAC7Y,QAAQ,EAAE,8MAA8M;IACxN,aAAa,EAAE,0PAA0P;IACzQ,MAAM,EAAE,uVAAuV;CACtT,CAAC"}
1
+ {"version":3,"file":"tool-text-data.js","sourceRoot":"","sources":["../src/tool-text-data.ts"],"names":[],"mappings":"AAAA,0GAA0G;AAC1G,4FAA4F;AAE5F,6EAA6E;AAC7E,MAAM,CAAC,MAAM,iBAAiB,GAAG,w7JAAw7J,CAAC;AAE19J,0DAA0D;AAC1D,MAAM,CAAC,MAAM,YAAY,GAAG,+jBAA+jB,CAAC;AAE5lB,6GAA6G;AAC7G,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,MAAM,EAAE;QACN,QAAQ,EAAE,wXAAwX;QAClY,SAAS,EAAE,kFAAkF;KAC9F;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,6WAA6W;QACvX,SAAS,EAAE,yCAAyC;KACrD;IACD,YAAY,EAAE;QACZ,QAAQ,EAAE,uJAAuJ;QACjK,SAAS,EAAE,qDAAqD;KACjE;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,kXAAkX;QAC5X,SAAS,EAAE,uDAAuD;KACnE;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,iYAAiY;QAC3Y,SAAS,EAAE,wFAAwF;KACpG;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,sLAAsL;QAChM,SAAS,EAAE,uCAAuC;KACnD;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,2KAA2K;QACrL,SAAS,EAAE,6DAA6D;KACzE;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,4FAA4F;QACtG,SAAS,EAAE,gGAAgG;KAC5G;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,oLAAoL;KAC/L;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,kPAAkP;QAC5P,SAAS,EAAE,4DAA4D;KACxE;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,wFAAwF;QAClG,SAAS,EAAE,iEAAiE;KAC7E;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,6IAA6I;QACvJ,SAAS,EAAE,0IAA0I;KACtJ;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,wKAAwK;QAClL,SAAS,EAAE,+LAA+L;KAC3M;IACD,OAAO,EAAE;QACP,QAAQ,EAAE,6JAA6J;QACvK,SAAS,EAAE,mPAAmP;KAC/P;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,s5BAAs5B;QACh6B,SAAS,EAAE,uEAAuE;KACnF;IACD,OAAO,EAAE;QACP,QAAQ,EAAE,6UAA6U;QACvV,SAAS,EAAE,0NAA0N;KACtO;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,kdAAkd;KAC7d;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,+YAA+Y;QACzZ,SAAS,EAAE,+FAA+F;KAC3G;CACwF,CAAC;AAE5F,4CAA4C;AAC5C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,cAAc,EAAE,2XAA2X;IAC3Y,SAAS,EAAE,gSAAgS;IAC3S,gBAAgB,EAAE,0hBAA0hB;IAC5iB,WAAW,EAAE,sKAAsK;IACnL,MAAM,EAAE,wXAAwX;IAChY,OAAO,EAAE,sMAAsM;IAC/M,aAAa,EAAE,8XAA8X;IAC7Y,QAAQ,EAAE,8MAA8M;IACxN,aAAa,EAAE,olBAAolB;IACnmB,gBAAgB,EAAE,uWAAuW;IACzX,MAAM,EAAE,uVAAuV;CACtT,CAAC"}
package/dist/tools.d.ts CHANGED
@@ -270,6 +270,9 @@ export declare const toolShapes: {
270
270
  readonly seconds: z.ZodNumber;
271
271
  readonly screenshot: z.ZodOptional<z.ZodBoolean>;
272
272
  };
273
+ readonly session_report: {
274
+ readonly since: z.ZodOptional<z.ZodNumber>;
275
+ };
273
276
  readonly run: {
274
277
  readonly steps: z.ZodArray<z.ZodObject<{
275
278
  tool: z.ZodString;
@@ -316,6 +319,8 @@ export interface ToolsOptions {
316
319
  pairedBefore?: () => boolean;
317
320
  /** Where the action log goes (AGENT-TOOLS 1.8 §12); none: no log. */
318
321
  logDir?: string;
322
+ /** The agent's client id for the call log (the MCP client's name); read at each call, as it is known after initialize. */
323
+ clientId?: () => string | undefined;
319
324
  /** The safety policy (AGENT-TOOLS 1.8 §11). Default: the built-in words; --no-policy passes empty lists. */
320
325
  policy?: PolicyFile;
321
326
  /** Where a person's OK is asked for and given (the live viewer listens). Default: a fresh one. */
@@ -335,6 +340,9 @@ export interface ToolsOptions {
335
340
  reloadWaitMs?: number;
336
341
  /** Extra delay after a reload before looking. Default 1500 ms. */
337
342
  reloadSettleMs?: number;
343
+ /** compare_screen waits for two pictures in a row to agree: the gap between them and the cap (ms; tests set them low). */
344
+ stillGapMs?: number;
345
+ stillCapMs?: number;
338
346
  /**
339
347
  * How `look` delivers screenshots: "inline" puts the image in the tool result; "file" saves it
340
348
  * and returns only its path, so a lead agent can hand it to a smaller model without seeing it.
@@ -396,9 +404,28 @@ export declare class TaplineTools {
396
404
  private batch;
397
405
  /** Extra fields for the next log line (a dry run, a confirmed touch). */
398
406
  private logExtra;
407
+ /** The call log (AGENT-TOOLS 1.11 §16.1): this run's id, when it began, and how many calls the agent has made. */
408
+ private readonly sessionTag;
409
+ private readonly startedAt;
410
+ private callCount;
411
+ /** The call in flight (and everything it awaits): its log entries wait here for the size of its answer. */
412
+ private readonly callScope;
413
+ private clientIdFn;
414
+ /** The tool of the previous call, for scroll runs. */
415
+ private prevCallTool;
416
+ /**
417
+ * The latest full element list the agent was given. `stale`: only changes since. `unseen`: an action since then
418
+ * answered with no list and no changes (`look: false`), so the screen may be another one: neither "in the
419
+ * list" nor "not in it" can be said until a list is seen again.
420
+ */
421
+ private listBase;
422
+ /** The list as it was before the current run of scrolls began. */
423
+ private scrollBase;
399
424
  readonly confirmations: Confirmations;
400
425
  private readonly policy;
401
426
  private readonly reloadSettleMs;
427
+ private readonly stillGapMs;
428
+ private readonly stillCapMs;
402
429
  private readonly noScreenshot;
403
430
  private readonly shotFiles;
404
431
  /** Sessions this agent has had an element list for (so later lists can be just the changes). */
@@ -437,6 +464,20 @@ export declare class TaplineTools {
437
464
  /** Set inside a tool call (and everything it awaits), so a call within a call (`run`'s steps) adds no notes. */
438
465
  private readonly noteScope;
439
466
  constructor(host: TaplineHost, options: ToolsOptions);
467
+ /** The agent's client id for the call log; the MCP server passes the client's name once it is known. */
468
+ setClientId(read: () => string | undefined): void;
469
+ /** A call refused before it reached its tool (an unknown argument): numbered and logged like any other, so the report counts it. */
470
+ rejectedCall(tool: string, args: unknown, answer: CallToolResult): CallToolResult;
471
+ /** Numbers a call of the agent and logs it when its answer is known (§16.1). Calls within a call (`run`'s steps) are part of it. */
472
+ private loggedCall;
473
+ private flushCall;
474
+ /**
475
+ * Whether a touch's target was in the list the agent had before its run of scrolls: true (it was), false (it
476
+ * wasn't), undefined (can't be known: no list, a point, or a list that only changed since).
477
+ */
478
+ private knownBeforeScrolls;
479
+ /** `session_report` (AGENT-TOOLS 1.11 §16.1): where this session's calls went, and the waste in them. */
480
+ sessionReport(args?: Shape<"session_report">): CallToolResult;
440
481
  /**
441
482
  * Runs a tool call and ends its answer with a note when the app stopped (AGENT-TOOLS 15.2): during this
442
483
  * call, or earlier, with its time, once. Calls inside a call (`run`'s steps) add nothing of their own.
@@ -499,6 +540,8 @@ export declare class TaplineTools {
499
540
  private lookParts;
500
541
  /** The one-time note that a person used the app, as note lines (empty when already said). */
501
542
  private takePersonNote;
543
+ /** An action answered with no list and no changes: the call log can't say what is in the list any more. */
544
+ private markListUnseen;
502
545
  /** Runs a request, then (unless disabled) appends the fresh element list and how long the app took to settle. */
503
546
  private act;
504
547
  /**
@@ -548,6 +591,12 @@ export declare class TaplineTools {
548
591
  private referencesDirs;
549
592
  /** In a replay, a failed check leaves its red picture at `<script>.diff/<name>.jpg`. */
550
593
  private keepDiff;
594
+ /**
595
+ * A picture of the screen once it stopped moving: two in a row about 150 ms apart that agree (under 0.1% changed),
596
+ * at most 2 s. The app's settle sees React commits, not a native transition, so a screen pushed by the action before
597
+ * can still be sliding in (found on the phone, 2026-11-12). Past the cap, the last picture.
598
+ */
599
+ private stillShot;
551
600
  /** Takes the screen and saves it as the reference `name` in `dir`. */
552
601
  private saveReferenceHere;
553
602
  private writeReference;