@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 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