specmem-hardwicksoftware 3.7.35 → 3.7.38

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 (71) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +11 -15
  3. package/bin/specmem-autoclaude.cjs +12 -1
  4. package/bin/specmem-cli.cjs +1077 -11
  5. package/bin/specmem-console.cjs +890 -63
  6. package/bootstrap.cjs +10 -2
  7. package/claude-hooks/agent-loading-hook.cjs +16 -16
  8. package/claude-hooks/agent-loading-hook.js +28 -21
  9. package/claude-hooks/agent-type-matcher.js +1 -1
  10. package/claude-hooks/background-completion-silencer.js +1 -1
  11. package/claude-hooks/file-claim-enforcer.cjs +37 -36
  12. package/claude-hooks/output-cleaner.cjs +1 -1
  13. package/claude-hooks/refusal-detector-hook.cjs +53 -0
  14. package/claude-hooks/settings.json +64 -4
  15. package/claude-hooks/smart-search-interceptor.js +1 -1
  16. package/claude-hooks/specmem-search-enforcer.cjs +2 -11
  17. package/claude-hooks/specmem-team-member-inject.js +1 -1
  18. package/claude-hooks/specmem-unified-hook.py +1 -1
  19. package/claude-hooks/subagent-loading-hook.cjs +1 -1
  20. package/claude-hooks/task-progress-hook.cjs +7 -7
  21. package/claude-hooks/task-progress-hook.js +3 -3
  22. package/claude-hooks/team-comms-enforcer.cjs +113 -47
  23. package/claude-hooks/use-code-pointers.cjs +1 -1
  24. package/dist/claude-sessions/sessionParser.js +5 -0
  25. package/dist/cli/deploy-to-claude.js +9 -2
  26. package/dist/codebase/codebaseIndexer.js +48 -17
  27. package/dist/codebase/exclusions.js +3 -4
  28. package/dist/codebase/index.js +4 -0
  29. package/dist/codebase/pdfExtractor.js +298 -0
  30. package/dist/dashboard/api/taskTeamMembers.js +2 -2
  31. package/dist/db/bigBrainMigrations.js +29 -0
  32. package/dist/hooks/hookManager.js +4 -4
  33. package/dist/hooks/teamFramingCli.js +1 -1
  34. package/dist/hooks/teamMemberPrepromptHook.js +5 -5
  35. package/dist/index.js +49 -12
  36. package/dist/init/claudeConfigInjector.js +27 -8
  37. package/dist/installer/autoInstall.js +7 -1
  38. package/dist/mcp/compactionProxy.js +1052 -192
  39. package/dist/mcp/compactionProxyDaemon.js +112 -37
  40. package/dist/mcp/contextVault.js +439 -0
  41. package/dist/mcp/embeddingServerManager.js +151 -17
  42. package/dist/mcp/mcpProtocolHandler.js +6 -1
  43. package/dist/mcp/miniCOTServerManager.js +82 -8
  44. package/dist/mcp/specMemServer.js +45 -10
  45. package/dist/mcp/toolRegistry.js +6 -0
  46. package/dist/startup/startupIndexing.js +14 -0
  47. package/dist/team-members/taskOrchestrator.js +3 -3
  48. package/dist/team-members/taskTeamMemberLogger.js +2 -2
  49. package/dist/tools/goofy/deployTeamMember.js +3 -3
  50. package/dist/tools/goofy/digInTheVault.js +81 -0
  51. package/dist/tools/goofy/findCodePointers.js +17 -0
  52. package/dist/tools/goofy/findWhatISaid.js +19 -0
  53. package/dist/tools/goofy/stashTheGoods.js +56 -0
  54. package/dist/tools/teamMemberDeployer.js +2 -2
  55. package/dist/watcher/changeHandler.js +65 -8
  56. package/dist/watcher/changeQueue.js +20 -1
  57. package/embedding-sandbox/frankenstein-embeddings.py +4 -3
  58. package/embedding-sandbox/mini-cot-service.py +11 -13
  59. package/embedding-sandbox/pdf-text-extract.py +208 -0
  60. package/package.json +1 -1
  61. package/scripts/deploy-hooks.cjs +12 -4
  62. package/scripts/fast-batch-embedder.cjs +2 -2
  63. package/scripts/force-retry.cjs +34 -0
  64. package/scripts/global-postinstall.cjs +97 -4
  65. package/scripts/poetic-abliteration.cjs +379 -0
  66. package/scripts/refusal-enforcer.cjs +88 -0
  67. package/scripts/specmem-init.cjs +222 -41
  68. package/specmem/model-config.json +6 -6
  69. package/specmem/supervisord.conf +1 -1
  70. package/svg-sections/readme-token-compaction.svg +246 -0
  71. package/claude-hooks/agent-chooser-hook.js +0 -179
