specmem-hardwicksoftware 3.7.38 → 3.7.39
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/package.json +1 -1
- package/scripts/specmem-init.cjs +26 -12
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "specmem-hardwicksoftware",
|
|
3
|
-
"version": "3.7.
|
|
3
|
+
"version": "3.7.39",
|
|
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/scripts/specmem-init.cjs
CHANGED
|
@@ -10129,23 +10129,33 @@ ${lastOutput}
|
|
|
10129
10129
|
} catch {
|
|
10130
10130
|
ui.setStatus(`Pulling ${containerImage}...`);
|
|
10131
10131
|
try {
|
|
10132
|
-
execSync(`${rtCmd} pull ${containerImage}`, { stdio: '
|
|
10132
|
+
execSync(`${rtCmd} pull ${containerImage}`, { stdio: 'ignore', timeout: 600000 });
|
|
10133
10133
|
imageExists = true;
|
|
10134
10134
|
ui.setStatus('Image pulled');
|
|
10135
10135
|
} catch (pullErr) {
|
|
10136
10136
|
// Try building locally if pull fails
|
|
10137
|
-
|
|
10138
|
-
|
|
10139
|
-
|
|
10140
|
-
|
|
10141
|
-
|
|
10142
|
-
|
|
10143
|
-
|
|
10144
|
-
|
|
10145
|
-
|
|
10146
|
-
|
|
10147
|
-
|
|
10137
|
+
try {
|
|
10138
|
+
ui.setStatus('Pull failed, building locally...');
|
|
10139
|
+
const dockerfilePath = path.join(path.dirname(__dirname), 'container', 'Dockerfile');
|
|
10140
|
+
if (fs.existsSync(dockerfilePath)) {
|
|
10141
|
+
// stdio:'ignore' — build output can be gigabytes (no .dockerignore at context root)
|
|
10142
|
+
// Without this, Node's default 1MB maxBuffer causes ERR_CHILD_PROCESS_STDIO_MAXBUFFER
|
|
10143
|
+
// which crashes init before the catch can fire cleanly
|
|
10144
|
+
try {
|
|
10145
|
+
execSync(`${rtCmd} build -t ${containerImage} -f ${dockerfilePath} ${path.dirname(__dirname)}`, {
|
|
10146
|
+
stdio: 'ignore', timeout: 1200000 // 20 min for local build
|
|
10147
|
+
});
|
|
10148
|
+
imageExists = true;
|
|
10149
|
+
ui.setStatus('Image built locally');
|
|
10150
|
+
} catch (buildErr) {
|
|
10151
|
+
initLog(`[CONTAINER] Local build failed: ${buildErr.message}`);
|
|
10152
|
+
ui.setStatus('Image unavailable — will use legacy mode');
|
|
10153
|
+
}
|
|
10148
10154
|
}
|
|
10155
|
+
} catch (fallbackErr) {
|
|
10156
|
+
// Catch-all: even if ui.setStatus or fs.existsSync throws, don't crash init
|
|
10157
|
+
initLog(`[CONTAINER] Pull fallback error: ${fallbackErr.message}`);
|
|
10158
|
+
ui.setStatus('Image unavailable');
|
|
10149
10159
|
}
|
|
10150
10160
|
}
|
|
10151
10161
|
}
|
|
@@ -11698,5 +11708,9 @@ priority=999
|
|
|
11698
11708
|
|
|
11699
11709
|
main().catch((err) => {
|
|
11700
11710
|
cleanupSpeedMode();
|
|
11711
|
+
// Stop ProgressUI if active — otherwise error prints to alternate screen buffer and is invisible
|
|
11712
|
+
if (_currentUI && typeof _currentUI.stop === 'function') {
|
|
11713
|
+
try { _currentUI.stop(); } catch {}
|
|
11714
|
+
}
|
|
11701
11715
|
console.error(err);
|
|
11702
11716
|
});
|