@robinmordasiewicz/f5xc-xcsh 1.0.84-2601020527 → 1.0.85-2601020738

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/dist/index.js CHANGED
@@ -44108,9 +44108,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44108
44108
  ["admin_console_and_ui", {
44109
44109
  name: "admin_console_and_ui",
44110
44110
  displayName: "Admin Console And Ui",
44111
- description: "Create administrative dashboard building blocks with tailored setup data and view bindings. Organize presentational materials by namespace and fetch them by name or list all available items. Define display parameters, track system object relationships, and maintain consistent portal appearance through centralized resource management workflows.",
44112
- descriptionShort: "Manage static UI components for admin console.",
44113
- descriptionMedium: "Deploy and retrieve graphical elements within namespaces. Configure custom startup parameters and view references for display composition.",
44111
+ description: "Dashboard customization through namespace-bounded asset libraries. Storage systems for branding resources, layout templates, and interactive widgets. Catalog organization with system object references tracking modification history and deployment status. Schema enforcement ensuring configuration validity across tenant hierarchies and environment boundaries.",
44112
+ descriptionShort: "Static UI components and console assets.",
44113
+ descriptionMedium: "Namespace-scoped visual elements with versioning. Custom widget deployment and catalog management for portal surfaces.",
44114
44114
  aliases: ["console-ui", "ui-assets", "static-components"],
44115
44115
  complexity: "simple",
44116
44116
  isPreview: false,
@@ -44147,9 +44147,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44147
44147
  ["api", {
44148
44148
  name: "api",
44149
44149
  displayName: "Api",
44150
- description: "Catalog services automatically to maintain an inventory of operations and their characteristics. Organize related resources by function or ownership through logical groupings. Establish verification procedures that confirm authentication requirements and expected response structures. Link definitions with load balancers for traffic routing decisions. Flag non-standard paths for exclusion from automated scanning. Monitor resource status and metadata throughout deployment zones.",
44151
- descriptionShort: "Discover, catalog, and test service interfaces.",
44152
- descriptionMedium: "Define interface groups and discovery policies. Set up verification rules to check security posture and expected patterns across environments.",
44150
+ description: "Structured classification systems with versioning support for contract evolution. Hierarchical groupings segment resources by operational role or security boundaries. Behavioral verification confirms authentication flows and permission constraints. Token and key safeguards protect sensitive credentials. Traffic inspection through connected load balancers and firewalls enables threat detection at network perimeters.",
44151
+ descriptionShort: "Interface definitions, schema validation, and grouping.",
44152
+ descriptionMedium: "Resource cataloging with automatic classification and security profiling. Organizational hierarchies segment access by function or protection policy.",
44153
44153
  aliases: ["apisec", "api-discovery"],
44154
44154
  complexity: "advanced",
44155
44155
  isPreview: false,
@@ -44299,9 +44299,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44299
44299
  ["bigip", {
44300
44300
  name: "bigip",
44301
44301
  displayName: "Bigip",
44302
- description: "Define custom rule-based policies governing routing decisions and request handling. Build organized collections for network ranges, string patterns, and key-value entries. Map cloud services to physical appliances through connector setups. Link identity workflows using access modules. Track performance metrics and coordinate synchronization between components.",
44303
- descriptionShort: "Manage iRules, data groups, and virtual servers.",
44304
- descriptionMedium: "Configure traffic logic scripts and structured list entries. Establish appliance bindings and access module integrations.",
44302
+ description: "On-premises appliance connector enabling iRule lifecycle operations and data group replication. APM policy coordination, virtual server configuration binding, and CNE linkage. Telemetry aggregation and health status monitoring across hybrid infrastructure deployments.",
44303
+ descriptionShort: "iRules, data groups, and APM integration.",
44304
+ descriptionMedium: "Legacy device orchestration with iRule scripts and data group synchronization. Virtual server bindings and metrics collection.",
44305
44305
  aliases: ["f5-bigip", "irule", "ltm"],
44306
44306
  complexity: "moderate",
44307
44307
  isPreview: false,
@@ -44338,9 +44338,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44338
44338
  ["billing_and_usage", {
44339
44339
  name: "billing_and_usage",
44340
44340
  displayName: "Billing And Usage",
44341
- description: "Set up payment methods with primary and secondary designations for redundancy. Initiate plan transitions between subscription tiers with state tracking. Download invoice PDFs and query custom invoice lists by date range or status. Define quota limits per namespace and monitor current usage against allocated capacity. Swap payment method roles without service interruption.",
44342
- descriptionShort: "Manage subscription plans and payment methods.",
44343
- descriptionMedium: "Configure billing transitions and payment processing. Track invoices and monitor resource quota consumption across namespaces.",
44341
+ description: "Subscription lifecycle with plan transitions and billing states. Payment method hierarchies supporting primary and secondary configurations. Invoice generation with PDF downloads and custom listing. Resource quotas per namespace with limit definitions and consumption metrics. Contact types for billing notifications and tenant deletion workflows.",
44342
+ descriptionShort: "Subscription plans, payment methods, and quotas.",
44343
+ descriptionMedium: "Plan transitions, invoicing, and resource consumption. Namespace-level quota limits and usage tracking.",
44344
44344
  aliases: ["billing-usage", "quotas", "usage-tracking"],
44345
44345
  complexity: "moderate",
44346
44346
  isPreview: false,
@@ -44387,9 +44387,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44387
44387
  ["blindfold", {
44388
44388
  name: "blindfold",
44389
44389
  displayName: "Blindfold",
44390
- description: "Define policy rules with label matching and combining algorithms. Set up transformers and matchers to control data safeguarding. Track access patterns through timestamped records with scroll queries and date groupings. Retrieve public keys for cryptographic operations and process policy information for decryption workflows.",
44391
- descriptionShort: "Manage secret encryption and policy rules.",
44392
- descriptionMedium: "Configure protection policies and access controls for sensitive data. Monitor usage through detailed logs and date-based rollups.",
44390
+ description: "Public key retrieval and secret policy enforcement for encrypted data handling. Policy rules govern access with configurable matching and transformation actions. VoltShare integration provides decryption services, access counting, and audit log aggregation. Namespace-scoped policies enable fine-grained control over sensitive information with administrative overrides.",
44391
+ descriptionShort: "Secret encryption, key policies, and audit trails.",
44392
+ descriptionMedium: "Encryption key management with policy-based access controls. Audit logging and secure data protection.",
44393
44393
  aliases: ["bf", "encrypt", "secrets"],
44394
44394
  complexity: "moderate",
44395
44395
  isPreview: false,
@@ -44436,9 +44436,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44436
44436
  ["bot_and_threat_defense", {
44437
44437
  name: "bot_and_threat_defense",
44438
44438
  displayName: "Bot And Threat Defense",
44439
- description: "Deploy namespace-scoped protection using behavioral analysis and machine learning. Provision dedicated keys for system automation and real-time intelligence feeds. Coordinate detection across protected applications through centralized managers. Configure pre-authentication checks to identify suspicious patterns before they reach backends. Enable adaptive blocking decisions based on risk scoring and historical activity profiles.",
44440
- descriptionShort: "Detect and block automated attacks.",
44441
- descriptionMedium: "Create bot defense instances with Shape integration. Set up traffic classification rules and automated response policies for malicious actors.",
44439
+ description: "Behavioral fingerprinting identifies automated clients through request patterns, mouse movements, and JavaScript execution. Threat categories classify attacks by type including credential stuffing, scraping, and denial-of-service. Defense instances apply per-namespace policies with configurable sensitivity thresholds and challenge actions. Provisioning handles integration credentials for third-party threat intelligence feeds.",
44440
+ descriptionShort: "Bot detection, threat categories, and defense instances.",
44441
+ descriptionMedium: "Threat classification with behavioral analysis and signature matching. Automated blocking for malicious traffic patterns.",
44442
44442
  aliases: ["threat-defense", "tpm", "shape-bot"],
44443
44443
  complexity: "moderate",
44444
44444
  isPreview: false,
@@ -44475,9 +44475,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44475
44475
  ["cdn", {
44476
44476
  name: "cdn",
44477
44477
  displayName: "Cdn",
44478
- description: "Set up cache eligibility based on headers, cookies, and query parameters. Create expression-based rules with custom TTL settings and path matchers. Deploy load balancers that handle content distribution across origin pools. Monitor access logs and metrics, aggregate performance data, and execute cache purge operations when content updates require immediate invalidation.",
44479
- descriptionShort: "Configure caching rules and load balancing.",
44480
- descriptionMedium: "Define cache rules, TTLs, and path matching. Manage load balancers with origin pools and purge operations.",
44478
+ description: "Content distribution through global edge networks with rule-based eligibility. Path matchers, cookie patterns, and query parameter filters control caching behavior. Expression-based rules enable fine-grained targeting by request attributes. Load balancer integration provides throughput aggregation, request log queries, and on-demand cache clearing across worldwide distribution points.",
44479
+ descriptionShort: "Edge caching, content delivery, and distribution rules.",
44480
+ descriptionMedium: "Path-based policies with TTL controls and header conditions. Purge operations, access logs, and cache eligibility for multi-region deployments.",
44481
44481
  aliases: ["cache", "content"],
44482
44482
  complexity: "advanced",
44483
44483
  isPreview: false,
@@ -44516,9 +44516,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44516
44516
  ["ce_management", {
44517
44517
  name: "ce_management",
44518
44518
  displayName: "Ce Management",
44519
- description: "Define network connectivity parameters including address allocation ranges, dual-stack protocol support, and isolated administrative ports for out-of-band access. Group physical locations under common policy templates for streamlined oversight. Onboard new deployments through secure credential workflows with expiration policies. Execute controlled software transitions featuring pre-flight validation, rollback capabilities, and progress tracking to maintain service continuity.",
44520
- descriptionShort: "Manage Customer Edge sites and network interfaces.",
44521
- descriptionMedium: "Configure DHCP pools, IPv6 addressing, and dedicated management ports. Handle site tokens with lifecycle controls and software version transitions.",
44519
+ description: "Customer edge node lifecycle through secure enrollment tokens and downloadable deployment images. Network connectivity options span exclusive, common, and administrative pathways with DHCP address pools supporting both IPv4 and IPv6. Bulk grouping consolidates configuration across distributed locations. Compatibility verification runs before software updates, with rollout tracking for version progression across the infrastructure.",
44520
+ descriptionShort: "Network interfaces, fleets, and site registration.",
44521
+ descriptionMedium: "Token-based provisioning with image downloads and pre-upgrade validation. Fleet grouping enables bulk operations across distributed locations.",
44522
44522
  aliases: ["ce-mgmt", "edge-management", "ce-lifecycle"],
44523
44523
  complexity: "advanced",
44524
44524
  isPreview: false,
@@ -44565,9 +44565,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44565
44565
  ["certificates", {
44566
44566
  name: "certificates",
44567
44567
  displayName: "Certificates",
44568
- description: "Create PKI artifacts organizing cryptographic identity materials by namespace for multi-tenant isolation. Deploy keypair bundles with issuer hierarchies for TLS termination. Establish verification anchor collections governing which external parties can authenticate. Maintain deny-lists blocking compromised identities from initiating sessions. Organize resources within independent security boundaries supporting granular access control.",
44569
- descriptionShort: "Manage SSL/TLS certificate chains and trusted CAs.",
44570
- descriptionMedium: "Configure certificate manifests linking keys to credential bundles. Define trust anchors for validating client authenticity during mutual TLS.",
44568
+ description: "X.509 certificate chains with intermediate and root CA support. Trusted CA list bundles for client authentication and mTLS validation. CRL distribution points and OCSP stapling configuration. Certificate manifests link credentials to load balancers and gateways. Automatic expiration tracking and renewal notifications.",
44569
+ descriptionShort: "SSL/TLS chains, trusted CAs, and revocation lists.",
44570
+ descriptionMedium: "Certificate chains and trusted CA bundles. Revocation list management and manifest configuration for PKI operations.",
44571
44571
  aliases: ["cert", "certs", "ssl", "tls"],
44572
44572
  complexity: "moderate",
44573
44573
  isPreview: false,
@@ -44614,9 +44614,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44614
44614
  ["cloud_infrastructure", {
44615
44615
  name: "cloud_infrastructure",
44616
44616
  displayName: "Cloud Infrastructure",
44617
- description: "Establish connections to AWS, Azure, and GCP environments with secure authentication and network discovery. Define gateway links, edge site peering, and elastic provisioning workflows. Monitor segment performance and connection health across geographic regions. Create automated VPC attachment policies with intelligent path selection between customer locations and cloud workloads.",
44618
- descriptionShort: "Connect and manage multi-cloud providers.",
44619
- descriptionMedium: "Configure cloud provider credentials and VPC attachments. Manage AWS transit gateways, Azure route tables, and cross-cloud connectivity.",
44617
+ description: "Hyperscaler integration supporting Amazon Web Services, Microsoft Azure, and Google Cloud Platform environments. Virtual network attachment workflows enable elastic compute provisioning with automatic reattachment capabilities. Edge authentication secrets for provider access. Segment telemetry and cross-region link reapplication for distributed deployments. Autonomous path synchronization across peered networks with real-time topology updates.",
44618
+ descriptionShort: "AWS, Azure, GCP connectors and VPC attachments.",
44619
+ descriptionMedium: "Multi-cloud provider connections with gateway peering and network path configuration. Credential vault integration and subnet enumeration.",
44620
44620
  aliases: ["cloud", "infra", "provider"],
44621
44621
  complexity: "moderate",
44622
44622
  isPreview: false,
@@ -44679,9 +44679,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44679
44679
  ["container_services", {
44680
44680
  name: "container_services",
44681
44681
  displayName: "Container Services",
44682
- description: "Create definitions for applications running on distributed infrastructure. Establish standardized templates controlling resource consumption and disk limits. Set up partitioned execution contexts supporting namespace separation and multi-tenant isolation. Track persistent volume claims and usage metrics. Connect with mesh networking for traffic routing.",
44683
- descriptionShort: "Deploy containerized workloads across sites.",
44684
- descriptionMedium: "Run services with simplified orchestration. Define blueprints governing processor and storage allocation.",
44682
+ description: "Namespaced isolation with configurable limits and autoscaling policies. vK8s abstracts operational overhead while providing scheduling, persistent storage, and service mesh integration. Compute profiles specify CPU, memory, and GPU allocations for reproducible environments. Telemetry tracks consumption patterns across geographically distributed infrastructure nodes.",
44683
+ descriptionShort: "Containerized workloads and virtual Kubernetes clusters.",
44684
+ descriptionMedium: "Pod orchestration without full cluster complexity. Edge site execution, quota enforcement, and standardized compute profiles for distributed apps.",
44685
44685
  aliases: ["vk8s", "containers", "workloads"],
44686
44686
  complexity: "moderate",
44687
44687
  isPreview: false,
@@ -44732,9 +44732,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44732
44732
  ["data_and_privacy_security", {
44733
44733
  name: "data_and_privacy_security",
44734
44734
  displayName: "Data And Privacy Security",
44735
- description: "Set up sensitive data policies that identify and protect personally identifiable information across traffic flows. Create custom data type definitions matching organizational privacy standards and industry regulations. Configure LMA region parameters including Clickhouse, Elastic, and Kafka integrations. Deploy geo-configurations enforcing data residency rules and regional compliance mandates. Monitor detection status through condition tracking and secret management with blindfold encryption.",
44736
- descriptionShort: "Configure sensitive data detection and privacy policies.",
44737
- descriptionMedium: "Define custom data types for PII classification. Manage LMA regions and geo-configurations to meet regulatory compliance requirements.",
44735
+ description: "Pattern-based detection for personally identifiable information across request and response payloads. Custom data type definitions enable organization-specific classification beyond built-in PII categories. Regional log and metrics aggregation with Clickhouse, Elasticsearch, and Kafka export options. Geo-configuration policies enforce data residency requirements and jurisdiction-specific privacy regulations.",
44736
+ descriptionShort: "PII detection, data types, and regional compliance.",
44737
+ descriptionMedium: "Sensitive data policies with custom classification rules. LMA region configuration and geo-based compliance controls.",
44738
44738
  aliases: ["data-privacy", "pii", "sensitive-data", "lma"],
44739
44739
  complexity: "simple",
44740
44740
  isPreview: false,
@@ -44810,9 +44810,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44810
44810
  ["ddos", {
44811
44811
  name: "ddos",
44812
44812
  displayName: "Ddos",
44813
- description: "Deploy definitions that block IP addresses and network segments from accessing protected resources. Organize by threat type or source classification. Manage secure channels routing suspicious packets for analysis before reaching origin servers. Update status for real-time visibility into active defenses. Add items during attacks and monitor health metrics.",
44814
- descriptionShort: "Configure blocking policies and tunnel protection.",
44815
- descriptionMedium: "Set up firewall configurations with deny list rules. Filter malicious traffic through inspection points.",
44813
+ description: "Network perimeter hardening through deny list configurations, rule group hierarchies, and encrypted tunnel endpoints. Attack signature detection identifies flood patterns while throttling mechanisms block anomalous traffic bursts. Tunnel health checks verify coverage across distributed segments. Priority ordering governs policy application for multi-layered screening approaches.",
44814
+ descriptionShort: "Volumetric attack mitigation and traffic scrubbing.",
44815
+ descriptionMedium: "Deny lists, firewall rule groups, and tunnel-based safeguards. Rate limiting and pattern analysis for network perimeter security.",
44816
44816
  aliases: ["dos", "ddos-protect"],
44817
44817
  complexity: "advanced",
44818
44818
  isPreview: false,
@@ -44851,9 +44851,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44851
44851
  ["dns", {
44852
44852
  name: "dns",
44853
44853
  displayName: "Dns",
44854
- description: "Set up primary and secondary zones with support for A, AAAA, CNAME, CAA, CERT, and AFSDB record types. Define health checks to monitor target availability and enable automatic failover between record destinations. Clone existing domains, import zone configurations from external servers, or export zone files for backup. Track query metrics and request logs to analyze resolution patterns across namespaces.",
44855
- descriptionShort: "Manage zones, records, and load balancing.",
44856
- descriptionMedium: "Configure authoritative name services with record sets and health checks. Import zones from BIND files or transfer via AXFR protocol.",
44854
+ description: "Primary and secondary zone configuration with support for A, AAAA, CNAME, CAA, CERT, and AFSDB record types. Zone cloning, BIND file imports, and AXFR transfers for migration. Load balancer health checks with metrics collection and request log analysis. Compliance policies and RRSet management for enterprise name resolution.",
44855
+ descriptionShort: "Zones, record types, and load balancing.",
44856
+ descriptionMedium: "Authoritative zone hosting with BIND and AXFR imports. Health checks, failover policies, and request logging.",
44857
44857
  aliases: ["dns-zone", "zones"],
44858
44858
  complexity: "advanced",
44859
44859
  isPreview: false,
@@ -44954,9 +44954,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44954
44954
  ["generative_ai", {
44955
44955
  name: "generative_ai",
44956
44956
  displayName: "Generative Ai",
44957
- description: "Set up query evaluation and response handling for intelligent assistant workflows. Manage rating collection with positive and negative outcome tracking. Subscribe to data streams for traffic pattern detection and behavioral analysis. Allocate and deallocate IP resources for ML infrastructure. Control feature enablement and token management for telemetry collection paths.",
44958
- descriptionShort: "Access AI assistant queries and feedback.",
44959
- descriptionMedium: "Configure machine learning interactions and collect response ratings. Enable flow pattern monitoring through data subscription channels.",
44957
+ description: "Query handling through inference routing with production and test modes. Positive and negative quality markers with detailed categorization capture assistant performance. Streaming connections support authenticated access, subscription lifecycles, and feature flags. IP provisioning services allocate infrastructure resources for model workloads across distributed systems.",
44958
+ descriptionShort: "AI assistant queries and feedback collection.",
44959
+ descriptionMedium: "Natural language processing with quality signals and anomaly monitoring. Token authentication for data stream subscriptions.",
44960
44960
  aliases: ["ai", "genai", "assistant"],
44961
44961
  complexity: "simple",
44962
44962
  isPreview: true,
@@ -44995,9 +44995,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
44995
44995
  ["managed_kubernetes", {
44996
44996
  name: "managed_kubernetes",
44997
44997
  displayName: "Managed Kubernetes",
44998
- description: "Create granular access controls for namespace resources and non-resource URLs. Map permissions to users, groups, or service accounts through binding configurations. Deploy security admission enforcement using baseline, restricted, or privileged profiles. Register private image sources with credential management for secure pulls. Integrate with external managed solutions including EKS, AKS, and GKE infrastructure.",
44999
- descriptionShort: "Configure Kubernetes RBAC and pod security policies.",
45000
- descriptionMedium: "Define permission boundaries for workload access. Set up private image repositories with authentication for enterprise deployments.",
44998
+ description: "Role-based access controls with cluster-scoped permissions and namespace bindings. Pod security admission levels enforce baseline, restricted, or privileged profiles. Container registry credentials support private image pulls across hybrid deployments. Policy rules define resource verbs, groups, and non-resource URL access patterns.",
44999
+ descriptionShort: "Cluster RBAC, pod security, and container registries.",
45000
+ descriptionMedium: "Kubernetes role bindings and admission policies. Registry integration for EKS, AKS, and GKE workloads.",
45001
45001
  aliases: ["mk8s", "appstack", "k8s-mgmt"],
45002
45002
  complexity: "moderate",
45003
45003
  isPreview: false,
@@ -45046,9 +45046,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45046
45046
  ["marketplace", {
45047
45047
  name: "marketplace",
45048
45048
  displayName: "Marketplace",
45049
- description: "Set up secure tunnel connections using IKEv1/IKEv2 parameters, GRE encapsulation with source and destination addressing, or dedicated link types. Manage DPD keep-alive timers and tunnel termination points for reliable connectivity. Activate purchasable services with namespace-scoped status tracking. Create custom portal widgets for interface integration and configure Cloud Manager instances for Terraform and infrastructure automation workflows.",
45050
- descriptionShort: "Manage third-party integrations and add-ons.",
45051
- descriptionMedium: "Configure connector tunnels with IPSec, GRE, or direct links. Deploy purchasable services and portal customizations across namespaces.",
45049
+ description: "External connector infrastructure supporting direct, GRE, and encrypted tunnel modes with IKE parameter configuration and dead peer detection intervals. Cloud provider instances for Terraform automation and vendor partnerships. Service catalog entries with per-namespace activation flags, resource quotas, and administrative dashboard tile arrangement for operational workflows.",
45050
+ descriptionShort: "Add-on services, connectors, and TPM policies.",
45051
+ descriptionMedium: "Third-party GRE and IPSec tunnel provisioning with DPD timers. Shared resource allocation across namespaces with tile placement controls.",
45052
45052
  aliases: ["market", "addons", "extensions"],
45053
45053
  complexity: "moderate",
45054
45054
  isPreview: false,
@@ -45085,9 +45085,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45085
45085
  ["network", {
45086
45086
  name: "network",
45087
45087
  displayName: "Network",
45088
- description: "Deploy secure site connectivity using IPsec tunnels with customizable IKE phase settings, encryption algorithms, and DH groups. Configure BGP routing with peer state monitoring, ASN management, and traffic policies. Set up SRv6 segments, IP prefix sets, and subnet definitions. Manage DC cluster groups for data center integration and define routes for traffic steering across distributed infrastructure.",
45089
- descriptionShort: "Configure BGP routing, tunnels, and connectivity.",
45090
- descriptionMedium: "Manage IPsec tunnels and IKE configurations. Define BGP peers, ASN assignments, and routing policies for site-to-site connections.",
45088
+ description: "Routing table manipulation via peer state machines and path selection algorithms. Secure conduits between locations using IKE handshakes, cipher suites, and key exchanges. Segment attachments bridge hybrid topologies spanning cloud providers and on-premises infrastructure. SRv6 addressing, CIDR block matching, and advertisement controls direct traffic flows across distributed deployments with granular policy enforcement.",
45089
+ descriptionShort: "BGP peering, IPsec tunnels, and segment policies.",
45090
+ descriptionMedium: "Border gateway protocol with ASN management and autonomous system relationships. Site-to-site VPN linking datacenters through encrypted channels.",
45091
45091
  aliases: ["net", "routing", "bgp"],
45092
45092
  complexity: "advanced",
45093
45093
  isPreview: false,
@@ -45140,9 +45140,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45140
45140
  ["network_security", {
45141
45141
  name: "network_security",
45142
45142
  displayName: "Network Security",
45143
- description: "Manage firewall configurations with match criteria and action rules. Create NAT policies using dynamic pools and port configurations for address translation. Define segment connections to isolate traffic between network zones. Configure policy-based routing to direct packets based on source, destination, or protocol attributes. Set up forward proxy policies and access control lists to govern outbound connections.",
45144
- descriptionShort: "Configure firewalls, NAT, and routing policies.",
45145
- descriptionMedium: "Define network firewall rules and NAT policies. Set up policy-based routing with segment connections for traffic control.",
45143
+ description: "Perimeter defense through firewall configurations, address translation, and ingress/egress policies. Traffic steering directs packets according to defined criteria including origin, target, and service type. Segment boundaries create workload isolation zones while HTTP intermediaries manage client requests to external destinations. Port mappings employ static and dynamic address pools for flexible translation scenarios across multi-tenant environments.",
45144
+ descriptionShort: "NAT policies, firewalls, and segment connections.",
45145
+ descriptionMedium: "Firewall rules with routing decisions based on source, destination, or protocol. Segmentation isolates workloads while outbound proxies govern access.",
45146
45146
  aliases: ["netsec", "nfw"],
45147
45147
  complexity: "advanced",
45148
45148
  isPreview: false,
@@ -45189,9 +45189,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45189
45189
  ["nginx_one", {
45190
45190
  name: "nginx_one",
45191
45191
  displayName: "Nginx One",
45192
- description: "Set up load balancing configurations with backend server definitions and routing logic. Create monitoring schedules for availability tracking across distributed nodes. Build request handling pipelines with rate controls and authentication layers. Track instance performance metrics and traffic patterns. Coordinate failover mechanisms using weighted distribution and priority-based selection.",
45193
- descriptionShort: "Configure NGINX proxy instances and deployments.",
45194
- descriptionMedium: "Manage upstream server pools and health monitors. Define SSL termination rules and connection parameters for gateway endpoints.",
45192
+ description: "Dataplane server registration with health status tracking and location awareness. Service discovery bindings for dynamic upstream resolution. Cloud service gateway integration for hybrid deployments. WAF policy attachment and instance-level security controls.",
45193
+ descriptionShort: "NGINX Plus instances and dataplane servers.",
45194
+ descriptionMedium: "Instance discovery, WAF integration, and service mesh connectivity. Subscription lifecycle and configuration synchronization.",
45195
45195
  aliases: ["nginx", "nms", "nginx-plus"],
45196
45196
  complexity: "simple",
45197
45197
  isPreview: false,
@@ -45230,9 +45230,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45230
45230
  ["object_storage", {
45231
45231
  name: "object_storage",
45232
45232
  displayName: "Object Storage",
45233
- description: "Deploy binary artifacts and configuration bundles with automatic version tracking and lifecycle policies. Organize content by category including protection signatures, SDK packages, and third-party connector files. Enable time-limited download links for secure distribution without credential exposure. Track revision history for audit trails and support rollback to previous artifact versions when needed.",
45234
- descriptionShort: "Manage stored objects and bucket versioning.",
45235
- descriptionMedium: "Create versioned content within tenant buckets. Generate secure access URLs for SDK distributions and application protection resources.",
45233
+ description: "Blob management for application component delivery across namespaces. Time-limited download links with cryptographic signing protect asset retrieval. Version-controlled packages organized by operating system type support artifact discovery. Query filtering by name, type, and release number enables programmatic access to integrator libraries and protection modules for mobile deployments.",
45234
+ descriptionShort: "Mobile SDK assets, versioned binaries, and app shield files.",
45235
+ descriptionMedium: "Versioned library distribution for mobile app integrators. Presigned URLs enable secure downloads with OS-specific builds for iOS and Android.",
45236
45236
  aliases: ["storage", "s3", "buckets"],
45237
45237
  complexity: "simple",
45238
45238
  isPreview: false,
@@ -45273,9 +45273,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45273
45273
  ["observability", {
45274
45274
  name: "observability",
45275
45275
  displayName: "Observability",
45276
- description: "Set up synthetic monitoring for DNS resolution and HTTP services across AWS regions. Generate health reports with historical trends and summary dashboards. Monitor certificate validity, track response times, and aggregate results by namespace for capacity planning.",
45277
- descriptionShort: "Configure synthetic monitors and health checks.",
45278
- descriptionMedium: "Define DNS and HTTP monitors with regional testing. Track certificate expiration and service availability across zones.",
45276
+ description: "Telemetry systems execute scheduled availability checks from distributed AWS locations worldwide. Response code validation and timing metrics feed into historical trend analysis. DNS resolution accuracy verification ensures name service reliability. Certificate lifecycle tracking generates expiration warnings before outages occur. Regional probe distribution provides geographic coverage insights. Health summaries aggregate results into actionable dashboards with configurable alerting thresholds.",
45277
+ descriptionShort: "Synthetic health checks and DNS resolution validation.",
45278
+ descriptionMedium: "HTTP availability probes with latency measurement. Certificate expiration alerts and global status dashboards for infrastructure health.",
45279
45279
  aliases: ["obs", "monitoring", "synth"],
45280
45280
  complexity: "advanced",
45281
45281
  isPreview: false,
@@ -45322,9 +45322,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45322
45322
  ["rate_limiting", {
45323
45323
  name: "rate_limiting",
45324
45324
  displayName: "Rate Limiting",
45325
- description: "Create rate limiter policies with configurable time periods using seconds, minutes, or hours granularity. Deploy policers and protocol policers to enforce bandwidth constraints across namespaces. Define limit values, burst allowances, and blocking behaviors when thresholds trigger. Integrate with load balancers and security policies for layered traffic management and abuse prevention.",
45326
- descriptionShort: "Configure traffic throttling and policer rules.",
45327
- descriptionMedium: "Define request limits and burst thresholds for traffic control. Set up leaky bucket algorithms and block actions for exceeded quotas.",
45325
+ description: "Threshold-based request blocking using sliding window calculations. Burst smoothing algorithms maintain sustained throughput without exceeding defined maximums. Per-connection controls apply granular restrictions by protocol type. Automatic block actions trigger when request counts surpass configured limits within specified intervals.",
45326
+ descriptionShort: "Request throttling, quotas, and policer rules.",
45327
+ descriptionMedium: "Time-based quota enforcement with configurable windows in hours, minutes, or seconds. Protocol-specific controls for traffic shaping.",
45328
45328
  aliases: ["ratelimit", "throttle", "policer"],
45329
45329
  complexity: "simple",
45330
45330
  isPreview: false,
@@ -45373,9 +45373,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45373
45373
  ["secops_and_incident_response", {
45374
45374
  name: "secops_and_incident_response",
45375
45375
  displayName: "Secops And Incident Response",
45376
- description: "Manage incident response workflows that detect and mitigate malicious users automatically. Create rules matching threat levels to actions like blocking, rate limiting, or alerting. Set up mitigation policies per namespace to isolate security responses. Define thresholds for user behavior analysis and configure graduated responses based on severity. Integrate with bot defense and WAF systems for coordinated protection across application layers.",
45377
- descriptionShort: "Configure automated threat mitigation rules.",
45378
- descriptionMedium: "Define malicious user detection policies and response actions. Apply blocking or rate limiting based on threat levels.",
45376
+ description: "User threat assessment with configurable risk thresholds and mitigation rules. Detection covers high, medium, and low threat levels with corresponding actions like blocking, rate limiting, or alerting. Mitigation policies link to load balancers for real-time enforcement against identified bad actors.",
45377
+ descriptionShort: "Threat detection, user risk scoring, and automated blocking.",
45378
+ descriptionMedium: "Malicious user mitigation with threat level classification. Automated response actions for suspicious behavior patterns.",
45379
45379
  aliases: ["secops", "incident-response", "mitigation"],
45380
45380
  complexity: "simple",
45381
45381
  isPreview: false,
@@ -45412,9 +45412,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45412
45412
  ["service_mesh", {
45413
45413
  name: "service_mesh",
45414
45414
  displayName: "Service Mesh",
45415
- description: "Create classifications to organize services and support automatic identification of interconnected components. Set up analysis pipelines to understand patterns and build intelligent routing rules. Define network function virtualization for regional architectures. Configure authentication settings including location, state, and type recognition.",
45416
- descriptionShort: "Configure application types and discovery.",
45417
- descriptionMedium: "Manage NFV integrations and workload categories. Enable traffic learning across distributed deployments.",
45415
+ description: "NFV service lifecycle and software version tracking. Machine learning-driven classification with security risk assessment and PII detection. Override management for application behavior customization. Sidecar proxy orchestration with automatic mTLS certificate rotation and policy enforcement across distributed workloads.",
45416
+ descriptionShort: "Microservice routing and sidecar configuration.",
45417
+ descriptionMedium: "Application type definitions with discovery and learned schema analysis. Traffic pattern inference for intelligent request handling.",
45418
45418
  aliases: ["mesh", "svc-mesh"],
45419
45419
  complexity: "advanced",
45420
45420
  isPreview: false,
@@ -45463,9 +45463,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45463
45463
  ["shape", {
45464
45464
  name: "shape",
45465
45465
  displayName: "Shape",
45466
- description: "Set up bot defense infrastructure across namespaces with deployment tracking and status monitoring. Integrate mobile SDK attributes for app shielding and device recognition. Subscribe to threat intelligence services for real-time protection updates. Define cluster states and location-based policies for distributed bot mitigation. Track deployment history and manage policy configurations through centralized infrastructure objects.",
45467
- descriptionShort: "Configure bot defense and threat prevention.",
45468
- descriptionMedium: "Deploy bot infrastructure with mobile SDK integration. Manage subscription services and policy enforcement for automated threat protection.",
45466
+ description: "Bot infrastructure policies with deployment tracking and subscription management. SafeAP protection against credential stuffing and account takeover. Mobile application shielding through SDK integration with OS-specific configurations. Real-time threat intelligence updates and automated response actions based on risk scoring and traffic patterns.",
45467
+ descriptionShort: "Bot defense, fraud prevention, and client integrity.",
45468
+ descriptionMedium: "Threat recognition with behavioral analysis and device fingerprinting. Mobile SDK integration for application shielding.",
45469
45469
  aliases: ["shape-sec", "safeap"],
45470
45470
  complexity: "advanced",
45471
45471
  isPreview: false,
@@ -45502,9 +45502,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45502
45502
  ["sites", {
45503
45503
  name: "sites",
45504
45504
  displayName: "Sites",
45505
- description: "Deploy edge nodes across AWS, Azure, and GCP with automated provisioning. Configure VPC peering, transit gateway attachments, and VPN tunnel settings. Define virtual groupings with label selectors for policy targeting. Manage Kubernetes cluster integrations and secure mesh deployments. Monitor node health, validate configurations, and set IP prefix allocations.",
45506
- descriptionShort: "Deploy edge nodes across cloud providers.",
45507
- descriptionMedium: "Configure AWS, Azure, GCP deployments with VPC integration. Manage transit gateways and VPN tunnels.",
45505
+ description: "Multi-cloud node provisioning spanning major public cloud environments including TGW, VNet, and VPC architectures. VPN tunnel configuration handles secure connectivity while IP prefix management controls address allocation. Customer edge deployments support external container orchestration platforms. Geographic distribution with resource sharing enables consistent policy enforcement across deployment points.",
45506
+ descriptionShort: "Cloud and edge node deployments.",
45507
+ descriptionMedium: "AWS, Azure, GCP VPC integration with transit gateways. Label-based selection for policy application across regions.",
45508
45508
  aliases: ["site", "deployment"],
45509
45509
  complexity: "advanced",
45510
45510
  isPreview: false,
@@ -45607,9 +45607,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45607
45607
  ["statistics", {
45608
45608
  name: "statistics",
45609
45609
  displayName: "Statistics",
45610
- description: "Set up alert policies with custom matchers, label filters, and group-by rules for targeted notifications. Define routing channels via email, webhook, or integration receivers with confirmation and verification workflows. Access flow analytics, historical alert data, and namespace-scoped metrics. Build capacity planning graphs and operational summaries. Observe deployment health and service discovery mapping across distributed environments.",
45611
- descriptionShort: "Monitor alerts, logs, and flow analytics.",
45612
- descriptionMedium: "Configure alerting policies and notification receivers. Track service topology, build dashboards, and view site health summaries.",
45610
+ description: "Alert policies with custom matchers, label groupings, and notification parameters. Log receivers for centralized collection with confirmation and verification workflows. Flow analytics, historical trend data, and namespace-scoped dashboards. Topology discovery and site-level health indicators for operational visibility.",
45611
+ descriptionShort: "Alerts, logs, flow analytics, and reporting.",
45612
+ descriptionMedium: "Alerting policies with receiver integrations. Log aggregation, topology views, and site health tracking.",
45613
45613
  aliases: ["stats", "metrics", "logs"],
45614
45614
  complexity: "advanced",
45615
45615
  isPreview: false,
@@ -45648,9 +45648,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45648
45648
  ["support", {
45649
45649
  name: "support",
45650
45650
  displayName: "Support",
45651
- description: "Open new cases and assign severity ratings based on business impact. Append notes throughout resolution workflows. Mark items as closed or reinstate them if symptoms recur. Execute diagnostic packet captures on deployed sites for network troubleshooting. Handle tax exemption verification through certificate submission.",
45652
- descriptionShort: "Create and track customer tickets.",
45653
- descriptionMedium: "Submit requests with file uploads and priority levels. Add comments and escalate critical incidents to engineering teams.",
45651
+ description: "Case management workflows including submission, commentary, and closure paths. Urgency adjustments and routing for time-sensitive incidents. Tax exemption verification requests. Site-level tcpdump operations\u2014initiation, enumeration, and termination\u2014for low-level network troubleshooting and protocol analysis.",
45652
+ descriptionShort: "Tickets, escalations, and network diagnostics.",
45653
+ descriptionMedium: "Issue lifecycle with comments, severity changes, and resolution tracking. Packet capture for connection analysis.",
45654
45654
  aliases: ["tickets", "help-desk"],
45655
45655
  complexity: "moderate",
45656
45656
  isPreview: false,
@@ -45736,9 +45736,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45736
45736
  ["tenant_and_identity", {
45737
45737
  name: "tenant_and_identity",
45738
45738
  displayName: "Tenant And Identity",
45739
- description: "Set up granular alert routing for administrative and combined channels with personalized delivery options. Control active login sessions and enforce one-time password resets for security compliance. Define display layouts and avatar images for customized user experiences. Process onboarding access submissions and toggle account management features. Coordinate support ticket attachments and client relationship interactions across managed tenant hierarchies.",
45740
- descriptionShort: "Manage user profiles and session controls.",
45741
- descriptionMedium: "Configure OTP resets and admin alert channels. Handle view settings and profile customization for platform participants.",
45739
+ description: "Profile images and display customizations for personalized dashboard experiences. Federated authentication toggles controlling SSO behavior across organizational boundaries. Session lifecycle tracking with real-time visibility into active connections and timeout policies. Support ticket workflows including attachment handling and closure procedures for managed client escalations. Initial access provisioning sequences for new user onboarding.",
45740
+ descriptionShort: "User profiles, sessions, and OTP settings.",
45741
+ descriptionMedium: "Account view configurations and admin alert channels. One-time password resets, provisioning flows, and active connection monitoring.",
45742
45742
  aliases: ["tenant-identity", "idm", "user-settings"],
45743
45743
  complexity: "advanced",
45744
45744
  isPreview: false,
@@ -45814,9 +45814,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45814
45814
  ["users", {
45815
45815
  name: "users",
45816
45816
  displayName: "Users",
45817
- description: "Deploy namespace-scoped access credentials with lifecycle state tracking for secure machine enrollment. Build hierarchical tagging frameworks that enable systematic organization of infrastructure elements. Retrieve automated provisioning payloads for streamlined node initialization. Enable system-level automatic tagging that applies predefined metadata to newly created objects without operator action.",
45818
- descriptionShort: "Manage account tokens and label settings.",
45819
- descriptionMedium: "Configure credential issuance and cloud-init provisioning. Establish key-value taxonomies for consistent resource categorization across deployments.",
45817
+ description: "Token lifecycle governs automated site onboarding through cloud-init integration with configurable validity periods. Explicit category keys establish permitted classification hierarchies enforced across deployments. Inferred attributes attach automatically based on object characteristics and placement context. Namespace-scoped operations handle credential generation, revocation, and state transitions for streamlined provisioning workflows.",
45818
+ descriptionShort: "Account tokens, labels, and cloud-init config.",
45819
+ descriptionMedium: "Site enrollment credentials with automatic expiration. Taxonomy keys define allowed categorization while auto-derived tags apply dynamically.",
45820
45820
  aliases: ["user", "accounts", "iam"],
45821
45821
  complexity: "simple",
45822
45822
  isPreview: false,
@@ -45865,9 +45865,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
45865
45865
  ["virtual", {
45866
45866
  name: "virtual",
45867
45867
  displayName: "Virtual",
45868
- description: "Deploy load balancers across protocols with origin pool management and service discovery. Set up geo-location routing to direct traffic based on client location. Define rate limiter policies to control request volume and protect services from abuse. Configure health checks for origin monitoring and automatic failover. Manage service policies for access control and traffic filtering. Enable malware protection and threat campaign blocking for security enforcement.",
45869
- descriptionShort: "Configure load balancers and origin pools.",
45870
- descriptionMedium: "Create HTTP, TCP, and UDP load balancers with origin pools. Define routing rules, health checks, and rate limiting policies.",
45868
+ description: "Traffic distribution across origin pools with weighted routing and session persistence. Malware protection integration, threat campaign blocking, and request inspection. Proxy forwarding policies, server monitoring, and latency-based routing decisions. Service policy sets for fine-grained access control and rate limiter policies for traffic shaping.",
45869
+ descriptionShort: "HTTP, TCP, UDP load balancers and origin pools.",
45870
+ descriptionMedium: "Layer 7 routing rules with health checks and failover. Rate limiting, geo-routing, and service policy enforcement.",
45871
45871
  aliases: ["lb", "loadbalancer", "vhost"],
45872
45872
  complexity: "advanced",
45873
45873
  isPreview: false,
@@ -46021,9 +46021,9 @@ var generatedDomains = /* @__PURE__ */ new Map([
46021
46021
  ["waf", {
46022
46022
  name: "waf",
46023
46023
  displayName: "Waf",
46024
- description: "Set up firewall configurations with attack type settings and violation detection. Create exclusion policies to tune false positives and customize blocking responses. Deploy staged signatures before production release and monitor rule hits through security event metrics. Integrate with virtual hosts for layered protection using AI-based risk blocking and anonymization settings for sensitive data handling.",
46025
- descriptionShort: "Configure application firewall rules and bot protection.",
46026
- descriptionMedium: "Define security policies for web applications. Manage attack signatures, exclusion rules, and threat detection settings.",
46024
+ description: "Signature-based attack detection with customizable blocking responses. Attack type classification, protocol inspection, and AI-driven risk assessment. Exclusion policies override default blocking for trusted traffic. Staged signature testing validates rules before enforcement. Security event metrics track rule hits and blocked requests across namespaces.",
46025
+ descriptionShort: "Request inspection, attack signatures, and bot mitigation.",
46026
+ descriptionMedium: "Application firewall rules with signature-based detection. Exclusion policies, blocking pages, and anomaly prevention.",
46027
46027
  aliases: ["firewall", "appfw"],
46028
46028
  complexity: "advanced",
46029
46029
  isPreview: false,
@@ -46237,7 +46237,8 @@ var ContextValidator = class {
46237
46237
 
46238
46238
  // src/repl/history.ts
46239
46239
  import { readFileSync as readFileSync2, writeFileSync, mkdirSync, existsSync as existsSync2 } from "fs";
46240
- import { dirname } from "path";
46240
+ import { dirname, join as join2 } from "path";
46241
+ import { homedir as homedir2 } from "os";
46241
46242
 
46242
46243
  // src/config/paths.ts
46243
46244
  import { homedir } from "os";
@@ -46281,6 +46282,7 @@ var paths = {
46281
46282
  };
46282
46283
 
46283
46284
  // src/repl/history.ts
46285
+ var LEGACY_HISTORY_PATH = join2(homedir2(), ".xcsh_history");
46284
46286
  var SENSITIVE_PATTERNS = [
46285
46287
  // Flag-based patterns: --flag value or --flag=value (capture flag and separator separately)
46286
46288
  {
@@ -46339,9 +46341,21 @@ var HistoryManager = class _HistoryManager {
46339
46341
  }
46340
46342
  /**
46341
46343
  * Load reads history from the history file
46344
+ * Includes one-time migration from legacy ~/.xcsh_history location
46342
46345
  */
46343
46346
  async load() {
46344
46347
  try {
46348
+ const newPathExists = existsSync2(this.path);
46349
+ const legacyExists = existsSync2(LEGACY_HISTORY_PATH);
46350
+ if (!newPathExists && legacyExists) {
46351
+ const dir = dirname(this.path);
46352
+ mkdirSync(dir, { recursive: true });
46353
+ const legacyContent = readFileSync2(
46354
+ LEGACY_HISTORY_PATH,
46355
+ "utf-8"
46356
+ );
46357
+ writeFileSync(this.path, legacyContent, "utf-8");
46358
+ }
46345
46359
  if (!existsSync2(this.path)) {
46346
46360
  return;
46347
46361
  }
@@ -46620,8 +46634,8 @@ function getLogoModeFromEnv(envPrefix) {
46620
46634
  var CLI_NAME = "xcsh";
46621
46635
  var CLI_FULL_NAME = "F5 Distributed Cloud Shell";
46622
46636
  function getVersion() {
46623
- if ("v1.0.84-2601020527") {
46624
- return "v1.0.84-2601020527";
46637
+ if ("v1.0.85-2601020738") {
46638
+ return "v1.0.85-2601020738";
46625
46639
  }
46626
46640
  if (process.env.XCSH_VERSION) {
46627
46641
  return process.env.XCSH_VERSION;
@@ -46695,7 +46709,7 @@ function colorDim(text) {
46695
46709
  // src/profile/manager.ts
46696
46710
  var import_yaml = __toESM(require_dist(), 1);
46697
46711
  import { promises as fs2 } from "fs";
46698
- import { join as join2 } from "path";
46712
+ import { join as join3 } from "path";
46699
46713
  function snakeToCamel(str) {
46700
46714
  return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
46701
46715
  }
@@ -46728,7 +46742,7 @@ var ProfileManager = class {
46728
46742
  * Get path to profile JSON file
46729
46743
  */
46730
46744
  getProfilePath(name) {
46731
- return join2(this.config.profilesDir, `${name}.json`);
46745
+ return join3(this.config.profilesDir, `${name}.json`);
46732
46746
  }
46733
46747
  /**
46734
46748
  * Validate profile name (alphanumeric, dash, underscore only)
@@ -46787,7 +46801,7 @@ var ProfileManager = class {
46787
46801
  await this.ensureDirectories();
46788
46802
  const extensions = [".json", ".yaml", ".yml"];
46789
46803
  for (const ext of extensions) {
46790
- const path = join2(this.config.profilesDir, `${name}${ext}`);
46804
+ const path = join3(this.config.profilesDir, `${name}${ext}`);
46791
46805
  try {
46792
46806
  const data = await fs2.readFile(path, "utf-8");
46793
46807
  let parsed;
@@ -144106,7 +144120,11 @@ var REPLSession = class {
144106
144120
  };
144107
144121
 
144108
144122
  // src/repl/prompt.ts
144109
- function buildPlainPrompt(_session) {
144123
+ function buildPlainPrompt(session) {
144124
+ const ctx = session.getContextPath();
144125
+ if (ctx.isDomain()) {
144126
+ return `${CLI_NAME}:${ctx.domain}> `;
144127
+ }
144110
144128
  return `${CLI_NAME}> `;
144111
144129
  }
144112
144130
 
@@ -147493,7 +147511,146 @@ var CompletionCache = class {
147493
147511
  }
147494
147512
  };
147495
147513
 
147514
+ // src/repl/completion/resource-fetcher.ts
147515
+ var CACHE_TTL = 30 * 1e3;
147516
+ var ResourceFetcher = class {
147517
+ cache = /* @__PURE__ */ new Map();
147518
+ pendingRequests = /* @__PURE__ */ new Map();
147519
+ /**
147520
+ * Convert resource type (snake_case) to API path (kebab-case with plural)
147521
+ * Examples:
147522
+ * http_loadbalancer -> http-loadbalancers
147523
+ * origin_pool -> origin-pools
147524
+ * app_firewall -> app-firewalls
147525
+ */
147526
+ resourceTypeToApiPath(resourceType) {
147527
+ const kebabCase = resourceType.replace(/_/g, "-");
147528
+ return kebabCase.endsWith("s") ? kebabCase : `${kebabCase}s`;
147529
+ }
147530
+ /**
147531
+ * Generate cache key from namespace and resource type
147532
+ */
147533
+ getCacheKey(namespace, resourceType) {
147534
+ return `${namespace}:${resourceType}`;
147535
+ }
147536
+ /**
147537
+ * Check if cache entry is still valid
147538
+ */
147539
+ isCacheValid(entry) {
147540
+ if (!entry) return false;
147541
+ return Date.now() - entry.timestamp < CACHE_TTL;
147542
+ }
147543
+ /**
147544
+ * Check if a resource type is currently being loaded
147545
+ */
147546
+ isLoading(namespace, resourceType) {
147547
+ const key = this.getCacheKey(namespace, resourceType);
147548
+ const entry = this.cache.get(key);
147549
+ return entry?.loading ?? false;
147550
+ }
147551
+ /**
147552
+ * Fetch resource names from API with caching and deduplication
147553
+ */
147554
+ async fetchResourceNames(client, namespace, resourceType, partial = "") {
147555
+ const cacheKey = this.getCacheKey(namespace, resourceType);
147556
+ const cached = this.cache.get(cacheKey);
147557
+ if (cached && this.isCacheValid(cached)) {
147558
+ return this.filterByPrefix(cached.names, partial);
147559
+ }
147560
+ const pending = this.pendingRequests.get(cacheKey);
147561
+ if (pending) {
147562
+ const names = await pending;
147563
+ return this.filterByPrefix(names, partial);
147564
+ }
147565
+ if (!client?.isAuthenticated()) {
147566
+ return [];
147567
+ }
147568
+ const existingNames = cached?.names ?? [];
147569
+ const existingTimestamp = cached?.timestamp ?? 0;
147570
+ this.cache.set(cacheKey, {
147571
+ names: existingNames,
147572
+ timestamp: existingTimestamp,
147573
+ loading: true
147574
+ });
147575
+ const fetchPromise = this.doFetch(client, namespace, resourceType);
147576
+ this.pendingRequests.set(cacheKey, fetchPromise);
147577
+ try {
147578
+ const names = await fetchPromise;
147579
+ this.cache.set(cacheKey, {
147580
+ names,
147581
+ timestamp: Date.now(),
147582
+ loading: false
147583
+ });
147584
+ return this.filterByPrefix(names, partial);
147585
+ } catch {
147586
+ const existing = this.cache.get(cacheKey);
147587
+ if (existing) {
147588
+ existing.loading = false;
147589
+ }
147590
+ return [];
147591
+ } finally {
147592
+ this.pendingRequests.delete(cacheKey);
147593
+ }
147594
+ }
147595
+ /**
147596
+ * Internal fetch implementation
147597
+ */
147598
+ async doFetch(client, namespace, resourceType) {
147599
+ const apiPath = this.resourceTypeToApiPath(resourceType);
147600
+ const endpoint = `/api/config/namespaces/${namespace}/${apiPath}`;
147601
+ try {
147602
+ const response = await client.get(endpoint);
147603
+ if (response.ok && response.data?.items) {
147604
+ return response.data.items.map((item) => item.name ?? item.metadata?.name).filter((name) => !!name).sort();
147605
+ }
147606
+ } catch {
147607
+ }
147608
+ return [];
147609
+ }
147610
+ /**
147611
+ * Filter names by prefix (case-insensitive)
147612
+ */
147613
+ filterByPrefix(names, prefix) {
147614
+ if (!prefix) return names;
147615
+ const lowerPrefix = prefix.toLowerCase();
147616
+ return names.filter(
147617
+ (name) => name.toLowerCase().startsWith(lowerPrefix)
147618
+ );
147619
+ }
147620
+ /**
147621
+ * Prefetch resource names for a domain's primary resources
147622
+ * Call this when entering a domain context to warm the cache
147623
+ */
147624
+ async prefetch(client, namespace, resourceTypes) {
147625
+ if (!client?.isAuthenticated()) return;
147626
+ await Promise.allSettled(
147627
+ resourceTypes.map(
147628
+ (rt) => this.fetchResourceNames(client, namespace, rt)
147629
+ )
147630
+ );
147631
+ }
147632
+ /**
147633
+ * Clear cache for a specific namespace (e.g., when switching namespaces)
147634
+ */
147635
+ clearNamespaceCache(namespace) {
147636
+ for (const key of this.cache.keys()) {
147637
+ if (key.startsWith(`${namespace}:`)) {
147638
+ this.cache.delete(key);
147639
+ }
147640
+ }
147641
+ }
147642
+ /**
147643
+ * Clear all cached data
147644
+ */
147645
+ clearAll() {
147646
+ this.cache.clear();
147647
+ this.pendingRequests.clear();
147648
+ }
147649
+ };
147650
+ var resourceFetcher = new ResourceFetcher();
147651
+
147496
147652
  // src/repl/completion/completer.ts
147653
+ var RESOURCE_ACTIONS = /* @__PURE__ */ new Set(["list", "get", "delete", "status"]);
147497
147654
  function parseInputArgs(text) {
147498
147655
  const args = [];
147499
147656
  let current = "";
@@ -147539,21 +147696,22 @@ function parseInput(text) {
147539
147696
  const isCompletingFlag = currentWord.startsWith("-");
147540
147697
  let isCompletingFlagValue = false;
147541
147698
  let currentFlag = null;
147542
- if (args.length >= 2 && !currentWord.startsWith("-")) {
147543
- const prevArg = args[args.length - 2];
147699
+ const valueFlagPatterns = [
147700
+ "--namespace",
147701
+ "-ns",
147702
+ "--output",
147703
+ "-o",
147704
+ "--name",
147705
+ "-n",
147706
+ "--file",
147707
+ "-f",
147708
+ "--limit",
147709
+ "--label"
147710
+ ];
147711
+ if (args.length >= 1 && !currentWord.startsWith("-")) {
147712
+ const flagIndex = endsWithSpace ? args.length - 1 : args.length - 2;
147713
+ const prevArg = args[flagIndex];
147544
147714
  if (prevArg && prevArg.startsWith("-") && !prevArg.includes("=")) {
147545
- const valueFlagPatterns = [
147546
- "--namespace",
147547
- "-ns",
147548
- "--output",
147549
- "-o",
147550
- "--name",
147551
- "-n",
147552
- "--file",
147553
- "-f",
147554
- "--limit",
147555
- "--label"
147556
- ];
147557
147715
  if (valueFlagPatterns.some((f) => prevArg === f)) {
147558
147716
  isCompletingFlagValue = true;
147559
147717
  currentFlag = prevArg;
@@ -147609,6 +147767,7 @@ var Completer = class {
147609
147767
  parsed.currentWord
147610
147768
  );
147611
147769
  }
147770
+ const resourceCtx = this.parseResourceContext(parsed);
147612
147771
  if (parsed.isCompletingFlagValue && parsed.currentFlag) {
147613
147772
  return await this.getFlagValueCompletions(
147614
147773
  parsed.currentFlag,
@@ -147616,7 +147775,43 @@ var Completer = class {
147616
147775
  );
147617
147776
  }
147618
147777
  if (parsed.isCompletingFlag) {
147619
- return this.getFlagCompletions(parsed.currentWord);
147778
+ return this.getFlagCompletions(
147779
+ parsed.currentWord,
147780
+ resourceCtx.action ?? void 0
147781
+ );
147782
+ }
147783
+ if (resourceCtx.resourceType) {
147784
+ const resourceNames = await this.getResourceNameSuggestions(
147785
+ resourceCtx.resourceType,
147786
+ resourceCtx.resourceNamePartial
147787
+ );
147788
+ if (resourceNames.length > 0) {
147789
+ return resourceNames;
147790
+ }
147791
+ return this.getActionFlagSuggestions(
147792
+ resourceCtx.action ?? void 0
147793
+ );
147794
+ }
147795
+ if (resourceCtx.domain && resourceCtx.action && RESOURCE_ACTIONS.has(resourceCtx.action) && !resourceCtx.resourceType) {
147796
+ const resourceTypes = this.getResourceTypeSuggestions(
147797
+ resourceCtx.domain
147798
+ );
147799
+ if (resourceTypes.length > 0) {
147800
+ if (parsed.currentWord && !parsed.currentWord.startsWith("-")) {
147801
+ const filtered = this.filterSuggestions(
147802
+ resourceTypes,
147803
+ parsed.currentWord
147804
+ );
147805
+ if (filtered.length > 0) {
147806
+ return filtered;
147807
+ }
147808
+ } else if (!parsed.currentWord) {
147809
+ return [
147810
+ ...resourceTypes,
147811
+ ...this.getActionFlagSuggestions(resourceCtx.action)
147812
+ ];
147813
+ }
147814
+ }
147620
147815
  }
147621
147816
  let suggestions;
147622
147817
  if (parsed.isEscapedToRoot) {
@@ -147718,21 +147913,16 @@ var Completer = class {
147718
147913
  }
147719
147914
  /**
147720
147915
  * Get suggestions based on current navigation context
147916
+ * Note: Actions don't create sub-contexts - only domain-level navigation exists
147721
147917
  */
147722
147918
  async getContextualSuggestions() {
147723
147919
  if (!this.session) {
147724
147920
  return this.getRootContextSuggestions();
147725
147921
  }
147726
147922
  const ctx = this.session.getContextPath();
147727
- if (ctx.isRoot()) {
147728
- return this.getRootContextSuggestions();
147729
- }
147730
147923
  if (ctx.isDomain()) {
147731
147924
  return this.getDomainContextSuggestions();
147732
147925
  }
147733
- if (ctx.isAction()) {
147734
- return await this.getActionContextSuggestions();
147735
- }
147736
147926
  return this.getRootContextSuggestions();
147737
147927
  }
147738
147928
  /**
@@ -147850,44 +148040,35 @@ var Completer = class {
147850
148040
  return suggestions;
147851
148041
  }
147852
148042
  /**
147853
- * Get suggestions when in an action context
148043
+ * Get resource-related suggestions for a domain with an action
148044
+ * Called when user types an action (list, get, delete) followed by space
147854
148045
  */
147855
- async getActionContextSuggestions() {
148046
+ getResourceSuggestionsForAction(domain, action) {
147856
148047
  const suggestions = [];
147857
- suggestions.push(...this.getActionFlagSuggestions());
147858
- suggestions.push(
147859
- {
147860
- text: "exit",
147861
- description: "Go up to domain context",
147862
- category: "navigation"
147863
- },
147864
- {
147865
- text: "back",
147866
- description: "Go up to domain context",
147867
- category: "navigation"
147868
- },
147869
- {
147870
- text: "..",
147871
- description: "Go up to domain context",
147872
- category: "navigation"
147873
- },
147874
- {
147875
- text: "root",
147876
- description: "Go to root context",
147877
- category: "navigation"
147878
- },
148048
+ if (RESOURCE_ACTIONS.has(action)) {
148049
+ const resourceTypes = this.getResourceTypeSuggestions(domain);
148050
+ suggestions.push(...resourceTypes);
148051
+ }
148052
+ suggestions.push(...this.getCommonFlagSuggestions());
148053
+ return suggestions;
148054
+ }
148055
+ /**
148056
+ * Get common flag suggestions (for use within domain context)
148057
+ */
148058
+ getCommonFlagSuggestions() {
148059
+ return [
148060
+ { text: "--namespace", description: "Namespace", category: "flag" },
147879
148061
  {
147880
- text: "/",
147881
- description: "Go to root context",
147882
- category: "navigation"
148062
+ text: "--output",
148063
+ description: `Output format (${OUTPUT_FORMAT_HELP})`,
148064
+ category: "flag"
147883
148065
  },
147884
148066
  {
147885
- text: "help",
147886
- description: "Show context help",
147887
- category: "builtin"
148067
+ text: "-o",
148068
+ description: "Output format (short)",
148069
+ category: "flag"
147888
148070
  }
147889
- );
147890
- return suggestions;
148071
+ ];
147891
148072
  }
147892
148073
  /**
147893
148074
  * Get domain suggestions from unified registry
@@ -147909,9 +148090,100 @@ var Completer = class {
147909
148090
  );
147910
148091
  }
147911
148092
  /**
147912
- * Get flag suggestions for current action
148093
+ * Get resource type suggestions for a domain
148094
+ * Returns the primaryResources from domain metadata
148095
+ */
148096
+ getResourceTypeSuggestions(domain) {
148097
+ const domainInfo = getDomainInfo(domain);
148098
+ if (!domainInfo?.primaryResources) {
148099
+ return [];
148100
+ }
148101
+ return domainInfo.primaryResources.map((resource) => ({
148102
+ text: resource.name,
148103
+ description: resource.descriptionShort || resource.description,
148104
+ category: "resource"
148105
+ }));
148106
+ }
148107
+ /**
148108
+ * Get resource name suggestions from live API
148109
+ * Fetches actual resource names for a given resource type
147913
148110
  */
147914
- getActionFlagSuggestions() {
148111
+ async getResourceNameSuggestions(resourceType, partial = "") {
148112
+ if (!this.session) return [];
148113
+ const namespace = this.session.getNamespace();
148114
+ const client = this.session.getAPIClient();
148115
+ const names = await resourceFetcher.fetchResourceNames(
148116
+ client,
148117
+ namespace,
148118
+ resourceType,
148119
+ partial
148120
+ );
148121
+ return names.map((name) => ({
148122
+ text: name,
148123
+ description: `${resourceType} resource`,
148124
+ category: "resource-name"
148125
+ }));
148126
+ }
148127
+ /**
148128
+ * Parse resource context from input
148129
+ * Detects: domain → action → resourceType → resourceName
148130
+ * Note: Actions are detected from input args, not navigation context
148131
+ *
148132
+ * Key distinction:
148133
+ * - "list http_loadbalancer" (no space) → still typing resource type
148134
+ * - "list http_loadbalancer " (with space) → resource type complete, ready for resource name
148135
+ */
148136
+ parseResourceContext(parsed) {
148137
+ const ctx = {
148138
+ domain: null,
148139
+ action: null,
148140
+ resourceType: null,
148141
+ resourceNamePartial: ""
148142
+ };
148143
+ if (!this.session) {
148144
+ return ctx;
148145
+ }
148146
+ const navCtx = this.session.getContextPath();
148147
+ ctx.domain = navCtx.domain || null;
148148
+ if (parsed.args.length > 0) {
148149
+ const firstArg = parsed.args[0]?.toLowerCase() ?? "";
148150
+ if (RESOURCE_ACTIONS.has(firstArg)) {
148151
+ ctx.action = firstArg;
148152
+ }
148153
+ }
148154
+ if (ctx.domain && ctx.action && RESOURCE_ACTIONS.has(ctx.action)) {
148155
+ const domainInfo = getDomainInfo(ctx.domain);
148156
+ const resourceNames = new Set(
148157
+ domainInfo?.primaryResources?.map((r) => r.name) ?? []
148158
+ );
148159
+ for (let i = 1; i < parsed.args.length; i++) {
148160
+ const arg = parsed.args[i]?.toLowerCase() ?? "";
148161
+ if (resourceNames.has(arg)) {
148162
+ const isLastArg = i === parsed.args.length - 1;
148163
+ const isStillTyping = isLastArg && parsed.currentWord.toLowerCase() === arg;
148164
+ if (isStillTyping) {
148165
+ break;
148166
+ }
148167
+ ctx.resourceType = arg;
148168
+ if (i < parsed.args.length - 1) {
148169
+ const nextArg = parsed.args[i + 1]?.toLowerCase() ?? "";
148170
+ if (!nextArg.startsWith("-")) {
148171
+ ctx.resourceNamePartial = nextArg;
148172
+ }
148173
+ } else if (!parsed.currentWord) {
148174
+ ctx.resourceNamePartial = "";
148175
+ }
148176
+ break;
148177
+ }
148178
+ }
148179
+ }
148180
+ return ctx;
148181
+ }
148182
+ /**
148183
+ * Get flag suggestions for a given action
148184
+ * @param action - The action to get flags for (optional, uses common flags if not provided)
148185
+ */
148186
+ getActionFlagSuggestions(action) {
147915
148187
  const commonFlags = [
147916
148188
  { text: "--name", description: "Resource name", category: "flag" },
147917
148189
  {
@@ -147931,11 +148203,9 @@ var Completer = class {
147931
148203
  category: "flag"
147932
148204
  }
147933
148205
  ];
147934
- if (!this.session) {
148206
+ if (!action) {
147935
148207
  return commonFlags;
147936
148208
  }
147937
- const ctx = this.session.getContextPath();
147938
- const action = ctx.action;
147939
148209
  const actionFlags = [...commonFlags];
147940
148210
  switch (action) {
147941
148211
  case "list":
@@ -147993,9 +148263,11 @@ var Completer = class {
147993
148263
  }
147994
148264
  /**
147995
148265
  * Get flag completions filtered by prefix
148266
+ * @param prefix - The prefix to filter by
148267
+ * @param action - Optional action for action-specific flags
147996
148268
  */
147997
- getFlagCompletions(prefix) {
147998
- const allFlags = this.getActionFlagSuggestions();
148269
+ getFlagCompletions(prefix, action) {
148270
+ const allFlags = this.getActionFlagSuggestions(action);
147999
148271
  return this.filterSuggestions(allFlags, prefix);
148000
148272
  }
148001
148273
  /**
@@ -148824,6 +149096,19 @@ async function handleDomainNavigation(domain, args, ctx, session) {
148824
149096
  };
148825
149097
  }
148826
149098
  ctx.setDomain(domain);
149099
+ if (args.length > 0) {
149100
+ const firstArg2 = args[0]?.toLowerCase() ?? "";
149101
+ const resourceActions = /* @__PURE__ */ new Set(["list", "get", "delete", "status"]);
149102
+ if (resourceActions.has(firstArg2)) {
149103
+ const cmd = {
149104
+ raw: args.join(" "),
149105
+ args,
149106
+ isBuiltin: false,
149107
+ isDirectNavigation: false
149108
+ };
149109
+ return await executeAPICommand(session, ctx, cmd);
149110
+ }
149111
+ }
148827
149112
  return {
148828
149113
  output: [`Entered ${domain} context`],
148829
149114
  shouldExit: false,
@@ -148857,31 +149142,21 @@ async function executeCommand(input, session) {
148857
149142
  return handleDomainNavigation(firstWord, domainArgs, ctx, session);
148858
149143
  }
148859
149144
  }
148860
- if (ctx.isDomain() && !ctx.isAction()) {
148861
- const firstWord = cmd.args[0] ?? "";
148862
- if (firstWord && !firstWord.startsWith("-")) {
148863
- ctx.setAction(firstWord);
148864
- return {
148865
- output: [`Entered ${ctx.domain} > ${firstWord} context`],
148866
- shouldExit: false,
148867
- shouldClear: false,
148868
- contextChanged: true
148869
- };
148870
- }
148871
- }
148872
149145
  return await executeAPICommand(session, ctx, cmd);
148873
149146
  }
148874
149147
  function domainToResourcePath(domain) {
148875
149148
  const canonical = resolveDomain(domain) ?? domain;
148876
- const resourceName = canonical.replace(/_/g, "-");
149149
+ const resourceName = canonical;
148877
149150
  return resourceName.endsWith("s") ? resourceName : `${resourceName}s`;
148878
149151
  }
148879
- function parseCommandArgs(args) {
149152
+ function parseCommandArgs(args, domainResourceTypes) {
149153
+ let resourceType;
148880
149154
  let name;
148881
149155
  let namespace;
148882
149156
  let outputFormat;
148883
149157
  let spec = false;
148884
149158
  let noColor = false;
149159
+ let positionalIndex = 0;
148885
149160
  for (let i = 0; i < args.length; i++) {
148886
149161
  const arg = args[i] ?? "";
148887
149162
  if (arg.startsWith("--")) {
@@ -148934,11 +149209,20 @@ function parseCommandArgs(args) {
148934
149209
  i++;
148935
149210
  }
148936
149211
  }
148937
- } else if (!name) {
148938
- name = arg;
149212
+ } else {
149213
+ if (positionalIndex === 0) {
149214
+ if (domainResourceTypes?.has(arg.toLowerCase())) {
149215
+ resourceType = arg.toLowerCase();
149216
+ } else {
149217
+ name = arg;
149218
+ }
149219
+ } else if (positionalIndex === 1 && resourceType && !name) {
149220
+ name = arg;
149221
+ }
149222
+ positionalIndex++;
148939
149223
  }
148940
149224
  }
148941
- return { name, namespace, outputFormat, spec, noColor };
149225
+ return { resourceType, name, namespace, outputFormat, spec, noColor };
148942
149226
  }
148943
149227
  async function executeAPICommand(session, ctx, cmd) {
148944
149228
  const client = session.getAPIClient();
@@ -148987,8 +149271,13 @@ async function executeAPICommand(session, ctx, cmd) {
148987
149271
  }
148988
149272
  }
148989
149273
  const canonicalDomain = resolveDomain(domain) ?? domain;
148990
- const { name, namespace, outputFormat, spec, noColor } = parseCommandArgs(args);
149274
+ const domainInfo = getDomainInfo(canonicalDomain);
149275
+ const domainResourceTypes = new Set(
149276
+ domainInfo?.primaryResources?.map((r) => r.name) ?? []
149277
+ );
149278
+ const { resourceType, name, namespace, outputFormat, spec, noColor } = parseCommandArgs(args, domainResourceTypes);
148991
149279
  const effectiveNamespace = namespace ?? session.getNamespace();
149280
+ const effectiveResource = resourceType ?? canonicalDomain;
148992
149281
  const nsValidation = validateNamespaceScope(
148993
149282
  canonicalDomain,
148994
149283
  action,
@@ -149055,7 +149344,7 @@ Suggestion: Use --namespace ${nsValidation.suggestion}` : "";
149055
149344
  contextChanged: false
149056
149345
  };
149057
149346
  }
149058
- const resourcePath = domainToResourcePath(canonicalDomain);
149347
+ const resourcePath = domainToResourcePath(effectiveResource);
149059
149348
  let apiPath = `/api/config/namespaces/${effectiveNamespace}/${resourcePath}`;
149060
149349
  try {
149061
149350
  let result;