@f5xc-salesdemos/xcsh 18.48.0 → 18.48.1
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": "@f5xc-salesdemos/xcsh",
|
|
4
|
-
"version": "18.48.
|
|
4
|
+
"version": "18.48.1",
|
|
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",
|
|
@@ -48,12 +48,12 @@
|
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@agentclientprotocol/sdk": "0.16.1",
|
|
50
50
|
"@mozilla/readability": "^0.6",
|
|
51
|
-
"@f5xc-salesdemos/xcsh-stats": "18.48.
|
|
52
|
-
"@f5xc-salesdemos/pi-agent-core": "18.48.
|
|
53
|
-
"@f5xc-salesdemos/pi-ai": "18.48.
|
|
54
|
-
"@f5xc-salesdemos/pi-natives": "18.48.
|
|
55
|
-
"@f5xc-salesdemos/pi-tui": "18.48.
|
|
56
|
-
"@f5xc-salesdemos/pi-utils": "18.48.
|
|
51
|
+
"@f5xc-salesdemos/xcsh-stats": "18.48.1",
|
|
52
|
+
"@f5xc-salesdemos/pi-agent-core": "18.48.1",
|
|
53
|
+
"@f5xc-salesdemos/pi-ai": "18.48.1",
|
|
54
|
+
"@f5xc-salesdemos/pi-natives": "18.48.1",
|
|
55
|
+
"@f5xc-salesdemos/pi-tui": "18.48.1",
|
|
56
|
+
"@f5xc-salesdemos/pi-utils": "18.48.1",
|
|
57
57
|
"@sinclair/typebox": "^0.34",
|
|
58
58
|
"@xterm/headless": "^6.0",
|
|
59
59
|
"ajv": "^8.18",
|
|
@@ -17,17 +17,17 @@ export interface BuildInfo {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const BUILD_INFO: BuildInfo = {
|
|
20
|
-
"version": "18.48.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "18.48.1",
|
|
21
|
+
"commit": "158e9c98808fdbaeac9b8c2e0623768abffa800e",
|
|
22
|
+
"shortCommit": "158e9c9",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v18.48.
|
|
25
|
-
"commitDate": "2026-05-
|
|
26
|
-
"buildDate": "2026-05-
|
|
24
|
+
"tag": "v18.48.1",
|
|
25
|
+
"commitDate": "2026-05-06T15:22:57Z",
|
|
26
|
+
"buildDate": "2026-05-06T15:49:54.715Z",
|
|
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.48.
|
|
31
|
+
"commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/158e9c98808fdbaeac9b8c2e0623768abffa800e",
|
|
32
|
+
"releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v18.48.1"
|
|
33
33
|
};
|
|
@@ -2,7 +2,7 @@ import { type Component, padding, truncateToWidth, visibleWidth } from "@f5xc-sa
|
|
|
2
2
|
import { APP_NAME } from "@f5xc-salesdemos/pi-utils";
|
|
3
3
|
import { theme } from "../../modes/theme/theme";
|
|
4
4
|
import { formatStatusIcon } from "../../services/f5xc-context-indicators";
|
|
5
|
-
import type { ModelStatus, ServiceStatus
|
|
5
|
+
import type { ModelStatus, ServiceStatus } from "./welcome-checks";
|
|
6
6
|
|
|
7
7
|
export interface UpdateStatus {
|
|
8
8
|
available: boolean;
|
|
@@ -15,7 +15,6 @@ export class WelcomeComponent implements Component {
|
|
|
15
15
|
private modelStatus: ModelStatus,
|
|
16
16
|
private services: ServiceStatus[] = [],
|
|
17
17
|
private updateStatus?: UpdateStatus,
|
|
18
|
-
private profileStatus?: WelcomeProfileStatus,
|
|
19
18
|
) {}
|
|
20
19
|
invalidate(): void {}
|
|
21
20
|
setModelStatus(status: ModelStatus): void {
|
|
@@ -27,9 +26,6 @@ export class WelcomeComponent implements Component {
|
|
|
27
26
|
setUpdateStatus(status: UpdateStatus | undefined): void {
|
|
28
27
|
this.updateStatus = status;
|
|
29
28
|
}
|
|
30
|
-
setProfileStatus(status: WelcomeProfileStatus | undefined): void {
|
|
31
|
-
this.profileStatus = status;
|
|
32
|
-
}
|
|
33
29
|
|
|
34
30
|
render(termWidth: number): string[] {
|
|
35
31
|
const minLeftCol = 48;
|
|
@@ -129,9 +125,6 @@ export class WelcomeComponent implements Component {
|
|
|
129
125
|
for (const svc of this.services) {
|
|
130
126
|
lines.push(this.#renderServiceLine(svc));
|
|
131
127
|
}
|
|
132
|
-
if (this.profileStatus) {
|
|
133
|
-
lines.push(" User Profile", ...this.#renderProfileStatus());
|
|
134
|
-
}
|
|
135
128
|
if (this.#showUpdateSection()) {
|
|
136
129
|
lines.push(this.#renderUpdateLine());
|
|
137
130
|
}
|
|
@@ -155,12 +148,6 @@ export class WelcomeComponent implements Component {
|
|
|
155
148
|
lines.push(this.#renderUpdateLine());
|
|
156
149
|
}
|
|
157
150
|
}
|
|
158
|
-
if (this.profileStatus) {
|
|
159
|
-
lines.push(separator);
|
|
160
|
-
for (const line of this.#renderProfileStatus()) {
|
|
161
|
-
lines.push(line);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
151
|
lines.push("");
|
|
165
152
|
return lines;
|
|
166
153
|
}
|
|
@@ -202,25 +189,6 @@ export class WelcomeComponent implements Component {
|
|
|
202
189
|
}
|
|
203
190
|
}
|
|
204
191
|
|
|
205
|
-
#renderProfileStatus(): string[] {
|
|
206
|
-
if (!this.profileStatus) return [];
|
|
207
|
-
const { state, name, staleDays } = this.profileStatus;
|
|
208
|
-
switch (state) {
|
|
209
|
-
case "current":
|
|
210
|
-
return [` ${formatStatusIcon("connected")} ${theme.fg("muted", name ?? "profile loaded")}`];
|
|
211
|
-
case "stale":
|
|
212
|
-
return [
|
|
213
|
-
` ${formatStatusIcon("warning")} ${theme.fg("muted", name ?? "profile")} ${theme.fg("warning", `\u2014 stale${staleDays !== undefined ? ` (${staleDays}d)` : ""}`)}`,
|
|
214
|
-
` ${theme.fg("dim", "Run")} ${theme.fg("contentAccent", "xcsh://user?seed=true")}`,
|
|
215
|
-
];
|
|
216
|
-
case "missing":
|
|
217
|
-
return [
|
|
218
|
-
` ${formatStatusIcon("warning")} ${theme.fg("warning", "No profile yet")}`,
|
|
219
|
-
` ${theme.fg("dim", "Run")} ${theme.fg("contentAccent", "xcsh://user?seed=true")}`,
|
|
220
|
-
];
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
192
|
#f5ColorLine(line: string): string {
|
|
225
193
|
const red = "\x1b[38;5;160m";
|
|
226
194
|
const white = "\x1b[1;37m";
|
|
@@ -57,7 +57,6 @@ import {
|
|
|
57
57
|
checkGcloudStatus,
|
|
58
58
|
checkGitHubStatus,
|
|
59
59
|
checkGitLabStatus,
|
|
60
|
-
checkProfileStatus,
|
|
61
60
|
checkSalesforceStatus,
|
|
62
61
|
mapAwsStatus,
|
|
63
62
|
mapAzureStatus,
|
|
@@ -325,32 +324,21 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
325
324
|
);
|
|
326
325
|
|
|
327
326
|
// Run blocking welcome screen status checks in parallel
|
|
328
|
-
const [
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
checkGitHubStatus().catch(() => undefined),
|
|
344
|
-
checkAzureStatus().catch(() => undefined),
|
|
345
|
-
checkAwsStatus().catch(() => undefined),
|
|
346
|
-
checkGcloudStatus().catch(() => undefined),
|
|
347
|
-
checkProfileStatus().catch(() => undefined),
|
|
348
|
-
]);
|
|
349
|
-
|
|
350
|
-
// Refresh stale or missing profile in background — fire and forget
|
|
351
|
-
if (profileStatus?.state === "stale" || profileStatus?.state === "missing") {
|
|
352
|
-
seedProfile().catch(err => logger.warn("Background profile refresh failed", { error: String(err) }));
|
|
353
|
-
}
|
|
327
|
+
const [welcomeResult, gitlabStatus, salesforceStatus, githubStatus, azureStatus, awsStatus, gcloudStatus] =
|
|
328
|
+
await Promise.all([
|
|
329
|
+
logger.time("InteractiveMode.init:welcomeChecks", () =>
|
|
330
|
+
runWelcomeChecks(this.session.model, this.session.modelRegistry.authStorage),
|
|
331
|
+
),
|
|
332
|
+
checkGitLabStatus(getProjectDir()).catch(() => undefined),
|
|
333
|
+
checkSalesforceStatus(getProjectDir()).catch(() => undefined),
|
|
334
|
+
checkGitHubStatus().catch(() => undefined),
|
|
335
|
+
checkAzureStatus().catch(() => undefined),
|
|
336
|
+
checkAwsStatus().catch(() => undefined),
|
|
337
|
+
checkGcloudStatus().catch(() => undefined),
|
|
338
|
+
]);
|
|
339
|
+
|
|
340
|
+
// Refresh user profile in background — fire and forget
|
|
341
|
+
seedProfile().catch(err => logger.warn("Background profile refresh failed", { error: String(err) }));
|
|
354
342
|
const startupQuiet = settings.get("startup.quiet");
|
|
355
343
|
this.#welcomeComponent = undefined;
|
|
356
344
|
|
|
@@ -379,7 +367,6 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
379
367
|
welcomeResult.model,
|
|
380
368
|
services,
|
|
381
369
|
this.#initialUpdateStatus,
|
|
382
|
-
profileStatus,
|
|
383
370
|
);
|
|
384
371
|
|
|
385
372
|
// Setup UI layout
|