berget 2.2.6 → 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 (145) hide show
  1. package/.github/workflows/publish.yml +2 -2
  2. package/.github/workflows/test.yml +10 -4
  3. package/.husky/pre-commit +1 -0
  4. package/.prettierignore +15 -0
  5. package/.prettierrc +7 -3
  6. package/CONTRIBUTING.md +38 -0
  7. package/README.md +2 -148
  8. package/dist/index.js +10 -11
  9. package/dist/package.json +30 -2
  10. package/dist/src/agents/app.js +28 -0
  11. package/dist/src/agents/backend.js +25 -0
  12. package/dist/src/agents/devops.js +34 -0
  13. package/dist/src/agents/frontend.js +25 -0
  14. package/dist/src/agents/fullstack.js +25 -0
  15. package/dist/src/agents/index.js +61 -0
  16. package/dist/src/agents/quality.js +70 -0
  17. package/dist/src/agents/security.js +26 -0
  18. package/dist/src/agents/types.js +2 -0
  19. package/dist/src/client.js +97 -117
  20. package/dist/src/commands/api-keys.js +75 -90
  21. package/dist/src/commands/auth.js +7 -16
  22. package/dist/src/commands/autocomplete.js +1 -1
  23. package/dist/src/commands/billing.js +6 -17
  24. package/dist/src/commands/chat.js +68 -101
  25. package/dist/src/commands/clusters.js +9 -18
  26. package/dist/src/commands/code/__tests__/auth-sync.test.js +351 -0
  27. package/dist/src/commands/code/__tests__/fake-api-key-service.js +13 -0
  28. package/dist/src/commands/code/__tests__/fake-auth-service.js +47 -0
  29. package/dist/src/commands/code/__tests__/fake-command-runner.js +21 -34
  30. package/dist/src/commands/code/__tests__/fake-file-store.js +20 -33
  31. package/dist/src/commands/code/__tests__/fake-prompter.js +83 -57
  32. package/dist/src/commands/code/__tests__/setup-flow.test.js +359 -92
  33. package/dist/src/commands/code/adapters/clack-prompter.js +15 -22
  34. package/dist/src/commands/code/adapters/fs-file-store.js +26 -40
  35. package/dist/src/commands/code/adapters/spawn-command-runner.js +27 -37
  36. package/dist/src/commands/code/auth-sync.js +270 -0
  37. package/dist/src/commands/code/errors.js +12 -9
  38. package/dist/src/commands/code/ports/auth-services.js +2 -0
  39. package/dist/src/commands/code/setup.js +387 -281
  40. package/dist/src/commands/code.js +205 -332
  41. package/dist/src/commands/index.js +5 -5
  42. package/dist/src/commands/models.js +6 -17
  43. package/dist/src/commands/users.js +5 -16
  44. package/dist/src/constants/command-structure.js +104 -104
  45. package/dist/src/services/api-key-service.js +132 -157
  46. package/dist/src/services/auth-service.js +89 -342
  47. package/dist/src/services/browser-auth.js +268 -0
  48. package/dist/src/services/chat-service.js +371 -401
  49. package/dist/src/services/cluster-service.js +47 -62
  50. package/dist/src/services/collaborator-service.js +10 -25
  51. package/dist/src/services/flux-service.js +14 -29
  52. package/dist/src/services/helm-service.js +10 -25
  53. package/dist/src/services/kubectl-service.js +16 -33
  54. package/dist/src/utils/config-checker.js +3 -3
  55. package/dist/src/utils/config-loader.js +95 -95
  56. package/dist/src/utils/default-api-key.js +124 -134
  57. package/dist/src/utils/env-manager.js +55 -66
  58. package/dist/src/utils/error-handler.js +20 -21
  59. package/dist/src/utils/logger.js +72 -65
  60. package/dist/src/utils/markdown-renderer.js +27 -27
  61. package/dist/src/utils/opencode-validator.js +63 -68
  62. package/dist/src/utils/token-manager.js +74 -45
  63. package/dist/tests/commands/chat.test.js +16 -25
  64. package/dist/tests/commands/code.test.js +95 -104
  65. package/dist/tests/utils/config-loader.test.js +48 -48
  66. package/dist/tests/utils/env-manager.test.js +43 -52
  67. package/dist/tests/utils/opencode-validator.test.js +22 -21
  68. package/dist/vitest.config.js +1 -1
  69. package/eslint.config.mjs +67 -0
  70. package/index.ts +35 -42
  71. package/package.json +30 -2
  72. package/src/agents/app.ts +27 -0
  73. package/src/agents/backend.ts +24 -0
  74. package/src/agents/devops.ts +33 -0
  75. package/src/agents/frontend.ts +24 -0
  76. package/src/agents/fullstack.ts +24 -0
  77. package/src/agents/index.ts +73 -0
  78. package/src/agents/quality.ts +69 -0
  79. package/src/agents/security.ts +26 -0
  80. package/src/agents/types.ts +17 -0
  81. package/src/client.ts +118 -152
  82. package/src/commands/api-keys.ts +241 -333
  83. package/src/commands/auth.ts +22 -27
  84. package/src/commands/autocomplete.ts +9 -9
  85. package/src/commands/billing.ts +20 -24
  86. package/src/commands/chat.ts +248 -338
  87. package/src/commands/clusters.ts +27 -26
  88. package/src/commands/code/__tests__/auth-sync.test.ts +482 -0
  89. package/src/commands/code/__tests__/fake-api-key-service.ts +13 -0
  90. package/src/commands/code/__tests__/fake-auth-service.ts +50 -0
  91. package/src/commands/code/__tests__/fake-command-runner.ts +45 -42
  92. package/src/commands/code/__tests__/fake-file-store.ts +32 -23
  93. package/src/commands/code/__tests__/fake-prompter.ts +116 -77
  94. package/src/commands/code/__tests__/setup-flow.test.ts +624 -268
  95. package/src/commands/code/adapters/clack-prompter.ts +53 -39
  96. package/src/commands/code/adapters/fs-file-store.ts +32 -27
  97. package/src/commands/code/adapters/spawn-command-runner.ts +38 -29
  98. package/src/commands/code/auth-sync.ts +329 -0
  99. package/src/commands/code/errors.ts +18 -18
  100. package/src/commands/code/ports/auth-services.ts +14 -0
  101. package/src/commands/code/ports/command-runner.ts +8 -4
  102. package/src/commands/code/ports/file-store.ts +5 -4
  103. package/src/commands/code/ports/prompter.ts +24 -18
  104. package/src/commands/code/setup.ts +570 -340
  105. package/src/commands/code.ts +338 -539
  106. package/src/commands/index.ts +20 -19
  107. package/src/commands/models.ts +28 -32
  108. package/src/commands/users.ts +15 -21
  109. package/src/constants/command-structure.ts +134 -157
  110. package/src/services/api-key-service.ts +105 -122
  111. package/src/services/auth-service.ts +99 -345
  112. package/src/services/browser-auth.ts +296 -0
  113. package/src/services/chat-service.ts +265 -299
  114. package/src/services/cluster-service.ts +42 -45
  115. package/src/services/collaborator-service.ts +14 -19
  116. package/src/services/flux-service.ts +23 -25
  117. package/src/services/helm-service.ts +19 -21
  118. package/src/services/kubectl-service.ts +17 -19
  119. package/src/types/api.d.ts +1905 -1907
  120. package/src/types/json.d.ts +2 -2
  121. package/src/utils/config-checker.ts +10 -10
  122. package/src/utils/config-loader.ts +162 -178
  123. package/src/utils/default-api-key.ts +114 -125
  124. package/src/utils/env-manager.ts +53 -57
  125. package/src/utils/error-handler.ts +61 -56
  126. package/src/utils/logger.ts +79 -73
  127. package/src/utils/markdown-renderer.ts +31 -31
  128. package/src/utils/opencode-validator.ts +85 -89
  129. package/src/utils/token-manager.ts +108 -87
  130. package/templates/agents/app.md +1 -0
  131. package/templates/agents/backend.md +1 -0
  132. package/templates/agents/devops.md +2 -0
  133. package/templates/agents/frontend.md +1 -0
  134. package/templates/agents/fullstack.md +1 -0
  135. package/templates/agents/quality.md +45 -40
  136. package/templates/agents/security.md +1 -0
  137. package/tests/commands/chat.test.ts +53 -62
  138. package/tests/commands/code.test.ts +265 -310
  139. package/tests/utils/config-loader.test.ts +189 -188
  140. package/tests/utils/env-manager.test.ts +110 -113
  141. package/tests/utils/opencode-validator.test.ts +52 -56
  142. package/tsconfig.json +4 -3
  143. package/vitest.config.ts +3 -3
  144. package/AGENTS.md +0 -374
  145. package/TODO.md +0 -19
