@jobshimo/browser-link 0.42.0 → 0.43.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 (46) hide show
  1. package/README.md +16 -0
  2. package/dist/activity/db.js +18 -0
  3. package/dist/activity/db.js.map +1 -1
  4. package/dist/activity/extract.d.ts +18 -2
  5. package/dist/activity/extract.js +122 -1
  6. package/dist/activity/extract.js.map +1 -1
  7. package/dist/activity/queries.d.ts +1 -1
  8. package/dist/activity/queries.js +20 -4
  9. package/dist/activity/queries.js.map +1 -1
  10. package/dist/activity/summary.d.ts +54 -0
  11. package/dist/activity/summary.js +95 -0
  12. package/dist/activity/summary.js.map +1 -0
  13. package/dist/activity/types.d.ts +30 -0
  14. package/dist/activity/types.js +31 -1
  15. package/dist/activity/types.js.map +1 -1
  16. package/dist/cli.js +18 -2
  17. package/dist/cli.js.map +1 -1
  18. package/dist/commands/activity.d.ts +5 -0
  19. package/dist/commands/activity.js +92 -1
  20. package/dist/commands/activity.js.map +1 -1
  21. package/dist/commands/config.d.ts +14 -0
  22. package/dist/commands/config.js +48 -4
  23. package/dist/commands/config.js.map +1 -1
  24. package/dist/config.d.ts +10 -0
  25. package/dist/config.js.map +1 -1
  26. package/dist/extension/manifest.json +1 -1
  27. package/dist/manual/topics.js +2 -2
  28. package/dist/manual/topics.js.map +1 -1
  29. package/dist/map/db.js +26 -0
  30. package/dist/map/db.js.map +1 -1
  31. package/dist/map/learning.d.ts +81 -0
  32. package/dist/map/learning.js +244 -0
  33. package/dist/map/learning.js.map +1 -0
  34. package/dist/map/queries.d.ts +45 -0
  35. package/dist/map/queries.js +108 -5
  36. package/dist/map/queries.js.map +1 -1
  37. package/dist/map/tools.js +2 -1
  38. package/dist/map/tools.js.map +1 -1
  39. package/dist/server.js +9 -0
  40. package/dist/server.js.map +1 -1
  41. package/dist/tools/browser-definitions.js +15 -1
  42. package/dist/tools/browser-definitions.js.map +1 -1
  43. package/dist/tools/browser-dispatch.d.ts +10 -0
  44. package/dist/tools/browser-dispatch.js +88 -18
  45. package/dist/tools/browser-dispatch.js.map +1 -1
  46. package/package.json +1 -1
package/README.md CHANGED
@@ -115,6 +115,22 @@ browser-link map export --out map.json # back up the map as JSON
115
115
  browser-link map import map.json # restore it (merge by default, --replace to overwrite)
116
116
  ```
117
117
 
118
+ ### The map learns by itself
119
+
120
+ Every click, type, press, find and wait_for an agent runs on a CSS selector
121
+ or a `browser.find` semantic key adds an ok or a failure (with a fixed reason
122
+ such as `not-found` or `retargeted`) to that target's counters, per app and
123
+ route. Agents see it as `learned` in `browser.map.recall` and in the
124
+ `list_tabs` map hint, failures first. **Targets only, never values**: typed
125
+ text, evaluate expressions and pressed keys are never read. At most 200
126
+ learned targets per app. On by default; `browser-link config set
127
+ map-learning off` stops it without a restart.
128
+
129
+ For what went wrong in a session, agents call `browser.activity({ summary:
130
+ true })` and you run `browser-link activity report [--since <duration|iso>]
131
+ [--agent <id>]`: errors and flagged calls by flag, by tool, the top failing
132
+ selectors and one line per agent session.
133
+
118
134
  > **Privacy note.** An export can contain UI structure and flow steps an
119
135
  > agent saved — selectors, page notes, multi-step recipes. Review a file
120
136
  > before sharing it. The map is designed so agents never write real domain
@@ -63,6 +63,24 @@ function runMigrations(db) {
63
63
  CREATE INDEX IF NOT EXISTS idx_activity_flow ON activity(flow_id);
64
64
  CREATE INDEX IF NOT EXISTS idx_activity_agent ON activity(agent);
65
65
  `);
