@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.
|
|
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.
|
|
59
|
-
"@f5-sales-demo/pi-agent-core": "19.57.
|
|
60
|
-
"@f5-sales-demo/pi-ai": "19.57.
|
|
61
|
-
"@f5-sales-demo/pi-natives": "19.57.
|
|
62
|
-
"@f5-sales-demo/pi-resource-management": "19.57.
|
|
63
|
-
"@f5-sales-demo/pi-tui": "19.57.
|
|
64
|
-
"@f5-sales-demo/pi-utils": "19.57.
|
|
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(
|
|
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(
|
|
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
|
|
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
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
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.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "19.57.1",
|
|
21
|
+
"commit": "afdece90c0203627849699502d77b189fd3fb320",
|
|
22
|
+
"shortCommit": "afdece9",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v19.57.
|
|
25
|
-
"commitDate": "2026-07-04T20:
|
|
26
|
-
"buildDate": "2026-07-
|
|
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/
|
|
32
|
-
"releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.57.
|
|
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
|
};
|