superlocalmemory 3.6.23 → 3.7.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 (301) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +271 -71
  3. package/bin/slm-npm +43 -89
  4. package/ide/configs/antigravity-mcp.json +2 -2
  5. package/ide/configs/chatgpt-desktop-mcp.json +1 -1
  6. package/ide/configs/claude-desktop-mcp.json +2 -2
  7. package/ide/configs/windsurf-mcp.json +2 -2
  8. package/ide/hooks/context-hook.js +6 -2
  9. package/ide/hooks/post-recall-hook.js +7 -3
  10. package/ide/hooks/tool-event-hook.sh +2 -1
  11. package/package.json +18 -10
  12. package/plugin/.claude-plugin/plugin.json +1 -1
  13. package/plugin/_GENERATED.md +1 -1
  14. package/plugin/agents/slm-memory-advisor.md +1 -1
  15. package/plugin/requirements.txt +1 -1
  16. package/plugin/skills/slm-session/SKILL.md +1 -1
  17. package/plugin-src/rules/AGENTS.md +1 -1
  18. package/pyproject.toml +40 -8
  19. package/scripts/postinstall-interactive.js +17 -94
  20. package/scripts/postinstall.js +185 -258
  21. package/scripts/preuninstall.js +9 -50
  22. package/src/superlocalmemory/__init__.py +2 -2
  23. package/src/superlocalmemory/attribution/mathematical_dna.py +1 -1
  24. package/src/superlocalmemory/attribution/signer.py +34 -19
  25. package/src/superlocalmemory/attribution/watermark.py +1 -1
  26. package/src/superlocalmemory/cli/_lazy_init.py +3 -5
  27. package/src/superlocalmemory/cli/commands.py +453 -191
  28. package/src/superlocalmemory/cli/context_commands.py +5 -4
  29. package/src/superlocalmemory/cli/daemon.py +282 -187
  30. package/src/superlocalmemory/cli/db_migrate.py +3 -1
  31. package/src/superlocalmemory/cli/diagnostics_cmd.py +28 -0
  32. package/src/superlocalmemory/cli/evidence_cmd.py +103 -0
  33. package/src/superlocalmemory/cli/ingest_cmd.py +7 -3
  34. package/src/superlocalmemory/cli/main.py +128 -31
  35. package/src/superlocalmemory/cli/pending_store.py +54 -38
  36. package/src/superlocalmemory/cli/scale_engine_cmd.py +37 -0
  37. package/src/superlocalmemory/cli/service_installer.py +57 -52
  38. package/src/superlocalmemory/cli/setup_wizard.py +142 -88
  39. package/src/superlocalmemory/cli/version_banner.py +2 -1
  40. package/src/superlocalmemory/code_graph/config.py +3 -1
  41. package/src/superlocalmemory/core/backend_orchestrator.py +81 -21
  42. package/src/superlocalmemory/core/config.py +65 -20
  43. package/src/superlocalmemory/core/consolidation_engine.py +9 -7
  44. package/src/superlocalmemory/core/context_cache.py +56 -8
  45. package/src/superlocalmemory/core/derivation_lineage.py +246 -0
  46. package/src/superlocalmemory/core/embedding_worker.py +32 -20
  47. package/src/superlocalmemory/core/embeddings.py +54 -18
  48. package/src/superlocalmemory/core/engine.py +150 -104
  49. package/src/superlocalmemory/core/engine_ingestion.py +513 -0
  50. package/src/superlocalmemory/core/engine_wiring.py +2 -0
  51. package/src/superlocalmemory/core/evidence_bundle.py +526 -0
  52. package/src/superlocalmemory/core/fact_consolidator.py +5 -11
  53. package/src/superlocalmemory/core/graph_analyzer.py +2 -2
  54. package/src/superlocalmemory/core/health_monitor.py +4 -2
  55. package/src/superlocalmemory/core/ingestion_command.py +636 -0
  56. package/src/superlocalmemory/core/injection.py +69 -18
  57. package/src/superlocalmemory/core/lifecycle_state.py +153 -0
  58. package/src/superlocalmemory/core/maintenance.py +1 -1
  59. package/src/superlocalmemory/core/maintenance_scheduler.py +51 -35
  60. package/src/superlocalmemory/core/mutations.py +143 -0
  61. package/src/superlocalmemory/core/platform_utils.py +7 -4
  62. package/src/superlocalmemory/core/ram_lock.py +16 -5
  63. package/src/superlocalmemory/core/rate_limit.py +1 -1
  64. package/src/superlocalmemory/core/recall_pipeline.py +60 -101
  65. package/src/superlocalmemory/core/recall_worker.py +76 -59
  66. package/src/superlocalmemory/core/registry.py +1 -1
  67. package/src/superlocalmemory/core/scale_engine.py +293 -0
  68. package/src/superlocalmemory/core/score_contract.py +62 -0
  69. package/src/superlocalmemory/core/security_primitives.py +3 -1
  70. package/src/superlocalmemory/core/slm_disabled.py +3 -5
  71. package/src/superlocalmemory/core/store_pipeline.py +172 -40
  72. package/src/superlocalmemory/core/tier_manager.py +32 -20
  73. package/src/superlocalmemory/core/worker_pool.py +13 -4
  74. package/src/superlocalmemory/dynamics/activation_guided_quantization.py +1 -1
  75. package/src/superlocalmemory/dynamics/eap_scheduler.py +10 -3
  76. package/src/superlocalmemory/dynamics/ebbinghaus_langevin_coupling.py +1 -1
  77. package/src/superlocalmemory/dynamics/fisher_langevin_coupling.py +1 -1
  78. package/src/superlocalmemory/encoding/auto_linker.py +1 -1
  79. package/src/superlocalmemory/encoding/cognitive_consolidator.py +7 -16
  80. package/src/superlocalmemory/encoding/consolidator.py +22 -5
  81. package/src/superlocalmemory/encoding/fact_extractor.py +1 -1
  82. package/src/superlocalmemory/encoding/foresight.py +2 -0
  83. package/src/superlocalmemory/encoding/graph_builder.py +1 -1
  84. package/src/superlocalmemory/encoding/temporal_parser.py +2 -0
  85. package/src/superlocalmemory/evaluation/__init__.py +13 -0
  86. package/src/superlocalmemory/evaluation/calibration.py +308 -0
  87. package/src/superlocalmemory/evolution/skill_evolver.py +2 -1
  88. package/src/superlocalmemory/graph/cozo_backend.py +256 -23
  89. package/src/superlocalmemory/hooks/_outcome_common.py +21 -11
  90. package/src/superlocalmemory/hooks/antigravity_adapter.py +10 -31
  91. package/src/superlocalmemory/hooks/auto_invoker.py +25 -27
  92. package/src/superlocalmemory/hooks/auto_recall.py +31 -6
  93. package/src/superlocalmemory/hooks/auto_recall_hook.py +13 -33
  94. package/src/superlocalmemory/hooks/before_web_hook.py +9 -7
  95. package/src/superlocalmemory/hooks/claude_code_hooks.py +123 -35
  96. package/src/superlocalmemory/hooks/codex_assets.py +59 -0
  97. package/src/superlocalmemory/hooks/codex_hooks.py +186 -0
  98. package/src/superlocalmemory/hooks/context_payload.py +1 -1
  99. package/src/superlocalmemory/hooks/copilot_adapter.py +9 -24
  100. package/src/superlocalmemory/hooks/cursor_adapter.py +10 -32
  101. package/src/superlocalmemory/hooks/hook_daemon.py +4 -2
  102. package/src/superlocalmemory/hooks/hook_handlers.py +219 -32
  103. package/src/superlocalmemory/hooks/memory_protocol.py +5 -3
  104. package/src/superlocalmemory/hooks/post_tool_async_hook.py +4 -2
  105. package/src/superlocalmemory/hooks/session_registry.py +15 -8
  106. package/src/superlocalmemory/hooks/stop_outcome_hook.py +10 -6
  107. package/src/superlocalmemory/hooks/topic_shift_hook.py +42 -12
  108. package/src/superlocalmemory/hooks/user_prompt_hook.py +9 -14
  109. package/src/superlocalmemory/hooks/user_prompt_rehash_hook.py +19 -11
  110. package/src/superlocalmemory/infra/auth_middleware.py +38 -5
  111. package/src/superlocalmemory/infra/backup.py +7 -5
  112. package/src/superlocalmemory/infra/cloud_backup.py +18 -8
  113. package/src/superlocalmemory/infra/daemon_identity.py +248 -0
  114. package/src/superlocalmemory/infra/data_root.py +199 -0
  115. package/src/superlocalmemory/infra/event_bus.py +3 -1
  116. package/src/superlocalmemory/infra/local_diagnostics.py +327 -0
  117. package/src/superlocalmemory/infra/process_reaper.py +23 -0
  118. package/src/superlocalmemory/ingestion/adapter_manager.py +27 -9
  119. package/src/superlocalmemory/ingestion/base_adapter.py +25 -31
  120. package/src/superlocalmemory/ingestion/calendar_adapter.py +13 -4
  121. package/src/superlocalmemory/ingestion/credentials.py +14 -7
  122. package/src/superlocalmemory/ingestion/gmail_adapter.py +13 -4
  123. package/src/superlocalmemory/ingestion/transcript_adapter.py +7 -2
  124. package/src/superlocalmemory/learning/consolidation_quantization_worker.py +1 -1
  125. package/src/superlocalmemory/learning/ensemble.py +11 -0
  126. package/src/superlocalmemory/learning/entity_compiler.py +1 -1
  127. package/src/superlocalmemory/learning/feedback.py +1 -1
  128. package/src/superlocalmemory/learning/forgetting_scheduler.py +12 -7
  129. package/src/superlocalmemory/learning/quantization_scheduler.py +1 -1
  130. package/src/superlocalmemory/learning/ranker.py +4 -1
  131. package/src/superlocalmemory/learning/source_quality.py +1 -1
  132. package/src/superlocalmemory/learning/trigram_index.py +3 -2
  133. package/src/superlocalmemory/llm/backbone.py +1 -1
  134. package/src/superlocalmemory/math/ebbinghaus.py +1 -1
  135. package/src/superlocalmemory/math/fisher.py +1 -1
  136. package/src/superlocalmemory/math/fisher_quantized.py +1 -1
  137. package/src/superlocalmemory/math/hopfield.py +1 -1
  138. package/src/superlocalmemory/math/langevin.py +1 -1
  139. package/src/superlocalmemory/math/polar_quant.py +3 -4
  140. package/src/superlocalmemory/math/qjl.py +1 -1
  141. package/src/superlocalmemory/math/sheaf.py +1 -1
  142. package/src/superlocalmemory/math/turbo_quant.py +3 -2
  143. package/src/superlocalmemory/mcp/_daemon_proxy.py +12 -11
  144. package/src/superlocalmemory/mcp/_pool_adapter.py +27 -0
  145. package/src/superlocalmemory/mcp/http_transport.py +53 -0
  146. package/src/superlocalmemory/mcp/server.py +39 -13
  147. package/src/superlocalmemory/mcp/shared.py +69 -3
  148. package/src/superlocalmemory/mcp/tools_active.py +141 -31
  149. package/src/superlocalmemory/mcp/tools_core.py +128 -29
  150. package/src/superlocalmemory/mcp/tools_evolution.py +5 -7
  151. package/src/superlocalmemory/mcp/tools_learning.py +42 -2
  152. package/src/superlocalmemory/mcp/tools_mesh.py +7 -23
  153. package/src/superlocalmemory/mcp/tools_optimize.py +8 -1
  154. package/src/superlocalmemory/mcp/tools_v28.py +23 -2
  155. package/src/superlocalmemory/mcp/tools_v3.py +26 -1
  156. package/src/superlocalmemory/mcp/tools_v33.py +56 -17
  157. package/src/superlocalmemory/mesh/broker.py +2 -0
  158. package/src/superlocalmemory/mesh/remote_sync.py +50 -12
  159. package/src/superlocalmemory/optimize/cache/manager.py +77 -1
  160. package/src/superlocalmemory/optimize/cache/semantic.py +23 -3
  161. package/src/superlocalmemory/optimize/compress/ccr.py +4 -0
  162. package/src/superlocalmemory/optimize/compress/router.py +6 -1
  163. package/src/superlocalmemory/optimize/config/__init__.py +5 -0
  164. package/src/superlocalmemory/optimize/config/store.py +6 -4
  165. package/src/superlocalmemory/optimize/proxy/_helpers.py +15 -5
  166. package/src/superlocalmemory/optimize/proxy/capture.py +3 -2
  167. package/src/superlocalmemory/optimize/proxy/server.py +2 -2
  168. package/src/superlocalmemory/optimize/storage/db.py +12 -12
  169. package/src/superlocalmemory/retrieval/agentic.py +1 -1
  170. package/src/superlocalmemory/retrieval/ann_index.py +1 -1
  171. package/src/superlocalmemory/retrieval/bm25_channel.py +35 -11
  172. package/src/superlocalmemory/retrieval/bridge_discovery.py +73 -8
  173. package/src/superlocalmemory/retrieval/engine.py +169 -79
  174. package/src/superlocalmemory/retrieval/entity_channel.py +289 -67
  175. package/src/superlocalmemory/retrieval/forgetting_filter.py +1 -1
  176. package/src/superlocalmemory/retrieval/fusion.py +1 -1
  177. package/src/superlocalmemory/retrieval/hopfield_channel.py +118 -30
  178. package/src/superlocalmemory/retrieval/profile_channel.py +1 -1
  179. package/src/superlocalmemory/retrieval/quantization_aware_search.py +16 -10
  180. package/src/superlocalmemory/retrieval/reranker.py +56 -20
  181. package/src/superlocalmemory/retrieval/scope_policy.py +85 -0
  182. package/src/superlocalmemory/retrieval/semantic_channel.py +122 -14
  183. package/src/superlocalmemory/retrieval/spreading_activation.py +141 -25
  184. package/src/superlocalmemory/retrieval/strategy.py +1 -1
  185. package/src/superlocalmemory/retrieval/temporal_channel.py +30 -15
  186. package/src/superlocalmemory/retrieval/vector_store.py +1 -1
  187. package/src/superlocalmemory/server/api.py +10 -7
  188. package/src/superlocalmemory/server/bandit_loops.py +4 -2
  189. package/src/superlocalmemory/server/recall_serializer.py +24 -0
  190. package/src/superlocalmemory/server/route_mutations.py +84 -0
  191. package/src/superlocalmemory/server/routes/agents.py +8 -6
  192. package/src/superlocalmemory/server/routes/brain.py +14 -12
  193. package/src/superlocalmemory/server/routes/chat.py +29 -12
  194. package/src/superlocalmemory/server/routes/data_io.py +55 -24
  195. package/src/superlocalmemory/server/routes/helpers.py +8 -63
  196. package/src/superlocalmemory/server/routes/ingest.py +53 -36
  197. package/src/superlocalmemory/server/routes/memories.py +104 -43
  198. package/src/superlocalmemory/server/routes/mesh.py +31 -0
  199. package/src/superlocalmemory/server/routes/profiles.py +26 -4
  200. package/src/superlocalmemory/server/routes/tiers.py +43 -11
  201. package/src/superlocalmemory/server/routes/timeline.py +5 -1
  202. package/src/superlocalmemory/server/routes/v3_api.py +76 -21
  203. package/src/superlocalmemory/server/security_middleware.py +1 -1
  204. package/src/superlocalmemory/server/unified_daemon.py +680 -293
  205. package/src/superlocalmemory/server/write_identity.py +147 -0
  206. package/src/superlocalmemory/storage/access_log.py +4 -3
  207. package/src/superlocalmemory/storage/database.py +118 -25
  208. package/src/superlocalmemory/storage/migration_runner.py +84 -1
  209. package/src/superlocalmemory/storage/migration_v33.py +1 -1
  210. package/src/superlocalmemory/storage/migrations/M002_model_state_history.py +6 -60
  211. package/src/superlocalmemory/storage/migrations/M018_ingestion_operations.py +120 -0
  212. package/src/superlocalmemory/storage/migrations/M019_derivation_lineage.py +54 -0
  213. package/src/superlocalmemory/storage/migrations/M020_model_state_integrity.py +52 -0
  214. package/src/superlocalmemory/storage/migrations/__init__.py +5 -0
  215. package/src/superlocalmemory/storage/models.py +16 -0
  216. package/src/superlocalmemory/storage/quantized_store.py +20 -3
  217. package/src/superlocalmemory/storage/v2_migrator.py +5 -3
  218. package/src/superlocalmemory/ui/favicon.svg +5 -0
  219. package/src/superlocalmemory/ui/index.html +1 -0
  220. package/src/superlocalmemory/ui/js/compliance.js +1 -1
  221. package/src/superlocalmemory/ui/js/core.js +49 -8
  222. package/src/superlocalmemory/ui/js/dashboard.js +23 -2
  223. package/src/superlocalmemory/ui/js/feedback.js +1 -1
  224. package/src/superlocalmemory/ui/js/graph-filters.js +1 -1
  225. package/src/superlocalmemory/ui/js/graph-ui.js +1 -1
  226. package/src/superlocalmemory/ui/js/lifecycle.js +1 -1
  227. package/src/superlocalmemory/ui/js/ng-mesh.js +15 -49
  228. package/src/superlocalmemory/ui/js/settings.js +4 -2
  229. package/src/superlocalmemory/vector/lancedb_backend.py +57 -9
  230. package/bin/slm +0 -59
  231. package/bin/slm.bat +0 -77
  232. package/bin/slm.cmd +0 -5
  233. package/ide/integrations/langchain/README.md +0 -106
  234. package/ide/integrations/langchain/langchain_superlocalmemory/__init__.py +0 -9
  235. package/ide/integrations/langchain/langchain_superlocalmemory/chat_message_history.py +0 -201
  236. package/ide/integrations/langchain/pyproject.toml +0 -38
  237. package/ide/integrations/langchain/tests/__init__.py +0 -3
  238. package/ide/integrations/langchain/tests/test_chat_message_history.py +0 -215
  239. package/ide/integrations/langchain/tests/test_security.py +0 -117
  240. package/ide/integrations/llamaindex/README.md +0 -81
  241. package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/__init__.py +0 -9
  242. package/ide/integrations/llamaindex/llama_index/storage/chat_store/superlocalmemory/base.py +0 -316
  243. package/ide/integrations/llamaindex/pyproject.toml +0 -43
  244. package/ide/integrations/llamaindex/tests/__init__.py +0 -3
  245. package/ide/integrations/llamaindex/tests/test_chat_store.py +0 -294
  246. package/ide/integrations/llamaindex/tests/test_security.py +0 -241
  247. package/plugin-src/.mcp.json +0 -12
  248. package/plugin-src/agents/slm-memory-advisor.md +0 -44
  249. package/plugin-src/agents/slm-optimize-advisor.md +0 -38
  250. package/plugin-src/hooks/.gitkeep +0 -0
  251. package/plugin-src/hooks/hooks.json +0 -23
  252. package/plugin-src/manifest.json +0 -25
  253. package/plugin-src/requirements.txt +0 -1
  254. package/plugin-src/rules/CLAUDE.md.fragment +0 -44
  255. package/plugin-src/scripts/ensure-venv.bat +0 -122
  256. package/plugin-src/scripts/ensure-venv.sh +0 -105
  257. package/plugin-src/scripts/slm-launch +0 -15
  258. package/plugin-src/scripts/slm-launch.bat +0 -17
  259. package/plugin-src/settings.json +0 -16
  260. package/plugin-src/skills/slm-cache/SKILL.md +0 -140
  261. package/plugin-src/skills/slm-compress/SKILL.md +0 -143
  262. package/plugin-src/skills/slm-graph/SKILL.md +0 -300
  263. package/plugin-src/skills/slm-recall/SKILL.md +0 -204
  264. package/plugin-src/skills/slm-remember/SKILL.md +0 -194
  265. package/plugin-src/skills/slm-session/SKILL.md +0 -207
  266. package/plugin-src/skills/slm-status/SKILL.md +0 -149
  267. package/scripts/__tests__/build-plugin.test.mjs +0 -613
  268. package/scripts/_savings_math.py +0 -270
  269. package/scripts/build-dmg.sh +0 -417
  270. package/scripts/build-plugin.js +0 -742
  271. package/scripts/build-slm-hook.ps1 +0 -40
  272. package/scripts/build-slm-hook.sh +0 -45
  273. package/scripts/build_entry.py +0 -452
  274. package/scripts/ci/stage5b_gate.sh +0 -50
  275. package/scripts/dogfood_savings.py +0 -490
  276. package/scripts/generate-thumbnails.py +0 -218
  277. package/scripts/install-skills.ps1 +0 -4
  278. package/scripts/install-skills.sh +0 -5
  279. package/scripts/install.ps1 +0 -701
  280. package/scripts/install.sh +0 -1015
  281. package/scripts/postinstall_binary.js +0 -287
  282. package/scripts/prepack.js +0 -33
  283. package/scripts/release_manifest.py +0 -273
  284. package/scripts/slm-hook.spec +0 -56
  285. package/scripts/start-dashboard.ps1 +0 -52
  286. package/scripts/start-dashboard.sh +0 -41
  287. package/scripts/sync-wiki.ps1 +0 -127
  288. package/scripts/sync-wiki.sh +0 -82
  289. package/scripts/test-dmg.sh +0 -161
  290. package/scripts/test-npm-package.ps1 +0 -252
  291. package/scripts/test-npm-package.sh +0 -207
  292. package/scripts/verify-install.ps1 +0 -294
  293. package/scripts/verify-install.sh +0 -266
  294. package/scripts/verify-v27.ps1 +0 -301
  295. package/scripts/verify-v27.sh +0 -233
  296. package/src/superlocalmemory.egg-info/PKG-INFO +0 -516
  297. package/src/superlocalmemory.egg-info/SOURCES.txt +0 -529
  298. package/src/superlocalmemory.egg-info/dependency_links.txt +0 -1
  299. package/src/superlocalmemory.egg-info/entry_points.txt +0 -2
  300. package/src/superlocalmemory.egg-info/requires.txt +0 -71
  301. package/src/superlocalmemory.egg-info/top_level.txt +0 -1
