squish-memory 0.9.3 → 1.0.1

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 (223) hide show
  1. package/.env.mcp.example +14 -11
  2. package/CHANGELOG.md +68 -0
  3. package/README.md +82 -9
  4. package/bin/squish-add.mjs +32 -0
  5. package/bin/squish-rm.mjs +21 -0
  6. package/config/plugin-manifest.json +152 -0
  7. package/config/plugin-manifest.schema.json +244 -0
  8. package/config/settings.json +51 -0
  9. package/dist/algorithms/{merge/analytics → analytics}/token-estimator.d.ts +1 -1
  10. package/dist/algorithms/analytics/token-estimator.d.ts.map +1 -0
  11. package/dist/algorithms/{merge/analytics → analytics}/token-estimator.js +3 -3
  12. package/dist/algorithms/analytics/token-estimator.js.map +1 -0
  13. package/dist/algorithms/detection/hash-filters.d.ts.map +1 -0
  14. package/dist/algorithms/detection/hash-filters.js.map +1 -0
  15. package/dist/algorithms/{merge/detection → detection}/semantic-ranker.d.ts +1 -1
  16. package/dist/algorithms/detection/semantic-ranker.d.ts.map +1 -0
  17. package/dist/algorithms/{merge/detection → detection}/semantic-ranker.js +1 -1
  18. package/dist/algorithms/detection/semantic-ranker.js.map +1 -0
  19. package/dist/algorithms/{merge/detection → detection}/two-stage-detector.d.ts +1 -1
  20. package/dist/algorithms/detection/two-stage-detector.d.ts.map +1 -0
  21. package/dist/algorithms/{merge/detection → detection}/two-stage-detector.js +4 -4
  22. package/dist/algorithms/detection/two-stage-detector.js.map +1 -0
  23. package/dist/algorithms/handlers/approve-merge.d.ts.map +1 -0
  24. package/dist/algorithms/{merge/handlers → handlers}/approve-merge.js +4 -4
  25. package/dist/algorithms/handlers/approve-merge.js.map +1 -0
  26. package/dist/algorithms/{merge/handlers → handlers}/detect-duplicates.d.ts +1 -1
  27. package/dist/algorithms/handlers/detect-duplicates.d.ts.map +1 -0
  28. package/dist/algorithms/{merge/handlers → handlers}/detect-duplicates.js +55 -75
  29. package/dist/algorithms/handlers/detect-duplicates.js.map +1 -0
  30. package/dist/algorithms/handlers/get-stats.d.ts.map +1 -0
  31. package/dist/algorithms/{merge/handlers → handlers}/get-stats.js +3 -3
  32. package/dist/algorithms/handlers/get-stats.js.map +1 -0
  33. package/dist/algorithms/handlers/list-proposals.d.ts.map +1 -0
  34. package/dist/algorithms/{merge/handlers → handlers}/list-proposals.js +3 -3
  35. package/dist/algorithms/handlers/list-proposals.js.map +1 -0
  36. package/dist/algorithms/handlers/preview-merge.d.ts.map +1 -0
  37. package/dist/algorithms/{merge/handlers → handlers}/preview-merge.js +3 -3
  38. package/dist/algorithms/handlers/preview-merge.js.map +1 -0
  39. package/dist/algorithms/handlers/reject-merge.d.ts.map +1 -0
  40. package/dist/algorithms/{merge/handlers → handlers}/reject-merge.js +3 -3
  41. package/dist/algorithms/handlers/reject-merge.js.map +1 -0
  42. package/dist/algorithms/handlers/reverse-merge.d.ts.map +1 -0
  43. package/dist/algorithms/{merge/handlers → handlers}/reverse-merge.js +3 -3
  44. package/dist/algorithms/handlers/reverse-merge.js.map +1 -0
  45. package/dist/algorithms/{merge/safety → safety}/safety-checks.d.ts +1 -1
  46. package/dist/algorithms/safety/safety-checks.d.ts.map +1 -0
  47. package/dist/algorithms/safety/safety-checks.js +179 -0
  48. package/dist/algorithms/safety/safety-checks.js.map +1 -0
  49. package/dist/algorithms/{merge/strategies → strategies}/merge-strategies.d.ts +1 -1
  50. package/dist/algorithms/strategies/merge-strategies.d.ts.map +1 -0
  51. package/dist/algorithms/strategies/merge-strategies.js.map +1 -0
  52. package/dist/algorithms/utils/response-builder.d.ts +28 -0
  53. package/dist/algorithms/utils/response-builder.d.ts.map +1 -0
  54. package/dist/algorithms/utils/response-builder.js +37 -0
  55. package/dist/algorithms/utils/response-builder.js.map +1 -0
  56. package/dist/api/web/web.d.ts.map +1 -1
  57. package/dist/api/web/web.js +452 -472
  58. package/dist/api/web/web.js.map +1 -1
  59. package/dist/commands/mcp-server.js +7 -3
  60. package/dist/commands/mcp-server.js.map +1 -1
  61. package/dist/config.d.ts +10 -10
  62. package/dist/config.d.ts.map +1 -1
  63. package/dist/config.js +102 -55
  64. package/dist/config.js.map +1 -1
  65. package/dist/core/associations.js +2 -2
  66. package/dist/core/associations.js.map +1 -1
  67. package/dist/core/embeddings.d.ts +1 -1
  68. package/dist/core/embeddings.d.ts.map +1 -1
  69. package/dist/core/embeddings.js +10 -67
  70. package/dist/core/embeddings.js.map +1 -1
  71. package/dist/core/layers/generator.d.ts +25 -0
  72. package/dist/core/layers/generator.d.ts.map +1 -0
  73. package/dist/core/layers/generator.js +76 -0
  74. package/dist/core/layers/generator.js.map +1 -0
  75. package/dist/core/local-embeddings.d.ts +3 -11
  76. package/dist/core/local-embeddings.d.ts.map +1 -1
  77. package/dist/core/local-embeddings.js +2 -76
  78. package/dist/core/local-embeddings.js.map +1 -1
  79. package/dist/core/mcp/tools.d.ts.map +1 -1
  80. package/dist/core/mcp/tools.js +71 -0
  81. package/dist/core/mcp/tools.js.map +1 -1
  82. package/dist/core/memory/context-collector.d.ts.map +1 -1
  83. package/dist/core/memory/context-collector.js +3 -2
  84. package/dist/core/memory/context-collector.js.map +1 -1
  85. package/dist/core/memory/feedback-tracker.d.ts.map +1 -1
  86. package/dist/core/memory/feedback-tracker.js +10 -6
  87. package/dist/core/memory/feedback-tracker.js.map +1 -1
  88. package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -1
  89. package/dist/core/memory/hybrid-retrieval.js +49 -1
  90. package/dist/core/memory/hybrid-retrieval.js.map +1 -1
  91. package/dist/core/memory/hybrid-search.d.ts.map +1 -1
  92. package/dist/core/memory/hybrid-search.js +32 -39
  93. package/dist/core/memory/hybrid-search.js.map +1 -1
  94. package/dist/core/memory/memories.d.ts.map +1 -1
  95. package/dist/core/memory/memories.js +1 -7
  96. package/dist/core/memory/memories.js.map +1 -1
  97. package/dist/core/memory/progressive-disclosure.d.ts.map +1 -1
  98. package/dist/core/memory/progressive-disclosure.js.map +1 -1
  99. package/dist/core/memory/query-rewriter.js +9 -9
  100. package/dist/core/memory/stats.js +5 -5
  101. package/dist/core/namespaces/index.d.ts +71 -0
  102. package/dist/core/namespaces/index.d.ts.map +1 -0
  103. package/dist/core/namespaces/index.js +305 -0
  104. package/dist/core/namespaces/index.js.map +1 -0
  105. package/dist/core/namespaces/uri-parser.d.ts +31 -0
  106. package/dist/core/namespaces/uri-parser.d.ts.map +1 -0
  107. package/dist/core/namespaces/uri-parser.js +74 -0
  108. package/dist/core/namespaces/uri-parser.js.map +1 -0
  109. package/dist/core/observations.d.ts.map +1 -1
  110. package/dist/core/observations.js +3 -12
  111. package/dist/core/observations.js.map +1 -1
  112. package/dist/core/projects.d.ts.map +1 -1
  113. package/dist/core/projects.js +0 -12
  114. package/dist/core/projects.js.map +1 -1
  115. package/dist/core/scheduler/cron-scheduler.d.ts.map +1 -1
  116. package/dist/core/scheduler/cron-scheduler.js +26 -7
  117. package/dist/core/scheduler/cron-scheduler.js.map +1 -1
  118. package/dist/core/scheduler/job-runner.js +8 -5
  119. package/dist/core/scheduler/job-runner.js.map +1 -1
  120. package/dist/core/search/conversations.js +33 -33
  121. package/dist/core/session-hooks/self-iteration-job.d.ts +20 -0
  122. package/dist/core/session-hooks/self-iteration-job.d.ts.map +1 -0
  123. package/dist/core/session-hooks/self-iteration-job.js +282 -0
  124. package/dist/core/session-hooks/self-iteration-job.js.map +1 -0
  125. package/dist/core/session-hooks/session-hooks.d.ts +18 -0
  126. package/dist/core/session-hooks/session-hooks.d.ts.map +1 -0
  127. package/dist/core/session-hooks/session-hooks.js +58 -0
  128. package/dist/core/session-hooks/session-hooks.js.map +1 -0
  129. package/dist/core/tracing/collector.d.ts +111 -0
  130. package/dist/core/tracing/collector.d.ts.map +1 -0
  131. package/dist/core/tracing/collector.js +350 -0
  132. package/dist/core/tracing/collector.js.map +1 -0
  133. package/dist/core/tracing/visualizer.d.ts +32 -0
  134. package/dist/core/tracing/visualizer.d.ts.map +1 -0
  135. package/dist/core/tracing/visualizer.js +165 -0
  136. package/dist/core/tracing/visualizer.js.map +1 -0
  137. package/dist/db/adapter.d.ts +6 -1
  138. package/dist/db/adapter.d.ts.map +1 -1
  139. package/dist/db/adapter.js +54 -126
  140. package/dist/db/adapter.js.map +1 -1
  141. package/dist/db/bootstrap.js +477 -477
  142. package/dist/db/index.d.ts +5 -1
  143. package/dist/db/index.d.ts.map +1 -1
  144. package/dist/drizzle/schema-sqlite.d.ts +384 -0
  145. package/dist/drizzle/schema-sqlite.d.ts.map +1 -1
  146. package/dist/drizzle/schema-sqlite.js +65 -0
  147. package/dist/drizzle/schema-sqlite.js.map +1 -1
  148. package/dist/drizzle/schema.d.ts +368 -0
  149. package/dist/drizzle/schema.d.ts.map +1 -1
  150. package/dist/drizzle/schema.js +63 -0
  151. package/dist/drizzle/schema.js.map +1 -1
  152. package/dist/index.d.ts +4 -4
  153. package/dist/index.js +101 -62
  154. package/dist/index.js.map +1 -1
  155. package/generated/mcp/manifest.json +23 -0
  156. package/generated/mcp/mcp-servers.json +25 -0
  157. package/generated/mcp/mcporter.json +34 -0
  158. package/generated/mcp/openclaw-memory-qmd.json +17 -0
  159. package/generated/mcp/runtime.json +12 -0
  160. package/package.json +70 -28
  161. package/packages/plugin-claude-code/README.md +73 -0
  162. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +35 -0
  163. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts.map +1 -0
  164. package/packages/plugin-claude-code/dist/plugin-wrapper.js +191 -0
  165. package/packages/plugin-claude-code/dist/plugin-wrapper.js.map +1 -0
  166. package/packages/plugin-claude-code/package.json +31 -0
  167. package/packages/plugin-openclaw/README.md +70 -0
  168. package/packages/plugin-openclaw/dist/index.d.ts +49 -0
  169. package/packages/plugin-openclaw/dist/index.d.ts.map +1 -0
  170. package/packages/plugin-openclaw/dist/index.js +262 -0
  171. package/packages/plugin-openclaw/dist/index.js.map +1 -0
  172. package/packages/plugin-openclaw/openclaw.plugin.json +94 -0
  173. package/packages/plugin-openclaw/package.json +31 -0
  174. package/packages/plugin-opencode/install.mjs +217 -0
  175. package/packages/plugin-opencode/package.json +21 -0
  176. package/scripts/dependency-manager.mjs +217 -0
  177. package/scripts/detect-clients.mjs +78 -0
  178. package/scripts/install-interactive.mjs +674 -0
  179. package/scripts/install-plugin.mjs +415 -0
  180. package/scripts/test-interactive.mjs +131 -0
  181. package/commands/managed-sync.ts +0 -69
  182. package/commands/mcp-server.ts +0 -519
  183. package/dist/algorithms/merge/analytics/token-estimator.d.ts.map +0 -1
  184. package/dist/algorithms/merge/analytics/token-estimator.js.map +0 -1
  185. package/dist/algorithms/merge/detection/hash-filters.d.ts.map +0 -1
  186. package/dist/algorithms/merge/detection/hash-filters.js.map +0 -1
  187. package/dist/algorithms/merge/detection/semantic-ranker.d.ts.map +0 -1
  188. package/dist/algorithms/merge/detection/semantic-ranker.js.map +0 -1
  189. package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +0 -1
  190. package/dist/algorithms/merge/detection/two-stage-detector.js.map +0 -1
  191. package/dist/algorithms/merge/handlers/approve-merge.d.ts.map +0 -1
  192. package/dist/algorithms/merge/handlers/approve-merge.js.map +0 -1
  193. package/dist/algorithms/merge/handlers/detect-duplicates.d.ts.map +0 -1
  194. package/dist/algorithms/merge/handlers/detect-duplicates.js.map +0 -1
  195. package/dist/algorithms/merge/handlers/get-stats.d.ts.map +0 -1
  196. package/dist/algorithms/merge/handlers/get-stats.js.map +0 -1
  197. package/dist/algorithms/merge/handlers/list-proposals.d.ts.map +0 -1
  198. package/dist/algorithms/merge/handlers/list-proposals.js.map +0 -1
  199. package/dist/algorithms/merge/handlers/preview-merge.d.ts.map +0 -1
  200. package/dist/algorithms/merge/handlers/preview-merge.js.map +0 -1
  201. package/dist/algorithms/merge/handlers/reject-merge.d.ts.map +0 -1
  202. package/dist/algorithms/merge/handlers/reject-merge.js.map +0 -1
  203. package/dist/algorithms/merge/handlers/reverse-merge.d.ts.map +0 -1
  204. package/dist/algorithms/merge/handlers/reverse-merge.js.map +0 -1
  205. package/dist/algorithms/merge/safety/safety-checks.d.ts.map +0 -1
  206. package/dist/algorithms/merge/safety/safety-checks.js +0 -215
  207. package/dist/algorithms/merge/safety/safety-checks.js.map +0 -1
  208. package/dist/algorithms/merge/strategies/merge-strategies.d.ts.map +0 -1
  209. package/dist/algorithms/merge/strategies/merge-strategies.js.map +0 -1
  210. package/dist/core/embeddings/qmd-provider.d.ts +0 -65
  211. package/dist/core/embeddings/qmd-provider.d.ts.map +0 -1
  212. package/dist/core/embeddings/qmd-provider.js +0 -133
  213. package/dist/core/embeddings/qmd-provider.js.map +0 -1
  214. package/scripts/init-dirs.ts +0 -15
  215. /package/dist/algorithms/{merge/detection → detection}/hash-filters.d.ts +0 -0
  216. /package/dist/algorithms/{merge/detection → detection}/hash-filters.js +0 -0
  217. /package/dist/algorithms/{merge/handlers → handlers}/approve-merge.d.ts +0 -0
  218. /package/dist/algorithms/{merge/handlers → handlers}/get-stats.d.ts +0 -0
  219. /package/dist/algorithms/{merge/handlers → handlers}/list-proposals.d.ts +0 -0
  220. /package/dist/algorithms/{merge/handlers → handlers}/preview-merge.d.ts +0 -0
  221. /package/dist/algorithms/{merge/handlers → handlers}/reject-merge.d.ts +0 -0
  222. /package/dist/algorithms/{merge/handlers → handlers}/reverse-merge.d.ts +0 -0
  223. /package/dist/algorithms/{merge/strategies → strategies}/merge-strategies.js +0 -0
