@rulemetric/cli 0.1.1 → 0.2.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 (251) hide show
  1. package/README.md +66 -0
  2. package/dist/base-command.d.ts.map +1 -1
  3. package/dist/base-command.js +15 -0
  4. package/dist/base-command.js.map +1 -1
  5. package/dist/commands/auth/login.d.ts.map +1 -1
  6. package/dist/commands/auth/login.js +7 -0
  7. package/dist/commands/auth/login.js.map +1 -1
  8. package/dist/commands/crons/list.d.ts +7 -0
  9. package/dist/commands/crons/list.d.ts.map +1 -0
  10. package/dist/commands/crons/list.js +24 -0
  11. package/dist/commands/crons/list.js.map +1 -0
  12. package/dist/commands/crons/run.d.ts +13 -0
  13. package/dist/commands/crons/run.d.ts.map +1 -0
  14. package/dist/commands/crons/run.js +48 -0
  15. package/dist/commands/crons/run.js.map +1 -0
  16. package/dist/commands/evals/listen.d.ts +28 -2
  17. package/dist/commands/evals/listen.d.ts.map +1 -1
  18. package/dist/commands/evals/listen.js +159 -25
  19. package/dist/commands/evals/listen.js.map +1 -1
  20. package/dist/commands/evals/listen.test.d.ts +2 -0
  21. package/dist/commands/evals/listen.test.d.ts.map +1 -0
  22. package/dist/commands/evals/listen.test.js +48 -0
  23. package/dist/commands/evals/listen.test.js.map +1 -0
  24. package/dist/commands/gateway/ensure.js +1 -1
  25. package/dist/commands/gateway/ensure.js.map +1 -1
  26. package/dist/commands/hooks/install.d.ts.map +1 -1
  27. package/dist/commands/hooks/install.js +40 -3
  28. package/dist/commands/hooks/install.js.map +1 -1
  29. package/dist/commands/hooks/run.js +1 -1
  30. package/dist/commands/hooks/run.js.map +1 -1
  31. package/dist/commands/hooks/uninstall.d.ts.map +1 -1
  32. package/dist/commands/hooks/uninstall.js +9 -1
  33. package/dist/commands/hooks/uninstall.js.map +1 -1
  34. package/dist/commands/org/current.d.ts +7 -0
  35. package/dist/commands/org/current.d.ts.map +1 -0
  36. package/dist/commands/org/current.js +70 -0
  37. package/dist/commands/org/current.js.map +1 -0
  38. package/dist/commands/org/list.d.ts +7 -0
  39. package/dist/commands/org/list.d.ts.map +1 -0
  40. package/dist/commands/org/list.js +37 -0
  41. package/dist/commands/org/list.js.map +1 -0
  42. package/dist/commands/org/switch.d.ts +13 -0
  43. package/dist/commands/org/switch.d.ts.map +1 -0
  44. package/dist/commands/org/switch.js +52 -0
  45. package/dist/commands/org/switch.js.map +1 -0
  46. package/dist/commands/proxy/restart.d.ts +11 -0
  47. package/dist/commands/proxy/restart.d.ts.map +1 -0
  48. package/dist/commands/proxy/restart.js +36 -0
  49. package/dist/commands/proxy/restart.js.map +1 -0
  50. package/dist/commands/proxy/start.d.ts.map +1 -1
  51. package/dist/commands/proxy/start.js +4 -0
  52. package/dist/commands/proxy/start.js.map +1 -1
  53. package/dist/commands/service/install.d.ts +16 -0
  54. package/dist/commands/service/install.d.ts.map +1 -1
  55. package/dist/commands/service/install.js +145 -6
  56. package/dist/commands/service/install.js.map +1 -1
  57. package/dist/commands/service/uninstall.d.ts.map +1 -1
  58. package/dist/commands/service/uninstall.js +28 -0
  59. package/dist/commands/service/uninstall.js.map +1 -1
  60. package/dist/commands/sessions/start.d.ts.map +1 -1
  61. package/dist/commands/sessions/start.js +5 -0
  62. package/dist/commands/sessions/start.js.map +1 -1
  63. package/dist/commands/signals/report.d.ts +10 -0
  64. package/dist/commands/signals/report.d.ts.map +1 -0
  65. package/dist/commands/signals/report.js +35 -0
  66. package/dist/commands/signals/report.js.map +1 -0
  67. package/dist/commands/signals/report.test.d.ts +2 -0
  68. package/dist/commands/signals/report.test.d.ts.map +1 -0
  69. package/dist/commands/signals/report.test.js +65 -0
  70. package/dist/commands/signals/report.test.js.map +1 -0
  71. package/dist/commands/skills/export-approved.d.ts +10 -0
  72. package/dist/commands/skills/export-approved.d.ts.map +1 -0
  73. package/dist/commands/skills/export-approved.js +31 -0
  74. package/dist/commands/skills/export-approved.js.map +1 -0
  75. package/dist/commands/skills/publish.d.ts +17 -0
  76. package/dist/commands/skills/publish.d.ts.map +1 -0
  77. package/dist/commands/skills/publish.js +80 -0
  78. package/dist/commands/skills/publish.js.map +1 -0
  79. package/dist/commands/skills/update.d.ts +3 -0
  80. package/dist/commands/skills/update.d.ts.map +1 -1
  81. package/dist/commands/skills/update.js +17 -6
  82. package/dist/commands/skills/update.js.map +1 -1
  83. package/dist/commands/suggestions/accept.d.ts +16 -0
  84. package/dist/commands/suggestions/accept.d.ts.map +1 -0
  85. package/dist/commands/suggestions/accept.js +61 -0
  86. package/dist/commands/suggestions/accept.js.map +1 -0
  87. package/dist/commands/suggestions/accept.test.d.ts +2 -0
  88. package/dist/commands/suggestions/accept.test.d.ts.map +1 -0
  89. package/dist/commands/suggestions/accept.test.js +52 -0
  90. package/dist/commands/suggestions/accept.test.js.map +1 -0
  91. package/dist/commands/suggestions/dismiss.d.ts +10 -0
  92. package/dist/commands/suggestions/dismiss.d.ts.map +1 -0
  93. package/dist/commands/suggestions/dismiss.js +26 -0
  94. package/dist/commands/suggestions/dismiss.js.map +1 -0
  95. package/dist/commands/suggestions/list.d.ts +10 -0
  96. package/dist/commands/suggestions/list.d.ts.map +1 -0
  97. package/dist/commands/suggestions/list.js +40 -0
  98. package/dist/commands/suggestions/list.js.map +1 -0
  99. package/dist/commands/suggestions/refresh.d.ts +7 -0
  100. package/dist/commands/suggestions/refresh.d.ts.map +1 -0
  101. package/dist/commands/suggestions/refresh.js +11 -0
  102. package/dist/commands/suggestions/refresh.js.map +1 -0
  103. package/dist/dashboard/Dashboard.d.ts.map +1 -1
  104. package/dist/dashboard/Dashboard.js +7 -1
  105. package/dist/dashboard/Dashboard.js.map +1 -1
  106. package/dist/lib/active-org-refresh.d.ts +22 -0
  107. package/dist/lib/active-org-refresh.d.ts.map +1 -0
  108. package/dist/lib/active-org-refresh.js +108 -0
  109. package/dist/lib/active-org-refresh.js.map +1 -0
  110. package/dist/lib/active-org-refresh.test.d.ts +2 -0
  111. package/dist/lib/active-org-refresh.test.d.ts.map +1 -0
  112. package/dist/lib/active-org-refresh.test.js +190 -0
  113. package/dist/lib/active-org-refresh.test.js.map +1 -0
  114. package/dist/lib/active-org.d.ts +43 -0
  115. package/dist/lib/active-org.d.ts.map +1 -0
  116. package/dist/lib/active-org.js +96 -0
  117. package/dist/lib/active-org.js.map +1 -0
  118. package/dist/lib/active-org.test.d.ts +2 -0
  119. package/dist/lib/active-org.test.d.ts.map +1 -0
  120. package/dist/lib/active-org.test.js +147 -0
  121. package/dist/lib/active-org.test.js.map +1 -0
  122. package/dist/lib/cron-registry.d.ts +47 -0
  123. package/dist/lib/cron-registry.d.ts.map +1 -0
  124. package/dist/lib/cron-registry.js +102 -0
  125. package/dist/lib/cron-registry.js.map +1 -0
  126. package/dist/lib/cron-registry.test.d.ts +2 -0
  127. package/dist/lib/cron-registry.test.d.ts.map +1 -0
  128. package/dist/lib/cron-registry.test.js +136 -0
  129. package/dist/lib/cron-registry.test.js.map +1 -0
  130. package/dist/lib/cron-runner.d.ts +16 -0
  131. package/dist/lib/cron-runner.d.ts.map +1 -0
  132. package/dist/lib/cron-runner.js +68 -0
  133. package/dist/lib/cron-runner.js.map +1 -0
  134. package/dist/lib/detect-languages.d.ts +7 -0
  135. package/dist/lib/detect-languages.d.ts.map +1 -0
  136. package/dist/lib/detect-languages.js +113 -0
  137. package/dist/lib/detect-languages.js.map +1 -0
  138. package/dist/lib/detect-languages.test.d.ts +2 -0
  139. package/dist/lib/detect-languages.test.d.ts.map +1 -0
  140. package/dist/lib/detect-languages.test.js +29 -0
  141. package/dist/lib/detect-languages.test.js.map +1 -0
  142. package/dist/lib/eval-executor.d.ts.map +1 -1
  143. package/dist/lib/eval-executor.js +5 -2
  144. package/dist/lib/eval-executor.js.map +1 -1
  145. package/dist/lib/gateway-entry.js +4 -1
  146. package/dist/lib/gateway-entry.js.map +1 -1
  147. package/dist/lib/gateway-lifecycle.d.ts +1 -1
  148. package/dist/lib/gateway-lifecycle.d.ts.map +1 -1
  149. package/dist/lib/gateway-lifecycle.js +13 -2
  150. package/dist/lib/gateway-lifecycle.js.map +1 -1
  151. package/dist/lib/gateway.d.ts +4 -5
  152. package/dist/lib/gateway.d.ts.map +1 -1
  153. package/dist/lib/gateway.js +68 -2
  154. package/dist/lib/gateway.js.map +1 -1
  155. package/dist/lib/graphile-worker-runner.d.ts +124 -0
  156. package/dist/lib/graphile-worker-runner.d.ts.map +1 -0
  157. package/dist/lib/graphile-worker-runner.js +526 -0
  158. package/dist/lib/graphile-worker-runner.js.map +1 -0
  159. package/dist/lib/graphile-worker-runner.test.d.ts +2 -0
  160. package/dist/lib/graphile-worker-runner.test.d.ts.map +1 -0
  161. package/dist/lib/graphile-worker-runner.test.js +153 -0
  162. package/dist/lib/graphile-worker-runner.test.js.map +1 -0
  163. package/dist/lib/handlers/cron-close-stale-sessions.d.ts +3 -0
  164. package/dist/lib/handlers/cron-close-stale-sessions.d.ts.map +1 -0
  165. package/dist/lib/handlers/cron-close-stale-sessions.js +8 -0
  166. package/dist/lib/handlers/cron-close-stale-sessions.js.map +1 -0
  167. package/dist/lib/handlers/cron-data-integrity-audit.d.ts +3 -0
  168. package/dist/lib/handlers/cron-data-integrity-audit.d.ts.map +1 -0
  169. package/dist/lib/handlers/cron-data-integrity-audit.js +16 -0
  170. package/dist/lib/handlers/cron-data-integrity-audit.js.map +1 -0
  171. package/dist/lib/handlers/cron-refresh-skills.d.ts +3 -0
  172. package/dist/lib/handlers/cron-refresh-skills.d.ts.map +1 -0
  173. package/dist/lib/handlers/cron-refresh-skills.js +91 -0
  174. package/dist/lib/handlers/cron-refresh-skills.js.map +1 -0
  175. package/dist/lib/handlers/cron-refresh-skills.test.d.ts +2 -0
  176. package/dist/lib/handlers/cron-refresh-skills.test.d.ts.map +1 -0
  177. package/dist/lib/handlers/cron-refresh-skills.test.js +114 -0
  178. package/dist/lib/handlers/cron-refresh-skills.test.js.map +1 -0
  179. package/dist/lib/handlers/cron-regenerate-insights.d.ts +3 -0
  180. package/dist/lib/handlers/cron-regenerate-insights.d.ts.map +1 -0
  181. package/dist/lib/handlers/cron-regenerate-insights.js +6 -0
  182. package/dist/lib/handlers/cron-regenerate-insights.js.map +1 -0
  183. package/dist/lib/handlers/cron-suggest-instructions.d.ts +3 -0
  184. package/dist/lib/handlers/cron-suggest-instructions.d.ts.map +1 -0
  185. package/dist/lib/handlers/cron-suggest-instructions.js +159 -0
  186. package/dist/lib/handlers/cron-suggest-instructions.js.map +1 -0
  187. package/dist/lib/handlers/cron-suggest-instructions.test.d.ts +2 -0
  188. package/dist/lib/handlers/cron-suggest-instructions.test.d.ts.map +1 -0
  189. package/dist/lib/handlers/cron-suggest-instructions.test.js +80 -0
  190. package/dist/lib/handlers/cron-suggest-instructions.test.js.map +1 -0
  191. package/dist/lib/handlers/process-conversation.d.ts +35 -0
  192. package/dist/lib/handlers/process-conversation.d.ts.map +1 -0
  193. package/dist/lib/handlers/process-conversation.js +35 -0
  194. package/dist/lib/handlers/process-conversation.js.map +1 -0
  195. package/dist/lib/handlers/process-eval.d.ts +32 -0
  196. package/dist/lib/handlers/process-eval.d.ts.map +1 -0
  197. package/dist/lib/handlers/process-eval.js +207 -0
  198. package/dist/lib/handlers/process-eval.js.map +1 -0
  199. package/dist/lib/handlers/process-insights.d.ts +39 -0
  200. package/dist/lib/handlers/process-insights.d.ts.map +1 -0
  201. package/dist/lib/handlers/process-insights.js +300 -0
  202. package/dist/lib/handlers/process-insights.js.map +1 -0
  203. package/dist/lib/handlers/process-launch.d.ts +29 -0
  204. package/dist/lib/handlers/process-launch.d.ts.map +1 -0
  205. package/dist/lib/handlers/process-launch.js +41 -0
  206. package/dist/lib/handlers/process-launch.js.map +1 -0
  207. package/dist/lib/hooks-config.d.ts +28 -4
  208. package/dist/lib/hooks-config.d.ts.map +1 -1
  209. package/dist/lib/hooks-config.js +138 -10
  210. package/dist/lib/hooks-config.js.map +1 -1
  211. package/dist/lib/llm-client.d.ts.map +1 -1
  212. package/dist/lib/llm-client.js +149 -16
  213. package/dist/lib/llm-client.js.map +1 -1
  214. package/dist/lib/mirror-writer-db.d.ts +12 -0
  215. package/dist/lib/mirror-writer-db.d.ts.map +1 -0
  216. package/dist/lib/mirror-writer-db.js +51 -0
  217. package/dist/lib/mirror-writer-db.js.map +1 -0
  218. package/dist/lib/mirror-writer.d.ts +35 -0
  219. package/dist/lib/mirror-writer.d.ts.map +1 -0
  220. package/dist/lib/mirror-writer.js +27 -0
  221. package/dist/lib/mirror-writer.js.map +1 -0
  222. package/dist/lib/mirror-writer.test.d.ts +2 -0
  223. package/dist/lib/mirror-writer.test.d.ts.map +1 -0
  224. package/dist/lib/mirror-writer.test.js +47 -0
  225. package/dist/lib/mirror-writer.test.js.map +1 -0
  226. package/dist/lib/permanent-job-error.d.ts +17 -0
  227. package/dist/lib/permanent-job-error.d.ts.map +1 -0
  228. package/dist/lib/permanent-job-error.js +23 -0
  229. package/dist/lib/permanent-job-error.js.map +1 -0
  230. package/dist/lib/permanent-job-error.test.d.ts +2 -0
  231. package/dist/lib/permanent-job-error.test.d.ts.map +1 -0
  232. package/dist/lib/permanent-job-error.test.js +29 -0
  233. package/dist/lib/permanent-job-error.test.js.map +1 -0
  234. package/dist/lib/version-check.d.ts +11 -0
  235. package/dist/lib/version-check.d.ts.map +1 -0
  236. package/dist/lib/version-check.js +106 -0
  237. package/dist/lib/version-check.js.map +1 -0
  238. package/oclif.manifest.json +611 -81
  239. package/package.json +19 -5
  240. package/dist/commands/insights/sync.d.ts +0 -17
  241. package/dist/commands/insights/sync.d.ts.map +0 -1
  242. package/dist/commands/insights/sync.js +0 -477
  243. package/dist/commands/insights/sync.js.map +0 -1
  244. package/dist/lib/eval-worker.d.ts +0 -12
  245. package/dist/lib/eval-worker.d.ts.map +0 -1
  246. package/dist/lib/eval-worker.js +0 -395
  247. package/dist/lib/eval-worker.js.map +0 -1
  248. package/dist/lib/insights-worker.d.ts +0 -10
  249. package/dist/lib/insights-worker.d.ts.map +0 -1
  250. package/dist/lib/insights-worker.js +0 -329
  251. package/dist/lib/insights-worker.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rulemetric/cli",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -32,8 +32,17 @@
