@askalf/dario 4.6.3 → 4.6.5

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
@@ -17,7 +17,7 @@
17
17
 
18
18
  ---
19
19
 
20
- **Anthropic ships restrictions to subscribers through wire-shape changes that don't appear in any user-facing changelog. dario makes them visible.** The hourly drift watcher catches each silent change, the public PR record names what shifted and when, and the proxy keeps your subscription doing what it did yesterday until you choose otherwise. Receipts below.
20
+ **Anthropic ships restrictions to subscribers through wire-shape changes that don't appear in any user-facing changelog. dario makes them visible.** A three-class drift watcher catches each silent change — new CC binaries, in-version remote-config changes, and classifier-rule shifts — auto-opens a fix PR with a unified diff inline, and the public record names what shifted and when. The proxy keeps your subscription doing what it did yesterday until you choose otherwise. Receipts below.
21
21
 
22
22
  You're already paying $20, $100, or $200 a month for Claude. Then Cursor wants an API key. Aider wants an API key. Cline, Continue, Zed, your scripts — every one of them bills you **again**, per token, while the subscription you already bought sits idle in Claude Code.
23
23
 
@@ -149,11 +149,13 @@ The 2026-06-15 split is announced. The wire-shape changes that arrive between re
149
149
 
150
150
  **Then it got worse.** v4.2.1 (2026-05-17) shipped receipts for a more aggressive class: **same CC binary, different wire output 24 hours apart.** Same `claude.exe` on disk that produced template A yesterday produces template B today — three slot diffs in one 24h window (`output_config.effort` default flipped `medium` → `high` → `xhigh`, `context-1m-2025-08-07` beta back in the header set, system_prompt -354 chars), zero changelog entries from Anthropic, no npm version bump anywhere. Anthropic ships wire-shape changes through CC's **remote configuration**, not just through CC npm releases.
151
151
 
152
- **Two classes of drift, two watchers, both auto-detecting.**
152
+ **Three classes of drift, three watchers, all auto-detecting and auto-PR'ing.**
153
153
 
154
- - **Class A — npm-release drift.** [`cc-drift-watch.yml`](./.github/workflows/cc-drift-watch.yml) (cron `0 * * * *`) catches each new CC release on github-hosted runners. [`cc-drift-auto-release.yml`](./.github/workflows/cc-drift-auto-release.yml) merges and ships within minutes.
155
- - **Class B — same-binary remote-config drift** *(new in v4.2.2)*. [`cc-drift-template-watch.yml`](./.github/workflows/cc-drift-template-watch.yml) (cron `*/30 * * * *`) runs on a self-hosted runner with a real authenticated CC install, captures live every 30 min, and opens an issue the moment the bundled template stops matching what CC is currently sending. This is the only way to catch the class — github-hosted has no Pro/Max subscription session, no OAuth credential, no way to capture from real CC. Setup: [`docs/drift-monitor.md`](./docs/drift-monitor.md).
156
- - **PR-time compat gate** *(new in v4.3.0)*. [`compat-test-self-hosted.yml`](./.github/workflows/compat-test-self-hosted.yml) runs `test/compat.mjs` against a live `dario proxy --passthrough` on the same runner wire-shape regressions fail the merge check **before** they ship.
154
+ - **Class A — npm-release drift.** [`cc-drift-watch.yml`](./.github/workflows/cc-drift-watch.yml) (cron `0 * * * *`) catches each new CC npm release on a github-hosted runner. [`cc-drift-auto-release.yml`](./.github/workflows/cc-drift-auto-release.yml) merges and ships within minutes.
155
+ - **Class B — same-binary remote-config drift** *(v4.2.2)*. [`cc-drift-template-watch.yml`](./.github/workflows/cc-drift-template-watch.yml) (cron `*/30 * * * *`) runs on a self-hosted runner with an authenticated CC install, captures live every 30 min. On detection, **opens an auto-rebake PR** *(v4.4.0)* with the freshly-baked template and a unified-line diff inline *(v4.5.0)* — a reviewer sees ship-or-investigate in one screen. This is the only way to catch the class — github-hosted has no Pro/Max session, no OAuth credential, no way to capture from real CC. Setup: [`docs/drift-monitor.md`](./docs/drift-monitor.md).
156
+ - **Class C — classifier-rule drift** *(v4.6.0)*. [`cc-billing-classifier-canary.yml`](./.github/workflows/cc-billing-classifier-canary.yml) sends one live request through dario's canonical-rebuild mode daily, asserts the `representative-claim` response header still maps to a subscription bucket. Catches the orthogonal failure mode where CC's wire shape is unchanged but Anthropic's classifier rules shifted underneath.
157
+ - **PR-time compat gate** *(v4.3.0)*. [`compat-test-self-hosted.yml`](./.github/workflows/compat-test-self-hosted.yml) runs the full compat suite against a live `dario proxy` on every PR that touches the wire-shape surface — regressions fail the merge check **before** they ship.
158
+ - **Liveness alarm** *(v4.4.2)*. [`cc-drift-watcher-liveness.yml`](./.github/workflows/cc-drift-watcher-liveness.yml) runs on github-hosted infra every 2 hours, alerts if the self-hosted class-B watcher hasn't had a successful run in 3 hours. Watches the watcher; survives the exact failure modes it's designed to detect.
157
159
 
