@jobshimo/browser-link 0.19.1 → 0.21.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/README.md +74 -70
- package/dist/agent-instructions/content.js +6 -0
- package/dist/agent-instructions/content.js.map +1 -1
- package/dist/auth/silent-debugger.d.ts +28 -0
- package/dist/auth/silent-debugger.js +79 -0
- package/dist/auth/silent-debugger.js.map +1 -0
- package/dist/cli.js +48 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts +9 -0
- package/dist/commands/doctor.js +29 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/map.d.ts +2 -0
- package/dist/commands/map.js +698 -0
- package/dist/commands/map.js.map +1 -0
- package/dist/extension/background.js +2 -63
- package/dist/extension/background.js.map +1 -1
- package/dist/extension/inpage/builders.d.ts +38 -0
- package/dist/extension/inpage/builders.js +68 -0
- package/dist/extension/inpage/builders.js.map +1 -1
- package/dist/extension/manifest.json +1 -1
- package/dist/map/db.js +26 -0
- package/dist/map/db.js.map +1 -1
- package/dist/map/origin.d.ts +28 -0
- package/dist/map/origin.js +37 -0
- package/dist/map/origin.js.map +1 -0
- package/dist/map/queries.d.ts +128 -0
- package/dist/map/queries.js +224 -5
- package/dist/map/queries.js.map +1 -1
- package/dist/server.js +13 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/browser-definitions.js +4 -2
- package/dist/tools/browser-definitions.js.map +1 -1
- package/dist/tools/browser-dispatch.d.ts +14 -0
- package/dist/tools/browser-dispatch.js +14 -0
- package/dist/tools/browser-dispatch.js.map +1 -1
- package/dist/tools/server-instructions.js +5 -1
- package/dist/tools/server-instructions.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonicalize a free-text origin to `new URL(origin).origin` form.
|
|
3
|
+
*
|
|
4
|
+
* `browser.map.save`'s `origin` parameter is free text from the agent —
|
|
5
|
+
* "https://myapp.example.com/" (trailing slash), "HTTPS://App.Example.com",
|
|
6
|
+
* or a full URL with a path all denote the same origin, but the map's
|
|
7
|
+
* lookups (`apps.origin = ?`) are exact string matches. Meanwhile
|
|
8
|
+
* `browser.list_tabs`' map-hint join computes its key with
|
|
9
|
+
* `new URL(tab.url).origin` (canonical: lowercased scheme/host, default
|
|
10
|
+
* port dropped, no trailing slash, no path). Without one canonical form on
|
|
11
|
+
* BOTH sides, a save with a trailing slash silently never matches the hint
|
|
12
|
+
* lookup — a permanent no-op indistinguishable from an empty map.
|
|
13
|
+
*
|
|
14
|
+
* Rules:
|
|
15
|
+
* - Parseable URL with a real origin → `URL.origin` (the canonical form).
|
|
16
|
+
* - Parseable URL whose origin is opaque (`'null'` — file:, data:,
|
|
17
|
+
* about:blank, …) → the RAW input. Collapsing every opaque-origin
|
|
18
|
+
* value into the literal string "null" would merge unrelated apps.
|
|
19
|
+
* - Unparseable input → the RAW input, unchanged. The map has always
|
|
20
|
+
* accepted free-text origins; canonicalization must never reject or
|
|
21
|
+
* mangle what it cannot understand.
|
|
22
|
+
*
|
|
23
|
+
* Shared by `queries.ts` (every write and lookup path) and `db.ts` (the
|
|
24
|
+
* one-time normalization of rows written before v0.20.0). Lives in its own
|
|
25
|
+
* module because db.ts cannot import queries.ts (queries.ts imports getDb
|
|
26
|
+
* from db.ts — a cycle).
|
|
27
|
+
*/
|
|
28
|
+
export function canonicalOrigin(origin) {
|
|
29
|
+
try {
|
|
30
|
+
const canonical = new URL(origin).origin;
|
|
31
|
+
return canonical === 'null' ? origin : canonical;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return origin;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=origin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"origin.js","sourceRoot":"","sources":["../../src/map/origin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QACzC,OAAO,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC"}
|
package/dist/map/queries.d.ts
CHANGED
|
@@ -42,6 +42,34 @@ export declare function saveEntry(input: SaveEntryInput): {
|
|
|
42
42
|
app: AppRow;
|
|
43
43
|
entry: EntryRow;
|
|
44
44
|
};
|
|
45
|
+
export interface RestoreEntryInput {
|
|
46
|
+
origin: string;
|
|
47
|
+
app_key?: string | null;
|
|
48
|
+
title?: string | null;
|
|
49
|
+
url_pattern: string;
|
|
50
|
+
kind: EntryKind;
|
|
51
|
+
purpose: string;
|
|
52
|
+
payload: unknown;
|
|
53
|
+
notes?: string | null;
|
|
54
|
+
verified_at?: string | null;
|
|
55
|
+
failed_at?: string | null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Restore-only counterpart to `saveEntry`, used by `browser-link map
|
|
59
|
+
* import`. `saveEntry` models "the agent just successfully executed
|
|
60
|
+
* this": it stamps `verified_at = now` and clears `failed_at` — the right
|
|
61
|
+
* semantics for a live save, and the WRONG ones for a backup restore,
|
|
62
|
+
* where re-stamping would silently "heal" a selector the map knew to be
|
|
63
|
+
* broken. This writes `verified_at`/`failed_at`/`notes` exactly as given
|
|
64
|
+
* (including null), preserving the entry's track record through an
|
|
65
|
+
* export → import round trip. Same upsert key as `saveEntry`
|
|
66
|
+
* ((app, url_pattern, kind, purpose)); the agent-facing
|
|
67
|
+
* `browser.map.save` never calls this.
|
|
68
|
+
*/
|
|
69
|
+
export declare function restoreEntry(input: RestoreEntryInput): {
|
|
70
|
+
app: AppRow;
|
|
71
|
+
entry: EntryRow;
|
|
72
|
+
};
|
|
45
73
|
export interface RecallInput {
|
|
46
74
|
origin: string;
|
|
47
75
|
app_key?: string | null;
|
|
@@ -71,6 +99,80 @@ export interface ForgetResult {
|
|
|
71
99
|
export declare function forget(input: ForgetInput): ForgetResult;
|
|
72
100
|
export declare function renameApp(app_id: number, new_app_key: string): AppRow | null;
|
|
73
101
|
export declare function listApps(): AppRow[];
|
|
102
|
+
export interface AppSummary extends AppRow {
|
|
103
|
+
entries: number;
|
|
104
|
+
flows: number;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Every app with its entry and flow counts, most-recently-seen first.
|
|
108
|
+
* Powers `browser-link map ls` — `listApps()` alone does not carry counts,
|
|
109
|
+
* and the CLI is the only caller that needs them (the MCP-facing
|
|
110
|
+
* `browser.map.apps` tool intentionally stays lean). Counts are computed
|
|
111
|
+
* with correlated subqueries rather than a JOIN + GROUP BY so an app with
|
|
112
|
+
* zero entries or zero flows still gets a row (a JOIN would need two LEFT
|
|
113
|
+
* JOINs to avoid multiplying rows across both tables).
|
|
114
|
+
*/
|
|
115
|
+
export declare function listAppsWithCounts(): AppSummary[];
|
|
116
|
+
/**
|
|
117
|
+
* Every app matching an identifier, most-recently-seen first — by app_key
|
|
118
|
+
* (exact match) first, falling back to origin (canonicalized, same rule
|
|
119
|
+
* every other write/lookup path uses) when no app_key matches. app_key
|
|
120
|
+
* uniqueness is per-origin, so the same key CAN match apps on several
|
|
121
|
+
* origins; a caller about to DELETE something must check `length > 1`
|
|
122
|
+
* and confirm with the user rather than silently trusting position 0
|
|
123
|
+
* (see `browser-link map forget --flow`). Read-only callers can take
|
|
124
|
+
* position 0 directly — that is exactly what `findApp` does.
|
|
125
|
+
*/
|
|
126
|
+
export declare function findAppCandidates(identifier: string): AppRow[];
|
|
127
|
+
/**
|
|
128
|
+
* Resolve one app by app_key (exact match; most-recently-seen wins if the
|
|
129
|
+
* same key was used across more than one origin) OR by origin
|
|
130
|
+
* (canonicalized, same rule every other write/lookup path uses). Backs
|
|
131
|
+
* `browser-link map show`/`export <app>`, where a human names one app with
|
|
132
|
+
* whichever identifier they remember. Returns `null` — never throws — so
|
|
133
|
+
* callers can produce their own "not found, did you mean…" message with
|
|
134
|
+
* the full app_key list from `listApps()`. Destructive callers must use
|
|
135
|
+
* `findAppCandidates` instead, so an ambiguous identifier is detected
|
|
136
|
+
* BEFORE anything is deleted.
|
|
137
|
+
*/
|
|
138
|
+
export declare function findApp(identifier: string): AppRow | null;
|
|
139
|
+
/**
|
|
140
|
+
* Exact (origin, app_key) lookup — the same identity `apps`' UNIQUE
|
|
141
|
+
* constraint (and `upsertApp`) matches on. Used by `browser-link map
|
|
142
|
+
* import --replace` to find the existing app to wipe before writing the
|
|
143
|
+
* imported data fresh; unlike `findApp`, this never falls back to a
|
|
144
|
+
* fuzzier match — replace must target the exact app the export file
|
|
145
|
+
* describes, not a same-named app_key on a different origin.
|
|
146
|
+
*/
|
|
147
|
+
export declare function findAppByOriginAndKey(origin: string, app_key: string): AppRow | null;
|
|
148
|
+
/**
|
|
149
|
+
* Every entry saved for an app, regardless of url_pattern. Unlike
|
|
150
|
+
* `recall()`, this is not origin/url-scoped and — like `getMapHint` —
|
|
151
|
+
* deliberately does NOT touch `last_seen_at`: a CLI read (`map show`,
|
|
152
|
+
* `map export`) is passive and must not affect map freshness.
|
|
153
|
+
*/
|
|
154
|
+
export declare function listEntries(app_id: number): EntryRow[];
|
|
155
|
+
export interface MapHint {
|
|
156
|
+
app_key: string;
|
|
157
|
+
entries: number;
|
|
158
|
+
flows: number;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Lean existence-and-count lookup for a tab's origin — powers the optional
|
|
162
|
+
* `map` hint `browser.list_tabs` attaches to each tab (see
|
|
163
|
+
* tools/browser-dispatch.ts's `handleListTabs`), so an agent can tell
|
|
164
|
+
* whether the persistent map knows anything about a page WITHOUT first
|
|
165
|
+
* calling `browser.map.recall` blind. Returns `null` when there is nothing
|
|
166
|
+
* to report — no app for this origin yet, or an app with zero entries and
|
|
167
|
+
* zero flows — so the caller can omit the field entirely rather than
|
|
168
|
+
* shipping a `{ entries: 0, flows: 0 }` no-op over the wire.
|
|
169
|
+
*
|
|
170
|
+
* Resolves the app the same way `recall()` does when no `app_key` is
|
|
171
|
+
* given: the most-recently-seen app for the origin. Deliberately does NOT
|
|
172
|
+
* touch `last_seen_at` — unlike an explicit `recall`, listing tabs is a
|
|
173
|
+
* passive read and must not have side effects on map freshness.
|
|
174
|
+
*/
|
|
175
|
+
export declare function getMapHint(origin: string): MapHint | null;
|
|
74
176
|
export interface FlowRow {
|
|
75
177
|
id: number;
|
|
76
178
|
app_id: number;
|
|
@@ -97,5 +199,31 @@ export declare function saveFlow(input: SaveFlowInput): {
|
|
|
97
199
|
app: AppRow;
|
|
98
200
|
flow: FlowRow;
|
|
99
201
|
};
|
|
202
|
+
export interface RestoreFlowInput extends SaveFlowInput {
|
|
203
|
+
use_count?: number;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Restore-only counterpart to `saveFlow`, used by `browser-link map
|
|
207
|
+
* import`. `saveFlow` always inserts with `use_count = 0` — right for a
|
|
208
|
+
* brand-new recipe, wrong for a backup restore, where it would erase the
|
|
209
|
+
* flow's track record. On insert, the imported `use_count` is written
|
|
210
|
+
* as-is; on update (merge into an app that already has this flow name),
|
|
211
|
+
* the LARGER of the existing and imported counts wins, so a merge can
|
|
212
|
+
* never LOWER a locally-earned track record. Only a non-negative integer
|
|
213
|
+
* is accepted — anything else falls back to 0 rather than poisoning the
|
|
214
|
+
* column. The agent-facing `browser.map.save` never calls this.
|
|
215
|
+
*/
|
|
216
|
+
export declare function restoreFlow(input: RestoreFlowInput): {
|
|
217
|
+
app: AppRow;
|
|
218
|
+
flow: FlowRow;
|
|
219
|
+
};
|
|
100
220
|
/** Every flow recipe saved for an app, alphabetical by name. */
|
|
101
221
|
export declare function listFlows(app_id: number): FlowRow[];
|
|
222
|
+
/**
|
|
223
|
+
* Delete a single named flow recipe, leaving the app and its entries
|
|
224
|
+
* untouched. Backs `browser-link map forget <app> --flow <name>` — the
|
|
225
|
+
* single-flow counterpart to `forget()`'s app_id/entry_id deletion, which
|
|
226
|
+
* has no notion of a flow name. Returns whether a row was actually
|
|
227
|
+
* deleted, so the caller can tell "deleted" from "no such flow".
|
|
228
|
+
*/
|
|
229
|
+
export declare function deleteFlow(app_id: number, name: string): boolean;
|
package/dist/map/queries.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getDb } from './db.js';
|
|
2
|
+
import { canonicalOrigin } from './origin.js';
|
|
2
3
|
function now() {
|
|
3
4
|
return new Date().toISOString();
|
|
4
5
|
}
|
|
@@ -38,12 +39,16 @@ function deriveAppKey(origin, title) {
|
|
|
38
39
|
export function upsertApp(input) {
|
|
39
40
|
const db = getDb();
|
|
40
41
|
const ts = now();
|
|
42
|
+
// v0.20.0: canonicalize on EVERY write so the exact-string lookups in
|
|
43
|
+
// recall/getMapHint (whose key comes from `new URL(tab.url).origin`)
|
|
44
|
+
// always match what save stored — see origin.ts for the full rationale.
|
|
45
|
+
const origin = canonicalOrigin(input.origin);
|
|
41
46
|
const app_key = input.app_key && input.app_key.trim().length > 0
|
|
42
47
|
? slugify(input.app_key)
|
|
43
|
-
: deriveAppKey(
|
|
48
|
+
: deriveAppKey(origin, input.title);
|
|
44
49
|
const existing = db
|
|
45
50
|
.prepare('SELECT * FROM apps WHERE origin = ? AND app_key = ?')
|
|
46
|
-
.get(
|
|
51
|
+
.get(origin, app_key);
|
|
47
52
|
if (existing) {
|
|
48
53
|
db.prepare(`UPDATE apps SET title = COALESCE(?, title), notes = COALESCE(?, notes), last_seen_at = ? WHERE id = ?`).run(input.title ?? null, input.notes ?? null, ts, existing.id);
|
|
49
54
|
return db.prepare('SELECT * FROM apps WHERE id = ?').get(existing.id);
|
|
@@ -51,7 +56,7 @@ export function upsertApp(input) {
|
|
|
51
56
|
const info = db
|
|
52
57
|
.prepare(`INSERT INTO apps (origin, app_key, title, notes, created_at, last_seen_at)
|
|
53
58
|
VALUES (?, ?, ?, ?, ?, ?)`)
|
|
54
|
-
.run(
|
|
59
|
+
.run(origin, app_key, input.title ?? null, input.notes ?? null, ts, ts);
|
|
55
60
|
return db.prepare('SELECT * FROM apps WHERE id = ?').get(info.lastInsertRowid);
|
|
56
61
|
}
|
|
57
62
|
export function saveEntry(input) {
|
|
@@ -84,19 +89,64 @@ export function saveEntry(input) {
|
|
|
84
89
|
.get(info.lastInsertRowid);
|
|
85
90
|
return { app, entry: hydrate(inserted) };
|
|
86
91
|
}
|
|
92
|
+
/**
|
|
93
|
+
* Restore-only counterpart to `saveEntry`, used by `browser-link map
|
|
94
|
+
* import`. `saveEntry` models "the agent just successfully executed
|
|
95
|
+
* this": it stamps `verified_at = now` and clears `failed_at` — the right
|
|
96
|
+
* semantics for a live save, and the WRONG ones for a backup restore,
|
|
97
|
+
* where re-stamping would silently "heal" a selector the map knew to be
|
|
98
|
+
* broken. This writes `verified_at`/`failed_at`/`notes` exactly as given
|
|
99
|
+
* (including null), preserving the entry's track record through an
|
|
100
|
+
* export → import round trip. Same upsert key as `saveEntry`
|
|
101
|
+
* ((app, url_pattern, kind, purpose)); the agent-facing
|
|
102
|
+
* `browser.map.save` never calls this.
|
|
103
|
+
*/
|
|
104
|
+
export function restoreEntry(input) {
|
|
105
|
+
const app = upsertApp({
|
|
106
|
+
origin: input.origin,
|
|
107
|
+
app_key: input.app_key ?? null,
|
|
108
|
+
title: input.title ?? null,
|
|
109
|
+
});
|
|
110
|
+
const ts = now();
|
|
111
|
+
const payloadJson = JSON.stringify(input.payload);
|
|
112
|
+
const db = getDb();
|
|
113
|
+
const existing = db
|
|
114
|
+
.prepare(`SELECT * FROM entries WHERE app_id = ? AND url_pattern = ? AND kind = ? AND purpose = ?`)
|
|
115
|
+
.get(app.id, input.url_pattern, input.kind, input.purpose);
|
|
116
|
+
if (existing) {
|
|
117
|
+
db.prepare(`UPDATE entries
|
|
118
|
+
SET payload = ?, notes = ?, verified_at = ?, failed_at = ?, updated_at = ?
|
|
119
|
+
WHERE id = ?`).run(payloadJson, input.notes ?? null, input.verified_at ?? null, input.failed_at ?? null, ts, existing.id);
|
|
120
|
+
const updated = db
|
|
121
|
+
.prepare('SELECT * FROM entries WHERE id = ?')
|
|
122
|
+
.get(existing.id);
|
|
123
|
+
return { app, entry: hydrate(updated) };
|
|
124
|
+
}
|
|
125
|
+
const info = db
|
|
126
|
+
.prepare(`INSERT INTO entries (app_id, url_pattern, kind, purpose, payload, verified_at, failed_at, notes, created_at, updated_at)
|
|
127
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
128
|
+
.run(app.id, input.url_pattern, input.kind, input.purpose, payloadJson, input.verified_at ?? null, input.failed_at ?? null, input.notes ?? null, ts, ts);
|
|
129
|
+
const inserted = db
|
|
130
|
+
.prepare('SELECT * FROM entries WHERE id = ?')
|
|
131
|
+
.get(info.lastInsertRowid);
|
|
132
|
+
return { app, entry: hydrate(inserted) };
|
|
133
|
+
}
|
|
87
134
|
export function recall(input) {
|
|
88
135
|
const db = getDb();
|
|
136
|
+
// Same canonicalization as upsertApp — a recall with a trailing-slash or
|
|
137
|
+
// full-URL origin must find what a canonical save stored.
|
|
138
|
+
const origin = canonicalOrigin(input.origin);
|
|
89
139
|
// Resolve app: prefer (origin, app_key) if provided; otherwise pick the most-recent app for this origin.
|
|
90
140
|
let app;
|
|
91
141
|
if (input.app_key && input.app_key.trim().length > 0) {
|
|
92
142
|
app = db
|
|
93
143
|
.prepare('SELECT * FROM apps WHERE origin = ? AND app_key = ?')
|
|
94
|
-
.get(
|
|
144
|
+
.get(origin, slugify(input.app_key));
|
|
95
145
|
}
|
|
96
146
|
else {
|
|
97
147
|
app = db
|
|
98
148
|
.prepare('SELECT * FROM apps WHERE origin = ? ORDER BY last_seen_at DESC LIMIT 1')
|
|
99
|
-
.get(
|
|
149
|
+
.get(origin);
|
|
100
150
|
}
|
|
101
151
|
if (!app)
|
|
102
152
|
return { app: null, entries: [], flows: [] };
|
|
@@ -162,6 +212,126 @@ export function renameApp(app_id, new_app_key) {
|
|
|
162
212
|
export function listApps() {
|
|
163
213
|
return getDb().prepare('SELECT * FROM apps ORDER BY last_seen_at DESC').all();
|
|
164
214
|
}
|
|
215
|
+
/**
|
|
216
|
+
* Every app with its entry and flow counts, most-recently-seen first.
|
|
217
|
+
* Powers `browser-link map ls` — `listApps()` alone does not carry counts,
|
|
218
|
+
* and the CLI is the only caller that needs them (the MCP-facing
|
|
219
|
+
* `browser.map.apps` tool intentionally stays lean). Counts are computed
|
|
220
|
+
* with correlated subqueries rather than a JOIN + GROUP BY so an app with
|
|
221
|
+
* zero entries or zero flows still gets a row (a JOIN would need two LEFT
|
|
222
|
+
* JOINs to avoid multiplying rows across both tables).
|
|
223
|
+
*/
|
|
224
|
+
export function listAppsWithCounts() {
|
|
225
|
+
return getDb()
|
|
226
|
+
.prepare(`SELECT a.*,
|
|
227
|
+
(SELECT COUNT(*) FROM entries e WHERE e.app_id = a.id) AS entries,
|
|
228
|
+
(SELECT COUNT(*) FROM flows f WHERE f.app_id = a.id) AS flows
|
|
229
|
+
FROM apps a
|
|
230
|
+
ORDER BY a.last_seen_at DESC`)
|
|
231
|
+
.all();
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Every app matching an identifier, most-recently-seen first — by app_key
|
|
235
|
+
* (exact match) first, falling back to origin (canonicalized, same rule
|
|
236
|
+
* every other write/lookup path uses) when no app_key matches. app_key
|
|
237
|
+
* uniqueness is per-origin, so the same key CAN match apps on several
|
|
238
|
+
* origins; a caller about to DELETE something must check `length > 1`
|
|
239
|
+
* and confirm with the user rather than silently trusting position 0
|
|
240
|
+
* (see `browser-link map forget --flow`). Read-only callers can take
|
|
241
|
+
* position 0 directly — that is exactly what `findApp` does.
|
|
242
|
+
*/
|
|
243
|
+
export function findAppCandidates(identifier) {
|
|
244
|
+
// `id DESC` tiebreak: two apps touched within the same millisecond have
|
|
245
|
+
// an identical ISO last_seen_at, and "most recently seen" must still be
|
|
246
|
+
// deterministic — the later-created row wins the tie.
|
|
247
|
+
const db = getDb();
|
|
248
|
+
const byKey = db
|
|
249
|
+
.prepare('SELECT * FROM apps WHERE app_key = ? ORDER BY last_seen_at DESC, id DESC')
|
|
250
|
+
.all(identifier);
|
|
251
|
+
if (byKey.length > 0)
|
|
252
|
+
return byKey;
|
|
253
|
+
return db
|
|
254
|
+
.prepare('SELECT * FROM apps WHERE origin = ? ORDER BY last_seen_at DESC, id DESC')
|
|
255
|
+
.all(canonicalOrigin(identifier));
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Resolve one app by app_key (exact match; most-recently-seen wins if the
|
|
259
|
+
* same key was used across more than one origin) OR by origin
|
|
260
|
+
* (canonicalized, same rule every other write/lookup path uses). Backs
|
|
261
|
+
* `browser-link map show`/`export <app>`, where a human names one app with
|
|
262
|
+
* whichever identifier they remember. Returns `null` — never throws — so
|
|
263
|
+
* callers can produce their own "not found, did you mean…" message with
|
|
264
|
+
* the full app_key list from `listApps()`. Destructive callers must use
|
|
265
|
+
* `findAppCandidates` instead, so an ambiguous identifier is detected
|
|
266
|
+
* BEFORE anything is deleted.
|
|
267
|
+
*/
|
|
268
|
+
export function findApp(identifier) {
|
|
269
|
+
const candidates = findAppCandidates(identifier);
|
|
270
|
+
return candidates.length > 0 ? candidates[0] : null;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Exact (origin, app_key) lookup — the same identity `apps`' UNIQUE
|
|
274
|
+
* constraint (and `upsertApp`) matches on. Used by `browser-link map
|
|
275
|
+
* import --replace` to find the existing app to wipe before writing the
|
|
276
|
+
* imported data fresh; unlike `findApp`, this never falls back to a
|
|
277
|
+
* fuzzier match — replace must target the exact app the export file
|
|
278
|
+
* describes, not a same-named app_key on a different origin.
|
|
279
|
+
*/
|
|
280
|
+
export function findAppByOriginAndKey(origin, app_key) {
|
|
281
|
+
const row = getDb()
|
|
282
|
+
.prepare('SELECT * FROM apps WHERE origin = ? AND app_key = ?')
|
|
283
|
+
.get(canonicalOrigin(origin), slugify(app_key));
|
|
284
|
+
return row ?? null;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Every entry saved for an app, regardless of url_pattern. Unlike
|
|
288
|
+
* `recall()`, this is not origin/url-scoped and — like `getMapHint` —
|
|
289
|
+
* deliberately does NOT touch `last_seen_at`: a CLI read (`map show`,
|
|
290
|
+
* `map export`) is passive and must not affect map freshness.
|
|
291
|
+
*/
|
|
292
|
+
export function listEntries(app_id) {
|
|
293
|
+
const rows = getDb()
|
|
294
|
+
.prepare('SELECT * FROM entries WHERE app_id = ? ORDER BY url_pattern, updated_at DESC')
|
|
295
|
+
.all(app_id);
|
|
296
|
+
return rows.map(hydrate);
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Lean existence-and-count lookup for a tab's origin — powers the optional
|
|
300
|
+
* `map` hint `browser.list_tabs` attaches to each tab (see
|
|
301
|
+
* tools/browser-dispatch.ts's `handleListTabs`), so an agent can tell
|
|
302
|
+
* whether the persistent map knows anything about a page WITHOUT first
|
|
303
|
+
* calling `browser.map.recall` blind. Returns `null` when there is nothing
|
|
304
|
+
* to report — no app for this origin yet, or an app with zero entries and
|
|
305
|
+
* zero flows — so the caller can omit the field entirely rather than
|
|
306
|
+
* shipping a `{ entries: 0, flows: 0 }` no-op over the wire.
|
|
307
|
+
*
|
|
308
|
+
* Resolves the app the same way `recall()` does when no `app_key` is
|
|
309
|
+
* given: the most-recently-seen app for the origin. Deliberately does NOT
|
|
310
|
+
* touch `last_seen_at` — unlike an explicit `recall`, listing tabs is a
|
|
311
|
+
* passive read and must not have side effects on map freshness.
|
|
312
|
+
*/
|
|
313
|
+
export function getMapHint(origin) {
|
|
314
|
+
if (!origin)
|
|
315
|
+
return null;
|
|
316
|
+
const db = getDb();
|
|
317
|
+
// The caller (handleListTabs) already passes `new URL(url).origin`, which
|
|
318
|
+
// IS canonical — canonicalizing again here is defense in depth for any
|
|
319
|
+
// other future caller handing in free text.
|
|
320
|
+
const app = db
|
|
321
|
+
.prepare('SELECT * FROM apps WHERE origin = ? ORDER BY last_seen_at DESC LIMIT 1')
|
|
322
|
+
.get(canonicalOrigin(origin));
|
|
323
|
+
if (!app)
|
|
324
|
+
return null;
|
|
325
|
+
const { entries } = db
|
|
326
|
+
.prepare('SELECT COUNT(*) AS entries FROM entries WHERE app_id = ?')
|
|
327
|
+
.get(app.id);
|
|
328
|
+
const { flows } = db
|
|
329
|
+
.prepare('SELECT COUNT(*) AS flows FROM flows WHERE app_id = ?')
|
|
330
|
+
.get(app.id);
|
|
331
|
+
if (entries === 0 && flows === 0)
|
|
332
|
+
return null;
|
|
333
|
+
return { app_key: app.app_key, entries, flows };
|
|
334
|
+
}
|
|
165
335
|
function hydrateFlow(row) {
|
|
166
336
|
const { steps_json, ...rest } = row;
|
|
167
337
|
return { ...rest, steps: parsePayload(steps_json) };
|
|
@@ -194,6 +364,44 @@ export function saveFlow(input) {
|
|
|
194
364
|
const inserted = db.prepare('SELECT * FROM flows WHERE id = ?').get(info.lastInsertRowid);
|
|
195
365
|
return { app, flow: hydrateFlow(inserted) };
|
|
196
366
|
}
|
|
367
|
+
/**
|
|
368
|
+
* Restore-only counterpart to `saveFlow`, used by `browser-link map
|
|
369
|
+
* import`. `saveFlow` always inserts with `use_count = 0` — right for a
|
|
370
|
+
* brand-new recipe, wrong for a backup restore, where it would erase the
|
|
371
|
+
* flow's track record. On insert, the imported `use_count` is written
|
|
372
|
+
* as-is; on update (merge into an app that already has this flow name),
|
|
373
|
+
* the LARGER of the existing and imported counts wins, so a merge can
|
|
374
|
+
* never LOWER a locally-earned track record. Only a non-negative integer
|
|
375
|
+
* is accepted — anything else falls back to 0 rather than poisoning the
|
|
376
|
+
* column. The agent-facing `browser.map.save` never calls this.
|
|
377
|
+
*/
|
|
378
|
+
export function restoreFlow(input) {
|
|
379
|
+
const app = upsertApp({
|
|
380
|
+
origin: input.origin,
|
|
381
|
+
app_key: input.app_key ?? null,
|
|
382
|
+
title: input.title ?? null,
|
|
383
|
+
});
|
|
384
|
+
const ts = now();
|
|
385
|
+
const stepsJson = JSON.stringify(input.steps);
|
|
386
|
+
const useCount = typeof input.use_count === 'number' && Number.isInteger(input.use_count) && input.use_count >= 0
|
|
387
|
+
? input.use_count
|
|
388
|
+
: 0;
|
|
389
|
+
const db = getDb();
|
|
390
|
+
const existing = db
|
|
391
|
+
.prepare('SELECT * FROM flows WHERE app_id = ? AND name = ?')
|
|
392
|
+
.get(app.id, input.name);
|
|
393
|
+
if (existing) {
|
|
394
|
+
db.prepare('UPDATE flows SET description = ?, steps_json = ?, updated_at = ?, use_count = MAX(use_count, ?) WHERE id = ?').run(input.description ?? null, stepsJson, ts, useCount, existing.id);
|
|
395
|
+
const updated = db.prepare('SELECT * FROM flows WHERE id = ?').get(existing.id);
|
|
396
|
+
return { app, flow: hydrateFlow(updated) };
|
|
397
|
+
}
|
|
398
|
+
const info = db
|
|
399
|
+
.prepare(`INSERT INTO flows (app_id, name, description, steps_json, created_at, updated_at, use_count)
|
|
400
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)`)
|
|
401
|
+
.run(app.id, input.name, input.description ?? null, stepsJson, ts, ts, useCount);
|
|
402
|
+
const inserted = db.prepare('SELECT * FROM flows WHERE id = ?').get(info.lastInsertRowid);
|
|
403
|
+
return { app, flow: hydrateFlow(inserted) };
|
|
404
|
+
}
|
|
197
405
|
/** Every flow recipe saved for an app, alphabetical by name. */
|
|
198
406
|
export function listFlows(app_id) {
|
|
199
407
|
const rows = getDb()
|
|
@@ -201,4 +409,15 @@ export function listFlows(app_id) {
|
|
|
201
409
|
.all(app_id);
|
|
202
410
|
return rows.map(hydrateFlow);
|
|
203
411
|
}
|
|
412
|
+
/**
|
|
413
|
+
* Delete a single named flow recipe, leaving the app and its entries
|
|
414
|
+
* untouched. Backs `browser-link map forget <app> --flow <name>` — the
|
|
415
|
+
* single-flow counterpart to `forget()`'s app_id/entry_id deletion, which
|
|
416
|
+
* has no notion of a flow name. Returns whether a row was actually
|
|
417
|
+
* deleted, so the caller can tell "deleted" from "no such flow".
|
|
418
|
+
*/
|
|
419
|
+
export function deleteFlow(app_id, name) {
|
|
420
|
+
const info = getDb().prepare('DELETE FROM flows WHERE app_id = ? AND name = ?').run(app_id, name);
|
|
421
|
+
return info.changes > 0;
|
|
422
|
+
}
|
|
204
423
|
//# sourceMappingURL=queries.js.map
|
package/dist/map/queries.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/map/queries.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/map/queries.ts"],"names":[],"mappings":"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"}
|
package/dist/server.js
CHANGED
|
@@ -3,6 +3,7 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
|
3
3
|
import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
4
4
|
import { randomUUID } from 'node:crypto';
|
|
5
5
|
import { closeDb } from './map/db.js';
|
|
6
|
+
import { getMapHint } from './map/queries.js';
|
|
6
7
|
import { SERVER_INSTRUCTIONS } from './tools/server-instructions.js';
|
|
7
8
|
import { INSTRUCTIONS_INSTALLERS } from './agent-instructions/index.js';
|
|
8
9
|
import { loadConfig } from './config.js';
|
|
@@ -121,6 +122,18 @@ async function runPrimary(cfg) {
|
|
|
121
122
|
recentEvents: (opts) => events.recent(opts),
|
|
122
123
|
subscribeEvents: (fn, options) => events.subscribe(fn, options),
|
|
123
124
|
tabClaims,
|
|
125
|
+
// list_tabs is on the hot path of nearly every agent turn — a map DB
|
|
126
|
+
// problem (locked file, corrupt schema) must never take tab listing
|
|
127
|
+
// down with it. Degrade to "no hint" rather than letting the error
|
|
128
|
+
// propagate.
|
|
129
|
+
getMapHint: (origin) => {
|
|
130
|
+
try {
|
|
131
|
+
return getMapHint(origin);
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
},
|
|
124
137
|
resetBridge: () => {
|
|
125
138
|
// Close every WS to the extension first so the client side flips to
|
|
126
139
|
// "Not connected" before we drop the local state. Best-effort: a tab
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,7 +31,7 @@ const SETTLE_SCHEMA_PROPERTIES = {
|
|
|
31
31
|
export const BROWSER_TOOL_DEFINITIONS = [
|
|
32
32
|
{
|
|
33
33
|
name: 'browser.list_tabs',
|
|
34
|
-
description:
|
|
34
|
+
description: "List Chrome tabs currently connected to browser-link. A tab is connected only after the user clicks Connect in the extension popup. Each entry includes tab_id, url, title, claimed_by (null when free, or { agent_id, pid, binary, label?, claimed_at, last_activity_at } when another agent owns it), claimed_by_me (true when YOU hold the claim), and an optional map field ({ app_key, entries, flows }) present ONLY when the persistent UI map already has data for that tab's origin — absent entirely when it does not.",
|
|
35
35
|
inputSchema: { type: 'object', properties: {}, additionalProperties: false },
|
|
36
36
|
doc: {
|
|
37
37
|
purpose: 'List the Chrome tabs the user has explicitly connected through the browser-link extension popup.',
|
|
@@ -42,6 +42,7 @@ export const BROWSER_TOOL_DEFINITIONS = [
|
|
|
42
42
|
],
|
|
43
43
|
gotchas: [
|
|
44
44
|
'Returns only tabs the user has connected manually. If the list is empty the user has not connected anything yet — ask them to open the extension popup.',
|
|
45
|
+
'When an entry carries a map field, call browser.map.recall BEFORE snapshotting that tab — the persistent map already has selectors, gotchas, or flow recipes for it, and re-discovering them via a fresh snapshot/find wastes a round trip.',
|
|
45
46
|
],
|
|
46
47
|
},
|
|
47
48
|
},
|
|
@@ -653,7 +654,7 @@ export const BROWSER_TOOL_DEFINITIONS = [
|
|
|
653
654
|
},
|
|
654
655
|
{
|
|
655
656
|
name: 'browser.drag',
|
|
656
|
-
description: 'Drag an element from a source to a destination. Provide each end as either a CSS selector OR a viewport coordinate pair (x,y). The drag is interpolated over duration_ms (default 1500) so you can watch the cursor traverse the path — this also helps activation-by-distance constraints in pointer-based libraries. Auto-detects HTML5 native drag (element.draggable, <img>, <a href>) vs pointer-based drag (dnd-kit and similar). For HTML5 it uses Input.setInterceptDrags + Input.dragIntercepted + Input.dispatchDragEvent. For pointer-based it interpolates Input.dispatchMouseEvent only. setInterceptDrags is always cleared in finally. Both source and destination must be visible in the viewport simultaneously — drag does NOT scroll between them. Returns { from, to, duration_ms_actual, drag_mode: "html5"|"pointer", events_fired }.',
|
|
657
|
+
description: 'Drag an element from a source to a destination. Provide each end as either a CSS selector OR a viewport coordinate pair (x,y). A selector endpoint is resolved through the same deep search snapshot/find/click/type use — it reaches into open Shadow DOM roots and same-origin iframes, with coordinates mapped to the top-level viewport. The drag is interpolated over duration_ms (default 1500) so you can watch the cursor traverse the path — this also helps activation-by-distance constraints in pointer-based libraries. Auto-detects HTML5 native drag (element.draggable, <img>, <a href>) vs pointer-based drag (dnd-kit and similar). For HTML5 it uses Input.setInterceptDrags + Input.dragIntercepted + Input.dispatchDragEvent. For pointer-based it interpolates Input.dispatchMouseEvent only. setInterceptDrags is always cleared in finally. Both source and destination must be visible in the viewport simultaneously — drag does NOT scroll between them. Returns { from, to, duration_ms_actual, drag_mode: "html5"|"pointer", events_fired }.',
|
|
657
658
|
inputSchema: {
|
|
658
659
|
type: 'object',
|
|
659
660
|
properties: {
|
|
@@ -700,6 +701,7 @@ export const BROWSER_TOOL_DEFINITIONS = [
|
|
|
700
701
|
'Both endpoints must be visible in the viewport at the same time — the tool does not scroll between them. If one is offscreen, scroll first (via evaluate) or pass viewport coords.',
|
|
701
702
|
'Default duration is 1500ms so a human watching can follow the cursor. Drop it lower only when you are sure no library has a movement-based activation constraint.',
|
|
702
703
|
'drag_mode in the response tells you whether HTML5 native drag (dragstart/drop) or pointer-only events fired — use it to diagnose silently-failing drops.',
|
|
704
|
+
'A selector endpoint reaches into OPEN Shadow DOM roots and same-origin iframes, same limits as snapshot/find/click/type: CLOSED shadow roots and cross-origin iframes stay unreachable.',
|
|
703
705
|
],
|
|
704
706
|
example: 'browser.drag({ tab_id: "tab_1", from_selector: "[data-testid=card-1]", to_selector: "[data-testid=column-done]" })',
|
|
705
707
|
},
|