@f5-sales-demo/xcsh 21.45.1 → 21.45.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/CHANGELOG.md CHANGED
@@ -60,6 +60,10 @@
60
60
 
61
61
  ### Fixed
62
62
 
63
+ - Migrated the exact generated v8 LiteLLM role defaults to the current GPT-6/Terra assignments so
64
+ upgraded profiles keep legacy selectors resolvable without showing them in ordinary model browsing
65
+ ([#4345](https://github.com/f5-sales-demo/xcsh/issues/4345)).
66
+
63
67
  - Published KVM 3.0.4 through the built-in marketplace snapshot with immutable source provenance,
64
68
  so fresh xcsh installations discover the qualified plugin without a development catalog
65
69
  ([#4321](https://github.com/f5-sales-demo/xcsh/issues/4321),
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@f5-sales-demo/xcsh",
4
- "version": "21.45.1",
4
+ "version": "21.45.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",
@@ -34,7 +34,9 @@
34
34
  "prebuild": "bun ../../scripts/check-installed-dependencies.ts",
35
35
  "build": "bun run generate-build-info && bun run generate-extension-capabilities && bun run generate-api-catalog-qmd-index && test -f src/internal-urls/api-spec-index.generated.ts && bun --cwd=../stats scripts/generate-client-bundle.ts --generate && bun --cwd=../office-pane scripts/generate-client-bundle.ts --generate && bun --cwd=../natives run embed:native && bun scripts/build-binary.ts && bun --cwd=../natives run embed:native --reset && bun --cwd=../stats scripts/generate-client-bundle.ts --reset && bun --cwd=../office-pane scripts/generate-client-bundle.ts --reset",
36
36
  "precheck": "bun ../../scripts/check-installed-dependencies.ts",
37
- "check": "biome check . && bun run format-prompts -- --check && bun run check:types",
37
+ "check": "biome check . && bun run format-prompts -- --check && bun run audit:tui-readability && bun run check:types",
38
+ "audit:tui-readability": "bun scripts/audit-tui-readability.ts --check",
39
+ "audit:tui-readability:write": "bun scripts/audit-tui-readability.ts --write",
38
40
  "check:types": "bun run generate-build-info && tsgo -p tsconfig.json --noEmit",
39
41
  "lint": "biome lint .",
40
42
  "check:bundle": "bun scripts/check-bundle.ts",
@@ -64,13 +66,13 @@
64
66
  },
65
67
  "dependencies": {
66
68
  "@agentclientprotocol/sdk": "1.4.0",
67
- "@f5-sales-demo/pi-agent-core": "21.45.1",
68
- "@f5-sales-demo/pi-ai": "21.45.1",
69
- "@f5-sales-demo/pi-natives": "21.45.1",
70
- "@f5-sales-demo/pi-resource-management": "21.45.1",
71
- "@f5-sales-demo/pi-tui": "21.45.1",
72
- "@f5-sales-demo/pi-utils": "21.45.1",
73
- "@f5-sales-demo/xcsh-stats": "21.45.1",
69
+ "@f5-sales-demo/pi-agent-core": "21.45.3",
70
+ "@f5-sales-demo/pi-ai": "21.45.3",
71
+ "@f5-sales-demo/pi-natives": "21.45.3",
72
+ "@f5-sales-demo/pi-resource-management": "21.45.3",
73
+ "@f5-sales-demo/pi-tui": "21.45.3",
74
+ "@f5-sales-demo/pi-utils": "21.45.3",
75
+ "@f5-sales-demo/xcsh-stats": "21.45.3",
74
76
  "@mozilla/readability": "^0.6",
75
77
  "@sinclair/typebox": "0.34.52",
76
78
  "@tobilu/qmd": "2.8.3",
@@ -172,7 +172,7 @@ const SMOL_MODEL_ROLE = "litellm/gpt-6-luna:low";
172
172
  * Baked role map for the current internal LiteLLM catalog. Sol handles slow and
173
173
  * planning work, while Luna and Terra cover lightweight and default work.
174
174
  */
175
- const DEFAULT_MODEL_ROLES: Record<string, string> = {
175
+ export const DEFAULT_MODEL_ROLES: Record<string, string> = {
176
176
  default: DEFAULT_MODEL_ROLE,
177
177
  smol: SMOL_MODEL_ROLE,
178
178
  slow: "litellm/gpt-6-sol:high",
@@ -40,6 +40,7 @@ import { hardenAgentConfigFile, writeAgentConfigFile } from "./agent-config-file
40
40
  import { withFileLock } from "./file-lock";
41
41
  import {
42
42
  type BashInterceptorRule,
43
+ DEFAULT_MODEL_ROLES,
43
44
  type GroupPrefix,
44
45
  type GroupTypeMap,
45
46
  getDefault,
@@ -77,6 +78,12 @@ export interface SettingsOptions {
77
78
  // ═══════════════════════════════════════════════════════════════════════════
78
79
 
79
80
  const UNSAFE_PATH_SEGMENTS = new Set(["__proto__", "constructor", "prototype"]);
81
+ const LEGACY_GENERATED_LITELLM_MODEL_ROLES: Record<string, string> = {
82
+ smol: "litellm/gpt-5.6-luna:low",
83
+ default: "litellm/gpt-5.6-sol:medium",
84
+ slow: "litellm/gpt-5.6-sol:high",
85
+ plan: "litellm/gpt-5.6-sol:high",
86
+ };
80
87
 
81
88
  function hasUnsafePathSegment(segments: string[]): boolean {
82
89
  return segments.some(segment => segment.length === 0 || UNSAFE_PATH_SEGMENTS.has(segment));
@@ -478,6 +485,14 @@ export class Settings {
478
485
 
479
486
  // Load global settings from config.yml
480
487
  this.#global = await this.#loadYaml(this.#configPath!);
488
+ if (this.#migrateGeneratedLiteLLMModelRoles(this.#global)) {
489
+ try {
490
+ await writeAgentConfigFile(this.#configPath!, YAML.stringify(this.#global, null, 2));
491
+ logger.debug("Settings: migrated generated LiteLLM model roles", { path: this.#configPath });
492
+ } catch (error) {
493
+ logger.warn("Settings: failed to persist migrated LiteLLM model roles", { error: String(error) });
494
+ }
495
+ }
481
496
  }
482
497
 
483
498
  // Load project settings
@@ -519,6 +534,22 @@ export class Settings {
519
534
  }
520
535
  }
521
536
 
537
+ #migrateGeneratedLiteLLMModelRoles(raw: RawSettings): boolean {
538
+ const roles = raw.modelRoles;
539
+ if (!roles || typeof roles !== "object" || Array.isArray(roles)) return false;
540
+
541
+ const entries = Object.entries(roles);
542
+ if (
543
+ entries.length !== Object.keys(LEGACY_GENERATED_LITELLM_MODEL_ROLES).length ||
544
+ entries.some(([role, model]) => LEGACY_GENERATED_LITELLM_MODEL_ROLES[role] !== model)
545
+ ) {
546
+ return false;
547
+ }
548
+
549
+ raw.modelRoles = { ...DEFAULT_MODEL_ROLES };
550
+ return true;
551
+ }
552
+
522
553
  async #migrateFromLegacy(): Promise<void> {
523
554
  if (!this.#configPath) return;
524
555