@node9/proxy 1.10.3 → 1.11.1
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 +57 -0
- package/dist/cli.js +1447 -474
- package/dist/cli.mjs +1443 -470
- package/dist/index.js +106 -38
- package/dist/index.mjs +106 -38
- package/dist/shields/builtin/bash-safe.json +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -102,6 +102,10 @@ node9 mcp pin reset # clear all pins (re-pin on next connection)
|
|
|
102
102
|
|
|
103
103
|
This is automatic — no configuration needed. The gateway pins on first `tools/list` and enforces on every subsequent session.
|
|
104
104
|
|
|
105
|
+
### Skills Pinning — installed-plugin drift detection
|
|
106
|
+
|
|
107
|
+
Marketplace plugins at `~/.claude/plugins/marketplaces/` come from registries, not your workspace — `git status` never sees them. Each installed plugin gets its own pin (same model as MCP server pinning): installing a new plugin creates a new pin silently; only changes to an already-pinned plugin trigger drift. Opt-in via `policy.skillPinning.enabled: true`; use `mode: 'block'` for strict enforcement. User-edited files are **not** in default scope. Extend via `policy.skillPinning.roots`.
|
|
108
|
+
|
|
105
109
|
---
|
|
106
110
|
|
|
107
111
|
## Python SDK — govern any Python agent
|
|
@@ -124,7 +128,9 @@ configure(agent_name="my-agent", policy="require_approval")
|
|
|
124
128
|
- **SQL:** blocks `DELETE`/`UPDATE` without `WHERE`, `DROP TABLE`, `TRUNCATE`
|
|
125
129
|
- **Shell:** blocks `curl | bash`, `sudo` commands
|
|
126
130
|
- **DLP:** blocks AWS keys, GitHub tokens, Stripe keys, PEM private keys in any tool call argument
|
|
131
|
+
- **Response DLP:** background scanner reads Claude's JSONL history hourly and alerts you if a secret appears in Claude's _response text_ (not just tool args) — see [`node9 dlp`](#node9-dlp--response-secret-scanner)
|
|
127
132
|
- **Auto-undo:** git snapshot before every AI file edit → `node9 undo` to revert
|
|
133
|
+
- **Skills Pinning:** SHA-256 verification of agent skill files between sessions; quarantines on drift (AST 02 + AST 07 — supply chain & update drift)
|
|
128
134
|
|
|
129
135
|
---
|
|
130
136
|
|
|
@@ -161,6 +167,14 @@ node9 tail --all # include all projects
|
|
|
161
167
|
|
|
162
168
|
Each line shows the tool name, a summary of its arguments, and the decision (allowed / blocked / DLP hit).
|
|
163
169
|
|
|
170
|
+
At startup, `tail` prints a one-line context summary:
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
ctx: 34% (68k/200k out 2k · claude-sonnet-4-6)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
This shows how full the context window is, how many output tokens were generated, and which model is running. Color-coded: cyan < 50%, yellow 50–79%, red ≥ 80%.
|
|
177
|
+
|
|
164
178
|
### `node9 report` — security dashboard
|
|
165
179
|
|
|
166
180
|
Run after a session to get a summary of what was allowed, blocked, DLP hits, cost, and daily activity:
|
|
@@ -188,8 +202,12 @@ $ node9 report --period 7d
|
|
|
188
202
|
Apr 11 ██████████████████████░░░░░░░░ 617 139 blocked
|
|
189
203
|
```
|
|
190
204
|
|
|
205
|
+
The report also includes a **Tokens** section showing a breakdown of input, output, cache-write, and cache-read tokens with a cache hit-rate percentage — useful for spotting sessions that are burning tokens without getting cache savings.
|
|
206
|
+
|
|
191
207
|
Periods: `today`, `7d` (default), `30d`, `month`. Cost data is read from `~/.claude/projects/` — no API calls, fully offline.
|
|
192
208
|
|
|
209
|
+
If the response DLP scanner found secrets during the period, the report shows a `⚠️ DLP ALERT` banner at the top and a dedicated **Response DLP** section listing each finding with the pattern name, a masked sample, and the project it came from.
|
|
210
|
+
|
|
193
211
|
### `node9 sessions` — session history
|
|
194
212
|
|
|
195
213
|
See what your AI agent did across sessions — prompt, tool calls, cost, files modified, and whether a snapshot was taken. Useful when you hand off a task and come back to review what happened:
|
|
@@ -276,6 +294,45 @@ node9 scan --all # all time
|
|
|
276
294
|
node9 scan --days 30 # custom window
|
|
277
295
|
```
|
|
278
296
|
|
|
297
|
+
### `node9 dlp` — response secret scanner
|
|
298
|
+
|
|
299
|
+
Node9's tool-call DLP blocks secrets _before_ they leave your machine. But Claude can also write secrets into its **response text** — a curl example with a real token, a config snippet with a live key — and that text bypasses tool-call interception entirely.
|
|
300
|
+
|
|
301
|
+
The **response DLP scanner** runs as a background daemon. It reads Claude's JSONL conversation history incrementally (delta scan — only new bytes since the last check), looks for secret patterns in assistant response text, and fires a desktop notification the moment it finds one.
|
|
302
|
+
|
|
303
|
+
```
|
|
304
|
+
⚠️ node9 DLP alert
|
|
305
|
+
AWS Access Key found in Claude response text.
|
|
306
|
+
Sample: AKIA****MPLE — run: node9 dlp
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
node9 dlp # show all open findings with pattern, sample, project, date
|
|
311
|
+
node9 dlp resolve # acknowledge all current findings (clears the banner)
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
The `node9 dlp` command shows a guided remediation workflow:
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
🔐 node9 dlp — secrets found in Claude response text
|
|
318
|
+
|
|
319
|
+
⚠️ 1 open finding
|
|
320
|
+
|
|
321
|
+
These secrets were included in Claude's response text — NOT blocked.
|
|
322
|
+
Rotate each affected key immediately.
|
|
323
|
+
|
|
324
|
+
● AWS Access Key ID Apr 14, 2026
|
|
325
|
+
Sample: AKIA****MPLE
|
|
326
|
+
Project: ~/node9
|
|
327
|
+
|
|
328
|
+
Next steps:
|
|
329
|
+
1. Rotate any exposed keys shown above
|
|
330
|
+
2. Run node9 dlp resolve to acknowledge
|
|
331
|
+
3. Run node9 report for full audit history
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
Findings are never re-shown after `node9 dlp resolve`. The scanner stores resolved keys in `~/.node9/dlp-resolved.json` so only genuinely new secrets surface.
|
|
335
|
+
|
|
279
336
|
---
|
|
280
337
|
|
|
281
338
|
## 📖 Full docs
|