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,533 @@
1
+ /*
2
+ * Responsive shell and shared components
3
+ * --------------------------------------
4
+ * Application shell, navigation, shared cards, and content density.
5
+ * Breakpoints are ordered wide-to-narrow, followed by height and motion rules.
6
+ */
7
+
8
+ /* Compact screens ≤ 1280px: collapse content columns and simplify the side rail. */
9
+ @media (max-width:1280px) {
10
+ .session-grid {
11
+ grid-template-columns: 1fr;
12
+ }
13
+ }
14
+
15
+ /* Compact screens ≤ 1100px: collapse content columns and simplify the side rail. */
16
+ @media (max-width:1100px) {
17
+ .sessions-heading {
18
+ align-items: flex-start;
19
+ flex-direction: column;
20
+ }
21
+
22
+ .session-tools {
23
+ width: 100%;
24
+ justify-content: flex-start;
25
+ flex-wrap: wrap;
26
+ }
27
+
28
+ .search-box {
29
+ flex: 1 1 240px;
30
+ width: auto;
31
+ }
32
+
33
+ .provider-filter {
34
+ max-width: 100%;
35
+ overflow-x: auto;
36
+ }
37
+
38
+ .top-actions {
39
+ flex-wrap: wrap;
40
+ justify-content: flex-end;
41
+ }
42
+ }
43
+
44
+ /* Compact screens ≤ 980px: collapse content columns and simplify the side rail. */
45
+ @media (max-width:980px) {
46
+ :root {
47
+ --sidebar: 76px;
48
+ }
49
+ }
50
+
51
+ /* Compact screens ≤ 900px: collapse content columns and simplify the side rail. */
52
+ @media (max-width:900px) {
53
+ :root {
54
+ --sidebar: 72px;
55
+ }
56
+
57
+ .brand>div:last-child {
58
+ display: none;
59
+ }
60
+
61
+ .nav-item span:not(.nav-icon) {
62
+ display: none;
63
+ }
64
+
65
+ .nav-item b {
66
+ display: none;
67
+ }
68
+
69
+ .section-title span {
70
+ display: none;
71
+ }
72
+
73
+ .provider-rail-item strong {
74
+ display: none;
75
+ }
76
+
77
+ .workspace-section {
78
+ display: none;
79
+ }
80
+
81
+ .sidebar-footer div {
82
+ display: none;
83
+ }
84
+
85
+ .brand {
86
+ justify-content: center;
87
+ padding-left: 0;
88
+ padding-right: 0;
89
+ }
90
+
91
+ .nav-item {
92
+ grid-template-columns: 1fr;
93
+ place-items: center;
94
+ }
95
+
96
+ .topbar {
97
+ display: block;
98
+ }
99
+
100
+ .top-actions {
101
+ margin-top: 16px;
102
+ }
103
+
104
+ .session-tools {
105
+ flex-wrap: wrap;
106
+ justify-content: flex-end;
107
+ }
108
+
109
+ .session-grid {
110
+ grid-template-columns: 1fr;
111
+ }
112
+
113
+ .execution-mode-badge small {
114
+ display: none;
115
+ }
116
+ }
117
+
118
+ /* Compact screens ≤ 720px: replace the side rail with bottom navigation and protect horizontal space. */
119
+ @media (max-width:720px) {
120
+ :root {
121
+ --sidebar: 0px;
122
+ --radius: 14px;
123
+ }
124
+
125
+ html {
126
+ width: 100%;
127
+ height: 100%;
128
+ overflow: hidden;
129
+ }
130
+
131
+ body {
132
+ width: 100%;
133
+ height: 100%;
134
+ overflow: hidden;
135
+ }
136
+
137
+ .app-shell {
138
+ display: block;
139
+ width: 100%;
140
+ height: 100vh;
141
+ height: 100dvh;
142
+ min-height: 0;
143
+ }
144
+
145
+ .main-stage {
146
+ width: 100%;
147
+ height: 100vh;
148
+ height: 100dvh;
149
+ padding: 20px 14px calc(92px + env(safe-area-inset-bottom));
150
+ overscroll-behavior: contain;
151
+ }
152
+
153
+ .sidebar {
154
+ position: fixed;
155
+ z-index: 18;
156
+ inset: auto 0 0;
157
+ height: calc(66px + env(safe-area-inset-bottom));
158
+ padding: 6px max(6px,env(safe-area-inset-right)) env(safe-area-inset-bottom) max(6px,env(safe-area-inset-left));
159
+ overflow: visible;
160
+ border-top: 1px solid #273142;
161
+ border-right: 0;
162
+ background: rgba(10,14,22,.96);
163
+ box-shadow: 0 -16px 40px rgba(0,0,0,.34);
164
+ backdrop-filter: blur(18px);
165
+ }
166
+
167
+ .sidebar>.brand {
168
+ display: none!important;
169
+ }
170
+
171
+ .sidebar>.sidebar-section {
172
+ display: none!important;
173
+ }
174
+
175
+ .sidebar>.sidebar-footer {
176
+ display: none!important;
177
+ }
178
+
179
+ .nav-group-label {
180
+ display: none!important;
181
+ }
182
+
183
+ .nav-item {
184
+ min-width: 0;
185
+ height: 54px;
186
+ display: grid;
187
+ grid-template-columns: 1fr;
188
+ grid-template-rows: 23px 15px;
189
+ place-items: center;
190
+ gap: 2px;
191
+ padding: 5px 1px;
192
+ border-radius: 10px;
193
+ text-align: center;
194
+ }
195
+
196
+ .sidebar .nav-item>span:nth-child(2) {
197
+ display: block;
198
+ max-width: 100%;
199
+ overflow: hidden;
200
+ color: inherit;
201
+ font-size: 9px;
202
+ font-weight: 700;
203
+ letter-spacing: -.04em;
204
+ text-overflow: ellipsis;
205
+ white-space: nowrap;
206
+ }
207
+
208
+ .nav-item b {
209
+ display: none!important;
210
+ }
211
+
212
+ .nav-icon {
213
+ height: 21px;
214
+ display: grid;
215
+ place-items: center;
216
+ font-size: 15px;
217
+ }
218
+
219
+ .nav-item.active {
220
+ background: linear-gradient(180deg,rgba(77,183,226,.13),rgba(77,183,226,.04));
221
+ box-shadow: inset 0 2px var(--cyan);
222
+ }
223
+
224
+ .topbar h1 {
225
+ font-size: clamp(25px,7.5vw,30px);
226
+ line-height: 1.15;
227
+ overflow-wrap: anywhere;
228
+ }
229
+
230
+ .subtitle {
231
+ font-size: 12px;
232
+ line-height: 1.6;
233
+ }
234
+
235
+ #newRunBtn {
236
+ width: 100%;
237
+ min-width: 0;
238
+ padding-inline: 10px;
239
+ white-space: nowrap;
240
+ }
241
+
242
+ .sessions-section {
243
+ margin-top: 24px;
244
+ }
245
+
246
+ .session-tools {
247
+ display: grid;
248
+ grid-template-columns: repeat(2,minmax(0,1fr));
249
+ gap: 8px;
250
+ margin-top: 12px;
251
+ }
252
+
253
+ .search-box {
254
+ grid-column: 1/-1;
255
+ width: 100%;
256
+ }
257
+
258
+ .session-card {
259
+ min-height: 0;
260
+ contain-intrinsic-size: 390px;
261
+ }
262
+
263
+ .card-head {
264
+ flex-wrap: wrap;
265
+ padding-inline: 13px;
266
+ }
267
+
268
+ .card-title {
269
+ padding-inline: 13px;
270
+ white-space: normal;
271
+ display: -webkit-box;
272
+ -webkit-box-orient: vertical;
273
+ -webkit-line-clamp: 2;
274
+ }
275
+
276
+ .card-subtitle {
277
+ margin-left: 13px;
278
+ margin-right: 13px;
279
+ }
280
+
281
+ .now-strip {
282
+ margin-left: 13px;
283
+ margin-right: 13px;
284
+ }
285
+
286
+ .conversation-preview {
287
+ margin-left: 13px;
288
+ margin-right: 13px;
289
+ }
290
+
291
+ .context-meter {
292
+ margin-left: 13px;
293
+ margin-right: 13px;
294
+ }
295
+
296
+ .token-row {
297
+ margin-left: 13px;
298
+ margin-right: 13px;
299
+ }
300
+
301
+ .card-footer {
302
+ padding-inline: 13px;
303
+ }
304
+
305
+ .token-row>div {
306
+ padding-inline: 6px;
307
+ }
308
+
309
+ .chat-row {
310
+ grid-template-columns: 29px minmax(0,1fr);
311
+ gap: 8px;
312
+ }
313
+
314
+ .lifecycle-event {
315
+ grid-template-columns: 23px minmax(0,1fr);
316
+ }
317
+
318
+ .lifecycle-event time {
319
+ grid-column: 2;
320
+ margin-top: -6px;
321
+ }
322
+
323
+ .form-grid {
324
+ grid-template-columns: 1fr;
325
+ }
326
+
327
+ .path-field {
328
+ min-width: 0;
329
+ }
330
+
331
+ .path-field input {
332
+ min-width: 0;
333
+ }
334
+
335
+ .sidebar>.view-nav {
336
+ width: 100%;
337
+ height: 60px;
338
+ display: grid;
339
+ gap: 2px;
340
+ grid-template-columns: repeat(4,minmax(0,1fr));
341
+ }
342
+
343
+ .topbar {
344
+ gap: 16px;
345
+ }
346
+
347
+ .top-actions {
348
+ margin-top: 17px;
349
+ width: 100%;
350
+ display: grid;
351
+ grid-template-columns: auto minmax(0,1fr);
352
+ gap: 9px;
353
+ padding-top: 0;
354
+ }
355
+
356
+ .sync-state {
357
+ min-width: 0;
358
+ padding: 7px 9px;
359
+ min-height: 46px;
360
+ }
361
+
362
+ .session-tools select {
363
+ width: 100%;
364
+ min-width: 0;
365
+ padding-left: 9px;
366
+ font-size: 12px;
367
+ }
368
+
369
+ .provider-filter {
370
+ width: 100%;
371
+ grid-column: 1 / -1;
372
+ }
373
+
374
+ .search-box input {
375
+ font-size: 12px;
376
+ }
377
+ }
378
+
379
+ /* Compact screens ≤ 640px: replace the side rail with bottom navigation and protect horizontal space. */
380
+ @media (max-width:640px) {
381
+ .main-stage {
382
+ padding: 22px 15px 40px;
383
+ }
384
+
385
+ .sessions-heading {
386
+ display: block;
387
+ }
388
+
389
+ .session-tools {
390
+ margin-top: 12px;
391
+ }
392
+
393
+ .search-box {
394
+ width: 100%;
395
+ }
396
+
397
+ .form-grid {
398
+ grid-template-columns: 1fr;
399
+ }
400
+
401
+ .chat-history-head {
402
+ align-items: flex-start;
403
+ }
404
+
405
+ .json-object>div {
406
+ grid-template-columns: 1fr;
407
+ }
408
+
409
+ .overview-branches button:nth-of-type(n+3) {
410
+ display: none;
411
+ }
412
+ }
413
+
414
+ /* Compact screens ≤ 430px: trim labels and spacing for the narrowest supported window. */
415
+ @media (max-width:430px) {
416
+ .sidebar .nav-item>span:nth-child(2) {
417
+ font-size: 8px;
418
+ }
419
+ }
420
+
421
+ /* Compact screens ≤ 420px: trim labels and spacing for the narrowest supported window. */
422
+ @media (max-width:420px) {
423
+ .eyebrow {
424
+ margin-bottom: 6px;
425
+ }
426
+
427
+ .top-actions {
428
+ grid-template-columns: 88px minmax(0,1fr);
429
+ }
430
+
431
+ .sync-state {
432
+ gap: 6px;
433
+ padding-inline: 7px;
434
+ }
435
+
436
+ .session-tools {
437
+ grid-template-columns: 1fr;
438
+ }
439
+
440
+ .search-box {
441
+ grid-column: auto;
442
+ }
443
+
444
+ .card-head {
445
+ gap: 8px;
446
+ }
447
+
448
+ .card-head .provider-mark {
449
+ width: 32px;
450
+ height: 32px;
451
+ }
452
+
453
+ .status-pill {
454
+ padding-inline: 6px;
455
+ letter-spacing: 0;
456
+ }
457
+
458
+ .token-row span {
459
+ font-size: 8px;
460
+ }
461
+
462
+ .token-row b {
463
+ font-size: 11px;
464
+ }
465
+
466
+ .chat-row {
467
+ grid-template-columns: 25px minmax(0,1fr);
468
+ gap: 7px;
469
+ }
470
+
471
+ .chat-avatar {
472
+ width: 25px;
473
+ height: 25px;
474
+ border-radius: 7px;
475
+ }
476
+
477
+ .main-stage {
478
+ padding-right: 11px;
479
+ padding-left: 11px;
480
+ padding-top: 15px;
481
+ }
482
+
483
+ .topbar h1 {
484
+ font-size: 25px;
485
+ }
486
+
487
+ .subtitle {
488
+ font-size: 13px;
489
+ }
490
+ }
491
+
492
+ /* Reduced motion: preserve state changes while removing decorative movement. */
493
+ @media (prefers-reduced-motion:reduce) {
494
+ html {
495
+ scroll-behavior: auto!important;
496
+ }
497
+
498
+ * {
499
+ animation-duration: .001ms!important;
500
+ animation-delay: 0ms!important;
501
+ animation-iteration-count: 1!important;
502
+ scroll-behavior: auto!important;
503
+ transition-duration: .001ms!important;
504
+ }
505
+
506
+ *::before {
507
+ animation-duration: .001ms!important;
508
+ animation-delay: 0ms!important;
509
+ animation-iteration-count: 1!important;
510
+ scroll-behavior: auto!important;
511
+ transition-duration: .001ms!important;
512
+ }
513
+
514
+ *::after {
515
+ animation-duration: .001ms!important;
516
+ animation-delay: 0ms!important;
517
+ animation-iteration-count: 1!important;
518
+ scroll-behavior: auto!important;
519
+ transition-duration: .001ms!important;
520
+ }
521
+
522
+ .activity-wave i {
523
+ animation: none!important;
524
+ }
525
+
526
+ .sync-state>span {
527
+ animation: none!important;
528
+ }
529
+
530
+ .empty-orbit span {
531
+ animation: none!important;
532
+ }
533
+ }