@hmduc16031996/claude-mb-bridge 2.5.4 → 2.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/public/android-chrome-192x192.png +0 -0
- package/public/android-chrome-512x512.png +0 -0
- package/public/app.js +2 -2
- package/public/apple-touch-icon.png +0 -0
- package/public/favicon-16x16.png +0 -0
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/ic_logo.png +0 -0
- package/public/index.html +115 -147
- package/public/styles.css +18 -6
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
package/public/app.js
CHANGED
|
@@ -1765,8 +1765,8 @@ class ClaudeRemote {
|
|
|
1765
1765
|
if (!this.ws || this.ws.readyState !== WebSocket.OPEN || !this.currentSessionId) return;
|
|
1766
1766
|
|
|
1767
1767
|
switch (key) {
|
|
1768
|
-
case '
|
|
1769
|
-
this.ws.send('\
|
|
1768
|
+
case 'enter':
|
|
1769
|
+
this.ws.send('\r'); // Enter (CR)
|
|
1770
1770
|
break;
|
|
1771
1771
|
case 'ctrl':
|
|
1772
1772
|
this.setCtrlActive(!this.ctrlActive);
|
|
Binary file
|
|
Binary file
|
package/public/favicon-32x32.png
CHANGED
|
Binary file
|
package/public/favicon.ico
CHANGED
|
Binary file
|
package/public/ic_logo.png
CHANGED
|
Binary file
|
package/public/index.html
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<!DOCTYPE html>
|
|
2
2
|
<html lang="en">
|
|
3
|
+
|
|
3
4
|
<head>
|
|
4
5
|
<meta charset="UTF-8">
|
|
5
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
|
@@ -26,36 +27,28 @@
|
|
|
26
27
|
|
|
27
28
|
<link rel="stylesheet" href="/styles.css">
|
|
28
29
|
</head>
|
|
30
|
+
|
|
29
31
|
<body>
|
|
30
32
|
<div id="app">
|
|
31
33
|
<!-- Auth Screen -->
|
|
32
34
|
<div id="auth-screen" class="screen active">
|
|
33
35
|
<div class="auth-container">
|
|
34
|
-
<!-- Logo -->
|
|
35
36
|
<div class="auth-logo" aria-hidden="true">
|
|
36
|
-
<img src="/ic_logo.png" width="
|
|
37
|
+
<img src="/ic_logo.png" width="56" height="56" alt="Remote Coding">
|
|
37
38
|
</div>
|
|
38
39
|
|
|
39
|
-
<h1 id="main-title">
|
|
40
|
-
<p id="main-subtitle" class="subtitle">Connect to your local
|
|
40
|
+
<h1 id="main-title">Remote Coding</h1>
|
|
41
|
+
<p id="main-subtitle" class="subtitle">Connect to your local coding session from anywhere</p>
|
|
41
42
|
|
|
42
43
|
<form id="auth-form" onsubmit="return false;">
|
|
43
|
-
<input
|
|
44
|
-
|
|
45
|
-
id="token-input"
|
|
46
|
-
placeholder="Enter auth token"
|
|
47
|
-
autocomplete="off"
|
|
48
|
-
autocapitalize="off"
|
|
49
|
-
autocorrect="off"
|
|
50
|
-
spellcheck="false"
|
|
51
|
-
aria-label="Authentication token"
|
|
52
|
-
>
|
|
44
|
+
<input type="text" id="token-input" placeholder="Enter auth token" autocomplete="off" autocapitalize="off"
|
|
45
|
+
autocorrect="off" spellcheck="false" aria-label="Authentication token">
|
|
53
46
|
<button id="connect-btn" class="btn-primary" type="submit">
|
|
54
47
|
<span class="btn-text">Connect</span>
|
|
55
48
|
<span class="btn-loading" aria-hidden="true">
|
|
56
49
|
<svg class="spinner" width="20" height="20" viewBox="0 0 20 20" fill="none">
|
|
57
|
-
<circle cx="10" cy="10" r="8" stroke="currentColor" stroke-width="2" stroke-opacity="0.3"/>
|
|
58
|
-
<path d="M10 2a8 8 0 0 1 8 8" stroke="currentColor" stroke-width="2" stroke-linecap="round"/>
|
|
50
|
+
<circle cx="10" cy="10" r="8" stroke="currentColor" stroke-width="2" stroke-opacity="0.3" />
|
|
51
|
+
<path d="M10 2a8 8 0 0 1 8 8" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
|
|
59
52
|
</svg>
|
|
60
53
|
</span>
|
|
61
54
|
</button>
|
|
@@ -77,54 +70,68 @@
|
|
|
77
70
|
<!-- Desktop: Tabs -->
|
|
78
71
|
<div id="session-tabs" class="session-tabs desktop-only" role="tablist" aria-label="Sessions"></div>
|
|
79
72
|
<div class="header-left-actions">
|
|
80
|
-
<button id="new-session-btn" class="btn-icon-minimal" title="Create new session"
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
73
|
+
<button id="new-session-btn" class="btn-icon-minimal" title="Create new session"
|
|
74
|
+
aria-label="Create new session">
|
|
75
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"
|
|
76
|
+
stroke-linecap="round">
|
|
77
|
+
<line x1="12" y1="5" x2="12" y2="19" />
|
|
78
|
+
<line x1="5" y1="12" x2="19" y2="12" />
|
|
84
79
|
</svg>
|
|
85
80
|
</button>
|
|
86
|
-
<button id="close-session-btn" class="btn-icon-minimal mobile-only" title="Close current session"
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
81
|
+
<button id="close-session-btn" class="btn-icon-minimal mobile-only" title="Close current session"
|
|
82
|
+
aria-label="Close current session">
|
|
83
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"
|
|
84
|
+
stroke-linecap="round">
|
|
85
|
+
<line x1="18" y1="6" x2="6" y2="18" />
|
|
86
|
+
<line x1="6" y1="6" x2="18" y2="18" />
|
|
90
87
|
</svg>
|
|
91
88
|
</button>
|
|
92
89
|
</div>
|
|
93
90
|
</div>
|
|
94
91
|
<div class="header-right">
|
|
95
92
|
<div id="reconnect-indicator" class="reconnect-indicator hidden" title="Reconnecting...">
|
|
96
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
97
|
-
|
|
98
|
-
<
|
|
93
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
94
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
95
|
+
<path d="M21 12a9 9 0 1 1-9-9" />
|
|
96
|
+
<polyline points="21 3 21 9 15 9" />
|
|
99
97
|
</svg>
|
|
100
98
|
</div>
|
|
101
99
|
<button id="attach-btn" class="btn-icon" title="Attach image" aria-label="Attach image">
|
|
102
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
103
|
-
|
|
100
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
101
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
102
|
+
<path
|
|
103
|
+
d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" />
|
|
104
104
|
</svg>
|
|
105
105
|
</button>
|
|
106
106
|
<input type="file" id="image-input" accept="image/*" class="hidden" aria-hidden="true">
|
|
107
107
|
<button id="preview-btn" class="btn-icon" title="Port preview" aria-label="Open port preview">
|
|
108
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
109
|
-
|
|
110
|
-
<
|
|
111
|
-
<line x1="
|
|
108
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
109
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
110
|
+
<rect x="2" y="3" width="20" height="14" rx="2" />
|
|
111
|
+
<line x1="8" y1="21" x2="16" y2="21" />
|
|
112
|
+
<line x1="12" y1="17" x2="12" y2="21" />
|
|
112
113
|
</svg>
|
|
113
114
|
</button>
|
|
114
115
|
<button id="settings-btn" class="btn-icon" title="Settings" aria-label="Settings">
|
|
115
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
116
|
-
|
|
117
|
-
<
|
|
116
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
117
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
118
|
+
<circle cx="12" cy="12" r="3" />
|
|
119
|
+
<path
|
|
120
|
+
d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09a1.65 1.65 0 0 0-1-1.51 1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09a1.65 1.65 0 0 0 1.51-1 1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z" />
|
|
118
121
|
</svg>
|
|
119
122
|
</button>
|
|
120
|
-
<button id="toggle-header-btn-desktop" class="btn-icon desktop-only" title="Toggle header"
|
|
121
|
-
|
|
122
|
-
|
|
123
|
+
<button id="toggle-header-btn-desktop" class="btn-icon desktop-only" title="Toggle header"
|
|
124
|
+
aria-label="Toggle header visibility" aria-expanded="true">
|
|
125
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
126
|
+
stroke-linecap="round" stroke-linejoin="round" class="chevron-icon">
|
|
127
|
+
<polyline points="18 15 12 9 6 15" />
|
|
123
128
|
</svg>
|
|
124
129
|
</button>
|
|
125
|
-
<button id="toggle-header-btn" class="btn-icon mobile-only" title="Toggle header"
|
|
126
|
-
|
|
127
|
-
|
|
130
|
+
<button id="toggle-header-btn" class="btn-icon mobile-only" title="Toggle header"
|
|
131
|
+
aria-label="Toggle header visibility" aria-expanded="true">
|
|
132
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
133
|
+
stroke-linecap="round" stroke-linejoin="round" class="chevron-icon">
|
|
134
|
+
<polyline points="18 15 12 9 6 15" />
|
|
128
135
|
</svg>
|
|
129
136
|
</button>
|
|
130
137
|
</div>
|
|
@@ -132,9 +139,11 @@
|
|
|
132
139
|
|
|
133
140
|
<!-- Mobile Control Keys Toolbar (visible on mobile only) -->
|
|
134
141
|
<div id="mobile-keys" class="mobile-keys" role="toolbar" aria-label="Control keys">
|
|
135
|
-
<button type="button" class="mobile-key" data-key="
|
|
136
|
-
<button type="button" class="mobile-key mobile-key-modifier" data-key="ctrl" aria-label="Control modifier"
|
|
137
|
-
|
|
142
|
+
<button type="button" class="mobile-key" data-key="enter" aria-label="Enter">Ent</button>
|
|
143
|
+
<button type="button" class="mobile-key mobile-key-modifier" data-key="ctrl" aria-label="Control modifier"
|
|
144
|
+
aria-pressed="false">Ctrl</button>
|
|
145
|
+
<button type="button" class="mobile-key mobile-key-modifier" data-key="shift" aria-label="Shift modifier"
|
|
146
|
+
aria-pressed="false">Shift</button>
|
|
138
147
|
<button type="button" class="mobile-key" data-key="tab" aria-label="Tab">Tab</button>
|
|
139
148
|
<button type="button" class="mobile-key" data-key="slash" aria-label="Slash">/</button>
|
|
140
149
|
<button type="button" class="mobile-key" data-key="left" aria-label="Arrow left">←</button>
|
|
@@ -147,17 +156,20 @@
|
|
|
147
156
|
<div id="terminal-container" role="application" aria-label="Terminal"></div>
|
|
148
157
|
|
|
149
158
|
<!-- Scroll to bottom button (visible when terminal is scrolled up) -->
|
|
150
|
-
<button id="scroll-bottom-btn" class="scroll-bottom-btn hidden" title="Scroll to bottom"
|
|
151
|
-
|
|
152
|
-
|
|
159
|
+
<button id="scroll-bottom-btn" class="scroll-bottom-btn hidden" title="Scroll to bottom"
|
|
160
|
+
aria-label="Scroll to bottom">
|
|
161
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"
|
|
162
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
163
|
+
<polyline points="6 9 12 15 18 9" />
|
|
153
164
|
</svg>
|
|
154
165
|
</button>
|
|
155
166
|
|
|
156
167
|
|
|
157
168
|
<!-- Floating expand button (visible when header collapsed) -->
|
|
158
169
|
<button id="expand-header-btn" class="btn-icon floating-btn hidden" title="Show header" aria-label="Show header">
|
|
159
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
160
|
-
|
|
170
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
171
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
172
|
+
<polyline points="6 9 12 15 18 9" />
|
|
161
173
|
</svg>
|
|
162
174
|
</button>
|
|
163
175
|
|
|
@@ -167,51 +179,40 @@
|
|
|
167
179
|
<div id="preview-screen" class="screen">
|
|
168
180
|
<header role="toolbar" aria-label="Preview controls">
|
|
169
181
|
<button id="back-btn" class="btn-icon" title="Back to terminal" aria-label="Back to terminal">
|
|
170
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
171
|
-
|
|
172
|
-
<
|
|
182
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
183
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
184
|
+
<line x1="19" y1="12" x2="5" y2="12" />
|
|
185
|
+
<polyline points="12 19 5 12 12 5" />
|
|
173
186
|
</svg>
|
|
174
187
|
</button>
|
|
175
188
|
<select id="port-select" aria-label="Select port to preview">
|
|
176
189
|
<option value="">Select port...</option>
|
|
177
190
|
</select>
|
|
178
|
-
<input
|
|
179
|
-
type="number"
|
|
180
|
-
id="port-input"
|
|
181
|
-
placeholder="Port"
|
|
182
|
-
min="1"
|
|
183
|
-
max="65535"
|
|
184
|
-
aria-label="Enter port number"
|
|
185
|
-
>
|
|
191
|
+
<input type="number" id="port-input" placeholder="Port" min="1" max="65535" aria-label="Enter port number">
|
|
186
192
|
<button id="go-port-btn" class="btn-icon" title="Go to port" aria-label="Go to port">
|
|
187
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
188
|
-
|
|
189
|
-
<
|
|
193
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
194
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
195
|
+
<line x1="5" y1="12" x2="19" y2="12" />
|
|
196
|
+
<polyline points="12 5 19 12 12 19" />
|
|
190
197
|
</svg>
|
|
191
198
|
</button>
|
|
192
199
|
<button id="refresh-preview-btn" class="btn-icon" title="Refresh preview" aria-label="Refresh preview">
|
|
193
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
194
|
-
|
|
195
|
-
<polyline points="
|
|
196
|
-
<
|
|
200
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
201
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
202
|
+
<polyline points="23 4 23 10 17 10" />
|
|
203
|
+
<polyline points="1 20 1 14 7 14" />
|
|
204
|
+
<path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15" />
|
|
197
205
|
</svg>
|
|
198
206
|
</button>
|
|
199
207
|
</header>
|
|
200
208
|
<div id="preview-address-bar" class="preview-address-bar">
|
|
201
|
-
<input
|
|
202
|
-
|
|
203
|
-
id="address-input"
|
|
204
|
-
placeholder="Enter path (e.g., /dashboard)"
|
|
205
|
-
autocomplete="off"
|
|
206
|
-
autocapitalize="off"
|
|
207
|
-
autocorrect="off"
|
|
208
|
-
spellcheck="false"
|
|
209
|
-
aria-label="URL path"
|
|
210
|
-
>
|
|
209
|
+
<input type="text" id="address-input" placeholder="Enter path (e.g., /dashboard)" autocomplete="off"
|
|
210
|
+
autocapitalize="off" autocorrect="off" spellcheck="false" aria-label="URL path">
|
|
211
211
|
<button id="address-go-btn" class="btn-icon" title="Navigate" aria-label="Navigate to path">
|
|
212
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
213
|
-
|
|
214
|
-
<
|
|
212
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
213
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
214
|
+
<line x1="5" y1="12" x2="19" y2="12" />
|
|
215
|
+
<polyline points="12 5 19 12 12 19" />
|
|
215
216
|
</svg>
|
|
216
217
|
</button>
|
|
217
218
|
</div>
|
|
@@ -222,9 +223,10 @@
|
|
|
222
223
|
<div id="schedules-screen" class="screen">
|
|
223
224
|
<header class="schedules-header" role="toolbar" aria-label="Schedule controls">
|
|
224
225
|
<button id="schedules-back-btn" class="btn-icon" title="Back to terminal" aria-label="Back to terminal">
|
|
225
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
226
|
-
|
|
227
|
-
<
|
|
226
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
227
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
228
|
+
<line x1="19" y1="12" x2="5" y2="12" />
|
|
229
|
+
<polyline points="12 19 5 12 12 5" />
|
|
228
230
|
</svg>
|
|
229
231
|
</button>
|
|
230
232
|
<h2 class="schedules-title">Scheduled Tasks</h2>
|
|
@@ -234,9 +236,10 @@
|
|
|
234
236
|
</header>
|
|
235
237
|
<div id="schedules-list" class="schedules-list">
|
|
236
238
|
<div id="schedules-empty" class="empty-state">
|
|
237
|
-
<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"
|
|
238
|
-
|
|
239
|
-
<
|
|
239
|
+
<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5"
|
|
240
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
241
|
+
<circle cx="12" cy="12" r="10" />
|
|
242
|
+
<polyline points="12 6 12 12 16 14" />
|
|
240
243
|
</svg>
|
|
241
244
|
<p>No scheduled tasks yet. Create one to run Claude on a recurring schedule.</p>
|
|
242
245
|
</div>
|
|
@@ -244,54 +247,25 @@
|
|
|
244
247
|
</div>
|
|
245
248
|
|
|
246
249
|
<!-- New Schedule Modal -->
|
|
247
|
-
<div id="new-schedule-modal" class="modal hidden" role="dialog" aria-labelledby="new-schedule-title"
|
|
250
|
+
<div id="new-schedule-modal" class="modal hidden" role="dialog" aria-labelledby="new-schedule-title"
|
|
251
|
+
aria-modal="true">
|
|
248
252
|
<div class="modal-content">
|
|
249
253
|
<h2 id="new-schedule-title">New Scheduled Task</h2>
|
|
250
254
|
<p class="modal-description">Create a recurring task that runs Claude headlessly.</p>
|
|
251
255
|
<div class="schedule-form">
|
|
252
|
-
<input
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
autocomplete="off"
|
|
257
|
-
autocapitalize="off"
|
|
258
|
-
spellcheck="false"
|
|
259
|
-
aria-label="Schedule name"
|
|
260
|
-
>
|
|
261
|
-
<textarea
|
|
262
|
-
id="schedule-prompt-input"
|
|
263
|
-
placeholder="Prompt (e.g. Review open TODOs and summarize)"
|
|
264
|
-
rows="3"
|
|
265
|
-
autocomplete="off"
|
|
266
|
-
autocapitalize="off"
|
|
267
|
-
spellcheck="false"
|
|
268
|
-
aria-label="Schedule prompt"
|
|
269
|
-
></textarea>
|
|
256
|
+
<input type="text" id="schedule-name-input" placeholder="Task name (e.g. Daily code review)"
|
|
257
|
+
autocomplete="off" autocapitalize="off" spellcheck="false" aria-label="Schedule name">
|
|
258
|
+
<textarea id="schedule-prompt-input" placeholder="Prompt (e.g. Review open TODOs and summarize)" rows="3"
|
|
259
|
+
autocomplete="off" autocapitalize="off" spellcheck="false" aria-label="Schedule prompt"></textarea>
|
|
270
260
|
<div class="autocomplete-wrapper">
|
|
271
|
-
<input
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
placeholder="Working directory (absolute path)"
|
|
275
|
-
autocomplete="off"
|
|
276
|
-
autocapitalize="off"
|
|
277
|
-
autocorrect="off"
|
|
278
|
-
spellcheck="false"
|
|
279
|
-
aria-label="Working directory path"
|
|
280
|
-
aria-autocomplete="list"
|
|
281
|
-
aria-controls="schedule-cwd-suggestions"
|
|
282
|
-
>
|
|
261
|
+
<input type="text" id="schedule-cwd-input" placeholder="Working directory (absolute path)"
|
|
262
|
+
autocomplete="off" autocapitalize="off" autocorrect="off" spellcheck="false"
|
|
263
|
+
aria-label="Working directory path" aria-autocomplete="list" aria-controls="schedule-cwd-suggestions">
|
|
283
264
|
<ul id="schedule-cwd-suggestions" class="suggestions hidden" role="listbox"></ul>
|
|
284
265
|
</div>
|
|
285
|
-
<input
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
placeholder="e.g. every weekday at 9am, twice a week, daily at 3pm..."
|
|
289
|
-
autocomplete="off"
|
|
290
|
-
autocapitalize="off"
|
|
291
|
-
autocorrect="off"
|
|
292
|
-
spellcheck="false"
|
|
293
|
-
aria-label="Schedule frequency"
|
|
294
|
-
>
|
|
266
|
+
<input type="text" id="schedule-text-input"
|
|
267
|
+
placeholder="e.g. every weekday at 9am, twice a week, daily at 3pm..." autocomplete="off"
|
|
268
|
+
autocapitalize="off" autocorrect="off" spellcheck="false" aria-label="Schedule frequency">
|
|
295
269
|
</div>
|
|
296
270
|
<div class="modal-actions">
|
|
297
271
|
<button id="cancel-schedule-btn" class="btn-secondary">Cancel</button>
|
|
@@ -306,9 +280,10 @@
|
|
|
306
280
|
<div class="modal-header">
|
|
307
281
|
<h2 id="run-log-title">Run Log</h2>
|
|
308
282
|
<button id="close-run-log-btn" class="btn-icon" aria-label="Close">
|
|
309
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
310
|
-
|
|
311
|
-
<line x1="
|
|
283
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
284
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
285
|
+
<line x1="18" y1="6" x2="6" y2="18" />
|
|
286
|
+
<line x1="6" y1="6" x2="18" y2="18" />
|
|
312
287
|
</svg>
|
|
313
288
|
</button>
|
|
314
289
|
</div>
|
|
@@ -322,18 +297,9 @@
|
|
|
322
297
|
<h2 id="modal-title">New Session</h2>
|
|
323
298
|
<p class="modal-description">Create a new terminal session with optional working directory.</p>
|
|
324
299
|
<div class="autocomplete-wrapper">
|
|
325
|
-
<input
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
placeholder="Working directory (leave empty for current)"
|
|
329
|
-
autocomplete="off"
|
|
330
|
-
autocapitalize="off"
|
|
331
|
-
autocorrect="off"
|
|
332
|
-
spellcheck="false"
|
|
333
|
-
aria-label="Working directory path"
|
|
334
|
-
aria-autocomplete="list"
|
|
335
|
-
aria-controls="cwd-suggestions"
|
|
336
|
-
>
|
|
300
|
+
<input type="text" id="cwd-input" placeholder="Working directory (leave empty for current)" autocomplete="off"
|
|
301
|
+
autocapitalize="off" autocorrect="off" spellcheck="false" aria-label="Working directory path"
|
|
302
|
+
aria-autocomplete="list" aria-controls="cwd-suggestions">
|
|
337
303
|
<ul id="cwd-suggestions" class="suggestions hidden" role="listbox"></ul>
|
|
338
304
|
</div>
|
|
339
305
|
<div class="modal-actions">
|
|
@@ -349,9 +315,10 @@
|
|
|
349
315
|
<div class="modal-header">
|
|
350
316
|
<h2 id="settings-title">Settings</h2>
|
|
351
317
|
<button id="close-settings-btn" class="btn-icon" aria-label="Close settings">
|
|
352
|
-
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
353
|
-
|
|
354
|
-
<line x1="
|
|
318
|
+
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"
|
|
319
|
+
stroke-linecap="round" stroke-linejoin="round">
|
|
320
|
+
<line x1="18" y1="6" x2="6" y2="18" />
|
|
321
|
+
<line x1="6" y1="6" x2="18" y2="18" />
|
|
355
322
|
</svg>
|
|
356
323
|
</button>
|
|
357
324
|
</div>
|
|
@@ -371,4 +338,5 @@
|
|
|
371
338
|
|
|
372
339
|
<script src="/app.js"></script>
|
|
373
340
|
</body>
|
|
374
|
-
|
|
341
|
+
|
|
342
|
+
</html>
|
package/public/styles.css
CHANGED
|
@@ -15,10 +15,11 @@
|
|
|
15
15
|
--text-secondary: #a0a0a0;
|
|
16
16
|
--text-muted: #6b6b6b;
|
|
17
17
|
|
|
18
|
-
/* Accent - Claude orange */
|
|
19
|
-
--accent: #
|
|
20
|
-
--accent-hover: #
|
|
21
|
-
--accent-soft: rgba(
|
|
18
|
+
/* Accent - Claude terracotta orange (from ic_logo.png) */
|
|
19
|
+
--accent: #d17e5e;
|
|
20
|
+
--accent-hover: #e19171;
|
|
21
|
+
--accent-soft: rgba(209, 126, 94, 0.12);
|
|
22
|
+
--accent-pale: #eec6b4;
|
|
22
23
|
|
|
23
24
|
/* Semantic colors */
|
|
24
25
|
--success: #3fb950;
|
|
@@ -91,7 +92,9 @@ body {
|
|
|
91
92
|
align-items: center;
|
|
92
93
|
min-height: 100vh;
|
|
93
94
|
padding: 1.5rem;
|
|
94
|
-
background: var(--
|
|
95
|
+
background: radial-gradient(circle at top right, var(--accent-soft) 0%, transparent 60%),
|
|
96
|
+
radial-gradient(circle at bottom left, rgba(209, 126, 94, 0.05) 0%, var(--bg-deep) 70%),
|
|
97
|
+
var(--bg-deep);
|
|
95
98
|
}
|
|
96
99
|
|
|
97
100
|
.auth-container {
|
|
@@ -102,7 +105,13 @@ body {
|
|
|
102
105
|
|
|
103
106
|
/* Auth Logo */
|
|
104
107
|
.auth-logo {
|
|
105
|
-
margin-bottom:
|
|
108
|
+
margin-bottom: 2rem;
|
|
109
|
+
display: inline-block;
|
|
110
|
+
padding: 12px;
|
|
111
|
+
background: linear-gradient(135deg, var(--bg-elevated) 0%, var(--bg-primary) 100%);
|
|
112
|
+
border-radius: 20px;
|
|
113
|
+
border: 1px solid var(--border);
|
|
114
|
+
box-shadow: var(--shadow), 0 0 20px var(--accent-soft);
|
|
106
115
|
}
|
|
107
116
|
|
|
108
117
|
.auth-container h1 {
|
|
@@ -733,6 +742,7 @@ body {
|
|
|
733
742
|
cursor: pointer;
|
|
734
743
|
transition: border-color var(--transition);
|
|
735
744
|
appearance: none;
|
|
745
|
+
-webkit-appearance: none;
|
|
736
746
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%238b949e' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
|
|
737
747
|
background-repeat: no-repeat;
|
|
738
748
|
background-position: right 0.625rem center;
|
|
@@ -758,6 +768,8 @@ body {
|
|
|
758
768
|
border: 1px solid var(--border);
|
|
759
769
|
border-radius: var(--radius);
|
|
760
770
|
transition: border-color var(--transition);
|
|
771
|
+
appearance: none;
|
|
772
|
+
-webkit-appearance: none;
|
|
761
773
|
-moz-appearance: textfield;
|
|
762
774
|
}
|
|
763
775
|
|