@f5-sales-demo/xcsh 19.62.12 → 19.62.13
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.62.
|
|
4
|
+
"version": "19.62.13",
|
|
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",
|
|
@@ -56,13 +56,13 @@
|
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@agentclientprotocol/sdk": "0.16.1",
|
|
58
58
|
"@mozilla/readability": "^0.6",
|
|
59
|
-
"@f5-sales-demo/xcsh-stats": "19.62.
|
|
60
|
-
"@f5-sales-demo/pi-agent-core": "19.62.
|
|
61
|
-
"@f5-sales-demo/pi-ai": "19.62.
|
|
62
|
-
"@f5-sales-demo/pi-natives": "19.62.
|
|
63
|
-
"@f5-sales-demo/pi-resource-management": "19.62.
|
|
64
|
-
"@f5-sales-demo/pi-tui": "19.62.
|
|
65
|
-
"@f5-sales-demo/pi-utils": "19.62.
|
|
59
|
+
"@f5-sales-demo/xcsh-stats": "19.62.13",
|
|
60
|
+
"@f5-sales-demo/pi-agent-core": "19.62.13",
|
|
61
|
+
"@f5-sales-demo/pi-ai": "19.62.13",
|
|
62
|
+
"@f5-sales-demo/pi-natives": "19.62.13",
|
|
63
|
+
"@f5-sales-demo/pi-resource-management": "19.62.13",
|
|
64
|
+
"@f5-sales-demo/pi-tui": "19.62.13",
|
|
65
|
+
"@f5-sales-demo/pi-utils": "19.62.13",
|
|
66
66
|
"@sinclair/typebox": "^0.34",
|
|
67
67
|
"@xterm/headless": "^6.0",
|
|
68
68
|
"ajv": "^8.20",
|
|
@@ -17,17 +17,17 @@ export interface BuildInfo {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const BUILD_INFO: BuildInfo = {
|
|
20
|
-
"version": "19.62.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "19.62.13",
|
|
21
|
+
"commit": "d2b79662835d4c9663c10140f8347189603228ee",
|
|
22
|
+
"shortCommit": "d2b7966",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v19.62.
|
|
25
|
-
"commitDate": "2026-07-
|
|
26
|
-
"buildDate": "2026-07-12T14:
|
|
24
|
+
"tag": "v19.62.13",
|
|
25
|
+
"commitDate": "2026-07-12T14:09:18Z",
|
|
26
|
+
"buildDate": "2026-07-12T14:32:46.087Z",
|
|
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.62.
|
|
31
|
+
"commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/d2b79662835d4c9663c10140f8347189603228ee",
|
|
32
|
+
"releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.62.13"
|
|
33
33
|
};
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
import type { ConsoleCatalogData } from "./console-catalog-types";
|
|
4
4
|
|
|
5
|
-
export const CONSOLE_CATALOG_VERSION = "
|
|
5
|
+
export const CONSOLE_CATALOG_VERSION = "ebdefa8d60694db988f789202b381d8552d606cc";
|
|
6
6
|
|
|
7
7
|
export const CONSOLE_CATALOG_DATA: ConsoleCatalogData = {
|
|
8
|
-
version: "
|
|
8
|
+
version: "ebdefa8d60694db988f789202b381d8552d606cc",
|
|
9
9
|
workflows: {
|
|
10
10
|
"address-allocator/create":
|
|
11
11
|
'schema: urn:xcsh:console:workflow:v1\nid: address-allocator-create\nlabel: Create IP Address Allocators\nresource: address-allocator\noperation: create\npreconditions:\n - user_logged_in\n - namespace_selected\n - "role_minimum: admin"\nparams:\n namespace:\n required: true\n description: Target namespace\n example: demo\n name:\n required: true\n description: IP Address Allocators name (lowercase alphanumeric and hyphens)\n example: example-address-allocator\n address_allocator_mode:\n required: true\n description: Address Allocator Mode\n allocation_unit:\n required: false\n description: Allocation Unit\n default: 0\n address_pool:\n required: false\n description: Address Pool\n default: value\n address_allocation_scheme:\n required: false\n description: "Server-required: Field should be not nil"\n default: value\nsteps:\n - id: navigate-to-list\n action: navigate\n url: /web/workspaces/multi-cloud-network-connect/manage/networking/legacy_network_configuration/address_allocators\n wait_for: text(\'IP Address Allocators\')\n description: Navigate to IP Address Allocators list page\n - id: click-add-tab\n action: click\n selector: text(\'Add IP Address Allocator\')\n wait_for: textbox[name=\'Name\']\n description: Click Add IP Address Allocator to open the create form\n - id: fill-name\n action: fill\n selector: textbox[name=\'Name\']\n value: "{name}"\n description: Enter Name\n - id: select-address_allocator_mode\n action: select\n selector: listbox\n context: Address Allocator Mode section\n value: "{address_allocator_mode}"\n description: Select Address Allocator Mode\n - id: fill-allocation_unit\n action: fill\n selector: spinbutton[name=\'Allocation Unit\']\n value: "{allocation_unit}"\n description: Set Allocation Unit\n - id: fill-address_pool\n action: fill\n selector: ngx-datatable input.form-control\n context: Address Pool table\n value: "{address_pool}"\n description: Enter Address Pool in the existing table row (no Add Item needed — the table ships one empty row)\n - id: select-address_allocation_scheme\n action: select\n selector: listbox\n context: Address Allocation Scheme section\n value: "{address_allocation_scheme}"\n description: Select Address Allocation Scheme\n - id: save\n action: click\n selector: "[class*=\'save-bt\'],[class*=\'submit-button\']"\n context: footer\n wait_for: text(\'{name}\')\n wait_timeout_ms: 30000\n description: Save/submit the form (union selector matches save-bt OR submit-button)\npostconditions:\n - resource_list_page_visible\n - "resource_name_in_list: {name}"\nmetadata:\n confidence: inferred\n discovered_at: 2026-06-24\n console_version: "2025.06"\n notes: Auto-generated by scripts/generate-workflows.ts from api-specs-enriched field metadata.\n',
|
|
@@ -270,7 +270,7 @@ export const CONSOLE_CATALOG_DATA: ConsoleCatalogData = {
|
|
|
270
270
|
"demos/mcn-site-to-site-teardown":
|
|
271
271
|
'schema: "urn:xcsh:console:workflow:v1"\nid: "mcn-site-to-site-teardown"\nlabel: "MCN Site-to-Site Teardown — Delete Site Mesh Group + AWS VPC Site"\nresource:\n - "site-mesh-group"\n - "aws-vpc-site"\noperation: "demo"\n\npreconditions:\n - "user_logged_in"\n - "role_minimum: admin"\n\nparams:\n site_name:\n required: true\n description: "AWS VPC site name"\n example: "aws-site-east"\n mesh_name:\n required: true\n description: "Site mesh group name"\n example: "east-west-mesh"\n\nsteps:\n - id: "navigate-mesh"\n action: "navigate"\n url: "/web/workspaces/multi-cloud-network-connect/manage/networking/site_to_site_connectivity/site_mesh_groups"\n wait_for: "text(\'Site Mesh Groups\')"\n description: "Navigate to Site Mesh Groups"\n\n - id: "delete-mesh"\n action: "click"\n selector: "button:text(\'...\')"\n context: "row containing {mesh_name}"\n description: "Open actions menu for the Site Mesh Group"\n then:\n - id: "confirm-delete-mesh"\n action: "click"\n selector: "option:text(\'Delete\')"\n description: "Select Delete from actions menu"\n\n - id: "navigate-aws-sites"\n action: "navigate"\n url: "/web/workspaces/multi-cloud-network-connect/manage/site_management/legacy_configs/aws_vpc_site"\n wait_for: "text(\'AWS VPC Sites\')"\n description: "Navigate to AWS VPC Sites"\n\n - id: "delete-aws-site"\n action: "click"\n selector: "button:text(\'...\')"\n context: "row containing {site_name}"\n description: "Open actions menu for the AWS VPC Site"\n then:\n - id: "confirm-delete-site"\n action: "click"\n selector: "option:text(\'Delete\')"\n description: "Select Delete from actions menu"\n\npostconditions:\n - "resource_deleted: {mesh_name}"\n - "resource_deleted: {site_name}"\n\nmetadata:\n confidence: "draft"\n discovered_at: "2026-06-16"\n console_version: "2025.06"\n estimated_duration_seconds: 45\n notes: >\n Teardown companion for mcn-site-to-site demo. Deletes mesh group first\n (depends on sites), then the AWS VPC site. MCN workspace is tenant-scoped.\n',
|
|
272
272
|
"demos/waap-full-stack":
|
|
273
|
-
'schema: "urn:xcsh:console:workflow:v1"\nid: "waap-full-stack-demo"\nlabel: "WAAP Full Stack Demo — Origin Pool + App Firewall + HTTP Load Balancer"\nresource:\n - "origin-pool"\n - "app-firewall"\n - "http-load-balancer"\noperation: "demo"\n\npreconditions:\n - "user_logged_in"\n - "namespace_selected"\n - "role_minimum: admin"\n\nparams:\n namespace:\n required: true\n description: "Target namespace for all resources"\n example: "demo"\n app_name:\n required: true\n description: "Base name for all resources (used as prefix)"\n example: "example-app"\n domain:\n required: true\n description: "Domain for the HTTP Load Balancer"\n example: "app.example.com"\n origin_server:\n required: true\n description: "IP address or DNS name of the origin server"\n example: "10.0.0.1"\n origin_port:\n required: true\n type: "number"\n description: "Port number for the origin server"\n example: 8080\n waf_mode:\n required: false\n description: "WAF enforcement mode: Monitoring or Blocking"\n example: "Blocking"\n default: "Blocking"\n\nsteps:\n - id: "screenshot-start"\n action: "screenshot"\n screenshot_name: "waap-demo-start"\n description: "Capture starting state"\n\n - id: "create-origin-pool"\n action: "run-workflow"\n workflow: "origin-pool/create"\n with:\n namespace: "{namespace}"\n name: "{app_name}-pool"\n origin_server: "{origin_server}"\n port: "{origin_port}"\n description: "Step 1: Create an origin pool pointing to the backend server"\n\n - id: "screenshot-origin-pool-created"\n action: "screenshot"\n screenshot_name: "waap-demo-origin-pool-created"\n description: "Capture origin pool creation result"\n\n - id: "create-app-firewall"\n action: "run-workflow"\n workflow: "app-firewall/create"\n with:\n namespace: "{namespace}"\n name: "{app_name}-waf"\n enforcement_mode: "{waf_mode}"\n description: "Step 2: Create an App Firewall policy in Blocking mode"\n\n - id: "screenshot-app-firewall-created"\n action: "screenshot"\n screenshot_name: "waap-demo-app-firewall-created"\n description: "Capture app firewall creation result"\n\n - id: "navigate-to-http-lb"\n action: "navigate"\n url: "/web/workspaces/web-app-and-api-protection/namespaces/{namespace}/manage/load_balancers/http_loadbalancers"\n wait_for: "text(\'HTTP Load Balancers\')"\n description: "Step 3: Navigate to HTTP Load Balancers list"\n\n - id: "click-add-http-lb"\n action: "click"\n selector: "tab:text(\'Add HTTP Load Balancer\')"\n wait_for: "textbox[name=\'Name\']"\n description: "Open the Add HTTP Load Balancer form"\n note: "Tab element, not a button"\n\n - id: "fill-lb-name"\n action: "fill"\n selector: "textbox[name=\'Name\']"\n value: "{app_name}-lb"\n description: "Enter the load balancer name"\n\n - id: "
|
|
273
|
+
'schema: "urn:xcsh:console:workflow:v1"\nid: "waap-full-stack-demo"\nlabel: "WAAP Full Stack Demo — Origin Pool + App Firewall + HTTP Load Balancer"\nresource:\n - "origin-pool"\n - "app-firewall"\n - "http-load-balancer"\noperation: "demo"\n\npreconditions:\n - "user_logged_in"\n - "namespace_selected"\n - "role_minimum: admin"\n\nparams:\n namespace:\n required: true\n description: "Target namespace for all resources"\n example: "demo"\n app_name:\n required: true\n description: "Base name for all resources (used as prefix)"\n example: "example-app"\n domain:\n required: true\n description: "Domain for the HTTP Load Balancer"\n example: "app.example.com"\n origin_server:\n required: true\n description: "IP address or DNS name of the origin server"\n example: "10.0.0.1"\n origin_port:\n required: true\n type: "number"\n description: "Port number for the origin server"\n example: 8080\n waf_mode:\n required: false\n description: "WAF enforcement mode: Monitoring or Blocking"\n example: "Blocking"\n default: "Blocking"\n\nsteps:\n - id: "screenshot-start"\n action: "screenshot"\n screenshot_name: "waap-demo-start"\n description: "Capture starting state"\n\n - id: "create-origin-pool"\n action: "run-workflow"\n workflow: "origin-pool/create"\n with:\n namespace: "{namespace}"\n name: "{app_name}-pool"\n origin_server: "{origin_server}"\n port: "{origin_port}"\n description: "Step 1: Create an origin pool pointing to the backend server"\n\n - id: "screenshot-origin-pool-created"\n action: "screenshot"\n screenshot_name: "waap-demo-origin-pool-created"\n description: "Capture origin pool creation result"\n\n - id: "create-app-firewall"\n action: "run-workflow"\n workflow: "app-firewall/create"\n with:\n namespace: "{namespace}"\n name: "{app_name}-waf"\n enforcement_mode: "{waf_mode}"\n description: "Step 2: Create an App Firewall policy in Blocking mode"\n\n - id: "screenshot-app-firewall-created"\n action: "screenshot"\n screenshot_name: "waap-demo-app-firewall-created"\n description: "Capture app firewall creation result"\n\n - id: "navigate-to-http-lb"\n action: "navigate"\n url: "/web/workspaces/web-app-and-api-protection/namespaces/{namespace}/manage/load_balancers/http_loadbalancers"\n wait_for: "text(\'HTTP Load Balancers\')"\n description: "Step 3: Navigate to HTTP Load Balancers list"\n\n - id: "click-add-http-lb"\n action: "click"\n selector: "tab:text(\'Add HTTP Load Balancer\')"\n wait_for: "textbox[name=\'Name\']"\n description: "Open the Add HTTP Load Balancer form"\n note: "Tab element, not a button"\n\n - id: "fill-lb-name"\n action: "fill"\n selector: "textbox[name=\'Name\']"\n value: "{app_name}-lb"\n description: "Enter the load balancer name"\n\n - id: "fill-domain"\n action: "fill"\n selector: "input[placeholder=\'Domains\']"\n context: "Domains and LB Type section"\n value: "{domain}"\n description: "Fill the pre-seeded Domains datatable row (table ships row 1 — DON\'T Add Item, it creates a spurious empty row 2). Uses placeholder selector (datatable cells have no accessible name). Matches the validated http-load-balancer/create workflow."\n\n - id: "select-origin-pool"\n action: "click"\n selector: "button:text(\'Add Item\')"\n context: "Origin Pools section"\n wait_for: "listbox"\n description: "Click Add Item in the Origin Pools section"\n then:\n - id: "choose-pool"\n action: "select"\n selector: "listbox"\n context: "Origin Pool selector"\n value: "{app_name}-pool"\n description: "Select the origin pool created in step 1"\n\n - id: "apply-pool"\n action: "click"\n selector: "button:text(\'Apply\')"\n description: "Confirm origin pool selection"\n\n - id: "screenshot-before-waf"\n action: "screenshot"\n screenshot_name: "waap-demo-lb-before-waf"\n description: "Capture LB form before enabling WAF"\n\n - id: "scroll-to-waf"\n action: "scroll"\n selector: "text(\'Web Application Firewall\')"\n description: "Scroll down to the WAF section of the form"\n\n - id: "enable-waf"\n action: "select"\n selector: "listbox"\n context: "Web Application Firewall section"\n value: "Enable"\n description: "Change WAF dropdown from Disable to Enable"\n\n - id: "select-waf-policy"\n action: "select"\n selector: "listbox"\n context: "App Firewall selector"\n value: "{app_name}-waf"\n description: "Select the App Firewall policy created in step 2"\n\n - id: "screenshot-waf-enabled"\n action: "screenshot"\n screenshot_name: "waap-demo-waf-enabled"\n description: "Capture LB form with WAF enabled and policy selected"\n\n - id: "save-http-lb"\n action: "click"\n selector: "[class*=\'save-bt\']"\n wait_for: "text(\'{app_name}-lb\')"\n wait_timeout_ms: 60000\n description: "Click the footer save button (class-based selector disambiguates it from the same-named tab that opens the form). Matches the validated http-load-balancer/create workflow."\n\n - id: "verify-lb-created"\n action: "assert"\n selector: "text(\'{app_name}-lb\')"\n description: "Verify the HTTP Load Balancer appears in the list"\n\n - id: "screenshot-final"\n action: "screenshot"\n screenshot_name: "waap-demo-complete"\n description: "Capture the completed WAAP stack — all three resources created"\n\npostconditions:\n - "resource_list_page_visible"\n - "resource_name_in_list: {app_name}-lb"\n - "origin_pool_exists: {app_name}-pool"\n - "app_firewall_exists: {app_name}-waf"\n - "http_lb_has_waf: {app_name}-lb uses {app_name}-waf"\n\nmetadata:\n confidence: "validated"\n discovered_at: "2026-06-16"\n validated_at: "2026-06-16"\n console_version: "2025.06"\n estimated_duration_seconds: 120\n notes: >\n Validated on live staging console 2026-06-16. Key discoveries:\n (1) Origin server DNS Name field requires hostname format, not IP — use\n app.example.com not 10.0.0.1. (2) Resource selectors (origin pool, app\n firewall) are async-loading listboxes — type_text to search, then click\n the [role=option] element via JS. fill() alone doesn\'t fire Angular change\n events. (3) WAF Enable dropdown must be selected by clicking the actual\n [role=option] element, not fill(), to trigger the conditional App Firewall\n selector sub-field. (4) Created resources: example-app-pool, example-app-waf,\n example-app-lb with WAF attached. LB shows VIRTUAL_HOST_PENDING_A_RECORD\n (expected for demo domains).\n',
|
|
274
274
|
"demos/waap-full-stack-teardown":
|
|
275
275
|
'schema: "urn:xcsh:console:workflow:v1"\nid: "waap-full-stack-teardown"\nlabel: "WAAP Full Stack Teardown — Delete HTTP LB + App Firewall + Origin Pool"\nresource:\n - "http-load-balancer"\n - "app-firewall"\n - "origin-pool"\noperation: "demo"\n\npreconditions:\n - "user_logged_in"\n - "namespace_selected"\n - "role_minimum: admin"\n\nparams:\n namespace:\n required: true\n description: "Namespace containing the resources"\n example: "demo"\n app_name:\n required: true\n description: "Base name used when creating resources"\n example: "example-app"\n\nsteps:\n - id: "delete-http-lb"\n action: "run-workflow"\n workflow: "http-load-balancer/delete"\n with:\n namespace: "{namespace}"\n name: "{app_name}-lb"\n description: "Step 1: Delete the HTTP Load Balancer (must be deleted before its dependencies)"\n\n - id: "delete-app-firewall"\n action: "run-workflow"\n workflow: "app-firewall/delete"\n with:\n namespace: "{namespace}"\n name: "{app_name}-waf"\n description: "Step 2: Delete the App Firewall policy"\n\n - id: "delete-origin-pool"\n action: "run-workflow"\n workflow: "origin-pool/delete"\n with:\n namespace: "{namespace}"\n name: "{app_name}-pool"\n description: "Step 3: Delete the Origin Pool"\n\npostconditions:\n - "resource_deleted: {app_name}-lb"\n - "resource_deleted: {app_name}-waf"\n - "resource_deleted: {app_name}-pool"\n\nmetadata:\n confidence: "draft"\n discovered_at: "2026-06-16"\n console_version: "2025.06"\n estimated_duration_seconds: 60\n notes: >\n Teardown companion for waap-full-stack demo. Deletes resources in\n reverse dependency order: HTTP LB first (references origin pool and\n app firewall), then app firewall, then origin pool.\n',
|
|
276
276
|
"discovery/create":
|