squish-memory 1.0.2 → 1.1.5

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 (341) hide show
  1. package/.env.example +130 -0
  2. package/CHANGELOG.md +55 -0
  3. package/README.md +150 -287
  4. package/config/hooks/claude-code-hooks.json +39 -0
  5. package/config/hooks/cursor-hooks.json +30 -0
  6. package/config/hooks/opencode-hooks.json +30 -0
  7. package/config/hooks/windsurf-hooks.json +30 -0
  8. package/config/mcp-mode-semantics.json +23 -21
  9. package/config/plugin-manifest.json +101 -152
  10. package/{plugin.json → config/plugin.json} +2 -2
  11. package/config/settings.json +52 -51
  12. package/{commands → core/commands}/init.md +39 -39
  13. package/dist/config.d.ts +28 -4
  14. package/dist/config.js +97 -29
  15. package/dist/core/adapters/config/claude-code.d.ts +45 -0
  16. package/dist/core/adapters/config/claude-code.js +113 -0
  17. package/dist/core/adapters/config/cursor.d.ts +26 -0
  18. package/dist/core/adapters/config/cursor.js +74 -0
  19. package/dist/core/adapters/config/opencode.d.ts +23 -0
  20. package/dist/core/adapters/config/opencode.js +73 -0
  21. package/dist/core/adapters/config/windsurf.d.ts +26 -0
  22. package/dist/core/adapters/config/windsurf.js +74 -0
  23. package/dist/core/adapters/index.d.ts +45 -0
  24. package/dist/core/adapters/index.js +84 -0
  25. package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
  26. package/dist/core/adapters/scripts/install-adapter.js +149 -0
  27. package/dist/core/adapters/timeline.d.ts +23 -0
  28. package/dist/core/adapters/timeline.js +88 -0
  29. package/dist/core/adapters/types.d.ts +157 -0
  30. package/dist/core/adapters/types.js +50 -0
  31. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
  32. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
  33. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
  34. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
  35. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
  36. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
  37. package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
  38. package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
  39. package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
  40. package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
  41. package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
  42. package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
  43. package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
  44. package/dist/core/algorithms/index.d.ts +21 -0
  45. package/dist/core/algorithms/index.js +26 -0
  46. package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
  47. package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
  48. package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +1 -1
  49. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
  50. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
  51. package/dist/core/algorithms/types.d.ts +133 -0
  52. package/dist/core/algorithms/types.js +5 -0
  53. package/dist/core/associations.d.ts +1 -2
  54. package/dist/core/associations.js +1 -2
  55. package/dist/core/autosave.d.ts +19 -0
  56. package/dist/core/autosave.js +16 -0
  57. package/dist/{commands → core/commands}/managed-sync.js +5 -5
  58. package/dist/core/commands/mcp-server.js +739 -0
  59. package/dist/core/context/agent-context.d.ts +106 -0
  60. package/dist/core/context/agent-context.js +274 -0
  61. package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
  62. package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
  63. package/dist/core/context/context-window.d.ts +40 -0
  64. package/dist/core/context/context-window.js +177 -0
  65. package/dist/core/context/context.js +22 -0
  66. package/dist/core/embeddings.d.ts +1 -1
  67. package/dist/core/embeddings.js +54 -2
  68. package/dist/core/error-handling.d.ts +63 -0
  69. package/dist/core/error-handling.js +173 -0
  70. package/dist/core/external-folder/index.d.ts +102 -0
  71. package/dist/core/external-folder/index.js +294 -0
  72. package/dist/core/hooks/agent-hooks.d.ts +74 -0
  73. package/dist/core/hooks/agent-hooks.js +244 -0
  74. package/dist/core/hooks/auto-tagger.d.ts +19 -0
  75. package/dist/core/hooks/auto-tagger.js +155 -0
  76. package/dist/core/hooks/capture-filter.d.ts +41 -0
  77. package/dist/core/hooks/capture-filter.js +128 -0
  78. package/dist/core/index.d.ts +6 -6
  79. package/dist/core/index.js +6 -6
  80. package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
  81. package/dist/core/{core-memory.js → ingestion/core-memory.js} +4 -4
  82. package/dist/core/ingestion/learnings.d.ts +57 -0
  83. package/dist/core/ingestion/learnings.js +202 -0
  84. package/dist/core/lib/db-client.d.ts +114 -0
  85. package/dist/core/lib/db-client.js +130 -0
  86. package/dist/core/lib/schemas.d.ts +129 -0
  87. package/dist/core/lib/schemas.js +87 -0
  88. package/dist/core/{utils.d.ts → lib/utils.d.ts} +1 -0
  89. package/dist/core/{utils.js → lib/utils.js} +31 -15
  90. package/dist/core/lib/validation.d.ts +38 -0
  91. package/dist/core/lib/validation.js +151 -0
  92. package/dist/core/lifecycle.d.ts +7 -0
  93. package/dist/core/lifecycle.js +140 -20
  94. package/dist/core/local-embeddings.d.ts +6 -1
  95. package/dist/core/local-embeddings.js +6 -15
  96. package/dist/core/logger.js +7 -1
  97. package/dist/core/mcp/tools.js +35 -3
  98. package/dist/core/memory/categorizer.js +1 -0
  99. package/dist/core/memory/conflict-detector.js +1 -1
  100. package/dist/core/memory/consolidation.d.ts +1 -10
  101. package/dist/core/memory/consolidation.js +2 -11
  102. package/dist/core/memory/context-collector.js +1 -1
  103. package/dist/core/memory/edit-workflow.js +1 -1
  104. package/dist/core/memory/entity-resolver.js +7 -7
  105. package/dist/core/memory/fact-extractor.js +12 -12
  106. package/dist/core/memory/feedback-tracker.js +1 -1
  107. package/dist/core/memory/hooks.d.ts +88 -0
  108. package/dist/core/memory/hooks.js +174 -0
  109. package/dist/core/memory/hybrid-retrieval.js +2 -2
  110. package/dist/core/memory/hybrid-search.d.ts +1 -6
  111. package/dist/core/memory/hybrid-search.js +70 -84
  112. package/dist/core/memory/importance.d.ts +8 -13
  113. package/dist/core/memory/importance.js +47 -74
  114. package/dist/core/memory/loader.d.ts +31 -0
  115. package/dist/core/memory/loader.js +141 -0
  116. package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
  117. package/dist/core/memory/markdown/markdown-storage.js +243 -0
  118. package/dist/core/memory/memories.d.ts +12 -4
  119. package/dist/core/memory/memories.js +192 -180
  120. package/dist/core/memory/memory-lifecycle.d.ts +8 -0
  121. package/dist/core/memory/memory-lifecycle.js +55 -0
  122. package/dist/core/memory/migrate.d.ts +21 -0
  123. package/dist/core/memory/migrate.js +134 -0
  124. package/dist/core/memory/normalization.d.ts +22 -0
  125. package/dist/core/memory/normalization.js +26 -0
  126. package/dist/core/memory/progressive-disclosure.js +1 -1
  127. package/dist/core/memory/query-rewriter.js +9 -9
  128. package/dist/core/memory/serialization.d.ts +4 -0
  129. package/dist/core/memory/serialization.js +49 -0
  130. package/dist/core/memory/stats.d.ts +5 -0
  131. package/dist/core/memory/stats.js +63 -12
  132. package/dist/core/memory/temporal-facts.js +21 -0
  133. package/dist/core/memory/write-gate.js +1 -1
  134. package/dist/core/obsidian-vault.d.ts +30 -0
  135. package/dist/core/obsidian-vault.js +94 -0
  136. package/dist/core/places/index.d.ts +14 -0
  137. package/dist/core/places/index.js +14 -0
  138. package/dist/core/places/memory-places.d.ts +68 -0
  139. package/dist/core/places/memory-places.js +261 -0
  140. package/dist/core/places/places.d.ts +88 -0
  141. package/dist/core/places/places.js +314 -0
  142. package/dist/core/places/rules.d.ts +74 -0
  143. package/dist/core/places/rules.js +240 -0
  144. package/dist/core/places/walking.d.ts +56 -0
  145. package/dist/core/places/walking.js +121 -0
  146. package/dist/core/projects.d.ts +5 -0
  147. package/dist/core/projects.js +39 -18
  148. package/dist/core/responses.d.ts +96 -0
  149. package/dist/core/responses.js +122 -0
  150. package/dist/core/scheduler/cron-scheduler.js +29 -7
  151. package/dist/core/scheduler/index.d.ts +1 -1
  152. package/dist/core/scheduler/index.js +1 -1
  153. package/dist/core/scheduler/job-runner.js +1 -1
  154. package/dist/core/search/conversations.js +40 -42
  155. package/dist/core/search/entities.js +6 -9
  156. package/dist/core/search/graph-boost.d.ts +7 -0
  157. package/dist/core/search/graph-boost.js +23 -0
  158. package/dist/core/search/qmd-search.js +4 -4
  159. package/dist/core/security/encrypt.d.ts +6 -0
  160. package/dist/core/security/encrypt.js +47 -0
  161. package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
  162. package/dist/core/security/governance.js +79 -0
  163. package/dist/core/session/auto-load.js +6 -6
  164. package/dist/core/session/index.d.ts +1 -1
  165. package/dist/core/session/index.js +1 -1
  166. package/dist/core/session/self-iteration-job.d.ts +20 -0
  167. package/dist/core/session/self-iteration-job.js +282 -0
  168. package/dist/core/session/session-hooks.d.ts +18 -0
  169. package/dist/core/session/session-hooks.js +58 -0
  170. package/dist/core/session-hooks/self-iteration-job.js +35 -35
  171. package/dist/core/{cache.js → storage/cache.js} +2 -2
  172. package/dist/core/sync/qmd-sync.d.ts +1 -13
  173. package/dist/core/sync/qmd-sync.js +1 -13
  174. package/dist/core/toon.d.ts +43 -0
  175. package/dist/core/toon.js +160 -0
  176. package/dist/core/utils/memory-operations.js +1 -1
  177. package/dist/core/utils/vector-operations.d.ts +71 -0
  178. package/dist/core/utils/vector-operations.js +129 -0
  179. package/dist/db/adapter.d.ts +3 -3
  180. package/dist/db/adapter.js +99 -88
  181. package/dist/db/bootstrap.js +820 -522
  182. package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +74 -25
  183. package/dist/{drizzle → db/drizzle}/schema-sqlite.js +91 -24
  184. package/dist/{drizzle → db/drizzle}/schema.d.ts +79 -32
  185. package/dist/{drizzle → db/drizzle}/schema.js +106 -35
  186. package/dist/db/drizzle.config.d.ts +3 -0
  187. package/dist/db/drizzle.config.js +12 -0
  188. package/dist/db/index.d.ts +1 -5
  189. package/dist/db/index.js +51 -8
  190. package/dist/db/neon.d.ts +8 -0
  191. package/dist/db/neon.js +20 -0
  192. package/dist/db/schema/index.d.ts +40 -0
  193. package/dist/db/schema/index.js +105 -0
  194. package/dist/db/schema/tables/context-sessions.d.ts +9 -0
  195. package/dist/db/schema/tables/context-sessions.js +37 -0
  196. package/dist/db/schema/tables/conversations.d.ts +9 -0
  197. package/dist/db/schema/tables/conversations.js +47 -0
  198. package/dist/db/schema/tables/core-memory.d.ts +9 -0
  199. package/dist/db/schema/tables/core-memory.js +41 -0
  200. package/dist/db/schema/tables/entities.d.ts +9 -0
  201. package/dist/db/schema/tables/entities.js +39 -0
  202. package/dist/db/schema/tables/entity-relations.d.ts +9 -0
  203. package/dist/db/schema/tables/entity-relations.js +31 -0
  204. package/dist/db/schema/tables/learnings.d.ts +9 -0
  205. package/dist/db/schema/tables/learnings.js +66 -0
  206. package/dist/db/schema/tables/memories.d.ts +9 -0
  207. package/dist/db/schema/tables/memories.js +161 -0
  208. package/dist/db/schema/tables/memory-associations.d.ts +9 -0
  209. package/dist/db/schema/tables/memory-associations.js +39 -0
  210. package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
  211. package/dist/db/schema/tables/memory-hash-cache.js +29 -0
  212. package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
  213. package/dist/db/schema/tables/memory-merge-history.js +33 -0
  214. package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
  215. package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
  216. package/dist/db/schema/tables/messages.d.ts +9 -0
  217. package/dist/db/schema/tables/messages.js +41 -0
  218. package/dist/db/schema/tables/namespaces.d.ts +9 -0
  219. package/dist/db/schema/tables/namespaces.js +37 -0
  220. package/dist/db/schema/tables/projects.d.ts +9 -0
  221. package/dist/db/schema/tables/projects.js +31 -0
  222. package/dist/db/schema/tables/users.d.ts +9 -0
  223. package/dist/db/schema/tables/users.js +27 -0
  224. package/dist/db/schema.d.ts +1 -1
  225. package/dist/db/schema.js +2 -2
  226. package/dist/db/supabase.d.ts +9 -0
  227. package/dist/db/supabase.js +24 -0
  228. package/dist/index.d.ts +2 -14
  229. package/dist/index.js +1320 -640
  230. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  231. package/dist/webui/server.d.ts +5 -0
  232. package/dist/{api/web/web.js → webui/server.js} +511 -508
  233. package/generated/mcp/manifest.json +1 -1
  234. package/{.mcp.json → mcp.json.example} +1 -1
  235. package/package.json +159 -181
  236. package/scripts/README.md +60 -0
  237. package/scripts/copy-runtime-assets.mjs +26 -0
  238. package/scripts/generate-mcp.mjs +264 -264
  239. package/scripts/github-release.sh +4 -4
  240. package/scripts/install-claude-code.sh +85 -0
  241. package/scripts/install-cursor.sh +56 -0
  242. package/scripts/install-hooks.sh +73 -0
  243. package/scripts/install-interactive.mjs +357 -677
  244. package/scripts/install-opencode.sh +75 -0
  245. package/scripts/install-windsurf.sh +67 -0
  246. package/skills/squish-memory/SKILL.md +104 -114
  247. package/skills/squish-memory/{install.mjs → scripts/install.mjs} +2 -2
  248. package/skills/squish-memory/{install.sh → scripts/install.sh} +2 -2
  249. package/skills/squish-memory/write_skill.js +2 -0
  250. package/.claude-plugin/marketplace.json +0 -20
  251. package/.claude-plugin/plugin.json +0 -32
  252. package/.env.mcp.example +0 -60
  253. package/QUICK-START.md +0 -71
  254. package/bin/squish-add.mjs +0 -32
  255. package/bin/squish-rm.mjs +0 -21
  256. package/commands/observe.md +0 -5
  257. package/dist/api/web/index.d.ts +0 -3
  258. package/dist/api/web/index.js +0 -4
  259. package/dist/api/web/web-server.d.ts +0 -3
  260. package/dist/api/web/web-server.js +0 -6
  261. package/dist/api/web/web.d.ts +0 -4
  262. package/dist/commands/mcp-server.js +0 -393
  263. package/dist/core/context.js +0 -24
  264. package/dist/core/governance.js +0 -64
  265. package/dist/core/observations.d.ts +0 -26
  266. package/dist/core/observations.js +0 -110
  267. package/dist/core/requirements.d.ts +0 -20
  268. package/dist/core/requirements.js +0 -35
  269. package/hooks/hooks.json +0 -52
  270. package/hooks/post-tool-use.js +0 -26
  271. package/hooks/session-end.js +0 -28
  272. package/hooks/session-start.js +0 -33
  273. package/hooks/user-prompt-submit.js +0 -26
  274. package/hooks/utils.js +0 -153
  275. package/npx-installer.js +0 -208
  276. package/packages/plugin-claude-code/README.md +0 -73
  277. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
  278. package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
  279. package/packages/plugin-claude-code/package.json +0 -31
  280. package/packages/plugin-openclaw/README.md +0 -70
  281. package/packages/plugin-openclaw/dist/index.d.ts +0 -49
  282. package/packages/plugin-openclaw/dist/index.js +0 -262
  283. package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
  284. package/packages/plugin-openclaw/package.json +0 -31
  285. package/packages/plugin-opencode/install.mjs +0 -217
  286. package/packages/plugin-opencode/package.json +0 -21
  287. package/scripts/db/check-db.mjs +0 -88
  288. package/scripts/db/fix-all-columns.mjs +0 -52
  289. package/scripts/db/fix-schema-all.mjs +0 -55
  290. package/scripts/db/fix-schema-full.mjs +0 -46
  291. package/scripts/db/fix-schema.mjs +0 -38
  292. package/scripts/db/init-db.mjs +0 -13
  293. package/scripts/db/recreate-db.mjs +0 -14
  294. package/scripts/install-mcp.mjs +0 -116
  295. package/scripts/install-web.sh +0 -120
  296. package/scripts/install.mjs +0 -340
  297. package/scripts/openclaw-bootstrap.mjs +0 -127
  298. package/scripts/package-release.sh +0 -71
  299. package/scripts/test/test-all-systems.mjs +0 -139
  300. package/scripts/test/test-memory-system.mjs +0 -139
  301. package/scripts/test/test-v0.5.0.mjs +0 -210
  302. package/skills/memory-guide/SKILL.md +0 -332
  303. package/skills/squish-cli/SKILL.md +0 -240
  304. package/skills/squish-mcp/SKILL.md +0 -355
  305. package/skills/squish-memory/claude-desktop.json +0 -12
  306. package/skills/squish-memory/openclaw.json +0 -13
  307. package/skills/squish-memory/opencode.json +0 -14
  308. package/skills/squish-memory/skill.json +0 -32
  309. /package/{commands → core/commands}/context-paging.md +0 -0
  310. /package/{commands → core/commands}/context-status.md +0 -0
  311. /package/{commands → core/commands}/context.md +0 -0
  312. /package/{commands → core/commands}/core-memory.md +0 -0
  313. /package/{commands → core/commands}/health.md +0 -0
  314. /package/{commands → core/commands}/merge.md +0 -0
  315. /package/{commands → core/commands}/recall.md +0 -0
  316. /package/{commands → core/commands}/remember.md +0 -0
  317. /package/{commands → core/commands}/search.md +0 -0
  318. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
  319. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
  320. /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
  321. /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
  322. /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
  323. /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
  324. /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
  325. /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
  326. /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
  327. /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
  328. /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
  329. /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
  330. /package/dist/{commands → core/commands}/managed-sync.d.ts +0 -0
  331. /package/dist/{commands → core/commands}/mcp-server.d.ts +0 -0
  332. /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
  333. /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
  334. /package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +0 -0
  335. /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
  336. /package/dist/core/{privacy.js → security/privacy.js} +0 -0
  337. /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
  338. /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
  339. /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
  340. /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
  341. /package/dist/core/{database.js → storage/database.js} +0 -0
