berget 2.2.7 → 2.2.8

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.
Files changed (130) hide show
  1. package/.github/workflows/publish.yml +6 -6
  2. package/.github/workflows/test.yml +1 -1
  3. package/.prettierrc +5 -3
  4. package/dist/index.js +24 -25
  5. package/dist/package.json +5 -3
  6. package/dist/src/agents/app.js +8 -8
  7. package/dist/src/agents/backend.js +3 -3
  8. package/dist/src/agents/devops.js +8 -8
  9. package/dist/src/agents/frontend.js +3 -3
  10. package/dist/src/agents/fullstack.js +3 -3
  11. package/dist/src/agents/index.js +18 -18
  12. package/dist/src/agents/quality.js +8 -8
  13. package/dist/src/agents/security.js +8 -8
  14. package/dist/src/client.js +115 -127
  15. package/dist/src/commands/api-keys.js +195 -202
  16. package/dist/src/commands/auth.js +16 -25
  17. package/dist/src/commands/autocomplete.js +8 -8
  18. package/dist/src/commands/billing.js +10 -19
  19. package/dist/src/commands/chat.js +139 -170
  20. package/dist/src/commands/clusters.js +21 -30
  21. package/dist/src/commands/code/__tests__/auth-sync.test.js +189 -186
  22. package/dist/src/commands/code/__tests__/fake-api-key-service.js +3 -13
  23. package/dist/src/commands/code/__tests__/fake-auth-service.js +21 -29
  24. package/dist/src/commands/code/__tests__/fake-command-runner.js +22 -33
  25. package/dist/src/commands/code/__tests__/fake-file-store.js +19 -41
  26. package/dist/src/commands/code/__tests__/fake-prompter.js +81 -97
  27. package/dist/src/commands/code/__tests__/setup-flow.test.js +295 -295
  28. package/dist/src/commands/code/adapters/clack-prompter.js +15 -32
  29. package/dist/src/commands/code/adapters/fs-file-store.js +25 -44
  30. package/dist/src/commands/code/adapters/spawn-command-runner.js +27 -41
  31. package/dist/src/commands/code/auth-sync.js +215 -228
  32. package/dist/src/commands/code/errors.js +15 -12
  33. package/dist/src/commands/code/setup.js +390 -425
  34. package/dist/src/commands/code.js +279 -294
  35. package/dist/src/commands/index.js +5 -5
  36. package/dist/src/commands/models.js +16 -25
  37. package/dist/src/commands/users.js +9 -18
  38. package/dist/src/constants/command-structure.js +138 -138
  39. package/dist/src/services/api-key-service.js +132 -152
  40. package/dist/src/services/auth-service.js +81 -95
  41. package/dist/src/services/browser-auth.js +121 -131
  42. package/dist/src/services/chat-service.js +369 -386
  43. package/dist/src/services/cluster-service.js +47 -62
  44. package/dist/src/services/collaborator-service.js +9 -21
  45. package/dist/src/services/flux-service.js +13 -25
  46. package/dist/src/services/helm-service.js +9 -21
  47. package/dist/src/services/kubectl-service.js +15 -29
  48. package/dist/src/utils/config-checker.js +7 -7
  49. package/dist/src/utils/config-loader.js +109 -109
  50. package/dist/src/utils/default-api-key.js +129 -139
  51. package/dist/src/utils/env-manager.js +55 -66
  52. package/dist/src/utils/error-handler.js +62 -62
  53. package/dist/src/utils/logger.js +74 -67
  54. package/dist/src/utils/markdown-renderer.js +28 -28
  55. package/dist/src/utils/opencode-validator.js +67 -69
  56. package/dist/src/utils/token-manager.js +67 -65
  57. package/dist/tests/commands/chat.test.js +30 -39
  58. package/dist/tests/commands/code.test.js +186 -195
  59. package/dist/tests/utils/config-loader.test.js +107 -107
  60. package/dist/tests/utils/env-manager.test.js +81 -90
  61. package/dist/tests/utils/opencode-validator.test.js +42 -41
  62. package/dist/vitest.config.js +1 -1
  63. package/eslint.config.mjs +50 -30
  64. package/index.ts +30 -31
  65. package/package.json +5 -3
  66. package/src/agents/app.ts +9 -9
  67. package/src/agents/backend.ts +4 -4
  68. package/src/agents/devops.ts +9 -9
  69. package/src/agents/frontend.ts +4 -4
  70. package/src/agents/fullstack.ts +4 -4
  71. package/src/agents/index.ts +27 -25
  72. package/src/agents/quality.ts +9 -9
  73. package/src/agents/security.ts +9 -9
  74. package/src/agents/types.ts +10 -10
  75. package/src/client.ts +85 -77
  76. package/src/commands/api-keys.ts +190 -185
  77. package/src/commands/auth.ts +15 -14
  78. package/src/commands/autocomplete.ts +10 -10
  79. package/src/commands/billing.ts +13 -12
  80. package/src/commands/chat.ts +145 -142
  81. package/src/commands/clusters.ts +20 -19
  82. package/src/commands/code/__tests__/auth-sync.test.ts +176 -175
  83. package/src/commands/code/__tests__/fake-api-key-service.ts +2 -2
  84. package/src/commands/code/__tests__/fake-auth-service.ts +18 -18
  85. package/src/commands/code/__tests__/fake-command-runner.ts +28 -22
  86. package/src/commands/code/__tests__/fake-file-store.ts +15 -15
  87. package/src/commands/code/__tests__/fake-prompter.ts +86 -85
  88. package/src/commands/code/__tests__/setup-flow.test.ts +253 -251
  89. package/src/commands/code/adapters/clack-prompter.ts +32 -30
  90. package/src/commands/code/adapters/fs-file-store.ts +18 -17
  91. package/src/commands/code/adapters/spawn-command-runner.ts +20 -15
  92. package/src/commands/code/auth-sync.ts +210 -210
  93. package/src/commands/code/errors.ts +11 -11
  94. package/src/commands/code/ports/auth-services.ts +7 -7
  95. package/src/commands/code/ports/command-runner.ts +2 -2
  96. package/src/commands/code/ports/file-store.ts +3 -3
  97. package/src/commands/code/ports/prompter.ts +13 -13
  98. package/src/commands/code/setup.ts +408 -406
  99. package/src/commands/code.ts +288 -287
  100. package/src/commands/index.ts +11 -10
  101. package/src/commands/models.ts +19 -18
  102. package/src/commands/users.ts +11 -10
  103. package/src/constants/command-structure.ts +159 -159
  104. package/src/services/api-key-service.ts +85 -85
  105. package/src/services/auth-service.ts +55 -54
  106. package/src/services/browser-auth.ts +62 -62
  107. package/src/services/chat-service.ts +169 -170
  108. package/src/services/cluster-service.ts +28 -28
  109. package/src/services/collaborator-service.ts +6 -6
  110. package/src/services/flux-service.ts +17 -17
  111. package/src/services/helm-service.ts +11 -11
  112. package/src/services/kubectl-service.ts +12 -12
  113. package/src/types/api.d.ts +1933 -1933
  114. package/src/types/json.d.ts +1 -1
  115. package/src/utils/config-checker.ts +6 -6
  116. package/src/utils/config-loader.ts +130 -129
  117. package/src/utils/default-api-key.ts +81 -80
  118. package/src/utils/env-manager.ts +37 -37
  119. package/src/utils/error-handler.ts +64 -64
  120. package/src/utils/logger.ts +72 -66
  121. package/src/utils/markdown-renderer.ts +28 -28
  122. package/src/utils/opencode-validator.ts +72 -71
  123. package/src/utils/token-manager.ts +69 -68
  124. package/tests/commands/chat.test.ts +32 -31
  125. package/tests/commands/code.test.ts +182 -181
  126. package/tests/utils/config-loader.test.ts +111 -110
  127. package/tests/utils/env-manager.test.ts +83 -79
  128. package/tests/utils/opencode-validator.test.ts +43 -42
  129. package/tsconfig.json +2 -1
  130. package/vitest.config.ts +2 -2
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerCommands = void 0;
4
- const auth_1 = require("./auth");
5
4
  const api_keys_1 = require("./api-keys");
