@lobu/cli 3.0.3 → 3.0.5

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 (113) hide show
  1. package/README.md +18 -222
  2. package/dist/api/context.d.ts +20 -0
  3. package/dist/api/context.d.ts.map +1 -0
  4. package/dist/api/context.js +113 -0
  5. package/dist/api/context.js.map +1 -0
  6. package/dist/api/credentials.d.ts +9 -4
  7. package/dist/api/credentials.d.ts.map +1 -1
  8. package/dist/api/credentials.js +127 -15
  9. package/dist/api/credentials.js.map +1 -1
  10. package/dist/commands/chat.d.ts +16 -0
  11. package/dist/commands/chat.d.ts.map +1 -0
  12. package/dist/commands/chat.js +281 -0
  13. package/dist/commands/chat.js.map +1 -0
  14. package/dist/commands/context.d.ts +8 -0
  15. package/dist/commands/context.d.ts.map +1 -0
  16. package/dist/commands/context.js +46 -0
  17. package/dist/commands/context.js.map +1 -0
  18. package/dist/commands/dev.d.ts +3 -9
  19. package/dist/commands/dev.d.ts.map +1 -1
  20. package/dist/commands/dev.js +95 -64
  21. package/dist/commands/dev.js.map +1 -1
  22. package/dist/commands/init.d.ts.map +1 -1
  23. package/dist/commands/init.js +421 -673
  24. package/dist/commands/init.js.map +1 -1
  25. package/dist/commands/login.d.ts +2 -0
  26. package/dist/commands/login.d.ts.map +1 -1
  27. package/dist/commands/login.js +283 -14
  28. package/dist/commands/login.js.map +1 -1
  29. package/dist/commands/logout.d.ts +3 -1
  30. package/dist/commands/logout.d.ts.map +1 -1
  31. package/dist/commands/logout.js +5 -3
  32. package/dist/commands/logout.js.map +1 -1
  33. package/dist/commands/providers/add.d.ts.map +1 -1
  34. package/dist/commands/providers/add.js +38 -14
  35. package/dist/commands/providers/add.js.map +1 -1
  36. package/dist/commands/providers/list.d.ts.map +1 -1
  37. package/dist/commands/providers/list.js +4 -2
  38. package/dist/commands/providers/list.js.map +1 -1
  39. package/dist/commands/skills/add.d.ts.map +1 -1
  40. package/dist/commands/skills/add.js +25 -7
  41. package/dist/commands/skills/add.js.map +1 -1
  42. package/dist/commands/skills/info.d.ts.map +1 -1
  43. package/dist/commands/skills/info.js +0 -9
  44. package/dist/commands/skills/info.js.map +1 -1
  45. package/dist/commands/skills/list.d.ts.map +1 -1
  46. package/dist/commands/skills/list.js +5 -6
  47. package/dist/commands/skills/list.js.map +1 -1
  48. package/dist/commands/skills/registry.d.ts +6 -11
  49. package/dist/commands/skills/registry.d.ts.map +1 -1
  50. package/dist/commands/skills/registry.js +0 -3
  51. package/dist/commands/skills/registry.js.map +1 -1
  52. package/dist/commands/skills/search.d.ts.map +1 -1
  53. package/dist/commands/skills/search.js +3 -1
  54. package/dist/commands/skills/search.js.map +1 -1
  55. package/dist/commands/status.d.ts +1 -1
  56. package/dist/commands/status.d.ts.map +1 -1
  57. package/dist/commands/status.js +107 -4
  58. package/dist/commands/status.js.map +1 -1
  59. package/dist/commands/validate.d.ts.map +1 -1
  60. package/dist/commands/validate.js +9 -20
  61. package/dist/commands/validate.js.map +1 -1
  62. package/dist/commands/whoami.d.ts +3 -1
  63. package/dist/commands/whoami.d.ts.map +1 -1
  64. package/dist/commands/whoami.js +17 -3
  65. package/dist/commands/whoami.js.map +1 -1
  66. package/dist/config/loader.d.ts.map +1 -1
  67. package/dist/config/loader.js.map +1 -1
  68. package/dist/config/schema.d.ts +546 -111
  69. package/dist/config/schema.d.ts.map +1 -1
  70. package/dist/config/schema.js +26 -19
  71. package/dist/config/schema.js.map +1 -1
  72. package/dist/index.d.ts +0 -4
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +60 -25
  75. package/dist/index.js.map +1 -1
  76. package/dist/utils/markdown.d.ts +3 -0
  77. package/dist/utils/markdown.d.ts.map +1 -0
  78. package/dist/utils/markdown.js +10 -0
  79. package/dist/utils/markdown.js.map +1 -0
  80. package/package.json +4 -3
  81. package/dist/api/client.d.ts +0 -11
  82. package/dist/api/client.d.ts.map +0 -1
  83. package/dist/api/client.js +0 -35
  84. package/dist/api/client.js.map +0 -1
  85. package/dist/commands/launch.d.ts +0 -6
  86. package/dist/commands/launch.d.ts.map +0 -1
  87. package/dist/commands/launch.js +0 -32
  88. package/dist/commands/launch.js.map +0 -1
  89. package/dist/config/transformer.d.ts +0 -11
  90. package/dist/config/transformer.d.ts.map +0 -1
  91. package/dist/config/transformer.js +0 -49
  92. package/dist/config/transformer.js.map +0 -1
  93. package/dist/mcp-servers.d.ts +0 -11
  94. package/dist/mcp-servers.d.ts.map +0 -1
  95. package/dist/mcp-servers.js +0 -27
  96. package/dist/mcp-servers.js.map +0 -1
  97. package/dist/mcp-servers.json +0 -216
  98. package/dist/system-skills.json +0 -561
  99. package/dist/templates/.env.tmpl +0 -29
  100. package/dist/templates/.gitignore.tmpl +0 -32
  101. package/dist/templates/AGENTS.md.tmpl +0 -1
  102. package/dist/templates/Dockerfile.worker.tmpl +0 -29
  103. package/dist/templates/README.md.tmpl +0 -95
  104. package/dist/templates/TESTING.md.tmpl +0 -225
  105. package/dist/templates/lobu.toml.tmpl +0 -44
  106. package/dist/types.d.ts +0 -76
  107. package/dist/types.d.ts.map +0 -1
  108. package/dist/types.js +0 -2
  109. package/dist/types.js.map +0 -1
  110. package/dist/utils/config.d.ts +0 -2
  111. package/dist/utils/config.d.ts.map +0 -1
  112. package/dist/utils/config.js +0 -13
  113. package/dist/utils/config.js.map +0 -1
