@lobu/cli 3.0.1 → 3.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AA2BA,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA8EnE"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAIA,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA8EnE"}
@@ -1,19 +1,6 @@
1
- import { readFileSync } from "node:fs";
2
- import { dirname, join } from "node:path";
3
- import { fileURLToPath } from "node:url";
4
1
  import chalk from "chalk";
5
2
  import { isLoadError, loadConfig } from "../config/loader.js";
6
- const __dirname = dirname(fileURLToPath(import.meta.url));
7
- function loadSystemSkills() {
8
- try {
9
- const raw = readFileSync(join(__dirname, "..", "..", "..", "..", "config", "system-skills.json"), "utf-8");
10
- const data = JSON.parse(raw);
11
- return data.skills;
12
- }
13
- catch {
14
- return [];
15
- }
16
- }
3
+ import { loadSkillsRegistry } from "./skills/registry.js";
17
4
  export async function validateCommand(cwd) {
18
5
  const result = await loadConfig(cwd);
19
6
  if (isLoadError(result)) {
@@ -30,7 +17,7 @@ export async function validateCommand(cwd) {
30
17
  const warnings = [];
31
18
  const errors = [];
32
19
  // Validate skill IDs against system-skills.json
33
- const systemSkills = loadSystemSkills();
20
+ const systemSkills = loadSkillsRegistry();
34
21
  const skillIds = new Set(systemSkills.map((s) => s.id));
35
22
  for (const skillId of config.skills.enabled) {
36
23
  if (!skillIds.has(skillId)) {
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,561 @@
1
+ {
2
+ "skills": [
3
+ {
4
+ "id": "google-workspace",
5
+ "name": "Google Workspace",
6
+ "description": "Gmail, Calendar, Drive integration",
7
+ "integrations": [
8
+ {
9
+ "id": "google",
10
+ "label": "Google",
11
+ "authType": "oauth",
12
+ "oauth": {
13
+ "authUrl": "https://accounts.google.com/o/oauth2/v2/auth",
14
+ "tokenUrl": "https://oauth2.googleapis.com/token",
15
+ "clientId": "${env:GOOGLE_CLIENT_ID}",
16
+ "clientSecret": "${env:GOOGLE_CLIENT_SECRET}",
17
+ "incrementalAuth": true
18
+ },
19
+ "scopesConfig": {
20
+ "default": ["openid", "profile", "email"],
21
+ "available": [
22
+ "https://www.googleapis.com/auth/gmail.readonly",
23
+ "https://www.googleapis.com/auth/gmail.send",
24
+ "https://www.googleapis.com/auth/calendar.readonly",
25
+ "https://www.googleapis.com/auth/calendar.events",
26
+ "https://www.googleapis.com/auth/drive.readonly"
27
+ ]
28
+ },
29
+ "apiDomains": [
30
+ "gmail.googleapis.com",
31
+ "www.googleapis.com",
32
+ "calendar.googleapis.com"
33
+ ],
34
+ "apiBase": "https://www.googleapis.com",
35
+ "apiHints": "Calendar: /calendar/v3/calendars/primary/events; Gmail: /gmail/v1/users/me/messages, /gmail/v1/users/me/messages/send; Drive: /drive/v3/files"
36
+ }
37
+ ]
38
+ },
39
+ {
40
+ "id": "github",
41
+ "name": "GitHub",
42
+ "description": "Repos, issues, pull requests, and code access",
43
+ "integrations": [
44
+ {
45
+ "id": "github",
46
+ "label": "GitHub",
47
+ "authType": "oauth",
48
+ "oauth": {
49
+ "authUrl": "https://github.com/login/oauth/authorize",
50
+ "tokenUrl": "https://github.com/login/oauth/access_token",
51
+ "clientId": "${env:GITHUB_CLIENT_ID}",
52
+ "clientSecret": "${env:GITHUB_CLIENT_SECRET}"
53
+ },
54
+ "scopesConfig": {
55
+ "default": ["read:user", "user:email"],
56
+ "available": [
57
+ "repo",
58
+ "read:org",
59
+ "read:project",
60
+ "gist",
61
+ "notifications"
62
+ ]
63
+ },
64
+ "apiDomains": ["api.github.com", "raw.githubusercontent.com"],
65
+ "apiBase": "https://api.github.com",
66
+ "apiHints": "Repos: /repos/{owner}/{repo}; Issues: /repos/{owner}/{repo}/issues; Pulls: /repos/{owner}/{repo}/pulls; User: /user"
67
+ }
68
+ ]
69
+ },
70
+ {
71
+ "id": "microsoft-365",
72
+ "name": "Microsoft 365",
73
+ "description": "Outlook, OneDrive, and Teams integration",
74
+ "integrations": [
75
+ {
76
+ "id": "microsoft",
77
+ "label": "Microsoft",
78
+ "authType": "oauth",
79
+ "oauth": {
80
+ "authUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
81
+ "tokenUrl": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
82
+ "clientId": "${env:MICROSOFT_CLIENT_ID}",
83
+ "clientSecret": "${env:MICROSOFT_CLIENT_SECRET}"
84
+ },
85
+ "scopesConfig": {
86
+ "default": ["openid", "profile", "email", "offline_access"],
87
+ "available": [
88
+ "Mail.Read",
89
+ "Mail.Send",
90
+ "Calendars.Read",
91
+ "Calendars.ReadWrite",
92
+ "Files.Read",
93
+ "Files.ReadWrite",
94
+ "Chat.Read",
95
+ "Team.ReadBasic.All"
96
+ ]
97
+ },
98
+ "apiDomains": ["graph.microsoft.com"],
99
+ "apiBase": "https://graph.microsoft.com/v1.0",
100
+ "apiHints": "Mail: /me/messages; Calendar: /me/events; Files: /me/drive/root/children; Teams chats: /me/chats"
101
+ }
102
+ ]
103
+ },
104
+ {
105
+ "id": "notion",
106
+ "name": "Notion",
107
+ "description": "Workspace pages, databases, and content",
108
+ "integrations": [
109
+ {
110
+ "id": "notion",
111
+ "label": "Notion",
112
+ "authType": "oauth",
113
+ "oauth": {
114
+ "authUrl": "https://api.notion.com/v1/oauth/authorize",
115
+ "tokenUrl": "https://api.notion.com/v1/oauth/token",
116
+ "clientId": "${env:NOTION_CLIENT_ID}",
117
+ "clientSecret": "${env:NOTION_CLIENT_SECRET}",
118
+ "tokenEndpointAuthMethod": "client_secret_basic"
119
+ },
120
+ "apiDomains": ["api.notion.com"],
121
+ "apiBase": "https://api.notion.com/v1",
122
+ "apiHints": "Requires Notion-Version: 2022-06-28 header. Pages: /pages/{id}; Databases: /databases/{id}/query; Search: /search; Blocks: /blocks/{id}/children"
123
+ }
124
+ ]
125
+ },
126
+ {
127
+ "id": "spotify",
128
+ "name": "Spotify",
129
+ "description": "Music playback, playlists, and library management",
130
+ "integrations": [
131
+ {
132
+ "id": "spotify",
133
+ "label": "Spotify",
134
+ "authType": "oauth",
135
+ "oauth": {
136
+ "authUrl": "https://accounts.spotify.com/authorize",
137
+ "tokenUrl": "https://accounts.spotify.com/api/token",
138
+ "clientId": "${env:SPOTIFY_CLIENT_ID}",
139
+ "clientSecret": "${env:SPOTIFY_CLIENT_SECRET}",
140
+ "tokenEndpointAuthMethod": "client_secret_basic"
141
+ },
142
+ "scopesConfig": {
143
+ "default": ["user-read-private", "user-read-email"],
144
+ "available": [
145
+ "user-read-playback-state",
146
+ "user-modify-playback-state",
147
+ "user-read-currently-playing",
148
+ "playlist-read-private",
149
+ "playlist-modify-public",
150
+ "playlist-modify-private",
151
+ "user-library-read",
152
+ "user-library-modify",
153
+ "user-top-read",
154
+ "user-read-recently-played"
155
+ ]
156
+ },
157
+ "apiDomains": ["api.spotify.com"],
158
+ "apiBase": "https://api.spotify.com/v1",
159
+ "apiHints": "Player: /me/player, /me/player/currently-playing; Playlists: /me/playlists, /playlists/{id}/tracks; Library: /me/tracks, /me/albums; Search: /search?q={query}&type=track,artist,album"
160
+ }
161
+ ]
162
+ },
163
+ {
164
+ "id": "linear",
165
+ "name": "Linear",
166
+ "description": "Issue tracking and project management",
167
+ "integrations": [
168
+ {
169
+ "id": "linear",
170
+ "label": "Linear",
171
+ "authType": "oauth",
172
+ "oauth": {
173
+ "authUrl": "https://linear.app/oauth/authorize",
174
+ "tokenUrl": "https://api.linear.app/oauth/token",
175
+ "clientId": "${env:LINEAR_CLIENT_ID}",
176
+ "clientSecret": "${env:LINEAR_CLIENT_SECRET}"
177
+ },
178
+ "scopesConfig": {
179
+ "default": ["read"],
180
+ "available": ["read", "write", "issues:create", "comments:create"]
181
+ },
182
+ "apiDomains": ["api.linear.app"],
183
+ "apiBase": "https://api.linear.app",
184
+ "apiHints": "GraphQL API only. POST /graphql with query body. Example: { \"query\": \"{ issues { nodes { id title } } }\" }"
185
+ }
186
+ ]
187
+ },
188
+ {
189
+ "id": "jira",
190
+ "name": "Jira",
191
+ "description": "Atlassian Jira project and issue management",
192
+ "integrations": [
193
+ {
194
+ "id": "jira",
195
+ "label": "Atlassian",
196
+ "authType": "oauth",
197
+ "oauth": {
198
+ "authUrl": "https://auth.atlassian.com/authorize",
199
+ "tokenUrl": "https://auth.atlassian.com/oauth/token",
200
+ "clientId": "${env:ATLASSIAN_CLIENT_ID}",
201
+ "clientSecret": "${env:ATLASSIAN_CLIENT_SECRET}"
202
+ },
203
+ "scopesConfig": {
204
+ "default": ["read:me"],
205
+ "available": [
206
+ "read:jira-work",
207
+ "write:jira-work",
208
+ "read:jira-user",
209
+ "read:confluence-content.all"
210
+ ]
211
+ },
212
+ "apiDomains": ["api.atlassian.com", "auth.atlassian.com"],
213
+ "apiBase": "https://api.atlassian.com",
214
+ "apiHints": "REST v3. First get cloudId: /oauth/token/accessible-resources, then /ex/jira/{cloudId}/rest/api/3/search for issues, /ex/jira/{cloudId}/rest/api/3/issue/{key} for details"
215
+ }
216
+ ]
217
+ },
218
+ {
219
+ "id": "sentry",
220
+ "name": "Sentry",
221
+ "description": "Error tracking, performance monitoring, and issue management",
222
+ "integrations": [
223
+ {
224
+ "id": "sentry",
225
+ "label": "Sentry",
226
+ "authType": "oauth",
227
+ "oauth": {
228
+ "authUrl": "https://sentry.io/oauth/authorize/",
229
+ "tokenUrl": "https://sentry.io/oauth/token/",
230
+ "clientId": "${env:SENTRY_CLIENT_ID}",
231
+ "clientSecret": "${env:SENTRY_CLIENT_SECRET}"
232
+ },
233
+ "scopesConfig": {
234
+ "default": ["org:read", "project:read", "event:read"],
235
+ "available": [
236
+ "org:read",
237
+ "org:write",
238
+ "project:read",
239
+ "project:write",
240
+ "project:releases",
241
+ "team:read",
242
+ "team:write",
243
+ "member:read",
244
+ "event:read",
245
+ "event:write"
246
+ ]
247
+ },
248
+ "apiDomains": ["sentry.io"],
249
+ "apiBase": "https://sentry.io/api/0",
250
+ "apiHints": "Organizations: /organizations/; Projects: /organizations/{org}/projects/; Issues: /organizations/{org}/issues/"
251
+ }
252
+ ]
253
+ },
254
+ {
255
+ "id": "owletto",
256
+ "name": "Owletto Memory",
257
+ "description": "Long-term memory across conversations",
258
+ "mcpServers": [
259
+ {
260
+ "id": "owletto",
261
+ "name": "Owletto",
262
+ "url": "https://owletto.com/mcp",
263
+ "type": "sse"
264
+ }
265
+ ]
266
+ },
267
+ {
268
+ "id": "groq",
269
+ "name": "Groq",
270
+ "description": "Fast LLM inference via Groq",
271
+ "providers": [
272
+ {
273
+ "displayName": "Groq",
274
+ "iconUrl": "https://www.google.com/s2/favicons?domain=groq.com&sz=128",
275
+ "envVarName": "GROQ_API_KEY",
276
+ "upstreamBaseUrl": "https://api.groq.com/openai",
277
+ "apiKeyInstructions": "Get your API key from <a href=\"https://console.groq.com/keys\" target=\"_blank\" class=\"text-blue-600 hover:underline\">Groq Console</a>",
278
+ "apiKeyPlaceholder": "gsk_...",
279
+ "sdkCompat": "openai",
280
+ "defaultModel": "llama-3.3-70b-versatile",
281
+ "modelsEndpoint": "/v1/models",
282
+ "stt": {
283
+ "enabled": true,
284
+ "sdkCompat": "openai",
285
+ "transcriptionPath": "/v1/audio/transcriptions",
286
+ "model": "whisper-large-v3-turbo"
287
+ }
288
+ }
289
+ ]
290
+ },
291
+ {
292
+ "id": "gemini",
293
+ "name": "Gemini",
294
+ "description": "Google Gemini models",
295
+ "providers": [
296
+ {
297
+ "displayName": "Gemini",
298
+ "iconUrl": "https://www.google.com/s2/favicons?domain=gemini.google.com&sz=128",
299
+ "envVarName": "GEMINI_API_KEY",
300
+ "upstreamBaseUrl": "https://generativelanguage.googleapis.com/v1beta/openai",
301
+ "apiKeyInstructions": "Get your API key from <a href=\"https://aistudio.google.com/apikey\" target=\"_blank\" class=\"text-blue-600 hover:underline\">Google AI Studio</a>",
302
+ "apiKeyPlaceholder": "AIza...",
303
+ "sdkCompat": "openai",
304
+ "defaultModel": "gemini-2.0-flash",
305
+ "modelsEndpoint": "/v1/models"
306
+ }
307
+ ]
308
+ },
309
+ {
310
+ "id": "together-ai",
311
+ "name": "Together AI",
312
+ "description": "Open-source models hosted by Together",
313
+ "providers": [
314
+ {
315
+ "displayName": "Together AI",
316
+ "iconUrl": "https://www.google.com/s2/favicons?domain=together.ai&sz=128",
317
+ "envVarName": "TOGETHER_API_KEY",
318
+ "upstreamBaseUrl": "https://api.together.xyz/v1",
319
+ "apiKeyInstructions": "Get your API key from <a href=\"https://api.together.ai/settings/api-keys\" target=\"_blank\" class=\"text-blue-600 hover:underline\">Together AI Dashboard</a>",
320
+ "apiKeyPlaceholder": "tok_...",
321
+ "sdkCompat": "openai",
322
+ "defaultModel": "meta-llama/Llama-3.3-70B-Instruct-Turbo",
323
+ "modelsEndpoint": "/v1/models"
324
+ }
325
+ ]
326
+ },
327
+ {
328
+ "id": "nvidia",
329
+ "name": "NVIDIA NIM",
330
+ "description": "NVIDIA-hosted models and inference APIs",
331
+ "providers": [
332
+ {
333
+ "displayName": "NVIDIA NIM (free)",
334
+ "iconUrl": "https://www.google.com/s2/favicons?domain=nvidia.com&sz=128",
335
+ "envVarName": "NVIDIA_API_KEY",
336
+ "upstreamBaseUrl": "https://integrate.api.nvidia.com",
337
+ "apiKeyInstructions": "Get your API key from <a href=\"https://build.nvidia.com/settings/api-keys\" target=\"_blank\" class=\"text-blue-600 hover:underline\">NVIDIA Build</a>",
338
+ "apiKeyPlaceholder": "nvapi-...",
339
+ "sdkCompat": "openai",
340
+ "modelsEndpoint": "/v1/models"
341
+ }
342
+ ]
343
+ },
344
+ {
345
+ "id": "z-ai",
346
+ "name": "z.ai",
347
+ "description": "z.ai coding and reasoning models",
348
+ "providers": [
349
+ {
350
+ "displayName": "z.ai",
351
+ "iconUrl": "https://www.google.com/s2/favicons?domain=z.ai&sz=128",
352
+ "envVarName": "Z_AI_API_KEY",
353
+ "upstreamBaseUrl": "https://api.z.ai/api/coding/paas/v4",
354
+ "apiKeyInstructions": "Get your API key from <a href=\"https://z.ai/manage-apikey/apikey-list\" target=\"_blank\" class=\"text-blue-600 hover:underline\">z.ai</a>",
355
+ "apiKeyPlaceholder": "zai-...",
356
+ "sdkCompat": "openai"
357
+ }
358
+ ]
359
+ },
360
+ {
361
+ "id": "elevenlabs",
362
+ "name": "ElevenLabs",
363
+ "description": "Voice and speech models",
364
+ "providers": [
365
+ {
366
+ "displayName": "ElevenLabs",
367
+ "iconUrl": "https://www.google.com/s2/favicons?domain=elevenlabs.io&sz=128",
368
+ "envVarName": "ELEVENLABS_API_KEY",
369
+ "upstreamBaseUrl": "https://api.elevenlabs.io",
370
+ "apiKeyInstructions": "Get your API key from <a href=\"https://elevenlabs.io/app/api-keys\" target=\"_blank\" class=\"text-blue-600 hover:underline\">ElevenLabs</a>",
371
+ "apiKeyPlaceholder": "sk_...",
372
+ "sdkCompat": "openai"
373
+ }
374
+ ]
375
+ },
376
+ {
377
+ "id": "fireworks",
378
+ "name": "Fireworks AI",
379
+ "description": "Fast inference for open-source models",
380
+ "providers": [
381
+ {
382
+ "displayName": "Fireworks AI",
383
+ "iconUrl": "https://www.google.com/s2/favicons?domain=fireworks.ai&sz=128",
384
+ "envVarName": "FIREWORKS_API_KEY",
385
+ "upstreamBaseUrl": "https://api.fireworks.ai/inference/v1",
386
+ "apiKeyInstructions": "Get your API key from <a href=\"https://fireworks.ai/account/api-keys\" target=\"_blank\" class=\"text-blue-600 hover:underline\">Fireworks Dashboard</a>",
387
+ "apiKeyPlaceholder": "fw_...",
388
+ "sdkCompat": "openai",
389
+ "defaultModel": "accounts/fireworks/models/llama-v3p3-70b-instruct",
390
+ "modelsEndpoint": "/v1/models"
391
+ }
392
+ ]
393
+ },
394
+ {
395
+ "id": "mistral",
396
+ "name": "Mistral",
397
+ "description": "Mistral AI models",
398
+ "providers": [
399
+ {
400
+ "displayName": "Mistral",
401
+ "iconUrl": "https://www.google.com/s2/favicons?domain=mistral.ai&sz=128",
402
+ "envVarName": "MISTRAL_API_KEY",
403
+ "upstreamBaseUrl": "https://api.mistral.ai/v1",
404
+ "apiKeyInstructions": "Get your API key from <a href=\"https://console.mistral.ai/api-keys\" target=\"_blank\" class=\"text-blue-600 hover:underline\">Mistral Console</a>",
405
+ "apiKeyPlaceholder": "sk-...",
406
+ "sdkCompat": "openai",
407
+ "defaultModel": "mistral-large-latest",
408
+ "modelsEndpoint": "/v1/models"
409
+ }
410
+ ]
411
+ },
412
+ {
413
+ "id": "deepseek",
414
+ "name": "DeepSeek",
415
+ "description": "DeepSeek reasoning and coding models",
416
+ "providers": [
417
+ {
418
+ "displayName": "DeepSeek",
419
+ "iconUrl": "https://www.google.com/s2/favicons?domain=deepseek.com&sz=128",
420
+ "envVarName": "DEEPSEEK_API_KEY",
421
+ "upstreamBaseUrl": "https://api.deepseek.com",
422
+ "apiKeyInstructions": "Get your API key from <a href=\"https://platform.deepseek.com/api_keys\" target=\"_blank\" class=\"text-blue-600 hover:underline\">DeepSeek Platform</a>",
423
+ "apiKeyPlaceholder": "sk-...",
424
+ "sdkCompat": "openai",
425
+ "defaultModel": "deepseek-chat",
426
+ "modelsEndpoint": "/v1/models"
427
+ }
428
+ ]
429
+ },
430
+ {
431
+ "id": "openrouter",
432
+ "name": "OpenRouter",
433
+ "description": "Multi-provider model router with per-user billing",
434
+ "integrations": [
435
+ {
436
+ "id": "openrouter",
437
+ "label": "OpenRouter",
438
+ "authType": "oauth",
439
+ "oauth": {
440
+ "authUrl": "https://openrouter.ai/auth",
441
+ "tokenUrl": "https://openrouter.ai/api/v1/auth/keys",
442
+ "clientId": "${env:OPENROUTER_CLIENT_ID}",
443
+ "clientSecret": "${env:OPENROUTER_CLIENT_SECRET}"
444
+ },
445
+ "apiDomains": ["openrouter.ai"],
446
+ "apiBase": "https://openrouter.ai/api/v1",
447
+ "apiHints": "OpenAI-compatible API. Chat completions: /chat/completions; Models: /models"
448
+ }
449
+ ],
450
+ "providers": [
451
+ {
452
+ "displayName": "OpenRouter",
453
+ "iconUrl": "https://www.google.com/s2/favicons?domain=openrouter.ai&sz=128",
454
+ "envVarName": "OPENROUTER_API_KEY",
455
+ "upstreamBaseUrl": "https://openrouter.ai/api/v1",
456
+ "apiKeyInstructions": "Get your API key from <a href=\"https://openrouter.ai/keys\" target=\"_blank\" class=\"text-blue-600 hover:underline\">OpenRouter</a>, or connect via OAuth for per-user billing",
457
+ "apiKeyPlaceholder": "sk-or-...",
458
+ "sdkCompat": "openai",
459
+ "defaultModel": "anthropic/claude-sonnet-4",
460
+ "modelsEndpoint": "/v1/models",
461
+ "stt": {
462
+ "enabled": true,
463
+ "sdkCompat": "openai",
464
+ "transcriptionPath": "/audio/transcriptions",
465
+ "model": "whisper-1"
466
+ }
467
+ }
468
+ ]
469
+ },
470
+ {
471
+ "id": "cerebras",
472
+ "name": "Cerebras",
473
+ "description": "Ultra-fast inference on Cerebras hardware",
474
+ "providers": [
475
+ {
476
+ "displayName": "Cerebras",
477
+ "iconUrl": "https://www.google.com/s2/favicons?domain=cerebras.ai&sz=128",
478
+ "envVarName": "CEREBRAS_API_KEY",
479
+ "upstreamBaseUrl": "https://api.cerebras.ai/v1",
480
+ "apiKeyInstructions": "Get your API key from <a href=\"https://cloud.cerebras.ai/\" target=\"_blank\" class=\"text-blue-600 hover:underline\">Cerebras Cloud</a>",
481
+ "apiKeyPlaceholder": "csk-...",
482
+ "sdkCompat": "openai",
483
+ "defaultModel": "llama-3.3-70b",
484
+ "modelsEndpoint": "/v1/models"
485
+ }
486
+ ]
487
+ },
488
+ {
489
+ "id": "opencode-zen",
490
+ "name": "OpenCode Zen",
491
+ "description": "Curated AI gateway with 40+ coding-optimized models",
492
+ "providers": [
493
+ {
494
+ "displayName": "OpenCode Zen",
495
+ "iconUrl": "https://www.google.com/s2/favicons?domain=opencode.ai&sz=128",
496
+ "envVarName": "OPENCODE_ZEN_API_KEY",
497
+ "upstreamBaseUrl": "https://opencode.ai/zen/v1",
498
+ "apiKeyInstructions": "Get your API key from <a href=\"https://opencode.ai/auth\" target=\"_blank\" class=\"text-blue-600 hover:underline\">OpenCode Zen</a>",
499
+ "apiKeyPlaceholder": "zen-...",
500
+ "sdkCompat": "openai",
501
+ "defaultModel": "anthropic/claude-sonnet-4",
502
+ "modelsEndpoint": "/v1/models"
503
+ }
504
+ ]
505
+ },
506
+ {
507
+ "id": "xai",
508
+ "name": "xAI",
509
+ "description": "Grok models by xAI",
510
+ "providers": [
511
+ {
512
+ "displayName": "xAI",
513
+ "iconUrl": "https://www.google.com/s2/favicons?domain=x.ai&sz=128",
514
+ "envVarName": "XAI_API_KEY",
515
+ "upstreamBaseUrl": "https://api.x.ai/v1",
516
+ "apiKeyInstructions": "Get your API key from <a href=\"https://console.x.ai/\" target=\"_blank\" class=\"text-blue-600 hover:underline\">xAI Console</a>",
517
+ "apiKeyPlaceholder": "xai-...",
518
+ "sdkCompat": "openai",
519
+ "defaultModel": "grok-3",
520
+ "modelsEndpoint": "/v1/models"
521
+ }
522
+ ]
523
+ },
524
+ {
525
+ "id": "perplexity",
526
+ "name": "Perplexity",
527
+ "description": "Search-augmented AI models",
528
+ "providers": [
529
+ {
530
+ "displayName": "Perplexity",
531
+ "iconUrl": "https://www.google.com/s2/favicons?domain=perplexity.ai&sz=128",
532
+ "envVarName": "PERPLEXITY_API_KEY",
533
+ "upstreamBaseUrl": "https://api.perplexity.ai",
534
+ "apiKeyInstructions": "Get your API key from <a href=\"https://www.perplexity.ai/settings/api\" target=\"_blank\" class=\"text-blue-600 hover:underline\">Perplexity Settings</a>",
535
+ "apiKeyPlaceholder": "pplx-...",
536
+ "sdkCompat": "openai",
537
+ "defaultModel": "sonar-pro",
538
+ "modelsEndpoint": "/v1/models"
539
+ }
540
+ ]
541
+ },
542
+ {
543
+ "id": "cohere",
544
+ "name": "Cohere",
545
+ "description": "Enterprise AI with Command and Embed models",
546
+ "providers": [
547
+ {
548
+ "displayName": "Cohere",
549
+ "iconUrl": "https://www.google.com/s2/favicons?domain=cohere.com&sz=128",
550
+ "envVarName": "COHERE_API_KEY",
551
+ "upstreamBaseUrl": "https://api.cohere.com/compatibility/v1",
552
+ "apiKeyInstructions": "Get your API key from <a href=\"https://dashboard.cohere.com/api-keys\" target=\"_blank\" class=\"text-blue-600 hover:underline\">Cohere Dashboard</a>",
553
+ "apiKeyPlaceholder": "co-...",
554
+ "sdkCompat": "openai",
555
+ "defaultModel": "command-r-plus",
556
+ "modelsEndpoint": "/v1/models"
557
+ }
558
+ ]
559
+ }
560
+ ]
561
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lobu/cli",
3
- "version": "3.0.1",
3
+ "version": "3.0.3",
4
4
  "description": "CLI for deploying and managing AI agents on Lobu",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",