6
- const clusters_1 = require("./clusters");
5
+ const auth_1 = require("./auth");
6
+ const autocomplete_1 = require("./autocomplete");
7
7
  const billing_1 = require("./billing");
8
- const models_1 = require("./models");
9
- const users_1 = require("./users");
10
8
  const chat_1 = require("./chat");
11
- const autocomplete_1 = require("./autocomplete");
9
+ const clusters_1 = require("./clusters");
12
10
  const code_1 = require("./code");
11
+ const models_1 = require("./models");
12
+ const users_1 = require("./users");
13
13
  /**
14
14
  * Register all command groups with the program
15
15
  */
@@ -1,67 +1,58 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.registerModelCommands = void 0;
13
- const command_structure_1 = require("../constants/command-structure");
14
4
  const client_1 = require("../client");
5
+ const command_structure_1 = require("../constants/command-structure");
15
6
  const error_handler_1 = require("../utils/error-handler");
16
7
  /**
17
8
  * Register models commands
18
9
  */
19
10
  function registerModelCommands(program) {
20
- const models = program.command(command_structure_1.COMMAND_GROUPS.MODELS).description("Manage AI models");
11
+ const models = program.command(command_structure_1.COMMAND_GROUPS.MODELS).description('Manage AI models');
21
12
  models
22
13
  .command(command_structure_1.SUBCOMMANDS.MODELS.LIST)
23
- .description("List available AI models")
24
- .option("--id <modelId>", "Get details for a specific model")
25
- .action((options) => __awaiter(this, void 0, void 0, function* () {
14
+ .description('List available AI models')
15
+ .option('--id <modelId>', 'Get details for a specific model')
16
+ .action(async (options) => {
26
17
  try {
27
18
  const client = (0, client_1.createAuthenticatedClient)();
28
19
  let response;
29
20
  if (options.id) {
30
- const { data, error } = yield client.GET("/v1/models/{modelId}", {
21
+ const { data, error } = await client.GET('/v1/models/{modelId}', {
31
22
  params: { path: { modelId: options.id } },
32
23
  });
33
24
  if (error)
34
25
  throw new Error(JSON.stringify(error));
35
26
  response = data;
36
- console.log("Model Details:");
27
+ console.log('Model Details:');
37
28
  console.log(JSON.stringify(response, null, 2));
38
29
  }
39
30
  else {
40
- const { data, error } = yield client.GET("/v1/models");
31
+ const { data, error } = await client.GET('/v1/models');
41
32
  if (error)
42
33
  throw new Error(JSON.stringify(error));
43
34
  response = data;
44
- console.log("Available Models:");
45
- console.log("ID OWNED BY CAPABILITIES");
35
+ console.log('Available Models:');
36
+ console.log('ID OWNED BY CAPABILITIES');
46
37
  // Ensure response has the expected structure
47
38
  const modelData = response;
48
39
  if (modelData.data) {
49
40
  modelData.data.forEach((model) => {
50
41
  const capabilities = [];
51
42
  if (model.capabilities.vision)
52
- capabilities.push("vision");
43
+ capabilities.push('vision');
53
44
  if (model.capabilities.function_calling)
54
- capabilities.push("function_calling");
45
+ capabilities.push('function_calling');
55
46
  if (model.capabilities.json_mode)
56
- capabilities.push("json_mode");
57
- console.log(`${model.root.padEnd(50)} ${model.owned_by.padEnd(24)} ${capabilities.join(", ")}`);
47
+ capabilities.push('json_mode');
48
+ console.log(`${model.root.padEnd(50)} ${model.owned_by.padEnd(24)} ${capabilities.join(', ')}`);
58
49
  });
59
50
  }
60
51
  }
61
52
  }
62
53
  catch (error) {
63
- (0, error_handler_1.handleError)("Failed to get models", error);
54
+ (0, error_handler_1.handleError)('Failed to get models', error);
64
55
  }
65
- }));
56
+ });
66
57
  }
67
58
  exports.registerModelCommands = registerModelCommands;
@@ -1,41 +1,32 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.registerUserCommands = void 0;
13
- const command_structure_1 = require("../constants/command-structure");
14
4
  const client_1 = require("../client");
5
+ const command_structure_1 = require("../constants/command-structure");
15
6
  const error_handler_1 = require("../utils/error-handler");
16
7
  /**
17
8
  * Register user commands
18
9
  */
19
10
  function registerUserCommands(program) {
20
- const users = program.command(command_structure_1.COMMAND_GROUPS.USERS).description("Manage users");
11
+ const users = program.command(command_structure_1.COMMAND_GROUPS.USERS).description('Manage users');
21
12
  users
22
13
  .command(command_structure_1.SUBCOMMANDS.USERS.LIST)
23
- .description("List team members")
24
- .action(() => __awaiter(this, void 0, void 0, function* () {
14
+ .description('List team members')
15
+ .action(async () => {
25
16
  try {
26
17
  const client = (0, client_1.createAuthenticatedClient)();
27
- const { data, error } = yield client.GET("/v1/users");
18
+ const { data, error } = await client.GET('/v1/users');
28
19
  if (error)
29
20
  throw new Error(JSON.stringify(error));
30
- console.log("Team Members:");
31
- console.log("NAME EMAIL ROLE");
21
+ console.log('Team Members:');
22
+ console.log('NAME EMAIL ROLE');
32
23
  data.forEach((user) => {
33
24
  console.log(`${user.name.padEnd(24)} ${user.email.padEnd(30)} ${user.role}`);
34
25
  });
35
26
  }
36
27
  catch (error) {
37
- (0, error_handler_1.handleError)("Failed to list team members", error);
28
+ (0, error_handler_1.handleError)('Failed to list team members', error);
38
29
  }
39
- }));
30
+ });
40
31
  }
41
32
  exports.registerUserCommands = registerUserCommands;
@@ -7,174 +7,174 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.COMMAND_DESCRIPTIONS = exports.SUBCOMMANDS = exports.COMMAND_GROUPS = void 0;
8
8
  // Main command groups
9
9
  exports.COMMAND_GROUPS = {
10
- AUTH: "auth",
11
- API_KEYS: "api-keys",
12
- CLUSTERS: "clusters",
13
- APPS: "apps",
14
- MODELS: "models",
15
- HELM: "helm",
16
- KUBECTL: "kubectl",
17
- FLUX: "flux",
18
- USERS: "users",
19
- BILLING: "billing",
20
- CHAT: "chat",
21
- CODE: "code",
10
+ API_KEYS: 'api-keys',
11
+ APPS: 'apps',
12
+ AUTH: 'auth',
13
+ BILLING: 'billing',
14
+ CHAT: 'chat',
15
+ CLUSTERS: 'clusters',
16
+ CODE: 'code',
17
+ FLUX: 'flux',
18
+ HELM: 'helm',
19
+ KUBECTL: 'kubectl',
20
+ MODELS: 'models',
21
+ USERS: 'users',
22
22
  };
23
23
  // Subcommands for each group
24
24
  exports.SUBCOMMANDS = {
25
+ // API Keys commands
26
+ API_KEYS: {
27
+ CREATE: 'create',
28
+ DELETE: 'delete',
29
+ DESCRIBE: 'describe',
30
+ GET_DEFAULT: 'get-default',
31
+ LIST: 'list',
32
+ ROTATE: 'rotate',
33
+ SET_DEFAULT: 'set-default',
34
+ },
35
+ // Apps commands
36
+ APPS: {
37
+ DESCRIBE_INSTALLATION: 'describe-installation',
38
+ DESCRIBE_TEMPLATE: 'describe-template',
39
+ INSTALL: 'install',
40
+ LIST_INSTALLATIONS: 'list-installations',
41
+ LIST_TEMPLATES: 'list-templates',
42
+ UNINSTALL: 'uninstall',
43
+ },
25
44
  // Auth commands
26
45
  AUTH: {
27
- LOGIN: "login",
28
- LOGOUT: "logout",
29
- WHOAMI: "whoami",
46
+ LOGIN: 'login',
47
+ LOGOUT: 'logout',
48
+ WHOAMI: 'whoami',
49
+ },
50
+ // Billing commands
51
+ BILLING: {
52
+ ADD_PAYMENT_METHOD: 'add-payment-method',
53
+ DESCRIBE_INVOICE: 'describe-invoice',
54
+ GET_USAGE: 'get-usage',
55
+ LIST_INVOICES: 'list-invoices',
56
+ LIST_PAYMENT_METHODS: 'list-payment-methods',
57
+ REMOVE_PAYMENT_METHOD: 'remove-payment-method',
58
+ UPDATE_SUBSCRIPTION: 'update-subscription',
30
59
  },
31
60
  // Chat commands
32
61
  CHAT: {
33
- RUN: "run",
34
- LIST: "list",
35
- },
36
- // Code commands
37
- CODE: {
38
- INIT: "init",
39
- RUN: "run",
40
- UPDATE: "update",
41
- SERVE: "serve",
42
- SETUP: "setup",
43
- },
44
- // API Keys commands
45
- API_KEYS: {
46
- LIST: "list",
47
- CREATE: "create",
48
- DELETE: "delete",
49
- ROTATE: "rotate",
50
- DESCRIBE: "describe",
51
- SET_DEFAULT: "set-default",
52
- GET_DEFAULT: "get-default",
62
+ LIST: 'list',
63
+ RUN: 'run',
53
64
  },
54
65
  // Clusters commands
55
66
  CLUSTERS: {
56
- LIST: "list",
57
- DESCRIBE: "describe",
58
- GET_USAGE: "get-usage",
67
+ DESCRIBE: 'describe',
68
+ GET_USAGE: 'get-usage',
69
+ LIST: 'list',
59
70
  },
60
- // Apps commands
61
- APPS: {
62
- LIST_TEMPLATES: "list-templates",
63
- DESCRIBE_TEMPLATE: "describe-template",
64
- LIST_INSTALLATIONS: "list-installations",
65
- INSTALL: "install",
66
- UNINSTALL: "uninstall",
67
- DESCRIBE_INSTALLATION: "describe-installation",
71
+ // Code commands
72
+ CODE: {
73
+ INIT: 'init',
74
+ RUN: 'run',
75
+ SERVE: 'serve',
76
+ SETUP: 'setup',
77
+ UPDATE: 'update',
68
78
  },
69
- // Models commands
70
- MODELS: {
71
- LIST: "list",
72
- DESCRIBE: "describe",
79
+ // Flux commands
80
+ FLUX: {
81
+ BOOTSTRAP: 'bootstrap',
82
+ INSTALL: 'install',
73
83
  },
74
84
  // Helm commands
75
85
  HELM: {
76
- ADD_REPO: "add-repo",
77
- INSTALL: "install",
86
+ ADD_REPO: 'add-repo',
87
+ INSTALL: 'install',
78
88
  },
79
89
  // Kubectl commands
80
90
  KUBECTL: {
81
- CREATE_NAMESPACE: "create-namespace",
82
- APPLY: "apply",
83
- GET: "get",
91
+ APPLY: 'apply',
92
+ CREATE_NAMESPACE: 'create-namespace',
93
+ GET: 'get',
84
94
  },
85
- // Flux commands
86
- FLUX: {
87
- INSTALL: "install",
88
- BOOTSTRAP: "bootstrap",
95
+ // Models commands
96
+ MODELS: {
97
+ DESCRIBE: 'describe',
98
+ LIST: 'list',
89
99
  },
90
100
  // Users commands
91
101
  USERS: {
92
- LIST: "list",
93
- DESCRIBE: "describe",
94
- UPDATE: "update",
95
- INVITE: "invite",
96
- },
97
- // Billing commands
98
- BILLING: {
99
- GET_USAGE: "get-usage",
100
- LIST_INVOICES: "list-invoices",
101
- DESCRIBE_INVOICE: "describe-invoice",
102
- LIST_PAYMENT_METHODS: "list-payment-methods",
103
- ADD_PAYMENT_METHOD: "add-payment-method",
104
- REMOVE_PAYMENT_METHOD: "remove-payment-method",
105
- UPDATE_SUBSCRIPTION: "update-subscription",
102
+ DESCRIBE: 'describe',
103
+ INVITE: 'invite',
104
+ LIST: 'list',
105
+ UPDATE: 'update',
106
106
  },
107
107
  };
108
108
  // Command descriptions
109
109
  exports.COMMAND_DESCRIPTIONS = {
110
- // Auth group
111
- [exports.COMMAND_GROUPS.AUTH]: "Manage authentication and authorization",
112
- [`${exports.COMMAND_GROUPS.AUTH} ${exports.SUBCOMMANDS.AUTH.LOGIN}`]: "Log in to Berget AI",
113
- [`${exports.COMMAND_GROUPS.AUTH} ${exports.SUBCOMMANDS.AUTH.LOGOUT}`]: "Log out from Berget AI",
114
- [`${exports.COMMAND_GROUPS.AUTH} ${exports.SUBCOMMANDS.AUTH.WHOAMI}`]: "Display current user information",
110
+ [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.CREATE}`]: 'Create a new API key',
111
+ [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.DELETE}`]: 'Delete an API key',
112
+ [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.DESCRIBE}`]: 'Get usage statistics for an API key',
113
+ [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.GET_DEFAULT}`]: 'Show the current default API key',
114
+ [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.LIST}`]: 'List all API keys',
115
+ [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.ROTATE}`]: 'Rotate an API key',
116
+ [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.SET_DEFAULT}`]: 'Set an API key as the default for chat commands',
117
+ [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.DESCRIBE_INSTALLATION}`]: 'Get detailed information about an installed application',
118
+ [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.DESCRIBE_TEMPLATE}`]: 'Get detailed information about an application template',
119
+ [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.INSTALL}`]: 'Install an application',
120
+ [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.LIST_INSTALLATIONS}`]: 'List installed applications',
121
+ [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.LIST_TEMPLATES}`]: 'List available application templates',
122
+ [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.UNINSTALL}`]: 'Uninstall an application',
123
+ [`${exports.COMMAND_GROUPS.AUTH} ${exports.SUBCOMMANDS.AUTH.LOGIN}`]: 'Log in to Berget AI',
124
+ [`${exports.COMMAND_GROUPS.AUTH} ${exports.SUBCOMMANDS.AUTH.LOGOUT}`]: 'Log out from Berget AI',
125
+ [`${exports.COMMAND_GROUPS.AUTH} ${exports.SUBCOMMANDS.AUTH.WHOAMI}`]: 'Display current user information',
126
+ [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.ADD_PAYMENT_METHOD}`]: 'Add a new payment method',
127
+ [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.DESCRIBE_INVOICE}`]: 'Get detailed information about an invoice',
128
+ [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.GET_USAGE}`]: 'Get current usage metrics',
129
+ [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.LIST_INVOICES}`]: 'List all invoices',
130
+ [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.LIST_PAYMENT_METHODS}`]: 'List all payment methods',
131
+ [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.REMOVE_PAYMENT_METHOD}`]: 'Remove a payment method',
132
+ [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.UPDATE_SUBSCRIPTION}`]: 'Update subscription plan',
133
+ [`${exports.COMMAND_GROUPS.CHAT} ${exports.SUBCOMMANDS.CHAT.LIST}`]: 'List available chat models',
134
+ [`${exports.COMMAND_GROUPS.CHAT} ${exports.SUBCOMMANDS.CHAT.RUN}`]: 'Run a chat session with a specified model',
135
+ [`${exports.COMMAND_GROUPS.CLUSTERS} ${exports.SUBCOMMANDS.CLUSTERS.DESCRIBE}`]: 'Get detailed information about a cluster',
136
+ [`${exports.COMMAND_GROUPS.CLUSTERS} ${exports.SUBCOMMANDS.CLUSTERS.GET_USAGE}`]: 'Get resource usage for a cluster',
137
+ [`${exports.COMMAND_GROUPS.CLUSTERS} ${exports.SUBCOMMANDS.CLUSTERS.LIST}`]: 'List all clusters',
138
+ [`${exports.COMMAND_GROUPS.CODE} ${exports.SUBCOMMANDS.CODE.INIT}`]: 'Initialize project for AI coding assistant',
139
+ [`${exports.COMMAND_GROUPS.CODE} ${exports.SUBCOMMANDS.CODE.RUN}`]: 'Run AI coding assistant',
140
+ [`${exports.COMMAND_GROUPS.CODE} ${exports.SUBCOMMANDS.CODE.SERVE}`]: 'Start OpenCode web server',
141
+ [`${exports.COMMAND_GROUPS.CODE} ${exports.SUBCOMMANDS.CODE.SETUP}`]: 'Interactive setup for Berget AI coding tools',
142
+ [`${exports.COMMAND_GROUPS.CODE} ${exports.SUBCOMMANDS.CODE.UPDATE}`]: 'Update OpenCode and agents to latest versions',
143
+ [`${exports.COMMAND_GROUPS.FLUX} ${exports.SUBCOMMANDS.FLUX.BOOTSTRAP}`]: 'Bootstrap Flux CD',
144
+ [`${exports.COMMAND_GROUPS.FLUX} ${exports.SUBCOMMANDS.FLUX.INSTALL}`]: 'Install Flux CD',
145
+ [`${exports.COMMAND_GROUPS.HELM} ${exports.SUBCOMMANDS.HELM.ADD_REPO}`]: 'Add a Helm repository',
146
+ [`${exports.COMMAND_GROUPS.HELM} ${exports.SUBCOMMANDS.HELM.INSTALL}`]: 'Install a Helm chart',
147
+ [`${exports.COMMAND_GROUPS.KUBECTL} ${exports.SUBCOMMANDS.KUBECTL.APPLY}`]: 'Apply a Kubernetes configuration',
148
+ [`${exports.COMMAND_GROUPS.KUBECTL} ${exports.SUBCOMMANDS.KUBECTL.CREATE_NAMESPACE}`]: 'Create a Kubernetes namespace',
149
+ [`${exports.COMMAND_GROUPS.KUBECTL} ${exports.SUBCOMMANDS.KUBECTL.GET}`]: 'Get Kubernetes resources',
150
+ [`${exports.COMMAND_GROUPS.MODELS} ${exports.SUBCOMMANDS.MODELS.DESCRIBE}`]: 'Get detailed information about an AI model',
151
+ [`${exports.COMMAND_GROUPS.MODELS} ${exports.SUBCOMMANDS.MODELS.LIST}`]: 'List available AI models',
152
+ [`${exports.COMMAND_GROUPS.USERS} ${exports.SUBCOMMANDS.USERS.DESCRIBE}`]: 'Get detailed information about a user',
153
+ [`${exports.COMMAND_GROUPS.USERS} ${exports.SUBCOMMANDS.USERS.INVITE}`]: 'Invite a new user to your organization',
154
+ [`${exports.COMMAND_GROUPS.USERS} ${exports.SUBCOMMANDS.USERS.LIST}`]: 'List all users in your organization',
155
+ [`${exports.COMMAND_GROUPS.USERS} ${exports.SUBCOMMANDS.USERS.UPDATE}`]: 'Update user information',
115
156
  // API Keys group
