@f5-sales-demo/xcsh 19.57.0 → 19.57.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": "@f5-sales-demo/xcsh",
4
- "version": "19.57.0",
4
+ "version": "19.57.1",
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",
@@ -55,13 +55,13 @@
55
55
  "dependencies": {
56
56
  "@agentclientprotocol/sdk": "0.16.1",
57
57
  "@mozilla/readability": "^0.6",
58
- "@f5-sales-demo/xcsh-stats": "19.57.0",
59
- "@f5-sales-demo/pi-agent-core": "19.57.0",
60
- "@f5-sales-demo/pi-ai": "19.57.0",
61
- "@f5-sales-demo/pi-natives": "19.57.0",
62
- "@f5-sales-demo/pi-resource-management": "19.57.0",
63
- "@f5-sales-demo/pi-tui": "19.57.0",
64
- "@f5-sales-demo/pi-utils": "19.57.0",
58
+ "@f5-sales-demo/xcsh-stats": "19.57.1",
59
+ "@f5-sales-demo/pi-agent-core": "19.57.1",
60
+ "@f5-sales-demo/pi-ai": "19.57.1",
61
+ "@f5-sales-demo/pi-natives": "19.57.1",
62
+ "@f5-sales-demo/pi-resource-management": "19.57.1",
63
+ "@f5-sales-demo/pi-tui": "19.57.1",
64
+ "@f5-sales-demo/pi-utils": "19.57.1",
65
65
  "@sinclair/typebox": "^0.34",
66
66
  "@xterm/headless": "^6.0",
67
67
  "ajv": "^8.20",
@@ -284,7 +284,7 @@ async function loadExtension(
284
284
  const resolvedPath = resolvePath(extensionPath, cwd);
285
285
 
286
286
  try {
287
- const module = await import(resolvedPath);
287
+ const module = await logger.time("ext:loadModule", () => import(resolvedPath));
288
288
  const factory = (module.default ?? module) as ExtensionFactory;
289
289
 
290
290
  if (typeof factory !== "function") {
@@ -295,7 +295,13 @@ async function loadExtension(
295
295
  }
296
296
 
297
297
  const extension = createExtension(extensionPath, resolvedPath);
298
- const api = new ConcreteExtensionAPI(await import("@f5-sales-demo/xcsh"), extension, runtime, cwd, eventBus);
298
+ const api = new ConcreteExtensionAPI(
299
+ await logger.time("ext:barrelImport", () => import("@f5-sales-demo/xcsh")),
300
+ extension,
301
+ runtime,
302
+ cwd,
303
+ eventBus,
304
+ );
299
305
  await factory(api);
300
306
 
301
307
  return { extension, error: null };
@@ -316,7 +322,13 @@ export async function loadExtensionFromFactory(
316
322
  name = "<inline>",
317
323
  ): Promise<Extension> {
318
324
  const extension = createExtension(name, name);
319
- const api = new ConcreteExtensionAPI(await import("@f5-sales-demo/xcsh"), extension, runtime, cwd, eventBus);
325
+ const api = new ConcreteExtensionAPI(
326
+ await logger.time("ext:barrelImport", () => import("@f5-sales-demo/xcsh")),
327
+ extension,
328
+ runtime,
329
+ cwd,
330
+ eventBus,
331
+ );
320
332
  await factory(api);
321
333
  return extension;
322
334
  }
@@ -540,7 +552,9 @@ export async function discoverAndLoadExtensions(
540
552
  };
541
553
 
542
554
  // 1. Discover extension modules via capability API (native .omp/.pi only)
543
- const discovered = await loadCapability<ExtensionModule>(extensionModuleCapability.id, { cwd });
555
+ const discovered = await logger.time("ext:discoverCapability", () =>
556
+ loadCapability<ExtensionModule>(extensionModuleCapability.id, { cwd }),
557
+ );
544
558
  for (const ext of discovered.items) {
545
559
  if (ext._source.provider !== "native") continue;
546
560
  if (isDisabledName(ext.name)) continue;
@@ -548,29 +562,31 @@ export async function discoverAndLoadExtensions(
548
562
  }
549
563
 
550
564
  // 2. Discover extension entry points from installed plugins (node_modules path)
551
- addPaths(await getAllPluginExtensionPaths(cwd));
565
+ addPaths(await logger.time("ext:pluginPaths", () => getAllPluginExtensionPaths(cwd)));
552
566
 
553
567
  // 2b. Discover extension entry points from marketplace-cached plugins
554
- for (const root of getPreloadedPluginRoots()) {
555
- try {
556
- const pkgPath = path.join(root.path, "package.json");
557
- const pkg = await Bun.file(pkgPath).json();
558
- const manifest = pkg?.xcsh ?? pkg?.pi;
559
- const extensions = manifest?.extensions;
560
- if (Array.isArray(extensions)) {
561
- for (const entry of extensions) {
562
- if (typeof entry !== "string") continue;
563
- if (path.isAbsolute(entry) || entry.includes("..")) continue;
564
- const resolved = path.resolve(root.path, entry);
565
- if (!resolved.startsWith(root.path + path.sep) && resolved !== root.path) continue;
566
- if (isDisabledName(getExtensionNameFromPath(resolved))) continue;
567
- addPath(resolved);
568
+ await logger.time("ext:marketplaceRoots", async () => {
569
+ for (const root of getPreloadedPluginRoots()) {
570
+ try {
571
+ const pkgPath = path.join(root.path, "package.json");
572
+ const pkg = await Bun.file(pkgPath).json();
573
+ const manifest = pkg?.xcsh ?? pkg?.pi;
574
+ const extensions = manifest?.extensions;
575
+ if (Array.isArray(extensions)) {
576
+ for (const entry of extensions) {
577
+ if (typeof entry !== "string") continue;
578
+ if (path.isAbsolute(entry) || entry.includes("..")) continue;
579
+ const resolved = path.resolve(root.path, entry);
580
+ if (!resolved.startsWith(root.path + path.sep) && resolved !== root.path) continue;
581
+ if (isDisabledName(getExtensionNameFromPath(resolved))) continue;
582
+ addPath(resolved);
583
+ }
568
584
  }
585
+ } catch {
586
+ // No package.json or invalid — skip
569
587
  }
570
- } catch {
571
- // No package.json or invalid — skip
572
588
  }
573
- }
589
+ });
574
590
 
575
591
  // 3. Explicitly configured paths
576
592
  for (const configuredPath of configuredPaths) {
@@ -601,7 +617,7 @@ export async function discoverAndLoadExtensions(
601
617
  }
602
618
 
603
619
  const resolvedEventBus = eventBus ?? new EventBus();
604
- const result = await loadExtensions(allPaths, cwd, resolvedEventBus);
605
- await loadBundledExtensions(result, cwd, resolvedEventBus, isDisabledName);
620
+ const result = await logger.time("ext:loadLoop", () => loadExtensions(allPaths, cwd, resolvedEventBus));
621
+ await logger.time("ext:loadBundled", () => loadBundledExtensions(result, cwd, resolvedEventBus, isDisabledName));
606
622
  return result;
607
623
  }
@@ -17,17 +17,17 @@ export interface BuildInfo {
17
17
  }
18
18
 
19
19
  export const BUILD_INFO: BuildInfo = {
20
- "version": "19.57.0",
21
- "commit": "9b508d8af3633290ce801f2ca9956dd22df78e30",
22
- "shortCommit": "9b508d8",
20
+ "version": "19.57.1",
21
+ "commit": "afdece90c0203627849699502d77b189fd3fb320",
22
+ "shortCommit": "afdece9",
23
23
  "branch": "main",
24
- "tag": "v19.57.0",
25
- "commitDate": "2026-07-04T20:19:08Z",
26
- "buildDate": "2026-07-04T20:54:40.287Z",
24
+ "tag": "v19.57.1",
25
+ "commitDate": "2026-07-04T20:58:43Z",
26
+ "buildDate": "2026-07-04T21:21:44.204Z",
27
27
  "dirty": true,
28
28
  "prNumber": "",
29
29
  "repoUrl": "https://github.com/f5-sales-demo/xcsh",
30
30
  "repoSlug": "f5-sales-demo/xcsh",
31
- "commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/9b508d8af3633290ce801f2ca9956dd22df78e30",
32
- "releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.57.0"
31
+ "commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/afdece90c0203627849699502d77b189fd3fb320",
32
+ "releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.57.1"
33
33
  };