@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 +4 -0
- package/package.json +11 -9
- package/src/config/settings-schema.ts +1 -1
- package/src/config/settings.ts +31 -0
- package/src/internal-urls/api-catalog-qmd-index.generated.ts +2 -2
- package/src/internal-urls/build-info.generated.ts +8 -8
- package/src/internal-urls/docs-index.generated.ts +1 -1
- package/src/locales/en.json +2 -1
- package/src/modes/components/auth-link-presenter.ts +38 -11
- package/src/modes/controllers/selector-controller.ts +52 -11
- package/src/modes/oauth-manual-input.ts +16 -0
- package/src/slash-commands/builtin-registry.ts +18 -1
- package/src/tui/hyperlink.ts +14 -1
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.
|
|
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.
|
|
68
|
-
"@f5-sales-demo/pi-ai": "21.45.
|
|
69
|
-
"@f5-sales-demo/pi-natives": "21.45.
|
|
70
|
-
"@f5-sales-demo/pi-resource-management": "21.45.
|
|
71
|
-
"@f5-sales-demo/pi-tui": "21.45.
|
|
72
|
-
"@f5-sales-demo/pi-utils": "21.45.
|
|
73
|
-
"@f5-sales-demo/xcsh-stats": "21.45.
|
|
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",
|
package/src/config/settings.ts
CHANGED
|
@@ -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
|
|