@nodemint/projectmind
Advanced tools
+13
-0
@@ -6,2 +6,15 @@ # Changelog | ||
| ## [0.5.1] - 2026-07-04 | ||
| ### Added | ||
| - `projectmind savings` and `mind_stats` now report which rules files | ||
| currently carry an embedded digest (`embeddedDigestFiles()` / | ||
| `stats().embeddedDigestIn`). v0.5.0's embedded-digest mechanism deliberately | ||
| avoids a tool call — which means it was invisible to the read-count ledger, | ||
| making the counter look stuck at ~0 even when the fix was working | ||
| perfectly. This surfaces it as an honest, factual note instead of a | ||
| fabricated token estimate: we can observe *that* a file carries the | ||
| embedded map, not *how many times* an agent actually read it, so no number | ||
| is invented for it. | ||
| ## [0.5.0] - 2026-07-04 | ||
@@ -8,0 +21,0 @@ |
+1
-1
| { | ||
| "name": "@nodemint/projectmind", | ||
| "version": "0.5.0", | ||
| "version": "0.5.1", | ||
| "mcpName": "io.github.Nodemint-dev/projectmind", | ||
@@ -5,0 +5,0 @@ "publishConfig": { |
+6
-0
@@ -92,2 +92,8 @@ # projectmind | ||
| **One deliberate gap, stated plainly:** the ledger only counts *tool calls* | ||
| (`mind_digest`, `mind_query`, `mind_context`). The embedded digest described | ||
| below never requires a tool call — that's the whole point — so its savings | ||
| don't show up as a number here. `projectmind savings` names which rules files | ||
| carry it instead of inventing a token count we can't actually observe. | ||
| ## Session handoff — pick up exactly where you left off | ||
@@ -94,0 +100,0 @@ |
+8
-0
@@ -250,2 +250,10 @@ #!/usr/bin/env node | ||
| if (!s.totals.reads) out(` No reads recorded yet — savings accrue as your agent uses the MCP tools.`); | ||
| const embeddedIn = core.embeddedDigestFiles(r); | ||
| if (embeddedIn.length) { | ||
| out(``); | ||
| out(` Also embedded (auto-synced, not counted above): ${embeddedIn.join(", ")}`); | ||
| out(` Every agent session there sees the map for free — no tool call needed, so there's`); | ||
| out(` nothing to attribute a token count to. This is likely your biggest saving; it just`); | ||
| out(` isn't one the ledger above can observe.`); | ||
| } | ||
| out(``); | ||
@@ -252,0 +260,0 @@ out(` Methodology: ${s.methodology}.`); |
+16
-0
@@ -364,2 +364,17 @@ // projectmind core — the only module that touches map.json. | ||
| // Which rules files currently carry an embedded digest — i.e. every agent | ||
| // session there sees the map for free, with no tool call and therefore | ||
| // nothing recorded in the savings ledger. Informational only: deliberately | ||
| // NOT converted into a token/dollar estimate, since there's no way to | ||
| // observe how many times an agent actually reads a static context file. | ||
| export function embeddedDigestFiles(r = root()) { | ||
| const found = []; | ||
| for (const relFile of RULES_FILES) { | ||
| let content; | ||
| try { content = fs.readFileSync(path.join(r, relFile), "utf8"); } catch { continue; } | ||
| if (content.includes(DIGEST_BLOCK_BEGIN) && content.includes(DIGEST_BLOCK_END)) found.push(relFile); | ||
| } | ||
| return found; | ||
| } | ||
| // --------------------------------------------------------------------------- | ||
@@ -620,2 +635,3 @@ // Init | ||
| digestTokensEst: estimateTokens(d), | ||
| embeddedDigestIn: embeddedDigestFiles(r), | ||
| }; | ||
@@ -622,0 +638,0 @@ } |
@@ -182,3 +182,3 @@ #!/usr/bin/env node | ||
| const server = new Server( | ||
| { name: "projectmind", version: "0.5.0" }, | ||
| { name: "projectmind", version: "0.5.1" }, | ||
| { capabilities: { tools: {} } } | ||
@@ -185,0 +185,0 @@ ); |
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
114343
2%1791
1.3%436
1.4%