loadtoagent 1.0.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 (82) hide show
  1. package/README.ko.md +175 -0
  2. package/README.md +175 -0
  3. package/README.zh-CN.md +175 -0
  4. package/bin/loadtoagent.js +171 -0
  5. package/docs/ARCHITECTURE.md +30 -0
  6. package/docs/PROVIDER-CONTRACTS.md +58 -0
  7. package/docs/assets/loadtoagent-dashboard.png +0 -0
  8. package/docs/assets/loadtoagent-demo.gif +0 -0
  9. package/main.js +493 -0
  10. package/package.json +133 -0
  11. package/preload.js +75 -0
  12. package/renderer/app-agent-actions.js +285 -0
  13. package/renderer/app-bootstrap.js +95 -0
  14. package/renderer/app-dashboard.js +361 -0
  15. package/renderer/app-drawer-content.js +203 -0
  16. package/renderer/app-drawer-data.js +41 -0
  17. package/renderer/app-drawer.js +183 -0
  18. package/renderer/app-events-dialogs.js +169 -0
  19. package/renderer/app-events-filters.js +74 -0
  20. package/renderer/app-events-navigation.js +96 -0
  21. package/renderer/app-events-sessions.js +195 -0
  22. package/renderer/app-events.js +16 -0
  23. package/renderer/app-graph-layout.js +71 -0
  24. package/renderer/app-graph-model.js +107 -0
  25. package/renderer/app-graph-orchestration.js +76 -0
  26. package/renderer/app-graph-view.js +544 -0
  27. package/renderer/app-run-modal.js +221 -0
  28. package/renderer/app-session-render.js +243 -0
  29. package/renderer/app-tmux-render.js +247 -0
  30. package/renderer/app.js +608 -0
  31. package/renderer/fonts/geist-ext.woff2 +0 -0
  32. package/renderer/fonts/geist.woff2 +0 -0
  33. package/renderer/i18n-messages.js +355 -0
  34. package/renderer/i18n.js +122 -0
  35. package/renderer/index.html +386 -0
  36. package/renderer/shared.js +26 -0
  37. package/renderer/styles-agent-map.css +401 -0
  38. package/renderer/styles-cards.css +600 -0
  39. package/renderer/styles-collaboration.css +534 -0
  40. package/renderer/styles-components.css +1293 -0
  41. package/renderer/styles-onboarding.css +344 -0
  42. package/renderer/styles-overlays.css +284 -0
  43. package/renderer/styles-product.css +686 -0
  44. package/renderer/styles-responsive-product.css +689 -0
  45. package/renderer/styles-responsive-runtime.css +718 -0
  46. package/renderer/styles-responsive-shell.css +533 -0
  47. package/renderer/styles-responsive-workflows.css +778 -0
  48. package/renderer/styles-run-composer.css +695 -0
  49. package/renderer/styles-settings.css +606 -0
  50. package/renderer/styles-terminal.css +1241 -0
  51. package/renderer/styles-tmux.css +1162 -0
  52. package/renderer/styles-workflow-map.css +513 -0
  53. package/renderer/styles-workflows.css +1217 -0
  54. package/renderer/styles.css +486 -0
  55. package/renderer/terminal-agent.js +152 -0
  56. package/renderer/terminal-events.js +226 -0
  57. package/renderer/terminal-workbench.js +464 -0
  58. package/renderer/terminal.js +497 -0
  59. package/src/agentMonitor/claudeParser.js +197 -0
  60. package/src/agentMonitor/codexCollaboration.js +95 -0
  61. package/src/agentMonitor/codexParser.js +447 -0
  62. package/src/agentMonitor/genericParser.js +244 -0
  63. package/src/agentMonitor/hierarchy.js +248 -0
  64. package/src/agentMonitor/sessionFiles.js +86 -0
  65. package/src/agentMonitor.js +591 -0
  66. package/src/agentRunner.js +465 -0
  67. package/src/bridgeServer.js +246 -0
  68. package/src/contracts.js +71 -0
  69. package/src/diagnostics.js +23 -0
  70. package/src/ipc/registerAgentIpc.js +12 -0
  71. package/src/ipc/registerAppIpc.js +20 -0
  72. package/src/ipc/registerTerminalIpc.js +50 -0
  73. package/src/ipc/registerTmuxIpc.js +30 -0
  74. package/src/ipc/registerWorkspaceIpc.js +14 -0
  75. package/src/monitorWorker.js +273 -0
  76. package/src/processMonitor.js +394 -0
  77. package/src/providerRegistry.js +120 -0
  78. package/src/terminalManager.js +438 -0
  79. package/src/tmuxController.js +183 -0
  80. package/src/tmuxMonitor.js +432 -0
  81. package/src/updateManager.js +339 -0
  82. package/src/workspaceStore.js +77 -0
