@code-insights/cli 3.6.1 → 4.0.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 (214) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +40 -4
  3. package/dashboard-dist/assets/index-D1JDyyu5.js +660 -0
  4. package/dashboard-dist/assets/index-kwbCW1n2.css +1 -0
  5. package/dashboard-dist/index.html +2 -2
  6. package/dist/commands/reflect.d.ts +3 -0
  7. package/dist/commands/reflect.d.ts.map +1 -0
  8. package/dist/commands/reflect.js +457 -0
  9. package/dist/commands/reflect.js.map +1 -0
  10. package/dist/commands/reset.d.ts.map +1 -1
  11. package/dist/commands/reset.js +3 -1
  12. package/dist/commands/reset.js.map +1 -1
  13. package/dist/commands/stats/actions/patterns.d.ts +3 -0
  14. package/dist/commands/stats/actions/patterns.d.ts.map +1 -0
  15. package/dist/commands/stats/actions/patterns.js +140 -0
  16. package/dist/commands/stats/actions/patterns.js.map +1 -0
  17. package/dist/commands/stats/data/aggregation-helpers.d.ts +23 -0
  18. package/dist/commands/stats/data/aggregation-helpers.d.ts.map +1 -0
  19. package/dist/commands/stats/data/aggregation-helpers.js +128 -0
  20. package/dist/commands/stats/data/aggregation-helpers.js.map +1 -0
  21. package/dist/commands/stats/data/aggregation.d.ts +3 -35
  22. package/dist/commands/stats/data/aggregation.d.ts.map +1 -1
  23. package/dist/commands/stats/data/aggregation.js +8 -290
  24. package/dist/commands/stats/data/aggregation.js.map +1 -1
  25. package/dist/commands/stats/data/time-series.d.ts +24 -0
  26. package/dist/commands/stats/data/time-series.d.ts.map +1 -0
  27. package/dist/commands/stats/data/time-series.js +162 -0
  28. package/dist/commands/stats/data/time-series.js.map +1 -0
  29. package/dist/commands/stats/index.d.ts.map +1 -1
  30. package/dist/commands/stats/index.js +7 -1
  31. package/dist/commands/stats/index.js.map +1 -1
  32. package/dist/commands/sync.d.ts +19 -0
  33. package/dist/commands/sync.d.ts.map +1 -1
  34. package/dist/commands/sync.js +67 -1
  35. package/dist/commands/sync.js.map +1 -1
  36. package/dist/constants/llm-providers.js +1 -1
  37. package/dist/constants/llm-providers.js.map +1 -1
  38. package/dist/db/client.d.ts +7 -0
  39. package/dist/db/client.d.ts.map +1 -1
  40. package/dist/db/client.js +11 -1
  41. package/dist/db/client.js.map +1 -1
  42. package/dist/db/migrate.d.ts +10 -1
  43. package/dist/db/migrate.d.ts.map +1 -1
  44. package/dist/db/migrate.js +96 -0
  45. package/dist/db/migrate.js.map +1 -1
  46. package/dist/db/read.d.ts +5 -0
  47. package/dist/db/read.d.ts.map +1 -1
  48. package/dist/db/read.js +20 -3
  49. package/dist/db/read.js.map +1 -1
  50. package/dist/db/schema.d.ts +1 -1
  51. package/dist/db/schema.js +2 -2
  52. package/dist/db/schema.js.map +1 -1
  53. package/dist/db/write.d.ts.map +1 -1
  54. package/dist/db/write.js +8 -2
  55. package/dist/db/write.js.map +1 -1
  56. package/dist/index.js +39 -3
  57. package/dist/index.js.map +1 -1
  58. package/dist/parser/jsonl.d.ts +19 -1
  59. package/dist/parser/jsonl.d.ts.map +1 -1
  60. package/dist/parser/jsonl.js +109 -3
  61. package/dist/parser/jsonl.js.map +1 -1
  62. package/dist/providers/codex.js +4 -1
  63. package/dist/providers/codex.js.map +1 -1
  64. package/dist/providers/copilot-cli.js +3 -0
  65. package/dist/providers/copilot-cli.js.map +1 -1
  66. package/dist/providers/copilot.js +3 -0
  67. package/dist/providers/copilot.js.map +1 -1
  68. package/dist/providers/cursor.js +3 -0
  69. package/dist/providers/cursor.js.map +1 -1
  70. package/dist/types.d.ts +109 -0
  71. package/dist/types.d.ts.map +1 -1
  72. package/dist/utils/date-utils.d.ts +6 -0
  73. package/dist/utils/date-utils.d.ts.map +1 -0
  74. package/dist/utils/date-utils.js +26 -0
  75. package/dist/utils/date-utils.js.map +1 -0
  76. package/dist/utils/telemetry.d.ts +1 -1
  77. package/dist/utils/telemetry.d.ts.map +1 -1
  78. package/dist/utils/telemetry.js +1 -1
  79. package/dist/utils/telemetry.js.map +1 -1
  80. package/package.json +2 -1
  81. package/server-dist/export/agent-rules.d.ts.map +1 -1
  82. package/server-dist/export/agent-rules.js +15 -4
  83. package/server-dist/export/agent-rules.js.map +1 -1
  84. package/server-dist/export/knowledge-base.d.ts.map +1 -1
  85. package/server-dist/export/knowledge-base.js +30 -4
  86. package/server-dist/export/knowledge-base.js.map +1 -1
  87. package/server-dist/index.d.ts.map +1 -1
  88. package/server-dist/index.js +4 -0
  89. package/server-dist/index.js.map +1 -1
  90. package/server-dist/llm/analysis-db.d.ts +51 -0
  91. package/server-dist/llm/analysis-db.d.ts.map +1 -0
  92. package/server-dist/llm/analysis-db.js +208 -0
  93. package/server-dist/llm/analysis-db.js.map +1 -0
  94. package/server-dist/llm/analysis-internal.d.ts +36 -0
  95. package/server-dist/llm/analysis-internal.d.ts.map +1 -0
  96. package/server-dist/llm/analysis-internal.js +23 -0
  97. package/server-dist/llm/analysis-internal.js.map +1 -0
  98. package/server-dist/llm/analysis-pricing.d.ts +25 -0
  99. package/server-dist/llm/analysis-pricing.d.ts.map +1 -0
  100. package/server-dist/llm/analysis-pricing.js +74 -0
  101. package/server-dist/llm/analysis-pricing.js.map +1 -0
  102. package/server-dist/llm/analysis-usage-db.d.ts +45 -0
  103. package/server-dist/llm/analysis-usage-db.d.ts.map +1 -0
  104. package/server-dist/llm/analysis-usage-db.js +35 -0
  105. package/server-dist/llm/analysis-usage-db.js.map +1 -0
  106. package/server-dist/llm/analysis.d.ts +9 -79
  107. package/server-dist/llm/analysis.d.ts.map +1 -1
  108. package/server-dist/llm/analysis.js +119 -375
  109. package/server-dist/llm/analysis.js.map +1 -1
  110. package/server-dist/llm/facet-extraction.d.ts +14 -0
  111. package/server-dist/llm/facet-extraction.d.ts.map +1 -0
  112. package/server-dist/llm/facet-extraction.js +91 -0
  113. package/server-dist/llm/facet-extraction.js.map +1 -0
  114. package/server-dist/llm/friction-normalize.d.ts +16 -0
  115. package/server-dist/llm/friction-normalize.d.ts.map +1 -0
  116. package/server-dist/llm/friction-normalize.js +54 -0
  117. package/server-dist/llm/friction-normalize.js.map +1 -0
  118. package/server-dist/llm/index.d.ts +3 -2
  119. package/server-dist/llm/index.d.ts.map +1 -1
  120. package/server-dist/llm/index.js +1 -1
  121. package/server-dist/llm/index.js.map +1 -1
  122. package/server-dist/llm/message-format.d.ts +32 -0
  123. package/server-dist/llm/message-format.d.ts.map +1 -0
  124. package/server-dist/llm/message-format.js +129 -0
  125. package/server-dist/llm/message-format.js.map +1 -0
  126. package/server-dist/llm/normalize-utils.d.ts +22 -0
  127. package/server-dist/llm/normalize-utils.d.ts.map +1 -0
  128. package/server-dist/llm/normalize-utils.js +71 -0
  129. package/server-dist/llm/normalize-utils.js.map +1 -0
  130. package/server-dist/llm/pattern-normalize.d.ts +19 -0
  131. package/server-dist/llm/pattern-normalize.d.ts.map +1 -0
  132. package/server-dist/llm/pattern-normalize.js +90 -0
  133. package/server-dist/llm/pattern-normalize.js.map +1 -0
  134. package/server-dist/llm/prompt-constants.d.ts +9 -0
  135. package/server-dist/llm/prompt-constants.d.ts.map +1 -0
  136. package/server-dist/llm/prompt-constants.js +169 -0
  137. package/server-dist/llm/prompt-constants.js.map +1 -0
  138. package/server-dist/llm/prompt-quality-analysis.d.ts +8 -0
  139. package/server-dist/llm/prompt-quality-analysis.d.ts.map +1 -0
  140. package/server-dist/llm/prompt-quality-analysis.js +133 -0
  141. package/server-dist/llm/prompt-quality-analysis.js.map +1 -0
  142. package/server-dist/llm/prompt-quality-normalize.d.ts +26 -0
  143. package/server-dist/llm/prompt-quality-normalize.d.ts.map +1 -0
  144. package/server-dist/llm/prompt-quality-normalize.js +116 -0
  145. package/server-dist/llm/prompt-quality-normalize.js.map +1 -0
  146. package/server-dist/llm/prompt-types.d.ts +124 -0
  147. package/server-dist/llm/prompt-types.d.ts.map +1 -0
  148. package/server-dist/llm/prompt-types.js +4 -0
  149. package/server-dist/llm/prompt-types.js.map +1 -0
  150. package/server-dist/llm/prompts.d.ts +57 -100
  151. package/server-dist/llm/prompts.d.ts.map +1 -1
  152. package/server-dist/llm/prompts.js +606 -232
  153. package/server-dist/llm/prompts.js.map +1 -1
  154. package/server-dist/llm/providers/anthropic.d.ts.map +1 -1
  155. package/server-dist/llm/providers/anthropic.js +12 -0
  156. package/server-dist/llm/providers/anthropic.js.map +1 -1
  157. package/server-dist/llm/providers/gemini.d.ts.map +1 -1
  158. package/server-dist/llm/providers/gemini.js +10 -2
  159. package/server-dist/llm/providers/gemini.js.map +1 -1
  160. package/server-dist/llm/providers/ollama.d.ts.map +1 -1
  161. package/server-dist/llm/providers/ollama.js +3 -1
  162. package/server-dist/llm/providers/ollama.js.map +1 -1
  163. package/server-dist/llm/providers/openai.d.ts.map +1 -1
  164. package/server-dist/llm/providers/openai.js +4 -1
  165. package/server-dist/llm/providers/openai.js.map +1 -1
  166. package/server-dist/llm/recurring-insights.d.ts +26 -0
  167. package/server-dist/llm/recurring-insights.d.ts.map +1 -0
  168. package/server-dist/llm/recurring-insights.js +119 -0
  169. package/server-dist/llm/recurring-insights.js.map +1 -0
  170. package/server-dist/llm/reflect-prompts.d.ts +55 -0
  171. package/server-dist/llm/reflect-prompts.d.ts.map +1 -0
  172. package/server-dist/llm/reflect-prompts.js +151 -0
  173. package/server-dist/llm/reflect-prompts.js.map +1 -0
  174. package/server-dist/llm/response-parsers.d.ts +8 -0
  175. package/server-dist/llm/response-parsers.d.ts.map +1 -0
  176. package/server-dist/llm/response-parsers.js +151 -0
  177. package/server-dist/llm/response-parsers.js.map +1 -0
  178. package/server-dist/llm/types.d.ts +23 -1
  179. package/server-dist/llm/types.d.ts.map +1 -1
  180. package/server-dist/llm/types.js +10 -1
  181. package/server-dist/llm/types.js.map +1 -1
  182. package/server-dist/routes/analysis.d.ts.map +1 -1
  183. package/server-dist/routes/analysis.js +107 -282
  184. package/server-dist/routes/analysis.js.map +1 -1
  185. package/server-dist/routes/analytics.d.ts.map +1 -1
  186. package/server-dist/routes/analytics.js +3 -1
  187. package/server-dist/routes/analytics.js.map +1 -1
  188. package/server-dist/routes/export.d.ts.map +1 -1
  189. package/server-dist/routes/export.js +19 -27
  190. package/server-dist/routes/export.js.map +1 -1
  191. package/server-dist/routes/facets.d.ts +4 -0
  192. package/server-dist/routes/facets.d.ts.map +1 -0
  193. package/server-dist/routes/facets.js +208 -0
  194. package/server-dist/routes/facets.js.map +1 -0
  195. package/server-dist/routes/insights.d.ts.map +1 -1
  196. package/server-dist/routes/insights.js +12 -11
  197. package/server-dist/routes/insights.js.map +1 -1
  198. package/server-dist/routes/reflect.d.ts +4 -0
  199. package/server-dist/routes/reflect.d.ts.map +1 -0
  200. package/server-dist/routes/reflect.js +332 -0
  201. package/server-dist/routes/reflect.js.map +1 -0
  202. package/server-dist/routes/route-helpers.d.ts +124 -0
  203. package/server-dist/routes/route-helpers.d.ts.map +1 -0
  204. package/server-dist/routes/route-helpers.js +242 -0
  205. package/server-dist/routes/route-helpers.js.map +1 -0
  206. package/server-dist/routes/sessions.d.ts.map +1 -1
  207. package/server-dist/routes/sessions.js +29 -5
  208. package/server-dist/routes/sessions.js.map +1 -1
  209. package/server-dist/routes/shared-aggregation.d.ts +82 -0
  210. package/server-dist/routes/shared-aggregation.d.ts.map +1 -0
  211. package/server-dist/routes/shared-aggregation.js +384 -0
  212. package/server-dist/routes/shared-aggregation.js.map +1 -0
  213. package/dashboard-dist/assets/index-BaKju1iW.js +0 -607
  214. package/dashboard-dist/assets/index-_SWpRg6C.css +0 -1
