prism-mcp-server 20.9.0 → 20.9.2
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.
|
@@ -42,6 +42,26 @@ function getClient() {
|
|
|
42
42
|
configClient = createClient({
|
|
43
43
|
url: `file:${CONFIG_PATH}`,
|
|
44
44
|
});
|
|
45
|
+
// Multi-session machines share this one SQLite file across every host
|
|
46
|
+
// window's server process. libsql's default busy timeout is ZERO, so a
|
|
47
|
+
// writer meeting another writer fails instantly with SQLITE_BUSY instead
|
|
48
|
+
// of waiting its turn. Measured 2026-08-11: applying a new skill-manifest
|
|
49
|
+
// snapshot lost that race 10 consecutive times against ~7 live sessions'
|
|
50
|
+
// routine setting writes, leaving the sync permanently "partial" on a busy
|
|
51
|
+
// machine. Five seconds is far beyond any real transaction here and turns
|
|
52
|
+
// contention back into queueing. Fire-and-forget: a failure to set the
|
|
53
|
+
// pragma must never block storage init, and the first real query would
|
|
54
|
+
// surface a genuinely broken database anyway.
|
|
55
|
+
void configClient.execute("PRAGMA busy_timeout = 5000").catch(() => { });
|
|
56
|
+
// WAL is the half that actually ends the starvation: in the default
|
|
57
|
+
// rollback-journal mode every reader blocks the writer, and a machine
|
|
58
|
+
// running many host windows reads this file near-continuously (settings,
|
|
59
|
+
// drift reminders), so a manifest-apply transaction can wait out ANY
|
|
60
|
+
// timeout and still lose. WAL lets readers and the single writer proceed
|
|
61
|
+
// concurrently. The pragma is persistent per-database; issuing it on every
|
|
62
|
+
// init is an idempotent no-op that also upgrades databases created before
|
|
63
|
+
// this change.
|
|
64
|
+
void configClient.execute("PRAGMA journal_mode = WAL").catch(() => { });
|
|
45
65
|
}
|
|
46
66
|
return configClient;
|
|
47
67
|
}
|
|
@@ -97,7 +97,13 @@ export function assembleSkillBlock(entries, budgetChars) {
|
|
|
97
97
|
block +=
|
|
98
98
|
`\n\n[📦 SKILLS NOT INLINED — max_tokens budget reached]\n` +
|
|
99
99
|
`${overflow.join(", ")}\n` +
|
|
100
|
-
`
|
|
100
|
+
`These are RULES YOU ARE BOUND BY, not optional reading — only their text ` +
|
|
101
|
+
`was withheld for budget. Before acting on work a listed skill governs ` +
|
|
102
|
+
`(e.g. verified-shipping before any completion claim, push, or PR), load ` +
|
|
103
|
+
`its body first: invoke it via the host's Skill tool, read it from the ` +
|
|
104
|
+
`skills directory, or re-call session_load_context with a higher ` +
|
|
105
|
+
`max_tokens. Claiming done without consulting the governing skill is the ` +
|
|
106
|
+
`exact failure this list exists to prevent.`;
|
|
101
107
|
}
|
|
102
108
|
return { block, inlined, overflow };
|
|
103
109
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "prism-mcp-server",
|
|
3
|
-
"version": "20.9.
|
|
3
|
+
"version": "20.9.2",
|
|
4
4
|
"mcpName": "io.github.dcostenco/prism-coder",
|
|
5
5
|
"description": "Persistent session memory for AI coding agents that never leaves your machine \u2014 including the on-device model that reasons over it. Restores your prior decisions, open TODOs, and changed files across sessions; adds associative recall of related past work, semantic drift detection, and local inference. Local-first by default. Works with Claude Code, Cursor, and Codex.",
|
|
6
6
|
"module": "index.ts",
|