66
+ // Columns added after the table first shipped. `ADD COLUMN` has no
67
+ // IF NOT EXISTS form, so each one is guarded by `table_info`: a reopen is a
68
+ // no-op, and an upgraded file keeps every stored row exactly as it was —
69
+ // the new columns read back NULL for history, never a guessed value.
70
+ // Nullable with no CHECK on purpose: SQLite cannot alter a CHECK later, so
71
+ // the closed `flag` enum is enforced by `record` (see `ACTIVITY_FLAGS`).
72
+ const present = new Set(db.prepare('PRAGMA table_info(activity)').all().map((c) => c.name));
73
+ for (const [column, ddl] of [
74
+ ['flag', 'ALTER TABLE activity ADD COLUMN flag TEXT'],
75
+ ['agent_id', 'ALTER TABLE activity ADD COLUMN agent_id TEXT'],
76
+ ]) {
77
+ if (!present.has(column))
78
+ db.exec(ddl);
79
+ }
80
+ db.exec(`
81
+ CREATE INDEX IF NOT EXISTS idx_activity_flag ON activity(flag);
82
+ CREATE INDEX IF NOT EXISTS idx_activity_agent_id ON activity(agent_id);
83
+ `);
66
84
  }
67
85
  /**
68
86
  * AUTOINCREMENT on the primary key is deliberate, and it is the reason the
@@ -1 +1 @@
1
- {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/activity/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,IAAI,UAAU,GAA6B,IAAI,CAAC;AAEhD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAE1B,MAAM,UAAU,aAAa;IAC3B,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,UAAU,GAAG,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB;IAC1C,yEAAyE;IACzE,wEAAwE;IACxE,gCAAgC;IAChC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;GAuBP,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,EAAqB,EAAE,KAAK,GAAG,KAAK;IAC7D,iBAAiB,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,IAAI,iBAAiB,GAAG,cAAc;QAAE,OAAO,CAAC,CAAC;IAC3D,iBAAiB,GAAG,CAAC,CAAC;IACtB,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CACN;;aAEO,CACR;SACA,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,UAAU;QAAE,OAAO;IACxB,UAAU,CAAC,KAAK,EAAE,CAAC;IACnB,UAAU,GAAG,IAAI,CAAC;IAClB,iBAAiB,GAAG,CAAC,CAAC;AACxB,CAAC"}
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/activity/db.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,IAAI,UAAU,GAA6B,IAAI,CAAC;AAEhD;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,IAAI,iBAAiB,GAAG,CAAC,CAAC;AAE1B,MAAM,UAAU,aAAa;IAC3B,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,MAAM,IAAI,GAAG,iBAAiB,EAAE,CAAC;IACjC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC9B,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,UAAU,GAAG,EAAE,CAAC;IAChB,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,EAAqB;IAC1C,yEAAyE;IACzE,wEAAwE;IACxE,gCAAgC;IAChC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;GAuBP,CAAC,CAAC;IAEH,mEAAmE;IACnE,4EAA4E;IAC5E,yEAAyE;IACzE,qEAAqE;IACrE,2EAA2E;IAC3E,yEAAyE;IACzE,MAAM,OAAO,GAAG,IAAI,GAAG,CACpB,EAAE,CAAC,OAAO,CAAC,6BAA6B,CAAC,CAAC,GAAG,EAAyB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAC3F,CAAC;IACF,KAAK,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI;QAC1B,CAAC,MAAM,EAAE,2CAA2C,CAAC;QACrD,CAAC,UAAU,EAAE,+CAA+C,CAAC;KACrD,EAAE,CAAC;QACX,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,EAAE,CAAC,IAAI,CAAC;;;GAGP,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,UAAU,CAAC,EAAqB,EAAE,KAAK,GAAG,KAAK;IAC7D,iBAAiB,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,IAAI,iBAAiB,GAAG,cAAc;QAAE,OAAO,CAAC,CAAC;IAC3D,iBAAiB,GAAG,CAAC,CAAC;IACtB,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CACN;;aAEO,CACR;SACA,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC1B,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,UAAU;QAAE,OAAO;IACxB,UAAU,CAAC,KAAK,EAAE,CAAC;IACnB,UAAU,GAAG,IAAI,CAAC;IAClB,iBAAiB,GAAG,CAAC,CAAC;AACxB,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ActivityInput, ActivityTransport } from './types.js';
1
+ import type { ActivityFlag, ActivityInput, ActivityTransport } from './types.js';
2
2
  import type { AgentCaller } from '../tools/tab-claims.js';
3
3
  export declare function extractSelector(tool: string, args: unknown): string | null;
4
4
  export declare function extractPayload(tool: string, args: unknown): string | null;
@@ -25,8 +25,24 @@ export interface BuildRowInput {
25
25
  /** False when `activity.record-payloads` is off: the row is still written,
26
26
  * with its shape intact, minus the free text. */
27
27
  recordPayloads: boolean;
