@f5xc-salesdemos/xcsh 19.20.0 → 19.20.2

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": "19.20.0",
4
+ "version": "19.20.2",
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",
@@ -50,12 +50,12 @@
50
50
  "dependencies": {
51
51
  "@agentclientprotocol/sdk": "0.16.1",
52
52
  "@mozilla/readability": "^0.6",
53
- "@f5xc-salesdemos/xcsh-stats": "19.20.0",
54
- "@f5xc-salesdemos/pi-agent-core": "19.20.0",
55
- "@f5xc-salesdemos/pi-ai": "19.20.0",
56
- "@f5xc-salesdemos/pi-natives": "19.20.0",
57
- "@f5xc-salesdemos/pi-tui": "19.20.0",
58
- "@f5xc-salesdemos/pi-utils": "19.20.0",
53
+ "@f5xc-salesdemos/xcsh-stats": "19.20.2",
54
+ "@f5xc-salesdemos/pi-agent-core": "19.20.2",
55
+ "@f5xc-salesdemos/pi-ai": "19.20.2",
56
+ "@f5xc-salesdemos/pi-natives": "19.20.2",
57
+ "@f5xc-salesdemos/pi-tui": "19.20.2",
58
+ "@f5xc-salesdemos/pi-utils": "19.20.2",
59
59
  "@sinclair/typebox": "^0.34",
60
60
  "@xterm/headless": "^6.0",
61
61
  "ajv": "^8.20",
@@ -17,17 +17,17 @@ export interface BuildInfo {
17
17
  }
18
18
 
19
19
  export const BUILD_INFO: BuildInfo = {
20
- "version": "19.20.0",
21
- "commit": "218c1d5ef18212bd9c034ea86f80927094c941c1",
22
- "shortCommit": "218c1d5",
20
+ "version": "19.20.2",
21
+ "commit": "1309c9e3c66b4478206dbc6c442e027bf52ed6a4",
22
+ "shortCommit": "1309c9e",
23
23
  "branch": "main",
24
- "tag": "v19.20.0",
25
- "commitDate": "2026-06-09T03:36:14Z",
26
- "buildDate": "2026-06-09T04:39:54.571Z",
24
+ "tag": "v19.20.2",
25
+ "commitDate": "2026-06-09T15:15:43Z",
26
+ "buildDate": "2026-06-09T15:53:34.008Z",
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/218c1d5ef18212bd9c034ea86f80927094c941c1",
32
- "releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v19.20.0"
31
+ "commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/1309c9e3c66b4478206dbc6c442e027bf52ed6a4",
32
+ "releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v19.20.2"
33
33
  };
@@ -328,12 +328,26 @@ export class InternalDocsProtocolHandler implements ProtocolHandler {
328
328
  const profile = shouldSeed ? await seedProfile() : await loadProfile();
329
329
  const content = renderProfileMarkdown(profile);
330
330
 
331
+ const hasOwnership = profile._fieldOwnership && Object.keys(profile._fieldOwnership).length > 0;
332
+ const notes: string[] = [
333
+ "This profile is the authoritative source for person data (manager, partner, territories, role).",
334
+ "Do NOT query Salesforce or other services for fields that are already populated here.",
335
+ ];
336
+ if (hasOwnership) {
337
+ notes.push(
338
+ `Fields owned by external sources: ${Object.entries(profile._fieldOwnership!)
339
+ .map(([k, v]) => `${k} (${v})`)
340
+ .join(", ")}. These are automatically kept in sync.`,
341
+ );
342
+ }
343
+
331
344
  return {
332
345
  url: url.href,
333
346
  content,
334
347
  contentType: "text/markdown",
335
348
  size: Buffer.byteLength(content, "utf-8"),
336
349
  sourcePath: `xcsh://${USER_ROUTE}`,
350
+ notes,
337
351
  };
338
352
  }
339
353
 
@@ -196,6 +196,7 @@ export class InteractiveMode implements InteractiveModeContext {
196
196
  #eventBus?: EventBus;
197
197
  #eventBusUnsubscribers: Array<() => void> = [];
198
198
  #welcomeComponent?: WelcomeComponent;
199
+ #currentPlugins: import("./components/welcome-checks").UnifiedPluginStatus[] = [];
199
200
 
200
201
  constructor(
201
202
  session: AgentSession,
@@ -343,6 +344,7 @@ export class InteractiveMode implements InteractiveModeContext {
343
344
  // Build unified plugin list from service status contributions + marketplace
344
345
  const pluginContributions = this.session.extensionRunner?.getAllRegisteredServiceStatuses() ?? [];
345
346
  const plugins = !startupQuiet ? await buildUnifiedPluginList(pluginContributions).catch(() => []) : [];
347
+ this.#currentPlugins = plugins;
346
348
 
347
349
  const fixableServices: FixableService[] = [];
348
350
  for (const contribution of pluginContributions) {
@@ -953,8 +955,17 @@ export class InteractiveMode implements InteractiveModeContext {
953
955
  if (idx !== -1) {
954
956
  currentServices[idx] = updated;
955
957
  this.#welcomeComponent?.setServices([...currentServices]);
956
- this.ui.requestRender();
957
958
  }
959
+ const pluginIdx = this.#currentPlugins.findIndex(p => p.name.toLowerCase() === service.name.toLowerCase());
960
+ if (pluginIdx !== -1) {
961
+ this.#currentPlugins[pluginIdx] = {
962
+ ...this.#currentPlugins[pluginIdx],
963
+ state: updated.state,
964
+ hint: updated.hint,
965
+ };
966
+ this.#welcomeComponent?.setPlugins([...this.#currentPlugins]);
967
+ }
968
+ this.ui.requestRender();
958
969
  }
959
970
  }
960
971