@happyvertical/smrt-analytics 0.30.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/AGENTS.md +68 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +7 -0
- package/README.md +131 -0
- package/dist/__smrt-register__.d.ts +2 -0
- package/dist/__smrt-register__.d.ts.map +1 -0
- package/dist/collections/AnalyticsDataStreamCollection.d.ts +69 -0
- package/dist/collections/AnalyticsDataStreamCollection.d.ts.map +1 -0
- package/dist/collections/AnalyticsEventCollection.d.ts +131 -0
- package/dist/collections/AnalyticsEventCollection.d.ts.map +1 -0
- package/dist/collections/AnalyticsPropertyCollection.d.ts +66 -0
- package/dist/collections/AnalyticsPropertyCollection.d.ts.map +1 -0
- package/dist/collections/AnalyticsReportCollection.d.ts +69 -0
- package/dist/collections/AnalyticsReportCollection.d.ts.map +1 -0
- package/dist/collections/index.d.ts +8 -0
- package/dist/collections/index.d.ts.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1623 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.json +4161 -0
- package/dist/models/AnalyticsDataStream.d.ts +94 -0
- package/dist/models/AnalyticsDataStream.d.ts.map +1 -0
- package/dist/models/AnalyticsEvent.d.ts +142 -0
- package/dist/models/AnalyticsEvent.d.ts.map +1 -0
- package/dist/models/AnalyticsProperty.d.ts +142 -0
- package/dist/models/AnalyticsProperty.d.ts.map +1 -0
- package/dist/models/AnalyticsReport.d.ts +206 -0
- package/dist/models/AnalyticsReport.d.ts.map +1 -0
- package/dist/models/index.d.ts +8 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/playground.d.ts +2 -0
- package/dist/playground.d.ts.map +1 -0
- package/dist/playground.js +99 -0
- package/dist/playground.js.map +1 -0
- package/dist/prompts.d.ts +57 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/smrt-knowledge.json +1570 -0
- package/dist/svelte/AnalyticsSummary.svelte +63 -0
- package/dist/svelte/AnalyticsSummary.svelte.d.ts +8 -0
- package/dist/svelte/AnalyticsSummary.svelte.d.ts.map +1 -0
- package/dist/svelte/EventsTable.svelte +161 -0
- package/dist/svelte/EventsTable.svelte.d.ts +16 -0
- package/dist/svelte/EventsTable.svelte.d.ts.map +1 -0
- package/dist/svelte/PropertyInfo.svelte +139 -0
- package/dist/svelte/PropertyInfo.svelte.d.ts +12 -0
- package/dist/svelte/PropertyInfo.svelte.d.ts.map +1 -0
- package/dist/svelte/PropertyStatusBadge.svelte +65 -0
- package/dist/svelte/PropertyStatusBadge.svelte.d.ts +7 -0
- package/dist/svelte/PropertyStatusBadge.svelte.d.ts.map +1 -0
- package/dist/svelte/StatCard.svelte +63 -0
- package/dist/svelte/StatCard.svelte.d.ts +11 -0
- package/dist/svelte/StatCard.svelte.d.ts.map +1 -0
- package/dist/svelte/TrendBadge.svelte +49 -0
- package/dist/svelte/TrendBadge.svelte.d.ts +8 -0
- package/dist/svelte/TrendBadge.svelte.d.ts.map +1 -0
- package/dist/svelte/i18n.d.ts +10 -0
- package/dist/svelte/i18n.d.ts.map +1 -0
- package/dist/svelte/i18n.js +10 -0
- package/dist/svelte/index.d.ts +29 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +39 -0
- package/dist/svelte/playground.d.ts +88 -0
- package/dist/svelte/playground.d.ts.map +1 -0
- package/dist/svelte/playground.js +95 -0
- package/dist/types/index.d.ts +267 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/ui.d.ts +10 -0
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +79 -0
- package/dist/ui.js.map +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
const sampleStats = {
|
|
2
|
+
todayPageviews: 18240,
|
|
3
|
+
yesterdayPageviews: 15980,
|
|
4
|
+
todayUsers: 3924,
|
|
5
|
+
yesterdayUsers: 3410,
|
|
6
|
+
trend: "up",
|
|
7
|
+
trendPercent: 14.1
|
|
8
|
+
};
|
|
9
|
+
const sampleEvents = [
|
|
10
|
+
{
|
|
11
|
+
id: "analytics-event-1",
|
|
12
|
+
eventName: "page_view",
|
|
13
|
+
clientId: "client_01HJQ9M4X0A8Q2D",
|
|
14
|
+
pagePath: "/guides/editorial-playbook",
|
|
15
|
+
eventTimestamp: "2026-03-21T16:14:00.000Z",
|
|
16
|
+
status: "sent"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: "analytics-event-2",
|
|
20
|
+
eventName: "cta_click",
|
|
21
|
+
clientId: "client_01HJQ9M4X0A8Q2D",
|
|
22
|
+
pagePath: "/pricing",
|
|
23
|
+
eventTimestamp: "2026-03-21T16:10:00.000Z",
|
|
24
|
+
status: "sent"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
id: "analytics-event-3",
|
|
28
|
+
eventName: "form_submit",
|
|
29
|
+
clientId: "client_01HJQ9NGH1J9Q8R",
|
|
30
|
+
pagePath: "/newsletter",
|
|
31
|
+
eventTimestamp: "2026-03-21T15:58:00.000Z",
|
|
32
|
+
status: "pending"
|
|
33
|
+
}
|
|
34
|
+
];
|
|
35
|
+
const loadAnalyticsSummary = () => import("./svelte/AnalyticsSummary.svelte");
|
|
36
|
+
const loadEventsTable = () => import("./svelte/EventsTable.svelte");
|
|
37
|
+
const loadPropertyInfo = () => import("./svelte/PropertyInfo.svelte");
|
|
38
|
+
const playground = {
|
|
39
|
+
packageName: "@happyvertical/smrt-analytics",
|
|
40
|
+
displayName: "Analytics",
|
|
41
|
+
description: "Dashboard primitives for property health, traffic trends, and recent event delivery.",
|
|
42
|
+
entries: [
|
|
43
|
+
{
|
|
44
|
+
id: "analytics-summary",
|
|
45
|
+
title: "Analytics Summary",
|
|
46
|
+
description: "Traffic summary cards that surface today-vs-yesterday performance at a glance.",
|
|
47
|
+
loadComponent: loadAnalyticsSummary,
|
|
48
|
+
order: 1,
|
|
49
|
+
props: {
|
|
50
|
+
stats: sampleStats
|
|
51
|
+
},
|
|
52
|
+
modes: {
|
|
53
|
+
mock: {
|
|
54
|
+
label: "Mock"
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
id: "events-table",
|
|
60
|
+
title: "Events Table",
|
|
61
|
+
description: "Recent outbound analytics events with delivery status and page context.",
|
|
62
|
+
loadComponent: loadEventsTable,
|
|
63
|
+
order: 2,
|
|
64
|
+
props: {
|
|
65
|
+
events: sampleEvents,
|
|
66
|
+
maxRows: 8
|
|
67
|
+
},
|
|
68
|
+
modes: {
|
|
69
|
+
mock: {
|
|
70
|
+
label: "Mock"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: "property-info",
|
|
76
|
+
title: "Property Info",
|
|
77
|
+
description: "Connection status and property metadata for a configured analytics destination.",
|
|
78
|
+
loadComponent: loadPropertyInfo,
|
|
79
|
+
order: 3,
|
|
80
|
+
props: {
|
|
81
|
+
propertyId: "properties/348920114",
|
|
82
|
+
measurementId: "G-9A4F2P7Q1C",
|
|
83
|
+
provider: "ga4",
|
|
84
|
+
status: "active",
|
|
85
|
+
lastSyncAt: "2026-03-21T16:05:00.000Z",
|
|
86
|
+
siteDomain: "newsroom.example.com"
|
|
87
|
+
},
|
|
88
|
+
modes: {
|
|
89
|
+
mock: {
|
|
90
|
+
label: "Mock"
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
};
|
|
96
|
+
export {
|
|
97
|
+
playground as default
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=playground.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playground.js","sources":["../src/svelte/playground.ts"],"sourcesContent":["const sampleStats = {\n todayPageviews: 18240,\n yesterdayPageviews: 15980,\n todayUsers: 3924,\n yesterdayUsers: 3410,\n trend: 'up',\n trendPercent: 14.1,\n};\n\nconst sampleEvents = [\n {\n id: 'analytics-event-1',\n eventName: 'page_view',\n clientId: 'client_01HJQ9M4X0A8Q2D',\n pagePath: '/guides/editorial-playbook',\n eventTimestamp: '2026-03-21T16:14:00.000Z',\n status: 'sent',\n },\n {\n id: 'analytics-event-2',\n eventName: 'cta_click',\n clientId: 'client_01HJQ9M4X0A8Q2D',\n pagePath: '/pricing',\n eventTimestamp: '2026-03-21T16:10:00.000Z',\n status: 'sent',\n },\n {\n id: 'analytics-event-3',\n eventName: 'form_submit',\n clientId: 'client_01HJQ9NGH1J9Q8R',\n pagePath: '/newsletter',\n eventTimestamp: '2026-03-21T15:58:00.000Z',\n status: 'pending',\n },\n];\n\nconst loadAnalyticsSummary = () => import('./AnalyticsSummary.svelte');\nconst loadEventsTable = () => import('./EventsTable.svelte');\nconst loadPropertyInfo = () => import('./PropertyInfo.svelte');\n\nexport default {\n packageName: '@happyvertical/smrt-analytics',\n displayName: 'Analytics',\n description:\n 'Dashboard primitives for property health, traffic trends, and recent event delivery.',\n entries: [\n {\n id: 'analytics-summary',\n title: 'Analytics Summary',\n description:\n 'Traffic summary cards that surface today-vs-yesterday performance at a glance.',\n loadComponent: loadAnalyticsSummary,\n order: 1,\n props: {\n stats: sampleStats,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'events-table',\n title: 'Events Table',\n description:\n 'Recent outbound analytics events with delivery status and page context.',\n loadComponent: loadEventsTable,\n order: 2,\n props: {\n events: sampleEvents,\n maxRows: 8,\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n {\n id: 'property-info',\n title: 'Property Info',\n description:\n 'Connection status and property metadata for a configured analytics destination.',\n loadComponent: loadPropertyInfo,\n order: 3,\n props: {\n propertyId: 'properties/348920114',\n measurementId: 'G-9A4F2P7Q1C',\n provider: 'ga4',\n status: 'active',\n lastSyncAt: '2026-03-21T16:05:00.000Z',\n siteDomain: 'newsroom.example.com',\n },\n modes: {\n mock: {\n label: 'Mock',\n },\n },\n },\n ],\n};\n"],"names":[],"mappings":"AAAA,MAAM,cAAc;AAAA,EAClB,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP,cAAc;AAChB;AAEA,MAAM,eAAe;AAAA,EACnB;AAAA,IACE,IAAI;AAAA,IACJ,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,QAAQ;AAAA,EAAA;AAAA,EAEV;AAAA,IACE,IAAI;AAAA,IACJ,WAAW;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,QAAQ;AAAA,EAAA;AAEZ;AAEA,MAAM,uBAAuB,MAAM,OAAO,kCAA2B;AACrE,MAAM,kBAAkB,MAAM,OAAO,6BAAsB;AAC3D,MAAM,mBAAmB,MAAM,OAAO,8BAAuB;AAE7D,MAAA,aAAe;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aACE;AAAA,EACF,SAAS;AAAA,IACP;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aACE;AAAA,MACF,eAAe;AAAA,MACf,OAAO;AAAA,MACP,OAAO;AAAA,QACL,OAAO;AAAA,MAAA;AAAA,MAET,OAAO;AAAA,QACL,MAAM;AAAA,UACJ,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,IACF;AAAA,IAEF;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aACE;AAAA,MACF,eAAe;AAAA,MACf,OAAO;AAAA,MACP,OAAO;AAAA,QACL,QAAQ;AAAA,QACR,SAAS;AAAA,MAAA;AAAA,MAEX,OAAO;AAAA,QACL,MAAM;AAAA,UACJ,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,IACF;AAAA,IAEF;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,aACE;AAAA,MACF,eAAe;AAAA,MACf,OAAO;AAAA,MACP,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,YAAY;AAAA,MAAA;AAAA,MAEd,OAAO;AAAA,QACL,MAAM;AAAA,UACJ,OAAO;AAAA,QAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAEJ;"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ResolvedPromptAI } from '@happyvertical/smrt-prompts';
|
|
2
|
+
/**
|
|
3
|
+
* `AnalyticsProperty.analyzePerformance()` prompt. Only the human-readable
|
|
4
|
+
* display name, provider label, and the requested period reach the model;
|
|
5
|
+
* provider IDs, API secrets, and the providerMetadata blob are excluded.
|
|
6
|
+
*/
|
|
7
|
+
export declare const smrtAnalyticsAnalyzePerformancePrompt: import('@happyvertical/smrt-prompts').PromptDefinition;
|
|
8
|
+
/**
|
|
9
|
+
* `AnalyticsReport.analyzeResults()` prompt. Surfaces report name, the
|
|
10
|
+
* dimension/metric labels (which are public GA4/Plausible/Matomo schema
|
|
11
|
+
* names — not user data), the date-range window, and the row count plus
|
|
12
|
+
* a JSON-stringified `resultData` blob.
|
|
13
|
+
*
|
|
14
|
+
* **`resultData` is forwarded verbatim.** This package does not strip PII
|
|
15
|
+
* from result rows — it cannot, because the row schema is determined by
|
|
16
|
+
* the dimensions/metrics the caller asked the analytics provider to
|
|
17
|
+
* return. If the caller persists rows containing a `userPseudoId`,
|
|
18
|
+
* `clientId`, IP-derived geolocation, or any other identifier, those
|
|
19
|
+
* fields WILL reach the AI provider. Either:
|
|
20
|
+
*
|
|
21
|
+
* - exclude PII-bearing dimensions before persisting `resultData`
|
|
22
|
+
* (e.g. don't request `userPseudoId` as a GA4 dimension), or
|
|
23
|
+
* - apply a column allowlist at the call site before invoking
|
|
24
|
+
* `analyzeResults()`, or
|
|
25
|
+
* - override the prompt template via `PromptOverride` to redact rows.
|
|
26
|
+
*
|
|
27
|
+
* The forwarding contract is pinned by a regression test in
|
|
28
|
+
* `__tests__/analytics-report-prompt.test.ts`.
|
|
29
|
+
*/
|
|
30
|
+
export declare const smrtAnalyticsAnalyzeResultsPrompt: import('@happyvertical/smrt-prompts').PromptDefinition;
|
|
31
|
+
/**
|
|
32
|
+
* `AnalyticsReport.hasPositiveTrends()` boolean classifier prompt. Same
|
|
33
|
+
* variables as `analyzeResults` minus the descriptive name — only the
|
|
34
|
+
* provider-schema metric labels and the aggregate `resultData` payload are
|
|
35
|
+
* needed to decide whether the trend is positive.
|
|
36
|
+
*
|
|
37
|
+
* The template explicitly instructs the model to begin its response with
|
|
38
|
+
* either "yes" or "no" so the boolean coercion in `hasPositiveTrends()`
|
|
39
|
+
* (`/^\s*(yes|true)\b/i`) is reliable. Without the leading-word
|
|
40
|
+
* instruction the model commonly answers with prose that happens to
|
|
41
|
+
* describe positive trends but starts with a sentence like "The
|
|
42
|
+
* conversion rate is up..." — the parser would then treat that as
|
|
43
|
+
* `false` despite a positive analysis. Tenants overriding this template
|
|
44
|
+
* MUST preserve the leading yes/no convention.
|
|
45
|
+
*/
|
|
46
|
+
export declare const smrtAnalyticsHasPositiveTrendsPrompt: import('@happyvertical/smrt-prompts').PromptDefinition;
|
|
47
|
+
/**
|
|
48
|
+
* Build the message-options object passed to `aiClient.message()` from a
|
|
49
|
+
* `ResolvedPromptAI` shape. Mirrors the helper in `smrt-properties` and
|
|
50
|
+
* `smrt-content` so behavior across packages is identical.
|
|
51
|
+
*/
|
|
52
|
+
export declare function promptMessageOptions(ai: ResolvedPromptAI): {
|
|
53
|
+
maxTokens?: number | undefined;
|
|
54
|
+
temperature?: number | undefined;
|
|
55
|
+
model?: string | undefined;
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,6BAA6B,CAAC;AAErC;;;;GAIG;AACH,eAAO,MAAM,qCAAqC,wDAWhD,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,iCAAiC,wDAsB5C,CAAC;AAEH;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,oCAAoC,wDAkB/C,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,gBAAgB;;;;EASxD"}
|