@polishd/next 0.2.3-dev.0 → 0.2.3-dev.2

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 (106) hide show
  1. package/AGENTS.md +1 -0
  2. package/CHANGELOG.md +144 -0
  3. package/README.md +34 -3
  4. package/dist/ai/digest.d.ts.map +1 -1
  5. package/dist/ai/digest.js +3 -2
  6. package/dist/ai/digest.js.map +1 -1
  7. package/dist/ai/github.d.ts +22 -1
  8. package/dist/ai/github.d.ts.map +1 -1
  9. package/dist/ai/github.js +99 -3
  10. package/dist/ai/github.js.map +1 -1
  11. package/dist/ai/issue-pages.d.ts +52 -0
  12. package/dist/ai/issue-pages.d.ts.map +1 -0
  13. package/dist/ai/issue-pages.js +50 -0
  14. package/dist/ai/issue-pages.js.map +1 -0
  15. package/dist/ai/issues.d.ts +13 -1
  16. package/dist/ai/issues.d.ts.map +1 -1
  17. package/dist/ai/issues.js +60 -4
  18. package/dist/ai/issues.js.map +1 -1
  19. package/dist/ai/summary.d.ts.map +1 -1
  20. package/dist/ai/summary.js +7 -0
  21. package/dist/ai/summary.js.map +1 -1
  22. package/dist/ai/types.d.ts +43 -0
  23. package/dist/ai/types.d.ts.map +1 -1
  24. package/dist/client/dom.d.ts +23 -0
  25. package/dist/client/dom.d.ts.map +1 -1
  26. package/dist/client/dom.js +45 -2
  27. package/dist/client/dom.js.map +1 -1
  28. package/dist/client/init.d.ts.map +1 -1
  29. package/dist/client/init.js +15 -6
  30. package/dist/client/init.js.map +1 -1
  31. package/dist/client/monitor.d.ts.map +1 -1
  32. package/dist/client/monitor.js +5 -1
  33. package/dist/client/monitor.js.map +1 -1
  34. package/dist/dashboard/chrome.d.ts +4 -2
  35. package/dist/dashboard/chrome.d.ts.map +1 -1
  36. package/dist/dashboard/chrome.js +15 -5
  37. package/dist/dashboard/chrome.js.map +1 -1
  38. package/dist/dashboard/design.d.ts +3 -1
  39. package/dist/dashboard/design.d.ts.map +1 -1
  40. package/dist/dashboard/design.js +2 -2
  41. package/dist/dashboard/design.js.map +1 -1
  42. package/dist/dashboard/drawer.d.ts +34 -0
  43. package/dist/dashboard/drawer.d.ts.map +1 -0
  44. package/dist/dashboard/drawer.js +44 -0
  45. package/dist/dashboard/drawer.js.map +1 -0
  46. package/dist/dashboard/index.d.ts +3 -1
  47. package/dist/dashboard/index.d.ts.map +1 -1
  48. package/dist/dashboard/index.js +29 -23
  49. package/dist/dashboard/index.js.map +1 -1
  50. package/dist/dashboard/issues.d.ts +9 -0
  51. package/dist/dashboard/issues.d.ts.map +1 -0
  52. package/dist/dashboard/issues.js +81 -0
  53. package/dist/dashboard/issues.js.map +1 -0
  54. package/dist/dashboard/journeys.d.ts.map +1 -1
  55. package/dist/dashboard/journeys.js +1 -0
  56. package/dist/dashboard/journeys.js.map +1 -1
  57. package/dist/dashboard/metric-trends.d.ts +6 -0
  58. package/dist/dashboard/metric-trends.d.ts.map +1 -0
  59. package/dist/dashboard/metric-trends.js +236 -0
  60. package/dist/dashboard/metric-trends.js.map +1 -0
  61. package/dist/dashboard/pages.d.ts.map +1 -1
  62. package/dist/dashboard/pages.js +7 -45
  63. package/dist/dashboard/pages.js.map +1 -1
  64. package/dist/dashboard/snapshots.d.ts +8 -1
  65. package/dist/dashboard/snapshots.d.ts.map +1 -1
  66. package/dist/dashboard/snapshots.js +6 -4
  67. package/dist/dashboard/snapshots.js.map +1 -1
  68. package/dist/dashboard/telemetry.d.ts.map +1 -1
  69. package/dist/dashboard/telemetry.js +5 -4
  70. package/dist/dashboard/telemetry.js.map +1 -1
  71. package/dist/dashboard/ui.d.ts +33 -6
  72. package/dist/dashboard/ui.d.ts.map +1 -1
  73. package/dist/dashboard/ui.js +44 -6
  74. package/dist/dashboard/ui.js.map +1 -1
  75. package/dist/dashboard.css +114 -0
  76. package/dist/server/ingest.d.ts.map +1 -1
  77. package/dist/server/ingest.js +7 -0
  78. package/dist/server/ingest.js.map +1 -1
  79. package/dist/server/queries.d.ts +41 -0
  80. package/dist/server/queries.d.ts.map +1 -1
  81. package/dist/server/queries.js +109 -3
  82. package/dist/server/queries.js.map +1 -1
  83. package/dist/server/reclassify.d.ts +3 -0
  84. package/dist/server/reclassify.d.ts.map +1 -0
  85. package/dist/server/reclassify.js +65 -0
  86. package/dist/server/reclassify.js.map +1 -0
  87. package/dist/server/snapshots.d.ts +20 -2
  88. package/dist/server/snapshots.d.ts.map +1 -1
  89. package/dist/server/snapshots.js +216 -20
  90. package/dist/server/snapshots.js.map +1 -1
  91. package/dist/server/store.d.ts +5 -0
  92. package/dist/server/store.d.ts.map +1 -1
  93. package/dist/server/store.js +17 -0
  94. package/dist/server/store.js.map +1 -1
  95. package/dist/shared/metric-buckets.d.ts +31 -0
  96. package/dist/shared/metric-buckets.d.ts.map +1 -0
  97. package/dist/shared/metric-buckets.js +49 -0
  98. package/dist/shared/metric-buckets.js.map +1 -0
  99. package/dist/shared/text-signals.d.ts +56 -0
  100. package/dist/shared/text-signals.d.ts.map +1 -0
  101. package/dist/shared/text-signals.js +80 -0
  102. package/dist/shared/text-signals.js.map +1 -0
  103. package/dist/shared/types.d.ts +1 -1
  104. package/dist/shared/types.d.ts.map +1 -1
  105. package/dist/shared/types.js.map +1 -1
  106. package/package.json +4 -2
