@lobu/cli 3.0.4 → 3.0.6
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/README.md +17 -221
- package/dist/api/context.d.ts +0 -2
- package/dist/api/context.d.ts.map +1 -1
- package/dist/api/context.js +2 -2
- package/dist/api/context.js.map +1 -1
- package/dist/commands/chat.d.ts +7 -2
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +111 -25
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/dev.d.ts +3 -2
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +17 -165
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +132 -59
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/skills/info.d.ts.map +1 -1
- package/dist/commands/skills/info.js +0 -9
- package/dist/commands/skills/info.js.map +1 -1
- package/dist/commands/skills/list.d.ts.map +1 -1
- package/dist/commands/skills/list.js +5 -6
- package/dist/commands/skills/list.js.map +1 -1
- package/dist/commands/skills/registry.d.ts +1 -11
- package/dist/commands/skills/registry.d.ts.map +1 -1
- package/dist/commands/skills/registry.js +0 -3
- package/dist/commands/skills/registry.js.map +1 -1
- package/dist/commands/status.js +1 -1
- package/dist/config/loader.d.ts +0 -18
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +2 -62
- package/dist/config/loader.js.map +1 -1
- package/dist/index.js +8 -15
- package/dist/index.js.map +1 -1
- package/dist/mcp-servers.json +8 -8
- package/dist/system-skills.json +52 -309
- package/dist/templates/README.md.tmpl +4 -4
- package/dist/templates/TESTING.md.tmpl +19 -19
- package/package.json +1 -2
- package/dist/__tests__/login.test.d.ts +0 -2
- package/dist/__tests__/login.test.d.ts.map +0 -1
- package/dist/__tests__/login.test.js +0 -173
- package/dist/__tests__/login.test.js.map +0 -1
- package/dist/api/client.d.ts +0 -11
- package/dist/api/client.d.ts.map +0 -1
- package/dist/api/client.js +0 -33
- package/dist/api/client.js.map +0 -1
- package/dist/commands/launch.d.ts +0 -6
- package/dist/commands/launch.d.ts.map +0 -1
- package/dist/commands/launch.js +0 -26
- package/dist/commands/launch.js.map +0 -1
- package/dist/config/agents-manifest.d.ts +0 -92
- package/dist/config/agents-manifest.d.ts.map +0 -1
- package/dist/config/agents-manifest.js +0 -7
- package/dist/config/agents-manifest.js.map +0 -1
- package/dist/config/platform-schemas.d.ts +0 -120
- package/dist/config/platform-schemas.d.ts.map +0 -1
- package/dist/config/platform-schemas.js +0 -97
- package/dist/config/platform-schemas.js.map +0 -1
- package/dist/config/transformer.d.ts +0 -14
- package/dist/config/transformer.d.ts.map +0 -1
- package/dist/config/transformer.js +0 -46
- package/dist/config/transformer.js.map +0 -1
- package/dist/mcp-servers.d.ts +0 -11
- package/dist/mcp-servers.d.ts.map +0 -1
- package/dist/mcp-servers.js +0 -27
- package/dist/mcp-servers.js.map +0 -1
- package/dist/types.d.ts +0 -76
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/dist/utils/config.d.ts +0 -2
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -13
- package/dist/utils/config.js.map +0 -1
package/dist/system-skills.json
CHANGED
|
@@ -1,40 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"skills": [
|
|
3
3
|
{
|
|
4
|
-
"id": "
|
|
5
|
-
"name": "
|
|
6
|
-
"description": "
|
|
7
|
-
"
|
|
4
|
+
"id": "owletto",
|
|
5
|
+
"name": "Owletto Memory",
|
|
6
|
+
"description": "Long-term memory across conversations. Use when you need to remember user preferences, recall past context, or store important facts.",
|
|
7
|
+
"instructions": "Check Owletto memory at the start of each conversation for relevant context. Store important user preferences, facts, and decisions.",
|
|
8
|
+
"hidden": true,
|
|
9
|
+
"mcpServers": [
|
|
8
10
|
{
|
|
9
|
-
"id": "
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"authUrl": "https://accounts.google.com/o/oauth2/v2/auth",
|
|
14
|
-
"tokenUrl": "https://oauth2.googleapis.com/token",
|
|
15
|
-
"incrementalAuth": true,
|
|
16
|
-
"extraAuthParams": {
|
|
17
|
-
"access_type": "offline",
|
|
18
|
-
"prompt": "consent"
|
|
19
|
-
}
|
|
20
|
-
},
|
|
21
|
-
"scopesConfig": {
|
|
22
|
-
"default": ["openid", "profile", "email"],
|
|
23
|
-
"available": [
|
|
24
|
-
"https://www.googleapis.com/auth/gmail.readonly",
|
|
25
|
-
"https://www.googleapis.com/auth/gmail.send",
|
|
26
|
-
"https://www.googleapis.com/auth/calendar.readonly",
|
|
27
|
-
"https://www.googleapis.com/auth/calendar.events",
|
|
28
|
-
"https://www.googleapis.com/auth/drive.readonly"
|
|
29
|
-
]
|
|
30
|
-
},
|
|
31
|
-
"apiDomains": [
|
|
32
|
-
"gmail.googleapis.com",
|
|
33
|
-
"www.googleapis.com",
|
|
34
|
-
"calendar.googleapis.com"
|
|
35
|
-
],
|
|
36
|
-
"apiBase": "https://www.googleapis.com",
|
|
37
|
-
"apiHints": "Calendar: /calendar/v3/calendars/primary/events; Gmail: /gmail/v1/users/me/messages, /gmail/v1/users/me/messages/send; Drive: /drive/v3/files"
|
|
11
|
+
"id": "owletto",
|
|
12
|
+
"name": "Owletto",
|
|
13
|
+
"url": "${env:MEMORY_URL}",
|
|
14
|
+
"type": "sse"
|
|
38
15
|
}
|
|
39
16
|
]
|
|
40
17
|
},
|
|
@@ -42,288 +19,50 @@
|
|
|
42
19
|
"id": "github",
|
|
43
20
|
"name": "GitHub",
|
|
44
21
|
"description": "Repos, issues, pull requests, and code access",
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
"id": "github",
|
|
48
|
-
"label": "GitHub",
|
|
49
|
-
"authType": "oauth",
|
|
50
|
-
"oauth": {
|
|
51
|
-
"authUrl": "https://github.com/login/oauth/authorize",
|
|
52
|
-
"tokenUrl": "https://github.com/login/oauth/access_token"
|
|
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
|
-
]
|
|
22
|
+
"instructions": "Use Owletto MCP tools for GitHub API access (issues, PRs, repos). For git operations, use the CLI directly — network permissions are granted for github.com.",
|
|
23
|
+
"permissions": ["github.com", ".github.com", ".githubusercontent.com"]
|
|
69
24
|
},
|
|
70
25
|
{
|
|
71
|
-
"id": "
|
|
72
|
-
"name": "
|
|
73
|
-
"description": "
|
|
74
|
-
"
|
|
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
|
-
},
|
|
83
|
-
"scopesConfig": {
|
|
84
|
-
"default": ["openid", "profile", "email", "offline_access"],
|
|
85
|
-
"available": [
|
|
86
|
-
"Mail.Read",
|
|
87
|
-
"Mail.Send",
|
|
88
|
-
"Calendars.Read",
|
|
89
|
-
"Calendars.ReadWrite",
|
|
90
|
-
"Files.Read",
|
|
91
|
-
"Files.ReadWrite",
|
|
92
|
-
"Chat.Read",
|
|
93
|
-
"Team.ReadBasic.All"
|
|
94
|
-
]
|
|
95
|
-
},
|
|
96
|
-
"apiDomains": ["graph.microsoft.com"],
|
|
97
|
-
"apiBase": "https://graph.microsoft.com/v1.0",
|
|
98
|
-
"apiHints": "Mail: /me/messages; Calendar: /me/events; Files: /me/drive/root/children; Teams chats: /me/chats"
|
|
99
|
-
}
|
|
100
|
-
]
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
"id": "notion",
|
|
104
|
-
"name": "Notion",
|
|
105
|
-
"description": "Workspace pages, databases, and content",
|
|
106
|
-
"integrations": [
|
|
107
|
-
{
|
|
108
|
-
"id": "notion",
|
|
109
|
-
"label": "Notion",
|
|
110
|
-
"authType": "oauth",
|
|
111
|
-
"oauth": {
|
|
112
|
-
"authUrl": "https://api.notion.com/v1/oauth/authorize",
|
|
113
|
-
"tokenUrl": "https://api.notion.com/v1/oauth/token",
|
|
114
|
-
"tokenEndpointAuthMethod": "client_secret_basic"
|
|
115
|
-
},
|
|
116
|
-
"apiDomains": ["api.notion.com"],
|
|
117
|
-
"apiBase": "https://api.notion.com/v1",
|
|
118
|
-
"apiHints": "Requires Notion-Version: 2022-06-28 header. Pages: /pages/{id}; Databases: /databases/{id}/query; Search: /search; Blocks: /blocks/{id}/children"
|
|
119
|
-
}
|
|
120
|
-
]
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
"id": "spotify",
|
|
124
|
-
"name": "Spotify",
|
|
125
|
-
"description": "Music playback, playlists, and library management",
|
|
126
|
-
"integrations": [
|
|
127
|
-
{
|
|
128
|
-
"id": "spotify",
|
|
129
|
-
"label": "Spotify",
|
|
130
|
-
"authType": "oauth",
|
|
131
|
-
"oauth": {
|
|
132
|
-
"authUrl": "https://accounts.spotify.com/authorize",
|
|
133
|
-
"tokenUrl": "https://accounts.spotify.com/api/token",
|
|
134
|
-
"tokenEndpointAuthMethod": "client_secret_basic"
|
|
135
|
-
},
|
|
136
|
-
"scopesConfig": {
|
|
137
|
-
"default": ["user-read-private", "user-read-email"],
|
|
138
|
-
"available": [
|
|
139
|
-
"user-read-playback-state",
|
|
140
|
-
"user-modify-playback-state",
|
|
141
|
-
"user-read-currently-playing",
|
|
142
|
-
"playlist-read-private",
|
|
143
|
-
"playlist-modify-public",
|
|
144
|
-
"playlist-modify-private",
|
|
145
|
-
"user-library-read",
|
|
146
|
-
"user-library-modify",
|
|
147
|
-
"user-top-read",
|
|
148
|
-
"user-read-recently-played"
|
|
149
|
-
]
|
|
150
|
-
},
|
|
151
|
-
"apiDomains": ["api.spotify.com"],
|
|
152
|
-
"apiBase": "https://api.spotify.com/v1",
|
|
153
|
-
"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"
|
|
154
|
-
}
|
|
155
|
-
]
|
|
26
|
+
"id": "google-workspace",
|
|
27
|
+
"name": "Google Workspace",
|
|
28
|
+
"description": "Gmail, Calendar, and Drive integration",
|
|
29
|
+
"instructions": "Use Owletto MCP tools for Google Workspace API access (Gmail, Calendar, Drive)."
|
|
156
30
|
},
|
|
157
31
|
{
|
|
158
32
|
"id": "linear",
|
|
159
33
|
"name": "Linear",
|
|
160
34
|
"description": "Issue tracking and project management",
|
|
161
|
-
"
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
"tokenUrl": "https://api.linear.app/oauth/token"
|
|
169
|
-
},
|
|
170
|
-
"scopesConfig": {
|
|
171
|
-
"default": ["read"],
|
|
172
|
-
"available": ["read", "write", "issues:create", "comments:create"]
|
|
173
|
-
},
|
|
174
|
-
"apiDomains": ["api.linear.app"],
|
|
175
|
-
"apiBase": "https://api.linear.app",
|
|
176
|
-
"apiHints": "GraphQL API only. POST /graphql with query body. Example: { \"query\": \"{ issues { nodes { id title } } }\" }"
|
|
177
|
-
}
|
|
178
|
-
]
|
|
35
|
+
"instructions": "Use Owletto MCP tools for Linear API access (issues, projects, cycles)."
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"id": "notion",
|
|
39
|
+
"name": "Notion",
|
|
40
|
+
"description": "Workspace pages, databases, and content",
|
|
41
|
+
"instructions": "Use Owletto MCP tools for Notion API access (pages, databases, blocks)."
|
|
179
42
|
},
|
|
180
43
|
{
|
|
181
44
|
"id": "jira",
|
|
182
45
|
"name": "Jira",
|
|
183
46
|
"description": "Atlassian Jira project and issue management",
|
|
184
|
-
"
|
|
185
|
-
{
|
|
186
|
-
"id": "jira",
|
|
187
|
-
"label": "Atlassian",
|
|
188
|
-
"authType": "oauth",
|
|
189
|
-
"oauth": {
|
|
190
|
-
"authUrl": "https://auth.atlassian.com/authorize",
|
|
191
|
-
"tokenUrl": "https://auth.atlassian.com/oauth/token"
|
|
192
|
-
},
|
|
193
|
-
"scopesConfig": {
|
|
194
|
-
"default": ["read:me"],
|
|
195
|
-
"available": [
|
|
196
|
-
"read:jira-work",
|
|
197
|
-
"write:jira-work",
|
|
198
|
-
"read:jira-user",
|
|
199
|
-
"read:confluence-content.all"
|
|
200
|
-
]
|
|
201
|
-
},
|
|
202
|
-
"apiDomains": ["api.atlassian.com", "auth.atlassian.com"],
|
|
203
|
-
"apiBase": "https://api.atlassian.com",
|
|
204
|
-
"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"
|
|
205
|
-
}
|
|
206
|
-
]
|
|
47
|
+
"instructions": "Use Owletto MCP tools for Jira API access (issues, projects, boards)."
|
|
207
48
|
},
|
|
208
49
|
{
|
|
209
50
|
"id": "sentry",
|
|
210
51
|
"name": "Sentry",
|
|
211
|
-
"description": "Error tracking
|
|
212
|
-
"
|
|
213
|
-
{
|
|
214
|
-
"id": "sentry",
|
|
215
|
-
"label": "Sentry",
|
|
216
|
-
"authType": "oauth",
|
|
217
|
-
"oauth": {
|
|
218
|
-
"authUrl": "https://sentry.io/oauth/authorize/",
|
|
219
|
-
"tokenUrl": "https://sentry.io/oauth/token/"
|
|
220
|
-
},
|
|
221
|
-
"scopesConfig": {
|
|
222
|
-
"default": ["org:read", "project:read", "event:read"],
|
|
223
|
-
"available": [
|
|
224
|
-
"org:read",
|
|
225
|
-
"org:write",
|
|
226
|
-
"project:read",
|
|
227
|
-
"project:write",
|
|
228
|
-
"project:releases",
|
|
229
|
-
"team:read",
|
|
230
|
-
"team:write",
|
|
231
|
-
"member:read",
|
|
232
|
-
"event:read",
|
|
233
|
-
"event:write"
|
|
234
|
-
]
|
|
235
|
-
},
|
|
236
|
-
"apiDomains": ["sentry.io"],
|
|
237
|
-
"apiBase": "https://sentry.io/api/0",
|
|
238
|
-
"apiHints": "Organizations: /organizations/; Projects: /organizations/{org}/projects/; Issues: /organizations/{org}/issues/"
|
|
239
|
-
}
|
|
240
|
-
]
|
|
52
|
+
"description": "Error tracking and performance monitoring",
|
|
53
|
+
"instructions": "Use Owletto MCP tools for Sentry API access (issues, events, releases)."
|
|
241
54
|
},
|
|
242
55
|
{
|
|
243
|
-
"id": "
|
|
244
|
-
"name": "
|
|
245
|
-
"description": "
|
|
246
|
-
"
|
|
247
|
-
{
|
|
248
|
-
"id": "reddit",
|
|
249
|
-
"label": "Reddit",
|
|
250
|
-
"authType": "oauth",
|
|
251
|
-
"oauth": {
|
|
252
|
-
"authUrl": "https://www.reddit.com/api/v1/authorize?duration=permanent",
|
|
253
|
-
"tokenUrl": "https://www.reddit.com/api/v1/access_token",
|
|
254
|
-
"tokenEndpointAuthMethod": "client_secret_basic"
|
|
255
|
-
},
|
|
256
|
-
"scopesConfig": {
|
|
257
|
-
"default": ["identity", "read"],
|
|
258
|
-
"available": [
|
|
259
|
-
"submit",
|
|
260
|
-
"vote",
|
|
261
|
-
"edit",
|
|
262
|
-
"save",
|
|
263
|
-
"history",
|
|
264
|
-
"mysubreddits",
|
|
265
|
-
"subscribe",
|
|
266
|
-
"flair"
|
|
267
|
-
]
|
|
268
|
-
},
|
|
269
|
-
"apiDomains": ["oauth.reddit.com"],
|
|
270
|
-
"apiBase": "https://oauth.reddit.com",
|
|
271
|
-
"apiHints": "User: /api/v1/me; Subreddit posts: /r/{subreddit}/hot; Submit: /api/submit; Vote: /api/vote; Comments: /r/{subreddit}/comments/{article}"
|
|
272
|
-
}
|
|
273
|
-
]
|
|
274
|
-
},
|
|
275
|
-
{
|
|
276
|
-
"id": "twitter",
|
|
277
|
-
"name": "X (Twitter)",
|
|
278
|
-
"description": "Tweets, timelines, users, and direct messages",
|
|
279
|
-
"integrations": [
|
|
280
|
-
{
|
|
281
|
-
"id": "twitter",
|
|
282
|
-
"label": "X (Twitter)",
|
|
283
|
-
"authType": "oauth",
|
|
284
|
-
"oauth": {
|
|
285
|
-
"authUrl": "https://twitter.com/i/oauth2/authorize",
|
|
286
|
-
"tokenUrl": "https://api.twitter.com/2/oauth2/token",
|
|
287
|
-
"tokenEndpointAuthMethod": "client_secret_basic"
|
|
288
|
-
},
|
|
289
|
-
"scopesConfig": {
|
|
290
|
-
"default": ["tweet.read", "users.read", "offline.access"],
|
|
291
|
-
"available": [
|
|
292
|
-
"tweet.write",
|
|
293
|
-
"follows.read",
|
|
294
|
-
"follows.write",
|
|
295
|
-
"like.read",
|
|
296
|
-
"like.write",
|
|
297
|
-
"dm.read",
|
|
298
|
-
"dm.write"
|
|
299
|
-
]
|
|
300
|
-
},
|
|
301
|
-
"apiDomains": ["api.twitter.com"],
|
|
302
|
-
"apiBase": "https://api.twitter.com/2",
|
|
303
|
-
"apiHints": "User: /users/me; Tweets: /tweets/{id}; Timeline: /users/{id}/tweets; Post tweet: /tweets; Search: /tweets/search/recent?query={q}"
|
|
304
|
-
}
|
|
305
|
-
]
|
|
56
|
+
"id": "microsoft-365",
|
|
57
|
+
"name": "Microsoft 365",
|
|
58
|
+
"description": "Outlook, OneDrive, and Teams integration",
|
|
59
|
+
"instructions": "Use Owletto MCP tools for Microsoft 365 API access (Mail, Calendar, Files, Teams)."
|
|
306
60
|
},
|
|
307
61
|
{
|
|
308
|
-
"id": "
|
|
309
|
-
"name": "
|
|
310
|
-
"description": "
|
|
311
|
-
"
|
|
312
|
-
"mcpServers": [
|
|
313
|
-
{
|
|
314
|
-
"id": "owletto",
|
|
315
|
-
"name": "Owletto",
|
|
316
|
-
"url": "${env:OWLETTO_MCP_URL}",
|
|
317
|
-
"type": "sse",
|
|
318
|
-
"oauth": {
|
|
319
|
-
"authUrl": "${env:OWLETTO_OAUTH_AUTH_URL}",
|
|
320
|
-
"tokenUrl": "${env:OWLETTO_OAUTH_TOKEN_URL}",
|
|
321
|
-
"clientId": "${env:OWLETTO_OAUTH_CLIENT_ID}",
|
|
322
|
-
"scopes": ["mcp:read", "mcp:write"],
|
|
323
|
-
"tokenEndpointAuthMethod": "none"
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
]
|
|
62
|
+
"id": "spotify",
|
|
63
|
+
"name": "Spotify",
|
|
64
|
+
"description": "Music playback, playlists, and library",
|
|
65
|
+
"instructions": "Use Owletto MCP tools for Spotify API access (player, playlists, library, search)."
|
|
327
66
|
},
|
|
328
67
|
{
|
|
329
68
|
"id": "groq",
|
|
@@ -493,20 +232,6 @@
|
|
|
493
232
|
"id": "openrouter",
|
|
494
233
|
"name": "OpenRouter",
|
|
495
234
|
"description": "Multi-provider model router with per-user billing",
|
|
496
|
-
"integrations": [
|
|
497
|
-
{
|
|
498
|
-
"id": "openrouter",
|
|
499
|
-
"label": "OpenRouter",
|
|
500
|
-
"authType": "oauth",
|
|
501
|
-
"oauth": {
|
|
502
|
-
"authUrl": "https://openrouter.ai/auth",
|
|
503
|
-
"tokenUrl": "https://openrouter.ai/api/v1/auth/keys"
|
|
504
|
-
},
|
|
505
|
-
"apiDomains": ["openrouter.ai"],
|
|
506
|
-
"apiBase": "https://openrouter.ai/api/v1",
|
|
507
|
-
"apiHints": "OpenAI-compatible API. Chat completions: /chat/completions; Models: /models"
|
|
508
|
-
}
|
|
509
|
-
],
|
|
510
235
|
"providers": [
|
|
511
236
|
{
|
|
512
237
|
"displayName": "OpenRouter",
|
|
@@ -616,6 +341,24 @@
|
|
|
616
341
|
"modelsEndpoint": "/v1/models"
|
|
617
342
|
}
|
|
618
343
|
]
|
|
344
|
+
},
|
|
345
|
+
{
|
|
346
|
+
"id": "openai",
|
|
347
|
+
"name": "OpenAI",
|
|
348
|
+
"description": "OpenAI Models",
|
|
349
|
+
"providers": [
|
|
350
|
+
{
|
|
351
|
+
"displayName": "OpenAI",
|
|
352
|
+
"iconUrl": "https://www.google.com/s2/favicons?domain=openai.com&sz=128",
|
|
353
|
+
"envVarName": "OPENAI_API_KEY",
|
|
354
|
+
"upstreamBaseUrl": "https://api.openai.com",
|
|
355
|
+
"apiKeyInstructions": "Get your API key from <a href=\"https://platform.openai.com/api-keys\" target=\"_blank\" class=\"text-blue-600 hover:underline\">OpenAI Dashboard</a>",
|
|
356
|
+
"apiKeyPlaceholder": "sk-...",
|
|
357
|
+
"sdkCompat": "openai",
|
|
358
|
+
"defaultModel": "gpt-4o",
|
|
359
|
+
"modelsEndpoint": "/v1/models"
|
|
360
|
+
}
|
|
361
|
+
]
|
|
619
362
|
}
|
|
620
363
|
]
|
|
621
364
|
}
|
|
@@ -8,7 +8,7 @@ Make sure you have Docker CLI installed.
|
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
# Start the services
|
|
11
|
-
lobu
|
|
11
|
+
lobu run -d
|
|
12
12
|
|
|
13
13
|
# View logs
|
|
14
14
|
docker compose logs -f
|
|
@@ -51,7 +51,7 @@ Edit `.env` to configure:
|
|
|
51
51
|
|
|
52
52
|
### Platform Connections
|
|
53
53
|
|
|
54
|
-
Platforms (Slack, Telegram, Discord, WhatsApp, Teams) are configured
|
|
54
|
+
Platforms (Slack, Telegram, Discord, WhatsApp, Teams) are configured through the gateway APIs. No platform-specific env vars are required in `docker-compose.yml`; manage connections against `{PUBLIC_GATEWAY_URL}/api/v1/connections` and related auth/config endpoints.
|
|
55
55
|
|
|
56
56
|
### Worker Customization
|
|
57
57
|
|
|
@@ -80,8 +80,8 @@ The gateway will automatically pick up the latest worker image.
|
|
|
80
80
|
|
|
81
81
|
The docker-compose.yml defines these services:
|
|
82
82
|
- **redis** - Redis cache and queue
|
|
83
|
-
- **gateway** -
|
|
84
|
-
- **worker** -
|
|
83
|
+
- **gateway** - Platform connections and worker orchestration
|
|
84
|
+
- **worker** - Agent worker (build-only, spawned dynamically)
|
|
85
85
|
|
|
86
86
|
## Learn More
|
|
87
87
|
|
|
@@ -8,7 +8,7 @@ Send messages to your bot with optional file uploads.
|
|
|
8
8
|
|
|
9
9
|
### Endpoint
|
|
10
10
|
```
|
|
11
|
-
POST http://localhost:{{GATEWAY_PORT}}/api/
|
|
11
|
+
POST http://localhost:{{GATEWAY_PORT}}/api/v1/agents/{agentId}/messages
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
### Authentication
|
|
@@ -24,23 +24,23 @@ The bot token must be provided in the `Authorization` header, not in the request
|
|
|
24
24
|
|
|
25
25
|
#### JSON Request (Simple Message)
|
|
26
26
|
```bash
|
|
27
|
-
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/
|
|
27
|
+
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/v1/agents/{agentId}/messages \
|
|
28
28
|
-H "Authorization: Bearer xoxb-your-bot-token" \
|
|
29
29
|
-H "Content-Type: application/json" \
|
|
30
30
|
-d '{
|
|
31
31
|
"platform": "slack",
|
|
32
32
|
"channel": "general",
|
|
33
|
-
"
|
|
33
|
+
"content": "what is 2+2?"
|
|
34
34
|
}'
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
#### Multipart Request (With File Upload)
|
|
38
38
|
```bash
|
|
39
|
-
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/
|
|
39
|
+
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/v1/agents/{agentId}/messages \
|
|
40
40
|
-H "Authorization: Bearer xoxb-your-bot-token" \
|
|
41
41
|
-F "platform=slack" \
|
|
42
42
|
-F "channel=C12345678" \
|
|
43
|
-
-F "
|
|
43
|
+
-F "content=please review this file" \
|
|
44
44
|
-F "file=@/path/to/document.pdf"
|
|
45
45
|
```
|
|
46
46
|
|
|
@@ -50,7 +50,7 @@ curl -X POST http://localhost:{{GATEWAY_PORT}}/api/messaging/send \
|
|
|
50
50
|
|-------|----------|-------------|
|
|
51
51
|
| `platform` | Yes | Platform name (currently: "slack") |
|
|
52
52
|
| `channel` | Yes | Channel ID (e.g., `C12345678`) or name (e.g., `general`, `#general`) |
|
|
53
|
-
| `
|
|
53
|
+
| `content` | Yes | Message text to send (use `@me` to mention the bot) |
|
|
54
54
|
| `threadId` | No | Thread ID to reply to (for thread continuity) |
|
|
55
55
|
| `files` | No | File attachments (multipart/form-data, up to 10 files) |
|
|
56
56
|
|
|
@@ -76,7 +76,7 @@ Use the `@me` placeholder to mention the bot in a platform-agnostic way:
|
|
|
76
76
|
|
|
77
77
|
```json
|
|
78
78
|
{
|
|
79
|
-
"
|
|
79
|
+
"content": "@me what is 2+2?"
|
|
80
80
|
}
|
|
81
81
|
```
|
|
82
82
|
|
|
@@ -90,39 +90,39 @@ If you don't want to mention the bot, simply omit `@me` from your message.
|
|
|
90
90
|
### Example: Simple Text Message (with @me)
|
|
91
91
|
|
|
92
92
|
```bash
|
|
93
|
-
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/
|
|
93
|
+
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/v1/agents/{agentId}/messages \
|
|
94
94
|
-H "Authorization: Bearer xoxb-your-bot-token" \
|
|
95
95
|
-H "Content-Type: application/json" \
|
|
96
96
|
-d '{
|
|
97
97
|
"platform": "slack",
|
|
98
98
|
"channel": "general",
|
|
99
|
-
"
|
|
99
|
+
"content": "@me what is 2+2?"
|
|
100
100
|
}'
|
|
101
101
|
```
|
|
102
102
|
|
|
103
103
|
### Example: Without Bot Mention
|
|
104
104
|
|
|
105
105
|
```bash
|
|
106
|
-
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/
|
|
106
|
+
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/v1/agents/{agentId}/messages \
|
|
107
107
|
-H "Authorization: Bearer xoxb-your-bot-token" \
|
|
108
108
|
-H "Content-Type: application/json" \
|
|
109
109
|
-d '{
|
|
110
110
|
"platform": "slack",
|
|
111
111
|
"channel": "general",
|
|
112
|
-
"
|
|
112
|
+
"content": "just a regular message"
|
|
113
113
|
}'
|
|
114
114
|
```
|
|
115
115
|
|
|
116
116
|
### Example: Thread Reply
|
|
117
117
|
|
|
118
118
|
```bash
|
|
119
|
-
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/
|
|
119
|
+
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/v1/agents/{agentId}/messages \
|
|
120
120
|
-H "Authorization: Bearer xoxb-your-bot-token" \
|
|
121
121
|
-H "Content-Type: application/json" \
|
|
122
122
|
-d '{
|
|
123
123
|
"platform": "slack",
|
|
124
124
|
"channel": "C12345678",
|
|
125
|
-
"
|
|
125
|
+
"content": "tell me more about that",
|
|
126
126
|
"threadId": "1234567890.123456"
|
|
127
127
|
}'
|
|
128
128
|
```
|
|
@@ -130,22 +130,22 @@ curl -X POST http://localhost:{{GATEWAY_PORT}}/api/messaging/send \
|
|
|
130
130
|
### Example: Single File Upload
|
|
131
131
|
|
|
132
132
|
```bash
|
|
133
|
-
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/
|
|
133
|
+
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/v1/agents/{agentId}/messages \
|
|
134
134
|
-H "Authorization: Bearer xoxb-your-bot-token" \
|
|
135
135
|
-F "platform=slack" \
|
|
136
136
|
-F "channel=dev-channel" \
|
|
137
|
-
-F "
|
|
137
|
+
-F "content=@me analyze this CSV" \
|
|
138
138
|
-F "files=@data.csv"
|
|
139
139
|
```
|
|
140
140
|
|
|
141
141
|
### Example: Multiple File Upload
|
|
142
142
|
|
|
143
143
|
```bash
|
|
144
|
-
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/
|
|
144
|
+
curl -X POST http://localhost:{{GATEWAY_PORT}}/api/v1/agents/{agentId}/messages \
|
|
145
145
|
-H "Authorization: Bearer xoxb-your-bot-token" \
|
|
146
146
|
-F "platform=slack" \
|
|
147
147
|
-F "channel=dev-channel" \
|
|
148
|
-
-F "
|
|
148
|
+
-F "content=@me review these documents" \
|
|
149
149
|
-F "files=@document1.pdf" \
|
|
150
150
|
-F "files=@document2.pdf" \
|
|
151
151
|
-F "files=@spreadsheet.xlsx"
|
|
@@ -196,13 +196,13 @@ Testing a full conversation:
|
|
|
196
196
|
|
|
197
197
|
```bash
|
|
198
198
|
# Step 1: Send initial message
|
|
199
|
-
RESPONSE=$(curl -s -X POST http://localhost:{{GATEWAY_PORT}}/api/
|
|
199
|
+
RESPONSE=$(curl -s -X POST http://localhost:{{GATEWAY_PORT}}/api/v1/agents/{agentId}/messages \
|
|
200
200
|
-H "Authorization: Bearer $SLACK_BOT_TOKEN" \
|
|
201
201
|
-H "Content-Type: application/json" \
|
|
202
202
|
-d '{
|
|
203
203
|
"platform": "slack",
|
|
204
204
|
"channel": "test-channel",
|
|
205
|
-
"
|
|
205
|
+
"content": "@me give me three options"
|
|
206
206
|
}')
|
|
207
207
|
|
|
208
208
|
THREAD_ID=$(echo $RESPONSE | jq -r '.threadId')
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lobu/cli",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.6",
|
|
4
4
|
"description": "CLI for deploying and managing AI agents on Lobu",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -30,7 +30,6 @@
|
|
|
30
30
|
"open": "^10.1.0",
|
|
31
31
|
"ora": "^8.0.1",
|
|
32
32
|
"smol-toml": "^1.3.1",
|
|
33
|
-
"yaml": "^2.3.4",
|
|
34
33
|
"zod": "^3.24.0"
|
|
35
34
|
},
|
|
36
35
|
"devDependencies": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/login.test.ts"],"names":[],"mappings":""}
|