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
package/hooks/hooks.json DELETED
@@ -1,52 +0,0 @@
1
- {
2
- "hooks": {
3
- "SessionStart": [
4
- {
5
- "matcher": ".*",
6
- "hooks": [
7
- {
8
- "type": "command",
9
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/session-start.js\"",
10
- "timeout": 30000
11
- }
12
- ]
13
- }
14
- ],
15
- "UserPromptSubmit": [
16
- {
17
- "matcher": ".*",
18
- "hooks": [
19
- {
20
- "type": "command",
21
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/user-prompt-submit.js\"",
22
- "timeout": 10000
23
- }
24
- ]
25
- }
26
- ],
27
- "PostToolUse": [
28
- {
29
- "matcher": ".*",
30
- "hooks": [
31
- {
32
- "type": "command",
33
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/post-tool-use.js\"",
34
- "timeout": 10000
35
- }
36
- ]
37
- }
38
- ],
39
- "SessionEnd": [
40
- {
41
- "matcher": ".*",
42
- "hooks": [
43
- {
44
- "type": "command",
45
- "command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/session-end.js\"",
46
- "timeout": 60000
47
- }
48
- ]
49
- }
50
- ]
51
- }
52
- }
@@ -1,26 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- readStdin,
4
- parseClaudeContext,
5
- createHookContext,
6
- importHandler,
7
- executeHandler,
8
- outputResult,
9
- handleFatalError,
10
- } from './utils.js';
11
-
12
- (async () => {
13
- try {
14
- const inputData = await readStdin();
15
- const claudeContext = parseClaudeContext(inputData);
16
-
17
- const context = createHookContext(claudeContext, true); // Include userMessage for tool context
18
- const handler = await importHandler('onPostToolUse');
19
- const result = await executeHandler(handler, context, 'PostToolUse');
20
-
21
- outputResult(result);
22
- process.exit(0);
23
- } catch (error) {
24
- handleFatalError(error);
25
- }
26
- })();
@@ -1,28 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- readStdin,
4
- parseClaudeContext,
5
- createHookContext,
6
- importHandler,
7
- executeHandler,
8
- handleFatalError,
9
- } from './utils.js';
10
-
11
- (async () => {
12
- try {
13
- const inputData = await readStdin();
14
- const claudeContext = parseClaudeContext(inputData);
15
-
16
- const context = createHookContext(claudeContext);
17
- const handler = await importHandler('onSessionStop');
18
-
19
- // Session end doesn't return context, just executes
20
- if (handler) {
21
- await handler(context);
22
- }
23
-
24
- process.exit(0);
25
- } catch (error) {
26
- handleFatalError(error);
27
- }
28
- })();
@@ -1,33 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- readStdin,
4
- parseClaudeContext,
5
- createHookContext,
6
- importHandler,
7
- executeHandler,
8
- outputResult,
9
- handleFatalError,
10
- } from './utils.js';
11
-
12
- (async () => {
13
- try {
14
- const inputData = await readStdin();
15
- const claudeContext = parseClaudeContext(inputData);
16
-
17
- // Ensure data directory exists
18
- const { ensureDataDirectory } = await import(
19
- new URL('../dist/db/bootstrap.js', import.meta.url)
20
- );
21
- await ensureDataDirectory();
22
-
23
- // Create hook context and execute handler
24
- const context = createHookContext(claudeContext);
25
- const handler = await importHandler('onSessionStart');
26
- const result = await executeHandler(handler, context, 'SessionStart');
27
-
28
- outputResult(result);
29
- process.exit(0);
30
- } catch (error) {
31
- handleFatalError(error);
32
- }
33
- })();
@@ -1,26 +0,0 @@
1
- #!/usr/bin/env node
2
- import {
3
- readStdin,
4
- parseClaudeContext,
5
- createHookContext,
6
- importHandler,
7
- executeHandler,
8
- outputResult,
9
- handleFatalError,
10
- } from './utils.js';
11
-
12
- (async () => {
13
- try {
14
- const inputData = await readStdin();
15
- const claudeContext = parseClaudeContext(inputData);
16
-
17
- const context = createHookContext(claudeContext, true); // Include userMessage
18
- const handler = await importHandler('onUserPromptSubmit');
19
- const result = await executeHandler(handler, context, 'UserPromptSubmit');
20
-
21
- outputResult(result);
22
- process.exit(0);
23
- } catch (error) {
24
- handleFatalError(error);
25
- }
26
- })();
package/hooks/utils.js DELETED
@@ -1,153 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Hook Utilities - Shared functionality for Claude Code hooks
4
- * Eliminates duplication across session-start, session-end, user-prompt-submit, post-tool-use
5
- */
6
-
7
- import { fileURLToPath } from 'url';
8
- import { dirname, resolve } from 'path';
9
-
10
- const __filename = fileURLToPath(import.meta.url);
11
- const __dirname = dirname(__filename);
12
-
13
- export const DEFAULT_TIMEOUT_MS = 2000;
14
-
15
- /**
16
- * Read JSON context from stdin with timeout
17
- * @param {number} timeoutMs - Timeout in milliseconds
18
- * @returns {Promise<string>} - Stdin content
19
- */
20
- export function readStdin(timeoutMs = DEFAULT_TIMEOUT_MS) {
21
- return new Promise((resolve, reject) => {
22
- let inputData = '';
23
- let hasInput = false;
24
-
25
- const stdinTimeout = setTimeout(() => {
26
- if (!hasInput) {
27
- resolve(''); // Resolve with empty string on timeout
28
- }
29
- }, timeoutMs);
30
-
31
- process.stdin.on('readable', () => {
32
- let chunk;
33
- while ((chunk = process.stdin.read()) !== null) {
34
- inputData += chunk;
35
- hasInput = true;
36
- }
37
- });
38
-
39
- process.stdin.on('end', () => {
40
- clearTimeout(stdinTimeout);
41
- resolve(inputData);
42
- });
43
-
44
- process.stdin.on('error', (err) => {
45
- clearTimeout(stdinTimeout);
46
- reject(err);
47
- });
48
- });
49
- }
50
-
51
- /**
52
- * Parse Claude Code context from stdin data
53
- * @param {string} data - Raw stdin data
54
- * @returns {Object} - Parsed context or empty object
55
- */
56
- export function parseClaudeContext(data) {
57
- if (!data || !data.trim()) {
58
- return {};
59
- }
60
-
61
- try {
62
- return JSON.parse(data);
63
- } catch {
64
- return {};
65
- }
66
- }
67
-
68
- /**
69
- * Create standardized hook context from Claude Code data
70
- * @param {Object} claudeContext - Parsed Claude context
71
- * @param {boolean} includeUserMessage - Whether to include user message
72
- * @returns {Object} - Hook context
73
- */
74
- export function createHookContext(claudeContext, includeUserMessage = false) {
75
- return {
76
- workingDirectory: claudeContext.cwd || process.cwd(),
77
- sessionId: claudeContext.session_id || 'unknown',
78
- ...(includeUserMessage && { userMessage: claudeContext.prompt }),
79
- config: {
80
- autoCapture: true,
81
- autoInject: true,
82
- generateFolderContext: true,
83
- },
84
- };
85
- }
86
-
87
- /**
88
- * Import plugin wrapper handler with error handling
89
- * @param {string} handlerName - Name of handler to import
90
- * @returns {Promise<Function|null>} - Handler function or null
91
- */
92
- export async function importHandler(handlerName) {
93
- try {
94
- const modulePath = resolve(__dirname, '../dist/adapters/claude-code/plugin-wrapper.js');
95
- const module = await import(`file://${modulePath}`);
96
- return module[handlerName] || null;
97
- } catch (error) {
98
- console.error(`Failed to import ${handlerName}:`, error.message);
99
- return null;
100
- }
101
- }
102
-
103
- /**
104
- * Execute hook handler with standardized error handling
105
- * @param {Function|null} handler - Handler function
106
- * @param {Object} context - Hook context
107
- * @param {string} hookEventName - Name of hook event
108
- * @returns {Promise<Object>} - Hook result
109
- */
110
- export async function executeHandler(handler, context, hookEventName) {
111
- if (!handler) {
112
- return {
113
- continue: true,
114
- hookSpecificOutput: { hookEventName },
115
- };
116
- }
117
-
118
- try {
119
- const result = await handler(context);
120
- return {
121
- continue: true,
122
- hookSpecificOutput: {
123
- hookEventName,
124
- ...(result && { additionalContext: result }),
125
- },
126
- };
127
- } catch (error) {
128
- console.error('Hook error:', error.message);
129
- return {
130
- continue: true,
131
- hookSpecificOutput: { hookEventName },
132
- };
133
- }
134
- }
135
-
136
- /**
137
- * Output standardized hook result
138
- * @param {Object} result - Hook result
139
- */
140
- export function outputResult(result) {
141
- // Use console.log which automatically flushes
142
- // The key is to ensure no other output goes to stdout
143
- console.log(JSON.stringify(result));
144
- }
145
-
146
- /**
147
- * Handle fatal hook error
148
- * @param {Error} error - Error object
149
- */
150
- export function handleFatalError(error) {
151
- console.error('Hook error:', error.message);
152
- process.exit(2);
153
- }
package/npx-installer.js DELETED
@@ -1,208 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- // Squish v0.2.7 - npx installer for Claude Code Plugin
4
- // Usage: npx squish-install
5
-
6
- import { execSync } from 'child_process';
7
- import fs from 'fs';
8
- import path from 'path';
9
- import https from 'https';
10
- import os from 'os';
11
-
12
- // Colors for output
13
- const colors = {
14
- red: '\x1b[31m',
15
- green: '\x1b[32m',
16
- yellow: '\x1b[33m',
17
- blue: '\x1b[34m',
18
- reset: '\x1b[0m'
19
- };
20
-
21
- function log(color, message) {
22
- console.log(`${color}${message}${colors.reset}`);
23
- }
24
-
25
- function detectPlatform() {
26
- const platform = os.platform();
27
- const arch = os.arch();
28
-
29
- switch (platform) {
30
- case 'linux':
31
- return { platform: 'linux', arch: arch === 'x64' ? 'x64' : 'arm64' };
32
- case 'darwin':
33
- return { platform: 'macos', arch: 'arm64' }; // Assume Apple Silicon for now
34
- case 'win32':
35
- return { platform: 'windows', arch: arch === 'x64' ? 'x64' : 'arm64' };
36
- default:
37
- throw new Error(`Unsupported platform: ${platform}`);
38
- }
39
- }
40
-
41
- async function downloadFile(url, destPath) {
42
- return new Promise((resolve, reject) => {
43
- const file = fs.createWriteStream(destPath);
44
- https.get(url, (response) => {
45
- if (response.statusCode !== 200) {
46
- reject(new Error(`Failed to download: ${response.statusCode}`));
47
- return;
48
- }
49
-
50
- response.pipe(file);
51
- file.on('finish', () => {
52
- file.close();
53
- resolve();
54
- });
55
- }).on('error', (err) => {
56
- fs.unlink(destPath, () => {});
57
- reject(err);
58
- });
59
- });
60
- }
61
-
62
- async function installSquish() {
63
- log(colors.blue, '🐙 Installing Squish Memory v0.2.7...');
64
-
65
- const { platform, arch } = detectPlatform();
66
- const version = '0.2.7';
67
- const baseUrl = `https://github.com/michielhdoteth/squish/releases/download/v${version}`;
68
-
69
- let filename, extractCmd;
70
- if (platform === 'windows') {
71
- filename = `squish-v${version}-windows-${arch}.zip`;
72
- extractCmd = `powershell -Command "Expand-Archive -Path '${filename}' -DestinationPath '.' -Force"`;
73
- } else {
74
- filename = `squish-v${version}-${platform}-${arch}.tar.gz`;
75
- extractCmd = `tar -xzf ${filename}`;
76
- }
77
-
78
- const downloadUrl = `${baseUrl}/${filename}`;
79
-
80
- // Create temp directory
81
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'squish-install-'));
82
- const cwd = process.cwd();
83
- process.chdir(tmpDir);
84
-
85
- try {
86
- log(colors.blue, `Downloading Squish for ${platform}-${arch}...`);
87
- await downloadFile(downloadUrl, filename);
88
-
89
- log(colors.blue, 'Extracting...');
90
- execSync(extractCmd, { stdio: 'inherit' });
91
-
92
- // Install to ~/.squish
93
- const installDir = path.join(os.homedir(), '.squish');
94
- fs.mkdirSync(installDir, { recursive: true });
95
-
96
- // Copy files
97
- const sourceDir = path.join(tmpDir, 'squish');
98
- if (fs.existsSync(sourceDir)) {
99
- copyDirRecursive(sourceDir, installDir);
100
- } else {
101
- // Files might be in root
102
- fs.readdirSync(tmpDir)
103
- .filter(file => file !== filename && file !== 'squish')
104
- .forEach(file => {
105
- const src = path.join(tmpDir, file);
106
- const dest = path.join(installDir, file);
107
- if (fs.statSync(src).isDirectory()) {
108
- copyDirRecursive(src, dest);
109
- } else {
110
- fs.copyFileSync(src, dest);
111
- }
112
- });
113
- }
114
-
115
- // Make executable
116
- const binPath = path.join(installDir, 'bin', platform === 'windows' ? 'squish.exe' : 'squish');
117
- if (fs.existsSync(binPath)) {
118
- fs.chmodSync(binPath, '755');
119
- }
120
-
121
- log(colors.green, `✓ Installed to: ${installDir}`);
122
-
123
- } finally {
124
- process.chdir(cwd);
125
- // Clean up temp directory
126
- try {
127
- fs.rmSync(tmpDir, { recursive: true, force: true });
128
- } catch (e) {
129
- // Ignore cleanup errors
130
- }
131
- }
132
- }
133
-
134
- function copyDirRecursive(src, dest) {
135
- fs.mkdirSync(dest, { recursive: true });
136
- const entries = fs.readdirSync(src, { withFileTypes: true });
137
-
138
- for (const entry of entries) {
139
- const srcPath = path.join(src, entry.name);
140
- const destPath = path.join(dest, entry.name);
141
-
142
- if (entry.isDirectory()) {
143
- copyDirRecursive(srcPath, destPath);
144
- } else {
145
- fs.copyFileSync(srcPath, destPath);
146
- }
147
- }
148
- }
149
-
150
- function setupClaude() {
151
- log(colors.blue, 'Configuring Claude Code...');
152
-
153
- const claudeConfigDir = path.join(os.homedir(), '.claude');
154
- const claudeConfigPath = path.join(claudeConfigDir, 'settings.json');
155
-
156
- fs.mkdirSync(claudeConfigDir, { recursive: true });
157
-
158
- // Backup existing config
159
- if (fs.existsSync(claudeConfigPath)) {
160
- const backupPath = `${claudeConfigPath}.backup.${Date.now()}`;
161
- fs.copyFileSync(claudeConfigPath, backupPath);
162
- }
163
-
164
- const installDir = path.join(os.homedir(), '.squish');
165
- const binPath = path.join(installDir, 'bin', os.platform() === 'win32' ? 'squish.exe' : 'squish');
166
-
167
- let config;
168
- try {
169
- config = JSON.parse(fs.readFileSync(claudeConfigPath, 'utf8'));
170
- } catch (e) {
171
- config = {};
172
- }
173
-
174
- if (!config.mcpServers) {
175
- config.mcpServers = {};
176
- }
177
-
178
- config.mcpServers.squish = {
179
- command: 'node',
180
- args: [binPath]
181
- };
182
-
183
- fs.writeFileSync(claudeConfigPath, JSON.stringify(config, null, 2));
184
-
185
- log(colors.green, '✓ Claude Code configured');
186
- }
187
-
188
- async function main() {
189
- try {
190
- await installSquish();
191
- setupClaude();
192
-
193
- console.log('');
194
- log(colors.green, '🎉 Squish v0.2.7 installed successfully!');
195
- console.log('');
196
- log(colors.blue, 'Next steps:');
197
- console.log(' 1. Restart Claude Code');
198
- console.log(' 2. Visit http://localhost:37777 for web UI');
199
- console.log('');
200
- log(colors.blue, 'Documentation: https://github.com/michielhdoteth/squish');
201
-
202
- } catch (error) {
203
- log(colors.red, `❌ Installation failed: ${error.message}`);
204
- process.exit(1);
205
- }
206
- }
207
-
208
- main();
@@ -1,73 +0,0 @@
1
- # Squish Memory for Claude Code
2
-
3
- Claude Code plugin for automatic memory capture and context injection with Squish.
4
-
5
- ## Installation
6
-
7
- ```bash
8
- npm install @squish/memory-claude-code
9
- ```
10
-
11
- ## Features
12
-
13
- - **Automatic Memory Capture**: User prompts are automatically stored as memories
14
- - **Context Injection**: Relevant past memories are injected into Claude's context
15
- - **Session Summaries**: End-of-session summaries are stored for long-term retention
16
- - **Debounced Capture**: 2-second debounce avoids noise
17
-
18
- ## Hooks
19
-
20
- This plugin implements Claude Code plugin hooks:
21
-
22
- - `SessionStart` - Initialize memory session
23
- - `UserPromptSubmit` - Capture user input (2s debounced)
24
- - `PostToolUse` - Capture tool usage observations
25
- - `SessionEnd` - Generate and store session summary
26
-
27
- ## Setup
28
-
29
- 1. Ensure Squish MCP server is running:
30
- ```bash
31
- npx squish-memory install-plugin --client=claude-code
32
- ```
33
-
34
- 2. Claude Code will automatically load the plugin on next start if installed globally
35
-
36
- 3. Verify plugin is active:
37
- ```bash
38
- npx squish-memory install-plugin --client=claude-code --verify
39
- ```
40
-
41
- ## Configuration
42
-
43
- Environment variables:
44
-
45
- | Variable | Description |
46
- |----------|-------------|
47
- | `SQUISH_DATA_DIR` | Data directory (default: `~/.squish/claude`) |
48
- | `SQUISH_COMMAND` | Command to start Squish MCP (default: `squish-mcp`) |
49
-
50
- ## How It Works
51
-
52
- 1. **Session Start**: Plugin connects to Squish MCP and creates a session
53
- 2. **User Input Capture**: Prompts are debounced (2s) then stored as `observation` type memories with tags `user-prompt`, `claude-code`
54
- 3. **Tool Use Capture**: (Planned) Tool calls and results stored as `observation`
55
- 4. **Session End**: Summary generated and stored, session statistics recorded
56
-
57
- ## Development
58
-
59
- ```bash
60
- cd packages/plugin-claude-code
61
- npm install
62
- npm run build
63
- ```
64
-
65
- ## Compatibility
66
-
67
- - Claude Code v0.62+
68
- - Node.js 18+
69
- - Squish v1.0.0+
70
-
71
- ## License
72
-
73
- MIT
@@ -1,35 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Claude Code Plugin: Squish Memory Integration
4
- *
5
- * Hooks:
6
- * - SessionStart: Initialize memory session
7
- * - UserPromptSubmit: Capture user input as memory
8
- * - PostToolUse: Capture tool usage as observations
9
- * - SessionEnd: Summarize session
10
- */
11
- declare class ClaudeCodeSquishPlugin {
12
- private client;
13
- private sessionId;
14
- private workspaceDir;
15
- private debounceTimer;
16
- private recentMemories;
17
- constructor();
18
- initialize(): Promise<void>;
19
- private connectToSquish;
20
- private registerHooks;
21
- private onSessionStart;
22
- private onUserPromptSubmit;
23
- private captureUserPrompt;
24
- private onPostToolUse;
25
- private onSessionEnd;
26
- private summarizeSession;
27
- private observe;
28
- private callTool;
29
- shutdown(): Promise<void>;
30
- }
31
- export declare function onSessionStart(): Promise<ClaudeCodeSquishPlugin>;
32
- export declare function onUserPromptSubmit(prompt: string): Promise<void>;
33
- export declare function onSessionEnd(): Promise<void>;
34
- export {};
35
- //# sourceMappingURL=plugin-wrapper.d.ts.map