berget 1.4.0 → 2.0.0
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.
- package/.env.example +5 -0
- package/AGENTS.md +184 -0
- package/TODO.md +2 -0
- package/blog-post.md +176 -0
- package/dist/index.js +11 -8
- package/dist/package.json +7 -2
- package/dist/src/commands/api-keys.js +4 -2
- package/dist/src/commands/chat.js +21 -11
- package/dist/src/commands/code.js +1424 -0
- package/dist/src/commands/index.js +2 -0
- package/dist/src/constants/command-structure.js +12 -0
- package/dist/src/schemas/opencode-schema.json +1121 -0
- package/dist/src/services/cluster-service.js +1 -1
- package/dist/src/utils/default-api-key.js +2 -2
- package/dist/src/utils/env-manager.js +86 -0
- package/dist/src/utils/error-handler.js +10 -3
- package/dist/src/utils/markdown-renderer.js +4 -4
- package/dist/src/utils/opencode-validator.js +122 -0
- package/dist/src/utils/token-manager.js +2 -2
- package/dist/tests/commands/chat.test.js +20 -18
- package/dist/tests/commands/code.test.js +414 -0
- package/dist/tests/utils/env-manager.test.js +148 -0
- package/dist/tests/utils/opencode-validator.test.js +103 -0
- package/index.ts +67 -32
- package/opencode.json +182 -0
- package/package.json +7 -2
- package/src/client.ts +20 -20
- package/src/commands/api-keys.ts +93 -60
- package/src/commands/auth.ts +4 -2
- package/src/commands/billing.ts +6 -3
- package/src/commands/chat.ts +149 -107
- package/src/commands/clusters.ts +2 -2
- package/src/commands/code.ts +1696 -0
- package/src/commands/index.ts +2 -0
- package/src/commands/models.ts +3 -3
- package/src/commands/users.ts +2 -2
- package/src/constants/command-structure.ts +112 -58
- package/src/schemas/opencode-schema.json +991 -0
- package/src/services/api-key-service.ts +1 -1
- package/src/services/auth-service.ts +27 -25
- package/src/services/chat-service.ts +26 -23
- package/src/services/cluster-service.ts +5 -5
- package/src/services/collaborator-service.ts +3 -3
- package/src/services/flux-service.ts +2 -2
- package/src/services/helm-service.ts +2 -2
- package/src/services/kubectl-service.ts +3 -6
- package/src/types/api.d.ts +1032 -1010
- package/src/types/json.d.ts +3 -3
- package/src/utils/default-api-key.ts +54 -42
- package/src/utils/env-manager.ts +98 -0
- package/src/utils/error-handler.ts +24 -15
- package/src/utils/logger.ts +12 -12
- package/src/utils/markdown-renderer.ts +18 -18
- package/src/utils/opencode-validator.ts +134 -0
- package/src/utils/token-manager.ts +35 -23
- package/tests/commands/chat.test.ts +43 -31
- package/tests/commands/code.test.ts +505 -0
- package/tests/utils/env-manager.test.ts +199 -0
- package/tests/utils/opencode-validator.test.ts +118 -0
- package/tsconfig.json +8 -8
- package/-27b-it +0 -0
- package/examples/README.md +0 -95
- package/examples/ai-review.sh +0 -30
- package/examples/install-global-security-hook.sh +0 -170
- package/examples/security-check.sh +0 -102
- package/examples/smart-commit.sh +0 -26
package/src/commands/index.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { registerModelCommands } from './models'
|
|
|
7
7
|
import { registerUserCommands } from './users'
|
|
8
8
|
import { registerChatCommands } from './chat'
|
|
9
9
|
import { registerAutocompleteCommands } from './autocomplete'
|
|
10
|
+
import { registerCodeCommands } from './code'
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Register all command groups with the program
|
|
@@ -20,4 +21,5 @@ export function registerCommands(program: Command): void {
|
|
|
20
21
|
registerUserCommands(program)
|
|
21
22
|
registerChatCommands(program)
|
|
22
23
|
registerAutocompleteCommands(program)
|
|
24
|
+
registerCodeCommands(program)
|
|
23
25
|
}
|
package/src/commands/models.ts
CHANGED
|
@@ -36,7 +36,7 @@ export function registerModelCommands(program: Command): void {
|
|
|
36
36
|
|
|
37
37
|
console.log('Available Models:')
|
|
38
38
|
console.log(
|
|
39
|
-
'ID OWNED BY CAPABILITIES'
|
|
39
|
+
'ID OWNED BY CAPABILITIES',
|
|
40
40
|
)
|
|
41
41
|
// Ensure response has the expected structure
|
|
42
42
|
const modelData = response as { data?: any[] }
|
|
@@ -50,8 +50,8 @@ export function registerModelCommands(program: Command): void {
|
|
|
50
50
|
|
|
51
51
|
console.log(
|
|
52
52
|
`${model.root.padEnd(50)} ${model.owned_by.padEnd(
|
|
53
|
-
24
|
|
54
|
-
)} ${capabilities.join(', ')}
|
|
53
|
+
24,
|
|
54
|
+
)} ${capabilities.join(', ')}`,
|
|
55
55
|
)
|
|
56
56
|
})
|
|
57
57
|
}
|
package/src/commands/users.ts
CHANGED
|
@@ -23,11 +23,11 @@ export function registerUserCommands(program: Command): void {
|
|
|
23
23
|
|
|
24
24
|
console.log('Team Members:')
|
|
25
25
|
console.log(
|
|
26
|
-
'NAME EMAIL ROLE'
|
|
26
|
+
'NAME EMAIL ROLE',
|
|
27
27
|
)
|
|
28
28
|
data.forEach((user: any) => {
|
|
29
29
|
console.log(
|
|
30
|
-
`${user.name.padEnd(24)} ${user.email.padEnd(30)} ${user.role}
|
|
30
|
+
`${user.name.padEnd(24)} ${user.email.padEnd(30)} ${user.role}`,
|
|
31
31
|
)
|
|
32
32
|
})
|
|
33
33
|
} catch (error) {
|
|
@@ -16,6 +16,7 @@ export const COMMAND_GROUPS = {
|
|
|
16
16
|
USERS: 'users',
|
|
17
17
|
BILLING: 'billing',
|
|
18
18
|
CHAT: 'chat',
|
|
19
|
+
CODE: 'code',
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
// Subcommands for each group
|
|
@@ -26,13 +27,20 @@ export const SUBCOMMANDS = {
|
|
|
26
27
|
LOGOUT: 'logout',
|
|
27
28
|
WHOAMI: 'whoami',
|
|
28
29
|
},
|
|
29
|
-
|
|
30
|
+
|
|
30
31
|
// Chat commands
|
|
31
32
|
CHAT: {
|
|
32
33
|
RUN: 'run',
|
|
33
34
|
LIST: 'list',
|
|
34
35
|
},
|
|
35
|
-
|
|
36
|
+
|
|
37
|
+
// Code commands
|
|
38
|
+
CODE: {
|
|
39
|
+
INIT: 'init',
|
|
40
|
+
RUN: 'run',
|
|
41
|
+
UPDATE: 'update',
|
|
42
|
+
},
|
|
43
|
+
|
|
36
44
|
// API Keys commands
|
|
37
45
|
API_KEYS: {
|
|
38
46
|
LIST: 'list',
|
|
@@ -43,14 +51,14 @@ export const SUBCOMMANDS = {
|
|
|
43
51
|
SET_DEFAULT: 'set-default',
|
|
44
52
|
GET_DEFAULT: 'get-default',
|
|
45
53
|
},
|
|
46
|
-
|
|
54
|
+
|
|
47
55
|
// Clusters commands
|
|
48
56
|
CLUSTERS: {
|
|
49
57
|
LIST: 'list',
|
|
50
58
|
DESCRIBE: 'describe',
|
|
51
59
|
GET_USAGE: 'get-usage',
|
|
52
60
|
},
|
|
53
|
-
|
|
61
|
+
|
|
54
62
|
// Apps commands
|
|
55
63
|
APPS: {
|
|
56
64
|
LIST_TEMPLATES: 'list-templates',
|
|
@@ -60,32 +68,32 @@ export const SUBCOMMANDS = {
|
|
|
60
68
|
UNINSTALL: 'uninstall',
|
|
61
69
|
DESCRIBE_INSTALLATION: 'describe-installation',
|
|
62
70
|
},
|
|
63
|
-
|
|
71
|
+
|
|
64
72
|
// Models commands
|
|
65
73
|
MODELS: {
|
|
66
74
|
LIST: 'list',
|
|
67
75
|
DESCRIBE: 'describe',
|
|
68
76
|
},
|
|
69
|
-
|
|
77
|
+
|
|
70
78
|
// Helm commands
|
|
71
79
|
HELM: {
|
|
72
80
|
ADD_REPO: 'add-repo',
|
|
73
81
|
INSTALL: 'install',
|
|
74
82
|
},
|
|
75
|
-
|
|
83
|
+
|
|
76
84
|
// Kubectl commands
|
|
77
85
|
KUBECTL: {
|
|
78
86
|
CREATE_NAMESPACE: 'create-namespace',
|
|
79
87
|
APPLY: 'apply',
|
|
80
88
|
GET: 'get',
|
|
81
89
|
},
|
|
82
|
-
|
|
90
|
+
|
|
83
91
|
// Flux commands
|
|
84
92
|
FLUX: {
|
|
85
93
|
INSTALL: 'install',
|
|
86
94
|
BOOTSTRAP: 'bootstrap',
|
|
87
95
|
},
|
|
88
|
-
|
|
96
|
+
|
|
89
97
|
// Users commands
|
|
90
98
|
USERS: {
|
|
91
99
|
LIST: 'list',
|
|
@@ -93,7 +101,7 @@ export const SUBCOMMANDS = {
|
|
|
93
101
|
UPDATE: 'update',
|
|
94
102
|
INVITE: 'invite',
|
|
95
103
|
},
|
|
96
|
-
|
|
104
|
+
|
|
97
105
|
// Billing commands
|
|
98
106
|
BILLING: {
|
|
99
107
|
GET_USAGE: 'get-usage',
|
|
@@ -111,74 +119,120 @@ export const COMMAND_DESCRIPTIONS = {
|
|
|
111
119
|
// Auth group
|
|
112
120
|
[COMMAND_GROUPS.AUTH]: 'Manage authentication and authorization',
|
|
113
121
|
[`${COMMAND_GROUPS.AUTH} ${SUBCOMMANDS.AUTH.LOGIN}`]: 'Log in to Berget AI',
|
|
114
|
-
[`${COMMAND_GROUPS.AUTH} ${SUBCOMMANDS.AUTH.LOGOUT}`]:
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
[`${COMMAND_GROUPS.AUTH} ${SUBCOMMANDS.AUTH.LOGOUT}`]:
|
|
123
|
+
'Log out from Berget AI',
|
|
124
|
+
[`${COMMAND_GROUPS.AUTH} ${SUBCOMMANDS.AUTH.WHOAMI}`]:
|
|
125
|
+
'Display current user information',
|
|
126
|
+
|
|
117
127
|
// API Keys group
|
|
118
128
|
[COMMAND_GROUPS.API_KEYS]: 'Manage API keys',
|
|
119
|
-
[`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.LIST}`]:
|
|
120
|
-
|
|
121
|
-
[`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.
|
|
122
|
-
|
|
123
|
-
[`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.
|
|
124
|
-
|
|
125
|
-
[`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.
|
|
126
|
-
|
|
129
|
+
[`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.LIST}`]:
|
|
130
|
+
'List all API keys',
|
|
131
|
+
[`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.CREATE}`]:
|
|
132
|
+
'Create a new API key',
|
|
133
|
+
[`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.DELETE}`]:
|
|
134
|
+
'Delete an API key',
|
|
135
|
+
[`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.ROTATE}`]:
|
|
136
|
+
'Rotate an API key',
|
|
137
|
+
[`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.DESCRIBE}`]:
|
|
138
|
+
'Get usage statistics for an API key',
|
|
139
|
+
[`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.SET_DEFAULT}`]:
|
|
140
|
+
'Set an API key as the default for chat commands',
|
|
141
|
+
[`${COMMAND_GROUPS.API_KEYS} ${SUBCOMMANDS.API_KEYS.GET_DEFAULT}`]:
|
|
142
|
+
'Show the current default API key',
|
|
143
|
+
|
|
127
144
|
// Clusters group
|
|
128
145
|
[COMMAND_GROUPS.CLUSTERS]: 'Manage Kubernetes clusters',
|
|
129
|
-
[`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.LIST}`]:
|
|
130
|
-
|
|
131
|
-
[`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.
|
|
132
|
-
|
|
146
|
+
[`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.LIST}`]:
|
|
147
|
+
'List all clusters',
|
|
148
|
+
[`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.DESCRIBE}`]:
|
|
149
|
+
'Get detailed information about a cluster',
|
|
150
|
+
[`${COMMAND_GROUPS.CLUSTERS} ${SUBCOMMANDS.CLUSTERS.GET_USAGE}`]:
|
|
151
|
+
'Get resource usage for a cluster',
|
|
152
|
+
|
|
133
153
|
// Apps group
|
|
134
154
|
[COMMAND_GROUPS.APPS]: 'Manage applications',
|
|
135
|
-
[`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.LIST_TEMPLATES}`]:
|
|
136
|
-
|
|
137
|
-
[`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.
|
|
138
|
-
|
|
139
|
-
[`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.
|
|
140
|
-
|
|
141
|
-
|
|
155
|
+
[`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.LIST_TEMPLATES}`]:
|
|
156
|
+
'List available application templates',
|
|
157
|
+
[`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.DESCRIBE_TEMPLATE}`]:
|
|
158
|
+
'Get detailed information about an application template',
|
|
159
|
+
[`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.LIST_INSTALLATIONS}`]:
|
|
160
|
+
'List installed applications',
|
|
161
|
+
[`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.INSTALL}`]:
|
|
162
|
+
'Install an application',
|
|
163
|
+
[`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.UNINSTALL}`]:
|
|
164
|
+
'Uninstall an application',
|
|
165
|
+
[`${COMMAND_GROUPS.APPS} ${SUBCOMMANDS.APPS.DESCRIBE_INSTALLATION}`]:
|
|
166
|
+
'Get detailed information about an installed application',
|
|
167
|
+
|
|
142
168
|
// Models group
|
|
143
169
|
[COMMAND_GROUPS.MODELS]: 'Manage AI models',
|
|
144
|
-
[`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.LIST}`]:
|
|
145
|
-
|
|
146
|
-
|
|
170
|
+
[`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.LIST}`]:
|
|
171
|
+
'List available AI models',
|
|
172
|
+
[`${COMMAND_GROUPS.MODELS} ${SUBCOMMANDS.MODELS.DESCRIBE}`]:
|
|
173
|
+
'Get detailed information about an AI model',
|
|
174
|
+
|
|
147
175
|
// Helm group
|
|
148
176
|
[COMMAND_GROUPS.HELM]: 'Manage Helm charts',
|
|
149
|
-
[`${COMMAND_GROUPS.HELM} ${SUBCOMMANDS.HELM.ADD_REPO}`]:
|
|
150
|
-
|
|
151
|
-
|
|
177
|
+
[`${COMMAND_GROUPS.HELM} ${SUBCOMMANDS.HELM.ADD_REPO}`]:
|
|
178
|
+
'Add a Helm repository',
|
|
179
|
+
[`${COMMAND_GROUPS.HELM} ${SUBCOMMANDS.HELM.INSTALL}`]:
|
|
180
|
+
'Install a Helm chart',
|
|
181
|
+
|
|
152
182
|
// Kubectl group
|
|
153
183
|
[COMMAND_GROUPS.KUBECTL]: 'Manage Kubernetes resources',
|
|
154
|
-
[`${COMMAND_GROUPS.KUBECTL} ${SUBCOMMANDS.KUBECTL.CREATE_NAMESPACE}`]:
|
|
155
|
-
|
|
156
|
-
[`${COMMAND_GROUPS.KUBECTL} ${SUBCOMMANDS.KUBECTL.
|
|
157
|
-
|
|
184
|
+
[`${COMMAND_GROUPS.KUBECTL} ${SUBCOMMANDS.KUBECTL.CREATE_NAMESPACE}`]:
|
|
185
|
+
'Create a Kubernetes namespace',
|
|
186
|
+
[`${COMMAND_GROUPS.KUBECTL} ${SUBCOMMANDS.KUBECTL.APPLY}`]:
|
|
187
|
+
'Apply a Kubernetes configuration',
|
|
188
|
+
[`${COMMAND_GROUPS.KUBECTL} ${SUBCOMMANDS.KUBECTL.GET}`]:
|
|
189
|
+
'Get Kubernetes resources',
|
|
190
|
+
|
|
158
191
|
// Flux group
|
|
159
192
|
[COMMAND_GROUPS.FLUX]: 'Manage Flux CD',
|
|
160
193
|
[`${COMMAND_GROUPS.FLUX} ${SUBCOMMANDS.FLUX.INSTALL}`]: 'Install Flux CD',
|
|
161
194
|
[`${COMMAND_GROUPS.FLUX} ${SUBCOMMANDS.FLUX.BOOTSTRAP}`]: 'Bootstrap Flux CD',
|
|
162
|
-
|
|
195
|
+
|
|
163
196
|
// Users group
|
|
164
197
|
[COMMAND_GROUPS.USERS]: 'Manage users',
|
|
165
|
-
[`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.LIST}`]:
|
|
166
|
-
|
|
167
|
-
[`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.
|
|
168
|
-
|
|
169
|
-
|
|
198
|
+
[`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.LIST}`]:
|
|
199
|
+
'List all users in your organization',
|
|
200
|
+
[`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.DESCRIBE}`]:
|
|
201
|
+
'Get detailed information about a user',
|
|
202
|
+
[`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.UPDATE}`]:
|
|
203
|
+
'Update user information',
|
|
204
|
+
[`${COMMAND_GROUPS.USERS} ${SUBCOMMANDS.USERS.INVITE}`]:
|
|
205
|
+
'Invite a new user to your organization',
|
|
206
|
+
|
|
170
207
|
// Billing group
|
|
171
208
|
[COMMAND_GROUPS.BILLING]: 'Manage billing and usage',
|
|
172
|
-
[`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.GET_USAGE}`]:
|
|
173
|
-
|
|
174
|
-
[`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.
|
|
175
|
-
|
|
176
|
-
[`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.
|
|
177
|
-
|
|
178
|
-
[`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.
|
|
179
|
-
|
|
209
|
+
[`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.GET_USAGE}`]:
|
|
210
|
+
'Get current usage metrics',
|
|
211
|
+
[`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.LIST_INVOICES}`]:
|
|
212
|
+
'List all invoices',
|
|
213
|
+
[`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.DESCRIBE_INVOICE}`]:
|
|
214
|
+
'Get detailed information about an invoice',
|
|
215
|
+
[`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.LIST_PAYMENT_METHODS}`]:
|
|
216
|
+
'List all payment methods',
|
|
217
|
+
[`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.ADD_PAYMENT_METHOD}`]:
|
|
218
|
+
'Add a new payment method',
|
|
219
|
+
[`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.REMOVE_PAYMENT_METHOD}`]:
|
|
220
|
+
'Remove a payment method',
|
|
221
|
+
[`${COMMAND_GROUPS.BILLING} ${SUBCOMMANDS.BILLING.UPDATE_SUBSCRIPTION}`]:
|
|
222
|
+
'Update subscription plan',
|
|
223
|
+
|
|
180
224
|
// Chat group
|
|
181
225
|
[COMMAND_GROUPS.CHAT]: 'Interact with AI chat models',
|
|
182
|
-
[`${COMMAND_GROUPS.CHAT} ${SUBCOMMANDS.CHAT.RUN}`]:
|
|
183
|
-
|
|
226
|
+
[`${COMMAND_GROUPS.CHAT} ${SUBCOMMANDS.CHAT.RUN}`]:
|
|
227
|
+
'Run a chat session with a specified model',
|
|
228
|
+
[`${COMMAND_GROUPS.CHAT} ${SUBCOMMANDS.CHAT.LIST}`]:
|
|
229
|
+
'List available chat models',
|
|
230
|
+
|
|
231
|
+
// Code group
|
|
232
|
+
[COMMAND_GROUPS.CODE]: 'AI-powered coding assistant with OpenCode',
|
|
233
|
+
[`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.INIT}`]:
|
|
234
|
+
'Initialize project for AI coding assistant',
|
|
235
|
+
[`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.RUN}`]: 'Run AI coding assistant',
|
|
236
|
+
[`${COMMAND_GROUPS.CODE} ${SUBCOMMANDS.CODE.UPDATE}`]:
|
|
237
|
+
'Update OpenCode and agents to latest versions',
|
|
184
238
|
}
|