@principal-ai/subsystems-react 0.39.0 → 0.41.0

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 (35) hide show
  1. package/dist/components/maintain-events/MaintainEventLog.d.ts +35 -0
  2. package/dist/components/maintain-events/MaintainEventLog.d.ts.map +1 -0
  3. package/dist/components/maintain-events/MaintainEventLog.js +66 -0
  4. package/dist/components/maintain-events/MaintainEventLog.js.map +1 -0
  5. package/dist/components/maintain-events/MaintainLivePanel.d.ts +15 -0
  6. package/dist/components/maintain-events/MaintainLivePanel.d.ts.map +1 -0
  7. package/dist/components/maintain-events/MaintainLivePanel.js +49 -0
  8. package/dist/components/maintain-events/MaintainLivePanel.js.map +1 -0
  9. package/dist/components/maintain-events/index.d.ts +8 -0
  10. package/dist/components/maintain-events/index.d.ts.map +1 -0
  11. package/dist/components/maintain-events/index.js +6 -0
  12. package/dist/components/maintain-events/index.js.map +1 -0
  13. package/dist/index.d.ts +4 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +4 -0
  16. package/dist/index.js.map +1 -1
  17. package/dist/subsystem/AgentsPanel.d.ts +27 -0
  18. package/dist/subsystem/AgentsPanel.d.ts.map +1 -0
  19. package/dist/subsystem/AgentsPanel.js +66 -0
  20. package/dist/subsystem/AgentsPanel.js.map +1 -0
  21. package/dist/subsystem/SubsystemComponentGraph.d.ts +13 -0
  22. package/dist/subsystem/SubsystemComponentGraph.d.ts.map +1 -1
  23. package/dist/subsystem/SubsystemComponentGraph.js +25 -3
  24. package/dist/subsystem/SubsystemComponentGraph.js.map +1 -1
  25. package/package.json +1 -1
  26. package/src/components/maintain-events/MaintainEventLog.tsx +152 -0
  27. package/src/components/maintain-events/MaintainLivePanel.tsx +99 -0
  28. package/src/components/maintain-events/index.ts +10 -0
  29. package/src/index.ts +15 -0
  30. package/src/stories/MaintainEvents/MaintainEventLog.stories.tsx +66 -0
  31. package/src/stories/MaintainEvents/MaintainLivePanel.stories.tsx +77 -0
  32. package/src/stories/Subsystem/AgentsPanel.stories.tsx +61 -0
  33. package/src/stories/data/maintain-live-events.json +554 -0
  34. package/src/subsystem/AgentsPanel.tsx +140 -0
  35. package/src/subsystem/SubsystemComponentGraph.tsx +87 -10
