@f5xc-salesdemos/xcsh 19.40.0 → 19.40.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.40.0",
4
+ "version": "19.40.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",
@@ -51,13 +51,13 @@
51
51
  "dependencies": {
52
52
  "@agentclientprotocol/sdk": "0.16.1",
53
53
  "@mozilla/readability": "^0.6",
54
- "@f5xc-salesdemos/xcsh-stats": "19.40.0",
55
- "@f5xc-salesdemos/pi-agent-core": "19.40.0",
56
- "@f5xc-salesdemos/pi-ai": "19.40.0",
57
- "@f5xc-salesdemos/pi-natives": "19.40.0",
58
- "@f5xc-salesdemos/pi-resource-management": "19.40.0",
59
- "@f5xc-salesdemos/pi-tui": "19.40.0",
60
- "@f5xc-salesdemos/pi-utils": "19.40.0",
54
+ "@f5xc-salesdemos/xcsh-stats": "19.40.2",
55
+ "@f5xc-salesdemos/pi-agent-core": "19.40.2",
56
+ "@f5xc-salesdemos/pi-ai": "19.40.2",
57
+ "@f5xc-salesdemos/pi-natives": "19.40.2",
58
+ "@f5xc-salesdemos/pi-resource-management": "19.40.2",
59
+ "@f5xc-salesdemos/pi-tui": "19.40.2",
60
+ "@f5xc-salesdemos/pi-utils": "19.40.2",
61
61
  "@sinclair/typebox": "^0.34",
62
62
  "@xterm/headless": "^6.0",
63
63
  "ajv": "^8.20",
@@ -17,17 +17,17 @@ export interface BuildInfo {
17
17
  }
18
18
 
19
19
  export const BUILD_INFO: BuildInfo = {
20
- "version": "19.40.0",
21
- "commit": "e25f0c5f25c2bc47d8e50a69b4ad6ac4edc7c3e5",
22
- "shortCommit": "e25f0c5",
20
+ "version": "19.40.2",
21
+ "commit": "02a066ca415f314598846605acb617dd08685d70",
22
+ "shortCommit": "02a066c",
23
23
  "branch": "main",
24
- "tag": "v19.40.0",
25
- "commitDate": "2026-06-22T20:09:25Z",
26
- "buildDate": "2026-06-22T20:31:47.773Z",
24
+ "tag": "v19.40.2",
25
+ "commitDate": "2026-06-23T03:09:12Z",
26
+ "buildDate": "2026-06-23T03:34:36.789Z",
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/e25f0c5f25c2bc47d8e50a69b4ad6ac4edc7c3e5",
32
- "releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v19.40.0"
31
+ "commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/02a066ca415f314598846605acb617dd08685d70",
32
+ "releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v19.40.2"
33
33
  };
@@ -61,7 +61,12 @@ function renderResource(resource: string, catalog: ConsoleCatalogData): string {
61
61
  const doc = (parseYaml(raw) ?? {}) as Record<string, unknown>;
62
62
  const console_ = (doc.console ?? {}) as Record<string, unknown>;
63
63
  const lines = [`# ${(doc.label as string | undefined) ?? key}`, ""];
64
- if (console_.route_pattern) lines.push(`**Route:** \`${console_.route_pattern}\``, "");
64
+ if (console_.route_pattern) {
65
+ const fullRoute = console_.route_prefix
66
+ ? `${console_.route_prefix}${console_.route_pattern}`
67
+ : console_.route_pattern;
68
+ lines.push(`**Route:** \`${fullRoute}\``, "");
69
+ }
65
70
  if (Array.isArray(console_.menu_path)) lines.push(`**Menu:** ${(console_.menu_path as string[]).join(" › ")}`, "");
66
71
  const ops = operationsFor(key, catalog);
67
72
  if (ops.length) {
@@ -33,6 +33,8 @@ Main branch: {{git.mainBranch}}
33
33
  ## F5 XC Platform Context
34
34
 
35
35
  You are currently connected to F5 XC tenant: {{context.tenant}}, namespace: {{context.namespace}}.
36
+ {{#if context.apiUrl}}Console URL: {{context.apiUrl}}.
37
+ When navigating to the F5 XC console, you **MUST** use this URL as the base. Do NOT construct a URL from the tenant name — different environments use different domain patterns.{{/if}}
36
38
  Credential source: {{context.credentialSource}}.
37
39
  Auth status: {{context.authStatus}}.
38
40
  All F5 XC operations should target this tenant and namespace unless explicitly told otherwise.
@@ -170,6 +170,8 @@ Configs you didn't validate become incidents. Assumptions you didn't test fail u
170
170
  ## F5 XC Platform Context
171
171
 
172
172
  You are currently connected to F5 XC tenant: {{context.tenant}}, namespace: {{context.namespace}}.
173
+ {{#if context.apiUrl}}Console URL: {{context.apiUrl}}.
174
+ When navigating to the F5 XC console, you **MUST** use this URL as the base. Do NOT construct a URL from the tenant name — different environments use different domain patterns.{{/if}}
173
175
  Credential source: {{context.credentialSource}}.
174
176
  Auth status: {{context.authStatus}}.
175
177
  All F5 XC operations should target this tenant and namespace unless explicitly told otherwise.
@@ -2,6 +2,8 @@ Navigates, clicks, types, scrolls, drags, queries DOM content, and captures scre
2
2
 
3
3
  <instruction>
4
4
  - `"open"` starts a headless session (or implicitly on first action); `"goto"` navigates to `url`; `"close"` releases the browser
5
+ - The browser launches in **headless** mode by default (no visible window). If the user asks to "open Chrome", "show a browser", or needs to see the browser window, tell them to run `/browser visible` first — this switches to a visible Chrome window. Use `/browser headless` to switch back.
6
+ - `catalog_workflow_runner` always uses a visible Chrome session — it does not share this setting.
5
7
  - `"observe"` captures a numbered accessibility snapshot — prefer `click_id`/`type_id`/`fill_id` using returned `element_id` values; flags: `include_all`, `viewport_only`
6
8
  - `"click"`, `"type"`, `"fill"`, `"press"`, `"scroll"`, `"drag"` for selector-based interactions — prefer ARIA/text selectors (`p-aria/[name="Sign in"]`, `p-text/Continue`) over brittle CSS
7
9
  - `"click_id"`, `"type_id"`, `"fill_id"` to interact with observed elements without selectors
package/src/sdk.ts CHANGED
@@ -1371,6 +1371,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1371
1371
  namespace: string;
1372
1372
  credentialSource: string;
1373
1373
  authStatus: string;
1374
+ apiUrl?: string;
1374
1375
  envVars?: Record<string, string>;
1375
1376
  }
1376
1377
  | undefined;
@@ -1387,6 +1388,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1387
1388
  namespace: status.activeContextNamespace ?? "default",
1388
1389
  credentialSource: status.credentialSource,
1389
1390
  authStatus: status.authStatus,
1391
+ apiUrl: status.activeContextUrl ?? undefined,
1390
1392
  };
1391
1393
  const sensitiveKeys = contextServiceRef?.instance?.getActiveSensitiveKeys();
1392
1394
  const ctxEnv = createContextEnv(settings, sensitiveKeys?.size ? { sensitiveKeys } : undefined);
@@ -961,11 +961,12 @@ export class BrowserTool implements AgentTool<typeof browserSchema, BrowserToolD
961
961
  const page = await untilAborted(signal, () => this.#resetBrowser(params));
962
962
  const viewport = page.viewport();
963
963
  details.viewport = viewport ?? DEFAULT_VIEWPORT;
964
- return toolResult(details).text("Opened headless browser session").done();
964
+ const mode = this.#currentHeadless ? "headless" : "visible";
965
+ return toolResult(details).text(`Opened browser session (${mode})`).done();
965
966
  }
966
967
  case "close": {
967
968
  await untilAborted(signal, () => this.#closeBrowser());
968
- return toolResult(details).text("Closed headless browser session").done();
969
+ return toolResult(details).text("Closed browser session").done();
969
970
  }
970
971
  case "goto": {
971
972
  const url = ensureParam(params.url, "url", params.action);