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,600 @@
1
+ /*
2
+ * Session cards and metrics
3
+ * -------------------------
4
+ * Session summaries, provider marks, status pills, context meters, and token data.
5
+ */
6
+
7
+ .provider-mark {
8
+ --provider: #8fa2b7;
9
+ display: grid;
10
+ place-items: center;
11
+ width: 35px;
12
+ height: 35px;
13
+ flex: 0 0 auto;
14
+ border-radius: 10px;
15
+ background: color-mix(in srgb,var(--provider) 11%,#111620);
16
+ border: 1px solid color-mix(in srgb,var(--provider) 32%,#202938);
17
+ color: var(--provider);
18
+ font-size: 9px;
19
+ font-weight: 850;
20
+ letter-spacing: -.03em;
21
+ }
22
+
23
+ .session-card:before {
24
+ content: "";
25
+ position: absolute;
26
+ left: 0;
27
+ right: 0;
28
+ top: 0;
29
+ height: 2px;
30
+ background: linear-gradient(90deg,var(--provider),transparent 72%);
31
+ opacity: .7;
32
+ }
33
+
34
+ .session-card.running {
35
+ box-shadow: inset 0 0 36px color-mix(in srgb,var(--provider) 4%,transparent);
36
+ }
37
+
38
+ .card-head {
39
+ display: flex;
40
+ gap: 10px;
41
+ align-items: center;
42
+ padding: 15px 16px 11px;
43
+ }
44
+
45
+ .card-head-main {
46
+ min-width: 0;
47
+ flex: 1;
48
+ }
49
+
50
+ .status-pill:before {
51
+ content: "";
52
+ width: 5px;
53
+ height: 5px;
54
+ border-radius: 50%;
55
+ background: #697487;
56
+ }
57
+
58
+ .status-pill.running {
59
+ border-color: rgba(76,227,154,.25);
60
+ background: rgba(76,227,154,.08);
61
+ color: #7cecad;
62
+ }
63
+
64
+ .status-pill.running:before {
65
+ background: var(--green);
66
+ box-shadow: 0 0 7px var(--green);
67
+ }
68
+
69
+ .status-pill.waiting {
70
+ border-color: rgba(246,189,85,.25);
71
+ background: rgba(246,189,85,.08);
72
+ color: #f6c974;
73
+ }
74
+
75
+ .status-pill.waiting:before {
76
+ background: var(--amber);
77
+ }
78
+
79
+ .status-pill.failed {
80
+ border-color: rgba(255,107,127,.25);
81
+ background: rgba(255,107,127,.08);
82
+ color: #ff8999;
83
+ }
84
+
85
+ .status-pill.cancelled {
86
+ border-color: rgba(255,107,127,.25);
87
+ background: rgba(255,107,127,.08);
88
+ color: #ff8999;
89
+ }
90
+
91
+ .status-pill.failed:before {
92
+ background: var(--red);
93
+ }
94
+
95
+ .status-pill.cancelled:before {
96
+ background: var(--red);
97
+ }
98
+
99
+ .card-subtitle span {
100
+ overflow: hidden;
101
+ text-overflow: ellipsis;
102
+ }
103
+
104
+ .card-subtitle i {
105
+ width: 3px;
106
+ height: 3px;
107
+ border-radius: 50%;
108
+ background: #3d4655;
109
+ flex: 0 0 auto;
110
+ }
111
+
112
+ .card-usage {
113
+ display: grid;
114
+ grid-template-columns: 1.1fr .9fr;
115
+ gap: 12px;
116
+ padding: 13px 16px;
117
+ }
118
+
119
+ .token-breakdown {
120
+ display: grid;
121
+ grid-template-columns: repeat(2,1fr);
122
+ gap: 5px;
123
+ }
124
+
125
+ .token-breakdown div {
126
+ min-width: 0;
127
+ }
128
+
129
+ .token-breakdown span {
130
+ display: block;
131
+ color: #566173;
132
+ font-size: 7px;
133
+ }
134
+
135
+ .token-breakdown b {
136
+ display: block;
137
+ margin-top: 2px;
138
+ color: #aeb9c6;
139
+ font-size: 9px;
140
+ font-weight: 570;
141
+ }
142
+
143
+ .session-card.running .source-tag:before {
144
+ background: var(--green);
145
+ }
146
+
147
+ .now-strip.is-live {
148
+ border-color: rgba(76,227,154,.17);
149
+ background: linear-gradient(90deg,rgba(76,227,154,.07),#090d14 74%);
150
+ }
151
+
152
+ .now-strip-icon {
153
+ width: 25px;
154
+ height: 25px;
155
+ flex: 0 0 auto;
156
+ display: grid;
157
+ place-items: center;
158
+ border-radius: 7px;
159
+ background: color-mix(in srgb,var(--provider) 11%,#131822);
160
+ color: var(--provider);
161
+ font-size: 10px;
162
+ }
163
+
164
+ .now-strip>div {
165
+ min-width: 0;
166
+ flex: 1;
167
+ }
168
+
169
+ .now-strip.is-live b {
170
+ color: #75e9ab;
171
+ }
172
+
173
+ .preview-line.assistant b {
174
+ color: var(--provider);
175
+ }
176
+
177
+ .preview-line.tool b {
178
+ color: #b49dea;
179
+ }
180
+
181
+ .preview-line.user span {
182
+ color: #b3bdc9;
183
+ }
184
+
185
+ .context-meter {
186
+ margin: 11px 16px 0;
187
+ padding: 11px 12px;
188
+ border: 1px solid #1b2532;
189
+ border-radius: 11px;
190
+ background: #0a0f16;
191
+ }
192
+
193
+ .context-meter-head {
194
+ display: flex;
195
+ align-items: end;
196
+ justify-content: space-between;
197
+ gap: 12px;
198
+ }
199
+
200
+ .context-meter.warning .context-meter-head>b {
201
+ color: var(--amber);
202
+ }
203
+
204
+ .context-meter.critical .context-meter-head>b {
205
+ color: var(--red);
206
+ }
207
+
208
+ .context-meter-track {
209
+ position: relative;
210
+ height: 9px;
211
+ margin-top: 9px;
212
+ border: 1px solid #25303e;
213
+ border-radius: 6px;
214
+ background: #141c27;
215
+ overflow: hidden;
216
+ }
217
+
218
+ .context-meter.warning .context-meter-track span {
219
+ background: linear-gradient(90deg,#d69a38,var(--amber));
220
+ }
221
+
222
+ .context-meter.critical .context-meter-track span {
223
+ background: linear-gradient(90deg,#e34e67,var(--red));
224
+ animation: meter-alert 1.15s ease-in-out infinite;
225
+ }
226
+
227
+ .context-meter-track i {
228
+ position: absolute;
229
+ z-index: 2;
230
+ top: 0;
231
+ bottom: 0;
232
+ width: 1px;
233
+ background: rgba(255,255,255,.19);
234
+ }
235
+
236
+ .context-meter-foot span:last-child {
237
+ color: #778397;
238
+ }
239
+
240
+ .token-row {
241
+ display: grid;
242
+ grid-template-columns: repeat(4,1fr);
243
+ gap: 0;
244
+ margin: 8px 16px 11px;
245
+ border: 1px solid #171f2b;
246
+ border-radius: 9px;
247
+ background: #0a0e15;
248
+ overflow: hidden;
249
+ }
250
+
251
+ .token-row>div {
252
+ min-width: 0;
253
+ padding: 7px 8px;
254
+ border-right: 1px solid #171f2b;
255
+ }
256
+
257
+ .token-row>div:last-child {
258
+ border: 0;
259
+ background: color-mix(in srgb,var(--provider) 5%,#0a0e15);
260
+ }
261
+
262
+ .token-row .total b {
263
+ color: var(--provider);
264
+ }
265
+
266
+ .token-hero {
267
+ padding: 17px;
268
+ border: 1px solid var(--line);
269
+ border-radius: 14px;
270
+ background: linear-gradient(145deg,color-mix(in srgb,var(--drawer-provider) 6%,#111721),#0c1018);
271
+ }
272
+
273
+ .token-hero-head {
274
+ display: flex;
275
+ justify-content: space-between;
276
+ }
277
+
278
+ .token-grid {
279
+ display: grid;
280
+ grid-template-columns: repeat(2,1fr);
281
+ gap: 9px;
282
+ margin-top: 12px;
283
+ }
284
+
285
+ .token-tile {
286
+ padding: 13px;
287
+ border: 1px solid var(--line-soft);
288
+ border-radius: 11px;
289
+ background: #0b0f16;
290
+ }
291
+
292
+ .token-tile strong {
293
+ display: block;
294
+ margin-top: 6px;
295
+ font-size: 17px;
296
+ font-weight: 620;
297
+ }
298
+
299
+ .now-strip {
300
+ margin: 13px 16px 0;
301
+ padding: 8px 10px;
302
+ display: flex;
303
+ align-items: center;
304
+ gap: 9px;
305
+ border: 1px solid var(--line-soft);
306
+ border-radius: 10px;
307
+ background: #090d14;
308
+ min-height: 56px;
309
+ }
310
+
311
+ .preview-line {
312
+ min-width: 0;
313
+ display: grid;
314
+ align-items: baseline;
315
+ gap: 7px;
316
+ grid-template-columns: 62px minmax(0,1fr);
317
+ }
318
+
319
+ .context-meter-head>b {
320
+ color: var(--provider);
321
+ font-weight: 670;
322
+ letter-spacing: -.05em;
323
+ font-size: 25px;
324
+ }
325
+
326
+ .token-hero-head span {
327
+ color: #6d798d;
328
+ font-size: 11px;
329
+ }
330
+
331
+ .token-hero-head b {
332
+ font-size: 14px;
333
+ }
334
+
335
+ .token-tile span {
336
+ display: block;
337
+ color: #606c7e;
338
+ font-size: 10px;
339
+ }
340
+
341
+ .token-tile small {
342
+ display: block;
343
+ margin-top: 4px;
344
+ color: #4e596a;
345
+ font-size: 9px;
346
+ }
347
+
348
+ .token-note {
349
+ margin-top: 12px;
350
+ padding: 11px 12px;
351
+ border-left: 2px solid #344153;
352
+ background: #0d121a;
353
+ color: #697588;
354
+ line-height: 1.55;
355
+ font-size: 9px;
356
+ }
357
+
358
+ .motion-content-in .token-tile {
359
+ animation: motion-item-in 360ms var(--motion-ease) both;
360
+ }
361
+
362
+ .motion-content-in .token-tile:nth-child(2) {
363
+ animation-delay: 34ms;
364
+ }
365
+
366
+ .motion-content-in .token-tile:nth-child(3) {
367
+ animation-delay: 68ms;
368
+ }
369
+
370
+ .motion-content-in .token-tile:nth-child(n+4) {
371
+ animation-delay: 92ms;
372
+ }
373
+
374
+ .status-pill.completed {
375
+ border-color: rgba(109,174,204,.25);
376
+ background: rgba(109,174,204,.08);
377
+ color: #91c9e1;
378
+ }
379
+
380
+ .status-pill.completed:before {
381
+ background: #6daecc;
382
+ }
383
+
384
+ .status-pill.work-working {
385
+ border-color: rgba(76,227,154,.32);
386
+ background: rgba(76,227,154,.11);
387
+ color: #78e9b2;
388
+ }
389
+
390
+ .status-pill.work-working:before {
391
+ background: #4ce39a;
392
+ box-shadow: 0 0 7px rgba(76,227,154,.7);
393
+ }
394
+
395
+ .status-pill.work-resting {
396
+ border-color: rgba(109,174,204,.26);
397
+ background: rgba(109,174,204,.08);
398
+ color: #9bc8da;
399
+ }
400
+
401
+ .status-pill.work-resting:before {
402
+ border: 1px solid #6daecc;
403
+ background: transparent;
404
+ }
405
+
406
+ .status-pill.work-attention {
407
+ border-color: rgba(255,107,127,.3);
408
+ background: rgba(255,107,127,.08);
409
+ color: #ff9aa8;
410
+ }
411
+
412
+ .status-pill.work-attention:before {
413
+ background: #ff6b7f;
414
+ }
415
+
416
+ .card-head .execution-mode-badge {
417
+ margin-left: auto;
418
+ }
419
+
420
+ .card-head .execution-mode-badge+.status-pill {
421
+ margin-left: 0;
422
+ }
423
+
424
+ .session-card:active {
425
+ transform: translateY(1px) scale(.985);
426
+ }
427
+
428
+ .session-card {
429
+ --provider: #8fa2b7;
430
+ position: relative;
431
+ min-width: 0;
432
+ border: 1px solid var(--line);
433
+ border-radius: var(--radius);
434
+ background: linear-gradient(155deg,color-mix(in srgb,var(--provider) 4%,#111722),#0c1018 48%);
435
+ overflow: hidden;
436
+ cursor: pointer;
437
+ content-visibility: auto;
438
+ contain-intrinsic-size: 430px;
439
+ contain: layout style paint;
440
+ min-height: 438px;
441
+ transition: transform var(--motion-medium) var(--motion-ease),border-color var(--motion-medium) ease,box-shadow var(--motion-medium) ease,filter var(--motion-medium) ease;
442
+ }
443
+
444
+ .session-card:hover {
445
+ transform: translateY(-3px);
446
+ border-color: color-mix(in srgb,var(--provider) 29%,#2b3546);
447
+ box-shadow: 0 16px 44px rgba(0,0,0,.22);
448
+ will-change: transform;
449
+ }
450
+
451
+ .context-meter-track span {
452
+ position: relative;
453
+ z-index: 1;
454
+ display: block;
455
+ height: 100%;
456
+ min-width: 0;
457
+ border-radius: 5px;
458
+ background: linear-gradient(90deg,color-mix(in srgb,var(--provider) 68%,#3ccf94),var(--provider));
459
+ box-shadow: 0 0 15px color-mix(in srgb,var(--provider) 28%,transparent);
460
+ transition: width 520ms var(--motion-ease),background-color var(--motion-medium) ease,filter var(--motion-medium) ease;
461
+ }
462
+
463
+ .card-provider-line {
464
+ display: flex;
465
+ align-items: center;
466
+ gap: 7px;
467
+ color: #6d798c;
468
+ font-size: 11px;
469
+ }
470
+
471
+ .card-provider-line b {
472
+ color: #b8c3d1;
473
+ font-size: 12px;
474
+ }
475
+
476
+ .status-pill {
477
+ margin-left: auto;
478
+ display: inline-flex;
479
+ align-items: center;
480
+ gap: 5px;
481
+ padding: 4px 7px;
482
+ border: 1px solid #2a3443;
483
+ border-radius: 10px;
484
+ background: #141a24;
485
+ color: #8d99aa;
486
+ font-weight: 700;
487
+ letter-spacing: .06em;
488
+ text-transform: uppercase;
489
+ font-size: 10px;
490
+ }
491
+
492
+ .card-title {
493
+ margin: 0;
494
+ padding: 0 16px;
495
+ font-weight: 610;
496
+ letter-spacing: -.025em;
497
+ white-space: nowrap;
498
+ overflow: hidden;
499
+ text-overflow: ellipsis;
500
+ font-size: 16px;
501
+ line-height: 1.45;
502
+ }
503
+
504
+ .card-subtitle {
505
+ display: flex;
506
+ align-items: center;
507
+ gap: 7px;
508
+ margin: 6px 16px 0;
509
+ white-space: nowrap;
510
+ overflow: hidden;
511
+ color: #9ba8b8;
512
+ font-size: 11px;
513
+ }
514
+
515
+ .now-strip b {
516
+ display: block;
517
+ white-space: nowrap;
518
+ overflow: hidden;
519
+ text-overflow: ellipsis;
520
+ color: #c6d0dc;
521
+ font-weight: 620;
522
+ font-size: 12px;
523
+ }
524
+
525
+ .now-strip div>span {
526
+ display: block;
527
+ white-space: nowrap;
528
+ overflow: hidden;
529
+ text-overflow: ellipsis;
530
+ margin-top: 3px;
531
+ color: #95a3b4;
532
+ font-size: 11px;
533
+ }
534
+
535
+ .preview-line b {
536
+ color: #778397;
537
+ text-transform: uppercase;
538
+ white-space: nowrap;
539
+ font-size: 10px;
540
+ }
541
+
542
+ .preview-line span {
543
+ overflow: hidden;
544
+ text-overflow: ellipsis;
545
+ white-space: nowrap;
546
+ color: #a7b3c1;
547
+ font-size: 11px;
548
+ }
549
+
550
+ .context-meter-head>div span {
551
+ display: block;
552
+ font-weight: 700;
553
+ letter-spacing: .08em;
554
+ text-transform: uppercase;
555
+ color: #909eaf;
556
+ font-size: 11px;
557
+ }
558
+
559
+ .context-meter-foot {
560
+ display: flex;
561
+ justify-content: space-between;
562
+ gap: 10px;
563
+ margin-top: 6px;
564
+ color: #909eaf;
565
+ font-size: 11px;
566
+ }
567
+
568
+ .token-row span {
569
+ display: block;
570
+ color: #909eaf;
571
+ font-size: 11px;
572
+ }
573
+
574
+ .card-footer {
575
+ height: 34px;
576
+ display: flex;
577
+ align-items: center;
578
+ justify-content: space-between;
579
+ padding: 0 16px;
580
+ border-top: 1px solid var(--line-soft);
581
+ background: rgba(7,10,16,.42);
582
+ color: #909eaf;
583
+ font-size: 11px;
584
+ }
585
+
586
+ .context-meter-head>div strong {
587
+ display: block;
588
+ margin-top: 4px;
589
+ color: #d1d9e3;
590
+ font-weight: 620;
591
+ font-size: 13px;
592
+ }
593
+
594
+ .token-row b {
595
+ display: block;
596
+ margin-top: 3px;
597
+ color: #aeb9c7;
598
+ font-weight: 600;
599
+ font-size: 12px;
600
+ }