@@ -0,0 +1,165 @@
1
+ /** Trace Visualizer - Creates ASCII visualizations of search traces
2
+ *
3
+ * Provides tree-format output showing search pipeline stages and timing
4
+ */
5
+ /**
6
+ * Create visual ASCII visualization of a trace
7
+ */
8
+ export function visualizeTrace(trace) {
9
+ const lines = [];
10
+ // Header
11
+ lines.push('='.repeat(60));
12
+ lines.push(`Search Trace: ${trace.id}`);
13
+ lines.push(`Session: ${trace.sessionId || 'N/A'}`);
14
+ lines.push(`Query: "${trace.query}"`);
15
+ lines.push('='.repeat(60));
16
+ lines.push('');
17
+ // Total duration
18
+ lines.push(`Total Duration: ${trace.totalDurationMs}ms (${(trace.totalDurationMs / 1000).toFixed(2)}s)`);
19
+ lines.push('');
20
+ // Stage timeline visualization
21
+ lines.push('─'.repeat(60));
22
+ lines.push('Pipeline Stages:');
23
+ lines.push('─'.repeat(60));
24
+ lines.push('');
25
+ const stageNames = [];
26
+ const stageTimings = [];
27
+ if (trace.queryRewrite) {
28
+ stageNames.push('Query Rewrite');
29
+ stageTimings.push(trace.queryRewrite.timeMs || 0);
30
+ }
31
+ if (trace.candidateRetrieval) {
32
+ stageNames.push('Candidate Retrieval');
33
+ stageTimings.push(trace.candidateRetrieval.timeMs || 0);
34
+ }
35
+ if (trace.entityFiltering) {
36
+ stageNames.push('Entity Filtering');
37
+ stageTimings.push(trace.entityFiltering.timeMs || 0);
38
+ }
39
+ if (trace.hybridScoring) {
40
+ stageNames.push('Hybrid Scoring');
41
+ stageTimings.push(trace.hybridScoring.timeMs || 0);
42
+ }
43
+ if (trace.reranking) {
44
+ stageNames.push('Reranking');
45
+ stageTimings.push(trace.reranking.timeMs || 0);
46
+ }
47
+ if (stageNames.length > 0) {
48
+ let cumulativeTime = 0;
49
+ const maxStageNameLength = Math.max(...stageNames.map(n => n.length));
50
+ stageNames.forEach((name, i) => {
51
+ const duration = stageTimings[i] || 0;
52
+ cumulativeTime += duration;
53
+ const progressPercent = ((cumulativeTime / trace.totalDurationMs) * 100).toFixed(1);
54
+ const barLength = Math.max(0, Math.min(40, Math.round((duration / trace.totalDurationMs) * 40)));
55
+ // Stage name with timing
56
+ const paddedName = name.padEnd(maxStageNameLength + 2);
57
+ lines.push(`${paddedName} │ ${duration.toString().padStart(4)}ms │ ${progressPercent.padStart(5)}%`);
58
+ // Visualization bar
59
+ const bar = '█'.repeat(barLength) + '░'.repeat(40 - barLength);
60
+ lines.push(` └─ ${bar}`);
61
+ lines.push('');
62
+ });
63
+ }
64
+ else {
65
+ lines.push(' No stage data available');
66
+ lines.push('');
67
+ }
68
+ // Top results
69
+ if (trace.topResults && trace.topResults.length > 0) {
70
+ lines.push('─'.repeat(60));
71
+ lines.push(`Top Results (${trace.topResults.length}):`);
72
+ lines.push('─'.repeat(60));
73
+ lines.push('');
74
+ trace.topResults.slice(0, 5).forEach((result, i) => {
75
+ const type = result.type || 'memory';
76
+ const content = result.content?.substring(0, 60) || '';
77
+ const score = result.hybridScore?.toFixed(2) || 'N/A';
78
+ lines.push(`${(i + 1).toString().padStart(2)}. [${type.padEnd(8)}] (score: ${score})`);
79
+ if (content.length > 0) {
80
+ lines.push(` ${content}`);
81
+ }
82
+ lines.push('');
83
+ });
84
+ }
85
+ else if (trace.resultCount !== undefined) {
86
+ lines.push('─'.repeat(60));
87
+ lines.push(`Results: ${trace.resultCount} returned`);
88
+ lines.push('─'.repeat(60));
89
+ lines.push('');
90
+ }
91
+ // Footer
92
+ lines.push('='.repeat(60));
93
+ lines.push('');
94
+ return lines.join('\n');
95
+ }
96
+ /**
97
+ * Create compact single-line trace summary
98
+ */
99
+ export function summarizeTrace(trace) {
100
+ const parts = [];
101
+ parts.push(`[${trace.id.substring(0, 8)}]`);
102
+ parts.push(`"${trace.query.substring(0, 30)}${trace.query.length > 30 ? '...' : ''}"`);
103
+ parts.push(`${trace.totalDurationMs}ms`);
104
+ parts.push(trace.resultCount !== undefined ? `${trace.resultCount} results` : 'unknown');
105
+ return parts.join(' | ');
106
+ }
107
+ /**
108
+ * Compare multiple traces
109
+ */
110
+ export function compareTraces(traces) {
111
+ const lines = [];
112
+ lines.push('─'.repeat(80));
113
+ lines.push('Trace Comparison');
114
+ lines.push('─'.repeat(80));
115
+ lines.push('');
116
+ lines.push('ID'.padEnd(10) + ' | ' + 'Query'.padEnd(30) + ' | ' + 'Duration'.padEnd(10) + ' | ' + 'Results');
117
+ lines.push('─'.repeat(80));
118
+ traces.forEach(trace => {
119
+ const id = trace.id.substring(0, 8);
120
+ const query = trace.query.substring(0, 30);
121
+ const duration = `${trace.totalDurationMs}ms`;
122
+ const results = trace.resultCount !== undefined ? trace.resultCount.toString() : '?';
123
+ lines.push(`${id.padEnd(10)} | ${query.padEnd(30)} | ${duration.padEnd(10)} | ${results.padEnd(8)}`);
124
+ });
125
+ return lines.join('\n');
126
+ }
127
+ /**
128
+ * Get stage breakdown table
129
+ */
130
+ export function getStageBreakdown(trace) {
131
+ const lines = [];
132
+ lines.push('Stage Timing Breakdown:');
133
+ lines.push('');
134
+ const stages = [
135
+ { name: 'Query Rewrite', data: trace.queryRewrite, timeMs: trace.queryRewrite?.timeMs || 0 },
136
+ { name: 'Candidate Retrieval', data: trace.candidateRetrieval, timeMs: trace.candidateRetrieval?.timeMs || 0 },
137
+ { name: 'Entity Filtering', data: trace.entityFiltering, timeMs: trace.entityFiltering?.timeMs || 0 },
138
+ { name: 'Hybrid Scoring', data: trace.hybridScoring, timeMs: trace.hybridScoring?.timeMs || 0 },
139
+ { name: 'Reranking', data: trace.reranking, timeMs: trace.reranking?.timeMs || 0 },
140
+ ];
141
+ const validStages = stages.filter(s => s.data && s.timeMs !== undefined);
142
+ if (validStages.length > 0) {
143
+ const maxNameLength = Math.max(...validStages.map(s => s.name.length));
144
+ validStages.forEach(stage => {
145
+ const percentage = ((stage.timeMs / trace.totalDurationMs) * 100).toFixed(1);
146
+ lines.push(` ${stage.name.padEnd(maxNameLength)} │ ${stage.timeMs.toString().padStart(4)}ms │ ${percentage.padStart(5)}%`);
147
+ });
148
+ lines.push('');
149
+ lines.push(' ' + '─'.repeat(maxNameLength + 4 + 5 + 6));
150
+ }
151
+ else {
152
+ lines.push(' No stage timing data available');
153
+ }
154
+ return lines.join('\n');
155
+ }
156
+ /**
157
+ * Export all visualizer functions
158
+ */
159
+ export default {
160
+ visualizeTrace,
161
+ summarizeTrace,
162
+ compareTraces,
163
+ getStageBreakdown,
164
+ };
165
+ //# sourceMappingURL=visualizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualizer.js","sourceRoot":"","sources":["../../../core/tracing/visualizer.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,7 @@
1
- export declare function createDb(): Promise<any>;
1
+ export declare function createDb(): Promise<(import("drizzle-orm/node-postgres").NodePgDatabase<typeof import("../drizzle/schema.js")> & {
2
+ $client: import("pg").Pool;
3
+ }) | (import("drizzle-orm/better-sqlite3").BetterSQLite3Database<typeof import("../drizzle/schema-sqlite.js")> & {
4
+ $client: import("better-sqlite3").Database;
5
+ }) | import("drizzle-orm/sql-js").SQLJsDatabase<typeof import("../drizzle/schema-sqlite.js")>>;
6
+ export default createDb;
2
7
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../db/adapter.ts"],"names":[],"mappings":"AAOA,wBAAsB,QAAQ,iBAM7B"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../db/adapter.ts"],"names":[],"mappings":"AAIA,wBAAsB,QAAQ;;;;+FAM7B;AA2GD,eAAe,QAAQ,CAAC"}
@@ -1,8 +1,6 @@
1
1
  import { config, getDataDir } from '../config.js';
