@askalf/dario 4.8.91 → 4.8.92

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
@@ -374,7 +374,6 @@ dario is the routing layer of **[Own Your Stack](https://github.com/askalf)**
374
374
 
375
375
  - **[dario](https://github.com/askalf/dario)** — own your routing _(you are here)_
376
376
  - **[hybrid](https://github.com/askalf/hybrid)** — own your inference
377
- - **[deja](https://github.com/askalf/deja)** — own your LLM cache
378
377
  - **[deepdive](https://github.com/askalf/deepdive)** — own your research
379
378
  - **[hands](https://github.com/askalf/hands)** — own your computer-use
380
379
  - **[agent](https://github.com/askalf/agent)** — own your fleet
@@ -199,8 +199,9 @@ export declare function detectTextToolClient(systemText: string): string | null;
199
199
  /**
200
200
  * Structural fallback for non-CC clients that the identity-string
201
201
  * detector doesn't recognize. When the operator hands us 3+ tools and
202
- * ≥80% of them don't appear in TOOL_MAP, we're looking at a custom
203
- * client whose tool surface has effectively no overlap with CC's.
202
+ * ≥80% of them appear in neither TOOL_MAP nor CC_NATIVE_NAMES, we're
203
+ * looking at a custom client whose tool surface has effectively no
204
+ * overlap with CC's.
204
205
  * Default-mode round-robin onto CC fallback slots silently corrupts
205
206
  * those calls (the client gets back a Glob/Read/Bash response shape
206
207
  * its own tool can't parse).
@@ -213,10 +214,11 @@ export declare function detectTextToolClient(systemText: string): string | null;
213
214
  * per-client maintenance.
214
215
  *
215
216
  * Threshold reasoning:
216
- * - 100% unmapped (ANY size, including 1-2 tools): unambiguously non-CC. A real
217
- * CC client always carries Bash + Read — both TOOL_MAP keys once lowercased
218
- * so it can never present a fully-unmapped surface; only a foreign tool set
219
- * can. This is what catches the small in-house clients the 3-tool rule below
217
+ * - 100% foreign (ANY size, including 1-2 tools): unambiguously non-CC. A real
218
+ * CC client always carries Bash + Read (TOOL_MAP keys once lowercased) or its
219
+ * own native tools (CC_NATIVE_NAMES), so it can never present a fully-foreign
220
+ * surface; only a genuinely non-CC tool set can. This catches the small
221
+ * in-house clients the 3-tool rule below
220
222
  * misses, e.g. forge inspection agents dispatched with just their capability
221
223
  * floor ([memory_store, db_query]). Before this, those 2-tool surfaces fell
222
224
  * under a len<3 guard and got round-robined onto CC fallback slots, which
@@ -425,8 +425,9 @@ export function detectTextToolClient(systemText) {
425
425
  /**
426
426
  * Structural fallback for non-CC clients that the identity-string
427
427
  * detector doesn't recognize. When the operator hands us 3+ tools and
428
- * ≥80% of them don't appear in TOOL_MAP, we're looking at a custom
429
- * client whose tool surface has effectively no overlap with CC's.
428
+ * ≥80% of them appear in neither TOOL_MAP nor CC_NATIVE_NAMES, we're
429
+ * looking at a custom client whose tool surface has effectively no
430
+ * overlap with CC's.
430
431
  * Default-mode round-robin onto CC fallback slots silently corrupts
431
432
  * those calls (the client gets back a Glob/Read/Bash response shape
432
433
  * its own tool can't parse).
@@ -439,10 +440,11 @@ export function detectTextToolClient(systemText) {
439
440
  * per-client maintenance.
440
441
  *
441
442
  * Threshold reasoning:
442
- * - 100% unmapped (ANY size, including 1-2 tools): unambiguously non-CC. A real
443
- * CC client always carries Bash + Read — both TOOL_MAP keys once lowercased
444
- * so it can never present a fully-unmapped surface; only a foreign tool set
445
- * can. This is what catches the small in-house clients the 3-tool rule below
443
+ * - 100% foreign (ANY size, including 1-2 tools): unambiguously non-CC. A real
444
+ * CC client always carries Bash + Read (TOOL_MAP keys once lowercased) or its
445
+ * own native tools (CC_NATIVE_NAMES), so it can never present a fully-foreign
446
+ * surface; only a genuinely non-CC tool set can. This catches the small
447
+ * in-house clients the 3-tool rule below
446
448
  * misses, e.g. forge inspection agents dispatched with just their capability
447
449
  * floor ([memory_store, db_query]). Before this, those 2-tool surfaces fell
448
450
  * under a len<3 guard and got round-robined onto CC fallback slots, which
@@ -457,13 +459,23 @@ export function detectNonCCByTools(clientTools) {
457
459
  return null;
458
460
  let unmapped = 0;
459
461
  for (const tool of clientTools) {
460
- const name = (tool.name || '').toLowerCase();
461
- if (!TOOL_MAP[name])
462
+ const rawName = tool.name || '';
463
+ // A tool is "foreign" only if dario can neither map it (TOOL_MAP, by
464
+ // lowercased cross-client alias) nor recognize it as CC's own (CC_NATIVE_NAMES,
465
+ // by exact PascalCase). CC-native tools identity-map to themselves in the remap
466
+ // path (see buildCCRequest), so counting them here inflates the ratio and
467
+ // mis-flags a modern, agentic-heavy CC client (Agent, Skill, Workflow, Task*,
468
+ // … — in the live bundle but absent from TOOL_MAP's alias table) as
469
+ // 'unknown-non-cc', flipping it to preserve and discarding the CC tool
470
+ // fingerprint dario exists to present. Mirror the routing's membership test so
471
+ // detection and routing agree.
472
+ if (!TOOL_MAP[rawName.toLowerCase()] && !CC_NATIVE_NAMES.has(rawName))
462
473
  unmapped++;
463
474
  }
464
475
  const ratio = unmapped / clientTools.length;
465
- // Fully-unmapped surface → non-CC at any size. Real CC always has Bash+Read
466
- // mapped, so ratio === 1 is unreachable for it; only a foreign client hits it.
476
+ // Fully-foreign surface → non-CC at any size. Real CC always has Bash+Read
477
+ // mapped or its own native tools, so ratio === 1 is unreachable for it; only a
478
+ // genuinely foreign client hits it.
467
479
  if (ratio === 1)
468
480
  return 'unknown-non-cc';
469
481
  // Mixed surface: only flag once there are enough tools to be confident.
@@ -282,7 +282,7 @@ export declare function _resetInstalledVersionProbeForTest(): void;
282
282
  */
283
283
  export declare const SUPPORTED_CC_RANGE: {
284
284
  readonly min: "1.0.0";
285
- readonly maxTested: "2.1.186";
285
+ readonly maxTested: "2.1.187";
286
286
  };
287
287
  /**
288
288
  * Compare two dotted-numeric version strings. Returns negative if `a<b`,
@@ -786,7 +786,7 @@ export function _resetInstalledVersionProbeForTest() {
786
786
  */
787
787
  export const SUPPORTED_CC_RANGE = {
788
788
  min: '1.0.0',
789
- maxTested: '2.1.186',
789
+ maxTested: '2.1.187',
790
790
  };
791
791
  /**
792
792
  * Compare two dotted-numeric version strings. Returns negative if `a<b`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@askalf/dario",
3
- "version": "4.8.91",
3
+ "version": "4.8.92",
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": {