@f5-sales-demo/xcsh 20.8.1 → 20.8.3

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@f5-sales-demo/xcsh",
4
- "version": "20.8.1",
4
+ "version": "20.8.3",
5
5
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
6
6
  "homepage": "https://github.com/f5-sales-demo/xcsh",
7
7
  "author": "Can Boluk",
@@ -61,13 +61,13 @@
61
61
  "dependencies": {
62
62
  "@agentclientprotocol/sdk": "1.3.0",
63
63
  "@mozilla/readability": "^0.6",
64
- "@f5-sales-demo/xcsh-stats": "20.8.1",
65
- "@f5-sales-demo/pi-agent-core": "20.8.1",
66
- "@f5-sales-demo/pi-ai": "20.8.1",
67
- "@f5-sales-demo/pi-natives": "20.8.1",
68
- "@f5-sales-demo/pi-resource-management": "20.8.1",
69
- "@f5-sales-demo/pi-tui": "20.8.1",
70
- "@f5-sales-demo/pi-utils": "20.8.1",
64
+ "@f5-sales-demo/xcsh-stats": "20.8.3",
65
+ "@f5-sales-demo/pi-agent-core": "20.8.3",
66
+ "@f5-sales-demo/pi-ai": "20.8.3",
67
+ "@f5-sales-demo/pi-natives": "20.8.3",
68
+ "@f5-sales-demo/pi-resource-management": "20.8.3",
69
+ "@f5-sales-demo/pi-tui": "20.8.3",
70
+ "@f5-sales-demo/pi-utils": "20.8.3",
71
71
  "@sinclair/typebox": "^0.34",
72
72
  "@xterm/headless": "^6.0",
73
73
  "ajv": "^8.20",
@@ -260,7 +260,7 @@ export async function runOfficeCommand(
260
260
  // with its stack intact, because swallowing a real failure here is how the original silent
261
261
  // 404 survived.
262
262
  if (!(err instanceof OfficePaneUnavailableError)) throw err;
263
- console.error(err.message);
263
+ console.error(err instanceof Error ? err.message : String(err));
264
264
  process.exitCode = 1;
265
265
  }
266
266
  }
@@ -1,4 +1,5 @@
1
1
  import { THINKING_EFFORTS } from "@f5-sales-demo/pi-ai";
2
+ import type { RoutingSettings } from "../routing/types";
2
3
 