2
2
  import { ensurePostgresSchema, ensureSqliteSchema } from './bootstrap.js';
3
3
  import { logger } from '../core/logger.js';
4
- // Runtime detection - check if running in Bun
5
- const isBun = typeof globalThis.Bun !== 'undefined';
6
4
  export async function createDb() {
7
5
  if (config.isTeamMode) {
8
6
  return createPostgresDb();
@@ -24,145 +22,75 @@ async function createPostgresDb() {
24
22
  }
25
23
  async function createSqliteDb() {
26
24
  const dbPath = `${getDataDir()}/squish.db`;
27
- // Try Bun's built-in SQLite first if running in Bun
28
- if (isBun) {
29
- try {
30
- return await createBunSqliteDb(dbPath);
31
- }
32
- catch (error) {
33
- logger.warn('Bun SQLite failed, trying better-sqlite3 fallback', { error: String(error) });
34
- }
35
- }
36
- // Fallback to better-sqlite3 for Node.js
25
+ // Try better-sqlite3 first (best performance)
37
26
  try {
38
27
  return await createBetterSqliteDb(dbPath);
39
28
  }
40
- catch (error) {
41
- logger.error('SQLite initialization failed', error);
42
- throw new Error(`SQLite database unavailable: ${error instanceof Error ? error.message : 'Unknown error'}`);
29
+ catch (betterSqliteError) {
30
+ logger.warn('better-sqlite3 failed, trying sql.js fallback', {
31
+ error: betterSqliteError.message
32
+ });
33
+ // Fallback to sql.js (pure JavaScript, no native module)
34
+ try {
35
+ return await createSqlJsDb(dbPath);
36
+ }
37
+ catch (sqlJsError) {
38
+ // Both failed - this is critical, Squish cannot work without DB
39
+ logger.error('CRITICAL: SQLite database initialization failed', {
40
+ betterSqliteError: betterSqliteError.message,
41
+ sqlJsError: sqlJsError.message
42
+ });
43
+ throw new Error(`Squish requires SQLite to function. Database initialization failed.\n` +
44
+ `Primary error (better-sqlite3): ${betterSqliteError.message}\n` +
45
+ `Fallback error (sql.js): ${sqlJsError.message}\n\n` +
46
+ `Solutions:\n` +
47
+ `1. Rebuild native module: npm rebuild better-sqlite3\n` +
48
+ `2. Install build tools: npm install -g windows-build-tools (Windows)\n` +
49
+ `3. Or use PostgreSQL instead by setting DATABASE_URL environment variable`);
50
+ }
43
51
  }
44
52
  }
45
- async function createBunSqliteDb(dbPath) {
46
- // Dynamic import for Bun runtime - wrapped to avoid TS issues
47
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
48
- // @ts-ignore - bun:sqlite is only available in Bun runtime
49
- const { Database } = await import('bun:sqlite');
50
- const { drizzle } = await import('drizzle-orm/bun-sqlite');
51
- const schemaModule = await import('../drizzle/schema-sqlite.js');
52
- const sqlite = new Database(dbPath);
53
- // Enable foreign keys
54
- sqlite.run('PRAGMA foreign_keys = ON');
55
- // Run full schema bootstrap from bootstrap.ts (includes ALL tables)
56
- await ensureSqliteSchema(sqlite);
57
- return drizzle(sqlite, { schema: schemaModule });
58
- }
59
53
  async function createBetterSqliteDb(dbPath) {
60
54
  const DatabaseModule = await import('better-sqlite3');
61
55
  const Database = DatabaseModule.default;
62
56
  const { drizzle } = await import('drizzle-orm/better-sqlite3');
63
57
  const schemaModule = await import('../drizzle/schema-sqlite.js');
64
- let sqlite;
65
- try {
66
- sqlite = new Database(dbPath);
67
- }
68
- catch (error) {
69
- // Check if it's a Win32 native module error
70
- if (error.message?.includes('not a valid Win32 application')) {
71
- logger.error('better-sqlite3 native module not compiled for this platform');
72
- logger.error('Solution: Run "npm run web:bun" to use Bun instead, or rebuild with "npm rebuild better-sqlite3"');
73
- throw new Error('SQLite native module unavailable. Use "npm run web:bun" or rebuild better-sqlite3 for your platform.');
74
- }
75
- throw error;
76
- }
58
+ const sqlite = new Database(dbPath);
77
59
  // Enable foreign keys
78
60
  sqlite.pragma('foreign_keys = ON');
79
61
  await ensureSqliteSchema(sqlite);
62
+ logger.info('SQLite initialized with better-sqlite3');
80
63
  return drizzle(sqlite, { schema: schemaModule });
81
64
  }
82
- // Bun-specific schema bootstrap
83
- function ensureSqliteSchemaForBun(sqlite) {
84
- const createMemoriesTable = `
85
- CREATE TABLE IF NOT EXISTS memories (
86
- id TEXT PRIMARY KEY,
87
- project_id TEXT,
88
- type TEXT NOT NULL DEFAULT 'observation',
89
- content TEXT NOT NULL,
90
- summary TEXT,
91
- tags TEXT,
92
- metadata TEXT,
93
- embedding BLOB,
94
- embedding_json TEXT,
95
- source TEXT DEFAULT 'mcp',
96
- tier TEXT DEFAULT 'warm',
97
- status TEXT DEFAULT 'active',
98
- importance_score REAL DEFAULT 50,
99
- relevance_score REAL,
100
- coactivation_score INTEGER DEFAULT 0,
101
- access_count INTEGER DEFAULT 0,
102
- retrieval_count INTEGER DEFAULT 0,
103
- echo_count INTEGER DEFAULT 0,
104
- fizzle_count INTEGER DEFAULT 0,
105
- is_pinned INTEGER DEFAULT 0,
106
- is_protected INTEGER DEFAULT 0,
107
- is_immutable INTEGER DEFAULT 0,
108
- is_mergeable INTEGER DEFAULT 0,
109
- is_merged INTEGER DEFAULT 0,
110
- merged_into TEXT,
111
- merged_at TEXT,
112
- superseded_by TEXT,
113
- superseded_at TEXT,
114
- valid_from TEXT,
115
- valid_to TEXT,
116
- expired_at TEXT,
117
- last_accessed_at TEXT,
118
- last_retrieved_at TEXT,
119
- last_echoed_at TEXT,
120
- last_importance_recalc TEXT,
121
- created_at TEXT DEFAULT CURRENT_TIMESTAMP,
122
- updated_at TEXT DEFAULT CURRENT_TIMESTAMP
123
- )
124
- `;
125
- const createProjectsTable = `
126
- CREATE TABLE IF NOT EXISTS projects (
127
- id TEXT PRIMARY KEY,
128
- name TEXT NOT NULL,
129
- path TEXT UNIQUE,
130
- description TEXT,
131
- metadata TEXT,
132
- created_at TEXT DEFAULT CURRENT_TIMESTAMP,
133
- updated_at TEXT DEFAULT CURRENT_TIMESTAMP
134
- )
135
- `;
136
- const createAssociationsTable = `
137
- CREATE TABLE IF NOT EXISTS memory_associations (
138
- id TEXT PRIMARY KEY,
139
- from_memory_id TEXT NOT NULL,
140
- to_memory_id TEXT NOT NULL,
141
- association_type TEXT NOT NULL,
142
- weight REAL DEFAULT 1,
143
- coactivation_count INTEGER DEFAULT 1,
144
- last_coactivated_at TEXT,
145
- created_at TEXT DEFAULT CURRENT_TIMESTAMP,
146
- UNIQUE(from_memory_id, to_memory_id)
147
- )
148
- `;
149
- sqlite.run(createMemoriesTable);
150
- sqlite.run(createProjectsTable);
151
- sqlite.run(createAssociationsTable);
152
- // FTS is optional - don't fail if it doesn't work
153
- try {
154
- sqlite.run(`
155
- CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
156
- content,
157
- summary,
158
- content='memories',
159
- content_rowid='rowid'
160
- )
161
- `);
162
- }
163
- catch (e) {
164
- logger.debug('FTS5 table creation skipped', { error: e?.message || String(e) });
65
+ async function createSqlJsDb(dbPath) {
66
+ // @ts-ignore - sql.js has no types but works fine
67
+ const initSqlJs = await import('sql.js');
68
+ const { drizzle } = await import('drizzle-orm/sql-js');
69
+ const schemaModule = await import('../drizzle/schema-sqlite.js');
70
+ const fs = await import('fs');
71
+ const path = await import('path');
72
+ const SQL = await initSqlJs.default();
73
+ let data;
74
+ // Try to load existing database
75
+ if (fs.existsSync(dbPath)) {
76
+ data = fs.readFileSync(dbPath);
165
77
  }
166
- logger.info('SQLite schema initialized (Bun runtime)');
78
+ const sqlite = new SQL.Database(data);
79
+ // Enable foreign keys
80
+ sqlite.run('PRAGMA foreign_keys = ON');
81
+ // Schema bootstrap
82
+ await ensureSqliteSchema(sqlite);
83
+ // Persist database on changes (sql.js is in-memory by default)
84
+ const originalExec = sqlite.exec.bind(sqlite);
85
+ sqlite.exec = function (...args) {
86
+ const result = originalExec(...args);
87
+ // Save after each exec
88
+ const data = sqlite.export();
89
+ fs.writeFileSync(dbPath, Buffer.from(data));
90
+ return result;
91
+ };
92
+ logger.info('SQLite initialized with sql.js (pure JavaScript fallback)');
93
+ return drizzle(sqlite, { schema: schemaModule });
167
94
  }
95
+ export default createDb;
168
96
  //# sourceMappingURL=adapter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../db/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../db/adapter.ts"],"names":[],"mappings":"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"}