squish-memory 1.0.2 → 1.2.0

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 (704) hide show
  1. package/.env.example +146 -0
  2. package/CHANGELOG.md +202 -0
  3. package/README.md +192 -287
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +46 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +10 -12
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +78 -22
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/core/algorithms/index.ts +39 -0
  36. package/core/algorithms/operations/cache-maintenance.ts +182 -0
  37. package/core/algorithms/safety/safety-checks.ts +256 -0
  38. package/core/algorithms/strategies/merge-strategies.ts +381 -0
  39. package/core/algorithms/types.ts +140 -0
  40. package/core/algorithms/utils/response-builder.ts +61 -0
  41. package/core/associations.ts +363 -0
  42. package/core/beliefs/decay.ts +289 -0
  43. package/core/beliefs/extractor.ts +131 -0
  44. package/core/beliefs/store.ts +557 -0
  45. package/core/beliefs/types.ts +38 -0
  46. package/core/commands/mcp-server.ts +5 -0
  47. package/core/compression.ts +177 -0
  48. package/core/config.js +2 -0
  49. package/core/consolidation.ts +330 -0
  50. package/core/context/agent-context.ts +388 -0
  51. package/core/context/context-paging.ts +449 -0
  52. package/core/context/context-window.ts +234 -0
  53. package/core/context/context.ts +35 -0
  54. package/core/embeddings/embeddings.ts +616 -0
  55. package/core/embeddings/google-multimodal.ts +200 -0
  56. package/core/embeddings/local-embeddings.ts +12 -0
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/core/lib/db-client.ts +168 -0
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/core/lib/schemas.ts +102 -0
  83. package/core/lib/types.ts +49 -0
  84. package/core/lib/utils.ts +151 -0
  85. package/core/lib/validation.ts +180 -0
  86. package/core/lifecycle.ts +353 -0
  87. package/core/logger.ts +59 -0
  88. package/core/memory/bridge-discovery.ts +395 -0
  89. package/core/memory/categorizer.ts +390 -0
  90. package/core/memory/conflict-detector.ts +62 -0
  91. package/core/memory/consolidation.ts +372 -0
  92. package/core/memory/context-collector.ts +75 -0
  93. package/core/memory/contradiction-resolver.ts +494 -0
  94. package/core/memory/edit-workflow.ts +174 -0
  95. package/core/memory/entity-extractor.ts +426 -0
  96. package/core/memory/entity-resolver.ts +89 -0
  97. package/core/memory/explain.ts +112 -0
  98. package/core/memory/fact-deriver.ts +300 -0
  99. package/core/memory/fact-extractor.ts +120 -0
  100. package/core/memory/feedback-tracker.ts +200 -0
  101. package/core/memory/hooks.ts +230 -0
  102. package/core/memory/hybrid-retrieval.ts +65 -0
  103. package/core/memory/hybrid-scorer.ts +325 -0
  104. package/core/memory/hybrid-search.ts +748 -0
  105. package/core/memory/importance.ts +319 -0
  106. package/core/memory/index.ts +11 -0
  107. package/core/memory/loader.ts +178 -0
  108. package/core/memory/markdown/markdown-storage.ts +318 -0
  109. package/core/memory/memories.ts +565 -0
  110. package/core/memory/memory-lifecycle.ts +51 -0
  111. package/core/memory/memory-manager.ts +53 -0
  112. package/core/memory/migrate.ts +173 -0
  113. package/core/memory/normalization.ts +30 -0
  114. package/core/memory/path-strengthener.ts +211 -0
  115. package/core/memory/progressive-disclosure.ts +392 -0
  116. package/core/memory/query-processor.ts +130 -0
  117. package/core/memory/query-rewriter.ts +153 -0
  118. package/core/memory/response-analyzer.ts +81 -0
  119. package/core/memory/retrieval-feedback.ts +276 -0
  120. package/core/memory/serialization.ts +83 -0
  121. package/core/memory/stale-cleaner.ts +147 -0
  122. package/core/memory/stats.ts +181 -0
  123. package/core/memory/telemetry.ts +392 -0
  124. package/core/memory/temporal-facts.ts +356 -0
  125. package/core/memory/temporal-parser.ts +477 -0
  126. package/core/memory/trigger-detector.ts +104 -0
  127. package/core/memory/write-gate.ts +288 -0
  128. package/core/places/index.ts +14 -0
  129. package/core/places/memory-places.ts +339 -0
  130. package/core/places/places.ts +406 -0
  131. package/core/places/rules.ts +308 -0
  132. package/core/places/walking.ts +192 -0
  133. package/core/projects +89 -0
  134. package/core/projects.ts +131 -0
  135. package/core/redis.ts +82 -0
  136. package/core/responses.ts +187 -0
  137. package/core/runtime/trust-report.ts +195 -0
  138. package/core/runtime/trust-state.ts +360 -0
  139. package/core/scheduler/cron-scheduler.ts +581 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/core/scheduler/index.ts +8 -0
  142. package/core/scheduler/job-runner.ts +197 -0
  143. package/core/search/conversations.ts +166 -0
  144. package/core/search/entities.ts +46 -0
  145. package/core/search/folder-context.ts +154 -0
  146. package/core/search/graph-boost.ts +22 -0
  147. package/core/search/index.ts +4 -0
  148. package/core/search/qmd-wrapper.ts +84 -0
  149. package/core/security/encrypt.ts +51 -0
  150. package/core/security/governance.ts +102 -0
  151. package/core/security/privacy.ts +108 -0
  152. package/core/security/secret-detector.ts +122 -0
  153. package/core/session/auto-load.ts +160 -0
  154. package/core/session/entity-tracker.ts +363 -0
  155. package/core/session/index.ts +7 -0
  156. package/core/session/reference-resolver.ts +158 -0
  157. package/core/session/self-iteration-job.ts +478 -0
  158. package/core/session/session-hooks.ts +69 -0
  159. package/core/session/types.ts +36 -0
  160. package/core/session/working-set.ts +275 -0
  161. package/core/snapshots/cleanup.ts +13 -0
  162. package/core/snapshots/comparison.ts +59 -0
  163. package/core/snapshots/creation.ts +139 -0
  164. package/core/snapshots/retrieval.ts +44 -0
  165. package/core/snapshots/stats.ts +63 -0
  166. package/core/storage/cache.ts +241 -0
  167. package/core/storage/database.ts +23 -0
  168. package/core/summarization/cleanup.ts +13 -0
  169. package/core/summarization/queries.ts +32 -0
  170. package/core/summarization/stats.ts +64 -0
  171. package/core/summarization/strategies.ts +52 -0
  172. package/core/summarization.ts +248 -0
  173. package/core/temporal-facts.ts +244 -0
  174. package/core/tracing/collector.ts +470 -0
  175. package/core/tracing/visualizer.ts +195 -0
  176. package/core/utils/cleanup-operations.ts +50 -0
  177. package/core/utils/content-extraction.ts +95 -0
  178. package/core/utils/filter-builder.ts +56 -0
  179. package/core/utils/history-traversal.ts +63 -0
  180. package/core/utils/memory-operations.ts +56 -0
  181. package/core/utils/query-operations.ts +83 -0
  182. package/core/utils/summarization-helpers.ts +45 -0
  183. package/core/utils/temporal-queries.ts +39 -0
  184. package/core/utils/vector-operations.ts +135 -0
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +324 -0
  187. package/db/adapter.ts +215 -0
  188. package/db/bootstrap.ts +1055 -0
  189. package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
  190. package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
  191. package/db/drizzle/migrations/meta/_journal.json +13 -0
  192. package/db/drizzle/schema-sqlite.ts +1032 -0
  193. package/db/drizzle/schema.ts +1128 -0
  194. package/db/drizzle.config.ts +12 -0
  195. package/db/index.ts +83 -0
  196. package/db/init.sql +5 -0
  197. package/db/migrations/associations.ts +35 -0
  198. package/db/migrations/beliefs.ts +89 -0
  199. package/db/migrations/core-memory.ts +35 -0
  200. package/db/migrations/fts.ts +59 -0
  201. package/db/migrations/index.ts +54 -0
  202. package/db/migrations/indexes.ts +36 -0
  203. package/db/migrations/learnings.ts +34 -0
  204. package/db/migrations/maintenance.ts +68 -0
  205. package/db/migrations/memories.ts +22 -0
  206. package/db/migrations/memory-places.ts +35 -0
  207. package/db/migrations/places.ts +49 -0
  208. package/db/migrations/projects.ts +21 -0
  209. package/db/migrations/tier-conversion.ts +24 -0
  210. package/db/neon.ts +22 -0
  211. package/db/schema/beliefs.ts +50 -0
  212. package/db/schema/generator.ts +159 -0
  213. package/db/schema/index.ts +58 -0
  214. package/db/schema/learnings.ts +32 -0
  215. package/db/schema/memories.ts +83 -0
  216. package/db/schema/projects.ts +33 -0
  217. package/db/schema.ts +13 -0
  218. package/db/supabase.ts +27 -0
  219. package/dist/config.d.ts +61 -14
  220. package/dist/config.js +159 -139
  221. package/dist/core/adapters/config/claude-code.d.ts +45 -0
  222. package/dist/core/adapters/config/claude-code.js +113 -0
  223. package/dist/core/adapters/config/cursor.d.ts +26 -0
  224. package/dist/core/adapters/config/cursor.js +74 -0
  225. package/dist/core/adapters/config/opencode.d.ts +23 -0
  226. package/dist/core/adapters/config/opencode.js +73 -0
  227. package/dist/core/adapters/config/windsurf.d.ts +26 -0
  228. package/dist/core/adapters/config/windsurf.js +74 -0
  229. package/dist/core/adapters/index.d.ts +45 -0
  230. package/dist/core/adapters/index.js +84 -0
  231. package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
  232. package/dist/core/adapters/scripts/install-adapter.js +149 -0
  233. package/dist/core/adapters/timeline.d.ts +23 -0
  234. package/dist/core/adapters/timeline.js +88 -0
  235. package/dist/core/adapters/types.d.ts +137 -0
  236. package/dist/core/adapters/types.js +50 -0
  237. package/dist/core/agent-preferences.d.ts +16 -0
  238. package/dist/core/agent-preferences.js +124 -0
  239. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
  240. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
  241. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
  242. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
  243. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
  244. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
  245. package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
  246. package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
  247. package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
  248. package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
  249. package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
  250. package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
  251. package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
  252. package/dist/core/algorithms/index.d.ts +21 -0
  253. package/dist/core/algorithms/index.js +26 -0
  254. package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
  255. package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
  256. package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +2 -6
  257. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
  258. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
  259. package/dist/core/algorithms/types.d.ts +125 -0
  260. package/dist/core/algorithms/types.js +5 -0
  261. package/dist/core/associations.d.ts +3 -2
  262. package/dist/core/associations.js +37 -2
  263. package/dist/core/autosave.d.ts +19 -0
  264. package/dist/core/autosave.js +16 -0
  265. package/dist/core/beliefs/decay.d.ts +27 -0
  266. package/dist/core/beliefs/decay.js +217 -0
  267. package/dist/core/beliefs/extractor.d.ts +9 -0
  268. package/dist/core/beliefs/extractor.js +113 -0
  269. package/dist/core/beliefs/store.d.ts +46 -0
  270. package/dist/core/beliefs/store.js +466 -0
  271. package/dist/core/beliefs/types.d.ts +28 -0
  272. package/dist/core/beliefs/types.js +2 -0
  273. package/dist/core/commands/mcp-server.d.ts +2 -0
  274. package/dist/core/commands/mcp-server.js +6 -0
  275. package/dist/core/commands/remember.d.ts +24 -0
  276. package/dist/core/commands/remember.js +144 -0
  277. package/dist/core/compression.d.ts +45 -0
  278. package/dist/core/compression.js +160 -0
  279. package/dist/core/context/agent-context.d.ts +106 -0
  280. package/dist/core/context/agent-context.js +274 -0
  281. package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
  282. package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
  283. package/dist/core/context/context-window.d.ts +40 -0
  284. package/dist/core/context/context-window.js +177 -0
  285. package/dist/core/context/context.js +22 -0
  286. package/dist/core/embeddings/embeddings.d.ts +29 -0
  287. package/dist/core/embeddings/embeddings.js +546 -0
  288. package/dist/core/embeddings/google-multimodal.js +6 -2
  289. package/dist/core/embeddings/local-embeddings.d.ts +11 -0
  290. package/dist/core/embeddings/local-embeddings.js +11 -0
  291. package/dist/core/embeddings/qmd-client.js +1 -1
  292. package/dist/core/embeddings/transformers-local.d.ts +64 -0
  293. package/dist/core/embeddings/transformers-local.js +213 -0
  294. package/dist/core/embeddings.d.ts +1 -28
  295. package/dist/core/embeddings.js +2 -401
  296. package/dist/core/error-handling.d.ts +63 -0
  297. package/dist/core/error-handling.js +173 -0
  298. package/dist/core/graph/entity-deduplicator.d.ts +24 -0
  299. package/dist/core/graph/entity-deduplicator.js +183 -0
  300. package/dist/core/graph/graph-builder.d.ts +46 -0
  301. package/dist/core/graph/graph-builder.js +174 -0
  302. package/dist/core/graph/graph-traversal.d.ts +80 -0
  303. package/dist/core/graph/graph-traversal.js +315 -0
  304. package/dist/core/graph/index.d.ts +19 -0
  305. package/dist/core/graph/index.js +13 -0
  306. package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
  307. package/dist/core/graph/llm-entity-extractor.js +313 -0
  308. package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
  309. package/dist/core/graph/multi-hop-retrieval.js +215 -0
  310. package/dist/core/graph/relationship-extractor.d.ts +48 -0
  311. package/dist/core/graph/relationship-extractor.js +351 -0
  312. package/dist/core/hooks/agent-hooks.d.ts +83 -0
  313. package/dist/core/hooks/agent-hooks.js +521 -0
  314. package/dist/core/hooks/auto-tagger.d.ts +19 -0
  315. package/dist/core/hooks/auto-tagger.js +155 -0
  316. package/dist/core/hooks/capture-filter.d.ts +41 -0
  317. package/dist/core/hooks/capture-filter.js +128 -0
  318. package/dist/core/hot-cache.d.ts +86 -0
  319. package/dist/core/hot-cache.js +285 -0
  320. package/dist/core/index.d.ts +9 -9
  321. package/dist/core/index.js +9 -12
  322. package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
  323. package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +2 -2
  324. package/dist/core/{core-memory.js → ingestion/core-memory.js} +7 -7
  325. package/dist/core/ingestion/learnings.d.ts +57 -0
  326. package/dist/core/ingestion/learnings.js +205 -0
  327. package/dist/core/ingestion/signal-engine.d.ts +41 -0
  328. package/dist/core/ingestion/signal-engine.js +201 -0
  329. package/dist/core/integrations/obsidian-vault.d.ts +31 -0
  330. package/dist/core/integrations/obsidian-vault.js +156 -0
  331. package/dist/core/lib/db-client.d.ts +114 -0
  332. package/dist/core/lib/db-client.js +130 -0
  333. package/dist/core/lib/parse-embedding.d.ts +9 -0
  334. package/dist/core/lib/parse-embedding.js +58 -0
  335. package/dist/core/lib/schemas.d.ts +132 -0
  336. package/dist/core/lib/schemas.js +87 -0
  337. package/dist/core/lib/types.d.ts +45 -0
  338. package/dist/core/lib/types.js +6 -0
  339. package/dist/core/{utils.d.ts → lib/utils.d.ts} +5 -0
  340. package/dist/core/lib/utils.js +145 -0
  341. package/dist/core/lib/validation.d.ts +38 -0
  342. package/dist/core/lib/validation.js +151 -0
  343. package/dist/core/lifecycle.d.ts +7 -1
  344. package/dist/core/lifecycle.js +152 -42
  345. package/dist/core/logger.d.ts +1 -0
  346. package/dist/core/logger.js +13 -1
  347. package/dist/core/mcp/tools.d.ts +0 -2
  348. package/dist/core/mcp/tools.js +35 -90
  349. package/dist/core/mcp/types.d.ts +25 -253
  350. package/dist/core/mcp/types.js +2 -2
  351. package/dist/core/memory/categorizer.js +2 -0
  352. package/dist/core/memory/conflict-detector.js +1 -1
  353. package/dist/core/memory/consolidation.d.ts +1 -10
  354. package/dist/core/memory/consolidation.js +4 -39
  355. package/dist/core/memory/context-collector.js +1 -1
  356. package/dist/core/memory/edit-workflow.js +1 -1
  357. package/dist/core/memory/entity-extractor.d.ts +4 -0
  358. package/dist/core/memory/entity-extractor.js +30 -16
  359. package/dist/core/memory/entity-resolver.js +7 -7
  360. package/dist/core/memory/explain.d.ts +18 -0
  361. package/dist/core/memory/explain.js +92 -0
  362. package/dist/core/memory/fact-deriver.d.ts +31 -0
  363. package/dist/core/memory/fact-deriver.js +236 -0
  364. package/dist/core/memory/fact-extractor.js +12 -12
  365. package/dist/core/memory/feedback-tracker.js +1 -1
  366. package/dist/core/memory/hooks.d.ts +88 -0
  367. package/dist/core/memory/hooks.js +174 -0
  368. package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
  369. package/dist/core/memory/hybrid-retrieval.js +25 -127
  370. package/dist/core/memory/hybrid-scorer.js +6 -23
  371. package/dist/core/memory/hybrid-search.d.ts +9 -11
  372. package/dist/core/memory/hybrid-search.js +496 -273
  373. package/dist/core/memory/importance.d.ts +2 -24
  374. package/dist/core/memory/importance.js +7 -91
  375. package/dist/core/memory/index.d.ts +1 -0
  376. package/dist/core/memory/index.js +1 -0
  377. package/dist/core/memory/loader.d.ts +31 -0
  378. package/dist/core/memory/loader.js +141 -0
  379. package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
  380. package/dist/core/memory/markdown/markdown-storage.js +243 -0
  381. package/dist/core/memory/memories.d.ts +23 -19
  382. package/dist/core/memory/memories.js +243 -228
  383. package/dist/core/memory/memory-lifecycle.d.ts +8 -0
  384. package/dist/core/memory/memory-lifecycle.js +47 -0
  385. package/dist/core/memory/migrate.d.ts +21 -0
  386. package/dist/core/memory/migrate.js +134 -0
  387. package/dist/core/memory/normalization.d.ts +7 -0
  388. package/dist/core/memory/normalization.js +26 -0
  389. package/dist/core/memory/path-strengthener.d.ts +39 -0
  390. package/dist/core/memory/path-strengthener.js +150 -0
  391. package/dist/core/memory/progressive-disclosure.js +1 -1
  392. package/dist/core/memory/query-processor.js +37 -3
  393. package/dist/core/memory/query-rewriter.js +9 -9
  394. package/dist/core/memory/retrieval-feedback.d.ts +70 -0
  395. package/dist/core/memory/retrieval-feedback.js +213 -0
  396. package/dist/core/memory/serialization.d.ts +4 -0
  397. package/dist/core/memory/serialization.js +49 -0
  398. package/dist/core/memory/stale-cleaner.d.ts +26 -0
  399. package/dist/core/memory/stale-cleaner.js +97 -0
  400. package/dist/core/memory/stats.d.ts +15 -0
  401. package/dist/core/memory/stats.js +69 -13
  402. package/dist/core/memory/temporal-facts.js +21 -0
  403. package/dist/core/memory/trigger-detector.d.ts +8 -1
  404. package/dist/core/memory/trigger-detector.js +42 -5
  405. package/dist/core/memory/write-gate.js +1 -1
  406. package/dist/core/places/index.d.ts +14 -0
  407. package/dist/core/places/index.js +14 -0
  408. package/dist/core/places/memory-places.d.ts +68 -0
  409. package/dist/core/places/memory-places.js +261 -0
  410. package/dist/core/places/places.d.ts +88 -0
  411. package/dist/core/places/places.js +314 -0
  412. package/dist/core/places/rules.d.ts +74 -0
  413. package/dist/core/places/rules.js +240 -0
  414. package/dist/core/places/walking.d.ts +56 -0
  415. package/dist/core/places/walking.js +121 -0
  416. package/dist/core/projects.d.ts +5 -0
  417. package/dist/core/projects.js +47 -18
  418. package/dist/core/responses.d.ts +96 -0
  419. package/dist/core/responses.js +122 -0
  420. package/dist/core/runtime/trust-report.d.ts +102 -0
  421. package/dist/core/runtime/trust-report.js +107 -0
  422. package/dist/core/runtime/trust-state.d.ts +12 -0
  423. package/dist/core/runtime/trust-state.js +309 -0
  424. package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
  425. package/dist/core/scheduler/cron-scheduler.js +193 -10
  426. package/dist/core/scheduler/index.d.ts +1 -1
  427. package/dist/core/scheduler/index.js +1 -1
  428. package/dist/core/scheduler/job-runner.js +2 -2
  429. package/dist/core/search/conversations.js +40 -42
  430. package/dist/core/search/entities.js +6 -9
  431. package/dist/core/search/graph-boost.d.ts +7 -0
  432. package/dist/core/search/graph-boost.js +23 -0
  433. package/dist/core/search/qmd-wrapper.d.ts +36 -0
  434. package/dist/core/search/qmd-wrapper.js +58 -0
  435. package/dist/core/security/encrypt.d.ts +6 -0
  436. package/dist/core/security/encrypt.js +47 -0
  437. package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
  438. package/dist/core/security/governance.js +79 -0
  439. package/dist/core/session/auto-load.js +34 -9
  440. package/dist/core/session/entity-tracker.d.ts +62 -0
  441. package/dist/core/session/entity-tracker.js +287 -0
  442. package/dist/core/session/index.d.ts +1 -1
  443. package/dist/core/session/index.js +1 -1
  444. package/dist/core/session/reference-resolver.d.ts +26 -0
  445. package/dist/core/session/reference-resolver.js +121 -0
  446. package/dist/core/{session-hooks → session}/self-iteration-job.d.ts +15 -0
  447. package/dist/core/{session-hooks → session}/self-iteration-job.js +195 -90
  448. package/dist/core/session/working-set.d.ts +50 -0
  449. package/dist/core/session/working-set.js +212 -0
  450. package/dist/core/snapshots/creation.d.ts +2 -8
  451. package/dist/core/snapshots/creation.js +3 -12
  452. package/dist/core/{cache.js → storage/cache.js} +2 -2
  453. package/dist/core/utils/memory-operations.js +1 -1
  454. package/dist/core/utils/summarization-helpers.d.ts +0 -4
  455. package/dist/core/utils/summarization-helpers.js +1 -6
  456. package/dist/core/utils/vector-operations.d.ts +71 -0
  457. package/dist/core/utils/vector-operations.js +129 -0
  458. package/dist/db/adapter.d.ts +3 -3
  459. package/dist/db/adapter.js +99 -88
  460. package/dist/db/bootstrap.d.ts +2 -0
  461. package/dist/db/bootstrap.js +921 -674
  462. package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +775 -25
  463. package/dist/{drizzle → db/drizzle}/schema-sqlite.js +170 -24
  464. package/dist/{drizzle → db/drizzle}/schema.d.ts +731 -32
  465. package/dist/{drizzle → db/drizzle}/schema.js +192 -32
  466. package/dist/db/drizzle.config.d.ts +3 -0
  467. package/dist/db/drizzle.config.js +12 -0
  468. package/dist/db/index.d.ts +1 -5
  469. package/dist/db/index.js +51 -8
  470. package/dist/db/migrations/associations.d.ts +6 -0
  471. package/dist/db/migrations/associations.js +29 -0
  472. package/dist/db/migrations/beliefs.d.ts +10 -0
  473. package/dist/db/migrations/beliefs.js +76 -0
  474. package/dist/db/migrations/core-memory.d.ts +6 -0
  475. package/dist/db/migrations/core-memory.js +29 -0
  476. package/dist/db/migrations/fts.d.ts +6 -0
  477. package/dist/db/migrations/fts.js +52 -0
  478. package/dist/db/migrations/index.d.ts +25 -0
  479. package/dist/db/migrations/index.js +51 -0
  480. package/dist/db/migrations/indexes.d.ts +6 -0
  481. package/dist/db/migrations/indexes.js +30 -0
  482. package/dist/db/migrations/learnings.d.ts +7 -0
  483. package/dist/db/migrations/learnings.js +26 -0
  484. package/dist/db/migrations/maintenance.d.ts +6 -0
  485. package/dist/db/migrations/maintenance.js +61 -0
  486. package/dist/db/migrations/memories.d.ts +7 -0
  487. package/dist/db/migrations/memories.js +16 -0
  488. package/dist/db/migrations/memory-places.d.ts +6 -0
  489. package/dist/db/migrations/memory-places.js +29 -0
  490. package/dist/db/migrations/places.d.ts +6 -0
  491. package/dist/db/migrations/places.js +43 -0
  492. package/dist/db/migrations/projects.d.ts +3 -0
  493. package/dist/db/migrations/projects.js +13 -0
  494. package/dist/db/migrations/tier-conversion.d.ts +7 -0
  495. package/dist/db/migrations/tier-conversion.js +20 -0
  496. package/dist/db/neon.d.ts +8 -0
  497. package/dist/db/neon.js +20 -0
  498. package/dist/db/schema/beliefs.d.ts +9 -0
  499. package/dist/db/schema/beliefs.js +46 -0
  500. package/dist/db/schema/generator.d.ts +38 -0
  501. package/dist/db/schema/generator.js +108 -0
  502. package/dist/db/schema/index.d.ts +39 -0
  503. package/dist/db/schema/index.js +51 -0
  504. package/dist/db/schema/learnings.d.ts +7 -0
  505. package/dist/db/schema/learnings.js +30 -0
  506. package/dist/db/schema/memories.d.ts +7 -0
  507. package/dist/db/schema/memories.js +81 -0
  508. package/dist/db/schema/projects.d.ts +4 -0
  509. package/dist/db/schema/projects.js +31 -0
  510. package/dist/db/schema/tables/context-sessions.d.ts +9 -0
  511. package/dist/db/schema/tables/context-sessions.js +37 -0
  512. package/dist/db/schema/tables/conversations.d.ts +9 -0
  513. package/dist/db/schema/tables/conversations.js +47 -0
  514. package/dist/db/schema/tables/core-memory.d.ts +9 -0
  515. package/dist/db/schema/tables/core-memory.js +41 -0
  516. package/dist/db/schema/tables/entities.d.ts +9 -0
  517. package/dist/db/schema/tables/entities.js +39 -0
  518. package/dist/db/schema/tables/entity-relations.d.ts +9 -0
  519. package/dist/db/schema/tables/entity-relations.js +31 -0
  520. package/dist/db/schema/tables/learnings.d.ts +9 -0
  521. package/dist/db/schema/tables/learnings.js +66 -0
  522. package/dist/db/schema/tables/memories.d.ts +9 -0
  523. package/dist/db/schema/tables/memories.js +161 -0
  524. package/dist/db/schema/tables/memory-associations.d.ts +9 -0
  525. package/dist/db/schema/tables/memory-associations.js +39 -0
  526. package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
  527. package/dist/db/schema/tables/memory-hash-cache.js +29 -0
  528. package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
  529. package/dist/db/schema/tables/memory-merge-history.js +33 -0
  530. package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
  531. package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
  532. package/dist/db/schema/tables/messages.d.ts +9 -0
  533. package/dist/db/schema/tables/messages.js +41 -0
  534. package/dist/db/schema/tables/namespaces.d.ts +9 -0
  535. package/dist/db/schema/tables/namespaces.js +37 -0
  536. package/dist/db/schema/tables/projects.d.ts +9 -0
  537. package/dist/db/schema/tables/projects.js +31 -0
  538. package/dist/db/schema/tables/users.d.ts +9 -0
  539. package/dist/db/schema/tables/users.js +27 -0
  540. package/dist/db/schema.d.ts +1 -1
  541. package/dist/db/schema.js +2 -2
  542. package/dist/db/supabase.d.ts +9 -0
  543. package/dist/db/supabase.js +24 -0
  544. package/dist/packages/mcp/src/index.d.ts +3 -0
  545. package/dist/packages/mcp/src/index.js +733 -0
  546. package/mcp.json.example +8 -0
  547. package/package.json +132 -173
  548. package/packages/cli/package.json +22 -0
  549. package/packages/cli/src/commands/clean.ts +68 -0
  550. package/packages/cli/src/commands/context.ts +79 -0
  551. package/packages/cli/src/commands/doctor.ts +357 -0
  552. package/packages/cli/src/commands/forget.ts +72 -0
  553. package/packages/cli/src/commands/health.ts +36 -0
  554. package/packages/cli/src/commands/inspect.ts +41 -0
  555. package/packages/cli/src/commands/link.ts +50 -0
  556. package/packages/cli/src/commands/migrate.ts +93 -0
  557. package/packages/cli/src/commands/recall.ts +99 -0
  558. package/packages/cli/src/commands/recent.ts +57 -0
  559. package/packages/cli/src/commands/remember.ts +139 -0
  560. package/packages/cli/src/commands/run.ts +58 -0
  561. package/packages/cli/src/commands/stale.ts +43 -0
  562. package/packages/cli/src/commands/stats.ts +42 -0
  563. package/packages/cli/src/index.ts +57 -0
  564. package/packages/cli/tsconfig.json +24 -0
  565. package/packages/mcp/package.json +26 -0
  566. package/packages/mcp/src/index.ts +877 -0
  567. package/packages/mcp/tsconfig.json +20 -0
  568. package/skills/squish-memory/SKILL.md +107 -114
  569. package/skills/squish-memory/install.sh +3 -3
  570. package/skills/squish-memory/{claude-desktop.json → references/claude-desktop.json} +12 -12
  571. package/skills/squish-memory/{openclaw.json → references/openclaw.json} +13 -13
  572. package/skills/squish-memory/{opencode.json → references/opencode.json} +14 -14
  573. package/.claude-plugin/marketplace.json +0 -20
  574. package/.claude-plugin/plugin.json +0 -32
  575. package/.env.mcp.example +0 -60
  576. package/.mcp.json +0 -11
  577. package/QUICK-START.md +0 -71
  578. package/bin/squish-add.mjs +0 -32
  579. package/bin/squish-rm.mjs +0 -21
  580. package/commands/context-paging.md +0 -51
  581. package/commands/context-status.md +0 -22
  582. package/commands/context.md +0 -5
  583. package/commands/core-memory.md +0 -56
  584. package/commands/health.md +0 -5
  585. package/commands/init.md +0 -39
  586. package/commands/merge.md +0 -113
  587. package/commands/observe.md +0 -5
  588. package/commands/recall.md +0 -5
  589. package/commands/remember.md +0 -11
  590. package/commands/search.md +0 -10
  591. package/config/mcp-cli-fallback-policy.json +0 -22
  592. package/config/mcp.json +0 -38
  593. package/config/plugin-manifest.json +0 -152
  594. package/config/plugin-manifest.schema.json +0 -244
  595. package/config/remote-memory-policy.json +0 -32
  596. package/dist/api/web/index.d.ts +0 -3
  597. package/dist/api/web/index.js +0 -4
  598. package/dist/api/web/web-server.d.ts +0 -3
  599. package/dist/api/web/web-server.js +0 -6
  600. package/dist/api/web/web.d.ts +0 -4
  601. package/dist/api/web/web.js +0 -639
  602. package/dist/commands/managed-sync.d.ts +0 -10
  603. package/dist/commands/managed-sync.js +0 -64
  604. package/dist/commands/mcp-server.d.ts +0 -3
  605. package/dist/commands/mcp-server.js +0 -393
  606. package/dist/core/context.js +0 -24
  607. package/dist/core/governance.js +0 -64
  608. package/dist/core/local-embeddings.d.ts +0 -6
  609. package/dist/core/local-embeddings.js +0 -20
  610. package/dist/core/namespaces/index.d.ts +0 -71
  611. package/dist/core/namespaces/index.js +0 -305
  612. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  613. package/dist/core/namespaces/uri-parser.js +0 -74
  614. package/dist/core/observations.d.ts +0 -26
  615. package/dist/core/observations.js +0 -110
  616. package/dist/core/requirements.d.ts +0 -20
  617. package/dist/core/requirements.js +0 -35
  618. package/dist/core/search/qmd-search.d.ts +0 -61
  619. package/dist/core/search/qmd-search.js +0 -178
  620. package/dist/core/snapshots.d.ts +0 -29
  621. package/dist/core/snapshots.js +0 -220
  622. package/dist/core/sync/qmd-sync.d.ts +0 -106
  623. package/dist/core/sync/qmd-sync.js +0 -213
  624. package/dist/core/utils.js +0 -74
  625. package/dist/index.d.ts +0 -19
  626. package/dist/index.js +0 -997
  627. package/generated/mcp/manifest.json +0 -23
  628. package/generated/mcp/mcp-servers.json +0 -25
  629. package/generated/mcp/mcporter.json +0 -34
  630. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  631. package/generated/mcp/runtime.json +0 -12
  632. package/hooks/hooks.json +0 -52
  633. package/hooks/post-tool-use.js +0 -26
  634. package/hooks/session-end.js +0 -28
  635. package/hooks/session-start.js +0 -33
  636. package/hooks/user-prompt-submit.js +0 -26
  637. package/hooks/utils.js +0 -153
  638. package/npx-installer.js +0 -208
  639. package/packages/plugin-claude-code/README.md +0 -73
  640. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
  641. package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
  642. package/packages/plugin-claude-code/package.json +0 -31
  643. package/packages/plugin-openclaw/README.md +0 -70
  644. package/packages/plugin-openclaw/dist/index.d.ts +0 -49
  645. package/packages/plugin-openclaw/dist/index.js +0 -262
  646. package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
  647. package/packages/plugin-openclaw/package.json +0 -31
  648. package/packages/plugin-opencode/install.mjs +0 -217
  649. package/packages/plugin-opencode/package.json +0 -21
  650. package/plugin.json +0 -32
  651. package/scripts/build-release.sh +0 -36
  652. package/scripts/check-secrets.js +0 -132
  653. package/scripts/db/check-db.mjs +0 -88
  654. package/scripts/db/fix-all-columns.mjs +0 -52
  655. package/scripts/db/fix-schema-all.mjs +0 -55
  656. package/scripts/db/fix-schema-full.mjs +0 -46
  657. package/scripts/db/fix-schema.mjs +0 -38
  658. package/scripts/db/init-db.mjs +0 -13
  659. package/scripts/db/recreate-db.mjs +0 -14
  660. package/scripts/generate-mcp.mjs +0 -264
  661. package/scripts/github-release.sh +0 -77
  662. package/scripts/init-dirs.mjs +0 -13
  663. package/scripts/install-interactive.mjs +0 -677
  664. package/scripts/install-mcp.mjs +0 -116
  665. package/scripts/install-plugin.mjs +0 -415
  666. package/scripts/install-web.sh +0 -120
  667. package/scripts/install.mjs +0 -340
  668. package/scripts/openclaw-bootstrap.mjs +0 -127
  669. package/scripts/package-release.sh +0 -71
  670. package/scripts/remote-preflight.mjs +0 -62
  671. package/scripts/squish-fallback.mjs +0 -132
  672. package/scripts/test/test-all-systems.mjs +0 -139
  673. package/scripts/test/test-memory-system.mjs +0 -139
  674. package/scripts/test/test-v0.5.0.mjs +0 -210
  675. package/scripts/test-interactive.mjs +0 -131
  676. package/scripts/verify-mcp.mjs +0 -214
  677. package/skills/memory-guide/SKILL.md +0 -332
  678. package/skills/squish-cli/SKILL.md +0 -240
  679. package/skills/squish-mcp/SKILL.md +0 -355
  680. package/skills/squish-memory/install.mjs +0 -335
  681. package/skills/squish-memory/skill.json +0 -32
  682. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
  683. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
  684. /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
  685. /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
  686. /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
  687. /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
  688. /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
  689. /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
  690. /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
  691. /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
  692. /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
  693. /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
  694. /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
  695. /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
  696. /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
  697. /package/dist/core/{privacy.js → security/privacy.js} +0 -0
  698. /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
  699. /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
  700. /package/dist/core/{session-hooks → session}/session-hooks.d.ts +0 -0
  701. /package/dist/core/{session-hooks → session}/session-hooks.js +0 -0
  702. /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
  703. /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
  704. /package/dist/core/{database.js → storage/database.js} +0 -0