package/CHANGELOG.md CHANGED
@@ -4,6 +4,40 @@ All notable changes to SpecMem - we keep it real with semantic versioning. Deada
4
4
 
5
5
  ---
6
6
 
7
+ ## [3.7.36] - 2026-03-02
8
+
9
+ ### Security
10
+ - **Killed runtime model downloads** — `mini-cot-service.py` had a fallback path that silently downloaded 800MB from HuggingFace if local ONNX models were missing. Now raises a hard `RuntimeError` with clear instructions to run `specmem init`. SpecMem will never phone home for model weights at runtime. Period.
11
+
12
+ ### Added
13
+ - **Context Vault** — new `stash_the_goods` and `dig_in_the_vault` MCP tools. Stash large content (tool results, code dumps, research) into a chunked, BM25-indexed vault with 24h TTL. Retrieval is token-efficient — pull only the chunks you need instead of replaying entire outputs
14
+ - **PDF text extraction** — codebase indexer now extracts and indexes text from PDF files via `pdfExtractor.js` and Python `pdf-text-extract.py` backend. PDFs in your repo are now searchable through semantic code search
15
+ - **Token compaction README visual** — new SVG (`readme-token-compaction.svg`) showcasing the compression pipeline, placed directly under install instructions
16
+
17
+ ### Improved
18
+ - **Hook system overhaul** — `agent-chooser-hook.js`, `agent-loading-hook.cjs`, `background-completion-silencer.js`, `file-claim-enforcer.cjs`, `output-cleaner.cjs`, `subagent-loading-hook.cjs`, `task-progress-hook.cjs`, `team-comms-enforcer.cjs`, and unified hook all updated for better reliability and debouncing
19
+ - **Team member deployment** — `deployTeamMember.js` and `teamMemberDeployer.js` improved orchestration, `taskOrchestrator.js` and `taskTeamMemberLogger.js` refined for cleaner multi-agent coordination
20
+ - **Compaction proxy daemon** — connection handling and project registry improvements in both `compactionProxy.js` and `compactionProxyDaemon.js`
21
+ - **Startup indexing** — `startupIndexing.js` faster init path, better deferred indexing
22
+ - **File watcher** — `changeHandler.js` and `changeQueue.js` refined batch processing, reduced unnecessary re-index triggers
23
+ - **MCP server** — `specMemServer.js`, `toolRegistry.js`, and `mcpProtocolHandler.js` updated tool registration and response handling
24
+ - **Database migrations** — `bigBrainMigrations.js` updated with new schema support for context vault tables
25
+ - **Claude config injector** — `claudeConfigInjector.js` improved hook deployment and settings injection
26
+ - **Deploy hooks script** — `deploy-hooks.cjs` and `global-postinstall.cjs` streamlined install flow
27
+
28
+ ### Fixed
29
+ - **Codebase exclusions** — `exclusions.js` tightened ignore patterns to prevent indexing build artifacts and node_modules noise
30
+ - **Session parser** — `sessionParser.js` edge case fixes for malformed session entries
31
+
32
+ ---
33
+
34
+ ## [3.7.35] - 2026-03-01
35
+
36
+ ### Fixed
37
+ - **File watcher resync loop killing CPU** — when sync score sat at ~85%, the auto-resync trigger would fire repeatedly (every 15min debounce), each resync barely moving the needle, creating an infinite CPU-burning loop. Fixed threshold logic so resync only fires when score is genuinely degraded, not hovering near the threshold
38
+
39
+ ---
40
+
7
41
  ## [3.7.34] - 2026-02-26
