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,4 +0,0 @@
1
- declare const app: import("express-serve-static-core").Express;
2
- export declare function startWebServer(): void;
3
- export default app;
4
- //# sourceMappingURL=web.d.ts.map
@@ -1,393 +0,0 @@
1
- #!/usr/bin/env node
2
- // CRITICAL: Redirect console.log to stderr to prevent JSON-RPC stream corruption
3
- // MCP stdio requires stdout to contain ONLY valid JSON-RPC messages
4
- console.log = console.error;
5
- console.info = console.error;
6
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
7
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
8
- import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse.js";
9
- import express from "express";
10
- import { z } from "zod";
11
- import { config } from "../config.js";
12
- import { hybridSearch } from "../core/memory/hybrid-retrieval.js";
13
- import { rememberMemory, searchMemories, getMemoryById } from "../core/memory/memories.js";
14
- import { getEmbedding } from "../core/embeddings.js";
15
- import { getQMDClient } from "../core/embeddings/qmd-client.js";
16
- import { createAssociation, getRelatedMemories } from "../core/associations.js";
17
- import { createObservation, getObservationsForProject } from "../core/observations.js";
18
- import { getProjectByPath, getAllProjects } from "../core/projects.js";
19
- import { getMemoryStats } from "../core/memory/stats.js";
20
- import { getDb } from "../db/index.js";
21
- import { getSchema } from "../db/schema.js";
22
- import { eq } from "drizzle-orm";
23
- const SERVER_NAME = "squish-memory";
24
- const SERVER_VERSION = "1.0.2";
25
- function parseArgs() {
26
- const args = process.argv.slice(2);
27
- let mode = "stdio";
28
- let port = config.mcpServerPort || 8767;
29
- let health = false;
30
- for (let i = 0; i < args.length; i++) {
31
- if (args[i] === "--http" || args[i] === "-h") {
32
- mode = "http";
33
- }
34
- else if (args[i] === "--stdio" || args[i] === "-s") {
35
- mode = "stdio";
36
- }
37
- else if (args[i] === "--port" || args[i] === "-p") {
38
- port = parseInt(args[i + 1], 10) || 8767;
39
- i++;
40
- }
41
- else if (args[i] === "--health" || args[i] === "--check") {
42
- health = true;
43
- }
44
- }
45
- if (process.env.SQUISH_MCP_MODE === "http") {
46
- mode = "http";
47
- }
48
- return { mode, port, health };
49
- }
50
- function safeRegisterTool(server, name, definition, handler) {
51
- try {
52
- server.registerTool(name, definition, handler);
53
- console.error(`[MCP] Registered tool: ${name}`);
54
- return true;
55
- }
56
- catch (error) {
57
- console.error(`[MCP] Failed to register tool ${name}:`, error);
58
- return false;
59
- }
60
- }
61
- function createSquishServer() {
62
- const server = new McpServer({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {} } });
63
- let toolCount = 0;
64
- console.error(`[MCP] Starting tool registration...`);
65
- if (safeRegisterTool(server, "squish_search", {
66
- description: "Hybrid search across QMD, SQLite DB, and embeddings with graph expansion",
67
- inputSchema: {
68
- query: z.string().describe("Search query"),
69
- limit: z.number().min(1).max(100).default(5).describe("Maximum results"),
70
- project: z.string().optional().describe("Project path filter"),
71
- mode: z.enum(["hybrid", "qmd", "db", "semantic"]).default("hybrid").describe("Search mode")
72
- }
73
- }, async ({ query, limit = 5, project, mode = "hybrid" }) => {
74
- const results = await hybridSearch({
75
- query,
76
- limit,
77
- project,
78
- candidateLimit: 50,
79
- resultLimit: limit
80
- });
81
- const formatted = results.map((r, i) => `${i + 1}. [${r.type || "memory"}] ${r.content?.substring(0, 200)}... (score: ${r.hybridScore?.toFixed(2)})`).join("\n");
82
- return { content: [{ type: "text", text: `Found ${results.length} memories:\n\n${formatted}` }] };
83
- }))
84
- toolCount++;
85
- if (safeRegisterTool(server, "squish_remember", {
86
- description: "Store a new memory in Squish with automatic embedding",
87
- inputSchema: {
88
- content: z.string().describe("Memory content to store"),
89
- type: z.enum(["observation", "fact", "decision", "context", "preference"]).default("observation").describe("Memory type"),
90
- tags: z.array(z.string()).optional().describe("Optional tags"),
91
- project: z.string().optional().describe("Project path")
92
- }
93
- }, async ({ content, type = "observation", tags = [], project }) => {
94
- const memory = await rememberMemory({ content, type: type, tags, project });
95
- return { content: [{ type: "text", text: `Memory stored: ${memory.id}` }] };
96
- }))
97
- toolCount++;
98
- if (safeRegisterTool(server, "squish_recall", {
99
- description: "Retrieve a specific memory by ID",
100
- inputSchema: {
101
- memoryId: z.string().uuid().describe("Memory ID to retrieve")
102
- }
103
- }, async ({ memoryId }) => {
104
- const memory = await getMemoryById(memoryId);
105
- if (!memory) {
106
- return { content: [{ type: "text", text: `Memory not found: ${memoryId}` }], isError: true };
107
- }
108
- return { content: [{ type: "text", text: JSON.stringify(memory, null, 2) }] };
109
- }))
110
- toolCount++;
111
- if (safeRegisterTool(server, "squish_forget", {
112
- description: "Delete a memory by ID",
113
- inputSchema: {
114
- memoryId: z.string().uuid().describe("Memory ID to delete")
115
- }
116
- }, async ({ memoryId }) => {
117
- const db = await getDb();
118
- const schema = await getSchema();
119
- // Cast to any to handle Drizzle ORM union type issue
120
- const sqliteDb = db;
121
- const result = await sqliteDb.delete(schema.memories).where(eq(schema.memories.id, memoryId));
122
- return { content: [{ type: "text", text: `Memory deleted: ${memoryId}` }] };
123
- }))
124
- toolCount++;
125
- if (safeRegisterTool(server, "squish_update", {
126
- description: "Update an existing memory",
127
- inputSchema: {
128
- memoryId: z.string().uuid().describe("Memory ID to update"),
129
- content: z.string().optional().describe("New content"),
130
- tags: z.array(z.string()).optional().describe("New tags"),
131
- type: z.enum(["observation", "fact", "decision", "context", "preference"]).optional().describe("New type")
132
- }
133
- }, async ({ memoryId, content, tags, type }) => {
134
- const db = await getDb();
135
- const schema = await getSchema();
136
- const updates = {};
137
- if (content)
138
- updates.content = content;
139
- if (tags)
140
- updates.tags = config.isTeamMode ? tags : JSON.stringify(tags);
141
- if (type)
142
- updates.type = type;
143
- if (Object.keys(updates).length === 0) {
144
- return { content: [{ type: "text", text: "No updates provided" }], isError: true };
145
- }
146
- // Cast to any to handle Drizzle ORM union type issue
147
- const sqliteDb2 = db;
148
- await sqliteDb2.update(schema.memories).set(updates).where(eq(schema.memories.id, memoryId));
149
- return { content: [{ type: "text", text: `Memory updated: ${memoryId}` }] };
150
- }))
151
- toolCount++;
152
- if (safeRegisterTool(server, "squish_qmd_search", {
153
- description: "Search markdown files using QMD (BM25 + vector)",
154
- inputSchema: {
155
- query: z.string().describe("Search query"),
156
- collection: z.string().optional().describe("QMD collection name"),
157
- limit: z.number().min(1).max(100).default(10).describe("Maximum results")
158
- }
159
- }, async ({ query, collection, limit = 10 }) => {
160
- const client = await getQMDClient();
161
- const available = await client.isAvailable();
162
- if (!available) {
163
- return { content: [{ type: "text", text: "QMD not available. Install with: bun install -g qmd" }], isError: true };
164
- }
165
- const results = await client.search({ query, collection, limit });
166
- const formatted = results.map((r, i) => `${i + 1}. ${r.path || r.file} (score: ${r.score?.toFixed(2)})\n ${r.content?.substring(0, 150)}...`).join("\n\n");
167
- return { content: [{ type: "text", text: `QMD found ${results.length} results:\n\n${formatted}` }] };
168
- }))
169
- toolCount++;
170
- if (safeRegisterTool(server, "squish_associate", {
171
- description: "Create an association between two memories in the graph",
172
- inputSchema: {
173
- fromMemoryId: z.string().uuid().describe("Source memory ID"),
174
- toMemoryId: z.string().uuid().describe("Target memory ID"),
175
- type: z.enum(["relates_to", "supersedes", "contradicts", "supports", "duplicate", "merged"]).describe("Association type"),
176
- weight: z.number().min(0).max(1).default(0.5).describe("Association strength (0-1)")
177
- }
178
- }, async ({ fromMemoryId, toMemoryId, type, weight = 0.5 }) => {
179
- await createAssociation(fromMemoryId, toMemoryId, type, weight);
180
- return { content: [{ type: "text", text: `Association created: ${fromMemoryId} -> ${toMemoryId} (${type})` }] };
181
- }))
182
- toolCount++;
183
- if (safeRegisterTool(server, "squish_related", {
184
- description: "Get related memories via graph traversal",
185
- inputSchema: {
186
- memoryId: z.string().uuid().describe("Memory ID to find relations for"),
187
- depth: z.number().min(1).max(5).default(2).describe("Graph traversal depth"),
188
- minWeight: z.number().min(0).max(1).default(0.3).describe("Minimum association weight")
189
- }
190
- }, async ({ memoryId, depth = 2, minWeight = 0.3 }) => {
191
- const related = await getRelatedMemories(memoryId, depth * 5);
192
- const filtered = related.filter((r) => r.weight >= minWeight);
193
- const formatted = filtered.map((r, i) => `${i + 1}. [${r.type || "memory"}] ${r.content?.substring(0, 100)}... (weight: ${r.weight?.toFixed(2)})`).join("\n");
194
- return { content: [{ type: "text", text: `Found ${related.length} related memories:\n\n${formatted}` }] };
195
- }))
196
- toolCount++;
197
- if (safeRegisterTool(server, "squish_context", {
198
- description: "Get project context with relevant memories",
199
- inputSchema: {
200
- project: z.string().describe("Project path"),
201
- limit: z.number().min(1).max(50).default(10).describe("Maximum memories to return")
202
- }
203
- }, async ({ project, limit = 10 }) => {
204
- const projectRecord = await getProjectByPath(project);
205
- if (!projectRecord) {
206
- return { content: [{ type: "text", text: `Project not found: ${project}` }], isError: true };
207
- }
208
- const recentMemories = await searchMemories({ query: "", project, limit });
209
- const observations = await getObservationsForProject(project, 5);
210
- const context = {
211
- project: projectRecord,
212
- recentMemories: recentMemories.slice(0, limit),
213
- recentObservations: observations
214
- };
215
- return { content: [{ type: "text", text: JSON.stringify(context, null, 2) }] };
216
- }))
217
- toolCount++;
218
- if (safeRegisterTool(server, "squish_observe", {
219
- description: "Store an observation about tool usage, patterns, or insights",
220
- inputSchema: {
221
- type: z.enum(["tool_use", "file_change", "error", "pattern", "insight"]).describe("Observation type"),
222
- action: z.string().describe("Action performed"),
223
- summary: z.string().describe("Summary of observation"),
224
- target: z.string().optional().describe("Target file or resource"),
225
- project: z.string().optional().describe("Project path")
226
- }
227
- }, async ({ type, action, summary, target, project }) => {
228
- const observation = await createObservation({ type, action, summary, target, project });
229
- return { content: [{ type: "text", text: `Observation stored: ${observation.id}` }] };
230
- }))
231
- toolCount++;
232
- if (safeRegisterTool(server, "squish_embed", {
233
- description: "Generate embeddings for text using configured provider",
234
- inputSchema: {
235
- text: z.string().describe("Text to embed")
236
- }
237
- }, async ({ text }) => {
238
- const embedding = await getEmbedding(text);
239
- if (!embedding) {
240
- return { content: [{ type: "text", text: "Failed to generate embedding" }], isError: true };
241
- }
242
- return { content: [{ type: "text", text: JSON.stringify({ dimensions: embedding.length, preview: embedding.slice(0, 5) }, null, 2) }] };
243
- }))
244
- toolCount++;
245
- if (safeRegisterTool(server, "squish_health", {
246
- description: "Check Squish system health status",
247
- inputSchema: {}
248
- }, async () => {
249
- const qmdClient = await getQMDClient();
250
- const qmdAvailable = await qmdClient.isAvailable();
251
- return { content: [{ type: "text", text: JSON.stringify({
252
- status: "ok",
253
- version: SERVER_VERSION,
254
- mode: config.isManagedMode ? "managed" : "local",
255
- embeddings: config.embeddingsProvider,
256
- qmd: qmdAvailable ? "available" : "unavailable",
257
- timestamp: new Date().toISOString()
258
- }, null, 2) }] };
259
- }))
260
- toolCount++;
261
- if (safeRegisterTool(server, "squish_stats", {
262
- description: "Get memory statistics for a project",
263
- inputSchema: {
264
- project: z.string().optional().describe("Project path (defaults to current)")
265
- }
266
- }, async ({ project }) => {
267
- const stats = await getMemoryStats(project || process.cwd());
268
- return { content: [{ type: "text", text: JSON.stringify(stats, null, 2) }] };
269
- }))
270
- toolCount++;
271
- if (safeRegisterTool(server, "squish_projects", {
272
- description: "List all registered projects",
273
- inputSchema: {}
274
- }, async () => {
275
- const projects = await getAllProjects();
276
- const formatted = projects.map((p, i) => `${i + 1}. ${p.name}\n Path: ${p.path}\n ID: ${p.id}`).join("\n\n");
277
- return { content: [{ type: "text", text: `Found ${projects.length} projects:\n\n${formatted}` }] };
278
- }))
279
- toolCount++;
280
- console.error(`[MCP] Tool registration complete. Registered ${toolCount} tools.`);
281
- return { server, toolCount };
282
- }
283
- async function runStdio(server, toolCount) {
284
- console.error(`[MCP] Starting in STDIO mode...`);
285
- const transport = new StdioServerTransport();
286
- transport.onclose = () => {
287
- console.error(`[MCP] STDIO transport closed`);
288
- };
289
- await server.connect(transport);
290
- console.error(`[MCP] Connected via stdio. ${toolCount} tools available.`);
291
- // Keep process alive - wait for stdin to close or process signals
292
- await new Promise((resolve) => {
293
- process.stdin.on('close', () => {
294
- console.error(`[MCP] STDIO stdin closed, shutting down`);
295
- resolve();
296
- });
297
- process.on('SIGINT', () => {
298
- console.error(`[MCP] Received SIGINT, shutting down`);
299
- resolve();
300
- });
301
- process.on('SIGTERM', () => {
302
- console.error(`[MCP] Received SIGTERM, shutting down`);
303
- resolve();
304
- });
305
- });
306
- }
307
- async function runHttp(server, port) {
308
- console.error(`[MCP] Starting in HTTP mode on port ${port}...`);
309
- const app = express();
310
- app.use(express.json());
311
- const transports = new Map();
312
- app.get("/health", (req, res) => {
313
- res.json({ status: "ok", server: SERVER_NAME, version: SERVER_VERSION });
314
- });
315
- app.get("/sse", async (req, res) => {
316
- const transport = new SSEServerTransport("/message", res);
317
- const sessionId = Math.random().toString(36).substring(7);
318
- transports.set(sessionId, transport);
319
- console.error(`[MCP] SSE connection established: ${sessionId}`);
320
- await server.connect(transport);
321
- req.on("close", () => {
322
- console.error(`[MCP] SSE connection closed: ${sessionId}`);
323
- transports.delete(sessionId);
324
- });
325
- });
326
- app.post("/message", async (req, res) => {
327
- const sessionId = req.headers["mcp-session-id"] || "default";
328
- const transport = transports.get(sessionId);
329
- if (!transport) {
330
- res.status(400).json({ error: "No active session" });
331
- return;
332
- }
333
- try {
334
- await transport.handlePostMessage(req, res);
335
- }
336
- catch (error) {
337
- console.error(`[MCP] Error handling message:`, error);
338
- res.status(500).json({ error: "Internal server error" });
339
- }
340
- });
341
- await new Promise((resolve) => app.listen(port, () => {
342
- console.error(`[MCP] HTTP server listening on port ${port}`);
343
- console.error(`[MCP] SSE endpoint: http://localhost:${port}/sse`);
344
- console.error(`[MCP] Health: http://localhost:${port}/health`);
345
- resolve();
346
- }));
347
- }
348
- async function runHealthCheck() {
349
- console.error(`[MCP] Running health check...`);
350
- try {
351
- const { server, toolCount } = createSquishServer();
352
- console.error(`[MCP] Health check passed. Server initialized with ${toolCount} tools.`);
353
- process.exit(0);
354
- }
355
- catch (error) {
356
- console.error(`[MCP] Health check failed:`, error);
357
- process.exit(1);
358
- }
359
- }
360
- async function main() {
361
- try {
362
- console.error(`[${SERVER_NAME}] v${SERVER_VERSION} initializing...`);
363
- console.error(`[${SERVER_NAME}] Mode: ${config.isManagedMode ? "managed" : "local"}`);
364
- console.error(`[${SERVER_NAME}] Embeddings: ${config.embeddingsProvider}`);
365
- const { mode, port, health } = parseArgs();
366
- if (health) {
367
- await runHealthCheck();
368
- return;
369
- }
370
- const { server, toolCount } = createSquishServer();
371
- const shutdown = async () => {
372
- console.error(`[${SERVER_NAME}] Shutting down...`);
373
- process.exit(0);
374
- };
375
- process.on("SIGINT", shutdown);
376
- process.on("SIGTERM", shutdown);
377
- if (mode === "stdio") {
378
- await runStdio(server, toolCount);
379
- }
380
- else {
381
- await runHttp(server, port);
382
- }
383
- }
384
- catch (error) {
385
- console.error(`[${SERVER_NAME}] Fatal error:`, error);
386
- process.exit(1);
387
- }
388
- }
389
- main().catch((error) => {
390
- console.error(`[${SERVER_NAME}] Fatal error:`, error);
391
- process.exit(1);
392
- });
393
- //# sourceMappingURL=mcp-server.js.map
@@ -1,24 +0,0 @@
1
- import { getProjectByPath } from './projects.js';
2
- import { getRecentMemories } from './memory/memories.js';
3
- import { getObservationsForProject } from './observations.js';
4
- import { getEntitiesForProject } from './search/entities.js';
5
- export async function getProjectContext(input) {
6
- const project = await getProjectByPath(input.project);
7
- const include = input.include ?? ['memories', 'observations'];
8
- const limit = Math.min(Math.max(input.limit ?? 10, 1), 100);
9
- if (!project) {
10
- return { project: null, memories: [], observations: [] };
11
- }
12
- const result = { project };
13
- if (include.includes('memories')) {
14
- result.memories = await getRecentMemories(project.path, limit);
15
- }
16
- if (include.includes('observations')) {
17
- result.observations = await getObservationsForProject(project.path, limit);
18
- }
19
- if (include.includes('entities')) {
20
- result.entities = await getEntitiesForProject(project.path, limit);
21
- }
22
- return result;
23
- }
24
- //# sourceMappingURL=context.js.map
@@ -1,64 +0,0 @@
1
- /**
2
- * Memory Governance
3
- * Implements protection, pinning, and immutability rules
4
- */
5
- import { eq } from 'drizzle-orm';
6
- import { getDb } from '../db/index.js';
7
- import { getSchema } from '../db/schema.js';
8
- import { config } from '../config.js';
9
- import { performMemoryOperation } from './utils/memory-operations.js';
10
- import { logger } from './logger.js';
11
- /**
12
- * Mark a memory as protected (cannot be evicted)
13
- */
14
- export async function protectMemory(memoryId, reason) {
15
- await performMemoryOperation(memoryId, {
16
- name: 'protecting memory',
17
- updates: {
18
- isProtected: true,
19
- metadata: { protectionReason: reason, protectedAt: new Date().toISOString() },
20
- },
21
- });
22
- }
23
- /**
24
- * Pin a memory for automatic injection into context
25
- */
26
- export async function pinMemory(memoryId) {
27
- await performMemoryOperation(memoryId, {
28
- name: 'pinning memory',
29
- updates: {
30
- isPinned: true,
31
- metadata: { pinnedAt: new Date().toISOString() },
32
- },
33
- });
34
- }
35
- /**
36
- * Unpin a memory
37
- */
38
- export async function unpinMemory(memoryId) {
39
- await performMemoryOperation(memoryId, {
40
- name: 'unpinning memory',
41
- updates: { isPinned: false },
42
- });
43
- }
44
- /**
45
- * Get all pinned memories for auto-injection into context
46
- */
47
- export async function getPinnedMemories() {
48
- if (!config.governanceEnabled)
49
- return [];
50
- try {
51
- const db = await getDb();
52
- const schema = await getSchema();
53
- return await db
54
- .select()
55
- .from(schema.memories)
56
- .where(eq(schema.memories.isPinned, true))
57
- .limit(50);
58
- }
59
- catch (error) {
60
- logger.error('Error retrieving pinned memories', error);
61
- return [];
62
- }
63
- }
64
- //# sourceMappingURL=governance.js.map
@@ -1,26 +0,0 @@
1
- export type ObservationType = 'tool_use' | 'file_change' | 'error' | 'pattern' | 'insight';
2
- export interface ObservationInput {
3
- type: ObservationType;
4
- action: string;
5
- target?: string;
6
- summary: string;
7
- details?: Record<string, unknown>;
8
- session?: string;
9
- project?: string;
10
- }
11
- export interface ObservationRecord {
12
- id: string;
13
- projectId?: string | null;
14
- conversationId?: string | null;
15
- type: ObservationType;
16
- action: string;
17
- target?: string | null;
18
- summary: string;
19
- details?: Record<string, unknown> | null;
20
- createdAt?: string | null;
21
- }
22
- export declare function createObservation(input: ObservationInput): Promise<ObservationRecord>;
23
- export declare function getObservationsForProject(projectPath: string, limit: number): Promise<ObservationRecord[]>;
24
- export declare function getRecentObservations(projectPath: string, limit?: number): Promise<ObservationRecord[]>;
25
- export declare function getObservationById(observationId: string): Promise<ObservationRecord | null>;
26
- //# sourceMappingURL=observations.d.ts.map
@@ -1,110 +0,0 @@
1
- import { randomUUID } from 'crypto';
2
- import { desc, eq } from 'drizzle-orm';
3
- import { getDb } from '../db/index.js';
4
- import { getSchema } from '../db/schema.js';
5
- import { config } from '../config.js';
6
- import { getEmbedding } from './embeddings.js';
7
- import { ensureProject, getProjectByPath } from './projects.js';
8
- import { fromSqliteJson, toSqliteJson } from './memory/serialization.js';
9
- import { createDatabaseClient } from './database.js';
10
- import { normalizeTimestamp, prepareEmbedding } from './utils.js';
11
- import { logger } from './logger.js';
12
- export async function createObservation(input) {
13
- const db = createDatabaseClient(await getDb());
14
- const schema = await getSchema();
15
- const project = await ensureProject(input.project);
16
- const embedding = await getEmbedding(input.summary);
17
- const id = randomUUID();
18
- const baseValues = {
19
- id,
20
- projectId: project?.id ?? null,
21
- type: input.type,
22
- action: input.action,
23
- target: input.target ?? null,
24
- summary: input.summary,
25
- };
26
- const embeddingValues = prepareEmbedding(embedding);
27
- const detailsValue = config.isTeamMode ? input.details ?? null : toSqliteJson(input.details ?? null);
28
- await db.insert(schema.observations).values({
29
- ...baseValues,
30
- details: detailsValue,
31
- ...embeddingValues,
32
- createdAt: new Date(),
33
- });
34
- return {
35
- id,
36
- projectId: project?.id ?? null,
37
- conversationId: null,
38
- type: input.type,
39
- action: input.action,
40
- target: input.target ?? null,
41
- summary: input.summary,
42
- details: input.details ?? null,
43
- };
44
- }
45
- export async function getObservationsForProject(projectPath, limit) {
46
- try {
47
- const db = createDatabaseClient(await getDb());
48
- const schema = await getSchema();
49
- const project = await getProjectByPath(projectPath);
50
- if (!project)
51
- return [];
52
- const rows = await db.select().from(schema.observations)
53
- .where(eq(schema.observations.projectId, project.id))
54
- .orderBy(desc(schema.observations.createdAt))
55
- .limit(limit);
56
- return rows.map((row) => normalizeObservation(row));
57
- }
58
- catch (error) {
59
- throw error;
60
- }
61
- }
62
- export async function getRecentObservations(projectPath, limit = 10) {
63
- try {
64
- const db = createDatabaseClient(await getDb());
65
- const schema = await getSchema();
66
- const project = await getProjectByPath(projectPath);
67
- if (!project)
68
- return [];
69
- const rows = await db.select().from(schema.observations)
70
- .where(eq(schema.observations.projectId, project.id))
71
- .orderBy(desc(schema.observations.createdAt))
72
- .limit(limit);
73
- return rows.map((row) => normalizeObservation(row));
74
- }
75
- catch (error) {
76
- logger.error('Error getting recent observations', error);
77
- throw error;
78
- }
79
- }
80
- export async function getObservationById(observationId) {
81
- try {
82
- const db = createDatabaseClient(await getDb());
83
- const schema = await getSchema();
84
- const rows = await db.select().from(schema.observations)
85
- .where(eq(schema.observations.id, observationId))
86
- .limit(1);
87
- if (rows.length === 0)
88
- return null;
89
- return normalizeObservation(rows[0]);
90
- }
91
- catch (error) {
92
- logger.error('Error getting observation', error);
93
- throw error;
94
- }
95
- }
96
- function normalizeObservation(row) {
97
- const details = config.isTeamMode ? row.details : fromSqliteJson(row.details ?? null);
98
- return {
99
- id: row.id,
100
- projectId: row.projectId ?? row.project_id ?? null,
101
- conversationId: row.conversationId ?? row.conversation_id ?? null,
102
- type: row.type,
103
- action: row.action,
104
- target: row.target ?? null,
105
- summary: row.summary,
106
- details,
107
- createdAt: normalizeTimestamp(row.createdAt ?? row.created_at),
108
- };
109
- }
110
- //# sourceMappingURL=observations.js.map
@@ -1,20 +0,0 @@
1
- export interface MemoryCriteria {
2
- tag?: string;
3
- type?: string;
4
- types?: string[];
5
- sector?: string;
6
- minAge?: number;
7
- maxAge?: number;
8
- minConfidence?: number;
9
- minRelevance?: number;
10
- projectId?: string;
11
- agentId?: string;
12
- visibilityScope?: string;
13
- }
14
- export declare function requireMemory(criteria: MemoryCriteria): Promise<any>;
15
- export declare function assertMemoryPresent(memoryId: string): Promise<void>;
16
- export declare function assertMemoryNotPresent(criteria: MemoryCriteria): Promise<void>;
17
- export declare function requireMemories(criteria: MemoryCriteria, minCount?: number): Promise<any[]>;
18
- export declare function requireHighConfidenceMemory(criteria: MemoryCriteria, minConfidence?: number): Promise<any>;
19
- export declare function requireRecentMemory(criteria: MemoryCriteria, maxAgeDays?: number): Promise<any>;
20
- //# sourceMappingURL=requirements.d.ts.map
@@ -1,35 +0,0 @@
1
- // Deterministic Memory Requirements
2
- import { eq } from 'drizzle-orm';
3
- import { getSchema } from '../db/schema.js';
4
- import { buildMemoryFilters, buildMemoryFiltersPartial } from './utils/filter-builder.js';
5
- import { executeMemoryAssertion } from './utils/query-operations.js';
6
- export async function requireMemory(criteria) {
7
- const schema = await getSchema();
8
- const filters = buildMemoryFilters(criteria, schema);
9
- const memories = await executeMemoryAssertion(criteria, filters, 1, 'memory requirement', 'Required memory not found');
10
- return memories[0];
11
- }
12
- export async function assertMemoryPresent(memoryId) {
13
- const criteria = { memoryId };
14
- const schema = await getSchema();
15
- const filters = [eq(schema.memories.id, memoryId)];
16
- await executeMemoryAssertion(criteria, filters, 1, 'asserting memory presence', 'Required memory is not present: ' + memoryId);
17
- }
18
- export async function assertMemoryNotPresent(criteria) {
19
- const schema = await getSchema();
20
- const filters = buildMemoryFiltersPartial(criteria, schema);
21
- await executeMemoryAssertion(criteria, filters, 0, 'checking memory non-presence', 'Memory should not exist but was found');
22
- }
23
- export async function requireMemories(criteria, minCount = 1) {
24
- const schema = await getSchema();
25
- const filters = buildMemoryFilters(criteria, schema);
26
- return executeMemoryAssertion(criteria, filters, minCount, 'checking memory requirements', `Required ${minCount} memories but found fewer`);
27
- }
28
- export async function requireHighConfidenceMemory(criteria, minConfidence = 80) {
29
- return requireMemory({ ...criteria, minConfidence });
30
- }
31
- export async function requireRecentMemory(criteria, maxAgeDays = 7) {
32
- const maxAge = maxAgeDays * 24 * 60 * 60 * 1000;
33
- return requireMemory({ ...criteria, maxAge });
34
- }
35
- //# sourceMappingURL=requirements.js.map