claudito 0.1.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.
- package/LICENSE +21 -0
- package/README.md +500 -0
- package/dist/agents/agent-manager.d.ts +150 -0
- package/dist/agents/agent-manager.d.ts.map +1 -0
- package/dist/agents/agent-manager.js +560 -0
- package/dist/agents/agent-manager.js.map +1 -0
- package/dist/agents/claude-agent.d.ts +138 -0
- package/dist/agents/claude-agent.d.ts.map +1 -0
- package/dist/agents/claude-agent.js +608 -0
- package/dist/agents/claude-agent.js.map +1 -0
- package/dist/agents/index.d.ts +3 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +21 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +115 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/index.d.ts +18 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +47 -0
- package/dist/config/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/repositories/conversation.d.ts +67 -0
- package/dist/repositories/conversation.d.ts.map +1 -0
- package/dist/repositories/conversation.js +233 -0
- package/dist/repositories/conversation.js.map +1 -0
- package/dist/repositories/index.d.ts +4 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +20 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/project.d.ts +92 -0
- package/dist/repositories/project.d.ts.map +1 -0
- package/dist/repositories/project.js +279 -0
- package/dist/repositories/project.js.map +1 -0
- package/dist/repositories/settings.d.ts +44 -0
- package/dist/repositories/settings.d.ts.map +1 -0
- package/dist/repositories/settings.js +116 -0
- package/dist/repositories/settings.js.map +1 -0
- package/dist/routes/filesystem.d.ts +33 -0
- package/dist/routes/filesystem.d.ts.map +1 -0
- package/dist/routes/filesystem.js +211 -0
- package/dist/routes/filesystem.js.map +1 -0
- package/dist/routes/index.d.ts +11 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +101 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/projects.d.ts +48 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +578 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/settings.d.ts +10 -0
- package/dist/routes/settings.d.ts.map +1 -0
- package/dist/routes/settings.js +30 -0
- package/dist/routes/settings.js.map +1 -0
- package/dist/server/index.d.ts +25 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +104 -0
- package/dist/server/index.js.map +1 -0
- package/dist/services/index.d.ts +5 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +21 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/instruction-generator.d.ts +47 -0
- package/dist/services/instruction-generator.d.ts.map +1 -0
- package/dist/services/instruction-generator.js +147 -0
- package/dist/services/instruction-generator.js.map +1 -0
- package/dist/services/project.d.ts +38 -0
- package/dist/services/project.d.ts.map +1 -0
- package/dist/services/project.js +80 -0
- package/dist/services/project.js.map +1 -0
- package/dist/services/roadmap-generator.d.ts +63 -0
- package/dist/services/roadmap-generator.d.ts.map +1 -0
- package/dist/services/roadmap-generator.js +290 -0
- package/dist/services/roadmap-generator.js.map +1 -0
- package/dist/services/roadmap.d.ts +72 -0
- package/dist/services/roadmap.d.ts.map +1 -0
- package/dist/services/roadmap.js +234 -0
- package/dist/services/roadmap.js.map +1 -0
- package/dist/utils/errors.d.ts +24 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +80 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +22 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +49 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +172 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +2 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +19 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/pid-tracker.d.ts +39 -0
- package/dist/utils/pid-tracker.d.ts.map +1 -0
- package/dist/utils/pid-tracker.js +171 -0
- package/dist/utils/pid-tracker.js.map +1 -0
- package/dist/utils/retry.d.ts +10 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +65 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/websocket/index.d.ts +2 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +18 -0
- package/dist/websocket/index.js.map +1 -0
- package/dist/websocket/websocket-server.d.ts +42 -0
- package/dist/websocket/websocket-server.d.ts.map +1 -0
- package/dist/websocket/websocket-server.js +140 -0
- package/dist/websocket/websocket-server.js.map +1 -0
- package/package.json +77 -0
- package/public/css/styles.css +1860 -0
- package/public/index.html +1004 -0
- package/public/js/app.js +5346 -0
- package/public/vendor/highlight-github-dark.min.css +10 -0
- package/public/vendor/highlight.min.js +1213 -0
- package/public/vendor/jquery.min.js +2 -0
- package/public/vendor/marked.min.js +69 -0
- package/public/vendor/tailwind.js +65 -0
|
@@ -0,0 +1,1004 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Claudito - Agent Manager</title>
|
|
7
|
+
<script src="/vendor/tailwind.js"></script>
|
|
8
|
+
<script src="/vendor/jquery.min.js"></script>
|
|
9
|
+
<script src="/vendor/marked.min.js"></script>
|
|
10
|
+
<script src="/vendor/highlight.min.js"></script>
|
|
11
|
+
<link rel="stylesheet" href="/vendor/highlight-github-dark.min.css">
|
|
12
|
+
<link rel="stylesheet" href="/css/styles.css">
|
|
13
|
+
</head>
|
|
14
|
+
<body class="bg-gray-900 text-gray-100 min-h-screen">
|
|
15
|
+
<div id="app" class="flex h-screen">
|
|
16
|
+
<!-- Sidebar -->
|
|
17
|
+
<aside id="sidebar" class="w-64 bg-gray-800 border-r border-gray-700 flex flex-col">
|
|
18
|
+
<!-- Header -->
|
|
19
|
+
<div class="p-3 border-b border-gray-700 flex justify-between items-center">
|
|
20
|
+
<div>
|
|
21
|
+
<h1 class="text-base font-bold text-purple-400">Claudito</h1>
|
|
22
|
+
<p class="text-xs text-gray-400">Agent Manager</p>
|
|
23
|
+
</div>
|
|
24
|
+
<button id="btn-settings" class="p-1.5 text-gray-400 hover:text-white hover:bg-gray-700 rounded transition-colors" title="Settings">
|
|
25
|
+
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
26
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"/>
|
|
27
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/>
|
|
28
|
+
</svg>
|
|
29
|
+
</button>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<!-- Add Project Button -->
|
|
33
|
+
<div class="p-2">
|
|
34
|
+
<button id="btn-add-project" class="w-full bg-purple-600 hover:bg-purple-700 text-white py-1.5 px-3 rounded flex items-center justify-center gap-1.5 text-sm transition-colors">
|
|
35
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
36
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/>
|
|
37
|
+
</svg>
|
|
38
|
+
Add Project
|
|
39
|
+
</button>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<!-- Project List -->
|
|
43
|
+
<div class="flex-1 overflow-y-auto">
|
|
44
|
+
<div id="project-list" class="p-2 space-y-2">
|
|
45
|
+
<!-- Projects will be rendered here -->
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<!-- Footer -->
|
|
50
|
+
<div class="p-2 border-t border-gray-700 text-xs text-gray-500">
|
|
51
|
+
<div class="flex justify-between items-center">
|
|
52
|
+
<div>
|
|
53
|
+
<span id="running-count" class="text-green-400">0</span>/<span id="max-concurrent">3</span> running
|
|
54
|
+
</div>
|
|
55
|
+
<div id="queue-info" class="hidden">
|
|
56
|
+
<span id="queued-count" class="text-yellow-400">0</span> queued
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</aside>
|
|
61
|
+
|
|
62
|
+
<!-- Main Content -->
|
|
63
|
+
<main class="flex-1 flex flex-col overflow-hidden">
|
|
64
|
+
<!-- Empty State -->
|
|
65
|
+
<div id="empty-state" class="flex-1 flex items-center justify-center">
|
|
66
|
+
<div class="text-center">
|
|
67
|
+
<svg class="w-12 h-12 mx-auto text-gray-600 mb-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
68
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"/>
|
|
69
|
+
</svg>
|
|
70
|
+
<h2 class="text-base font-semibold text-gray-400 mb-1">No Project Selected</h2>
|
|
71
|
+
<p class="text-xs text-gray-500">Select a project from the sidebar or add a new one</p>
|
|
72
|
+
</div>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<!-- Project Detail View -->
|
|
76
|
+
<div id="project-detail" class="flex-1 flex flex-col hidden relative overflow-hidden">
|
|
77
|
+
<!-- Loading Overlay -->
|
|
78
|
+
<div id="content-loading" class="content-loading-overlay hidden">
|
|
79
|
+
<div class="text-center">
|
|
80
|
+
<div class="loading-spinner mx-auto mb-2"></div>
|
|
81
|
+
<p class="text-sm text-gray-400" id="loading-message">Processing...</p>
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<!-- Project Header -->
|
|
86
|
+
<header class="bg-gray-800 border-b border-gray-700 p-3">
|
|
87
|
+
<div class="flex items-center justify-between">
|
|
88
|
+
<div class="flex items-center gap-2">
|
|
89
|
+
<h2 id="project-name" class="text-base font-semibold"></h2>
|
|
90
|
+
<span id="project-status" class="status-badge"></span>
|
|
91
|
+
</div>
|
|
92
|
+
<div class="flex items-center gap-1.5">
|
|
93
|
+
<!-- Mode Selector -->
|
|
94
|
+
<div id="mode-selector" class="flex items-center bg-gray-700 rounded overflow-hidden text-sm">
|
|
95
|
+
<button id="btn-mode-interactive" class="py-1 px-2.5 transition-colors mode-btn mode-active" title="Interactive Mode - Chat with Claude">
|
|
96
|
+
<svg class="w-3.5 h-3.5 inline-block mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
97
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"/>
|
|
98
|
+
</svg>
|
|
99
|
+
Interactive
|
|
100
|
+
</button>
|
|
101
|
+
<button id="btn-mode-autonomous" class="py-1 px-2.5 transition-colors mode-btn" title="Autonomous Mode - Run through roadmap automatically">
|
|
102
|
+
<svg class="w-3.5 h-3.5 inline-block mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
103
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"/>
|
|
104
|
+
</svg>
|
|
105
|
+
Autonomous
|
|
106
|
+
</button>
|
|
107
|
+
</div>
|
|
108
|
+
<!-- Start/Stop only for autonomous mode -->
|
|
109
|
+
<button id="btn-start-agent" class="bg-green-600 hover:bg-green-700 text-white py-1 px-2.5 rounded flex items-center gap-1.5 text-sm transition-colors hidden">
|
|
110
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
111
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z"/>
|
|
112
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
113
|
+
</svg>
|
|
114
|
+
Start
|
|
115
|
+
</button>
|
|
116
|
+
<button id="btn-stop-agent" class="bg-red-600 hover:bg-red-700 text-white py-1 px-2.5 rounded flex items-center gap-1.5 text-sm transition-colors hidden">
|
|
117
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
118
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
119
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 10a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z"/>
|
|
120
|
+
</svg>
|
|
121
|
+
Stop
|
|
122
|
+
</button>
|
|
123
|
+
<button id="btn-view-roadmap" class="bg-gray-700 hover:bg-gray-600 text-white py-1 px-2.5 rounded flex items-center gap-1.5 text-sm transition-colors">
|
|
124
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
125
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"/>
|
|
126
|
+
</svg>
|
|
127
|
+
Roadmap
|
|
128
|
+
</button>
|
|
129
|
+
<button id="btn-toggle-debug" class="bg-gray-700 hover:bg-gray-600 text-white py-1 px-2.5 rounded flex items-center gap-1.5 text-sm transition-colors" title="Toggle Debug Panel">
|
|
130
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
131
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4"/>
|
|
132
|
+
</svg>
|
|
133
|
+
Debug
|
|
134
|
+
</button>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
</header>
|
|
138
|
+
|
|
139
|
+
<!-- Main Content Area with Tabs -->
|
|
140
|
+
<div id="main-content-area" class="flex-1 overflow-hidden flex flex-col bg-gray-900 min-h-0">
|
|
141
|
+
<!-- Tab Bar -->
|
|
142
|
+
<div class="flex border-b border-gray-700 bg-gray-800">
|
|
143
|
+
<button id="tab-agent-output" class="tab-button active py-2 px-4 text-sm font-medium border-b-2 border-purple-500 text-white">
|
|
144
|
+
<svg class="w-4 h-4 inline-block mr-1.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
145
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"/>
|
|
146
|
+
</svg>
|
|
147
|
+
Agent Output
|
|
148
|
+
</button>
|
|
149
|
+
<button id="tab-project-files" class="tab-button py-2 px-4 text-sm font-medium border-b-2 border-transparent text-gray-400 hover:text-gray-200">
|
|
150
|
+
<svg class="w-4 h-4 inline-block mr-1.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
151
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z"/>
|
|
152
|
+
</svg>
|
|
153
|
+
Project Files
|
|
154
|
+
</button>
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
<!-- Agent Output Tab Content -->
|
|
158
|
+
<div id="tab-content-agent-output" class="tab-content flex-1 overflow-hidden flex flex-col">
|
|
159
|
+
<!-- Conversation toolbar -->
|
|
160
|
+
<div id="conversation-toolbar" class="flex items-center justify-between gap-2 p-2 border-b border-gray-700">
|
|
161
|
+
<div class="flex items-center gap-2">
|
|
162
|
+
<button id="btn-new-conversation" class="bg-gray-700 hover:bg-gray-600 text-white py-1 px-2 rounded flex items-center gap-1 text-xs transition-colors" title="Start a new conversation">
|
|
163
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
164
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/>
|
|
165
|
+
</svg>
|
|
166
|
+
New
|
|
167
|
+
</button>
|
|
168
|
+
<button id="btn-show-history" class="bg-gray-700 hover:bg-gray-600 text-white py-1 px-2 rounded flex items-center gap-1 text-xs transition-colors" title="View conversation history">
|
|
169
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
170
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
171
|
+
</svg>
|
|
172
|
+
History
|
|
173
|
+
</button>
|
|
174
|
+
<button id="btn-context-usage" class="bg-gray-700 hover:bg-gray-600 text-white py-1 px-2 rounded flex items-center gap-1 text-xs transition-colors" title="View context usage">
|
|
175
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
176
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"/>
|
|
177
|
+
</svg>
|
|
178
|
+
Context Usage
|
|
179
|
+
</button>
|
|
180
|
+
<button id="btn-claude-files" class="bg-gray-700 hover:bg-gray-600 text-white py-1 px-2 rounded flex items-center gap-1 text-xs transition-colors" title="View and edit CLAUDE.md files">
|
|
181
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
182
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
|
|
183
|
+
</svg>
|
|
184
|
+
Claude Files
|
|
185
|
+
</button>
|
|
186
|
+
<button id="btn-tasks" class="bg-gray-700 hover:bg-gray-600 text-white py-1 px-2 rounded flex items-center gap-1 text-xs transition-colors relative" title="View current tasks">
|
|
187
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
188
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"/>
|
|
189
|
+
</svg>
|
|
190
|
+
Tasks
|
|
191
|
+
<span id="tasks-badge" class="hidden absolute -top-1 -right-1 bg-purple-500 text-white text-xs rounded-full w-4 h-4 flex items-center justify-center font-medium">0</span>
|
|
192
|
+
</button>
|
|
193
|
+
<span id="conversation-stats" class="text-xs text-gray-500 flex items-center gap-3"></span>
|
|
194
|
+
</div>
|
|
195
|
+
<div class="flex items-center gap-2">
|
|
196
|
+
<div id="agent-output-spinner" class="loading-spinner small hidden"></div>
|
|
197
|
+
<span id="agent-status-label" class="text-xs text-gray-400 hidden">Agent running...</span>
|
|
198
|
+
<!-- Font Size Controls -->
|
|
199
|
+
<div class="flex items-center gap-1 border-r border-gray-600 pr-2">
|
|
200
|
+
<button id="btn-font-decrease" class="bg-gray-700 hover:bg-gray-600 text-white w-6 h-6 rounded flex items-center justify-center text-xs transition-colors" title="Decrease font size">
|
|
201
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
202
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M20 12H4"/>
|
|
203
|
+
</svg>
|
|
204
|
+
</button>
|
|
205
|
+
<span id="font-size-display" class="text-xs text-gray-400 w-8 text-center">14px</span>
|
|
206
|
+
<button id="btn-font-increase" class="bg-gray-700 hover:bg-gray-600 text-white w-6 h-6 rounded flex items-center justify-center text-xs transition-colors" title="Increase font size">
|
|
207
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
208
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 4v16m8-8H4"/>
|
|
209
|
+
</svg>
|
|
210
|
+
</button>
|
|
211
|
+
</div>
|
|
212
|
+
<!-- Auto-scroll is now handled automatically, button hidden -->
|
|
213
|
+
<button id="btn-toggle-scroll-lock" class="bg-gray-700 hover:bg-gray-600 text-white py-0.5 px-2 rounded flex items-center gap-1 text-xs transition-colors hidden" title="Auto-scroll enabled. Click to pause.">
|
|
214
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
215
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 14l-7 7m0 0l-7-7m7 7V3"/>
|
|
216
|
+
</svg>
|
|
217
|
+
<span class="scroll-lock-text">Auto-scroll</span>
|
|
218
|
+
</button>
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
221
|
+
<div id="conversation-header" class="flex items-center justify-between gap-2 p-2 border-b border-gray-700 hidden">
|
|
222
|
+
<div class="flex items-center gap-2">
|
|
223
|
+
<div class="loading-spinner small"></div>
|
|
224
|
+
<span class="text-xs text-gray-400">Agent Output (live)</span>
|
|
225
|
+
</div>
|
|
226
|
+
</div>
|
|
227
|
+
<div id="conversation-container" class="flex-1 overflow-y-auto p-3">
|
|
228
|
+
<div id="conversation" class="space-y-2 font-mono text-sm">
|
|
229
|
+
<!-- Conversation messages will be rendered here -->
|
|
230
|
+
</div>
|
|
231
|
+
</div>
|
|
232
|
+
</div>
|
|
233
|
+
|
|
234
|
+
<!-- Project Files Tab Content -->
|
|
235
|
+
<div id="tab-content-project-files" class="tab-content flex-1 overflow-hidden hidden">
|
|
236
|
+
<div class="flex h-full">
|
|
237
|
+
<!-- File Browser Sidebar -->
|
|
238
|
+
<div id="file-browser-sidebar" class="w-64 bg-gray-800 border-r border-gray-700 flex flex-col overflow-hidden">
|
|
239
|
+
<div class="p-2 border-b border-gray-700 flex items-center justify-between">
|
|
240
|
+
<span class="text-xs font-semibold text-gray-400">Files</span>
|
|
241
|
+
<button id="btn-refresh-files" class="p-1 text-gray-400 hover:text-white rounded transition-colors" title="Refresh">
|
|
242
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
243
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
|
|
244
|
+
</svg>
|
|
245
|
+
</button>
|
|
246
|
+
</div>
|
|
247
|
+
<div id="file-browser-tree" class="flex-1 overflow-y-auto p-1 text-xs">
|
|
248
|
+
<!-- File tree will be rendered here -->
|
|
249
|
+
</div>
|
|
250
|
+
</div>
|
|
251
|
+
<!-- File Editor Area -->
|
|
252
|
+
<div id="file-editor-area" class="flex-1 flex flex-col overflow-hidden">
|
|
253
|
+
<!-- Open File Tabs -->
|
|
254
|
+
<div id="open-file-tabs" class="flex bg-gray-800 border-b border-gray-700 overflow-x-auto">
|
|
255
|
+
<!-- File tabs will be rendered here -->
|
|
256
|
+
</div>
|
|
257
|
+
<!-- File Content -->
|
|
258
|
+
<div id="file-editor-content" class="flex-1 overflow-hidden bg-gray-900 flex flex-col">
|
|
259
|
+
<div id="file-editor-empty" class="flex-1 flex items-center justify-center text-gray-500 text-sm">
|
|
260
|
+
<div class="text-center">
|
|
261
|
+
<svg class="w-12 h-12 mx-auto mb-3 text-gray-600" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
262
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
|
|
263
|
+
</svg>
|
|
264
|
+
<p>Select a file to view or edit</p>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
<div id="file-editor-wrapper" class="flex-1 overflow-hidden hidden">
|
|
268
|
+
<div id="file-editor-toolbar" class="flex items-center justify-between p-2 bg-gray-800 border-b border-gray-700">
|
|
269
|
+
<span id="file-editor-path" class="text-xs text-gray-400 truncate"></span>
|
|
270
|
+
<div class="flex items-center gap-2">
|
|
271
|
+
<span id="file-editor-modified" class="text-xs text-yellow-400 hidden">Modified</span>
|
|
272
|
+
<button id="btn-save-file" class="bg-green-600 hover:bg-green-700 text-white py-1 px-2 rounded text-xs transition-colors hidden">
|
|
273
|
+
<svg class="w-3 h-3 inline-block mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
274
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7H5a2 2 0 00-2 2v9a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-3m-1 4l-3 3m0 0l-3-3m3 3V4"/>
|
|
275
|
+
</svg>
|
|
276
|
+
Save
|
|
277
|
+
</button>
|
|
278
|
+
</div>
|
|
279
|
+
</div>
|
|
280
|
+
<div id="code-editor-container" class="code-editor-container w-full h-full bg-gray-900">
|
|
281
|
+
<pre id="code-editor-backdrop" class="code-editor-backdrop"><code id="code-editor-highlight"></code></pre>
|
|
282
|
+
<textarea id="file-editor-textarea" class="code-editor-textarea text-gray-100" spellcheck="false"></textarea>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
286
|
+
</div>
|
|
287
|
+
</div>
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
|
|
291
|
+
<!-- Input Area for Interactive Mode -->
|
|
292
|
+
<div id="interactive-input-area" class="bg-gray-800 border-t border-gray-700 p-2">
|
|
293
|
+
<!-- Image Preview Area (hidden by default) -->
|
|
294
|
+
<div id="image-preview-container" class="hidden mb-2">
|
|
295
|
+
<div class="flex flex-wrap gap-2" id="image-previews">
|
|
296
|
+
<!-- Image previews will be added here -->
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
<form id="form-send-message" class="flex gap-2 items-stretch">
|
|
300
|
+
<textarea
|
|
301
|
+
id="input-message"
|
|
302
|
+
name="message"
|
|
303
|
+
rows="3"
|
|
304
|
+
class="flex-1 bg-gray-700 border border-gray-600 rounded px-3 py-2 text-sm resize-none focus:outline-none focus:border-purple-500 placeholder-gray-500 textarea-auto-resize"
|
|
305
|
+
placeholder="Type a message to Claude... (Ctrl+Enter to send)"
|
|
306
|
+
></textarea>
|
|
307
|
+
<button
|
|
308
|
+
type="submit"
|
|
309
|
+
id="btn-send-message"
|
|
310
|
+
class="bg-purple-600 hover:bg-purple-700 disabled:bg-gray-600 disabled:cursor-not-allowed text-white px-4 rounded text-sm transition-colors flex items-center gap-1.5"
|
|
311
|
+
>
|
|
312
|
+
<svg class="w-4 h-4" fill="currentColor" viewBox="0 0 24 24">
|
|
313
|
+
<path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/>
|
|
314
|
+
</svg>
|
|
315
|
+
Send
|
|
316
|
+
</button>
|
|
317
|
+
</form>
|
|
318
|
+
<div id="input-hint" class="text-xs text-gray-500 mt-1">
|
|
319
|
+
<span id="input-hint-text">Ctrl+Enter to send, Enter for new line</span>
|
|
320
|
+
<span class="text-gray-600 ml-2">• Paste images with Ctrl+V</span>
|
|
321
|
+
</div>
|
|
322
|
+
</div>
|
|
323
|
+
</div>
|
|
324
|
+
</main>
|
|
325
|
+
</div>
|
|
326
|
+
|
|
327
|
+
<!-- Add Project Modal -->
|
|
328
|
+
<div id="modal-add-project" class="modal hidden">
|
|
329
|
+
<div class="modal-backdrop"></div>
|
|
330
|
+
<div class="modal-content">
|
|
331
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-4xl">
|
|
332
|
+
<div class="p-3 border-b border-gray-700 flex items-center justify-between">
|
|
333
|
+
<h3 class="font-semibold">Add Project</h3>
|
|
334
|
+
<button class="modal-close text-gray-400 hover:text-white">
|
|
335
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
336
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
337
|
+
</svg>
|
|
338
|
+
</button>
|
|
339
|
+
</div>
|
|
340
|
+
<form id="form-add-project" class="p-3 space-y-3">
|
|
341
|
+
<div>
|
|
342
|
+
<label class="block text-xs font-medium text-gray-300 mb-1">Project Name</label>
|
|
343
|
+
<input type="text" name="name" id="input-project-name" required class="w-full bg-gray-700 border border-gray-600 rounded px-2 py-1.5 text-sm focus:outline-none focus:border-purple-500" placeholder="My Project">
|
|
344
|
+
</div>
|
|
345
|
+
<div>
|
|
346
|
+
<label class="block text-xs font-medium text-gray-300 mb-1">Project Path</label>
|
|
347
|
+
<div class="flex gap-2">
|
|
348
|
+
<input type="text" name="path" id="input-project-path" required class="flex-1 bg-gray-700 border border-gray-600 rounded px-2 py-1.5 text-sm focus:outline-none focus:border-purple-500" placeholder="Select a folder..." readonly>
|
|
349
|
+
<button type="button" id="btn-browse-folder" class="bg-gray-600 hover:bg-gray-500 text-white px-3 py-1.5 rounded text-sm transition-colors">
|
|
350
|
+
Browse
|
|
351
|
+
</button>
|
|
352
|
+
</div>
|
|
353
|
+
</div>
|
|
354
|
+
<div class="flex items-center gap-2">
|
|
355
|
+
<input type="checkbox" name="createNew" id="create-new" class="rounded bg-gray-700 border-gray-600 text-purple-500 focus:ring-purple-500">
|
|
356
|
+
<label for="create-new" class="text-xs text-gray-300">Create new project folder</label>
|
|
357
|
+
</div>
|
|
358
|
+
<div class="flex justify-end gap-2 pt-2">
|
|
359
|
+
<button type="button" class="modal-close px-3 py-1.5 text-sm text-gray-300 hover:text-white transition-colors">Cancel</button>
|
|
360
|
+
<button type="submit" class="bg-purple-600 hover:bg-purple-700 text-white px-3 py-1.5 rounded text-sm transition-colors">Add Project</button>
|
|
361
|
+
</div>
|
|
362
|
+
</form>
|
|
363
|
+
</div>
|
|
364
|
+
</div>
|
|
365
|
+
</div>
|
|
366
|
+
|
|
367
|
+
<!-- Folder Browser Modal -->
|
|
368
|
+
<div id="modal-folder-browser" class="modal hidden">
|
|
369
|
+
<div class="modal-backdrop"></div>
|
|
370
|
+
<div class="modal-content">
|
|
371
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-4xl">
|
|
372
|
+
<div class="p-3 border-b border-gray-700 flex items-center justify-between">
|
|
373
|
+
<h3 class="font-semibold">Select Folder</h3>
|
|
374
|
+
<button class="modal-close text-gray-400 hover:text-white">
|
|
375
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
376
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
377
|
+
</svg>
|
|
378
|
+
</button>
|
|
379
|
+
</div>
|
|
380
|
+
<div class="folder-breadcrumb" id="folder-breadcrumb">
|
|
381
|
+
<!-- Breadcrumb will be rendered here -->
|
|
382
|
+
</div>
|
|
383
|
+
<div class="folder-browser" id="folder-browser">
|
|
384
|
+
<!-- Folder list will be rendered here -->
|
|
385
|
+
</div>
|
|
386
|
+
<div class="p-3 border-t border-gray-700">
|
|
387
|
+
<div class="flex items-center justify-between gap-3">
|
|
388
|
+
<div id="selected-path" class="text-xs truncate flex-1"></div>
|
|
389
|
+
<div class="flex gap-2 flex-shrink-0">
|
|
390
|
+
<button type="button" class="modal-close px-3 py-1.5 text-sm text-gray-300 hover:text-white transition-colors">Cancel</button>
|
|
391
|
+
<button type="button" id="btn-select-folder" class="bg-purple-600 hover:bg-purple-700 text-white px-3 py-1.5 rounded text-sm transition-colors">Select This Folder</button>
|
|
392
|
+
</div>
|
|
393
|
+
</div>
|
|
394
|
+
</div>
|
|
395
|
+
</div>
|
|
396
|
+
</div>
|
|
397
|
+
</div>
|
|
398
|
+
|
|
399
|
+
<!-- Roadmap Modal -->
|
|
400
|
+
<div id="modal-roadmap" class="modal hidden">
|
|
401
|
+
<div class="modal-backdrop"></div>
|
|
402
|
+
<div class="modal-content">
|
|
403
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-6xl max-h-[85vh] flex flex-col">
|
|
404
|
+
<div class="p-3 border-b border-gray-700 flex items-center justify-between">
|
|
405
|
+
<h3 class="font-semibold">Project Roadmap</h3>
|
|
406
|
+
<button class="modal-close text-gray-400 hover:text-white">
|
|
407
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
408
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
409
|
+
</svg>
|
|
410
|
+
</button>
|
|
411
|
+
</div>
|
|
412
|
+
<div id="roadmap-content" class="flex-1 overflow-y-auto p-3 text-xs">
|
|
413
|
+
<!-- Roadmap content will be rendered here -->
|
|
414
|
+
</div>
|
|
415
|
+
<div class="p-3 border-t border-gray-700">
|
|
416
|
+
<!-- Run selected tasks section -->
|
|
417
|
+
<div id="roadmap-run-selected" class="hidden mb-3 p-2 bg-purple-900/30 border border-purple-600/50 rounded">
|
|
418
|
+
<div class="flex items-center justify-between gap-2">
|
|
419
|
+
<span class="text-sm text-purple-300">
|
|
420
|
+
<span id="roadmap-selected-count">0</span> item(s) selected
|
|
421
|
+
</span>
|
|
422
|
+
<div class="flex gap-2">
|
|
423
|
+
<button id="btn-clear-roadmap-selection" type="button" class="text-xs text-gray-400 hover:text-white transition-colors">
|
|
424
|
+
Clear
|
|
425
|
+
</button>
|
|
426
|
+
<button id="btn-run-selected-tasks" type="button" class="bg-purple-600 hover:bg-purple-700 text-white px-3 py-1.5 rounded text-sm transition-colors flex items-center gap-1">
|
|
427
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
428
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z"/>
|
|
429
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
430
|
+
</svg>
|
|
431
|
+
Run Selected
|
|
432
|
+
</button>
|
|
433
|
+
</div>
|
|
434
|
+
</div>
|
|
435
|
+
</div>
|
|
436
|
+
<form id="form-edit-roadmap" class="space-y-2">
|
|
437
|
+
<textarea name="editPrompt" id="input-edit-roadmap" rows="3" class="w-full bg-gray-700 border border-gray-600 rounded px-2 py-1.5 text-sm textarea-resizable" placeholder="Describe changes (e.g., 'Add a testing phase'). Ctrl+Enter to submit"></textarea>
|
|
438
|
+
<div class="flex items-center justify-between gap-2">
|
|
439
|
+
<span id="edit-roadmap-char-count" class="text-xs text-gray-400">0 characters</span>
|
|
440
|
+
<div class="flex gap-2">
|
|
441
|
+
<button id="btn-create-roadmap" type="button" class="bg-gray-600 hover:bg-gray-500 text-white px-3 py-1.5 rounded text-sm transition-colors">
|
|
442
|
+
Generate New
|
|
443
|
+
</button>
|
|
444
|
+
<button type="submit" class="bg-blue-600 hover:bg-blue-700 text-white px-3 py-1.5 rounded text-sm transition-colors">
|
|
445
|
+
Modify
|
|
446
|
+
</button>
|
|
447
|
+
</div>
|
|
448
|
+
</div>
|
|
449
|
+
</form>
|
|
450
|
+
</div>
|
|
451
|
+
</div>
|
|
452
|
+
</div>
|
|
453
|
+
</div>
|
|
454
|
+
|
|
455
|
+
<!-- Create Roadmap Modal -->
|
|
456
|
+
<div id="modal-create-roadmap" class="modal hidden">
|
|
457
|
+
<div class="modal-backdrop"></div>
|
|
458
|
+
<div class="modal-content">
|
|
459
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-4xl">
|
|
460
|
+
<div class="p-3 border-b border-gray-700 flex items-center justify-between">
|
|
461
|
+
<h3 class="font-semibold">Generate Roadmap</h3>
|
|
462
|
+
<button class="modal-close text-gray-400 hover:text-white">
|
|
463
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
464
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
465
|
+
</svg>
|
|
466
|
+
</button>
|
|
467
|
+
</div>
|
|
468
|
+
<form id="form-create-roadmap" class="p-3 space-y-3">
|
|
469
|
+
<div>
|
|
470
|
+
<label class="block text-xs font-medium text-gray-300 mb-1">Describe your project</label>
|
|
471
|
+
<textarea name="prompt" required rows="3" class="w-full bg-gray-700 border border-gray-600 rounded px-2 py-1.5 text-sm textarea-resizable" placeholder="A web application that... (Ctrl+Enter to submit)"></textarea>
|
|
472
|
+
</div>
|
|
473
|
+
<p class="text-xs text-gray-400">Claude will generate a ROADMAP.md based on your description.</p>
|
|
474
|
+
<div class="flex justify-end gap-2 pt-1">
|
|
475
|
+
<button type="button" class="modal-close px-3 py-1.5 text-sm text-gray-300 hover:text-white transition-colors">Cancel</button>
|
|
476
|
+
<button type="submit" class="bg-purple-600 hover:bg-purple-700 text-white px-3 py-1.5 rounded text-sm transition-colors">Generate</button>
|
|
477
|
+
</div>
|
|
478
|
+
</form>
|
|
479
|
+
</div>
|
|
480
|
+
</div>
|
|
481
|
+
</div>
|
|
482
|
+
|
|
483
|
+
<!-- Confirm Delete Modal -->
|
|
484
|
+
<div id="modal-confirm-delete" class="modal hidden">
|
|
485
|
+
<div class="modal-backdrop"></div>
|
|
486
|
+
<div class="modal-content">
|
|
487
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-sm">
|
|
488
|
+
<div class="p-3 border-b border-gray-700">
|
|
489
|
+
<h3 class="font-semibold text-red-400">Delete Project</h3>
|
|
490
|
+
</div>
|
|
491
|
+
<div class="p-3">
|
|
492
|
+
<p class="text-sm text-gray-300 mb-2">Are you sure you want to delete this project?</p>
|
|
493
|
+
<p class="text-sm font-medium" id="delete-project-name"></p>
|
|
494
|
+
<p class="text-xs text-gray-500 mt-2">This will only remove the project from Claudito. Files on disk will not be deleted.</p>
|
|
495
|
+
</div>
|
|
496
|
+
<div class="p-3 border-t border-gray-700 flex justify-end gap-2">
|
|
497
|
+
<button type="button" class="modal-close px-3 py-1.5 text-sm text-gray-300 hover:text-white transition-colors">Cancel</button>
|
|
498
|
+
<button type="button" id="btn-confirm-delete" class="bg-red-600 hover:bg-red-700 text-white px-3 py-1.5 rounded text-sm transition-colors">Delete</button>
|
|
499
|
+
</div>
|
|
500
|
+
</div>
|
|
501
|
+
</div>
|
|
502
|
+
</div>
|
|
503
|
+
|
|
504
|
+
<!-- Confirm Delete Task Modal -->
|
|
505
|
+
<div id="modal-confirm-delete-task" class="modal hidden">
|
|
506
|
+
<div class="modal-backdrop"></div>
|
|
507
|
+
<div class="modal-content">
|
|
508
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-sm">
|
|
509
|
+
<div class="p-3 border-b border-gray-700">
|
|
510
|
+
<h3 class="font-semibold text-red-400">Delete Task</h3>
|
|
511
|
+
</div>
|
|
512
|
+
<div class="p-3">
|
|
513
|
+
<p class="text-sm text-gray-300 mb-2">Are you sure you want to delete this task?</p>
|
|
514
|
+
<p class="text-sm font-medium text-gray-200" id="delete-task-title"></p>
|
|
515
|
+
<p class="text-xs text-gray-500 mt-2">This will remove the task from the roadmap file.</p>
|
|
516
|
+
</div>
|
|
517
|
+
<div class="p-3 border-t border-gray-700 flex justify-end gap-2">
|
|
518
|
+
<button type="button" class="modal-close px-3 py-1.5 text-sm text-gray-300 hover:text-white transition-colors">Cancel</button>
|
|
519
|
+
<button type="button" id="btn-confirm-delete-task" class="bg-red-600 hover:bg-red-700 text-white px-3 py-1.5 rounded text-sm transition-colors">Delete</button>
|
|
520
|
+
</div>
|
|
521
|
+
</div>
|
|
522
|
+
</div>
|
|
523
|
+
</div>
|
|
524
|
+
|
|
525
|
+
<!-- Confirm Delete Milestone Modal -->
|
|
526
|
+
<div id="modal-confirm-delete-milestone" class="modal hidden">
|
|
527
|
+
<div class="modal-backdrop"></div>
|
|
528
|
+
<div class="modal-content">
|
|
529
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-sm">
|
|
530
|
+
<div class="p-3 border-b border-gray-700">
|
|
531
|
+
<h3 class="font-semibold text-red-400">Delete Milestone</h3>
|
|
532
|
+
</div>
|
|
533
|
+
<div class="p-3">
|
|
534
|
+
<p class="text-sm text-gray-300 mb-2">Are you sure you want to delete this milestone?</p>
|
|
535
|
+
<p class="text-sm font-medium text-gray-200" id="delete-milestone-title"></p>
|
|
536
|
+
<p class="text-xs text-red-400 mt-2">This will remove the milestone and all its tasks from the roadmap.</p>
|
|
537
|
+
</div>
|
|
538
|
+
<div class="p-3 border-t border-gray-700 flex justify-end gap-2">
|
|
539
|
+
<button type="button" class="modal-close px-3 py-1.5 text-sm text-gray-300 hover:text-white transition-colors">Cancel</button>
|
|
540
|
+
<button type="button" id="btn-confirm-delete-milestone" class="bg-red-600 hover:bg-red-700 text-white px-3 py-1.5 rounded text-sm transition-colors">Delete</button>
|
|
541
|
+
</div>
|
|
542
|
+
</div>
|
|
543
|
+
</div>
|
|
544
|
+
</div>
|
|
545
|
+
|
|
546
|
+
<!-- Confirm Delete Phase Modal -->
|
|
547
|
+
<div id="modal-confirm-delete-phase" class="modal hidden">
|
|
548
|
+
<div class="modal-backdrop"></div>
|
|
549
|
+
<div class="modal-content">
|
|
550
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-sm">
|
|
551
|
+
<div class="p-3 border-b border-gray-700">
|
|
552
|
+
<h3 class="font-semibold text-red-400">Delete Phase</h3>
|
|
553
|
+
</div>
|
|
554
|
+
<div class="p-3">
|
|
555
|
+
<p class="text-sm text-gray-300 mb-2">Are you sure you want to delete this entire phase?</p>
|
|
556
|
+
<p class="text-sm font-medium text-gray-200" id="delete-phase-title"></p>
|
|
557
|
+
<p class="text-xs text-red-400 mt-2">This will remove the phase and ALL its milestones and tasks from the roadmap.</p>
|
|
558
|
+
</div>
|
|
559
|
+
<div class="p-3 border-t border-gray-700 flex justify-end gap-2">
|
|
560
|
+
<button type="button" class="modal-close px-3 py-1.5 text-sm text-gray-300 hover:text-white transition-colors">Cancel</button>
|
|
561
|
+
<button type="button" id="btn-confirm-delete-phase" class="bg-red-600 hover:bg-red-700 text-white px-3 py-1.5 rounded text-sm transition-colors">Delete</button>
|
|
562
|
+
</div>
|
|
563
|
+
</div>
|
|
564
|
+
</div>
|
|
565
|
+
</div>
|
|
566
|
+
|
|
567
|
+
<!-- Settings Modal -->
|
|
568
|
+
<div id="modal-settings" class="modal hidden">
|
|
569
|
+
<div class="modal-backdrop"></div>
|
|
570
|
+
<div class="modal-content">
|
|
571
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-5xl">
|
|
572
|
+
<div class="p-3 border-b border-gray-700 flex items-center justify-between">
|
|
573
|
+
<h3 class="font-semibold">Settings</h3>
|
|
574
|
+
<button class="modal-close text-gray-400 hover:text-white">
|
|
575
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
576
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
577
|
+
</svg>
|
|
578
|
+
</button>
|
|
579
|
+
</div>
|
|
580
|
+
<form id="form-settings" class="p-3 space-y-4">
|
|
581
|
+
<div>
|
|
582
|
+
<label class="block text-xs font-medium text-gray-300 mb-1">Max Concurrent Agents</label>
|
|
583
|
+
<input type="number" name="maxConcurrentAgents" id="input-max-concurrent" min="1" max="10" class="w-full bg-gray-700 border border-gray-600 rounded px-2 py-1.5 text-sm focus:outline-none focus:border-purple-500">
|
|
584
|
+
<p class="text-xs text-gray-500 mt-1">Maximum agents that can run simultaneously (1-10)</p>
|
|
585
|
+
</div>
|
|
586
|
+
<div>
|
|
587
|
+
<label class="block text-xs font-medium text-gray-300 mb-2">Claude Code Permissions</label>
|
|
588
|
+
<div class="space-y-2">
|
|
589
|
+
<label class="flex items-center gap-2 cursor-pointer">
|
|
590
|
+
<input type="checkbox" name="dangerouslySkipPermissions" id="input-skip-permissions" class="rounded bg-gray-700 border-gray-600 text-purple-500 focus:ring-purple-500">
|
|
591
|
+
<span class="text-sm text-gray-300">Skip permission prompts</span>
|
|
592
|
+
</label>
|
|
593
|
+
<p class="text-xs text-gray-500 ml-6">Allow Claude to execute commands without confirmation (use with caution)</p>
|
|
594
|
+
</div>
|
|
595
|
+
</div>
|
|
596
|
+
<div>
|
|
597
|
+
<label class="block text-xs font-medium text-gray-300 mb-1">Agent Prompt Template</label>
|
|
598
|
+
<textarea name="agentPromptTemplate" id="input-agent-prompt" rows="8" class="w-full bg-gray-700 border border-gray-600 rounded px-2 py-1.5 text-sm font-mono textarea-resizable"></textarea>
|
|
599
|
+
<p class="text-xs text-gray-500 mt-1">Template for agent instructions. Available variables: ${var:project-name}, ${var:phase-title}, ${var:milestone-title}, ${var:milestone-item}</p>
|
|
600
|
+
</div>
|
|
601
|
+
<div>
|
|
602
|
+
<label class="block text-xs font-medium text-gray-300 mb-2">Input Keybindings</label>
|
|
603
|
+
<div class="space-y-2">
|
|
604
|
+
<label class="flex items-center gap-2 cursor-pointer">
|
|
605
|
+
<input type="checkbox" name="sendWithCtrlEnter" id="input-send-ctrl-enter" class="rounded bg-gray-700 border-gray-600 text-purple-500 focus:ring-purple-500">
|
|
606
|
+
<span class="text-sm text-gray-300">Use Ctrl+Enter to send messages</span>
|
|
607
|
+
</label>
|
|
608
|
+
<p class="text-xs text-gray-500 ml-6">When enabled, Enter adds a new line and Ctrl+Enter sends. When disabled, Enter sends and Shift+Enter adds a new line.</p>
|
|
609
|
+
</div>
|
|
610
|
+
</div>
|
|
611
|
+
<div>
|
|
612
|
+
<label class="block text-xs font-medium text-gray-300 mb-1">History Limit</label>
|
|
613
|
+
<input type="number" name="historyLimit" id="input-history-limit" min="5" max="100" class="w-32 bg-gray-700 border border-gray-600 rounded px-2 py-1.5 text-sm focus:outline-none focus:border-purple-500">
|
|
614
|
+
<p class="text-xs text-gray-500 mt-1">Maximum number of conversations shown in history (5-100)</p>
|
|
615
|
+
</div>
|
|
616
|
+
<div class="flex justify-end gap-2 pt-2 border-t border-gray-700">
|
|
617
|
+
<button type="button" class="modal-close px-3 py-1.5 text-sm text-gray-300 hover:text-white transition-colors">Cancel</button>
|
|
618
|
+
<button type="submit" class="bg-purple-600 hover:bg-purple-700 text-white px-3 py-1.5 rounded text-sm transition-colors">Save</button>
|
|
619
|
+
</div>
|
|
620
|
+
</form>
|
|
621
|
+
</div>
|
|
622
|
+
</div>
|
|
623
|
+
</div>
|
|
624
|
+
|
|
625
|
+
<!-- Roadmap Generation Progress Modal -->
|
|
626
|
+
<div id="modal-roadmap-progress" class="modal hidden">
|
|
627
|
+
<div class="modal-backdrop"></div>
|
|
628
|
+
<div class="modal-content">
|
|
629
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-6xl max-h-[85vh] flex flex-col">
|
|
630
|
+
<div class="p-3 border-b border-gray-700 flex items-center justify-between">
|
|
631
|
+
<h3 class="font-semibold">Generating Roadmap...</h3>
|
|
632
|
+
<div id="roadmap-progress-spinner" class="loading-spinner"></div>
|
|
633
|
+
</div>
|
|
634
|
+
<div class="flex-1 overflow-y-auto p-3 bg-gray-900">
|
|
635
|
+
<div id="roadmap-progress-output" class="font-mono text-xs space-y-1 whitespace-pre-wrap">
|
|
636
|
+
<!-- Output will be rendered here -->
|
|
637
|
+
</div>
|
|
638
|
+
</div>
|
|
639
|
+
<div id="roadmap-question-input" class="p-3 border-t border-gray-700 hidden">
|
|
640
|
+
<div class="flex items-center gap-2 mb-2">
|
|
641
|
+
<div class="w-2 h-2 bg-yellow-500 rounded-full animate-pulse"></div>
|
|
642
|
+
<span class="text-xs text-yellow-400">Claude is asking a question</span>
|
|
643
|
+
</div>
|
|
644
|
+
<form id="form-roadmap-response" class="flex gap-2">
|
|
645
|
+
<textarea name="response" id="input-roadmap-response" rows="2" class="flex-1 bg-gray-700 border border-gray-600 rounded px-2 py-1.5 text-sm textarea-auto-resize" placeholder="Type your response... (Ctrl+Enter to send)"></textarea>
|
|
646
|
+
<button type="submit" class="bg-yellow-600 hover:bg-yellow-700 text-white px-3 py-1.5 rounded text-sm transition-colors self-end">
|
|
647
|
+
Send
|
|
648
|
+
</button>
|
|
649
|
+
</form>
|
|
650
|
+
</div>
|
|
651
|
+
<div id="roadmap-progress-footer" class="p-3 border-t border-gray-700 hidden">
|
|
652
|
+
<button id="btn-close-roadmap-progress" class="bg-purple-600 hover:bg-purple-700 text-white px-3 py-1.5 rounded text-sm transition-colors">
|
|
653
|
+
View Roadmap
|
|
654
|
+
</button>
|
|
655
|
+
</div>
|
|
656
|
+
</div>
|
|
657
|
+
</div>
|
|
658
|
+
</div>
|
|
659
|
+
|
|
660
|
+
<!-- Conversation History Dropdown -->
|
|
661
|
+
<div id="conversation-history-dropdown" class="hidden fixed bg-gray-800 border border-gray-700 rounded-lg shadow-xl z-50 w-80 max-h-96 overflow-hidden">
|
|
662
|
+
<div class="p-2 border-b border-gray-700 flex items-center justify-between">
|
|
663
|
+
<span class="text-xs font-semibold text-gray-300">Conversation History</span>
|
|
664
|
+
<button id="btn-close-history" class="text-gray-400 hover:text-white p-1">
|
|
665
|
+
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
666
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
667
|
+
</svg>
|
|
668
|
+
</button>
|
|
669
|
+
</div>
|
|
670
|
+
<div id="conversation-history-list" class="overflow-y-auto max-h-80 p-1">
|
|
671
|
+
<!-- Conversation list will be rendered here -->
|
|
672
|
+
</div>
|
|
673
|
+
</div>
|
|
674
|
+
|
|
675
|
+
<!-- Rename Conversation Modal -->
|
|
676
|
+
<div id="modal-rename-conversation" class="modal hidden">
|
|
677
|
+
<div class="modal-backdrop"></div>
|
|
678
|
+
<div class="modal-content">
|
|
679
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-sm">
|
|
680
|
+
<div class="p-3 border-b border-gray-700">
|
|
681
|
+
<h3 class="font-semibold">Rename Conversation</h3>
|
|
682
|
+
</div>
|
|
683
|
+
<div class="p-3">
|
|
684
|
+
<input type="text" id="input-conversation-label" class="w-full bg-gray-700 border border-gray-600 rounded px-2 py-1.5 text-sm focus:outline-none focus:border-purple-500" placeholder="Enter a name for this conversation">
|
|
685
|
+
</div>
|
|
686
|
+
<div class="p-3 border-t border-gray-700 flex justify-end gap-2">
|
|
687
|
+
<button type="button" class="modal-close px-3 py-1.5 text-sm text-gray-300 hover:text-white transition-colors">Cancel</button>
|
|
688
|
+
<button type="button" id="btn-confirm-rename" class="bg-purple-600 hover:bg-purple-700 text-white px-3 py-1.5 rounded text-sm transition-colors">Rename</button>
|
|
689
|
+
</div>
|
|
690
|
+
</div>
|
|
691
|
+
</div>
|
|
692
|
+
</div>
|
|
693
|
+
|
|
694
|
+
<!-- Confirm New Conversation Modal -->
|
|
695
|
+
<div id="modal-confirm-new-conversation" class="modal hidden">
|
|
696
|
+
<div class="modal-backdrop"></div>
|
|
697
|
+
<div class="modal-content">
|
|
698
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-sm">
|
|
699
|
+
<div class="p-3 border-b border-gray-700">
|
|
700
|
+
<h3 class="font-semibold">Start New Conversation?</h3>
|
|
701
|
+
</div>
|
|
702
|
+
<div class="p-3">
|
|
703
|
+
<p class="text-sm text-gray-300">This will start a fresh conversation. Your current conversation will be saved in history.</p>
|
|
704
|
+
</div>
|
|
705
|
+
<div class="p-3 border-t border-gray-700 flex justify-end gap-2">
|
|
706
|
+
<button type="button" class="modal-close px-3 py-1.5 text-sm text-gray-300 hover:text-white transition-colors">Cancel</button>
|
|
707
|
+
<button type="button" id="btn-confirm-new-conversation" class="bg-purple-600 hover:bg-purple-700 text-white px-3 py-1.5 rounded text-sm transition-colors">Start New</button>
|
|
708
|
+
</div>
|
|
709
|
+
</div>
|
|
710
|
+
</div>
|
|
711
|
+
</div>
|
|
712
|
+
|
|
713
|
+
<!-- Confirm Delete File/Folder Modal -->
|
|
714
|
+
<div id="modal-confirm-delete-file" class="modal hidden">
|
|
715
|
+
<div class="modal-backdrop"></div>
|
|
716
|
+
<div class="modal-content">
|
|
717
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-sm">
|
|
718
|
+
<div class="p-3 border-b border-gray-700">
|
|
719
|
+
<h3 class="font-semibold text-red-400">Delete <span id="delete-file-type">file</span>?</h3>
|
|
720
|
+
</div>
|
|
721
|
+
<div class="p-3">
|
|
722
|
+
<p class="text-sm text-gray-300">Are you sure you want to delete <strong id="delete-file-name" class="text-white"></strong>?</p>
|
|
723
|
+
<p class="text-xs text-red-400 mt-2" id="delete-folder-warning">This will delete all contents inside the folder.</p>
|
|
724
|
+
</div>
|
|
725
|
+
<div class="p-3 border-t border-gray-700 flex justify-end gap-2">
|
|
726
|
+
<button type="button" class="modal-close px-3 py-1.5 text-sm text-gray-300 hover:text-white transition-colors">Cancel</button>
|
|
727
|
+
<button type="button" id="btn-confirm-delete-file" class="bg-red-600 hover:bg-red-700 text-white px-3 py-1.5 rounded text-sm transition-colors">Delete</button>
|
|
728
|
+
</div>
|
|
729
|
+
</div>
|
|
730
|
+
</div>
|
|
731
|
+
</div>
|
|
732
|
+
|
|
733
|
+
<!-- Queued Messages Modal -->
|
|
734
|
+
<div id="modal-queued-messages" class="modal hidden">
|
|
735
|
+
<div class="modal-backdrop"></div>
|
|
736
|
+
<div class="modal-content">
|
|
737
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-lg max-h-[80vh] flex flex-col">
|
|
738
|
+
<div class="p-3 border-b border-gray-700 flex items-center justify-between">
|
|
739
|
+
<div class="flex items-center gap-2">
|
|
740
|
+
<svg class="w-4 h-4 text-yellow-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
741
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/>
|
|
742
|
+
</svg>
|
|
743
|
+
<h3 class="font-semibold">Queued Messages</h3>
|
|
744
|
+
</div>
|
|
745
|
+
<button class="modal-close text-gray-400 hover:text-white">
|
|
746
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
747
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
748
|
+
</svg>
|
|
749
|
+
</button>
|
|
750
|
+
</div>
|
|
751
|
+
<div id="queued-messages-modal-content" class="p-4 overflow-y-auto">
|
|
752
|
+
<div class="text-gray-500 text-center py-4">No queued messages</div>
|
|
753
|
+
</div>
|
|
754
|
+
</div>
|
|
755
|
+
</div>
|
|
756
|
+
</div>
|
|
757
|
+
|
|
758
|
+
<!-- Tasks Modal -->
|
|
759
|
+
<div id="modal-tasks" class="modal hidden">
|
|
760
|
+
<div class="modal-backdrop"></div>
|
|
761
|
+
<div class="modal-content">
|
|
762
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-lg">
|
|
763
|
+
<div class="p-3 border-b border-gray-700 flex items-center justify-between">
|
|
764
|
+
<div class="flex items-center gap-2">
|
|
765
|
+
<svg class="w-4 h-4 text-purple-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
766
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"/>
|
|
767
|
+
</svg>
|
|
768
|
+
<h3 class="font-semibold">Current Tasks</h3>
|
|
769
|
+
</div>
|
|
770
|
+
<button class="modal-close text-gray-400 hover:text-white">
|
|
771
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
772
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
773
|
+
</svg>
|
|
774
|
+
</button>
|
|
775
|
+
</div>
|
|
776
|
+
<div id="tasks-modal-content" class="p-4">
|
|
777
|
+
<!-- Tasks will be rendered here -->
|
|
778
|
+
<div class="text-gray-500 text-center py-4">No active tasks</div>
|
|
779
|
+
</div>
|
|
780
|
+
</div>
|
|
781
|
+
</div>
|
|
782
|
+
</div>
|
|
783
|
+
|
|
784
|
+
<!-- Context Usage Modal -->
|
|
785
|
+
<div id="modal-context-usage" class="modal hidden">
|
|
786
|
+
<div class="modal-backdrop"></div>
|
|
787
|
+
<div class="modal-content">
|
|
788
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-lg">
|
|
789
|
+
<div class="p-3 border-b border-gray-700 flex items-center justify-between">
|
|
790
|
+
<div class="flex items-center gap-2">
|
|
791
|
+
<svg class="w-4 h-4 text-purple-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
792
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"/>
|
|
793
|
+
</svg>
|
|
794
|
+
<h3 class="font-semibold">Context Usage</h3>
|
|
795
|
+
</div>
|
|
796
|
+
<button class="modal-close text-gray-400 hover:text-white">
|
|
797
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
798
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
799
|
+
</svg>
|
|
800
|
+
</button>
|
|
801
|
+
</div>
|
|
802
|
+
<div id="context-usage-content" class="p-4">
|
|
803
|
+
<!-- Context usage will be rendered here -->
|
|
804
|
+
<div class="text-gray-500 text-center py-4">Loading...</div>
|
|
805
|
+
</div>
|
|
806
|
+
</div>
|
|
807
|
+
</div>
|
|
808
|
+
</div>
|
|
809
|
+
|
|
810
|
+
<!-- Claude Files Modal -->
|
|
811
|
+
<div id="modal-claude-files" class="modal hidden">
|
|
812
|
+
<div class="modal-backdrop"></div>
|
|
813
|
+
<div class="modal-content">
|
|
814
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-5xl h-[85vh] flex flex-col">
|
|
815
|
+
<div class="p-3 border-b border-gray-700 flex items-center justify-between">
|
|
816
|
+
<div class="flex items-center gap-2">
|
|
817
|
+
<svg class="w-4 h-4 text-purple-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
818
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
|
|
819
|
+
</svg>
|
|
820
|
+
<h3 class="font-semibold">Claude Files (CLAUDE.md)</h3>
|
|
821
|
+
</div>
|
|
822
|
+
<button class="modal-close text-gray-400 hover:text-white">
|
|
823
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
824
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
825
|
+
</svg>
|
|
826
|
+
</button>
|
|
827
|
+
</div>
|
|
828
|
+
<div class="flex flex-1 overflow-hidden min-h-0">
|
|
829
|
+
<!-- File List Sidebar -->
|
|
830
|
+
<div id="claude-files-list" class="w-48 border-r border-gray-700 overflow-y-auto bg-gray-900/50 flex-shrink-0">
|
|
831
|
+
<!-- File list will be rendered here -->
|
|
832
|
+
</div>
|
|
833
|
+
<!-- File Editor with Preview -->
|
|
834
|
+
<div class="flex-1 flex flex-col overflow-hidden min-w-0">
|
|
835
|
+
<div id="claude-file-header" class="p-2 border-b border-gray-700 flex items-center justify-between bg-gray-800/50">
|
|
836
|
+
<div class="flex items-center gap-2">
|
|
837
|
+
<span id="claude-file-name" class="text-sm font-medium text-gray-300">Select a file</span>
|
|
838
|
+
<span id="claude-file-size" class="text-xs text-gray-500"></span>
|
|
839
|
+
</div>
|
|
840
|
+
<div class="flex items-center gap-2">
|
|
841
|
+
<button id="btn-toggle-claude-preview" class="bg-gray-700 hover:bg-gray-600 text-white px-2 py-1 rounded text-xs transition-colors flex items-center gap-1" title="Toggle preview">
|
|
842
|
+
<svg id="claude-preview-icon" class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
843
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 12a3 3 0 11-6 0 3 3 0 016 0z"/>
|
|
844
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"/>
|
|
845
|
+
</svg>
|
|
846
|
+
<span id="claude-preview-btn-text">Preview</span>
|
|
847
|
+
</button>
|
|
848
|
+
<button id="btn-save-claude-file" class="bg-purple-600 hover:bg-purple-700 disabled:bg-gray-600 disabled:cursor-not-allowed text-white px-3 py-1 rounded text-xs transition-colors hidden">
|
|
849
|
+
Save Changes
|
|
850
|
+
</button>
|
|
851
|
+
</div>
|
|
852
|
+
</div>
|
|
853
|
+
<div class="flex-1 flex overflow-hidden min-h-0">
|
|
854
|
+
<!-- Editor Pane -->
|
|
855
|
+
<div id="claude-editor-pane" class="flex-1 p-2 overflow-hidden flex flex-col min-w-0">
|
|
856
|
+
<textarea id="claude-file-editor" class="w-full flex-1 bg-gray-900 text-gray-200 font-mono text-sm p-3 rounded border border-gray-700 focus:border-purple-500 focus:outline-none resize-none" placeholder="Select a file from the list to edit..."></textarea>
|
|
857
|
+
</div>
|
|
858
|
+
<!-- Preview Pane (hidden by default) -->
|
|
859
|
+
<div id="claude-preview-pane" class="flex-1 p-2 overflow-y-auto border-l border-gray-700 hidden min-w-0">
|
|
860
|
+
<div id="claude-file-preview" class="markdown-content prose prose-invert prose-sm max-w-none p-3"></div>
|
|
861
|
+
</div>
|
|
862
|
+
</div>
|
|
863
|
+
</div>
|
|
864
|
+
</div>
|
|
865
|
+
</div>
|
|
866
|
+
</div>
|
|
867
|
+
</div>
|
|
868
|
+
|
|
869
|
+
<!-- Tool Detail Modal -->
|
|
870
|
+
<div id="modal-tool-detail" class="modal hidden">
|
|
871
|
+
<div class="modal-backdrop"></div>
|
|
872
|
+
<div class="modal-content">
|
|
873
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-7xl max-h-[90vh] flex flex-col">
|
|
874
|
+
<div class="p-3 border-b border-gray-700 flex items-center justify-between">
|
|
875
|
+
<div class="flex items-center gap-2">
|
|
876
|
+
<span id="tool-detail-icon"></span>
|
|
877
|
+
<h3 id="tool-detail-name" class="font-semibold text-purple-300"></h3>
|
|
878
|
+
<span id="tool-detail-status" class="tool-status"></span>
|
|
879
|
+
</div>
|
|
880
|
+
<button class="modal-close text-gray-400 hover:text-white">
|
|
881
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
882
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
883
|
+
</svg>
|
|
884
|
+
</button>
|
|
885
|
+
</div>
|
|
886
|
+
<div id="tool-detail-content" class="flex-1 overflow-y-auto p-3 bg-gray-900">
|
|
887
|
+
<!-- Tool details will be rendered here -->
|
|
888
|
+
</div>
|
|
889
|
+
</div>
|
|
890
|
+
</div>
|
|
891
|
+
</div>
|
|
892
|
+
|
|
893
|
+
<!-- Debug Modal -->
|
|
894
|
+
<div id="modal-debug" class="modal hidden">
|
|
895
|
+
<div class="modal-backdrop"></div>
|
|
896
|
+
<div class="modal-content">
|
|
897
|
+
<div class="bg-gray-800 rounded-lg shadow-xl w-full max-w-6xl h-[85vh] flex flex-col">
|
|
898
|
+
<div class="p-3 border-b border-gray-700 flex items-center justify-between">
|
|
899
|
+
<div class="flex items-center gap-2">
|
|
900
|
+
<svg class="w-4 h-4 text-purple-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
901
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4"/>
|
|
902
|
+
</svg>
|
|
903
|
+
<h3 class="font-semibold">Debug Information</h3>
|
|
904
|
+
</div>
|
|
905
|
+
<div class="flex items-center gap-2">
|
|
906
|
+
<button id="btn-debug-refresh" class="bg-gray-700 hover:bg-gray-600 text-white py-1 px-2.5 rounded text-xs transition-colors flex items-center gap-1">
|
|
907
|
+
<svg class="w-3.5 h-3.5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
908
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"/>
|
|
909
|
+
</svg>
|
|
910
|
+
Refresh
|
|
911
|
+
</button>
|
|
912
|
+
<button class="modal-close text-gray-400 hover:text-white">
|
|
913
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
914
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12"/>
|
|
915
|
+
</svg>
|
|
916
|
+
</button>
|
|
917
|
+
</div>
|
|
918
|
+
</div>
|
|
919
|
+
<!-- Debug Tabs -->
|
|
920
|
+
<div class="flex border-b border-gray-700 bg-gray-900/50 overflow-x-auto">
|
|
921
|
+
<button class="debug-tab active py-2 px-4 text-sm font-medium border-b-2 border-purple-500 text-white whitespace-nowrap" data-tab="claude-io">
|
|
922
|
+
<svg class="w-4 h-4 inline-block mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
923
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4"/>
|
|
924
|
+
</svg>
|
|
925
|
+
Claude I/O
|
|
926
|
+
</button>
|
|
927
|
+
<button class="debug-tab py-2 px-4 text-sm font-medium border-b-2 border-transparent text-gray-400 hover:text-gray-200 whitespace-nowrap" data-tab="process">
|
|
928
|
+
<svg class="w-4 h-4 inline-block mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
929
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z"/>
|
|
930
|
+
</svg>
|
|
931
|
+
Process
|
|
932
|
+
</button>
|
|
933
|
+
<button class="debug-tab py-2 px-4 text-sm font-medium border-b-2 border-transparent text-gray-400 hover:text-gray-200 whitespace-nowrap" data-tab="commands">
|
|
934
|
+
<svg class="w-4 h-4 inline-block mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
935
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"/>
|
|
936
|
+
</svg>
|
|
937
|
+
Commands
|
|
938
|
+
</button>
|
|
939
|
+
<button class="debug-tab py-2 px-4 text-sm font-medium border-b-2 border-transparent text-gray-400 hover:text-gray-200 whitespace-nowrap" data-tab="logs">
|
|
940
|
+
<svg class="w-4 h-4 inline-block mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
941
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"/>
|
|
942
|
+
</svg>
|
|
943
|
+
All Logs
|
|
944
|
+
</button>
|
|
945
|
+
<button class="debug-tab py-2 px-4 text-sm font-medium border-b-2 border-transparent text-gray-400 hover:text-gray-200 whitespace-nowrap" data-tab="all-processes">
|
|
946
|
+
<svg class="w-4 h-4 inline-block mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
947
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10"/>
|
|
948
|
+
</svg>
|
|
949
|
+
All Processes
|
|
950
|
+
</button>
|
|
951
|
+
</div>
|
|
952
|
+
<!-- Debug Tab Content -->
|
|
953
|
+
<div class="flex-1 overflow-y-auto p-4 bg-gray-900">
|
|
954
|
+
<!-- Claude I/O Tab (default) -->
|
|
955
|
+
<div id="debug-tab-claude-io" class="debug-tab-content">
|
|
956
|
+
<div id="debug-claude-io-content" class="space-y-2 font-mono text-xs">
|
|
957
|
+
<!-- Claude I/O logs will be rendered here -->
|
|
958
|
+
</div>
|
|
959
|
+
</div>
|
|
960
|
+
<!-- Process Tab -->
|
|
961
|
+
<div id="debug-tab-process" class="debug-tab-content hidden">
|
|
962
|
+
<div id="debug-process-content" class="space-y-4 text-sm">
|
|
963
|
+
<!-- Process info will be rendered here -->
|
|
964
|
+
</div>
|
|
965
|
+
</div>
|
|
966
|
+
<!-- Commands Tab -->
|
|
967
|
+
<div id="debug-tab-commands" class="debug-tab-content hidden">
|
|
968
|
+
<div id="debug-commands-content" class="space-y-4 text-sm">
|
|
969
|
+
<!-- Commands will be rendered here -->
|
|
970
|
+
</div>
|
|
971
|
+
</div>
|
|
972
|
+
<!-- All Logs Tab -->
|
|
973
|
+
<div id="debug-tab-logs" class="debug-tab-content hidden">
|
|
974
|
+
<div id="debug-logs-content" class="space-y-1 font-mono text-xs">
|
|
975
|
+
<!-- Logs will be rendered here -->
|
|
976
|
+
</div>
|
|
977
|
+
</div>
|
|
978
|
+
<!-- All Processes Tab -->
|
|
979
|
+
<div id="debug-tab-all-processes" class="debug-tab-content hidden">
|
|
980
|
+
<div id="debug-all-processes-content" class="space-y-4 text-sm">
|
|
981
|
+
<!-- All processes will be rendered here -->
|
|
982
|
+
</div>
|
|
983
|
+
</div>
|
|
984
|
+
</div>
|
|
985
|
+
</div>
|
|
986
|
+
</div>
|
|
987
|
+
</div>
|
|
988
|
+
|
|
989
|
+
<!-- File Context Menu -->
|
|
990
|
+
<div id="file-context-menu" class="hidden fixed bg-gray-800 border border-gray-700 rounded-lg shadow-xl z-50 py-1 min-w-40">
|
|
991
|
+
<button id="context-menu-delete" class="w-full px-3 py-1.5 text-left text-sm text-red-400 hover:bg-gray-700 flex items-center gap-2">
|
|
992
|
+
<svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
993
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/>
|
|
994
|
+
</svg>
|
|
995
|
+
Delete
|
|
996
|
+
</button>
|
|
997
|
+
</div>
|
|
998
|
+
|
|
999
|
+
<!-- Toast Container -->
|
|
1000
|
+
<div id="toast-container" class="fixed bottom-4 right-4 space-y-2 z-50"></div>
|
|
1001
|
+
|
|
1002
|
+
<script src="/js/app.js"></script>
|
|
1003
|
+
</body>
|
|
1004
|
+
</html>
|