116
- [exports.COMMAND_GROUPS.API_KEYS]: "Manage API keys",
117
- [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.LIST}`]: "List all API keys",
118
- [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.CREATE}`]: "Create a new API key",
119
- [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.DELETE}`]: "Delete an API key",
120
- [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.ROTATE}`]: "Rotate an API key",
121
- [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.DESCRIBE}`]: "Get usage statistics for an API key",
122
- [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.SET_DEFAULT}`]: "Set an API key as the default for chat commands",
123
- [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.GET_DEFAULT}`]: "Show the current default API key",
124
- // Clusters group
125
- [exports.COMMAND_GROUPS.CLUSTERS]: "Manage Kubernetes clusters",
126
- [`${exports.COMMAND_GROUPS.CLUSTERS} ${exports.SUBCOMMANDS.CLUSTERS.LIST}`]: "List all clusters",
127
- [`${exports.COMMAND_GROUPS.CLUSTERS} ${exports.SUBCOMMANDS.CLUSTERS.DESCRIBE}`]: "Get detailed information about a cluster",
128
- [`${exports.COMMAND_GROUPS.CLUSTERS} ${exports.SUBCOMMANDS.CLUSTERS.GET_USAGE}`]: "Get resource usage for a cluster",
157
+ [exports.COMMAND_GROUPS.API_KEYS]: 'Manage API keys',
129
158
  // Apps group
130
- [exports.COMMAND_GROUPS.APPS]: "Manage applications",
131
- [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.LIST_TEMPLATES}`]: "List available application templates",
132
- [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.DESCRIBE_TEMPLATE}`]: "Get detailed information about an application template",
133
- [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.LIST_INSTALLATIONS}`]: "List installed applications",
134
- [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.INSTALL}`]: "Install an application",
135
- [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.UNINSTALL}`]: "Uninstall an application",
136
- [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.DESCRIBE_INSTALLATION}`]: "Get detailed information about an installed application",
137
- // Models group
138
- [exports.COMMAND_GROUPS.MODELS]: "Manage AI models",
139
- [`${exports.COMMAND_GROUPS.MODELS} ${exports.SUBCOMMANDS.MODELS.LIST}`]: "List available AI models",
140
- [`${exports.COMMAND_GROUPS.MODELS} ${exports.SUBCOMMANDS.MODELS.DESCRIBE}`]: "Get detailed information about an AI model",
141
- // Helm group
142
- [exports.COMMAND_GROUPS.HELM]: "Manage Helm charts",
143
- [`${exports.COMMAND_GROUPS.HELM} ${exports.SUBCOMMANDS.HELM.ADD_REPO}`]: "Add a Helm repository",
144
- [`${exports.COMMAND_GROUPS.HELM} ${exports.SUBCOMMANDS.HELM.INSTALL}`]: "Install a Helm chart",
145
- // Kubectl group
146
- [exports.COMMAND_GROUPS.KUBECTL]: "Manage Kubernetes resources",
147
- [`${exports.COMMAND_GROUPS.KUBECTL} ${exports.SUBCOMMANDS.KUBECTL.CREATE_NAMESPACE}`]: "Create a Kubernetes namespace",
148
- [`${exports.COMMAND_GROUPS.KUBECTL} ${exports.SUBCOMMANDS.KUBECTL.APPLY}`]: "Apply a Kubernetes configuration",
149
- [`${exports.COMMAND_GROUPS.KUBECTL} ${exports.SUBCOMMANDS.KUBECTL.GET}`]: "Get Kubernetes resources",
150
- // Flux group
151
- [exports.COMMAND_GROUPS.FLUX]: "Manage Flux CD",
152
- [`${exports.COMMAND_GROUPS.FLUX} ${exports.SUBCOMMANDS.FLUX.INSTALL}`]: "Install Flux CD",
153
- [`${exports.COMMAND_GROUPS.FLUX} ${exports.SUBCOMMANDS.FLUX.BOOTSTRAP}`]: "Bootstrap Flux CD",
154
- // Users group
155
- [exports.COMMAND_GROUPS.USERS]: "Manage users",
156
- [`${exports.COMMAND_GROUPS.USERS} ${exports.SUBCOMMANDS.USERS.LIST}`]: "List all users in your organization",
157
- [`${exports.COMMAND_GROUPS.USERS} ${exports.SUBCOMMANDS.USERS.DESCRIBE}`]: "Get detailed information about a user",
158
- [`${exports.COMMAND_GROUPS.USERS} ${exports.SUBCOMMANDS.USERS.UPDATE}`]: "Update user information",
159
- [`${exports.COMMAND_GROUPS.USERS} ${exports.SUBCOMMANDS.USERS.INVITE}`]: "Invite a new user to your organization",
159
+ [exports.COMMAND_GROUPS.APPS]: 'Manage applications',
160
+ // Auth group
161
+ [exports.COMMAND_GROUPS.AUTH]: 'Manage authentication and authorization',
160
162
  // Billing group
161
- [exports.COMMAND_GROUPS.BILLING]: "Manage billing and usage",
162
- [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.GET_USAGE}`]: "Get current usage metrics",
163
- [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.LIST_INVOICES}`]: "List all invoices",
164
- [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.DESCRIBE_INVOICE}`]: "Get detailed information about an invoice",
165
- [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.LIST_PAYMENT_METHODS}`]: "List all payment methods",
166
- [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.ADD_PAYMENT_METHOD}`]: "Add a new payment method",
167
- [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.REMOVE_PAYMENT_METHOD}`]: "Remove a payment method",
168
- [`${exports.COMMAND_GROUPS.BILLING} ${exports.SUBCOMMANDS.BILLING.UPDATE_SUBSCRIPTION}`]: "Update subscription plan",
163
+ [exports.COMMAND_GROUPS.BILLING]: 'Manage billing and usage',
169
164
  // Chat group
170
- [exports.COMMAND_GROUPS.CHAT]: "Interact with AI chat models",
171
- [`${exports.COMMAND_GROUPS.CHAT} ${exports.SUBCOMMANDS.CHAT.RUN}`]: "Run a chat session with a specified model",
172
- [`${exports.COMMAND_GROUPS.CHAT} ${exports.SUBCOMMANDS.CHAT.LIST}`]: "List available chat models",
165
+ [exports.COMMAND_GROUPS.CHAT]: 'Interact with AI chat models',
166
+ // Clusters group
167
+ [exports.COMMAND_GROUPS.CLUSTERS]: 'Manage Kubernetes clusters',
173
168
  // Code group
174
- [exports.COMMAND_GROUPS.CODE]: "AI-powered coding assistant with OpenCode",
175
- [`${exports.COMMAND_GROUPS.CODE} ${exports.SUBCOMMANDS.CODE.SETUP}`]: "Interactive setup for Berget AI coding tools",
176
- [`${exports.COMMAND_GROUPS.CODE} ${exports.SUBCOMMANDS.CODE.INIT}`]: "Initialize project for AI coding assistant",
177
- [`${exports.COMMAND_GROUPS.CODE} ${exports.SUBCOMMANDS.CODE.RUN}`]: "Run AI coding assistant",
178
- [`${exports.COMMAND_GROUPS.CODE} ${exports.SUBCOMMANDS.CODE.SERVE}`]: "Start OpenCode web server",
179
- [`${exports.COMMAND_GROUPS.CODE} ${exports.SUBCOMMANDS.CODE.UPDATE}`]: "Update OpenCode and agents to latest versions",
169
+ [exports.COMMAND_GROUPS.CODE]: 'AI-powered coding assistant with OpenCode',
170
+ // Flux group
171
+ [exports.COMMAND_GROUPS.FLUX]: 'Manage Flux CD',
172
+ // Helm group
173
+ [exports.COMMAND_GROUPS.HELM]: 'Manage Helm charts',
174
+ // Kubectl group
175
+ [exports.COMMAND_GROUPS.KUBECTL]: 'Manage Kubernetes resources',
176
+ // Models group
177
+ [exports.COMMAND_GROUPS.MODELS]: 'Manage AI models',
178
+ // Users group
179
+ [exports.COMMAND_GROUPS.USERS]: 'Manage users',
180
180
  };