28
+ /** The resolved tool response, when the call did not throw. Read only to
29
+ * classify `flag`; never stored. */
30
+ result?: unknown;
31
+ /** IPC session uuid of the caller; `'primary'` when absent. */
32
+ agentId?: string | null;
28
33
  }
34
+ /**
35
+ * Classify one call. `error` is the thrown value (undefined on success);
36
+ * `result` is the resolved response — an MCP `{ content: [...] }` envelope as
37
+ * `dispatchBrowserTool` returns it, or a raw result object. Total and
38
+ * throw-free: anything unreadable is simply "no flag".
39
+ */
40
+ export declare function classifyFlag(tool: string, _args: unknown, result: unknown, error: unknown): ActivityFlag | null;
29
41
  /** Assemble the row. Deliberately total — every branch returns something
30
42
  * storable, because a tool call that produced a row we could not describe is
31
43
  * still a tool call that happened. */
32
- export declare function buildRow({ tool, args, caller, durationMs, error, recordPayloads, }: BuildRowInput): ActivityInput;
44
+ export declare function buildRow({ tool, args, caller, durationMs, error, recordPayloads, result, agentId, }: BuildRowInput): ActivityInput;
45
+ /** `buildRow` with the arguments split out — the signature the dispatcher's
46
+ * `writeTrail` calls. `meta` is `BuildRowInput` minus `args`, so a caller on
47
+ * the previous shape (no `result`, no `agentId`) keeps compiling. */
48
+ export declare function buildActivityRow(args: unknown, meta: Omit<BuildRowInput, 'args'>): ActivityInput;
@@ -96,10 +96,123 @@ export function agentNameFor(caller) {
96
96
  return caller.label;
97
97
  return caller.binary && caller.binary.length > 0 ? caller.binary : null;
98
98
  }
99
+ /* ---------------------------------------------------------- flags ------
100
+ *
101
+ * A trail of bare `ok`/`error` loses the most useful evidence: calls that
102
+ * RESOLVED but did not do what was asked (`wait_for` matched nothing, a flow
103
+ * ran out of time, a click landed on another element). `classifyFlag` names
104
+ * that friction, and the well-known thrown failures, with a closed enum so a
105
+ * report can GROUP BY it instead of regexing error text.
106
+ */
107
+ /** Thrown (or `isError`) messages, matched in order. The strings are the
108
+ * stable prefixes the transports emit: `ref-stale:` (`flow.ts`), the
109
+ * retargeted click message (`retargetedClickMessage`), `expectation not met`
110
+ * (`cdp/expect.ts`), the bridge's `Tool '<name>' timed out` and `Element not found:`
111
+ * (the same not-found rule the map learner applies, see map/learning.ts). */
112
+ const ERROR_FLAGS = [
113
+ [/\bref-stale\b/, 'ref-stale'],
114
+ [/\bretargeted\b|\bClick would land on\b/, 'retargeted'],
115
+ [/\bexpectation not met\b/, 'expect-failed'],
116
+ [/\bTool '[^']*' timed out\b/, 'timeout'],
117
+ [/^Element not found:/, 'not-found'],
118
+ ];
119
+ /** Tools whose resolved result is worth parsing. Everything else (snapshots,
120
+ * screenshots, list_tabs) can be large and never carries a friction signal,
121
+ * so it is not JSON-parsed on the hot path. */
122
+ const RESULT_TOOLS = new Set([
123
+ 'browser.click',
124
+ 'browser.type',
125
+ 'browser.press',
126
+ 'browser.drag',
127
+ 'browser.find',
128
+ 'browser.wait_for',
129
+ 'browser.flow',
130
+ 'browser.download',
131
+ ]);
132
+ function flagFromMessage(message) {
133
+ for (const [pattern, flag] of ERROR_FLAGS)
134
+ if (pattern.test(message))
135
+ return flag;
136
+ return null;
137
+ }
138
+ /** The first text block of an MCP response, or null when it is not one. */
139
+ function firstText(result) {
140
+ if (typeof result !== 'object' || result === null)
141
+ return null;
142
+ const content = result.content;
143
+ if (!Array.isArray(content))
144
+ return null;
145
+ const block = content[0];
146
+ if (typeof block !== 'object' || block === null)
147
+ return null;
148
+ const text = block.text;
149
+ return typeof text === 'string' ? text : null;
150
+ }
151
+ function isMcpResponse(result) {
152
+ return (typeof result === 'object' &&
153
+ result !== null &&
154
+ Array.isArray(result.content));
155
+ }
156
+ function flagFromData(tool, data) {
157
+ if (typeof data !== 'object' || data === null || Array.isArray(data))
158
+ return null;
159
+ const d = data;
160
+ if (tool === 'browser.flow' && d.stopped_by === 'timeout')
161
+ return 'flow-timeout';
162
+ if (tool === 'browser.download' && (d.state === 'timeout' || d.state === 'interrupted')) {
163
+ return 'download-timeout';
164
+ }
165
+ if (d.matched === false) {
166
+ if (d.reason === 'not-found')
167
+ return 'not-found';
168
+ if (d.reason === 'multiple-matches')
169
+ return 'multiple-matches';
170
+ if (d.reason === 'ref-stale')
171
+ return 'ref-stale';
172
+ return 'unmatched';
173
+ }
174
+ // The click builder reports `hit_element` ONLY when the click lands on an
175
+ // element that is neither the target nor inside it (`buildClickResolveJs`),
176
+ // so its presence on a resolved call is the mismatch itself.
177
+ if (typeof d.hit_element === 'string' && d.hit_element.length > 0)
178
+ return 'hit-mismatch';
179
+ const settle = d.settle;
180
+ if (typeof settle === 'object' && settle !== null) {
181
+ if (settle.settled === false)
182
+ return 'unsettled';
183
+ }
184
+ return null;
185
+ }
186
+ /**
187
+ * Classify one call. `error` is the thrown value (undefined on success);
188
+ * `result` is the resolved response — an MCP `{ content: [...] }` envelope as
189
+ * `dispatchBrowserTool` returns it, or a raw result object. Total and
190
+ * throw-free: anything unreadable is simply "no flag".
191
+ */
192
+ export function classifyFlag(tool, _args, result, error) {
193
+ try {
194
+ if (error !== undefined)
195
+ return flagFromMessage(errorMessage(error));
196
+ if (isMcpResponse(result)) {
197
+ const text = firstText(result);
198
+ if (text === null)
199
+ return null;
200
+ if (result.isError === true)
201
+ return flagFromMessage(text);
202
+ if (!RESULT_TOOLS.has(tool))
203
+ return null;
204
+ return flagFromData(tool, JSON.parse(text));
205
+ }
206
+ return flagFromData(tool, result);
207
+ }
208
+ catch {
209
+ return null;
210
+ }
211
+ }
99
212
  /** Assemble the row. Deliberately total — every branch returns something
100
213
  * storable, because a tool call that produced a row we could not describe is
101
214
  * still a tool call that happened. */
