@robinmordasiewicz/f5xc-xcsh 1.0.84-2601020342 → 1.0.84-2601020527

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/completions/_xcsh CHANGED
@@ -11,7 +11,7 @@ _xcsh() {
11
11
  '(-h --help)'{-h,--help}'[Show help information]'
12
12
  '(-v --version)'{-v,--version}'[Show version number]'
13
13
  '--no-color[Disable color output]'
14
- '(-o --output)'{-o,--output}'[Output format]:format:(json yaml table)'
14
+ '(-o --output)'{-o,--output}'[Output format]:format:(json yaml table text tsv none spec)'
15
15
  '(-ns --namespace)'{-ns,--namespace}'[Namespace]:namespace:_xcsh_namespaces'
16
16
  '--spec[Output command specification as JSON for AI assistants]'
17
17
  )
@@ -221,7 +221,7 @@ _xcsh() {
221
221
  action_opts=(
222
222
  '(-n --name)'{-n,--name}'[Resource name]:name:'
223
223
  '(-ns --namespace)'{-ns,--namespace}'[Namespace]:namespace:_xcsh_namespaces'
224
- '(-o --output)'{-o,--output}'[Output format]:format:(json yaml table)'
224
+ '(-o --output)'{-o,--output}'[Output format]:format:(json yaml table text tsv none spec)'
225
225
  '--limit[Maximum results]:limit:'
226
226
  '--label[Filter by label]:label:'
227
227
  '(-f --file)'{-f,--file}'[Configuration file]:file:_files'
@@ -8,7 +8,7 @@ complete -c xcsh -f
8
8
  complete -c xcsh -s h -l help -d 'Show help information'
9
9
  complete -c xcsh -s v -l version -d 'Show version number'
10
10
  complete -c xcsh -l no-color -d 'Disable color output'
11
- complete -c xcsh -s o -l output -d 'Output format' -xa 'json yaml table'
11
+ complete -c xcsh -s o -l output -d 'Output format' -xa 'json yaml table text tsv none spec'
12
12
  complete -c xcsh -l namespace -s ns -d 'Namespace' -xa 'default system shared'
13
13
  complete -c xcsh -l spec -d 'Output command specification as JSON for AI assistants'
14
14
 
package/dist/index.js CHANGED
@@ -46620,8 +46620,8 @@ function getLogoModeFromEnv(envPrefix) {
46620
46620
  var CLI_NAME = "xcsh";
46621
46621
  var CLI_FULL_NAME = "F5 Distributed Cloud Shell";
46622
46622
  function getVersion() {
46623
- if ("v1.0.84-2601020342") {
46624
- return "v1.0.84-2601020342";
46623
+ if ("v1.0.84-2601020527") {
46624
+ return "v1.0.84-2601020527";
46625
46625
  }
46626
46626
  if (process.env.XCSH_VERSION) {
46627
46627
  return process.env.XCSH_VERSION;
@@ -47363,6 +47363,16 @@ var APIClient = class {
47363
47363
  var import_yaml2 = __toESM(require_dist(), 1);
47364
47364
 
47365
47365
  // src/output/types.ts
47366
+ var ALL_OUTPUT_FORMATS = [
47367
+ "json",
47368
+ "yaml",
47369
+ "table",
47370
+ "text",
47371
+ "tsv",
47372
+ "none",
47373
+ "spec"
47374
+ ];
47375
+ var OUTPUT_FORMAT_HELP = ALL_OUTPUT_FORMATS.join(", ");
47366
47376
  var DEFAULT_TABLE_STYLE = {
47367
47377
  unicode: true,
47368
47378
  coloredBorders: true,
@@ -47374,7 +47384,7 @@ var PLAIN_TABLE_STYLE = {
47374
47384
  headerStyle: "normal"
47375
47385
  };
47376
47386
  function isValidOutputFormat(format) {
47377
- return ["json", "yaml", "table", "text", "tsv", "none", "spec"].includes(
47387
+ return ALL_OUTPUT_FORMATS.includes(
47378
47388
  format.toLowerCase()
47379
47389
  );
47380
47390
  }
@@ -48000,6 +48010,140 @@ function formatLabel(key) {
48000
48010
  return withSpaces.charAt(0).toUpperCase() + withSpaces.slice(1);
48001
48011
  }
48002
48012
 
48013
+ // src/cloudstatus/types.ts
48014
+ var BASE_URL = "https://www.f5cloudstatus.com/api/v2";
48015
+ var StatusIndicator = {
48016
+ None: "none",
48017
+ Minor: "minor",
48018
+ Major: "major",
48019
+ Critical: "critical",
48020
+ Maintenance: "maintenance"
48021
+ };
48022
+ var ComponentStatus = {
48023
+ Operational: "operational",
48024
+ DegradedPerformance: "degraded_performance",
48025
+ PartialOutage: "partial_outage",
48026
+ MajorOutage: "major_outage",
48027
+ UnderMaintenance: "under_maintenance"
48028
+ };
48029
+ var IncidentStatus = {
48030
+ Investigating: "investigating",
48031
+ Identified: "identified",
48032
+ Monitoring: "monitoring",
48033
+ Resolved: "resolved",
48034
+ Postmortem: "postmortem"
48035
+ };
48036
+ var MaintenanceStatus = {
48037
+ Scheduled: "scheduled",
48038
+ InProgress: "in_progress",
48039
+ Verifying: "verifying",
48040
+ Completed: "completed"
48041
+ };
48042
+ var ExitCode = {
48043
+ Healthy: 0,
48044
+ Minor: 1,
48045
+ Major: 2,
48046
+ Critical: 3,
48047
+ Maintenance: 4,
48048
+ APIError: 10,
48049
+ ParseError: 11
48050
+ };
48051
+ var EXIT_CODE_HELP = Object.entries(ExitCode).filter(([, v]) => typeof v === "number" && v < 10).map(([k, v]) => `${v}=${k.toLowerCase()}`).join(", ");
48052
+ var PredefinedRegions = [
48053
+ {
48054
+ id: "north-america",
48055
+ name: "north-america",
48056
+ displayName: "North America"
48057
+ },
48058
+ {
48059
+ id: "south-america",
48060
+ name: "south-america",
48061
+ displayName: "South America"
48062
+ },
48063
+ { id: "europe", name: "europe", displayName: "Europe" },
48064
+ { id: "asia", name: "asia", displayName: "Asia" },
48065
+ { id: "oceania", name: "oceania", displayName: "Oceania" },
48066
+ { id: "middle-east", name: "middle-east", displayName: "Middle East" }
48067
+ ];
48068
+ function isComponentOperational(component) {
48069
+ return component.status === ComponentStatus.Operational;
48070
+ }
48071
+ function isComponentDegraded(component) {
48072
+ return component.status !== ComponentStatus.Operational;
48073
+ }
48074
+ function isIncidentResolved(incident) {
48075
+ return incident.status === IncidentStatus.Resolved || incident.status === IncidentStatus.Postmortem;
48076
+ }
48077
+ function isIncidentActive(incident) {
48078
+ return !isIncidentResolved(incident);
48079
+ }
48080
+ function isMaintenanceUpcoming(maint) {
48081
+ return maint.status === MaintenanceStatus.Scheduled;
48082
+ }
48083
+ function isMaintenanceActive(maint) {
48084
+ return maint.status === MaintenanceStatus.InProgress || maint.status === MaintenanceStatus.Verifying;
48085
+ }
48086
+ function isMaintenanceCompleted(maint) {
48087
+ return maint.status === MaintenanceStatus.Completed;
48088
+ }
48089
+ function statusIndicatorToExitCode(indicator) {
48090
+ switch (indicator) {
48091
+ case StatusIndicator.None:
48092
+ return ExitCode.Healthy;
48093
+ case StatusIndicator.Minor:
48094
+ return ExitCode.Minor;
48095
+ case StatusIndicator.Major:
48096
+ return ExitCode.Major;
48097
+ case StatusIndicator.Critical:
48098
+ return ExitCode.Critical;
48099
+ case StatusIndicator.Maintenance:
48100
+ return ExitCode.Maintenance;
48101
+ default:
48102
+ return ExitCode.Healthy;
48103
+ }
48104
+ }
48105
+
48106
+ // src/config/settings.ts
48107
+ var import_yaml3 = __toESM(require_dist(), 1);
48108
+ var LOGO_MODES = [
48109
+ {
48110
+ mode: "image",
48111
+ description: "Image if terminal supports, else ASCII (default)"
48112
+ },
48113
+ { mode: "ascii", description: "ASCII art only" },
48114
+ { mode: "none", description: "No logo" }
48115
+ ];
48116
+ var LOGO_MODE_HELP = LOGO_MODES.map((m) => m.mode).join(", ");
48117
+ var DEFAULT_SETTINGS = {
48118
+ logo: "image"
48119
+ };
48120
+ function isValidLogoMode(mode) {
48121
+ return LOGO_MODES.some((m) => m.mode === mode);
48122
+ }
48123
+ function validateSettings(settings) {
48124
+ const validated = {};
48125
+ if (settings.logo && isValidLogoMode(settings.logo)) {
48126
+ validated.logo = settings.logo;
48127
+ }
48128
+ return validated;
48129
+ }
48130
+ function loadSettingsSync() {
48131
+ const configPath = paths.settings;
48132
+ try {
48133
+ const content = __require("fs").readFileSync(
48134
+ configPath,
48135
+ "utf-8"
48136
+ );
48137
+ const parsed = import_yaml3.default.parse(content);
48138
+ return {
48139
+ ...DEFAULT_SETTINGS,
48140
+ ...validateSettings(parsed)
48141
+ };
48142
+ } catch {
48143
+ return DEFAULT_SETTINGS;
48144
+ }
48145
+ }
48146
+
48003
48147
  // src/config/envvars.ts
48004
48148
  var EnvVarRegistry = [
48005
48149
  {
@@ -48021,12 +48165,12 @@ var EnvVarRegistry = [
48021
48165
  },
48022
48166
  {
48023
48167
  name: `${ENV_PREFIX}_OUTPUT_FORMAT`,
48024
- description: "Output format (json, yaml, table)",
48168
+ description: `Output format (${OUTPUT_FORMAT_HELP})`,
48025
48169
  relatedFlag: "-o"
48026
48170
  },
48027
48171
  {
48028
48172
  name: `${ENV_PREFIX}_LOGO`,
48029
- description: "Logo display mode (auto, image, ascii, both, none)",
48173
+ description: `Logo display mode (${LOGO_MODE_HELP})`,
48030
48174
  relatedFlag: "--logo"
48031
48175
  },
48032
48176
  {
@@ -142254,7 +142398,7 @@ function formatGlobalFlags() {
142254
142398
  " -v, --version Show version number",
142255
142399
  " -h, --help Show this help",
142256
142400
  " --no-color Disable color output",
142257
- " -o, --output <fmt> Output format (json, yaml, table)",
142401
+ ` -o, --output <fmt> Output format (${OUTPUT_FORMAT_HELP})`,
142258
142402
  " -ns, --namespace <ns> Target namespace",
142259
142403
  " --spec Output command specification as JSON (for AI)"
142260
142404
  ];
@@ -142462,7 +142606,9 @@ function formatActionHelp(domainName, action) {
142462
142606
  output.push("OPTIONS");
142463
142607
  output.push(" -n, --name <name> Resource name");
142464
142608
  output.push(" -ns, --namespace <ns> Target namespace");
142465
- output.push(" -o, --output <fmt> Output format (json, yaml, table)");
142609
+ output.push(
142610
+ ` -o, --output <fmt> Output format (${OUTPUT_FORMAT_HELP})`
142611
+ );
142466
142612
  output.push(" -f, --file <path> Configuration file");
142467
142613
  output.push("");
142468
142614
  if (opInfo?.externalDocs) {
@@ -142904,7 +143050,7 @@ function buildCommandSpec(options) {
142904
143050
  usage: options.usage ?? `xcsh ${options.command} [options]`,
142905
143051
  flags: options.flags ?? [],
142906
143052
  examples: options.examples ?? [],
142907
- outputFormats: options.outputFormats ?? ["table", "json", "yaml"]
143053
+ outputFormats: options.outputFormats ?? [...ALL_OUTPUT_FORMATS]
142908
143054
  };
142909
143055
  if (options.related !== void 0) {
142910
143056
  spec.related = options.related;
@@ -142924,7 +143070,7 @@ var GLOBAL_FLAGS = [
142924
143070
  description: "Output format",
142925
143071
  type: "string",
142926
143072
  default: "table",
142927
- choices: ["table", "json", "yaml", "tsv"]
143073
+ choices: [...ALL_OUTPUT_FORMATS]
142928
143074
  },
142929
143075
  {
142930
143076
  name: "--namespace",
@@ -142966,7 +143112,7 @@ function buildCloudstatusSpecs() {
142966
143112
  {
142967
143113
  name: "--quiet",
142968
143114
  alias: "-q",
142969
- description: "Return exit code only (0=operational, 1=degraded, 2=outage)",
143115
+ description: `Return exit code only (${EXIT_CODE_HELP})`,
142970
143116
  type: "boolean"
142971
143117
  }
142972
143118
  ],
@@ -145154,46 +145300,6 @@ var contextSubcommands = {
145154
145300
  ])
145155
145301
  };
145156
145302
 
145157
- // src/config/settings.ts
145158
- var import_yaml3 = __toESM(require_dist(), 1);
145159
- var LOGO_MODES = [
145160
- {
145161
- mode: "image",
145162
- description: "Image if terminal supports, else ASCII (default)"
145163
- },
145164
- { mode: "ascii", description: "ASCII art only" },
145165
- { mode: "none", description: "No logo" }
145166
- ];
145167
- var DEFAULT_SETTINGS = {
145168
- logo: "image"
145169
- };
145170
- function isValidLogoMode(mode) {
145171
- return LOGO_MODES.some((m) => m.mode === mode);
145172
- }
145173
- function validateSettings(settings) {
145174
- const validated = {};
145175
- if (settings.logo && isValidLogoMode(settings.logo)) {
145176
- validated.logo = settings.logo;
145177
- }
145178
- return validated;
145179
- }
145180
- function loadSettingsSync() {
145181
- const configPath = paths.settings;
145182
- try {
145183
- const content = __require("fs").readFileSync(
145184
- configPath,
145185
- "utf-8"
145186
- );
145187
- const parsed = import_yaml3.default.parse(content);
145188
- return {
145189
- ...DEFAULT_SETTINGS,
145190
- ...validateSettings(parsed)
145191
- };
145192
- } catch {
145193
- return DEFAULT_SETTINGS;
145194
- }
145195
- }
145196
-
145197
145303
  // src/domains/login/banner/display.ts
145198
145304
  function colorizeLogoLine(line) {
145199
145305
  let result = "";
@@ -145771,98 +145877,6 @@ var loginDomain = {
145771
145877
  ])
145772
145878
  };
145773
145879
 
145774
- // src/cloudstatus/types.ts
145775
- var BASE_URL = "https://www.f5cloudstatus.com/api/v2";
145776
- var StatusIndicator = {
145777
- None: "none",
145778
- Minor: "minor",
145779
- Major: "major",
145780
- Critical: "critical",
145781
- Maintenance: "maintenance"
145782
- };
145783
- var ComponentStatus = {
145784
- Operational: "operational",
145785
- DegradedPerformance: "degraded_performance",
145786
- PartialOutage: "partial_outage",
145787
- MajorOutage: "major_outage",
145788
- UnderMaintenance: "under_maintenance"
145789
- };
145790
- var IncidentStatus = {
145791
- Investigating: "investigating",
145792
- Identified: "identified",
145793
- Monitoring: "monitoring",
145794
- Resolved: "resolved",
145795
- Postmortem: "postmortem"
145796
- };
145797
- var MaintenanceStatus = {
145798
- Scheduled: "scheduled",
145799
- InProgress: "in_progress",
145800
- Verifying: "verifying",
145801
- Completed: "completed"
145802
- };
145803
- var ExitCode = {
145804
- Healthy: 0,
145805
- Minor: 1,
145806
- Major: 2,
145807
- Critical: 3,
145808
- Maintenance: 4,
145809
- APIError: 10,
145810
- ParseError: 11
145811
- };
145812
- var PredefinedRegions = [
145813
- {
145814
- id: "north-america",
145815
- name: "north-america",
145816
- displayName: "North America"
145817
- },
145818
- {
145819
- id: "south-america",
145820
- name: "south-america",
145821
- displayName: "South America"
145822
- },
145823
- { id: "europe", name: "europe", displayName: "Europe" },
145824
- { id: "asia", name: "asia", displayName: "Asia" },
145825
- { id: "oceania", name: "oceania", displayName: "Oceania" },
145826
- { id: "middle-east", name: "middle-east", displayName: "Middle East" }
145827
- ];
145828
- function isComponentOperational(component) {
145829
- return component.status === ComponentStatus.Operational;
145830
- }
145831
- function isComponentDegraded(component) {
145832
- return component.status !== ComponentStatus.Operational;
145833
- }
145834
- function isIncidentResolved(incident) {
145835
- return incident.status === IncidentStatus.Resolved || incident.status === IncidentStatus.Postmortem;
145836
- }
145837
- function isIncidentActive(incident) {
145838
- return !isIncidentResolved(incident);
145839
- }
145840
- function isMaintenanceUpcoming(maint) {
145841
- return maint.status === MaintenanceStatus.Scheduled;
145842
- }
145843
- function isMaintenanceActive(maint) {
145844
- return maint.status === MaintenanceStatus.InProgress || maint.status === MaintenanceStatus.Verifying;
145845
- }
145846
- function isMaintenanceCompleted(maint) {
145847
- return maint.status === MaintenanceStatus.Completed;
145848
- }
145849
- function statusIndicatorToExitCode(indicator) {
145850
- switch (indicator) {
145851
- case StatusIndicator.None:
145852
- return ExitCode.Healthy;
145853
- case StatusIndicator.Minor:
145854
- return ExitCode.Minor;
145855
- case StatusIndicator.Major:
145856
- return ExitCode.Major;
145857
- case StatusIndicator.Critical:
145858
- return ExitCode.Critical;
145859
- case StatusIndicator.Maintenance:
145860
- return ExitCode.Maintenance;
145861
- default:
145862
- return ExitCode.Healthy;
145863
- }
145864
- }
145865
-
145866
145880
  // src/cloudstatus/client.ts
145867
145881
  var Cache = class {
145868
145882
  entries = /* @__PURE__ */ new Map();
@@ -146902,7 +146916,7 @@ _xcsh() {
146902
146916
  '(-h --help)'{-h,--help}'[Show help information]'
146903
146917
  '(-v --version)'{-v,--version}'[Show version number]'
146904
146918
  '--no-color[Disable color output]'
146905
- '(-o --output)'{-o,--output}'[Output format]:format:(json yaml table)'
146919
+ '(-o --output)'{-o,--output}'[Output format]:format:(${ALL_OUTPUT_FORMATS.join(" ")})'
146906
146920
  '(-ns --namespace)'{-ns,--namespace}'[Namespace]:namespace:_xcsh_namespaces'
146907
146921
  '--spec[Output command specification as JSON for AI assistants]'
146908
146922
  )
@@ -146951,7 +146965,7 @@ ${customDomainCompletions.join("\n")}
146951
146965
  action_opts=(
146952
146966
  '(-n --name)'{-n,--name}'[Resource name]:name:'
146953
146967
  '(-ns --namespace)'{-ns,--namespace}'[Namespace]:namespace:_xcsh_namespaces'
146954
- '(-o --output)'{-o,--output}'[Output format]:format:(json yaml table)'
146968
+ '(-o --output)'{-o,--output}'[Output format]:format:(${ALL_OUTPUT_FORMATS.join(" ")})'
146955
146969
  '--limit[Maximum results]:limit:'
146956
146970
  '--label[Filter by label]:label:'
146957
146971
  '(-f --file)'{-f,--file}'[Configuration file]:file:_files'
@@ -147017,7 +147031,7 @@ complete -c xcsh -f
147017
147031
  complete -c xcsh -s h -l help -d 'Show help information'
147018
147032
  complete -c xcsh -s v -l version -d 'Show version number'
147019
147033
  complete -c xcsh -l no-color -d 'Disable color output'
147020
- complete -c xcsh -s o -l output -d 'Output format' -xa 'json yaml table'
147034
+ complete -c xcsh -s o -l output -d 'Output format' -xa '${ALL_OUTPUT_FORMATS.join(" ")}'
147021
147035
  complete -c xcsh -l namespace -s ns -d 'Namespace' -xa 'default system shared'
147022
147036
  complete -c xcsh -l spec -d 'Output command specification as JSON for AI assistants'
147023
147037
 
@@ -147908,7 +147922,7 @@ var Completer = class {
147908
147922
  { text: "--namespace", description: "Namespace", category: "flag" },
147909
147923
  {
147910
147924
  text: "--output",
147911
- description: "Output format (json, yaml, table)",
147925
+ description: `Output format (${OUTPUT_FORMAT_HELP})`,
147912
147926
  category: "flag"
147913
147927
  },
147914
147928
  {
@@ -147996,23 +148010,13 @@ var Completer = class {
147996
148010
  switch (flag) {
147997
148011
  case "--output":
147998
148012
  case "-o":
147999
- return [
148000
- {
148001
- text: "json",
148002
- description: "JSON format",
148003
- category: "value"
148004
- },
148005
- {
148006
- text: "yaml",
148007
- description: "YAML format",
148008
- category: "value"
148009
- },
148010
- {
148011
- text: "table",
148012
- description: "Table format",
148013
- category: "value"
148014
- }
148015
- ].filter((s) => s.text.toLowerCase().startsWith(lowerPartial));
148013
+ return ALL_OUTPUT_FORMATS.map((fmt) => ({
148014
+ text: fmt,
148015
+ description: `${fmt.toUpperCase()} format`,
148016
+ category: "value"
148017
+ })).filter(
148018
+ (s) => s.text.toLowerCase().startsWith(lowerPartial)
148019
+ );
148016
148020
  case "--namespace":
148017
148021
  case "-ns":
148018
148022
  return this.completeNamespace(valuePartial);
@@ -149034,7 +149038,7 @@ Suggestion: Use --namespace ${nsValidation.suggestion}` : "";
149034
149038
  name: "--output",
149035
149039
  alias: "-o",
149036
149040
  type: "string",
149037
- description: "Output format (json, yaml, table)"
149041
+ description: `Output format (${OUTPUT_FORMAT_HELP})`
149038
149042
  },
149039
149043
  {
149040
149044
  name: "--name",
@@ -149042,7 +149046,7 @@ Suggestion: Use --namespace ${nsValidation.suggestion}` : "";
149042
149046
  description: "Resource name"
149043
149047
  }
149044
149048
  ],
149045
- outputFormats: ["table", "json", "yaml"]
149049
+ outputFormats: [...ALL_OUTPUT_FORMATS]
149046
149050
  };
149047
149051
  return {
149048
149052
  output: [JSON.stringify(basicSpec, null, 2)],
@@ -149951,7 +149955,7 @@ var program2 = new Command();
149951
149955
  program2.configureHelp({
149952
149956
  formatHelp: () => formatRootHelp().join("\n")
149953
149957
  });
149954
- program2.name(CLI_NAME).description("F5 Distributed Cloud Shell - Interactive CLI for F5 XC").version(CLI_VERSION, "-v, --version", "Show version number").option("--no-color", "Disable color output").option("--logo <mode>", "Logo display mode: image, ascii, none").option("-o, --output <format>", "Output format (json, yaml, table)").option("--spec", "Output command specification as JSON (for AI)").option("--headless", "Run in headless JSON protocol mode (for AI agents)").option("-h, --help", "Show help").argument("[command...]", "Command to execute non-interactively").allowUnknownOption(true).helpOption(false).action(
149958
+ program2.name(CLI_NAME).description("F5 Distributed Cloud Shell - Interactive CLI for F5 XC").version(CLI_VERSION, "-v, --version", "Show version number").option("--no-color", "Disable color output").option("--logo <mode>", `Logo display mode: ${LOGO_MODE_HELP}`).option("-o, --output <format>", `Output format (${OUTPUT_FORMAT_HELP})`).option("--spec", "Output command specification as JSON (for AI)").option("--headless", "Run in headless JSON protocol mode (for AI agents)").option("-h, --help", "Show help").argument("[command...]", "Command to execute non-interactively").allowUnknownOption(true).helpOption(false).action(
149955
149959
  async (commandArgs, options) => {
149956
149960
  if (options.help && commandArgs.length === 0) {
149957
149961
  formatRootHelp().forEach((line) => console.log(line));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@robinmordasiewicz/f5xc-xcsh",
3
- "version": "1.0.84-2601020342",
3
+ "version": "1.0.84-2601020527",
4
4
  "description": "F5 Distributed Cloud Shell - Interactive CLI for F5 XC",
5
5
  "type": "module",
6
6
  "bin": {