@@ -1,71 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Squish Release Packaging Script
4
- # Creates platform-specific packages for distribution
5
-
6
- set -e
7
-
8
- VERSION=$(node -p "require('./package.json').version")
9
- echo "Building Squish v$VERSION release packages..."
10
-
11
- # Clean previous builds
12
- rm -rf dist/ *.tar.gz *.zip
13
-
14
- # Build production version
15
- npm run build:prod
16
-
17
- # Create platform-specific packages
18
- create_package() {
19
- local platform=$1
20
- local arch=$2
21
- local output_name="squish-${VERSION}-${platform}-${arch}"
22
-
23
- echo "Creating $output_name..."
24
-
25
- # Create package directory
26
- mkdir -p "package/$output_name"
27
- mkdir -p "package/$output_name/bin"
28
-
29
- # Copy files
30
- cp -r dist/prod/* "package/$output_name/"
31
- cp install.sh "package/$output_name/"
32
- cp README.md "package/$output_name/"
33
- cp LICENSE "package/$output_name/"
34
-
35
- # Create executable wrapper
36
- cat > "package/$output_name/bin/squish" << 'EOF'
37
- #!/bin/bash
38
- # Squish wrapper script
39
- DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
40
- exec node "$DIR/src/index.js" "$@"
41
- EOF
42
- chmod +x "package/$output_name/bin/squish"
43
-
44
- # Create archive
45
- cd package
46
- if [[ "$platform" == "windows" ]]; then
47
- zip -r "../${output_name}.zip" "$output_name"
48
- else
49
- tar -czf "../${output_name}.tar.gz" "$output_name"
50
- fi
51
- cd ..
52
-
53
- echo "✓ Created ${output_name}.tar.gz"
54
- }
55
-
56
- # Build for multiple platforms
57
- create_package "linux" "x64"
58
- create_package "linux" "arm64"
59
- create_package "macos" "x64"
60
- create_package "macos" "arm64"
61
- create_package "windows" "x64"
62
-
63
- # Clean up
64
- rm -rf package/
65
-
66
- echo ""
67
- echo "🎉 Release packages created:"
68
- ls -la *.tar.gz *.zip 2>/dev/null || true
69
- echo ""
70
- echo "Upload these to GitHub releases at:"
71
- echo "https://github.com/michielhdoteth/squish/releases/tag/v$VERSION"
@@ -1,139 +0,0 @@
1
- import { spawnSync } from 'child_process';
2
- import fs from 'fs';
3
- import path from 'path';
4
-
5
- console.log('=== SQUISH v0.5.0 COMPREHENSIVE TEST ===\n');
6
-
7
- // Test 1: TypeScript Build
8
- console.log('Test 1: TypeScript Build');
9
- const buildResult = spawnSync('npm', ['run', 'build'], {
10
- cwd: process.cwd(),
11
- encoding: 'utf8'
12
- });
13
- if (buildResult.status === 0) {
14
- console.log('✅ TypeScript builds successfully\n');
15
- } else {
16
- console.log('❌ Build failed:', buildResult.stderr);
17
- process.exit(1);
18
- }
19
-
20
- // Test 2: Check dist files exist
21
- console.log('Test 2: Compiled Files');
22
- const requiredFiles = [
23
- 'dist/index.js',
24
- 'dist/config.js',
25
- 'dist/features/plugin/plugin-wrapper.js',
26
- 'dist/core/core-memory.js',
27
- ];
28
- let allFilesExist = true;
29
- requiredFiles.forEach(file => {
30
- if (fs.existsSync(file)) {
31
- console.log(`✅ ${file}`);
32
- } else {
33
- console.log(`❌ ${file} missing`);
34
- allFilesExist = false;
35
- }
36
- });
37
- if (!allFilesExist) process.exit(1);
38
- console.log('');
39
-
40
- // Test 3: Verify hooks are executable
41
- console.log('Test 3: Hook Scripts');
42
- const hookFiles = [
43
- 'hooks/session-start.js',
44
- 'hooks/user-prompt-submit.js',
45
- 'hooks/post-tool-use.js',
46
- 'hooks/session-end.js',
47
- ];
48
- hookFiles.forEach(hook => {
49
- if (fs.existsSync(hook)) {
50
- const content = fs.readFileSync(hook, 'utf8');
51
- if (content.includes('#!/usr/bin/env node')) {
52
- console.log(`✅ ${hook} (has proper shebang)`);
53
- } else {
54
- console.log(`⚠️ ${hook} (missing shebang)`);
55
- }
56
- }
57
- });
58
- console.log('');
59
-
60
- // Test 4: Web UI availability
61
- console.log('Test 4: Web UI Port');
62
- const http = await import('http');
63
- const checkPort = () => {
64
- return new Promise((resolve) => {
65
- const req = http.request('http://localhost:37777/', (res) => {
66
- resolve(res.statusCode === 200 ? '✅' : `⚠️ (HTTP ${res.statusCode})`);
67
- });
68
- req.on('error', () => {
69
- resolve('⚠️ (Port 37777 not responding - may be starting)');
70
- });
71
- req.end();
72
- });
73
- };
74
- const portStatus = await checkPort();
75
- console.log(`${portStatus} Web UI on http://localhost:37777`);
76
- console.log('');
77
-
78
- // Test 5: Smart Search Heuristics
79
- console.log('Test 5: Smart Search Detection');
80
- function shouldSmartSearch(userMessage) {
81
- if (!userMessage || userMessage.length < 3) return false;
82
- const isExplicitQuestion = userMessage.includes('?');
83
- const questionKeywords = [
84
- 'what ', 'where ', 'when ', 'how ', 'why ',
85
- 'remember', 'recall', 'tell me', 'explain', 'show me',
86
- 'find ', 'search ', 'look for', 'do you know'
87
- ];
88
- const isQuestionLike = questionKeywords.some(kw => userMessage.toLowerCase().includes(kw));
89
- const contextKeywords = [
90
- 'debug', 'error', 'issue', 'problem', 'fix ',
91
- 'broken', 'not working', 'why is', 'what went',
92
- 'help', 'stuck', 'confused', 'doesn\'t work'
93
- ];
94
- const hasContextClue = contextKeywords.some(kw => userMessage.toLowerCase().includes(kw));
95
- return isExplicitQuestion || isQuestionLike || hasContextClue;
96
- }
97
-
98
- const testCases = [
99
- ["What is the API key?", true],
100
- ["Tell me about the database", true],
101
- ["I'm stuck on this error", true],
102
- ["Can you debug this?", true],
103
- ["Hello world", false],
104
- ["Let me code this", false],
105
- ];
106
-
107
- let allTestsPassed = true;
108
- testCases.forEach(([msg, expected]) => {
109
- const result = shouldSmartSearch(msg);
110
- const icon = result === expected ? '✅' : '❌';
111
- console.log(`${icon} "${msg}" -> ${result}`);
112
- if (result !== expected) allTestsPassed = false;
113
- });
114
- console.log('');
115
-
116
- // Test 6: Configuration
117
- console.log('Test 6: Configuration Files');
118
- ['plugin.json', '.mcp.json', 'hooks/hooks.json'].forEach(file => {
119
- if (fs.existsSync(file)) {
120
- try {
121
- const content = fs.readFileSync(file, 'utf8');
122
- JSON.parse(content);
123
- console.log(`✅ ${file} (valid JSON)`);
124
- } catch (e) {
125
- console.log(`❌ ${file} (invalid JSON)`);
126
- }
127
- }
128
- });
129
- console.log('');
130
-
131
- // Summary
132
- console.log('=== TEST SUMMARY ===');
133
- console.log('✅ TypeScript compilation: PASS');
134
- console.log('✅ All compiled files present: PASS');
135
- console.log('✅ Hook scripts ready: PASS');
136
- console.log('✅ Web UI accessible: PASS');
137
- console.log(allTestsPassed ? '✅ Smart search heuristics: PASS' : '❌ Smart search heuristics: FAIL');
138
- console.log('✅ Configuration files valid: PASS');
139
- console.log('\n🎉 All systems ready!');
@@ -1,139 +0,0 @@
1
- import { getDb } from './dist/db/index.js';
2
- import { rememberMemory, searchMemories } from './dist/features/memory/memories.js';
3
- import { getCoreMemory, initializeCoreMemory, editCoreMemorySection } from './dist/core/core-memory.js';
4
- import { ensureProject } from './dist/core/projects.js';
5
-
6
- console.log('=== MEMORY SYSTEM TEST ===\n');
7
-
8
- try {
9
- // Initialize database
10
- console.log('1️⃣ Initializing database...');
11
- await getDb();
12
- console.log('✅ Database initialized\n');
13
-
14
- // Ensure project exists
15
- console.log('2️⃣ Creating test project...');
16
- const projectPath = process.cwd();
17
- const project = await ensureProject(projectPath);
18
- console.log(`✅ Project created: ${project.id}\n`);
19
-
20
- // Initialize core memory
21
- console.log('3️⃣ Initializing core memory...');
22
- await initializeCoreMemory(project.id);
23
- console.log('✅ Core memory initialized\n');
24
-
25
- // Edit core memory sections
26
- console.log('4️⃣ Setting up core memory...');
27
- await editCoreMemorySection(project.id, 'persona', 'I am Claude, helping with Squish development and memory optimization');
28
- await editCoreMemorySection(project.id, 'project_context', 'Working on Squish v0.5.0 - smart memory system with heuristic-based search');
29
- console.log('✅ Core memory updated\n');
30
-
31
- // Get core memory
32
- console.log('5️⃣ Reading core memory...');
33
- const coreMemory = await getCoreMemory(project.id);
34
- console.log('✅ Core Memory Content:');
35
- console.log(` Persona: ${coreMemory.persona}`);
36
- console.log(` Project: ${coreMemory.project_context}\n`);
37
-
38
- // Store test memories (like grep)
39
- console.log('6️⃣ Storing test memories...');
40
- const memories = [
41
- { content: 'API key for production is stored in .env.production file', type: 'fact' },
42
- { content: 'Database connection string uses PostgreSQL on port 5432', type: 'fact' },
43
- { content: 'Authentication bug fixed: JWT token refresh was missing', type: 'observation' },
44
- { content: 'User preference: always show memory suggestions', type: 'preference' },
45
- { content: 'Cache invalidation strategy: TTL-based with 1 hour expiry', type: 'decision' },
46
- ];
47
-
48
- const storedIds = [];
49
- for (const mem of memories) {
50
- const result = await rememberMemory({
51
- content: mem.content,
52
- type: mem.type,
53
- project: projectPath,
54
- tags: ['test']
55
- });
56
- storedIds.push(result.id);
57
- console.log(`✅ Stored [${mem.type}]: ${mem.content.substring(0, 60)}...`);
58
- }
59
- console.log('');
60
-
61
- // Test grep-like search
62
- console.log('7️⃣ Testing grep-like search (grep memories for "API")...');
63
- const searchResults1 = await searchMemories({
64
- query: 'API',
65
- project: projectPath,
66
- limit: 5
67
- });
68
- console.log(`✅ Found ${searchResults1.length} results:`);
69
- searchResults1.forEach((mem, i) => {
70
- console.log(` ${i+1}. [${mem.type}] "${mem.content.substring(0, 60)}..."`);
71
- });
72
- console.log('');
73
-
74
- // Test grep for "database"
75
- console.log('8️⃣ Testing grep for "database"...');
76
- const searchResults2 = await searchMemories({
77
- query: 'database',
78
- project: projectPath,
79
- limit: 5
80
- });
81
- console.log(`✅ Found ${searchResults2.length} results:`);
82
- searchResults2.forEach((mem, i) => {
83
- console.log(` ${i+1}. [${mem.type}] "${mem.content.substring(0, 60)}..."`);
84
- });
85
- console.log('');
86
-
87
- // Test grep for "authentication"
88
- console.log('9️⃣ Testing grep for "authentication"...');
89
- const searchResults3 = await searchMemories({
90
- query: 'authentication',
91
- project: projectPath,
92
- limit: 5
93
- });
94
- console.log(`✅ Found ${searchResults3.length} results:`);
95
- searchResults3.forEach((mem, i) => {
96
- console.log(` ${i+1}. [${mem.type}] "${mem.content.substring(0, 60)}..."`);
97
- });
98
- console.log('');
99
-
100
- // Test smart search heuristics
101
- console.log('🔟 Testing smart search heuristics...');
102
- function shouldSmartSearch(msg) {
103
- if (!msg || msg.length < 3) return false;
104
- const isQuestion = msg.includes('?');
105
- const questionKeywords = ['what ', 'where ', 'how ', 'remember', 'explain'];
106
- const isQuestionLike = questionKeywords.some(kw => msg.toLowerCase().includes(kw));
107
- const contextKeywords = ['debug', 'error', 'stuck', 'help'];
108
- const hasContextClue = contextKeywords.some(kw => msg.toLowerCase().includes(kw));
109
- return isQuestion || isQuestionLike || hasContextClue;
110
- }
111
-
112
- const testQueries = [
113
- 'What is the API key?',
114
- 'Where is the database config?',
115
- 'I am stuck debugging this error',
116
- 'Remember the authentication fix',
117
- 'Hello world'
118
- ];
119
-
120
- testQueries.forEach(query => {
121
- const shouldSearch = shouldSmartSearch(query);
122
- const icon = shouldSearch ? '✅' : '❌';
123
- console.log(` ${icon} "${query}" → ${shouldSearch ? 'WILL SEARCH' : 'will not search'}`);
124
- });
125
- console.log('');
126
-
127
- console.log('=== TEST SUMMARY ===');
128
- console.log('✅ Database initialized');
129
- console.log('✅ Core memory set up');
130
- console.log('✅ 5 test memories stored');
131
- console.log('✅ Grep-like search working');
132
- console.log('✅ Smart heuristics working');
133
- console.log('\n🎉 MEMORY SYSTEM FULLY OPERATIONAL');
134
-
135
- } catch (error) {
136
- console.error('❌ Error:', error.message);
137
- console.error(error.stack);
138
- process.exit(1);
139
- }
@@ -1,210 +0,0 @@
1
- import Database from 'better-sqlite3';
2
- import { fileURLToPath } from 'url';
3
- import { dirname, join } from 'path';
4
- import fs from 'fs';
5
-
6
- const __filename = fileURLToPath(import.meta.url);
7
- const __dirname = dirname(__filename);
8
-
9
- // Import the bootstrap schema
10
- const { ensureSqliteSchema } = await import('./dist/db/bootstrap.js');
11
- const { initializeCoreMemory, getCoreMemory, editCoreMemorySection, getCoreMemoryStats } = await import('./dist/core/core-memory.js');
12
-
13
- console.log('\n========================================');
14
- console.log(' SQUISH v0.5.0 SYSTEM TEST');
15
- console.log('========================================\n');
16
-
17
- try {
18
- // 1. Test Database Connection and Schema
19
- console.log('1. Testing Database Connection & Schema...');
20
- const dbPath = join(__dirname, 'test-squish.db');
21
-
22
- // Clean up any existing test database
23
- if (fs.existsSync(dbPath)) {
24
- fs.unlinkSync(dbPath);
25
- console.log(' - Cleaned up previous test database');
26
- }
27
-
28
- const db = new Database(dbPath);
29
- console.log(' - SQLite database created at', dbPath);
30
-
31
- // Initialize schema
32
- await ensureSqliteSchema(db);
33
- console.log(' - Database schema initialized successfully');
34
-
35
- // Verify tables exist
36
- const tables = db.prepare(`
37
- SELECT name FROM sqlite_master
38
- WHERE type='table'
39
- ORDER BY name
40
- `).all();
41
- console.log(` - Created ${tables.length} tables:`);
42
- tables.forEach(t => console.log(` * ${t.name}`));
43
-
44
- // 2. Test Core Memory Functionality
45
- console.log('\n2. Testing Core Memory System...');
46
-
47
- // Create a test user first
48
- const userId = 'test-user-001';
49
- db.prepare(`
50
- INSERT OR IGNORE INTO users (id, name, email, created_at, updated_at)
51
- VALUES (?, 'Test User', 'test@example.com', ?, ?)
52
- `).run(userId, Math.floor(Date.now() / 1000), Math.floor(Date.now() / 1000));
53
- console.log(` - Created test user: ${userId}`);
54
-
55
- // Create a test project
56
- const projectId = 'test-project-001';
57
- db.prepare(`
58
- INSERT OR IGNORE INTO projects (id, name, path, created_at, updated_at)
59
- VALUES (?, 'Test Project', '/test/path', ?, ?)
60
- `).run(projectId, Math.floor(Date.now() / 1000), Math.floor(Date.now() / 1000));
61
- console.log(` - Created test project: ${projectId}`);
62
-
63
- // Mock getDb to return our test database
64
- const mockDb = {
65
- prepare: (sql) => db.prepare(sql),
66
- select: () => ({
67
- from: () => ({
68
- where: () => ({
69
- limit: (n) => {
70
- // This is a simplification - actual drizzle-orm is more complex
71
- return [];
72
- }
73
- }),
74
- where: () => ({
75
- limit: (n) => []
76
- })
77
- })
78
- }),
79
- insert: () => ({
80
- into: () => ({
81
- values: () => ({})
82
- })
83
- }),
84
- update: () => ({
85
- set: () => ({
86
- where: () => ({})
87
- })
88
- })
89
- };
90
-
91
- // Initialize core memory sections using direct SQL
92
- const sections = ['persona', 'user_info', 'project_context', 'working_notes'];
93
- for (const section of sections) {
94
- db.prepare(`
95
- INSERT OR IGNORE INTO core_memory (project_id, user_id, section, content, size_bytes, version, created_at, updated_at)
96
- VALUES (?, ?, ?, '', 0, 1, ?, ?)
97
- `).run(projectId, userId, section, Math.floor(Date.now() / 1000), Math.floor(Date.now() / 1000));
98
- }
99
- console.log(' - Core memory sections initialized');
100
-
101
- // Write to each section
102
- console.log(' - Testing core memory operations:');
103
-
104
- const sections_data = {
105
- persona: 'I am a helpful AI assistant specialized in code and technical tasks.',
106
- user_info: 'The user is a developer working on the Squish memory system.',
107
- project_context: 'Squish is a two-tier memory system with core memory (2KB) and context paging.',
108
- working_notes: 'Current focus: Testing v0.5.0 functionality including database and hooks.'
109
- };
110
-
111
- for (const [section, content] of Object.entries(sections_data)) {
112
- const sizeBytes = Buffer.byteLength(content, 'utf8');
113
- db.prepare(`
114
- UPDATE core_memory
115
- SET content = ?, size_bytes = ?, version = version + 1, updated_at = ?
116
- WHERE project_id = ? AND section = ?
117
- `).run(content, sizeBytes, Math.floor(Date.now() / 1000), projectId, section);
118
- console.log(` * ${section}: ${content.substring(0, 40)}...`);
119
- }
120
-
121
- // Read back core memory
122
- const coreMemoryData = db.prepare(`
123
- SELECT section, content, size_bytes, version
124
- FROM core_memory
125
- WHERE project_id = ?
126
- ORDER BY section
127
- `).all(projectId);
128
-
129
- console.log(' - Retrieved core memory sections:');
130
- let totalBytes = 0;
131
- for (const row of coreMemoryData) {
132
- totalBytes += row.size_bytes;
133
- console.log(` * ${row.section}: ${row.size_bytes} bytes (v${row.version})`);
134
- }
135
- console.log(` - Total core memory usage: ${totalBytes}/2048 bytes (${(totalBytes/2048*100).toFixed(1)}%)`);
136
-
137
- // 3. Test Hooks Configuration
138
- console.log('\n3. Testing Hooks Configuration...');
139
-
140
- const hooksPath = join(__dirname, 'hooks', 'hooks.json');
141
- if (fs.existsSync(hooksPath)) {
142
- const hooksConfig = JSON.parse(fs.readFileSync(hooksPath, 'utf8'));
143
- console.log(' - Hooks configuration found');
144
- console.log(` - Configured hooks:`);
145
- for (const [hookName, hookConfig] of Object.entries(hooksConfig)) {
146
- console.log(` * ${hookName}:`);
147
- if (hookConfig.command) console.log(` - command: ${hookConfig.command}`);
148
- if (hookConfig.filter) console.log(` - filter: ${JSON.stringify(hookConfig.filter)}`);
149
- }
150
- } else {
151
- console.log(' - No hooks.json found (optional)');
152
- }
153
-
154
- // 4. Test Plugin Configuration
155
- console.log('\n4. Testing Plugin Configuration...');
156
-
157
- const pluginJsonPath = join(__dirname, 'plugin.json');
158
- if (fs.existsSync(pluginJsonPath)) {
159
- const pluginConfig = JSON.parse(fs.readFileSync(pluginJsonPath, 'utf8'));
160
- console.log(' - Plugin metadata:');
161
- console.log(` * Name: ${pluginConfig.name}`);
162
- console.log(` * Version: ${pluginConfig.version}`);
163
- console.log(` * MCP Server: ${pluginConfig.mcpServer}`);
164
- console.log(` * Commands directory: ${pluginConfig.commands}`);
165
- }
166
-
167
- // 5. Test Commands Documentation
168
- console.log('\n5. Testing Command Documentation...');
169
-
170
- const commandsDir = join(__dirname, 'commands');
171
- let commandCount = 0;
172
- if (fs.existsSync(commandsDir)) {
173
- const commands = fs.readdirSync(commandsDir).filter(f => f.endsWith('.md'));
174
- commandCount = commands.length;
175
- console.log(` - Found ${commands.length} command files:`);
176
- commands.forEach(cmd => {
177
- const cmdPath = join(commandsDir, cmd);
178
- const content = fs.readFileSync(cmdPath, 'utf8');
179
- const description = content.match(/description: (.+)/)?.[1] || 'No description';
180
- console.log(` * ${cmd.replace('.md', '')}: ${description}`);
181
- });
182
- }
183
-
184
- // 6. Cleanup
185
- console.log('\n6. Cleanup...');
186
- db.close();
187
- fs.unlinkSync(dbPath);
188
- console.log(' - Test database cleaned up');
189
-
190
- // Summary
191
- console.log('\n========================================');
192
- console.log(' TEST RESULTS: ALL PASSED');
193
- console.log('========================================\n');
194
- console.log('Summary:');
195
- console.log(' - Database connection: OK');
196
- console.log(' - Schema initialization: OK');
197
- console.log(` - Core memory sections: OK (${sections.length} sections)`);
198
- console.log(' - Core memory storage: OK');
199
- console.log(' - Core memory retrieval: OK');
200
- console.log(' - Hooks configuration: OK');
201
- console.log(' - Plugin configuration: OK');
202
- console.log(` - Command files: OK (${commandCount} commands)`);
203
- console.log('\nv0.5.0 system is ready for deployment!\n');
204
-
205
- } catch (error) {
206
- console.error('\nTEST FAILED:');
207
- console.error('Error:', error.message);
208
- console.error('Stack:', error.stack);
209
- process.exit(1);
210
- }