@kevinbermudezc/context-guard 1.2.0 β 1.3.0
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 +28 -13
- package/dist/bin/claude-hook.js +12 -0
- package/dist/bin/claude-hook.js.map +1 -1
- package/dist/bin/context-guard.js +263 -16
- package/dist/bin/context-guard.js.map +1 -1
- package/dist/bin/mcp-server.js +186 -54
- package/dist/bin/mcp-server.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +39 -20
- package/dist/src/index.js.map +1 -1
- package/dist/src/token-metrics.d.ts +56 -0
- package/dist/src/token-metrics.d.ts.map +1 -0
- package/dist/src/token-metrics.js +135 -0
- package/dist/src/token-metrics.js.map +1 -0
- package/dist/src/types.d.ts +1 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/tests/mcp-server.test.js +41 -8
- package/dist/tests/mcp-server.test.js.map +1 -1
- package/dist/tests/token-metrics.test.d.ts +2 -0
- package/dist/tests/token-metrics.test.d.ts.map +1 -0
- package/dist/tests/token-metrics.test.js +41 -0
- package/dist/tests/token-metrics.test.js.map +1 -0
- package/examples/mcp-configs/antigravity-mcp.json +1 -0
- package/examples/mcp-configs/claude-desktop.json +1 -0
- package/examples/mcp-configs/cursor-mcp.json +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -149,19 +149,28 @@ That's it! When Claude Code attempts to run `Read` (or raw bash reads like `cat
|
|
|
149
149
|
|
|
150
150
|
ContextGuard ships a built-in **Model Context Protocol (MCP) server** compatible with any MCP host: **Cursor, Windsurf, Claude Desktop, Antigravity (AGY), Zed**, and more.
|
|
151
151
|
|
|
152
|
-
The MCP server exposes
|
|
152
|
+
The MCP server exposes tools, passive resources, and optimized prompt templates:
|
|
153
|
+
|
|
154
|
+
### π οΈ Tools
|
|
153
155
|
|
|
154
156
|
| Tool | Description | Cost | Latency |
|
|
155
157
|
|---|---|---|---|
|
|
156
158
|
| `read_file_safe` | Protected file read β passthrough for small files, AST skeleton for large ones, block for binaries/lockfiles | **\$0.00** | **< 5ms** |
|
|
157
159
|
| `inspect_outline` | Instant structural outline (classes, functions, types, signals) with line numbers | **\$0.00** | **< 5ms** |
|
|
158
|
-
| `grep_distilled` | Pattern search returning only structural context around matches
|
|
160
|
+
| `grep_distilled` | Pattern search returning only structural context around matches (uses ripgrep with pure Node fallback) | **\$0.00** | **< 50ms** |
|
|
161
|
+
|
|
162
|
+
### π¦ Resources & Prompts
|
|
163
|
+
|
|
164
|
+
| Type | URI / Name | Description |
|
|
165
|
+
|---|---|---|
|
|
166
|
+
| **Resource** | `contextguard://config` | Live inspection of active thresholds, bypass formats, and worker provider |
|
|
167
|
+
| **Prompt** | `investigate_codebase_safely` | System prompt template enforcing token preservation and outline-first navigation |
|
|
159
168
|
|
|
160
169
|
### Install & Run
|
|
161
170
|
|
|
162
171
|
```bash
|
|
163
172
|
# One-shot (no install):
|
|
164
|
-
npx -y @kevinbermudezc/context-guard context-guard-mcp
|
|
173
|
+
npx -y -p @kevinbermudezc/context-guard context-guard-mcp
|
|
165
174
|
|
|
166
175
|
# Or as a local dependency:
|
|
167
176
|
pnpm add -D @kevinbermudezc/context-guard
|
|
@@ -175,7 +184,7 @@ node ./node_modules/@kevinbermudezc/context-guard/dist/bin/mcp-server.js
|
|
|
175
184
|
"mcpServers": {
|
|
176
185
|
"context-guard": {
|
|
177
186
|
"command": "npx",
|
|
178
|
-
"args": ["-y", "@kevinbermudezc/context-guard@latest", "context-guard-mcp"]
|
|
187
|
+
"args": ["-y", "-p", "@kevinbermudezc/context-guard@latest", "context-guard-mcp"]
|
|
179
188
|
}
|
|
180
189
|
}
|
|
181
190
|
}
|
|
@@ -188,7 +197,7 @@ node ./node_modules/@kevinbermudezc/context-guard/dist/bin/mcp-server.js
|
|
|
188
197
|
"mcpServers": {
|
|
189
198
|
"context-guard": {
|
|
190
199
|
"command": "npx",
|
|
191
|
-
"args": ["-y", "@kevinbermudezc/context-guard@latest", "context-guard-mcp"]
|
|
200
|
+
"args": ["-y", "-p", "@kevinbermudezc/context-guard@latest", "context-guard-mcp"]
|
|
192
201
|
}
|
|
193
202
|
}
|
|
194
203
|
}
|
|
@@ -201,7 +210,7 @@ node ./node_modules/@kevinbermudezc/context-guard/dist/bin/mcp-server.js
|
|
|
201
210
|
"mcpServers": {
|
|
202
211
|
"context-guard": {
|
|
203
212
|
"command": "npx",
|
|
204
|
-
"args": ["-y", "@kevinbermudezc/context-guard@latest", "context-guard-mcp"]
|
|
213
|
+
"args": ["-y", "-p", "@kevinbermudezc/context-guard@latest", "context-guard-mcp"]
|
|
205
214
|
}
|
|
206
215
|
}
|
|
207
216
|
}
|
|
@@ -211,22 +220,28 @@ node ./node_modules/@kevinbermudezc/context-guard/dist/bin/mcp-server.js
|
|
|
211
220
|
|
|
212
221
|
---
|
|
213
222
|
|
|
214
|
-
## π οΈ CLI
|
|
223
|
+
## π οΈ CLI & FinOps Telemetry (v1.3.0)
|
|
215
224
|
|
|
216
|
-
|
|
225
|
+
ContextGuard includes a beautiful developer CLI with built-in token savings and financial ROI telemetry:
|
|
217
226
|
|
|
218
227
|
```bash
|
|
219
|
-
# View file through ContextGuard (
|
|
228
|
+
# View file through ContextGuard (shows FinOps savings card if shunted)
|
|
220
229
|
npx @kevinbermudezc/context-guard src/large-service.ts
|
|
221
230
|
|
|
231
|
+
# Inspect token savings across your machine
|
|
232
|
+
npx @kevinbermudezc/context-guard stats
|
|
233
|
+
|
|
234
|
+
# Audit an entire codebase or folder (scans files > 300 lines)
|
|
235
|
+
npx @kevinbermudezc/context-guard stats src/
|
|
236
|
+
|
|
237
|
+
# Real-time interactive telemetry monitor (updates live during Claude/Cursor sessions)
|
|
238
|
+
npx @kevinbermudezc/context-guard stats --watch
|
|
239
|
+
|
|
222
240
|
# Ask a semantic question to the worker model
|
|
223
|
-
npx @kevinbermudezc/context-guard logs/server.log --query "Find all 500 status
|
|
241
|
+
npx @kevinbermudezc/context-guard logs/server.log --query "Find all 500 status timeouts"
|
|
224
242
|
|
|
225
243
|
# Specific line range (bypasses guard / passthrough)
|
|
226
244
|
npx @kevinbermudezc/context-guard src/large-service.ts --start 120 --end 160
|
|
227
|
-
|
|
228
|
-
# Output structured JSON
|
|
229
|
-
npx @kevinbermudezc/context-guard src/large-service.ts --json
|
|
230
245
|
```
|
|
231
246
|
|
|
232
247
|
---
|
package/dist/bin/claude-hook.js
CHANGED
|
@@ -11,6 +11,7 @@ import path from 'node:path';
|
|
|
11
11
|
import { CONFIG } from '../src/config.js';
|
|
12
12
|
import { extractCodeSkeleton } from '../src/skeletonizer.js';
|
|
13
13
|
import { classifyFile } from '../src/file-classifier.js';
|
|
14
|
+
import { calculateFinOps, recordMetricEvent } from '../src/token-metrics.js';
|
|
14
15
|
async function runHook() {
|
|
15
16
|
const inputChunks = [];
|
|
16
17
|
for await (const chunk of process.stdin) {
|
|
@@ -100,9 +101,20 @@ async function runHook() {
|
|
|
100
101
|
// ========================================================================
|
|
101
102
|
const skeleton = extractCodeSkeleton(rawContent, ext);
|
|
102
103
|
const preview = skeleton || lines.slice(0, 40).join('\n') + `\n... [${totalLines - 40} lines truncated by ContextGuard]`;
|
|
104
|
+
const finOps = calculateFinOps(rawContent, preview);
|
|
105
|
+
recordMetricEvent({
|
|
106
|
+
source: 'hook',
|
|
107
|
+
filePath: path.relative(process.cwd(), resolvedPath),
|
|
108
|
+
action: 'SHUNTED_LOCAL_AST',
|
|
109
|
+
rawTokens: finOps.rawTokens,
|
|
110
|
+
guardedTokens: finOps.guardedTokens,
|
|
111
|
+
tokensSaved: finOps.tokensSaved,
|
|
112
|
+
dollarsSavedSonnet: finOps.dollarsSaved.claudeSonnet
|
|
113
|
+
});
|
|
103
114
|
const feedbackMessage = [
|
|
104
115
|
`π‘οΈ [CONTEXTGUARD: LECTURA REGULADA - PREVENCIΓN DE SATURACIΓN DE TOKENS]`,
|
|
105
116
|
`El recurso "${path.basename(resolvedPath)}" contiene ${totalLines} lΓneas (~${(stat.size / 1024).toFixed(1)} KB).`,
|
|
117
|
+
`π Tokens prevenidos: ~${finOps.tokensSaved.toLocaleString()} tokens (${finOps.percentageSaved}% ahorro | ~$${finOps.dollarsSaved.claudeSonnet} USD en Sonnet).`,
|
|
106
118
|
`Para optimizar tu contexto y prevenir degradaciΓ³n de razonamiento, no se ha cargado el archivo completo en la ventana principal.`,
|
|
107
119
|
``,
|
|
108
120
|
`π ESQUELETO ESTRUCTURAL Y FIRMAS (Con Γndices de lΓnea):`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-hook.js","sourceRoot":"","sources":["../../bin/claude-hook.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"claude-hook.js","sourceRoot":"","sources":["../../bin/claude-hook.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,272 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import path from 'node:path';
|
|
3
|
+
import fs from 'node:fs';
|
|
3
4
|
import { processWithContextGuard } from '../src/index.js';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { extractCodeSkeleton } from '../src/skeletonizer.js';
|
|
6
|
+
import { getAggregatedStats, resetMetrics, calculateFinOps } from '../src/token-metrics.js';
|
|
7
|
+
// βββ ANSI Colors & Terminal Formatting (Zero-Dependencies) ββββββββββββββββββββ
|
|
8
|
+
const c = {
|
|
9
|
+
reset: '\x1b[0m',
|
|
10
|
+
bold: '\x1b[1m',
|
|
11
|
+
dim: '\x1b[2m',
|
|
12
|
+
italic: '\x1b[3m',
|
|
13
|
+
underline: '\x1b[4m',
|
|
14
|
+
// Colors
|
|
15
|
+
red: '\x1b[31m',
|
|
16
|
+
green: '\x1b[32m',
|
|
17
|
+
yellow: '\x1b[33m',
|
|
18
|
+
blue: '\x1b[34m',
|
|
19
|
+
magenta: '\x1b[35m',
|
|
20
|
+
cyan: '\x1b[36m',
|
|
21
|
+
white: '\x1b[37m',
|
|
22
|
+
gray: '\x1b[90m',
|
|
23
|
+
// Backgrounds
|
|
24
|
+
bgBlue: '\x1b[44m',
|
|
25
|
+
bgGreen: '\x1b[42m',
|
|
26
|
+
bgRed: '\x1b[41m'
|
|
27
|
+
};
|
|
28
|
+
const VERSION = '1.3.0';
|
|
29
|
+
// βββ Help Menu ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
30
|
+
function printHelp() {
|
|
31
|
+
console.log(`
|
|
32
|
+
${c.cyan}π‘οΈ ${c.bold}ContextGuard CLI${c.reset} ${c.gray}v${VERSION}${c.reset}
|
|
33
|
+
${c.dim}Intelligent Context Admission Control & FinOps Optimization${c.reset}
|
|
34
|
+
|
|
35
|
+
${c.bold}USAGE${c.reset}
|
|
36
|
+
${c.green}$ context-guard${c.reset} <file-path> [options]
|
|
37
|
+
${c.green}$ context-guard stats${c.reset} [path] [options]
|
|
38
|
+
|
|
39
|
+
${c.bold}COMMANDS${c.reset}
|
|
40
|
+
${c.cyan}stats${c.reset} [dir] ${c.white}Muestra la telemetrΓa acumulada o audita un directorio${c.reset}
|
|
41
|
+
${c.cyan}stats --watch${c.reset} ${c.white}Monitor interactivo de consumo y ahorro en tiempo real${c.reset}
|
|
42
|
+
${c.cyan}stats --reset${c.reset} ${c.white}Reinicia el historial de mΓ©tricas locales${c.reset}
|
|
43
|
+
|
|
44
|
+
${c.bold}OPTIONS${c.reset}
|
|
45
|
+
${c.yellow}-q, --query <text>${c.reset} Filtro semΓ‘ntico para el modelo worker (Gemini/Ollama)
|
|
46
|
+
${c.yellow}--start <num>${c.reset} LΓnea inicial (1-indexed slice passthrough)
|
|
47
|
+
${c.yellow}--end <num>${c.reset} LΓnea final (1-indexed slice passthrough)
|
|
48
|
+
${c.yellow}--force-worker${c.reset} Fuerza el procesamiento mediante el modelo worker
|
|
49
|
+
${c.yellow}--json${c.reset} Salida estructurada en JSON puro
|
|
50
|
+
${c.yellow}-v, --version${c.reset} Muestra la versiΓ³n de ContextGuard
|
|
51
|
+
${c.yellow}-h, --help${c.reset} Muestra este menΓΊ de ayuda
|
|
52
|
+
|
|
53
|
+
${c.bold}EXAMPLES${c.reset}
|
|
54
|
+
${c.dim}# Inspecciona un archivo con protecciΓ³n automΓ‘tica (>300 lΓneas)${c.reset}
|
|
55
|
+
${c.cyan}context-guard${c.reset} src/large-service.ts
|
|
56
|
+
|
|
57
|
+
${c.dim}# Lee un rango acotado sin aplicar el guard${c.reset}
|
|
58
|
+
${c.cyan}context-guard${c.reset} src/large-service.ts --start 120 --end 160
|
|
59
|
+
|
|
60
|
+
${c.dim}# Consulta el ahorro histΓ³rico de tokens y dinero${c.reset}
|
|
61
|
+
${c.cyan}context-guard stats${c.reset}
|
|
62
|
+
|
|
63
|
+
${c.dim}# Audita el potencial de ahorro de un directorio completo${c.reset}
|
|
64
|
+
${c.cyan}context-guard stats${c.reset} src/
|
|
65
|
+
|
|
66
|
+
${c.dim}# Monitor en tiempo real mientras usas Claude Code o Cursor${c.reset}
|
|
67
|
+
${c.cyan}context-guard stats --watch${c.reset}
|
|
68
|
+
`);
|
|
69
|
+
}
|
|
70
|
+
// βββ Directory Auditor (Option B) βββββββββββββββββββββββββββββββββββββββββββββ
|
|
71
|
+
function auditDirectory(targetDir) {
|
|
72
|
+
const resolved = path.resolve(process.cwd(), targetDir);
|
|
73
|
+
if (!fs.existsSync(resolved)) {
|
|
74
|
+
console.error(`${c.red}β Error:${c.reset} El directorio no existe: ${targetDir}`);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
const IGNORED = new Set(['node_modules', '.git', 'dist', 'build', '.next', '.turbo', 'coverage']);
|
|
78
|
+
const filesToAudit = [];
|
|
79
|
+
function walk(current) {
|
|
80
|
+
let entries = [];
|
|
81
|
+
try {
|
|
82
|
+
entries = fs.readdirSync(current, { withFileTypes: true });
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
for (const ent of entries) {
|
|
88
|
+
if (ent.isDirectory()) {
|
|
89
|
+
if (!IGNORED.has(ent.name) && !ent.name.startsWith('.')) {
|
|
90
|
+
walk(path.join(current, ent.name));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else if (ent.isFile()) {
|
|
94
|
+
const ext = path.extname(ent.name).toLowerCase();
|
|
95
|
+
if (['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs', '.java', '.cs', '.svelte', '.vue', '.astro'].includes(ext)) {
|
|
96
|
+
filesToAudit.push(path.join(current, ent.name));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
walk(resolved);
|
|
102
|
+
let totalRawTokens = 0;
|
|
103
|
+
let totalGuardedTokens = 0;
|
|
104
|
+
let largeFilesCount = 0;
|
|
105
|
+
for (const f of filesToAudit) {
|
|
106
|
+
try {
|
|
107
|
+
const content = fs.readFileSync(f, 'utf-8');
|
|
108
|
+
const lines = content.split('\n').length;
|
|
109
|
+
if (lines > 300) {
|
|
110
|
+
largeFilesCount++;
|
|
111
|
+
const ext = path.extname(f);
|
|
112
|
+
const skeleton = extractCodeSkeleton(content, ext) || '';
|
|
113
|
+
const fin = calculateFinOps(content, skeleton);
|
|
114
|
+
totalRawTokens += fin.rawTokens;
|
|
115
|
+
totalGuardedTokens += fin.guardedTokens;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch { }
|
|
119
|
+
}
|
|
120
|
+
const tokensSaved = Math.max(0, totalRawTokens - totalGuardedTokens);
|
|
121
|
+
const pctSaved = totalRawTokens > 0 ? ((tokensSaved / totalRawTokens) * 100).toFixed(1) : '0';
|
|
122
|
+
const opusDollars = ((tokensSaved / 1_000_000) * 15.00).toFixed(2);
|
|
123
|
+
const sonnetDollars = ((tokensSaved / 1_000_000) * 3.00).toFixed(2);
|
|
124
|
+
console.log(`
|
|
125
|
+
${c.cyan}π ${c.bold}AuditorΓa de CΓ³digo y FinOps: ${c.white}${path.relative(process.cwd(), resolved) || '.'}${c.reset}
|
|
126
|
+
${c.gray}Analizados ${filesToAudit.length} archivos fuente (${largeFilesCount} archivos superan las 300 lΓneas)${c.reset}
|
|
127
|
+
|
|
128
|
+
${c.bold}βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ${c.reset}
|
|
129
|
+
β ${c.yellow}Escenario de Lectura Cruda:${c.reset} ~${totalRawTokens.toLocaleString().padStart(8)} tokens β
|
|
130
|
+
β ${c.green}Con ContextGuard (AST):${c.reset} ~${totalGuardedTokens.toLocaleString().padStart(8)} tokens β
|
|
131
|
+
β β
|
|
132
|
+
β ${c.bold}${c.green}π Ahorro potencial:${c.reset} ${c.bold}~${tokensSaved.toLocaleString()}${c.reset} tokens (${c.bold}${pctSaved}%${c.reset} reducciΓ³n) β
|
|
133
|
+
β β
|
|
134
|
+
β ${c.bold}π° EstimaciΓ³n de Ahorro en DΓ³lares:${c.reset} β
|
|
135
|
+
β β’ Claude Opus 4/5: ${c.green}$${opusDollars} USD${c.reset} β
|
|
136
|
+
β β’ Claude Sonnet 4: ${c.green}$${sonnetDollars} USD${c.reset} β
|
|
137
|
+
${c.bold}βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ${c.reset}
|
|
138
|
+
`);
|
|
139
|
+
}
|
|
140
|
+
// βββ Real-Time Live Watcher (Real-time telemetry) βββββββββββββββββββββββββββββ
|
|
141
|
+
function runRealtimeWatch() {
|
|
142
|
+
// Clear screen
|
|
143
|
+
process.stdout.write('\x1b[2J\x1b[0;0H');
|
|
144
|
+
const render = () => {
|
|
145
|
+
process.stdout.write('\x1b[0;0H'); // cursor to home
|
|
146
|
+
const stats = getAggregatedStats();
|
|
147
|
+
const time = new Date().toLocaleTimeString();
|
|
7
148
|
console.log(`
|
|
8
|
-
ContextGuard
|
|
9
|
-
|
|
149
|
+
${c.cyan}π‘οΈ ${c.bold}ContextGuard Live Telemetry Monitor${c.reset} ${c.gray}[${time}]${c.reset}
|
|
150
|
+
${c.dim}Escuchando intercepciones activas de Claude Code, Cursor y MCP...${c.reset}
|
|
151
|
+
|
|
152
|
+
${c.bold}βββ π MΓ©tricas Globales Acumuladas ββββββββββββββββββββββββββββββ${c.reset}
|
|
153
|
+
β Archivos Regulados: ${c.bold}${c.cyan}${stats.totalInterceptions.toString().padEnd(10)}${c.reset} β
|
|
154
|
+
β Tokens Crudos Evitados: ${c.bold}${c.yellow}${stats.totalRawTokens.toLocaleString().padEnd(12)}${c.reset} β
|
|
155
|
+
β Tokens AST Inyectados: ${c.bold}${c.white}${stats.totalGuardedTokens.toLocaleString().padEnd(12)}${c.reset} β
|
|
156
|
+
β ${c.green}${c.bold}Tokens Netos Ahorrados:${c.reset} ${c.bold}${c.green}${stats.totalTokensSaved.toLocaleString().padEnd(12)}${c.reset} β
|
|
157
|
+
β β
|
|
158
|
+
β ${c.bold}π° Retorno de InversiΓ³n (ROI Estimado):${c.reset} β
|
|
159
|
+
β β’ Claude Opus 4/5: ${c.bold}${c.green}$${stats.totalDollarsSavedOpus.toFixed(2)} USD${c.reset} β
|
|
160
|
+
β β’ Claude Sonnet 4: ${c.bold}${c.green}$${stats.totalDollarsSavedSonnet.toFixed(2)} USD${c.reset} β
|
|
161
|
+
β β’ GPT-4o / Astra: ${c.bold}${c.green}$${stats.totalDollarsSavedGpt4o.toFixed(2)} USD${c.reset} β
|
|
162
|
+
${c.bold}βββ π Γltimos Eventos Registrados ββββββββββββββββββββββββββββββββ${c.reset}
|
|
163
|
+
`);
|
|
164
|
+
const recent = stats.events.slice(-6).reverse();
|
|
165
|
+
if (recent.length === 0) {
|
|
166
|
+
console.log(` ${c.dim}AΓΊn no hay eventos registrados. Usa Claude Code o el CLI para ver trΓ‘fico.${c.reset}\n`);
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
for (const ev of recent) {
|
|
170
|
+
const badge = ev.source === 'hook' ? `${c.magenta}[HOOK]${c.reset}` : `${c.blue}[CLI]${c.reset} `;
|
|
171
|
+
const fName = ev.filePath.length > 28 ? '...' + ev.filePath.slice(-25) : ev.filePath.padEnd(28);
|
|
172
|
+
console.log(` ${c.dim}${ev.timestamp.slice(11, 19)}${c.reset} ${badge} ${c.white}${fName}${c.reset} π ${c.green}+${ev.tokensSaved.toLocaleString()} tokens${c.reset} ${c.gray}(~$${ev.dollarsSavedSonnet})${c.reset}`);
|
|
173
|
+
}
|
|
174
|
+
console.log('');
|
|
175
|
+
}
|
|
176
|
+
console.log(` ${c.gray}Presiona Ctrl+C para salir.${c.reset}`);
|
|
177
|
+
};
|
|
178
|
+
render();
|
|
179
|
+
const interval = setInterval(render, 1000);
|
|
180
|
+
process.on('SIGINT', () => {
|
|
181
|
+
clearInterval(interval);
|
|
182
|
+
console.log(`\n ${c.green}β Monitor finalizado.${c.reset}\n`);
|
|
183
|
+
process.exit(0);
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
// βββ Stats Reporter βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
187
|
+
function printStats(args) {
|
|
188
|
+
if (args.includes('--reset')) {
|
|
189
|
+
resetMetrics();
|
|
190
|
+
console.log(`\n ${c.green}β Historial de mΓ©tricas reiniciado con Γ©xito.${c.reset}\n`);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (args.includes('--watch') || args.includes('-w')) {
|
|
194
|
+
runRealtimeWatch();
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
// Check if a directory path was provided
|
|
198
|
+
const targetPath = args.find(a => !a.startsWith('-') && a !== 'stats');
|
|
199
|
+
if (targetPath && fs.existsSync(targetPath) && fs.statSync(targetPath).isDirectory()) {
|
|
200
|
+
auditDirectory(targetPath);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const stats = getAggregatedStats();
|
|
204
|
+
if (args.includes('--json')) {
|
|
205
|
+
console.log(JSON.stringify(stats, null, 2));
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
console.log(`
|
|
209
|
+
${c.cyan}π‘οΈ ${c.bold}ContextGuard β Resumen FinOps & TelemetrΓa${c.reset}
|
|
210
|
+
${c.gray}MΓ©tricas calculadas en base a intercepciones en tu mΓ‘quina${c.reset}
|
|
10
211
|
|
|
11
|
-
|
|
12
|
-
|
|
212
|
+
${c.bold}βββ π Balance de Tokens ββββββββββββββββββββββββββββββββββββββββββ${c.reset}
|
|
213
|
+
β Intercepciones totales: ${c.bold}${c.cyan}${stats.totalInterceptions.toString().padEnd(10)}${c.reset} β
|
|
214
|
+
β Tokens crudos solicitados: ${c.bold}${c.yellow}${stats.totalRawTokens.toLocaleString().padEnd(12)}${c.reset} β
|
|
215
|
+
β Tokens procesados (AST): ${c.bold}${c.white}${stats.totalGuardedTokens.toLocaleString().padEnd(12)}${c.reset} β
|
|
216
|
+
β ${c.green}${c.bold}Tokens netos ahorrados:${c.reset} ${c.bold}${c.green}${stats.totalTokensSaved.toLocaleString().padEnd(12)}${c.reset} β
|
|
217
|
+
β β
|
|
218
|
+
β ${c.bold}π° Ahorro Estimado en DΓ³lares:${c.reset} β
|
|
219
|
+
β β’ Claude Opus 4/5: ${c.bold}${c.green}$${stats.totalDollarsSavedOpus.toFixed(2)} USD${c.reset} β
|
|
220
|
+
β β’ Claude Sonnet 4: ${c.bold}${c.green}$${stats.totalDollarsSavedSonnet.toFixed(2)} USD${c.reset} β
|
|
221
|
+
β β’ GPT-4o / Astra: ${c.bold}${c.green}$${stats.totalDollarsSavedGpt4o.toFixed(2)} USD${c.reset} β
|
|
222
|
+
${c.bold}βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ${c.reset}
|
|
13
223
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
224
|
+
${c.dim}π Corre "context-guard stats --watch" para ver el flujo en tiempo real.${c.reset}
|
|
225
|
+
${c.dim}π Corre "context-guard stats <directorio>" para auditar un proyecto.${c.reset}
|
|
226
|
+
`);
|
|
227
|
+
}
|
|
228
|
+
// βββ Single File Execution Card βββββββββββββββββββββββββββββββββββββββββββββββ
|
|
229
|
+
function printExecutionCard(filePath, result) {
|
|
230
|
+
const statusColor = {
|
|
231
|
+
PASSTHROUGH_FULL: `${c.green}β
PASSTHROUGH (Directo)${c.reset}`,
|
|
232
|
+
PASSTHROUGH_SLICE: `${c.green}β
SLICE (Rango acotado)${c.reset}`,
|
|
233
|
+
SHUNTED_LOCAL_AST: `${c.cyan}π‘οΈ SHUNTED (Esqueleto AST Tier 0)${c.reset}`,
|
|
234
|
+
SHUNTED_WORKER_MODEL: `${c.magenta}π€ WORKER (Resumen ligero)${c.reset}`,
|
|
235
|
+
BLOCKED_BINARY: `${c.red}π BLOCKED (Archivo Binario)${c.reset}`,
|
|
236
|
+
BLOCKED_LOCKFILE: `${c.red}π BLOCKED (Lockfile masivo)${c.reset}`,
|
|
237
|
+
BLOCKED_MINIFIED: `${c.red}π BLOCKED (CΓ³digo Minificado)${c.reset}`,
|
|
238
|
+
ERROR: `${c.red}β ERROR${c.reset}`
|
|
239
|
+
};
|
|
240
|
+
const badge = statusColor[result.status] || result.status;
|
|
241
|
+
const fileName = path.basename(filePath);
|
|
242
|
+
const m = result.metrics;
|
|
243
|
+
console.log(`
|
|
244
|
+
${c.bold}βββ π‘οΈ ContextGuard βββββββββββββββββββββββββββββββββββββββββββββββ${c.reset}
|
|
245
|
+
β ${c.bold}Archivo:${c.reset} ${c.white}${fileName.padEnd(46)}${c.reset}β
|
|
246
|
+
β ${c.bold}Estado:${c.reset} ${badge.padEnd(55)}β
|
|
247
|
+
β ${c.bold}LΓneas:${c.reset} ${(result.totalLines ? `${result.totalLines} lΓneas (~${((result.sizeBytes || 0) / 1024).toFixed(1)} KB)` : 'N/A').padEnd(46)}β`);
|
|
248
|
+
if (m && m.tokensSaved > 0) {
|
|
249
|
+
console.log(` β ${c.bold}Ahorro:${c.reset} ${c.green}${c.bold}-${m.tokensSaved.toLocaleString()} tokens (-${m.percentageSaved}%)${c.reset} ${c.gray}(~$${m.dollarsSaved.claudeSonnet} en Sonnet)${c.reset} β`);
|
|
250
|
+
}
|
|
251
|
+
console.log(` ${c.bold}βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ${c.reset}
|
|
252
|
+
`);
|
|
253
|
+
}
|
|
254
|
+
// βββ CLI Entrypoint βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
255
|
+
async function runCli() {
|
|
256
|
+
const args = process.argv.slice(2);
|
|
257
|
+
if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
|
|
258
|
+
printHelp();
|
|
22
259
|
process.exit(0);
|
|
23
260
|
}
|
|
261
|
+
if (args.includes('-v') || args.includes('--version')) {
|
|
262
|
+
console.log(`ContextGuard v${VERSION}`);
|
|
263
|
+
process.exit(0);
|
|
264
|
+
}
|
|
265
|
+
// Subcommand: stats
|
|
266
|
+
if (args[0] === 'stats') {
|
|
267
|
+
printStats(args);
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
24
270
|
const filePath = path.resolve(args[0]);
|
|
25
271
|
let query = '';
|
|
26
272
|
let startLine;
|
|
@@ -51,9 +297,10 @@ Options:
|
|
|
51
297
|
}
|
|
52
298
|
else {
|
|
53
299
|
if (result.error) {
|
|
54
|
-
console.error(
|
|
300
|
+
console.error(`${c.red}β [ContextGuard Error]${c.reset} ${result.error}`);
|
|
55
301
|
process.exit(1);
|
|
56
302
|
}
|
|
303
|
+
printExecutionCard(filePath, result);
|
|
57
304
|
console.log(result.content);
|
|
58
305
|
}
|
|
59
306
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-guard.js","sourceRoot":"","sources":["../../bin/context-guard.ts"],"names":[],"mappings":";AAEA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,KAAK,UAAU,MAAM;IACnB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;KAcX,CAAC,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,SAA6B,CAAC;IAClC,IAAI,OAA2B,CAAC;IAChC,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO;YAAE,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,gBAAgB;YAAE,WAAW,GAAG,IAAI,CAAC;QACrD,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;YAAE,UAAU,GAAG,IAAI,CAAC;IAC9C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;QAC3C,QAAQ;QACR,KAAK;QACL,SAAS;QACT,OAAO;QACP,WAAW;KACZ,CAAC,CAAC;IAEH,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"context-guard.js","sourceRoot":"","sources":["../../bin/context-guard.ts"],"names":[],"mappings":"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"}
|