berget 2.2.5 → 2.2.7

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