@polishd/next 0.2.2-dev.2 → 0.2.2-dev.4

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 (63) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/README.md +11 -0
  3. package/dist/client/design-scan.d.ts +17 -1
  4. package/dist/client/design-scan.d.ts.map +1 -1
  5. package/dist/client/design-scan.js +7 -3
  6. package/dist/client/design-scan.js.map +1 -1
  7. package/dist/dashboard/color-chip.d.ts +5 -0
  8. package/dist/dashboard/color-chip.d.ts.map +1 -0
  9. package/dist/dashboard/color-chip.js +81 -0
  10. package/dist/dashboard/color-chip.js.map +1 -0
  11. package/dist/dashboard/design-review-card.d.ts.map +1 -1
  12. package/dist/dashboard/design-review-card.js +6 -5
  13. package/dist/dashboard/design-review-card.js.map +1 -1
  14. package/dist/dashboard/design-tokens.d.ts +33 -0
  15. package/dist/dashboard/design-tokens.d.ts.map +1 -0
  16. package/dist/dashboard/design-tokens.js +64 -0
  17. package/dist/dashboard/design-tokens.js.map +1 -0
  18. package/dist/dashboard/design.d.ts.map +1 -1
  19. package/dist/dashboard/design.js +9 -9
  20. package/dist/dashboard/design.js.map +1 -1
  21. package/dist/dashboard/index.d.ts.map +1 -1
  22. package/dist/dashboard/index.js +3 -4
  23. package/dist/dashboard/index.js.map +1 -1
  24. package/dist/dashboard/installs.d.ts.map +1 -1
  25. package/dist/dashboard/installs.js +2 -1
  26. package/dist/dashboard/installs.js.map +1 -1
  27. package/dist/dashboard/journeys.d.ts.map +1 -1
  28. package/dist/dashboard/journeys.js +3 -2
  29. package/dist/dashboard/journeys.js.map +1 -1
  30. package/dist/dashboard/overflow-row.d.ts +24 -0
  31. package/dist/dashboard/overflow-row.d.ts.map +1 -0
  32. package/dist/dashboard/overflow-row.js +85 -0
  33. package/dist/dashboard/overflow-row.js.map +1 -0
  34. package/dist/dashboard/pages.d.ts.map +1 -1
  35. package/dist/dashboard/pages.js +1 -1
  36. package/dist/dashboard/pages.js.map +1 -1
  37. package/dist/dashboard/settings.d.ts.map +1 -1
  38. package/dist/dashboard/settings.js +6 -2
  39. package/dist/dashboard/settings.js.map +1 -1
  40. package/dist/dashboard/show-more.d.ts.map +1 -1
  41. package/dist/dashboard/show-more.js +1 -1
  42. package/dist/dashboard/show-more.js.map +1 -1
  43. package/dist/dashboard/summary.d.ts.map +1 -1
  44. package/dist/dashboard/summary.js +11 -6
  45. package/dist/dashboard/summary.js.map +1 -1
  46. package/dist/dashboard/telemetry.d.ts +3 -1
  47. package/dist/dashboard/telemetry.d.ts.map +1 -1
  48. package/dist/dashboard/telemetry.js +101 -9
  49. package/dist/dashboard/telemetry.js.map +1 -1
  50. package/dist/dashboard.css +69 -12
  51. package/dist/server/queries.d.ts +5 -0
  52. package/dist/server/queries.d.ts.map +1 -1
  53. package/dist/server/queries.js +44 -10
  54. package/dist/server/queries.js.map +1 -1
  55. package/dist/server/telemetry.d.ts +26 -0
  56. package/dist/server/telemetry.d.ts.map +1 -1
  57. package/dist/server/telemetry.js +42 -7
  58. package/dist/server/telemetry.js.map +1 -1
  59. package/dist/shared/types.d.ts +1 -1
  60. package/dist/shared/types.d.ts.map +1 -1
  61. package/dist/shared/types.js +4 -0
  62. package/dist/shared/types.js.map +1 -1
  63. package/package.json +1 -1
@@ -9,11 +9,37 @@ export type PolishdTelemetryStatus =
9
9
  | "unset"
10
10
  /** Env kill switch, or no writable store to keep consent in. */
11
11
  | "disabled";