@@ -2,19 +2,27 @@
2
2
  * Polishd — site snapshots (server only).
3
3
  *
4
4
  * Full-page screenshots of the host site, captured with `allpages` (Playwright
5
- * underneath) and kept on disk under `.polishd/snapshots/<id>/`. The store's
6
- * metadata table holds only the index — which snapshots exist, the shots each
7
- * produced, and the design-metrics fingerprint at capture time — so a snapshot
8
- * taken before a round of design fixes can later be paired with one taken
9
- * after, and shots can feed the aesthetic review.
5
+ * underneath). The store's metadata table holds only the index — which
6
+ * snapshots exist, the shots each produced, and the design-metrics fingerprint
7
+ * at capture time — so a snapshot taken before a round of design fixes can
8
+ * later be paired with one taken after, and shots can feed the aesthetic
9
+ * review.
10
10
  *
11
- * Capture is a dev-time affair: it needs a writable filesystem and a Chromium
12
- * it can launch, both true on the laptop running `next dev` and generally
13
- * false on serverless hosts. Every failure degrades to a message, never a
14
- * crash — the same contract as the rest of the server layer.
11
+ * The images themselves live in one of two places. On a laptop running
12
+ * `next dev` they sit on disk under `.polishd/snapshots/<id>/`. On Vercel —
13
+ * where the filesystem is read-only and gone by the next invocation — they
14
+ * upload to Vercel Blob instead, switched on by nothing more than the
15
+ * `BLOB_READ_WRITE_TOKEN` a connected Blob store injects. The browser follows
16
+ * the same split: the user's own Chrome or Playwright's Chromium locally,
17
+ * the `@sparticuz/chromium` build (a Chromium compiled to run inside
18
+ * Lambda-shaped Linux containers) as the serverless fallback. Both arrive as
19
+ * optional dependencies, so a standard install needs no extra wiring. Every
20
+ * failure degrades to a message, never a crash — the same contract as the
21
+ * rest of the server layer.
15
22
  */
16
23
  import { isAbsolute, join } from "node:path";
17
- import { mkdir, readFile, rm } from "node:fs/promises";
24
+ import { mkdir, mkdtemp, readFile, rm } from "node:fs/promises";
25
+ import { tmpdir } from "node:os";
18
26
  import { getMeta, setMeta, storeReady } from "./store";
19
27
  const INDEX_KEY = "design_snapshots";
20
28
  /** Snapshots kept before the oldest is pruned (files and index entry both). */
@@ -24,7 +32,16 @@ export const MAX_SNAPSHOT_ROUTES = 12;
24
32
  /** The device/theme matrix every snapshot shoots. */
25
33
  const SNAPSHOT_DEVICES = ["phone", "desktop"];
26
34
  const SNAPSHOT_THEMES = ["light", "dark"];
