getprismo 0.1.61 → 0.1.63

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/README.md CHANGED
@@ -4,9 +4,9 @@
4
4
  [![npm downloads](https://img.shields.io/npm/dw/getprismo.svg)](https://www.npmjs.com/package/getprismo)
5
5
  [![license: MIT](https://img.shields.io/badge/license-MIT-green.svg)](LICENSE)
6
6
 
7
- Agent control plane for AI coding.
7
+ Token observability and verification for AI coding agents.
8
8
 
9
- Prismo watches local Codex, Claude Code, and Cursor sessions, finds wasted agent context, applies safe interventions, and verifies whether those interventions actually saved tokens and dollars in later sessions.
9
+ Prismo reads your local Codex, Claude Code, and Cursor sessions to show where tokens are wasted, by cause, repo, and session, then verifies whether any fix actually reduced usage in later sessions instead of trusting a benchmark. Compression, routing, and context tools are fixes; Prismo is the measurement and verification layer above them. Runs locally, so no code, prompts, or output leave your machine.
10
10
 
11
11
  ```bash
12
12
  npx getprismo protect
@@ -187,6 +187,44 @@ module.exports = function createCloudSync(deps) {
187
187
  };
188
188
  }
189
189
 
190
+ // Read generated context-pack receipts so the dashboard can show each pack's
191
+ // provenance (included/excluded roots, git state, staleness). Receipts carry
192
+ // no source or prompts — only the trust-boundary metadata.
193
+ function readContextPackReceipts(root) {
194
+ const dir = path.join(root, ".prismo");
195
+ let names;
196
+ try {
197
+ names = fs.readdirSync(dir).filter((name) => name.endsWith(".receipt.json"));
198
+ } catch {
199
+ return [];
200
+ }
201
+ const packs = [];
202
+ for (const name of names.slice(0, 50)) {
203
+ try {
204
+ const r = JSON.parse(fs.readFileSync(path.join(dir, name), "utf8"));
205
+ if (!r || !r.pack_id) continue;
206
+ packs.push({
207
+ pack_id: r.pack_id,
208
+ pack_path: r.pack_path || null,
209
+ included_source_roots: Array.isArray(r.included_source_roots) ? r.included_source_roots : [],
210
+ excluded_roots: Array.isArray(r.excluded_roots) ? r.excluded_roots : [],
211
+ repo_ref: r.repo_ref || null,
212
+ target_agents: Array.isArray(r.target_agents) ? r.target_agents : [],
213
+ estimated_pack_tokens: typeof r.estimated_pack_tokens === "number" ? r.estimated_pack_tokens : null,
214
+ token_budget: typeof r.token_budget === "number" ? r.token_budget : null,
215
+ stale_if_older_than_ms: typeof r.stale_if_older_than_ms === "number" ? r.stale_if_older_than_ms : null,
216
+ source_globs_digest: r.source_globs_digest || null,
217
+ verify_command: r.verify_command || null,
218
+ prismo_version: r.prismo_version || null,
219
+ generated_at: r.generated_at || null,
220
+ });
221
+ } catch {
222
+ // skip an unreadable receipt
223
+ }
224
+ }
225
+ return packs;
226
+ }
227
+
190
228
  function buildSyncPayload(rootDir = process.cwd(), options = {}) {
191
229
  const root = path.resolve(rootDir);
192
230
  const allRepos = Boolean(options.allRepos);
@@ -269,6 +307,7 @@ module.exports = function createCloudSync(deps) {
269
307
  } : null,
270
308
  aggregate,
271
309
  sessions,
310
+ contextPacks: readContextPackReceipts(root),
272
311
  privacy: {
273
312
  rawPrompts: false,
274
313
  rawCode: false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "getprismo",
3
- "version": "0.1.61",
3
+ "version": "0.1.63",
4
4
  "description": "Local AI coding workflow scanner for Codex, Claude Code, Cursor, and token-waste diagnostics.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/shanirsh/prismodev#readme",