loadtoagent 1.3.4 → 1.3.6
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.
- package/docs/PROVIDER-CONTRACTS.md +3 -1
- package/package.json +4 -2
- package/renderer/app-dashboard.js +75 -13
- package/renderer/app-drawer-content.js +189 -8
- package/renderer/app-drawer.js +4 -3
- package/renderer/app-events-dialogs.js +6 -1
- package/renderer/app-events-filters.js +80 -2
- package/renderer/app-events-sessions.js +110 -17
- package/renderer/app-graph-model.js +8 -5
- package/renderer/app-graph-orchestration.js +43 -11
- package/renderer/app-graph-view.js +75 -14
- package/renderer/app-quality.js +2 -0
- package/renderer/app-session-render.js +7 -7
- package/renderer/app.js +104 -0
- package/renderer/i18n-messages.js +46 -9
- package/renderer/index.html +33 -7
- package/renderer/styles-components.css +218 -1
- package/renderer/styles-control-room.css +820 -29
- package/renderer/styles-readability.css +1 -9
- package/renderer/styles-responsive-shell.css +22 -1
- package/renderer/styles-terminal.css +21 -31
- package/renderer/styles-workflow-map.css +8 -0
- package/renderer/terminal-events.js +0 -13
- package/renderer/terminal-workbench.js +1 -4
- package/src/agentMonitor/claudeParser.js +189 -4
- package/src/agentMonitor/codexCollaboration.js +1 -0
- package/src/agentMonitor/codexParser.js +6 -5
- package/src/agentMonitor/executionActivity.js +26 -1
- package/src/agentMonitor/hierarchy.js +6 -3
- package/src/agentMonitor.js +10 -3
- package/src/contracts.js +1 -1
- package/src/monitorWorker.js +2 -0
- package/src/nodePtyRuntime.js +58 -0
- package/src/terminalHost.js +104 -5
- package/src/terminalManager.js +5 -1
package/renderer/index.html
CHANGED
|
@@ -61,11 +61,6 @@
|
|
|
61
61
|
<div id="providerRail" class="provider-rail"></div>
|
|
62
62
|
</section>
|
|
63
63
|
|
|
64
|
-
<section class="sidebar-section workspace-section">
|
|
65
|
-
<div class="section-title"><span data-i18n="ui.workspaces">프로젝트 폴더 필터</span><button id="addWorkspaceBtn" class="icon-button" type="button" title="폴더 필터 추가" data-i18n-title="ui.add_workspace" aria-label="폴더 필터 추가" data-i18n-aria-label="ui.add_workspace" aria-controls="workspaceList">+</button></div>
|
|
66
|
-
<div id="workspaceList" class="workspace-list" role="group" aria-label="작업 시작 폴더별 AI 세션 필터" data-i18n-aria-label="quality.workspace_filter"></div>
|
|
67
|
-
</section>
|
|
68
|
-
|
|
69
64
|
<div class="sidebar-footer">
|
|
70
65
|
<span class="privacy-light"></span>
|
|
71
66
|
<div><strong data-i18n="ui.secure_on_this_computer">내 컴퓨터에서 안전하게</strong><small data-i18n="ui.conversation_history_is_read_only_on_this_pc">대화 기록은 이 PC에서만 읽습니다</small></div>
|
|
@@ -208,7 +203,7 @@
|
|
|
208
203
|
<div class="terminal-layout">
|
|
209
204
|
<aside id="terminalResourcePanel" class="terminal-resource-panel">
|
|
210
205
|
<div class="terminal-resource-head"><div><b data-i18n="ui.my_terminal_sessions">내 터미널 세션</b><span id="terminalSessionSummary" data-i18n="common.running" data-i18n-params='{"count":0}'>0개 실행 중</span></div><span class="terminal-resource-live"><i></i>LIVE</span></div>
|
|
211
|
-
<p id="terminalReorderHelp" class="sr-only" data-i18n="terminal.reorder_help"
|
|
206
|
+
<p id="terminalReorderHelp" class="sr-only" data-i18n="terminal.reorder_help">세션을 끌어 놓아 순서를 바꿀 수 있습니다. 키보드에서는 세션에 초점을 둔 뒤 Alt와 위아래 화살표 키를 사용하세요.</p>
|
|
212
207
|
<div id="terminalSessionList" class="terminal-session-list" role="listbox" aria-label="터미널 세션" data-i18n-aria-label="quality.terminal_sessions"></div>
|
|
213
208
|
<div class="terminal-resource-tip"><span>⌘</span><p><b data-i18n="ui.sessions_stay_open_when_you_change_views">세션은 화면을 옮겨도 유지됩니다.</b><small data-i18n="ui.output_and_draft_commands_remain_when_you_return_from_another">다른 작업을 보고 돌아와도 출력과 작성 중인 명령이 그대로 남아 있어요.</small></p></div>
|
|
214
209
|
</aside>
|
|
@@ -298,6 +293,7 @@
|
|
|
298
293
|
</section>
|
|
299
294
|
</section>
|
|
300
295
|
|
|
296
|
+
<p id="sessionReorderHelp" class="sr-only" data-i18n="session.reorder_help">세션 카드를 끌어 놓아 위치를 바꿀 수 있습니다. 키보드에서는 카드에 초점을 둔 뒤 Alt와 위아래 화살표 키를 사용하세요.</p>
|
|
301
297
|
<section id="liveSection" class="live-section hidden" aria-label="현재 진행 중인 AI 작업" data-i18n-aria-label="ui.ai_work_currently_in_progress">
|
|
302
298
|
<div class="live-section-head">
|
|
303
299
|
<div class="live-section-title"><span class="live-beacon"></span><div><p class="eyebrow" data-i18n="ui.active_now">지금 진행 중</p><h2 data-i18n="ui.work_assigned_to_ai">전체 에이전트 작동 지도</h2></div></div>
|
|
@@ -310,7 +306,37 @@
|
|
|
310
306
|
</button>
|
|
311
307
|
</div>
|
|
312
308
|
</div>
|
|
313
|
-
<div class="
|
|
309
|
+
<div id="controlRoomProjectToolbar" class="control-room-project-toolbar">
|
|
310
|
+
<div id="workspaceList" class="workspace-list control-room-project-list" role="toolbar" aria-label="프로젝트별 실행 세션 필터" data-i18n-aria-label="control.project_filter"></div>
|
|
311
|
+
<button id="addWorkspaceBtn" class="control-room-add-project" type="button" title="프로젝트 추가" data-i18n-title="control.add_project" aria-label="프로젝트 추가" data-i18n-aria-label="control.add_project" aria-controls="workspaceList">+ <span data-i18n="control.add_project">프로젝트 추가</span></button>
|
|
312
|
+
</div>
|
|
313
|
+
<div id="controlRoomListToolbar" class="control-room-list-toolbar">
|
|
314
|
+
<span class="control-room-toolbar-spacer" aria-hidden="true"></span>
|
|
315
|
+
<label class="control-room-select-field">
|
|
316
|
+
<span class="sr-only" data-i18n="ui.sort">정렬</span>
|
|
317
|
+
<select id="controlRoomSortSelect" aria-label="실행 세션 정렬" data-i18n-aria-label="control.sort_sessions">
|
|
318
|
+
<option value="recent" data-i18n="control.recent_activity">최근 활동순</option>
|
|
319
|
+
<option value="tokens" data-i18n="ui.highest_usage">많이 사용한 순서</option>
|
|
320
|
+
<option value="context" data-i18n="ui.highest_context_usage">기억 공간을 많이 쓴 순서</option>
|
|
321
|
+
</select>
|
|
322
|
+
</label>
|
|
323
|
+
<label class="control-room-select-field control-room-project-select-field">
|
|
324
|
+
<span class="sr-only" data-i18n="control.project_filter">프로젝트</span>
|
|
325
|
+
<select id="controlRoomProjectSelect" aria-label="프로젝트 선택" data-i18n-aria-label="control.project_filter"><option value="all" data-i18n="control.all_projects">모든 프로젝트</option></select>
|
|
326
|
+
</label>
|
|
327
|
+
<div id="controlRoomSearch" class="control-room-search">
|
|
328
|
+
<input id="controlRoomSearchInput" type="search" maxlength="240" tabindex="-1" aria-hidden="true" aria-label="실행 세션 검색" data-i18n-aria-label="control.search_sessions" placeholder="세션 검색" data-i18n-placeholder="control.search_sessions" autocomplete="off" />
|
|
329
|
+
<button id="controlRoomSearchBtn" type="button" aria-label="실행 세션 검색 열기" data-i18n-aria-label="control.open_search" aria-controls="controlRoomSearchInput" aria-expanded="false"><span aria-hidden="true">⌕</span></button>
|
|
330
|
+
</div>
|
|
331
|
+
<div class="control-room-pagination">
|
|
332
|
+
<output id="controlRoomPageSummary" class="control-room-page-summary" aria-live="polite">0–0 / 0</output>
|
|
333
|
+
<div class="control-room-page-buttons">
|
|
334
|
+
<button id="controlRoomPagePrev" type="button" aria-label="이전 실행 세션" data-i18n-aria-label="control.previous_page">‹</button>
|
|
335
|
+
<button id="controlRoomPageNext" type="button" aria-label="다음 실행 세션" data-i18n-aria-label="control.next_page">›</button>
|
|
336
|
+
</div>
|
|
337
|
+
</div>
|
|
338
|
+
</div>
|
|
339
|
+
<div id="agentMapToolbar" class="agent-map-toolbar">
|
|
314
340
|
<div id="graphBreadcrumbs" class="graph-breadcrumbs" aria-label="에이전트 탐색 경로" data-i18n-aria-label="ui.agent_navigation_path"></div>
|
|
315
341
|
<button id="graphResetBtn" class="graph-reset hidden" type="button" data-i18n="ui.back_to_task_list">작업 목록으로</button>
|
|
316
342
|
</div>
|
|
@@ -1018,7 +1018,7 @@ button[aria-busy="true"] {
|
|
|
1018
1018
|
border-radius: 999px;
|
|
1019
1019
|
background: color-mix(in srgb,var(--drawer-provider) 7%,#101720);
|
|
1020
1020
|
color: color-mix(in srgb,var(--drawer-provider) 75%,#d9e3ec);
|
|
1021
|
-
font-size:
|
|
1021
|
+
font-size: 12px !important;
|
|
1022
1022
|
font-weight: 700;
|
|
1023
1023
|
}
|
|
1024
1024
|
|
|
@@ -1139,6 +1139,223 @@ button[aria-busy="true"] {
|
|
|
1139
1139
|
animation: control-room-pulse 1.35s ease-in-out infinite;
|
|
1140
1140
|
}
|
|
1141
1141
|
|
|
1142
|
+
.subagent-call-moment {
|
|
1143
|
+
position: relative;
|
|
1144
|
+
display: grid;
|
|
1145
|
+
width: calc(100% - 43px);
|
|
1146
|
+
margin-left: 43px;
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
.subagent-call-anchor {
|
|
1150
|
+
display: grid;
|
|
1151
|
+
grid-template-columns: 28px minmax(0,1fr);
|
|
1152
|
+
align-items: start;
|
|
1153
|
+
gap: 9px;
|
|
1154
|
+
padding: 10px 12px;
|
|
1155
|
+
border: 1px solid #263443;
|
|
1156
|
+
border-left: 3px solid color-mix(in srgb,var(--drawer-provider) 68%,#6f8ca4);
|
|
1157
|
+
border-radius: 10px;
|
|
1158
|
+
background: #0b1119;
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
.subagent-call-anchor > span {
|
|
1162
|
+
width: 27px;
|
|
1163
|
+
height: 27px;
|
|
1164
|
+
display: grid;
|
|
1165
|
+
place-items: center;
|
|
1166
|
+
border-radius: 8px;
|
|
1167
|
+
background: color-mix(in srgb,var(--drawer-provider) 12%,#17212c);
|
|
1168
|
+
color: var(--drawer-provider);
|
|
1169
|
+
font-size: 9px;
|
|
1170
|
+
font-weight: 800;
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
.subagent-call-anchor small {
|
|
1174
|
+
display: block;
|
|
1175
|
+
margin-bottom: 4px;
|
|
1176
|
+
color: color-mix(in srgb,var(--drawer-provider) 70%,#9eb0bf);
|
|
1177
|
+
font-size: 10px;
|
|
1178
|
+
font-weight: 750;
|
|
1179
|
+
}
|
|
1180
|
+
|
|
1181
|
+
.subagent-call-anchor blockquote {
|
|
1182
|
+
margin: 0;
|
|
1183
|
+
color: #aebbc8;
|
|
1184
|
+
font-size: 11px;
|
|
1185
|
+
line-height: 1.55;
|
|
1186
|
+
}
|
|
1187
|
+
|
|
1188
|
+
.subagent-call-anchor.is-context-only {
|
|
1189
|
+
align-items: center;
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
.subagent-call-anchor.is-context-only small {
|
|
1193
|
+
margin: 5px 0 0;
|
|
1194
|
+
}
|
|
1195
|
+
|
|
1196
|
+
.subagent-call-connector {
|
|
1197
|
+
position: relative;
|
|
1198
|
+
height: 24px;
|
|
1199
|
+
display: grid;
|
|
1200
|
+
place-items: center;
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
.subagent-call-connector i {
|
|
1204
|
+
position: absolute;
|
|
1205
|
+
top: 0;
|
|
1206
|
+
bottom: 0;
|
|
1207
|
+
left: 25px;
|
|
1208
|
+
width: 2px;
|
|
1209
|
+
background: color-mix(in srgb,var(--drawer-provider) 55%,#34495c);
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
.subagent-call-connector b {
|
|
1213
|
+
position: relative;
|
|
1214
|
+
z-index: 1;
|
|
1215
|
+
width: 20px;
|
|
1216
|
+
height: 20px;
|
|
1217
|
+
display: grid;
|
|
1218
|
+
place-items: center;
|
|
1219
|
+
border: 1px solid color-mix(in srgb,var(--drawer-provider) 55%,#3c5368);
|
|
1220
|
+
border-radius: 50%;
|
|
1221
|
+
background: #101821;
|
|
1222
|
+
color: var(--drawer-provider);
|
|
1223
|
+
font-size: 10px;
|
|
1224
|
+
}
|
|
1225
|
+
|
|
1226
|
+
.subagent-call-moment.is-inline .subagent-call-connector {
|
|
1227
|
+
height: 18px;
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
.subagent-call-moment.is-inline .subagent-call-connector i {
|
|
1231
|
+
left: 16px;
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
.subagent-call-event {
|
|
1235
|
+
display: grid;
|
|
1236
|
+
grid-template-columns: 34px minmax(0,1fr) auto;
|
|
1237
|
+
align-items: center;
|
|
1238
|
+
gap: 11px;
|
|
1239
|
+
width: 100%;
|
|
1240
|
+
padding: 11px 12px;
|
|
1241
|
+
border: 2px solid color-mix(in srgb,var(--drawer-provider) 52%,#2a4658);
|
|
1242
|
+
border-radius: 11px;
|
|
1243
|
+
background: linear-gradient(135deg,color-mix(in srgb,var(--drawer-provider) 16%,#101822),#0d141d);
|
|
1244
|
+
color: inherit;
|
|
1245
|
+
text-align: left;
|
|
1246
|
+
}
|
|
1247
|
+
|
|
1248
|
+
button.subagent-call-event {
|
|
1249
|
+
cursor: pointer;
|
|
1250
|
+
transition: border-color var(--motion-fast) ease, transform var(--motion-fast) ease, background var(--motion-fast) ease;
|
|
1251
|
+
}
|
|
1252
|
+
|
|
1253
|
+
button.subagent-call-event:hover,
|
|
1254
|
+
button.subagent-call-event:focus-visible {
|
|
1255
|
+
border-color: color-mix(in srgb,var(--drawer-provider) 62%,#45627a);
|
|
1256
|
+
background: linear-gradient(135deg,color-mix(in srgb,var(--drawer-provider) 15%,#111b26),#101923);
|
|
1257
|
+
transform: translateY(-1px);
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
.subagent-call-event.is-unavailable {
|
|
1261
|
+
opacity: .72;
|
|
1262
|
+
}
|
|
1263
|
+
|
|
1264
|
+
.subagent-call-icon {
|
|
1265
|
+
width: 32px;
|
|
1266
|
+
height: 32px;
|
|
1267
|
+
display: grid;
|
|
1268
|
+
place-items: center;
|
|
1269
|
+
border: 1px solid color-mix(in srgb,var(--drawer-provider) 38%,#304154);
|
|
1270
|
+
border-radius: 9px;
|
|
1271
|
+
background: color-mix(in srgb,var(--drawer-provider) 9%,#151d28);
|
|
1272
|
+
color: var(--drawer-provider);
|
|
1273
|
+
font-size: 16px;
|
|
1274
|
+
}
|
|
1275
|
+
|
|
1276
|
+
.subagent-call-copy,
|
|
1277
|
+
.subagent-call-action {
|
|
1278
|
+
min-width: 0;
|
|
1279
|
+
}
|
|
1280
|
+
|
|
1281
|
+
.subagent-call-copy small,
|
|
1282
|
+
.subagent-call-copy b,
|
|
1283
|
+
.subagent-call-copy > span,
|
|
1284
|
+
.subagent-call-action em,
|
|
1285
|
+
.subagent-call-action strong {
|
|
1286
|
+
display: block;
|
|
1287
|
+
}
|
|
1288
|
+
|
|
1289
|
+
.subagent-call-copy small {
|
|
1290
|
+
margin-bottom: 3px;
|
|
1291
|
+
color: #7f8ea1;
|
|
1292
|
+
font-size: 10px;
|
|
1293
|
+
font-weight: 650;
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
.subagent-call-copy .subagent-call-timing {
|
|
1297
|
+
width: fit-content;
|
|
1298
|
+
margin-bottom: 4px;
|
|
1299
|
+
padding: 3px 7px;
|
|
1300
|
+
border: 1px solid rgba(244,168,93,.4);
|
|
1301
|
+
border-radius: 999px;
|
|
1302
|
+
background: rgba(151,83,31,.17);
|
|
1303
|
+
color: #f2b16f;
|
|
1304
|
+
font-size: 11px;
|
|
1305
|
+
font-weight: 800;
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
.subagent-call-copy .subagent-call-clock {
|
|
1309
|
+
margin: 0 0 5px;
|
|
1310
|
+
color: #77889b;
|
|
1311
|
+
font-size: 10px;
|
|
1312
|
+
}
|
|
1313
|
+
|
|
1314
|
+
.subagent-call-copy b {
|
|
1315
|
+
overflow: hidden;
|
|
1316
|
+
color: #e0e8ef;
|
|
1317
|
+
font-size: 12px;
|
|
1318
|
+
text-overflow: ellipsis;
|
|
1319
|
+
white-space: nowrap;
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
.subagent-call-copy > span {
|
|
1323
|
+
margin-top: 4px;
|
|
1324
|
+
overflow: hidden;
|
|
1325
|
+
color: #8e9daf;
|
|
1326
|
+
font-size: 11px;
|
|
1327
|
+
line-height: 1.45;
|
|
1328
|
+
text-overflow: ellipsis;
|
|
1329
|
+
white-space: nowrap;
|
|
1330
|
+
}
|
|
1331
|
+
|
|
1332
|
+
.subagent-call-action {
|
|
1333
|
+
display: grid;
|
|
1334
|
+
justify-items: end;
|
|
1335
|
+
gap: 4px;
|
|
1336
|
+
}
|
|
1337
|
+
|
|
1338
|
+
.subagent-call-action em {
|
|
1339
|
+
color: #7f90a3;
|
|
1340
|
+
font-size: 10px;
|
|
1341
|
+
font-style: normal;
|
|
1342
|
+
}
|
|
1343
|
+
|
|
1344
|
+
.subagent-call-action em.status-running,
|
|
1345
|
+
.subagent-call-action em.status-starting {
|
|
1346
|
+
color: #66d9a8;
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
.subagent-call-action em.status-completed {
|
|
1350
|
+
color: #8ba1b5;
|
|
1351
|
+
}
|
|
1352
|
+
|
|
1353
|
+
.subagent-call-action strong {
|
|
1354
|
+
color: color-mix(in srgb,var(--drawer-provider) 75%,#dbe6ef);
|
|
1355
|
+
font-size: 11px;
|
|
1356
|
+
white-space: nowrap;
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1142
1359
|
.chat-row.system .chat-avatar {
|
|
1143
1360
|
color: #67d6b0;
|
|
1144
1361
|
}
|