32
32
  "instructions": {
33
33
  "description": "Manage instructions"
34
34
  },
35
+ "org": {
36
+ "description": "Manage active organization"
37
+ },
35
38
  "skills": {
36
39
  "description": "Browse and install community skills"
40
+ },
41
+ "suggestions": {
42
+ "description": "List and act on instruction suggestions"
43
+ },
44
+ "crons": {
45
+ "description": "List and run scheduled background tasks"
37
46
  }
38
47
  }
39
48
  },
@@ -45,12 +54,16 @@
45
54
  "@oclif/plugin-not-found": "^3.2.0",
46
55
  "@oclif/table": "^0.3.0",
47
56
  "@supabase/supabase-js": "^2.95.0",
57
+ "graphile-worker": "^0.16.6",
48
58
  "ink": "^7.0.1",
49
59
  "ink-spinner": "^5.0.0",
60
+ "postgres": "^3.4.0",
50
61
  "react": "^19.0.0",
51
- "@rulemetric/session": "0.1.1",
52
- "@rulemetric/skills-registry": "0.1.1",
53
- "@rulemetric/hooks": "0.1.1"
62
+ "@rulemetric/core": "0.0.1",
63
+ "@rulemetric/hooks": "0.2.0",
64
+ "@rulemetric/session": "0.2.0",
65
+ "@rulemetric/skills-registry": "0.2.0",
66
+ "@rulemetric/telemetry": "0.0.1"
54
67
  },
