squish-memory 1.1.5 → 1.2.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 (646) hide show
  1. package/.env.example +32 -16
  2. package/CHANGELOG.md +147 -0
  3. package/README.md +120 -78
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +44 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +19 -23
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +107 -52
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/{dist/core/algorithms/index.js → core/algorithms/index.ts} +39 -26
  36. package/core/algorithms/operations/cache-maintenance.ts +182 -0
  37. package/core/algorithms/safety/safety-checks.ts +256 -0
  38. package/core/algorithms/strategies/merge-strategies.ts +381 -0
  39. package/core/algorithms/types.ts +140 -0
  40. package/core/algorithms/utils/response-builder.ts +61 -0
  41. package/core/associations.ts +363 -0
  42. package/core/beliefs/decay.ts +289 -0
  43. package/core/beliefs/extractor.ts +131 -0
  44. package/core/beliefs/store.ts +557 -0
  45. package/core/beliefs/types.ts +38 -0
  46. package/core/commands/mcp-server.ts +5 -0
  47. package/core/compression.ts +177 -0
  48. package/core/config.js +2 -0
  49. package/core/consolidation.ts +330 -0
  50. package/core/context/agent-context.ts +388 -0
  51. package/core/context/context-paging.ts +449 -0
  52. package/core/context/context-window.ts +234 -0
  53. package/core/context/context.ts +35 -0
  54. package/core/embeddings/embeddings.ts +616 -0
  55. package/core/embeddings/google-multimodal.ts +200 -0
  56. package/{dist/core/local-embeddings.js → core/embeddings/local-embeddings.ts} +12 -11
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/{dist/core/lib/db-client.d.ts → core/lib/db-client.ts} +168 -114
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/{dist/core/lib/schemas.js → core/lib/schemas.ts} +102 -87
  83. package/core/lib/types.ts +49 -0
  84. package/core/lib/utils.ts +151 -0
  85. package/core/lib/validation.ts +180 -0
  86. package/core/lifecycle.ts +353 -0
  87. package/core/logger.ts +59 -0
  88. package/core/memory/bridge-discovery.ts +395 -0
  89. package/core/memory/categorizer.ts +390 -0
  90. package/core/memory/conflict-detector.ts +62 -0
  91. package/core/memory/consolidation.ts +372 -0
  92. package/core/memory/context-collector.ts +75 -0
  93. package/core/memory/contradiction-resolver.ts +494 -0
  94. package/core/memory/edit-workflow.ts +174 -0
  95. package/core/memory/entity-extractor.ts +426 -0
  96. package/core/memory/entity-resolver.ts +89 -0
  97. package/core/memory/explain.ts +112 -0
  98. package/core/memory/fact-deriver.ts +300 -0
  99. package/core/memory/fact-extractor.ts +120 -0
  100. package/core/memory/feedback-tracker.ts +200 -0
  101. package/core/memory/hooks.ts +230 -0
  102. package/core/memory/hybrid-retrieval.ts +65 -0
  103. package/core/memory/hybrid-scorer.ts +325 -0
  104. package/core/memory/hybrid-search.ts +748 -0
  105. package/core/memory/importance.ts +319 -0
  106. package/{dist/core/memory/index.js → core/memory/index.ts} +11 -10
  107. package/core/memory/loader.ts +178 -0
  108. package/core/memory/markdown/markdown-storage.ts +318 -0
  109. package/core/memory/memories.ts +565 -0
  110. package/core/memory/memory-lifecycle.ts +51 -0
  111. package/core/memory/memory-manager.ts +53 -0
  112. package/core/memory/migrate.ts +173 -0
  113. package/core/memory/normalization.ts +30 -0
  114. package/core/memory/path-strengthener.ts +211 -0
  115. package/core/memory/progressive-disclosure.ts +392 -0
  116. package/core/memory/query-processor.ts +130 -0
  117. package/core/memory/query-rewriter.ts +153 -0
  118. package/core/memory/response-analyzer.ts +81 -0
  119. package/core/memory/retrieval-feedback.ts +276 -0
  120. package/core/memory/serialization.ts +83 -0
  121. package/core/memory/stale-cleaner.ts +147 -0
  122. package/core/memory/stats.ts +181 -0
  123. package/core/memory/telemetry.ts +392 -0
  124. package/core/memory/temporal-facts.ts +356 -0
  125. package/core/memory/temporal-parser.ts +477 -0
  126. package/core/memory/trigger-detector.ts +104 -0
  127. package/core/memory/write-gate.ts +288 -0
  128. package/{dist/core/places/index.js → core/places/index.ts} +12 -12
  129. package/core/places/memory-places.ts +339 -0
  130. package/core/places/places.ts +406 -0
  131. package/core/places/rules.ts +308 -0
  132. package/core/places/walking.ts +192 -0
  133. package/core/projects +89 -0
  134. package/core/projects.ts +131 -0
  135. package/core/redis.ts +82 -0
  136. package/core/responses.ts +187 -0
  137. package/core/runtime/trust-report.ts +195 -0
  138. package/core/runtime/trust-state.ts +360 -0
  139. package/core/scheduler/cron-scheduler.ts +590 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/{dist/core/scheduler/index.js → core/scheduler/index.ts} +8 -8
  142. package/core/scheduler/job-runner.ts +197 -0
  143. package/core/search/conversations.ts +166 -0
  144. package/core/search/entities.ts +46 -0
  145. package/core/search/folder-context.ts +154 -0
  146. package/core/search/graph-boost.ts +22 -0
  147. package/{dist/core/search/index.js → core/search/index.ts} +4 -5
  148. package/core/search/qmd-wrapper.ts +84 -0
  149. package/core/security/encrypt.ts +51 -0
  150. package/core/security/governance.ts +102 -0
  151. package/core/security/privacy.ts +108 -0
  152. package/core/security/secret-detector.ts +122 -0
  153. package/core/session/auto-load.ts +160 -0
  154. package/core/session/entity-tracker.ts +363 -0
  155. package/{dist/core/session/index.js → core/session/index.ts} +7 -7
  156. package/core/session/reference-resolver.ts +158 -0
  157. package/core/session/self-iteration-job.ts +478 -0
  158. package/core/session/session-hooks.ts +69 -0
  159. package/core/session/types.ts +36 -0
  160. package/core/session/working-set.ts +275 -0
  161. package/{dist/core/snapshots/cleanup.js → core/snapshots/cleanup.ts} +13 -12
  162. package/core/snapshots/comparison.ts +59 -0
  163. package/core/snapshots/creation.ts +139 -0
  164. package/core/snapshots/retrieval.ts +44 -0
  165. package/core/snapshots/stats.ts +63 -0
  166. package/core/storage/cache.ts +241 -0
  167. package/core/storage/database.ts +23 -0
  168. package/{dist/core/summarization/cleanup.js → core/summarization/cleanup.ts} +13 -12
  169. package/core/summarization/queries.ts +32 -0
  170. package/core/summarization/stats.ts +64 -0
  171. package/core/summarization/strategies.ts +52 -0
  172. package/core/summarization.ts +248 -0
  173. package/core/temporal-facts.ts +244 -0
  174. package/core/tracing/collector.ts +470 -0
  175. package/core/tracing/visualizer.ts +195 -0
  176. package/core/utils/cleanup-operations.ts +50 -0
  177. package/core/utils/content-extraction.ts +95 -0
  178. package/core/utils/filter-builder.ts +56 -0
  179. package/core/utils/history-traversal.ts +63 -0
  180. package/core/utils/memory-operations.ts +56 -0
  181. package/core/utils/query-operations.ts +83 -0
  182. package/core/utils/summarization-helpers.ts +45 -0
  183. package/core/utils/temporal-queries.ts +39 -0
  184. package/{dist/core/utils/vector-operations.js → core/utils/vector-operations.ts} +135 -129
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +333 -0
  187. package/db/adapter.ts +215 -0
  188. package/{dist/db/bootstrap.js → db/bootstrap.ts} +388 -418
  189. package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
  190. package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
  191. package/db/drizzle/migrations/meta/_journal.json +13 -0
  192. package/db/drizzle/schema-sqlite.ts +1032 -0
  193. package/db/drizzle/schema.ts +1128 -0
  194. package/db/drizzle.config.ts +12 -0
  195. package/db/index.ts +83 -0
  196. package/db/init.sql +5 -0
  197. package/db/migrations/associations.ts +35 -0
  198. package/db/migrations/beliefs.ts +89 -0
  199. package/db/migrations/core-memory.ts +35 -0
  200. package/db/migrations/fts.ts +59 -0
  201. package/db/migrations/index.ts +54 -0
  202. package/db/migrations/indexes.ts +36 -0
  203. package/db/migrations/learnings.ts +34 -0
  204. package/db/migrations/maintenance.ts +68 -0
  205. package/db/migrations/memories.ts +22 -0
  206. package/db/migrations/memory-places.ts +35 -0
  207. package/db/migrations/places.ts +49 -0
  208. package/db/migrations/projects.ts +21 -0
  209. package/db/migrations/tier-conversion.ts +24 -0
  210. package/db/neon.ts +22 -0
  211. package/db/schema/beliefs.ts +50 -0
  212. package/db/schema/generator.ts +159 -0
  213. package/db/schema/index.ts +58 -0
  214. package/db/schema/learnings.ts +32 -0
  215. package/db/schema/memories.ts +83 -0
  216. package/db/schema/projects.ts +33 -0
  217. package/db/schema.ts +13 -0
  218. package/db/supabase.ts +27 -0
  219. package/mcp.json.example +8 -11
  220. package/package.json +140 -159
  221. package/packages/cli/package.json +22 -0
  222. package/packages/cli/src/commands/clean.ts +68 -0
  223. package/packages/cli/src/commands/context.ts +79 -0
  224. package/packages/cli/src/commands/doctor.ts +357 -0
  225. package/packages/cli/src/commands/forget.ts +72 -0
  226. package/packages/cli/src/commands/health.ts +36 -0
  227. package/packages/cli/src/commands/inspect.ts +41 -0
  228. package/packages/cli/src/commands/link.ts +50 -0
  229. package/packages/cli/src/commands/migrate.ts +93 -0
  230. package/packages/cli/src/commands/recall.ts +99 -0
  231. package/packages/cli/src/commands/recent.ts +57 -0
  232. package/packages/cli/src/commands/remember.ts +139 -0
  233. package/packages/cli/src/commands/run.ts +58 -0
  234. package/packages/cli/src/commands/stale.ts +43 -0
  235. package/packages/cli/src/commands/stats.ts +42 -0
  236. package/packages/cli/src/index.ts +57 -0
  237. package/packages/cli/tsconfig.json +24 -0
  238. package/packages/mcp/package.json +26 -0
  239. package/packages/mcp/src/index.ts +940 -0
  240. package/packages/mcp/tsconfig.json +20 -0
  241. package/skills/squish-memory/SKILL.md +38 -35
  242. package/skills/squish-memory/{scripts/install.sh → install.sh} +1 -1
  243. package/skills/squish-memory/references/claude-desktop.json +12 -0
  244. package/skills/squish-memory/references/openclaw.json +13 -0
  245. package/skills/squish-memory/references/opencode.json +14 -0
  246. package/config/hooks/claude-code-hooks.json +0 -39
  247. package/config/hooks/cursor-hooks.json +0 -30
  248. package/config/hooks/opencode-hooks.json +0 -30
  249. package/config/hooks/windsurf-hooks.json +0 -30
  250. package/config/mcp-cli-fallback-policy.json +0 -22
  251. package/config/mcp.json +0 -38
  252. package/config/plugin-manifest.json +0 -101
  253. package/config/plugin-manifest.schema.json +0 -244
  254. package/config/plugin.json +0 -32
  255. package/config/remote-memory-policy.json +0 -32
  256. package/core/commands/context-paging.md +0 -51
  257. package/core/commands/context-status.md +0 -22
  258. package/core/commands/context.md +0 -5
  259. package/core/commands/core-memory.md +0 -56
  260. package/core/commands/health.md +0 -5
  261. package/core/commands/init.md +0 -39
  262. package/core/commands/merge.md +0 -113
  263. package/core/commands/recall.md +0 -5
  264. package/core/commands/remember.md +0 -11
  265. package/core/commands/search.md +0 -10
  266. package/dist/config.d.ts +0 -83
  267. package/dist/config.js +0 -242
  268. package/dist/core/adapters/config/claude-code.d.ts +0 -45
  269. package/dist/core/adapters/config/claude-code.js +0 -113
  270. package/dist/core/adapters/config/cursor.d.ts +0 -26
  271. package/dist/core/adapters/config/cursor.js +0 -74
  272. package/dist/core/adapters/config/opencode.d.ts +0 -23
  273. package/dist/core/adapters/config/opencode.js +0 -73
  274. package/dist/core/adapters/config/windsurf.d.ts +0 -26
  275. package/dist/core/adapters/config/windsurf.js +0 -74
  276. package/dist/core/adapters/index.d.ts +0 -45
  277. package/dist/core/adapters/index.js +0 -84
  278. package/dist/core/adapters/scripts/install-adapter.d.ts +0 -19
  279. package/dist/core/adapters/scripts/install-adapter.js +0 -149
  280. package/dist/core/adapters/timeline.d.ts +0 -23
  281. package/dist/core/adapters/timeline.js +0 -88
  282. package/dist/core/adapters/types.d.ts +0 -157
  283. package/dist/core/adapters/types.js +0 -50
  284. package/dist/core/algorithms/analytics/token-estimator.d.ts +0 -50
  285. package/dist/core/algorithms/analytics/token-estimator.js +0 -154
  286. package/dist/core/algorithms/detection/hash-filters.d.ts +0 -47
  287. package/dist/core/algorithms/detection/hash-filters.js +0 -190
  288. package/dist/core/algorithms/detection/semantic-ranker.d.ts +0 -32
  289. package/dist/core/algorithms/detection/semantic-ranker.js +0 -118
  290. package/dist/core/algorithms/detection/two-stage-detector.d.ts +0 -52
  291. package/dist/core/algorithms/detection/two-stage-detector.js +0 -299
  292. package/dist/core/algorithms/handlers/approve-merge.d.ts +0 -22
  293. package/dist/core/algorithms/handlers/approve-merge.js +0 -179
  294. package/dist/core/algorithms/handlers/detect-duplicates.d.ts +0 -47
  295. package/dist/core/algorithms/handlers/detect-duplicates.js +0 -145
  296. package/dist/core/algorithms/handlers/get-stats.d.ts +0 -39
  297. package/dist/core/algorithms/handlers/get-stats.js +0 -88
  298. package/dist/core/algorithms/handlers/list-proposals.d.ts +0 -45
  299. package/dist/core/algorithms/handlers/list-proposals.js +0 -83
  300. package/dist/core/algorithms/handlers/preview-merge.d.ts +0 -39
  301. package/dist/core/algorithms/handlers/preview-merge.js +0 -93
  302. package/dist/core/algorithms/handlers/reject-merge.d.ts +0 -28
  303. package/dist/core/algorithms/handlers/reject-merge.js +0 -69
  304. package/dist/core/algorithms/handlers/reverse-merge.d.ts +0 -21
  305. package/dist/core/algorithms/handlers/reverse-merge.js +0 -121
  306. package/dist/core/algorithms/index.d.ts +0 -21
  307. package/dist/core/algorithms/operations/cache-maintenance.d.ts +0 -12
  308. package/dist/core/algorithms/operations/cache-maintenance.js +0 -157
  309. package/dist/core/algorithms/safety/safety-checks.d.ts +0 -22
  310. package/dist/core/algorithms/safety/safety-checks.js +0 -179
  311. package/dist/core/algorithms/strategies/merge-strategies.d.ts +0 -50
  312. package/dist/core/algorithms/strategies/merge-strategies.js +0 -288
  313. package/dist/core/algorithms/types.d.ts +0 -133
  314. package/dist/core/algorithms/types.js +0 -5
  315. package/dist/core/algorithms/utils/response-builder.d.ts +0 -28
  316. package/dist/core/algorithms/utils/response-builder.js +0 -37
  317. package/dist/core/associations.d.ts +0 -31
  318. package/dist/core/associations.js +0 -248
  319. package/dist/core/autosave.d.ts +0 -19
  320. package/dist/core/autosave.js +0 -16
  321. package/dist/core/commands/managed-sync.d.ts +0 -10
  322. package/dist/core/commands/managed-sync.js +0 -64
  323. package/dist/core/commands/mcp-server.d.ts +0 -3
  324. package/dist/core/commands/mcp-server.js +0 -739
  325. package/dist/core/consolidation.d.ts +0 -37
  326. package/dist/core/consolidation.js +0 -248
  327. package/dist/core/context/agent-context.d.ts +0 -106
  328. package/dist/core/context/agent-context.js +0 -274
  329. package/dist/core/context/context-paging.d.ts +0 -80
  330. package/dist/core/context/context-paging.js +0 -328
  331. package/dist/core/context/context-window.d.ts +0 -40
  332. package/dist/core/context/context-window.js +0 -177
  333. package/dist/core/context/context.d.ts +0 -7
  334. package/dist/core/context/context.js +0 -22
  335. package/dist/core/embeddings/google-multimodal.d.ts +0 -14
  336. package/dist/core/embeddings/google-multimodal.js +0 -142
  337. package/dist/core/embeddings/qmd-client.d.ts +0 -136
  338. package/dist/core/embeddings/qmd-client.js +0 -403
  339. package/dist/core/embeddings.d.ts +0 -29
  340. package/dist/core/embeddings.js +0 -454
  341. package/dist/core/error-handling.d.ts +0 -63
  342. package/dist/core/error-handling.js +0 -173
  343. package/dist/core/external-folder/index.d.ts +0 -102
  344. package/dist/core/external-folder/index.js +0 -294
  345. package/dist/core/hooks/agent-hooks.d.ts +0 -74
  346. package/dist/core/hooks/agent-hooks.js +0 -244
  347. package/dist/core/hooks/auto-tagger.d.ts +0 -19
  348. package/dist/core/hooks/auto-tagger.js +0 -155
  349. package/dist/core/hooks/capture-filter.d.ts +0 -41
  350. package/dist/core/hooks/capture-filter.js +0 -128
  351. package/dist/core/index.d.ts +0 -10
  352. package/dist/core/index.js +0 -14
  353. package/dist/core/ingestion/agent-memory.d.ts +0 -22
  354. package/dist/core/ingestion/agent-memory.js +0 -109
  355. package/dist/core/ingestion/core-memory.d.ts +0 -78
  356. package/dist/core/ingestion/core-memory.js +0 -226
  357. package/dist/core/ingestion/learnings.d.ts +0 -57
  358. package/dist/core/ingestion/learnings.js +0 -202
  359. package/dist/core/layers/generator.d.ts +0 -25
  360. package/dist/core/layers/generator.js +0 -76
  361. package/dist/core/lib/db-client.js +0 -130
  362. package/dist/core/lib/schemas.d.ts +0 -129
  363. package/dist/core/lib/utils.d.ts +0 -14
  364. package/dist/core/lib/utils.js +0 -90
  365. package/dist/core/lib/validation.d.ts +0 -38
  366. package/dist/core/lib/validation.js +0 -151
  367. package/dist/core/lifecycle.d.ts +0 -26
  368. package/dist/core/lifecycle.js +0 -302
  369. package/dist/core/local-embeddings.d.ts +0 -11
  370. package/dist/core/logger.d.ts +0 -16
  371. package/dist/core/logger.js +0 -40
  372. package/dist/core/mcp/client.d.ts +0 -17
  373. package/dist/core/mcp/client.js +0 -101
  374. package/dist/core/mcp/index.d.ts +0 -6
  375. package/dist/core/mcp/index.js +0 -6
  376. package/dist/core/mcp/server.d.ts +0 -18
  377. package/dist/core/mcp/server.js +0 -157
  378. package/dist/core/mcp/standalone-server.d.ts +0 -13
  379. package/dist/core/mcp/standalone-server.js +0 -46
  380. package/dist/core/mcp/tools.d.ts +0 -9
  381. package/dist/core/mcp/tools.js +0 -365
  382. package/dist/core/mcp/types.d.ts +0 -315
  383. package/dist/core/mcp/types.js +0 -48
  384. package/dist/core/memory/bridge-discovery.d.ts +0 -50
  385. package/dist/core/memory/bridge-discovery.js +0 -291
  386. package/dist/core/memory/categorizer.d.ts +0 -27
  387. package/dist/core/memory/categorizer.js +0 -305
  388. package/dist/core/memory/conflict-detector.d.ts +0 -7
  389. package/dist/core/memory/conflict-detector.js +0 -43
  390. package/dist/core/memory/consolidation.d.ts +0 -42
  391. package/dist/core/memory/consolidation.js +0 -303
  392. package/dist/core/memory/context-collector.d.ts +0 -10
  393. package/dist/core/memory/context-collector.js +0 -56
  394. package/dist/core/memory/contradiction-resolver.d.ts +0 -40
  395. package/dist/core/memory/contradiction-resolver.js +0 -368
  396. package/dist/core/memory/edit-workflow.d.ts +0 -19
  397. package/dist/core/memory/edit-workflow.js +0 -120
  398. package/dist/core/memory/entity-extractor.d.ts +0 -33
  399. package/dist/core/memory/entity-extractor.js +0 -336
  400. package/dist/core/memory/entity-resolver.d.ts +0 -23
  401. package/dist/core/memory/entity-resolver.js +0 -64
  402. package/dist/core/memory/fact-extractor.d.ts +0 -24
  403. package/dist/core/memory/fact-extractor.js +0 -89
  404. package/dist/core/memory/feedback-tracker.d.ts +0 -12
  405. package/dist/core/memory/feedback-tracker.js +0 -155
  406. package/dist/core/memory/hooks.d.ts +0 -88
  407. package/dist/core/memory/hooks.js +0 -174
  408. package/dist/core/memory/hybrid-retrieval.d.ts +0 -29
  409. package/dist/core/memory/hybrid-retrieval.js +0 -139
  410. package/dist/core/memory/hybrid-scorer.d.ts +0 -40
  411. package/dist/core/memory/hybrid-scorer.js +0 -284
  412. package/dist/core/memory/hybrid-search.d.ts +0 -20
  413. package/dist/core/memory/hybrid-search.js +0 -359
  414. package/dist/core/memory/importance.d.ts +0 -63
  415. package/dist/core/memory/importance.js +0 -298
  416. package/dist/core/memory/index.d.ts +0 -8
  417. package/dist/core/memory/loader.d.ts +0 -31
  418. package/dist/core/memory/loader.js +0 -141
  419. package/dist/core/memory/markdown/markdown-storage.d.ts +0 -72
  420. package/dist/core/memory/markdown/markdown-storage.js +0 -243
  421. package/dist/core/memory/memories.d.ts +0 -47
  422. package/dist/core/memory/memories.js +0 -449
  423. package/dist/core/memory/memory-lifecycle.d.ts +0 -8
  424. package/dist/core/memory/memory-lifecycle.js +0 -55
  425. package/dist/core/memory/memory-manager.d.ts +0 -15
  426. package/dist/core/memory/memory-manager.js +0 -46
  427. package/dist/core/memory/migrate.d.ts +0 -21
  428. package/dist/core/memory/migrate.js +0 -134
  429. package/dist/core/memory/normalization.d.ts +0 -22
  430. package/dist/core/memory/normalization.js +0 -26
  431. package/dist/core/memory/progressive-disclosure.d.ts +0 -43
  432. package/dist/core/memory/progressive-disclosure.js +0 -280
  433. package/dist/core/memory/query-processor.d.ts +0 -21
  434. package/dist/core/memory/query-processor.js +0 -72
  435. package/dist/core/memory/query-rewriter.d.ts +0 -13
  436. package/dist/core/memory/query-rewriter.js +0 -118
  437. package/dist/core/memory/response-analyzer.d.ts +0 -9
  438. package/dist/core/memory/response-analyzer.js +0 -61
  439. package/dist/core/memory/serialization.d.ts +0 -10
  440. package/dist/core/memory/serialization.js +0 -84
  441. package/dist/core/memory/stats.d.ts +0 -22
  442. package/dist/core/memory/stats.js +0 -138
  443. package/dist/core/memory/telemetry.d.ts +0 -69
  444. package/dist/core/memory/telemetry.js +0 -313
  445. package/dist/core/memory/temporal-facts.d.ts +0 -41
  446. package/dist/core/memory/temporal-facts.js +0 -283
  447. package/dist/core/memory/temporal-parser.d.ts +0 -32
  448. package/dist/core/memory/temporal-parser.js +0 -385
  449. package/dist/core/memory/trigger-detector.d.ts +0 -14
  450. package/dist/core/memory/trigger-detector.js +0 -42
  451. package/dist/core/memory/write-gate.d.ts +0 -54
  452. package/dist/core/memory/write-gate.js +0 -210
  453. package/dist/core/namespaces/index.d.ts +0 -71
  454. package/dist/core/namespaces/index.js +0 -305
  455. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  456. package/dist/core/namespaces/uri-parser.js +0 -74
  457. package/dist/core/obsidian-vault.d.ts +0 -30
  458. package/dist/core/obsidian-vault.js +0 -94
  459. package/dist/core/places/index.d.ts +0 -14
  460. package/dist/core/places/memory-places.d.ts +0 -68
  461. package/dist/core/places/memory-places.js +0 -261
  462. package/dist/core/places/places.d.ts +0 -88
  463. package/dist/core/places/places.js +0 -314
  464. package/dist/core/places/rules.d.ts +0 -74
  465. package/dist/core/places/rules.js +0 -240
  466. package/dist/core/places/walking.d.ts +0 -56
  467. package/dist/core/places/walking.js +0 -121
  468. package/dist/core/projects.d.ts +0 -17
  469. package/dist/core/projects.js +0 -108
  470. package/dist/core/redis.d.ts +0 -11
  471. package/dist/core/redis.js +0 -69
  472. package/dist/core/responses.d.ts +0 -96
  473. package/dist/core/responses.js +0 -122
  474. package/dist/core/scheduler/cron-scheduler.d.ts +0 -32
  475. package/dist/core/scheduler/cron-scheduler.js +0 -332
  476. package/dist/core/scheduler/heartbeat.d.ts +0 -11
  477. package/dist/core/scheduler/heartbeat.js +0 -73
  478. package/dist/core/scheduler/index.d.ts +0 -8
  479. package/dist/core/scheduler/job-runner.d.ts +0 -11
  480. package/dist/core/scheduler/job-runner.js +0 -164
  481. package/dist/core/search/conversations.d.ts +0 -25
  482. package/dist/core/search/conversations.js +0 -110
  483. package/dist/core/search/entities.d.ts +0 -12
  484. package/dist/core/search/entities.js +0 -31
  485. package/dist/core/search/folder-context.d.ts +0 -25
  486. package/dist/core/search/folder-context.js +0 -119
  487. package/dist/core/search/graph-boost.d.ts +0 -7
  488. package/dist/core/search/graph-boost.js +0 -23
  489. package/dist/core/search/index.d.ts +0 -4
  490. package/dist/core/search/qmd-search.d.ts +0 -61
  491. package/dist/core/search/qmd-search.js +0 -178
  492. package/dist/core/security/encrypt.d.ts +0 -6
  493. package/dist/core/security/encrypt.js +0 -47
  494. package/dist/core/security/governance.d.ts +0 -26
  495. package/dist/core/security/governance.js +0 -79
  496. package/dist/core/security/privacy.d.ts +0 -23
  497. package/dist/core/security/privacy.js +0 -82
  498. package/dist/core/security/secret-detector.d.ts +0 -32
  499. package/dist/core/security/secret-detector.js +0 -88
  500. package/dist/core/session/auto-load.d.ts +0 -6
  501. package/dist/core/session/auto-load.js +0 -119
  502. package/dist/core/session/index.d.ts +0 -7
  503. package/dist/core/session/self-iteration-job.d.ts +0 -20
  504. package/dist/core/session/self-iteration-job.js +0 -282
  505. package/dist/core/session/session-hooks.d.ts +0 -18
  506. package/dist/core/session/session-hooks.js +0 -58
  507. package/dist/core/session/types.d.ts +0 -26
  508. package/dist/core/session/types.js +0 -10
  509. package/dist/core/session-hooks/self-iteration-job.d.ts +0 -20
  510. package/dist/core/session-hooks/self-iteration-job.js +0 -282
  511. package/dist/core/session-hooks/session-hooks.d.ts +0 -18
  512. package/dist/core/session-hooks/session-hooks.js +0 -58
  513. package/dist/core/snapshots/cleanup.d.ts +0 -9
  514. package/dist/core/snapshots/comparison.d.ts +0 -19
  515. package/dist/core/snapshots/comparison.js +0 -43
  516. package/dist/core/snapshots/creation.d.ts +0 -19
  517. package/dist/core/snapshots/creation.js +0 -126
  518. package/dist/core/snapshots/retrieval.d.ts +0 -7
  519. package/dist/core/snapshots/retrieval.js +0 -41
  520. package/dist/core/snapshots/stats.d.ts +0 -11
  521. package/dist/core/snapshots/stats.js +0 -52
  522. package/dist/core/snapshots.d.ts +0 -29
  523. package/dist/core/snapshots.js +0 -220
  524. package/dist/core/storage/cache.d.ts +0 -13
  525. package/dist/core/storage/cache.js +0 -202
  526. package/dist/core/storage/database.d.ts +0 -12
  527. package/dist/core/storage/database.js +0 -12
  528. package/dist/core/summarization/cleanup.d.ts +0 -9
  529. package/dist/core/summarization/queries.d.ts +0 -9
  530. package/dist/core/summarization/queries.js +0 -28
  531. package/dist/core/summarization/stats.d.ts +0 -14
  532. package/dist/core/summarization/stats.js +0 -52
  533. package/dist/core/summarization/strategies.d.ts +0 -24
  534. package/dist/core/summarization/strategies.js +0 -28
  535. package/dist/core/summarization.d.ts +0 -37
  536. package/dist/core/summarization.js +0 -188
  537. package/dist/core/sync/qmd-sync.d.ts +0 -94
  538. package/dist/core/sync/qmd-sync.js +0 -201
  539. package/dist/core/temporal-facts.d.ts +0 -54
  540. package/dist/core/temporal-facts.js +0 -193
  541. package/dist/core/toon.d.ts +0 -43
  542. package/dist/core/toon.js +0 -160
  543. package/dist/core/tracing/collector.d.ts +0 -111
  544. package/dist/core/tracing/collector.js +0 -350
  545. package/dist/core/tracing/visualizer.d.ts +0 -32
  546. package/dist/core/tracing/visualizer.js +0 -165
  547. package/dist/core/utils/cleanup-operations.d.ts +0 -13
  548. package/dist/core/utils/cleanup-operations.js +0 -44
  549. package/dist/core/utils/content-extraction.d.ts +0 -19
  550. package/dist/core/utils/content-extraction.js +0 -75
  551. package/dist/core/utils/filter-builder.d.ts +0 -13
  552. package/dist/core/utils/filter-builder.js +0 -44
  553. package/dist/core/utils/history-traversal.d.ts +0 -13
  554. package/dist/core/utils/history-traversal.js +0 -50
  555. package/dist/core/utils/memory-operations.d.ts +0 -17
  556. package/dist/core/utils/memory-operations.js +0 -43
  557. package/dist/core/utils/query-operations.d.ts +0 -18
  558. package/dist/core/utils/query-operations.js +0 -65
  559. package/dist/core/utils/summarization-helpers.d.ts +0 -21
  560. package/dist/core/utils/summarization-helpers.js +0 -38
  561. package/dist/core/utils/temporal-queries.d.ts +0 -13
  562. package/dist/core/utils/temporal-queries.js +0 -27
  563. package/dist/core/utils/vector-operations.d.ts +0 -71
  564. package/dist/core/utils/version-management.d.ts +0 -9
  565. package/dist/core/utils/version-management.js +0 -61
  566. package/dist/core/worker.d.ts +0 -82
  567. package/dist/core/worker.js +0 -272
  568. package/dist/db/adapter.d.ts +0 -7
  569. package/dist/db/adapter.js +0 -175
  570. package/dist/db/bootstrap.d.ts +0 -9
  571. package/dist/db/drizzle/schema-sqlite.d.ts +0 -4837
  572. package/dist/db/drizzle/schema-sqlite.js +0 -684
  573. package/dist/db/drizzle/schema.d.ts +0 -4082
  574. package/dist/db/drizzle/schema.js +0 -770
  575. package/dist/db/drizzle.config.d.ts +0 -3
  576. package/dist/db/drizzle.config.js +0 -12
  577. package/dist/db/index.d.ts +0 -7
  578. package/dist/db/index.js +0 -89
  579. package/dist/db/neon.d.ts +0 -8
  580. package/dist/db/neon.js +0 -20
  581. package/dist/db/schema/index.d.ts +0 -40
  582. package/dist/db/schema/index.js +0 -105
  583. package/dist/db/schema/tables/context-sessions.d.ts +0 -9
  584. package/dist/db/schema/tables/context-sessions.js +0 -37
  585. package/dist/db/schema/tables/conversations.d.ts +0 -9
  586. package/dist/db/schema/tables/conversations.js +0 -47
  587. package/dist/db/schema/tables/core-memory.d.ts +0 -9
  588. package/dist/db/schema/tables/core-memory.js +0 -41
  589. package/dist/db/schema/tables/entities.d.ts +0 -9
  590. package/dist/db/schema/tables/entities.js +0 -39
  591. package/dist/db/schema/tables/entity-relations.d.ts +0 -9
  592. package/dist/db/schema/tables/entity-relations.js +0 -31
  593. package/dist/db/schema/tables/learnings.d.ts +0 -9
  594. package/dist/db/schema/tables/learnings.js +0 -66
  595. package/dist/db/schema/tables/memories.d.ts +0 -9
  596. package/dist/db/schema/tables/memories.js +0 -161
  597. package/dist/db/schema/tables/memory-associations.d.ts +0 -9
  598. package/dist/db/schema/tables/memory-associations.js +0 -39
  599. package/dist/db/schema/tables/memory-hash-cache.d.ts +0 -9
  600. package/dist/db/schema/tables/memory-hash-cache.js +0 -29
  601. package/dist/db/schema/tables/memory-merge-history.d.ts +0 -9
  602. package/dist/db/schema/tables/memory-merge-history.js +0 -33
  603. package/dist/db/schema/tables/memory-merge-proposals.d.ts +0 -9
  604. package/dist/db/schema/tables/memory-merge-proposals.js +0 -39
  605. package/dist/db/schema/tables/messages.d.ts +0 -9
  606. package/dist/db/schema/tables/messages.js +0 -41
  607. package/dist/db/schema/tables/namespaces.d.ts +0 -9
  608. package/dist/db/schema/tables/namespaces.js +0 -37
  609. package/dist/db/schema/tables/projects.d.ts +0 -9
  610. package/dist/db/schema/tables/projects.js +0 -31
  611. package/dist/db/schema/tables/users.d.ts +0 -9
  612. package/dist/db/schema/tables/users.js +0 -27
  613. package/dist/db/schema.d.ts +0 -3
  614. package/dist/db/schema.js +0 -11
  615. package/dist/db/supabase.d.ts +0 -9
  616. package/dist/db/supabase.js +0 -24
  617. package/dist/index.d.ts +0 -7
  618. package/dist/index.js +0 -1677
  619. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  620. package/dist/webui/server.d.ts +0 -5
  621. package/dist/webui/server.js +0 -642
  622. package/generated/mcp/manifest.json +0 -23
  623. package/generated/mcp/mcp-servers.json +0 -25
  624. package/generated/mcp/mcporter.json +0 -34
  625. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  626. package/generated/mcp/runtime.json +0 -12
  627. package/scripts/README.md +0 -60
  628. package/scripts/build-release.sh +0 -36
  629. package/scripts/check-secrets.js +0 -132
  630. package/scripts/copy-runtime-assets.mjs +0 -26
  631. package/scripts/generate-mcp.mjs +0 -264
  632. package/scripts/github-release.sh +0 -77
  633. package/scripts/init-dirs.mjs +0 -13
  634. package/scripts/install-claude-code.sh +0 -85
  635. package/scripts/install-cursor.sh +0 -56
  636. package/scripts/install-hooks.sh +0 -73
  637. package/scripts/install-interactive.mjs +0 -357
  638. package/scripts/install-opencode.sh +0 -75
  639. package/scripts/install-plugin.mjs +0 -415
  640. package/scripts/install-windsurf.sh +0 -67
  641. package/scripts/remote-preflight.mjs +0 -62
  642. package/scripts/squish-fallback.mjs +0 -132
  643. package/scripts/test-interactive.mjs +0 -131
  644. package/scripts/verify-mcp.mjs +0 -214
  645. package/skills/squish-memory/scripts/install.mjs +0 -335
  646. package/skills/squish-memory/write_skill.js +0 -2