@@ -0,0 +1,457 @@
1
+ import { Command } from 'commander';
2
+ import { createInterface } from 'readline';
3
+ import ora from 'ora';
4
+ import chalk from 'chalk';
5
+ import { loadConfig } from '../utils/config.js';
6
+ import { getCurrentIsoWeek } from '../utils/date-utils.js';
7
+ // ---------------------------------------------------------------------------
8
+ // Shared helpers
9
+ // ---------------------------------------------------------------------------
10
+ function confirmPrompt(message) {
11
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
12
+ return new Promise((resolve) => {
13
+ rl.question(`${message} [y/N] `, (answer) => {
14
+ rl.close();
15
+ resolve(answer.trim().toLowerCase() === 'y');
16
+ });
17
+ });
18
+ }
19
+ function getBaseUrl() {
20
+ const config = loadConfig();
21
+ const port = config?.dashboard?.port || 7890;
22
+ return `http://localhost:${port}`;
23
+ }
24
+ async function checkServer(baseUrl) {
25
+ try {
26
+ await fetch(`${baseUrl}/api/health`);
27
+ }
28
+ catch {
29
+ console.log(chalk.yellow(' Dashboard server is not running.'));
30
+ console.log(chalk.dim(' Start it with: code-insights dashboard'));
31
+ console.log();
32
+ process.exit(1);
33
+ }
34
+ }
35
+ async function checkLlmConfigured(baseUrl) {
36
+ try {
37
+ const res = await fetch(`${baseUrl}/api/config/llm`);
38
+ if (res.ok) {
39
+ const data = await res.json();
40
+ if (!data.provider || !data.model) {
41
+ console.log(chalk.yellow(' LLM provider is not configured.'));
42
+ console.log(chalk.dim(' Configure it with: code-insights config llm'));
43
+ console.log();
44
+ process.exit(1);
45
+ }
46
+ }
47
+ }
48
+ catch {
49
+ // If config endpoint fails, let the backfill endpoint handle it
50
+ }
51
+ }
52
+ // ---------------------------------------------------------------------------
53
+ // SSE helpers
54
+ // ---------------------------------------------------------------------------
55
+ async function fetchWithSSE(url, body, signal) {
56
+ const res = await fetch(url, {
57
+ method: 'POST',
58
+ headers: { 'Content-Type': 'application/json' },
59
+ body: JSON.stringify(body),
60
+ signal,
61
+ });
62
+ if (!res.ok) {
63
+ const text = await res.text().catch(() => res.statusText);
64
+ throw new Error(`Server error ${res.status}: ${text}`);
65
+ }
66
+ if (!res.body)
67
+ throw new Error('No response body');
68
+ const reader = res.body.pipeThrough(new TextDecoderStream()).getReader();
69
+ let buffer = '';
70
+ let currentEvent = '';
71
+ let currentData = '';
72
+ let result = {};
73
+ const spinner = ora({ text: 'Starting...', indent: 2 }).start();
74
+ try {
75
+ while (true) {
76
+ const { done, value } = await reader.read();
77
+ if (done)
78
+ break;
79
+ buffer += value;
80
+ const lines = buffer.split('\n');
81
+ buffer = lines.pop() ?? '';
82
+ for (const line of lines) {
83
+ if (line.startsWith('event: ')) {
84
+ currentEvent = line.slice(7).trim();
85
+ }
86
+ else if (line.startsWith('data: ')) {
87
+ currentData = line.slice(6);
88
+ }
89
+ else if (line === '' && currentEvent && currentData) {
90
+ try {
91
+ const data = JSON.parse(currentData);
92
+ if (currentEvent === 'progress') {
93
+ spinner.text = data.message || 'Processing...';
94
+ }
95
+ else if (currentEvent === 'complete') {
96
+ spinner.succeed('Analysis complete');
97
+ result = data;
98
+ }
99
+ else if (currentEvent === 'error') {
100
+ spinner.fail(data.error || 'Generation failed');
101
+ }
102
+ }
103
+ catch {
104
+ // Skip malformed SSE events (e.g., truncated JSON from network issues)
105
+ }
106
+ currentEvent = '';
107
+ currentData = '';
108
+ }
109
+ }
110
+ }
111
+ }
112
+ finally {
113
+ reader.releaseLock();
114
+ }
115
+ return result;
116
+ }
117
+ async function backfillBatch(baseUrl, sessionIds, offset, total, signal) {
118
+ return backfillBatchToEndpoint(baseUrl, '/api/facets/backfill', sessionIds, offset, total, signal);
119
+ }
120
+ async function backfillPqBatch(baseUrl, sessionIds, offset, total, signal) {
121
+ return backfillBatchToEndpoint(baseUrl, '/api/facets/backfill-pq', sessionIds, offset, total, signal);
122
+ }
123
+ async function backfillBatchToEndpoint(baseUrl, endpoint, sessionIds, offset, total, signal) {
124
+ const res = await fetch(`${baseUrl}${endpoint}`, {
125
+ method: 'POST',
126
+ headers: { 'Content-Type': 'application/json' },
127
+ // force=true so outdated sessions (which already have facets) are re-processed.
128
+ // Missing sessions are unaffected — the guard only fires when a row exists.
129
+ body: JSON.stringify({ sessionIds, force: true }),
130
+ signal,
131
+ });
132
+ if (!res.ok) {
133
+ const text = await res.text().catch(() => res.statusText);
134
+ throw new Error(`Server error ${res.status}: ${text}`);
135
+ }
136
+ if (!res.body)
137
+ throw new Error('No response body');
138
+ const reader = res.body.pipeThrough(new TextDecoderStream()).getReader();
139
+ let buffer = '';
140
+ let currentEvent = '';
141
+ let currentData = '';
142
+ let result = { completed: 0, failed: 0 };
143
+ const spinner = ora({ text: ` Backfilling ${offset + 1}-${offset + sessionIds.length} of ${total}...`, indent: 2 }).start();
144
+ try {
145
+ while (true) {
146
+ const { done, value } = await reader.read();
147
+ if (done)
148
+ break;
149
+ buffer += value;
150
+ const lines = buffer.split('\n');
151
+ buffer = lines.pop() ?? '';
152
+ for (const line of lines) {
153
+ if (line.startsWith('event: ')) {
154
+ currentEvent = line.slice(7).trim();
155
+ }
156
+ else if (line.startsWith('data: ')) {
157
+ currentData = line.slice(6);
158
+ }
159
+ else if (line === '' && currentEvent && currentData) {
160
+ try {
161
+ const data = JSON.parse(currentData);
162
+ if (currentEvent === 'progress') {
163
+ const processed = data.completed + data.failed;
164
+ spinner.text = ` Backfilling ${offset + processed + 1} of ${total}...`;
165
+ }
166
+ else if (currentEvent === 'complete') {
167
+ result = { completed: data.completed, failed: data.failed };
168
+ spinner.succeed(` Batch complete: ${result.completed} extracted, ${result.failed} failed`);
169
+ }
170
+ }
171
+ catch { /* skip malformed */ }
172
+ currentEvent = '';
173
+ currentData = '';
174
+ }
175
+ }
176
+ }
177
+ }
178
+ finally {
179
+ reader.releaseLock();
180
+ }
181
+ return result;
182
+ }
183
+ // ---------------------------------------------------------------------------
184
+ // Actions
185
+ // ---------------------------------------------------------------------------
186
+ const ISO_WEEK_RE = /^(\d{4})-W(\d{2})$/;
187
+ async function reflectAction(options) {
188
+ const baseUrl = getBaseUrl();
189
+ const week = options.week || getCurrentIsoWeek();
190
+ // Validate --week format: must be YYYY-WNN with year 2020-2100 and week number 1-53
191
+ if (options.week) {
192
+ const match = ISO_WEEK_RE.exec(options.week);
193
+ const year = match ? parseInt(match[1], 10) : 0;
194
+ const weekNum = match ? parseInt(match[2], 10) : 0;
195
+ if (!match || weekNum < 1 || weekNum > 53 || year < 2020 || year > 2100) {
196
+ console.log(chalk.red(' Invalid week format: "' + options.week + '"'));
197
+ console.log(chalk.dim(' Use YYYY-WNN format with year 2020-2100, e.g., 2026-W10'));
198
+ console.log();
199
+ process.exit(1);
200
+ }
201
+ }
202
+ await checkServer(baseUrl);
203
+ console.log(chalk.dim(` Generating reflection for ${week}...`));
204
+ // Check minimum session threshold
205
+ const checkParams = new URLSearchParams();
206
+ checkParams.set('period', week);
207
+ if (options.project)
208
+ checkParams.set('project', options.project);
209
+ const aggRes = await fetch(`${baseUrl}/api/facets/aggregated?${checkParams.toString()}`);
210
+ if (aggRes.ok) {
211
+ const agg = await aggRes.json();
212
+ if (agg.totalSessions < 8) {
213
+ console.log(chalk.yellow(` Not enough analyzed sessions for meaningful synthesis.`));
214
+ console.log(chalk.dim(` Need at least 8 sessions with facets this week (currently ${agg.totalSessions}).`));
215
+ console.log(chalk.dim(` Run session analysis to extract facets from more sessions.`));
216
+ console.log();
217
+ process.exit(1);
218
+ }
219
+ if (agg.totalAllSessions > 0 && agg.totalSessions / agg.totalAllSessions < 0.5) {
220
+ console.log(chalk.yellow(` Note: Only ${agg.totalSessions} of ${agg.totalAllSessions} sessions are analyzed.`));
221
+ console.log(chalk.dim(` Results may not represent your full patterns.`));
222
+ console.log();
223
+ }
224
+ }
225
+ const body = {
226
+ period: week,
227
+ };
228
+ if (options.section) {
229
+ body.sections = [options.section];
230
+ }
231
+ if (options.project) {
232
+ body.project = options.project;
233
+ }
234
+ console.log();
235
+ const data = await fetchWithSSE(`${baseUrl}/api/reflect/generate`, body);
236
+ // Display results summary
237
+ const results = data.results;
238
+ if (!results) {
239
+ console.log(chalk.dim(' No results generated.'));
240
+ return;
241
+ }
242
+ console.log();
243
+ // Friction & Wins summary
244
+ const frictionWins = results['friction-wins'];
245
+ if (frictionWins) {
246
+ console.log(chalk.bold(' Friction & Wins'));
247
+ if (frictionWins.narrative) {
248
+ const lines = String(frictionWins.narrative).split('\n');
249
+ for (const line of lines) {
250
+ console.log(chalk.dim(' ') + line);
251
+ }
252
+ }
253
+ console.log();
254
+ }
255
+ // Rules & Hooks summary
256
+ const rulesSkills = results['rules-skills'];
257
+ if (rulesSkills) {
258
+ console.log(chalk.bold(' Rules & Hooks'));
259
+ const rules = rulesSkills.claudeMdRules;
260
+ if (rules && rules.length > 0) {
261
+ console.log(chalk.dim(' CLAUDE.md rules:'));
262
+ for (const r of rules) {
263
+ console.log(` ${chalk.cyan('→')} ${r.rule}`);
264
+ }
265
+ }
266
+ const hooks = rulesSkills.hookConfigs;
267
+ if (hooks && hooks.length > 0) {
268
+ console.log(chalk.dim(' Hooks:'));
269
+ for (const h of hooks) {
270
+ console.log(` ${chalk.cyan('→')} ${h.event}: ${h.command}`);
271
+ }
272
+ }
273
+ console.log();
274
+ }
275
+ // Working Style summary
276
+ const workingStyle = results['working-style'];
277
+ if (workingStyle) {
278
+ console.log(chalk.bold(' Working Style'));
279
+ if (workingStyle.narrative) {
280
+ const lines = String(workingStyle.narrative).split('\n');
281
+ for (const line of lines) {
282
+ console.log(chalk.dim(' ') + line);
283
+ }
284
+ }
285
+ console.log();
286
+ }
287
+ console.log(chalk.dim(' View full results: code-insights dashboard → Patterns'));
288
+ console.log();
289
+ }
290
+ const BACKFILL_BATCH_SIZE = 200;
291
+ async function backfillAction(options) {
292
+ const baseUrl = getBaseUrl();
293
+ await checkServer(baseUrl);
294
+ await checkLlmConfigured(baseUrl);
295
+ const params = new URLSearchParams();
296
+ params.set('period', options.period || 'all');
297
+ if (options.project)
298
+ params.set('project', options.project);
299
+ const missingRes = await fetch(`${baseUrl}/api/facets/missing?${params.toString()}`);
300
+ if (!missingRes.ok) {
301
+ const text = await missingRes.text().catch(() => missingRes.statusText);
302
+ console.log(chalk.red(` Error: ${text}`));
303
+ process.exit(1);
304
+ }
305
+ const { sessionIds: missingIds, count: missingCount } = await missingRes.json();
306
+ const outdatedRes = await fetch(`${baseUrl}/api/facets/outdated?${params.toString()}`);
307
+ if (!outdatedRes.ok) {
308
+ const text = await outdatedRes.text().catch(() => outdatedRes.statusText);
309
+ console.log(chalk.red(` Error fetching outdated sessions: ${text}`));
310
+ process.exit(1);
311
+ }
312
+ const { sessionIds: outdatedIds, count: outdatedCount } = await outdatedRes.json();
313
+ // Merge and deduplicate — a session could theoretically appear in both lists
314
+ // (e.g., if it got a partial facets row). Set deduplication ensures we count correctly.
315
+ const mergedSet = new Set([...missingIds, ...outdatedIds]);
316
+ const sessionIds = Array.from(mergedSet);
317
+ const count = sessionIds.length;
318
+ console.log();
319
+ if (count === 0) {
320
+ console.log(chalk.green(' All analyzed sessions already have up-to-date facets.'));
321
+ console.log();
322
+ return;
323
+ }
324
+ if (missingCount > 0 && outdatedCount > 0) {
325
+ console.log(chalk.cyan(` Found ${missingCount} session${missingCount !== 1 ? 's' : ''} missing facets and ${outdatedCount} with outdated analysis. Processing ${count} total.`));
326
+ }
327
+ else if (missingCount > 0) {
328
+ console.log(chalk.cyan(` Found ${missingCount} session${missingCount !== 1 ? 's' : ''} with insights but missing facets.`));
329
+ }
330
+ else {
331
+ console.log(chalk.cyan(` Found ${outdatedCount} session${outdatedCount !== 1 ? 's' : ''} with outdated analysis.`));
332
+ }
333
+ console.log(chalk.dim(` This will make ${count} LLM call${count !== 1 ? 's' : ''}.`));
334
+ if (options.dryRun) {
335
+ console.log(chalk.dim(' (dry run — no changes made)'));
336
+ console.log();
337
+ return;
338
+ }
339
+ // Confirm before proceeding — each call costs tokens
340
+ const confirmed = await confirmPrompt(' Continue?');
341
+ if (!confirmed) {
342
+ console.log(chalk.dim(' Aborted.'));
343
+ console.log();
344
+ return;
345
+ }
346
+ console.log();
347
+ let totalCompleted = 0;
348
+ let totalFailed = 0;
349
+ for (let i = 0; i < sessionIds.length; i += BACKFILL_BATCH_SIZE) {
350
+ const batch = sessionIds.slice(i, i + BACKFILL_BATCH_SIZE);
351
+ const { completed, failed } = await backfillBatch(baseUrl, batch, i, sessionIds.length);
352
+ totalCompleted += completed;
353
+ totalFailed += failed;
354
+ }
355
+ console.log();
356
+ console.log(chalk.bold(' Summary'));
357
+ console.log(chalk.green(` ${totalCompleted} sessions backfilled`));
358
+ if (totalFailed > 0) {
359
+ console.log(chalk.yellow(` ${totalFailed} sessions failed`));
360
+ }
361
+ console.log();
362
+ }
363
+ async function backfillPqAction(options) {
364
+ const baseUrl = getBaseUrl();
365
+ await checkServer(baseUrl);
366
+ await checkLlmConfigured(baseUrl);
367
+ const params = new URLSearchParams();
368
+ params.set('period', options.period || 'all');
369
+ if (options.project)
370
+ params.set('project', options.project);
371
+ const missingRes = await fetch(`${baseUrl}/api/facets/missing-pq?${params.toString()}`);
372
+ if (!missingRes.ok) {
373
+ const text = await missingRes.text().catch(() => missingRes.statusText);
374
+ console.log(chalk.red(` Error: ${text}`));
375
+ process.exit(1);
376
+ }
377
+ const { sessionIds: missingIds, count: missingCount } = await missingRes.json();
378
+ const outdatedRes = await fetch(`${baseUrl}/api/facets/outdated-pq?${params.toString()}`);
379
+ if (!outdatedRes.ok) {
380
+ const text = await outdatedRes.text().catch(() => outdatedRes.statusText);
381
+ console.log(chalk.red(` Error fetching outdated PQ sessions: ${text}`));
382
+ process.exit(1);
383
+ }
384
+ const { sessionIds: outdatedIds, count: outdatedCount } = await outdatedRes.json();
385
+ // Merge and deduplicate — a session could appear in both lists if it has an outdated PQ row
386
+ // and also got queued via missing detection (shouldn't happen but defensive merge).
387
+ const mergedSet = new Set([...missingIds, ...outdatedIds]);
388
+ const sessionIds = Array.from(mergedSet);
389
+ const count = sessionIds.length;
390
+ console.log();
391
+ if (count === 0) {
392
+ console.log(chalk.green(' All sessions already have up-to-date PQ analysis.'));
393
+ console.log();
394
+ return;
395
+ }
396
+ if (missingCount > 0 && outdatedCount > 0) {
397
+ console.log(chalk.cyan(` Found ${missingCount} session${missingCount !== 1 ? 's' : ''} missing PQ analysis and ${outdatedCount} with outdated analysis. Processing ${count} total.`));
398
+ }
399
+ else if (missingCount > 0) {
400
+ console.log(chalk.cyan(` Found ${missingCount} session${missingCount !== 1 ? 's' : ''} missing PQ analysis.`));
401
+ }
402
+ else {
403
+ console.log(chalk.cyan(` Found ${outdatedCount} session${outdatedCount !== 1 ? 's' : ''} with outdated PQ analysis.`));
404
+ }
405
+ console.log(chalk.dim(` This will make ${count} LLM call${count !== 1 ? 's' : ''}.`));
406
+ if (options.dryRun) {
407
+ console.log(chalk.dim(' (dry run — no changes made)'));
408
+ console.log();
409
+ return;
410
+ }
411
+ // Confirm before proceeding — each call costs tokens
412
+ const confirmed = await confirmPrompt(' Continue?');
413
+ if (!confirmed) {
414
+ console.log(chalk.dim(' Aborted.'));
415
+ console.log();
416
+ return;
417
+ }
418
+ console.log();
419
+ let totalCompleted = 0;
420
+ let totalFailed = 0;
421
+ for (let i = 0; i < sessionIds.length; i += BACKFILL_BATCH_SIZE) {
422
+ const batch = sessionIds.slice(i, i + BACKFILL_BATCH_SIZE);
423
+ const { completed, failed } = await backfillPqBatch(baseUrl, batch, i, sessionIds.length);
424
+ totalCompleted += completed;
425
+ totalFailed += failed;
426
+ }
427
+ console.log();
428
+ console.log(chalk.bold(' Summary'));
429
+ console.log(chalk.green(` ${totalCompleted} sessions analyzed`));
430
+ if (totalFailed > 0) {
431
+ console.log(chalk.yellow(` ${totalFailed} sessions failed`));
432
+ }
433
+ console.log();
434
+ }
435
+ // ---------------------------------------------------------------------------
436
+ // Command registration
437
+ // ---------------------------------------------------------------------------
438
+ const backfillCommand = new Command('backfill')
439
+ .description('Extract facets for sessions that have insights but are missing pattern data')
440
+ .option('-p, --period <period>', 'Time range: 7d, 30d, 90d, all', 'all')
441
+ .option('--project <name>', 'Scope to a single project')
442
+ .option('--dry-run', 'Show count without backfilling')
443
+ .option('--prompt-quality', 'Run prompt quality analysis instead of facet extraction')
444
+ .action((options) => {
445
+ if (options.promptQuality) {
446
+ return backfillPqAction(options);
447
+ }
448
+ return backfillAction(options);
449
+ });
450
+ export const reflectCommand = new Command('reflect')
451
+ .description('Generate cross-session analysis (friction, rules, working style)')
452
+ .option('--section <name>', 'Generate specific section: friction-wins, rules-skills, working-style')
453
+ .option('--week <week>', 'ISO week to reflect on (e.g., 2026-W10), defaults to current week')
454
+ .option('--project <name>', 'Scope to a single project')
455
+ .addCommand(backfillCommand)
456
+ .action(reflectAction);
457
+ //# sourceMappingURL=reflect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reflect.js","sourceRoot":"","sources":["../../src/commands/reflect.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,YAAY,SA4ErB,CAAC"}
1
+ {"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,YAAY,SA8ErB,CAAC"}
@@ -10,7 +10,7 @@ export const resetCommand = new Command('reset')
10
10
  .option('--confirm', 'Skip confirmation prompt')