102
- export function buildRow({ tool, args, caller, durationMs, error, recordPayloads, }) {
215
+ export function buildRow({ tool, args, caller, durationMs, error, recordPayloads, result, agentId, }) {
103
216
  const tabId = extractTabId(args);
104
217
  return {
105
218
  tool,
@@ -117,8 +230,16 @@ export function buildRow({ tool, args, caller, durationMs, error, recordPayloads
117
230
  error: error === undefined ? null : errorMessage(error),
118
231
  durationMs,
119
232
  flowId: extractFlowId(args),
233
+ flag: classifyFlag(tool, args, result, error),
234
+ agentId: agentId ?? 'primary',
120
235
  };
121
236
  }
237
+ /** `buildRow` with the arguments split out — the signature the dispatcher's
238
+ * `writeTrail` calls. `meta` is `BuildRowInput` minus `args`, so a caller on
239
+ * the previous shape (no `result`, no `agentId`) keeps compiling. */
240
+ export function buildActivityRow(args, meta) {
241
+ return buildRow({ ...meta, args });
242
+ }
122
243
  function errorMessage(error) {
123
244
  if (error instanceof Error)
124
245
  return error.message;
@@ -1 +1 @@
1
- {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/activity/extract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/activity/extract.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type Database from 'better-sqlite3';
2
- import type { ActivityInput, ActivityPage, ActivityQuery, ActivityRecord } from './types.js';
2
+ import { type ActivityInput, type ActivityPage, type ActivityQuery, type ActivityRecord } from './types.js';
3
3
  /** Hard ceiling on rows a single read can return, whatever `limit` asks for.
4
4
  * The panel pages; nothing needs ten thousand rows in one response, and an
5
5
  * unbounded read is how a renderer freezes a browser. */
@@ -1,6 +1,7 @@
1
1
  import { statSync } from 'node:fs';
2
2
  import { getActivityDb, MAX_ACTIVITY_ROWS, pruneIfDue } from './db.js';
3
3
  import { getActivityDbPath } from './paths.js';
4
+ import { isActivityFlag, } from './types.js';
4
5
  /** Hard ceiling on rows a single read can return, whatever `limit` asks for.
5
6
  * The panel pages; nothing needs ten thousand rows in one response, and an
6
7
  * unbounded read is how a renderer freezes a browser. */
@@ -37,6 +38,8 @@ function toRecord(row) {
37
38
  error: row.error,
38
39
  durationMs: row.duration_ms,
39
40
  flowId: row.flow_id,
41
+ flag: isActivityFlag(row.flag) ? row.flag : null,
42
+ agentId: row.agent_id,
40
43
  };
41
44
  }
42
45
  /**
@@ -51,14 +54,19 @@ export function record(input, db) {
51
54
  try {
52
55
  const handle = db ?? getActivityDb();
53
56
  const at = new Date().toISOString();
57
+ // The flag column is a closed enum enforced here, not by a CHECK: an
58
+ // unknown value is stored as null rather than as free text.
59
+ const flag = isActivityFlag(input.flag) ? input.flag : null;
60
+ const agentId = truncate(input.agentId ?? null, 200);
54
61
  const result = handle
55
62
  .prepare(`INSERT INTO activity
56
63
  (at, tool, tab_id, transport, url, title, agent, agent_pid,
57
- selector, payload, outcome, error, duration_ms, flow_id)
58
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
59
- .run(at, input.tool, input.tabId, input.transport, truncate(input.url), truncate(input.title, 300), input.agent, input.agentPid, truncate(input.selector), truncate(input.payload), input.outcome, truncate(input.error), Math.max(0, Math.round(input.durationMs)), input.flowId);
64
+ selector, payload, outcome, error, duration_ms, flow_id,
65
+ flag, agent_id)
66
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
67
+ .run(at, input.tool, input.tabId, input.transport, truncate(input.url), truncate(input.title, 300), input.agent, input.agentPid, truncate(input.selector), truncate(input.payload), input.outcome, truncate(input.error), Math.max(0, Math.round(input.durationMs)), input.flowId, flag, agentId);
60
68
  pruneIfDue(handle);
61
- return { ...input, id: Number(result.lastInsertRowid), at };
69
+ return { ...input, flag, agentId, id: Number(result.lastInsertRowid), at };
62
70
  }
63
71
  catch {
64
72
  return null;
@@ -98,6 +106,14 @@ function buildFilter(q) {
98
106
  clauses.push('outcome = ?');
99
107
  params.push(q.outcome);
100
108
  }
109
+ if (q.flag !== undefined) {
110
+ clauses.push('flag = ?');
111
+ params.push(q.flag);
112
+ }
113
+ if (q.agentId !== undefined) {
114
+ clauses.push('agent_id = ?');
115
+ params.push(q.agentId);
116
+ }
101
117
  if (q.since !== undefined) {
102
118
  clauses.push('at >= ?');
103
119
  params.push(q.since);
@@ -1 +1 @@
1
- {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/activity/queries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/activity/queries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import type Database from 'better-sqlite3';
2
+ import { type ActivityFlag } from './types.js';
3
+ /**
4
+ * The friction report: what went wrong in a stretch of the trail, and for
5
+ * which session, without reading every row.
6
+ *
7
+ * Everything is a GROUP BY over the stored columns (`flag`, `outcome`, `tool`,
8
+ * `selector`, `agent_id`), so the cost is a handful of aggregate queries
9
+ * regardless of how many rows matched. Consumed by `browser.activity`
10
+ * (`summary: true`) and by `browser-link activity report`; the field names
11
+ * are snake_case because the MCP result is the primary consumer.
12
+ */
13
+ /** Rows the report reads. ANDed; absent means "the whole trail". */
14
+ export interface ActivitySummaryFilters {
15
+ /** Rows at or after this ISO timestamp. */
16
+ since?: string;
17
+ /** Rows with `id` strictly greater than this (same cursor as `query`). */
18
+ sinceId?: number;
19
+ /** Only this session (`agent_id`). */
20
+ agentId?: string;
21
+ }
22
+ export interface FailingTarget {
23
+ selector: string;
24
+ tool: string;
25
+ /** Errored or flagged calls on this selector with this tool. */
26
+ n: number;
27
+ /** Flag of the most recent of those calls (null when it errored unflagged). */
28
+ last_flag: ActivityFlag | null;
29
+ }
30
+ export interface SessionSummary {
31
+ /** IPC session uuid, `'primary'`, or null for rows from before sessions
32
+ * were recorded. */
33
+ agent_id: string | null;
34
+ /** Agent label of the session's most recent row. */
35
+ agent: string | null;
36
+ records: number;
37
+ errors: number;
38
+ flags: Partial<Record<ActivityFlag, number>>;
39
+ }
40
+ export interface ActivitySummary {
41
+ records: number;
42
+ errors: number;
43
+ by_flag: Partial<Record<ActivityFlag, number>>;
44
+ by_tool_errors: Record<string, number>;
45
+ evaluate_calls: number;
46
+ /** Rows flagged `timeout`, `flow-timeout` or `download-timeout`. */
47
+ timeouts: number;
48
+ /** Most failing selector + tool pairs, at most `MAX_FAILING_TARGETS`. */
49
+ top_failing_targets: FailingTarget[];
50
+ /** Most recently active first. */
51
+ sessions: SessionSummary[];
52
+ }
53
+ export declare const MAX_FAILING_TARGETS = 10;
54
+ export declare function summarizeActivity(db?: Database.Database, filters?: ActivitySummaryFilters): ActivitySummary;
@@ -0,0 +1,95 @@
1
+ import { getActivityDb } from './db.js';
2
+ import { isActivityFlag } from './types.js';
3
+ export const MAX_FAILING_TARGETS = 10;
4
+ /** Upper bound on sessions listed. A report is read by a person or an agent's
5
+ * context window; a long-lived data dir can hold thousands of sessions. */
6
+ const MAX_SESSIONS = 50;
7
+ const TIMEOUT_FLAGS = ['timeout', 'flow-timeout', 'download-timeout'];
8
+ function buildWhere(filters) {
9
+ const clauses = [];
10
+ const params = [];
11
+ if (filters.sinceId !== undefined) {
12
+ clauses.push('id > ?');
13
+ params.push(filters.sinceId);
14
+ }
15
+ if (filters.since !== undefined) {
16
+ clauses.push('at >= ?');
17
+ params.push(filters.since);
18
+ }
19
+ if (filters.agentId !== undefined) {
20
+ clauses.push('agent_id = ?');
21
+ params.push(filters.agentId);
22
+ }
23
+ return { clauses, params };
24
+ }
25
+ /** `WHERE` for the base filter plus any extra clauses. */
26
+ function where(base, ...extra) {
27
+ const all = [...base, ...extra];
28
+ return all.length > 0 ? `WHERE ${all.join(' AND ')}` : '';
29
+ }
30
+ function flagCounts(rows) {
31
+ const out = {};
32
+ for (const row of rows)
33
+ if (isActivityFlag(row.flag))
34
+ out[row.flag] = row.n;
35
+ return out;
36
+ }
37
+ export function summarizeActivity(db = getActivityDb(), filters = {}) {
38
+ const { clauses, params } = buildWhere(filters);
39
+ const totals = db
40
+ .prepare(`SELECT COUNT(*) AS records,
41
+ COALESCE(SUM(outcome = 'error'), 0) AS errors,
42
+ COALESCE(SUM(tool = 'browser.evaluate'), 0) AS evaluate_calls,
43
+ COALESCE(SUM(flag IN (${TIMEOUT_FLAGS.map(() => '?').join(', ')})), 0) AS timeouts
44
+ FROM activity ${where(clauses)}`)
45
+ .get(...TIMEOUT_FLAGS, ...params);
46
+ const byFlag = db
47
+ .prepare(`SELECT flag, COUNT(*) AS n FROM activity ${where(clauses, 'flag IS NOT NULL')}
48
+ GROUP BY flag ORDER BY n DESC, flag ASC`)
49
+ .all(...params);
50
+ const byToolErrors = db
51
+ .prepare(`SELECT tool, COUNT(*) AS n FROM activity ${where(clauses, "outcome = 'error'")}
52
+ GROUP BY tool ORDER BY n DESC, tool ASC`)
53
+ .all(...params);
54
+ // SQLite returns the bare `flag` column from the row that holds MAX(id) —
55
+ // documented behaviour for a single MIN/MAX aggregate — which is exactly
56
+ // "the flag of the most recent failure" without a correlated subquery.
57
+ const targets = db
58
+ .prepare(`SELECT selector, tool, COUNT(*) AS n, MAX(id) AS last_id, flag
59
+ FROM activity
60
+ ${where(clauses, 'selector IS NOT NULL', "(outcome = 'error' OR flag IS NOT NULL)")}
61
+ GROUP BY selector, tool ORDER BY n DESC, last_id DESC LIMIT ?`)
62
+ .all(...params, MAX_FAILING_TARGETS);
63
+ const sessions = db
64
+ .prepare(`SELECT agent_id, MAX(id) AS last_id, agent, COUNT(*) AS records,
65
+ COALESCE(SUM(outcome = 'error'), 0) AS errors
66
+ FROM activity ${where(clauses)}
67
+ GROUP BY agent_id ORDER BY last_id DESC LIMIT ?`)
68
+ .all(...params, MAX_SESSIONS);
69
+ const sessionFlags = db
70
+ .prepare(`SELECT agent_id, flag, COUNT(*) AS n FROM activity ${where(clauses, 'flag IS NOT NULL')}
71
+ GROUP BY agent_id, flag ORDER BY n DESC, flag ASC`)
72
+ .all(...params);
73
+ return {
74
+ records: totals.records,
75
+ errors: totals.errors,
76
+ by_flag: flagCounts(byFlag),
77
+ by_tool_errors: Object.fromEntries(byToolErrors.map((r) => [r.tool, r.n])),
78
+ evaluate_calls: totals.evaluate_calls,
79
+ timeouts: totals.timeouts,
80
+ top_failing_targets: targets.map((t) => ({
81
+ selector: t.selector,
82
+ tool: t.tool,
83
+ n: t.n,
84
+ last_flag: isActivityFlag(t.flag) ? t.flag : null,
85
+ })),
86
+ sessions: sessions.map((s) => ({
87
+ agent_id: s.agent_id,
88
+ agent: s.agent,
89
+ records: s.records,
90
+ errors: s.errors,
91
+ flags: flagCounts(sessionFlags.filter((f) => f.agent_id === s.agent_id)),
92
+ })),
93
+ };
94
+ }
95
+ //# sourceMappingURL=summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/activity/summary.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAqB,MAAM,YAAY,CAAC;AAyD/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAEtC;2EAC2E;AAC3E,MAAM,YAAY,GAAG,EAAE,CAAC;AAExB,MAAM,aAAa,GAA4B,CAAC,SAAS,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC;AAE/F,SAAS,UAAU,CAAC,OAA+B;IACjD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AAED,0DAA0D;AAC1D,SAAS,KAAK,CAAC,IAAc,EAAE,GAAG,KAAe;IAC/C,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC;IAChC,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,UAAU,CACjB,IAA0C;IAE1C,MAAM,GAAG,GAA0C,EAAE,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,IAAI;QAAE,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC5E,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAwB,aAAa,EAAE,EACvC,UAAkC,EAAE;IAEpC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IAEhD,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CACN;;;sCAGgC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;uBACtD,KAAK,CAAC,OAAO,CAAC,EAAE,CAClC;SACA,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,MAAM,CAKjC,CAAC;IAEF,MAAM,MAAM,GAAG,EAAE;SACd,OAAO,CACN,4CAA4C,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC;+CACrC,CAC1C;SACA,GAAG,CAAC,GAAG,MAAM,CAAyC,CAAC;IAE1D,MAAM,YAAY,GAAG,EAAE;SACpB,OAAO,CACN,4CAA4C,KAAK,CAAC,OAAO,EAAE,mBAAmB,CAAC;+CACtC,CAC1C;SACA,GAAG,CAAC,GAAG,MAAM,CAAkC,CAAC;IAEnD,0EAA0E;IAC1E,yEAAyE;IACzE,uEAAuE;IACvE,MAAM,OAAO,GAAG,EAAE;SACf,OAAO,CACN;;SAEG,KAAK,CAAC,OAAO,EAAE,sBAAsB,EAAE,yCAAyC,CAAC;qEACrB,CAChE;SACA,GAAG,CAAC,GAAG,MAAM,EAAE,mBAAmB,CAKlC,CAAC;IAEJ,MAAM,QAAQ,GAAG,EAAE;SAChB,OAAO,CACN;;uBAEiB,KAAK,CAAC,OAAO,CAAC;uDACkB,CAClD;SACA,GAAG,CAAC,GAAG,MAAM,EAAE,YAAY,CAK3B,CAAC;IAEJ,MAAM,YAAY,GAAG,EAAE;SACpB,OAAO,CACN,sDAAsD,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC;yDACrC,CACpD;SACA,GAAG,CAAC,GAAG,MAAM,CAAkE,CAAC;IAEnF,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC;QAC3B,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,mBAAmB,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvC,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,CAAC,EAAE,CAAC,CAAC,CAAC;YACN,SAAS,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;SAClD,CAAC,CAAC;QACH,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC7B,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,KAAK,EAAE,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;SACzE,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -45,6 +45,24 @@ export type ActivityOutcome = 'ok' | 'error';
45
45
  * tab (`browser.list_tabs`, `browser.my_tabs`), so the column can be read as
46
46
  * "how this reached the page" rather than being forced to lie. */
47
47
  export type ActivityTransport = 'extension' | 'cdp';
48
+ /**
49
+ * Why a call deserves a second look, beyond its bare `ok`/`error` outcome.
50
+ *
51
+ * Most of these are failures that RESOLVE: a `wait_for` with `matched: false`,
52
+ * a flow that ran out of time, a click whose settle window never went quiet.
53
+ * They come back `ok`, so without this column the trail would record them as
54
+ * successes and the evidence of friction would vanish. The rest name the
55
+ * well-known thrown failures, so a report can count them without regexing
56
+ * error text.
57
+ *
58
+ * Closed on purpose, and enforced in code rather than with a CHECK: `record`
59
+ * stores an unknown value as null so the report never grows a bucket per typo,
60
+ * and growing the list later needs no table rebuild (SQLite cannot alter a
61
+ * CHECK on an existing column).
62
+ */
63
+ export declare const ACTIVITY_FLAGS: readonly ["retargeted", "ref-stale", "expect-failed", "timeout", "unmatched", "not-found", "multiple-matches", "flow-timeout", "download-timeout", "unsettled", "hit-mismatch"];
64
+ export type ActivityFlag = (typeof ACTIVITY_FLAGS)[number];
65
+ export declare function isActivityFlag(value: unknown): value is ActivityFlag;
48
66
  /** One dispatched tool call, as stored. Field order mirrors the table. */
49
67
  export interface ActivityRecord {
50
68
  /** Monotonic rowid. Also the pagination cursor — see `queries.ts`. */
@@ -82,6 +100,15 @@ export interface ActivityRecord {
82
100
  /** Set when this call was a step inside a `browser.flow`, so the window can
83
101
  * group a 40-step flow under one heading instead of flooding the timeline. */
84
102
  flowId: string | null;
103
+ /** Friction classification (see `ActivityFlag`), or null for a clean call
104
+ * and for every row recorded before the column existed. Optional so a
105
+ * caller built against the previous shape still compiles. */
106
+ flag?: ActivityFlag | null;
107
+ /** The IPC session uuid of the calling agent, or `'primary'` for the stdio
108
+ * agent. Unlike `agent` (a label two runs can share) it tells two sessions
109
+ * apart, which is what the per-session report groups by. Null for rows
110
+ * recorded before the column existed. */
111
+ agentId?: string | null;
85
112
  }
86
113
  /** What the recorder is handed. `id` and `at` are assigned on write — a
87
114
  * caller that could choose its own id could also rewrite history. */
@@ -101,6 +128,9 @@ export interface ActivityQuery {
101
128
  tool?: string;
102
129
  flowId?: string;
103
130
  outcome?: ActivityOutcome;
131
+ flag?: ActivityFlag;
132
+ /** Exact session id (`ActivityRecord.agentId`), not the agent label. */
133
+ agentId?: string;
104
134
  /** Rows at or after this ISO timestamp. */
105
135
  since?: string;
106
136
  /** Hard cap on rows returned. Clamped by the query layer — an unbounded
@@ -37,5 +37,35 @@
37
37
  * else is a decision made at export time, once, deliberately — rather
38
38
  * than a decision made silently at record time and impossible to undo.
39
39
  */
40
- export {};
40
+ /**
41
+ * Why a call deserves a second look, beyond its bare `ok`/`error` outcome.
42
+ *
43
+ * Most of these are failures that RESOLVE: a `wait_for` with `matched: false`,
44
+ * a flow that ran out of time, a click whose settle window never went quiet.
45
+ * They come back `ok`, so without this column the trail would record them as
46
+ * successes and the evidence of friction would vanish. The rest name the
47
+ * well-known thrown failures, so a report can count them without regexing
48
+ * error text.
49
+ *
50
+ * Closed on purpose, and enforced in code rather than with a CHECK: `record`
51
+ * stores an unknown value as null so the report never grows a bucket per typo,
52
+ * and growing the list later needs no table rebuild (SQLite cannot alter a
53
+ * CHECK on an existing column).
54
+ */
55
+ export const ACTIVITY_FLAGS = [
56
+ 'retargeted',
57
+ 'ref-stale',
58
+ 'expect-failed',
59
+ 'timeout',
60
+ 'unmatched',
61
+ 'not-found',
62
+ 'multiple-matches',
63
+ 'flow-timeout',
64
+ 'download-timeout',
65
+ 'unsettled',
66
+ 'hit-mismatch',
67
+ ];
68
+ export function isActivityFlag(value) {
69
+ return typeof value === 'string' && ACTIVITY_FLAGS.includes(value);
70
+ }
41
71
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/activity/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/activity/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAYH;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,YAAY;IACZ,WAAW;IACX,eAAe;IACf,SAAS;IACT,WAAW;IACX,WAAW;IACX,kBAAkB;IAClB,cAAc;IACd,kBAAkB;IAClB,WAAW;IACX,cAAc;CACN,CAAC;AAIX,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAK,cAAoC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5F,CAAC"}