@su-record/vibe 2.6.26 → 2.6.28

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 (287) hide show
  1. package/CLAUDE.md +202 -153
  2. package/LICENSE +21 -21
  3. package/README.md +267 -236
  4. package/agents/architect-low.md +41 -41
  5. package/agents/architect-medium.md +59 -59
  6. package/agents/architect.md +80 -80
  7. package/agents/build-error-resolver.md +115 -115
  8. package/agents/compounder.md +261 -261
  9. package/agents/diagrammer.md +178 -178
  10. package/agents/docs/api-documenter.md +99 -99
  11. package/agents/docs/changelog-writer.md +93 -93
  12. package/agents/e2e-tester.md +266 -266
  13. package/agents/explorer-low.md +42 -42
  14. package/agents/explorer-medium.md +59 -59
  15. package/agents/explorer.md +48 -48
  16. package/agents/implementer-low.md +43 -43
  17. package/agents/implementer-medium.md +52 -52
  18. package/agents/implementer.md +54 -54
  19. package/agents/planning/requirements-analyst.md +84 -84
  20. package/agents/planning/ux-advisor.md +83 -83
  21. package/agents/qa/acceptance-tester.md +86 -86
  22. package/agents/qa/edge-case-finder.md +93 -93
  23. package/agents/refactor-cleaner.md +143 -143
  24. package/agents/research/best-practices-agent.md +199 -199
  25. package/agents/research/codebase-patterns-agent.md +157 -157
  26. package/agents/research/framework-docs-agent.md +188 -188
  27. package/agents/research/security-advisory-agent.md +213 -213
  28. package/agents/review/architecture-reviewer.md +107 -107
  29. package/agents/review/complexity-reviewer.md +116 -116
  30. package/agents/review/data-integrity-reviewer.md +88 -88
  31. package/agents/review/git-history-reviewer.md +103 -103
  32. package/agents/review/performance-reviewer.md +86 -86
  33. package/agents/review/python-reviewer.md +150 -150
  34. package/agents/review/rails-reviewer.md +139 -139
  35. package/agents/review/react-reviewer.md +144 -144
  36. package/agents/review/security-reviewer.md +80 -80
  37. package/agents/review/simplicity-reviewer.md +140 -140
  38. package/agents/review/test-coverage-reviewer.md +116 -116
  39. package/agents/review/typescript-reviewer.md +127 -127
  40. package/agents/searcher.md +54 -54
  41. package/agents/simplifier.md +120 -120
  42. package/agents/tester.md +49 -49
  43. package/agents/ui-previewer.md +268 -268
  44. package/commands/vibe.analyze.md +356 -356
  45. package/commands/vibe.reason.md +329 -329
  46. package/commands/vibe.review.md +423 -423
  47. package/commands/vibe.run.md +1313 -1313
  48. package/commands/vibe.spec.md +1054 -1054
  49. package/commands/vibe.spec.review.md +412 -412
  50. package/commands/vibe.trace.md +161 -161
  51. package/commands/vibe.utils.md +376 -376
  52. package/commands/vibe.verify.md +375 -375
  53. package/dist/cli/collaborator.js +52 -52
  54. package/dist/cli/detect.js +32 -32
  55. package/dist/cli/hud.js +20 -20
  56. package/dist/cli/index.js +112 -112
  57. package/dist/cli/llm.js +144 -144
  58. package/dist/cli/mcp.d.ts +49 -0
  59. package/dist/cli/mcp.d.ts.map +1 -0
  60. package/dist/cli/mcp.js +169 -0
  61. package/dist/cli/mcp.js.map +1 -0
  62. package/dist/cli/postinstall.d.ts.map +1 -1
  63. package/dist/cli/postinstall.js +886 -858
  64. package/dist/cli/postinstall.js.map +1 -1
  65. package/dist/cli/setup/GlobalInstaller.d.ts +6 -0
  66. package/dist/cli/setup/GlobalInstaller.d.ts.map +1 -1
  67. package/dist/cli/setup/GlobalInstaller.js +26 -0
  68. package/dist/cli/setup/GlobalInstaller.js.map +1 -1
  69. package/dist/lib/DeepInit.js +24 -24
  70. package/dist/lib/IterationTracker.js +11 -11
  71. package/dist/lib/MemoryManager.d.ts +30 -0
  72. package/dist/lib/MemoryManager.d.ts.map +1 -1
  73. package/dist/lib/MemoryManager.js +74 -0
  74. package/dist/lib/MemoryManager.js.map +1 -1
  75. package/dist/lib/PythonParser.js +108 -108
  76. package/dist/lib/ReviewRace.js +96 -96
  77. package/dist/lib/SkillFrontmatter.js +28 -28
  78. package/dist/lib/SkillQualityGate.js +9 -9
  79. package/dist/lib/SkillRepository.js +159 -159
  80. package/dist/lib/UltraQA.js +77 -77
  81. package/dist/lib/gemini-api.js +5 -5
  82. package/dist/lib/gemini-mcp.d.ts +10 -0
  83. package/dist/lib/gemini-mcp.d.ts.map +1 -0
  84. package/dist/lib/gemini-mcp.js +353 -0
  85. package/dist/lib/gemini-mcp.js.map +1 -0
  86. package/dist/lib/gpt-api.js +4 -4
  87. package/dist/lib/gpt-mcp.d.ts +10 -0
  88. package/dist/lib/gpt-mcp.d.ts.map +1 -0
  89. package/dist/lib/gpt-mcp.js +352 -0
  90. package/dist/lib/gpt-mcp.js.map +1 -0
  91. package/dist/lib/memory/KnowledgeGraph.js +4 -4
  92. package/dist/lib/memory/MemorySearch.js +43 -43
  93. package/dist/lib/memory/MemoryStorage.js +130 -130
  94. package/dist/lib/memory/ObservationStore.js +28 -28
  95. package/dist/lib/memory/SessionRAGRetriever.d.ts +66 -0
  96. package/dist/lib/memory/SessionRAGRetriever.d.ts.map +1 -0
  97. package/dist/lib/memory/SessionRAGRetriever.js +196 -0
  98. package/dist/lib/memory/SessionRAGRetriever.js.map +1 -0
  99. package/dist/lib/memory/SessionRAGRetriever.test.d.ts +2 -0
  100. package/dist/lib/memory/SessionRAGRetriever.test.d.ts.map +1 -0
  101. package/dist/lib/memory/SessionRAGRetriever.test.js +180 -0
  102. package/dist/lib/memory/SessionRAGRetriever.test.js.map +1 -0
  103. package/dist/lib/memory/SessionRAGStore.d.ts +153 -0
  104. package/dist/lib/memory/SessionRAGStore.d.ts.map +1 -0
  105. package/dist/lib/memory/SessionRAGStore.js +673 -0
  106. package/dist/lib/memory/SessionRAGStore.js.map +1 -0
  107. package/dist/lib/memory/SessionRAGStore.test.d.ts +2 -0
  108. package/dist/lib/memory/SessionRAGStore.test.d.ts.map +1 -0
  109. package/dist/lib/memory/SessionRAGStore.test.js +326 -0
  110. package/dist/lib/memory/SessionRAGStore.test.js.map +1 -0
  111. package/dist/lib/memory/SessionSummarizer.js +9 -9
  112. package/dist/orchestrator/AgentManager.js +12 -12
  113. package/dist/orchestrator/MultiLlmResearch.js +8 -8
  114. package/dist/orchestrator/SmartRouter.js +11 -11
  115. package/dist/orchestrator/SwarmOrchestrator.test.js +16 -16
  116. package/dist/orchestrator/parallelResearch.js +24 -24
  117. package/dist/tools/analytics/getUsageAnalytics.d.ts +10 -0
  118. package/dist/tools/analytics/getUsageAnalytics.d.ts.map +1 -0
  119. package/dist/tools/analytics/getUsageAnalytics.js +246 -0
  120. package/dist/tools/analytics/getUsageAnalytics.js.map +1 -0
  121. package/dist/tools/analytics/index.d.ts +5 -0
  122. package/dist/tools/analytics/index.d.ts.map +1 -0
  123. package/dist/tools/analytics/index.js +5 -0
  124. package/dist/tools/analytics/index.js.map +1 -0
  125. package/dist/tools/convention/analyzeComplexity.test.js +115 -115
  126. package/dist/tools/convention/getCodingGuide.d.ts +7 -0
  127. package/dist/tools/convention/getCodingGuide.d.ts.map +1 -0
  128. package/dist/tools/convention/getCodingGuide.js +69 -0
  129. package/dist/tools/convention/getCodingGuide.js.map +1 -0
  130. package/dist/tools/convention/validateCodeQuality.test.js +104 -104
  131. package/dist/tools/index.d.ts +5 -0
  132. package/dist/tools/index.d.ts.map +1 -1
  133. package/dist/tools/index.js +4 -0
  134. package/dist/tools/index.js.map +1 -1
  135. package/dist/tools/memory/index.d.ts +3 -0
  136. package/dist/tools/memory/index.d.ts.map +1 -1
  137. package/dist/tools/memory/index.js +4 -0
  138. package/dist/tools/memory/index.js.map +1 -1
  139. package/dist/tools/memory/manageGoals.d.ts +11 -0
  140. package/dist/tools/memory/manageGoals.d.ts.map +1 -0
  141. package/dist/tools/memory/manageGoals.js +152 -0
  142. package/dist/tools/memory/manageGoals.js.map +1 -0
  143. package/dist/tools/memory/retrieveSessionContext.d.ts +9 -0
  144. package/dist/tools/memory/retrieveSessionContext.d.ts.map +1 -0
  145. package/dist/tools/memory/retrieveSessionContext.js +140 -0
  146. package/dist/tools/memory/retrieveSessionContext.js.map +1 -0
  147. package/dist/tools/memory/saveSessionItem.d.ts +26 -0
  148. package/dist/tools/memory/saveSessionItem.d.ts.map +1 -0
  149. package/dist/tools/memory/saveSessionItem.js +218 -0
  150. package/dist/tools/memory/saveSessionItem.js.map +1 -0
  151. package/dist/tools/memory/startSession.d.ts.map +1 -1
  152. package/dist/tools/memory/startSession.js +29 -0
  153. package/dist/tools/memory/startSession.js.map +1 -1
  154. package/dist/tools/planning/analyzeRequirements.d.ts +9 -0
  155. package/dist/tools/planning/analyzeRequirements.d.ts.map +1 -0
  156. package/dist/tools/planning/analyzeRequirements.js +171 -0
  157. package/dist/tools/planning/analyzeRequirements.js.map +1 -0
  158. package/dist/tools/planning/createUserStories.d.ts +9 -0
  159. package/dist/tools/planning/createUserStories.d.ts.map +1 -0
  160. package/dist/tools/planning/createUserStories.js +124 -0
  161. package/dist/tools/planning/createUserStories.js.map +1 -0
  162. package/dist/tools/planning/featureRoadmap.d.ts +10 -0
  163. package/dist/tools/planning/featureRoadmap.d.ts.map +1 -0
  164. package/dist/tools/planning/featureRoadmap.js +207 -0
  165. package/dist/tools/planning/featureRoadmap.js.map +1 -0
  166. package/dist/tools/planning/generatePrd.d.ts +11 -0
  167. package/dist/tools/planning/generatePrd.d.ts.map +1 -0
  168. package/dist/tools/planning/generatePrd.js +161 -0
  169. package/dist/tools/planning/generatePrd.js.map +1 -0
  170. package/dist/tools/planning/index.d.ts +8 -0
  171. package/dist/tools/planning/index.d.ts.map +1 -0
  172. package/dist/tools/planning/index.js +8 -0
  173. package/dist/tools/planning/index.js.map +1 -0
  174. package/dist/tools/prompt/analyzePrompt.d.ts +7 -0
  175. package/dist/tools/prompt/analyzePrompt.d.ts.map +1 -0
  176. package/dist/tools/prompt/analyzePrompt.js +150 -0
  177. package/dist/tools/prompt/analyzePrompt.js.map +1 -0
  178. package/dist/tools/prompt/enhancePrompt.d.ts +8 -0
  179. package/dist/tools/prompt/enhancePrompt.d.ts.map +1 -0
  180. package/dist/tools/prompt/enhancePrompt.js +110 -0
  181. package/dist/tools/prompt/enhancePrompt.js.map +1 -0
  182. package/dist/tools/prompt/enhancePromptGemini.d.ts +8 -0
  183. package/dist/tools/prompt/enhancePromptGemini.d.ts.map +1 -0
  184. package/dist/tools/prompt/enhancePromptGemini.js +332 -0
  185. package/dist/tools/prompt/enhancePromptGemini.js.map +1 -0
  186. package/dist/tools/prompt/index.d.ts +7 -0
  187. package/dist/tools/prompt/index.d.ts.map +1 -0
  188. package/dist/tools/prompt/index.js +7 -0
  189. package/dist/tools/prompt/index.js.map +1 -0
  190. package/dist/tools/reasoning/applyReasoningFramework.d.ts +8 -0
  191. package/dist/tools/reasoning/applyReasoningFramework.d.ts.map +1 -0
  192. package/dist/tools/reasoning/applyReasoningFramework.js +266 -0
  193. package/dist/tools/reasoning/applyReasoningFramework.js.map +1 -0
  194. package/dist/tools/reasoning/index.d.ts +5 -0
  195. package/dist/tools/reasoning/index.d.ts.map +1 -0
  196. package/dist/tools/reasoning/index.js +5 -0
  197. package/dist/tools/reasoning/index.js.map +1 -0
  198. package/dist/tools/spec/prdParser.test.js +171 -171
  199. package/dist/tools/spec/specGenerator.js +169 -169
  200. package/dist/tools/spec/traceabilityMatrix.js +64 -64
  201. package/dist/tools/spec/traceabilityMatrix.test.js +28 -28
  202. package/dist/tools/thinking/analyzeProblem.d.ts +7 -0
  203. package/dist/tools/thinking/analyzeProblem.d.ts.map +1 -0
  204. package/dist/tools/thinking/analyzeProblem.js +55 -0
  205. package/dist/tools/thinking/analyzeProblem.js.map +1 -0
  206. package/dist/tools/thinking/breakDownProblem.d.ts +8 -0
  207. package/dist/tools/thinking/breakDownProblem.d.ts.map +1 -0
  208. package/dist/tools/thinking/breakDownProblem.js +145 -0
  209. package/dist/tools/thinking/breakDownProblem.js.map +1 -0
  210. package/dist/tools/thinking/createThinkingChain.d.ts +7 -0
  211. package/dist/tools/thinking/createThinkingChain.d.ts.map +1 -0
  212. package/dist/tools/thinking/createThinkingChain.js +44 -0
  213. package/dist/tools/thinking/createThinkingChain.js.map +1 -0
  214. package/dist/tools/thinking/formatAsPlan.d.ts +9 -0
  215. package/dist/tools/thinking/formatAsPlan.d.ts.map +1 -0
  216. package/dist/tools/thinking/formatAsPlan.js +78 -0
  217. package/dist/tools/thinking/formatAsPlan.js.map +1 -0
  218. package/dist/tools/thinking/index.d.ts +10 -0
  219. package/dist/tools/thinking/index.d.ts.map +1 -0
  220. package/dist/tools/thinking/index.js +10 -0
  221. package/dist/tools/thinking/index.js.map +1 -0
  222. package/dist/tools/thinking/stepByStepAnalysis.d.ts +8 -0
  223. package/dist/tools/thinking/stepByStepAnalysis.d.ts.map +1 -0
  224. package/dist/tools/thinking/stepByStepAnalysis.js +63 -0
  225. package/dist/tools/thinking/stepByStepAnalysis.js.map +1 -0
  226. package/dist/tools/thinking/thinkAloudProcess.d.ts +8 -0
  227. package/dist/tools/thinking/thinkAloudProcess.d.ts.map +1 -0
  228. package/dist/tools/thinking/thinkAloudProcess.js +80 -0
  229. package/dist/tools/thinking/thinkAloudProcess.js.map +1 -0
  230. package/hooks/hooks.json +115 -115
  231. package/hooks/scripts/code-check.js +70 -70
  232. package/hooks/scripts/code-review.js +22 -22
  233. package/hooks/scripts/complexity.js +22 -22
  234. package/hooks/scripts/compound.js +23 -23
  235. package/hooks/scripts/context-save.js +53 -53
  236. package/hooks/scripts/gemini-ui-gen.js +281 -281
  237. package/hooks/scripts/generate-brand-assets.js +474 -474
  238. package/hooks/scripts/hud-multiline.js +262 -262
  239. package/hooks/scripts/hud-status.js +291 -291
  240. package/hooks/scripts/keyword-detector.js +214 -214
  241. package/hooks/scripts/llm-orchestrate.js +171 -171
  242. package/hooks/scripts/post-edit.js +97 -97
  243. package/hooks/scripts/post-tool-verify.js +210 -210
  244. package/hooks/scripts/pre-tool-guard.js +125 -125
  245. package/hooks/scripts/prompt-dispatcher.js +161 -161
  246. package/hooks/scripts/recall.js +22 -22
  247. package/hooks/scripts/session-start.js +30 -30
  248. package/hooks/scripts/skill-injector.js +191 -191
  249. package/hooks/scripts/utils.js +97 -97
  250. package/languages/csharp-unity.md +515 -515
  251. package/languages/gdscript-godot.md +470 -470
  252. package/languages/ruby-rails.md +489 -489
  253. package/languages/typescript-angular.md +433 -433
  254. package/languages/typescript-astro.md +416 -416
  255. package/languages/typescript-electron.md +406 -406
  256. package/languages/typescript-nestjs.md +524 -524
  257. package/languages/typescript-svelte.md +407 -407
  258. package/languages/typescript-tauri.md +365 -365
  259. package/package.json +84 -84
  260. package/skills/brand-assets.md +141 -141
  261. package/skills/commerce-patterns.md +361 -361
  262. package/skills/context7-usage.md +102 -102
  263. package/skills/e2e-commerce.md +304 -304
  264. package/skills/frontend-design.md +92 -92
  265. package/skills/git-worktree.md +181 -181
  266. package/skills/parallel-research.md +77 -77
  267. package/skills/priority-todos.md +239 -239
  268. package/skills/seo-checklist.md +244 -244
  269. package/skills/tool-fallback.md +190 -190
  270. package/skills/vibe-capabilities.md +161 -161
  271. package/vibe/constitution.md +227 -227
  272. package/vibe/rules/core/communication-guide.md +98 -98
  273. package/vibe/rules/core/development-philosophy.md +52 -52
  274. package/vibe/rules/core/quick-start.md +102 -102
  275. package/vibe/rules/quality/bdd-contract-testing.md +393 -393
  276. package/vibe/rules/quality/checklist.md +276 -276
  277. package/vibe/rules/quality/testing-strategy.md +440 -440
  278. package/vibe/rules/standards/anti-patterns.md +541 -541
  279. package/vibe/rules/standards/code-structure.md +291 -291
  280. package/vibe/rules/standards/complexity-metrics.md +313 -313
  281. package/vibe/rules/standards/naming-conventions.md +198 -198
  282. package/vibe/setup.sh +31 -31
  283. package/vibe/templates/constitution-template.md +252 -252
  284. package/vibe/templates/contract-backend-template.md +526 -526
  285. package/vibe/templates/contract-frontend-template.md +599 -599
  286. package/vibe/templates/feature-template.md +96 -96
  287. package/vibe/templates/spec-template.md +221 -221
