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,25 +1,26 @@
1
- import { Command } from 'commander'
2
- import { registerAuthCommands } from './auth'
3
- import { registerApiKeyCommands } from './api-keys'
4
- import { registerClusterCommands } from './clusters'
5
- import { registerBillingCommands } from './billing'
6
- import { registerModelCommands } from './models'
7
- import { registerUserCommands } from './users'
8
- import { registerChatCommands } from './chat'
9
- import { registerAutocompleteCommands } from './autocomplete'
10
- import { registerCodeCommands } from './code'
1
+ import { Command } from 'commander';
2
+
3
+ import { registerApiKeyCommands } from './api-keys';
4
+ import { registerAuthCommands } from './auth';
5
+ import { registerAutocompleteCommands } from './autocomplete';
6
+ import { registerBillingCommands } from './billing';
7
+ import { registerChatCommands } from './chat';
8
+ import { registerClusterCommands } from './clusters';
9
+ import { registerCodeCommands } from './code';
10
+ import { registerModelCommands } from './models';
11
+ import { registerUserCommands } from './users';
11
12
 
12
13
  /**
13
14
  * Register all command groups with the program
14
15
  */
15
16
  export function registerCommands(program: Command): void {
16
- registerAuthCommands(program)
17
- registerApiKeyCommands(program)
18
- registerClusterCommands(program)
19
- registerBillingCommands(program)
20
- registerModelCommands(program)
21
- registerUserCommands(program)
22
- registerChatCommands(program)
23
- registerAutocompleteCommands(program)
24
- registerCodeCommands(program)
17
+ registerAuthCommands(program);
18
+ registerApiKeyCommands(program);
19
+ registerClusterCommands(program);
20
+ registerBillingCommands(program);
21
+ registerModelCommands(program);
22
+ registerUserCommands(program);
23
+ registerChatCommands(program);
24
+ registerAutocompleteCommands(program);
25
+ registerCodeCommands(program);
25
26
  }
@@ -1,15 +1,14 @@
1
- import { Command } from 'commander'
2
- import { COMMAND_GROUPS, SUBCOMMANDS } from '../constants/command-structure'
3
- import { createAuthenticatedClient } from '../client'
4
- import { handleError } from '../utils/error-handler'
1
+ import { Command } from 'commander';
2
+
3
+ import { createAuthenticatedClient } from '../client';
4
+ import { COMMAND_GROUPS, SUBCOMMANDS } from '../constants/command-structure';
5
+ import { handleError } from '../utils/error-handler';
5
6
 
6
7
  /**
7
8
  * Register models commands
8
9
  */
9
10
  export function registerModelCommands(program: Command): void {
10
- const models = program
11
- .command(COMMAND_GROUPS.MODELS)
12
- .description('Manage AI models')
11
+ const models = program.command(COMMAND_GROUPS.MODELS).description('Manage AI models');
13
12
 
14
13
  models
15
14
  .command(SUBCOMMANDS.MODELS.LIST)
@@ -17,47 +16,44 @@ export function registerModelCommands(program: Command): void {
17
16
  .option('--id <modelId>', 'Get details for a specific model')
18
17
  .action(async (options) => {
19
18
  try {
20
- const client = createAuthenticatedClient()
21
- let response
19
+ const client = createAuthenticatedClient();
20
+ let response;
22
21
 
23
22
  if (options.id) {
24
23
  const { data, error } = await client.GET('/v1/models/{modelId}', {
25
24
  params: { path: { modelId: options.id } },
26
- })
27
- if (error) throw new Error(JSON.stringify(error))
28
- response = data
25
+ });
26
+ if (error) throw new Error(JSON.stringify(error));
27
+ response = data;
29
28
 
30
- console.log('Model Details:')
31
- console.log(JSON.stringify(response, null, 2))
29
+ console.log('Model Details:');
30
+ console.log(JSON.stringify(response, null, 2));
32
31
  } else {
33
- const { data, error } = await client.GET('/v1/models')
34
- if (error) throw new Error(JSON.stringify(error))
35
- response = data
32
+ const { data, error } = await client.GET('/v1/models');
33
+ if (error) throw new Error(JSON.stringify(error));
34
+ response = data;
36
35
 
37
- console.log('Available Models:')
36
+ console.log('Available Models:');
38
37
  console.log(
39
38
  'ID OWNED BY CAPABILITIES',
40
- )
39
+ );
41
40
  // Ensure response has the expected structure
42
- const modelData = response as { data?: any[] }
41
+ const modelData = response as { data?: any[] };
43
42
  if (modelData.data) {
44
43
  modelData.data.forEach((model: any) => {
45
- const capabilities = []
46
- if (model.capabilities.vision) capabilities.push('vision')
47
- if (model.capabilities.function_calling)
48
- capabilities.push('function_calling')
49
- if (model.capabilities.json_mode) capabilities.push('json_mode')
44
+ const capabilities = [];
45
+ if (model.capabilities.vision) capabilities.push('vision');
46
+ if (model.capabilities.function_calling) capabilities.push('function_calling');
47
+ if (model.capabilities.json_mode) capabilities.push('json_mode');
50
48
 
51
49
  console.log(
52
- `${model.root.padEnd(50)} ${model.owned_by.padEnd(
53
- 24,
54
- )} ${capabilities.join(', ')}`,
55
- )
56
- })
50
+ `${model.root.padEnd(50)} ${model.owned_by.padEnd(24)} ${capabilities.join(', ')}`,
51
+ );
52
+ });
57
53
  }
