prism-mcp-server 20.9.1 → 20.9.3

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.
@@ -80,14 +80,30 @@ export function assembleSkillBlock(entries, budgetChars) {
80
80
  const ordered = [...entries].sort(fillOrder);
81
81
  const unbudgeted = !Number.isFinite(budgetChars) || budgetChars <= 0;
82
82
  let block = "";
83
+ let unprotectedChars = 0;
83
84
  const inlined = [];
84
85
  const overflow = [];
85
86
  for (const e of ordered) {
86
87
  const piece = render(e);
87
- // Protected always inline; others only while they fit.
88
- if (unbudgeted || e.protected || block.length + piece.length <= budgetChars) {
88
+ // Protected always inline and NEVER debit the budget: the tranche is
89
+ // documented as ADDITIVE on top of the floor. The previous check
90
+ // compared block.length — which the floor had already filled — so with
91
+ // a ~46KB floor against 2-16KB tranches, NO unprotected skill ever
92
+ // inlined at any normal budget. Rank was irrelevant; the budget was
93
+ // pre-spent. Found 2026-08-11 tracing why a prompt-matched
94
+ // verified-shipping still sat in overflow while an agent shipped
95
+ // unverified UI claims; the 2026-08-03 note ("no unprotected universal
96
+ // was ever inlined") had recorded this symptom and it was treated by
97
+ // protecting one skill instead of fixing the accounting.
98
+ if (unbudgeted || e.protected) {
89
99
  block += piece;
90
100
  inlined.push(e.name);
101
+ continue;
102
+ }
103
+ if (unprotectedChars + piece.length <= budgetChars) {
104
+ block += piece;
105
+ unprotectedChars += piece.length;
106
+ inlined.push(e.name);
91
107
  }
92
108
  else {
93
109
  overflow.push(e.name);
@@ -97,7 +113,13 @@ export function assembleSkillBlock(entries, budgetChars) {
97
113
  block +=
98
114
  `\n\n[📦 SKILLS NOT INLINED — max_tokens budget reached]\n` +
99
115
  `${overflow.join(", ")}\n` +
100
- `To inline them, re-call session_load_context with a higher max_tokens.`;
116
+ `These are RULES YOU ARE BOUND BY, not optional reading only their text ` +
117
+ `was withheld for budget. Before acting on work a listed skill governs ` +
118
+ `(e.g. verified-shipping before any completion claim, push, or PR), load ` +
119
+ `its body first: invoke it via the host's Skill tool, read it from the ` +
120
+ `skills directory, or re-call session_load_context with a higher ` +
121
+ `max_tokens. Claiming done without consulting the governing skill is the ` +
122
+ `exact failure this list exists to prevent.`;
101
123
  }
102
124
  return { block, inlined, overflow };
103
125
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prism-mcp-server",
3
- "version": "20.9.1",
3
+ "version": "20.9.3",
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",