berget 2.2.7 → 2.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/.github/workflows/publish.yml +6 -6
  2. package/.github/workflows/test.yml +1 -1
  3. package/.prettierrc +5 -3
  4. package/dist/index.js +24 -25
  5. package/dist/package.json +5 -3
  6. package/dist/src/agents/app.js +8 -8
  7. package/dist/src/agents/backend.js +3 -3
  8. package/dist/src/agents/devops.js +8 -8
  9. package/dist/src/agents/frontend.js +3 -3
  10. package/dist/src/agents/fullstack.js +3 -3
  11. package/dist/src/agents/index.js +18 -18
  12. package/dist/src/agents/quality.js +8 -8
  13. package/dist/src/agents/security.js +8 -8
  14. package/dist/src/client.js +115 -127
  15. package/dist/src/commands/api-keys.js +195 -202
  16. package/dist/src/commands/auth.js +16 -25
  17. package/dist/src/commands/autocomplete.js +8 -8
  18. package/dist/src/commands/billing.js +10 -19
  19. package/dist/src/commands/chat.js +139 -170
  20. package/dist/src/commands/clusters.js +21 -30
  21. package/dist/src/commands/code/__tests__/auth-sync.test.js +189 -186
  22. package/dist/src/commands/code/__tests__/fake-api-key-service.js +3 -13
  23. package/dist/src/commands/code/__tests__/fake-auth-service.js +21 -29
  24. package/dist/src/commands/code/__tests__/fake-command-runner.js +22 -33
  25. package/dist/src/commands/code/__tests__/fake-file-store.js +19 -41
  26. package/dist/src/commands/code/__tests__/fake-prompter.js +81 -97
  27. package/dist/src/commands/code/__tests__/setup-flow.test.js +295 -295
  28. package/dist/src/commands/code/adapters/clack-prompter.js +15 -32
  29. package/dist/src/commands/code/adapters/fs-file-store.js +25 -44
  30. package/dist/src/commands/code/adapters/spawn-command-runner.js +27 -41
  31. package/dist/src/commands/code/auth-sync.js +215 -228
  32. package/dist/src/commands/code/errors.js +15 -12
  33. package/dist/src/commands/code/setup.js +390 -425
  34. package/dist/src/commands/code.js +279 -294
  35. package/dist/src/commands/index.js +5 -5
  36. package/dist/src/commands/models.js +16 -25
  37. package/dist/src/commands/users.js +9 -18
  38. package/dist/src/constants/command-structure.js +138 -138
  39. package/dist/src/services/api-key-service.js +132 -152
  40. package/dist/src/services/auth-service.js +81 -95
  41. package/dist/src/services/browser-auth.js +121 -131
  42. package/dist/src/services/chat-service.js +369 -386
  43. package/dist/src/services/cluster-service.js +47 -62
  44. package/dist/src/services/collaborator-service.js +9 -21
  45. package/dist/src/services/flux-service.js +13 -25
  46. package/dist/src/services/helm-service.js +9 -21
  47. package/dist/src/services/kubectl-service.js +15 -29
  48. package/dist/src/utils/config-checker.js +7 -7
  49. package/dist/src/utils/config-loader.js +109 -109
  50. package/dist/src/utils/default-api-key.js +129 -139
  51. package/dist/src/utils/env-manager.js +55 -66
  52. package/dist/src/utils/error-handler.js +62 -62
  53. package/dist/src/utils/logger.js +74 -67
  54. package/dist/src/utils/markdown-renderer.js +28 -28
  55. package/dist/src/utils/opencode-validator.js +67 -69
  56. package/dist/src/utils/token-manager.js +67 -65
  57. package/dist/tests/commands/chat.test.js +30 -39
  58. package/dist/tests/commands/code.test.js +186 -195
  59. package/dist/tests/utils/config-loader.test.js +107 -107
  60. package/dist/tests/utils/env-manager.test.js +81 -90
  61. package/dist/tests/utils/opencode-validator.test.js +42 -41
  62. package/dist/vitest.config.js +1 -1
  63. package/eslint.config.mjs +50 -30
  64. package/index.ts +30 -31
  65. package/package.json +5 -3
  66. package/src/agents/app.ts +9 -9
  67. package/src/agents/backend.ts +4 -4
  68. package/src/agents/devops.ts +9 -9
  69. package/src/agents/frontend.ts +4 -4
  70. package/src/agents/fullstack.ts +4 -4
  71. package/src/agents/index.ts +27 -25
  72. package/src/agents/quality.ts +9 -9
  73. package/src/agents/security.ts +9 -9
  74. package/src/agents/types.ts +10 -10
  75. package/src/client.ts +85 -77
  76. package/src/commands/api-keys.ts +190 -185
  77. package/src/commands/auth.ts +15 -14
  78. package/src/commands/autocomplete.ts +10 -10
  79. package/src/commands/billing.ts +13 -12
  80. package/src/commands/chat.ts +145 -142
  81. package/src/commands/clusters.ts +20 -19
  82. package/src/commands/code/__tests__/auth-sync.test.ts +176 -175
  83. package/src/commands/code/__tests__/fake-api-key-service.ts +2 -2
  84. package/src/commands/code/__tests__/fake-auth-service.ts +18 -18
  85. package/src/commands/code/__tests__/fake-command-runner.ts +28 -22
  86. package/src/commands/code/__tests__/fake-file-store.ts +15 -15
  87. package/src/commands/code/__tests__/fake-prompter.ts +86 -85
  88. package/src/commands/code/__tests__/setup-flow.test.ts +253 -251
  89. package/src/commands/code/adapters/clack-prompter.ts +32 -30
  90. package/src/commands/code/adapters/fs-file-store.ts +18 -17
  91. package/src/commands/code/adapters/spawn-command-runner.ts +20 -15
  92. package/src/commands/code/auth-sync.ts +210 -210
  93. package/src/commands/code/errors.ts +11 -11
  94. package/src/commands/code/ports/auth-services.ts +7 -7
  95. package/src/commands/code/ports/command-runner.ts +2 -2
  96. package/src/commands/code/ports/file-store.ts +3 -3
  97. package/src/commands/code/ports/prompter.ts +13 -13
  98. package/src/commands/code/setup.ts +408 -406
  99. package/src/commands/code.ts +288 -287
  100. package/src/commands/index.ts +11 -10
  101. package/src/commands/models.ts +19 -18
  102. package/src/commands/users.ts +11 -10
  103. package/src/constants/command-structure.ts +159 -159
  104. package/src/services/api-key-service.ts +85 -85
  105. package/src/services/auth-service.ts +55 -54
  106. package/src/services/browser-auth.ts +62 -62
  107. package/src/services/chat-service.ts +169 -170
  108. package/src/services/cluster-service.ts +28 -28
  109. package/src/services/collaborator-service.ts +6 -6
  110. package/src/services/flux-service.ts +17 -17
  111. package/src/services/helm-service.ts +11 -11
  112. package/src/services/kubectl-service.ts +12 -12
  113. package/src/types/api.d.ts +1933 -1933
  114. package/src/types/json.d.ts +1 -1
  115. package/src/utils/config-checker.ts +6 -6
  116. package/src/utils/config-loader.ts +130 -129
  117. package/src/utils/default-api-key.ts +81 -80
  118. package/src/utils/env-manager.ts +37 -37
  119. package/src/utils/error-handler.ts +64 -64
  120. package/src/utils/logger.ts +72 -66
  121. package/src/utils/markdown-renderer.ts +28 -28
  122. package/src/utils/opencode-validator.ts +72 -71
  123. package/src/utils/token-manager.ts +69 -68
  124. package/tests/commands/chat.test.ts +32 -31
  125. package/tests/commands/code.test.ts +182 -181
  126. package/tests/utils/config-loader.test.ts +111 -110
  127. package/tests/utils/env-manager.test.ts +83 -79
  128. package/tests/utils/opencode-validator.test.ts +43 -42
  129. package/tsconfig.json +2 -1
  130. package/vitest.config.ts +2 -2