@@ -1,41 +0,0 @@
1
- #!/bin/bash
2
- # ============================================================================
3
- # SuperLocalMemory - Dashboard Startup Script
4
- # Starts the web dashboard on http://localhost:8765
5
- # Copyright (c) 2026 Varun Pratap Bhardwaj
6
- # ============================================================================
7
-
8
- set -e
9
-
10
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
11
- cd "$SCRIPT_DIR"
12
-
13
- echo "╔══════════════════════════════════════════════════════════════╗"
14
- echo "║ SuperLocalMemory - Dashboard ║"
15
- echo "║ by Varun Pratap Bhardwaj ║"
16
- echo "╚══════════════════════════════════════════════════════════════╝"
17
- echo ""
18
-
19
- # Check if FastAPI is installed
20
- if ! python3 -c "import fastapi" 2>/dev/null; then
21
- echo "⚠️ FastAPI not installed (optional dependency)"
22
- echo ""
23
- echo "To use the dashboard, install web dependencies:"
24
- echo " pip3 install -r requirements-ui.txt"
25
- echo ""
26
- echo "Or install all features:"
27
- echo " pip3 install -r requirements-full.txt"
28
- echo ""
29
- exit 1
30
- fi
31
-
32
- echo "🚀 Starting dashboard server..."
33
- echo ""
34
- echo " Dashboard: http://localhost:8765"
35
- echo " API Docs: http://localhost:8765/docs"
36
- echo ""
37
- echo "Press Ctrl+C to stop"
38
- echo ""
39
-
40
- # Start server
41
- python3 ui_server.py
@@ -1,127 +0,0 @@
1
- # ============================================================================
2
- # SuperLocalMemory V2 - Wiki Sync Script (PowerShell)
3
- # Automatically syncs wiki-content/ to GitHub Wiki repository
4
- # Copyright (c) 2026 Varun Pratap Bhardwaj
5
- # ============================================================================
6
-
7
- param()
8
-
9
- $ErrorActionPreference = "Stop"
10
-
11
- # Configuration
12
- $REPO_DIR = $PSScriptRoot
13
- $WIKI_CONTENT_DIR = Join-Path $REPO_DIR "wiki-content"
14
- $WIKI_REPO_DIR = Join-Path $env:TEMP "superlocalmemory.wiki"
15
- $WIKI_REPO_URL = "https://github.com/qualixar/superlocalmemory.wiki.git"
16
-
17
- Write-Host "╔══════════════════════════════════════════════════════════════╗"
18
- Write-Host "║ SuperLocalMemory V2 - Wiki Sync Tool ║"
19
- Write-Host "║ by Varun Pratap Bhardwaj ║"
20
- Write-Host "╚══════════════════════════════════════════════════════════════╝"
21
- Write-Host ""
22
-
23
- # Check if wiki-content exists
24
- if (-not (Test-Path $WIKI_CONTENT_DIR)) {
25
- Write-Host "✗ Error: wiki-content/ directory not found" -ForegroundColor Red
26
- exit 1
27
- }
28
-
29
- # Clone or update wiki repo
30
- if (Test-Path $WIKI_REPO_DIR) {
31
- Write-Host "📥 Updating existing wiki repository..."
32
- Push-Location $WIKI_REPO_DIR
33
- try {
34
- $DEFAULT_BRANCH = git symbolic-ref refs/remotes/origin/HEAD 2>$null
35
- if ($DEFAULT_BRANCH) {
36
- $DEFAULT_BRANCH = $DEFAULT_BRANCH -replace '^refs/remotes/origin/', ''
37
- } else {
38
- $DEFAULT_BRANCH = "master"
39
- }
40
- git pull origin $DEFAULT_BRANCH
41
- } finally {
42
- Pop-Location
43
- }
44
- } else {
45
- Write-Host "📥 Cloning wiki repository..."
46
- git clone $WIKI_REPO_URL $WIKI_REPO_DIR
47
- Set-Location $WIKI_REPO_DIR
48
- $DEFAULT_BRANCH = git symbolic-ref refs/remotes/origin/HEAD 2>$null
49
- if ($DEFAULT_BRANCH) {
50
- $DEFAULT_BRANCH = $DEFAULT_BRANCH -replace '^refs/remotes/origin/', ''
51
- } else {
52
- $DEFAULT_BRANCH = "master"
53
- }
54
- }
55
-
56
- # Sync wiki files (PowerShell equivalent of rsync)
57
- Write-Host ""
58
- Write-Host "📋 Syncing wiki files..."
59
-
60
- Push-Location $WIKI_REPO_DIR
61
- try {
62
- # Remove old files except .git and excluded files
63
- $excludeFiles = @("DEPLOYMENT-CHECKLIST.md", "WIKI-UPDATE-SUMMARY.md", "NEW-PAGES-SUMMARY.md", "README.md")
64
- Get-ChildItem -Path . -Recurse -File | Where-Object {
65
- $_.Name -notin $excludeFiles -and $_.FullName -notlike "*\.git\*"
66
- } | Remove-Item -Force
67
-
68
- # Copy new files from wiki-content
69
- Get-ChildItem -Path $WIKI_CONTENT_DIR -Recurse -File | Where-Object {
70
- $_.Name -notin $excludeFiles
71
- } | ForEach-Object {
72
- $relativePath = $_.FullName.Substring($WIKI_CONTENT_DIR.Length + 1)
73
- $targetPath = Join-Path $WIKI_REPO_DIR $relativePath
74
- $targetDir = Split-Path $targetPath -Parent
75
- if (-not (Test-Path $targetDir)) {
76
- New-Item -ItemType Directory -Path $targetDir -Force | Out-Null
77
- }
78
- Copy-Item $_.FullName -Destination $targetPath -Force
79
- }
80
-
81
- # Remove old naming
82
- $oldFile = Join-Path $WIKI_REPO_DIR "4-Layer-Architecture.md"
83
- if (Test-Path $oldFile) {
84
- Remove-Item $oldFile -Force
85
- }
86
-
87
- # Check for changes
88
- $changes = git status --porcelain
89
- if (-not $changes) {
90
- Write-Host "✓ No changes to sync" -ForegroundColor Green
91
- exit 0
92
- }
93
-
94
- # Show what changed
95
- Write-Host ""
96
- Write-Host "📝 Changes detected:"
97
- git status --short
98
-
99
- # Commit and push
100
- Write-Host ""
101
- Write-Host "💾 Committing changes..."
102
- git add .
103
-
104
- $timestamp = Get-Date -Format "yyyy-MM-dd HH:mm"
105
- $commitMessage = @"
106
- Sync: Update wiki from main repo ($timestamp)
107
-
108
- Automated sync from wiki-content/ directory
109
-
110
- Created by: Varun Pratap Bhardwaj
111
- "@
112
-
113
- git commit -m $commitMessage
114
-
115
- Write-Host ""
116
- Write-Host "📤 Pushing to GitHub Wiki..."
117
- git push origin $DEFAULT_BRANCH
118
-
119
- Write-Host ""
120
- Write-Host "╔══════════════════════════════════════════════════════════════╗"
121
- Write-Host "║ ✅ Wiki synced successfully! ║"
122
- Write-Host "║ View at: https://github.com/qualixar/superlocalmemory/wiki║"
123
- Write-Host "╚══════════════════════════════════════════════════════════════╝"
124
-
125
- } finally {
126
- Pop-Location
127
- }
@@ -1,82 +0,0 @@
1
- #!/bin/bash
2
- # ============================================================================
3
- # SuperLocalMemory V2 - Wiki Sync Script
4
- # Automatically syncs wiki-content/ to GitHub Wiki repository
5
- # Copyright (c) 2026 Varun Pratap Bhardwaj
6
- # ============================================================================
7
-
8
- set -e
9
-
10
- REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)"
11
- WIKI_CONTENT_DIR="${REPO_DIR}/wiki-content"
12
- WIKI_REPO_DIR="/tmp/superlocalmemory.wiki"
13
- WIKI_REPO_URL="https://github.com/qualixar/superlocalmemory.wiki.git"
14
-
15
- echo "╔══════════════════════════════════════════════════════════════╗"
16
- echo "║ SuperLocalMemory V2 - Wiki Sync Tool ║"
17
- echo "║ by Varun Pratap Bhardwaj ║"
18
- echo "╚══════════════════════════════════════════════════════════════╝"
19
- echo ""
20
-
21
- # Check if wiki-content exists
22
- if [ ! -d "${WIKI_CONTENT_DIR}" ]; then
23
- echo "✗ Error: wiki-content/ directory not found"
24
- exit 1
25
- fi
26
-
27
- # Clone or update wiki repo
28
- if [ -d "${WIKI_REPO_DIR}" ]; then
29
- echo "📥 Updating existing wiki repository..."
30
- cd "${WIKI_REPO_DIR}"
31
- DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo "master")
32
- git pull origin "${DEFAULT_BRANCH}"
33
- else
34
- echo "📥 Cloning wiki repository..."
35
- git clone "${WIKI_REPO_URL}" "${WIKI_REPO_DIR}"
36
- cd "${WIKI_REPO_DIR}"
37
- fi
38
-
39
- # Sync wiki files
40
- echo ""
41
- echo "📋 Syncing wiki files..."
42
- rsync -av --delete \
43
- --exclude='.git' \
44
- --exclude='DEPLOYMENT-CHECKLIST.md' \
45
- --exclude='WIKI-UPDATE-SUMMARY.md' \
46
- --exclude='NEW-PAGES-SUMMARY.md' \
47
- --exclude='README.md' \
48
- "${WIKI_CONTENT_DIR}/" "${WIKI_REPO_DIR}/"
49
-
50
- # Remove old naming
51
- rm -f "${WIKI_REPO_DIR}/4-Layer-Architecture.md"
52
-
53
- # Check for changes
54
- if [ -z "$(git status --porcelain)" ]; then
55
- echo "✓ No changes to sync"
56
- exit 0
57
- fi
58
-
59
- # Show what changed
60
- echo ""
61
- echo "📝 Changes detected:"
62
- git status --short
63
-
64
- # Commit and push
65
- echo ""
66
- echo "💾 Committing changes..."
67
- git add .
68
- git commit -m "Sync: Update wiki from main repo ($(date '+%Y-%m-%d %H:%M'))
69
-
70
- Automated sync from wiki-content/ directory
71
-
72
- Created by: Varun Pratap Bhardwaj"
73
-
74
- echo ""
75
- echo "📤 Pushing to GitHub Wiki..."
76
- git push origin "${DEFAULT_BRANCH:-master}"
77
-
78
- echo ""
79
- echo "╔══════════════════════════════════════════════════════════════╗"
80
- echo "║ ✅ Wiki synced successfully! ║"
81
- echo "║ View at: https://github.com/qualixar/superlocalmemory/wiki║"
82
- echo "╚══════════════════════════════════════════════════════════════╝"
@@ -1,161 +0,0 @@
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/qualixar/superlocalmemory
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 ""
@@ -1,252 +0,0 @@
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/qualixar/superlocalmemory
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
- }