@f5-sales-demo/xcsh 20.8.0 → 20.8.2

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.0",
4
+ "version": "20.8.2",
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.0",
65
- "@f5-sales-demo/pi-agent-core": "20.8.0",
66
- "@f5-sales-demo/pi-ai": "20.8.0",
67
- "@f5-sales-demo/pi-natives": "20.8.0",
68
- "@f5-sales-demo/pi-resource-management": "20.8.0",
69
- "@f5-sales-demo/pi-tui": "20.8.0",
70
- "@f5-sales-demo/pi-utils": "20.8.0",
64
+ "@f5-sales-demo/xcsh-stats": "20.8.2",
65
+ "@f5-sales-demo/pi-agent-core": "20.8.2",
66
+ "@f5-sales-demo/pi-ai": "20.8.2",
67
+ "@f5-sales-demo/pi-natives": "20.8.2",
68
+ "@f5-sales-demo/pi-resource-management": "20.8.2",
69
+ "@f5-sales-demo/pi-tui": "20.8.2",
70
+ "@f5-sales-demo/pi-utils": "20.8.2",
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,87 @@ 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.pools": {
606
+ type: "record",
607
+ default: {},
608
+ },
609
+
610
+ "routing.disabledPresets": {
611
+ type: "array",
612
+ default: [],
613
+ },
614
+
533
615
  // Sampling
534
616
  temperature: {
535
617
  type: "number",
@@ -2203,6 +2285,7 @@ export interface GroupTypeMap {
2203
2285
  modelRoles: Record<string, string>;
2204
2286
  modelTags: ModelTagsSettings;
2205
2287
  cycleOrder: string[];
2288
+ routing: RoutingSettings;
2206
2289
  }
2207
2290
 
2208
2291
  export type GroupPrefix = keyof GroupTypeMap;
@@ -17,17 +17,17 @@ export interface BuildInfo {
17
17
  }
18
18
 
19
19
  export const BUILD_INFO: BuildInfo = {
20
- "version": "20.8.0",
21
- "commit": "27be1c998051e2ab0ffced6120383b502b2b77c6",
22
- "shortCommit": "27be1c9",
20
+ "version": "20.8.2",
21
+ "commit": "66c868524c9a033080f9783d9be773ecab7b6831",
22
+ "shortCommit": "66c8685",
23
23
  "branch": "main",
24
- "tag": "v20.8.0",
25
- "commitDate": "2026-08-08T03:42:08Z",
26
- "buildDate": "2026-08-08T04:06:22.569Z",
24
+ "tag": "v20.8.2",
25
+ "commitDate": "2026-08-08T14:08:50Z",
26
+ "buildDate": "2026-08-08T14:35:05.342Z",
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/27be1c998051e2ab0ffced6120383b502b2b77c6",
32
- "releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v20.8.0"
31
+ "commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/66c868524c9a033080f9783d9be773ecab7b6831",
32
+ "releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v20.8.2"
33
33
  };
@@ -2,10 +2,10 @@
2
2
 
3
3
  import type { ConsoleCatalogData } from "./console-catalog-types";
4
4
 
5
- export const CONSOLE_CATALOG_VERSION = "6e999bfa3fa4d75bfff9cbf55153df7dc063e037";
5
+ export const CONSOLE_CATALOG_VERSION = "340b21c54e065c667ca82dc7d42e86d9a345e171";
6
6
 
7
7
  export const CONSOLE_CATALOG_DATA: ConsoleCatalogData = {
8
- version: "6e999bfa3fa4d75bfff9cbf55153df7dc063e037",
8
+ version: "340b21c54e065c667ca82dc7d42e86d9a345e171",
9
9
  workflows: {
10
10
  "address-allocator/create":
11
11
  '---\nschema: urn:xcsh:console:workflow:v1\nid: address-allocator-create\nlabel: Create IP Address Allocators\nresource: address-allocator\noperation: create\npreconditions:\n - user_logged_in\n - "role_minimum: admin"\nparams:\n name:\n required: true\n description: IP Address Allocators name (lowercase alphanumeric and hyphens)\n example: example-address-allocator\n address_allocator_mode:\n required: true\n description: Address Allocator Mode\n allocation_unit:\n required: false\n description: Allocation Unit\n default: 0\n address_pool:\n required: false\n description: Address Pool\n default: value\n address_allocation_scheme:\n required: false\n description: "Server-required: Field should be not nil"\n default: value\nsteps:\n - id: navigate-to-list\n action: navigate\n url: /web/workspaces/multi-cloud-network-connect/manage/networking/legacy_network_configuration/address_allocators\n wait_for: text(\'IP Address Allocators\')\n description: Navigate to IP Address Allocators list page\n - id: click-add-tab\n action: click\n selector: text(\'Add IP Address Allocator\')\n wait_for: textbox[name=\'Name\']\n description: Click Add IP Address Allocator to open the create form\n - id: fill-name\n action: fill\n selector: textbox[name=\'Name\']\n value: "{name}"\n description: Enter Name\n - id: select-address_allocator_mode\n action: select\n selector: listbox\n context: Address Allocator Mode section\n value: "{address_allocator_mode}"\n description: Select Address Allocator Mode\n - id: fill-allocation_unit\n action: fill\n selector: spinbutton[name=\'Allocation Unit\']\n value: "{allocation_unit}"\n description: Set Allocation Unit\n - id: fill-address_pool\n action: fill\n selector: ngx-datatable input.form-control\n context: Address Pool table\n value: "{address_pool}"\n description: Enter Address Pool in the existing table row (no Add Item needed — the table ships one empty row)\n - id: select-address_allocation_scheme\n action: select\n selector: listbox\n context: Address Allocation Scheme section\n value: "{address_allocation_scheme}"\n description: Select Address Allocation Scheme\n - id: save\n action: click\n selector: "[class*=\'save-bt\'],[class*=\'submit-button\']"\n context: footer\n wait_for: text(\'{name}\')\n wait_timeout_ms: 30000\n description: Save/submit the form (union selector matches save-bt OR submit-button)\npostconditions:\n - resource_list_page_visible\n - "resource_name_in_list: {name}"\nmetadata:\n confidence: inferred\n discovered_at: 2026-06-24\n console_version: "2025.06"\n notes: Auto-generated by scripts/generate-workflows.ts from api-specs-enriched field metadata.\n',