@@ -0,0 +1,554 @@
1
+ [
2
+ {
3
+ "at": null,
4
+ "type": "server.connected",
5
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
6
+ "summary": "connected"
7
+ },
8
+ {
9
+ "at": 1785251893442,
10
+ "type": "session.status",
11
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
12
+ "summary": "busy"
13
+ },
14
+ {
15
+ "at": 1785251893692,
16
+ "type": "session.next.prompted",
17
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
18
+ "summary": "user prompt"
19
+ },
20
+ {
21
+ "at": 1785251893942,
22
+ "type": "session.next.text.delta",
23
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
24
+ "summary": "Explore the project at /Users/griever/Developer/visual-validation/principal-view-core-library thoroughly.\n\nI need to understand:\n1. The full directory tree (pac"
25
+ },
26
+ {
27
+ "at": 1785251894192,
28
+ "type": "session.next.prompted",
29
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
30
+ "summary": "assistant prompt"
31
+ },
32
+ {
33
+ "at": 1785251894442,
34
+ "type": "session.next.prompted",
35
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
36
+ "summary": "user prompt"
37
+ },
38
+ {
39
+ "at": 1785251894692,
40
+ "type": "session.next.step.started",
41
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
42
+ "summary": "step started"
43
+ },
44
+ {
45
+ "at": 1785251895192,
46
+ "type": "session.next.reasoning.delta",
47
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
48
+ "summary": "Let me explore the project at /Users/griever/Developer/visual-validation/principal-view-core-library thoroughly. I'll start by understanding the overall structu"
49
+ },
50
+ {
51
+ "at": 1785251895692,
52
+ "type": "session.next.tool.called",
53
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
54
+ "summary": "read"
55
+ },
56
+ {
57
+ "at": 1785251895942,
58
+ "type": "session.next.tool.called",
59
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
60
+ "summary": "read"
61
+ },
62
+ {
63
+ "at": 1785251896192,
64
+ "type": "session.next.tool.called",
65
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
66
+ "summary": "glob"
67
+ },
68
+ {
69
+ "at": 1785251896442,
70
+ "type": "session.next.tool.called",
71
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
72
+ "summary": "glob"
73
+ },
74
+ {
75
+ "at": 1785251896692,
76
+ "type": "session.next.tool.called",
77
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
78
+ "summary": "glob"
79
+ },
80
+ {
81
+ "at": 1785251896942,
82
+ "type": "session.next.tool.called",
83
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
84
+ "summary": "glob"
85
+ },
86
+ {
87
+ "at": 1785251897192,
88
+ "type": "session.next.text.delta",
89
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
90
+ "summary": "I'll start by exploring the top-level structure and then dive into each area systematically."
91
+ },
92
+ {
93
+ "at": 1785251897442,
94
+ "type": "session.next.tool.called",
95
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
96
+ "summary": "read"
97
+ },
98
+ {
99
+ "at": 1785251897692,
100
+ "type": "session.next.tool.called",
101
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
102
+ "summary": "glob"
103
+ },
104
+ {
105
+ "at": 1785251897942,
106
+ "type": "session.next.tool.called",
107
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
108
+ "summary": "glob"
109
+ },
110
+ {
111
+ "at": 1785251898192,
112
+ "type": "session.next.step.ended",
113
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
114
+ "summary": "step ended"
115
+ },
116
+ {
117
+ "at": 1785251898442,
118
+ "type": "session.next.prompted",
119
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
120
+ "summary": "assistant prompt"
121
+ },
122
+ {
123
+ "at": 1785251898692,
124
+ "type": "session.next.prompted",
125
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
126
+ "summary": "assistant prompt"
127
+ },
128
+ {
129
+ "at": 1785251898942,
130
+ "type": "session.next.prompted",
131
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
132
+ "summary": "assistant prompt"
133
+ },
134
+ {
135
+ "at": 1785251899192,
136
+ "type": "session.next.prompted",
137
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
138
+ "summary": "user prompt"
139
+ },
140
+ {
141
+ "at": 1785251899442,
142
+ "type": "session.next.step.started",
143
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
144
+ "summary": "step started"
145
+ },
146
+ {
147
+ "at": 1785251899942,
148
+ "type": "session.next.reasoning.delta",
149
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
150
+ "summary": "Good, I have a clear picture of the packages. Let me now read the root package.json, each package's package.json, tsconfig files, and explore the directory stru"
151
+ },
152
+ {
153
+ "at": 1785251900442,
154
+ "type": "session.next.tool.called",
155
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
156
+ "summary": "read"
157
+ },
158
+ {
159
+ "at": 1785251900692,
160
+ "type": "session.next.tool.called",
161
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
162
+ "summary": "read"
163
+ },
164
+ {
165
+ "at": 1785251900942,
166
+ "type": "session.next.tool.called",
167
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
168
+ "summary": "read"
169
+ },
170
+ {
171
+ "at": 1785251901192,
172
+ "type": "session.next.tool.called",
173
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
174
+ "summary": "read"
175
+ },
176
+ {
177
+ "at": 1785251901442,
178
+ "type": "session.next.tool.called",
179
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
180
+ "summary": "read"
181
+ },
182
+ {
183
+ "at": 1785251901692,
184
+ "type": "session.next.tool.called",
185
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
186
+ "summary": "read"
187
+ },
188
+ {
189
+ "at": 1785251901942,
190
+ "type": "session.next.tool.called",
191
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
192
+ "summary": "read"
193
+ },
194
+ {
195
+ "at": 1785251902192,
196
+ "type": "session.next.tool.called",
197
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
198
+ "summary": "read"
199
+ },
200
+ {
201
+ "at": 1785251902442,
202
+ "type": "session.next.tool.called",
203
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
204
+ "summary": "read"
205
+ },
206
+ {
207
+ "at": 1785251902692,
208
+ "type": "session.next.tool.called",
209
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
210
+ "summary": "read"
211
+ },
212
+ {
213
+ "at": 1785251902942,
214
+ "type": "session.next.tool.called",
215
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
216
+ "summary": "read"
217
+ },
218
+ {
219
+ "at": 1785251903192,
220
+ "type": "session.next.tool.called",
221
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
222
+ "summary": "read"
223
+ },
224
+ {
225
+ "at": 1785251903442,
226
+ "type": "session.next.tool.called",
227
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
228
+ "summary": "read"
229
+ },
230
+ {
231
+ "at": 1785251903692,
232
+ "type": "session.next.tool.called",
233
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
234
+ "summary": "read"
235
+ },
236
+ {
237
+ "at": 1785251903942,
238
+ "type": "session.next.tool.called",
239
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
240
+ "summary": "read"
241
+ },
242
+ {
243
+ "at": 1785251904192,
244
+ "type": "session.next.tool.called",
245
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
246
+ "summary": "read"
247
+ },
248
+ {
249
+ "at": 1785251904442,
250
+ "type": "session.next.tool.called",
251
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
252
+ "summary": "read"
253
+ },
254
+ {
255
+ "at": 1785251904692,
256
+ "type": "session.next.tool.called",
257
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
258
+ "summary": "read"
259
+ },
260
+ {
261
+ "at": 1785251904942,
262
+ "type": "session.next.tool.called",
263
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
264
+ "summary": "read"
265
+ },
266
+ {
267
+ "at": 1785251905192,
268
+ "type": "session.next.tool.called",
269
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
270
+ "summary": "read"
271
+ },
272
+ {
273
+ "at": 1785251905442,
274
+ "type": "session.next.tool.called",
275
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
276
+ "summary": "read"
277
+ },
278
+ {
279
+ "at": 1785251905692,
280
+ "type": "session.next.text.delta",
281
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
282
+ "summary": "Now let me read all package.json files and tsconfig files:"
283
+ },
284
+ {
285
+ "at": 1785251905942,
286
+ "type": "session.next.step.ended",
287
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
288
+ "summary": "step ended"
289
+ },
290
+ {
291
+ "at": 1785251906192,
292
+ "type": "session.next.prompted",
293
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
294
+ "summary": "assistant prompt"
295
+ },
296
+ {
297
+ "at": 1785251906442,
298
+ "type": "session.next.prompted",
299
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
300
+ "summary": "assistant prompt"
301
+ },
302
+ {
303
+ "at": 1785251906692,
304
+ "type": "session.next.prompted",
305
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
306
+ "summary": "assistant prompt"
307
+ },
308
+ {
309
+ "at": 1785251906942,
310
+ "type": "session.next.prompted",
311
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
312
+ "summary": "user prompt"
313
+ },
314
+ {
315
+ "at": 1785251907192,
316
+ "type": "session.next.step.started",
317
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
318
+ "summary": "step started"
319
+ },
320
+ {
321
+ "at": 1785251907692,
322
+ "type": "session.next.reasoning.delta",
323
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
324
+ "summary": "Now let me read the tsconfig files and explore the source directories of each package."
325
+ },
326
+ {
327
+ "at": 1785251908192,
328
+ "type": "session.next.tool.called",
329
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
330
+ "summary": "read"
331
+ },
332
+ {
333
+ "at": 1785251908442,
334
+ "type": "session.next.tool.called",
335
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
336
+ "summary": "read"
337
+ },
338
+ {
339
+ "at": 1785251908692,
340
+ "type": "session.next.tool.called",
341
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
342
+ "summary": "read"
343
+ },
344
+ {
345
+ "at": 1785251908942,
346
+ "type": "session.next.tool.called",
347
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
348
+ "summary": "read"
349
+ },
350
+ {
351
+ "at": 1785251909192,
352
+ "type": "session.next.tool.called",
353
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
354
+ "summary": "read"
355
+ },
356
+ {
357
+ "at": 1785251909442,
358
+ "type": "session.next.tool.called",
359
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
360
+ "summary": "read"
361
+ },
362
+ {
363
+ "at": 1785251909692,
364
+ "type": "session.next.tool.called",
365
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
366
+ "summary": "read"
367
+ },
368
+ {
369
+ "at": 1785251909942,
370
+ "type": "session.next.tool.called",
371
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
372
+ "summary": "read"
373
+ },
374
+ {
375
+ "at": 1785251910192,
376
+ "type": "session.next.tool.called",
377
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
378
+ "summary": "read"
379
+ },
380
+ {
381
+ "at": 1785251910442,
382
+ "type": "session.next.tool.called",
383
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
384
+ "summary": "read"
385
+ },
386
+ {
387
+ "at": 1785251910692,
388
+ "type": "session.next.tool.called",
389
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
390
+ "summary": "read"
391
+ },
392
+ {
393
+ "at": 1785251910942,
394
+ "type": "session.next.tool.called",
395
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
396
+ "summary": "read"
397
+ },
398
+ {
399
+ "at": 1785251911192,
400
+ "type": "session.next.tool.called",
401
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
402
+ "summary": "read"
403
+ },
404
+ {
405
+ "at": 1785251911442,
406
+ "type": "session.next.tool.called",
407
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
408
+ "summary": "read"
409
+ },
410
+ {
411
+ "at": 1785251911692,
412
+ "type": "session.next.tool.called",
413
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
414
+ "summary": "read"
415
+ },
416
+ {
417
+ "at": 1785251911942,
418
+ "type": "session.next.tool.called",
419
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
420
+ "summary": "read"
421
+ },
422
+ {
423
+ "at": 1785251912192,
424
+ "type": "session.next.tool.called",
425
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
426
+ "summary": "read"
427
+ },
428
+ {
429
+ "at": 1785251912442,
430
+ "type": "session.next.tool.called",
431
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
432
+ "summary": "read"
433
+ },
434
+ {
435
+ "at": 1785251912692,
436
+ "type": "session.next.tool.called",
437
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
438
+ "summary": "read"
439
+ },
440
+ {
441
+ "at": 1785251912942,
442
+ "type": "session.next.tool.called",
443
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
444
+ "summary": "read"
445
+ },
446
+ {
447
+ "at": 1785251913192,
448
+ "type": "session.next.tool.called",
449
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
450
+ "summary": "read"
451
+ },
452
+ {
453
+ "at": 1785251913442,
454
+ "type": "session.next.tool.called",
455
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
456
+ "summary": "read"
457
+ },
458
+ {
459
+ "at": 1785251913692,
460
+ "type": "session.next.tool.called",
461
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
462
+ "summary": "read"
463
+ },
464
+ {
465
+ "at": 1785251913942,
466
+ "type": "session.next.tool.called",
467
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
468
+ "summary": "read"
469
+ },
470
+ {
471
+ "at": 1785251914192,
472
+ "type": "session.next.tool.called",
473
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
474
+ "summary": "read"
475
+ },
476
+ {
477
+ "at": 1785251914442,
478
+ "type": "session.next.tool.called",
479
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
480
+ "summary": "read"
481
+ },
482
+ {
483
+ "at": 1785251914692,
484
+ "type": "session.next.tool.called",
485
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
486
+ "summary": "read"
487
+ },
488
+ {
489
+ "at": 1785251914942,
490
+ "type": "session.next.text.delta",
491
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
492
+ "summary": "Now let me read tsconfig files and explore each package's source structure:"
493
+ },
494
+ {
495
+ "at": 1785251915192,
496
+ "type": "session.next.step.ended",
497
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
498
+ "summary": "step ended"
499
+ },
500
+ {
501
+ "at": 1785251915442,
502
+ "type": "session.next.prompted",
503
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
504
+ "summary": "assistant prompt"
505
+ },
506
+ {
507
+ "at": 1785251915692,
508
+ "type": "session.next.prompted",
509
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
510
+ "summary": "assistant prompt"
511
+ },
512
+ {
513
+ "at": 1785251915942,
514
+ "type": "session.next.prompted",
515
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
516
+ "summary": "assistant prompt"
517
+ },
518
+ {
519
+ "at": 1785251916192,
520
+ "type": "session.next.prompted",
521
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
522
+ "summary": "user prompt"
523
+ },
524
+ {
525
+ "at": 1785251916442,
526
+ "type": "session.next.step.started",
527
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
528
+ "summary": "step started"
529
+ },
530
+ {
531
+ "at": 1785251916942,
532
+ "type": "session.next.reasoning.delta",
533
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
534
+ "summary": "Now let me explore the source directories of each package."
535
+ },
536
+ {
537
+ "at": 1785251917442,
538
+ "type": "session.next.tool.called",
539
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
540
+ "summary": "read"
541
+ },
542
+ {
543
+ "at": 1785251917692,
544
+ "type": "session.next.tool.called",
545
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
546
+ "summary": "read"
547
+ },
548
+ {
549
+ "at": 1785251917942,
550
+ "type": "session.next.tool.called",
551
+ "sessionId": "ses_056b1f037ffeu1d00DzvJBrHq9",
552
+ "summary": "read"
553
+ }
554
+ ]
@@ -0,0 +1,140 @@
1
+ /**
2
+ * SubsystemAgentsPanel — the graph sidebar's Agents view: the Maintain agent
3
+ * pipeline, with the stage the router picked next highlighted and runnable.
4
+ *
5
+ * The host supplies the agent rows and the router's pick (`nextAgentId`); this
6
+ * component is presentation + the run trigger only.
7
+ */
8
+
9
+ import { useTheme } from '@principal-ade/industry-theme';
10
+ import { Bot, Play } from 'lucide-react';
11
+
12
+ export interface SubsystemAgent {
13
+ id: string;
14
+ label: string;
15
+ /** Display group, e.g. `construct` / `static-topology` / `dynamic-topology`. */
16
+ lane?: string;
17
+ /** `issues` (fixer) or `verify` (verifier). */
18
+ mode?: string;
19
+ }
20
+
21
+ export interface SubsystemAgentsPanelProps {
22
+ agents: SubsystemAgent[];
23
+ /** Router's next stage, by agent id. Highlighted and runnable. */
24
+ nextAgentId?: string | null;
25
+ /** A Maintain run is in flight for this model. */
26
+ running?: boolean;
27
+ /** Run the router's next stage. */
28
+ onRun?: () => void;
29
+ }
30
+
31
+ const LANE_LABEL: Record<string, string> = {
32
+ construct: 'Construct',
33
+ 'static-topology': 'Static topology',
34
+ 'dynamic-topology': 'Dynamic topology',
35
+ };
36
+
37
+ export function SubsystemAgentsPanel({
38
+ agents,
39
+ nextAgentId,
40
+ running,
41
+ onRun,
42
+ }: SubsystemAgentsPanelProps) {
43
+ const { theme } = useTheme();
44
+ const muted = theme.colors.textMuted ?? theme.colors.textSecondary;
45
+ const accent = theme.colors.primary ?? '#7dd3fc';
46
+
47
+ if (agents.length === 0) {
48
+ return (
49
+ <div
50
+ style={{
51
+ flex: 1,
52
+ minHeight: 0,
53
+ display: 'flex',
54
+ alignItems: 'center',
55
+ justifyContent: 'center',
56
+ padding: 16,
57
+ color: muted,
58
+ fontFamily: theme.fonts.body,
59
+ fontSize: theme.fontSizes[1],
60
+ }}
61
+ >
62
+ No Maintain agents configured.
63
+ </div>
64
+ );
65
+ }
66
+
67
+ return (
68
+ <div style={{ flex: 1, minHeight: 0, overflowY: 'auto' }}>
69
+ {agents.map((agent) => {
70
+ const isNext = nextAgentId === agent.id;
71
+ return (
72
+ <div
73
+ key={agent.id}
74
+ style={{
75
+ display: 'flex',
76
+ alignItems: 'center',
77
+ gap: 8,
78
+ padding: '9px 12px',
79
+ borderBottom: `1px solid ${theme.colors.border}`,
80
+ background: isNext ? `${accent}14` : 'transparent',
81
+ }}
82
+ >
83
+ <Bot
84
+ size={14}
85
+ color={isNext ? accent : muted}
86
+ style={{ flexShrink: 0 }}
87
+ aria-hidden="true"
88
+ />
89
+ <div style={{ flex: 1, minWidth: 0, display: 'flex', flexDirection: 'column', gap: 2 }}>
90
+ <span
91
+ style={{
92
+ fontFamily: theme.fonts.monospace,
93
+ fontSize: theme.fontSizes[1],
94
+ color: isNext ? theme.colors.text : theme.colors.textSecondary,
95
+ whiteSpace: 'nowrap',
96
+ overflow: 'hidden',
97
+ textOverflow: 'ellipsis',
98
+ }}
99
+ >
100
+ {agent.label}
101
+ </span>
102
+ {agent.lane || agent.mode ? (
103
+ <span style={{ fontSize: theme.fontSizes[0], color: muted }}>
104
+ {agent.lane ? (LANE_LABEL[agent.lane] ?? agent.lane) : null}
105
+ {agent.lane && agent.mode ? ' · ' : null}
106
+ {agent.mode ?? null}
107
+ </span>
108
+ ) : null}
109
+ </div>
110
+ {isNext ? (
111
+ <button
112
+ type="button"
113
+ onClick={() => onRun?.()}
114
+ disabled={running || onRun == null}
115
+ style={{
116
+ display: 'inline-flex',
117
+ alignItems: 'center',
118
+ gap: 5,
119
+ padding: '3px 8px',
120
+ border: `1px solid ${accent}`,
121
+ borderRadius: 4,
122
+ background: 'transparent',
123
+ color: accent,
124
+ fontFamily: theme.fonts.monospace,
125
+ fontSize: theme.fontSizes[1],
126
+ cursor: running || onRun == null ? 'default' : 'pointer',
127
+ opacity: running || onRun == null ? 0.6 : 1,
128
+ flexShrink: 0,
129
+ }}
130
+ >
131
+ <Play size={11} />
132
+ {running ? 'Running…' : 'Run'}
133
+ </button>
134
+ ) : null}
135
+ </div>
136
+ );
137
+ })}
138
+ </div>
139
+ );
140
+ }