@intentsolutions/blueprint 2.6.0 → 2.8.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.
Files changed (192) hide show
  1. package/dist/analytics/collector.d.ts +73 -0
  2. package/dist/analytics/collector.d.ts.map +1 -0
  3. package/dist/analytics/collector.js +239 -0
  4. package/dist/analytics/collector.js.map +1 -0
  5. package/dist/analytics/dashboard.d.ts +62 -0
  6. package/dist/analytics/dashboard.d.ts.map +1 -0
  7. package/dist/analytics/dashboard.js +346 -0
  8. package/dist/analytics/dashboard.js.map +1 -0
  9. package/dist/analytics/index.d.ts +75 -0
  10. package/dist/analytics/index.d.ts.map +1 -0
  11. package/dist/analytics/index.js +115 -0
  12. package/dist/analytics/index.js.map +1 -0
  13. package/dist/analytics/types.d.ts +169 -0
  14. package/dist/analytics/types.d.ts.map +1 -0
  15. package/dist/analytics/types.js +16 -0
  16. package/dist/analytics/types.js.map +1 -0
  17. package/dist/cli.js +359 -1
  18. package/dist/cli.js.map +1 -1
  19. package/dist/commands/analytics.d.ts +38 -0
  20. package/dist/commands/analytics.d.ts.map +1 -0
  21. package/dist/commands/analytics.js +196 -0
  22. package/dist/commands/analytics.js.map +1 -0
  23. package/dist/commands/index.d.ts +26 -0
  24. package/dist/commands/index.d.ts.map +1 -0
  25. package/dist/commands/index.js +101 -0
  26. package/dist/commands/index.js.map +1 -0
  27. package/dist/commands/marketplace.d.ts +52 -0
  28. package/dist/commands/marketplace.d.ts.map +1 -0
  29. package/dist/commands/marketplace.js +356 -0
  30. package/dist/commands/marketplace.js.map +1 -0
  31. package/dist/enterprise/api/index.d.ts +8 -0
  32. package/dist/enterprise/api/index.d.ts.map +1 -0
  33. package/dist/enterprise/api/index.js +8 -0
  34. package/dist/enterprise/api/index.js.map +1 -0
  35. package/dist/enterprise/api/server.d.ts +79 -0
  36. package/dist/enterprise/api/server.d.ts.map +1 -0
  37. package/dist/enterprise/api/server.js +468 -0
  38. package/dist/enterprise/api/server.js.map +1 -0
  39. package/dist/enterprise/api/types.d.ts +269 -0
  40. package/dist/enterprise/api/types.d.ts.map +1 -0
  41. package/dist/enterprise/api/types.js +6 -0
  42. package/dist/enterprise/api/types.js.map +1 -0
  43. package/dist/enterprise/api/webhooks.d.ts +214 -0
  44. package/dist/enterprise/api/webhooks.d.ts.map +1 -0
  45. package/dist/enterprise/api/webhooks.js +308 -0
  46. package/dist/enterprise/api/webhooks.js.map +1 -0
  47. package/dist/enterprise/index.d.ts +9 -0
  48. package/dist/enterprise/index.d.ts.map +1 -0
  49. package/dist/enterprise/index.js +13 -0
  50. package/dist/enterprise/index.js.map +1 -0
  51. package/dist/enterprise/models/claude.d.ts +23 -0
  52. package/dist/enterprise/models/claude.d.ts.map +1 -0
  53. package/dist/enterprise/models/claude.js +176 -0
  54. package/dist/enterprise/models/claude.js.map +1 -0
  55. package/dist/enterprise/models/gemini.d.ts +25 -0
  56. package/dist/enterprise/models/gemini.d.ts.map +1 -0
  57. package/dist/enterprise/models/gemini.js +199 -0
  58. package/dist/enterprise/models/gemini.js.map +1 -0
  59. package/dist/enterprise/models/index.d.ts +11 -0
  60. package/dist/enterprise/models/index.d.ts.map +1 -0
  61. package/dist/enterprise/models/index.js +11 -0
  62. package/dist/enterprise/models/index.js.map +1 -0
  63. package/dist/enterprise/models/ollama.d.ts +32 -0
  64. package/dist/enterprise/models/ollama.d.ts.map +1 -0
  65. package/dist/enterprise/models/ollama.js +285 -0
  66. package/dist/enterprise/models/ollama.js.map +1 -0
  67. package/dist/enterprise/models/openai.d.ts +27 -0
  68. package/dist/enterprise/models/openai.d.ts.map +1 -0
  69. package/dist/enterprise/models/openai.js +222 -0
  70. package/dist/enterprise/models/openai.js.map +1 -0
  71. package/dist/enterprise/models/registry.d.ts +101 -0
  72. package/dist/enterprise/models/registry.d.ts.map +1 -0
  73. package/dist/enterprise/models/registry.js +263 -0
  74. package/dist/enterprise/models/registry.js.map +1 -0
  75. package/dist/enterprise/models/types.d.ts +141 -0
  76. package/dist/enterprise/models/types.d.ts.map +1 -0
  77. package/dist/enterprise/models/types.js +40 -0
  78. package/dist/enterprise/models/types.js.map +1 -0
  79. package/dist/enterprise/team/audit.d.ts +153 -0
  80. package/dist/enterprise/team/audit.d.ts.map +1 -0
  81. package/dist/enterprise/team/audit.js +346 -0
  82. package/dist/enterprise/team/audit.js.map +1 -0
  83. package/dist/enterprise/team/config.d.ts +83 -0
  84. package/dist/enterprise/team/config.d.ts.map +1 -0
  85. package/dist/enterprise/team/config.js +245 -0
  86. package/dist/enterprise/team/config.js.map +1 -0
  87. package/dist/enterprise/team/index.d.ts +7 -0
  88. package/dist/enterprise/team/index.d.ts.map +1 -0
  89. package/dist/enterprise/team/index.js +7 -0
  90. package/dist/enterprise/team/index.js.map +1 -0
  91. package/dist/enterprise/templates/engine.d.ts +100 -0
  92. package/dist/enterprise/templates/engine.d.ts.map +1 -0
  93. package/dist/enterprise/templates/engine.js +429 -0
  94. package/dist/enterprise/templates/engine.js.map +1 -0
  95. package/dist/enterprise/templates/index.d.ts +8 -0
  96. package/dist/enterprise/templates/index.d.ts.map +1 -0
  97. package/dist/enterprise/templates/index.js +8 -0
  98. package/dist/enterprise/templates/index.js.map +1 -0
  99. package/dist/enterprise/templates/loader.d.ts +65 -0
  100. package/dist/enterprise/templates/loader.d.ts.map +1 -0
  101. package/dist/enterprise/templates/loader.js +269 -0
  102. package/dist/enterprise/templates/loader.js.map +1 -0
  103. package/dist/enterprise/templates/types.d.ts +212 -0
  104. package/dist/enterprise/templates/types.d.ts.map +1 -0
  105. package/dist/enterprise/templates/types.js +55 -0
  106. package/dist/enterprise/templates/types.js.map +1 -0
  107. package/dist/marketplace/index.d.ts +86 -0
  108. package/dist/marketplace/index.d.ts.map +1 -0
  109. package/dist/marketplace/index.js +112 -0
  110. package/dist/marketplace/index.js.map +1 -0
  111. package/dist/marketplace/manager.d.ts +81 -0
  112. package/dist/marketplace/manager.d.ts.map +1 -0
  113. package/dist/marketplace/manager.js +292 -0
  114. package/dist/marketplace/manager.js.map +1 -0
  115. package/dist/marketplace/packs/fastapi.d.ts +8 -0
  116. package/dist/marketplace/packs/fastapi.d.ts.map +1 -0
  117. package/dist/marketplace/packs/fastapi.js +728 -0
  118. package/dist/marketplace/packs/fastapi.js.map +1 -0
  119. package/dist/marketplace/packs/fintech.d.ts +8 -0
  120. package/dist/marketplace/packs/fintech.d.ts.map +1 -0
  121. package/dist/marketplace/packs/fintech.js +366 -0
  122. package/dist/marketplace/packs/fintech.js.map +1 -0
  123. package/dist/marketplace/packs/gdpr.d.ts +8 -0
  124. package/dist/marketplace/packs/gdpr.d.ts.map +1 -0
  125. package/dist/marketplace/packs/gdpr.js +637 -0
  126. package/dist/marketplace/packs/gdpr.js.map +1 -0
  127. package/dist/marketplace/packs/healthtech.d.ts +8 -0
  128. package/dist/marketplace/packs/healthtech.d.ts.map +1 -0
  129. package/dist/marketplace/packs/healthtech.js +470 -0
  130. package/dist/marketplace/packs/healthtech.js.map +1 -0
  131. package/dist/marketplace/packs/hipaa.d.ts +8 -0
  132. package/dist/marketplace/packs/hipaa.d.ts.map +1 -0
  133. package/dist/marketplace/packs/hipaa.js +473 -0
  134. package/dist/marketplace/packs/hipaa.js.map +1 -0
  135. package/dist/marketplace/packs/index.d.ts +250 -0
  136. package/dist/marketplace/packs/index.d.ts.map +1 -0
  137. package/dist/marketplace/packs/index.js +205 -0
  138. package/dist/marketplace/packs/index.js.map +1 -0
  139. package/dist/marketplace/packs/nextjs.d.ts +8 -0
  140. package/dist/marketplace/packs/nextjs.d.ts.map +1 -0
  141. package/dist/marketplace/packs/nextjs.js +532 -0
  142. package/dist/marketplace/packs/nextjs.js.map +1 -0
  143. package/dist/marketplace/packs/rails.d.ts +8 -0
  144. package/dist/marketplace/packs/rails.d.ts.map +1 -0
  145. package/dist/marketplace/packs/rails.js +866 -0
  146. package/dist/marketplace/packs/rails.js.map +1 -0
  147. package/dist/marketplace/packs/saas.d.ts +8 -0
  148. package/dist/marketplace/packs/saas.d.ts.map +1 -0
  149. package/dist/marketplace/packs/saas.js +516 -0
  150. package/dist/marketplace/packs/saas.js.map +1 -0
  151. package/dist/marketplace/packs/soc2.d.ts +8 -0
  152. package/dist/marketplace/packs/soc2.d.ts.map +1 -0
  153. package/dist/marketplace/packs/soc2.js +455 -0
  154. package/dist/marketplace/packs/soc2.js.map +1 -0
  155. package/dist/marketplace/registry.d.ts +76 -0
  156. package/dist/marketplace/registry.d.ts.map +1 -0
  157. package/dist/marketplace/registry.js +454 -0
  158. package/dist/marketplace/registry.js.map +1 -0
  159. package/dist/marketplace/types.d.ts +202 -0
  160. package/dist/marketplace/types.d.ts.map +1 -0
  161. package/dist/marketplace/types.js +61 -0
  162. package/dist/marketplace/types.js.map +1 -0
  163. package/dist/mcp/index.js +1 -1
  164. package/dist/plugins/builtin/html-formatter.d.ts +11 -0
  165. package/dist/plugins/builtin/html-formatter.d.ts.map +1 -0
  166. package/dist/plugins/builtin/html-formatter.js +214 -0
  167. package/dist/plugins/builtin/html-formatter.js.map +1 -0
  168. package/dist/plugins/builtin/index.d.ts +21 -0
  169. package/dist/plugins/builtin/index.d.ts.map +1 -0
  170. package/dist/plugins/builtin/index.js +31 -0
  171. package/dist/plugins/builtin/index.js.map +1 -0
  172. package/dist/plugins/builtin/markdown-formatter.d.ts +11 -0
  173. package/dist/plugins/builtin/markdown-formatter.d.ts.map +1 -0
  174. package/dist/plugins/builtin/markdown-formatter.js +77 -0
  175. package/dist/plugins/builtin/markdown-formatter.js.map +1 -0
  176. package/dist/plugins/builtin/quality-validator.d.ts +11 -0
  177. package/dist/plugins/builtin/quality-validator.d.ts.map +1 -0
  178. package/dist/plugins/builtin/quality-validator.js +355 -0
  179. package/dist/plugins/builtin/quality-validator.js.map +1 -0
  180. package/dist/plugins/index.d.ts +98 -0
  181. package/dist/plugins/index.d.ts.map +1 -0
  182. package/dist/plugins/index.js +187 -0
  183. package/dist/plugins/index.js.map +1 -0
  184. package/dist/plugins/manager.d.ts +122 -0
  185. package/dist/plugins/manager.d.ts.map +1 -0
  186. package/dist/plugins/manager.js +349 -0
  187. package/dist/plugins/manager.js.map +1 -0
  188. package/dist/plugins/types.d.ts +348 -0
  189. package/dist/plugins/types.d.ts.map +1 -0
  190. package/dist/plugins/types.js +13 -0
  191. package/dist/plugins/types.js.map +1 -0
  192. package/package.json +5 -4