158
160
  **Anthropic doesn't publish a wire-level changelog for subscribers. dario is one.**
159
161
 
@@ -356,7 +358,7 @@ The tool doesn't know. The backend doesn't know. Dario is the seam.
356
358
  ## Capabilities
357
359
 
358
360
  - **Interactive TUI (v4).** `dario` with no args opens a full-screen control panel: live request stream, per-model burn-rate, rate-limit utilization bars, billing bucket breakdown, in-place config editor that writes to `~/.dario/config.json`. The visible interface that turns subscription accounting from "log files" into "watch it happen."
359
- - **Two-class drift detection.** [`cc-drift-watch.yml`](./.github/workflows/cc-drift-watch.yml) catches **Class A** (new CC npm releases) hourly on a github-hosted runner; auto-drafts + auto-merges a fix PR; median CC release → dario release under one hour. [`cc-drift-template-watch.yml`](./.github/workflows/cc-drift-template-watch.yml) *(new in v4.2.2)* catches **Class B** (same-binary remote-config drift — Anthropic changing wire output *without* bumping the npm version, first documented in [CHANGELOG v4.2.1](./CHANGELOG.md#421---2026-05-17)) every 30 min on a self-hosted runner with a real authenticated CC. [`compat-test-self-hosted.yml`](./.github/workflows/compat-test-self-hosted.yml) *(new in v4.3.0)* runs the full compat suite against a live proxy on every PR that touches the wire-shape surface regressions fail the merge check before they ship. Walkthrough: [`docs/drift-monitor.md`](./docs/drift-monitor.md).
361
+ - **Three-class drift detection.** [`cc-drift-watch.yml`](./.github/workflows/cc-drift-watch.yml) catches **Class A** (new CC npm releases) hourly on a github-hosted runner auto-drafts + auto-merges a fix PR; median CC release → dario release under one hour. [`cc-drift-template-watch.yml`](./.github/workflows/cc-drift-template-watch.yml) *(v4.2.2)* catches **Class B** (same-binary remote-config drift — Anthropic changing wire output *without* bumping the npm version, first documented in [CHANGELOG v4.2.1](./CHANGELOG.md#421---2026-05-17)) every 30 min on a self-hosted runner with authenticated CC, **opens an auto-rebake PR** *(v4.4.0)* with a unified-line diff inline *(v4.5.0)*. [`cc-billing-classifier-canary.yml`](./.github/workflows/cc-billing-classifier-canary.yml) *(v4.6.0)* catches **Class C** (Anthropic changing classifier rules — same wire shape, different billing bucket) via a daily 1-request canary. [`compat-test-self-hosted.yml`](./.github/workflows/compat-test-self-hosted.yml) *(v4.3.0)* runs the full compat suite against a live proxy on every PR that touches the wire-shape surface. [`cc-drift-watcher-liveness.yml`](./.github/workflows/cc-drift-watcher-liveness.yml) *(v4.4.2)* alarms if the class-B watcher itself goes offline. Walkthrough: [`docs/drift-monitor.md`](./docs/drift-monitor.md).
360
362
  - **Multi-account pool.** Drop 2+ Claude accounts in `~/.dario/accounts/` and pool mode auto-activates: every request routes to the account with the most headroom, multi-turn sessions pin to one account so the prompt cache survives, in-flight 429s fail over to a peer before your client sees an error. `dario accounts add work` / `dario accounts add personal`. → [`docs/multi-account-pool.md`](./docs/multi-account-pool.md)
361
363
  - **Behavioral stealth (`--stealth`).** Static wire fidelity covers *what* the request looks like; `--stealth` adds *when* it arrives — response-length-correlated think time and 1.2–4.2s session-start latency, the inter-arrival pattern real interactive sessions have and agent loops don't. → [`docs/wire-fidelity.md`](./docs/wire-fidelity.md)
362
364
  - **Runs any non-Claude-Code agent.** A 64-entry schema-verified `TOOL_MAP` pre-maps Cline, Roo, Kilo, Cursor, Windsurf, Continue, Copilot, OpenHands, OpenClaw, Hermes, [hands](https://github.com/askalf/hands) tool names to CC's native set. No flag, no validator errors. → [`docs/integrations/agent-compat.md`](./docs/integrations/agent-compat.md)
@@ -432,7 +434,7 @@ No. `five_hour` and `seven_day` are both subscription billing — different acco
432
434
  No — see [The deadline](#the-deadline-2026-06-15) above. dario rewrites every request to interactive-CC shape before it reaches `api.anthropic.com`; the classifier sees interactive CC, not `claude -p`/Agent SDK, regardless of the local tool.
433
435
 
434
436
  **What if Anthropic ships another silent change tomorrow?**
435
- The hourly drift watcher picks it up, auto-drafts a fix PR, and ships if CI passes. This week's v3.38.5 and v3.38.6 — both released within 13 minutes of each other, both same-day fixes for v2.1.142's silent drops are the receipts. The TUI's Hits tab shows you the request shape in real time, so you'll see drift the moment it happens on your machine.
437
+ The three-class drift watcher picks it up — npm-release changes hourly on a github-hosted runner, in-version remote-config changes every 30 min on a self-hosted runner with real CC, classifier-rule changes via a daily live canary. Class A auto-drafts + auto-merges; Class B auto-rebakes the bundled template and opens a PR with a unified diff inline; Class C opens a labeled alert with diagnosis hints. v3.38.5 + v3.38.6 (13 min apart, same-day fix for v2.1.142's silent drops) and v4.2.1's same-binary remote-config receipts are the prior art. The TUI's Hits tab shows you the request shape in real time, so you'll see drift the moment it happens on your machine.
436
438
 
437
439
  Full FAQ: [`docs/faq.md`](./docs/faq.md)
438
440
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "_version": "2.1.143",
3
- "_captured": "2026-05-17T14:50:17.362Z",
3
+ "_captured": "2026-05-17T23:47:07.021Z",
4
4
  "_source": "bundled",
5
5
  "_schemaVersion": 3,
6
6
  "agent_identity": "You are a Claude agent, built on Anthropic's Claude Agent SDK.",
@@ -55,7 +55,7 @@
55
55
  },
56
56
  {
57
57
  "name": "AskUserQuestion",
58
- "description": "Use this tool when you need to ask the user questions during execution. This allows you to:\n1. Gather user preferences or requirements\n2. Clarify ambiguous instructions\n3. Get decisions on implementation choices as you work\n4. Offer choices to the user about what direction to take.\n\nUsage notes:\n- Users will always be able to select \"Other\" to provide custom text input\n- Use multiSelect: true to allow multiple answers to be selected for a question\n- If you recommend a specific option, make that the first option in the list and add \"(Recommended)\" at the end of the label\n\nPlan mode note: In plan mode, use this tool to clarify requirements or choose between approaches BEFORE finalizing your plan. Do NOT use this tool to ask \"Is my plan ready?\" or \"Should I proceed?\" - use ExitPlanMode for plan approval. IMPORTANT: Do not reference \"the plan\" in your questions (e.g., \"Do you have feedback about the plan?\", \"Does the plan look good?\") because the user cannot see the plan in the UI until you call ExitPlanMode. If you need plan approval, use ExitPlanMode instead.\n",
58
+ "description": "Use this tool when you need to ask the user questions during execution. This allows you to:\n1. Gather user preferences or requirements\n2. Clarify ambiguous instructions\n3. Get decisions on implementation choices as you work\n4. Offer choices to the user about what direction to take.\n\nUsage notes:\n- Users will always be able to select \"Other\" to provide custom text input\n- Use multiSelect: true to allow multiple answers to be selected for a question\n- If you recommend a specific option, make that the first option in the list and add \"(Recommended)\" at the end of the label\n\nPlan mode note: In plan mode, use this tool to clarify requirements or choose between approaches BEFORE finalizing your plan. Do NOT use this tool to ask \"Is my plan ready?\" or \"Should I proceed?\" - use ExitPlanMode for plan approval. IMPORTANT: Do not reference \"the plan\" in your questions (e.g., \"Do you have feedback about the plan?\", \"Does the plan look good?\") because the user cannot see the plan in the UI until you call ExitPlanMode. If you need plan approval, use ExitPlanMode instead.\n\nPreview feature:\nUse the optional `preview` field on options when presenting concrete artifacts that users need to visually compare:\n- ASCII mockups of UI layouts or components\n- Code snippets showing different implementations\n- Diagram variations\n- Configuration examples\n\nPreview content is rendered as markdown in a monospace box. Multi-line text with newlines is supported. When any option has a preview, the UI switches to a side-by-side layout with a vertical option list on the left and preview on the right. Do not use previews for simple preference questions where labels and descriptions suffice. Note: previews are only supported for single-select questions (not multiSelect).\n",
59
59
  "input_schema": {
60
60
  "$schema": "https://json-schema.org/draft/2020-12/schema",
61
61
  "type": "object",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askalf/dario",
3
- "version": "4.6.3",
3
+ "version": "4.6.5",
4
4
  "description": "Use your Claude Pro/Max subscription in any tool — Cursor, Cline, Aider, the Agent SDK, your scripts — at subscription pricing, not per-token API bills. One local Anthropic + OpenAI-compatible endpoint.",
5
5
  "type": "module",
6
6
  "bin": {