@f5xc-salesdemos/xcsh 18.46.0 → 18.47.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.46.0",
4
+ "version": "18.47.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.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",
51
+ "@f5xc-salesdemos/xcsh-stats": "18.47.0",
52
+ "@f5xc-salesdemos/pi-agent-core": "18.47.0",
53
+ "@f5xc-salesdemos/pi-ai": "18.47.0",
54
+ "@f5xc-salesdemos/pi-natives": "18.47.0",
55
+ "@f5xc-salesdemos/pi-tui": "18.47.0",
56
+ "@f5xc-salesdemos/pi-utils": "18.47.0",
57
57
  "@sinclair/typebox": "^0.34",
58
58
  "@xterm/headless": "^6.0",
59
59
  "ajv": "^8.18",
@@ -1956,6 +1956,7 @@ export interface SkillsSettings {
1956
1956
  enableCodexUser?: boolean;
1957
1957
  enableClaudeUser?: boolean;
1958
1958
  enableClaudeProject?: boolean;
1959
+ enableClaudePlugins?: boolean;
1959
1960
  enablePiUser?: boolean;
1960
1961
  enablePiProject?: boolean;
1961
1962
  customDirectories?: string[];
@@ -17,17 +17,17 @@ export interface BuildInfo {
17
17
  }
18
18
 
19
19
  export const BUILD_INFO: BuildInfo = {
20
- "version": "18.46.0",
21
- "commit": "c70ff40053bde7f2b4ba3a16404328dd63afcc17",
22
- "shortCommit": "c70ff40",
20
+ "version": "18.47.0",
21
+ "commit": "d0994b94529ed5464212568134c7dc9d75506b21",
22
+ "shortCommit": "d0994b9",
23
23
  "branch": "main",
24
- "tag": "v18.46.0",
25
- "commitDate": "2026-05-06T05:14:35Z",
26
- "buildDate": "2026-05-06T05:34:34.075Z",
24
+ "tag": "v18.47.0",
25
+ "commitDate": "2026-05-06T06:04:50Z",
26
+ "buildDate": "2026-05-06T06:30:34.654Z",
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/c70ff40053bde7f2b4ba3a16404328dd63afcc17",
32
- "releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v18.46.0"
31
+ "commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/d0994b94529ed5464212568134c7dc9d75506b21",
32
+ "releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v18.47.0"
33
33
  };
@@ -399,3 +399,30 @@ export function mapGitHubStatus(status: WelcomeGitHubStatus | undefined): Servic
399
399
  return { name: "GitHub", state: "unauthenticated", hint: "run: gh auth login" };
400
400
  }
401
401
  }
402
+
403
+ export type AzureCheckState = "connected" | "auth_error";
404
+
405
+ export interface WelcomeAzureStatus {
406
+ state: AzureCheckState;
407
+ }
408
+
409
+ export async function checkAzureStatus(): Promise<WelcomeAzureStatus | undefined> {
410
+ try {
411
+ if (!$which("az")) return undefined;
412
+ const result = await $`az account show --output json`.quiet().nothrow();
413
+ return { state: result.exitCode === 0 ? "connected" : "auth_error" };
414
+ } catch (err) {
415
+ logger.warn("Azure startup check failed", { error: String(err) });
416
+ return { state: "auth_error" };
417
+ }
418
+ }
419
+
420
+ export function mapAzureStatus(status: WelcomeAzureStatus | undefined): ServiceStatus {
421
+ if (!status) return { name: "Azure", state: "unavailable", hint: "not installed" };
422
+ switch (status.state) {
423
+ case "connected":
424
+ return { name: "Azure", state: "connected" };
425
+ case "auth_error":
426
+ return { name: "Azure", state: "unauthenticated", hint: "run: az login --use-device-code" };
427
+ }
428
+ }
@@ -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
+ checkAzureStatus,
54
55
  checkGitHubStatus,
55
56
  checkGitLabStatus,
56
57
  checkSalesforceStatus,
58
+ mapAzureStatus,
57
59
  mapContextStatus,
58
60
  mapGitHubStatus,
59
61
  mapGitLabStatus,
@@ -316,14 +318,15 @@ export class InteractiveMode implements InteractiveModeContext {
316
318
  getProjectDir(),
317
319
  );
318
320
 
319
- // Run blocking welcome screen status checks (model + context + gitlab + github + salesforce) in parallel
320
- const [welcomeResult, gitlabStatus, salesforceStatus, githubStatus] = await Promise.all([
321
+ // Run blocking welcome screen status checks (model + context + gitlab + github + salesforce + azure) in parallel
322
+ const [welcomeResult, gitlabStatus, salesforceStatus, githubStatus, azureStatus] = await Promise.all([
321
323
  logger.time("InteractiveMode.init:welcomeChecks", () =>
322
324
  runWelcomeChecks(this.session.model, this.session.modelRegistry.authStorage),
323
325
  ),
324
326
  checkGitLabStatus(getProjectDir()).catch(() => undefined),
325
327
  checkSalesforceStatus(getProjectDir()).catch(() => undefined),
326
328
  checkGitHubStatus().catch(() => undefined),
329
+ checkAzureStatus().catch(() => undefined),
327
330
  ]);
328
331
 
329
332
  const startupQuiet = settings.get("startup.quiet");
@@ -344,6 +347,7 @@ export class InteractiveMode implements InteractiveModeContext {
344
347
  mapGitLabStatus(gitlabStatus),
345
348
  mapGitHubStatus(githubStatus),
346
349
  mapSalesforceStatus(salesforceStatus),
350
+ mapAzureStatus(azureStatus),
347
351
  ]
348
352
  : [];
349
353
  this.#welcomeComponent = new WelcomeComponent(