berget 2.2.6 → 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 (144) hide show
  1. package/.github/workflows/publish.yml +6 -6
  2. package/.github/workflows/test.yml +11 -5
  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 +28 -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 +5 -7
  30. package/dist/src/commands/code/__tests__/fake-file-store.js +9 -0
  31. package/dist/src/commands/code/__tests__/fake-prompter.js +60 -18
  32. package/dist/src/commands/code/__tests__/setup-flow.test.js +374 -107
  33. package/dist/src/commands/code/adapters/clack-prompter.js +10 -0
  34. package/dist/src/commands/code/adapters/fs-file-store.js +8 -3
  35. package/dist/src/commands/code/adapters/spawn-command-runner.js +15 -11
  36. package/dist/src/commands/code/auth-sync.js +283 -0
  37. package/dist/src/commands/code/errors.js +4 -4
  38. package/dist/src/commands/code/ports/auth-services.js +2 -0
  39. package/dist/src/commands/code/setup.js +234 -93
  40. package/dist/src/commands/code.js +139 -251
  41. package/dist/src/commands/models.js +13 -15
  42. package/dist/src/commands/users.js +6 -8
  43. package/dist/src/constants/command-structure.js +116 -116
  44. package/dist/src/services/api-key-service.js +43 -48
  45. package/dist/src/services/auth-service.js +60 -299
  46. package/dist/src/services/browser-auth.js +278 -0
  47. package/dist/src/services/chat-service.js +78 -91
  48. package/dist/src/services/cluster-service.js +6 -6
  49. package/dist/src/services/collaborator-service.js +5 -8
  50. package/dist/src/services/flux-service.js +5 -8
  51. package/dist/src/services/helm-service.js +5 -8
  52. package/dist/src/services/kubectl-service.js +7 -10
  53. package/dist/src/utils/config-checker.js +5 -5
  54. package/dist/src/utils/config-loader.js +25 -25
  55. package/dist/src/utils/default-api-key.js +23 -23
  56. package/dist/src/utils/env-manager.js +7 -7
  57. package/dist/src/utils/error-handler.js +60 -61
  58. package/dist/src/utils/logger.js +7 -7
  59. package/dist/src/utils/markdown-renderer.js +2 -2
  60. package/dist/src/utils/opencode-validator.js +17 -20
  61. package/dist/src/utils/token-manager.js +38 -11
  62. package/dist/tests/commands/chat.test.js +24 -24
  63. package/dist/tests/commands/code.test.js +147 -147
  64. package/dist/tests/utils/config-loader.test.js +114 -114
  65. package/dist/tests/utils/env-manager.test.js +57 -57
  66. package/dist/tests/utils/opencode-validator.test.js +33 -33
  67. package/dist/vitest.config.js +1 -1
  68. package/eslint.config.mjs +47 -0
  69. package/index.ts +42 -48
  70. package/package.json +28 -2
  71. package/src/agents/app.ts +27 -0
  72. package/src/agents/backend.ts +24 -0
  73. package/src/agents/devops.ts +33 -0
  74. package/src/agents/frontend.ts +24 -0
  75. package/src/agents/fullstack.ts +24 -0
  76. package/src/agents/index.ts +71 -0
  77. package/src/agents/quality.ts +69 -0
  78. package/src/agents/security.ts +26 -0
  79. package/src/agents/types.ts +17 -0
  80. package/src/client.ts +125 -167
  81. package/src/commands/api-keys.ts +261 -358
  82. package/src/commands/auth.ts +24 -30
  83. package/src/commands/autocomplete.ts +12 -12
  84. package/src/commands/billing.ts +22 -27
  85. package/src/commands/chat.ts +230 -323
  86. package/src/commands/clusters.ts +33 -33
  87. package/src/commands/code/__tests__/auth-sync.test.ts +481 -0
  88. package/src/commands/code/__tests__/fake-api-key-service.ts +13 -0
  89. package/src/commands/code/__tests__/fake-auth-service.ts +50 -0
  90. package/src/commands/code/__tests__/fake-command-runner.ts +39 -42
  91. package/src/commands/code/__tests__/fake-file-store.ts +32 -23
  92. package/src/commands/code/__tests__/fake-prompter.ts +107 -69
  93. package/src/commands/code/__tests__/setup-flow.test.ts +624 -270
  94. package/src/commands/code/adapters/clack-prompter.ts +50 -38
  95. package/src/commands/code/adapters/fs-file-store.ts +31 -27
  96. package/src/commands/code/adapters/spawn-command-runner.ts +33 -29
  97. package/src/commands/code/auth-sync.ts +329 -0
  98. package/src/commands/code/errors.ts +15 -15
  99. package/src/commands/code/ports/auth-services.ts +14 -0
  100. package/src/commands/code/ports/command-runner.ts +8 -4
  101. package/src/commands/code/ports/file-store.ts +5 -4
  102. package/src/commands/code/ports/prompter.ts +24 -18
  103. package/src/commands/code/setup.ts +545 -317
  104. package/src/commands/code.ts +271 -473
  105. package/src/commands/index.ts +19 -19
  106. package/src/commands/models.ts +32 -37
  107. package/src/commands/users.ts +15 -22
  108. package/src/constants/command-structure.ts +119 -142
  109. package/src/services/api-key-service.ts +96 -113
  110. package/src/services/auth-service.ts +92 -339
  111. package/src/services/browser-auth.ts +296 -0
  112. package/src/services/chat-service.ts +246 -279
  113. package/src/services/cluster-service.ts +29 -32
  114. package/src/services/collaborator-service.ts +13 -18
  115. package/src/services/flux-service.ts +16 -18
  116. package/src/services/helm-service.ts +16 -18
  117. package/src/services/kubectl-service.ts +12 -14
  118. package/src/types/api.d.ts +924 -926
  119. package/src/types/json.d.ts +3 -3
  120. package/src/utils/config-checker.ts +10 -10
  121. package/src/utils/config-loader.ts +110 -127
  122. package/src/utils/default-api-key.ts +81 -93
  123. package/src/utils/env-manager.ts +36 -40
  124. package/src/utils/error-handler.ts +83 -78
  125. package/src/utils/logger.ts +41 -41
  126. package/src/utils/markdown-renderer.ts +11 -11
  127. package/src/utils/opencode-validator.ts +51 -56
  128. package/src/utils/token-manager.ts +84 -64
  129. package/templates/agents/app.md +1 -0
  130. package/templates/agents/backend.md +1 -0
  131. package/templates/agents/devops.md +2 -0
  132. package/templates/agents/frontend.md +1 -0
  133. package/templates/agents/fullstack.md +1 -0
  134. package/templates/agents/quality.md +45 -40
  135. package/templates/agents/security.md +1 -0
  136. package/tests/commands/chat.test.ts +60 -70
  137. package/tests/commands/code.test.ts +330 -376
  138. package/tests/utils/config-loader.test.ts +260 -260
  139. package/tests/utils/env-manager.test.ts +127 -134
  140. package/tests/utils/opencode-validator.test.ts +58 -63
  141. package/tsconfig.json +2 -2
  142. package/vitest.config.ts +3 -3
  143. package/AGENTS.md +0 -374
  144. package/TODO.md +0 -19
