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
@@ -1,87 +1,102 @@
1
- /**
2
- * Shared Zod schemas for input validation across Squish
3
- * Provides consistent validation for common input types
4
- */
5
- import { z } from 'zod';
6
- /**
7
- * Limit schema: integer between 1 and 100, default 20
8
- */
9
- export const limitSchema = z.number().int().min(1).max(100).default(20);
10
- /**
11
- * Offset schema: integer >= 0, default 0
12
- */
13
- export const offsetSchema = z.number().int().min(0).default(0);
14
- /**
15
- * Project ID/path schema: non-empty string
16
- */
17
- export const projectIdSchema = z.string().min(1);
18
- /**
19
- * Memory ID schema: valid UUID
20
- */
21
- export const memoryIdSchema = z.string().uuid();
22
- /**
23
- * Pagination schema combining limit and offset
24
- */
25
- export const paginationSchema = z.object({
26
- limit: limitSchema,
27
- offset: offsetSchema,
28
- });
29
- /**
30
- * Search query schema: non-empty string
31
- */
32
- export const searchQuerySchema = z.string().min(1).trim();
33
- /**
34
- * Memory type schema
35
- */
36
- export const memoryTypeSchema = z.enum(['observation', 'fact', 'decision', 'context', 'preference', 'note']);
37
- /**
38
- * Association type schema
39
- */
40
- export const associationTypeSchema = z.enum(['relates_to', 'supports', 'contradicts', 'supersedes', 'duplicate']);
41
- /**
42
- * Weight schema: number between 0 and 1
43
- */
44
- export const weightSchema = z.number().min(0).max(1);
45
- /**
46
- * Learning type schema
47
- */
48
- export const learningTypeSchema = z.enum(['success', 'failure', 'fix', 'observation']);
49
- /**
50
- * Observation type schema
51
- */
52
- export const observationTypeSchema = z.enum(['tool_use', 'file_change', 'error', 'pattern', 'insight']);
53
- /**
54
- * Confidence level schema
55
- */
56
- export const confidenceLevelSchema = z.enum(['certain', 'speculative', 'outdated']);
57
- /**
58
- * Search input schema (common for search operations)
59
- */
60
- export const searchInputSchema = z.object({
61
- query: searchQuerySchema,
62
- limit: limitSchema.optional(),
63
- offset: offsetSchema.optional(),
64
- project: projectIdSchema.optional(),
65
- type: memoryTypeSchema.optional(),
66
- });
67
- /**
68
- * Memory recall schema
69
- */
70
- export const recallInputSchema = z.object({
71
- memoryId: memoryIdSchema,
72
- limit: limitSchema.optional(),
73
- project: projectIdSchema.optional(),
74
- });
75
- /**
76
- * Tag operation schema
77
- */
78
- export const tagOperationSchema = z.object({
79
- action: z.enum(['add', 'remove']),
80
- tag: z.string().min(1),
81
- search: z.string().optional(),
82
- olderThan: z.string().optional(),
83
- type: memoryTypeSchema.optional(),
84
- limit: limitSchema.optional(),
85
- project: projectIdSchema.optional(),
86
- });
87
- //# sourceMappingURL=schemas.js.map
1
+ /**
2
+ * Shared Zod schemas for input validation across Squish
3
+ * Provides consistent validation for common input types
4
+ */
5
+
6
+ import { z } from 'zod';
7
+
8
+ /**
9
+ * Limit schema: integer between 1 and 100, default 20
10
+ */
11
+ export const limitSchema = z.number().int().min(1).max(100).default(20);
12
+
13
+ /**
14
+ * Offset schema: integer >= 0, default 0
15
+ */
16
+ export const offsetSchema = z.number().int().min(0).default(0);
17
+
18
+ /**
19
+ * Project ID/path schema: non-empty string
20
+ */
21
+ export const projectIdSchema = z.string().min(1);
22
+
23
+ /**
24
+ * Memory ID schema: valid UUID
25
+ */
26
+ export const memoryIdSchema = z.string().uuid();
27
+
28
+ /**
29
+ * Pagination schema combining limit and offset
30
+ */
31
+ export const paginationSchema = z.object({
32
+ limit: limitSchema,
33
+ offset: offsetSchema,
34
+ });
35
+
36
+ /**
37
+ * Search query schema: non-empty string
38
+ */
39
+ export const searchQuerySchema = z.string().min(1).trim();
40
+
41
+ /**
42
+ * Memory type schema
43
+ */
44
+ export const memoryTypeSchema = z.enum(['observation', 'fact', 'decision', 'context', 'preference', 'note']);
45
+
46
+ /**
47
+ * Association type schema
48
+ */
49
+ export const associationTypeSchema = z.enum(['relates_to', 'supports', 'contradicts', 'supersedes', 'duplicate']);
50
+
51
+ /**
52
+ * Weight schema: number between 0 and 1
53
+ */
54
+ export const weightSchema = z.number().min(0).max(1);
55
+
56
+ /**
57
+ * Learning type schema
58
+ */
59
+ export const learningTypeSchema = z.enum(['success', 'failure', 'fix', 'observation']);
60
+
61
+ /**
62
+ * Observation type schema
63
+ */
64
+ export const observationTypeSchema = z.enum(['tool_use', 'file_change', 'error', 'pattern', 'insight']);
65
+
66
+ /**
67
+ * Confidence level schema
68
+ */
69
+ export const confidenceLevelSchema = z.enum(['certain', 'speculative', 'outdated']);
70
+
71
+ /**
72
+ * Search input schema (common for search operations)
73
+ */
74
+ export const searchInputSchema = z.object({
75
+ query: searchQuerySchema,
76
+ limit: limitSchema.optional(),
77
+ offset: offsetSchema.optional(),
78
+ project: projectIdSchema.optional(),
79
+ type: memoryTypeSchema.optional(),
80
+ });
81
+
82
+ /**
83
+ * Memory recall schema
84
+ */
85
+ export const recallInputSchema = z.object({
86
+ memoryId: memoryIdSchema,
87
+ limit: limitSchema.optional(),
88
+ project: projectIdSchema.optional(),
89
+ });
90
+
91
+ /**
92
+ * Tag operation schema
93
+ */
94
+ export const tagOperationSchema = z.object({
95
+ action: z.enum(['add', 'remove']),
96
+ tag: z.string().min(1),
97
+ search: z.string().optional(),
98
+ olderThan: z.string().optional(),
99
+ type: memoryTypeSchema.optional(),
100
+ limit: limitSchema.optional(),
101
+ project: projectIdSchema.optional(),
102
+ });
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Shared type definitions for Squish Memory system
3
+ * Consolidated from core/memory/memories.ts and core/memory/normalization.ts
4
+ */
5
+
6
+ // Valid memory type values
7
+ export type MemoryType = 'observation' | 'fact' | 'decision' | 'context' | 'preference' | 'note' | 'task';
8
+
9
+ /**
10
+ * Confidence level for memory records
11
+ * - certain: High confidence, verified information
12
+ * - speculative: Low confidence, unverified or uncertain
13
+ * - outdated: Information that may no longer be accurate
14
+ */
15
+ export type ConfidenceLevel = 'certain' | 'speculative' | 'outdated';
16
+
17
+ /**
18
+ * Unified MemoryRecord interface
19
+ * Used across memories.ts and normalization.ts
20
+ *
21
+ * Note: type is string to avoid circular dependency with memories.ts
22
+ * Use MemoryType for type checking when needed
23
+ */
24
+ export interface MemoryRecord {
25
+ id: string;
26
+ projectId?: string | null;
27
+ type: string; // Stored as string in DB (use MemoryType for valid values)
28
+ content: string;
29
+ summary?: string | null;
30
+ tags: string[];
31
+ metadata?: Record<string, unknown> | null;
32
+ createdAt?: string | null;
33
+ validFrom?: string | null;
34
+ validTo?: string | null;
35
+ recordedAt?: string | null;
36
+ similarity?: number;
37
+ importance?: number;
38
+ confidenceLevel?: ConfidenceLevel | null;
39
+ }
40
+
41
+ /**
42
+ * Result of a safety check
43
+ * Used to determine if a merge action can proceed
44
+ */
45
+ export interface SafetyCheckResult {
46
+ passed: boolean;
47
+ warnings: string[];
48
+ blockers: string[]; // Hard failures
49
+ }
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Shared utility functions for the squish codebase
3
+ */
4
+
5
+ import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
6
+ import { config } from '../../config.js';
7
+ import { toSqliteJson } from '../memory/serialization.js';
8
+
9
+ export function normalizeTimestamp(value: any): string | null {
10
+ if (!value) return null;
11
+ if (value instanceof Date) return value.toISOString();
12
+ if (typeof value === 'number') {
13
+ try {
14
+ // Handle different timestamp formats using magnitude thresholds
15
+ // Microseconds: > 100000000000000 (e.g., 1700000000000000)
16
+ // Milliseconds: > 1000000000000 (e.g., 1700000000000)
17
+ // Seconds: <= 1000000000000 (e.g., 1700000000)
18
+ if (value > 100000000000000) {
19
+ return new Date(value / 1000).toISOString();
20
+ } else if (value > 1000000000000) {
21
+ return new Date(value).toISOString();
22
+ } else if (value >= 0) {
23
+ return new Date(value * 1000).toISOString();
24
+ }
25
+ return null;
26
+ } catch {
27
+ return null;
28
+ }
29
+ }
30
+ if (typeof value === 'string') {
31
+ try {
32
+ const parsed = new Date(value);
33
+ if (!isNaN(parsed.getTime())) return parsed.toISOString();
34
+ return null;
35
+ } catch {
36
+ return null;
37
+ }
38
+ }
39
+ return null;
40
+ }
41
+
42
+ export function now(): string {
43
+ return new Date().toISOString();
44
+ }
45
+
46
+ export function isDatabaseUnavailableError(error: any): boolean {
47
+ const message = error?.message || '';
48
+ return [
49
+ 'Database unavailable',
50
+ 'not a valid Win32 application',
51
+ 'invalid ELF header',
52
+ 'bun:',
53
+ 'sql.js wasm asset not found',
54
+ 'SQLite database initialization failed',
55
+ 'working local SQLite driver',
56
+ ].some((pattern) => message.includes(pattern));
57
+ }
58
+
59
+ export async function withDatabaseErrorHandling<T>(
60
+ operation: () => Promise<T>,
61
+ errorMessage: string
62
+ ): Promise<T> {
63
+ try {
64
+ return await operation();
65
+ } catch (dbError: any) {
66
+ if (isDatabaseUnavailableError(dbError)) {
67
+ throw new McpError(ErrorCode.InternalError, errorMessage);
68
+ }
69
+ throw dbError;
70
+ }
71
+ }
72
+
73
+ export function clampLimit(value: number | undefined, defaultValue: number, min: number = 1, max: number = 100): number {
74
+ return Math.min(Math.max(value ?? defaultValue, min), max);
75
+ }
76
+
77
+ export function prepareEmbedding(embedding: number[] | null): { embedding?: number[] | null; embeddingJson?: string | null } {
78
+ if (config.isTeamMode) {
79
+ return { embedding: embedding ?? null };
80
+ }
81
+ return { embeddingJson: toSqliteJson(embedding ?? null) };
82
+ }
83
+
84
+ export function determineOverallStatus(dbStatus: string, redisOk: boolean): string {
85
+ if ((dbStatus === 'ok' || dbStatus === 'unavailable') && redisOk) {
86
+ return 'ok';
87
+ }
88
+ if (dbStatus === 'unavailable') {
89
+ return 'degraded';
90
+ }
91
+ return 'error';
92
+ }
93
+
94
+ // Date parsing utilities - shared between CLI and MCP
95
+ // ============================================================================
96
+
97
+ export function parseDate(input: string): Date | null {
98
+ if (!input) return null;
99
+ const now = new Date();
100
+ const lower = input.toLowerCase().trim();
101
+
102
+ // Direct date parse
103
+ const parsed = new Date(input);
104
+ if (!isNaN(parsed.getTime())) return parsed;
105
+
106
+ // Relative parsing
107
+ const dayMatch = lower.match(/(\d+)\s*day/i);
108
+ const weekMatch = lower.match(/(\d+)\s*week/i);
109
+ const monthMatch = lower.match(/(\d+)\s*month/i);
110
+
111
+ if (lower === 'today') {
112
+ const d = new Date(now);
113
+ d.setHours(0, 0, 0, 0);
114
+ return d;
115
+ }
116
+ if (lower === 'yesterday') return new Date(now.getTime() - 86400000);
117
+ if (lower === 'thisweek' || lower === 'this week') {
118
+ const d = new Date(now);
119
+ d.setDate(d.getDate() - d.getDay());
120
+ d.setHours(0, 0, 0, 0);
121
+ return d;
122
+ }
123
+ if (lower === 'lastweek' || lower === 'last week') {
124
+ const d = new Date(now);
125
+ d.setDate(d.getDate() - d.getDay() - 7);
126
+ return d;
127
+ }
128
+
129
+ if (dayMatch) return new Date(now.getTime() - parseInt(dayMatch[1]) * 86400000);
130
+ if (weekMatch) return new Date(now.getTime() - parseInt(weekMatch[1]) * 604800000);
131
+ if (monthMatch) return new Date(now.getTime() - parseInt(monthMatch[1]) * 2592000000);
132
+
133
+ return null;
134
+ }
135
+
136
+ export function filterByDateRange<T extends { createdAt?: string | null }>(
137
+ items: T[],
138
+ since?: string,
139
+ until?: string
140
+ ): T[] {
141
+ const sinceDate = parseDate(since || '');
142
+ const untilDate = parseDate(until || '');
143
+
144
+ return items.filter(item => {
145
+ if (!item.createdAt) return true;
146
+ const created = new Date(item.createdAt);
147
+ if (sinceDate && created < sinceDate) return false;
148
+ if (untilDate && created > untilDate) return false;
149
+ return true;
150
+ });
151
+ }
@@ -0,0 +1,180 @@
1
+ /**
2
+ * Input validation utilities for Squish
3
+ * Consolidates scattered validation patterns into a unified module
4
+ */
5
+
6
+ import { clampLimit as originalClampLimit } from './utils.js';
7
+ import { normalizeTags } from '../memory/serialization.js';
8
+
9
+ /**
10
+ * Validate and normalize a limit value with bounds checking
11
+ */
12
+ export function validateLimit(
13
+ value: number | string | undefined,
14
+ defaultValue: number = 20,
15
+ min: number = 1,
16
+ max: number = 100
17
+ ): number {
18
+ // Handle undefined, null, empty string
19
+ if (value === undefined || value === null || value === '') {
20
+ return defaultValue;
21
+ }
22
+
23
+ // Convert string to number, truncate decimals
24
+ let num: number;
25
+ if (typeof value === 'string') {
26
+ const parsed = parseInt(value, 10);
27
+ if (isNaN(parsed)) {
28
+ return NaN;
29
+ }
30
+ num = parsed;
31
+ } else {
32
+ // Truncate decimals for numbers
33
+ num = Math.trunc(value);
34
+ }
35
+
36
+ // Handle NaN
37
+ if (isNaN(num)) {
38
+ return NaN;
39
+ }
40
+
41
+ // Clamp to bounds
42
+ return Math.min(Math.max(num, min), max);
43
+ }
44
+
45
+ /**
46
+ * Parse an integer with bounds checking
47
+ */
48
+ export function parseIntBounded(
49
+ value: number | string | undefined,
50
+ defaultValue: number,
51
+ min: number,
52
+ max: number
53
+ ): number {
54
+ return validateLimit(value, defaultValue, min, max);
55
+ }
56
+
57
+ /**
58
+ * Validate a project path
59
+ */
60
+ export async function validateProjectPath(
61
+ path: string | undefined,
62
+ options?: { createIfMissing?: boolean; require?: boolean }
63
+ ): Promise<string> {
64
+ const { createIfMissing = false, require: requireProject = false } = options || {};
65
+
66
+ // If path is undefined, throw if required or return current directory
67
+ if (path === undefined || path === '') {
68
+ if (requireProject) {
69
+ throw new Error('Project path is required');
70
+ }
71
+ return process.cwd();
72
+ }
73
+
74
+ // Resolve to absolute path
75
+ const absolutePath = path.startsWith('/') || /^[a-zA-Z]:\\/.test(path)
76
+ ? path
77
+ : path.startsWith('~')
78
+ ? path.replace(/^~/, process.env.HOME || process.env.USERPROFILE || '')
79
+ : path.startsWith('.')
80
+ ? path
81
+ : path;
82
+
83
+ // Check if project exists in database
84
+ const { getProjectByPath } = await import('../projects.js');
85
+ const existingProject = await getProjectByPath(absolutePath);
86
+
87
+ if (existingProject) {
88
+ return absolutePath;
89
+ }
90
+
91
+ // Project doesn't exist
92
+ if (requireProject) {
93
+ throw new Error(`Project not found: ${absolutePath}`);
94
+ }
95
+
96
+ if (createIfMissing) {
97
+ const { ensureProject } = await import('../projects.js');
98
+ await ensureProject(absolutePath);
99
+ return absolutePath;
100
+ }
101
+
102
+ // Return the path even if it doesn't exist in database (for non-db validation)
103
+ return absolutePath;
104
+ }
105
+
106
+ /**
107
+ * Validate a UUID
108
+ */
109
+ export function validateUuid(id: string): boolean {
110
+ if (typeof id !== 'string' || !id) {
111
+ return false;
112
+ }
113
+
114
+ // UUID v4/v5 regex pattern (8-4-4-4-12 hex digits)
115
+ const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
116
+ return uuidRegex.test(id);
117
+ }
118
+
119
+ /**
120
+ * Require a valid UUID, throws if invalid
121
+ */
122
+ export function requireUuid(id: string): string {
123
+ if (!validateUuid(id)) {
124
+ throw new Error('Invalid UUID');
125
+ }
126
+ return id;
127
+ }
128
+
129
+ /**
130
+ * Validate a date value
131
+ *
132
+ * @param value - The date to validate (string, Date, number, or undefined)
133
+ * @returns Date object if valid, null otherwise
134
+ */
135
+ export function validateDate(value: string | Date | number | undefined): Date | null {
136
+ if (!value) {
137
+ return null;
138
+ }
139
+
140
+ try {
141
+ let date: Date;
142
+
143
+ if (value instanceof Date) {
144
+ date = value;
145
+ } else if (typeof value === 'number') {
146
+ // Handle both milliseconds and seconds timestamps
147
+ if (value > 100000000000000) {
148
+ // Microseconds, convert to milliseconds
149
+ date = new Date(value / 1000);
150
+ } else if (value > 1000000000000) {
151
+ // Milliseconds
152
+ date = new Date(value);
153
+ } else if (value >= 0) {
154
+ // Seconds
155
+ date = new Date(value * 1000);
156
+ } else {
157
+ return null;
158
+ }
159
+ } else if (typeof value === 'string') {
160
+ date = new Date(value);
161
+ } else {
162
+ return null;
163
+ }
164
+
165
+ // Check if date is valid
166
+ if (isNaN(date.getTime())) {
167
+ return null;
168
+ }
169
+
170
+ return date;
171
+ } catch {
172
+ return null;
173
+ }
174
+ }
175
+
176
+ // Re-export normalizeTags for tag validation
177
+ export { normalizeTags };
178
+
179
+ // Re-export clampLimit for backward compatibility
180
+ export { clampLimit } from './utils.js';