@f5xc-salesdemos/xcsh 18.91.0 → 18.91.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 +7 -7
- package/src/extensibility/extensions/types.ts +1 -0
- package/src/internal-urls/build-info.generated.ts +8 -8
- package/src/modes/components/welcome-checks.ts +2 -0
- package/src/modes/components/welcome.ts +38 -3
- package/src/modes/interactive-mode.ts +14 -2
- package/src/modes/rpc/rpc-mode.ts +8 -2
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@f5xc-salesdemos/xcsh",
|
|
4
|
-
"version": "18.91.
|
|
4
|
+
"version": "18.91.2",
|
|
5
5
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
6
6
|
"homepage": "https://github.com/f5xc-salesdemos/xcsh",
|
|
7
7
|
"author": "Can Boluk",
|
|
@@ -50,12 +50,12 @@
|
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@agentclientprotocol/sdk": "0.16.1",
|
|
52
52
|
"@mozilla/readability": "^0.6",
|
|
53
|
-
"@f5xc-salesdemos/xcsh-stats": "18.91.
|
|
54
|
-
"@f5xc-salesdemos/pi-agent-core": "18.91.
|
|
55
|
-
"@f5xc-salesdemos/pi-ai": "18.91.
|
|
56
|
-
"@f5xc-salesdemos/pi-natives": "18.91.
|
|
57
|
-
"@f5xc-salesdemos/pi-tui": "18.91.
|
|
58
|
-
"@f5xc-salesdemos/pi-utils": "18.91.
|
|
53
|
+
"@f5xc-salesdemos/xcsh-stats": "18.91.2",
|
|
54
|
+
"@f5xc-salesdemos/pi-agent-core": "18.91.2",
|
|
55
|
+
"@f5xc-salesdemos/pi-ai": "18.91.2",
|
|
56
|
+
"@f5xc-salesdemos/pi-natives": "18.91.2",
|
|
57
|
+
"@f5xc-salesdemos/pi-tui": "18.91.2",
|
|
58
|
+
"@f5xc-salesdemos/pi-utils": "18.91.2",
|
|
59
59
|
"@sinclair/typebox": "^0.34",
|
|
60
60
|
"@xterm/headless": "^6.0",
|
|
61
61
|
"ajv": "^8.18",
|
|
@@ -939,6 +939,7 @@ export interface RegisteredCommand {
|
|
|
939
939
|
|
|
940
940
|
export interface ServiceStatusContribution {
|
|
941
941
|
name: string;
|
|
942
|
+
group?: string;
|
|
942
943
|
check: () => Promise<{ state: "connected" | "unauthenticated" | "unavailable"; hint?: string }>;
|
|
943
944
|
fix?: {
|
|
944
945
|
prompt: string;
|
|
@@ -17,17 +17,17 @@ export interface BuildInfo {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const BUILD_INFO: BuildInfo = {
|
|
20
|
-
"version": "18.91.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "18.91.2",
|
|
21
|
+
"commit": "20cf55f12270d2119a0d547fb1e0218ee2cb57fe",
|
|
22
|
+
"shortCommit": "20cf55f",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v18.91.
|
|
25
|
-
"commitDate": "2026-06-
|
|
26
|
-
"buildDate": "2026-06-
|
|
24
|
+
"tag": "v18.91.2",
|
|
25
|
+
"commitDate": "2026-06-01T22:53:18Z",
|
|
26
|
+
"buildDate": "2026-06-01T23:18:04.618Z",
|
|
27
27
|
"dirty": true,
|
|
28
28
|
"prNumber": "",
|
|
29
29
|
"repoUrl": "https://github.com/f5xc-salesdemos/xcsh",
|
|
30
30
|
"repoSlug": "f5xc-salesdemos/xcsh",
|
|
31
|
-
"commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/
|
|
32
|
-
"releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v18.91.
|
|
31
|
+
"commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/20cf55f12270d2119a0d547fb1e0218ee2cb57fe",
|
|
32
|
+
"releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v18.91.2"
|
|
33
33
|
};
|
|
@@ -122,15 +122,37 @@ export class WelcomeComponent implements Component {
|
|
|
122
122
|
|
|
123
123
|
#measureStatusWidth(): number {
|
|
124
124
|
const lines: string[] = [" Model Provider", ...this.#renderModelStatus()];
|
|
125
|
-
|
|
125
|
+
const coreServices = this.services.filter(s => !s._isPlugin);
|
|
126
|
+
const pluginServices = this.services.filter(s => s._isPlugin);
|
|
127
|
+
for (const svc of coreServices) {
|
|
126
128
|
lines.push(this.#renderServiceLine(svc));
|
|
127
129
|
}
|
|
130
|
+
if (pluginServices.length > 0) {
|
|
131
|
+
const groups = this.#groupPluginServices(pluginServices);
|
|
132
|
+
for (const [groupName] of groups) {
|
|
133
|
+
lines.push(` ${groupName}`);
|
|
134
|
+
}
|
|
135
|
+
for (const svc of pluginServices) {
|
|
136
|
+
lines.push(this.#renderServiceLine(svc));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
128
139
|
if (this.#showUpdateSection()) {
|
|
129
140
|
lines.push(this.#renderUpdateLine());
|
|
130
141
|
}
|
|
131
142
|
return Math.max(...lines.map(l => visibleWidth(l)));
|
|
132
143
|
}
|
|
133
144
|
|
|
145
|
+
#groupPluginServices(plugins: ServiceStatus[]): Map<string, ServiceStatus[]> {
|
|
146
|
+
const groups = new Map<string, ServiceStatus[]>();
|
|
147
|
+
for (const svc of plugins) {
|
|
148
|
+
const groupName = svc._group ?? "Plugins";
|
|
149
|
+
const list = groups.get(groupName) ?? [];
|
|
150
|
+
list.push(svc);
|
|
151
|
+
groups.set(groupName, list);
|
|
152
|
+
}
|
|
153
|
+
return groups;
|
|
154
|
+
}
|
|
155
|
+
|
|
134
156
|
#buildStatusLines(rightCol: number): string[] {
|
|
135
157
|
const lines: string[] = [];
|
|
136
158
|
const separatorWidth = Math.max(0, rightCol - 2);
|
|
@@ -139,11 +161,24 @@ export class WelcomeComponent implements Component {
|
|
|
139
161
|
lines.push(` ${theme.bold(theme.fg("contentAccent", "Model Provider"))}`);
|
|
140
162
|
lines.push(...this.#renderModelStatus());
|
|
141
163
|
lines.push("");
|
|
142
|
-
|
|
164
|
+
const coreServices = this.services.filter(s => !s._isPlugin);
|
|
165
|
+
const pluginServices = this.services.filter(s => s._isPlugin);
|
|
166
|
+
const hasContent = coreServices.length > 0 || pluginServices.length > 0 || this.#showUpdateSection();
|
|
167
|
+
if (hasContent) {
|
|
143
168
|
lines.push(separator);
|
|
144
|
-
for (const svc of
|
|
169
|
+
for (const svc of coreServices) {
|
|
145
170
|
lines.push(this.#renderServiceLine(svc));
|
|
146
171
|
}
|
|
172
|
+
if (pluginServices.length > 0) {
|
|
173
|
+
const groups = this.#groupPluginServices(pluginServices);
|
|
174
|
+
for (const [groupName, groupServices] of groups) {
|
|
175
|
+
lines.push("");
|
|
176
|
+
lines.push(` ${theme.fg("dim", groupName)}`);
|
|
177
|
+
for (const svc of groupServices) {
|
|
178
|
+
lines.push(this.#renderServiceLine(svc));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
147
182
|
if (this.#showUpdateSection()) {
|
|
148
183
|
lines.push(this.#renderUpdateLine());
|
|
149
184
|
}
|
|
@@ -345,9 +345,15 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
345
345
|
for (const contribution of pluginContributions) {
|
|
346
346
|
try {
|
|
347
347
|
const status = await contribution.check();
|
|
348
|
-
services.push({ name: contribution.name, ...status });
|
|
348
|
+
services.push({ name: contribution.name, ...status, _isPlugin: true, _group: contribution.group });
|
|
349
349
|
} catch {
|
|
350
|
-
services.push({
|
|
350
|
+
services.push({
|
|
351
|
+
name: contribution.name,
|
|
352
|
+
state: "unavailable",
|
|
353
|
+
hint: "check failed",
|
|
354
|
+
_isPlugin: true,
|
|
355
|
+
_group: contribution.group,
|
|
356
|
+
});
|
|
351
357
|
}
|
|
352
358
|
}
|
|
353
359
|
}
|
|
@@ -557,6 +563,12 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
557
563
|
finishPendingSubmission(input: SubmittedUserInput): void {
|
|
558
564
|
if (this.#pendingSubmittedInput === input) {
|
|
559
565
|
this.#pendingSubmittedInput = undefined;
|
|
566
|
+
this.#pendingWorkingMessage = undefined;
|
|
567
|
+
if (this.loadingAnimation) {
|
|
568
|
+
this.loadingAnimation.stop();
|
|
569
|
+
this.loadingAnimation = undefined;
|
|
570
|
+
this.statusContainer.clear();
|
|
571
|
+
}
|
|
560
572
|
}
|
|
561
573
|
}
|
|
562
574
|
|
|
@@ -625,9 +625,15 @@ export async function runRpcMode(session: AgentSession): Promise<never> {
|
|
|
625
625
|
for (const contribution of pluginContributions) {
|
|
626
626
|
try {
|
|
627
627
|
const status = await contribution.check();
|
|
628
|
-
services.push({ name: contribution.name, ...status });
|
|
628
|
+
services.push({ name: contribution.name, ...status, _isPlugin: true, _group: contribution.group });
|
|
629
629
|
} catch {
|
|
630
|
-
services.push({
|
|
630
|
+
services.push({
|
|
631
|
+
name: contribution.name,
|
|
632
|
+
state: "unavailable",
|
|
633
|
+
hint: "check failed",
|
|
634
|
+
_isPlugin: true,
|
|
635
|
+
_group: contribution.group,
|
|
636
|
+
});
|
|
631
637
|
}
|
|
632
638
|
}
|
|
633
639
|
}
|