loadtoagent 1.3.1 → 1.3.3
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/README.ko.md +11 -9
- package/docs/PROVIDER-CONTRACTS.md +8 -6
- package/main.js +25 -3
- package/package.json +1 -1
- package/preload.js +7 -2
- package/renderer/app-dashboard.js +18 -12
- package/renderer/app-graph-view.js +1 -1
- package/renderer/app-management.js +91 -45
- package/renderer/app-run-modal.js +1 -1
- package/renderer/app.js +1 -1
- package/renderer/i18n-messages.js +212 -199
- package/renderer/index.html +28 -27
- package/renderer/styles-agent-map.css +10 -10
- package/renderer/styles-cards.css +19 -19
- package/renderer/styles-collaboration.css +23 -23
- package/renderer/styles-components.css +36 -36
- package/renderer/styles-management.css +23 -14
- package/renderer/styles-onboarding.css +8 -8
- package/renderer/styles-overlays.css +5 -5
- package/renderer/styles-product.css +24 -24
- package/renderer/styles-quality.css +4 -4
- package/renderer/styles-readability.css +179 -1
- package/renderer/styles-responsive-runtime.css +5 -5
- package/renderer/styles-responsive-workflows.css +2 -2
- package/renderer/styles-run-composer.css +23 -23
- package/renderer/styles-runtime-overview.css +22 -22
- package/renderer/styles-settings.css +21 -21
- package/renderer/styles-terminal.css +66 -66
- package/renderer/styles-tmux.css +49 -49
- package/renderer/styles-workflows.css +48 -48
- package/renderer/styles.css +7 -7
- package/renderer/terminal-events.js +34 -11
- package/renderer/terminal-workbench.js +52 -21
- package/renderer/terminal.js +9 -1
- package/src/contracts.js +5 -5
- package/src/ipc/registerTerminalIpc.js +6 -14
- package/src/sessionIntelligence.js +18 -4
- package/src/terminalHost.js +100 -26
- package/src/terminalHostDaemon.js +1 -0
- package/src/terminalManager.js +61 -4
package/renderer/index.html
CHANGED
|
@@ -41,13 +41,13 @@
|
|
|
41
41
|
<nav class="view-nav" aria-label="화면 선택" data-i18n-aria-label="app.nav.label">
|
|
42
42
|
<button class="nav-item active" type="button" data-view="all" aria-label="홈" data-i18n-aria-label="app.nav.home" aria-keyshortcuts="Meta+1 Control+1" aria-controls="operationsOverview liveSection globalStats sessionSection beginnerGuide providerOverview" title="홈" data-i18n-title="app.nav.home"><span class="nav-icon">⌂</span><span data-i18n="app.nav.home">홈</span><b><span id="navAllCount">0</span><small data-i18n="quality.unit.tasks">작업</small></b></button>
|
|
43
43
|
<button class="nav-item" type="button" data-view="active" aria-label="진행 중" data-i18n-aria-label="app.nav.active" aria-keyshortcuts="Meta+2 Control+2" aria-controls="operationsOverview liveSection activeEmptyState" title="진행 중" data-i18n-title="app.nav.active"><span class="nav-icon live-dot"></span><span data-i18n="app.nav.active">진행 중</span><b><span id="navActiveCount">0</span><small data-i18n="quality.unit.tasks">작업</small></b></button>
|
|
44
|
-
<button class="nav-item" type="button" data-view="waiting" aria-label="
|
|
44
|
+
<button class="nav-item" type="button" data-view="waiting" aria-label="확인할 일" data-i18n-aria-label="app.nav.needs_review" aria-keyshortcuts="Meta+3 Control+3" aria-controls="attentionInbox" title="확인할 일" data-i18n-title="app.nav.needs_review"><span class="nav-icon">!</span><span data-i18n="app.nav.needs_review">확인할 일</span><b><span id="navWaitingCount">0</span><small data-i18n="quality.unit.items">항목</small></b></button>
|
|
45
45
|
<details id="advancedToolsNav" class="advanced-tools-nav">
|
|
46
46
|
<summary><span class="nav-icon">⌁</span><span data-i18n="management.advanced_tools">고급 도구</span><b><span id="advancedToolsCount">0</span><small data-i18n="quality.unit.items">항목</small></b><i aria-hidden="true">⌄</i></summary>
|
|
47
47
|
<div class="advanced-tools-list">
|
|
48
|
-
<button class="nav-item runtime-nav-item" type="button" data-view="runtime" aria-label="
|
|
49
|
-
<button class="nav-item" type="button" data-view="terminal" aria-label="
|
|
50
|
-
<button class="nav-item tmux-nav-item" type="button" data-view="tmux" aria-label="
|
|
48
|
+
<button class="nav-item runtime-nav-item" type="button" data-view="runtime" aria-label="예약·실행 단계" data-i18n-aria-label="app.nav.runtime" aria-keyshortcuts="Meta+4 Control+4" aria-controls="automationOverview" title="예약·실행 단계" data-i18n-title="app.nav.runtime"><span class="nav-icon runtime-nav-icon">↻</span><span data-i18n="app.nav.runtime">예약·실행 단계</span><b><span id="navRuntimeCount">0</span><small data-i18n="quality.unit.runs">실행</small></b></button>
|
|
49
|
+
<button class="nav-item" type="button" data-view="terminal" aria-label="AI 세션 터미널" data-i18n-aria-label="app.nav.session_terminal" aria-keyshortcuts="Meta+5 Control+5" aria-controls="terminalSection" title="AI 세션 터미널" data-i18n-title="app.nav.session_terminal"><span class="nav-icon">›_</span><span data-i18n="app.nav.session_terminal">AI 세션 터미널</span><b><span id="navTerminalCount">0</span><small data-i18n="quality.unit.sessions">세션</small></b></button>
|
|
50
|
+
<button class="nav-item tmux-nav-item" type="button" data-view="tmux" aria-label="tmux 터미널 관리" data-i18n-aria-label="app.nav.tmux" aria-keyshortcuts="Meta+6 Control+6" aria-controls="tmuxSection" title="tmux 터미널 관리" data-i18n-title="app.nav.tmux"><span class="nav-icon">▦</span><span data-i18n="app.nav.tmux">tmux 터미널 관리</span><b><span id="navTmuxCount">0</span><small data-i18n="quality.unit.sessions">세션</small></b></button>
|
|
51
51
|
</div>
|
|
52
52
|
</details>
|
|
53
53
|
<div class="nav-group-label" data-i18n="app.nav.application">프로그램</div>
|
|
@@ -56,13 +56,13 @@
|
|
|
56
56
|
</nav>
|
|
57
57
|
|
|
58
58
|
<section class="sidebar-section">
|
|
59
|
-
<div class="section-title"><span data-i18n="ui.available_ai"
|
|
59
|
+
<div class="section-title"><span data-i18n="ui.available_ai">설치가 감지된 AI CLI</span><button id="probeBtn" class="icon-button" type="button" title="AI CLI 설치 상태 다시 확인" data-i18n-title="ui.check_ai_connections_again" aria-label="AI CLI 설치 상태 다시 확인" data-i18n-aria-label="ui.check_ai_connections_again" aria-controls="providerRail">↻</button></div>
|
|
60
60
|
<div id="providerRail" class="provider-rail"></div>
|
|
61
61
|
</section>
|
|
62
62
|
|
|
63
63
|
<section class="sidebar-section workspace-section">
|
|
64
|
-
<div class="section-title"><span data-i18n="ui.workspaces"
|
|
65
|
-
<div id="workspaceList" class="workspace-list" role="group" aria-label="
|
|
64
|
+
<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>
|
|
65
|
+
<div id="workspaceList" class="workspace-list" role="group" aria-label="작업 시작 폴더별 AI 세션 필터" data-i18n-aria-label="quality.workspace_filter"></div>
|
|
66
66
|
</section>
|
|
67
67
|
|
|
68
68
|
<div class="sidebar-footer">
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
<div>
|
|
78
78
|
<p id="pageEyebrow" class="eyebrow" data-i18n="ui.ai_work_overview">AI 작업 현황</p>
|
|
79
79
|
<h1 id="pageTitle" data-i18n="ui.see_all_ai_work_at_a_glance">AI 작업을 한눈에 확인하세요.</h1>
|
|
80
|
-
<p id="pageSubtitle" class="subtitle" data-i18n="ui.active_work_and_items_needing_your_review_appear_first_find">진행 중인 일과 내 확인이 필요한 일을 먼저 보여주고, 나머지 기록은 아래에서 찾을 수 있습니다.</p>
|
|
80
|
+
<p id="pageSubtitle" class="subtitle" data-i18n="ui.active_work_and_items_needing_your_review_appear_first_find">진행 중인 일과 내 응답·상태 확인이 필요한 일을 먼저 보여주고, 나머지 기록은 아래에서 찾을 수 있습니다.</p>
|
|
81
81
|
</div>
|
|
82
82
|
<div class="top-actions">
|
|
83
83
|
<button id="shortcutHelpBtn" class="top-icon-action" type="button" aria-label="키보드 단축키 보기" data-i18n-aria-label="quality.shortcuts.open" aria-keyshortcuts="?" aria-controls="shortcutHelpModal"><span aria-hidden="true">⌨</span></button>
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
<ol>
|
|
104
104
|
<li data-guide-step="create"><button type="button" data-guide-action="create"><i>1</i><span><b data-i18n="ui.assign_work_to_ai">AI에게 일 맡기기</b><small data-i18n="ui.choose_a_task_and_workspace_to_get_started">할 일과 작업 폴더를 고르면 바로 시작돼요.</small><em data-i18n="ui.try_it">직접 해보기 →</em></span></button></li>
|
|
105
105
|
<li data-guide-step="active"><button type="button" data-guide-action="active"><i>2</i><span><b data-i18n="ui.check_progress">진행 상황 확인</b><small data-i18n="ui.ai_with_a_green_indicator_is_working_now">초록 표시가 있는 AI는 지금 일하고 있어요.</small><em data-i18n="ui.view_active_work">진행 중 보기 →</em></span></button></li>
|
|
106
|
-
<li data-guide-step="waiting"><button type="button" data-guide-action="waiting"><i>3</i><span><b data-i18n="ui.find_items_to_review"
|
|
106
|
+
<li data-guide-step="waiting"><button type="button" data-guide-action="waiting"><i>3</i><span><b data-i18n="ui.find_items_to_review">내 응답과 상태 신호 확인</b><small data-i18n="ui.items_marked_needs_review_need_a_response_or_choice">내가 답할 요청과 AI 상태 위험 신호를 구분해서 확인해요.</small><em data-i18n="ui.view_review_items">확인할 일 보기 →</em></span></button></li>
|
|
107
107
|
<li data-guide-step="detail"><button type="button" data-guide-action="detail"><i>4</i><span><b data-i18n="drawer.title">작업 자세히 보기</b><small data-i18n="ui.see_conversation_progress_and_usage_in_one_place">대화, 진행 과정, 사용량을 한곳에서 확인해요.</small><em data-i18n="ui.open_a_task">작업 열어보기 →</em></span></button></li>
|
|
108
108
|
</ol>
|
|
109
109
|
<button id="dismissGuideBtn" class="guide-dismiss" type="button" data-i18n="ui.collapse_guide">가이드 접기</button>
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
<button id="updateNoticeBtn" type="button" aria-controls="updatePanel"><span data-i18n="settings.update.view">업데이트 보기</span> <span>→</span></button>
|
|
118
118
|
</section>
|
|
119
119
|
|
|
120
|
-
<section id="automationOverview" class="automation-overview hidden" aria-label="예약 작업과 실행
|
|
120
|
+
<section id="automationOverview" class="automation-overview hidden" aria-label="예약 작업과 AI 실행 단계" data-i18n-aria-label="runtime.section_label"></section>
|
|
121
121
|
|
|
122
122
|
<section id="operationsOverview" class="operations-overview hidden" aria-label="에이전트 운영 상태" data-i18n-aria-label="management.operations_label"></section>
|
|
123
123
|
|
|
@@ -198,7 +198,7 @@
|
|
|
198
198
|
|
|
199
199
|
<section id="terminalSection" class="terminal-section hidden" aria-label="명령창 직접 다루기" data-i18n-aria-label="terminal.direct_control">
|
|
200
200
|
<div class="terminal-section-head">
|
|
201
|
-
<div><span class="terminal-logo">›_</span><div><p class="eyebrow" data-i18n="ui.conversation_and_execution_together">대화와 실행 화면을 한곳에서</p><h2 data-i18n="app.nav.session_terminal"
|
|
201
|
+
<div><span class="terminal-logo">›_</span><div><p class="eyebrow" data-i18n="ui.conversation_and_execution_together">대화와 실행 화면을 한곳에서</p><h2 data-i18n="app.nav.session_terminal">AI 세션 터미널</h2><p id="terminalPlatformExplain" class="section-explain" data-i18n="ui.choose_a_session_on_the_left_to_continue_with_its">왼쪽에서 세션을 고르면 이전 AI 대화와 실시간 터미널을 나란히 보며 그대로 이어서 작업할 수 있습니다.</p></div></div>
|
|
202
202
|
<div class="terminal-create-actions">
|
|
203
203
|
<button id="newPowerShellBtn" class="accent" type="button" data-i18n="ui.windows_session">+ Windows 세션</button>
|
|
204
204
|
<button id="newWslBtn" type="button" data-i18n="ui.linux_session">+ Linux 세션</button>
|
|
@@ -225,19 +225,20 @@
|
|
|
225
225
|
<button id="terminalRestartBtn" type="button" data-i18n="ui.restart">다시 시작</button>
|
|
226
226
|
<button id="terminalAttachBtn" class="hidden" type="button" data-i18n="ui.control_directly">직접 조작하기</button>
|
|
227
227
|
<button id="terminalCloseBtn" class="terminal-danger-button" type="button" data-i18n="ui.end_session">세션 종료</button>
|
|
228
|
+
<button id="terminalEndSessionBtn" class="terminal-danger-button hidden" type="button" data-i18n="terminal.end_ai_session">AI 세션 종료</button>
|
|
228
229
|
</div>
|
|
229
230
|
</details>
|
|
230
231
|
</div>
|
|
231
232
|
</div>
|
|
232
233
|
<div id="terminalTmuxTools" class="terminal-tmux-tools hidden">
|
|
233
|
-
<button type="button" data-tmux-manage="rename-session" data-i18n="ui.rename_workspace"
|
|
234
|
+
<button type="button" data-tmux-manage="rename-session" data-i18n="ui.rename_workspace">tmux 세션 이름 바꾸기</button>
|
|
234
235
|
<button type="button" data-tmux-manage="new-window" data-i18n="ui.add_window">창 추가</button>
|
|
235
236
|
<button type="button" data-tmux-manage="split-horizontal" data-i18n="ui.split_left_right">좌우로 나누기</button>
|
|
236
237
|
<button type="button" data-tmux-manage="split-vertical" data-i18n="ui.split_top_bottom">상하로 나누기</button>
|
|
237
238
|
<label><span data-i18n="terminal.window_layout">창 배치</span> <select id="terminalTmuxLayout"><option value="tiled" data-i18n="ui.tiled">바둑판</option><option value="even-horizontal" data-i18n="ui.equal_width">같은 너비</option><option value="even-vertical" data-i18n="ui.equal_height">같은 높이</option><option value="main-horizontal" data-i18n="ui.main_window_on_top">중요 창 위쪽</option><option value="main-vertical" data-i18n="ui.main_window_on_left">중요 창 왼쪽</option></select></label>
|
|
238
239
|
<button type="button" class="danger" data-tmux-manage="kill-pane" data-i18n="ui.close_selected_pane">선택한 칸 닫기</button>
|
|
239
240
|
<button type="button" class="danger" data-tmux-manage="kill-window" data-i18n="ui.close_entire_window">창 전체 닫기</button>
|
|
240
|
-
<button type="button" class="danger" data-tmux-manage="kill-session" data-i18n="ui.end_workspace"
|
|
241
|
+
<button type="button" class="danger" data-tmux-manage="kill-session" data-i18n="ui.end_workspace">tmux 세션 종료</button>
|
|
241
242
|
</div>
|
|
242
243
|
<div id="terminalStage" class="terminal-stage">
|
|
243
244
|
<aside id="terminalHistoryPanel" class="terminal-history-panel hidden" aria-label="선택한 AI의 이전 대화" data-i18n-aria-label="ui.previous_conversation_for_selected_ai">
|
|
@@ -273,10 +274,10 @@
|
|
|
273
274
|
</div>
|
|
274
275
|
</section>
|
|
275
276
|
|
|
276
|
-
<section id="tmuxSection" class="tmux-section hidden" aria-label="
|
|
277
|
+
<section id="tmuxSection" class="tmux-section hidden" aria-label="tmux 터미널 관리 보기" data-i18n-aria-label="ui.view_multi_terminal_work">
|
|
277
278
|
<div class="tmux-section-head">
|
|
278
|
-
<div><span class="tmux-logo">tmux</span><div><p class="eyebrow" data-i18n="ui.tmux_workspace">tmux 전용 공간</p><h2 data-i18n="ui.work_grouped_with_tmux">tmux
|
|
279
|
-
<div class="tmux-section-actions"><button id="refreshTmuxTerminalBtn" type="button" data-i18n="ui.refresh">↻ 새로고침</button><button id="newTmuxSessionBtn" class="accent" type="button" data-i18n="ui.create_tmux_workspace">+
|
|
279
|
+
<div><span class="tmux-logo">tmux</span><div><p class="eyebrow" data-i18n="ui.tmux_workspace">tmux 전용 공간</p><h2 data-i18n="ui.work_grouped_with_tmux">tmux 세션과 분할 터미널</h2><p class="section-explain" data-i18n="ui.only_work_using_tmux_appears_here_regular_terminals_are_kept">tmux를 사용하는 작업만 모아 봅니다. 일반 명령창은 이 화면에 섞이지 않습니다.</p></div></div>
|
|
280
|
+
<div class="tmux-section-actions"><button id="refreshTmuxTerminalBtn" type="button" data-i18n="ui.refresh">↻ 새로고침</button><button id="newTmuxSessionBtn" class="accent" type="button" data-i18n="ui.create_tmux_workspace">+ tmux 세션 만들기</button></div>
|
|
280
281
|
</div>
|
|
281
282
|
<div id="tmuxStats" class="tmux-stats"></div>
|
|
282
283
|
<div class="tmux-map-toolbar">
|
|
@@ -301,9 +302,9 @@
|
|
|
301
302
|
<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">AI들이 맡은 일</h2></div></div>
|
|
302
303
|
<div class="live-section-tools">
|
|
303
304
|
<p class="live-section-description" data-i18n="ui.open_a_task_to_see_who_started_it_and_what">일을 누르면 누가 시작했고, 다른 AI에게 어떤 도움을 맡겼는지 쉽게 볼 수 있습니다.</p>
|
|
304
|
-
<button id="openTmuxFromAgentWork" class="live-tmux-shortcut" type="button" aria-label="
|
|
305
|
+
<button id="openTmuxFromAgentWork" class="live-tmux-shortcut" type="button" aria-label="tmux 터미널 관리 · 세션 0개" data-i18n-aria-label="graph.open_tmux_workspace_count" data-i18n-params='{"count":0}' title="tmux 터미널 관리" data-i18n-title="graph.open_tmux_workspace">
|
|
305
306
|
<span class="live-tmux-shortcut-icon" aria-hidden="true">▦</span>
|
|
306
|
-
<span data-i18n="graph.open_tmux_workspace"
|
|
307
|
+
<span data-i18n="graph.open_tmux_workspace">tmux 터미널 관리</span>
|
|
307
308
|
<b id="agentWorkTmuxCount">0</b>
|
|
308
309
|
</button>
|
|
309
310
|
</div>
|
|
@@ -351,12 +352,12 @@
|
|
|
351
352
|
<aside id="mobileToolsMenu" class="mobile-tools-menu hidden" role="dialog" aria-modal="true" aria-labelledby="mobileToolsTitle" aria-hidden="true" tabindex="-1" inert>
|
|
352
353
|
<div class="mobile-tools-head"><span><b id="mobileToolsTitle" data-i18n="app.nav.more">더보기</b><small data-i18n="ui.advanced_tools_to_open_only_when_needed">필요할 때만 여는 고급 기능이에요.</small></span><button id="mobileToolsCloseBtn" type="button" aria-label="닫기" data-i18n-aria-label="common.close">×</button></div>
|
|
353
354
|
<details class="mobile-project-picker">
|
|
354
|
-
<summary><i aria-hidden="true">□</i><span><b data-i18n="ui.workspaces"
|
|
355
|
-
<div class="mobile-project-picker-body"><div id="mobileWorkspaceList" class="workspace-list" role="group" aria-label="
|
|
355
|
+
<summary><i aria-hidden="true">□</i><span><b data-i18n="ui.workspaces">프로젝트 폴더 필터</b><small id="mobileWorkspaceSummary" data-i18n="project.all">모든 프로젝트 폴더</small></span><em aria-hidden="true">⌄</em></summary>
|
|
356
|
+
<div class="mobile-project-picker-body"><div id="mobileWorkspaceList" class="workspace-list" role="group" aria-label="작업 시작 폴더별 AI 세션 필터" data-i18n-aria-label="quality.workspace_filter"></div><button id="mobileAddWorkspaceBtn" type="button" data-i18n="ui.add_workspace">폴더 필터 추가</button></div>
|
|
356
357
|
</details>
|
|
357
|
-
<button type="button" data-mobile-view="runtime"><i aria-hidden="true">↻</i><span><b data-i18n="runtime.title"
|
|
358
|
-
<button type="button" data-mobile-view="terminal"><i aria-hidden="true">›_</i><span><b data-i18n="app.nav.session_terminal"
|
|
359
|
-
<button type="button" data-mobile-view="tmux"><i aria-hidden="true">▦</i><span><b data-i18n="app.nav.tmux"
|
|
358
|
+
<button type="button" data-mobile-view="runtime"><i aria-hidden="true">↻</i><span><b data-i18n="runtime.title">예약·실행 단계</b><small data-i18n="runtime.description">실제 예약 작업과 현재 AI의 추정 실행 단계를 나눠서 확인합니다.</small></span></button>
|
|
359
|
+
<button type="button" data-mobile-view="terminal"><i aria-hidden="true">›_</i><span><b data-i18n="app.nav.session_terminal">AI 세션 터미널</b><small data-i18n="ui.continue_an_existing_ai_conversation_directly">기존 AI 대화를 직접 이어서 입력</small></span></button>
|
|
360
|
+
<button type="button" data-mobile-view="tmux"><i aria-hidden="true">▦</i><span><b data-i18n="app.nav.tmux">tmux 터미널 관리</b><small data-i18n="ui.manage_multiple_terminals_together">tmux 세션·창·분할 칸 관리</small></span></button>
|
|
360
361
|
<button type="button" data-mobile-view="settings"><i aria-hidden="true">⚙</i><span><b data-i18n="settings.title">프로그램 설정</b><small data-i18n="ui.check_version_and_updates">버전과 업데이트 확인</small></span></button>
|
|
361
362
|
</aside>
|
|
362
363
|
|
|
@@ -393,7 +394,7 @@
|
|
|
393
394
|
<div id="runProviderLabel" class="field-label" data-i18n="ui.which_ai_should_handle_it">어떤 AI에게 맡길까요?</div>
|
|
394
395
|
<div id="runProviderPicker" class="run-provider-picker" role="radiogroup" aria-labelledby="runProviderLabel"></div>
|
|
395
396
|
<div id="runProviderHelp" class="run-provider-help hidden" role="status"></div>
|
|
396
|
-
<div class="run-folder-field"><label class="field-label" for="runCwd" data-i18n="ui.
|
|
397
|
+
<div class="run-folder-field"><label class="field-label" for="runCwd" data-i18n="ui.work_folder">작업 폴더</label><div class="path-field"><input id="runCwd" required placeholder="프로젝트 폴더를 선택하세요" data-i18n-placeholder="ui.choose_a_project_folder" /><button type="button" id="pickRunCwdBtn" data-i18n="ui.browse">폴더 찾기</button></div></div>
|
|
397
398
|
<div id="runWorkspaceSuggestions" class="run-workspace-suggestions" aria-label="최근 작업 폴더" data-i18n-aria-label="ui.recent_workspaces"></div>
|
|
398
399
|
<label class="permission-toggle"><input id="allowWrites" type="checkbox" /><span class="toggle-track"></span><div><strong data-i18n="ui.allow_ai_to_edit_files">AI가 파일을 고칠 수 있게 허용</strong><small data-i18n="ui.when_enabled_the_ai_can_directly_edit_files_in_the">켜면 선택한 폴더의 파일을 직접 수정합니다.</small></div></label>
|
|
399
400
|
<div id="runPermissionHint" class="run-permission-hint hidden" role="status" data-i18n="ui.this_request_appears_to_need_file_changes_without_edit_permission">이 요청은 파일 수정이 필요해 보여요. 위의 수정 허용을 켜지 않으면 AI가 코드 변경 없이 검토만 합니다.</div>
|
|
@@ -426,15 +427,15 @@
|
|
|
426
427
|
</div>
|
|
427
428
|
<div id="tmuxCreateModal" class="modal-backdrop hidden" role="dialog" aria-modal="true" aria-labelledby="tmuxCreateTitle" aria-hidden="true" inert>
|
|
428
429
|
<form id="tmuxCreateForm" class="run-modal terminal-modal">
|
|
429
|
-
<div class="modal-head"><div><p class="eyebrow" data-i18n="ui.advanced_work">고급 작업</p><h2 id="tmuxCreateTitle" data-i18n="ui.create_multi_window_workspace"
|
|
430
|
+
<div class="modal-head"><div><p class="eyebrow" data-i18n="ui.advanced_work">고급 작업</p><h2 id="tmuxCreateTitle" data-i18n="ui.create_multi_window_workspace">tmux 세션 만들기</h2></div><button type="button" id="closeTmuxCreateBtn" class="close-button" aria-label="tmux 세션 만들기 창 닫기" data-i18n-aria-label="ui.close_multi_window_workspace_dialog">×</button></div>
|
|
430
431
|
<div class="form-grid">
|
|
431
432
|
<label><span id="tmuxEnvironmentLabel" data-i18n="ui.tmux_environment">tmux 환경</span><select id="tmuxCreateDistro" required></select></label>
|
|
432
|
-
<label><span data-i18n="ui.workspace_name"
|
|
433
|
+
<label><span data-i18n="ui.workspace_name">tmux 세션 이름</span><input id="tmuxCreateName" required pattern="[A-Za-z0-9_.\-]+" placeholder="my-work" aria-describedby="tmuxCreateNameHelp" /><small id="tmuxCreateNameHelp" data-i18n="tmux.name_requirements">영문, 숫자, 마침표, 밑줄, 하이픈만 사용할 수 있습니다.</small></label>
|
|
433
434
|
</div>
|
|
434
435
|
<label><span><span data-i18n="terminal.start_folder">시작 폴더</span> <small data-i18n="ui.optional">선택 사항</small></span><span class="path-field"><input id="tmuxCreateCwd" placeholder="프로젝트의 절대 경로" data-i18n-placeholder="ui.absolute_project_path" /><button type="button" id="pickTmuxCwdBtn" data-i18n="ui.browse">폴더 찾기</button></span></label>
|
|
435
436
|
<label><span><span data-i18n="terminal.initial_command">처음 실행할 명령</span> <small data-i18n="ui.optional">선택 사항</small></span><textarea id="tmuxCreateCommand" rows="4" placeholder="예: 실행할 AI 명령" data-i18n-placeholder="ui.example_claude_or_codex"></textarea></label>
|
|
436
437
|
<div id="tmuxCreateError" class="form-error hidden" role="alert" aria-live="assertive" tabindex="-1"></div>
|
|
437
|
-
<div class="modal-actions"><button type="button" id="cancelTmuxCreateBtn" class="ghost-button" data-i18n="common.cancel">취소</button><button type="submit" class="primary-button" data-i18n="ui.create_workspace"
|
|
438
|
+
<div class="modal-actions"><button type="button" id="cancelTmuxCreateBtn" class="ghost-button" data-i18n="common.cancel">취소</button><button type="submit" class="primary-button" data-i18n="ui.create_workspace">tmux 세션 만들기</button></div>
|
|
438
439
|
</form>
|
|
439
440
|
</div>
|
|
440
441
|
<script src="../node_modules/@xterm/xterm/lib/xterm.js"></script>
|
|
@@ -178,7 +178,7 @@
|
|
|
178
178
|
display: block;
|
|
179
179
|
margin: 0 0 9px 3px;
|
|
180
180
|
color: #6f7c8f;
|
|
181
|
-
font-size:
|
|
181
|
+
font-size: 12px;
|
|
182
182
|
font-weight: 700;
|
|
183
183
|
letter-spacing: .1em;
|
|
184
184
|
}
|
|
@@ -267,7 +267,7 @@
|
|
|
267
267
|
color: #6be0b0;
|
|
268
268
|
font-weight: 750;
|
|
269
269
|
letter-spacing: .11em;
|
|
270
|
-
font-size:
|
|
270
|
+
font-size: 12px;
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
.global-stat span {
|
|
@@ -276,14 +276,14 @@
|
|
|
276
276
|
font-weight: 700;
|
|
277
277
|
letter-spacing: .12em;
|
|
278
278
|
text-transform: uppercase;
|
|
279
|
-
font-size:
|
|
279
|
+
font-size: 12px;
|
|
280
280
|
}
|
|
281
281
|
|
|
282
282
|
.global-stat em {
|
|
283
283
|
margin-left: 5px;
|
|
284
284
|
color: #657186;
|
|
285
285
|
font-style: normal;
|
|
286
|
-
font-size:
|
|
286
|
+
font-size: 12px;
|
|
287
287
|
}
|
|
288
288
|
|
|
289
289
|
.provider-overview-card:active {
|
|
@@ -363,7 +363,7 @@
|
|
|
363
363
|
border-radius: 999px;
|
|
364
364
|
background: color-mix(in srgb,var(--provider) 16%,#0b1515);
|
|
365
365
|
color: color-mix(in srgb,var(--provider) 72%,#eafff8);
|
|
366
|
-
font-size:
|
|
366
|
+
font-size: 12px;
|
|
367
367
|
font-weight: 800;
|
|
368
368
|
white-space: nowrap;
|
|
369
369
|
}
|
|
@@ -391,7 +391,7 @@
|
|
|
391
391
|
display: block;
|
|
392
392
|
margin-top: 3px;
|
|
393
393
|
color: #98a6b6;
|
|
394
|
-
font-size:
|
|
394
|
+
font-size: 12px;
|
|
395
395
|
}
|
|
396
396
|
|
|
397
397
|
.poc-state {
|
|
@@ -400,7 +400,7 @@
|
|
|
400
400
|
align-items: center;
|
|
401
401
|
gap: 5px;
|
|
402
402
|
color: #98a6b6;
|
|
403
|
-
font-size:
|
|
403
|
+
font-size: 12px;
|
|
404
404
|
}
|
|
405
405
|
|
|
406
406
|
.poc-metrics span {
|
|
@@ -409,7 +409,7 @@
|
|
|
409
409
|
text-transform: uppercase;
|
|
410
410
|
letter-spacing: .08em;
|
|
411
411
|
color: #98a6b6;
|
|
412
|
-
font-size:
|
|
412
|
+
font-size: 12px;
|
|
413
413
|
}
|
|
414
414
|
|
|
415
415
|
.poc-metrics b {
|
|
@@ -425,7 +425,7 @@
|
|
|
425
425
|
border-radius: 9px;
|
|
426
426
|
background: #101722;
|
|
427
427
|
color: #9ba8ba;
|
|
428
|
-
font-size:
|
|
428
|
+
font-size: 12px;
|
|
429
429
|
cursor: pointer;
|
|
430
430
|
white-space: nowrap;
|
|
431
431
|
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;
|
|
@@ -438,7 +438,7 @@
|
|
|
438
438
|
border-radius: 9px;
|
|
439
439
|
background: #101722;
|
|
440
440
|
color: #9ba8ba;
|
|
441
|
-
font-size:
|
|
441
|
+
font-size: 12px;
|
|
442
442
|
cursor: pointer;
|
|
443
443
|
white-space: nowrap;
|
|
444
444
|
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;
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
background: color-mix(in srgb,var(--provider) 11%,#111620);
|
|
16
16
|
border: 1px solid color-mix(in srgb,var(--provider) 32%,#202938);
|
|
17
17
|
color: var(--provider);
|
|
18
|
-
font-size:
|
|
18
|
+
font-size: 12px;
|
|
19
19
|
font-weight: 850;
|
|
20
20
|
letter-spacing: -.03em;
|
|
21
21
|
}
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
border-radius: 5px;
|
|
124
124
|
background: rgba(89,216,255,.06);
|
|
125
125
|
color: #76c8df;
|
|
126
|
-
font-size:
|
|
126
|
+
font-size: 12px;
|
|
127
127
|
font-weight: 750;
|
|
128
128
|
letter-spacing: .02em;
|
|
129
129
|
}
|
|
@@ -155,14 +155,14 @@
|
|
|
155
155
|
.token-breakdown span {
|
|
156
156
|
display: block;
|
|
157
157
|
color: #566173;
|
|
158
|
-
font-size:
|
|
158
|
+
font-size: 12px;
|
|
159
159
|
}
|
|
160
160
|
|
|
161
161
|
.token-breakdown b {
|
|
162
162
|
display: block;
|
|
163
163
|
margin-top: 2px;
|
|
164
164
|
color: #aeb9c6;
|
|
165
|
-
font-size:
|
|
165
|
+
font-size: 12px;
|
|
166
166
|
font-weight: 570;
|
|
167
167
|
}
|
|
168
168
|
|
|
@@ -184,7 +184,7 @@
|
|
|
184
184
|
border-radius: 7px;
|
|
185
185
|
background: color-mix(in srgb,var(--provider) 11%,#131822);
|
|
186
186
|
color: var(--provider);
|
|
187
|
-
font-size:
|
|
187
|
+
font-size: 12px;
|
|
188
188
|
}
|
|
189
189
|
|
|
190
190
|
.now-strip>div {
|
|
@@ -351,7 +351,7 @@
|
|
|
351
351
|
|
|
352
352
|
.token-hero-head span {
|
|
353
353
|
color: #6d798d;
|
|
354
|
-
font-size:
|
|
354
|
+
font-size: 12px;
|
|
355
355
|
}
|
|
356
356
|
|
|
357
357
|
.token-hero-head b {
|
|
@@ -361,14 +361,14 @@
|
|
|
361
361
|
.token-tile span {
|
|
362
362
|
display: block;
|
|
363
363
|
color: #606c7e;
|
|
364
|
-
font-size:
|
|
364
|
+
font-size: 12px;
|
|
365
365
|
}
|
|
366
366
|
|
|
367
367
|
.token-tile small {
|
|
368
368
|
display: block;
|
|
369
369
|
margin-top: 4px;
|
|
370
370
|
color: #4e596a;
|
|
371
|
-
font-size:
|
|
371
|
+
font-size: 12px;
|
|
372
372
|
}
|
|
373
373
|
|
|
374
374
|
.token-note {
|
|
@@ -378,7 +378,7 @@
|
|
|
378
378
|
background: #0d121a;
|
|
379
379
|
color: #697588;
|
|
380
380
|
line-height: 1.55;
|
|
381
|
-
font-size:
|
|
381
|
+
font-size: 12px;
|
|
382
382
|
}
|
|
383
383
|
|
|
384
384
|
.motion-content-in .token-tile {
|
|
@@ -491,7 +491,7 @@
|
|
|
491
491
|
align-items: center;
|
|
492
492
|
gap: 7px;
|
|
493
493
|
color: #6d798c;
|
|
494
|
-
font-size:
|
|
494
|
+
font-size: 12px;
|
|
495
495
|
}
|
|
496
496
|
|
|
497
497
|
.card-provider-line b {
|
|
@@ -512,7 +512,7 @@
|
|
|
512
512
|
font-weight: 700;
|
|
513
513
|
letter-spacing: .06em;
|
|
514
514
|
text-transform: uppercase;
|
|
515
|
-
font-size:
|
|
515
|
+
font-size: 12px;
|
|
516
516
|
}
|
|
517
517
|
|
|
518
518
|
.card-title {
|
|
@@ -535,7 +535,7 @@
|
|
|
535
535
|
white-space: nowrap;
|
|
536
536
|
overflow: hidden;
|
|
537
537
|
color: #9ba8b8;
|
|
538
|
-
font-size:
|
|
538
|
+
font-size: 12px;
|
|
539
539
|
}
|
|
540
540
|
|
|
541
541
|
.now-strip b {
|
|
@@ -555,14 +555,14 @@
|
|
|
555
555
|
text-overflow: ellipsis;
|
|
556
556
|
margin-top: 3px;
|
|
557
557
|
color: #95a3b4;
|
|
558
|
-
font-size:
|
|
558
|
+
font-size: 12px;
|
|
559
559
|
}
|
|
560
560
|
|
|
561
561
|
.preview-line b {
|
|
562
562
|
color: #778397;
|
|
563
563
|
text-transform: uppercase;
|
|
564
564
|
white-space: nowrap;
|
|
565
|
-
font-size:
|
|
565
|
+
font-size: 12px;
|
|
566
566
|
}
|
|
567
567
|
|
|
568
568
|
.preview-line span {
|
|
@@ -570,7 +570,7 @@
|
|
|
570
570
|
text-overflow: ellipsis;
|
|
571
571
|
white-space: nowrap;
|
|
572
572
|
color: #a7b3c1;
|
|
573
|
-
font-size:
|
|
573
|
+
font-size: 12px;
|
|
574
574
|
}
|
|
575
575
|
|
|
576
576
|
.context-meter-head>div span {
|
|
@@ -579,7 +579,7 @@
|
|
|
579
579
|
letter-spacing: .08em;
|
|
580
580
|
text-transform: uppercase;
|
|
581
581
|
color: #909eaf;
|
|
582
|
-
font-size:
|
|
582
|
+
font-size: 12px;
|
|
583
583
|
}
|
|
584
584
|
|
|
585
585
|
.context-meter-foot {
|
|
@@ -588,13 +588,13 @@
|
|
|
588
588
|
gap: 10px;
|
|
589
589
|
margin-top: 6px;
|
|
590
590
|
color: #909eaf;
|
|
591
|
-
font-size:
|
|
591
|
+
font-size: 12px;
|
|
592
592
|
}
|
|
593
593
|
|
|
594
594
|
.token-row span {
|
|
595
595
|
display: block;
|
|
596
596
|
color: #909eaf;
|
|
597
|
-
font-size:
|
|
597
|
+
font-size: 12px;
|
|
598
598
|
}
|
|
599
599
|
|
|
600
600
|
.card-footer {
|
|
@@ -606,7 +606,7 @@
|
|
|
606
606
|
border-top: 1px solid var(--line-soft);
|
|
607
607
|
background: rgba(7,10,16,.42);
|
|
608
608
|
color: #909eaf;
|
|
609
|
-
font-size:
|
|
609
|
+
font-size: 12px;
|
|
610
610
|
}
|
|
611
611
|
|
|
612
612
|
.context-meter-head>div strong {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
right: 14px;
|
|
16
16
|
top: 14px;
|
|
17
17
|
color: color-mix(in srgb,var(--provider) 66%,#8c98a8);
|
|
18
|
-
font-size:
|
|
18
|
+
font-size: 12px;
|
|
19
19
|
font-weight: 800;
|
|
20
20
|
letter-spacing: .15em;
|
|
21
21
|
}
|
|
@@ -61,13 +61,13 @@
|
|
|
61
61
|
border-radius: 6px;
|
|
62
62
|
background: color-mix(in srgb,var(--drawer-provider) 12%,#17212d);
|
|
63
63
|
color: var(--drawer-provider);
|
|
64
|
-
font-size:
|
|
64
|
+
font-size: 12px;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
.memory-target {
|
|
68
68
|
padding: 3px 7px;
|
|
69
69
|
border-radius: 6px;
|
|
70
|
-
font-size:
|
|
70
|
+
font-size: 12px;
|
|
71
71
|
max-width: 220px;
|
|
72
72
|
overflow: hidden;
|
|
73
73
|
background: #18222e;
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
.memory-category {
|
|
80
80
|
padding: 3px 7px;
|
|
81
81
|
border-radius: 6px;
|
|
82
|
-
font-size:
|
|
82
|
+
font-size: 12px;
|
|
83
83
|
margin-left: auto;
|
|
84
84
|
background: #10241f;
|
|
85
85
|
color: #74d9ae;
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
display: block;
|
|
126
126
|
margin-top: 4px;
|
|
127
127
|
color: #71868d;
|
|
128
|
-
font-size:
|
|
128
|
+
font-size: 12px;
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
.agent-communication-panel>header em {
|
|
@@ -133,14 +133,14 @@
|
|
|
133
133
|
border-radius: 8px;
|
|
134
134
|
background: rgba(81,213,169,.09);
|
|
135
135
|
color: #75dfb8;
|
|
136
|
-
font-size:
|
|
136
|
+
font-size: 12px;
|
|
137
137
|
font-style: normal;
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
.agent-communication-panel.empty>p {
|
|
141
141
|
padding: 18px;
|
|
142
142
|
color: #6f828c;
|
|
143
|
-
font-size:
|
|
143
|
+
font-size: 12px;
|
|
144
144
|
text-align: center;
|
|
145
145
|
}
|
|
146
146
|
|
|
@@ -184,7 +184,7 @@
|
|
|
184
184
|
min-width: 0;
|
|
185
185
|
overflow: hidden;
|
|
186
186
|
color: #b8c8cf;
|
|
187
|
-
font-size:
|
|
187
|
+
font-size: 12px;
|
|
188
188
|
text-overflow: ellipsis;
|
|
189
189
|
white-space: nowrap;
|
|
190
190
|
}
|
|
@@ -202,7 +202,7 @@
|
|
|
202
202
|
.communication-copy small {
|
|
203
203
|
display: block;
|
|
204
204
|
color: #6edcaf;
|
|
205
|
-
font-size:
|
|
205
|
+
font-size: 12px;
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
.communication-copy strong {
|
|
@@ -210,7 +210,7 @@
|
|
|
210
210
|
margin-top: 5px;
|
|
211
211
|
overflow: hidden;
|
|
212
212
|
color: #a9b8c0;
|
|
213
|
-
font-size:
|
|
213
|
+
font-size: 12px;
|
|
214
214
|
font-weight: 500;
|
|
215
215
|
line-height: 1.4;
|
|
216
216
|
-webkit-box-orient: vertical;
|
|
@@ -223,7 +223,7 @@
|
|
|
223
223
|
|
|
224
224
|
.agent-communication-event time {
|
|
225
225
|
color: #596f79;
|
|
226
|
-
font-size:
|
|
226
|
+
font-size: 12px;
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
.subagent-filterbar {
|
|
@@ -262,7 +262,7 @@
|
|
|
262
262
|
border-radius: 8px;
|
|
263
263
|
background: #0d171e;
|
|
264
264
|
color: #788b97;
|
|
265
|
-
font-size:
|
|
265
|
+
font-size: 12px;
|
|
266
266
|
font-weight: 700;
|
|
267
267
|
cursor: pointer;
|
|
268
268
|
}
|
|
@@ -273,7 +273,7 @@
|
|
|
273
273
|
border-radius: 6px;
|
|
274
274
|
background: #15242d;
|
|
275
275
|
color: #9aadb7;
|
|
276
|
-
font-size:
|
|
276
|
+
font-size: 12px;
|
|
277
277
|
}
|
|
278
278
|
|
|
279
279
|
.subagent-status-filters button.active {
|
|
@@ -294,7 +294,7 @@
|
|
|
294
294
|
border-radius: 8px;
|
|
295
295
|
background: #091219;
|
|
296
296
|
color: #bac8d0;
|
|
297
|
-
font-size:
|
|
297
|
+
font-size: 12px;
|
|
298
298
|
outline: none;
|
|
299
299
|
padding: 0 9px;
|
|
300
300
|
}
|
|
@@ -306,7 +306,7 @@
|
|
|
306
306
|
border-radius: 8px;
|
|
307
307
|
background: #091219;
|
|
308
308
|
color: #bac8d0;
|
|
309
|
-
font-size:
|
|
309
|
+
font-size: 12px;
|
|
310
310
|
outline: none;
|
|
311
311
|
padding: 0 25px 0 8px;
|
|
312
312
|
}
|
|
@@ -327,13 +327,13 @@
|
|
|
327
327
|
|
|
328
328
|
.subagent-filter-result {
|
|
329
329
|
color: #617783;
|
|
330
|
-
font-size:
|
|
330
|
+
font-size: 12px;
|
|
331
331
|
white-space: nowrap;
|
|
332
332
|
}
|
|
333
333
|
|
|
334
334
|
.subagent-filter-result b {
|
|
335
335
|
color: #87d9bc;
|
|
336
|
-
font-size:
|
|
336
|
+
font-size: 12px;
|
|
337
337
|
}
|
|
338
338
|
|
|
339
339
|
.subagent-work-source {
|
|
@@ -348,12 +348,12 @@
|
|
|
348
348
|
|
|
349
349
|
.subagent-work-source b {
|
|
350
350
|
color: #dbe8e9;
|
|
351
|
-
font-size:
|
|
351
|
+
font-size: 12px;
|
|
352
352
|
}
|
|
353
353
|
|
|
354
354
|
.subagent-work-source span {
|
|
355
355
|
color: #78909a;
|
|
356
|
-
font-size:
|
|
356
|
+
font-size: 12px;
|
|
357
357
|
line-height: 1.55;
|
|
358
358
|
}
|
|
359
359
|
|
|
@@ -415,20 +415,20 @@
|
|
|
415
415
|
.completed-subagent-disclosure b {
|
|
416
416
|
display: block;
|
|
417
417
|
color: #b7c3cd;
|
|
418
|
-
font-size:
|
|
418
|
+
font-size: 12px;
|
|
419
419
|
}
|
|
420
420
|
|
|
421
421
|
.completed-subagent-disclosure small {
|
|
422
422
|
display: block;
|
|
423
423
|
margin-top: 4px;
|
|
424
424
|
color: #667887;
|
|
425
|
-
font-size:
|
|
425
|
+
font-size: 12px;
|
|
426
426
|
font-weight: 500;
|
|
427
427
|
}
|
|
428
428
|
|
|
429
429
|
.completed-subagent-disclosure button>i {
|
|
430
430
|
color: #7e93a1;
|
|
431
|
-
font-size:
|
|
431
|
+
font-size: 12px;
|
|
432
432
|
font-style: normal;
|
|
433
433
|
font-weight: 700;
|
|
434
434
|
}
|
|
@@ -450,7 +450,7 @@
|
|
|
450
450
|
content: "완료 기록";
|
|
451
451
|
grid-column: 1/-1;
|
|
452
452
|
color: #617482;
|
|
453
|
-
font-size:
|
|
453
|
+
font-size: 12px;
|
|
454
454
|
font-weight: 750;
|
|
455
455
|
letter-spacing: .08em;
|
|
456
456
|
}
|