@@ -0,0 +1,534 @@
1
+ /*
2
+ * Collaboration detail
3
+ * --------------------
4
+ * Subagent state, delegated work, communication history, and memory detail.
5
+ */
6
+
7
+ .session-card.subagent {
8
+ margin-left: 11px;
9
+ border-style: dashed;
10
+ }
11
+
12
+ .session-card.subagent:after {
13
+ content: "SUB";
14
+ position: absolute;
15
+ right: 14px;
16
+ top: 14px;
17
+ color: color-mix(in srgb,var(--provider) 66%,#8c98a8);
18
+ font-size: 7px;
19
+ font-weight: 800;
20
+ letter-spacing: .15em;
21
+ }
22
+
23
+ .chat-row.assistant .memory-candidates {
24
+ background: color-mix(in srgb,var(--drawer-provider) 3%,#0b0f16);
25
+ }
26
+
27
+ .memory-candidates {
28
+ border: 1px solid var(--line-soft);
29
+ border-radius: 11px;
30
+ background: #0b0f16;
31
+ color: #bec9d6;
32
+ font-size: 13px;
33
+ line-height: 1.68;
34
+ padding: 13px;
35
+ display: grid;
36
+ gap: 10px;
37
+ }
38
+
39
+ .memory-candidates .structured-heading {
40
+ margin-bottom: 1px;
41
+ }
42
+
43
+ .memory-candidate {
44
+ padding: 12px 13px;
45
+ border: 1px solid #243242;
46
+ border-radius: 10px;
47
+ background: #0d141d;
48
+ }
49
+
50
+ .memory-candidate header {
51
+ display: flex;
52
+ align-items: center;
53
+ gap: 7px;
54
+ }
55
+
56
+ .memory-candidate header>b {
57
+ width: 21px;
58
+ height: 21px;
59
+ display: grid;
60
+ place-items: center;
61
+ border-radius: 6px;
62
+ background: color-mix(in srgb,var(--drawer-provider) 12%,#17212d);
63
+ color: var(--drawer-provider);
64
+ font-size: 10px;
65
+ }
66
+
67
+ .memory-target {
68
+ padding: 3px 7px;
69
+ border-radius: 6px;
70
+ font-size: 10px;
71
+ max-width: 220px;
72
+ overflow: hidden;
73
+ background: #18222e;
74
+ color: #aebbc9;
75
+ text-overflow: ellipsis;
76
+ white-space: nowrap;
77
+ }
78
+
79
+ .memory-category {
80
+ padding: 3px 7px;
81
+ border-radius: 6px;
82
+ font-size: 10px;
83
+ margin-left: auto;
84
+ background: #10241f;
85
+ color: #74d9ae;
86
+ }
87
+
88
+ .memory-candidate p {
89
+ margin: 9px 0 0;
90
+ color: #c3ced9;
91
+ font-size: 12px;
92
+ line-height: 1.65;
93
+ white-space: pre-wrap;
94
+ overflow-wrap: anywhere;
95
+ }
96
+
97
+ .agent-communication-panel {
98
+ position: relative;
99
+ z-index: 2;
100
+ margin-top: 18px;
101
+ border: 1px solid #20363c;
102
+ border-radius: 14px;
103
+ background: rgba(6,14,19,.9);
104
+ overflow: hidden;
105
+ }
106
+
107
+ .agent-communication-panel>header {
108
+ min-height: 54px;
109
+ display: flex;
110
+ align-items: center;
111
+ justify-content: space-between;
112
+ gap: 12px;
113
+ padding: 10px 13px;
114
+ border-bottom: 1px solid #1b2b32;
115
+ background: rgba(15,31,35,.78);
116
+ }
117
+
118
+ .agent-communication-panel>header b {
119
+ display: block;
120
+ color: #dce9eb;
121
+ font-size: 12px;
122
+ }
123
+
124
+ .agent-communication-panel>header small {
125
+ display: block;
126
+ margin-top: 4px;
127
+ color: #71868d;
128
+ font-size: 9px;
129
+ }
130
+
131
+ .agent-communication-panel>header em {
132
+ padding: 5px 7px;
133
+ border-radius: 8px;
134
+ background: rgba(81,213,169,.09);
135
+ color: #75dfb8;
136
+ font-size: 9px;
137
+ font-style: normal;
138
+ }
139
+
140
+ .agent-communication-panel.empty>p {
141
+ padding: 18px;
142
+ color: #6f828c;
143
+ font-size: 10px;
144
+ text-align: center;
145
+ }
146
+
147
+ .agent-communication-list {
148
+ display: grid;
149
+ max-height: 330px;
150
+ overflow: auto;
151
+ scrollbar-color: #29434a transparent;
152
+ }
153
+
154
+ .agent-communication-event {
155
+ display: grid;
156
+ grid-template-columns: minmax(150px,210px) minmax(0,1fr) auto;
157
+ align-items: center;
158
+ gap: 12px;
159
+ min-height: 58px;
160
+ padding: 9px 12px;
161
+ border-bottom: 1px solid #17262d;
162
+ }
163
+
164
+ .agent-communication-event:last-child {
165
+ border-bottom: 0;
166
+ }
167
+
168
+ .agent-communication-event.result {
169
+ background: rgba(93,170,205,.035);
170
+ }
171
+
172
+ .agent-communication-event.assignment {
173
+ background: rgba(82,215,171,.028);
174
+ }
175
+
176
+ .communication-route {
177
+ display: flex;
178
+ align-items: center;
179
+ gap: 7px;
180
+ min-width: 0;
181
+ }
182
+
183
+ .communication-route b {
184
+ min-width: 0;
185
+ overflow: hidden;
186
+ color: #b8c8cf;
187
+ font-size: 9px;
188
+ text-overflow: ellipsis;
189
+ white-space: nowrap;
190
+ }
191
+
192
+ .communication-route i {
193
+ color: #4c9e87;
194
+ font-size: 12px;
195
+ font-style: normal;
196
+ }
197
+
198
+ .communication-copy {
199
+ min-width: 0;
200
+ }
201
+
202
+ .communication-copy small {
203
+ display: block;
204
+ color: #6edcaf;
205
+ font-size: 8px;
206
+ }
207
+
208
+ .communication-copy strong {
209
+ display: -webkit-box;
210
+ margin-top: 5px;
211
+ overflow: hidden;
212
+ color: #a9b8c0;
213
+ font-size: 10px;
214
+ font-weight: 500;
215
+ line-height: 1.4;
216
+ -webkit-box-orient: vertical;
217
+ -webkit-line-clamp: 2;
218
+ }
219
+
220
+ .agent-communication-event.result .communication-copy small {
221
+ color: #8fc6de;
222
+ }
223
+
224
+ .agent-communication-event time {
225
+ color: #596f79;
226
+ font-size: 8px;
227
+ }
228
+
229
+ .subagent-filterbar {
230
+ display: grid;
231
+ grid-template-columns: minmax(0,1fr) minmax(150px,210px) minmax(105px,130px) auto;
232
+ align-items: center;
233
+ gap: 8px;
234
+ margin: 0 0 10px;
235
+ padding: 8px;
236
+ border: 1px solid #21343c;
237
+ border-radius: 11px;
238
+ background: rgba(7,16,22,.88);
239
+ }
240
+
241
+ .subagent-status-filters {
242
+ display: flex;
243
+ align-items: center;
244
+ gap: 5px;
245
+ min-width: 0;
246
+ overflow-x: auto;
247
+ scrollbar-width: none;
248
+ }
249
+
250
+ .subagent-status-filters::-webkit-scrollbar {
251
+ display: none;
252
+ }
253
+
254
+ .subagent-status-filters button {
255
+ height: 30px;
256
+ display: flex;
257
+ align-items: center;
258
+ gap: 6px;
259
+ flex: 0 0 auto;
260
+ padding: 0 9px;
261
+ border: 1px solid #263943;
262
+ border-radius: 8px;
263
+ background: #0d171e;
264
+ color: #788b97;
265
+ font-size: 9px;
266
+ font-weight: 700;
267
+ cursor: pointer;
268
+ }
269
+
270
+ .subagent-status-filters button b {
271
+ min-width: 17px;
272
+ padding: 2px 4px;
273
+ border-radius: 6px;
274
+ background: #15242d;
275
+ color: #9aadb7;
276
+ font-size: 8px;
277
+ }
278
+
279
+ .subagent-status-filters button.active {
280
+ border-color: #43826f;
281
+ background: #153029;
282
+ color: #8be7c1;
283
+ }
284
+
285
+ .subagent-status-filters button.active b {
286
+ background: #214a3d;
287
+ color: #a7f1d4;
288
+ }
289
+
290
+ .subagent-search input {
291
+ width: 100%;
292
+ height: 30px;
293
+ border: 1px solid #293e49;
294
+ border-radius: 8px;
295
+ background: #091219;
296
+ color: #bac8d0;
297
+ font-size: 9px;
298
+ outline: none;
299
+ padding: 0 9px;
300
+ }
301
+
302
+ .subagent-provider-filter select {
303
+ width: 100%;
304
+ height: 30px;
305
+ border: 1px solid #293e49;
306
+ border-radius: 8px;
307
+ background: #091219;
308
+ color: #bac8d0;
309
+ font-size: 9px;
310
+ outline: none;
311
+ padding: 0 25px 0 8px;
312
+ }
313
+
314
+ .subagent-search input:focus {
315
+ border-color: #477c70;
316
+ box-shadow: 0 0 0 3px rgba(85,214,168,.06);
317
+ }
318
+
319
+ .subagent-provider-filter select:focus {
320
+ border-color: #477c70;
321
+ box-shadow: 0 0 0 3px rgba(85,214,168,.06);
322
+ }
323
+
324
+ .subagent-search input::placeholder {
325
+ color: #526673;
326
+ }
327
+
328
+ .subagent-filter-result {
329
+ color: #617783;
330
+ font-size: 8px;
331
+ white-space: nowrap;
332
+ }
333
+
334
+ .subagent-filter-result b {
335
+ color: #87d9bc;
336
+ font-size: 10px;
337
+ }
338
+
339
+ .subagent-conversation-summary {
340
+ display: grid;
341
+ grid-template-columns: repeat(3,minmax(0,1fr));
342
+ gap: 8px;
343
+ margin-bottom: 12px;
344
+ }
345
+
346
+ .subagent-conversation-summary>span {
347
+ padding: 11px;
348
+ border: 1px solid #263b45;
349
+ border-radius: 10px;
350
+ background: #0c171e;
351
+ }
352
+
353
+ .subagent-conversation-summary small {
354
+ display: block;
355
+ color: #718591;
356
+ font-size: 9px;
357
+ }
358
+
359
+ .subagent-conversation-summary b {
360
+ display: block;
361
+ margin-top: 5px;
362
+ color: #dce8ec;
363
+ font-size: 17px;
364
+ }
365
+
366
+ .subagent-conversation-summary>span:nth-child(1) b {
367
+ color: #76dfb8;
368
+ }
369
+
370
+ .subagent-conversation-summary>span:nth-child(2) b {
371
+ color: #8fc8df;
372
+ }
373
+
374
+ .subagent-dialog-row.user .chat-bubble {
375
+ background: #10231e;
376
+ }
377
+
378
+ .subagent-dialog-row.assistant .chat-bubble {
379
+ background: #111d28;
380
+ }
381
+
382
+ .subagent-dialog-row.system .chat-bubble {
383
+ background: #0d151c;
384
+ }
385
+
386
+ .subagent-dialog-list .chat-row.assistant {
387
+ padding-left: 28px;
388
+ }
389
+
390
+ .subagent-dialog-list .chat-row.user {
391
+ padding-right: 28px;
392
+ }
393
+
394
+ .subagent-dialog-row .chat-bubble {
395
+ border-color: #283c46;
396
+ min-width: 0;
397
+ max-width: 100%;
398
+ overflow: hidden;
399
+ }
400
+
401
+ .subagent-dialog-row .chat-bubble-head {
402
+ gap: 7px;
403
+ min-width: 0;
404
+ }
405
+
406
+ .subagent-dialog-row .chat-bubble-head b {
407
+ min-width: 0;
408
+ overflow: hidden;
409
+ text-overflow: ellipsis;
410
+ white-space: nowrap;
411
+ }
412
+
413
+ .subagent-dialog-row .subagent-route {
414
+ margin-right: auto;
415
+ padding: 3px 6px;
416
+ border-radius: 6px;
417
+ background: #13242a;
418
+ color: #6fa89b;
419
+ font-size: 8px;
420
+ min-width: 0;
421
+ overflow: hidden;
422
+ text-overflow: ellipsis;
423
+ white-space: nowrap;
424
+ }
425
+
426
+ .subagent-event-label {
427
+ display: block;
428
+ margin: 6px 0 -2px;
429
+ color: #6b8f8a;
430
+ font-size: 8px;
431
+ font-weight: 750;
432
+ min-width: 0;
433
+ overflow: hidden;
434
+ text-overflow: ellipsis;
435
+ white-space: nowrap;
436
+ }
437
+
438
+ .subagent-message-preview {
439
+ max-width: 100%;
440
+ overflow: hidden;
441
+ }
442
+
443
+ .subagent-message-preview p {
444
+ display: -webkit-box;
445
+ margin: 0;
446
+ overflow: hidden;
447
+ overflow-wrap: anywhere;
448
+ word-break: break-word;
449
+ white-space: normal;
450
+ -webkit-box-orient: vertical;
451
+ -webkit-line-clamp: 5;
452
+ }
453
+
454
+ .subagent-message-preview.is-truncated p {
455
+ color: #a9bac2;
456
+ }
457
+
458
+ .completed-subagent-disclosure {
459
+ grid-column: 1/-1;
460
+ min-width: 0;
461
+ }
462
+
463
+ .completed-subagent-disclosure>button {
464
+ width: 100%;
465
+ min-height: 58px;
466
+ display: grid;
467
+ grid-template-columns: 32px minmax(0,1fr) auto;
468
+ align-items: center;
469
+ gap: 10px;
470
+ padding: 9px 11px;
471
+ border: 1px solid #2a3b46;
472
+ border-radius: 11px;
473
+ background: linear-gradient(135deg,#101a22,#0c141b);
474
+ color: #8d9dab;
475
+ text-align: left;
476
+ cursor: pointer;
477
+ }
478
+
479
+ .completed-subagent-disclosure>button:hover {
480
+ border-color: #415866;
481
+ background: linear-gradient(135deg,#14212a,#0e1920);
482
+ color: #b7c4ce;
483
+ }
484
+
485
+ .completed-subagent-disclosure b {
486
+ display: block;
487
+ color: #b7c3cd;
488
+ font-size: 11px;
489
+ }
490
+
491
+ .completed-subagent-disclosure small {
492
+ display: block;
493
+ margin-top: 4px;
494
+ color: #667887;
495
+ font-size: 9px;
496
+ font-weight: 500;
497
+ }
498
+
499
+ .completed-subagent-disclosure button>i {
500
+ color: #7e93a1;
501
+ font-size: 9px;
502
+ font-style: normal;
503
+ font-weight: 700;
504
+ }
505
+
506
+ .completed-subagent-disclosure.expanded>button {
507
+ border-color: #3a555e;
508
+ background: #122128;
509
+ }
510
+
511
+ .completed-subagent-list {
512
+ grid-column: 1/-1;
513
+ display: grid;
514
+ grid-template-columns: repeat(2,minmax(0,1fr));
515
+ gap: 10px 12px;
516
+ padding-top: 2px;
517
+ }
518
+
519
+ .completed-subagent-list:before {
520
+ content: "완료 기록";
521
+ grid-column: 1/-1;
522
+ color: #617482;
523
+ font-size: 9px;
524
+ font-weight: 750;
525
+ letter-spacing: .08em;
526
+ }
527
+
528
+ .completed-subagent-list .child-session {
529
+ opacity: .88;
530
+ }
531
+
532
+ .completed-subagent-list .child-session:hover {
533
+ opacity: 1;
534
+ }