@@ -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,239 +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',
43
- SETUP: 'setup',
39
+ INIT: "init",
40
+ RUN: "run",
41
+ UPDATE: "update",
42
+ SERVE: "serve",
43
+ SETUP: "setup",
44
44
  },
45
45
 
46
46
  // API Keys commands
47
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',
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
55
  },
56
56
 
57
57
  // Clusters commands
58
58
  CLUSTERS: {
59
- LIST: 'list',
60
- DESCRIBE: 'describe',
61
- GET_USAGE: 'get-usage',
59
+ LIST: "list",
60
+ DESCRIBE: "describe",
61
+ GET_USAGE: "get-usage",
62
62
  },
63
63
 
64
64
  // Apps commands
65
65
  APPS: {
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',
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",
72
72
  },
73
73
 
74
74
  // Models commands
75
75
  MODELS: {
76
- LIST: 'list',
77
- DESCRIBE: 'describe',
76
+ LIST: "list",
77
+ DESCRIBE: "describe",
78
78
  },
79
79
 
80
80
  // Helm commands
81
81
  HELM: {
82
- ADD_REPO: 'add-repo',
83
- INSTALL: 'install',
82
+ ADD_REPO: "add-repo",
83
+ INSTALL: "install",
84
84
  },
85
85
 
86
86
  // Kubectl commands
87
87
  KUBECTL: {
88
- CREATE_NAMESPACE: 'create-namespace',
89
- APPLY: 'apply',
90
- GET: 'get',
88
+ CREATE_NAMESPACE: "create-namespace",
89
+ APPLY: "apply",
90
+ GET: "get",
91
91
  },
92
92
 
93
93
  // Flux commands
94
94
  FLUX: {
95
- INSTALL: 'install',
96
- BOOTSTRAP: 'bootstrap',
95
+ INSTALL: "install",
96
+ BOOTSTRAP: "bootstrap",
97
97
  },
98
98
 
99
99
  // Users commands