@@ -0,0 +1,346 @@
1
+ /**
2
+ * Analytics Dashboard
3
+ * Generates usage reports and visualizations
4
+ */
5
+ /**
6
+ * Analytics Dashboard
7
+ */
8
+ export class AnalyticsDashboard {
9
+ collector;
10
+ constructor(collector) {
11
+ this.collector = collector;
12
+ }
13
+ /**
14
+ * Get dashboard data
15
+ */
16
+ async getData(options = { period: 'month', format: 'table' }) {
17
+ const days = this.periodToDays(options.period);
18
+ const events = this.collector.loadEvents(days);
19
+ return {
20
+ summary: this.calculateSummary(events, options.period),
21
+ templateStats: this.calculateTemplateStats(events),
22
+ packStats: this.calculatePackStats(events),
23
+ recentSessions: this.calculateSessionStats(events),
24
+ errors: this.calculateErrorStats(events),
25
+ };
26
+ }
27
+ /**
28
+ * Convert period to days
29
+ */
30
+ periodToDays(period) {
31
+ switch (period) {
32
+ case 'day': return 1;
33
+ case 'week': return 7;
34
+ case 'month': return 30;
35
+ case 'quarter': return 90;
36
+ case 'year': return 365;
37
+ case 'all': return 3650;
38
+ default: return 30;
39
+ }
40
+ }
41
+ /**
42
+ * Calculate usage summary
43
+ */
44
+ calculateSummary(events, period) {
45
+ const days = this.periodToDays(period);
46
+ const start = new Date(Date.now() - days * 24 * 60 * 60 * 1000);
47
+ const end = new Date();
48
+ // Count totals
49
+ const sessions = new Set(events.map(e => e.sessionId)).size;
50
+ const generations = events.filter(e => e.type === 'template_generated').length;
51
+ const exports = events.filter(e => e.type === 'export_completed').length;
52
+ const errors = events.filter(e => e.type === 'error_occurred').length;
53
+ // Top templates
54
+ const templateCounts = new Map();
55
+ for (const event of events.filter(e => e.type === 'template_generated')) {
56
+ const id = event.data.templateId;
57
+ const existing = templateCounts.get(id) || { id, name: id, count: 0 };
58
+ existing.count++;
59
+ templateCounts.set(id, existing);
60
+ }
61
+ const topTemplates = Array.from(templateCounts.values())
62
+ .sort((a, b) => b.count - a.count)
63
+ .slice(0, 5);
64
+ // Top packs
65
+ const packCounts = new Map();
66
+ for (const event of events.filter(e => e.type === 'pack_installed')) {
67
+ const id = event.data.packId;
68
+ const existing = packCounts.get(id) || { id, name: id, count: 0 };
69
+ existing.count++;
70
+ packCounts.set(id, existing);
71
+ }
72
+ const topPacks = Array.from(packCounts.values())
73
+ .sort((a, b) => b.count - a.count)
74
+ .slice(0, 5);
75
+ // Daily activity
76
+ const dailyActivity = new Map();
77
+ for (const event of events) {
78
+ const date = event.timestamp.split('T')[0];
79
+ const existing = dailyActivity.get(date) || { date, generations: 0, sessions: new Set() };
80
+ if (event.type === 'template_generated') {
81
+ existing.generations++;
82
+ }
83
+ existing.sessions.add(event.sessionId);
84
+ dailyActivity.set(date, existing);
85
+ }
86
+ const dailyActivityArray = Array.from(dailyActivity.values())
87
+ .map(d => ({ date: d.date, generations: d.generations, sessions: d.sessions.size }))
88
+ .sort((a, b) => a.date.localeCompare(b.date));
89
+ return {
90
+ period: {
91
+ start: start.toISOString(),
92
+ end: end.toISOString(),
93
+ },
94
+ totals: { sessions, generations, exports, errors },
95
+ topTemplates,
96
+ topPacks,
97
+ dailyActivity: dailyActivityArray,
98
+ };
99
+ }
100
+ /**
101
+ * Calculate template statistics
102
+ */
103
+ calculateTemplateStats(events) {
104
+ const templateMap = new Map();
105
+ for (const event of events.filter(e => e.type === 'template_generated')) {
106
+ const id = event.data.templateId;
107
+ const existing = templateMap.get(id) || {
108
+ templateId: id,
109
+ generations: 0,
110
+ users: new Set(),
111
+ durations: [],
112
+ variables: new Map(),
113
+ formats: new Map(),
114
+ lastUsed: event.timestamp,
115
+ };
116
+ existing.generations++;
117
+ if (event.userId)
118
+ existing.users.add(event.userId);
119
+ if (event.data.duration)
120
+ existing.durations.push(event.data.duration);
121
+ if (event.data.format) {
122
+ const format = event.data.format;
123
+ existing.formats.set(format, (existing.formats.get(format) || 0) + 1);
124
+ }
125
+ if (event.timestamp > existing.lastUsed) {
126
+ existing.lastUsed = event.timestamp;
127
+ }
128
+ templateMap.set(id, existing);
129
+ }
130
+ return Array.from(templateMap.values()).map(t => ({
131
+ templateId: t.templateId,
132
+ templateName: t.templateId, // Would be resolved from template registry
133
+ totalGenerations: t.generations,
134
+ uniqueUsers: t.users.size,
135
+ avgCompletionTime: t.durations.length > 0
136
+ ? t.durations.reduce((a, b) => a + b, 0) / t.durations.length
137
+ : 0,
138
+ lastUsed: t.lastUsed,
139
+ popularVariables: Array.from(t.variables.entries())
140
+ .map(([name, count]) => ({ name, count }))
141
+ .sort((a, b) => b.count - a.count)
142
+ .slice(0, 5),
143
+ commonOutputFormats: Array.from(t.formats.entries())
144
+ .map(([format, count]) => ({ format, count }))
145
+ .sort((a, b) => b.count - a.count),
146
+ })).sort((a, b) => b.totalGenerations - a.totalGenerations);
147
+ }
148
+ /**
149
+ * Calculate pack statistics
150
+ */
151
+ calculatePackStats(events) {
152
+ const packMap = new Map();
153
+ for (const event of events) {
154
+ if (event.type === 'pack_installed' || event.type === 'pack_uninstalled') {
155
+ const id = event.data.packId;
156
+ const existing = packMap.get(id) || {
157
+ packId: id,
158
+ installs: 0,
159
+ uninstalls: 0,
160
+ lastUpdated: event.timestamp,
161
+ };
162
+ if (event.type === 'pack_installed') {
163
+ existing.installs++;
164
+ }
165
+ else {
166
+ existing.uninstalls++;
167
+ }
168
+ if (event.timestamp > existing.lastUpdated) {
169
+ existing.lastUpdated = event.timestamp;
170
+ }
171
+ packMap.set(id, existing);
172
+ }
173
+ }
174
+ return Array.from(packMap.values()).map(p => ({
175
+ packId: p.packId,
176
+ packName: p.packId, // Would be resolved from pack registry
177
+ totalInstalls: p.installs,
178
+ activeInstalls: p.installs - p.uninstalls,
179
+ uninstalls: p.uninstalls,
180
+ lastUpdated: p.lastUpdated,
181
+ })).sort((a, b) => b.totalInstalls - a.totalInstalls);
182
+ }
183
+ /**
184
+ * Calculate session statistics
185
+ */
186
+ calculateSessionStats(events) {
187
+ const sessionMap = new Map();
188
+ for (const event of events) {
189
+ const existing = sessionMap.get(event.sessionId) || {
190
+ sessionId: event.sessionId,
191
+ events: [],
192
+ startTime: event.timestamp,
193
+ };
194
+ existing.events.push(event);
195
+ if (event.timestamp < existing.startTime) {
196
+ existing.startTime = event.timestamp;
197
+ }
198
+ if (event.type === 'session_ended') {
199
+ existing.endTime = event.timestamp;
200
+ }
201
+ sessionMap.set(event.sessionId, existing);
202
+ }
203
+ return Array.from(sessionMap.values())
204
+ .map(s => ({
205
+ sessionId: s.sessionId,
206
+ startTime: s.startTime,
207
+ endTime: s.endTime,
208
+ duration: s.endTime
209
+ ? new Date(s.endTime).getTime() - new Date(s.startTime).getTime()
210
+ : undefined,
211
+ eventsCount: s.events.length,
212
+ templatesGenerated: s.events.filter(e => e.type === 'template_generated').length,
213
+ errors: s.events.filter(e => e.type === 'error_occurred').length,
214
+ }))
215
+ .sort((a, b) => b.startTime.localeCompare(a.startTime))
216
+ .slice(0, 10);
217
+ }
218
+ /**
219
+ * Calculate error statistics
220
+ */
221
+ calculateErrorStats(events) {
222
+ const errorMap = new Map();
223
+ for (const event of events.filter(e => e.type === 'error_occurred')) {
224
+ const type = event.data.errorType;
225
+ const existing = errorMap.get(type) || { type, count: 0, lastOccurred: event.timestamp };
226
+ existing.count++;
227
+ if (event.timestamp > existing.lastOccurred) {
228
+ existing.lastOccurred = event.timestamp;
229
+ }
230
+ errorMap.set(type, existing);
231
+ }
232
+ return Array.from(errorMap.values()).sort((a, b) => b.count - a.count);
233
+ }
234
+ /**
235
+ * Format dashboard data as table
236
+ */
237
+ formatAsTable(data) {
238
+ const lines = [];
239
+ // Header
240
+ lines.push('═══════════════════════════════════════════════════════════════════');
241
+ lines.push(' INTENT BLUEPRINT ANALYTICS ');
242
+ lines.push('═══════════════════════════════════════════════════════════════════');
243
+ lines.push('');
244
+ // Summary
245
+ lines.push('USAGE SUMMARY');
246
+ lines.push('─────────────────────────────────────────────────────────────────────');
247
+ lines.push(`Period: ${data.summary.period.start.split('T')[0]} to ${data.summary.period.end.split('T')[0]}`);
248
+ lines.push('');
249
+ lines.push(` Sessions: ${data.summary.totals.sessions.toString().padStart(8)}`);
250
+ lines.push(` Generations: ${data.summary.totals.generations.toString().padStart(8)}`);
251
+ lines.push(` Exports: ${data.summary.totals.exports.toString().padStart(8)}`);
252
+ lines.push(` Errors: ${data.summary.totals.errors.toString().padStart(8)}`);
253
+ lines.push('');
254
+ // Top Templates
255
+ if (data.summary.topTemplates.length > 0) {
256
+ lines.push('TOP TEMPLATES');
257
+ lines.push('─────────────────────────────────────────────────────────────────────');
258
+ for (const t of data.summary.topTemplates) {
259
+ lines.push(` ${t.name.padEnd(40)} ${t.count.toString().padStart(5)} uses`);
260
+ }
261
+ lines.push('');
262
+ }
263
+ // Top Packs
264
+ if (data.summary.topPacks.length > 0) {
265
+ lines.push('TOP PACKS');
266
+ lines.push('─────────────────────────────────────────────────────────────────────');
267
+ for (const p of data.summary.topPacks) {
268
+ lines.push(` ${p.name.padEnd(40)} ${p.count.toString().padStart(5)} installs`);
269
+ }
270
+ lines.push('');
271
+ }
272
+ // Recent Sessions
273
+ if (data.recentSessions.length > 0) {
274
+ lines.push('RECENT SESSIONS');
275
+ lines.push('─────────────────────────────────────────────────────────────────────');
276
+ for (const s of data.recentSessions.slice(0, 5)) {
277
+ const duration = s.duration ? `${Math.round(s.duration / 1000 / 60)}m` : 'active';
278
+ lines.push(` ${s.startTime.split('T')[0]} ${duration.padStart(8)} │ ${s.templatesGenerated} templates, ${s.errors} errors`);
279
+ }
280
+ lines.push('');
281
+ }
282
+ // Errors
283
+ if (data.errors && data.errors.length > 0) {
284
+ lines.push('ERROR SUMMARY');
285
+ lines.push('─────────────────────────────────────────────────────────────────────');
286
+ for (const e of data.errors.slice(0, 5)) {
287
+ lines.push(` ${e.type.padEnd(30)} ${e.count.toString().padStart(5)}x │ Last: ${e.lastOccurred.split('T')[0]}`);
288
+ }
289
+ lines.push('');
290
+ }
291
+ lines.push('═══════════════════════════════════════════════════════════════════');
292
+ return lines.join('\n');
293
+ }
294
+ /**
295
+ * Format dashboard data as JSON
296
+ */
297
+ formatAsJson(data) {
298
+ return JSON.stringify(data, null, 2);
299
+ }
300
+ /**
301
+ * Format dashboard data as CSV
302
+ */
303
+ formatAsCsv(data) {
304
+ const lines = [];
305
+ // Summary section
306
+ lines.push('Section,Metric,Value');
307
+ lines.push(`Summary,Sessions,${data.summary.totals.sessions}`);
308
+ lines.push(`Summary,Generations,${data.summary.totals.generations}`);
309
+ lines.push(`Summary,Exports,${data.summary.totals.exports}`);
310
+ lines.push(`Summary,Errors,${data.summary.totals.errors}`);
311
+ lines.push('');
312
+ // Templates section
313
+ lines.push('Template ID,Template Name,Generations,Unique Users,Avg Time,Last Used');
314
+ for (const t of data.templateStats) {
315
+ lines.push(`${t.templateId},${t.templateName},${t.totalGenerations},${t.uniqueUsers},${t.avgCompletionTime.toFixed(0)},${t.lastUsed}`);
316
+ }
317
+ lines.push('');
318
+ // Packs section
319
+ lines.push('Pack ID,Pack Name,Installs,Active,Uninstalls');
320
+ for (const p of data.packStats) {
321
+ lines.push(`${p.packId},${p.packName},${p.totalInstalls},${p.activeInstalls},${p.uninstalls}`);
322
+ }
323
+ return lines.join('\n');
324
+ }
325
+ /**
326
+ * Render dashboard
327
+ */
328
+ async render(options = { period: 'month', format: 'table' }) {
329
+ const data = await this.getData(options);
330
+ switch (options.format) {
331
+ case 'json':
332
+ return this.formatAsJson(data);
333
+ case 'csv':
334
+ return this.formatAsCsv(data);
335
+ default:
336
+ return this.formatAsTable(data);
337
+ }
338
+ }
339
+ }
340
+ /**
341
+ * Create an analytics dashboard instance
342
+ */
343
+ export function createAnalyticsDashboard(collector) {
344
+ return new AnalyticsDashboard(collector);
345
+ }
346
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/analytics/dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Analytics Module
3
+ * Usage metrics collection and reporting
4
+ */
5
+ export * from './types.js';
6
+ export * from './collector.js';
7
+ export * from './dashboard.js';
8
+ import { AnalyticsCollector } from './collector.js';
9
+ import { AnalyticsDashboard } from './dashboard.js';
10
+ import type { AnalyticsConfig, DashboardOptions, DashboardData } from './types.js';
11
+ /**
12
+ * Analytics facade
13
+ */
14
+ export declare class Analytics {
15
+ private collector;
16
+ private dashboard;
17
+ constructor(config?: Partial<AnalyticsConfig>);
18
+ /**
19
+ * Get the collector for tracking events
20
+ */
21
+ getCollector(): AnalyticsCollector;
22
+ /**
23
+ * Get the dashboard for viewing reports
24
+ */
25
+ getDashboard(): AnalyticsDashboard;
26
+ /**
27
+ * Track a template generation
28
+ */
29
+ trackGeneration(templateId: string, variables: string[], format: string, duration: number): void;
30
+ /**
31
+ * Track a pack installation
32
+ */
33
+ trackInstall(packId: string, version: string): void;
34
+ /**
35
+ * Track an export
36
+ */
37
+ trackExport(destination: string, format: string, success: boolean): void;
38
+ /**
39
+ * Track an error
40
+ */
41
+ trackError(type: string, message: string, context?: Record<string, unknown>): void;
42
+ /**
43
+ * Render the analytics dashboard
44
+ */
45
+ renderDashboard(options?: DashboardOptions): Promise<string>;
46
+ /**
47
+ * Get dashboard data
48
+ */
49
+ getDashboardData(options?: DashboardOptions): Promise<DashboardData>;
50
+ /**
51
+ * Flush analytics data to storage
52
+ */
53
+ flush(): void;
54
+ /**
55
+ * End the session and save data
56
+ */
57
+ endSession(): void;
58
+ /**
59
+ * Clean up old analytics data
60
+ */
61
+ cleanup(): number;
62
+ }
63
+ /**
64
+ * Create an analytics instance
65
+ */
66
+ export declare function createAnalytics(config?: Partial<AnalyticsConfig>): Analytics;
67
+ /**
68
+ * Get or create the global analytics instance
69
+ */
70
+ export declare function getAnalytics(config?: Partial<AnalyticsConfig>): Analytics;
71
+ /**
72
+ * Reset the global analytics instance
73
+ */
74
+ export declare function resetAnalytics(): void;
75
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAE,kBAAkB,EAA4B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAA4B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEnF;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,SAAS,CAAqB;gBAE1B,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAK7C;;OAEG;IACH,YAAY,IAAI,kBAAkB;IAIlC;;OAEG;IACH,YAAY,IAAI,kBAAkB;IAIlC;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIhG;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAInD;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAIxE;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAIlF;;OAEG;IACG,eAAe,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlE;;OAEG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC;IAI1E;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,OAAO,IAAI,MAAM;CAGlB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,CAE5E;AAOD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,CAKzE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Analytics Module
3
+ * Usage metrics collection and reporting
4
+ */
5
+ export * from './types.js';
6
+ export * from './collector.js';
7
+ export * from './dashboard.js';
8
+ import { createAnalyticsCollector } from './collector.js';
9
+ import { createAnalyticsDashboard } from './dashboard.js';
10
+ /**
11
+ * Analytics facade
12
+ */
13
+ export class Analytics {
14
+ collector;
15
+ dashboard;
16
+ constructor(config) {
17
+ this.collector = createAnalyticsCollector(config);
18
+ this.dashboard = createAnalyticsDashboard(this.collector);
19
+ }
20
+ /**
21
+ * Get the collector for tracking events
22
+ */
23
+ getCollector() {
24
+ return this.collector;
25
+ }
26
+ /**
27
+ * Get the dashboard for viewing reports
28
+ */
29
+ getDashboard() {
30
+ return this.dashboard;
31
+ }
32
+ /**
33
+ * Track a template generation
34
+ */
35
+ trackGeneration(templateId, variables, format, duration) {
36
+ this.collector.trackTemplateGenerated(templateId, variables, format, duration);
37
+ }
38
+ /**
39
+ * Track a pack installation
40
+ */
41
+ trackInstall(packId, version) {
42
+ this.collector.trackPackInstalled(packId, version);
43
+ }
44
+ /**
45
+ * Track an export
46
+ */
47
+ trackExport(destination, format, success) {
48
+ this.collector.trackExportCompleted(destination, format, success);
49
+ }
50
+ /**
51
+ * Track an error
52
+ */
53
+ trackError(type, message, context) {
54
+ this.collector.trackError(type, message, context);
55
+ }
56
+ /**
57
+ * Render the analytics dashboard
58
+ */
59
+ async renderDashboard(options) {
60
+ return this.dashboard.render(options);
61
+ }
62
+ /**
63
+ * Get dashboard data
64
+ */
65
+ async getDashboardData(options) {
66
+ return this.dashboard.getData(options);
67
+ }
68
+ /**
69
+ * Flush analytics data to storage
70
+ */
71
+ flush() {
72
+ this.collector.flush();
73
+ }
74
+ /**
75
+ * End the session and save data
76
+ */
77
+ endSession() {
78
+ this.collector.endSession();
79
+ }
80
+ /**
81
+ * Clean up old analytics data
82
+ */
83
+ cleanup() {
84
+ return this.collector.cleanup();
85
+ }
86
+ }
87
+ /**
88
+ * Create an analytics instance
89
+ */
90
+ export function createAnalytics(config) {
91
+ return new Analytics(config);
92
+ }
93
+ /**
94
+ * Singleton instance for global access
95
+ */
96
+ let globalAnalytics = null;
97
+ /**
98
+ * Get or create the global analytics instance
99
+ */
100
+ export function getAnalytics(config) {
101
+ if (!globalAnalytics) {
102
+ globalAnalytics = createAnalytics(config);
103
+ }
104
+ return globalAnalytics;
105
+ }
106
+ /**
107
+ * Reset the global analytics instance
108
+ */
109
+ export function resetAnalytics() {
110
+ if (globalAnalytics) {
111
+ globalAnalytics.flush();
112
+ globalAnalytics = null;
113
+ }
114
+ }
115
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAE/B,OAAO,EAAsB,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAsB,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAG9E;;GAEG;AACH,MAAM,OAAO,SAAS;IACZ,SAAS,CAAqB;IAC9B,SAAS,CAAqB;IAEtC,YAAY,MAAiC;QAC3C,IAAI,CAAC,SAAS,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,UAAkB,EAAE,SAAmB,EAAE,MAAc,EAAE,QAAgB;QACvF,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,MAAc,EAAE,OAAe;QAC1C,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,WAAmB,EAAE,MAAc,EAAE,OAAgB;QAC/D,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,IAAY,EAAE,OAAe,EAAE,OAAiC;QACzE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,OAA0B;QAC9C,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,OAA0B;QAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;IAClC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,MAAiC;IAC/D,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,IAAI,eAAe,GAAqB,IAAI,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAiC;IAC5D,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,eAAe,EAAE,CAAC;QACpB,eAAe,CAAC,KAAK,EAAE,CAAC;QACxB,eAAe,GAAG,IAAI,CAAC;IACzB,CAAC;AACH,CAAC"}