specmem-hardwicksoftware 3.7.33 → 3.7.34
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.
- package/CHANGELOG.md +32 -0
- package/README.md +4 -2
- package/dist/mcp/compactionProxy.js +14 -7
- package/package.json +1 -1
- package/specmem/supervisord.conf +1 -1
- package/svg-sections/readme-how-to-install.svg +145 -0
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,38 @@ All notable changes to SpecMem - we keep it real with semantic versioning. Deada
|
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
+
## [3.7.34] - 2026-02-26
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
- System reminder dedup bug — `String.replace(string, '')` only removes first occurrence; duplicate identical reminders in same message block now fully nuked via `while(includes)` loop
|
|
11
|
+
- Edit tool stripping bug — `smartStripEdit(block)` was passing the whole tool_use block instead of `block.input`, causing null return and no stripping of Edit payloads in old messages
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## [3.7.33] - 2026-02-26
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
- Token compaction proxy reliability — resolved connection drops and socket failures under sustained load
|
|
19
|
+
- Multi-project registry for translation socket resolution — daemon now iterates registered projects to find active socket instead of hardcoded path
|
|
20
|
+
- System reminder stripping — strips redundant `<system-reminder>` blocks (keeps first occurrence), reduces token overhead per request
|
|
21
|
+
- Compaction proxy minimum translate length removed — all content now eligible for compression regardless of size
|
|
22
|
+
|
|
23
|
+
### Improved
|
|
24
|
+
- Token usage efficiency — advanced stenographic compression now applied to all tool results and system prompts, measurably lower token consumption per session
|
|
25
|
+
- Agent behavior modification hooks — agents now properly communicate via team messaging tools and use SpecMem tool calls as expected
|
|
26
|
+
- Tool call enforcement — bash call enforcer upgraded with better debouncing and team comms validation
|
|
27
|
+
- Team communications enforcer — improved reliability of inter-agent message routing
|
|
28
|
+
- Multi-project resource sharing — compaction daemon tracks project registry with cache invalidation on changes
|
|
29
|
+
- README updated with new "How to Install on Linux Systems" SVG featuring Debian, Ubuntu, Ubuntu LTS, Mint, and Kali Linux
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
- Project registry system in compaction proxy — tracks all registered projects for shared translation memory and synonym caches
|
|
33
|
+
- Dynamic translate socket resolution across registered projects (sorted by last-seen)
|
|
34
|
+
- `SYSTEM_REMINDER_STRIPPING` live config toggle
|
|
35
|
+
- New skill commands for agent orchestration and autoclaude workflows
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
7
39
|
## [3.7.32] - 2026-02-24
|
|
8
40
|
|
|
9
41
|
### Fixed
|
package/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
## Token compression currently broken - please run specmem proxy off before running specmem init - until this is fixed!
|
|
2
|
+
|
|
1
3
|
<!-- Debian/Ubuntu/Mint/Kali notice -->
|
|
2
4
|
<div align="center">
|
|
3
5
|
<table><tr><td align="center" style="background:#0d1117;border:1px solid #30363d;border-radius:8px;padding:12px 20px">
|
|
@@ -12,8 +14,8 @@
|
|
|
12
14
|
|
|
13
15
|
<div align="center">
|
|
14
16
|
|
|
15
|
-
<!--
|
|
16
|
-
<img src="./
|
|
17
|
+
<!-- How to Install SVG -->
|
|
18
|
+
<img src="./svg-sections/readme-how-to-install.svg" alt="How to Install SpecMem on Linux" width="800">
|
|
17
19
|
|
|
18
20
|
<br/>
|
|
19
21
|
<br/>
|
|
@@ -652,7 +652,7 @@ function stripOldToolResults(messages) {
|
|
|
652
652
|
if (!input) return block;
|
|
653
653
|
|
|
654
654
|
// Smart Edit stripping — keep only - / + diff lines
|
|
655
|
-
const editDiff = smartStripEdit(
|
|
655
|
+
const editDiff = smartStripEdit(input);
|
|
656
656
|
if (editDiff) {
|
|
657
657
|
const origLen = JSON.stringify(input).length;
|
|
658
658
|
const newLen = JSON.stringify(editDiff.input).length;
|
|
@@ -750,9 +750,13 @@ function stripSystemReminders(messages) {
|
|
|
750
750
|
firstSeen = true; // keep the very first one
|
|
751
751
|
continue;
|
|
752
752
|
}
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
753
|
+
// replaceAll to nuke ALL occurrences of this exact match in the string
|
|
754
|
+
// .replace(string, '') only kills the first occurrence — duplicates slip through
|
|
755
|
+
while (newText.includes(match)) {
|
|
756
|
+
newText = newText.replace(match, '');
|
|
757
|
+
charsRemoved += match.length;
|
|
758
|
+
remindersStripped++;
|
|
759
|
+
}
|
|
756
760
|
}
|
|
757
761
|
return { ...msg, content: newText.replace(/\n{3,}/g, '\n\n').trim() };
|
|
758
762
|
}
|
|
@@ -772,9 +776,12 @@ function stripSystemReminders(messages) {
|
|
|
772
776
|
firstSeen = true; // keep the very first one
|
|
773
777
|
continue;
|
|
774
778
|
}
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
779
|
+
// replaceAll to nuke ALL occurrences of this exact match in the block
|
|
780
|
+
while (newText.includes(match)) {
|
|
781
|
+
newText = newText.replace(match, '');
|
|
782
|
+
charsRemoved += match.length;
|
|
783
|
+
remindersStripped++;
|
|
784
|
+
}
|
|
778
785
|
}
|
|
779
786
|
const cleaned = newText.replace(/\n{3,}/g, '\n\n').trim();
|
|
780
787
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specmem-hardwicksoftware",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.34",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Your Claude Code sessions don't have to start from scratch anymore — SpecMem gives your AI real memory. It won't forget your conversations, your code, or your architecture decisions between sessions. That's the whole point. Semantic code indexing that actually works: TypeScript, JavaScript, Python, Go, Rust, Java, Kotlin, C, C++, HTML and more. It doesn't just track functions — it gets classes, methods, fields, constants, enums, macros, imports, structs, the whole codebase graph. There's chat memory too, powered by pgvector embeddings. You've also got token compression, team coordination, multi-agent comms, and file watching built in. 74+ MCP tools. Runs on PostgreSQL + Docker. It's kind of a big deal. justcalljon.pro",
|
|
6
6
|
"main": "dist/index.js",
|
package/specmem/supervisord.conf
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
; ============================================
|
|
2
2
|
; SPECMEM BRAIN CONTAINER - DYNAMIC SUPERVISORD CONFIG
|
|
3
|
-
; Generated by specmem-init at 2026-02-
|
|
3
|
+
; Generated by specmem-init at 2026-02-26T20:07:11.788Z
|
|
4
4
|
; Thread counts from model-config.json resourcePool
|
|
5
5
|
; ============================================
|
|
6
6
|
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 480" width="800" height="480">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
4
|
+
<stop offset="0%" style="stop-color:#0d1117"/>
|
|
5
|
+
<stop offset="100%" style="stop-color:#161b22"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="cardGrad" x1="0%" y1="0%" x2="100%" y2="100%">
|
|
8
|
+
<stop offset="0%" style="stop-color:#1c2128;stop-opacity:0.9"/>
|
|
9
|
+
<stop offset="100%" style="stop-color:#21262d;stop-opacity:0.85"/>
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<linearGradient id="titleGrad" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
12
|
+
<stop offset="0%" style="stop-color:#00bfff"/>
|
|
13
|
+
<stop offset="50%" style="stop-color:#a855f7"/>
|
|
14
|
+
<stop offset="100%" style="stop-color:#00bfff"/>
|
|
15
|
+
</linearGradient>
|
|
16
|
+
<linearGradient id="cyanPurple" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
17
|
+
<stop offset="0%" style="stop-color:#00bfff"/>
|
|
18
|
+
<stop offset="100%" style="stop-color:#a855f7"/>
|
|
19
|
+
</linearGradient>
|
|
20
|
+
<linearGradient id="termGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
21
|
+
<stop offset="0%" style="stop-color:#161b22"/>
|
|
22
|
+
<stop offset="100%" style="stop-color:#0d1117"/>
|
|
23
|
+
</linearGradient>
|
|
24
|
+
</defs>
|
|
25
|
+
|
|
26
|
+
<!-- Background -->
|
|
27
|
+
<rect width="800" height="480" rx="16" ry="16" fill="url(#bgGrad)"/>
|
|
28
|
+
<rect width="800" height="480" rx="16" ry="16" fill="none" stroke="url(#cyanPurple)" stroke-width="1" stroke-opacity="0.2"/>
|
|
29
|
+
|
|
30
|
+
<!-- Title -->
|
|
31
|
+
<text x="400" y="38" text-anchor="middle" font-family="system-ui, sans-serif" font-size="22" font-weight="700" fill="url(#titleGrad)">How to Install on Linux Systems</text>
|
|
32
|
+
<text x="400" y="58" text-anchor="middle" font-family="system-ui, sans-serif" font-size="11" fill="#6e7681">Supported on all major Debian-based distributions</text>
|
|
33
|
+
|
|
34
|
+
<!-- ═══ DISTRO LOGOS ROW ═══ -->
|
|
35
|
+
|
|
36
|
+
<!-- Debian -->
|
|
37
|
+
<g transform="translate(45, 78)">
|
|
38
|
+
<rect width="130" height="80" rx="10" fill="url(#cardGrad)" stroke="#A80030" stroke-width="1.2"/>
|
|
39
|
+
<rect width="130" height="3" rx="1.5" fill="#A80030"/>
|
|
40
|
+
<g transform="translate(22, 12)">
|
|
41
|
+
<circle cx="20" cy="20" r="16" fill="none" stroke="#A80030" stroke-width="2"/>
|
|
42
|
+
<path d="M20 6 C30 6 34 16 28 24 C22 32 14 30 10 24" fill="none" stroke="#D70751" stroke-width="2.5" stroke-linecap="round"/>
|
|
43
|
+
<circle cx="20" cy="20" r="4" fill="#D70751"/>
|
|
44
|
+
</g>
|
|
45
|
+
<text x="93" y="30" text-anchor="middle" font-family="system-ui, sans-serif" font-size="14" font-weight="600" fill="#D70751">Debian</text>
|
|
46
|
+
<text x="93" y="46" text-anchor="middle" font-family="system-ui, sans-serif" font-size="10" fill="#6e7681">11+ / 12</text>
|
|
47
|
+
</g>
|
|
48
|
+
|
|
49
|
+
<!-- Ubuntu -->
|
|
50
|
+
<g transform="translate(190, 78)">
|
|
51
|
+
<rect width="130" height="80" rx="10" fill="url(#cardGrad)" stroke="#E95420" stroke-width="1.2"/>
|
|
52
|
+
<rect width="130" height="3" rx="1.5" fill="#E95420"/>
|
|
53
|
+
<g transform="translate(22, 12)">
|
|
54
|
+
<circle cx="20" cy="20" r="16" fill="none" stroke="#E95420" stroke-width="2"/>
|
|
55
|
+
<circle cx="20" cy="20" r="4" fill="#E95420"/>
|
|
56
|
+
<circle cx="20" cy="4" r="3" fill="#E95420"/>
|
|
57
|
+
<circle cx="6" cy="28" r="3" fill="#E95420"/>
|
|
58
|
+
<circle cx="34" cy="28" r="3" fill="#E95420"/>
|
|
59
|
+
</g>
|
|
60
|
+
<text x="93" y="30" text-anchor="middle" font-family="system-ui, sans-serif" font-size="14" font-weight="600" fill="#E95420">Ubuntu</text>
|
|
61
|
+
<text x="93" y="46" text-anchor="middle" font-family="system-ui, sans-serif" font-size="10" fill="#6e7681">22.04 / 24.04</text>
|
|
62
|
+
</g>
|
|
63
|
+
|
|
64
|
+
<!-- Ubuntu LTS -->
|
|
65
|
+
<g transform="translate(335, 78)">
|
|
66
|
+
<rect width="130" height="80" rx="10" fill="url(#cardGrad)" stroke="#E95420" stroke-width="1.2"/>
|
|
67
|
+
<rect width="130" height="3" rx="1.5" fill="#E95420"/>
|
|
68
|
+
<g transform="translate(18, 12)">
|
|
69
|
+
<circle cx="20" cy="20" r="16" fill="none" stroke="#E95420" stroke-width="2"/>
|
|
70
|
+
<circle cx="20" cy="20" r="4" fill="#E95420"/>
|
|
71
|
+
<circle cx="20" cy="4" r="3" fill="#77216F"/>
|
|
72
|
+
<circle cx="6" cy="28" r="3" fill="#77216F"/>
|
|
73
|
+
<circle cx="34" cy="28" r="3" fill="#77216F"/>
|
|
74
|
+
</g>
|
|
75
|
+
<text x="88" y="26" text-anchor="middle" font-family="system-ui, sans-serif" font-size="12" font-weight="600" fill="#E95420">Ubuntu LTS</text>
|
|
76
|
+
<text x="88" y="40" text-anchor="middle" font-family="system-ui, sans-serif" font-size="10" fill="#6e7681">Yes, unironically.</text>
|
|
77
|
+
<text x="88" y="52" text-anchor="middle" font-family="system-ui, sans-serif" font-size="10" fill="#6e7681">20.04+</text>
|
|
78
|
+
</g>
|
|
79
|
+
|
|
80
|
+
<!-- Linux Mint -->
|
|
81
|
+
<g transform="translate(480, 78)">
|
|
82
|
+
<rect width="130" height="80" rx="10" fill="url(#cardGrad)" stroke="#87CF3E" stroke-width="1.2"/>
|
|
83
|
+
<rect width="130" height="3" rx="1.5" fill="#87CF3E"/>
|
|
84
|
+
<g transform="translate(22, 14)">
|
|
85
|
+
<rect x="4" y="4" width="32" height="32" rx="8" fill="none" stroke="#87CF3E" stroke-width="2"/>
|
|
86
|
+
<text x="20" y="28" text-anchor="middle" font-family="system-ui, sans-serif" font-size="16" font-weight="700" fill="#87CF3E">LM</text>
|
|
87
|
+
</g>
|
|
88
|
+
<text x="93" y="30" text-anchor="middle" font-family="system-ui, sans-serif" font-size="14" font-weight="600" fill="#87CF3E">Mint</text>
|
|
89
|
+
<text x="93" y="46" text-anchor="middle" font-family="system-ui, sans-serif" font-size="10" fill="#6e7681">20+</text>
|
|
90
|
+
</g>
|
|
91
|
+
|
|
92
|
+
<!-- Kali Linux -->
|
|
93
|
+
<g transform="translate(625, 78)">
|
|
94
|
+
<rect width="130" height="80" rx="10" fill="url(#cardGrad)" stroke="#557C94" stroke-width="1.2"/>
|
|
95
|
+
<rect width="130" height="3" rx="1.5" fill="#557C94"/>
|
|
96
|
+
<g transform="translate(22, 12)">
|
|
97
|
+
<path d="M16 0 L28 12 L24 20 L32 32 L16 24 L0 32 L8 20 L4 12 Z" fill="none" stroke="#557C94" stroke-width="2" stroke-linejoin="round"/>
|
|
98
|
+
</g>
|
|
99
|
+
<text x="93" y="30" text-anchor="middle" font-family="system-ui, sans-serif" font-size="14" font-weight="600" fill="#557C94">Kali</text>
|
|
100
|
+
<text x="93" y="46" text-anchor="middle" font-family="system-ui, sans-serif" font-size="10" fill="#6e7681">Debian-based</text>
|
|
101
|
+
</g>
|
|
102
|
+
|
|
103
|
+
<!-- ═══ TERMINAL INSTALL BLOCK ═══ -->
|
|
104
|
+
|
|
105
|
+
<!-- Terminal window -->
|
|
106
|
+
<rect x="50" y="180" width="700" height="200" rx="12" fill="url(#termGrad)" stroke="#30363d" stroke-width="1.5"/>
|
|
107
|
+
|
|
108
|
+
<!-- Terminal title bar -->
|
|
109
|
+
<rect x="50" y="180" width="700" height="32" rx="12" fill="#21262d"/>
|
|
110
|
+
<rect x="50" y="200" width="700" height="12" fill="#21262d"/>
|
|
111
|
+
<circle cx="72" cy="196" r="6" fill="#ff5f57"/>
|
|
112
|
+
<circle cx="92" cy="196" r="6" fill="#febc2e"/>
|
|
113
|
+
<circle cx="112" cy="196" r="6" fill="#28c840"/>
|
|
114
|
+
<text x="400" y="200" text-anchor="middle" font-family="monospace" font-size="12" fill="#6e7681">bash — Install SpecMem</text>
|
|
115
|
+
|
|
116
|
+
<!-- Step 1 -->
|
|
117
|
+
<text x="80" y="240" font-family="monospace" font-size="14" fill="#4ade80">$</text>
|
|
118
|
+
<text x="96" y="240" font-family="monospace" font-size="14" fill="#e6edf3">npm install -g specmem-hardwicksoftware</text>
|
|
119
|
+
<text x="670" y="240" text-anchor="end" font-family="system-ui, sans-serif" font-size="11" font-weight="600" fill="#00bfff">Step 1</text>
|
|
120
|
+
|
|
121
|
+
<!-- Divider -->
|
|
122
|
+
<line x1="80" y1="254" x2="720" y2="254" stroke="#30363d" stroke-width="0.5"/>
|
|
123
|
+
|
|
124
|
+
<!-- Step 2 -->
|
|
125
|
+
<text x="80" y="280" font-family="monospace" font-size="14" fill="#4ade80">$</text>
|
|
126
|
+
<text x="96" y="280" font-family="monospace" font-size="14" fill="#e6edf3">cd /your/project/directory/</text>
|
|
127
|
+
<text x="670" y="280" text-anchor="end" font-family="system-ui, sans-serif" font-size="11" font-weight="600" fill="#a855f7">Step 2</text>
|
|
128
|
+
|
|
129
|
+
<!-- Divider -->
|
|
130
|
+
<line x1="80" y1="294" x2="720" y2="294" stroke="#30363d" stroke-width="0.5"/>
|
|
131
|
+
|
|
132
|
+
<!-- Step 3 -->
|
|
133
|
+
<text x="80" y="320" font-family="monospace" font-size="14" fill="#4ade80">$</text>
|
|
134
|
+
<text x="96" y="320" font-family="monospace" font-size="14" fill="#e6edf3">specmem init</text>
|
|
135
|
+
<text x="670" y="320" text-anchor="end" font-family="system-ui, sans-serif" font-size="11" font-weight="600" fill="#22c55e">Step 3</text>
|
|
136
|
+
|
|
137
|
+
<!-- Output line -->
|
|
138
|
+
<text x="96" y="350" font-family="monospace" font-size="12" fill="#4ade80">✔ SpecMem initialized. You're done.</text>
|
|
139
|
+
<text x="96" y="368" font-family="monospace" font-size="11" fill="#6e7681">Embedding server, PostgreSQL, pgvector — all handled for you.</text>
|
|
140
|
+
|
|
141
|
+
<!-- ═══ FOOTER BANNER ═══ -->
|
|
142
|
+
<rect x="50" y="400" width="700" height="60" rx="12" fill="#22c55e" fill-opacity="0.08" stroke="#22c55e" stroke-width="1" stroke-opacity="0.3"/>
|
|
143
|
+
<text x="400" y="426" text-anchor="middle" font-family="system-ui, sans-serif" font-size="16" font-weight="700" fill="#4ade80">It's literally 3 steps, you can't fuck this up!</text>
|
|
144
|
+
<text x="400" y="448" text-anchor="middle" font-family="system-ui, sans-serif" font-size="11" fill="#6e7681">specmem init auto-installs everything. Including Claude Code itself.</text>
|
|
145
|
+
</svg>
|