55
68
  "devDependencies": {
56
69
  "@hono/node-server": "^1.13.0",
@@ -71,6 +84,7 @@
71
84
  "test:e2e": "vitest run --config vitest.e2e.config.ts",
72
85
  "test:unit": "vitest run --config vitest.config.ts",
73
86
  "type-check": "tsc --noEmit",
74
- "postbuild": "oclif manifest"
87
+ "postbuild": "oclif manifest",
88
+ "worker:restart": "pnpm build && launchctl unload ~/Library/LaunchAgents/com.rulemetric.worker.plist 2>/dev/null; launchctl load ~/Library/LaunchAgents/com.rulemetric.worker.plist && echo 'worker restarted with fresh dist'"
75
89
  }
76
90
  }
@@ -1,17 +0,0 @@
1
- import { BaseCommand } from '../../base-command.js';
2
- export default class InsightsSync extends BaseCommand {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- 'claude-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
- 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
- provider: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
- generate: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
- };
11
- run(): Promise<void>;
12
- private generateFacets;
13
- private loadSessionMetas;
14
- private loadFacets;
15
- private fetchAllDbSessions;
16
- }
17
- //# sourceMappingURL=sync.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../../src/commands/insights/sync.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AA0DpD,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,WAAW;IACnD,OAAgB,WAAW,SAA8E;IAEzG,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;;MAiBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YA6XZ,cAAc;IAgF5B,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,UAAU;YAiBJ,kBAAkB;CAGjC"}
@@ -1,477 +0,0 @@
1
- import { Flags } from '@oclif/core';
2
- import * as fs from 'node:fs';
3
- import * as path from 'node:path';
4
- import * as os from 'node:os';
5
- import { BaseCommand } from '../../base-command.js';
6
- import { apiGet, apiPost, apiPatch } from '../../lib/api-client.js';
7
- import { discoverAllSessions, getProvider } from '@rulemetric/session/providers';
8
- import { aggregateProviderCalls } from '../../lib/provider-aggregator.js';
9
- export default class InsightsSync extends BaseCommand {
10
- static description = 'Sync local Claude Code session-meta and facets into matching DB sessions';
11
- static examples = [
12
- '<%= config.bin %> insights sync',
13
- '<%= config.bin %> insights sync --dry-run',
14
- '<%= config.bin %> insights sync --claude-dir ~/.claude',
15
- ];
16
- static flags = {
17
- 'claude-dir': Flags.string({
18
- description: 'Path to Claude Code data directory',
19
- default: path.join(os.homedir(), '.claude'),
20
- }),
21
- 'dry-run': Flags.boolean({
22
- description: 'Show what would be synced without making changes',
23
- default: false,
24
- }),
25
- provider: Flags.string({
26
- description: 'Filter to a specific provider (claude_code, codex, copilot, cursor, pi, opencode)',
27
- default: 'all',
28
- }),
29
- generate: Flags.boolean({
30
- description: 'Generate facets and recommendations after sync',
31
- default: false,
32
- }),
33
- };
34
- async run() {
35
- const { flags } = await this.parse(InsightsSync);
36
- this.requireAuth();
37
- const claudeDir = flags['claude-dir'];
38
- const dryRun = flags['dry-run'];
39
- // 1. Load local session-meta files
40
- const metaDir = path.join(claudeDir, 'usage-data', 'session-meta');
41
- const facetsDir = path.join(claudeDir, 'usage-data', 'facets');
42
- if (!fs.existsSync(metaDir)) {
43
- this.error('No Claude Code usage data found at ' + metaDir);
44
- }
45
- const localMetas = this.loadSessionMetas(metaDir);
46
- this.log(`Local session-meta: ${localMetas.size} files`);
47
- const localFacets = this.loadFacets(facetsDir);
48
- if (localFacets.size > 0) {
49
- this.log(`Local facets: ${localFacets.size} files`);
50
- }
51
- // 2. Fetch all DB sessions
52
- const allDbSessions = await this.fetchAllDbSessions();
53
- const linkedSessions = new Map();
54
- const unlinkedSessions = [];
55
- for (const s of allDbSessions) {
56
- if (s.externalSessionId) {
57
- linkedSessions.set(s.externalSessionId, s);
58
- }
59
- else {
60
- unlinkedSessions.push(s);
61
- }
62
- }
63
- this.log(`DB sessions: ${allDbSessions.length} total, ${linkedSessions.size} linked, ${unlinkedSessions.length} unlinked`);
64
- // 3. Fuzzy-match unlinked DB sessions to local metas by project_path + start_time
65
- let backfilled = 0;
66
- for (const dbSession of unlinkedSessions) {
67
- const dbMeta = dbSession.metadata;
68
- if (dbMeta?.local_session_meta)
69
- continue; // already enriched
70
- const dbStart = new Date(dbSession.startedAt).getTime();
71
- const dbPath = dbSession.projectPath ?? '';
72
- // Find local meta with matching project path and start time within 5 minutes
73
- let bestMatch = null;
74
- let bestDelta = Infinity;
75
- for (const [, meta] of localMetas) {
76
- if (linkedSessions.has(meta.session_id))
77
- continue; // already linked
78
- const metaStart = new Date(meta.start_time).getTime();
79
- const delta = Math.abs(dbStart - metaStart);
80
- // Must be within 5 minutes and same project
81
- if (delta < 5 * 60 * 1000 && delta < bestDelta) {
82
- const metaProject = meta.project_path.split('/').pop() ?? '';
83
- const dbProject = dbPath.split('/').pop() ?? '';
84
- if (metaProject && dbProject && metaProject === dbProject) {
85
- bestMatch = meta;
86
- bestDelta = delta;
87
- }
88
- }
89
- }
90
- if (bestMatch) {
91
- linkedSessions.set(bestMatch.session_id, dbSession);
92
- backfilled++;
93
- }
94
- }
95
- if (backfilled > 0) {
96
- this.log(`Fuzzy-matched ${backfilled} unlinked sessions by project + start time`);
97
- }
98
- // 4. Enrich matched sessions
99
- let matched = 0;
100
- let enriched = 0;
101
- let skipped = 0;
102
- for (const [extId, dbSession] of linkedSessions) {
103
- const meta = localMetas.get(extId);
104
- if (!meta) {
105
- skipped++;
106
- continue;
107
- }
108
- matched++;
109
- const existingMeta = dbSession.metadata ?? {};
110
- // Skip if fully enriched (has local_session_meta AND externalSessionId)
111
- if (existingMeta.local_session_meta && dbSession.externalSessionId) {
112
- skipped++;
113
- continue;
114
- }
115
- const enrichment = {};
116
- // Backfill externalSessionId if the DB session doesn't have one
117
- if (!dbSession.externalSessionId) {
118
- enrichment.externalSessionId = extId;
119
- }
120
- // Build metadata enrichment from local session-meta
121
- enrichment.metadata = {
122
- local_session_meta: {
123
- duration_minutes: meta.duration_minutes,
124
- user_message_count: meta.user_message_count,
125
- assistant_message_count: meta.assistant_message_count,
126
- tool_counts: meta.tool_counts,
127
- languages: meta.languages,
128
- git_commits: meta.git_commits,
129
- git_pushes: meta.git_pushes,
130
- user_interruptions: meta.user_interruptions,
131
- tool_errors: meta.tool_errors,
132
- tool_error_categories: meta.tool_error_categories,
133
- uses_task_agent: meta.uses_task_agent,
134
- uses_mcp: meta.uses_mcp,
135
- uses_web_search: meta.uses_web_search,
136
- uses_web_fetch: meta.uses_web_fetch,
137
- lines_added: meta.lines_added,
138
- lines_removed: meta.lines_removed,
139
- files_modified: meta.files_modified,
140
- message_hours: meta.message_hours,
141
- user_response_times: meta.user_response_times,
142
- user_message_timestamps: meta.user_message_timestamps,
143
- },
144
- };
145
- // Token usage from local data
146
- if (meta.input_tokens > 0 || meta.output_tokens > 0) {
147
- enrichment.tokenUsage = {
148
- input_tokens: meta.input_tokens,
149
- output_tokens: meta.output_tokens,
150
- };
151
- }
152
- // Facets → analysis column
153
- const facet = localFacets.get(extId);
154
- if (facet) {
155
- enrichment.analysis = {
156
- source: 'local_facets',
157
- underlying_goal: facet.underlying_goal,
158
- goal_categories: facet.goal_categories,
159
- outcome: facet.outcome,
160
- user_satisfaction: facet.user_satisfaction_counts,
161
- claude_helpfulness: facet.claude_helpfulness,
162
- session_type: facet.session_type,
163
- friction: facet.friction_counts,
164
- friction_detail: facet.friction_detail,
165
- primary_success: facet.primary_success,
166
- brief_summary: facet.brief_summary,
167
- };
168
- }
169
- if (dryRun) {
170
- const fields = Object.keys(enrichment).join(', ');
171
- this.log(` [dry-run] Would enrich ${dbSession.id.slice(0, 12)} (ext: ${extId.slice(0, 12)}): ${fields}`);
172
- }
173
- else {
174
- try {
175
- await apiPatch(`/api/sessions/${dbSession.id}/enrich`, enrichment);
176
- enriched++;
177
- }
178
- catch (err) {
179
- this.log(` Failed to enrich ${dbSession.id.slice(0, 12)}: ${err.message}`);
180
- }
181
- }
182
- }
183
- // 5. Import orphan local sessions (exist locally but not in DB)
184
- const matchedLocalIds = new Set(linkedSessions.keys());
185
- const orphanMetas = [...localMetas.values()].filter(m => !matchedLocalIds.has(m.session_id));
186
- let imported = 0;
187
- if (orphanMetas.length > 0) {
188
- this.log(`Found ${orphanMetas.length} local sessions with no DB match — importing...`);
189
- for (const meta of orphanMetas) {
190
- // Only import sessions with meaningful activity
191
- if (meta.user_message_count < 1)
192
- continue;
193
- const sessionPayload = {
194
- tool: 'claude_code',
195
- externalSessionId: meta.session_id,
196
- projectPath: meta.project_path,
197
- startedAt: meta.start_time,
198
- metadata: {},
199
- };
200
- if (dryRun) {
201
- imported++;
202
- continue;
203
- }
204
- try {
205
- const created = await apiPost('/api/sessions', sessionPayload);
206
- // Immediately enrich with local data
207
- const enrichPayload = {
208
- metadata: {
209
- local_session_meta: {
210
- duration_minutes: meta.duration_minutes,
211
- user_message_count: meta.user_message_count,
212
- assistant_message_count: meta.assistant_message_count,
213
- tool_counts: meta.tool_counts,
214
- languages: meta.languages,
215
- git_commits: meta.git_commits,
216
- git_pushes: meta.git_pushes,
217
- user_interruptions: meta.user_interruptions,
218
- tool_errors: meta.tool_errors,
219
- tool_error_categories: meta.tool_error_categories,
220
- uses_task_agent: meta.uses_task_agent,
221
- uses_mcp: meta.uses_mcp,
222
- uses_web_search: meta.uses_web_search,
223
- uses_web_fetch: meta.uses_web_fetch,
224
- lines_added: meta.lines_added,
225
- lines_removed: meta.lines_removed,
226
- files_modified: meta.files_modified,
227
- message_hours: meta.message_hours,
228
- },
229
- },
230
- };
231
- if (meta.input_tokens > 0 || meta.output_tokens > 0) {
232
- enrichPayload.tokenUsage = {
233
- input_tokens: meta.input_tokens,
234
- output_tokens: meta.output_tokens,
235
- };
236
- }
237
- const facet = localFacets.get(meta.session_id);
238
- if (facet) {
239
- enrichPayload.analysis = {
240
- source: 'local_facets',
241
- underlying_goal: facet.underlying_goal,
242
- goal_categories: facet.goal_categories,
243
- outcome: facet.outcome,
244
- user_satisfaction: facet.user_satisfaction_counts,
245
- claude_helpfulness: facet.claude_helpfulness,
246
- session_type: facet.session_type,
247
- friction: facet.friction_counts,
248
- friction_detail: facet.friction_detail,
249
- primary_success: facet.primary_success,
250
- brief_summary: facet.brief_summary,
251
- };
252
- }
253
- await apiPatch(`/api/sessions/${created.id}/enrich`, enrichPayload);
254
- imported++;
255
- }
256
- catch (err) {
257
- // Skip duplicates (externalSessionId unique constraint)
258
- const msg = err.message;
259
- if (!msg.includes('duplicate') && !msg.includes('unique')) {
260
- this.log(` Failed to import ${meta.session_id.slice(0, 12)}: ${msg}`);
261
- }
262
- }
263
- }
264
- }
265
- // ── Multi-provider discovery ──────────────────────────────────────
266
- // Discover sessions from all non-Claude-Code providers and import them.
267
- let providerDiscovered = 0;
268
- let providerImported = 0;
269
- const providerFilter = flags.provider;
270
- const sources = await discoverAllSessions(providerFilter);
271
- // Filter out claude_code sessions — already handled above
272
- const nonClaudeSources = sources.filter(s => s.provider !== 'claude');
273
- if (nonClaudeSources.length > 0) {
274
- this.log(`\nProvider discovery: found ${nonClaudeSources.length} non-Claude session sources`);
275
- const seenKeys = new Set();
276
- for (const source of nonClaudeSources) {
277
- providerDiscovered++;
278
- const provider = await getProvider(source.provider);
279
- if (!provider)
280
- continue;
281
- const parser = provider.createSessionParser(source, seenKeys);
282
- const calls = [];
283
- for await (const call of parser.parse()) {
284
- calls.push(call);
285
- }
286
- if (calls.length === 0)
287
- continue;
288
- const meta = aggregateProviderCalls(calls);
289
- // Derive session identifier from source
290
- const sessionId = calls[0].sessionId || path.basename(source.path, path.extname(source.path));
291
- const startedAt = calls[0].timestamp;
292
- // Map provider name to DB tool name
293
- // The DB SESSION_TOOLS are: claude_code, cursor, vscode_copilot, copilot_agent, rulemetric_mcp
294
- // Provider names: codex, copilot, cursor, pi, opencode — map to closest DB tool or use as-is
295
- const toolName = source.provider;
296
- if (dryRun) {
297
- this.log(` [dry-run] Would import ${source.provider} session: ${sessionId.slice(0, 20)} (${calls.length} calls, ${meta.user_message_count} user msgs)`);
298
- providerImported++;
299
- continue;
300
- }
301
- try {
302
- // Create or find existing DB session
303
- const created = await apiPost('/api/sessions', {
304
- tool: toolName,
305
- externalSessionId: `${source.provider}:${sessionId}`,
306
- projectPath: source.project,
307
- startedAt,
308
- metadata: {},
309
- });
310
- // Enrich with aggregated provider data
311
- const enrichPayload = {
312
- metadata: {
313
- local_session_meta: {
314
- duration_minutes: meta.duration_minutes,
315
- user_message_count: meta.user_message_count,
316
- assistant_message_count: meta.assistant_message_count,
317
- tool_counts: meta.tool_counts,
318
- languages: meta.languages,
319
- git_commits: meta.git_commits,
320
- git_pushes: meta.git_pushes,
321
- user_interruptions: meta.user_interruptions,
322
- tool_errors: meta.tool_errors,
323
- lines_added: meta.lines_added,
324
- lines_removed: meta.lines_removed,
325
- files_modified: meta.files_modified,
326
- models_used: meta.models_used,
327
- first_prompt: meta.first_prompt,
328
- },
329
- },
330
- };
331
- if (meta.input_tokens > 0 || meta.output_tokens > 0) {
332
- enrichPayload.tokenUsage = {
333
- input_tokens: meta.input_tokens,
334
- output_tokens: meta.output_tokens,
335
- cache_read_tokens: meta.cache_read_tokens,
336
- cache_write_tokens: meta.cache_write_tokens,
337
- reasoning_tokens: meta.reasoning_tokens,
338
- };
339
- }
340
- await apiPatch(`/api/sessions/${created.id}/enrich`, enrichPayload);
341
- providerImported++;
342
- }
343
- catch (err) {
344
- const msg = err.message;
345
- // Skip duplicates silently
346
- if (!msg.includes('duplicate') && !msg.includes('unique')) {
347
- this.log(` Failed to import ${source.provider}:${sessionId.slice(0, 12)}: ${msg}`);
348
- }
349
- }
350
- }
351
- }
352
- this.log('');
353
- if (dryRun) {
354
- this.log(`Dry run: ${matched} matched, ${skipped} skipped, ${imported} would import (Claude Code)`);
355
- if (providerDiscovered > 0) {
356
- this.log(` Providers: ${providerDiscovered} discovered, ${providerImported} would import`);
357
- }
358
- }
359
- else {
360
- this.log(`Sync complete: ${enriched} enriched, ${matched - enriched} already up-to-date, ${imported} imported (Claude Code)`);
361
- if (providerImported > 0) {
362
- this.log(` Providers: ${providerImported} imported from non-Claude tools`);
363
- }
364
- }
365
- // ── Generate facets + queue recommendations ──────────────────────────
366
- if (flags.generate && !dryRun) {
367
- await this.generateFacets();
368
- }
369
- }
370
- async generateFacets() {
371
- const { detectLlmBackend, runLlmPrompt } = await import('../../lib/llm-client.js');
372
- const { FACET_GENERATION_PROMPT } = await import('../../lib/insights-prompts.js');
373
- const backend = detectLlmBackend();
374
- if (backend === 'none') {
375
- this.log('\nSkipping facet generation: no LLM backend available (install claude CLI or set ANTHROPIC_API_KEY)');
376
- return;
377
- }
378
- this.log(`\nGenerating facets (backend: ${backend})...`);
379
- // Fetch sessions that don't have analysis yet
380
- let sessions;
381
- try {
382
- sessions = await apiGet('/api/sessions?hasAnalysis=false&limit=20');
383
- }
384
- catch (err) {
385
- this.log(` Failed to fetch sessions: ${err.message}`);
386
- return;
387
- }
388
- if (sessions.length === 0) {
389
- this.log(' All sessions already have analysis — nothing to generate');
390
- return;
391
- }
392
- let generated = 0;
393
- for (const session of sessions) {
394
- const meta = session.metadata?.local_session_meta;
395
- // Build a lightweight summary from whatever metadata we have
396
- const summary = {
397
- sessionId: session.id,
398
- projectPath: session.projectPath,
399
- startedAt: session.startedAt,
400
- };
401
- if (meta) {
402
- summary.duration_minutes = meta.duration_minutes;
403
- summary.user_message_count = meta.user_message_count;
404
- summary.tool_counts = meta.tool_counts;
405
- summary.first_prompt = meta.first_prompt;
406
- summary.lines_added = meta.lines_added;
407
- summary.lines_removed = meta.lines_removed;
408
- summary.files_modified = meta.files_modified;
409
- summary.models_used = meta.models_used;
410
- }
411
- const result = await runLlmPrompt(FACET_GENERATION_PROMPT, JSON.stringify(summary), 2048);
412
- if (!result) {
413
- this.log(` Failed to generate facets for ${session.id.slice(0, 12)}`);
414
- continue;
415
- }
416
- try {
417
- await apiPatch(`/api/sessions/${session.id}/enrich`, {
418
- analysis: {
419
- source: 'llm_generated',
420
- ...result,
421
- },
422
- });
423
- generated++;
424
- }
425
- catch (err) {
426
- this.log(` Failed to enrich ${session.id.slice(0, 12)}: ${err.message}`);
427
- }
428
- }
429
- this.log(` Generated facets for ${generated} sessions`);
430
- // Queue a recommendations job
431
- try {
432
- await apiPost('/api/insights-jobs', { projectPath: null });
433
- this.log(' Queued recommendations job');
434
- }
435
- catch (err) {
436
- this.log(` Failed to queue recommendations job: ${err.message}`);
437
- }
438
- }
439
- loadSessionMetas(dir) {
440
- const metas = new Map();
441
- for (const file of fs.readdirSync(dir).filter(f => f.endsWith('.json'))) {
442
- try {
443
- const raw = fs.readFileSync(path.join(dir, file), 'utf-8');
444
- const meta = JSON.parse(raw);
445
- if (meta.session_id) {
446
- metas.set(meta.session_id, meta);
447
- }
448
- }
449
- catch {
450
- // skip corrupt files
451
- }
452
- }
453
- return metas;
454
- }
455
- loadFacets(dir) {
456
- const facets = new Map();
457
- if (!fs.existsSync(dir))
458
- return facets;
459
- for (const file of fs.readdirSync(dir).filter(f => f.endsWith('.json'))) {
460
- try {
461
- const raw = fs.readFileSync(path.join(dir, file), 'utf-8');
462
- const facet = JSON.parse(raw);
463
- if (facet.session_id) {
464
- facets.set(facet.session_id, facet);
465
- }
466
- }
467
- catch {
468
- // skip corrupt files
469
- }
470
- }
471
- return facets;
472
- }
473
- async fetchAllDbSessions() {
474
- return apiGet('/api/sessions?limit=500');
475
- }
476
- }
477
- //# sourceMappingURL=sync.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../../src/commands/insights/sync.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- export interface WorkerOptions {
2
- supabaseUrl: string;
3
- supabaseAnonKey: string;
4
- accessToken: string;
5
- userId: string;
6
- log: (msg: string) => void;
7
- }
8
- export declare function createWorkerId(): string;
9
- /** Decode the `sub` claim from a JWT without a library. */
10
- export declare function getUserIdFromJwt(jwt: string): string | null;
11
- export declare function startWorker(options: WorkerOptions): Promise<() => void>;
12
- //# sourceMappingURL=eval-worker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eval-worker.d.ts","sourceRoot":"","sources":["../../src/lib/eval-worker.ts"],"names":[],"mappings":"AA6CA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO3D;AAeD,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CA+X7E"}