superlocalmemory 2.8.6 → 3.0.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 (431) hide show
  1. package/LICENSE +9 -1
  2. package/NOTICE +63 -0
  3. package/README.md +165 -480
  4. package/bin/slm +17 -449
  5. package/bin/slm-npm +1 -1
  6. package/conftest.py +5 -0
  7. package/docs/api-reference.md +284 -0
  8. package/docs/architecture.md +149 -0
  9. package/docs/auto-memory.md +150 -0
  10. package/docs/cli-reference.md +276 -0
  11. package/docs/compliance.md +191 -0
  12. package/docs/configuration.md +182 -0
  13. package/docs/getting-started.md +102 -0
  14. package/docs/ide-setup.md +261 -0
  15. package/docs/mcp-tools.md +220 -0
  16. package/docs/migration-from-v2.md +170 -0
  17. package/docs/profiles.md +173 -0
  18. package/docs/troubleshooting.md +310 -0
  19. package/{configs → ide/configs}/antigravity-mcp.json +3 -3
  20. package/ide/configs/chatgpt-desktop-mcp.json +16 -0
  21. package/{configs → ide/configs}/claude-desktop-mcp.json +3 -3
  22. package/{configs → ide/configs}/codex-mcp.toml +4 -4
  23. package/{configs → ide/configs}/continue-mcp.yaml +4 -3
  24. package/{configs → ide/configs}/continue-skills.yaml +6 -6
  25. package/ide/configs/cursor-mcp.json +15 -0
  26. package/{configs → ide/configs}/gemini-cli-mcp.json +2 -2
  27. package/{configs → ide/configs}/jetbrains-mcp.json +2 -2
  28. package/{configs → ide/configs}/opencode-mcp.json +2 -2
  29. package/{configs → ide/configs}/perplexity-mcp.json +2 -2
  30. package/{configs → ide/configs}/vscode-copilot-mcp.json +2 -2
  31. package/{configs → ide/configs}/windsurf-mcp.json +3 -3
  32. package/{configs → ide/configs}/zed-mcp.json +2 -2
  33. package/{hooks → ide/hooks}/context-hook.js +9 -20
  34. package/ide/hooks/memory-list-skill.js +70 -0
  35. package/ide/hooks/memory-profile-skill.js +101 -0
  36. package/ide/hooks/memory-recall-skill.js +62 -0
  37. package/ide/hooks/memory-remember-skill.js +68 -0
  38. package/ide/hooks/memory-reset-skill.js +160 -0
  39. package/{hooks → ide/hooks}/post-recall-hook.js +2 -2
  40. package/ide/integrations/langchain/README.md +106 -0
  41. package/ide/integrations/langchain/langchain_superlocalmemory/__init__.py +9 -0
  42. package/ide/integrations/langchain/langchain_superlocalmemory/chat_message_history.py +201 -0
  43. package/ide/integrations/langchain/pyproject.toml +38 -0
  44. package/{src/learning → ide/integrations/langchain}/tests/__init__.py +1 -0
  45. package/ide/integrations/langchain/tests/test_chat_message_history.py +215 -0
  46. package/ide/integrations/langchain/tests/test_security.py +117 -0
  47. package/ide/integrations/llamaindex/README.md +81 -0
  48. package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/__init__.py +9 -0
  49. package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/base.py +316 -0
  50. package/ide/integrations/llamaindex/pyproject.toml +43 -0
  51. package/{src/lifecycle → ide/integrations/llamaindex}/tests/__init__.py +1 -2
  52. package/ide/integrations/llamaindex/tests/test_chat_store.py +294 -0
  53. package/ide/integrations/llamaindex/tests/test_security.py +241 -0
  54. package/{skills → ide/skills}/slm-build-graph/SKILL.md +6 -6
  55. package/{skills → ide/skills}/slm-list-recent/SKILL.md +5 -5
  56. package/{skills → ide/skills}/slm-recall/SKILL.md +5 -5
  57. package/{skills → ide/skills}/slm-remember/SKILL.md +6 -6
  58. package/{skills → ide/skills}/slm-show-patterns/SKILL.md +7 -7
  59. package/{skills → ide/skills}/slm-status/SKILL.md +9 -9
  60. package/{skills → ide/skills}/slm-switch-profile/SKILL.md +9 -9
  61. package/package.json +13 -22
  62. package/pyproject.toml +85 -0
  63. package/scripts/build-dmg.sh +417 -0
  64. package/scripts/install-skills.ps1 +334 -0
  65. package/scripts/postinstall.js +2 -2
  66. package/scripts/start-dashboard.ps1 +52 -0
  67. package/scripts/start-dashboard.sh +41 -0
  68. package/scripts/sync-wiki.ps1 +127 -0
  69. package/scripts/sync-wiki.sh +82 -0
  70. package/scripts/test-dmg.sh +161 -0
  71. package/scripts/test-npm-package.ps1 +252 -0
  72. package/scripts/test-npm-package.sh +207 -0
  73. package/scripts/verify-install.ps1 +294 -0
  74. package/scripts/verify-install.sh +266 -0
  75. package/src/superlocalmemory/__init__.py +0 -0
  76. package/src/superlocalmemory/attribution/__init__.py +9 -0
  77. package/src/superlocalmemory/attribution/mathematical_dna.py +235 -0
  78. package/src/superlocalmemory/attribution/signer.py +153 -0
  79. package/src/superlocalmemory/attribution/watermark.py +189 -0
  80. package/src/superlocalmemory/cli/__init__.py +5 -0
  81. package/src/superlocalmemory/cli/commands.py +245 -0
  82. package/src/superlocalmemory/cli/main.py +89 -0
  83. package/src/superlocalmemory/cli/migrate_cmd.py +55 -0
  84. package/src/superlocalmemory/cli/post_install.py +99 -0
  85. package/src/superlocalmemory/cli/setup_wizard.py +129 -0
  86. package/src/superlocalmemory/compliance/__init__.py +0 -0
  87. package/src/superlocalmemory/compliance/abac.py +204 -0
  88. package/src/superlocalmemory/compliance/audit.py +314 -0
  89. package/src/superlocalmemory/compliance/eu_ai_act.py +131 -0
  90. package/src/superlocalmemory/compliance/gdpr.py +294 -0
  91. package/src/superlocalmemory/compliance/lifecycle.py +158 -0
  92. package/src/superlocalmemory/compliance/retention.py +232 -0
  93. package/src/superlocalmemory/compliance/scheduler.py +148 -0
  94. package/src/superlocalmemory/core/__init__.py +0 -0
  95. package/src/superlocalmemory/core/config.py +391 -0
  96. package/src/superlocalmemory/core/embeddings.py +293 -0
  97. package/src/superlocalmemory/core/engine.py +701 -0
  98. package/src/superlocalmemory/core/hooks.py +65 -0
  99. package/src/superlocalmemory/core/maintenance.py +172 -0
  100. package/src/superlocalmemory/core/modes.py +140 -0
  101. package/src/superlocalmemory/core/profiles.py +234 -0
  102. package/src/superlocalmemory/core/registry.py +117 -0
  103. package/src/superlocalmemory/dynamics/__init__.py +0 -0
  104. package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +223 -0
  105. package/src/superlocalmemory/encoding/__init__.py +0 -0
  106. package/src/superlocalmemory/encoding/consolidator.py +485 -0
  107. package/src/superlocalmemory/encoding/emotional.py +125 -0
  108. package/src/superlocalmemory/encoding/entity_resolver.py +525 -0
  109. package/src/superlocalmemory/encoding/entropy_gate.py +104 -0
  110. package/src/superlocalmemory/encoding/fact_extractor.py +775 -0
  111. package/src/superlocalmemory/encoding/foresight.py +91 -0
  112. package/src/superlocalmemory/encoding/graph_builder.py +302 -0
  113. package/src/superlocalmemory/encoding/observation_builder.py +160 -0
  114. package/src/superlocalmemory/encoding/scene_builder.py +183 -0
  115. package/src/superlocalmemory/encoding/signal_inference.py +90 -0
  116. package/src/superlocalmemory/encoding/temporal_parser.py +426 -0
  117. package/src/superlocalmemory/encoding/type_router.py +235 -0
  118. package/src/superlocalmemory/hooks/__init__.py +3 -0
  119. package/src/superlocalmemory/hooks/auto_capture.py +111 -0
  120. package/src/superlocalmemory/hooks/auto_recall.py +93 -0
  121. package/src/superlocalmemory/hooks/ide_connector.py +204 -0
  122. package/src/superlocalmemory/hooks/rules_engine.py +99 -0
  123. package/src/superlocalmemory/infra/__init__.py +3 -0
  124. package/src/superlocalmemory/infra/auth_middleware.py +82 -0
  125. package/src/superlocalmemory/infra/backup.py +317 -0
  126. package/src/superlocalmemory/infra/cache_manager.py +267 -0
  127. package/src/superlocalmemory/infra/event_bus.py +381 -0
  128. package/src/superlocalmemory/infra/rate_limiter.py +135 -0
  129. package/src/{webhook_dispatcher.py → superlocalmemory/infra/webhook_dispatcher.py} +104 -101
  130. package/src/superlocalmemory/learning/__init__.py +0 -0
  131. package/src/superlocalmemory/learning/adaptive.py +172 -0
  132. package/src/superlocalmemory/learning/behavioral.py +490 -0
  133. package/src/superlocalmemory/learning/behavioral_listener.py +94 -0
  134. package/src/superlocalmemory/learning/bootstrap.py +298 -0
  135. package/src/superlocalmemory/learning/cross_project.py +399 -0
  136. package/src/superlocalmemory/learning/database.py +376 -0
  137. package/src/superlocalmemory/learning/engagement.py +323 -0
  138. package/src/superlocalmemory/learning/features.py +138 -0
  139. package/src/superlocalmemory/learning/feedback.py +316 -0
  140. package/src/superlocalmemory/learning/outcomes.py +255 -0
  141. package/src/superlocalmemory/learning/project_context.py +366 -0
  142. package/src/superlocalmemory/learning/ranker.py +155 -0
  143. package/src/superlocalmemory/learning/source_quality.py +303 -0
  144. package/src/superlocalmemory/learning/workflows.py +309 -0
  145. package/src/superlocalmemory/llm/__init__.py +0 -0
  146. package/src/superlocalmemory/llm/backbone.py +316 -0
  147. package/src/superlocalmemory/math/__init__.py +0 -0
  148. package/src/superlocalmemory/math/fisher.py +356 -0
  149. package/src/superlocalmemory/math/langevin.py +398 -0
  150. package/src/superlocalmemory/math/sheaf.py +257 -0
  151. package/src/superlocalmemory/mcp/__init__.py +0 -0
  152. package/src/superlocalmemory/mcp/resources.py +245 -0
  153. package/src/superlocalmemory/mcp/server.py +61 -0
  154. package/src/superlocalmemory/mcp/tools.py +18 -0
  155. package/src/superlocalmemory/mcp/tools_core.py +305 -0
  156. package/src/superlocalmemory/mcp/tools_v28.py +223 -0
  157. package/src/superlocalmemory/mcp/tools_v3.py +286 -0
  158. package/src/superlocalmemory/retrieval/__init__.py +0 -0
  159. package/src/superlocalmemory/retrieval/agentic.py +295 -0
  160. package/src/superlocalmemory/retrieval/ann_index.py +223 -0
  161. package/src/superlocalmemory/retrieval/bm25_channel.py +185 -0
  162. package/src/superlocalmemory/retrieval/bridge_discovery.py +170 -0
  163. package/src/superlocalmemory/retrieval/engine.py +390 -0
  164. package/src/superlocalmemory/retrieval/entity_channel.py +179 -0
  165. package/src/superlocalmemory/retrieval/fusion.py +78 -0
  166. package/src/superlocalmemory/retrieval/profile_channel.py +105 -0
  167. package/src/superlocalmemory/retrieval/reranker.py +154 -0
  168. package/src/superlocalmemory/retrieval/semantic_channel.py +232 -0
  169. package/src/superlocalmemory/retrieval/strategy.py +96 -0
  170. package/src/superlocalmemory/retrieval/temporal_channel.py +175 -0
  171. package/src/superlocalmemory/server/__init__.py +1 -0
  172. package/src/superlocalmemory/server/api.py +248 -0
  173. package/src/superlocalmemory/server/routes/__init__.py +4 -0
  174. package/src/superlocalmemory/server/routes/agents.py +107 -0
  175. package/src/superlocalmemory/server/routes/backup.py +91 -0
  176. package/src/superlocalmemory/server/routes/behavioral.py +127 -0
  177. package/src/superlocalmemory/server/routes/compliance.py +160 -0
  178. package/src/superlocalmemory/server/routes/data_io.py +188 -0
  179. package/src/superlocalmemory/server/routes/events.py +183 -0
  180. package/src/superlocalmemory/server/routes/helpers.py +85 -0
  181. package/src/superlocalmemory/server/routes/learning.py +273 -0
  182. package/src/superlocalmemory/server/routes/lifecycle.py +116 -0
  183. package/src/superlocalmemory/server/routes/memories.py +399 -0
  184. package/src/superlocalmemory/server/routes/profiles.py +219 -0
  185. package/src/superlocalmemory/server/routes/stats.py +346 -0
  186. package/src/superlocalmemory/server/routes/v3_api.py +365 -0
  187. package/src/superlocalmemory/server/routes/ws.py +82 -0
  188. package/src/superlocalmemory/server/security_middleware.py +57 -0
  189. package/src/superlocalmemory/server/ui.py +245 -0
  190. package/src/superlocalmemory/storage/__init__.py +0 -0
  191. package/src/superlocalmemory/storage/access_control.py +182 -0
  192. package/src/superlocalmemory/storage/database.py +594 -0
  193. package/src/superlocalmemory/storage/migrations.py +303 -0
  194. package/src/superlocalmemory/storage/models.py +406 -0
  195. package/src/superlocalmemory/storage/schema.py +726 -0
  196. package/src/superlocalmemory/storage/v2_migrator.py +317 -0
  197. package/src/superlocalmemory/trust/__init__.py +0 -0
  198. package/src/superlocalmemory/trust/gate.py +130 -0
  199. package/src/superlocalmemory/trust/provenance.py +124 -0
  200. package/src/superlocalmemory/trust/scorer.py +347 -0
  201. package/src/superlocalmemory/trust/signals.py +153 -0
  202. package/ui/index.html +278 -5
  203. package/ui/js/auto-settings.js +70 -0
  204. package/ui/js/dashboard.js +90 -0
  205. package/ui/js/fact-detail.js +92 -0
  206. package/ui/js/feedback.js +2 -2
  207. package/ui/js/ide-status.js +102 -0
  208. package/ui/js/math-health.js +98 -0
  209. package/ui/js/recall-lab.js +127 -0
  210. package/ui/js/settings.js +2 -2
  211. package/ui/js/trust-dashboard.js +73 -0
  212. package/api_server.py +0 -724
  213. package/bin/aider-smart +0 -72
  214. package/bin/superlocalmemoryv2-learning +0 -4
  215. package/bin/superlocalmemoryv2-list +0 -3
  216. package/bin/superlocalmemoryv2-patterns +0 -4
  217. package/bin/superlocalmemoryv2-profile +0 -3
  218. package/bin/superlocalmemoryv2-recall +0 -3
  219. package/bin/superlocalmemoryv2-remember +0 -3
  220. package/bin/superlocalmemoryv2-reset +0 -3
  221. package/bin/superlocalmemoryv2-status +0 -3
  222. package/configs/chatgpt-desktop-mcp.json +0 -16
  223. package/configs/cursor-mcp.json +0 -15
  224. package/hooks/memory-list-skill.js +0 -139
  225. package/hooks/memory-profile-skill.js +0 -273
  226. package/hooks/memory-recall-skill.js +0 -114
  227. package/hooks/memory-remember-skill.js +0 -127
  228. package/hooks/memory-reset-skill.js +0 -274
  229. package/mcp_server.py +0 -1808
  230. package/requirements-core.txt +0 -22
  231. package/requirements-learning.txt +0 -12
  232. package/requirements.txt +0 -12
  233. package/src/agent_registry.py +0 -411
  234. package/src/auth_middleware.py +0 -61
  235. package/src/auto_backup.py +0 -459
  236. package/src/behavioral/__init__.py +0 -49
  237. package/src/behavioral/behavioral_listener.py +0 -203
  238. package/src/behavioral/behavioral_patterns.py +0 -275
  239. package/src/behavioral/cross_project_transfer.py +0 -206
  240. package/src/behavioral/outcome_inference.py +0 -194
  241. package/src/behavioral/outcome_tracker.py +0 -193
  242. package/src/behavioral/tests/__init__.py +0 -4
  243. package/src/behavioral/tests/test_behavioral_integration.py +0 -108
  244. package/src/behavioral/tests/test_behavioral_patterns.py +0 -150
  245. package/src/behavioral/tests/test_cross_project_transfer.py +0 -142
  246. package/src/behavioral/tests/test_mcp_behavioral.py +0 -139
  247. package/src/behavioral/tests/test_mcp_report_outcome.py +0 -117
  248. package/src/behavioral/tests/test_outcome_inference.py +0 -107
  249. package/src/behavioral/tests/test_outcome_tracker.py +0 -96
  250. package/src/cache_manager.py +0 -518
  251. package/src/compliance/__init__.py +0 -48
  252. package/src/compliance/abac_engine.py +0 -149
  253. package/src/compliance/abac_middleware.py +0 -116
  254. package/src/compliance/audit_db.py +0 -215
  255. package/src/compliance/audit_logger.py +0 -148
  256. package/src/compliance/retention_manager.py +0 -289
  257. package/src/compliance/retention_scheduler.py +0 -186
  258. package/src/compliance/tests/__init__.py +0 -4
  259. package/src/compliance/tests/test_abac_enforcement.py +0 -95
  260. package/src/compliance/tests/test_abac_engine.py +0 -124
  261. package/src/compliance/tests/test_abac_mcp_integration.py +0 -118
  262. package/src/compliance/tests/test_audit_db.py +0 -123
  263. package/src/compliance/tests/test_audit_logger.py +0 -98
  264. package/src/compliance/tests/test_mcp_audit.py +0 -128
  265. package/src/compliance/tests/test_mcp_retention_policy.py +0 -125
  266. package/src/compliance/tests/test_retention_manager.py +0 -131
  267. package/src/compliance/tests/test_retention_scheduler.py +0 -99
  268. package/src/compression/__init__.py +0 -25
  269. package/src/compression/cli.py +0 -150
  270. package/src/compression/cold_storage.py +0 -217
  271. package/src/compression/config.py +0 -72
  272. package/src/compression/orchestrator.py +0 -133
  273. package/src/compression/tier2_compressor.py +0 -228
  274. package/src/compression/tier3_compressor.py +0 -153
  275. package/src/compression/tier_classifier.py +0 -148
  276. package/src/db_connection_manager.py +0 -536
  277. package/src/embedding_engine.py +0 -63
  278. package/src/embeddings/__init__.py +0 -47
  279. package/src/embeddings/cache.py +0 -70
  280. package/src/embeddings/cli.py +0 -113
  281. package/src/embeddings/constants.py +0 -47
  282. package/src/embeddings/database.py +0 -91
  283. package/src/embeddings/engine.py +0 -247
  284. package/src/embeddings/model_loader.py +0 -145
  285. package/src/event_bus.py +0 -562
  286. package/src/graph/__init__.py +0 -36
  287. package/src/graph/build_helpers.py +0 -74
  288. package/src/graph/cli.py +0 -87
  289. package/src/graph/cluster_builder.py +0 -188
  290. package/src/graph/cluster_summary.py +0 -148
  291. package/src/graph/constants.py +0 -47
  292. package/src/graph/edge_builder.py +0 -162
  293. package/src/graph/entity_extractor.py +0 -95
  294. package/src/graph/graph_core.py +0 -226
  295. package/src/graph/graph_search.py +0 -231
  296. package/src/graph/hierarchical.py +0 -207
  297. package/src/graph/schema.py +0 -99
  298. package/src/graph_engine.py +0 -52
  299. package/src/hnsw_index.py +0 -628
  300. package/src/hybrid_search.py +0 -46
  301. package/src/learning/__init__.py +0 -217
  302. package/src/learning/adaptive_ranker.py +0 -682
  303. package/src/learning/bootstrap/__init__.py +0 -69
  304. package/src/learning/bootstrap/constants.py +0 -93
  305. package/src/learning/bootstrap/db_queries.py +0 -316
  306. package/src/learning/bootstrap/sampling.py +0 -82
  307. package/src/learning/bootstrap/text_utils.py +0 -71
  308. package/src/learning/cross_project_aggregator.py +0 -857
  309. package/src/learning/db/__init__.py +0 -40
  310. package/src/learning/db/constants.py +0 -44
  311. package/src/learning/db/schema.py +0 -279
  312. package/src/learning/engagement_tracker.py +0 -628
  313. package/src/learning/feature_extractor.py +0 -708
  314. package/src/learning/feedback_collector.py +0 -806
  315. package/src/learning/learning_db.py +0 -915
  316. package/src/learning/project_context_manager.py +0 -572
  317. package/src/learning/ranking/__init__.py +0 -33
  318. package/src/learning/ranking/constants.py +0 -84
  319. package/src/learning/ranking/helpers.py +0 -278
  320. package/src/learning/source_quality_scorer.py +0 -676
  321. package/src/learning/synthetic_bootstrap.py +0 -755
  322. package/src/learning/tests/test_adaptive_ranker.py +0 -325
  323. package/src/learning/tests/test_adaptive_ranker_v28.py +0 -60
  324. package/src/learning/tests/test_aggregator.py +0 -306
  325. package/src/learning/tests/test_auto_retrain_v28.py +0 -35
  326. package/src/learning/tests/test_e2e_ranking_v28.py +0 -82
  327. package/src/learning/tests/test_feature_extractor_v28.py +0 -93
  328. package/src/learning/tests/test_feedback_collector.py +0 -294
  329. package/src/learning/tests/test_learning_db.py +0 -602
  330. package/src/learning/tests/test_learning_db_v28.py +0 -110
  331. package/src/learning/tests/test_learning_init_v28.py +0 -48
  332. package/src/learning/tests/test_outcome_signals.py +0 -48
  333. package/src/learning/tests/test_project_context.py +0 -292
  334. package/src/learning/tests/test_schema_migration.py +0 -319
  335. package/src/learning/tests/test_signal_inference.py +0 -397
  336. package/src/learning/tests/test_source_quality.py +0 -351
  337. package/src/learning/tests/test_synthetic_bootstrap.py +0 -429
  338. package/src/learning/tests/test_workflow_miner.py +0 -318
  339. package/src/learning/workflow_pattern_miner.py +0 -655
  340. package/src/lifecycle/__init__.py +0 -54
  341. package/src/lifecycle/bounded_growth.py +0 -239
  342. package/src/lifecycle/compaction_engine.py +0 -226
  343. package/src/lifecycle/lifecycle_engine.py +0 -355
  344. package/src/lifecycle/lifecycle_evaluator.py +0 -257
  345. package/src/lifecycle/lifecycle_scheduler.py +0 -130
  346. package/src/lifecycle/retention_policy.py +0 -285
  347. package/src/lifecycle/tests/test_bounded_growth.py +0 -193
  348. package/src/lifecycle/tests/test_compaction.py +0 -179
  349. package/src/lifecycle/tests/test_lifecycle_engine.py +0 -137
  350. package/src/lifecycle/tests/test_lifecycle_evaluation.py +0 -177
  351. package/src/lifecycle/tests/test_lifecycle_scheduler.py +0 -127
  352. package/src/lifecycle/tests/test_lifecycle_search.py +0 -109
  353. package/src/lifecycle/tests/test_mcp_compact.py +0 -149
  354. package/src/lifecycle/tests/test_mcp_lifecycle_status.py +0 -114
  355. package/src/lifecycle/tests/test_retention_policy.py +0 -162
  356. package/src/mcp_tools_v28.py +0 -281
  357. package/src/memory/__init__.py +0 -36
  358. package/src/memory/cli.py +0 -205
  359. package/src/memory/constants.py +0 -39
  360. package/src/memory/helpers.py +0 -28
  361. package/src/memory/schema.py +0 -166
  362. package/src/memory-profiles.py +0 -595
  363. package/src/memory-reset.py +0 -491
  364. package/src/memory_compression.py +0 -989
  365. package/src/memory_store_v2.py +0 -1155
  366. package/src/migrate_v1_to_v2.py +0 -629
  367. package/src/pattern_learner.py +0 -34
  368. package/src/patterns/__init__.py +0 -24
  369. package/src/patterns/analyzers.py +0 -251
  370. package/src/patterns/learner.py +0 -271
  371. package/src/patterns/scoring.py +0 -171
  372. package/src/patterns/store.py +0 -225
  373. package/src/patterns/terminology.py +0 -140
  374. package/src/provenance_tracker.py +0 -312
  375. package/src/qualixar_attribution.py +0 -139
  376. package/src/qualixar_watermark.py +0 -78
  377. package/src/query_optimizer.py +0 -511
  378. package/src/rate_limiter.py +0 -83
  379. package/src/search/__init__.py +0 -20
  380. package/src/search/cli.py +0 -77
  381. package/src/search/constants.py +0 -26
  382. package/src/search/engine.py +0 -241
  383. package/src/search/fusion.py +0 -122
  384. package/src/search/index_loader.py +0 -114
  385. package/src/search/methods.py +0 -162
  386. package/src/search_engine_v2.py +0 -401
  387. package/src/setup_validator.py +0 -482
  388. package/src/subscription_manager.py +0 -391
  389. package/src/tree/__init__.py +0 -59
  390. package/src/tree/builder.py +0 -185
  391. package/src/tree/nodes.py +0 -202
  392. package/src/tree/queries.py +0 -257
  393. package/src/tree/schema.py +0 -80
  394. package/src/tree_manager.py +0 -19
  395. package/src/trust/__init__.py +0 -45
  396. package/src/trust/constants.py +0 -66
  397. package/src/trust/queries.py +0 -157
  398. package/src/trust/schema.py +0 -95
  399. package/src/trust/scorer.py +0 -299
  400. package/src/trust/signals.py +0 -95
  401. package/src/trust_scorer.py +0 -44
  402. package/ui/app.js +0 -1588
  403. package/ui/js/graph-cytoscape-monolithic-backup.js +0 -1168
  404. package/ui/js/graph-cytoscape.js +0 -1168
  405. package/ui/js/graph-d3-backup.js +0 -32
  406. package/ui/js/graph.js +0 -32
  407. package/ui_server.py +0 -286
  408. /package/docs/{ACCESSIBILITY.md → v2-archive/ACCESSIBILITY.md} +0 -0
  409. /package/docs/{ARCHITECTURE.md → v2-archive/ARCHITECTURE.md} +0 -0
  410. /package/docs/{CLI-COMMANDS-REFERENCE.md → v2-archive/CLI-COMMANDS-REFERENCE.md} +0 -0
  411. /package/docs/{COMPRESSION-README.md → v2-archive/COMPRESSION-README.md} +0 -0
  412. /package/docs/{FRAMEWORK-INTEGRATIONS.md → v2-archive/FRAMEWORK-INTEGRATIONS.md} +0 -0
  413. /package/docs/{MCP-MANUAL-SETUP.md → v2-archive/MCP-MANUAL-SETUP.md} +0 -0
  414. /package/docs/{MCP-TROUBLESHOOTING.md → v2-archive/MCP-TROUBLESHOOTING.md} +0 -0
  415. /package/docs/{PATTERN-LEARNING.md → v2-archive/PATTERN-LEARNING.md} +0 -0
  416. /package/docs/{PROFILES-GUIDE.md → v2-archive/PROFILES-GUIDE.md} +0 -0
  417. /package/docs/{RESET-GUIDE.md → v2-archive/RESET-GUIDE.md} +0 -0
  418. /package/docs/{SEARCH-ENGINE-V2.2.0.md → v2-archive/SEARCH-ENGINE-V2.2.0.md} +0 -0
  419. /package/docs/{SEARCH-INTEGRATION-GUIDE.md → v2-archive/SEARCH-INTEGRATION-GUIDE.md} +0 -0
  420. /package/docs/{UI-SERVER.md → v2-archive/UI-SERVER.md} +0 -0
  421. /package/docs/{UNIVERSAL-INTEGRATION.md → v2-archive/UNIVERSAL-INTEGRATION.md} +0 -0
  422. /package/docs/{V2.2.0-OPTIONAL-SEARCH.md → v2-archive/V2.2.0-OPTIONAL-SEARCH.md} +0 -0
  423. /package/docs/{WINDOWS-INSTALL-README.txt → v2-archive/WINDOWS-INSTALL-README.txt} +0 -0
  424. /package/docs/{WINDOWS-POST-INSTALL.txt → v2-archive/WINDOWS-POST-INSTALL.txt} +0 -0
  425. /package/docs/{example_graph_usage.py → v2-archive/example_graph_usage.py} +0 -0
  426. /package/{completions → ide/completions}/slm.bash +0 -0
  427. /package/{completions → ide/completions}/slm.zsh +0 -0
  428. /package/{configs → ide/configs}/cody-commands.json +0 -0
  429. /package/{install-skills.sh → scripts/install-skills.sh} +0 -0
  430. /package/{install.ps1 → scripts/install.ps1} +0 -0
  431. /package/{install.sh → scripts/install.sh} +0 -0
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # SuperLocalMemory V2 - DMG Testing Script
4
+ #
5
+ # Copyright (c) 2026 Varun Pratap Bhardwaj
6
+ # Solution Architect & Original Creator
7
+ #
8
+ # Licensed under MIT License (see LICENSE file)
9
+ # Repository: https://github.com/varun369/SuperLocalMemoryV2
10
+ #
11
+ # ATTRIBUTION REQUIRED: This notice must be preserved in all copies.
12
+ #
13
+
14
+ set -e
15
+
16
+ # Colors
17
+ RED='\033[0;31m'
18
+ GREEN='\033[0;32m'
19
+ YELLOW='\033[1;33m'
20
+ BLUE='\033[0;34m'
21
+ NC='\033[0m'
22
+
23
+ log_info() {
24
+ echo -e "${BLUE}[TEST]${NC} $1"
25
+ }
26
+
27
+ log_success() {
28
+ echo -e "${GREEN}[PASS]${NC} $1"
29
+ }
30
+
31
+ log_error() {
32
+ echo -e "${RED}[FAIL]${NC} $1"
33
+ }
34
+
35
+ DMG_FILE="SuperLocalMemory-v2.1.0-macos.dmg"
36
+
37
+ if [ ! -f "${DMG_FILE}" ]; then
38
+ log_error "DMG file not found: ${DMG_FILE}"
39
+ exit 1
40
+ fi
41
+
42
+ log_info "Testing DMG: ${DMG_FILE}"
43
+ echo ""
44
+
45
+ # Test 1: DMG Integrity
46
+ log_info "Test 1: Checking DMG integrity..."
47
+ if hdiutil verify "${DMG_FILE}" 2>&1 | grep -q "verified"; then
48
+ log_success "DMG integrity check passed"
49
+ else
50
+ log_error "DMG integrity check failed"
51
+ exit 1
52
+ fi
53
+
54
+ # Test 2: Mount DMG
55
+ log_info "Test 2: Mounting DMG..."
56
+ MOUNT_OUTPUT=$(hdiutil attach "${DMG_FILE}" -nobrowse -readonly)
57
+ MOUNT_POINT=$(echo "$MOUNT_OUTPUT" | grep -E '/Volumes/' | awk '{print $3}')
58
+
59
+ if [ -z "$MOUNT_POINT" ]; then
60
+ log_error "Failed to mount DMG"
61
+ exit 1
62
+ fi
63
+
64
+ log_success "DMG mounted at: $MOUNT_POINT"
65
+
66
+ # Test 3: Verify Contents
67
+ log_info "Test 3: Checking DMG contents..."
68
+
69
+ REQUIRED_FILES=(
70
+ "SuperLocalMemory/install.sh"
71
+ "SuperLocalMemory/src"
72
+ "SuperLocalMemory/bin"
73
+ "SuperLocalMemory/configs"
74
+ "SuperLocalMemory/skills"
75
+ "SuperLocalMemory/mcp_server.py"
76
+ "SuperLocalMemory/README.md"
77
+ "SuperLocalMemory/LICENSE"
78
+ "SuperLocalMemory/ATTRIBUTION.md"
79
+ "SuperLocalMemory/README-INSTALLATION.txt"
80
+ "SuperLocalMemory/INSTALL"
81
+ "Applications"
82
+ )
83
+
84
+ ALL_PRESENT=true
85
+ for item in "${REQUIRED_FILES[@]}"; do
86
+ if [ -e "${MOUNT_POINT}/${item}" ]; then
87
+ log_success " ✓ ${item}"
88
+ else
89
+ log_error " ✗ ${item} (MISSING)"
90
+ ALL_PRESENT=false
91
+ fi
92
+ done
93
+
94
+ if [ "$ALL_PRESENT" = false ]; then
95
+ log_error "Some required files are missing"
96
+ hdiutil detach "${MOUNT_POINT}" -quiet
97
+ exit 1
98
+ fi
99
+
100
+ # Test 4: Check installer script
101
+ log_info "Test 4: Checking installer script..."
102
+ if [ -x "${MOUNT_POINT}/SuperLocalMemory/install.sh" ]; then
103
+ log_success "install.sh is executable"
104
+ else
105
+ log_error "install.sh is not executable"
106
+ hdiutil detach "${MOUNT_POINT}" -quiet
107
+ exit 1
108
+ fi
109
+
110
+ # Test 5: Check Applications symlink
111
+ log_info "Test 5: Checking Applications symlink..."
112
+ if [ -L "${MOUNT_POINT}/Applications" ]; then
113
+ TARGET=$(readlink "${MOUNT_POINT}/Applications")
114
+ if [ "$TARGET" = "/Applications" ]; then
115
+ log_success "Applications symlink is correct"
116
+ else
117
+ log_error "Applications symlink points to wrong location: $TARGET"
118
+ fi
119
+ else
120
+ log_error "Applications symlink not found"
121
+ fi
122
+
123
+ # Test 6: Check file sizes
124
+ log_info "Test 6: Checking file sizes..."
125
+ INSTALLER_SIZE=$(du -sh "${MOUNT_POINT}/SuperLocalMemory" | awk '{print $1}')
126
+ log_success "Installer size: ${INSTALLER_SIZE}"
127
+
128
+ # Test 7: Verify attribution
129
+ log_info "Test 7: Checking attribution headers..."
130
+ if grep -q "Varun Pratap Bhardwaj" "${MOUNT_POINT}/SuperLocalMemory/src/memory_store_v2.py"; then
131
+ log_success "Attribution headers present"
132
+ else
133
+ log_error "Attribution headers missing"
134
+ fi
135
+
136
+ # Test 8: Check INSTALL wrapper
137
+ log_info "Test 8: Checking INSTALL wrapper..."
138
+ if [ -x "${MOUNT_POINT}/SuperLocalMemory/INSTALL" ]; then
139
+ log_success "INSTALL wrapper is executable"
140
+ else
141
+ log_error "INSTALL wrapper is not executable"
142
+ fi
143
+
144
+ # Cleanup
145
+ log_info "Unmounting DMG..."
146
+ hdiutil detach "${MOUNT_POINT}" -quiet
147
+ log_success "DMG unmounted"
148
+
149
+ echo ""
150
+ echo "============================================================================"
151
+ log_success "ALL TESTS PASSED!"
152
+ echo "============================================================================"
153
+ echo ""
154
+ echo "DMG is ready for distribution."
155
+ echo ""
156
+ echo "To test installation:"
157
+ echo " 1. Open ${DMG_FILE}"
158
+ echo " 2. Double-click INSTALL"
159
+ echo " 3. Follow prompts"
160
+ echo " 4. Run: slm status"
161
+ echo ""
@@ -0,0 +1,252 @@
1
+ # ============================================================================
2
+ # SuperLocalMemory V2 - NPM Package Testing Script (PowerShell)
3
+ # Copyright (c) 2026 Varun Pratap Bhardwaj
4
+ # Licensed under MIT License
5
+ # Repository: https://github.com/varun369/SuperLocalMemoryV2
6
+ # ============================================================================
7
+ #
8
+ # Tests the NPM package locally before publishing
9
+ # Run this BEFORE npm publish
10
+ #
11
+
12
+ param()
13
+
14
+ $ErrorActionPreference = "Stop"
15
+
16
+ $REPO_DIR = $PSScriptRoot
17
+
18
+ Write-Host "╔══════════════════════════════════════════════════════════════╗"
19
+ Write-Host "║ SuperLocalMemory V2 - NPM Package Test ║"
20
+ Write-Host "║ by Varun Pratap Bhardwaj ║"
21
+ Write-Host "╚══════════════════════════════════════════════════════════════╝"
22
+ Write-Host ""
23
+
24
+ # Step 1: Validate package.json
25
+ Write-Host "📋 Step 1: Validating package.json..."
26
+ $packageJsonPath = Join-Path $REPO_DIR "package.json"
27
+ if (-not (Test-Path $packageJsonPath)) {
28
+ Write-Host "❌ Error: package.json not found" -ForegroundColor Red
29
+ exit 1
30
+ }
31
+
32
+ # Check version
33
+ $packageJson = Get-Content $packageJsonPath | ConvertFrom-Json
34
+ $VERSION = $packageJson.version
35
+ Write-Host " Version: $VERSION"
36
+
37
+ # Check required fields
38
+ $required = @("name", "version", "description", "author", "license", "repository", "bin")
39
+ $missing = @()
40
+ foreach ($field in $required) {
41
+ if (-not $packageJson.$field) {
42
+ $missing += $field
43
+ }
44
+ }
45
+
46
+ if ($missing.Count -gt 0) {
47
+ Write-Host "❌ Missing required fields: $($missing -join ', ')" -ForegroundColor Red
48
+ exit 1
49
+ }
50
+ Write-Host " ✓ All required fields present"
51
+
52
+ # Step 2: Check file structure
53
+ Write-Host ""
54
+ Write-Host "📁 Step 2: Checking file structure..."
55
+
56
+ $REQUIRED_FILES = @(
57
+ "bin\slm-npm",
58
+ "scripts\postinstall.js",
59
+ "scripts\preuninstall.js",
60
+ "src\memory_store_v2.py",
61
+ "mcp_server.py",
62
+ "install.sh",
63
+ "install.ps1",
64
+ "README.md",
65
+ "LICENSE",
66
+ "ATTRIBUTION.md"
67
+ )
68
+
69
+ $allPresent = $true
70
+ foreach ($file in $REQUIRED_FILES) {
71
+ $filePath = Join-Path $REPO_DIR $file
72
+ if (-not (Test-Path $filePath)) {
73
+ Write-Host " ❌ Missing: $file" -ForegroundColor Red
74
+ $allPresent = $false
75
+ }
76
+ }
77
+
78
+ if (-not $allPresent) {
79
+ exit 1
80
+ }
81
+ Write-Host " ✓ All required files present"
82
+
83
+ # Step 3: Test npm pack
84
+ Write-Host ""
85
+ Write-Host "📦 Step 3: Testing npm pack..."
86
+ Push-Location $REPO_DIR
87
+ try {
88
+ # Remove old tarballs
89
+ Get-ChildItem -Filter "superlocalmemory-*.tgz" | Remove-Item -Force -ErrorAction SilentlyContinue
90
+
91
+ # Create tarball
92
+ $packOutput = npm pack --quiet 2>&1
93
+ $TARBALL = Get-ChildItem -Filter "superlocalmemory-*.tgz" | Select-Object -First 1
94
+
95
+ if (-not $TARBALL) {
96
+ Write-Host " ❌ npm pack failed" -ForegroundColor Red
97
+ exit 1
98
+ }
99
+
100
+ $SIZE = [math]::Round((Get-Item $TARBALL.FullName).Length / 1MB, 2)
101
+ Write-Host " ✓ Package created: $($TARBALL.Name) ($SIZE MB)"
102
+
103
+ # Check package size
104
+ if ($SIZE -gt 1) {
105
+ Write-Host " ⚠️ Warning: Package size is large ($SIZE MB). Target: <0.5MB" -ForegroundColor Yellow
106
+ } else {
107
+ Write-Host " ✓ Package size OK: $SIZE MB"
108
+ }
109
+
110
+ # Step 4: Inspect package contents
111
+ Write-Host ""
112
+ Write-Host "🔍 Step 4: Inspecting package contents..."
113
+ Write-Host " Files included:"
114
+
115
+ # Extract tarball contents list (using tar if available, otherwise show warning)
116
+ try {
117
+ $tarContents = tar -tzf $TARBALL.FullName 2>$null | Select-Object -First 20
118
+ $tarContents | ForEach-Object { Write-Host " $_" }
119
+ $fileCount = (tar -tzf $TARBALL.FullName 2>$null | Measure-Object).Count
120
+ Write-Host " ... ($fileCount total files)"
121
+
122
+ # Check for unwanted files
123
+ $UNWANTED = @("*.pyc", "*.db", ".git", "test_*.py", "wiki-content")
124
+ $foundUnwanted = $false
125
+ foreach ($pattern in $UNWANTED) {
126
+ $found = tar -tzf $TARBALL.FullName 2>$null | Select-String -Pattern $pattern
127
+ if ($found) {
128
+ Write-Host " ⚠️ Warning: Found unwanted files matching: $pattern" -ForegroundColor Yellow
129
+ $foundUnwanted = $true
130
+ }
131
+ }
132
+ if (-not $foundUnwanted) {
133
+ Write-Host " ✓ No obvious unwanted files found"
134
+ }
135
+ } catch {
136
+ Write-Host " ⚠️ Could not inspect tarball contents (tar not available)" -ForegroundColor Yellow
137
+ }
138
+
139
+ # Step 5: Test npm link (local install)
140
+ Write-Host ""
141
+ Write-Host "🔗 Step 5: Testing npm link (local install)..."
142
+
143
+ # Unlink if already linked
144
+ npm unlink -g superlocalmemory 2>$null
145
+
146
+ # Link
147
+ $linkResult = npm link --quiet 2>&1
148
+ if ($LASTEXITCODE -eq 0) {
149
+ Write-Host " ✓ npm link successful"
150
+ } else {
151
+ Write-Host " ❌ npm link failed" -ForegroundColor Red
152
+ Write-Host " $linkResult"
153
+ exit 1
154
+ }
155
+
156
+ # Step 6: Test CLI command
157
+ Write-Host ""
158
+ Write-Host "🧪 Step 6: Testing CLI command..."
159
+
160
+ $slmCommand = Get-Command slm -ErrorAction SilentlyContinue
161
+ if ($slmCommand) {
162
+ Write-Host " ✓ slm command found"
163
+
164
+ # Test version
165
+ try {
166
+ slm --version 2>&1 | Out-Null
167
+ if ($LASTEXITCODE -eq 0) {
168
+ Write-Host " ✓ slm --version works"
169
+ } else {
170
+ Write-Host " ⚠️ slm --version failed (might be OK if not installed yet)" -ForegroundColor Yellow
171
+ }
172
+ } catch {
173
+ Write-Host " ⚠️ slm --version failed" -ForegroundColor Yellow
174
+ }
175
+
176
+ # Test help
177
+ try {
178
+ slm --help 2>&1 | Out-Null
179
+ if ($LASTEXITCODE -eq 0) {
180
+ Write-Host " ✓ slm --help works"
181
+ } else {
182
+ Write-Host " ⚠️ slm --help failed" -ForegroundColor Yellow
183
+ }
184
+ } catch {
185
+ Write-Host " ⚠️ slm --help failed" -ForegroundColor Yellow
186
+ }
187
+ } else {
188
+ Write-Host " ⚠️ slm command not found (expected for first install)" -ForegroundColor Yellow
189
+ Write-Host " This is OK - postinstall will set it up"
190
+ }
191
+
192
+ # Step 7: Validate scripts
193
+ Write-Host ""
194
+ Write-Host "🔧 Step 7: Validating scripts..."
195
+
196
+ # Check postinstall.js
197
+ try {
198
+ node (Join-Path $REPO_DIR "scripts\postinstall.js") --help 2>&1 | Out-Null
199
+ Write-Host " ✓ postinstall.js is valid Node.js"
200
+ } catch {
201
+ Write-Host " ⚠️ postinstall.js might have issues" -ForegroundColor Yellow
202
+ }
203
+
204
+ # Check executables (Windows doesn't need execute bit)
205
+ $slmNpmPath = Join-Path $REPO_DIR "bin\slm-npm"
206
+ if (Test-Path $slmNpmPath) {
207
+ Write-Host " ✓ bin\slm-npm exists"
208
+ } else {
209
+ Write-Host " ❌ bin\slm-npm not found" -ForegroundColor Red
210
+ exit 1
211
+ }
212
+
213
+ # Step 8: Final summary
214
+ Write-Host ""
215
+ Write-Host "╔══════════════════════════════════════════════════════════════╗"
216
+ Write-Host "║ Test Summary ║"
217
+ Write-Host "╚══════════════════════════════════════════════════════════════╝"
218
+ Write-Host ""
219
+ Write-Host "✅ Package structure: OK"
220
+ Write-Host "✅ File validation: OK"
221
+ Write-Host "✅ npm pack: OK ($SIZE MB)"
222
+ Write-Host "✅ npm link: OK"
223
+ Write-Host "✅ Scripts valid: OK"
224
+ Write-Host ""
225
+ Write-Host "📦 Package ready for testing!"
226
+ Write-Host ""
227
+ Write-Host "Next steps:"
228
+ Write-Host "1. Test manual install:"
229
+ Write-Host " npm install -g .\$($TARBALL.Name)"
230
+ Write-Host " slm status"
231
+ Write-Host " npm uninstall -g superlocalmemory"
232
+ Write-Host ""
233
+ Write-Host "2. Test on Docker (recommended):"
234
+ Write-Host " docker run -it --rm -v ${PWD}:/app node:18 bash"
235
+ Write-Host " cd /app"
236
+ Write-Host " npm install -g ./$($TARBALL.Name)"
237
+ Write-Host " slm status"
238
+ Write-Host ""
239
+ Write-Host "3. When ready to publish:"
240
+ Write-Host " npm login"
241
+ Write-Host " npm publish"
242
+ Write-Host ""
243
+ Write-Host "Full guide: NPM-PUBLISHING-GUIDE.md"
244
+ Write-Host ""
245
+
246
+ # Cleanup
247
+ Remove-Item $TARBALL.FullName -Force
248
+ Write-Host "🧹 Cleaned up test tarball"
249
+
250
+ } finally {
251
+ Pop-Location
252
+ }
@@ -0,0 +1,207 @@
1
+ #!/bin/bash
2
+ # ============================================================================
3
+ # SuperLocalMemory V2 - NPM Package Testing Script
4
+ # Copyright (c) 2026 Varun Pratap Bhardwaj
5
+ # Licensed under MIT License
6
+ # Repository: https://github.com/varun369/SuperLocalMemoryV2
7
+ # ============================================================================
8
+ #
9
+ # Tests the NPM package locally before publishing
10
+ # Run this BEFORE npm publish
11
+ #
12
+
13
+ set -e
14
+
15
+ REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
+
17
+ echo "╔══════════════════════════════════════════════════════════════╗"
18
+ echo "║ SuperLocalMemory V2 - NPM Package Test ║"
19
+ echo "║ by Varun Pratap Bhardwaj ║"
20
+ echo "╚══════════════════════════════════════════════════════════════╝"
21
+ echo ""
22
+
23
+ # Step 1: Validate package.json
24
+ echo "📋 Step 1: Validating package.json..."
25
+ if [ ! -f "$REPO_DIR/package.json" ]; then
26
+ echo "❌ Error: package.json not found"
27
+ exit 1
28
+ fi
29
+
30
+ # Check version
31
+ VERSION=$(node -e "console.log(require('$REPO_DIR/package.json').version)")
32
+ echo " Version: $VERSION"
33
+
34
+ # Check required fields
35
+ node -e "
36
+ const pkg = require('$REPO_DIR/package.json');
37
+ const required = ['name', 'version', 'description', 'author', 'license', 'repository', 'bin'];
38
+ const missing = required.filter(f => !pkg[f]);
39
+ if (missing.length > 0) {
40
+ console.error('❌ Missing required fields:', missing.join(', '));
41
+ process.exit(1);
42
+ }
43
+ console.log(' ✓ All required fields present');
44
+ "
45
+
46
+ # Step 2: Check file structure
47
+ echo ""
48
+ echo "📁 Step 2: Checking file structure..."
49
+
50
+ REQUIRED_FILES=(
51
+ "bin/slm-npm"
52
+ "scripts/postinstall.js"
53
+ "scripts/preuninstall.js"
54
+ "src/memory_store_v2.py"
55
+ "mcp_server.py"
56
+ "install.sh"
57
+ "install.ps1"
58
+ "README.md"
59
+ "LICENSE"
60
+ "ATTRIBUTION.md"
61
+ )
62
+
63
+ for file in "${REQUIRED_FILES[@]}"; do
64
+ if [ ! -f "$REPO_DIR/$file" ]; then
65
+ echo " ❌ Missing: $file"
66
+ exit 1
67
+ fi
68
+ done
69
+ echo " ✓ All required files present"
70
+
71
+ # Step 3: Test npm pack
72
+ echo ""
73
+ echo "📦 Step 3: Testing npm pack..."
74
+ cd "$REPO_DIR"
75
+ rm -f superlocalmemory-*.tgz
76
+ npm pack --quiet
77
+ TARBALL=$(ls superlocalmemory-*.tgz 2>/dev/null | head -1)
78
+
79
+ if [ -z "$TARBALL" ]; then
80
+ echo " ❌ npm pack failed"
81
+ exit 1
82
+ fi
83
+
84
+ SIZE=$(du -h "$TARBALL" | cut -f1)
85
+ echo " ✓ Package created: $TARBALL ($SIZE)"
86
+
87
+ # Check package size
88
+ SIZE_KB=$(du -k "$TARBALL" | cut -f1)
89
+ if [ "$SIZE_KB" -gt 1024 ]; then
90
+ echo " ⚠️ Warning: Package size is large (${SIZE}). Target: <500KB"
91
+ else
92
+ echo " ✓ Package size OK: $SIZE"
93
+ fi
94
+
95
+ # Step 4: Inspect package contents
96
+ echo ""
97
+ echo "🔍 Step 4: Inspecting package contents..."
98
+ echo " Files included:"
99
+ tar -tzf "$TARBALL" | head -20
100
+ FILE_COUNT=$(tar -tzf "$TARBALL" | wc -l)
101
+ echo " ... ($FILE_COUNT total files)"
102
+
103
+ # Check for unwanted files
104
+ UNWANTED=("*.pyc" "*.db" ".git" "test_*.py" "wiki-content")
105
+ for pattern in "${UNWANTED[@]}"; do
106
+ if tar -tzf "$TARBALL" | grep -q "$pattern"; then
107
+ echo " ⚠️ Warning: Found unwanted files matching: $pattern"
108
+ fi
109
+ done
110
+ echo " ✓ No obvious unwanted files found"
111
+
112
+ # Step 5: Test npm link (local install)
113
+ echo ""
114
+ echo "🔗 Step 5: Testing npm link (local install)..."
115
+
116
+ # Unlink if already linked
117
+ npm unlink -g superlocalmemory 2>/dev/null || true
118
+
119
+ # Link
120
+ if npm link --quiet; then
121
+ echo " ✓ npm link successful"
122
+ else
123
+ echo " ❌ npm link failed"
124
+ exit 1
125
+ fi
126
+
127
+ # Step 6: Test CLI command
128
+ echo ""
129
+ echo "🧪 Step 6: Testing CLI command..."
130
+
131
+ if command -v slm &> /dev/null; then
132
+ echo " ✓ slm command found"
133
+
134
+ # Test version
135
+ if slm --version &> /dev/null; then
136
+ echo " ✓ slm --version works"
137
+ else
138
+ echo " ⚠️ slm --version failed (might be OK if not installed yet)"
139
+ fi
140
+
141
+ # Test help
142
+ if slm --help &> /dev/null; then
143
+ echo " ✓ slm --help works"
144
+ else
145
+ echo " ⚠️ slm --help failed"
146
+ fi
147
+ else
148
+ echo " ⚠️ slm command not found (expected for first install)"
149
+ echo " This is OK - postinstall will set it up"
150
+ fi
151
+
152
+ # Step 7: Validate scripts
153
+ echo ""
154
+ echo "🔧 Step 7: Validating scripts..."
155
+
156
+ # Check postinstall.js
157
+ if node "$REPO_DIR/scripts/postinstall.js" --help &> /dev/null; then
158
+ echo " ✓ postinstall.js is valid Node.js"
159
+ else
160
+ echo " ⚠️ postinstall.js might have issues"
161
+ fi
162
+
163
+ # Check executables
164
+ if [ -x "$REPO_DIR/bin/slm-npm" ]; then
165
+ echo " ✓ bin/slm-npm is executable"
166
+ else
167
+ echo " ❌ bin/slm-npm is not executable"
168
+ echo " Run: chmod +x $REPO_DIR/bin/slm-npm"
169
+ exit 1
170
+ fi
171
+
172
+ # Step 8: Final summary
173
+ echo ""
174
+ echo "╔══════════════════════════════════════════════════════════════╗"
175
+ echo "║ Test Summary ║"
176
+ echo "╚══════════════════════════════════════════════════════════════╝"
177
+ echo ""
178
+ echo "✅ Package structure: OK"
179
+ echo "✅ File validation: OK"
180
+ echo "✅ npm pack: OK ($SIZE)"
181
+ echo "✅ npm link: OK"
182
+ echo "✅ Scripts valid: OK"
183
+ echo ""
184
+ echo "📦 Package ready for testing!"
185
+ echo ""
186
+ echo "Next steps:"
187
+ echo "1. Test manual install:"
188
+ echo " npm install -g ./$TARBALL"
189
+ echo " slm status"
190
+ echo " npm uninstall -g superlocalmemory"
191
+ echo ""
192
+ echo "2. Test on Docker (recommended):"
193
+ echo " docker run -it --rm -v \$(pwd):/app node:18 bash"
194
+ echo " cd /app"
195
+ echo " npm install -g ./$TARBALL"
196
+ echo " slm status"
197
+ echo ""
198
+ echo "3. When ready to publish:"
199
+ echo " npm login"
200
+ echo " npm publish"
201
+ echo ""
202
+ echo "Full guide: NPM-PUBLISHING-GUIDE.md"
203
+ echo ""
204
+
205
+ # Cleanup
206
+ rm -f "$TARBALL"
207
+ echo "🧹 Cleaned up test tarball"