Binary file
@@ -1,5 +0,0 @@
1
- import type { Server } from 'node:http';
2
- declare const app: import("express-serve-static-core").Express;
3
- export declare function startWebServer(): Promise<Server>;
4
- export default app;
5
- //# sourceMappingURL=server.d.ts.map
@@ -1,642 +0,0 @@
1
- import express from 'express';
2
- import cors from 'cors';
3
- import rateLimit from 'express-rate-limit';
4
- import { logger } from '../core/logger.js';
5
- import { getRecent } from '../core/memory/memories.js';
6
- import { getObservations } from '../core/ingestion/learnings.js';
7
- import { getAllProjects, requireProject } from '../core/projects.js';
8
- import { checkDatabaseHealth } from '../db/index.js';
9
- import { config } from '../config.js';
10
- import { isDatabaseUnavailableError } from '../core/lib/utils.js';
11
- import { validateLimit } from '../core/lib/validation.js';
12
- const app = express();
13
- const PORT = Number(process.env.SQUISH_WEB_PORT || 37777);
14
- const VERSION = '1.1.5';
15
- const allowedOrigins = process.env.SQUISH_CORS_ORIGINS?.split(',').map(s => s.trim()) || ['http://localhost:*', 'http://127.0.0.1:*'];
16
- const appCors = cors({
17
- origin: (origin, callback) => {
18
- if (!origin || allowedOrigins.some(allowed => {
19
- if (allowed.endsWith(':*')) {
20
- const prefix = allowed.slice(0, -1);
21
- return origin.startsWith(prefix);
22
- }
23
- return origin === allowed;
24
- })) {
25
- callback(null, true);
26
- }
27
- else {
28
- callback(new Error('Not allowed by CORS'));
29
- }
30
- }
31
- });
32
- const limiter = rateLimit({
33
- windowMs: 15 * 60 * 1000,
34
- max: 100,
35
- message: { error: 'Too many requests, please try again later.' },
36
- standardHeaders: true,
37
- legacyHeaders: false,
38
- });
39
- app.use(appCors);
40
- app.use(limiter);
41
- app.use(express.json());
42
- // Health check endpoint
43
- app.get('/api/health', async (req, res) => {
44
- let dbStatus = 'error';
45
- let projectInfo = null;
46
- let allProjects = [];
47
- let errorMessage = null;
48
- try {
49
- const healthy = await checkDatabaseHealth();
50
- dbStatus = healthy ? 'ok' : 'error';
51
- if (healthy) {
52
- allProjects = await getAllProjects();
53
- if (allProjects.length > 0) {
54
- projectInfo = { id: allProjects[0].id, name: allProjects[0].name, path: allProjects[0].path };
55
- }
56
- }
57
- }
58
- catch (error) {
59
- errorMessage = error.message;
60
- if (!isDatabaseUnavailableError(error)) {
61
- logger.error('Health check failed:', error.message);
62
- }
63
- }
64
- res.json({
65
- ok: dbStatus === 'ok',
66
- status: dbStatus,
67
- version: VERSION,
68
- database: dbStatus,
69
- cache: config.redisEnabled ? 'configured' : 'unavailable',
70
- dataDirectory: config.dataDir,
71
- project: projectInfo || { id: 'unknown', name: 'No Project', path: '' },
72
- projects: allProjects,
73
- error: errorMessage,
74
- timestamp: new Date().toISOString()
75
- });
76
- });
77
- // Get recent memories
78
- app.get('/api/memories', async (req, res) => {
79
- try {
80
- const projectPath = req.query.projectPath || process.cwd();
81
- const limit = validateLimit(req.query.limit, 20, 1, 100);
82
- const project = await requireProject(projectPath);
83
- const memories = await getRecent(projectPath, limit);
84
- res.json({
85
- status: 'ok',
86
- data: memories,
87
- count: memories.length,
88
- project: { id: project.id, name: project.name, path: project.path }
89
- });
90
- }
91
- catch (error) {
92
- if (!isDatabaseUnavailableError(error)) {
93
- logger.error('Failed to get memories:', error.message);
94
- }
95
- res.status(isDatabaseUnavailableError(error) ? 503 : 500).json({ status: 'error', message: error.message });
96
- }
97
- });
98
- // Get observations for project
99
- app.get('/api/observations', async (req, res) => {
100
- try {
101
- const projectPath = req.query.projectPath || process.cwd();
102
- const limit = validateLimit(req.query.limit, 20, 1, 100);
103
- const project = await requireProject(projectPath);
104
- const observations = await getObservations(projectPath, limit);
105
- res.json({
106
- status: 'ok',
107
- data: observations,
108
- count: observations.length,
109
- project: { id: project.id, name: project.name, path: project.path }
110
- });
111
- }
112
- catch (error) {
113
- if (!isDatabaseUnavailableError(error)) {
114
- logger.error('Failed to get observations:', error.message);
115
- }
116
- res.status(isDatabaseUnavailableError(error) ? 503 : 500).json({ status: 'error', message: error.message });
117
- }
118
- });
119
- // Get project context
120
- app.get('/api/context', async (req, res) => {
121
- try {
122
- // Get all projects and use first one as default if no projectPath specified
123
- const allProjects = await getAllProjects();
124
- let projectPath = req.query.projectPath;
125
- // If no projectPath provided, use the first project from database
126
- if (!projectPath && allProjects.length > 0) {
127
- projectPath = allProjects[0].path;
128
- }
129
- if (!projectPath) {
130
- return res.json({
131
- status: 'ok',
132
- project: { id: 'unknown', name: 'No Project', path: '' },
133
- projects: allProjects,
134
- memories: [],
135
- observations: [],
136
- totalCount: 0,
137
- message: 'No projects found in database'
138
- });
139
- }
140
- const project = await requireProject(projectPath);
141
- const memories = await getRecent(projectPath, 20);
142
- const observations = await getObservations(projectPath, 20);
143
- res.json({
144
- status: 'ok',
145
- project: { id: project.id, name: project.name, path: project.path },
146
- projects: allProjects,
147
- memories: memories,
148
- observations: observations,
149
- totalCount: memories.length + observations.length
150
- });
151
- }
152
- catch (error) {
153
- if (!isDatabaseUnavailableError(error)) {
154
- logger.error('Failed to get context:', error.message);
155
- }
156
- res.status(isDatabaseUnavailableError(error) ? 503 : 500).json({ status: 'error', message: error.message });
157
- }
158
- });
159
- // Get all projects
160
- app.get('/api/projects', async (req, res) => {
161
- try {
162
- const projects = await getAllProjects();
163
- res.json({
164
- status: 'ok',
165
- data: projects,
166
- count: projects.length
167
- });
168
- }
169
- catch (error) {
170
- if (!isDatabaseUnavailableError(error)) {
171
- logger.error('Failed to get projects:', error.message);
172
- }
173
- res.status(isDatabaseUnavailableError(error) ? 503 : 500).json({ status: 'error', message: error.message });
174
- }
175
- });
176
- // Web UI
177
- app.get('/', (req, res) => {
178
- const html = `<!DOCTYPE html>
179
- <html class="dark" lang="en"><head>
180
- <meta charset="utf-8"/>
181
- <meta content="width=device-width, initial-scale=1.0" name="viewport"/>
182
- <title>Squish Memory Viewer - Playful Dashboard</title>
183
- <link href="https://fonts.googleapis.com" rel="preconnect"/>
184
- <link crossorigin="" href="https://fonts.gstatic.com" rel="preconnect"/>
185
- <link href="https://fonts.googleapis.com/css2?family=Spline+Sans:wght@300;400;500;600;700;800&amp;display=swap" rel="stylesheet"/>
186
- <link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&amp;display=swap" rel="stylesheet"/>
187
- <script src="https://cdn.tailwindcss.com?plugins=forms,container-queries"></script>
188
- <script id="tailwind-config">
189
- tailwind.config = {
190
- darkMode: "class",
191
- theme: {
192
- extend: {
193
- colors: {
194
- "primary": "#00ffbf",
195
- "secondary": "#ff6392",
196
- "accent": "#ffcd26",
197
- "background-dark": "#0f172a",
198
- "card-bg": "#1e293b",
199
- "text-main": "#f8fafc",
200
- "text-muted": "#94a3b8",
201
- "alert-orange": "rgba(251, 146, 60, 0.1)"
202
- },
203
- fontFamily: {
204
- "display": ["Spline Sans", "sans-serif"]
205
- },
206
- borderRadius: {
207
- "pill": "2.5rem",
208
- "blob": "30% 70% 70% 30% / 30% 30% 70% 70%"
209
- }
210
- },
211
- },
212
- }
213
- </script>
214
- <style type="text/tailwindcss">
215
- @layer base {
216
- body { @apply font-display text-text-main bg-background-dark antialiased; }
217
- }
218
- .squish-pill {
219
- border-radius: 3rem;
220
- }
221
- .blob-alert {
222
- border-radius: 40% 60% 70% 30% / 40% 50% 60% 50%;
223
- }
224
- .squishy-hover {
225
- transition: transform 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275);
226
- }
227
- .squishy-hover:hover {
228
- transform: scale(1.02) translateY(-4px);
229
- }
230
- .pulse-red {
231
- animation: pulse 2s infinite;
232
- }
233
- @keyframes pulse {
234
- 0% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(239, 68, 68, 0.7); }
235
- 70% { transform: scale(1); box-shadow: 0 0 0 10px rgba(239, 68, 68, 0); }
236
- 100% { transform: scale(0.95); box-shadow: 0 0 0 0 rgba(239, 68, 68, 0); }
237
- }
238
- </style>
239
- </head>
240
- <body class="min-h-screen selection:bg-primary/30 pb-20">
241
- <header class="w-full px-6 py-8">
242
- <div class="max-w-6xl mx-auto flex items-center justify-between">
243
- <div class="flex items-center gap-4">
244
- <div class="relative size-12 flex items-center justify-center">
245
- <div class="absolute inset-0 bg-secondary/20 blur-xl rounded-full"></div>
246
- <span class="material-symbols-outlined text-secondary text-5xl relative z-10">psychology</span>
247
- </div>
248
- <h1 class="text-3xl font-black tracking-tight flex items-center gap-2">
249
- Squish <span class="text-primary italic">Memory Viewer</span>
250
- </h1>
251
- </div>
252
- <div class="flex items-center gap-4">
253
- <select id="project-select" onchange="changeProject(this.value)" class="bg-card-bg px-4 py-2 rounded-full border-2 border-slate-700/50 text-text-main text-sm font-medium focus:outline-none focus:border-primary">
254
- <option value="">Loading projects...</option>
255
- </select>
256
- <div class="bg-card-bg px-4 py-2 rounded-full border-2 border-slate-700/50 flex items-center gap-2">
257
- <div class="size-2 rounded-full bg-primary animate-pulse"></div>
258
- <span class="text-xs font-bold uppercase tracking-widest text-text-muted">Local Server: Online</span>
259
- </div>
260
- </div>
261
- </div>
262
- </header>
263
- <main class="max-w-6xl mx-auto px-6 space-y-12">
264
- <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-6">
265
- <div class="bg-card-bg p-8 squish-pill border-2 border-slate-700/30 text-center squishy-hover shadow-xl">
266
- <p class="text-4xl font-black mb-1" id="memories-count">-</p>
267
- <p class="text-sm font-bold uppercase tracking-widest text-text-muted italic">Memories</p>
268
- </div>
269
- <div class="bg-card-bg p-8 squish-pill border-2 border-slate-700/30 text-center squishy-hover shadow-xl">
270
- <p class="text-4xl font-black mb-1" id="observations-count">-</p>
271
- <p class="text-sm font-bold uppercase tracking-widest text-text-muted italic">Observations</p>
272
- </div>
273
- <div class="bg-card-bg p-8 squish-pill border-2 border-slate-700/30 text-center squishy-hover shadow-xl">
274
- <p class="text-4xl font-black mb-1" id="total-count">-</p>
275
- <p class="text-sm font-bold uppercase tracking-widest text-text-muted italic">Total Items</p>
276
- </div>
277
- <div class="bg-card-bg p-8 squish-pill border-2 border-slate-700/30 flex flex-col items-center justify-center squishy-hover shadow-xl">
278
- <div class="flex items-center gap-3">
279
- <div class="size-4 bg-red-500 rounded-full pulse-red"></div>
280
- <p class="text-2xl font-black text-red-400 italic">Error</p>
281
- </div>
282
- <p class="text-sm font-bold uppercase tracking-widest text-text-muted italic mt-1">Status</p>
283
- </div>
284
- </div>
285
- <div class="relative py-6 px-10 bg-orange-500/10 border-2 border-orange-500/20 blob-alert flex items-center gap-6 overflow-hidden">
286
- <div class="absolute top-0 left-0 w-full h-full bg-orange-500/5 -z-10"></div>
287
- <span class="material-symbols-outlined text-orange-400 text-3xl">warning</span>
288
- <div>
289
- <h4 class="font-black text-orange-400 italic uppercase text-sm tracking-wider">Communication Breakdown</h4>
290
- <p class="text-orange-200/80 font-medium">Failed to load data: Unknown error. Is the blob server running?</p>
291
- </div>
292
- </div>
293
- <div class="grid grid-cols-1 lg:grid-cols-2 gap-12">
294
- <section class="space-y-6">
295
- <div class="flex items-center gap-4 border-b-4 border-primary/20 pb-4">
296
- <div class="size-10 bg-primary/20 rounded-full flex items-center justify-center border-2 border-primary">
297
- <span class="material-symbols-outlined text-primary font-bold">neurology</span>
298
- </div>
299
- <h2 class="text-2xl font-black italic text-primary uppercase">Recent Memories</h2>
300
- </div>
301
- <div class="space-y-4" id="memories">
302
- <div class="bg-card-bg/50 p-6 rounded-3xl border-2 border-slate-700/20 flex flex-col items-center justify-center py-16 opacity-60">
303
- <div class="size-12 border-4 border-primary border-t-transparent rounded-full animate-spin mb-4"></div>
304
- <p class="font-black italic text-text-muted">Loading memories...</p>
305
- </div>
306
- </div>
307
- </section>
308
- <section class="space-y-6">
309
- <div class="flex items-center gap-4 border-b-4 border-primary/20 pb-4">
310
- <div class="size-10 bg-primary/20 rounded-full flex items-center justify-center border-2 border-primary">
311
- <span class="material-symbols-outlined text-primary font-bold">visibility</span>
312
- </div>
313
- <h2 class="text-2xl font-black italic text-primary uppercase">Recent Observations</h2>
314
- </div>
315
- <div class="space-y-4" id="observations">
316
- <div class="bg-card-bg/50 p-6 rounded-3xl border-2 border-slate-700/20 flex flex-col items-center justify-center py-16 opacity-60">
317
- <div class="size-12 border-4 border-primary border-t-transparent rounded-full animate-spin mb-4"></div>
318
- <p class="font-black italic text-text-muted">Loading observations...</p>
319
- </div>
320
- </div>
321
- </section>
322
- </div>
323
- <div class="pt-12 flex justify-center">
324
- <div class="bg-card-bg border-4 border-slate-700/50 p-2 rounded-full flex gap-2">
325
- <button class="bg-primary text-black px-8 py-3 rounded-full font-black text-sm uppercase hover:scale-105 transition-transform flex items-center gap-2">
326
- <span class="material-symbols-outlined text-sm">refresh</span>
327
- Reconnect
328
- </button>
329
- <button class="text-text-main px-8 py-3 rounded-full font-black text-sm uppercase hover:bg-slate-700/50 transition-colors" onclick="openDocs()">
330
- Docs
331
- </button>
332
- <button class="text-text-main px-8 py-3 rounded-full font-black text-sm uppercase hover:bg-slate-700/50 transition-colors" onclick="openSettings()">
333
- Settings
334
- </button>
335
- </div>
336
- </div>
337
- </main>
338
- <footer class="mt-20 px-6 opacity-30">
339
- <div class="max-w-6xl mx-auto flex justify-between items-center py-8 border-t border-slate-700">
340
- <p class="text-xs font-black uppercase">© 2026 Squish-Memory Dashboard</p>
341
- <div class="flex gap-4">
342
- <span class="material-symbols-outlined text-sm">database</span>
343
- <span class="text-xs font-black uppercase italic">Local-First Engine v1.0</span>
344
- </div>
345
- </div>
346
- </footer>
347
- <script>
348
- let currentProjectPath = null;
349
-
350
- async function loadProjects() {
351
- try {
352
- const response = await fetch('/api/projects');
353
- const data = await response.json();
354
-
355
- if (data.status === 'ok' && data.data && data.data.length > 0) {
356
- const select = document.getElementById('project-select');
357
- if (select) {
358
- select.innerHTML = data.data.map(function(p) {
359
- return '<option value="' + escapeHtml(p.path) + '">' + escapeHtml(p.name || p.path) + '</option>';
360
- }).join('');
361
-
362
- // Try to select current directory
363
- const cwd = window.location.pathname === '/' ? '' : window.location.pathname;
364
- const defaultProject = data.data.find(function(p) { return p.path === cwd; }) || data.data[0];
365
- if (defaultProject) {
366
- currentProjectPath = defaultProject.path;
367
- select.value = defaultProject.path;
368
- }
369
- }
370
- } else {
371
- // No projects yet, use current directory
372
- currentProjectPath = window.location.pathname === '/' ? '' : window.location.pathname;
373
- }
374
- } catch (error) {
375
- console.error('Failed to load projects:', error);
376
- currentProjectPath = '';
377
- }
378
- }
379
-
380
- async function loadData() {
381
- try {
382
- const url = currentProjectPath ? '/api/context?projectPath=' + encodeURIComponent(currentProjectPath) : '/api/context';
383
- const response = await fetch(url);
384
- const data = await response.json();
385
-
386
- if (data.status === 'ok') {
387
- document.getElementById('memories-count').textContent = data.memories ? data.memories.length : 0;
388
- document.getElementById('observations-count').textContent = data.observations ? data.observations.length : 0;
389
- document.getElementById('total-count').textContent = data.totalCount || 0;
390
- updateStatus(data.memories && data.observations ? 'ok' : 'error');
391
-
392
- renderMemories(data.memories || []);
393
- renderObservations(data.observations || []);
394
-
395
- // Update project info
396
- if (data.project) {
397
- const projectInfo = document.getElementById('project-info');
398
- if (projectInfo) {
399
- projectInfo.textContent = data.project.name || data.project.path || 'Unknown';
400
- }
401
- }
402
-
403
- // Hide error alert if data loaded
404
- const errorAlert = document.querySelector('.blob-alert');
405
- if (errorAlert && (data.memories && data.memories.length > 0 || data.observations && data.observations.length > 0)) {
406
- errorAlert.style.display = 'none';
407
- }
408
-
409
- // Show error alert if message present
410
- if (data.message) {
411
- const errorAlert = document.querySelector('.blob-alert');
412
- if (errorAlert) {
413
- errorAlert.querySelector('p').textContent = data.message;
414
- errorAlert.style.display = 'flex';
415
- }
416
- }
417
- } else {
418
- throw new Error('API returned error status');
419
- }
420
- } catch (error) {
421
- updateStatus('error');
422
-
423
- // Show error alert
424
- const errorAlert = document.querySelector('.blob-alert');
425
- if (errorAlert) errorAlert.style.display = 'flex';
426
- }
427
- }
428
-
429
- function renderMemories(memories) {
430
- const container = document.getElementById('memories');
431
- if (!memories || memories.length === 0) {
432
- container.innerHTML = '<div class="bg-card-bg/50 p-6 rounded-3xl border-2 border-slate-700/20 flex flex-col items-center justify-center py-16 opacity-60"><p class="font-black italic text-text-muted">No memories found</p></div>';
433
- return;
434
- }
435
-
436
- container.innerHTML = memories.map(function(memory) {
437
- return '<div class="bg-card-bg p-6 rounded-3xl border-2 border-slate-700/20 squishy-hover">' +
438
- '<div class="flex items-start justify-between mb-4">' +
439
- '<span class="bg-primary text-black px-3 py-1 rounded-full text-xs font-bold uppercase">' + (memory.type || 'memory') + '</span>' +
440
- '<span class="text-text-muted text-sm">' + formatTime(memory.createdAt) + '</span>' +
441
- '</div>' +
442
- '<div class="text-text-main mb-4">' + escapeHtml(memory.content || memory.text || '') + '</div>' +
443
- '<div class="text-text-muted text-sm">' +
444
- 'Tags: ' + (memory.tags ? memory.tags.join(', ') : 'none') +
445
- '</div>' +
446
- '</div>';
447
- }).join('');
448
- }
449
-
450
- function renderObservations(observations) {
451
- const container = document.getElementById('observations');
452
- if (!observations || observations.length === 0) {
453
- container.innerHTML = '<div class="bg-card-bg/50 p-6 rounded-3xl border-2 border-slate-700/20 flex flex-col items-center justify-center py-16 opacity-60"><p class="font-black italic text-text-muted">No observations found</p></div>';
454
- return;
455
- }
456
-
457
- container.innerHTML = observations.map(function(obs) {
458
- return '<div class="bg-card-bg p-6 rounded-3xl border-2 border-slate-700/20 squishy-hover">' +
459
- '<div class="flex items-start justify-between mb-4">' +
460
- '<span class="bg-secondary text-black px-3 py-1 rounded-full text-xs font-bold uppercase">' + (obs.type || 'observation') + '</span>' +
461
- '<span class="text-text-muted text-sm">' + formatTime(obs.createdAt) + '</span>' +
462
- '</div>' +
463
- '<div class="text-text-main mb-4">' + escapeHtml(obs.summary || obs.content || '') + '</div>' +
464
- '<div class="text-text-muted text-sm">' +
465
- 'Action: ' + (obs.action || 'none') + ' | ' +
466
- 'Target: ' + (obs.target || 'none') +
467
- '</div>' +
468
- '</div>';
469
- }).join('');
470
- }
471
-
472
- function updateStatus(status) {
473
- const statusCard = document.querySelector('.squishy-hover.flex-col');
474
- if (!statusCard) return;
475
-
476
- if (status === 'ok') {
477
- statusCard.innerHTML = '<div class="flex items-center gap-3">' +
478
- '<div class="size-4 bg-primary rounded-full animate-pulse"></div>' +
479
- '<p class="text-2xl font-black text-primary italic">OK</p>' +
480
- '</div>' +
481
- '<p class="text-sm font-bold uppercase tracking-widest text-text-muted italic mt-1">Status</p>';
482
- } else {
483
- statusCard.innerHTML = '<div class="flex items-center gap-3">' +
484
- '<div class="size-4 bg-red-500 rounded-full pulse-red"></div>' +
485
- '<p class="text-2xl font-black text-red-400 italic">Error</p>' +
486
- '</div>' +
487
- '<p class="text-sm font-bold uppercase tracking-widest text-text-muted italic mt-1">Status</p>';
488
- }
489
- }
490
-
491
- function formatTime(timestamp) {
492
- if (!timestamp) return 'Unknown';
493
- const date = new Date(timestamp);
494
- return date.toLocaleString();
495
- }
496
-
497
- function escapeHtml(text) {
498
- const div = document.createElement('div');
499
- div.textContent = text;
500
- return div.innerHTML;
501
- }
502
-
503
- function openDocs() {
504
- // Create and show documentation modal
505
- const modal = document.createElement('div');
506
- modal.className = 'fixed inset-0 bg-black/50 flex items-center justify-center z-50';
507
- modal.innerHTML = '<div class="bg-card-bg p-8 rounded-3xl border-2 border-slate-700/50 max-w-2xl w-full mx-4 max-h-[80vh] overflow-y-auto">' +
508
- '<div class="flex justify-between items-center mb-6">' +
509
- '<h2 class="text-2xl font-black text-primary italic">Documentation</h2>' +
510
- '<button onclick="closeModal(this)" class="text-text-muted hover:text-text-main text-2xl">&times;</button>' +
511
- '</div>' +
512
- '<div class="space-y-4 text-text-main">' +
513
- '<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
514
- '<h3 class="font-bold text-primary mb-2">🧠 Memory System</h3>' +
515
- '<p class="text-sm">The Squish Memory Plugin captures and stores conversations, tool usage, and project insights across sessions.</p>' +
516
- '</div>' +
517
- '<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
518
- '<h3 class="font-bold text-primary mb-2">📊 API Endpoints</h3>' +
519
- '<ul class="text-sm space-y-1">' +
520
- '<li><code class="bg-slate-700/50 px-2 py-1 rounded">GET /api/health</code> - Service health status</li>' +
521
- '<li><code class="bg-slate-700/50 px-2 py-1 rounded">GET /api/memories</code> - Recent memories</li>' +
522
- '<li><code class="bg-slate-700/50 px-2 py-1 rounded">GET /api/observations</code> - Tool usage observations</li>' +
523
- '<li><code class="bg-slate-700/50 px-2 py-1 rounded">GET /api/context</code> - Combined data</li>' +
524
- '</ul>' +
525
- '</div>' +
526
- '<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
527
- '<h3 class="font-bold text-primary mb-2">⚙️ Configuration</h3>' +
528
- '<p class="text-sm">Configure via environment variables: <code class="bg-slate-700/50 px-2 py-1 rounded">SQUISH_WEB_PORT</code>, <code class="bg-slate-700/50 px-2 py-1 rounded">DATABASE_URL</code>, etc.</p>' +
529
- '</div>' +
530
- '<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
531
- '<h3 class="font-bold text-primary mb-2">🚀 Getting Started</h3>' +
532
- '<p class="text-sm">1. Install the plugin<br>2. Configure your database<br>3. Start the web UI<br>4. Access at http://localhost:37777</p>' +
533
- '</div>' +
534
- '</div>' +
535
- '</div>';
536
- document.body.appendChild(modal);
537
- }
538
-
539
- function openSettings() {
540
- // Create and show settings modal
541
- const modal = document.createElement('div');
542
- modal.className = 'fixed inset-0 bg-black/50 flex items-center justify-center z-50';
543
- modal.innerHTML = '<div class="bg-card-bg p-8 rounded-3xl border-2 border-slate-700/50 max-w-md w-full mx-4">' +
544
- '<div class="flex justify-between items-center mb-6">' +
545
- '<h2 class="text-2xl font-black text-primary italic">Settings</h2>' +
546
- '<button onclick="closeModal(this)" class="text-text-muted hover:text-text-main text-2xl">&times;</button>' +
547
- '</div>' +
548
- '<div class="space-y-4">' +
549
- '<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
550
- '<label class="block text-sm font-bold text-text-main mb-2">Refresh Interval</label>' +
551
- '<select class="w-full bg-slate-700/50 border border-slate-600 rounded-lg px-3 py-2 text-text-main" onchange="changeRefreshInterval(this.value)">' +
552
- '<option value="10000">10 seconds</option>' +
553
- '<option value="30000" selected>30 seconds</option>' +
554
- '<option value="60000">1 minute</option>' +
555
- '<option value="300000">5 minutes</option>' +
556
- '</select>' +
557
- '</div>' +
558
- '<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
559
- '<label class="block text-sm font-bold text-text-main mb-2">Theme</label>' +
560
- '<select class="w-full bg-slate-700/50 border border-slate-600 rounded-lg px-3 py-2 text-text-main" onchange="changeTheme(this.value)">' +
561
- '<option value="dark" selected>Dark</option>' +
562
- '<option value="light">Light</option>' +
563
- '</select>' +
564
- '</div>' +
565
- '<div class="bg-card-bg/50 p-4 rounded-xl border border-slate-700/30">' +
566
- '<label class="block text-sm font-bold text-text-main mb-2">Items per Page</label>' +
567
- '<select class="w-full bg-slate-700/50 border border-slate-600 rounded-lg px-3 py-2 text-text-main" onchange="changeItemsPerPage(this.value)">' +
568
- '<option value="10">10</option>' +
569
- '<option value="25" selected>25</option>' +
570
- '<option value="50">50</option>' +
571
- '<option value="100">100</option>' +
572
- '</select>' +
573
- '</div>' +
574
- '<div class="flex justify-end space-x-3 mt-6">' +
575
- '<button onclick="closeModal(this)" class="px-4 py-2 bg-slate-700/50 hover:bg-slate-600/50 rounded-lg text-text-main transition-colors">Cancel</button>' +
576
- '<button onclick="saveSettings()" class="px-4 py-2 bg-primary text-black rounded-lg hover:bg-primary/80 transition-colors">Save</button>' +
577
- '</div>' +
578
- '</div>' +
579
- '</div>';
580
- document.body.appendChild(modal);
581
- }
582
-
583
- function closeModal(button) {
584
- const modal = button.closest('.fixed');
585
- if (modal) {
586
- modal.remove();
587
- }
588
- }
589
-
590
- function changeRefreshInterval(interval) {
591
- clearInterval(window.refreshInterval);
592
- window.refreshInterval = setInterval(loadData, parseInt(interval));
593
- }
594
-
595
- function changeTheme(theme) {
596
- if (theme === 'light') {
597
- document.documentElement.classList.remove('dark');
598
- } else {
599
- document.documentElement.classList.add('dark');
600
- }
601
- }
602
-
603
- function changeItemsPerPage(count) {
604
- // This would require updating the API calls, for now just store in localStorage
605
- localStorage.setItem('itemsPerPage', count);
606
- }
607
-
608
- function saveSettings() {
609
- // Close the modal and show success message
610
- const modal = document.querySelector('.fixed');
611
- if (modal) {
612
- // Could show a toast notification here
613
- modal.remove();
614
- }
615
- }
616
-
617
- function changeProject(path) {
618
- currentProjectPath = path;
619
- loadData();
620
- }
621
-
622
- // Initialize: load projects first, then data
623
- loadProjects().then(function() {
624
- loadData();
625
- window.refreshInterval = setInterval(loadData, 30000);
626
- });
627
- </script>
628
- </body></html>`;
629
- res.send(html);
630
- });
631
- // Start server
632
- export function startWebServer() {
633
- return new Promise((resolve, reject) => {
634
- const server = app.listen(PORT, () => {
635
- logger.info('Web UI available at http://localhost:' + PORT);
636
- resolve(server);
637
- });
638
- server.on('error', reject);
639
- });
640
- }
641
- export default app;
642
- //# sourceMappingURL=server.js.map