@f5xc-salesdemos/xcsh 18.45.1 → 18.46.0
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.
|
|
4
|
+
"version": "18.46.0",
|
|
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.
|
|
52
|
-
"@f5xc-salesdemos/pi-agent-core": "18.
|
|
53
|
-
"@f5xc-salesdemos/pi-ai": "18.
|
|
54
|
-
"@f5xc-salesdemos/pi-natives": "18.
|
|
55
|
-
"@f5xc-salesdemos/pi-tui": "18.
|
|
56
|
-
"@f5xc-salesdemos/pi-utils": "18.
|
|
51
|
+
"@f5xc-salesdemos/xcsh-stats": "18.46.0",
|
|
52
|
+
"@f5xc-salesdemos/pi-agent-core": "18.46.0",
|
|
53
|
+
"@f5xc-salesdemos/pi-ai": "18.46.0",
|
|
54
|
+
"@f5xc-salesdemos/pi-natives": "18.46.0",
|
|
55
|
+
"@f5xc-salesdemos/pi-tui": "18.46.0",
|
|
56
|
+
"@f5xc-salesdemos/pi-utils": "18.46.0",
|
|
57
57
|
"@sinclair/typebox": "^0.34",
|
|
58
58
|
"@xterm/headless": "^6.0",
|
|
59
59
|
"ajv": "^8.18",
|
package/src/cli/args.ts
CHANGED
|
@@ -33,6 +33,7 @@ export interface Args {
|
|
|
33
33
|
models?: string[];
|
|
34
34
|
tools?: string[];
|
|
35
35
|
noTools?: boolean;
|
|
36
|
+
noMcp?: boolean;
|
|
36
37
|
noLsp?: boolean;
|
|
37
38
|
noPty?: boolean;
|
|
38
39
|
hooks?: string[];
|
|
@@ -114,6 +115,8 @@ export function parseArgs(args: string[], extensionFlags?: Map<string, { type: "
|
|
|
114
115
|
result.noLsp = true;
|
|
115
116
|
} else if (arg === "--no-pty") {
|
|
116
117
|
result.noPty = true;
|
|
118
|
+
} else if (arg === "--no-mcp") {
|
|
119
|
+
result.noMcp = true;
|
|
117
120
|
} else if (arg === "--tools" && i + 1 < args.length) {
|
|
118
121
|
const toolNames = args[++i]
|
|
119
122
|
.split(",")
|
package/src/commands/launch.ts
CHANGED
|
@@ -76,6 +76,9 @@ export default class Index extends Command {
|
|
|
76
76
|
"no-tools": Flags.boolean({
|
|
77
77
|
description: "Disable all built-in tools",
|
|
78
78
|
}),
|
|
79
|
+
"no-mcp": Flags.boolean({
|
|
80
|
+
description: "Disable MCP server discovery and tools",
|
|
81
|
+
}),
|
|
79
82
|
"no-lsp": Flags.boolean({
|
|
80
83
|
description: "Disable LSP tools, formatting, and diagnostics",
|
|
81
84
|
}),
|
|
@@ -17,17 +17,17 @@ export interface BuildInfo {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const BUILD_INFO: BuildInfo = {
|
|
20
|
-
"version": "18.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "18.46.0",
|
|
21
|
+
"commit": "c70ff40053bde7f2b4ba3a16404328dd63afcc17",
|
|
22
|
+
"shortCommit": "c70ff40",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v18.
|
|
25
|
-
"commitDate": "2026-05-
|
|
26
|
-
"buildDate": "2026-05-
|
|
24
|
+
"tag": "v18.46.0",
|
|
25
|
+
"commitDate": "2026-05-06T05:14:35Z",
|
|
26
|
+
"buildDate": "2026-05-06T05:34:34.075Z",
|
|
27
27
|
"dirty": false,
|
|
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.
|
|
31
|
+
"commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/c70ff40053bde7f2b4ba3a16404328dd63afcc17",
|
|
32
|
+
"releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v18.46.0"
|
|
33
33
|
};
|
package/src/main.ts
CHANGED
|
@@ -331,6 +331,23 @@ export async function checkSalesforceStatus(_cwd: string): Promise<WelcomeSalesf
|
|
|
331
331
|
}
|
|
332
332
|
}
|
|
333
333
|
|
|
334
|
+
export type GitHubCheckState = "connected" | "auth_error";
|
|
335
|
+
|
|
336
|
+
export interface WelcomeGitHubStatus {
|
|
337
|
+
state: GitHubCheckState;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
export async function checkGitHubStatus(): Promise<WelcomeGitHubStatus | undefined> {
|
|
341
|
+
try {
|
|
342
|
+
if (!$which("gh")) return undefined;
|
|
343
|
+
const result = await $`gh auth status`.quiet().nothrow();
|
|
344
|
+
return { state: result.exitCode === 0 ? "connected" : "auth_error" };
|
|
345
|
+
} catch (err) {
|
|
346
|
+
logger.warn("GitHub startup check failed", { error: String(err) });
|
|
347
|
+
return { state: "auth_error" };
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
334
351
|
export type ServiceState = "connected" | "unauthenticated" | "unavailable";
|
|
335
352
|
|
|
336
353
|
export interface ServiceStatus {
|
|
@@ -372,3 +389,13 @@ export function mapSalesforceStatus(status: WelcomeSalesforceStatus | undefined)
|
|
|
372
389
|
return { name: "Salesforce", state: "unauthenticated", hint: "run: sf org login web" };
|
|
373
390
|
}
|
|
374
391
|
}
|
|
392
|
+
|
|
393
|
+
export function mapGitHubStatus(status: WelcomeGitHubStatus | undefined): ServiceStatus {
|
|
394
|
+
if (!status) return { name: "GitHub", state: "unavailable", hint: "not installed" };
|
|
395
|
+
switch (status.state) {
|
|
396
|
+
case "connected":
|
|
397
|
+
return { name: "GitHub", state: "connected" };
|
|
398
|
+
case "auth_error":
|
|
399
|
+
return { name: "GitHub", state: "unauthenticated", hint: "run: gh auth login" };
|
|
400
|
+
}
|
|
401
|
+
}
|
|
@@ -51,9 +51,11 @@ import { StatusLineComponent } from "./components/status-line";
|
|
|
51
51
|
import type { ToolExecutionHandle } from "./components/tool-execution";
|
|
52
52
|
import { type UpdateStatus, WelcomeComponent } from "./components/welcome";
|
|
53
53
|
import {
|
|
54
|
+
checkGitHubStatus,
|
|
54
55
|
checkGitLabStatus,
|
|
55
56
|
checkSalesforceStatus,
|
|
56
57
|
mapContextStatus,
|
|
58
|
+
mapGitHubStatus,
|
|
57
59
|
mapGitLabStatus,
|
|
58
60
|
mapSalesforceStatus,
|
|
59
61
|
runWelcomeChecks,
|
|
@@ -314,13 +316,14 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
314
316
|
getProjectDir(),
|
|
315
317
|
);
|
|
316
318
|
|
|
317
|
-
// Run blocking welcome screen status checks (model + context + gitlab + salesforce) in parallel
|
|
318
|
-
const [welcomeResult, gitlabStatus, salesforceStatus] = await Promise.all([
|
|
319
|
+
// Run blocking welcome screen status checks (model + context + gitlab + github + salesforce) in parallel
|
|
320
|
+
const [welcomeResult, gitlabStatus, salesforceStatus, githubStatus] = await Promise.all([
|
|
319
321
|
logger.time("InteractiveMode.init:welcomeChecks", () =>
|
|
320
322
|
runWelcomeChecks(this.session.model, this.session.modelRegistry.authStorage),
|
|
321
323
|
),
|
|
322
324
|
checkGitLabStatus(getProjectDir()).catch(() => undefined),
|
|
323
325
|
checkSalesforceStatus(getProjectDir()).catch(() => undefined),
|
|
326
|
+
checkGitHubStatus().catch(() => undefined),
|
|
324
327
|
]);
|
|
325
328
|
|
|
326
329
|
const startupQuiet = settings.get("startup.quiet");
|
|
@@ -339,6 +342,7 @@ export class InteractiveMode implements InteractiveModeContext {
|
|
|
339
342
|
? [
|
|
340
343
|
mapContextStatus(welcomeResult.context ?? { state: "no_context" }),
|
|
341
344
|
mapGitLabStatus(gitlabStatus),
|
|
345
|
+
mapGitHubStatus(githubStatus),
|
|
342
346
|
mapSalesforceStatus(salesforceStatus),
|
|
343
347
|
]
|
|
344
348
|
: [];
|