11
11
  .action(async (options) => {
12
12
  console.log(chalk.red.bold('\n WARNING: This will permanently delete ALL synced data from your local database!'));
13
- console.log(chalk.yellow(' Tables to be cleared: projects, sessions, messages, insights, usage_stats\n'));
13
+ console.log(chalk.yellow(' Tables to be cleared: projects, sessions, messages, insights, session_facets, reflect_snapshots, usage_stats\n'));
14
14
  if (!options.confirm) {
15
15
  const readline = await import('readline');
16
16
  const rl = readline.createInterface({
@@ -36,6 +36,8 @@ export const resetCommand = new Command('reset')
36
36
  const clearAll = db.transaction(() => {
37
37
  // Delete in dependency order (FK constraints)
38
38
  db.prepare('DELETE FROM insights').run();
39
+ db.prepare('DELETE FROM session_facets').run();
40
+ db.prepare('DELETE FROM reflect_snapshots').run();
39
41
  db.prepare('DELETE FROM messages').run();
40
42
  db.prepare('DELETE FROM sessions').run();
41
43
  db.prepare('DELETE FROM projects').run();
@@ -1 +1 @@
1
- {"version":3,"file":"reset.js","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reset.js","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { StatsFlags } from '../data/types.js';
2
+ export declare function patternsAction(flags: StatsFlags): Promise<void>;
3
+ //# sourceMappingURL=patterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../../../src/commands/stats/actions/patterns.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA0BnD,wBAAsB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAsJrE"}