@peekdev/mcp 0.1.0-alpha.1
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/NOTICE +10 -0
- package/dist/db/index.d.ts +3 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +7 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrate.d.ts +37 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +86 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/migrations/0001_initial.sql +102 -0
- package/dist/db/migrations/0002_network_bodies.sql +15 -0
- package/dist/db/open.d.ts +57 -0
- package/dist/db/open.d.ts.map +1 -0
- package/dist/db/open.js +74 -0
- package/dist/db/open.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +58 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/action-schema.d.ts +223 -0
- package/dist/mcp/action-schema.d.ts.map +1 -0
- package/dist/mcp/action-schema.js +97 -0
- package/dist/mcp/action-schema.js.map +1 -0
- package/dist/mcp/event-blobs.d.ts +32 -0
- package/dist/mcp/event-blobs.d.ts.map +1 -0
- package/dist/mcp/event-blobs.js +65 -0
- package/dist/mcp/event-blobs.js.map +1 -0
- package/dist/mcp/event-walker.d.ts +86 -0
- package/dist/mcp/event-walker.d.ts.map +1 -0
- package/dist/mcp/event-walker.js +398 -0
- package/dist/mcp/event-walker.js.map +1 -0
- package/dist/mcp/host-bridge.d.ts +80 -0
- package/dist/mcp/host-bridge.d.ts.map +1 -0
- package/dist/mcp/host-bridge.js +88 -0
- package/dist/mcp/host-bridge.js.map +1 -0
- package/dist/mcp/index.d.ts +8 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +32 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/playwright-repro.d.ts +19 -0
- package/dist/mcp/playwright-repro.d.ts.map +1 -0
- package/dist/mcp/playwright-repro.js +78 -0
- package/dist/mcp/playwright-repro.js.map +1 -0
- package/dist/mcp/queries.d.ts +73 -0
- package/dist/mcp/queries.d.ts.map +1 -0
- package/dist/mcp/queries.js +139 -0
- package/dist/mcp/queries.js.map +1 -0
- package/dist/mcp/roots.d.ts +50 -0
- package/dist/mcp/roots.d.ts.map +1 -0
- package/dist/mcp/roots.js +97 -0
- package/dist/mcp/roots.js.map +1 -0
- package/dist/mcp/rrweb-types.d.ts +3 -0
- package/dist/mcp/rrweb-types.d.ts.map +1 -0
- package/dist/mcp/rrweb-types.js +7 -0
- package/dist/mcp/rrweb-types.js.map +1 -0
- package/dist/mcp/selector.d.ts +54 -0
- package/dist/mcp/selector.d.ts.map +1 -0
- package/dist/mcp/selector.js +209 -0
- package/dist/mcp/selector.js.map +1 -0
- package/dist/mcp/server.d.ts +49 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +469 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/summary.d.ts +26 -0
- package/dist/mcp/summary.d.ts.map +1 -0
- package/dist/mcp/summary.js +74 -0
- package/dist/mcp/summary.js.map +1 -0
- package/dist/native-host/action-protocol.d.ts +49 -0
- package/dist/native-host/action-protocol.d.ts.map +1 -0
- package/dist/native-host/action-protocol.js +36 -0
- package/dist/native-host/action-protocol.js.map +1 -0
- package/dist/native-host/audit.d.ts +69 -0
- package/dist/native-host/audit.d.ts.map +1 -0
- package/dist/native-host/audit.js +85 -0
- package/dist/native-host/audit.js.map +1 -0
- package/dist/native-host/config.d.ts +18 -0
- package/dist/native-host/config.d.ts.map +1 -0
- package/dist/native-host/config.js +56 -0
- package/dist/native-host/config.js.map +1 -0
- package/dist/native-host/extension-ids.json +6 -0
- package/dist/native-host/host.d.ts +30 -0
- package/dist/native-host/host.d.ts.map +1 -0
- package/dist/native-host/host.js +96 -0
- package/dist/native-host/host.js.map +1 -0
- package/dist/native-host/index.d.ts +4 -0
- package/dist/native-host/index.d.ts.map +1 -0
- package/dist/native-host/index.js +8 -0
- package/dist/native-host/index.js.map +1 -0
- package/dist/native-host/ingest.d.ts +83 -0
- package/dist/native-host/ingest.d.ts.map +1 -0
- package/dist/native-host/ingest.js +283 -0
- package/dist/native-host/ingest.js.map +1 -0
- package/dist/native-host/installer.d.ts +64 -0
- package/dist/native-host/installer.d.ts.map +1 -0
- package/dist/native-host/installer.js +110 -0
- package/dist/native-host/installer.js.map +1 -0
- package/dist/native-host/manifest.d.ts +64 -0
- package/dist/native-host/manifest.d.ts.map +1 -0
- package/dist/native-host/manifest.js +117 -0
- package/dist/native-host/manifest.js.map +1 -0
- package/dist/native-host/policy.d.ts +60 -0
- package/dist/native-host/policy.d.ts.map +1 -0
- package/dist/native-host/policy.js +116 -0
- package/dist/native-host/policy.js.map +1 -0
- package/dist/native-host/request-registry.d.ts +55 -0
- package/dist/native-host/request-registry.d.ts.map +1 -0
- package/dist/native-host/request-registry.js +111 -0
- package/dist/native-host/request-registry.js.map +1 -0
- package/dist/native-host/transport.d.ts +54 -0
- package/dist/native-host/transport.d.ts.map +1 -0
- package/dist/native-host/transport.js +113 -0
- package/dist/native-host/transport.js.map +1 -0
- package/dist/postinstall.d.ts +3 -0
- package/dist/postinstall.d.ts.map +1 -0
- package/dist/postinstall.js +72 -0
- package/dist/postinstall.js.map +1 -0
- package/package.json +59 -0
- package/src/db/migrations/0001_initial.sql +102 -0
- package/src/db/migrations/0002_network_bodies.sql +15 -0
- package/src/native-host/extension-ids.json +6 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/native-host/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postinstall.d.ts","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":";AA0CA,wBAAgB,cAAc,IAAI,IAAI,CAgCrC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Postinstall: register the native-messaging host manifest (P2 PRD §A7).
|
|
3
|
+
//
|
|
4
|
+
// CONSENT GATE (P2 PRD §H1 — the April-2026 Hanff/Anthropic precedent): we must
|
|
5
|
+
// NOT silently write files into other vendors' browser directories on `npm
|
|
6
|
+
// install`. So by default this script performs a DRY RUN — it prints exactly
|
|
7
|
+
// what would be written and where, then exits without touching the filesystem.
|
|
8
|
+
// The actual writes happen only when the extension onboarding flow (Phase 3d)
|
|
9
|
+
// re-runs the installer with explicit consent, signalled by
|
|
10
|
+
// PEEK_INSTALL_NATIVE_HOST=1.
|
|
11
|
+
//
|
|
12
|
+
// Either way the script logs what it wrote / would write and where, so the
|
|
13
|
+
// install side-effects are always visible to the user (Task 3.4 requirement).
|
|
14
|
+
import { hostBinaryPath, loadExtensionIds } from './native-host/config.js';
|
|
15
|
+
import { installManifests } from './native-host/installer.js';
|
|
16
|
+
import { buildManifest, resolveInstallTargets, } from './native-host/manifest.js';
|
|
17
|
+
const SUPPORTED = ['darwin', 'linux', 'win32'];
|
|
18
|
+
function isTruthyEnv(value) {
|
|
19
|
+
if (!value)
|
|
20
|
+
return false;
|
|
21
|
+
const v = value.toLowerCase();
|
|
22
|
+
return v === '1' || v === 'true' || v === 'yes';
|
|
23
|
+
}
|
|
24
|
+
function logResults(results, dryRun) {
|
|
25
|
+
const verb = dryRun ? 'Would register' : 'Registered';
|
|
26
|
+
for (const r of results) {
|
|
27
|
+
const where = r.manifestPath ?? r.registryKey ?? '(unknown target)';
|
|
28
|
+
if (r.error) {
|
|
29
|
+
console.log(` ✗ ${r.browser}: ${where} — ${r.error}`);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
console.log(` ${dryRun ? '·' : '✔'} ${verb} ${r.browser}: ${where}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export function runPostinstall() {
|
|
37
|
+
const platform = process.platform;
|
|
38
|
+
if (!SUPPORTED.includes(platform)) {
|
|
39
|
+
console.log(`peek: native-host registration is not supported on '${platform}'; skipping.`);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const home = process.env.HOME ?? process.env.USERPROFILE ?? '';
|
|
43
|
+
const ids = loadExtensionIds();
|
|
44
|
+
const manifest = buildManifest(hostBinaryPath(), ids);
|
|
45
|
+
const targets = resolveInstallTargets(platform, home);
|
|
46
|
+
const consented = isTruthyEnv(process.env.PEEK_INSTALL_NATIVE_HOST);
|
|
47
|
+
const dryRun = !consented;
|
|
48
|
+
console.log(`peek native messaging host: ${manifest.name}`);
|
|
49
|
+
console.log(` host binary: ${manifest.path}`);
|
|
50
|
+
console.log(manifest.allowed_origins.length > 0
|
|
51
|
+
? ` allowed origins: ${manifest.allowed_origins.join(', ')}`
|
|
52
|
+
: ' allowed origins: (none yet — extension IDs are still placeholders)');
|
|
53
|
+
const results = installManifests(targets, manifest, { dryRun });
|
|
54
|
+
logResults(results, dryRun);
|
|
55
|
+
if (dryRun) {
|
|
56
|
+
console.log('\npeek: no files were written. The native host is registered during extension\n' +
|
|
57
|
+
'onboarding (with your consent), or by re-running with PEEK_INSTALL_NATIVE_HOST=1.');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Run when invoked directly (postinstall / manual). Guarded so importing this
|
|
61
|
+
// module for tests does not trigger the side-effect path.
|
|
62
|
+
const invokedDirectly = process.argv[1] !== undefined && import.meta.url === `file://${process.argv[1]}`;
|
|
63
|
+
if (invokedDirectly) {
|
|
64
|
+
try {
|
|
65
|
+
runPostinstall();
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
// A postinstall failure must never break `npm install`.
|
|
69
|
+
console.log(`peek: postinstall skipped — ${err instanceof Error ? err.message : String(err)}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=postinstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@peekdev/mcp",
|
|
3
|
+
"version": "0.1.0-alpha.1",
|
|
4
|
+
"description": "peek native messaging host + stdio MCP server. Owns ~/.peek/sessions.db (better-sqlite3) and bridges the browser extension, CLI, and AI tools to a single local source of truth (ADR-0007).",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"peek-mcp": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./db": {
|
|
18
|
+
"types": "./dist/db/index.d.ts",
|
|
19
|
+
"import": "./dist/db/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./native-host": {
|
|
22
|
+
"types": "./dist/native-host/index.d.ts",
|
|
23
|
+
"import": "./dist/native-host/index.js"
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
"files": [
|
|
27
|
+
"dist",
|
|
28
|
+
"src/db/migrations",
|
|
29
|
+
"src/native-host/extension-ids.json",
|
|
30
|
+
"NOTICE",
|
|
31
|
+
"README.md"
|
|
32
|
+
],
|
|
33
|
+
"scripts": {
|
|
34
|
+
"build": "tsc -p tsconfig.json && node ./scripts/postbuild.mjs",
|
|
35
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
36
|
+
"test": "vitest run --passWithNoTests",
|
|
37
|
+
"postinstall": "node ./scripts/postinstall-guard.mjs"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@cubenest/rrweb-core": "workspace:*",
|
|
41
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
42
|
+
"better-sqlite3": "^12.10.0",
|
|
43
|
+
"zod": "^3.25.76"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
47
|
+
"@types/node": "^22.10.0"
|
|
48
|
+
},
|
|
49
|
+
"publishConfig": {
|
|
50
|
+
"access": "public",
|
|
51
|
+
"provenance": true
|
|
52
|
+
},
|
|
53
|
+
"repository": {
|
|
54
|
+
"type": "git",
|
|
55
|
+
"url": "git+https://github.com/Cubenest/rrweb-stack.git",
|
|
56
|
+
"directory": "packages/peek-mcp"
|
|
57
|
+
},
|
|
58
|
+
"homepage": "https://github.com/Cubenest/rrweb-stack/tree/main/packages/peek-mcp#readme"
|
|
59
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
-- 0001_initial — peek native-host SQLite schema (ADR-0007).
|
|
2
|
+
--
|
|
3
|
+
-- The native messaging host owns ~/.peek/sessions.db; the extension writes via
|
|
4
|
+
-- native messaging and the MCP server + CLI read the same file directly. rrweb
|
|
5
|
+
-- event blobs live on disk under ~/.peek/rrweb-events/ (gzipped, one per
|
|
6
|
+
-- session); this DB stores session metadata, the chunk index into those blobs,
|
|
7
|
+
-- and the extracted console / network / audit rows that the MCP tools query.
|
|
8
|
+
--
|
|
9
|
+
-- Conventions: UTC ISO-8601 strings for timestamps (text); epoch-millis
|
|
10
|
+
-- integers where a monotonic ordering key is wanted (`ts_ms`). All foreign keys
|
|
11
|
+
-- reference sessions(id) and cascade on delete so `peek sessions delete` is a
|
|
12
|
+
-- single statement.
|
|
13
|
+
|
|
14
|
+
-- One row per recorded browser session.
|
|
15
|
+
CREATE TABLE sessions (
|
|
16
|
+
id TEXT PRIMARY KEY, -- e.g. "s_8nQ..."
|
|
17
|
+
created_at TEXT NOT NULL, -- UTC ISO-8601 of first event
|
|
18
|
+
updated_at TEXT NOT NULL, -- UTC ISO-8601 of last append
|
|
19
|
+
url TEXT, -- initial top-frame URL
|
|
20
|
+
title TEXT, -- initial document title
|
|
21
|
+
origin TEXT, -- scheme://host[:port] of `url`
|
|
22
|
+
user_agent TEXT,
|
|
23
|
+
-- Path to the gzipped rrweb event blob for this session, relative to
|
|
24
|
+
-- ~/.peek/rrweb-events/ (the native host owns the absolute base).
|
|
25
|
+
events_blob_path TEXT,
|
|
26
|
+
event_count INTEGER NOT NULL DEFAULT 0, -- total rrweb events recorded
|
|
27
|
+
bytes INTEGER NOT NULL DEFAULT 0, -- on-disk size of the blob
|
|
28
|
+
status TEXT NOT NULL DEFAULT 'active' -- 'active' | 'finalized'
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
CREATE INDEX idx_sessions_created_at ON sessions (created_at);
|
|
32
|
+
CREATE INDEX idx_sessions_origin ON sessions (origin);
|
|
33
|
+
|
|
34
|
+
-- Index of rrweb event chunks appended over native messaging. The events
|
|
35
|
+
-- themselves are persisted to the gzipped blob; a chunk row records the byte
|
|
36
|
+
-- range + event range so a reader can seek without parsing the whole blob.
|
|
37
|
+
CREATE TABLE events_chunks (
|
|
38
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
39
|
+
session_id TEXT NOT NULL REFERENCES sessions (id) ON DELETE CASCADE,
|
|
40
|
+
seq INTEGER NOT NULL, -- 0-based chunk order within session
|
|
41
|
+
start_ts_ms INTEGER NOT NULL, -- epoch-millis of first event in chunk
|
|
42
|
+
end_ts_ms INTEGER NOT NULL, -- epoch-millis of last event in chunk
|
|
43
|
+
event_count INTEGER NOT NULL,
|
|
44
|
+
byte_offset INTEGER NOT NULL, -- offset into the gzipped blob
|
|
45
|
+
byte_length INTEGER NOT NULL,
|
|
46
|
+
created_at TEXT NOT NULL,
|
|
47
|
+
UNIQUE (session_id, seq)
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
CREATE INDEX idx_events_chunks_session ON events_chunks (session_id, seq);
|
|
51
|
+
|
|
52
|
+
-- Console messages extracted from the rrweb console plugin
|
|
53
|
+
-- (EventType=6, plugin "rrweb/console@1") for fast MCP queries.
|
|
54
|
+
CREATE TABLE console_events (
|
|
55
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
56
|
+
session_id TEXT NOT NULL REFERENCES sessions (id) ON DELETE CASCADE,
|
|
57
|
+
ts_ms INTEGER NOT NULL, -- epoch-millis of the log
|
|
58
|
+
level TEXT NOT NULL, -- 'log'|'info'|'warn'|'error'|'debug'|...
|
|
59
|
+
message TEXT NOT NULL, -- joined payload text
|
|
60
|
+
stack TEXT, -- trace, when present
|
|
61
|
+
url TEXT -- page URL at time of log
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
CREATE INDEX idx_console_events_session ON console_events (session_id, ts_ms);
|
|
65
|
+
CREATE INDEX idx_console_events_level ON console_events (session_id, level);
|
|
66
|
+
|
|
67
|
+
-- Network activity captured via CDP (chrome.debugger) / console-error fallback.
|
|
68
|
+
CREATE TABLE network_events (
|
|
69
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
70
|
+
session_id TEXT NOT NULL REFERENCES sessions (id) ON DELETE CASCADE,
|
|
71
|
+
ts_ms INTEGER NOT NULL, -- epoch-millis of request start
|
|
72
|
+
method TEXT NOT NULL, -- GET/POST/...
|
|
73
|
+
url TEXT NOT NULL,
|
|
74
|
+
status INTEGER, -- HTTP status; NULL if failed/pending
|
|
75
|
+
status_text TEXT,
|
|
76
|
+
request_id TEXT, -- CDP requestId, for correlation
|
|
77
|
+
resource_type TEXT, -- 'xhr'|'fetch'|'document'|...
|
|
78
|
+
duration_ms INTEGER, -- response time, when known
|
|
79
|
+
error_text TEXT -- net error string, when failed
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
CREATE INDEX idx_network_events_session ON network_events (session_id, ts_ms);
|
|
83
|
+
CREATE INDEX idx_network_events_status ON network_events (session_id, status);
|
|
84
|
+
|
|
85
|
+
-- Append-only audit log of every AI-driven act-tool call (ADR-0010 / PRD §H3).
|
|
86
|
+
-- Mirrors the JSONL shape written to ~/.peek/audit.log; kept in SQLite too so
|
|
87
|
+
-- `peek audit log --since 1h --tool ... --client ...` is an indexed query.
|
|
88
|
+
CREATE TABLE audit_log (
|
|
89
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
90
|
+
ts TEXT NOT NULL, -- UTC ISO-8601 of the action
|
|
91
|
+
tool TEXT NOT NULL, -- e.g. 'execute_action'
|
|
92
|
+
args_json TEXT, -- JSON of the tool args
|
|
93
|
+
approval_ts TEXT, -- when the user approved
|
|
94
|
+
approver TEXT, -- 'user' | ...
|
|
95
|
+
client TEXT, -- 'claude-code' | 'cursor' | ...
|
|
96
|
+
session_id TEXT REFERENCES sessions (id) ON DELETE SET NULL,
|
|
97
|
+
result TEXT -- 'ok' | 'error' | ...
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
CREATE INDEX idx_audit_log_ts ON audit_log (ts);
|
|
101
|
+
CREATE INDEX idx_audit_log_tool ON audit_log (tool);
|
|
102
|
+
CREATE INDEX idx_audit_log_client ON audit_log (client);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
-- 0002_network_bodies — persist Deep capture masked bodies (ADR-0010, PRD §A.8).
|
|
2
|
+
--
|
|
3
|
+
-- The extension already masks request/response bodies via `maskNetMessage` in
|
|
4
|
+
-- the ISOLATED-world relay (packages/peek-extension/src/relay/mask.ts) BEFORE
|
|
5
|
+
-- forwarding them on `network.append`. Without these columns the native host
|
|
6
|
+
-- silently drops the masked bodies on the floor — the user's yellow-banner
|
|
7
|
+
-- consent for Deep capture yields no persisted body data, defeating the
|
|
8
|
+
-- whole reason `webRequest` is insufficient under MV3 (PRD §A.9).
|
|
9
|
+
--
|
|
10
|
+
-- Columns are TEXT (the relay produces strings via `redactBody`) and nullable
|
|
11
|
+
-- — Basic capture, request-only records, and error records leave them NULL.
|
|
12
|
+
-- SQLite's ALTER TABLE ADD COLUMN is non-destructive: existing rows get NULL
|
|
13
|
+
-- for the new columns, fresh DBs land with them from the start.
|
|
14
|
+
ALTER TABLE network_events ADD COLUMN request_body_redacted TEXT;
|
|
15
|
+
ALTER TABLE network_events ADD COLUMN response_body_redacted TEXT;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Extension IDs whose chrome-extension:// origin is allowed to message the peek native host (ADR-0007). Wildcards are forbidden by Chrome, so every supported store + the dev-mode unpacked-load ID is listed explicitly and all three go into the SAME manifest's allowed_origins (the Edge 'first registry location wins' gotcha — see P2 PRD §A7). Pre-publish, `dev` is the unpacked-load ID printed at chrome://extensions; replace `chromeWebStore` and `edgeAddons` with the assigned IDs once the products land in their stores.",
|
|
3
|
+
"chromeWebStore": "PLACEHOLDER_CHROME_WEB_STORE_ID",
|
|
4
|
+
"edgeAddons": "PLACEHOLDER_EDGE_ADDONS_ID",
|
|
5
|
+
"dev": "PLACEHOLDER_DEV_UNPACKED_ID"
|
|
6
|
+
}
|