8
42
 
9
43
  ### Fixed
package/README.md CHANGED
@@ -1,23 +1,17 @@
1
- ## Token compression currently broken - please run specmem proxy off before running specmem init - until this is fixed!
2
-
3
- <!-- Debian/Ubuntu/Mint/Kali notice -->
4
- <div align="center">
5
- <table><tr><td align="center" style="background:#0d1117;border:1px solid #30363d;border-radius:8px;padding:12px 20px">
6
- <strong>Debian-based Linux?</strong> &nbsp;
7
- <img src="https://upload.wikimedia.org/wikipedia/commons/4/4a/Debian-OpenLogo.svg" height="16" alt="Debian"/>
8
- <img src="https://upload.wikimedia.org/wikipedia/commons/a/ab/Logo-ubuntu_cof-orange-hex.svg" height="16" alt="Ubuntu"/>
9
- <img src="https://upload.wikimedia.org/wikipedia/commons/3/3f/Linux_Mint_logo_without_wordmark.svg" height="16" alt="Mint"/>
10
- <img src="https://upload.wikimedia.org/wikipedia/commons/4/4b/Kali_Linux_2.0_wordmark.svg" height="16" alt="Kali"/>
11
- &nbsp; <code>npm install -g specmem-hardwicksoftware</code> &nbsp;— root no longer required.
12
- </td></tr></table>
13
- </div>
14
-
15
- <div align="center">
16
1
 
2
+ ## COMPACTION PROXY FIXED - AGENT BEHAVIOR IMPROVEMENT SOON!
17
3
  <!-- How to Install SVG -->
18
4
  <img src="./svg-sections/readme-how-to-install.svg" alt="How to Install SpecMem on Linux" width="800">
19
5
 
20
6
  <br/>
7
+
8
+ <!-- Token Compaction Pipeline SVG -->
9
+ <div align="center">
10
+ <picture>
11
+ <img alt="Token Compaction Pipeline — ~60% Input Token Reduction" src="./svg-sections/readme-token-compaction.svg" width="800">
12
+ </picture>
13
+ </div>
14
+
21
15
  <br/>
22
16
 
23
17
  <!-- Hero Banner -->
@@ -149,6 +143,8 @@ Full technical deep-dive covering architecture, embeddings, database internals,
149
143
  </picture>
150
144
  </div>
151
145
 
146
+ <br/>
147
+
152
148
  ---
153
149
 
154
150
  ## 🔓 Root Access (Optional)
@@ -323,8 +323,19 @@ class AutoController {
323
323
  // PTY MEMORY APPROACH: NO -L -Logfile (zero disk I/O)
324
324
  // Uses screen hardcopy on-demand instead of continuous logging
325
325
  // -h 5000 sets scrollback buffer to 5000 lines for hardcopy capture
326
+ // COMPACTION: Route through proxy if running
327
+ let proxyEnv = '';
328
+ try {
329
+ const portFile = path.join(os.homedir(), '.claude', '.compaction-proxy-port');
330
+ if (fs.existsSync(portFile)) {
331
+ const port = parseInt(fs.readFileSync(portFile, 'utf8').trim(), 10);
332
+ if (port) {
333
+ proxyEnv = `ANTHROPIC_BASE_URL="http://127.0.0.1:${port}" `;
334
+ }
335
+ }
336
+ } catch (e) {}
326
337
  const claudeBin = getClaudeBinary();
327
- const cmd = `screen -h 5000 -dmS ${this.claudeSession} bash -c "cd '${this.projectPath}' && '${claudeBin}' 2>&1; exec bash"`;
338
+ const cmd = `screen -h 5000 -dmS ${this.claudeSession} bash -c "cd '${this.projectPath}' && ${proxyEnv}'${claudeBin}' 2>&1; exec bash"`;
328
339
  execSync(cmd, { stdio: 'ignore' });
329
340
 
330
341
  // Wait for it to start