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,606 @@
1
+ /*
2
+ * Settings and releases
3
+ * ---------------------
4
+ * Language preferences, version state, release notes, and update actions.
5
+ */
6
+
7
+ .settings-nav-item .nav-icon {
8
+ font-size: 14px;
9
+ }
10
+
11
+ .settings-nav-item b {
12
+ background: #17352f;
13
+ color: #73e3bd;
14
+ }
15
+
16
+ .settings-nav-item.active {
17
+ background: linear-gradient(90deg,rgba(67,207,166,.14),rgba(67,207,166,.035));
18
+ box-shadow: inset 2px 0 #55d9ae;
19
+ }
20
+
21
+ .update-notice {
22
+ max-width: 1640px;
23
+ min-height: 62px;
24
+ display: flex;
25
+ align-items: center;
26
+ gap: 13px;
27
+ margin: 20px auto 0;
28
+ padding: 11px 12px 11px 14px;
29
+ border: 1px solid rgba(73,216,171,.3);
30
+ border-radius: 14px;
31
+ background: radial-gradient(circle at 8% 0,rgba(69,220,170,.12),transparent 34%),linear-gradient(100deg,#0e1d1b,#0b131a);
32
+ box-shadow: 0 14px 42px rgba(0,0,0,.15),inset 0 1px rgba(255,255,255,.03);
33
+ }
34
+
35
+ .update-notice-signal {
36
+ width: 34px;
37
+ height: 34px;
38
+ display: grid;
39
+ place-items: center;
40
+ flex: 0 0 auto;
41
+ border: 1px solid #2e6657;
42
+ border-radius: 10px;
43
+ background: #123128;
44
+ }
45
+
46
+ .update-notice-signal i {
47
+ width: 9px;
48
+ height: 9px;
49
+ border-radius: 50%;
50
+ background: #5ce2b6;
51
+ box-shadow: 0 0 0 5px rgba(92,226,182,.08),0 0 16px rgba(92,226,182,.5);
52
+ animation: pulse 1.6s infinite;
53
+ }
54
+
55
+ .update-notice>div {
56
+ min-width: 0;
57
+ flex: 1;
58
+ }
59
+
60
+ .update-notice b {
61
+ display: block;
62
+ color: #d9f1e9;
63
+ font-size: 12px;
64
+ }
65
+
66
+ .update-notice small {
67
+ display: block;
68
+ margin-top: 4px;
69
+ color: #718c85;
70
+ font-size: 9px;
71
+ }
72
+
73
+ .update-notice button {
74
+ height: 34px;
75
+ padding: 0 12px;
76
+ border: 1px solid #347760;
77
+ border-radius: 9px;
78
+ background: #153d31;
79
+ color: #88ebc8;
80
+ font-size: 10px;
81
+ font-weight: 750;
82
+ cursor: pointer;
83
+ }
84
+
85
+ .update-notice button:hover {
86
+ background: #1a4b3b;
87
+ }
88
+
89
+ .update-notice button span {
90
+ margin-left: 7px;
91
+ }
92
+
93
+ .settings-section {
94
+ max-width: 1320px;
95
+ margin: 26px auto 0;
96
+ }
97
+
98
+ .settings-head {
99
+ display: flex;
100
+ align-items: center;
101
+ gap: 15px;
102
+ margin-bottom: 16px;
103
+ }
104
+
105
+ .settings-head h2 {
106
+ margin: 0;
107
+ color: #edf4f2;
108
+ font-size: 25px;
109
+ letter-spacing: -.04em;
110
+ }
111
+
112
+ .settings-head p:last-child {
113
+ max-width: 760px;
114
+ margin: 7px 0 0;
115
+ color: #788890;
116
+ font-size: 12px;
117
+ line-height: 1.6;
118
+ }
119
+
120
+ .settings-head .eyebrow {
121
+ margin: 0 0 5px;
122
+ color: #58dcb1;
123
+ }
124
+
125
+ .settings-emblem {
126
+ position: relative;
127
+ width: 54px;
128
+ height: 54px;
129
+ display: grid;
130
+ place-items: center;
131
+ flex: 0 0 auto;
132
+ overflow: hidden;
133
+ border: 1px solid #356658;
134
+ border-radius: 15px;
135
+ background: linear-gradient(145deg,#153b30,#0c1b1c);
136
+ box-shadow: inset 0 1px rgba(255,255,255,.04),0 0 34px rgba(61,205,159,.08);
137
+ }
138
+
139
+ .settings-emblem span {
140
+ z-index: 1;
141
+ color: #70e5bd;
142
+ font-size: 25px;
143
+ }
144
+
145
+ .settings-emblem i {
146
+ position: absolute;
147
+ width: 42px;
148
+ height: 42px;
149
+ border: 1px dashed rgba(96,224,184,.2);
150
+ border-radius: 50%;
151
+ animation: orbit 9s linear infinite;
152
+ }
153
+
154
+ .language-settings-card {
155
+ display: grid;
156
+ grid-template-columns: 54px minmax(0,1fr) minmax(210px,270px);
157
+ align-items: center;
158
+ gap: 17px;
159
+ margin-bottom: 12px;
160
+ padding: 17px 19px;
161
+ border: 1px solid #2a403e;
162
+ border-radius: 16px;
163
+ background: radial-gradient(circle at 0 0,rgba(73,216,171,.09),transparent 28%),linear-gradient(120deg,#0f1a20,#0a1219);
164
+ box-shadow: inset 0 1px rgba(255,255,255,.025);
165
+ }
166
+
167
+ .language-settings-mark {
168
+ width: 48px;
169
+ height: 48px;
170
+ display: grid;
171
+ place-items: center;
172
+ border: 1px solid #34665b;
173
+ border-radius: 13px;
174
+ background: #102b27;
175
+ color: #78e4c1;
176
+ font-family: "Geist Mono","Cascadia Code",Consolas,monospace;
177
+ font-size: 17px;
178
+ font-weight: 800;
179
+ box-shadow: 0 0 24px rgba(73,216,171,.07);
180
+ }
181
+
182
+ .language-settings-copy {
183
+ min-width: 0;
184
+ }
185
+
186
+ .language-settings-copy>span {
187
+ display: block;
188
+ color: #5d857a;
189
+ font-size: 8px;
190
+ font-weight: 850;
191
+ letter-spacing: .13em;
192
+ text-transform: uppercase;
193
+ }
194
+
195
+ .language-select>span {
196
+ display: block;
197
+ color: #5d857a;
198
+ font-size: 8px;
199
+ font-weight: 850;
200
+ letter-spacing: .13em;
201
+ text-transform: uppercase;
202
+ }
203
+
204
+ .language-settings-copy h3 {
205
+ margin: 5px 0 0;
206
+ color: #e3eceb;
207
+ font-size: 15px;
208
+ letter-spacing: -.025em;
209
+ }
210
+
211
+ .language-settings-copy p {
212
+ margin: 6px 0 0;
213
+ color: #71838c;
214
+ font-size: 10px;
215
+ line-height: 1.55;
216
+ }
217
+
218
+ .language-select {
219
+ display: block;
220
+ }
221
+
222
+ .language-select select {
223
+ width: 100%;
224
+ height: 42px;
225
+ margin-top: 7px;
226
+ padding: 0 38px 0 12px;
227
+ border: 1px solid #31544c;
228
+ border-radius: 10px;
229
+ background-color: #0d191d;
230
+ color: #d5e4e1;
231
+ font: 700 11px "Geist",sans-serif;
232
+ outline: none;
233
+ cursor: pointer;
234
+ }
235
+
236
+ .language-select select:hover {
237
+ border-color: #407467;
238
+ background-color: #10221f;
239
+ }
240
+
241
+ .language-select select:focus-visible {
242
+ border-color: #5eddb5;
243
+ box-shadow: 0 0 0 3px rgba(94,221,181,.1);
244
+ }
245
+
246
+ .update-panel {
247
+ overflow: hidden;
248
+ border: 1px solid #263740;
249
+ border-radius: 19px;
250
+ background: radial-gradient(circle at 86% -16%,rgba(71,202,163,.1),transparent 35%),linear-gradient(145deg,#0d151d,#091017 62%);
251
+ box-shadow: 0 20px 58px rgba(0,0,0,.18),inset 0 1px rgba(255,255,255,.025);
252
+ }
253
+
254
+ .version-route {
255
+ display: grid;
256
+ grid-template-columns: minmax(210px,1fr) minmax(180px,.72fr) minmax(210px,1fr);
257
+ align-items: center;
258
+ gap: 14px;
259
+ padding: 25px;
260
+ border-bottom: 1px solid #203039;
261
+ background: linear-gradient(90deg,rgba(255,255,255,.012),rgba(72,205,165,.025));
262
+ }
263
+
264
+ .version-node {
265
+ min-height: 120px;
266
+ display: flex;
267
+ flex-direction: column;
268
+ justify-content: center;
269
+ padding: 20px;
270
+ border: 1px solid #293a45;
271
+ border-radius: 14px;
272
+ background: #0d161e;
273
+ }
274
+
275
+ .version-node span {
276
+ color: #687b89;
277
+ font-size: 9px;
278
+ font-weight: 800;
279
+ letter-spacing: .1em;
280
+ text-transform: uppercase;
281
+ }
282
+
283
+ .version-node strong {
284
+ margin-top: 10px;
285
+ color: #e5edf1;
286
+ font-family: "Geist Mono","Cascadia Code",Consolas,monospace;
287
+ font-size: 29px;
288
+ letter-spacing: -.045em;
289
+ }
290
+
291
+ .remote-version-node {
292
+ border-color: #2f5a4f;
293
+ background: radial-gradient(circle at 100% 0,rgba(73,216,171,.1),transparent 48%),#0d191b;
294
+ }
295
+
296
+ .remote-version-node strong {
297
+ color: #86e8c7;
298
+ }
299
+
300
+ .version-connector {
301
+ display: grid;
302
+ grid-template-columns: 1fr auto 1fr;
303
+ align-items: center;
304
+ gap: 8px;
305
+ }
306
+
307
+ .version-connector i {
308
+ height: 1px;
309
+ background: linear-gradient(90deg,transparent,#345e54);
310
+ }
311
+
312
+ .version-connector i:last-child {
313
+ background: linear-gradient(90deg,#345e54,transparent);
314
+ }
315
+
316
+ .version-connector span {
317
+ color: #50786d;
318
+ font-family: "Geist Mono","Cascadia Code",Consolas,monospace;
319
+ font-size: 8px;
320
+ font-weight: 800;
321
+ letter-spacing: .13em;
322
+ white-space: nowrap;
323
+ }
324
+
325
+ .update-console {
326
+ display: grid;
327
+ grid-template-columns: 54px minmax(0,1fr) auto;
328
+ align-items: center;
329
+ gap: 15px;
330
+ padding: 20px 24px;
331
+ }
332
+
333
+ .update-state-mark {
334
+ width: 48px;
335
+ height: 48px;
336
+ display: grid;
337
+ place-items: center;
338
+ border: 1px solid #344551;
339
+ border-radius: 13px;
340
+ background: #121c25;
341
+ color: #91a5b1;
342
+ font-size: 20px;
343
+ }
344
+
345
+ .update-state-copy span {
346
+ color: #687c89;
347
+ font-size: 8px;
348
+ font-weight: 850;
349
+ letter-spacing: .13em;
350
+ }
351
+
352
+ .update-actions {
353
+ display: flex;
354
+ gap: 8px;
355
+ }
356
+
357
+ .update-actions button {
358
+ white-space: nowrap;
359
+ }
360
+
361
+ .update-panel[data-update-status="available"] .update-state-mark {
362
+ border-color: #34735f;
363
+ background: #12362d;
364
+ color: #6fe4bc;
365
+ box-shadow: 0 0 28px rgba(61,205,159,.08);
366
+ }
367
+
368
+ .update-panel[data-update-status="downloaded"] .update-state-mark {
369
+ border-color: #34735f;
370
+ background: #12362d;
371
+ color: #6fe4bc;
372
+ box-shadow: 0 0 28px rgba(61,205,159,.08);
373
+ }
374
+
375
+ .update-panel[data-update-status="current"] .update-state-mark {
376
+ border-color: #31556a;
377
+ background: #102733;
378
+ color: #7ed8f1;
379
+ }
380
+
381
+ .update-panel[data-update-status="error"] .update-state-mark {
382
+ border-color: #714148;
383
+ background: #311b20;
384
+ color: #ff9a9f;
385
+ }
386
+
387
+ .update-panel[data-update-status="checking"] .update-state-mark span {
388
+ animation: update-spin 1.1s linear infinite;
389
+ }
390
+
391
+ .update-progress {
392
+ margin: 0 24px 20px;
393
+ padding: 13px 14px;
394
+ border: 1px solid #26483f;
395
+ border-radius: 11px;
396
+ background: #0c1a19;
397
+ }
398
+
399
+ .update-progress>div:first-child {
400
+ display: flex;
401
+ align-items: center;
402
+ justify-content: space-between;
403
+ color: #83a79c;
404
+ font-size: 9px;
405
+ }
406
+
407
+ .update-progress>div:first-child b {
408
+ color: #78dfbd;
409
+ font-family: "Geist Mono","Cascadia Code",Consolas,monospace;
410
+ }
411
+
412
+ .update-progress-track {
413
+ height: 5px;
414
+ margin-top: 9px;
415
+ overflow: hidden;
416
+ border-radius: 4px;
417
+ background: #142923;
418
+ }
419
+
420
+ .update-progress-track i {
421
+ display: block;
422
+ width: 0;
423
+ height: 100%;
424
+ border-radius: 4px;
425
+ background: linear-gradient(90deg,#3fb88f,#70e2ba);
426
+ box-shadow: 0 0 12px rgba(77,216,174,.35);
427
+ transition: width .18s ease;
428
+ }
429
+
430
+ .update-progress small {
431
+ display: block;
432
+ margin-top: 7px;
433
+ color: #58756c;
434
+ font-size: 8px;
435
+ }
436
+
437
+ .update-error {
438
+ margin: 0 24px 20px;
439
+ padding: 11px 13px;
440
+ border: 1px solid #663b42;
441
+ border-radius: 10px;
442
+ background: #25171b;
443
+ color: #e7959b;
444
+ font-size: 9px;
445
+ line-height: 1.55;
446
+ }
447
+
448
+ .release-notes {
449
+ border-top: 1px solid #203039;
450
+ background: #0a1117;
451
+ }
452
+
453
+ .release-notes>div {
454
+ display: flex;
455
+ align-items: center;
456
+ justify-content: space-between;
457
+ padding: 13px 24px;
458
+ border-bottom: 1px solid #18252d;
459
+ }
460
+
461
+ .release-notes button {
462
+ padding: 4px 0;
463
+ border: 0;
464
+ background: transparent;
465
+ color: #67caa9;
466
+ font-size: 9px;
467
+ cursor: pointer;
468
+ }
469
+
470
+ .release-notes button:hover {
471
+ color: #8ce9c9;
472
+ }
473
+
474
+ .settings-meta-grid {
475
+ display: grid;
476
+ grid-template-columns: repeat(3,minmax(0,1fr));
477
+ gap: 11px;
478
+ margin-top: 12px;
479
+ }
480
+
481
+ .settings-meta-grid article {
482
+ min-height: 130px;
483
+ padding: 17px;
484
+ border: 1px solid #22313b;
485
+ border-radius: 14px;
486
+ background: linear-gradient(145deg,rgba(16,24,33,.92),rgba(10,16,23,.86));
487
+ }
488
+
489
+ .settings-head>div>p:last-child {
490
+ color: #98a7b2;
491
+ font-size: 12px;
492
+ }
493
+
494
+ .version-node small {
495
+ margin-top: 8px;
496
+ color: #98a7b2;
497
+ font-size: 12px;
498
+ }
499
+
500
+ .update-state-copy p {
501
+ margin: 6px 0 0;
502
+ line-height: 1.5;
503
+ color: #98a7b2;
504
+ font-size: 12px;
505
+ }
506
+
507
+ .settings-meta-grid p {
508
+ margin: 8px 0 0;
509
+ line-height: 1.65;
510
+ color: #98a7b2;
511
+ font-size: 12px;
512
+ }
513
+
514
+ .release-notes pre {
515
+ max-height: 230px;
516
+ margin: 0;
517
+ padding: 18px 24px;
518
+ overflow: auto;
519
+ font-family: "Geist",sans-serif;
520
+ line-height: 1.75;
521
+ white-space: pre-wrap;
522
+ color: #98a7b2;
523
+ font-size: 12px;
524
+ }
525
+
526
+ .settings-meta-grid span {
527
+ display: block;
528
+ color: #57746b;
529
+ font-weight: 850;
530
+ letter-spacing: .11em;
531
+ font-size: 10px;
532
+ }
533
+
534
+ .version-node>span {
535
+ font-size: 10px;
536
+ }
537
+
538
+ .update-state-copy>span {
539
+ font-size: 10px;
540
+ }
541
+
542
+ .release-notes>div span {
543
+ color: #5e756f;
544
+ font-weight: 850;
545
+ letter-spacing: .13em;
546
+ font-size: 10px;
547
+ }
548
+
549
+ .settings-meta-grid b {
550
+ display: block;
551
+ margin-top: 9px;
552
+ color: #c4d3d3;
553
+ font-size: 14px;
554
+ }
555
+
556
+ .update-state-copy h3 {
557
+ margin: 5px 0 0;
558
+ color: #dfe8ec;
559
+ letter-spacing: -.025em;
560
+ font-size: 14px;
561
+ }
562
+
563
+ body[data-current-view="settings"] .topbar {
564
+ align-items: center;
565
+ padding-bottom: 4px;
566
+ border-bottom: 1px solid #1d2835;
567
+ }
568
+
569
+ body[data-current-view="settings"] .topbar .eyebrow {
570
+ display: none;
571
+ }
572
+
573
+ body[data-current-view="settings"] .topbar .subtitle {
574
+ display: none;
575
+ }
576
+
577
+ body[data-current-view="settings"] .top-actions {
578
+ display: none;
579
+ }
580
+
581
+ body[data-current-view="settings"] .topbar h1 {
582
+ font-size: 22px;
583
+ }
584
+
585
+ @keyframes orbit {
586
+ to {
587
+ transform: rotate(360deg);
588
+ }
589
+ }
590
+
591
+ @keyframes motion-live-update {
592
+ 0%,
593
+ 100% {
594
+ filter: brightness(1);
595
+ }
596
+
597
+ 35% {
598
+ filter: brightness(1.12);
599
+ }
600
+ }
601
+
602
+ @keyframes update-spin {
603
+ to {
604
+ transform: rotate(360deg);
605
+ }
606
+ }