100
100
  USERS: {
101
- LIST: 'list',
102
- DESCRIBE: 'describe',
103
- UPDATE: 'update',
104
- INVITE: 'invite',
101
+ LIST: "list",
102
+ DESCRIBE: "describe",
103
+ UPDATE: "update",
104
+ INVITE: "invite",
105
105
  },
106
106
 
107
107
  // Billing commands
108
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',
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
116
  },
117
- }
117
+ };
118
118
 
119
119
  // Command descriptions
120
120
  export const COMMAND_DESCRIPTIONS = {
121
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',
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",
128
126
 
129
127
  // 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',
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",
139
133
  [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.DESCRIBE}`]:
140
- 'Get usage statistics for an API key',
134
+ "Get usage statistics for an API key",
141
135
  [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.SET_DEFAULT}`]:
142
- 'Set an API key as the default for chat commands',
136
+ "Set an API key as the default for chat commands",
143
137
  [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.GET_DEFAULT}`]:
144
- 'Show the current default API key',
138
+ "Show the current default API key",
145
139
 
146
140
  // Clusters group
147
- [COMMAND_GROUPS.CLUSTERS]: 'Manage Kubernetes clusters',
148
- [`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.LIST}`]:
149
- 'List all clusters',
141
+ [COMMAND_GROUPS.CLUSTERS]: "Manage Kubernetes clusters",
142
+ [`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.LIST}`]: "List all clusters",
150
143
  [`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.DESCRIBE}`]:
151
- 'Get detailed information about a cluster',
144
+ "Get detailed information about a cluster",
152
145
  [`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.GET_USAGE}`]:
153
- 'Get resource usage for a cluster',
146
+ "Get resource usage for a cluster",
154
147
 
155
148
  // Apps group
156
- [COMMAND_GROUPS.APPS]: 'Manage applications',
149
+ [COMMAND_GROUPS.APPS]: "Manage applications",
157
150
  [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.LIST_TEMPLATES}`]:
158
- 'List available application templates',
151
+ "List available application templates",
159
152
  [`${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',
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",
167
157
  [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.DESCRIBE_INSTALLATION}`]:
168
- 'Get detailed information about an installed application',
158
+ "Get detailed information about an installed application",
169
159
 
170
160
  // Models group
171
- [COMMAND_GROUPS.MODELS]: 'Manage AI models',
172
- [`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.LIST}`]:
173
- 'List available AI models',
161
+ [COMMAND_GROUPS.MODELS]: "Manage AI models",
162
+ [`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.LIST}`]: "List available AI models",
174
163
  [`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.DESCRIBE}`]:
175
- 'Get detailed information about an AI model',
164
+ "Get detailed information about an AI model",
176
165
 
177
166
  // 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',
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",
183
170
 
184
171
  // Kubectl group
185
- [COMMAND_GROUPS.KUBECTL]: 'Manage Kubernetes resources',
172
+ [COMMAND_GROUPS.KUBECTL]: "Manage Kubernetes resources",
186
173
  [`${COMMAND_GROUPS.KUBECTL} ${SUBCOMMANDS.KUBECTL.CREATE_NAMESPACE}`]:
187
- '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',
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",
192
177
 
193
178
  // 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',
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",
197
182
 
198
183
  // Users group
199
- [COMMAND_GROUPS.USERS]: 'Manage users',
200
- [`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.LIST}`]:
201
- '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",
202
186
  [`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.DESCRIBE}`]:
203
- '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',
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",
208
190
 
209
191
  // Billing group
210
- [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',
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",
215
195
  [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.DESCRIBE_INVOICE}`]:
216
- 'Get detailed information about an invoice',
196
+ "Get detailed information about an invoice",
217
197
  [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.LIST_PAYMENT_METHODS}`]:
218
- 'List all payment methods',
198
+ "List all payment methods",
219
199
  [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.ADD_PAYMENT_METHOD}`]:
220
- 'Add a new payment method',
200
+ "Add a new payment method",
221
201
  [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.REMOVE_PAYMENT_METHOD}`]:
222
- 'Remove a payment method',
202
+ "Remove a payment method",
223
203
  [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.UPDATE_SUBSCRIPTION}`]:
224
- 'Update subscription plan',
204
+ "Update subscription plan",
225
205
 
226
206
  // Chat group
227
- [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',
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",
232
210
 
233
211
  // Code group
234
- [COMMAND_GROUPS.CODE]: 'AI-powered coding assistant with OpenCode',
212
+ [COMMAND_GROUPS.CODE]: "AI-powered coding assistant with OpenCode",
235
213
  [`${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',
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",
241
218
  [`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.UPDATE}`]:
242
- 'Update OpenCode and agents to latest versions',
243
- }
219
+ "Update OpenCode and agents to latest versions",
220
+ };