@f5xc-salesdemos/xcsh 19.21.1 → 19.22.0
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.
|
|
4
|
+
"version": "19.22.0",
|
|
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.
|
|
54
|
-
"@f5xc-salesdemos/pi-agent-core": "19.
|
|
55
|
-
"@f5xc-salesdemos/pi-ai": "19.
|
|
56
|
-
"@f5xc-salesdemos/pi-natives": "19.
|
|
57
|
-
"@f5xc-salesdemos/pi-tui": "19.
|
|
58
|
-
"@f5xc-salesdemos/pi-utils": "19.
|
|
53
|
+
"@f5xc-salesdemos/xcsh-stats": "19.22.0",
|
|
54
|
+
"@f5xc-salesdemos/pi-agent-core": "19.22.0",
|
|
55
|
+
"@f5xc-salesdemos/pi-ai": "19.22.0",
|
|
56
|
+
"@f5xc-salesdemos/pi-natives": "19.22.0",
|
|
57
|
+
"@f5xc-salesdemos/pi-tui": "19.22.0",
|
|
58
|
+
"@f5xc-salesdemos/pi-utils": "19.22.0",
|
|
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.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "19.22.0",
|
|
21
|
+
"commit": "a80eb3c1c0cc909d3a8b40f5b904e876240341a8",
|
|
22
|
+
"shortCommit": "a80eb3c",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v19.
|
|
25
|
-
"commitDate": "2026-06-09T21:
|
|
26
|
-
"buildDate": "2026-06-
|
|
24
|
+
"tag": "v19.22.0",
|
|
25
|
+
"commitDate": "2026-06-09T21:08:12-04:00",
|
|
26
|
+
"buildDate": "2026-06-10T01:36:55.747Z",
|
|
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/
|
|
32
|
-
"releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v19.
|
|
31
|
+
"commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/a80eb3c1c0cc909d3a8b40f5b904e876240341a8",
|
|
32
|
+
"releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v19.22.0"
|
|
33
33
|
};
|
|
@@ -15,7 +15,7 @@ export class WelcomeComponent implements Component {
|
|
|
15
15
|
private modelStatus: ModelStatus,
|
|
16
16
|
private services: ServiceStatus[] = [],
|
|
17
17
|
private updateStatus?: UpdateStatus,
|
|
18
|
-
private
|
|
18
|
+
private recommendedPlugins: RecommendedPluginStatus[] = [],
|
|
19
19
|
private plugins: UnifiedPluginStatus[] = [],
|
|
20
20
|
) {}
|
|
21
21
|
invalidate(): void {}
|
|
@@ -29,7 +29,7 @@ export class WelcomeComponent implements Component {
|
|
|
29
29
|
this.updateStatus = status;
|
|
30
30
|
}
|
|
31
31
|
setRecommendedPlugins(plugins: RecommendedPluginStatus[]): void {
|
|
32
|
-
this.
|
|
32
|
+
this.recommendedPlugins = plugins;
|
|
33
33
|
}
|
|
34
34
|
setPlugins(plugins: UnifiedPluginStatus[]): void {
|
|
35
35
|
this.plugins = plugins;
|
|
@@ -186,9 +186,95 @@ Swap exactly one block per oneOf group — e.g. `enable_ha {}` replaces `disable
|
|
|
186
186
|
- `active_forward_proxy_policies { forward_proxy_policies { name = "<n>", namespace = "system" } }`
|
|
187
187
|
- `log_receiver { name = "<n>", namespace = "<ns>" }`
|
|
188
188
|
- `dc_cluster_group_sli { name = "<n>", namespace = "system" }` (same for `dc_cluster_group_slo`)
|
|
189
|
-
- `site_mesh_group_on_slo { site_mesh_group { name = "<n>", namespace = "system" } }` ←
|
|
189
|
+
- `site_mesh_group_on_slo { site_mesh_group { name = "<n>", namespace = "system" } }` ← CRITICAL: requires nested `site_mesh_group {}` wrapper block (not direct name/namespace attributes on site_mesh_group_on_slo)
|
|
190
190
|
- `custom_proxy { proxy_ip_address = "proxy.example.com", proxy_port = 8080 }` ← use `proxy_ip_address`/`proxy_port` (NOT `http_proxy`/`https_proxy`)
|
|
191
191
|
- `custom_proxy_bypass { proxy_bypass = ["10.0.0.0/8"] }` ← use `proxy_bypass` (NOT `bypass_list`)
|
|
192
192
|
- `blocked_services { blocked_service { network_type = "VIRTUAL_NETWORK_SITE_LOCAL" } }` ← use `blocked_service` with `network_type` (NOT `service_list`). In Terraform, "blocking HTTP services" = blocking `VIRTUAL_NETWORK_SITE_LOCAL` network type. Always write the file even when the phrase mentions "HTTP service in blocked services list" — map it to `blocked_service { network_type = "VIRTUAL_NETWORK_SITE_LOCAL" }`
|
|
193
193
|
|
|
194
194
|
**CRITICAL — Terraform file write rule**: When asked to "Write Terraform HCL for f5xc_securemesh_site_v2", you **MUST** use the `xcsh_write_file` tool to write the complete `.tf` file to disk. Always name the file after the resource name in the request (e.g., `ar-test-smsv2-1a.tf`). Do NOT just return a coverage table — always write the actual HCL file. The file must include a `terraform { required_providers { f5xc = { source = "f5xc-salesdemos/f5xc" } } }` block and the complete `resource "f5xc_securemesh_site_v2"` block with all 12 oneOf groups.
|
|
195
|
+
|
|
196
|
+
**HTTP/HTTPS Load Balancer Terraform HCL (`f5xc_http_loadbalancer`)** — Use `resource "f5xc_http_loadbalancer"` in any namespace. Must include `terraform { required_providers { f5xc = { source = "f5xc-salesdemos/f5xc" } } }` block. Always write file with `xcsh_write_file`. Name the file after the resource name (e.g., `ar-test-lb-https-1.tf`).
|
|
197
|
+
|
|
198
|
+
**CRITICAL — Terraform HCL single-line block rule**: A block definition like `outer { inner {} }` is INVALID when `inner {}` is itself a block (not an attribute). Nested blocks **MUST** be on their own lines:
|
|
199
|
+
- WRONG: `tls_config { default_security {} }`
|
|
200
|
+
- CORRECT: `tls_config {\n default_security {}\n}`
|
|
201
|
+
- WRONG: `full_mesh { data_plane_mesh {} }`
|
|
202
|
+
- CORRECT: `full_mesh {\n data_plane_mesh {}\n}`
|
|
203
|
+
- WRONG: `virtual_site = { name = "x", namespace = "y" }` (object literal — NOT a nested block)
|
|
204
|
+
- CORRECT: `virtual_site {\n name = "x"\n namespace = "y"\n}` (nested block)
|
|
205
|
+
|
|
206
|
+
For HTTPS auto-cert: use `https_auto_cert {}` block (tls defaults apply). For HTTP: use `http { port = 80 }`. For HTTPS redirect: add `http_redirect = true` inside `https_auto_cert`.
|
|
207
|
+
|
|
208
|
+
For `advertise_custom` with CE virtual site (Terraform HCL):
|
|
209
|
+
```hcl
|
|
210
|
+
resource "f5xc_http_loadbalancer" "lb" {
|
|
211
|
+
name = "<name>"
|
|
212
|
+
namespace = "<ns>"
|
|
213
|
+
|
|
214
|
+
domains = ["<domain>"]
|
|
215
|
+
|
|
216
|
+
https_auto_cert {
|
|
217
|
+
http_redirect = false
|
|
218
|
+
tls_config {
|
|
219
|
+
default_security {}
|
|
220
|
+
}
|
|
221
|
+
no_mtls {}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
advertise_custom {
|
|
225
|
+
advertise_where {
|
|
226
|
+
virtual_site {
|
|
227
|
+
network = "SITE_NETWORK_INSIDE_AND_OUTSIDE"
|
|
228
|
+
virtual_site {
|
|
229
|
+
name = "<vsite>"
|
|
230
|
+
namespace = "<ns>"
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
use_default_port {}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
default_route_pools {
|
|
238
|
+
pool { name = "<pool>", namespace = "<ns>" }
|
|
239
|
+
weight = 1
|
|
240
|
+
priority = 1
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
TLS config options (pick one): `default_security {}` · `medium_security {}` · `low_security {}`. mTLS: `no_mtls {}` (default) or `use_mtls { tls_certificates_ref { … } }`. Advertise options same as API — use Terraform attribute syntax (`network = "…"`, `virtual_site = { … }`).
|
|
246
|
+
|
|
247
|
+
**Site mesh group Terraform HCL (`f5xc_site_mesh_group`)** — system namespace only. Use blocks to select mesh type and BFD setting (no `type`/`tunnel_type` string attributes — the provider uses block-based selection):
|
|
248
|
+
```hcl
|
|
249
|
+
resource "f5xc_site_mesh_group" "smg" {
|
|
250
|
+
name = "<name>"
|
|
251
|
+
namespace = "system"
|
|
252
|
+
|
|
253
|
+
full_mesh {
|
|
254
|
+
data_plane_mesh {}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
bfd_disabled {}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
For spoke mesh: use `spoke_mesh { … }` instead of `full_mesh`. For `data_plane_mesh` vs `control_and_data_plane_mesh`: use `data_plane_mesh {}` for data-plane only. **DO NOT add `type` or `tunnel_type` attributes** — these are API-level concepts, not Terraform provider attributes.
|
|
261
|
+
|
|
262
|
+
**Virtual site Terraform HCL (`f5xc_virtual_site`)** — any namespace:
|
|
263
|
+
```hcl
|
|
264
|
+
resource "f5xc_virtual_site" "vsite" {
|
|
265
|
+
name = "<name>"
|
|
266
|
+
namespace = "<ns>"
|
|
267
|
+
|
|
268
|
+
site_type = "CUSTOMER_EDGE"
|
|
269
|
+
site_selector {
|
|
270
|
+
expressions = ["ves.io/siteName in (<ce-site-name>)"]
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
```
|
|
274
|
+
`site_type`: `CUSTOMER_EDGE` for CE/SMSv2 sites, `REGIONAL_EDGE` for vK8s_service (RE only).
|
|
275
|
+
|
|
276
|
+
**Terraform import** — To import existing F5 XC resources into Terraform state, use `terraform import <resource_type>.<label> <namespace>/<name>`:
|
|
277
|
+
- `terraform import f5xc_securemesh_site_v2.site system/<site-name>`
|
|
278
|
+
- `terraform import f5xc_http_loadbalancer.lb <namespace>/<lb-name>`
|
|
279
|
+
- `terraform import f5xc_virtual_site.vsite <namespace>/<vsite-name>`
|
|
280
|
+
- `terraform import f5xc_site_mesh_group.smg system/<smg-name>`
|