3
4
  /** Unified settings schema - single source of truth for all settings.
4
5
  * Unified settings schema - single source of truth for all settings.
@@ -530,6 +531,102 @@ export const SETTINGS_SCHEMA = {
530
531
  },
531
532
  },
532
533
 
534
+ // Dynamic routing
535
+ "routing.mode": {
536
+ type: "enum",
537
+ values: ["off", "shadow", "auto"] as const,
538
+ default: "off",
539
+ ui: {
540
+ tab: "model",
541
+ label: "Routing Mode",
542
+ description: "Dynamic model routing mode (off, shadow, auto)",
543
+ submenu: true,
544
+ },
545
+ },
546
+
547
+ "routing.profiler": {
548
+ type: "enum",
549
+ values: ["rules", "hybrid"] as const,
550
+ default: "hybrid",
551
+ ui: {
552
+ tab: "model",
553
+ label: "Routing Profiler",
554
+ description: "Task complexity profiling method (rules or hybrid)",
555
+ submenu: true,
556
+ },
557
+ },
558
+
559
+ "routing.familyPolicy": {
560
+ type: "enum",
561
+ values: ["sticky", "configured-mixed"] as const,
562
+ default: "sticky",
563
+ ui: {
564
+ tab: "model",
565
+ label: "Family Policy",
566
+ description: "Provider family policy (sticky or configured-mixed)",
567
+ submenu: true,
568
+ },
569
+ },
570
+
571
+ "routing.delegation": {
572
+ type: "enum",
573
+ values: ["off", "read-only"] as const,
574
+ default: "read-only",
575
+ ui: {
576
+ tab: "model",
577
+ label: "Autonomous Delegation",
578
+ description: "Autonomous delegation mode for subtasks",
579
+ submenu: true,
580
+ },
581
+ },
582
+
583
+ "routing.delegationMaxTasks": {
584
+ type: "number",
585
+ default: 3,
586
+ ui: {
587
+ tab: "model",
588
+ label: "Delegation Max Subtasks",
589
+ description: "Maximum subtasks for autonomous delegation (1-3)",
590
+ submenu: true,
591
+ },
592
+ },
593
+
594
+ "routing.downshiftAfterTurns": {
595
+ type: "number",
596
+ default: 2,
597
+ ui: {
598
+ tab: "model",
599
+ label: "Downshift Hysteresis Turns",
600
+ description: "Consecutive turns required before downshifting model tier",
601
+ submenu: true,
602
+ },
603
+ },
604
+
605
+ "routing.tierEffort": {
606
+ type: "record",
607
+ default: {
608
+ utility: "low",
609
+ balanced: "medium",
610
+ frontier: "high",
611
+ },
612
+ ui: {
613
+ tab: "model",
614
+ label: "Tier Effort Mapping",
615
+ description: "Map routing tiers to thinking effort levels",
616
+ submenu: true,
617
+ },
618
+ },
619
+
620
+ "routing.pools": {
621
+ type: "record",
622
+ default: {},
623
+ },
624
+
625
+ "routing.disabledPresets": {
626
+ type: "array",
627
+ default: [],
628
+ },
629
+
533
630
  // Sampling
534
631
  temperature: {
535
632
  type: "number",
@@ -2203,6 +2300,7 @@ export interface GroupTypeMap {
2203
2300
  modelRoles: Record<string, string>;
2204
2301
  modelTags: ModelTagsSettings;
2205
2302
  cycleOrder: string[];
2303
+ routing: RoutingSettings;
2206
2304
  }
2207
2305
 
2208
2306
  export type GroupPrefix = keyof GroupTypeMap;
package/src/index.ts CHANGED
@@ -38,6 +38,13 @@ export * from "./modes";
38
38
  export * from "./modes/components";
39
39
  // Theme utilities for custom tools
40
40
  export * from "./modes/theme/theme";
41
+ export * from "./routing/classifier";
42
+ export * from "./routing/coordinator";
43
+ export * from "./routing/delegation";
44
+ export * from "./routing/presets";
45
+ export * from "./routing/profiler";
46
+ export * from "./routing/state-machine";
47
+ export type * from "./routing/types";
41
48
  // SDK for programmatic usage
42
49
  export * from "./sdk";
43
50
  export * from "./session/agent-session";
@@ -17,17 +17,17 @@ export interface BuildInfo {
17
17
  }
18
18
 
19
19
  export const BUILD_INFO: BuildInfo = {
20
- "version": "20.8.1",
21
- "commit": "2069e890126fded8926743a7e6d4b9cfb2c73f3c",
22
- "shortCommit": "2069e89",
20
+ "version": "20.8.3",
21
+ "commit": "a53c648993e3b94f865921929f85bdf491447000",
22
+ "shortCommit": "a53c648",
23
23
  "branch": "main",
24
- "tag": "v20.8.1",
25
- "commitDate": "2026-08-08T09:04:24Z",
26
- "buildDate": "2026-08-08T09:29:46.136Z",
24
+ "tag": "v20.8.3",
25
+ "commitDate": "2026-08-09T05:36:30Z",
26
+ "buildDate": "2026-08-09T06:08:18.709Z",
27
27
  "dirty": true,
28
28
  "prNumber": "",
29
29
  "repoUrl": "https://github.com/f5-sales-demo/xcsh",
30
30
  "repoSlug": "f5-sales-demo/xcsh",
31
- "commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/2069e890126fded8926743a7e6d4b9cfb2c73f3c",
32
- "releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v20.8.1"
31
+ "commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/a53c648993e3b94f865921929f85bdf491447000",
32
+ "releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v20.8.3"
33
33
  };