58
54
  }
59
55
  } catch (error) {
60
- handleError('Failed to get models', error)
56
+ handleError('Failed to get models', error);
61
57
  }
62
- })
58
+ });
63
59
  }
@@ -1,37 +1,31 @@
1
- import { Command } from 'commander'
2
- import { COMMAND_GROUPS, SUBCOMMANDS } from '../constants/command-structure'
3
- import { createAuthenticatedClient } from '../client'
4
- import { handleError } from '../utils/error-handler'
5
- import chalk from 'chalk'
1
+ import { Command } from 'commander';
2
+
3
+ import { createAuthenticatedClient } from '../client';
4
+ import { COMMAND_GROUPS, SUBCOMMANDS } from '../constants/command-structure';
5
+ import { handleError } from '../utils/error-handler';
6
6
 
7
7
  /**
8
8
  * Register user commands
9
9
  */
10
10
  export function registerUserCommands(program: Command): void {
11
- const users = program
12
- .command(COMMAND_GROUPS.USERS)
13
- .description('Manage users')
11
+ const users = program.command(COMMAND_GROUPS.USERS).description('Manage users');
14
12
 
15
13
  users
16
14
  .command(SUBCOMMANDS.USERS.LIST)
17
15
  .description('List team members')
18
16
  .action(async () => {
19
17
  try {
20
- const client = createAuthenticatedClient()
21
- const { data, error } = await client.GET('/v1/users')
22
- if (error) throw new Error(JSON.stringify(error))
18
+ const client = createAuthenticatedClient();
19
+ const { data, error } = await client.GET('/v1/users');
20
+ if (error) throw new Error(JSON.stringify(error));
23
21
 
24
- console.log('Team Members:')
25
- console.log(
26
- 'NAME EMAIL ROLE',
27
- )
22
+ console.log('Team Members:');
23
+ console.log('NAME EMAIL ROLE');
28
24
  data.forEach((user: any) => {
29
- console.log(
30
- `${user.name.padEnd(24)} ${user.email.padEnd(30)} ${user.role}`,
31
- )
32
- })
25
+ console.log(`${user.name.padEnd(24)} ${user.email.padEnd(30)} ${user.role}`);
26
+ });
33
27
  } catch (error) {
34
- handleError('Failed to list team members', error)
28
+ handleError('Failed to list team members', error);
35
29
  }
36
- })
30
+ });
37
31
  }
@@ -5,22 +5,43 @@
5
5
 
6
6
  // Main command groups
7
7
  export const COMMAND_GROUPS = {
8
- AUTH: 'auth',
9
8
  API_KEYS: 'api-keys',
10
- CLUSTERS: 'clusters',
11
9
  APPS: 'apps',
12
- MODELS: 'models',
13
- HELM: 'helm',
14
- KUBECTL: 'kubectl',
15
- FLUX: 'flux',
16
- USERS: 'users',
10
+ AUTH: 'auth',
17
11
  BILLING: 'billing',
18
12
  CHAT: 'chat',
13
+ CLUSTERS: 'clusters',
19
14
  CODE: 'code',
20
- }
15
+ FLUX: 'flux',
16
+ HELM: 'helm',
17
+ KUBECTL: 'kubectl',
18
+ MODELS: 'models',
19
+ USERS: 'users',
20
+ };
21
21
 