@@ -1,561 +0,0 @@
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
- }
@@ -1,29 +0,0 @@
1
- # Slack Configuration
2
- SLACK_SIGNING_SECRET={{SLACK_SIGNING_SECRET}}
3
- SLACK_BOT_TOKEN={{SLACK_BOT_TOKEN}}
4
- SLACK_APP_TOKEN={{SLACK_APP_TOKEN}}
5
-
6
- # Telegram Configuration
7
- TELEGRAM_ENABLED={{TELEGRAM_ENABLED}}
8
- TELEGRAM_BOT_TOKEN={{TELEGRAM_BOT_TOKEN}}
9
- TELEGRAM_ALLOW_FROM={{TELEGRAM_ALLOW_FROM}}
10
-
11
- # Anthropic Configuration
12
- ANTHROPIC_API_KEY={{ANTHROPIC_API_KEY}}
13
-
14
- # Gateway Configuration
15
- PUBLIC_GATEWAY_URL={{PUBLIC_GATEWAY_URL}}
16
-
17
- # Security
18
- ENCRYPTION_KEY={{ENCRYPTION_KEY}}
19
-
20
- # Worker Network Access Control
21
- # Empty/unset: Complete isolation (deny all)
22
- # WORKER_ALLOWED_DOMAINS=*: Unrestricted access
23
- # WORKER_ALLOWED_DOMAINS=domains: Allowlist mode (deny by default, allow only these)
24
- # WORKER_DISALLOWED_DOMAINS=domains: Blocklist mode (use with WORKER_ALLOWED_DOMAINS=*)
25
- WORKER_ALLOWED_DOMAINS={{WORKER_ALLOWED_DOMAINS}}
26
- WORKER_DISALLOWED_DOMAINS={{WORKER_DISALLOWED_DOMAINS}}
27
-
28
- # CLI Version (used for image tags)
29
- CLI_VERSION={{CLI_VERSION}}
@@ -1,32 +0,0 @@
1
- # Environment variables
2
- .env
3
- .env.local
4
- .env.*.local
5
-
6
- # Generated files
7
- .lobu/
8
-
9
- # Workspace data
10
- workspaces/
11
-
12
- # Logs
13
- *.log
14
- npm-debug.log*
15
- yarn-debug.log*
16
- yarn-error.log*
17
- pnpm-debug.log*
18
- lerna-debug.log*
19
-
20
- # OS files
21
- .DS_Store
22
- Thumbs.db
23
-
24
- # Editor directories
25
- .vscode/
26
- .idea/
27
- *.swp
28
- *.swo
29
- *~
30
-
31
- # Node modules (if you add custom scripts)
32
- node_modules/
@@ -1 +0,0 @@
1
- @TESTING.md
@@ -1,29 +0,0 @@
1
- FROM ghcr.io/lobu-ai/lobu-worker-base:latest
2
-
3
- # === CUSTOMIZE BELOW THIS LINE ===
4
- # This Dockerfile extends the lobu worker base image with your custom tools and dependencies.
5
- # The same Dockerfile works for local Docker development.
6
-
7
- # Example: Add system packages
8
- # RUN apt-get update && apt-get install -y \
9
- # postgresql-client \
10
- # && rm -rf /var/lib/apt/lists/*
11
-
12
- # Example: Add Python packages
13
- # RUN pip install --no-cache-dir \
14
- # pandas \
15
- # matplotlib \
16
- # requests
17
-
18
- # Example: Add Node.js packages
19
- # RUN bun add @octokit/rest lodash
20
-
21
- # Example: Copy custom scripts
22
- # COPY ./scripts /workspace/scripts
23
- # RUN chmod +x /workspace/scripts/*.sh
24
-
25
- # Example: Set custom environment variables
26
- # ENV MY_CUSTOM_VAR=value
27
-
28
- # Example: Install language runtimes
29
- # RUN curl -fsSL https://deno.land/install.sh | sh