@@ -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,35 +1,24 @@
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
21
- .command(command_structure_1.COMMAND_GROUPS.MODELS)
22
- .description('Manage AI models');
11
+ const models = program.command(command_structure_1.COMMAND_GROUPS.MODELS).description('Manage AI models');
23
12
  models
24
13
  .command(command_structure_1.SUBCOMMANDS.MODELS.LIST)
25
14
  .description('List available AI models')
26
15
  .option('--id <modelId>', 'Get details for a specific model')
27
- .action((options) => __awaiter(this, void 0, void 0, function* () {
16
+ .action(async (options) => {
28
17
  try {
29
18
  const client = (0, client_1.createAuthenticatedClient)();
30
19
  let response;
31
20
  if (options.id) {
32
- const { data, error } = yield client.GET('/v1/models/{modelId}', {
21
+ const { data, error } = await client.GET('/v1/models/{modelId}', {
33
22
  params: { path: { modelId: options.id } },
34
23
  });
35
24
  if (error)
@@ -39,7 +28,7 @@ function registerModelCommands(program) {
39
28
  console.log(JSON.stringify(response, null, 2));
40
29
  }
41
30
  else {
42
- const { data, error } = yield client.GET('/v1/models');
31
+ const { data, error } = await client.GET('/v1/models');
43
32
  if (error)
44
33
  throw new Error(JSON.stringify(error));
45
34
  response = data;
@@ -64,6 +53,6 @@ function registerModelCommands(program) {
64
53
  catch (error) {
65
54
  (0, error_handler_1.handleError)('Failed to get models', error);
66
55
  }
67
- }));
56
+ });
68
57
  }
69
58
  exports.registerModelCommands = registerModelCommands;
@@ -1,32 +1,21 @@
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
21
- .command(command_structure_1.COMMAND_GROUPS.USERS)
22
- .description('Manage users');
11
+ const users = program.command(command_structure_1.COMMAND_GROUPS.USERS).description('Manage users');
23
12
  users
24
13
  .command(command_structure_1.SUBCOMMANDS.USERS.LIST)
25
14
  .description('List team members')
26
- .action(() => __awaiter(this, void 0, void 0, function* () {
15
+ .action(async () => {
27
16
  try {
28
17
  const client = (0, client_1.createAuthenticatedClient)();
29
- const { data, error } = yield client.GET('/v1/users');
18
+ const { data, error } = await client.GET('/v1/users');
30
19
  if (error)
31
20
  throw new Error(JSON.stringify(error));
32
21
  console.log('Team Members:');
@@ -38,6 +27,6 @@ function registerUserCommands(program) {
38
27
  catch (error) {
39
28
  (0, error_handler_1.handleError)('Failed to list team members', error);
40
29
  }
41
- }));
30
+ });
42
31
  }
43
32
  exports.registerUserCommands = registerUserCommands;
@@ -7,69 +7,79 @@ 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
10
  API_KEYS: 'api-keys',
12
- CLUSTERS: 'clusters',
13
11
  APPS: 'apps',
14
- MODELS: 'models',
15
- HELM: 'helm',
16
- KUBECTL: 'kubectl',
17
- FLUX: 'flux',
18
- USERS: 'users',
12
+ AUTH: 'auth',
19
13
  BILLING: 'billing',
20
14
  CHAT: 'chat',
15
+ CLUSTERS: 'clusters',
21
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
46
  LOGIN: 'login',
28
47
  LOGOUT: 'logout',
29
48
  WHOAMI: 'whoami',
30
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',
59
+ },
31
60
  // Chat commands
32
61
  CHAT: {
62
+ LIST: 'list',
33
63
  RUN: 'run',
64
+ },
65
+ // Clusters commands
66
+ CLUSTERS: {
67
+ DESCRIBE: 'describe',
68
+ GET_USAGE: 'get-usage',
34
69
  LIST: 'list',
35
70
  },
36
71
  // Code commands
37
72
  CODE: {
38
73
  INIT: 'init',
39
74
  RUN: 'run',
40
- UPDATE: 'update',
41
75
  SERVE: 'serve',
42
76
  SETUP: 'setup',
77
+ UPDATE: 'update',
43
78
  },
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',
53
- },
54
- // Clusters commands
55
- CLUSTERS: {
56
- LIST: 'list',
57
- DESCRIBE: 'describe',
58
- GET_USAGE: 'get-usage',
59
- },
60
- // Apps commands
61
- APPS: {
62
- LIST_TEMPLATES: 'list-templates',
63
- DESCRIBE_TEMPLATE: 'describe-template',
64
- LIST_INSTALLATIONS: 'list-installations',
79
+ // Flux commands
80
+ FLUX: {
81
+ BOOTSTRAP: 'bootstrap',
65
82
  INSTALL: 'install',
66
- UNINSTALL: 'uninstall',
67
- DESCRIBE_INSTALLATION: 'describe-installation',
68
- },
69
- // Models commands
70
- MODELS: {
71
- LIST: 'list',
72
- DESCRIBE: 'describe',
73
83
  },
74
84
  // Helm commands
75
85
  HELM: {
@@ -78,103 +88,93 @@ exports.SUBCOMMANDS = {
78
88
  },
79
89
  // Kubectl commands
80
90
  KUBECTL: {
81
- CREATE_NAMESPACE: 'create-namespace',
82
91
  APPLY: 'apply',
92
+ CREATE_NAMESPACE: 'create-namespace',
83
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
102
  DESCRIBE: 'describe',
94
- UPDATE: 'update',
95
103
  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',
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',
115
- // 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
110
  [`${exports.COMMAND_GROUPS.API_KEYS} ${exports.SUBCOMMANDS.API_KEYS.CREATE}`]: 'Create a new API key',
119
111
  [`${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
112
  [`${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
113
  [`${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',
129
- // Apps group
130
- [exports.COMMAND_GROUPS.APPS]: 'Manage applications',
131
- [`${exports.COMMAND_GROUPS.APPS} ${exports.SUBCOMMANDS.APPS.LIST_TEMPLATES}`]: 'List available application templates',
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',
132
118
  [`${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
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',
135
122
  [`${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',
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',
143
145
  [`${exports.COMMAND_GROUPS.HELM} ${exports.SUBCOMMANDS.HELM.ADD_REPO}`]: 'Add a Helm repository',
144
146
  [`${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
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
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',
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',
157
152
  [`${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
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',
156
+ // API Keys group
157
+ [exports.COMMAND_GROUPS.API_KEYS]: 'Manage API keys',
158
+ // Apps group
159
+ [exports.COMMAND_GROUPS.APPS]: 'Manage applications',
160
+ // Auth group
161
+ [exports.COMMAND_GROUPS.AUTH]: 'Manage authentication and authorization',
160
162
  // Billing group
161
163
  [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',
169
164
  // Chat group
170
165
  [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',
166
+ // Clusters group
167
+ [exports.COMMAND_GROUPS.CLUSTERS]: 'Manage Kubernetes clusters',
173
168
  // Code group
174
169
  [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',
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
  };