@@ -0,0 +1,466 @@
1
+ import { randomUUID } from 'crypto';
2
+ import { getDbClient } from '../lib/db-client.js';
3
+ import { deserializeMetadata, serializeMetadata } from '../memory/serialization.js';
4
+ import { runBeliefMigrations } from '../../db/migrations/beliefs.js';
5
+ /**
6
+ * Ensure belief tables exist by running migrations if needed.
7
+ * Delegates table creation to the migrations system.
8
+ */
9
+ async function ensureBeliefTables() {
10
+ const { raw } = await getDbClient();
11
+ // For SQLite - check if table exists and run migrations if missing
12
+ const sqlite = raw.$client;
13
+ if (sqlite && typeof sqlite.prepare === 'function') {
14
+ const tableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='beliefs'").get();
15
+ if (!tableCheck) {
16
+ await runBeliefMigrations(sqlite);
17
+ }
18
+ return;
19
+ }
20
+ // For PostgreSQL - check if table exists (migrations are run elsewhere for PG)
21
+ if (typeof raw.query === 'function') {
22
+ const result = await raw.query("SELECT table_name FROM information_schema.tables WHERE table_name = 'beliefs' LIMIT 1");
23
+ if (!result.rows[0]) {
24
+ // For PostgreSQL, we assume migrations are run during bootstrap
25
+ throw new Error('Beliefs table does not exist for PostgreSQL. Run database migrations.');
26
+ }
27
+ }
28
+ }
29
+ function normalizeBeliefKey(belief) {
30
+ return `${belief.type}:${belief.statement.toLowerCase().replace(/\s+/g, ' ').trim()}`;
31
+ }
32
+ export async function upsertBeliefsForMemory(input) {
33
+ await ensureBeliefTables();
34
+ const { raw } = await getDbClient();
35
+ const sqlite = raw.$client;
36
+ if (!sqlite && typeof raw.query !== 'function')
37
+ return [];
38
+ const stored = [];
39
+ if (!sqlite && typeof raw.query === 'function') {
40
+ const pg = raw;
41
+ for (const belief of input.beliefs) {
42
+ const normalizedKey = normalizeBeliefKey(belief);
43
+ const existingResult = await pg.query(`SELECT * FROM beliefs WHERE project_id = $1 AND normalized_key = $2 LIMIT 1`, [input.projectId, normalizedKey]);
44
+ const existing = existingResult.rows[0];
45
+ const beliefId = existing?.id ?? randomUUID();
46
+ const nextStatus = existing
47
+ ? (belief.type === 'dispute' ? 'disputed' : existing.status || belief.status)
48
+ : belief.status;
49
+ if (existing) {
50
+ await pg.query(`UPDATE beliefs
51
+ SET confidence = $1, status = $2, reason = $3, context = $4, evidence_summary = $5, metadata = $6, updated_at = NOW()
52
+ WHERE id = $7`, [
53
+ Math.max(Number(existing.confidence ?? 0.5), belief.confidence),
54
+ nextStatus,
55
+ belief.reason ?? null,
56
+ belief.context ?? null,
57
+ belief.evidenceSummary ?? null,
58
+ { edges: belief.edges ?? [] },
59
+ beliefId,
60
+ ]);
61
+ }
62
+ else {
63
+ await pg.query(`INSERT INTO beliefs (id, project_id, belief_type, statement, normalized_key, confidence, status, reason, context, evidence_summary, metadata)
64
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)`, [
65
+ beliefId,
66
+ input.projectId,
67
+ belief.type,
68
+ belief.statement,
69
+ normalizedKey,
70
+ belief.confidence,
71
+ belief.status,
72
+ belief.reason ?? null,
73
+ belief.context ?? null,
74
+ belief.evidenceSummary ?? null,
75
+ { edges: belief.edges ?? [] },
76
+ ]);
77
+ }
78
+ await pg.query(`INSERT INTO belief_memory_sources (id, belief_id, memory_id)
79
+ VALUES ($1, $2, $3)
80
+ ON CONFLICT (belief_id, memory_id) DO NOTHING`, [randomUUID(), beliefId, input.memoryId]);
81
+ stored.push({
82
+ id: beliefId,
83
+ projectId: input.projectId,
84
+ normalizedKey,
85
+ ...belief,
86
+ status: nextStatus,
87
+ });
88
+ }
89
+ return stored;
90
+ }
91
+ for (const belief of input.beliefs) {
92
+ const normalizedKey = normalizeBeliefKey(belief);
93
+ const existing = sqlite.prepare(`
94
+ SELECT * FROM beliefs WHERE project_id = ? AND normalized_key = ? LIMIT 1
95
+ `).get(input.projectId, normalizedKey);
96
+ let beliefId = existing?.id ?? randomUUID();
97
+ let status = belief.status;
98
+ if (existing) {
99
+ const nextStatus = belief.type === 'dispute' ? 'disputed'
100
+ : existing.belief_type === belief.type && existing.statement !== belief.statement ? 'superseded'
101
+ : existing.status || belief.status;
102
+ sqlite.prepare(`
103
+ UPDATE beliefs
104
+ SET confidence = ?, status = ?, reason = ?, context = ?, evidence_summary = ?, metadata = ?, updated_at = (strftime('%s','now'))
105
+ WHERE id = ?
106
+ `).run(Math.max(existing.confidence ?? 0.5, belief.confidence), nextStatus, belief.reason ?? null, belief.context ?? null, belief.evidenceSummary ?? null, serializeMetadata({ edges: belief.edges ?? [] }), beliefId);
107
+ status = nextStatus;
108
+ }
109
+ else {
110
+ sqlite.prepare(`
111
+ INSERT INTO beliefs (id, project_id, belief_type, statement, normalized_key, confidence, status, reason, context, evidence_summary, metadata)
112
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
113
+ `).run(beliefId, input.projectId, belief.type, belief.statement, normalizedKey, belief.confidence, belief.status, belief.reason ?? null, belief.context ?? null, belief.evidenceSummary ?? null, serializeMetadata({ edges: belief.edges ?? [] }));
114
+ }
115
+ sqlite.prepare(`
116
+ INSERT OR IGNORE INTO belief_memory_sources (id, belief_id, memory_id)
117
+ VALUES (?, ?, ?)
118
+ `).run(randomUUID(), beliefId, input.memoryId);
119
+ stored.push({
120
+ id: beliefId,
121
+ projectId: input.projectId,
122
+ normalizedKey,
123
+ ...belief,
124
+ status,
125
+ });
126
+ }
127
+ for (const belief of stored) {
128
+ const edgeMetadata = deserializeMetadata(sqlite.prepare(`SELECT metadata FROM beliefs WHERE id = ?`).get(belief.id)?.metadata ?? null);
129
+ const edges = Array.isArray(edgeMetadata?.edges) ? edgeMetadata.edges : [];
130
+ for (const edge of edges) {
131
+ const target = stored.find((candidate) => candidate.statement === edge.targetStatement);
132
+ if (!target || target.id === belief.id)
133
+ continue;
134
+ sqlite.prepare(`
135
+ INSERT OR IGNORE INTO belief_edges (id, from_belief_id, to_belief_id, edge_type, metadata)
136
+ VALUES (?, ?, ?, ?, ?)
137
+ `).run(randomUUID(), belief.id, target.id, edge.type, serializeMetadata({}));
138
+ }
139
+ }
140
+ return stored;
141
+ }
142
+ export async function getBeliefsForMemory(memoryId) {
143
+ await ensureBeliefTables();
144
+ const { raw } = await getDbClient();
145
+ const sqlite = raw.$client;
146
+ if (!sqlite && typeof raw.query !== 'function')
147
+ return [];
148
+ if (!sqlite && typeof raw.query === 'function') {
149
+ const result = await raw.query(`
150
+ SELECT b.*, array_agg(bms.memory_id) as source_memory_ids
151
+ FROM beliefs b
152
+ JOIN belief_memory_sources bms ON bms.belief_id = b.id
153
+ WHERE b.id IN (
154
+ SELECT belief_id FROM belief_memory_sources WHERE memory_id = $1
155
+ )
156
+ GROUP BY b.id
157
+ ORDER BY b.updated_at DESC
158
+ `, [memoryId]);
159
+ return result.rows.map((row) => ({
160
+ id: row.id,
161
+ projectId: row.project_id,
162
+ type: row.belief_type,
163
+ statement: row.statement,
164
+ normalizedKey: row.normalized_key,
165
+ confidence: Number(row.confidence ?? 0.5),
166
+ status: row.status,
167
+ reason: row.reason ?? undefined,
168
+ context: row.context ?? undefined,
169
+ evidenceSummary: row.evidence_summary ?? undefined,
170
+ sourceMemoryIds: row.source_memory_ids ?? [],
171
+ createdAt: row.created_at,
172
+ updatedAt: row.updated_at,
173
+ }));
174
+ }
175
+ const rows = sqlite.prepare(`
176
+ SELECT b.*, group_concat(bms.memory_id) as source_memory_ids
177
+ FROM beliefs b
178
+ JOIN belief_memory_sources bms ON bms.belief_id = b.id
179
+ WHERE b.id IN (
180
+ SELECT belief_id FROM belief_memory_sources WHERE memory_id = ?
181
+ )
182
+ GROUP BY b.id
183
+ ORDER BY b.updated_at DESC
184
+ `).all(memoryId);
185
+ return rows.map((row) => ({
186
+ id: row.id,
187
+ projectId: row.project_id,
188
+ type: row.belief_type,
189
+ statement: row.statement,
190
+ normalizedKey: row.normalized_key,
191
+ confidence: Number(row.confidence ?? 0.5),
192
+ status: row.status,
193
+ reason: row.reason ?? undefined,
194
+ context: row.context ?? undefined,
195
+ evidenceSummary: row.evidence_summary ?? undefined,
196
+ sourceMemoryIds: String(row.source_memory_ids ?? '').split(',').filter(Boolean),
197
+ createdAt: row.created_at,
198
+ updatedAt: row.updated_at,
199
+ }));
200
+ }
201
+ /**
202
+ * Get all beliefs for a project
203
+ */
204
+ export async function getAllBeliefs(projectId, options) {
205
+ await ensureBeliefTables();
206
+ const { raw } = await getDbClient();
207
+ const sqlite = raw.$client;
208
+ const isPg = typeof raw.query === 'function';
209
+ if (!sqlite && !isPg)
210
+ return [];
211
+ const limit = options?.limit ?? 100;
212
+ const conditions = ['project_id = ?'];
213
+ const params = [projectId];
214
+ if (options?.type) {
215
+ conditions.push('belief_type = ?');
216
+ params.push(options.type);
217
+ }
218
+ if (options?.status) {
219
+ conditions.push('status = ?');
220
+ params.push(options.status);
221
+ }
222
+ if (options?.minConfidence !== undefined) {
223
+ conditions.push('confidence >= ?');
224
+ params.push(options.minConfidence);
225
+ }
226
+ const whereClause = conditions.join(' AND ');
227
+ const sql = `
228
+ SELECT * FROM beliefs
229
+ WHERE ${whereClause}
230
+ ORDER BY confidence DESC, updated_at DESC
231
+ LIMIT ?
232
+ `;
233
+ params.push(limit);
234
+ if (isPg) {
235
+ const result = await raw.query(sql, params);
236
+ return result.rows.map((row) => ({
237
+ id: row.id,
238
+ projectId: row.project_id,
239
+ type: row.belief_type,
240
+ statement: row.statement,
241
+ normalizedKey: row.normalized_key,
242
+ confidence: Number(row.confidence ?? 0.5),
243
+ status: row.status,
244
+ reason: row.reason ?? undefined,
245
+ context: row.context ?? undefined,
246
+ evidenceSummary: row.evidence_summary ?? undefined,
247
+ sourceMemoryIds: [],
248
+ lastConfirmedAt: row.last_confirmed_at,
249
+ sourceCount: row.source_count,
250
+ createdAt: row.created_at,
251
+ updatedAt: row.updated_at,
252
+ }));
253
+ }
254
+ const rows = sqlite.prepare(sql).all(...params);
255
+ return rows.map((row) => ({
256
+ id: row.id,
257
+ projectId: row.project_id,
258
+ type: row.belief_type,
259
+ statement: row.statement,
260
+ normalizedKey: row.normalized_key,
261
+ confidence: Number(row.confidence ?? 0.5),
262
+ status: row.status,
263
+ reason: row.reason ?? undefined,
264
+ context: row.context ?? undefined,
265
+ evidenceSummary: row.evidence_summary ?? undefined,
266
+ sourceMemoryIds: [],
267
+ lastConfirmedAt: row.last_confirmed_at,
268
+ sourceCount: row.source_count,
269
+ createdAt: row.created_at,
270
+ updatedAt: row.updated_at,
271
+ }));
272
+ }
273
+ /**
274
+ * Search beliefs by statement content
275
+ */
276
+ export async function searchBeliefs(projectId, query, options) {
277
+ await ensureBeliefTables();
278
+ const { raw } = await getDbClient();
279
+ const sqlite = raw.$client;
280
+ const isPg = typeof raw.query === 'function';
281
+ if (!sqlite && !isPg)
282
+ return [];
283
+ const limit = options?.limit ?? 50;
284
+ const conditions = ['project_id = ?', 'statement LIKE ?'];
285
+ const params = [projectId, `%${query}%`];
286
+ if (options?.type) {
287
+ conditions.push('belief_type = ?');
288
+ params.push(options.type);
289
+ }
290
+ if (options?.minConfidence !== undefined) {
291
+ conditions.push('confidence >= ?');
292
+ params.push(options.minConfidence);
293
+ }
294
+ const whereClause = conditions.join(' AND ');
295
+ const sql = `
296
+ SELECT * FROM beliefs
297
+ WHERE ${whereClause}
298
+ ORDER BY confidence DESC
299
+ LIMIT ?
300
+ `;
301
+ params.push(limit);
302
+ if (isPg) {
303
+ const result = await raw.query(sql, params);
304
+ return result.rows.map((row) => ({
305
+ id: row.id,
306
+ projectId: row.project_id,
307
+ type: row.belief_type,
308
+ statement: row.statement,
309
+ normalizedKey: row.normalized_key,
310
+ confidence: Number(row.confidence ?? 0.5),
311
+ status: row.status,
312
+ reason: row.reason ?? undefined,
313
+ context: row.context ?? undefined,
314
+ evidenceSummary: row.evidence_summary ?? undefined,
315
+ sourceMemoryIds: [],
316
+ sourceCount: row.source_count,
317
+ createdAt: row.created_at,
318
+ updatedAt: row.updated_at,
319
+ }));
320
+ }
321
+ const rows = sqlite.prepare(sql).all(...params);
322
+ return rows.map((row) => ({
323
+ id: row.id,
324
+ projectId: row.project_id,
325
+ type: row.belief_type,
326
+ statement: row.statement,
327
+ normalizedKey: row.normalized_key,
328
+ confidence: Number(row.confidence ?? 0.5),
329
+ status: row.status,
330
+ reason: row.reason ?? undefined,
331
+ context: row.context ?? undefined,
332
+ evidenceSummary: row.evidence_summary ?? undefined,
333
+ sourceMemoryIds: [],
334
+ sourceCount: row.source_count,
335
+ createdAt: row.created_at,
336
+ updatedAt: row.updated_at,
337
+ }));
338
+ }
339
+ /**
340
+ * Get active constraint beliefs for session boot
341
+ * Returns beliefs that should shape next actions
342
+ */
343
+ export async function getActiveConstraints(projectId) {
344
+ await ensureBeliefTables();
345
+ const { raw } = await getDbClient();
346
+ const sqlite = raw.$client;
347
+ const isPg = typeof raw.query === 'function';
348
+ if (!sqlite && !isPg)
349
+ return [];
350
+ const sql = `
351
+ SELECT * FROM beliefs
352
+ WHERE project_id = ? AND belief_type = 'constraint' AND status = 'active'
353
+ ORDER BY confidence DESC, updated_at DESC
354
+ LIMIT 20
355
+ `;
356
+ if (isPg) {
357
+ const result = await raw.query(sql, [projectId]);
358
+ return result.rows.map((row) => mapRowToBelief(row));
359
+ }
360
+ const rows = sqlite.prepare(sql).all(projectId);
361
+ return rows.map(mapRowToBelief);
362
+ }
363
+ /**
364
+ * Get active decision beliefs for session boot
365
+ * Returns decisions that should guide next actions
366
+ */
367
+ export async function getActiveDecisions(projectId) {
368
+ await ensureBeliefTables();
369
+ const { raw } = await getDbClient();
370
+ const sqlite = raw.$client;
371
+ const isPg = typeof raw.query === 'function';
372
+ if (!sqlite && !isPg)
373
+ return [];
374
+ const sql = `
375
+ SELECT * FROM beliefs
376
+ WHERE project_id = ? AND belief_type = 'decision' AND status = 'active'
377
+ ORDER BY confidence DESC, updated_at DESC
378
+ LIMIT 20
379
+ `;
380
+ if (isPg) {
381
+ const result = await raw.query(sql, [projectId]);
382
+ return result.rows.map((row) => mapRowToBelief(row));
383
+ }
384
+ const rows = sqlite.prepare(sql).all(projectId);
385
+ return rows.map(mapRowToBelief);
386
+ }
387
+ /**
388
+ * Get recent failure beliefs for session boot
389
+ * Returns failure_cause beliefs to avoid repeating mistakes
390
+ * @param count - Number of recent failures to return (default 10)
391
+ */
392
+ export async function getRecentFailures(projectId, count = 10) {
393
+ await ensureBeliefTables();
394
+ const { raw } = await getDbClient();
395
+ const sqlite = raw.$client;
396
+ const isPg = typeof raw.query === 'function';
397
+ if (!sqlite && !isPg)
398
+ return [];
399
+ const sql = `
400
+ SELECT * FROM beliefs
401
+ WHERE project_id = ? AND belief_type = 'failure_cause' AND status = 'active'
402
+ ORDER BY updated_at DESC
403
+ LIMIT ?
404
+ `;
405
+ if (isPg) {
406
+ const result = await raw.query(sql, [projectId, count]);
407
+ return result.rows.map((row) => mapRowToBelief(row));
408
+ }
409
+ const rows = sqlite.prepare(sql).all(projectId, count);
410
+ return rows.map(mapRowToBelief);
411
+ }
412
+ /**
413
+ * Get beliefs relevant to a task/query for session boot
414
+ * Used to inject relevant beliefs at session start
415
+ */
416
+ export async function getRelevantBeliefs(projectId, taskQuery, limit = 10) {
417
+ await ensureBeliefTables();
418
+ const { raw } = await getDbClient();
419
+ const sqlite = raw.$client;
420
+ const isPg = typeof raw.query === 'function';
421
+ if (!sqlite && !isPg)
422
+ return [];
423
+ // Match against statement, context, or normalized_key
424
+ const searchPattern = `%${taskQuery}%`;
425
+ const sql = `
426
+ SELECT * FROM beliefs
427
+ WHERE project_id = ?
428
+ AND status = 'active'
429
+ AND (
430
+ statement LIKE ? OR
431
+ context LIKE ? OR
432
+ normalized_key LIKE ?
433
+ )
434
+ ORDER BY confidence DESC, updated_at DESC
435
+ LIMIT ?
436
+ `;
437
+ const params = [projectId, searchPattern, searchPattern, searchPattern, limit];
438
+ if (isPg) {
439
+ const result = await raw.query(sql, params);
440
+ return result.rows.map((row) => mapRowToBelief(row));
441
+ }
442
+ const rows = sqlite.prepare(sql).all(...params);
443
+ return rows.map(mapRowToBelief);
444
+ }
445
+ /**
446
+ * Helper to map DB row to StoredBelief
447
+ */
448
+ function mapRowToBelief(row) {
449
+ return {
450
+ id: row.id,
451
+ projectId: row.project_id,
452
+ type: row.belief_type,
453
+ statement: row.statement,
454
+ normalizedKey: row.normalized_key,
455
+ confidence: Number(row.confidence ?? 0.5),
456
+ status: row.status,
457
+ reason: row.reason ?? undefined,
458
+ context: row.context ?? undefined,
459
+ evidenceSummary: row.evidence_summary ?? undefined,
460
+ sourceMemoryIds: [],
461
+ sourceCount: row.source_count,
462
+ createdAt: row.created_at,
463
+ updatedAt: row.updated_at,
464
+ };
465
+ }
466
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1,28 @@
1
+ export type BeliefType = 'decision' | 'preference' | 'failure_cause' | 'constraint' | 'state_change' | 'dispute';
2
+ export type BeliefStatus = 'active' | 'superseded' | 'disputed';
3
+ export type BeliefEdgeType = 'causes' | 'supports' | 'rejects' | 'supersedes' | 'depends_on';
4
+ export interface ExtractedBelief {
5
+ type: BeliefType;
6
+ statement: string;
7
+ confidence: number;
8
+ sourceMemoryIds: string[];
9
+ status: BeliefStatus;
10
+ reason?: string;
11
+ context?: string;
12
+ evidenceSummary?: string;
13
+ edges?: Array<{
14
+ type: BeliefEdgeType;
15
+ targetStatement: string;
16
+ }>;
17
+ }
18
+ export interface StoredBelief extends ExtractedBelief {
19
+ id: string;
20
+ projectId: string;
21
+ normalizedKey: string;
22
+ createdAt?: Date | string | number | null;
23
+ updatedAt?: Date | string | number | null;
24
+ lastConfirmedAt?: Date | string | number | null;
25
+ sourceCount?: number;
26
+ beliefDecayRate?: number;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ //# sourceMappingURL=mcp-server.d.ts.map
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ // Compatibility entrypoint for generated adapter configs that still reference
4
+ // dist/core/commands/mcp-server.js. The implementation lives in packages/mcp.
5
+ await import('../../packages/mcp/src/index.js');
6
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Remember Command - Unified memory write
3
+ *
4
+ * Single implementation for both CLI and MCP.
5
+ */
6
+ export interface CommandResult {
7
+ ok: boolean;
8
+ [key: string]: any;
9
+ }
10
+ export interface RememberOptions {
11
+ content: string;
12
+ project?: string;
13
+ tags?: string;
14
+ tier?: 'hot' | 'cold';
15
+ type?: string;
16
+ learningType?: 'success' | 'failure' | 'fix' | 'insight';
17
+ confidence?: string;
18
+ source?: 'cli' | 'voice' | 'chat' | 'document';
19
+ route?: 'auto' | 'memory' | 'learning' | 'note';
20
+ pin?: boolean;
21
+ unpin?: boolean;
22
+ }
23
+ export declare function executeRemember(options: RememberOptions): Promise<CommandResult>;
24
+ //# sourceMappingURL=remember.d.ts.map
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Remember Command - Unified memory write
3
+ *
4
+ * Single implementation for both CLI and MCP.
5
+ */
6
+ import { rememberMemory, findSimilarMemories } from '../memory/memories.js';
7
+ import { createLearning } from '../ingestion/learnings.js';
8
+ import { pinMemory, unpinMemory } from '../security/governance.js';
9
+ import { detectMemorySignals } from '../memory/trigger-detector.js';
10
+ export async function executeRemember(options) {
11
+ const { content, project, tags, tier, type, learningType, source, route, pin, unpin } = options;
12
+ const signals = detectMemorySignals(content);
13
+ let routing = "memory";
14
+ let inferredType = type || signals.suggestedType;
15
+ let routingReason = "";
16
+ // Check for learning patterns if auto mode
17
+ if (route === "auto" || !route) {
18
+ const hasLessonPattern = /(\bfailed\s+because\b|\blesson\s+learned\b|\bnext\s+time\b|\broot\s+cause\b|\bsuccess\b.*\bbecause\b|\bi\s+learned\b|\binsight\b)/i.test(content);
19
+ const hasLearningType = /(\bsuccess\b|\bfailure\b|\bfix\b|\binsight\b)/i.test(content);
20
+ const hasHackPattern = /(\bHACK\b|\bworkaround\b|\btemporary\s+fix\b)/i.test(content);
21
+ const hasFixmePattern = /(\bFIXME\b|\bXXX\b|\bbug\b.*\bfix\b)/i.test(content);
22
+ if (hasLessonPattern || hasLearningType || hasHackPattern || hasFixmePattern) {
23
+ routing = "learning";
24
+ if (hasHackPattern || hasFixmePattern) {
25
+ routingReason = "Detected code pattern (HACK/FIXME)";
26
+ }
27
+ else {
28
+ routingReason = "Detected learning pattern in content";
29
+ }
30
+ }
31
+ else if (signals.suggestedType === 'task') {
32
+ routing = "memory";
33
+ routingReason = "Detected TODO pattern";
34
+ }
35
+ else if (signals.suggestedType === 'observation' && /\b(note|note\s+that|log|remember)\b/i.test(content)) {
36
+ routing = "note";
37
+ routingReason = "Detected note pattern";
38
+ }
39
+ else {
40
+ routing = "memory";
41
+ routingReason = `Detected as ${inferredType}`;
42
+ }
43
+ }
44
+ else if (route === "learning") {
45
+ routing = "learning";
46
+ routingReason = "Override: forced to learning";
47
+ }
48
+ else if (route === "note") {
49
+ routing = "note";
50
+ routingReason = "Override: forced to note";
51
+ }
52
+ else {
53
+ routing = "memory";
54
+ routingReason = "Override: forced to memory";
55
+ }
56
+ let result;
57
+ const parsedTags = tags ? tags.split(',').map((t) => t.trim()) : [];
58
+ const parsedTier = tier === "cold" ? "cold" : "hot";
59
+ if (routing === "learning") {
60
+ let parsedLearningType = "insight";
61
+ if (learningType) {
62
+ parsedLearningType = learningType;
63
+ }
64
+ else {
65
+ if (/(\bsuccess\b|\bworked\b|\bfinished\b)/i.test(content))
66
+ parsedLearningType = "success";
67
+ else if (/(\bfailed\b|\berror\b|\bbroke\b)/i.test(content))
68
+ parsedLearningType = "failure";
69
+ else if (/(\bfix\b|\b workaround\b|\bsolved\b)/i.test(content))
70
+ parsedLearningType = "fix";
71
+ }
72
+ const learning = await createLearning({
73
+ type: parsedLearningType,
74
+ content,
75
+ project,
76
+ autoLink: true
77
+ });
78
+ result = { id: learning.id, type: "learning", learningType: parsedLearningType, content };
79
+ }
80
+ else {
81
+ // Check for similar memories to avoid duplicates (deduplication)
82
+ const similarMemories = await findSimilarMemories(content, 0.85, 3);
83
+ const memory = await rememberMemory({
84
+ content,
85
+ type: inferredType,
86
+ tags: parsedTags,
87
+ project,
88
+ tier: parsedTier,
89
+ source: source || 'cli'
90
+ });
91
+ // If found similar memories, create association instead of duplicate
92
+ if (similarMemories.length > 0) {
93
+ const { createAssociation } = await import('../associations.js');
94
+ for (const similar of similarMemories) {
95
+ await createAssociation(memory.id, similar.id, 'duplicate', similar.similarity ?? 0.85);
96
+ }
97
+ memory.similarTo = similarMemories.map(s => s.id);
98
+ }
99
+ if (pin) {
100
+ await pinMemory(memory.id);
101
+ }
102
+ else if (unpin) {
103
+ await unpinMemory(memory.id);
104
+ }
105
+ result = { id: memory.id, type: "memory", memoryType: inferredType, tier: parsedTier, content, pinned: pin };
106
+ // Auto-update knowledge graph (fire-and-forget, don't fail remember on graph error)
107
+ const { addMemoryToGraph } = await import('../graph/graph-builder.js');
108
+ const graphResult = await addMemoryToGraph(memory.id).catch((e) => {
109
+ console.warn('[Graph] Auto-update failed:', e.message);
110
+ return null;
111
+ });
112
+ if (graphResult) {
113
+ result.graph = { entities: graphResult.entitiesCreated, relations: graphResult.relationsCreated };
114
+ }
115
+ // Auto-assign to place (fire-and-forget)
116
+ const { autoAssignMemory } = await import('../places/memory-places.js');
117
+ const projectId = memory.projectId || project;
118
+ const placeResult = await autoAssignMemory({
119
+ memoryId: memory.id,
120
+ projectId: projectId,
121
+ content: content,
122
+ tags: parsedTags,
123
+ memoryType: inferredType
124
+ }).catch((e) => {
125
+ console.warn('[Places] Auto-assign failed:', e.message);
126
+ return null;
127
+ });
128
+ if (placeResult?.assigned && placeResult.placeId) {
129
+ result.place = { id: placeResult.placeId, type: placeResult.placeType ?? 'inbox' };
130
+ }
131
+ }
132
+ return {
133
+ ok: true,
134
+ id: result.id,
135
+ routing,
136
+ type: routing === "learning" ? result.learningType : result.memoryType,
137
+ tier: routing === "memory" ? parsedTier : 'N/A',
138
+ priority: signals.priority,
139
+ confidence: signals.confidence,
140
+ pinned: result.pinned,
141
+ reason: routingReason
142
+ };
143
+ }
144
+ //# sourceMappingURL=remember.js.map