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,344 @@
1
+ /*
2
+ * Onboarding and navigation help
3
+ * ------------------------------
4
+ * First-run guidance, progress cues, compact tools, and primary entry actions.
5
+ */
6
+
7
+ .beginner-guide-intro span {
8
+ display: block;
9
+ margin-top: 5px;
10
+ color: #8290a2;
11
+ font-size: 11px;
12
+ }
13
+
14
+ .beginner-guide li>i {
15
+ width: 27px;
16
+ height: 27px;
17
+ display: grid;
18
+ place-items: center;
19
+ border-radius: 50%;
20
+ background: #18384a;
21
+ color: #8ee4ff;
22
+ font-size: 12px;
23
+ font-style: normal;
24
+ font-weight: 750;
25
+ }
26
+
27
+ .beginner-guide li b {
28
+ display: block;
29
+ color: #dce6ef;
30
+ font-size: 12px;
31
+ }
32
+
33
+ .beginner-guide li small {
34
+ display: block;
35
+ margin-top: 4px;
36
+ color: #7e8da0;
37
+ font-size: 11px;
38
+ line-height: 1.45;
39
+ }
40
+
41
+ .beginner-guide b {
42
+ word-break: keep-all;
43
+ overflow-wrap: break-word;
44
+ }
45
+
46
+ .beginner-guide small {
47
+ word-break: keep-all;
48
+ overflow-wrap: break-word;
49
+ }
50
+
51
+ .new-run-cta {
52
+ min-width: 168px;
53
+ height: 48px;
54
+ display: flex;
55
+ align-items: center;
56
+ justify-content: flex-start;
57
+ gap: 10px;
58
+ padding: 0 10px 0 12px;
59
+ border: 0;
60
+ border-radius: 13px;
61
+ box-shadow: 0 0 0 1px rgba(255,255,255,.14),0 12px 30px rgba(83,160,192,.18);
62
+ transition-property: transform,box-shadow,filter;
63
+ transition-duration: 160ms;
64
+ transition-timing-function: ease-out;
65
+ }
66
+
67
+ .new-run-cta:hover {
68
+ filter: brightness(1.04);
69
+ box-shadow: 0 0 0 1px rgba(255,255,255,.22),0 16px 34px rgba(83,160,192,.25);
70
+ }
71
+
72
+ .new-run-cta:active {
73
+ transform: scale(.96);
74
+ }
75
+
76
+ .new-run-cta-icon {
77
+ width: 30px;
78
+ height: 30px;
79
+ display: grid;
80
+ place-items: center;
81
+ flex: 0 0 auto;
82
+ border-radius: 9px;
83
+ background: rgba(6,18,25,.12);
84
+ font-size: 19px;
85
+ font-weight: 450;
86
+ }
87
+
88
+ .new-run-cta-copy {
89
+ min-width: 0;
90
+ display: flex;
91
+ align-items: center;
92
+ gap: 9px;
93
+ flex: 1;
94
+ }
95
+
96
+ .new-run-cta-copy b {
97
+ overflow: hidden;
98
+ font-size: 12px;
99
+ text-overflow: ellipsis;
100
+ white-space: nowrap;
101
+ }
102
+
103
+ .new-run-cta-copy small {
104
+ margin-left: auto;
105
+ color: rgba(4,16,23,.58);
106
+ font-size: 9px;
107
+ }
108
+
109
+ .new-run-cta-copy kbd {
110
+ font: inherit;
111
+ }
112
+
113
+ .guide-toggle {
114
+ min-width: 154px;
115
+ min-height: 48px;
116
+ display: flex;
117
+ align-items: center;
118
+ gap: 9px;
119
+ padding: 6px 11px;
120
+ border: 1px solid #304253;
121
+ border-radius: 13px;
122
+ background: #101925;
123
+ color: #dce7ef;
124
+ text-align: left;
125
+ cursor: pointer;
126
+ }
127
+
128
+ .guide-toggle:hover {
129
+ border-color: #4e7187;
130
+ background: #152332;
131
+ }
132
+
133
+ .guide-toggle>span:first-child {
134
+ width: 28px;
135
+ height: 28px;
136
+ display: grid;
137
+ place-items: center;
138
+ flex: 0 0 auto;
139
+ border-radius: 9px;
140
+ background: #18384a;
141
+ color: #91e7ff;
142
+ font-size: 14px;
143
+ font-weight: 850;
144
+ }
145
+
146
+ .guide-toggle b {
147
+ display: block;
148
+ font-size: 12px;
149
+ }
150
+
151
+ .guide-toggle small {
152
+ display: block;
153
+ margin-top: 3px;
154
+ color: #8d9dad;
155
+ font-size: 10px;
156
+ }
157
+
158
+ .beginner-guide {
159
+ max-width: 1640px;
160
+ display: grid;
161
+ margin: 18px auto 0;
162
+ border: 1px solid #263746;
163
+ border-radius: 15px;
164
+ position: relative;
165
+ grid-template-columns: 230px minmax(0,1fr);
166
+ align-items: stretch;
167
+ gap: 16px;
168
+ padding: 18px 52px 18px 18px;
169
+ border-color: #345062;
170
+ background: radial-gradient(circle at 0 0,rgba(89,216,255,.12),transparent 38%),linear-gradient(125deg,#101b27,#0b111a 68%);
171
+ }
172
+
173
+ .guide-time {
174
+ display: inline-flex!important;
175
+ width: max-content;
176
+ margin-bottom: 8px;
177
+ padding: 4px 8px;
178
+ border-radius: 999px;
179
+ background: #17394a;
180
+ color: #8ce5ff!important;
181
+ font-size: 10px!important;
182
+ font-weight: 800;
183
+ letter-spacing: .06em;
184
+ }
185
+
186
+ .beginner-guide-intro b {
187
+ display: block;
188
+ color: #e5edf5;
189
+ font-size: 15px;
190
+ }
191
+
192
+ .beginner-guide-intro>span:not(.guide-time) {
193
+ color: #a0adbd;
194
+ font-size: 12px;
195
+ line-height: 1.5;
196
+ }
197
+
198
+ .guide-progress {
199
+ height: 6px;
200
+ margin-top: 13px;
201
+ overflow: hidden;
202
+ border-radius: 999px;
203
+ background: #202d3a;
204
+ }
205
+
206
+ .guide-progress i {
207
+ display: block;
208
+ width: 0;
209
+ height: 100%;
210
+ border-radius: inherit;
211
+ background: linear-gradient(90deg,#57d7ff,#5de4ad);
212
+ transition: width .3s ease;
213
+ }
214
+
215
+ .beginner-guide ol {
216
+ display: grid;
217
+ margin: 0;
218
+ padding: 0;
219
+ list-style: none;
220
+ grid-template-columns: repeat(4,minmax(0,1fr));
221
+ gap: 9px;
222
+ }
223
+
224
+ .beginner-guide li {
225
+ min-width: 0;
226
+ grid-template-columns: 30px minmax(0,1fr);
227
+ align-items: center;
228
+ gap: 9px;
229
+ border-left: 1px solid #263746;
230
+ display: block;
231
+ padding: 0;
232
+ border: 0;
233
+ }
234
+
235
+ .beginner-guide li>button {
236
+ width: 100%;
237
+ min-height: 112px;
238
+ display: grid;
239
+ grid-template-columns: 32px minmax(0,1fr);
240
+ align-items: start;
241
+ gap: 9px;
242
+ padding: 12px;
243
+ border: 1px solid #2a3a48;
244
+ border-radius: 13px;
245
+ background: #0d151f;
246
+ color: inherit;
247
+ text-align: left;
248
+ cursor: pointer;
249
+ transition: transform .16s ease,border-color .16s ease,background .16s ease;
250
+ }
251
+
252
+ .beginner-guide li>button:hover {
253
+ transform: translateY(-2px);
254
+ border-color: #4b7084;
255
+ background: #12202c;
256
+ }
257
+
258
+ .beginner-guide li>button>i {
259
+ width: 30px;
260
+ height: 30px;
261
+ display: grid;
262
+ place-items: center;
263
+ border-radius: 9px;
264
+ background: #18384a;
265
+ color: #91e7ff;
266
+ font-size: 12px;
267
+ font-style: normal;
268
+ font-weight: 800;
269
+ }
270
+
271
+ .beginner-guide li>button>span {
272
+ min-width: 0;
273
+ }
274
+
275
+ .beginner-guide li>button b {
276
+ display: block;
277
+ color: #e4edf4;
278
+ font-size: 13px;
279
+ }
280
+
281
+ .beginner-guide li>button small {
282
+ display: block;
283
+ margin-top: 5px;
284
+ color: #a0adbd;
285
+ font-size: 11px;
286
+ line-height: 1.5;
287
+ }
288
+
289
+ .beginner-guide li>button em {
290
+ display: block;
291
+ margin-top: 9px;
292
+ color: #82dfff;
293
+ font-size: 10px;
294
+ font-style: normal;
295
+ font-weight: 750;
296
+ }
297
+
298
+ .beginner-guide li.completed>button {
299
+ border-color: #2d6656;
300
+ background: #0d201d;
301
+ }
302
+
303
+ .beginner-guide li.completed>button>i {
304
+ background: #1a493b;
305
+ color: #83edc3;
306
+ font-size: 0;
307
+ }
308
+
309
+ .beginner-guide li.completed>button>i:after {
310
+ content: "✓";
311
+ font-size: 13px;
312
+ }
313
+
314
+ .beginner-guide li.completed>button em {
315
+ color: #74d9b4;
316
+ }
317
+
318
+ .beginner-guide li.completed>button em:before {
319
+ content: "완료 · ";
320
+ }
321
+
322
+ .guide-dismiss {
323
+ position: absolute;
324
+ top: 12px;
325
+ right: 12px;
326
+ min-width: 34px;
327
+ min-height: 34px;
328
+ padding: 0 9px;
329
+ border: 0;
330
+ border-radius: 9px;
331
+ background: #17222e;
332
+ color: #9cabb9;
333
+ font-size: 10px;
334
+ cursor: pointer;
335
+ }
336
+
337
+ .guide-dismiss:hover {
338
+ background: #20303e;
339
+ color: #edf5f8;
340
+ }
341
+
342
+ .mobile-tools-menu {
343
+ display: none;
344
+ }
@@ -0,0 +1,284 @@
1
+ /*
2
+ * Overlays and transient UI
3
+ * -------------------------
4
+ * Drawers, modal surfaces, backdrops, close controls, and toast messages.
5
+ */
6
+
7
+ .drawer-loading {
8
+ min-height: 280px;
9
+ display: flex;
10
+ flex-direction: column;
11
+ align-items: center;
12
+ justify-content: center;
13
+ color: #728094;
14
+ }
15
+
16
+ .drawer-loading span {
17
+ width: 27px;
18
+ height: 27px;
19
+ border: 2px solid #253244;
20
+ border-top-color: var(--drawer-provider);
21
+ border-radius: 50%;
22
+ animation: spin .75s linear infinite;
23
+ }
24
+
25
+ .drawer-loading b {
26
+ margin-top: 13px;
27
+ color: #b9c4d1;
28
+ font-size: 10px;
29
+ }
30
+
31
+ .drawer-loading small {
32
+ margin-top: 5px;
33
+ color: #596678;
34
+ font-size: 8px;
35
+ }
36
+
37
+ .drawer-backdrop {
38
+ position: fixed;
39
+ inset: 0;
40
+ background: rgba(2,4,8,.5);
41
+ backdrop-filter: blur(2px);
42
+ z-index: 20;
43
+ }
44
+
45
+ .drawer-head {
46
+ display: flex;
47
+ align-items: center;
48
+ gap: 12px;
49
+ padding: 21px 22px 16px;
50
+ }
51
+
52
+ .drawer-title {
53
+ min-width: 0;
54
+ }
55
+
56
+ .close-button:hover {
57
+ background: #1a2230;
58
+ color: white;
59
+ }
60
+
61
+ .drawer-tabs {
62
+ display: flex;
63
+ padding: 0 22px;
64
+ border-bottom: 1px solid var(--line);
65
+ }
66
+
67
+ .drawer-tab.active {
68
+ color: #e2e9f1;
69
+ }
70
+
71
+ .drawer-tab.active:after {
72
+ content: "";
73
+ position: absolute;
74
+ left: 12px;
75
+ right: 12px;
76
+ bottom: -1px;
77
+ height: 2px;
78
+ background: var(--drawer-provider,#79d9f8);
79
+ }
80
+
81
+ .drawer-content {
82
+ flex: 1;
83
+ overflow: auto;
84
+ padding: 18px 22px 30px;
85
+ }
86
+
87
+ .drawer-error {
88
+ min-height: 280px;
89
+ display: flex;
90
+ flex-direction: column;
91
+ align-items: center;
92
+ justify-content: center;
93
+ text-align: center;
94
+ }
95
+
96
+ .drawer-error b {
97
+ font-size: 15px;
98
+ }
99
+
100
+ .drawer-error span {
101
+ max-width: 420px;
102
+ margin-top: 8px;
103
+ color: #78879a;
104
+ font-size: 11px;
105
+ }
106
+
107
+ .drawer-error button {
108
+ margin-top: 16px;
109
+ padding: 9px 13px;
110
+ border: 1px solid #395b54;
111
+ border-radius: 9px;
112
+ background: #142720;
113
+ color: #8be5c3;
114
+ cursor: pointer;
115
+ }
116
+
117
+ .modal-head {
118
+ display: flex;
119
+ align-items: start;
120
+ margin-bottom: 18px;
121
+ }
122
+
123
+ .modal-head h2 {
124
+ margin: 0;
125
+ font-size: 18px;
126
+ }
127
+
128
+ .modal-actions {
129
+ display: flex;
130
+ justify-content: flex-end;
131
+ gap: 8px;
132
+ margin-top: 17px;
133
+ }
134
+
135
+ .toast {
136
+ position: fixed;
137
+ z-index: 50;
138
+ left: 50%;
139
+ bottom: 24px;
140
+ transform: translateX(-50%);
141
+ padding: 10px 14px;
142
+ border: 1px solid #2a3647;
143
+ border-radius: 10px;
144
+ background: #121924;
145
+ box-shadow: 0 12px 36px rgba(0,0,0,.35);
146
+ color: #bdc7d4;
147
+ font-size: 9px;
148
+ }
149
+
150
+ .drawer-backdrop:not(.hidden) {
151
+ animation: motion-backdrop-in var(--motion-medium) ease both;
152
+ }
153
+
154
+ .drawer-backdrop.closing {
155
+ animation: motion-backdrop-out 260ms ease both;
156
+ }
157
+
158
+ .detail-drawer {
159
+ position: fixed;
160
+ z-index: 21;
161
+ right: 0;
162
+ top: 0;
163
+ width: min(610px,88vw);
164
+ height: 100vh;
165
+ display: flex;
166
+ flex-direction: column;
167
+ border-left: 1px solid #263142;
168
+ background: linear-gradient(180deg,#101620,#090d14);
169
+ box-shadow: -26px 0 70px rgba(0,0,0,.45);
170
+ transform: translateX(105%);
171
+ transition: transform var(--motion-medium) var(--motion-ease),box-shadow var(--motion-medium) ease;
172
+ }
173
+
174
+ .detail-drawer.open {
175
+ transform: translateX(0);
176
+ box-shadow: -32px 0 88px rgba(0,0,0,.52);
177
+ }
178
+
179
+ .modal-backdrop:not(.hidden) {
180
+ animation: motion-backdrop-in var(--motion-medium) ease both;
181
+ }
182
+
183
+ .modal-backdrop.closing {
184
+ animation: motion-backdrop-out 220ms ease both;
185
+ pointer-events: none;
186
+ }
187
+
188
+ .toast:not(.hidden) {
189
+ animation: motion-toast-in 340ms var(--motion-ease) both;
190
+ }
191
+
192
+ .toast.leaving {
193
+ animation: motion-toast-out 220ms cubic-bezier(.4,0,1,1) both;
194
+ }
195
+
196
+ .drawer-meta .resume-agent {
197
+ border-color: #407d69;
198
+ background: #17382f;
199
+ color: #9ae8c9;
200
+ cursor: pointer;
201
+ }
202
+
203
+ .drawer-meta .resume-agent:hover {
204
+ background: #1d4b3e;
205
+ color: #c6f8e4;
206
+ }
207
+
208
+ .drawer-meta .work-state.working {
209
+ border-color: rgba(76,227,154,.3);
210
+ background: rgba(76,227,154,.09);
211
+ color: #79e9b4;
212
+ }
213
+
214
+ .drawer-meta .work-state.resting {
215
+ border-color: rgba(109,174,204,.27);
216
+ background: rgba(109,174,204,.08);
217
+ color: #9bc9dc;
218
+ }
219
+
220
+ .drawer-meta .work-state.attention {
221
+ border-color: rgba(255,107,127,.3);
222
+ background: rgba(255,107,127,.08);
223
+ color: #ff9dab;
224
+ }
225
+
226
+ .close-button {
227
+ width: 32px;
228
+ height: 32px;
229
+ margin-left: auto;
230
+ border: 1px solid var(--line);
231
+ border-radius: 9px;
232
+ background: #121823;
233
+ color: #8290a3;
234
+ font-size: 19px;
235
+ cursor: pointer;
236
+ transition: transform var(--motion-fast) var(--motion-ease),background-color var(--motion-fast) ease,border-color var(--motion-fast) ease,color var(--motion-fast) ease,box-shadow var(--motion-medium) ease,opacity var(--motion-fast) ease;
237
+ }
238
+
239
+ .drawer-title span {
240
+ color: #68758a;
241
+ font-weight: 700;
242
+ letter-spacing: .12em;
243
+ text-transform: uppercase;
244
+ font-size: 11px;
245
+ }
246
+
247
+ .drawer-title h2 {
248
+ margin: 4px 0 0;
249
+ white-space: nowrap;
250
+ overflow: hidden;
251
+ text-overflow: ellipsis;
252
+ font-size: 18px;
253
+ }
254
+
255
+ .drawer-tab {
256
+ transition: transform var(--motion-fast) var(--motion-ease),background-color var(--motion-fast) ease,border-color var(--motion-fast) ease,color var(--motion-fast) ease,box-shadow var(--motion-medium) ease,opacity var(--motion-fast) ease;
257
+ position: relative;
258
+ padding: 0 15px;
259
+ border: 0;
260
+ background: transparent;
261
+ color: #6e7a8d;
262
+ cursor: pointer;
263
+ height: 44px;
264
+ min-height: 44px;
265
+ font-size: 12px;
266
+ }
267
+
268
+ .drawer-meta {
269
+ display: flex;
270
+ flex-wrap: wrap;
271
+ padding: 0 22px 15px;
272
+ gap: 8px;
273
+ }
274
+
275
+ .modal-backdrop {
276
+ position: fixed;
277
+ inset: 0;
278
+ z-index: 30;
279
+ display: grid;
280
+ place-items: center;
281
+ padding: 25px;
282
+ backdrop-filter: blur(5px);
283
+ background: rgba(2,5,9,.88);
284
+ }