@@ -1,13 +1,14 @@
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
@@ -1,58 +1,59 @@
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.command(COMMAND_GROUPS.MODELS).description("Manage AI models");
11
+ const models = program.command(COMMAND_GROUPS.MODELS).description('Manage AI models');
11
12
 
12
13
  models
13
14
  .command(SUBCOMMANDS.MODELS.LIST)
14
- .description("List available AI models")
15
- .option("--id <modelId>", "Get details for a specific model")
16
- .action(async options => {
15
+ .description('List available AI models')
16
+ .option('--id <modelId>', 'Get details for a specific model')
17
+ .action(async (options) => {
17
18
  try {
18
19
  const client = createAuthenticatedClient();
19
20
  let response;
20
21
 
21
22
  if (options.id) {
22
- const { data, error } = await client.GET("/v1/models/{modelId}", {
23
+ const { data, error } = await client.GET('/v1/models/{modelId}', {
23
24
  params: { path: { modelId: options.id } },
24
25
  });
25
26
  if (error) throw new Error(JSON.stringify(error));
26
27
  response = data;
27
28
 
28
- console.log("Model Details:");
29
+ console.log('Model Details:');
29
30
  console.log(JSON.stringify(response, null, 2));
30
31
  } else {
31
- const { data, error } = await client.GET("/v1/models");
32
+ const { data, error } = await client.GET('/v1/models');
32
33
  if (error) throw new Error(JSON.stringify(error));
33
34
  response = data;
34
35
 
35
- console.log("Available Models:");
36
+ console.log('Available Models:');
36
37
  console.log(
37
- "ID OWNED BY CAPABILITIES"
38
+ 'ID OWNED BY CAPABILITIES',
38
39
  );
39
40
  // Ensure response has the expected structure
40
41
  const modelData = response as { data?: any[] };
41
42
  if (modelData.data) {
42
43
  modelData.data.forEach((model: any) => {
43
44
  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");
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');
47
48
 
48
49
  console.log(
49
- `${model.root.padEnd(50)} ${model.owned_by.padEnd(24)} ${capabilities.join(", ")}`
50
+ `${model.root.padEnd(50)} ${model.owned_by.padEnd(24)} ${capabilities.join(', ')}`,
50
51
  );
51
52
  });
52
53
  }
53
54
  }
54
55
  } catch (error) {
55
- handleError("Failed to get models", error);
56
+ handleError('Failed to get models', error);
56
57
  }
57
58
  });
58
59
  }
@@ -1,30 +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";
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 user commands
8
9
  */
9
10
  export function registerUserCommands(program: Command): void {
10
- const users = program.command(COMMAND_GROUPS.USERS).description("Manage users");
11
+ const users = program.command(COMMAND_GROUPS.USERS).description('Manage users');
11
12
 
12
13
  users
13
14
  .command(SUBCOMMANDS.USERS.LIST)
14
- .description("List team members")
15
+ .description('List team members')
15
16
  .action(async () => {
16
17
  try {
17
18
  const client = createAuthenticatedClient();
18
- const { data, error } = await client.GET("/v1/users");
19
+ const { data, error } = await client.GET('/v1/users');
19
20
  if (error) throw new Error(JSON.stringify(error));
20
21
 
21
- console.log("Team Members:");
22
- console.log("NAME EMAIL ROLE");
22
+ console.log('Team Members:');
23
+ console.log('NAME EMAIL ROLE');
23
24
  data.forEach((user: any) => {
24
25
  console.log(`${user.name.padEnd(24)} ${user.email.padEnd(30)} ${user.role}`);
25
26
  });
26
27
  } catch (error) {
27
- handleError("Failed to list team members", error);
28
+ handleError('Failed to list team members', error);
28
29
  }
29
30
  });
30
31
  }
@@ -5,216 +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",
8
+ API_KEYS: 'api-keys',
9
+ APPS: 'apps',
10
+ AUTH: 'auth',
11
+ BILLING: 'billing',
12
+ CHAT: 'chat',
13
+ CLUSTERS: 'clusters',
14
+ CODE: 'code',
15
+ FLUX: 'flux',
16
+ HELM: 'helm',
17
+ KUBECTL: 'kubectl',
18
+ MODELS: 'models',
19
+ USERS: 'users',
20
20
  };
21
21
 
22
22
  // Subcommands for each group
23
23
  export const SUBCOMMANDS = {
24
- // Auth commands
25
- AUTH: {
26
- LOGIN: "login",
27
- LOGOUT: "logout",
28
- WHOAMI: "whoami",
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',
29
33
  },
30
34
 
31
- // Chat commands
32
- CHAT: {
33
- RUN: "run",
34
- LIST: "list",
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',
35
43
  },
36
44
 
37
- // Code commands
38
- CODE: {
39
- INIT: "init",
40
- RUN: "run",
41
- UPDATE: "update",
42
- SERVE: "serve",
43
- SETUP: "setup",
45
+ // Auth commands
46
+ AUTH: {
47
+ LOGIN: 'login',
48
+ LOGOUT: 'logout',
49
+ WHOAMI: 'whoami',
44
50
  },
45
51
 
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",
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
+
63
+ // Chat commands
64
+ CHAT: {
65
+ LIST: 'list',
66
+ RUN: 'run',
55
67
  },
56
68
 
57
69
  // Clusters commands
58
70
  CLUSTERS: {
59
- LIST: "list",
60
- DESCRIBE: "describe",
61
- GET_USAGE: "get-usage",
71
+ DESCRIBE: 'describe',
72
+ GET_USAGE: 'get-usage',
73
+ LIST: 'list',
62
74
  },
63
75
 
64
- // Apps commands
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",
76
+ // Code commands
77
+ CODE: {
78
+ INIT: 'init',
79
+ RUN: 'run',
80
+ SERVE: 'serve',
81
+ SETUP: 'setup',
82
+ UPDATE: 'update',
72
83
  },
73
84
 
74
- // Models commands
75
- MODELS: {
76
- LIST: "list",
77
- DESCRIBE: "describe",
85
+ // Flux commands
86
+ FLUX: {
87
+ BOOTSTRAP: 'bootstrap',
88
+ INSTALL: 'install',
78
89
  },
79
90
 
80
91
  // Helm commands
81
92
  HELM: {
82
- ADD_REPO: "add-repo",
83
- INSTALL: "install",
93
+ ADD_REPO: 'add-repo',
94
+ INSTALL: 'install',
84
95
  },
85
96
 
86
97
  // Kubectl commands
87
98
  KUBECTL: {
88
- CREATE_NAMESPACE: "create-namespace",
89
- APPLY: "apply",
90
- GET: "get",
99
+ APPLY: 'apply',
100
+ CREATE_NAMESPACE: 'create-namespace',
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
- DESCRIBE: "describe",
103
- UPDATE: "update",
104
- INVITE: "invite",
105
- },
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",
112
+ DESCRIBE: 'describe',
113
+ INVITE: 'invite',
114
+ LIST: 'list',
115
+ UPDATE: 'update',
116
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}`]: "Log out from Berget AI",
125
- [`${COMMAND_GROUPS.AUTH} ${SUBCOMMANDS.AUTH.WHOAMI}`]: "Display current user information",
126
-
127
- // API Keys group
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",
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',
133
123
  [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.DESCRIBE}`]:
134
- "Get usage statistics for an API key",
135
- [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.SET_DEFAULT}`]:
136
- "Set an API key as the default for chat commands",
124
+ 'Get usage statistics for an API key',
137
125
  [`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.GET_DEFAULT}`]:
138
- "Show the current default API key",
126
+ 'Show the current default API key',
139
127
 
140
- // Clusters group
141
- [COMMAND_GROUPS.CLUSTERS]: "Manage Kubernetes clusters",
142
- [`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.LIST}`]: "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',
143
161
  [`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.DESCRIBE}`]:
144
- "Get detailed information about a cluster",
145
- [`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.GET_USAGE}`]:
146
- "Get resource usage for a cluster",
162
+ 'Get detailed information about a cluster',
147
163
 
148
- // Apps group
149
- [COMMAND_GROUPS.APPS]: "Manage applications",
150
- [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.LIST_TEMPLATES}`]:
151
- "List available application templates",
152
- [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.DESCRIBE_TEMPLATE}`]:
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",
157
- [`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.DESCRIBE_INSTALLATION}`]:
158
- "Get detailed information about an installed application",
164
+ [`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.GET_USAGE}`]:
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',
159
168
 
160
- // Models group
161
- [COMMAND_GROUPS.MODELS]: "Manage AI models",
162
- [`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.LIST}`]: "List available AI models",
163
- [`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.DESCRIBE}`]:
164
- "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',
165
175
 
166
- // Helm group
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",
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',
170
179
 
171
- // Kubectl group
172
- [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',
173
182
  [`${COMMAND_GROUPS.KUBECTL} ${SUBCOMMANDS.KUBECTL.CREATE_NAMESPACE}`]:
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",
177
-
178
- // Flux group
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",
183
+ 'Create a Kubernetes namespace',
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',
182
187
 
183
- // Users group
184
- [COMMAND_GROUPS.USERS]: "Manage users",
185
- [`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.LIST}`]: "List all users in your organization",
188
+ [`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.LIST}`]: 'List available AI models',
186
189
  [`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.DESCRIBE}`]:
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",
190
+ 'Get detailed information about a user',
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',
190
200
 
191
201
  // Billing group
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",
195
- [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.DESCRIBE_INVOICE}`]:
196
- "Get detailed information about an invoice",
197
- [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.LIST_PAYMENT_METHODS}`]:
198
- "List all payment methods",
199
- [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.ADD_PAYMENT_METHOD}`]:
200
- "Add a new payment method",
201
- [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.REMOVE_PAYMENT_METHOD}`]:
202
- "Remove a payment method",
203
- [`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.UPDATE_SUBSCRIPTION}`]:
204
- "Update subscription plan",
205
-
202
+ [COMMAND_GROUPS.BILLING]: 'Manage billing and usage',
206
203
  // Chat group
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",
204
+ [COMMAND_GROUPS.CHAT]: 'Interact with AI chat models',
205
+ // Clusters group
206
+ [COMMAND_GROUPS.CLUSTERS]: 'Manage Kubernetes clusters',
210
207
 
211
208
  // Code group
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",
218
- [`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.UPDATE}`]:
219
- "Update OpenCode and agents to latest versions",
209
+ [COMMAND_GROUPS.CODE]: 'AI-powered coding assistant with OpenCode',
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
220
  };