12
+ /**
13
+ * The reporting install's own state, sent once per session as an
14
+ * `install_state` event so the collecting side can answer "how many installs
15
+ * have a model connected, and which ones". Resolved server-side from the same
16
+ * settings the dashboard renders — never the key itself, only its presence.
17
+ */
18
+ export interface PolishdTelemetryInstallState {
19
+ hasModel: boolean;
20
+ provider: string;
21
+ model: string;
22
+ }
12
23
  export interface PolishdTelemetryState {
13
24
  status: PolishdTelemetryStatus;
14
25
  endpoint: string;
26
+ /** Set only when status is "granted" — nothing is resolved before consent. */
27
+ installState: PolishdTelemetryInstallState | null;
15
28
  }
16
29
  export declare function telemetryDisabledByEnv(): boolean;
30
+ export type PolishdAnalyticsSource = "site" | "telemetry";
31
+ /**
32
+ * Which dataset the *whole dashboard* reads: the host site's own first-party
33
+ * events (default), or the cross-install telemetry it collects.
34
+ *
35
+ * `POLISHD_ANALYTICS_SOURCE=telemetry` is for the collecting installation
36
+ * (the polishd site) when what it cares about is the dashboard-usage story:
37
+ * every feature — Analytics, journeys, elements, device sizes, the Design
38
+ * tab, the AI summary — reads through one source function, so flipping this
39
+ * one env var points all of them at the telemetry rows. First-party events
40
+ * are still captured and stored, just not shown; flipping back loses nothing.
41
+ */
42
+ export declare function resolveAnalyticsSource(): PolishdAnalyticsSource;
17
43
  export declare function resolveTelemetryEndpoint(): string;
18
44
  /** Record the owner's decision. Overwrites any previous one. */
19
45
  export declare function saveTelemetryConsent(granted: boolean): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/server/telemetry.ts"],"names":[],"mappings":"AAsBA,kEAAkE;AAClE,eAAO,MAAM,0BAA0B,2DACmB,CAAC;AAI3D,MAAM,MAAM,sBAAsB;AAChC,wCAAwC;AACtC,SAAS;AACX,uDAAuD;GACrD,QAAQ;AACV,4DAA4D;GAC1D,OAAO;AACT,gEAAgE;GAC9D,UAAU,CAAC;AAEf,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,gEAAgE;AAChE,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1E;AAED,mEAAmE;AACnE,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAiBhF"}
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/server/telemetry.ts"],"names":[],"mappings":"AAuBA,kEAAkE;AAClE,eAAO,MAAM,0BAA0B,2DACmB,CAAC;AAI3D,MAAM,MAAM,sBAAsB;AAChC,wCAAwC;AACtC,SAAS;AACX,uDAAuD;GACrD,QAAQ;AACV,4DAA4D;GAC1D,OAAO;AACT,gEAAgE;GAC9D,UAAU,CAAC;AAEf;;;;;GAKG;AACH,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,YAAY,EAAE,4BAA4B,GAAG,IAAI,CAAC;CACnD;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAGhD;AAID,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,WAAW,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,IAAI,sBAAsB,CAE/D;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,gEAAgE;AAChE,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAK1E;AAgBD,mEAAmE;AACnE,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAwBhF"}
@@ -19,6 +19,7 @@
19
19
  * the host site's analytics, never its visitors' events.
20
20
  */
21
21
  import { getMeta, setMeta, storeReady } from "./store";
22
+ import { resolveSettings } from "../ai/settings";
22
23
  /** Where telemetry lands: the polishd site's own installation. */
23
24
  export const DEFAULT_TELEMETRY_ENDPOINT = "https://polishd.muskanvaswan.xyz/api/polishd-telemetry";
24
25
  const CONSENT_KEY = "telemetry_consent";
@@ -26,6 +27,20 @@ export function telemetryDisabledByEnv() {
26
27
  const v = process.env.POLISHD_TELEMETRY;
27
28
  return v !== undefined && /^(0|false|off|no)$/i.test(v.trim());
28
29
  }
30
+ /**
31
+ * Which dataset the *whole dashboard* reads: the host site's own first-party
32
+ * events (default), or the cross-install telemetry it collects.
33
+ *
34
+ * `POLISHD_ANALYTICS_SOURCE=telemetry` is for the collecting installation
35
+ * (the polishd site) when what it cares about is the dashboard-usage story:
36
+ * every feature — Analytics, journeys, elements, device sizes, the Design
37
+ * tab, the AI summary — reads through one source function, so flipping this
38
+ * one env var points all of them at the telemetry rows. First-party events
39
+ * are still captured and stored, just not shown; flipping back loses nothing.
40
+ */
41
+ export function resolveAnalyticsSource() {
42
+ return process.env.POLISHD_ANALYTICS_SOURCE === "telemetry" ? "telemetry" : "site";
43
+ }
29
44
  export function resolveTelemetryEndpoint() {
30
45
  return process.env.POLISHD_TELEMETRY_ENDPOINT || DEFAULT_TELEMETRY_ENDPOINT;
31
46
  }