27
- /** Where snapshot directories live. Sits next to the dev SQLite file. */
35
+ /**
36
+ * True when shots should upload to Vercel Blob rather than land on disk.
37
+ * `BLOB_READ_WRITE_TOKEN` is injected automatically once a Blob store is
38
+ * connected to the project, so presence of the variable is the whole signal —
39
+ * no Polishd-specific configuration on top.
40
+ */
41
+ function blobConfigured() {
42
+ return Boolean(process.env.BLOB_READ_WRITE_TOKEN);
43
+ }
44
+ /** Where disk-stored snapshot directories live. Sits next to the dev SQLite file. */
28
45
  function snapshotsRoot() {
29
46
  const configured = process.env.POLISHD_SNAPSHOT_DIR;
30
47
  if (configured) {
@@ -53,7 +70,8 @@ export async function listSnapshots() {
53
70
  /**
54
71
  * Read one shot's image as a data URL, or null when it doesn't exist. The
55
72
  * filename is only accepted when the index lists it for that snapshot, so a
56
- * caller can never read outside a snapshot directory.
73
+ * caller can never read outside a snapshot directory — and Blob-stored shots
74
+ * are only ever fetched from the URL the index recorded at capture time.
57
75
  */
58
76
  export async function readSnapshotImage(snapshotId, file) {
59
77
  const index = await loadIndex();
@@ -62,6 +80,13 @@ export async function readSnapshotImage(snapshotId, file) {
62
80
  if (!snapshot || !shot)
63
81
  return null;
64
82
  try {
83
+ if (shot.url) {
84
+ const res = await fetch(shot.url);
85
+ if (!res.ok)
86
+ return null;
87
+ const bytes = Buffer.from(await res.arrayBuffer());
88
+ return `data:image/png;base64,${bytes.toString("base64")}`;
89
+ }
65
90
  const bytes = await readFile(join(snapshotsRoot(), snapshot.id, "shots", shot.file));
66
91
  return `data:image/png;base64,${bytes.toString("base64")}`;
67
92
  }
@@ -69,11 +94,74 @@ export async function readSnapshotImage(snapshotId, file) {
69
94
  return null; // Directory pruned or deleted by hand — the tile shows a blank.
70
95
  }
71
96
  }
97
+ // ── Storage ──────────────────────────────────────────────────────────────────
98
+ /**
99
+ * Upload every captured PNG to Vercel Blob and annotate each shot with its
100
+ * URL. The pathnames get a random suffix: public-but-unguessable is the only
101
+ * access model Blob offers, and the dashboard still serves images through the
102
+ * auth-gated action rather than handing these URLs to the browser. Returns an
103
+ * error message, or null when every image landed; on failure the ones already
104
+ * uploaded are deleted, so a half-stored snapshot never survives.
105
+ */
106
+ async function uploadShots(id, outDir, shots) {
107
+ let blob;
108
+ try {
109
+ blob = await import("@vercel/blob");
110
+ }
111
+ catch {
112
+ return ("Blob storage is configured (BLOB_READ_WRITE_TOKEN is set) but @vercel/blob " +
113
+ "isn't installed. It ships as an optional dependency of @polishd/next — " +
114
+ "reinstall without `--omit=optional`.");
115
+ }
116
+ const uploaded = [];
117
+ try {
118
+ for (const shot of shots) {
119
+ if (!shot.file)
120
+ continue;
121
+ const bytes = await readFile(join(outDir, "shots", shot.file));
122
+ const { url } = await blob.put(`polishd/snapshots/${id}/${shot.file}`, bytes, {
123
+ access: "public",
124
+ contentType: "image/png",
125
+ addRandomSuffix: true,
126
+ });
127
+ shot.url = url;
128
+ uploaded.push(url);
129
+ }
130
+ return null;
131
+ }
132
+ catch (err) {
133
+ if (uploaded.length > 0)
134
+ await blob.del(uploaded).catch(() => { });
135
+ return `Couldn't upload screenshots to Vercel Blob: ${err instanceof Error ? err.message : "unknown error"}`;
136
+ }
137
+ }
138
+ /**
139
+ * Best-effort removal of a snapshot's images, wherever they were stored.
140
+ * Blob-stored shots carry their URLs in the index; disk-stored ones sit in a
141
+ * directory named by the snapshot id. Both paths swallow failure — an orphaned
142
+ * blob costs cents, a prune that crashed the capture would cost the feature.
143
+ */
144
+ async function deleteSnapshotImages(snapshot) {
145
+ const urls = snapshot.shots.flatMap((s) => (s.url ? [s.url] : []));
146
+ if (urls.length > 0) {
147
+ try {
148
+ const { del } = await import("@vercel/blob");
149
+ await del(urls);
150
+ }
151
+ catch {
152
+ // SDK missing or the store unreachable — leave the orphans.
153
+ }
154
+ }
155
+ await rm(join(snapshotsRoot(), snapshot.id), { recursive: true, force: true }).catch(() => { });
156
+ }
72
157
  /**
73
158
  * Launch a Chromium the way the allpages CLI does — the user's own Chrome or
74
- * Edge first, Playwright's downloaded Chromium as the fallback — but never
75
- * auto-download a browser: that is a 120 MB side effect no dashboard button
76
- * should trigger silently, so it surfaces as an instruction instead.
159
+ * Edge first, Playwright's downloaded Chromium next — but never auto-download
160
+ * a browser: that is a 120 MB side effect no dashboard button should trigger
161
+ * silently. On Linux with none of those (the shape of every serverless
162
+ * container) the `@sparticuz/chromium` build takes over: a Chromium compiled
163
+ * to unpack and run inside Lambda-style sandboxes, installed as an optional
164
+ * dependency so production needs no setup step.
77
165
  */
78
166
  async function launchBrowser() {
79
167
  const { chromium } = await import("playwright-core");
@@ -86,15 +174,97 @@ async function launchBrowser() {
86
174
  // Try the next channel.
87
175
  }
88
176
  }
177
+ if (process.platform === "linux") {
178
+ let sparticuz;
179
+ try {
180
+ sparticuz = (await import("@sparticuz/chromium")).default;
181
+ }
182
+ catch {
183
+ sparticuz = null; // Omitted from the install — named in the message below.
184
+ }
185
+ if (sparticuz) {
186
+ try {
187
+ return {
188
+ browser: await chromium.launch({
189
+ // The sparticuz flags (--no-sandbox, --single-process, …) are what
190
+ // let Chromium run in a serverless sandbox at all; ours follow.
191
+ args: [...sparticuz.args, ...args],
192
+ executablePath: await sparticuz.executablePath(),
193
+ }),
194
+ };
195
+ }
196
+ catch (err) {
197
+ return {
198
+ message: `The serverless Chromium (@sparticuz/chromium) failed to launch: ${err instanceof Error ? err.message : "unknown error"}`,
199
+ };
200
+ }
201
+ }
202
+ return {
203
+ message: "Couldn't start a browser for screenshots — no Chrome, Edge, or Playwright " +
204
+ "Chromium was found, and the @sparticuz/chromium fallback isn't installed. " +
205
+ "It ships as an optional dependency of @polishd/next, so this install was " +
206
+ "likely run with `--omit=optional` — reinstall with optional dependencies " +
207
+ "included (or run `npx playwright install chromium`), then capture again.",
208
+ };
209
+ }
89
210
  return {
90
211
  message: "Couldn't start a browser for screenshots — no Chrome or Edge was found, and " +
91
212
  "Playwright's Chromium isn't installed. Run `npx playwright install chromium` " +
92
213
  "once, then capture again.",
93
214
  };
94
215
  }
216
+ /**
217
+ * A problem that will make the next capture fail, detectable from the
218
+ * environment alone — or null when none is. Covers the two setup gaps a
219
+ * serverless deploy can have: no Blob store connected (nowhere for images to
220
+ * live when the filesystem is read-only), and the `--omit=optional` install
221
+ * missing a dependency the environment says will be needed. Either way the
222
+ * dashboard can say so up front rather than a minute into a doomed capture,
223
+ * and `captureSnapshot` runs the same check for callers that never rendered
224
+ * the dashboard.
225
+ */
226
+ export async function snapshotCaptureIssue() {
227
+ // On Vercel the filesystem is read-only and reset between invocations, so
228
+ // disk storage — the fallback when no Blob token is present — cannot work.
229
+ // Without a connected store every capture is doomed before it starts.
230
+ if (process.env.VERCEL && !blobConfigured()) {
231
+ return ("Snapshot images have nowhere to live on this deployment: the filesystem " +
232
+ "is read-only and no Blob store is connected. Connect a Vercel Blob store " +
233
+ "to the project (Storage → Blob in the Vercel dashboard) — the " +
234
+ "BLOB_READ_WRITE_TOKEN it injects switches snapshot storage over " +
235
+ "automatically — then redeploy.");
236
+ }
237
+ if (blobConfigured()) {
238
+ try {
239
+ await import("@vercel/blob");
240
+ }
241
+ catch {
242
+ return ("Snapshot images would upload to Vercel Blob (BLOB_READ_WRITE_TOKEN is set), " +
243
+ "but @vercel/blob isn't installed. It ships as an optional dependency of " +
244
+ "@polishd/next, so this install was likely run with `--omit=optional` — " +
245
+ "reinstall with optional dependencies included, then redeploy.");
246
+ }
247
+ }
248
+ // On Vercel there is never a system Chrome and never a Playwright download,
249
+ // so the sparticuz build is not a fallback but the only browser that can
250
+ // launch — its absence is a certain failure worth flagging early.
251
+ if (process.env.VERCEL && process.platform === "linux") {
252
+ try {
253
+ await import("@sparticuz/chromium");
254
+ }
255
+ catch {
256
+ return ("Capturing snapshots here needs the serverless Chromium from " +
257
+ "@sparticuz/chromium, which isn't installed. It ships as an optional " +
258
+ "dependency of @polishd/next, so this install was likely run with " +
259
+ "`--omit=optional` — reinstall with optional dependencies included, " +
260
+ "then redeploy.");
261
+ }
262
+ }
263
+ return null;
264
+ }
95
265
  /**
96
266
  * Shoot the given routes and record the run in the snapshot index. Old
97
- * snapshots past `MAX_SNAPSHOTS` are pruned, files included.
267
+ * snapshots past `MAX_SNAPSHOTS` are pruned, images included.
98
268
  */
99
269
  export async function captureSnapshot(input) {
100
270
  if (!(await storeReady())) {
@@ -104,6 +274,13 @@ export async function captureSnapshot(input) {
104
274
  "Run locally or configure a database — see DATABASE.md.",
105
275
  };
106
276
  }
277
+ // The same preflight the dashboard runs before enabling the capture button.
278
+ // Actions are reachable without the dashboard ever rendering, so a doomed
279
+ // environment must fail here too — with the diagnosis, not a minute of
280
+ // capture ending in an EROFS.
281
+ const issue = await snapshotCaptureIssue();
282
+ if (issue)
283
+ return { ok: false, message: issue };
107
284
  let run;
108
285
  try {
109
286
  ({ allpages: run } = await import("allpages"));
@@ -118,9 +295,19 @@ export async function captureSnapshot(input) {
118
295
  if ("message" in launched)
119
296
  return { ok: false, message: launched.message };
120
297
  const id = `${Date.now().toString(36)}`;
121
- const outDir = join(snapshotsRoot(), id);
298
+ const toBlob = blobConfigured();
299
+ // In Blob mode allpages still writes to disk first, but into the system
300
+ // temp directory — the one location serverless hosts keep writable — and
301
+ // the files only exist for the moments between capture and upload.
302
+ let outDir;
122
303
  try {
123
- await mkdir(outDir, { recursive: true });
304
+ if (toBlob) {
305
+ outDir = await mkdtemp(join(tmpdir(), "polishd-snapshot-"));
306
+ }
307
+ else {
308
+ outDir = join(snapshotsRoot(), id);
309
+ await mkdir(outDir, { recursive: true });
310
+ }
124
311
  }
125
312
  catch (err) {
126
313
  await launched.browser.close().catch(() => { });
@@ -164,19 +351,24 @@ export async function captureSnapshot(input) {
164
351
  `${input.origin} from this process?`,
165
352
  };
166
353
  }
354
+ if (toBlob) {
355
+ const failure = await uploadShots(id, outDir, snapshot.shots);
356
+ if (failure)
357
+ return { ok: false, message: failure };
358
+ }
167
359
  const index = await loadIndex();
168
360
  index.snapshots.unshift(snapshot);
169
361
  const pruned = index.snapshots.slice(MAX_SNAPSHOTS);
170
362
  index.snapshots = index.snapshots.slice(0, MAX_SNAPSHOTS);
171
363
  if (!(await setMeta(INDEX_KEY, JSON.stringify(index)))) {
172
- await rm(outDir, { recursive: true, force: true }).catch(() => { });
364
+ await deleteSnapshotImages(snapshot);
173
365
  return {
174
366
  ok: false,
175
367
  message: "The snapshot was shot but the store refused to record it.",
176
368
  };
177
369
  }
178
370
  for (const old of pruned) {
179
- await rm(join(snapshotsRoot(), old.id), { recursive: true, force: true }).catch(() => { });
371
+ await deleteSnapshotImages(old);
180
372
  }
181
373
  return { ok: true, snapshot };
182
374
  }
@@ -189,6 +381,10 @@ export async function captureSnapshot(input) {
189
381
  }
190
382
  finally {
191
383
  await launched.browser.close().catch(() => { });
384
+ // The temp staging directory never outlives the capture; the disk-mode
385
+ // directory is the storage itself and stays.
386
+ if (toBlob)
387
+ await rm(outDir, { recursive: true, force: true }).catch(() => { });
192
388
  }
193
389
  }
194
390
  //# sourceMappingURL=snapshots.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/server/snapshots.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snapshots.js","sourceRoot":"","sources":["../../src/server/snapshots.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,11 @@ export declare function insertEvents(sessionId: string, events: PolishdEvent[],
18
18
  * dashboard) goes through here so it never has to know which backend is live.
19
19
  */
20
20
  export declare function query(sql: string, params?: unknown[]): Promise<Row[]>;
21
+ /**
22
+ * Run a portable write statement (UPDATE/DELETE), or no-op without a store.
23
+ * Returns whether the statement ran. Same `?` placeholder contract as `query`.
24
+ */
25
+ export declare function exec(sql: string, params?: unknown[]): Promise<boolean>;
21
26
  /** Read one metadata value by key, or null when absent / no store. */
22
27
  export declare function getMeta(key: string): Promise<string | null>;
23
28
  /** Upsert one metadata value. Returns false when the store is unavailable. */
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/server/store.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAErE;;;GAGG;AACH,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAmTnC,6EAA6E;AAC7E,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAEnD;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAY/E;AAQD,sEAAsE;AACtE,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIjE;AAED,8EAA8E;AAC9E,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB1E;AAED,mEAAmE;AACnE,wBAAsB,OAAO,CAAC,KAAK,SAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAGtE;AAmBD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAW/D"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/server/store.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAErE;;;GAGG;AACH,KAAK,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAmTnC,6EAA6E;AAC7E,wBAAsB,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAEnD;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,YAAY,EAAE,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAY/E;AAED;;;GAGG;AACH,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAahF;AAQD,sEAAsE;AACtE,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAIjE;AAED,8EAA8E;AAC9E,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB1E;AAED,mEAAmE;AACnE,wBAAsB,OAAO,CAAC,KAAK,SAAO,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAGtE;AAmBD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAW/D"}
@@ -311,6 +311,23 @@ export async function query(sql, params = []) {
311
311
  return [];
312
312
  }
313
313
  }
314
+ /**
315
+ * Run a portable write statement (UPDATE/DELETE), or no-op without a store.
316
+ * Returns whether the statement ran. Same `?` placeholder contract as `query`.
317
+ */
318
+ export async function exec(sql, params = []) {
319
+ const b = await getBackend();
320
+ if (!b)
321
+ return false;
322
+ try {
323
+ await b.exec(sql, params);
324
+ return true;
325
+ }
326
+ catch (err) {
327
+ console.warn("[polishd] exec failed:", err instanceof Error ? err.message : err);
328
+ return false;
329
+ }
330
+ }
314
331
  // ── Key/value metadata (polishd_meta) ──────────────────────────────────────────
315
332
  // A tiny single-row-per-key store for things that aren't events: the AI
316
333
  // settings the dashboard owner configures, and the last generated AI summary
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/server/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/server/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAkBjD,0EAA0E;AAC1E,MAAM,WAAW,GACf,6FAA6F,CAAC;AAEhG,yEAAyE;AACzE,SAAS,WAAW,CAClB,SAAiB,EACjB,CAAe,EACf,GAAW,EACX,SAAkB;IAElB,OAAO;QACL,SAAS;QACT,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,QAAQ,IAAI,IAAI;QAClB,CAAC,CAAC,SAAS,IAAI,IAAI;QACnB,CAAC,CAAC,IAAI,IAAI,IAAI;QACd,CAAC,CAAC,KAAK,IAAI,IAAI;QACf,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;QACtC,GAAG;QACH,SAAS,IAAI,IAAI;KAClB,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,iFAAiF;AACjF,0EAA0E;AAC1E,6EAA6E;AAC7E,+EAA+E;AAC/E,4EAA4E;AAC5E,iEAAiE;AAEjE,SAAS,iBAAiB,CAAC,IAA2B,EAAE,GAAW;IACjE,IAAI,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,IAAoC,EACpC,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,SAAS,aAAa;IACpB,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,eAAe;QAC3B,OAAO,CAAC,GAAG,CAAC,aAAa;QACzB,OAAO,CAAC,GAAG,CAAC,cAAc;QAC1B,oBAAoB,CAAC,YAAY,CAAC;IACpC,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAC;AAC/E,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,0EAA0E;IAC1E,yEAAyE;IACzE,8EAA8E;IAC9E,4EAA4E;IAC5E,uCAAuC;IACvC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;IAErD,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9C,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;GAwBP,CAAC,CAAC;IAEH,6EAA6E;IAC7E,uEAAuE;IACvE,6EAA6E;IAC7E,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,mEAAmE;IACrE,CAAC;IACD,EAAE,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;IAE/E,iBAAiB,CACf,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EACrB;mDAC+C,CAChD,CAAC;IAEF,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS;YACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CACrB,uBAAuB,WAAW,4CAA4C,CAC/E,CAAC;YACF,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,2EAA2E;YAC3E,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjB,IAAI,CAAC;gBACH,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;oBACvB,IAAI,CAAC,GAAG,CAAC,GAAI,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,CAAa,CAAC,CAAC;oBACpE,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACpB,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE;YAC1B,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAI,MAAkB,CAAU,CAAC;QAC9D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE;YACzB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAI,MAAkB,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,SAAS,YAAY,CAAC,GAAW;IAC/B,4EAA4E;IAC5E,8EAA8E;IAC9E,8DAA8D;IAC9D,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAwB,CAAC;IAE7D,8EAA8E;IAC9E,4EAA4E;IAC5E,0EAA0E;IAC1E,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACtE,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEtE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;QACpB,gBAAgB,EAAE,GAAG;QACrB,yEAAyE;QACzE,uEAAuE;QACvE,iEAAiE;QACjE,GAAG,EAAE,CAAC;QACN,iBAAiB,EAAE,MAAM;QACzB,mEAAmE;QACnE,sEAAsE;QACtE,GAAG,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE;KACnC,CAAC,CAAC;IAEH,6EAA6E;IAC7E,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BxB,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,sBAAsB,CAC1B,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAC9C;;oCAE8B,CAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS;YACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YAClC,MAAM,KAAK,CAAC;YACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,uCAAuC;YACxD,MAAM,MAAM,GAAc,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE;gBACxB,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;gBACxB,mEAAmE;gBACnE,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC/C,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CACzD,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,SAAS,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAC1B,uBAAuB,WAAW,YAAY,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACjE,MAAM,CACP,CAAC;YACF,OAAO,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE;YAC1B,MAAM,KAAK,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAmB,CAAC,CAAC;YAC7D,OAAO,GAAG,CAAC,IAAa,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE;YACzB,MAAM,KAAK,CAAC;YACZ,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAmB,CAAC,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,iFAAiF;AACjF,IAAI,OAAmC,CAAC;AACxC,gFAAgF;AAChF,IAAI,WAAW,GAAmC,IAAI,CAAC;AAEvD,KAAK,UAAU,UAAU;IACvB,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC;IAC1C,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;QACxB,IAAI,CAAC;YACH,gEAAgE;YAChE,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,oBAAoB;gBAChC,OAAO,CAAC,GAAG,CAAC,kBAAkB;gBAC9B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAClC,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC7B,sEAAsE;gBACtE,kEAAkE;gBAClE,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC3B,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,0DAA0D,EAC1D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;YACF,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,OAAO,CAAC,MAAM,UAAU,EAAE,CAAC,KAAK,IAAI,CAAC;AACvC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB,EACjB,MAAsB,EACtB,SAAkB;IAElB,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,0CAA0C,EAC1C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAW,EAAE,SAAoB,EAAE;IAC7D,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAClB,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,yBAAyB,EACzB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,SAAoB,EAAE;IAC5D,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,wBAAwB,EACxB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,wEAAwE;AACxE,6EAA6E;AAC7E,wEAAwE;AACxE,6EAA6E;AAE7E,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW;IACvC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,8CAA8C,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAChF,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;IACzB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AAED,8EAA8E;AAC9E,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,GAAW,EAAE,KAAa;IACtD,MAAM,CAAC,GAAG,MAAM,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,CAAC,CAAC,IAAI,CACV;gGAC0F,EAC1F,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CACzB,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,2BAA2B,EAC3B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACzC,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAK,GAAG,IAAI;IACxC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,+CAA+C,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACnF,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,WAAW,CAAC,GAAQ;IAC3B,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,UAAU,EAAE,GAAG,CAAC,UAAoB;QACpC,IAAI,EAAE,GAAG,CAAC,IAA+B;QACzC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,IAAI,EAAE,GAAG,CAAC,IAAc;QACxB,QAAQ,EAAG,GAAG,CAAC,QAAmB,IAAI,SAAS;QAC/C,SAAS,EAAG,GAAG,CAAC,SAAoB,IAAI,SAAS;QACjD,IAAI,EAAG,GAAG,CAAC,IAAe,IAAI,SAAS;QACvC,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;QACxD,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC;QACpC,UAAU,EAAG,GAAG,CAAC,UAAqB,IAAI,SAAS;KACpD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAA8B,CAAC;IACnE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Polishd — which time buckets a trend chart should draw.
3
+ *
4
+ * Pure: no database, no React, no clock of its own. The counting happens in
5
+ * SQL (see `getMetricTrends`); this decides the *shape* of the series that
6
+ * comes out of it, which is where the edge cases live:
7
+ *
8
+ * • **Gap filling.** An hour with no events is a measured zero, not a
9
+ * missing point. Without this a quiet night would render as one wide bar
10
+ * next to another, silently compressing the axis.
11
+ * • **A cap.** A site running for two years has 17,000 hourly buckets. Only
12
+ * the most recent `maxBuckets` are drawn.
13
+ * • **Anchoring on data, not on now.** The window ends at the newest bucket
14
+ * that has something in it, so an install last browsed three days ago
15
+ * still gets a chart instead of an empty one.
16
+ * • **Clock skew.** `ts` is the visitor's clock. One machine set to next
17
+ * year would otherwise anchor the window there and blank the chart for
18
+ * everyone, so buckets past the present are discarded.
19
+ */
20
+ /**
21
+ * The contiguous run of bucket indexes to render, oldest → newest.
22
+ *
23
+ * @param buckets Bucket indexes that hold data, in any order.
24
+ * @param maxBuckets How many to draw at most; the newest win.
25
+ * @param nowBucket The bucket the present falls in. Anything later is
26
+ * discarded as clock skew.
27
+ * @returns Every index from the window's start to its end inclusive — callers
28
+ * fill the ones with no data with zeros. Empty when nothing qualifies.
29
+ */
30
+ export declare function trendWindow(buckets: Iterable<number>, maxBuckets: number, nowBucket: number): number[];
31
+ //# sourceMappingURL=metric-buckets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-buckets.d.ts","sourceRoot":"","sources":["../../src/shared/metric-buckets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EACzB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,MAAM,EAAE,CAcV"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Polishd — which time buckets a trend chart should draw.
3
+ *
4
+ * Pure: no database, no React, no clock of its own. The counting happens in
5
+ * SQL (see `getMetricTrends`); this decides the *shape* of the series that
6
+ * comes out of it, which is where the edge cases live:
7
+ *
8
+ * • **Gap filling.** An hour with no events is a measured zero, not a
9
+ * missing point. Without this a quiet night would render as one wide bar
10
+ * next to another, silently compressing the axis.
11
+ * • **A cap.** A site running for two years has 17,000 hourly buckets. Only
12
+ * the most recent `maxBuckets` are drawn.
13
+ * • **Anchoring on data, not on now.** The window ends at the newest bucket
14
+ * that has something in it, so an install last browsed three days ago
15
+ * still gets a chart instead of an empty one.
16
+ * • **Clock skew.** `ts` is the visitor's clock. One machine set to next
17
+ * year would otherwise anchor the window there and blank the chart for
18
+ * everyone, so buckets past the present are discarded.
19
+ */
20
+ /**
21
+ * The contiguous run of bucket indexes to render, oldest → newest.
22
+ *
23
+ * @param buckets Bucket indexes that hold data, in any order.
24
+ * @param maxBuckets How many to draw at most; the newest win.
25
+ * @param nowBucket The bucket the present falls in. Anything later is
26
+ * discarded as clock skew.
27
+ * @returns Every index from the window's start to its end inclusive — callers
28
+ * fill the ones with no data with zeros. Empty when nothing qualifies.
29
+ */
30
+ export function trendWindow(buckets, maxBuckets, nowBucket) {
31
+ let first = null;
32
+ let last = null;
33
+ for (const b of buckets) {
34
+ if (b > nowBucket)
35
+ continue;
36
+ if (first === null || b < first)
37
+ first = b;
38
+ if (last === null || b > last)
39
+ last = b;
40
+ }
41
+ if (first === null || last === null)
42
+ return [];
43
+ const start = Math.max(first, last - (Math.max(1, maxBuckets) - 1));
44
+ const out = [];
45
+ for (let b = start; b <= last; b++)
46
+ out.push(b);
47
+ return out;
48
+ }
49
+ //# sourceMappingURL=metric-buckets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metric-buckets.js","sourceRoot":"","sources":["../../src/shared/metric-buckets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,WAAW,CACzB,OAAyB,EACzB,UAAkB,EAClB,SAAiB;IAEjB,IAAI,KAAK,GAAkB,IAAI,CAAC;IAChC,IAAI,IAAI,GAAkB,IAAI,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,GAAG,SAAS;YAAE,SAAS;QAC5B,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,GAAG,KAAK;YAAE,KAAK,GAAG,CAAC,CAAC;QAC3C,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,IAAI;YAAE,IAAI,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IAE/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Polishd — shared "was this click about text?" heuristics.
3
+ *
4
+ * One source of truth used from two sides that must never drift:
5
+ *
6
+ * • Live, in the browser (`src/client/dom.ts`) — deciding whether a click
7
+ * records as dead/rage or is just reading.
8
+ * • Retroactively, on the server (`src/server/reclassify.ts`) — applying the
9
+ * same decision to rows stored by older clients, using the stored
10
+ * `selector` (which keeps the same 4-level tag path the live ancestor walk
11
+ * sees) and `text` label in place of the DOM.
12
+ *
13
+ * Dependency-free and runtime-agnostic, like the rest of `shared/`.
14
+ */
15
+ /**
16
+ * Block-level prose containers. A click anywhere inside one — including on a
17
+ * bold word or code span nested in it — is reading, never a dead control.
18
+ */
19
+ export declare const PROSE_TAGS: ReadonlySet<string>;
20
+ /**
21
+ * Inline / cell-level text elements. These carry text but are also the exact
22
+ * shape of a mis-wired fake control (`<span class="link">Click here</span>`),
23
+ * so on their own they only read as prose past the length threshold below.
24
+ */
25
+ export declare const INLINE_TEXT_TAGS: ReadonlySet<string>;
26
+ /** Tags the capture layer treats as interactive (see `isInteractive`). */
27
+ export declare const INTERACTIVE_TAGS: ReadonlySet<string>;
28
+ /**
29
+ * The length heuristic: standalone text this long reads as content; anything
30
+ * shorter could be a label on something the user believed was clickable.
31
+ * Stored `text` labels are capped at 80 chars, so the threshold must stay
32
+ * under that cap for the retro classifier to see it.
33
+ */
34
+ export declare const PROSE_MIN_CHARS = 40;
35
+ /** Tag names of a stored selector path: "div.card>p.intro>span" → ["div","p","span"]. */
36
+ export declare const selectorTags: (selector: string) => string[];
37
+ /**
38
+ * The retro mirror of the client's `isTextTarget`, over stored columns:
39
+ * a prose tag anywhere in the selector path stands in for the ancestor walk,
40
+ * and the stored label's length stands in for the target's own text. The label
41
+ * is `innerText`, which includes children — so a layout container wrapping
42
+ * prose can classify as textual here where the live check would not. For
43
+ * history that's the right bias: these rows were recorded under rules known to
44
+ * overcount, and reclassifying reading as reading is the point.
45
+ */
46
+ export declare const isTextualClickRow: (selector: string | undefined, text: string | undefined) => boolean;
47
+ /**
48
+ * The single server-side retype decision, shared by the one-time history sweep
49
+ * and the ingest backstop: a dead/rage click that landed on text becomes a
50
+ * `text_click` (kept, counted by nothing); everything else keeps its type. A
51
+ * rage row may have hammered a real control — the selector keeps its tag path,
52
+ * so anything interactive in it stays rage. (Dead clicks were only ever
53
+ * recorded on non-interactive targets — no guard needed.)
54
+ */
55
+ export declare const reclassifiedClickType: (type: string, selector: string | undefined, text: string | undefined) => string;
56
+ //# sourceMappingURL=text-signals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-signals.d.ts","sourceRoot":"","sources":["../../src/shared/text-signals.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,WAAW,CAAC,MAAM,CAGzC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAG/C,CAAC;AAEH,0EAA0E;AAC1E,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAE/C,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,yFAAyF;AACzF,eAAO,MAAM,YAAY,GAAI,UAAU,MAAM,KAAG,MAAM,EAIlC,CAAC;AAErB;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAC5B,UAAU,MAAM,GAAG,SAAS,EAC5B,MAAM,MAAM,GAAG,SAAS,KACvB,OAGF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,EACZ,UAAU,MAAM,GAAG,SAAS,EAC5B,MAAM,MAAM,GAAG,SAAS,KACvB,MAUF,CAAC"}