myaiforone 1.1.41 → 1.1.44
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/agents/platform/agentcreator/CLAUDE.md +2 -0
- package/agents/platform/hub/CLAUDE.md +2 -1
- package/bin/cli.js +7 -0
- package/config.example.json +161 -52
- package/dist/auth-helper.d.ts +32 -0
- package/dist/auth-helper.d.ts.map +1 -0
- package/dist/auth-helper.js +49 -0
- package/dist/auth-helper.js.map +1 -0
- package/dist/config.d.ts +34 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +47 -3
- package/dist/config.js.map +1 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +14 -2
- package/dist/executor.js.map +1 -1
- package/dist/index.js +54 -2
- package/dist/index.js.map +1 -1
- package/dist/license.d.ts +6 -0
- package/dist/license.d.ts.map +1 -1
- package/dist/license.js +11 -0
- package/dist/license.js.map +1 -1
- package/dist/mcp-http.d.ts +34 -0
- package/dist/mcp-http.d.ts.map +1 -0
- package/dist/mcp-http.js +206 -0
- package/dist/mcp-http.js.map +1 -0
- package/dist/web-ui.d.ts +6 -0
- package/dist/web-ui.d.ts.map +1 -1
- package/dist/web-ui.js +737 -51
- package/dist/web-ui.js.map +1 -1
- package/docs/SharedAgentArchitecture.md +99 -16
- package/docs/SharedAgentBuildChecklist.md +119 -0
- package/docs/TeamGatewaysBuildChecklist.md +240 -0
- package/docs/superpowers/specs/2026-04-16-per-gateway-settings-modal-design.md +142 -0
- package/docs/user-guide.md +151 -4
- package/mcp-catalog.json +16 -8
- package/package.json +1 -1
- package/public/activity.html +1 -0
- package/public/admin.html +854 -1
- package/public/agent-dashboard.html +49 -2
- package/public/api-docs.html +34 -3
- package/public/auth.js +165 -0
- package/public/automations.html +1 -0
- package/public/changelog.html +1 -0
- package/public/gym.html +1 -0
- package/public/home.html +1 -0
- package/public/home2.html +1 -0
- package/public/index.html +1 -0
- package/public/lab.html +1 -0
- package/public/library.html +1 -0
- package/public/marketplace.html +1 -0
- package/public/mcp-docs.html +26 -2
- package/public/mini.html +1 -0
- package/public/monitor.html +1 -0
- package/public/org.html +47 -2
- package/public/projects.html +1 -0
- package/public/settings.html +1 -0
- package/public/tasks.html +1 -0
- package/public/user-guide.html +1 -0
- package/server/mcp-server/dist/index.d.ts +3 -1
- package/server/mcp-server/dist/index.js +152 -4
- package/server/mcp-server/dist/lib/api-client.d.ts +14 -1
- package/server/mcp-server/dist/lib/api-client.js +28 -3
- package/server/mcp-server/index.ts +170 -4
- package/server/mcp-server/lib/api-client.ts +41 -4
- package/src/auth-helper.ts +64 -0
- package/src/config.ts +84 -3
- package/src/executor.ts +14 -2
- package/src/index.ts +56 -2
- package/src/license.ts +11 -0
- package/src/mcp-http.ts +267 -0
- package/src/web-ui.ts +721 -42
|
@@ -63,6 +63,8 @@ Every agent in `config.json` has these fields:
|
|
|
63
63
|
- `advancedMemory` — if true, enables semantic memory with daily journals + vector search
|
|
64
64
|
- `wiki` — if true, enables wiki learning. The agent saves learned facts to `learned.md` after conversations. Use with `wikiSync` for automatic merging into `context.md`
|
|
65
65
|
- `wikiSync` — `{ enabled: true, schedule: "0 0 * * *" }` — scheduled sync that merges `learned.md` into `context.md` on a cron schedule
|
|
66
|
+
- `shared` — if true, agent is stored under `SharedAgents/` instead of `PersonalAgents/`. Requires `sharedAgentsEnabled: true` in service config AND a license with the `sharedAgents` feature
|
|
67
|
+
- `conversationLogMode` — `"shared"` (default, one `conversation_log.jsonl` for all senders) or `"per-user"` (separate `conversation_log_<senderId>.jsonl` per user, for multi-user shared agents)
|
|
66
68
|
- `autonomousCapable` — if true, agent can run without user approval for tool calls
|
|
67
69
|
- `allowedTools` — which Claude tools the agent can use (Read, Edit, Write, Glob, Grep, Bash, WebFetch, WebSearch, etc.)
|
|
68
70
|
- `mentionAliases` — how users address the agent in group chats (e.g., `@financer`)
|
|
@@ -30,6 +30,7 @@ Your job: understand what the user wants, pick the right MCP tool, execute it, a
|
|
|
30
30
|
**Files** → `browse_drive` · `read_drive_file` · `search_drive` · `upload_file` · `list_agent_files`
|
|
31
31
|
**Accounts** → `list_accounts` · `start_account_login` · `submit_login_code` · `check_account_status`
|
|
32
32
|
**Config** → `get_service_config` · `update_service_config` · `restart_service` · `set_model` · `test_provider`
|
|
33
|
+
**Shared Agents** → `get_storage_info` · `update_storage_config` · `get_conversation_senders` · `get_conversation_log`
|
|
33
34
|
**Auth** → `pair_sender` · `unpair_sender` · `list_paired_senders`
|
|
34
35
|
**Cost** → `get_agent_cost` · `get_all_costs`
|
|
35
36
|
**Misc** → `get_profile` · `update_profile` · `trigger_wiki_sync` · `trigger_heartbeat` · `get_gym_feed`
|
|
@@ -37,7 +38,7 @@ Your job: understand what the user wants, pick the right MCP tool, execute it, a
|
|
|
37
38
|
|
|
38
39
|
## Complex Params (non-obvious only)
|
|
39
40
|
|
|
40
|
-
**`create_agent`** — required: `agentId`, `name`, `alias` · optional: `description`, `workspace`, `organization`, `persistent`, `streaming`, `advancedMemory`, `wiki`, `wikiSync`, `tools[]`, `skills[]`, `mcps[]`, `agentClass`, `timeout`
|
|
41
|
+
**`create_agent`** — required: `agentId`, `name`, `alias` · optional: `description`, `workspace`, `organization`, `persistent`, `streaming`, `advancedMemory`, `wiki`, `wikiSync`, `tools[]`, `skills[]`, `mcps[]`, `agentClass`, `timeout`, `shared` (boolean), `conversationLogMode` ("shared"|"per-user")
|
|
41
42
|
|
|
42
43
|
**`create_goal`** — `agentId`, `id`, `description`, `heartbeat` (cron expr for frequency) · optional: `successCriteria`, `instructions`
|
|
43
44
|
|
package/bin/cli.js
CHANGED
|
@@ -440,6 +440,13 @@ function registerAgents() {
|
|
|
440
440
|
function build() {
|
|
441
441
|
printChecklist();
|
|
442
442
|
|
|
443
|
+
// If dist/ already exists (npm install from registry ships prebuilt), skip build.
|
|
444
|
+
// This avoids needing tsc (a devDependency) on consumer machines.
|
|
445
|
+
if (existsSync(join(PROJECT_ROOT, 'dist', 'index.js'))) {
|
|
446
|
+
stepDone('Build already present (prebuilt)');
|
|
447
|
+
return;
|
|
448
|
+
}
|
|
449
|
+
|
|
443
450
|
console.log(' Running: npm run build');
|
|
444
451
|
console.log('');
|
|
445
452
|
|
package/config.example.json
CHANGED
|
@@ -27,9 +27,16 @@
|
|
|
27
27
|
},
|
|
28
28
|
"gymEnabled": true,
|
|
29
29
|
"gymOnlyMode": false,
|
|
30
|
-
"aibriefingEnabled": false
|
|
30
|
+
"aibriefingEnabled": false,
|
|
31
|
+
"sharedAgentsEnabled": false,
|
|
32
|
+
"_comment_sharedAgentsDir": "Override SharedAgents folder path (default: ~/Desktop/MyAIforOne Drive/SharedAgents)",
|
|
33
|
+
"_comment_auth": "Enable auth for shared gateway deployments. Off by default — personal gateways stay open.",
|
|
34
|
+
"auth": {
|
|
35
|
+
"enabled": false,
|
|
36
|
+
"tokens": [],
|
|
37
|
+
"webPassword": null
|
|
38
|
+
}
|
|
31
39
|
},
|
|
32
|
-
|
|
33
40
|
"channels": {
|
|
34
41
|
"imessage": {
|
|
35
42
|
"enabled": false,
|
|
@@ -69,14 +76,14 @@
|
|
|
69
76
|
}
|
|
70
77
|
}
|
|
71
78
|
},
|
|
72
|
-
|
|
73
79
|
"mcps": {
|
|
74
80
|
"_comment_platform_mcps": "REQUIRED: These platform MCPs must be registered on every installation. myaiforone-local is the gateway's own MCP server (agents, tasks, projects, orgs). aigym-platform connects to AI Gym for training programs and learner progress. Assign them to specific agents via each agent's mcps array — they are NOT auto-assigned to all agents.",
|
|
75
|
-
|
|
76
81
|
"myaiforone-local": {
|
|
77
82
|
"type": "stdio",
|
|
78
83
|
"command": "node",
|
|
79
|
-
"args": [
|
|
84
|
+
"args": [
|
|
85
|
+
"./server/mcp-server/dist/index.js"
|
|
86
|
+
],
|
|
80
87
|
"env": {
|
|
81
88
|
"MYAGENT_API_URL": "http://localhost:4888"
|
|
82
89
|
}
|
|
@@ -84,21 +91,24 @@
|
|
|
84
91
|
"aigym-platform": {
|
|
85
92
|
"type": "http",
|
|
86
93
|
"url": "https://app.aigym.studio/mcp",
|
|
87
|
-
"headers": {
|
|
94
|
+
"headers": {
|
|
95
|
+
"Authorization": "Bearer ${AIGYM_API_KEY}"
|
|
96
|
+
}
|
|
88
97
|
},
|
|
89
|
-
|
|
90
98
|
"aiforone_computeruse": {
|
|
91
99
|
"type": "stdio",
|
|
92
100
|
"command": "node",
|
|
93
|
-
"args": [
|
|
101
|
+
"args": [
|
|
102
|
+
"./mcps/aiforone_computeruse/server.js"
|
|
103
|
+
]
|
|
94
104
|
},
|
|
95
|
-
|
|
96
105
|
"_comment_optional_mcps": "Optional MCPs below — add API keys for the services you use. Agents reference these by name in their mcps array.",
|
|
97
|
-
|
|
98
106
|
"finney": {
|
|
99
107
|
"type": "http",
|
|
100
108
|
"url": "https://finneymcp.agenticledger.ai/mcp",
|
|
101
|
-
"headers": {
|
|
109
|
+
"headers": {
|
|
110
|
+
"Authorization": "Bearer ${FINNEY_API_KEY}"
|
|
111
|
+
}
|
|
102
112
|
},
|
|
103
113
|
"lighthouse": {
|
|
104
114
|
"type": "http",
|
|
@@ -107,182 +117,254 @@
|
|
|
107
117
|
"stripe": {
|
|
108
118
|
"type": "http",
|
|
109
119
|
"url": "https://stripemcp.agenticledger.ai/mcp",
|
|
110
|
-
"headers": {
|
|
120
|
+
"headers": {
|
|
121
|
+
"Authorization": "Bearer ${STRIPE_API_KEY}"
|
|
122
|
+
}
|
|
111
123
|
},
|
|
112
124
|
"quickbooks": {
|
|
113
125
|
"type": "http",
|
|
114
126
|
"url": "https://qbomcp.agenticledger.ai/mcp",
|
|
115
|
-
"headers": {
|
|
127
|
+
"headers": {
|
|
128
|
+
"Authorization": "Bearer ${QBO_ACCESS_TOKEN}"
|
|
129
|
+
}
|
|
116
130
|
},
|
|
117
131
|
"xero": {
|
|
118
132
|
"type": "http",
|
|
119
133
|
"url": "https://xeromcp.agenticledger.ai/mcp",
|
|
120
|
-
"headers": {
|
|
134
|
+
"headers": {
|
|
135
|
+
"Authorization": "Bearer ${XERO_AUTH}"
|
|
136
|
+
}
|
|
121
137
|
},
|
|
122
138
|
"netsuite": {
|
|
123
139
|
"type": "http",
|
|
124
140
|
"url": "https://netsuitemcp.agenticledger.ai/mcp",
|
|
125
|
-
"headers": {
|
|
141
|
+
"headers": {
|
|
142
|
+
"Authorization": "Bearer ${NETSUITE_AUTH}"
|
|
143
|
+
}
|
|
126
144
|
},
|
|
127
145
|
"plaid": {
|
|
128
146
|
"type": "http",
|
|
129
147
|
"url": "https://plaidmcp.agenticledger.ai/mcp",
|
|
130
|
-
"headers": {
|
|
148
|
+
"headers": {
|
|
149
|
+
"Authorization": "Bearer ${PLAID_API_KEY}"
|
|
150
|
+
}
|
|
131
151
|
},
|
|
132
152
|
"mercury": {
|
|
133
153
|
"type": "http",
|
|
134
154
|
"url": "https://mercurymcp.agenticledger.ai/mcp",
|
|
135
|
-
"headers": {
|
|
155
|
+
"headers": {
|
|
156
|
+
"Authorization": "Bearer ${MERCURY_API_TOKEN}"
|
|
157
|
+
}
|
|
136
158
|
},
|
|
137
159
|
"brex": {
|
|
138
160
|
"type": "http",
|
|
139
161
|
"url": "https://brexmcp.agenticledger.ai/mcp",
|
|
140
|
-
"headers": {
|
|
162
|
+
"headers": {
|
|
163
|
+
"Authorization": "Bearer ${BREX_API_TOKEN}"
|
|
164
|
+
}
|
|
141
165
|
},
|
|
142
166
|
"ramp": {
|
|
143
167
|
"type": "http",
|
|
144
168
|
"url": "https://rampmcp.agenticledger.ai/mcp",
|
|
145
|
-
"headers": {
|
|
169
|
+
"headers": {
|
|
170
|
+
"Authorization": "Bearer ${RAMP_AUTH}"
|
|
171
|
+
}
|
|
146
172
|
},
|
|
147
173
|
"expensify": {
|
|
148
174
|
"type": "http",
|
|
149
175
|
"url": "https://expensifymcp.agenticledger.ai/mcp",
|
|
150
|
-
"headers": {
|
|
176
|
+
"headers": {
|
|
177
|
+
"Authorization": "Bearer ${EXPENSIFY_AUTH}"
|
|
178
|
+
}
|
|
151
179
|
},
|
|
152
180
|
"billcom": {
|
|
153
181
|
"type": "http",
|
|
154
182
|
"url": "https://billcommcp.agenticledger.ai/mcp",
|
|
155
|
-
"headers": {
|
|
183
|
+
"headers": {
|
|
184
|
+
"Authorization": "Bearer ${BILLCOM_AUTH}"
|
|
185
|
+
}
|
|
156
186
|
},
|
|
157
187
|
"paypal": {
|
|
158
188
|
"type": "http",
|
|
159
189
|
"url": "https://paypalmcp.agenticledger.ai/mcp",
|
|
160
|
-
"headers": {
|
|
190
|
+
"headers": {
|
|
191
|
+
"Authorization": "Bearer ${PAYPAL_AUTH}"
|
|
192
|
+
}
|
|
161
193
|
},
|
|
162
194
|
"square": {
|
|
163
195
|
"type": "http",
|
|
164
196
|
"url": "https://squaremcp.agenticledger.ai/mcp",
|
|
165
|
-
"headers": {
|
|
197
|
+
"headers": {
|
|
198
|
+
"Authorization": "Bearer ${SQUARE_ACCESS_TOKEN}"
|
|
199
|
+
}
|
|
166
200
|
},
|
|
167
201
|
"modern-treasury": {
|
|
168
202
|
"type": "http",
|
|
169
203
|
"url": "https://moderntreasurymcp.agenticledger.ai/mcp",
|
|
170
|
-
"headers": {
|
|
204
|
+
"headers": {
|
|
205
|
+
"Authorization": "Bearer ${MODERN_TREASURY_API_KEY}"
|
|
206
|
+
}
|
|
171
207
|
},
|
|
172
208
|
"avalara": {
|
|
173
209
|
"type": "http",
|
|
174
210
|
"url": "https://avalaramcp.agenticledger.ai/mcp",
|
|
175
|
-
"headers": {
|
|
211
|
+
"headers": {
|
|
212
|
+
"Authorization": "Bearer ${AVALARA_AUTH}"
|
|
213
|
+
}
|
|
176
214
|
},
|
|
177
215
|
"gusto": {
|
|
178
216
|
"type": "http",
|
|
179
217
|
"url": "https://gustomcp.agenticledger.ai/mcp",
|
|
180
|
-
"headers": {
|
|
218
|
+
"headers": {
|
|
219
|
+
"Authorization": "Bearer ${GUSTO_ACCESS_TOKEN}"
|
|
220
|
+
}
|
|
181
221
|
},
|
|
182
222
|
"chargebee": {
|
|
183
223
|
"type": "http",
|
|
184
224
|
"url": "https://chargebeemcp.agenticledger.ai/mcp",
|
|
185
|
-
"headers": {
|
|
225
|
+
"headers": {
|
|
226
|
+
"Authorization": "Bearer ${CHARGEBEE_AUTH}"
|
|
227
|
+
}
|
|
186
228
|
},
|
|
187
229
|
"hubspot": {
|
|
188
230
|
"type": "http",
|
|
189
231
|
"url": "https://hubspotmcp.agenticledger.ai/mcp",
|
|
190
|
-
"headers": {
|
|
232
|
+
"headers": {
|
|
233
|
+
"Authorization": "Bearer ${HUBSPOT_ACCESS_TOKEN}"
|
|
234
|
+
}
|
|
191
235
|
},
|
|
192
236
|
"karbon": {
|
|
193
237
|
"type": "http",
|
|
194
238
|
"url": "https://karbonmcp.agenticledger.ai/mcp",
|
|
195
|
-
"headers": {
|
|
239
|
+
"headers": {
|
|
240
|
+
"Authorization": "Bearer ${KARBON_BEARER_TOKEN}"
|
|
241
|
+
}
|
|
196
242
|
},
|
|
197
243
|
"smartsheets": {
|
|
198
244
|
"type": "http",
|
|
199
245
|
"url": "https://smartsheetsmcp.agenticledger.ai/mcp",
|
|
200
|
-
"headers": {
|
|
246
|
+
"headers": {
|
|
247
|
+
"Authorization": "Bearer ${SMARTSHEET_API_KEY}"
|
|
248
|
+
}
|
|
201
249
|
},
|
|
202
250
|
"notion-finance": {
|
|
203
251
|
"type": "http",
|
|
204
252
|
"url": "https://notionfinancemcp.agenticledger.ai/mcp",
|
|
205
|
-
"headers": {
|
|
253
|
+
"headers": {
|
|
254
|
+
"Authorization": "Bearer ${NOTION_API_KEY}"
|
|
255
|
+
}
|
|
206
256
|
},
|
|
207
257
|
"granola": {
|
|
208
258
|
"type": "http",
|
|
209
259
|
"url": "https://granolamcp.agenticledger.ai/mcp",
|
|
210
|
-
"headers": {
|
|
260
|
+
"headers": {
|
|
261
|
+
"Authorization": "Bearer ${GRANOLA_API_KEY}"
|
|
262
|
+
}
|
|
211
263
|
},
|
|
212
264
|
"fireflies": {
|
|
213
265
|
"type": "http",
|
|
214
266
|
"url": "https://firefliesmcp.agenticledger.ai/mcp",
|
|
215
|
-
"headers": {
|
|
267
|
+
"headers": {
|
|
268
|
+
"Authorization": "Bearer ${FIREFLIES_API_KEY}"
|
|
269
|
+
}
|
|
216
270
|
},
|
|
217
271
|
"floqast": {
|
|
218
272
|
"type": "http",
|
|
219
273
|
"url": "https://floqastmcp.agenticledger.ai/mcp",
|
|
220
|
-
"headers": {
|
|
274
|
+
"headers": {
|
|
275
|
+
"Authorization": "Bearer ${FLOQAST_API_KEY}"
|
|
276
|
+
}
|
|
221
277
|
},
|
|
222
278
|
"bitwave": {
|
|
223
279
|
"type": "http",
|
|
224
280
|
"url": "https://bitwavemcp.agenticledger.ai/mcp",
|
|
225
|
-
"headers": {
|
|
281
|
+
"headers": {
|
|
282
|
+
"Authorization": "Bearer ${BITWAVE_AUTH}"
|
|
283
|
+
}
|
|
226
284
|
},
|
|
227
285
|
"tres": {
|
|
228
286
|
"type": "http",
|
|
229
287
|
"url": "https://tresmcp.agenticledger.ai/mcp",
|
|
230
|
-
"headers": {
|
|
288
|
+
"headers": {
|
|
289
|
+
"Authorization": "Bearer ${TRES_AUTH}"
|
|
290
|
+
}
|
|
231
291
|
},
|
|
232
292
|
"fireblocks": {
|
|
233
293
|
"type": "http",
|
|
234
294
|
"url": "https://fireblocksmcp.agenticledger.ai/mcp",
|
|
235
|
-
"headers": {
|
|
295
|
+
"headers": {
|
|
296
|
+
"Authorization": "Bearer ${FIREBLOCKS_AUTH}"
|
|
297
|
+
}
|
|
236
298
|
},
|
|
237
299
|
"catalyx-wallet": {
|
|
238
300
|
"type": "http",
|
|
239
301
|
"url": "https://catalyxwalletmcp.agenticledger.ai/mcp",
|
|
240
|
-
"headers": {
|
|
302
|
+
"headers": {
|
|
303
|
+
"Authorization": "Bearer ${CATALYX_AUTH}"
|
|
304
|
+
}
|
|
241
305
|
},
|
|
242
306
|
"enterprise-wallet": {
|
|
243
307
|
"type": "http",
|
|
244
308
|
"url": "https://enterprisewalletmcp.agenticledger.ai/mcp",
|
|
245
|
-
"headers": {
|
|
309
|
+
"headers": {
|
|
310
|
+
"Authorization": "Bearer ${EWM_API_KEY}"
|
|
311
|
+
}
|
|
246
312
|
},
|
|
247
313
|
"lightspark-sdk": {
|
|
248
314
|
"type": "http",
|
|
249
315
|
"url": "https://lightsparksdkmcp.agenticledger.ai/mcp",
|
|
250
|
-
"headers": {
|
|
316
|
+
"headers": {
|
|
317
|
+
"Authorization": "Bearer ${LIGHTSPARK_SDK_AUTH}"
|
|
318
|
+
}
|
|
251
319
|
},
|
|
252
320
|
"lightspark-grid": {
|
|
253
321
|
"type": "http",
|
|
254
322
|
"url": "https://lightsparkgridmcp.agenticledger.ai/mcp",
|
|
255
|
-
"headers": {
|
|
323
|
+
"headers": {
|
|
324
|
+
"Authorization": "Bearer ${LIGHTSPARK_GRID_AUTH}"
|
|
325
|
+
}
|
|
256
326
|
},
|
|
257
327
|
"ccview": {
|
|
258
328
|
"type": "http",
|
|
259
329
|
"url": "https://ccviewmcp.agenticledger.ai/mcp",
|
|
260
|
-
"headers": {
|
|
330
|
+
"headers": {
|
|
331
|
+
"Authorization": "Bearer ${CCVIEW_API_KEY}"
|
|
332
|
+
}
|
|
261
333
|
},
|
|
262
334
|
"metabase": {
|
|
263
335
|
"type": "http",
|
|
264
336
|
"url": "https://metabasemcp.agenticledger.ai/mcp",
|
|
265
|
-
"headers": {
|
|
337
|
+
"headers": {
|
|
338
|
+
"Authorization": "Bearer ${METABASE_API_KEY}"
|
|
339
|
+
}
|
|
266
340
|
},
|
|
267
341
|
"cubedev": {
|
|
268
342
|
"type": "http",
|
|
269
343
|
"url": "https://cubedevmcp.agenticledger.ai/mcp",
|
|
270
|
-
"headers": {
|
|
344
|
+
"headers": {
|
|
345
|
+
"Authorization": "Bearer ${CUBE_API_TOKEN}"
|
|
346
|
+
}
|
|
271
347
|
},
|
|
272
348
|
"p2p-lambda": {
|
|
273
349
|
"type": "http",
|
|
274
350
|
"url": "https://p2plambdamcp.agenticledger.ai/mcp",
|
|
275
|
-
"headers": {
|
|
351
|
+
"headers": {
|
|
352
|
+
"Authorization": "Bearer ${P2P_LAMBDA_KEY}"
|
|
353
|
+
}
|
|
276
354
|
},
|
|
277
355
|
"github": {
|
|
278
356
|
"type": "http",
|
|
279
357
|
"url": "https://api.githubcopilot.com/mcp/",
|
|
280
|
-
"headers": {
|
|
358
|
+
"headers": {
|
|
359
|
+
"Authorization": "Bearer ${GITHUB_PERSONAL_ACCESS_TOKEN}"
|
|
360
|
+
}
|
|
281
361
|
},
|
|
282
362
|
"greptile": {
|
|
283
363
|
"type": "http",
|
|
284
364
|
"url": "https://api.greptile.com/mcp",
|
|
285
|
-
"headers": {
|
|
365
|
+
"headers": {
|
|
366
|
+
"Authorization": "Bearer ${GREPTILE_API_KEY}"
|
|
367
|
+
}
|
|
286
368
|
},
|
|
287
369
|
"gitlab": {
|
|
288
370
|
"type": "http",
|
|
@@ -295,11 +377,36 @@
|
|
|
295
377
|
"supabase": {
|
|
296
378
|
"type": "http",
|
|
297
379
|
"url": "https://mcp.supabase.com/mcp"
|
|
380
|
+
},
|
|
381
|
+
"youtube-transcript": {
|
|
382
|
+
"type": "http",
|
|
383
|
+
"url": "https://youtube-transcriptmcp.agenticledger.ai/mcp",
|
|
384
|
+
"headers": {
|
|
385
|
+
"Authorization": "Bearer youtube"
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
"agents": {
|
|
390
|
+
"_shared-agent-example (remove underscore to activate)": {
|
|
391
|
+
"name": "Finance Analyst",
|
|
392
|
+
"description": "Shared finance agent for the whole team",
|
|
393
|
+
"agentHome": "~/Desktop/MyAIforOne Drive/SharedAgents/FinanceDept/finance-analyst",
|
|
394
|
+
"workspace": "~/Desktop/MyAIforOne Drive/SharedAgents/FinanceDept/finance-analyst",
|
|
395
|
+
"claudeMd": "~/Desktop/MyAIforOne Drive/SharedAgents/FinanceDept/finance-analyst/CLAUDE.md",
|
|
396
|
+
"memoryDir": "~/Desktop/MyAIforOne Drive/SharedAgents/FinanceDept/finance-analyst/memory",
|
|
397
|
+
"shared": true,
|
|
398
|
+
"conversationLogMode": "shared",
|
|
399
|
+
"allowedTools": [
|
|
400
|
+
"Read",
|
|
401
|
+
"Write",
|
|
402
|
+
"Edit",
|
|
403
|
+
"Bash",
|
|
404
|
+
"Glob",
|
|
405
|
+
"Grep"
|
|
406
|
+
],
|
|
407
|
+
"routes": []
|
|
298
408
|
}
|
|
299
409
|
},
|
|
300
|
-
|
|
301
|
-
"agents": {},
|
|
302
|
-
|
|
303
410
|
"defaultAgent": null,
|
|
304
411
|
"defaultSkills": [
|
|
305
412
|
"opProjectCreate",
|
|
@@ -324,11 +431,13 @@
|
|
|
324
431
|
"sop_webartifactsbuilder",
|
|
325
432
|
"sop_xlsx"
|
|
326
433
|
],
|
|
327
|
-
"defaultMcps": [
|
|
434
|
+
"defaultMcps": [
|
|
435
|
+
"aiforone_computeruse"
|
|
436
|
+
],
|
|
328
437
|
"deployment": {
|
|
329
438
|
"provider": "railway",
|
|
330
439
|
"deployToken": "",
|
|
331
440
|
"githubOrg": "",
|
|
332
441
|
"githubToken": ""
|
|
333
442
|
}
|
|
334
|
-
}
|
|
443
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared bearer-token validation used by both /api/* (web-ui.ts) and /mcp
|
|
3
|
+
* (mcp-http.ts). Keeps the auth model in one place so the two endpoints can
|
|
4
|
+
* never drift apart.
|
|
5
|
+
*
|
|
6
|
+
* The web UI's authMiddleware in src/web-ui.ts has its own copy that also
|
|
7
|
+
* stamps lastUsedAt and synthesizes a virtual ApiKey for legacy tokens; this
|
|
8
|
+
* module covers the read-only validation path that /mcp needs.
|
|
9
|
+
*/
|
|
10
|
+
import type { AppConfig, ApiKey } from "./config.js";
|
|
11
|
+
export interface AuthMatchResult {
|
|
12
|
+
/** The matching ApiKey record (real or synthesized for legacy tokens). */
|
|
13
|
+
apiKey: ApiKey;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Returns true when auth is gated on (i.e. tokens are required to call the
|
|
17
|
+
* gateway). When false, /mcp should match the open behavior of /api/*.
|
|
18
|
+
*/
|
|
19
|
+
export declare function isAuthEnabled(config: AppConfig): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Match a raw bearer token against the configured apiKeys[] (preferred) and
|
|
22
|
+
* legacy auth.tokens[]. Returns the matching record or null. When a legacy
|
|
23
|
+
* token matches, a synthesized record (id="legacy") is returned so callers
|
|
24
|
+
* still have a uniform shape to work with.
|
|
25
|
+
*/
|
|
26
|
+
export declare function matchToken(config: AppConfig, token: string | null): ApiKey | null;
|
|
27
|
+
/**
|
|
28
|
+
* Extract the bearer token from an HTTP Authorization header value.
|
|
29
|
+
* Returns null if the header is missing or not in `Bearer <token>` form.
|
|
30
|
+
*/
|
|
31
|
+
export declare function extractBearer(header: string | undefined | null): string | null;
|
|
32
|
+
//# sourceMappingURL=auth-helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-helper.d.ts","sourceRoot":"","sources":["../src/auth-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAGxD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAuBjF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAG9E"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns true when auth is gated on (i.e. tokens are required to call the
|
|
3
|
+
* gateway). When false, /mcp should match the open behavior of /api/*.
|
|
4
|
+
*/
|
|
5
|
+
export function isAuthEnabled(config) {
|
|
6
|
+
const auth = config.service.auth;
|
|
7
|
+
return !!auth?.enabled;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Match a raw bearer token against the configured apiKeys[] (preferred) and
|
|
11
|
+
* legacy auth.tokens[]. Returns the matching record or null. When a legacy
|
|
12
|
+
* token matches, a synthesized record (id="legacy") is returned so callers
|
|
13
|
+
* still have a uniform shape to work with.
|
|
14
|
+
*/
|
|
15
|
+
export function matchToken(config, token) {
|
|
16
|
+
if (!token)
|
|
17
|
+
return null;
|
|
18
|
+
const keys = config.service.apiKeys || [];
|
|
19
|
+
for (const k of keys) {
|
|
20
|
+
if (k.key === token) {
|
|
21
|
+
// Best-effort lastUsedAt stamp — the disk persistence happens elsewhere
|
|
22
|
+
// (web-ui.ts saveConfigToDisk on next admin view). We still update the
|
|
23
|
+
// in-memory record so downstream readers see fresh info.
|
|
24
|
+
k.lastUsedAt = new Date().toISOString();
|
|
25
|
+
return k;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const auth = config.service.auth;
|
|
29
|
+
if (auth?.tokens?.includes(token)) {
|
|
30
|
+
return {
|
|
31
|
+
id: "legacy",
|
|
32
|
+
name: "Legacy Token",
|
|
33
|
+
key: token,
|
|
34
|
+
createdAt: new Date(0).toISOString(),
|
|
35
|
+
scopes: ["*"],
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Extract the bearer token from an HTTP Authorization header value.
|
|
42
|
+
* Returns null if the header is missing or not in `Bearer <token>` form.
|
|
43
|
+
*/
|
|
44
|
+
export function extractBearer(header) {
|
|
45
|
+
if (!header)
|
|
46
|
+
return null;
|
|
47
|
+
return header.startsWith("Bearer ") ? header.slice(7) : null;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=auth-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-helper.js","sourceRoot":"","sources":["../src/auth-helper.ts"],"names":[],"mappings":"AAgBA;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiB;IAC7C,MAAM,IAAI,GAAI,MAAM,CAAC,OAAe,CAAC,IAAyC,CAAC;IAC/E,OAAO,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC;AACzB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,MAAiB,EAAE,KAAoB;IAChE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,IAAI,GAAK,MAAM,CAAC,OAAe,CAAC,OAAoB,IAAI,EAAE,CAAC;IACjE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;YACpB,wEAAwE;YACxE,uEAAuE;YACvE,yDAAyD;YACzD,CAAC,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACxC,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAI,MAAM,CAAC,OAAe,CAAC,IAAyC,CAAC;IAC/E,IAAI,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO;YACL,EAAE,EAAE,QAAQ;YACZ,IAAI,EAAE,cAAc;YACpB,GAAG,EAAE,KAAK;YACV,SAAS,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YACpC,MAAM,EAAE,CAAC,GAAG,CAAC;SACd,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAiC;IAC7D,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -83,6 +83,8 @@ export interface AgentConfig {
|
|
|
83
83
|
platformAgent?: boolean;
|
|
84
84
|
agentClass?: "standard" | "platform" | "builder" | "gym";
|
|
85
85
|
executor?: string;
|
|
86
|
+
shared?: boolean;
|
|
87
|
+
conversationLogMode?: "shared" | "per-user";
|
|
86
88
|
}
|
|
87
89
|
export interface ChannelConfig {
|
|
88
90
|
enabled: boolean;
|
|
@@ -100,6 +102,7 @@ export interface ServiceConfig {
|
|
|
100
102
|
pairingCode?: string;
|
|
101
103
|
personalAgentsDir?: string;
|
|
102
104
|
personalRegistryDir?: string;
|
|
105
|
+
sharedAgentsDir?: string;
|
|
103
106
|
webUI?: WebUIConfig;
|
|
104
107
|
claudeAccounts?: Record<string, string>;
|
|
105
108
|
defaultClaudeAccount?: string;
|
|
@@ -110,9 +113,34 @@ export interface ServiceConfig {
|
|
|
110
113
|
gymEnabled?: boolean;
|
|
111
114
|
aibriefingEnabled?: boolean;
|
|
112
115
|
gymOnlyMode?: boolean;
|
|
116
|
+
sharedAgentsEnabled?: boolean;
|
|
117
|
+
auth?: {
|
|
118
|
+
enabled?: boolean;
|
|
119
|
+
tokens?: string[];
|
|
120
|
+
webPassword?: string;
|
|
121
|
+
};
|
|
122
|
+
apiKeys?: ApiKey[];
|
|
123
|
+
teamGateways?: TeamGateway[];
|
|
113
124
|
licenseKey?: string;
|
|
114
125
|
licenseUrl?: string;
|
|
115
126
|
}
|
|
127
|
+
export interface ApiKey {
|
|
128
|
+
id: string;
|
|
129
|
+
name: string;
|
|
130
|
+
key: string;
|
|
131
|
+
createdAt: string;
|
|
132
|
+
lastUsedAt?: string;
|
|
133
|
+
scopes: string[];
|
|
134
|
+
}
|
|
135
|
+
export interface TeamGateway {
|
|
136
|
+
id: string;
|
|
137
|
+
name: string;
|
|
138
|
+
url: string;
|
|
139
|
+
addedAt: string;
|
|
140
|
+
lastStatus?: "ok" | "offline" | "unauthorized" | "error";
|
|
141
|
+
lastStatusAt?: string;
|
|
142
|
+
lastStatusMessage?: string;
|
|
143
|
+
}
|
|
116
144
|
export interface AppConfig {
|
|
117
145
|
service: ServiceConfig;
|
|
118
146
|
channels: Record<string, ChannelConfig>;
|
|
@@ -129,8 +157,13 @@ export interface AppConfig {
|
|
|
129
157
|
};
|
|
130
158
|
}
|
|
131
159
|
export declare function loadConfig(configPath: string): AppConfig;
|
|
132
|
-
/** Resolve the PersonalAgents directory from config, falling back to ~/Desktop/MyAIforOne Drive/PersonalAgents */
|
|
133
160
|
export declare function getPersonalAgentsDir(config?: AppConfig): string;
|
|
134
161
|
/** Resolve the PersonalRegistry directory from config, falling back to ~/Desktop/MyAIforOne Drive/PersonalRegistry */
|
|
135
162
|
export declare function getPersonalRegistryDir(config?: AppConfig): string;
|
|
163
|
+
/**
|
|
164
|
+
* Resolve the SharedAgents directory.
|
|
165
|
+
* Defaults to ~/Desktop/MyAIforOne Drive/SharedAgents (sibling of PersonalAgents).
|
|
166
|
+
* Can be overridden via service.sharedAgentsDir in config.
|
|
167
|
+
*/
|
|
168
|
+
export declare function getSharedAgentsDir(config?: AppConfig): string;
|
|
136
169
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|