@f5-sales-demo/xcsh 19.103.2 → 19.103.4
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.103.
|
|
4
|
+
"version": "19.103.4",
|
|
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",
|
|
@@ -57,13 +57,13 @@
|
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@agentclientprotocol/sdk": "1.3.0",
|
|
59
59
|
"@mozilla/readability": "^0.6",
|
|
60
|
-
"@f5-sales-demo/xcsh-stats": "19.103.
|
|
61
|
-
"@f5-sales-demo/pi-agent-core": "19.103.
|
|
62
|
-
"@f5-sales-demo/pi-ai": "19.103.
|
|
63
|
-
"@f5-sales-demo/pi-natives": "19.103.
|
|
64
|
-
"@f5-sales-demo/pi-resource-management": "19.103.
|
|
65
|
-
"@f5-sales-demo/pi-tui": "19.103.
|
|
66
|
-
"@f5-sales-demo/pi-utils": "19.103.
|
|
60
|
+
"@f5-sales-demo/xcsh-stats": "19.103.4",
|
|
61
|
+
"@f5-sales-demo/pi-agent-core": "19.103.4",
|
|
62
|
+
"@f5-sales-demo/pi-ai": "19.103.4",
|
|
63
|
+
"@f5-sales-demo/pi-natives": "19.103.4",
|
|
64
|
+
"@f5-sales-demo/pi-resource-management": "19.103.4",
|
|
65
|
+
"@f5-sales-demo/pi-tui": "19.103.4",
|
|
66
|
+
"@f5-sales-demo/pi-utils": "19.103.4",
|
|
67
67
|
"@sinclair/typebox": "^0.34",
|
|
68
68
|
"@xterm/headless": "^6.0",
|
|
69
69
|
"ajv": "^8.20",
|
|
@@ -97,6 +97,22 @@ const REPO = "f5-sales-demo/api-specs-enriched";
|
|
|
97
97
|
const outputPath = path.resolve(import.meta.dir, "../src/internal-urls/api-spec-index.generated.ts");
|
|
98
98
|
const catalogOutputPath = path.resolve(import.meta.dir, "../src/internal-urls/api-catalog-index.generated.ts");
|
|
99
99
|
|
|
100
|
+
/** Domains reserved for documentation by RFC 2606 / RFC 6761. */
|
|
101
|
+
const RESERVED_EMAIL_DOMAINS = new Set(["example.com", "example.net", "example.org"]);
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Upstream specs illustrate contact fields with addresses at real domains — `gmail.com`, `f5.com`,
|
|
105
|
+
* `company.com`. At least one is a real person's work address rather than a placeholder, and
|
|
106
|
+
* STYLE_GUIDE.md allows only a placeholder name at a reserved domain. Replace the whole address, not
|
|
107
|
+
* just the domain: keeping the local part would keep the person's name (#2659).
|
|
108
|
+
*/
|
|
109
|
+
function sanitizeEmails(text: string): string {
|
|
110
|
+
// The lookbehind skips URL userinfo (`https://token:secret@host`), which is not a contact address.
|
|
111
|
+
return text.replace(/(?<![:/])\b[A-Za-z0-9._%+-]+@([A-Za-z0-9.-]+\.[A-Za-z]{2,})\b/g, (whole, domain) =>
|
|
112
|
+
RESERVED_EMAIL_DOMAINS.has(String(domain).toLowerCase()) ? whole : "dana@example.com",
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
100
116
|
/**
|
|
101
117
|
* Upstream specs use ACME as a placeholder tenant, company and hostname. STYLE_GUIDE.md bans it:
|
|
102
118
|
* it is not trademark-cleared, and in TLS content the name already belongs to RFC 8555. Rewrite it
|
|
@@ -571,7 +587,7 @@ const output = [
|
|
|
571
587
|
.filter(l => l !== undefined)
|
|
572
588
|
.join("\n");
|
|
573
589
|
|
|
574
|
-
await Bun.write(outputPath, sanitizePlaceholders(output));
|
|
590
|
+
await Bun.write(outputPath, sanitizeEmails(sanitizePlaceholders(output)));
|
|
575
591
|
|
|
576
592
|
const outputSize = (Buffer.byteLength(output) / 1024 / 1024).toFixed(1);
|
|
577
593
|
console.log(
|
|
@@ -615,7 +631,7 @@ if (catalog) {
|
|
|
615
631
|
"",
|
|
616
632
|
].join("\n");
|
|
617
633
|
|
|
618
|
-
await Bun.write(catalogOutputPath, sanitizePlaceholders(catalogOutput));
|
|
634
|
+
await Bun.write(catalogOutputPath, sanitizeEmails(sanitizePlaceholders(catalogOutput)));
|
|
619
635
|
const catalogSize = (Buffer.byteLength(catalogOutput) / 1024 / 1024).toFixed(1);
|
|
620
636
|
console.log(
|
|
621
637
|
`Generated ${path.relative(process.cwd(), catalogOutputPath)} (${categories.length} categories, ${catalogSize} MB)`,
|
|
@@ -17,17 +17,17 @@ export interface BuildInfo {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const BUILD_INFO: BuildInfo = {
|
|
20
|
-
"version": "19.103.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "19.103.4",
|
|
21
|
+
"commit": "6645553ffbc502c2516e744745247a4876580191",
|
|
22
|
+
"shortCommit": "6645553",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v19.103.
|
|
25
|
-
"commitDate": "2026-07-
|
|
26
|
-
"buildDate": "2026-07-
|
|
24
|
+
"tag": "v19.103.4",
|
|
25
|
+
"commitDate": "2026-07-31T13:09:45Z",
|
|
26
|
+
"buildDate": "2026-07-31T13:41:54.471Z",
|
|
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.103.
|
|
31
|
+
"commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/6645553ffbc502c2516e744745247a4876580191",
|
|
32
|
+
"releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.103.4"
|
|
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 = "75fcb440d64ab7ec195bfcd96e2f4a4895feb428";
|
|
6
6
|
|
|
7
7
|
export const CONSOLE_CATALOG_DATA: ConsoleCatalogData = {
|
|
8
|
-
version: "
|
|
8
|
+
version: "75fcb440d64ab7ec195bfcd96e2f4a4895feb428",
|
|
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',
|