@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 +8 -8
- package/src/cli/office-cli.ts +1 -1
- package/src/config/settings-schema.ts +83 -0
- package/src/internal-urls/build-info.generated.ts +8 -8
- package/src/internal-urls/console-catalog.generated.ts +2 -2
- package/src/internal-urls/docs-index.generated.ts +74 -73
- package/src/routing/classifier.ts +80 -0
- package/src/routing/commands.ts +61 -0
- package/src/routing/context-filter.ts +15 -0
- package/src/routing/coordinator.ts +195 -0
- package/src/routing/delegation.ts +72 -0
- package/src/routing/effort.ts +14 -0
- package/src/routing/events.ts +77 -0
- package/src/routing/index.ts +13 -0
- package/src/routing/presets.ts +164 -0
- package/src/routing/profiler.ts +109 -0
- package/src/routing/resolver.ts +115 -0
- package/src/routing/state-machine.ts +107 -0
- package/src/routing/types.ts +108 -0
- package/src/session/agent-session.ts +357 -4
- package/src/slash-commands/builtin-registry.ts +30 -0
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.
|
|
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.
|
|
65
|
-
"@f5-sales-demo/pi-agent-core": "20.8.
|
|
66
|
-
"@f5-sales-demo/pi-ai": "20.8.
|
|
67
|
-
"@f5-sales-demo/pi-natives": "20.8.
|
|
68
|
-
"@f5-sales-demo/pi-resource-management": "20.8.
|
|
69
|
-
"@f5-sales-demo/pi-tui": "20.8.
|
|
70
|
-
"@f5-sales-demo/pi-utils": "20.8.
|
|
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",
|
package/src/cli/office-cli.ts
CHANGED
|
@@ -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.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "20.8.2",
|
|
21
|
+
"commit": "66c868524c9a033080f9783d9be773ecab7b6831",
|
|
22
|
+
"shortCommit": "66c8685",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v20.8.
|
|
25
|
-
"commitDate": "2026-08-
|
|
26
|
-
"buildDate": "2026-08-
|
|
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/
|
|
32
|
-
"releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v20.8.
|
|
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 = "
|
|
5
|
+
export const CONSOLE_CATALOG_VERSION = "340b21c54e065c667ca82dc7d42e86d9a345e171";
|
|
6
6
|
|
|
7
7
|
export const CONSOLE_CATALOG_DATA: ConsoleCatalogData = {
|
|
8
|
-
version: "
|
|
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',
|