@f5xc-salesdemos/xcsh 19.36.0 → 19.37.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.36.0",
4
+ "version": "19.37.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",
@@ -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.36.0",
55
- "@f5xc-salesdemos/pi-agent-core": "19.36.0",
56
- "@f5xc-salesdemos/pi-ai": "19.36.0",
57
- "@f5xc-salesdemos/pi-natives": "19.36.0",
58
- "@f5xc-salesdemos/pi-resource-management": "19.36.0",
59
- "@f5xc-salesdemos/pi-tui": "19.36.0",
60
- "@f5xc-salesdemos/pi-utils": "19.36.0",
54
+ "@f5xc-salesdemos/xcsh-stats": "19.37.0",
55
+ "@f5xc-salesdemos/pi-agent-core": "19.37.0",
56
+ "@f5xc-salesdemos/pi-ai": "19.37.0",
57
+ "@f5xc-salesdemos/pi-natives": "19.37.0",
58
+ "@f5xc-salesdemos/pi-resource-management": "19.37.0",
59
+ "@f5xc-salesdemos/pi-tui": "19.37.0",
60
+ "@f5xc-salesdemos/pi-utils": "19.37.0",
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.36.0",
21
- "commit": "25f2668aebf96b7025f2b1abc9646adcd929d0b0",
22
- "shortCommit": "25f2668",
20
+ "version": "19.37.0",
21
+ "commit": "374149f9c6d3c1f4e51bc68d673ab27d0f2bef11",
22
+ "shortCommit": "374149f",
23
23
  "branch": "main",
24
- "tag": "v19.36.0",
25
- "commitDate": "2026-06-19T19:08:49Z",
26
- "buildDate": "2026-06-19T19:30:15.957Z",
24
+ "tag": "v19.37.0",
25
+ "commitDate": "2026-06-19T19:50:51Z",
26
+ "buildDate": "2026-06-19T20:12:29.074Z",
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/25f2668aebf96b7025f2b1abc9646adcd929d0b0",
32
- "releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v19.36.0"
31
+ "commitUrl": "https://github.com/f5xc-salesdemos/xcsh/commit/374149f9c6d3c1f4e51bc68d673ab27d0f2bef11",
32
+ "releaseUrl": "https://github.com/f5xc-salesdemos/xcsh/releases/tag/v19.37.0"
33
33
  };
@@ -398,6 +398,7 @@ HARD OVERRIDE — F5 Distributed Cloud Terraform Provider:
398
398
  ```
399
399
  - Authentication is supplied via environment variables (set exactly ONE method): `F5XC_API_TOKEN`; or `F5XC_P12_FILE` + `F5XC_P12_PASSWORD`; or `F5XC_CERT` + `F5XC_KEY`. Tenant URL via `F5XC_API_URL`. Keep the `provider "f5xc" {}` block empty unless the user asks to hardcode credentials.
400
400
  - Write vs run: "write a terraform plan" produces an artifact — write the `.tf`, then `terraform fmt` + `terraform init` (best-effort) + `terraform validate` to deliver a formatted, verified file. If `init` fails (e.g. `dev_overrides`/offline), still run `terraform validate` and report. Do **NOT** auto-run `terraform plan` (only on explicit plan/preview request) and **NEVER** run `terraform apply` unless the user clearly asks to create/CRUD. Writing a plan is not running it.
401
+ - Minimum settings only: generate HCL in the same minimum-settings style as JSON/YAML export — emit ONLY the required skeleton, required fields, and any value the user explicitly asks to change. **OMIT fields the server applies by default** (e.g. `f5xc_origin_pool` `loadbalancer_algorithm = "ROUND_ROBIN"`, `endpoint_selection = "DISTRIBUTED"`; healthcheck server-default thresholds) unless the user sets a non-default value. Fields documented as "Server applies default when omitted" are safe to omit. Smaller, default-free configs are the goal.
401
402
  - Consult xcsh://branding/terraform proactively when context involves Terraform.
402
403
 
403
404
  # Skills
@@ -193,7 +193,7 @@ Swap exactly one block per oneOf group — e.g. `enable_ha {}` replaces `disable
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, a `provider "f5xc" {}` block (**REQUIRED** — without it `terraform plan` fails with "Provider requires explicit configuration"), and the complete `resource "f5xc_securemesh_site_v2"` block with all 12 oneOf groups. After writing, verify without mutating: `terraform fmt` then `terraform init` (best-effort) + `terraform validate`; report the result. Do NOT run `terraform apply` (unless the user asks to create/CRUD) or auto-run `terraform plan`.
195
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 AND a `provider "f5xc" {}` block (**REQUIRED** — without it `terraform plan` fails with "Provider requires explicit configuration"). Always write file with `xcsh_write_file`. Name the file after the resource name (e.g., `ar-test-lb-https-1.tf`). After writing, verify without mutating: `terraform fmt` then `terraform init` (best-effort) + `terraform validate`; report the result. Do NOT run `terraform apply` (unless the user asks to create/CRUD) or auto-run `terraform plan`.
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 AND a `provider "f5xc" {}` block (**REQUIRED** — without it `terraform plan` fails with "Provider requires explicit configuration"). Always write file with `xcsh_write_file`. Name the file after the resource name (e.g., `ar-test-lb-https-1.tf`). Emit minimum settings only — include the skeleton, required fields, and user-requested values; OMIT server-default fields (e.g. default `loadbalancer_algorithm`/`endpoint_selection` on referenced pools) unless the user sets a non-default value. After writing, verify without mutating: `terraform fmt` then `terraform init` (best-effort) + `terraform validate`; report the result. Do NOT run `terraform apply` (unless the user asks to create/CRUD) or auto-run `terraform plan`.
197
197
 
198
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
199
  - WRONG: `tls_config { default_security {} }`
@@ -29,9 +29,15 @@ export async function handleExportResourceCommand(
29
29
  ctx.editor.addToHistory(command.text);
30
30
  ctx.editor.setText("");
31
31
 
32
- const { parseExportArgs, ResourceClient, KindResolutionError, toManifest, formatManifestOutput } = await import(
33
- "@f5xc-salesdemos/pi-resource-management"
34
- );
32
+ const {
33
+ parseExportArgs,
34
+ ResourceClient,
35
+ KindResolutionError,
36
+ toManifest,
37
+ formatManifestOutput,
38
+ buildMinimalExportFilter,
39
+ applyMinimalExportFilter,
40
+ } = await import("@f5xc-salesdemos/pi-resource-management");
35
41
  const { kindResolver } = await import("../resource-management/index");
36
42
 
37
43
  const parsed = parseExportArgs(command.args);
@@ -119,6 +125,15 @@ export async function handleExportResourceCommand(
119
125
  return;
120
126
  }
121
127
 
128
+ // Emit only minimum (non-default) settings: strip server-applied defaults
129
+ // per kind. Kinds with no defaults coverage are left untouched (full spec).
130
+ for (const m of manifests) {
131
+ const filter = buildMinimalExportFilter(m.kind);
132
+ if (filter) {
133
+ m.spec = applyMinimalExportFilter(m.spec, filter);
134
+ }
135
+ }
136
+
122
137
  const output = formatManifestOutput(manifests, fmt);
123
138
 
124
139
  if (parsed.outputFile) {