22
22
  // Subcommands for each group
23
23
  export const SUBCOMMANDS = {
24
+ // API Keys commands
25
+ API_KEYS: {
26
+ CREATE: 'create',
27
+ DELETE: 'delete',
28
+ DESCRIBE: 'describe',
29
+ GET_DEFAULT: 'get-default',
30
+ LIST: 'list',
31
+ ROTATE: 'rotate',
32
+ SET_DEFAULT: 'set-default',
33
+ },
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
+ },
44
+
24
45
  // Auth commands
25
46
  AUTH: {
26
47
  LOGIN: 'login',
@@ -28,9 +49,27 @@ export const SUBCOMMANDS = {
28
49
  WHOAMI: 'whoami',
29
50
  },
30
51
 
52
+ // Billing commands
53
+ BILLING: {
54
+ ADD_PAYMENT_METHOD: 'add-payment-method',
55
+ DESCRIBE_INVOICE: 'describe-invoice',
56
+ GET_USAGE: 'get-usage',
57
+ LIST_INVOICES: 'list-invoices',
58
+ LIST_PAYMENT_METHODS: 'list-payment-methods',
59
+ REMOVE_PAYMENT_METHOD: 'remove-payment-method',
60
+ UPDATE_SUBSCRIPTION: 'update-subscription',
61
+ },
62
+
31
63
  // Chat commands
32
64
  CHAT: {
65
+ LIST: 'list',
33
66
  RUN: 'run',
67
+ },
68
+
69
+ // Clusters commands
70
+ CLUSTERS: {
71
+ DESCRIBE: 'describe',
72
+ GET_USAGE: 'get-usage',
34
73
  LIST: 'list',
35
74
  },
36
75
 
@@ -38,43 +77,15 @@ export const SUBCOMMANDS = {
38
77
  CODE: {
39
78
  INIT: 'init',
40
79
  RUN: 'run',
41
- UPDATE: 'update',
42
80
  SERVE: 'serve',
43
81
  SETUP: 'setup',
82
+ UPDATE: 'update',
44
83
  },
45
84
 
46
- // API Keys commands
47
- API_KEYS: {
48
- LIST: 'list',
49
- CREATE: 'create',
50
- DELETE: 'delete',
51
- ROTATE: 'rotate',
52
- DESCRIBE: 'describe',
53
- SET_DEFAULT: 'set-default',
54
- GET_DEFAULT: 'get-default',
55
- },
56
-
57
- // Clusters commands
58
- CLUSTERS: {
59
- LIST: 'list',
60
- DESCRIBE: 'describe',
61
- GET_USAGE: 'get-usage',
62
- },
63
-
64
- // Apps commands
65
- APPS: {
66
- LIST_TEMPLATES: 'list-templates',
67
- DESCRIBE_TEMPLATE: 'describe-template',
68
- LIST_INSTALLATIONS: 'list-installations',
85
+ // Flux commands
86
+ FLUX: {
87
+ BOOTSTRAP: 'bootstrap',
69
88
  INSTALL: 'install',
70
- UNINSTALL: 'uninstall',
71
- DESCRIBE_INSTALLATION: 'describe-installation',
72
- },
73
-
74
- // Models commands
75
- MODELS: {
76
- LIST: 'list',
77
- DESCRIBE: 'describe',
78
89
  },
79
90
 
80
91
  // Helm commands
@@ -85,159 +96,125 @@ export const SUBCOMMANDS = {
85
96
 
86
97
  // Kubectl commands
87
98
  KUBECTL: {
88
- CREATE_NAMESPACE: 'create-namespace',
89
99
  APPLY: 'apply',
100
+ CREATE_NAMESPACE: 'create-namespace',
90
101
  GET: 'get',
91
102
  },
92
103
 
93
- // Flux commands
94
- FLUX: {
95
- INSTALL: 'install',
96
- BOOTSTRAP: 'bootstrap',
104
+ // Models commands
105
+ MODELS: {
106
+ DESCRIBE: 'describe',
107
+ LIST: 'list',
97
108
  },
98
109
 
99
110
  // Users commands
100
111
  USERS: {
101
- LIST: 'list',
102
112
  DESCRIBE: 'describe',
103
- UPDATE: 'update',
104
113
  INVITE: 'invite',
114
+ LIST: 'list',
115
+ UPDATE: 'update',
105
116
  },
106
-
107
- // Billing commands
108
- BILLING: {
109
- GET_USAGE: 'get-usage',
110
- LIST_INVOICES: 'list-invoices',
111
- DESCRIBE_INVOICE: 'describe-invoice',
112
- LIST_PAYMENT_METHODS: 'list-payment-methods',
113
- ADD_PAYMENT_METHOD: 'add-payment-method',
114
- REMOVE_PAYMENT_METHOD: 'remove-payment-method',
115
- UPDATE_SUBSCRIPTION: 'update-subscription',
116
- },
117
- }
117
+ };
118
118
 
119
119
  // Command descriptions
120
120
  export const COMMAND_DESCRIPTIONS = {
121
- // Auth group
122
- [COMMAND_GROUPS.AUTH]: 'Manage authentication and authorization',
123
- [`${COMMAND_GROUPS.AUTH} ${SUBCOMMANDS.AUTH.LOGIN}`]: 'Log in to Berget AI',
124
- [`${COMMAND_GROUPS.AUTH} ${SUBCOMMANDS.AUTH.LOGOUT}`]:
125
- 'Log out from Berget AI',
126
- [`${COMMAND_GROUPS.AUTH} ${SUBCOMMANDS.AUTH.WHOAMI}`]:
127
- 'Display current user information',
128
-
129
- // API Keys group
130
- [COMMAND_GROUPS.API_KEYS]: 'Manage API keys',
131
- [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.LIST}`]:
132
- 'List all API keys',
133
- [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.CREATE}`]:
134
- 'Create a new API key',
135
- [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.DELETE}`]:
136
- 'Delete an API key',
137
- [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.ROTATE}`]:
138
- 'Rotate an API key',
121
+ [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.CREATE}`]: 'Create a new API key',
122
+ [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.DELETE}`]: 'Delete an API key',
139
123
  [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.DESCRIBE}`]:
140
124
  'Get usage statistics for an API key',
141
- [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.SET_DEFAULT}`]:
142
- 'Set an API key as the default for chat commands',
143
125
  [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.GET_DEFAULT}`]:
144
126
  'Show the current default API key',
145
127
 
146
- // Clusters group
147
- [COMMAND_GROUPS.CLUSTERS]: 'Manage Kubernetes clusters',
148
- [`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.LIST}`]:
149
- 'List all clusters',
128
+ [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.LIST}`]: 'List all API keys',
129
+ [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.ROTATE}`]: 'Rotate an API key',
130
+ [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.SET_DEFAULT}`]:
131
+ 'Set an API key as the default for chat commands',
132
+ [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.DESCRIBE_INSTALLATION}`]:
133
+ 'Get detailed information about an installed application',
134
+ [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.DESCRIBE_TEMPLATE}`]:
135
+ 'Get detailed information about an application template',
136
+ [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.INSTALL}`]: 'Install an application',
137
+ [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.LIST_INSTALLATIONS}`]: 'List installed applications',
138
+ [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.LIST_TEMPLATES}`]:
139
+ 'List available application templates',
140
+
141
+ [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.UNINSTALL}`]: 'Uninstall an application',
142
+ [`${COMMAND_GROUPS.AUTH} ${SUBCOMMANDS.AUTH.LOGIN}`]: 'Log in to Berget AI',
143
+ [`${COMMAND_GROUPS.AUTH} ${SUBCOMMANDS.AUTH.LOGOUT}`]: 'Log out from Berget AI',
144
+ [`${COMMAND_GROUPS.AUTH} ${SUBCOMMANDS.AUTH.WHOAMI}`]: 'Display current user information',
145
+
146
+ [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.ADD_PAYMENT_METHOD}`]:
147
+ 'Add a new payment method',
148
+ [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.DESCRIBE_INVOICE}`]:
149
+ 'Get detailed information about an invoice',
150
+ [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.GET_USAGE}`]: 'Get current usage metrics',
151
+ [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.LIST_INVOICES}`]: 'List all invoices',
152
+ [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.LIST_PAYMENT_METHODS}`]:
153
+ 'List all payment methods',
154
+ [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.REMOVE_PAYMENT_METHOD}`]:
155
+ 'Remove a payment method',
156
+ [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.UPDATE_SUBSCRIPTION}`]:
157
+ 'Update subscription plan',
158
+
159
+ [`${COMMAND_GROUPS.CHAT} ${SUBCOMMANDS.CHAT.LIST}`]: 'List available chat models',
160
+ [`${COMMAND_GROUPS.CHAT} ${SUBCOMMANDS.CHAT.RUN}`]: 'Run a chat session with a specified model',
150
161
  [`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.DESCRIBE}`]:
151
162
  'Get detailed information about a cluster',
163
+
152
164
  [`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.GET_USAGE}`]:
153
165
  'Get resource usage for a cluster',
166
+ [`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.LIST}`]: 'List all clusters',
167
+ [`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.INIT}`]: 'Initialize project for AI coding assistant',
154
168
 
155
- // Apps group
156
- [COMMAND_GROUPS.APPS]: 'Manage applications',
157
- [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.LIST_TEMPLATES}`]:
158
- 'List available application templates',
159
- [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.DESCRIBE_TEMPLATE}`]:
160
- 'Get detailed information about an application template',
161
- [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.LIST_INSTALLATIONS}`]:
162
- 'List installed applications',
163
- [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.INSTALL}`]:
164
- 'Install an application',
165
- [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.UNINSTALL}`]:
166
- 'Uninstall an application',
167
- [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.DESCRIBE_INSTALLATION}`]:
168
- 'Get detailed information about an installed application',
169
-
170
- // Models group
171
- [COMMAND_GROUPS.MODELS]: 'Manage AI models',
172
- [`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.LIST}`]:
173
- 'List available AI models',
174
- [`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.DESCRIBE}`]:
175
- 'Get detailed information about an AI model',
169
+ [`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.RUN}`]: 'Run AI coding assistant',
170
+ [`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.SERVE}`]: 'Start OpenCode web server',
171
+ [`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.SETUP}`]:
172
+ 'Interactive setup for Berget AI coding tools',
173
+ [`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.UPDATE}`]:
174
+ 'Update OpenCode and agents to latest versions',
176
175
 
177
- // Helm group
178
- [COMMAND_GROUPS.HELM]: 'Manage Helm charts',
179
- [`${COMMAND_GROUPS.HELM} ${SUBCOMMANDS.HELM.ADD_REPO}`]:
180
- 'Add a Helm repository',
181
- [`${COMMAND_GROUPS.HELM} ${SUBCOMMANDS.HELM.INSTALL}`]:
182
- 'Install a Helm chart',
176
+ [`${COMMAND_GROUPS.FLUX} ${SUBCOMMANDS.FLUX.BOOTSTRAP}`]: 'Bootstrap Flux CD',
177
+ [`${COMMAND_GROUPS.FLUX} ${SUBCOMMANDS.FLUX.INSTALL}`]: 'Install Flux CD',
178
+ [`${COMMAND_GROUPS.HELM} ${SUBCOMMANDS.HELM.ADD_REPO}`]: 'Add a Helm repository',
183
179
 
184
- // Kubectl group
185
- [COMMAND_GROUPS.KUBECTL]: 'Manage Kubernetes resources',
180
+ [`${COMMAND_GROUPS.HELM} ${SUBCOMMANDS.HELM.INSTALL}`]: 'Install a Helm chart',
181
+ [`${COMMAND_GROUPS.KUBECTL} ${SUBCOMMANDS.KUBECTL.APPLY}`]: 'Apply a Kubernetes configuration',
186
182
  [`${COMMAND_GROUPS.KUBECTL} ${SUBCOMMANDS.KUBECTL.CREATE_NAMESPACE}`]:
187
183
  'Create a Kubernetes namespace',
188
- [`${COMMAND_GROUPS.KUBECTL} ${SUBCOMMANDS.KUBECTL.APPLY}`]:
189
- 'Apply a Kubernetes configuration',
190
- [`${COMMAND_GROUPS.KUBECTL} ${SUBCOMMANDS.KUBECTL.GET}`]:
191
- 'Get Kubernetes resources',
192
-
193
- // Flux group
194
- [COMMAND_GROUPS.FLUX]: 'Manage Flux CD',
195
- [`${COMMAND_GROUPS.FLUX} ${SUBCOMMANDS.FLUX.INSTALL}`]: 'Install Flux CD',
196
- [`${COMMAND_GROUPS.FLUX} ${SUBCOMMANDS.FLUX.BOOTSTRAP}`]: 'Bootstrap Flux CD',
184
+ [`${COMMAND_GROUPS.KUBECTL} ${SUBCOMMANDS.KUBECTL.GET}`]: 'Get Kubernetes resources',
185
+ [`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.DESCRIBE}`]:
186
+ 'Get detailed information about an AI model',
197
187
 
198
- // Users group
199
- [COMMAND_GROUPS.USERS]: 'Manage users',
200
- [`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.LIST}`]:
201
- 'List all users in your organization',
188
+ [`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.LIST}`]: 'List available AI models',
202
189
  [`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.DESCRIBE}`]:
203
190
  'Get detailed information about a user',
204
- [`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.UPDATE}`]:
205
- 'Update user information',
206
- [`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.INVITE}`]:
207
- 'Invite a new user to your organization',
191
+ [`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.INVITE}`]: 'Invite a new user to your organization',
192
+ [`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.LIST}`]: 'List all users in your organization',
193
+ [`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.UPDATE}`]: 'Update user information',
194
+ // API Keys group
195
+ [COMMAND_GROUPS.API_KEYS]: 'Manage API keys',
196
+ // Apps group
197
+ [COMMAND_GROUPS.APPS]: 'Manage applications',
198
+ // Auth group
199
+ [COMMAND_GROUPS.AUTH]: 'Manage authentication and authorization',
208
200
 
209
201
  // Billing group
210
202
  [COMMAND_GROUPS.BILLING]: 'Manage billing and usage',
211
- [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.GET_USAGE}`]:
212
- 'Get current usage metrics',
213
- [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.LIST_INVOICES}`]:
214
- 'List all invoices',
215
- [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.DESCRIBE_INVOICE}`]:
216
- 'Get detailed information about an invoice',
217
- [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.LIST_PAYMENT_METHODS}`]:
218
- 'List all payment methods',
219
- [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.ADD_PAYMENT_METHOD}`]:
220
- 'Add a new payment method',
221
- [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.REMOVE_PAYMENT_METHOD}`]:
222
- 'Remove a payment method',
223
- [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.UPDATE_SUBSCRIPTION}`]:
224
- 'Update subscription plan',
225
-
226
203
  // Chat group