@@ -32,74 +32,74 @@ export class MemoryStorage {
32
32
  }
33
33
  initializeDatabase() {
34
34
  // Create memories table
35
- this.db.exec(`
36
- CREATE TABLE IF NOT EXISTS memories (
37
- key TEXT PRIMARY KEY,
38
- value TEXT NOT NULL,
39
- category TEXT NOT NULL DEFAULT 'general',
40
- timestamp TEXT NOT NULL,
41
- lastAccessed TEXT NOT NULL,
42
- priority INTEGER DEFAULT 0
43
- );
44
-
45
- CREATE INDEX IF NOT EXISTS idx_category ON memories(category);
46
- CREATE INDEX IF NOT EXISTS idx_timestamp ON memories(timestamp);
47
- CREATE INDEX IF NOT EXISTS idx_priority ON memories(priority);
48
- CREATE INDEX IF NOT EXISTS idx_lastAccessed ON memories(lastAccessed);
35
+ this.db.exec(`
36
+ CREATE TABLE IF NOT EXISTS memories (
37
+ key TEXT PRIMARY KEY,
38
+ value TEXT NOT NULL,
39
+ category TEXT NOT NULL DEFAULT 'general',
40
+ timestamp TEXT NOT NULL,
41
+ lastAccessed TEXT NOT NULL,
42
+ priority INTEGER DEFAULT 0
43
+ );
44
+
45
+ CREATE INDEX IF NOT EXISTS idx_category ON memories(category);
46
+ CREATE INDEX IF NOT EXISTS idx_timestamp ON memories(timestamp);
47
+ CREATE INDEX IF NOT EXISTS idx_priority ON memories(priority);
48
+ CREATE INDEX IF NOT EXISTS idx_lastAccessed ON memories(lastAccessed);
49
49
  `);
50
50
  // Create memory_relations table for Knowledge Graph
51
- this.db.exec(`
52
- CREATE TABLE IF NOT EXISTS memory_relations (
53
- id INTEGER PRIMARY KEY AUTOINCREMENT,
54
- sourceKey TEXT NOT NULL,
55
- targetKey TEXT NOT NULL,
56
- relationType TEXT NOT NULL,
57
- strength REAL DEFAULT 1.0,
58
- metadata TEXT,
59
- timestamp TEXT NOT NULL,
60
- UNIQUE(sourceKey, targetKey, relationType)
61
- );
62
-
63
- CREATE INDEX IF NOT EXISTS idx_rel_source ON memory_relations(sourceKey);
64
- CREATE INDEX IF NOT EXISTS idx_rel_target ON memory_relations(targetKey);
65
- CREATE INDEX IF NOT EXISTS idx_rel_type ON memory_relations(relationType);
51
+ this.db.exec(`
52
+ CREATE TABLE IF NOT EXISTS memory_relations (
53
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
54
+ sourceKey TEXT NOT NULL,
55
+ targetKey TEXT NOT NULL,
56
+ relationType TEXT NOT NULL,
57
+ strength REAL DEFAULT 1.0,
58
+ metadata TEXT,
59
+ timestamp TEXT NOT NULL,
60
+ UNIQUE(sourceKey, targetKey, relationType)
61
+ );
62
+
63
+ CREATE INDEX IF NOT EXISTS idx_rel_source ON memory_relations(sourceKey);
64
+ CREATE INDEX IF NOT EXISTS idx_rel_target ON memory_relations(targetKey);
65
+ CREATE INDEX IF NOT EXISTS idx_rel_type ON memory_relations(relationType);
66
66
  `);
67
67
  // Create observations table for structured observation capture
68
- this.db.exec(`
69
- CREATE TABLE IF NOT EXISTS observations (
70
- id INTEGER PRIMARY KEY AUTOINCREMENT,
71
- sessionId TEXT,
72
- type TEXT NOT NULL CHECK(type IN ('decision','bugfix','feature','refactor','discovery')),
73
- title TEXT NOT NULL,
74
- narrative TEXT,
75
- facts TEXT,
76
- concepts TEXT,
77
- filesModified TEXT,
78
- timestamp TEXT NOT NULL,
79
- projectPath TEXT
80
- );
81
-
82
- CREATE INDEX IF NOT EXISTS idx_obs_session ON observations(sessionId);
83
- CREATE INDEX IF NOT EXISTS idx_obs_type ON observations(type);
84
- CREATE INDEX IF NOT EXISTS idx_obs_timestamp ON observations(timestamp);
68
+ this.db.exec(`
69
+ CREATE TABLE IF NOT EXISTS observations (
70
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
71
+ sessionId TEXT,
72
+ type TEXT NOT NULL CHECK(type IN ('decision','bugfix','feature','refactor','discovery')),
73
+ title TEXT NOT NULL,
74
+ narrative TEXT,
75
+ facts TEXT,
76
+ concepts TEXT,
77
+ filesModified TEXT,
78
+ timestamp TEXT NOT NULL,
79
+ projectPath TEXT
80
+ );
81
+
82
+ CREATE INDEX IF NOT EXISTS idx_obs_session ON observations(sessionId);
83
+ CREATE INDEX IF NOT EXISTS idx_obs_type ON observations(type);
84
+ CREATE INDEX IF NOT EXISTS idx_obs_timestamp ON observations(timestamp);
85
85
  `);
86
86
  // Create session_summaries table
87
- this.db.exec(`
88
- CREATE TABLE IF NOT EXISTS session_summaries (
89
- id INTEGER PRIMARY KEY AUTOINCREMENT,
90
- sessionId TEXT UNIQUE NOT NULL,
91
- request TEXT,
92
- investigated TEXT,
93
- learned TEXT,
94
- completed TEXT,
95
- nextSteps TEXT,
96
- filesRead TEXT,
97
- filesEdited TEXT,
98
- timestamp TEXT NOT NULL
99
- );
100
-
101
- CREATE INDEX IF NOT EXISTS idx_ss_session ON session_summaries(sessionId);
102
- CREATE INDEX IF NOT EXISTS idx_ss_timestamp ON session_summaries(timestamp);
87
+ this.db.exec(`
88
+ CREATE TABLE IF NOT EXISTS session_summaries (
89
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
90
+ sessionId TEXT UNIQUE NOT NULL,
91
+ request TEXT,
92
+ investigated TEXT,
93
+ learned TEXT,
94
+ completed TEXT,
95
+ nextSteps TEXT,
96
+ filesRead TEXT,
97
+ filesEdited TEXT,
98
+ timestamp TEXT NOT NULL
99
+ );
100
+
101
+ CREATE INDEX IF NOT EXISTS idx_ss_session ON session_summaries(sessionId);
102
+ CREATE INDEX IF NOT EXISTS idx_ss_timestamp ON session_summaries(timestamp);
103
103
  `);
104
104
  // Enable WAL mode for better concurrency
105
105
  this.db.pragma('journal_mode = WAL');
@@ -111,36 +111,36 @@ export class MemoryStorage {
111
111
  initializeFTS5() {
112
112
  try {
113
113
  // Create FTS5 virtual table for memories
114
- this.db.exec(`
115
- CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts
116
- USING fts5(key, value, content=memories, content_rowid=rowid);
114
+ this.db.exec(`
115
+ CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts
116
+ USING fts5(key, value, content=memories, content_rowid=rowid);
117
117
  `);
118
118
  // Triggers to keep FTS5 in sync with memories table
119
- this.db.exec(`
120
- CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
121
- INSERT INTO memories_fts(rowid, key, value) VALUES (new.rowid, new.key, new.value);
122
- END;
123
- CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
124
- INSERT INTO memories_fts(memories_fts, rowid, key, value) VALUES('delete', old.rowid, old.key, old.value);
125
- END;
126
- CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
127
- INSERT INTO memories_fts(memories_fts, rowid, key, value) VALUES('delete', old.rowid, old.key, old.value);
128
- INSERT INTO memories_fts(rowid, key, value) VALUES (new.rowid, new.key, new.value);
129
- END;
119
+ this.db.exec(`
120
+ CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
121
+ INSERT INTO memories_fts(rowid, key, value) VALUES (new.rowid, new.key, new.value);
122
+ END;
123
+ CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
124
+ INSERT INTO memories_fts(memories_fts, rowid, key, value) VALUES('delete', old.rowid, old.key, old.value);
125
+ END;
126
+ CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
127
+ INSERT INTO memories_fts(memories_fts, rowid, key, value) VALUES('delete', old.rowid, old.key, old.value);
128
+ INSERT INTO memories_fts(rowid, key, value) VALUES (new.rowid, new.key, new.value);
129
+ END;
130
130
  `);
131
131
  // Create FTS5 for observations
132
- this.db.exec(`
133
- CREATE VIRTUAL TABLE IF NOT EXISTS observations_fts
134
- USING fts5(title, narrative, facts, concepts, content=observations, content_rowid=id);
135
-
136
- CREATE TRIGGER IF NOT EXISTS observations_ai AFTER INSERT ON observations BEGIN
137
- INSERT INTO observations_fts(rowid, title, narrative, facts, concepts)
138
- VALUES (new.id, new.title, new.narrative, new.facts, new.concepts);
139
- END;
140
- CREATE TRIGGER IF NOT EXISTS observations_ad AFTER DELETE ON observations BEGIN
141
- INSERT INTO observations_fts(observations_fts, rowid, title, narrative, facts, concepts)
142
- VALUES('delete', old.id, old.title, old.narrative, old.facts, old.concepts);
143
- END;
132
+ this.db.exec(`
133
+ CREATE VIRTUAL TABLE IF NOT EXISTS observations_fts
134
+ USING fts5(title, narrative, facts, concepts, content=observations, content_rowid=id);
135
+
136
+ CREATE TRIGGER IF NOT EXISTS observations_ai AFTER INSERT ON observations BEGIN
137
+ INSERT INTO observations_fts(rowid, title, narrative, facts, concepts)
138
+ VALUES (new.id, new.title, new.narrative, new.facts, new.concepts);
139
+ END;
140
+ CREATE TRIGGER IF NOT EXISTS observations_ad AFTER DELETE ON observations BEGIN
141
+ INSERT INTO observations_fts(observations_fts, rowid, title, narrative, facts, concepts)
142
+ VALUES('delete', old.id, old.title, old.narrative, old.facts, old.concepts);
143
+ END;
144
144
  `);
145
145
  // Migrate existing data into FTS5 index
146
146
  const ftsCount = this.db.prepare(`SELECT COUNT(*) as cnt FROM memories_fts`).get().cnt;
@@ -162,10 +162,10 @@ export class MemoryStorage {
162
162
  }
163
163
  initializePreparedStatements() {
164
164
  try {
165
- this.recallStmt = this.db.prepare(`
166
- UPDATE memories SET lastAccessed = ?
167
- WHERE key = ?
168
- RETURNING *
165
+ this.recallStmt = this.db.prepare(`
166
+ UPDATE memories SET lastAccessed = ?
167
+ WHERE key = ?
168
+ RETURNING *
169
169
  `);
170
170
  }
171
171
  catch {
@@ -174,9 +174,9 @@ export class MemoryStorage {
174
174
  this.recallSelectStmt = this.db.prepare(`SELECT * FROM memories WHERE key = ?`);
175
175
  this.recallUpdateStmt = this.db.prepare(`UPDATE memories SET lastAccessed = ? WHERE key = ?`);
176
176
  }
177
- this.saveStmt = this.db.prepare(`
178
- INSERT OR REPLACE INTO memories (key, value, category, timestamp, lastAccessed, priority)
179
- VALUES (?, ?, ?, ?, ?, ?)
177
+ this.saveStmt = this.db.prepare(`
178
+ INSERT OR REPLACE INTO memories (key, value, category, timestamp, lastAccessed, priority)
179
+ VALUES (?, ?, ?, ?, ?, ?)
180
180
  `);
181
181
  }
182
182
  migrateFromJSON() {
@@ -188,9 +188,9 @@ export class MemoryStorage {
188
188
  const memories = JSON.parse(jsonData);
189
189
  if (memories.length === 0)
190
190
  return;
191
- const insert = this.db.prepare(`
192
- INSERT OR REPLACE INTO memories (key, value, category, timestamp, lastAccessed, priority)
193
- VALUES (?, ?, ?, ?, ?, ?)
191
+ const insert = this.db.prepare(`
192
+ INSERT OR REPLACE INTO memories (key, value, category, timestamp, lastAccessed, priority)
193
+ VALUES (?, ?, ?, ?, ?, ?)
194
194
  `);
195
195
  const insertMany = this.db.transaction((items) => {
196
196
  for (const item of items) {
@@ -213,9 +213,9 @@ export class MemoryStorage {
213
213
  this.saveStmt.run(key, value, category, timestamp, timestamp, priority);
214
214
  }
215
215
  else {
216
- const stmt = this.db.prepare(`
217
- INSERT OR REPLACE INTO memories (key, value, category, timestamp, lastAccessed, priority)
218
- VALUES (?, ?, ?, ?, ?, ?)
216
+ const stmt = this.db.prepare(`
217
+ INSERT OR REPLACE INTO memories (key, value, category, timestamp, lastAccessed, priority)
218
+ VALUES (?, ?, ?, ?, ?, ?)
219
219
  `);
220
220
  stmt.run(key, value, category, timestamp, timestamp, priority);
221
221
  }
@@ -253,10 +253,10 @@ export class MemoryStorage {
253
253
  */
254
254
  update(key, value) {
255
255
  const timestamp = new Date().toISOString();
256
- const stmt = this.db.prepare(`
257
- UPDATE memories
258
- SET value = ?, timestamp = ?, lastAccessed = ?
259
- WHERE key = ?
256
+ const stmt = this.db.prepare(`
257
+ UPDATE memories
258
+ SET value = ?, timestamp = ?, lastAccessed = ?
259
+ WHERE key = ?
260
260
  `);
261
261
  const result = stmt.run(value, timestamp, timestamp, key);
262
262
  return result.changes > 0;
@@ -266,16 +266,16 @@ export class MemoryStorage {
266
266
  */
267
267
  list(category) {
268
268
  if (category) {
269
- const stmt = this.db.prepare(`
270
- SELECT * FROM memories WHERE category = ?
271
- ORDER BY priority DESC, timestamp DESC
269
+ const stmt = this.db.prepare(`
270
+ SELECT * FROM memories WHERE category = ?
271
+ ORDER BY priority DESC, timestamp DESC
272
272
  `);
273
273
  return stmt.all(category);
274
274
  }
275
275
  else {
276
- const stmt = this.db.prepare(`
277
- SELECT * FROM memories
278
- ORDER BY priority DESC, timestamp DESC
276
+ const stmt = this.db.prepare(`
277
+ SELECT * FROM memories
278
+ ORDER BY priority DESC, timestamp DESC
279
279
  `);
280
280
  return stmt.all();
281
281
  }
@@ -301,13 +301,13 @@ export class MemoryStorage {
301
301
  if (!this.fts5Available) {
302
302
  return this.searchLike(query);
303
303
  }
304
- const stmt = this.db.prepare(`
305
- SELECT m.*, bm25(memories_fts) as rank
306
- FROM memories_fts fts
307
- JOIN memories m ON m.rowid = fts.rowid
308
- WHERE memories_fts MATCH ?
309
- ORDER BY rank
310
- LIMIT ?
304
+ const stmt = this.db.prepare(`
305
+ SELECT m.*, bm25(memories_fts) as rank
306
+ FROM memories_fts fts
307
+ JOIN memories m ON m.rowid = fts.rowid
308
+ WHERE memories_fts MATCH ?
309
+ ORDER BY rank
310
+ LIMIT ?
311
311
  `);
312
312
  return stmt.all(query, limit);
313
313
  }
@@ -318,10 +318,10 @@ export class MemoryStorage {
318
318
  return this.fts5Available;
319
319
  }
320
320
  searchLike(query) {
321
- const stmt = this.db.prepare(`
322
- SELECT * FROM memories
323
- WHERE key LIKE ? OR value LIKE ?
324
- ORDER BY priority DESC, timestamp DESC
321
+ const stmt = this.db.prepare(`
322
+ SELECT * FROM memories
323
+ WHERE key LIKE ? OR value LIKE ?
324
+ ORDER BY priority DESC, timestamp DESC
325
325
  `);
326
326
  const pattern = `%${query}%`;
327
327
  return stmt.all(pattern, pattern);
@@ -330,10 +330,10 @@ export class MemoryStorage {
330
330
  * Get memories by priority level
331
331
  */
332
332
  getByPriority(priority) {
333
- const stmt = this.db.prepare(`
334
- SELECT * FROM memories
335
- WHERE priority = ?
336
- ORDER BY timestamp DESC
333
+ const stmt = this.db.prepare(`
334
+ SELECT * FROM memories
335
+ WHERE priority = ?
336
+ ORDER BY timestamp DESC
337
337
  `);
338
338
  return stmt.all(priority);
339
339
  }
@@ -349,10 +349,10 @@ export class MemoryStorage {
349
349
  * Get memory statistics
350
350
  */
351
351
  getStats() {
352
- const categories = this.db.prepare(`
353
- SELECT category, COUNT(*) as count
354
- FROM memories
355
- GROUP BY category
352
+ const categories = this.db.prepare(`
353
+ SELECT category, COUNT(*) as count
354
+ FROM memories
355
+ GROUP BY category
356
356
  `).all();
357
357
  const byCategory = {};
358
358
  let total = 0;
@@ -9,9 +9,9 @@ export class ObservationStore {
9
9
  */
10
10
  add(input) {
11
11
  const timestamp = new Date().toISOString();
12
- const stmt = this.db.prepare(`
13
- INSERT INTO observations (sessionId, type, title, narrative, facts, concepts, filesModified, timestamp, projectPath)
14
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
12
+ const stmt = this.db.prepare(`
13
+ INSERT INTO observations (sessionId, type, title, narrative, facts, concepts, filesModified, timestamp, projectPath)
14
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
15
15
  `);
16
16
  const result = stmt.run(input.sessionId || null, input.type, input.title, input.narrative || null, input.facts ? JSON.stringify(input.facts) : null, input.concepts ? JSON.stringify(input.concepts) : null, input.filesModified ? JSON.stringify(input.filesModified) : null, timestamp, input.projectPath || null);
17
17
  return result.lastInsertRowid;
@@ -20,9 +20,9 @@ export class ObservationStore {
20
20
  * Get observations by session ID
21
21
  */
22
22
  getBySession(sessionId, limit = 50) {
23
- const rows = this.db.prepare(`
24
- SELECT * FROM observations WHERE sessionId = ?
25
- ORDER BY timestamp DESC LIMIT ?
23
+ const rows = this.db.prepare(`
24
+ SELECT * FROM observations WHERE sessionId = ?
25
+ ORDER BY timestamp DESC LIMIT ?
26
26
  `).all(sessionId, limit);
27
27
  return rows.map(this.rowToObservation);
28
28
  }
@@ -31,15 +31,15 @@ export class ObservationStore {
31
31
  */
32
32
  getRecent(limit = 10, type) {
33
33
  if (type) {
34
- const rows = this.db.prepare(`
35
- SELECT * FROM observations WHERE type = ?
36
- ORDER BY timestamp DESC LIMIT ?
34
+ const rows = this.db.prepare(`
35
+ SELECT * FROM observations WHERE type = ?
36
+ ORDER BY timestamp DESC LIMIT ?
37
37
  `).all(type, limit);
38
38
  return rows.map(this.rowToObservation);
39
39
  }
40
- const rows = this.db.prepare(`
41
- SELECT * FROM observations
42
- ORDER BY timestamp DESC LIMIT ?
40
+ const rows = this.db.prepare(`
41
+ SELECT * FROM observations
42
+ ORDER BY timestamp DESC LIMIT ?
43
43
  `).all(limit);
44
44
  return rows.map(this.rowToObservation);
45
45
  }
@@ -47,9 +47,9 @@ export class ObservationStore {
47
47
  * Get observations by type
48
48
  */
49
49
  getByType(type, limit = 20) {
50
- const rows = this.db.prepare(`
51
- SELECT * FROM observations WHERE type = ?
52
- ORDER BY timestamp DESC LIMIT ?
50
+ const rows = this.db.prepare(`
51
+ SELECT * FROM observations WHERE type = ?
52
+ ORDER BY timestamp DESC LIMIT ?
53
53
  `).all(type, limit);
54
54
  return rows.map(this.rowToObservation);
55
55
  }
@@ -58,23 +58,23 @@ export class ObservationStore {
58
58
  */
59
59
  search(query, limit = 20) {
60
60
  try {
61
- const rows = this.db.prepare(`
62
- SELECT o.*, bm25(observations_fts) as rank
63
- FROM observations_fts fts
64
- JOIN observations o ON o.id = fts.rowid
65
- WHERE observations_fts MATCH ?
66
- ORDER BY rank
67
- LIMIT ?
61
+ const rows = this.db.prepare(`
62
+ SELECT o.*, bm25(observations_fts) as rank
63
+ FROM observations_fts fts
64
+ JOIN observations o ON o.id = fts.rowid
65
+ WHERE observations_fts MATCH ?
66
+ ORDER BY rank
67
+ LIMIT ?
68
68
  `).all(query, limit);
69
69
  return rows.map(this.rowToObservation);
70
70
  }
71
71
  catch {
72
72
  // FTS5 not available, fallback to LIKE
73
73
  const pattern = `%${query}%`;
74
- const rows = this.db.prepare(`
75
- SELECT * FROM observations
76
- WHERE title LIKE ? OR narrative LIKE ? OR facts LIKE ? OR concepts LIKE ?
77
- ORDER BY timestamp DESC LIMIT ?
74
+ const rows = this.db.prepare(`
75
+ SELECT * FROM observations
76
+ WHERE title LIKE ? OR narrative LIKE ? OR facts LIKE ? OR concepts LIKE ?
77
+ ORDER BY timestamp DESC LIMIT ?
78
78
  `).all(pattern, pattern, pattern, pattern, limit);
79
79
  return rows.map(this.rowToObservation);
80
80
  }
@@ -83,8 +83,8 @@ export class ObservationStore {
83
83
  * Get observation statistics
84
84
  */
85
85
  getStats() {
86
- const types = this.db.prepare(`
87
- SELECT type, COUNT(*) as count FROM observations GROUP BY type
86
+ const types = this.db.prepare(`
87
+ SELECT type, COUNT(*) as count FROM observations GROUP BY type
88
88
  `).all();
89
89
  const byType = {};
90
90
  let total = 0;
@@ -0,0 +1,66 @@
1
+ import { MemoryStorage } from './MemoryStorage.js';
2
+ import { SessionRAGStore, Decision, Constraint, Goal, Evidence } from './SessionRAGStore.js';
3
+ export interface RetrievalOptions {
4
+ query: string;
5
+ sessionId?: string;
6
+ limit?: number;
7
+ recencyWeight?: number;
8
+ priorityWeight?: number;
9
+ bm25Weight?: number;
10
+ }
11
+ export interface ScoreBreakdown {
12
+ bm25: number;
13
+ recency: number;
14
+ priority: number;
15
+ }
16
+ export interface ScoredItem<T> {
17
+ item: T;
18
+ score: number;
19
+ breakdown: ScoreBreakdown;
20
+ }
21
+ export interface SessionRAGResult {
22
+ decisions: ScoredItem<Decision>[];
23
+ constraints: ScoredItem<Constraint>[];
24
+ goals: ScoredItem<Goal>[];
25
+ evidence: ScoredItem<Evidence>[];
26
+ queryTime: number;
27
+ }
28
+ export declare class SessionRAGRetriever {
29
+ private db;
30
+ private store;
31
+ private fts5Available;
32
+ constructor(storage: MemoryStorage, store: SessionRAGStore);
33
+ /**
34
+ * Retrieve relevant session context with hybrid scoring
35
+ */
36
+ retrieve(options: RetrievalOptions): SessionRAGResult;
37
+ /**
38
+ * Retrieve only active goals and high-severity constraints (for session start injection)
39
+ */
40
+ retrieveActiveContext(): {
41
+ goals: Goal[];
42
+ constraints: Constraint[];
43
+ decisions: Decision[];
44
+ };
45
+ private scoreDecisions;
46
+ private scoreConstraints;
47
+ private scoreGoals;
48
+ private scoreEvidence;
49
+ private getCandidateDecisions;
50
+ private getCandidateConstraints;
51
+ private getCandidateGoals;
52
+ private getCandidateEvidence;
53
+ private getBM25Scores;
54
+ /**
55
+ * Normalize BM25 score to 0-1 range.
56
+ * BM25 returns negative values where more negative = better match.
57
+ * We convert to 0-1 where 1 = best match.
58
+ */
59
+ private normalizeBM25;
60
+ /**
61
+ * Calculate recency score with exponential decay.
62
+ * Returns 0-1 where 1 = just now, 0.5 = half-life ago.
63
+ */
64
+ private calculateRecency;
65
+ }
66
+ //# sourceMappingURL=SessionRAGRetriever.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionRAGRetriever.d.ts","sourceRoot":"","sources":["../../../src/lib/memory/SessionRAGRetriever.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,eAAe,EACf,QAAQ,EACR,UAAU,EACV,IAAI,EACJ,QAAQ,EACT,MAAM,sBAAsB,CAAC;AAM9B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,IAAI,EAAE,CAAC,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;IAClC,WAAW,EAAE,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;IACtC,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1B,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAYD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,aAAa,CAAU;gBAEnB,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe;IAM1D;;OAEG;IACI,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB;IA0B5D;;OAEG;IACI,qBAAqB,IAAI;QAC9B,KAAK,EAAE,IAAI,EAAE,CAAC;QACd,WAAW,EAAE,UAAU,EAAE,CAAC;QAC1B,SAAS,EAAE,QAAQ,EAAE,CAAC;KACvB;IAaD,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,UAAU;IAyBlB,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,aAAa;IAyBrB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAQrB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAKzB"}