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,689 @@
1
+ /*
2
+ * Responsive product surfaces
3
+ * ---------------------------
4
+ * Overlays, run composer, onboarding, settings, and update surfaces.
5
+ * Breakpoints are ordered wide-to-narrow, followed by height and motion rules.
6
+ */
7
+
8
+ /* Compact screens ≤ 1100px: reflow onboarding and setup choices into fewer columns. */
9
+ @media (max-width:1100px) {
10
+ .beginner-guide-intro {
11
+ display: flex;
12
+ align-items: baseline;
13
+ gap: 9px;
14
+ }
15
+
16
+ .beginner-guide-intro span {
17
+ margin: 0;
18
+ }
19
+
20
+ .guide-toggle {
21
+ order: 3;
22
+ }
23
+
24
+ .beginner-guide {
25
+ grid-template-columns: 1fr;
26
+ padding-top: 18px;
27
+ }
28
+
29
+ .beginner-guide ol {
30
+ grid-template-columns: repeat(2,minmax(0,1fr));
31
+ }
32
+ }
33
+
34
+ /* Compact screens ≤ 900px: reflow onboarding and setup choices into fewer columns. */
35
+ @media (max-width:900px) {
36
+ .provider-rail-item small {
37
+ display: none;
38
+ }
39
+
40
+ .provider-rail-item {
41
+ justify-content: center;
42
+ }
43
+
44
+ .section-title {
45
+ justify-content: center;
46
+ }
47
+
48
+ .runtime-segment>header {
49
+ flex-wrap: wrap;
50
+ }
51
+
52
+ .runtime-segment>header em {
53
+ display: none;
54
+ }
55
+
56
+ .runtime-segment .agent-flow-overview {
57
+ grid-template-columns: 1fr;
58
+ }
59
+
60
+ .language-settings-card {
61
+ grid-template-columns: 48px minmax(0,1fr);
62
+ }
63
+
64
+ .language-select {
65
+ grid-column: 1/-1;
66
+ }
67
+
68
+ .version-route {
69
+ grid-template-columns: 1fr;
70
+ }
71
+
72
+ .version-connector {
73
+ grid-template-columns: 1fr;
74
+ justify-items: center;
75
+ }
76
+
77
+ .version-connector i {
78
+ width: 1px;
79
+ height: 15px;
80
+ background: #345e54!important;
81
+ }
82
+
83
+ .update-console {
84
+ grid-template-columns: 48px minmax(0,1fr);
85
+ }
86
+
87
+ .update-actions {
88
+ grid-column: 1/-1;
89
+ justify-content: flex-end;
90
+ }
91
+
92
+ .settings-meta-grid {
93
+ grid-template-columns: 1fr;
94
+ }
95
+
96
+ .version-node {
97
+ min-height: 100px;
98
+ }
99
+ }
100
+
101
+ /* Compact screens ≤ 720px: use edge-to-edge dialogs and single-column task forms. */
102
+ @media (max-width:720px) {
103
+ .beginner-guide li:first-child {
104
+ border-top: 0;
105
+ }
106
+
107
+ .beginner-guide-intro {
108
+ display: block;
109
+ }
110
+
111
+ .beginner-guide-intro span {
112
+ margin-top: 5px;
113
+ }
114
+
115
+ .child-row {
116
+ margin-left: 13px;
117
+ margin-right: 13px;
118
+ }
119
+
120
+ .detail-drawer {
121
+ width: 100vw;
122
+ height: 100vh;
123
+ height: 100dvh;
124
+ border-left: 0;
125
+ }
126
+
127
+ .drawer-head {
128
+ padding: 16px 14px 13px;
129
+ }
130
+
131
+ .drawer-meta {
132
+ padding: 0 14px 13px;
133
+ }
134
+
135
+ .drawer-tabs {
136
+ padding: 0 8px;
137
+ overflow-x: auto;
138
+ }
139
+
140
+ .drawer-tab {
141
+ min-width: 0;
142
+ flex: 1;
143
+ padding-inline: 8px;
144
+ white-space: nowrap;
145
+ }
146
+
147
+ .drawer-content {
148
+ padding: 15px 14px calc(24px + env(safe-area-inset-bottom));
149
+ }
150
+
151
+ .modal-backdrop {
152
+ align-items: end;
153
+ padding: 0;
154
+ }
155
+
156
+ .run-provider-picker {
157
+ grid-template-columns: repeat(2,minmax(0,1fr));
158
+ }
159
+
160
+ .modal-actions {
161
+ display: grid;
162
+ grid-template-columns: repeat(2,minmax(0,1fr));
163
+ }
164
+
165
+ .modal-actions button {
166
+ width: 100%;
167
+ padding-inline: 8px;
168
+ }
169
+
170
+ .toast {
171
+ width: max-content;
172
+ max-width: calc(100vw - 28px);
173
+ bottom: calc(78px + env(safe-area-inset-bottom));
174
+ text-align: center;
175
+ }
176
+
177
+ .settings-section {
178
+ margin-top: 20px;
179
+ }
180
+
181
+ .update-notice {
182
+ margin-top: 15px;
183
+ }
184
+
185
+ .update-notice small {
186
+ display: none;
187
+ }
188
+
189
+ .update-notice button {
190
+ padding-inline: 9px;
191
+ }
192
+
193
+ .settings-head {
194
+ align-items: flex-start;
195
+ }
196
+
197
+ .settings-head h2 {
198
+ font-size: 21px;
199
+ }
200
+
201
+ .settings-head p:last-child {
202
+ font-size: 10px;
203
+ }
204
+
205
+ .settings-emblem {
206
+ width: 46px;
207
+ height: 46px;
208
+ }
209
+
210
+ .language-settings-card {
211
+ padding: 15px;
212
+ }
213
+
214
+ .version-route {
215
+ padding: 13px;
216
+ }
217
+
218
+ .version-node {
219
+ padding: 15px;
220
+ }
221
+
222
+ .version-node strong {
223
+ font-size: 24px;
224
+ }
225
+
226
+ .update-console {
227
+ padding: 16px;
228
+ }
229
+
230
+ .update-actions {
231
+ justify-content: stretch;
232
+ }
233
+
234
+ .update-actions button {
235
+ flex: 1;
236
+ }
237
+
238
+ .update-progress {
239
+ margin-right: 16px;
240
+ margin-left: 16px;
241
+ }
242
+
243
+ .update-error {
244
+ margin-right: 16px;
245
+ margin-left: 16px;
246
+ }
247
+
248
+ .release-notes>div {
249
+ padding-right: 16px;
250
+ padding-left: 16px;
251
+ }
252
+
253
+ .release-notes pre {
254
+ padding-right: 16px;
255
+ padding-left: 16px;
256
+ }
257
+
258
+ .new-run-cta-copy {
259
+ justify-content: center;
260
+ }
261
+
262
+ .new-run-cta-copy small {
263
+ display: none;
264
+ }
265
+
266
+ .run-composer {
267
+ width: 100%;
268
+ max-width: none;
269
+ border-radius: 20px 20px 0 0;
270
+ }
271
+
272
+ .run-composer .modal-head {
273
+ padding: 18px 16px 14px;
274
+ }
275
+
276
+ .run-composer .modal-head h2 {
277
+ font-size: 20px;
278
+ }
279
+
280
+ .run-step {
281
+ padding: 16px;
282
+ }
283
+
284
+ .run-composer .run-provider-picker {
285
+ grid-template-columns: repeat(2,minmax(0,1fr));
286
+ }
287
+
288
+ .run-advanced {
289
+ margin-inline: 16px;
290
+ }
291
+
292
+ .run-composer .form-error {
293
+ margin-inline: 16px;
294
+ }
295
+
296
+ .run-modal-actions {
297
+ padding-inline: 16px;
298
+ }
299
+
300
+ .run-shortcut-hint {
301
+ display: none;
302
+ }
303
+
304
+ .sidebar .nav-item[data-view="settings"] {
305
+ display: none;
306
+ }
307
+
308
+ .mobile-more-nav {
309
+ display: grid;
310
+ }
311
+
312
+ .mobile-tools-menu {
313
+ position: fixed;
314
+ z-index: 45;
315
+ right: 10px;
316
+ bottom: calc(76px + env(safe-area-inset-bottom));
317
+ left: 10px;
318
+ max-width: 430px;
319
+ margin-left: auto;
320
+ padding: 12px;
321
+ border: 1px solid #324456;
322
+ border-radius: 16px;
323
+ background: #111925;
324
+ box-shadow: 0 24px 70px rgba(0,0,0,.62);
325
+ }
326
+
327
+ .mobile-tools-menu:not(.hidden) {
328
+ display: grid;
329
+ gap: 7px;
330
+ }
331
+
332
+ .mobile-tools-menu>div {
333
+ padding: 4px 5px 8px;
334
+ }
335
+
336
+ .mobile-tools-menu>div b {
337
+ display: block;
338
+ font-size: 14px;
339
+ }
340
+
341
+ .mobile-tools-menu>div span {
342
+ display: block;
343
+ margin-top: 3px;
344
+ color: #9ba9b8;
345
+ font-size: 11px;
346
+ }
347
+
348
+ .mobile-tools-menu>button {
349
+ min-height: 58px;
350
+ display: grid;
351
+ grid-template-columns: 40px minmax(0,1fr);
352
+ align-items: center;
353
+ gap: 10px;
354
+ padding: 8px 10px;
355
+ border: 1px solid #263646;
356
+ border-radius: 12px;
357
+ background: #0d141e;
358
+ color: #dce6ee;
359
+ text-align: left;
360
+ cursor: pointer;
361
+ }
362
+
363
+ .mobile-tools-menu>button:hover {
364
+ border-color: #45647a;
365
+ background: #152230;
366
+ }
367
+
368
+ .mobile-tools-menu i {
369
+ width: 38px;
370
+ height: 38px;
371
+ display: grid;
372
+ place-items: center;
373
+ border-radius: 10px;
374
+ background: #172736;
375
+ color: #87def7;
376
+ font-style: normal;
377
+ }
378
+
379
+ .mobile-tools-menu b {
380
+ display: block;
381
+ font-size: 12px;
382
+ }
383
+
384
+ .mobile-tools-menu small {
385
+ display: block;
386
+ margin-top: 4px;
387
+ color: #94a3b3;
388
+ font-size: 10px;
389
+ }
390
+
391
+ .guide-toggle {
392
+ order: 0;
393
+ grid-column: 1/-1;
394
+ width: 100%;
395
+ }
396
+
397
+ .new-run-cta {
398
+ min-width: 0;
399
+ height: 46px;
400
+ padding-inline: 9px;
401
+ width: 100%;
402
+ }
403
+
404
+ .beginner-guide {
405
+ margin-top: 16px;
406
+ gap: 14px;
407
+ padding: 16px 44px 16px 14px;
408
+ }
409
+
410
+ .beginner-guide ol {
411
+ grid-template-columns: 1fr;
412
+ display: flex;
413
+ gap: 9px;
414
+ overflow-x: auto;
415
+ scroll-snap-type: x mandatory;
416
+ scrollbar-width: thin;
417
+ }
418
+
419
+ .beginner-guide li {
420
+ border-left: 0;
421
+ border-top: 1px solid #263746;
422
+ padding: 9px 2px;
423
+ min-width: min(82vw,330px);
424
+ scroll-snap-align: start;
425
+ }
426
+
427
+ .beginner-guide li>button {
428
+ min-height: 116px;
429
+ }
430
+
431
+ .guide-dismiss {
432
+ top: 10px;
433
+ right: 9px;
434
+ font-size: 0;
435
+ }
436
+
437
+ .guide-dismiss:after {
438
+ content: "×";
439
+ font-size: 18px;
440
+ }
441
+
442
+ body[data-current-view="settings"] .topbar {
443
+ margin-bottom: 10px;
444
+ padding-bottom: 10px;
445
+ }
446
+
447
+ body[data-current-view="settings"] .topbar h1 {
448
+ font-size: 19px;
449
+ }
450
+
451
+ .run-modal {
452
+ width: 100%;
453
+ max-width: none;
454
+ max-height: 94vh;
455
+ max-height: 94dvh;
456
+ padding: 19px 16px calc(18px + env(safe-area-inset-bottom));
457
+ border-right: 0;
458
+ border-bottom: 0;
459
+ border-left: 0;
460
+ border-radius: 20px 20px 0 0;
461
+ scroll-padding-bottom: 88px;
462
+ background: #0b131c;
463
+ }
464
+ }
465
+
466
+ /* Compact screens ≤ 640px: use edge-to-edge dialogs and single-column task forms. */
467
+ @media (max-width:640px) {
468
+ .run-provider-picker {
469
+ grid-template-columns: repeat(2,1fr);
470
+ }
471
+
472
+ .runtime-strip {
473
+ grid-template-columns: auto 1fr;
474
+ }
475
+
476
+ .runtime-strip>span:last-child {
477
+ grid-column: 1/-1;
478
+ }
479
+ }
480
+
481
+ /* Compact screens ≤ 520px: keep compact forms and dialog actions inside the safe area. */
482
+ @media (max-width:520px) {
483
+ .runtime-segment>header {
484
+ display: grid;
485
+ grid-template-columns: 39px minmax(0,1fr) auto;
486
+ align-items: center;
487
+ gap: 9px;
488
+ }
489
+
490
+ .runtime-segment>header>.runtime-segment-icon {
491
+ grid-column: 1;
492
+ grid-row: 1;
493
+ }
494
+
495
+ .runtime-segment>header>span:nth-child(2) {
496
+ grid-column: 2;
497
+ grid-row: 1;
498
+ min-width: 0;
499
+ }
500
+
501
+ .runtime-segment>header>strong {
502
+ grid-column: 3;
503
+ grid-row: 1;
504
+ }
505
+
506
+ .runtime-segment>header>.live-tmux-overview-open {
507
+ grid-column: 1/4;
508
+ grid-row: 2;
509
+ width: 100%;
510
+ margin: 0;
511
+ }
512
+ }
513
+
514
+ /* Compact screens ≤ 430px: keep compact forms and dialog actions inside the safe area. */
515
+ @media (max-width:430px) {
516
+ .settings-head p:last-child {
517
+ display: none;
518
+ }
519
+
520
+ .language-settings-card {
521
+ grid-template-columns: 1fr;
522
+ }
523
+
524
+ .language-settings-mark {
525
+ width: 42px;
526
+ height: 42px;
527
+ }
528
+
529
+ .language-select {
530
+ grid-column: auto;
531
+ }
532
+
533
+ .update-console {
534
+ grid-template-columns: 1fr;
535
+ }
536
+
537
+ .update-state-mark {
538
+ width: 42px;
539
+ height: 42px;
540
+ }
541
+
542
+ .update-actions {
543
+ display: grid;
544
+ grid-template-columns: 1fr;
545
+ }
546
+
547
+ .release-notes>div {
548
+ align-items: flex-start;
549
+ flex-direction: column;
550
+ gap: 7px;
551
+ }
552
+ }
553
+
554
+ /* Compact screens ≤ 420px: keep compact forms and dialog actions inside the safe area. */
555
+ @media (max-width:420px) {
556
+ .primary-button {
557
+ font-size: 11px;
558
+ }
559
+
560
+ .ghost-button {
561
+ font-size: 11px;
562
+ }
563
+
564
+ .beginner-guide li {
565
+ grid-template-columns: 26px minmax(0,1fr);
566
+ gap: 8px;
567
+ }
568
+
569
+ .beginner-guide li>i {
570
+ width: 24px;
571
+ height: 24px;
572
+ }
573
+
574
+ .drawer-content {
575
+ padding-inline: 11px;
576
+ }
577
+
578
+ .drawer-head {
579
+ padding-right: 11px;
580
+ padding-left: 11px;
581
+ }
582
+
583
+ .drawer-meta {
584
+ padding-right: 11px;
585
+ padding-left: 11px;
586
+ }
587
+
588
+ .run-modal {
589
+ padding-right: 13px;
590
+ padding-left: 13px;
591
+ }
592
+
593
+ .new-run-cta-copy b {
594
+ font-size: 11px;
595
+ }
596
+
597
+ .run-composer .modal-head {
598
+ padding-inline: 14px;
599
+ }
600
+
601
+ .run-step {
602
+ padding: 14px;
603
+ }
604
+
605
+ .run-prompt-tools {
606
+ align-items: flex-end;
607
+ flex-direction: column;
608
+ }
609
+
610
+ .run-prompt-examples {
611
+ width: 100%;
612
+ }
613
+
614
+ .run-composer .path-field {
615
+ display: grid;
616
+ grid-template-columns: minmax(0,1fr) 86px;
617
+ }
618
+
619
+ .run-composer .path-field button {
620
+ width: 86px;
621
+ }
622
+
623
+ .run-advanced {
624
+ margin-inline: 14px;
625
+ }
626
+
627
+ .run-composer .form-error {
628
+ margin-inline: 14px;
629
+ }
630
+
631
+ .run-modal-actions {
632
+ grid-template-columns: 84px minmax(0,1fr);
633
+ padding-inline: 14px;
634
+ }
635
+
636
+ .run-modal-actions .ghost-button {
637
+ width: 100%;
638
+ }
639
+
640
+ .run-submit-button {
641
+ width: 100%;
642
+ min-width: 0;
643
+ }
644
+
645
+ .guide-toggle {
646
+ min-width: 0;
647
+ }
648
+
649
+ .guide-toggle b {
650
+ font-size: 11px;
651
+ }
652
+
653
+ .run-provider-docs {
654
+ grid-template-columns: 1fr;
655
+ }
656
+ }
657
+
658
+ /* Short screens ≤ 720px high: shorten dialogs while keeping their primary actions in view. */
659
+ @media (max-height:720px) {
660
+ .run-composer textarea#runPrompt {
661
+ min-height: 88px;
662
+ }
663
+
664
+ .run-step {
665
+ padding-top: 14px;
666
+ padding-bottom: 14px;
667
+ }
668
+ }
669
+
670
+ /* Short screens ≤ 620px high: shorten dialogs while keeping their primary actions in view. */
671
+ @media (max-height:620px) {
672
+ .run-modal {
673
+ max-height: 100vh;
674
+ max-height: 100dvh;
675
+ border-radius: 0;
676
+ }
677
+
678
+ .detail-drawer {
679
+ height: 100vh;
680
+ height: 100dvh;
681
+ }
682
+ }
683
+
684
+ /* Reduced motion: preserve state changes while removing decorative movement. */
685
+ @media (prefers-reduced-motion:reduce) {
686
+ .runtime-pulse {
687
+ animation: none!important;
688
+ }
689
+ }