@@ -33,28 +48,48 @@ export function resolveTelemetryEndpoint() {
33
48
  export async function saveTelemetryConsent(granted) {
34
49
  await setMeta(CONSENT_KEY, JSON.stringify({ status: granted ? "granted" : "denied", at: Date.now() }));
35
50
  }
51
+ /** The install-state snapshot the emitter reports. Never includes secrets. */
52
+ async function loadInstallState() {
53
+ try {
54
+ const { settings } = await resolveSettings();
55
+ return {
56
+ hasModel: settings.apiKey.length > 0,
57
+ provider: settings.provider,
58
+ model: settings.model,
59
+ };
60
+ }
61
+ catch {
62
+ return { hasModel: false, provider: "", model: "" };
63
+ }
64
+ }
36
65
  /** What the dashboard should do about telemetry on this render. */
37
66
  export async function loadPolishdTelemetryState() {
38
67
  const endpoint = resolveTelemetryEndpoint();
68
+ const off = (status) => ({
69
+ status,
70
+ endpoint,
71
+ installState: null,
72
+ });
39
73
  if (telemetryDisabledByEnv())
40
- return { status: "disabled", endpoint };
74
+ return off("disabled");
41
75
  // Without a writable store there is nowhere to keep the answer, so asking
42
76
  // would mean asking on every single render. Stay quiet instead.
43
77
  if (!(await storeReady()))
44
- return { status: "disabled", endpoint };
78
+ return off("disabled");
45
79
  const raw = await getMeta(CONSENT_KEY);
46
80
  if (!raw)
47
- return { status: "unset", endpoint };
81
+ return off("unset");
48
82
  try {
49
83
  const parsed = JSON.parse(raw);
50
- if (parsed.status === "granted")
51
- return { status: "granted", endpoint };
84
+ if (parsed.status === "granted") {
85
+ return { status: "granted", endpoint, installState: await loadInstallState() };
86
+ }
52
87
  if (parsed.status === "denied")
53
- return { status: "denied", endpoint };
88
+ return off("denied");
54
89
  }
55
90
  catch {
56
91
  // Unreadable record — treat as never asked rather than silently sending.
57
92
  }
58
- return { status: "unset", endpoint };
93
+ return off("unset");
59
94
  }
60
95
  //# sourceMappingURL=telemetry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/server/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAEvD,kEAAkE;AAClE,MAAM,CAAC,MAAM,0BAA0B,GACrC,wDAAwD,CAAC;AAE3D,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAiBxC,MAAM,UAAU,sBAAsB;IACpC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACxC,OAAO,CAAC,KAAK,SAAS,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,0BAA0B,CAAC;AAC9E,CAAC;AAED,gEAAgE;AAChE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,OAAgB;IACzD,MAAM,OAAO,CACX,WAAW,EACX,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAC3E,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,KAAK,UAAU,yBAAyB;IAC7C,MAAM,QAAQ,GAAG,wBAAwB,EAAE,CAAC;IAC5C,IAAI,sBAAsB,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IACtE,0EAA0E;IAC1E,gEAAgE;IAChE,IAAI,CAAC,CAAC,MAAM,UAAU,EAAE,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;IAEnE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAyB,CAAC;QACvD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QACxE,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/server/telemetry.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  * the host notes app.
11
11
  */
12
12
  /** Every kind of signal we capture. Ordered roughly by synthesis value. */
13
- export type PolishdEventType = "page_view" | "click" | "rage_click" | "dead_click" | "scroll_depth" | "viewport" | "js_error" | "web_vital" | "hover" | "component_view" | "mount" | "session_end" | "design_scan";
13
+ export type PolishdEventType = "page_view" | "click" | "rage_click" | "dead_click" | "scroll_depth" | "viewport" | "js_error" | "web_vital" | "hover" | "component_view" | "mount" | "session_end" | "design_scan" | "install_state";
14
14
  /**
15
15
  * A single captured event. The client sends these without a session id; the
16
16
  * ingest layer attaches `session_id` server-side from the signed cookie, so a
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,2EAA2E;AAC3E,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,OAAO,GACP,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,UAAU,GACV,UAAU,GACV,WAAW,GACX,OAAO,GACP,gBAAgB,GAChB,OAAO,GACP,aAAa,GACb,aAAa,CAAC;AAElB;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,8EAA8E;IAC9E,EAAE,EAAE,MAAM,CAAC;IACX,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CACzD;AAED,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,8DAA8D;AAC9D,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,4DAA4D;AAC5D,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,gBAAgB,CAc3D,CAAC;AASH,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/E,mBAAmB;AACnB,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAChD,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACtE,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjD,yBAAyB;AACzB,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C,MAAM,WAAW,wBAAwB;IACvC,8BAA8B;IAC9B,CAAC,EAAE,CAAC,CAAC;IACL,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,oEAAoE;IACpE,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,sDAAsD;IACtD,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,kEAAkE;IAClE,EAAE,EAAE,gBAAgB,EAAE,CAAC;IACvB,mDAAmD;IACnD,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,uDAAuD;IACvD,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,gEAAgE;IAChE,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,kEAAkE;IAClE,GAAG,EAAE,cAAc,EAAE,CAAC;CACvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,2EAA2E;AAC3E,MAAM,MAAM,gBAAgB,GACxB,WAAW,GACX,OAAO,GACP,YAAY,GACZ,YAAY,GACZ,cAAc,GACd,UAAU,GACV,UAAU,GACV,WAAW,GACX,OAAO,GACP,gBAAgB,GAChB,OAAO,GACP,aAAa,GACb,aAAa,GACb,eAAe,CAAC;AAEpB;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,gBAAgB,CAAC;IACvB,8EAA8E;IAC9E,EAAE,EAAE,MAAM,CAAC;IACX,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CACzD;AAED,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,2DAA2D;IAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,8EAA8E;IAC9E,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,8DAA8D;AAC9D,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,4DAA4D;AAC5D,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,gBAAgB,CAkB3D,CAAC;AASH,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/E,mBAAmB;AACnB,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAChD,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACtE,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACjD,yBAAyB;AACzB,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C,MAAM,WAAW,wBAAwB;IACvC,8BAA8B;IAC9B,CAAC,EAAE,CAAC,CAAC;IACL,oCAAoC;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,oEAAoE;IACpE,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,sDAAsD;IACtD,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,kEAAkE;IAClE,EAAE,EAAE,gBAAgB,EAAE,CAAC;IACvB,mDAAmD;IACnD,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,uDAAuD;IACvD,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,gEAAgE;IAChE,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,kEAAkE;IAClE,GAAG,EAAE,cAAc,EAAE,CAAC;CACvB"}
@@ -24,5 +24,9 @@ export const CLIENT_EVENT_TYPES = new Set([
24
24
  "mount",
25
25
  "session_end",
26
26
  "design_scan",
27
+ // Sent only by the dashboard telemetry emitter (once per session): whether
28
+ // the reporting install has a model connected, and which provider/model.
29
+ // Never carries a key or any secret — see dashboard/telemetry.tsx.
30
+ "install_state",
27
31
  ]);
28
32
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgFH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,kBAAkB,GAAkC,IAAI,GAAG,CAAmB;IACzF,WAAW;IACX,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,UAAU;IACV,UAAU;IACV,WAAW;IACX,OAAO;IACP,gBAAgB;IAChB,OAAO;IACP,aAAa;IACb,aAAa;CACd,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiFH,4DAA4D;AAC5D,MAAM,CAAC,MAAM,kBAAkB,GAAkC,IAAI,GAAG,CAAmB;IACzF,WAAW;IACX,OAAO;IACP,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,UAAU;IACV,UAAU;IACV,WAAW;IACX,OAAO;IACP,gBAAgB;IAChB,OAAO;IACP,aAAa;IACb,aAAa;IACb,2EAA2E;IAC3E,yEAAyE;IACzE,mEAAmE;IACnE,eAAe;CAChB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polishd/next",
3
- "version": "0.2.2-dev.2",
3
+ "version": "0.2.2-dev.4",
4
4
  "description": "Drop-in product analytics for Next.js — capture real user behavioral signals (rage/dead clicks, scroll depth, errors, web vitals) and explore them on a built-in dashboard. What gets measured gets improved.",
5
5
  "type": "module",
6
6
  "license": "MIT",