227
204
  [COMMAND_GROUPS.CHAT]: 'Interact with AI chat models',
228
- [`${COMMAND_GROUPS.CHAT} ${SUBCOMMANDS.CHAT.RUN}`]:
229
- 'Run a chat session with a specified model',
230
- [`${COMMAND_GROUPS.CHAT} ${SUBCOMMANDS.CHAT.LIST}`]:
231
- 'List available chat models',
205
+ // Clusters group
206
+ [COMMAND_GROUPS.CLUSTERS]: 'Manage Kubernetes clusters',
232
207
 
233
208
  // Code group
234
209
  [COMMAND_GROUPS.CODE]: 'AI-powered coding assistant with OpenCode',
235
- [`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.SETUP}`]:
236
- 'Interactive setup for Berget AI coding tools',
237
- [`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.INIT}`]:
238
- 'Initialize project for AI coding assistant',
239
- [`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.RUN}`]: 'Run AI coding assistant',
240
- [`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.SERVE}`]: 'Start OpenCode web server',
241
- [`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.UPDATE}`]:
242
- 'Update OpenCode and agents to latest versions',
243
- }
210
+ // Flux group
211
+ [COMMAND_GROUPS.FLUX]: 'Manage Flux CD',
212
+ // Helm group
213
+ [COMMAND_GROUPS.HELM]: 'Manage Helm charts',
214
+ // Kubectl group
215
+ [COMMAND_GROUPS.KUBECTL]: 'Manage Kubernetes resources',
216
+ // Models group
217
+ [COMMAND_GROUPS.MODELS]: 'Manage AI models',
218
+ // Users group
219
+ [COMMAND_GROUPS.USERS]: 'Manage users',
220
+ };