@robbiesrobotics/alice-agents 1.4.5 → 1.4.7
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 +19 -3
- package/bin/alice-install.mjs +22 -1
- package/lib/agent-registry.mjs +33 -0
- package/lib/coding-agent.mjs +187 -0
- package/lib/config-merger.mjs +5 -1
- package/lib/doctor.mjs +42 -24
- package/lib/installer.mjs +83 -19
- package/lib/license.mjs +158 -14
- package/lib/manifest.mjs +18 -9
- package/lib/mission-control.mjs +12 -0
- package/lib/release-guard.mjs +131 -0
- package/lib/skills.mjs +0 -1
- package/lib/workspace-scaffolder.mjs +11 -16
- package/package.json +5 -3
- package/templates/agents-pro.json +550 -0
- package/templates/mission-control-bridge/index.ts +21 -0
- package/templates/workspaces/dylan/SOUL.md +1 -1
- package/templates/workspaces/dylan/TOOLS.md +4 -4
- package/templates/workspaces/felix/SOUL.md +1 -1
- package/templates/workspaces/felix/TOOLS.md +3 -3
|
@@ -0,0 +1,550 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"id": "hannah",
|
|
4
|
+
"name": "Hannah",
|
|
5
|
+
"domain": "HR",
|
|
6
|
+
"theme": "HR specialist",
|
|
7
|
+
"emoji": "\ud83d\udc65",
|
|
8
|
+
"description": "Team processes, hiring workflows, culture documentation",
|
|
9
|
+
"tier": "pro",
|
|
10
|
+
"coding": false,
|
|
11
|
+
"sandbox": {
|
|
12
|
+
"mode": "all",
|
|
13
|
+
"scope": "agent"
|
|
14
|
+
},
|
|
15
|
+
"tools": {
|
|
16
|
+
"allow": [
|
|
17
|
+
"read",
|
|
18
|
+
"write",
|
|
19
|
+
"edit",
|
|
20
|
+
"web_search",
|
|
21
|
+
"web_fetch",
|
|
22
|
+
"sessions_list",
|
|
23
|
+
"sessions_history",
|
|
24
|
+
"session_status"
|
|
25
|
+
],
|
|
26
|
+
"deny": [
|
|
27
|
+
"exec",
|
|
28
|
+
"process",
|
|
29
|
+
"browser",
|
|
30
|
+
"canvas",
|
|
31
|
+
"apply_patch",
|
|
32
|
+
"cron"
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": "aiden",
|
|
38
|
+
"name": "Aiden",
|
|
39
|
+
"domain": "Analytics",
|
|
40
|
+
"theme": "analytics specialist",
|
|
41
|
+
"emoji": "\ud83d\udcc8",
|
|
42
|
+
"description": "Business analytics, metrics, dashboards, data visualization",
|
|
43
|
+
"tier": "pro",
|
|
44
|
+
"coding": true,
|
|
45
|
+
"sandbox": {
|
|
46
|
+
"mode": "off"
|
|
47
|
+
},
|
|
48
|
+
"tools": {
|
|
49
|
+
"profile": "coding",
|
|
50
|
+
"alsoAllow": [
|
|
51
|
+
"web_search",
|
|
52
|
+
"web_fetch"
|
|
53
|
+
]
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"id": "clara",
|
|
58
|
+
"name": "Clara",
|
|
59
|
+
"domain": "Communication",
|
|
60
|
+
"theme": "communication specialist",
|
|
61
|
+
"emoji": "\u270d\ufe0f",
|
|
62
|
+
"description": "Copy, messaging, email drafts, announcements, brand voice",
|
|
63
|
+
"tier": "pro",
|
|
64
|
+
"coding": false,
|
|
65
|
+
"sandbox": {
|
|
66
|
+
"mode": "all",
|
|
67
|
+
"scope": "agent"
|
|
68
|
+
},
|
|
69
|
+
"tools": {
|
|
70
|
+
"allow": [
|
|
71
|
+
"read",
|
|
72
|
+
"write",
|
|
73
|
+
"edit",
|
|
74
|
+
"web_search",
|
|
75
|
+
"web_fetch",
|
|
76
|
+
"message",
|
|
77
|
+
"sessions_list",
|
|
78
|
+
"sessions_history",
|
|
79
|
+
"session_status"
|
|
80
|
+
],
|
|
81
|
+
"deny": [
|
|
82
|
+
"exec",
|
|
83
|
+
"process",
|
|
84
|
+
"browser",
|
|
85
|
+
"canvas",
|
|
86
|
+
"apply_patch",
|
|
87
|
+
"cron"
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
"id": "avery",
|
|
93
|
+
"name": "Avery",
|
|
94
|
+
"domain": "Automation",
|
|
95
|
+
"theme": "automation specialist",
|
|
96
|
+
"emoji": "\u2699\ufe0f",
|
|
97
|
+
"description": "Workflow automation, cron jobs, scripting, process optimization",
|
|
98
|
+
"tier": "pro",
|
|
99
|
+
"coding": true,
|
|
100
|
+
"sandbox": {
|
|
101
|
+
"mode": "off"
|
|
102
|
+
},
|
|
103
|
+
"tools": {
|
|
104
|
+
"profile": "coding",
|
|
105
|
+
"alsoAllow": [
|
|
106
|
+
"web_search",
|
|
107
|
+
"web_fetch",
|
|
108
|
+
"cron"
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"id": "owen",
|
|
114
|
+
"name": "Owen",
|
|
115
|
+
"domain": "Operations",
|
|
116
|
+
"theme": "operations specialist",
|
|
117
|
+
"emoji": "\ud83d\udd27",
|
|
118
|
+
"description": "System health, monitoring, incident response, operational readiness",
|
|
119
|
+
"tier": "pro",
|
|
120
|
+
"coding": false,
|
|
121
|
+
"sandbox": {
|
|
122
|
+
"mode": "off"
|
|
123
|
+
},
|
|
124
|
+
"tools": {
|
|
125
|
+
"allow": [
|
|
126
|
+
"read",
|
|
127
|
+
"exec",
|
|
128
|
+
"process",
|
|
129
|
+
"web_search",
|
|
130
|
+
"web_fetch",
|
|
131
|
+
"sessions_list",
|
|
132
|
+
"sessions_history",
|
|
133
|
+
"session_status"
|
|
134
|
+
],
|
|
135
|
+
"deny": [
|
|
136
|
+
"write",
|
|
137
|
+
"edit",
|
|
138
|
+
"apply_patch",
|
|
139
|
+
"canvas",
|
|
140
|
+
"browser",
|
|
141
|
+
"cron"
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"id": "isaac",
|
|
147
|
+
"name": "Isaac",
|
|
148
|
+
"domain": "Integration",
|
|
149
|
+
"theme": "integration specialist",
|
|
150
|
+
"emoji": "\ud83d\udd0c",
|
|
151
|
+
"description": "API integration, third-party services, webhooks, connectors",
|
|
152
|
+
"tier": "pro",
|
|
153
|
+
"coding": true,
|
|
154
|
+
"sandbox": {
|
|
155
|
+
"mode": "off"
|
|
156
|
+
},
|
|
157
|
+
"tools": {
|
|
158
|
+
"profile": "coding",
|
|
159
|
+
"alsoAllow": [
|
|
160
|
+
"web_search",
|
|
161
|
+
"web_fetch"
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"id": "tommy",
|
|
167
|
+
"name": "Tommy",
|
|
168
|
+
"domain": "Travel",
|
|
169
|
+
"theme": "travel specialist",
|
|
170
|
+
"emoji": "\u2708\ufe0f",
|
|
171
|
+
"description": "Trip planning, itineraries, booking research, travel logistics",
|
|
172
|
+
"tier": "pro",
|
|
173
|
+
"coding": false,
|
|
174
|
+
"sandbox": {
|
|
175
|
+
"mode": "all",
|
|
176
|
+
"scope": "agent"
|
|
177
|
+
},
|
|
178
|
+
"tools": {
|
|
179
|
+
"allow": [
|
|
180
|
+
"read",
|
|
181
|
+
"write",
|
|
182
|
+
"edit",
|
|
183
|
+
"web_search",
|
|
184
|
+
"web_fetch",
|
|
185
|
+
"browser",
|
|
186
|
+
"cron",
|
|
187
|
+
"sessions_list",
|
|
188
|
+
"sessions_history",
|
|
189
|
+
"session_status"
|
|
190
|
+
],
|
|
191
|
+
"deny": [
|
|
192
|
+
"exec",
|
|
193
|
+
"process",
|
|
194
|
+
"canvas",
|
|
195
|
+
"apply_patch"
|
|
196
|
+
]
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"id": "sloane",
|
|
201
|
+
"name": "Sloane",
|
|
202
|
+
"domain": "Sales",
|
|
203
|
+
"theme": "sales specialist",
|
|
204
|
+
"emoji": "\ud83d\udcbc",
|
|
205
|
+
"description": "Sales strategy, outreach, pipeline management, proposals",
|
|
206
|
+
"tier": "pro",
|
|
207
|
+
"coding": false,
|
|
208
|
+
"sandbox": {
|
|
209
|
+
"mode": "all",
|
|
210
|
+
"scope": "agent"
|
|
211
|
+
},
|
|
212
|
+
"tools": {
|
|
213
|
+
"allow": [
|
|
214
|
+
"read",
|
|
215
|
+
"write",
|
|
216
|
+
"edit",
|
|
217
|
+
"web_search",
|
|
218
|
+
"web_fetch",
|
|
219
|
+
"browser",
|
|
220
|
+
"message",
|
|
221
|
+
"sessions_list",
|
|
222
|
+
"sessions_history",
|
|
223
|
+
"session_status",
|
|
224
|
+
"cron"
|
|
225
|
+
],
|
|
226
|
+
"deny": [
|
|
227
|
+
"exec",
|
|
228
|
+
"process",
|
|
229
|
+
"canvas",
|
|
230
|
+
"apply_patch"
|
|
231
|
+
]
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"id": "nadia",
|
|
236
|
+
"name": "Nadia",
|
|
237
|
+
"domain": "UI/UX Design",
|
|
238
|
+
"theme": "UI/UX design specialist",
|
|
239
|
+
"emoji": "\ud83c\udfa8",
|
|
240
|
+
"description": "Design systems, wireframes, UI patterns, visual design",
|
|
241
|
+
"tier": "pro",
|
|
242
|
+
"coding": false,
|
|
243
|
+
"sandbox": {
|
|
244
|
+
"mode": "all",
|
|
245
|
+
"scope": "agent"
|
|
246
|
+
},
|
|
247
|
+
"tools": {
|
|
248
|
+
"allow": [
|
|
249
|
+
"read",
|
|
250
|
+
"write",
|
|
251
|
+
"edit",
|
|
252
|
+
"apply_patch",
|
|
253
|
+
"canvas",
|
|
254
|
+
"browser",
|
|
255
|
+
"web_search",
|
|
256
|
+
"web_fetch",
|
|
257
|
+
"sessions_list",
|
|
258
|
+
"sessions_history",
|
|
259
|
+
"session_status"
|
|
260
|
+
],
|
|
261
|
+
"deny": [
|
|
262
|
+
"exec",
|
|
263
|
+
"process",
|
|
264
|
+
"cron"
|
|
265
|
+
]
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
"id": "morgan",
|
|
270
|
+
"name": "Morgan",
|
|
271
|
+
"domain": "Marketing",
|
|
272
|
+
"theme": "marketing specialist",
|
|
273
|
+
"emoji": "\ud83d\udce3",
|
|
274
|
+
"description": "Marketing strategy, content planning, SEO, campaigns",
|
|
275
|
+
"tier": "pro",
|
|
276
|
+
"coding": false,
|
|
277
|
+
"sandbox": {
|
|
278
|
+
"mode": "all",
|
|
279
|
+
"scope": "agent"
|
|
280
|
+
},
|
|
281
|
+
"tools": {
|
|
282
|
+
"allow": [
|
|
283
|
+
"read",
|
|
284
|
+
"write",
|
|
285
|
+
"edit",
|
|
286
|
+
"web_search",
|
|
287
|
+
"web_fetch",
|
|
288
|
+
"browser",
|
|
289
|
+
"message",
|
|
290
|
+
"sessions_list",
|
|
291
|
+
"sessions_history",
|
|
292
|
+
"session_status",
|
|
293
|
+
"cron"
|
|
294
|
+
],
|
|
295
|
+
"deny": [
|
|
296
|
+
"exec",
|
|
297
|
+
"process",
|
|
298
|
+
"canvas",
|
|
299
|
+
"apply_patch"
|
|
300
|
+
]
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
{
|
|
304
|
+
"id": "alex",
|
|
305
|
+
"name": "Alex",
|
|
306
|
+
"domain": "API Crawling",
|
|
307
|
+
"theme": "API crawler specialist",
|
|
308
|
+
"emoji": "\ud83d\udd77\ufe0f",
|
|
309
|
+
"description": "API discovery, web scraping, data extraction, crawl automation",
|
|
310
|
+
"tier": "pro",
|
|
311
|
+
"coding": true,
|
|
312
|
+
"sandbox": {
|
|
313
|
+
"mode": "off"
|
|
314
|
+
},
|
|
315
|
+
"tools": {
|
|
316
|
+
"profile": "coding",
|
|
317
|
+
"alsoAllow": [
|
|
318
|
+
"web_search",
|
|
319
|
+
"web_fetch",
|
|
320
|
+
"browser"
|
|
321
|
+
]
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"id": "uma",
|
|
326
|
+
"name": "Uma",
|
|
327
|
+
"domain": "UX Research",
|
|
328
|
+
"theme": "UX researcher",
|
|
329
|
+
"emoji": "\ud83e\uddea",
|
|
330
|
+
"description": "User research, usability testing, personas, journey maps",
|
|
331
|
+
"tier": "pro",
|
|
332
|
+
"coding": false,
|
|
333
|
+
"sandbox": {
|
|
334
|
+
"mode": "all",
|
|
335
|
+
"scope": "agent"
|
|
336
|
+
},
|
|
337
|
+
"tools": {
|
|
338
|
+
"allow": [
|
|
339
|
+
"read",
|
|
340
|
+
"write",
|
|
341
|
+
"edit",
|
|
342
|
+
"browser",
|
|
343
|
+
"canvas",
|
|
344
|
+
"web_search",
|
|
345
|
+
"web_fetch",
|
|
346
|
+
"sessions_list",
|
|
347
|
+
"sessions_history",
|
|
348
|
+
"session_status"
|
|
349
|
+
],
|
|
350
|
+
"deny": [
|
|
351
|
+
"exec",
|
|
352
|
+
"process",
|
|
353
|
+
"cron",
|
|
354
|
+
"apply_patch"
|
|
355
|
+
]
|
|
356
|
+
}
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"id": "caleb",
|
|
360
|
+
"name": "Caleb",
|
|
361
|
+
"domain": "CRM",
|
|
362
|
+
"theme": "CRM builder specialist",
|
|
363
|
+
"emoji": "\ud83d\uddc2\ufe0f",
|
|
364
|
+
"description": "CRM design, customer data, pipeline tooling, relationship tracking",
|
|
365
|
+
"tier": "pro",
|
|
366
|
+
"coding": true,
|
|
367
|
+
"sandbox": {
|
|
368
|
+
"mode": "off"
|
|
369
|
+
},
|
|
370
|
+
"tools": {
|
|
371
|
+
"profile": "coding",
|
|
372
|
+
"alsoAllow": [
|
|
373
|
+
"web_search",
|
|
374
|
+
"web_fetch"
|
|
375
|
+
]
|
|
376
|
+
}
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
"id": "elena",
|
|
380
|
+
"name": "Elena",
|
|
381
|
+
"domain": "Estimation",
|
|
382
|
+
"theme": "estimator specialist",
|
|
383
|
+
"emoji": "\ud83d\udccb",
|
|
384
|
+
"description": "Project estimation, cost analysis, timeline planning, scoping",
|
|
385
|
+
"tier": "pro",
|
|
386
|
+
"coding": false,
|
|
387
|
+
"sandbox": {
|
|
388
|
+
"mode": "all",
|
|
389
|
+
"scope": "agent"
|
|
390
|
+
},
|
|
391
|
+
"tools": {
|
|
392
|
+
"allow": [
|
|
393
|
+
"read",
|
|
394
|
+
"write",
|
|
395
|
+
"edit",
|
|
396
|
+
"web_search",
|
|
397
|
+
"web_fetch",
|
|
398
|
+
"sessions_list",
|
|
399
|
+
"sessions_history",
|
|
400
|
+
"session_status"
|
|
401
|
+
],
|
|
402
|
+
"deny": [
|
|
403
|
+
"exec",
|
|
404
|
+
"process",
|
|
405
|
+
"browser",
|
|
406
|
+
"canvas",
|
|
407
|
+
"apply_patch",
|
|
408
|
+
"cron"
|
|
409
|
+
]
|
|
410
|
+
}
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
"id": "audrey",
|
|
414
|
+
"name": "Audrey",
|
|
415
|
+
"domain": "Accounting",
|
|
416
|
+
"theme": "accounting specialist",
|
|
417
|
+
"emoji": "\ud83d\udcb0",
|
|
418
|
+
"description": "Financial tracking, invoicing, expense reports, bookkeeping",
|
|
419
|
+
"tier": "pro",
|
|
420
|
+
"coding": false,
|
|
421
|
+
"sandbox": {
|
|
422
|
+
"mode": "all",
|
|
423
|
+
"scope": "agent"
|
|
424
|
+
},
|
|
425
|
+
"tools": {
|
|
426
|
+
"allow": [
|
|
427
|
+
"read",
|
|
428
|
+
"write",
|
|
429
|
+
"edit",
|
|
430
|
+
"web_search",
|
|
431
|
+
"web_fetch",
|
|
432
|
+
"sessions_list",
|
|
433
|
+
"sessions_history",
|
|
434
|
+
"session_status"
|
|
435
|
+
],
|
|
436
|
+
"deny": [
|
|
437
|
+
"exec",
|
|
438
|
+
"process",
|
|
439
|
+
"browser",
|
|
440
|
+
"canvas",
|
|
441
|
+
"apply_patch",
|
|
442
|
+
"cron"
|
|
443
|
+
]
|
|
444
|
+
}
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
"id": "logan",
|
|
448
|
+
"name": "Logan",
|
|
449
|
+
"domain": "Legal",
|
|
450
|
+
"theme": "legal specialist",
|
|
451
|
+
"emoji": "\u2696\ufe0f",
|
|
452
|
+
"description": "Contract review, compliance, terms of service, legal research",
|
|
453
|
+
"tier": "pro",
|
|
454
|
+
"coding": false,
|
|
455
|
+
"sandbox": {
|
|
456
|
+
"mode": "all",
|
|
457
|
+
"scope": "agent"
|
|
458
|
+
},
|
|
459
|
+
"tools": {
|
|
460
|
+
"allow": [
|
|
461
|
+
"read",
|
|
462
|
+
"write",
|
|
463
|
+
"edit",
|
|
464
|
+
"web_search",
|
|
465
|
+
"web_fetch",
|
|
466
|
+
"sessions_list",
|
|
467
|
+
"sessions_history",
|
|
468
|
+
"session_status"
|
|
469
|
+
],
|
|
470
|
+
"deny": [
|
|
471
|
+
"exec",
|
|
472
|
+
"process",
|
|
473
|
+
"browser",
|
|
474
|
+
"canvas",
|
|
475
|
+
"apply_patch",
|
|
476
|
+
"cron"
|
|
477
|
+
]
|
|
478
|
+
}
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
"id": "eva",
|
|
482
|
+
"name": "Eva",
|
|
483
|
+
"domain": "Executive Assistant",
|
|
484
|
+
"theme": "executive assistant",
|
|
485
|
+
"emoji": "\ud83d\udccc",
|
|
486
|
+
"description": "Scheduling, task management, priority triaging, reminders",
|
|
487
|
+
"tier": "pro",
|
|
488
|
+
"coding": false,
|
|
489
|
+
"sandbox": {
|
|
490
|
+
"mode": "all",
|
|
491
|
+
"scope": "agent"
|
|
492
|
+
},
|
|
493
|
+
"tools": {
|
|
494
|
+
"allow": [
|
|
495
|
+
"read",
|
|
496
|
+
"write",
|
|
497
|
+
"edit",
|
|
498
|
+
"web_search",
|
|
499
|
+
"web_fetch",
|
|
500
|
+
"message",
|
|
501
|
+
"sessions_list",
|
|
502
|
+
"sessions_history",
|
|
503
|
+
"session_status",
|
|
504
|
+
"cron"
|
|
505
|
+
],
|
|
506
|
+
"deny": [
|
|
507
|
+
"exec",
|
|
508
|
+
"process",
|
|
509
|
+
"browser",
|
|
510
|
+
"canvas",
|
|
511
|
+
"apply_patch"
|
|
512
|
+
]
|
|
513
|
+
}
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
"id": "parker",
|
|
517
|
+
"name": "Parker",
|
|
518
|
+
"domain": "Project Management",
|
|
519
|
+
"theme": "project manager",
|
|
520
|
+
"emoji": "\ud83d\udcc5",
|
|
521
|
+
"description": "Project planning, milestone tracking, team coordination, roadmaps",
|
|
522
|
+
"tier": "pro",
|
|
523
|
+
"coding": false,
|
|
524
|
+
"sandbox": {
|
|
525
|
+
"mode": "all",
|
|
526
|
+
"scope": "agent"
|
|
527
|
+
},
|
|
528
|
+
"tools": {
|
|
529
|
+
"allow": [
|
|
530
|
+
"read",
|
|
531
|
+
"write",
|
|
532
|
+
"edit",
|
|
533
|
+
"web_search",
|
|
534
|
+
"web_fetch",
|
|
535
|
+
"message",
|
|
536
|
+
"sessions_list",
|
|
537
|
+
"sessions_history",
|
|
538
|
+
"session_status",
|
|
539
|
+
"cron"
|
|
540
|
+
],
|
|
541
|
+
"deny": [
|
|
542
|
+
"exec",
|
|
543
|
+
"process",
|
|
544
|
+
"browser",
|
|
545
|
+
"canvas",
|
|
546
|
+
"apply_patch"
|
|
547
|
+
]
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
]
|
|
@@ -26,6 +26,7 @@ interface RuntimeNodeRegistrationPayload {
|
|
|
26
26
|
nodeId: string;
|
|
27
27
|
installId: string;
|
|
28
28
|
nodeName: string;
|
|
29
|
+
teamId?: string;
|
|
29
30
|
sourceNode: string;
|
|
30
31
|
connectionMode: "relay";
|
|
31
32
|
gatewayUrl: string;
|
|
@@ -106,6 +107,10 @@ const WORKER_TOKEN = getString(
|
|
|
106
107
|
getString(cloudConfig.workerToken, INGEST_TOKEN),
|
|
107
108
|
);
|
|
108
109
|
const SOURCE_NODE = getString(process.env.MC_SOURCE_NODE, getString(cloudConfig.sourceNode, "openclaw-local"));
|
|
110
|
+
const TEAM_ID = getString(process.env.MC_TEAM_ID, getString(cloudConfig.teamId));
|
|
111
|
+
const TEAM_SLUG = getString(process.env.MC_TEAM_SLUG, getString(cloudConfig.teamSlug));
|
|
112
|
+
const TEAM_NAME = getString(process.env.MC_TEAM_NAME, getString(cloudConfig.teamName));
|
|
113
|
+
const TEAM_PLAN = getString(process.env.MC_TEAM_PLAN, getString(cloudConfig.teamPlan));
|
|
109
114
|
const INSTALL_ID = getString(process.env.MC_INSTALL_ID, SOURCE_NODE);
|
|
110
115
|
const NODE_ID = getString(process.env.MC_NODE_ID, SOURCE_NODE);
|
|
111
116
|
const GATEWAY_URL = normalizeUrl(getString(process.env.MC_GATEWAY_URL, DEFAULT_GATEWAY_URL));
|
|
@@ -162,6 +167,7 @@ function buildNodeRegistrationPayload(): RuntimeNodeRegistrationPayload {
|
|
|
162
167
|
nodeId: NODE_ID,
|
|
163
168
|
installId: INSTALL_ID,
|
|
164
169
|
nodeName: SOURCE_NODE,
|
|
170
|
+
...(TEAM_ID ? { teamId: TEAM_ID } : {}),
|
|
165
171
|
sourceNode: SOURCE_NODE,
|
|
166
172
|
connectionMode: "relay",
|
|
167
173
|
gatewayUrl: GATEWAY_URL,
|
|
@@ -176,6 +182,9 @@ function buildNodeRegistrationPayload(): RuntimeNodeRegistrationPayload {
|
|
|
176
182
|
metadata: {
|
|
177
183
|
dashboardUrl: DASHBOARD_URL,
|
|
178
184
|
pluginId: "mission-control-bridge",
|
|
185
|
+
...(TEAM_SLUG ? { teamSlug: TEAM_SLUG } : {}),
|
|
186
|
+
...(TEAM_NAME ? { teamName: TEAM_NAME } : {}),
|
|
187
|
+
...(TEAM_PLAN ? { teamPlan: TEAM_PLAN } : {}),
|
|
179
188
|
},
|
|
180
189
|
};
|
|
181
190
|
}
|
|
@@ -199,6 +208,7 @@ async function heartbeatNode(logger: { warn(message: string): void }): Promise<v
|
|
|
199
208
|
if (!WORKER_TOKEN) return;
|
|
200
209
|
const payload = {
|
|
201
210
|
nodeId: NODE_ID,
|
|
211
|
+
...(TEAM_ID ? { teamId: TEAM_ID } : {}),
|
|
202
212
|
status: "online",
|
|
203
213
|
runtimeVersion: process.version,
|
|
204
214
|
platform: process.platform,
|
|
@@ -210,6 +220,9 @@ async function heartbeatNode(logger: { warn(message: string): void }): Promise<v
|
|
|
210
220
|
},
|
|
211
221
|
metadata: {
|
|
212
222
|
dashboardUrl: DASHBOARD_URL,
|
|
223
|
+
...(TEAM_SLUG ? { teamSlug: TEAM_SLUG } : {}),
|
|
224
|
+
...(TEAM_NAME ? { teamName: TEAM_NAME } : {}),
|
|
225
|
+
...(TEAM_PLAN ? { teamPlan: TEAM_PLAN } : {}),
|
|
213
226
|
},
|
|
214
227
|
};
|
|
215
228
|
try {
|
|
@@ -225,6 +238,10 @@ async function heartbeatNode(logger: { warn(message: string): void }): Promise<v
|
|
|
225
238
|
const res = await postJson(ADMIN_HEARTBEAT_URL, WORKER_TOKEN, {
|
|
226
239
|
instanceId: NODE_ID,
|
|
227
240
|
nodeName: SOURCE_NODE,
|
|
241
|
+
...(TEAM_ID ? { teamId: TEAM_ID } : {}),
|
|
242
|
+
...(TEAM_SLUG ? { teamSlug: TEAM_SLUG } : {}),
|
|
243
|
+
...(TEAM_NAME ? { teamName: TEAM_NAME } : {}),
|
|
244
|
+
...(TEAM_PLAN ? { teamPlan: TEAM_PLAN } : {}),
|
|
228
245
|
tailscaleIp: getString(process.env.TAILSCALE_IP),
|
|
229
246
|
deployedVersion: getString(process.env.MC_DEPLOYED_VERSION),
|
|
230
247
|
runtimeVersion: process.version,
|
|
@@ -449,6 +466,7 @@ function handleModelUsage(evt: Extract<DiagnosticEventPayload, { type: "model.us
|
|
|
449
466
|
payload: {
|
|
450
467
|
session_id: evt.sessionId ?? evt.sessionKey ?? nextId("sess"),
|
|
451
468
|
agent_id: agentId,
|
|
469
|
+
...(TEAM_ID ? { teamId: TEAM_ID } : {}),
|
|
452
470
|
model: evt.model ?? "unknown",
|
|
453
471
|
channel: evt.channel ?? "unknown",
|
|
454
472
|
total_tokens: totalTokens,
|
|
@@ -492,6 +510,7 @@ function handleMessageProcessed(evt: Extract<DiagnosticEventPayload, { type: "me
|
|
|
492
510
|
payload: {
|
|
493
511
|
session_id: evt.sessionId ?? evt.sessionKey ?? nextId("sess"),
|
|
494
512
|
agent_id: agentId,
|
|
513
|
+
...(TEAM_ID ? { teamId: TEAM_ID } : {}),
|
|
495
514
|
channel: evt.channel ?? "unknown",
|
|
496
515
|
status: evt.outcome === "error" ? "failed" : "completed",
|
|
497
516
|
duration_ms: evt.durationMs ?? 0,
|
|
@@ -525,6 +544,7 @@ function handleSessionState(evt: Extract<DiagnosticEventPayload, { type: "sessio
|
|
|
525
544
|
payload: {
|
|
526
545
|
session_id: evt.sessionId ?? evt.sessionKey ?? nextId("sess"),
|
|
527
546
|
agent_id: agentId,
|
|
547
|
+
...(TEAM_ID ? { teamId: TEAM_ID } : {}),
|
|
528
548
|
state: evt.state,
|
|
529
549
|
prev_state: evt.prevState ?? null,
|
|
530
550
|
},
|
|
@@ -595,6 +615,7 @@ const plugin = {
|
|
|
595
615
|
payload: {
|
|
596
616
|
node_name: SOURCE_NODE,
|
|
597
617
|
node_id: NODE_ID,
|
|
618
|
+
...(TEAM_ID ? { teamId: TEAM_ID } : {}),
|
|
598
619
|
install_id: INSTALL_ID,
|
|
599
620
|
platform: process.platform,
|
|
600
621
|
node_version: process.version,
|
|
@@ -35,7 +35,7 @@ Measured, precise, craftsman-energy. You take pride in clean implementations. Yo
|
|
|
35
35
|
|
|
36
36
|
## Tools
|
|
37
37
|
|
|
38
|
-
- Use the `
|
|
38
|
+
- Use the `coding-agent` skill for any non-trivial multi-file coding task
|
|
39
39
|
- Use `exec` to run tests, check build output, and verify implementations
|
|
40
40
|
- Use `read` to understand the codebase before proposing changes
|
|
41
41
|
- Use `web_search` for API docs, error messages, and library references
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## Domain: Full-Stack Software Engineering
|
|
4
4
|
|
|
5
|
-
## Primary Tool:
|
|
5
|
+
## Primary Tool: Coding Agent
|
|
6
6
|
|
|
7
|
-
**For any non-trivial multi-file coding task, use the `
|
|
7
|
+
**For any non-trivial multi-file coding task, use the `coding-agent` skill.**
|
|
8
8
|
|
|
9
|
-
Load it with: `read ~/.openclaw/skills/
|
|
9
|
+
Load it with: `read ~/.openclaw/skills/coding-agent/SKILL.md`
|
|
10
10
|
|
|
11
11
|
Pattern — foreground (tasks < 5min):
|
|
12
12
|
```
|
|
@@ -20,7 +20,7 @@ exec workdir=/path/to/project background=true command="claude --permission-mode
|
|
|
20
20
|
|
|
21
21
|
- Always set `workdir` to the project root
|
|
22
22
|
- Use `max` effort for complex multi-file refactors
|
|
23
|
-
- Review
|
|
23
|
+
- Review the coding agent's output before reporting to A.L.I.C.E.
|
|
24
24
|
|
|
25
25
|
## Other Tools
|
|
26
26
|
|
|
@@ -35,6 +35,6 @@ Detail-obsessed, craftsman energy. You care about the 4px misalignment that "pro
|
|
|
35
35
|
## Tools
|
|
36
36
|
|
|
37
37
|
- Use `exec` to run dev servers, build processes, and lint checks
|
|
38
|
-
- Use the `
|
|
38
|
+
- Use the `coding-agent` skill for multi-file component refactors and design system work
|
|
39
39
|
- Use `web_search` for MDN docs, browser compatibility, and framework-specific patterns
|
|
40
40
|
- Use `read` to audit component APIs and style tokens before building new ones
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
| Tool | When to use |
|
|
14
14
|
|------|-------------|
|
|
15
15
|
| `exec` | Run dev server, build, lint, typecheck, bundle analyzer |
|
|
16
|
-
| `
|
|
16
|
+
| `coding-agent` skill | Multi-file component refactors, design system overhauls |
|
|
17
17
|
| `read` | Audit component APIs, style tokens, and existing implementations |
|
|
18
18
|
| `web_search` | MDN docs, browser compatibility (caniuse), framework-specific patterns |
|
|
19
19
|
|
|
@@ -38,11 +38,11 @@ npm run build -- --analyze
|
|
|
38
38
|
npx axe-cli http://localhost:3000
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
## Load the
|
|
41
|
+
## Load the Coding Agent Skill
|
|
42
42
|
|
|
43
43
|
For multi-file refactors and design system work:
|
|
44
44
|
```
|
|
45
|
-
read ~/.openclaw/skills/
|
|
45
|
+
read ~/.openclaw/skills/coding-agent/SKILL.md
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
## Accessibility Checklist
|