@xingjisoft/neutrino 0.2.0 → 0.3.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/README.md +124 -78
- package/assets/prompt.txt +3 -2
- package/dist/config.js +23 -1
- package/dist/llm/client.js +37 -2
- package/dist/llm/plan.js +49 -0
- package/dist/llm/subagent.js +3 -0
- package/dist/screens/chat.js +57 -32
- package/dist/web/hub.js +9 -0
- package/dist/web/server.js +353 -5
- package/dist/web/session.js +90 -4
- package/dist/web/settings.js +27 -1
- package/package.json +2 -2
- package/web/README.md +83 -15
- package/web/app.js +1309 -124
- package/web/i18n.js +345 -0
- package/web/index.html +210 -34
- package/web/markdown.js +710 -0
- package/web/settings.js +73 -19
- package/web/style.css +1124 -85
package/web/index.html
CHANGED
|
@@ -24,40 +24,67 @@
|
|
|
24
24
|
<span id="status" class="status">connecting…</span>
|
|
25
25
|
</div>
|
|
26
26
|
<div class="brand-actions">
|
|
27
|
-
<button id="refresh" class="icon-btn" type="button" title="Refresh conversations" aria-label="Refresh conversations">
|
|
27
|
+
<button id="refresh" class="icon-btn" type="button" title="Refresh conversations" aria-label="Refresh conversations" data-i18n-title="Refresh conversations" data-i18n-aria-label="Refresh conversations">
|
|
28
28
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M21 12a9 9 0 1 1-2.64-6.36" /><path d="M21 3v6h-6" /></svg>
|
|
29
29
|
</button>
|
|
30
|
-
<button id="settings-open" class="icon-btn" type="button" title="Settings" aria-label="Settings">
|
|
30
|
+
<button id="settings-open" class="icon-btn" type="button" title="Settings" aria-label="Settings" data-i18n-title="Settings" data-i18n-aria-label="Settings">
|
|
31
31
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z" /><circle cx="12" cy="12" r="3" /></svg>
|
|
32
32
|
</button>
|
|
33
33
|
</div>
|
|
34
34
|
</header>
|
|
35
|
+
|
|
36
|
+
<div class="sidebar-tools">
|
|
37
|
+
<button id="new-chat" class="new-chat" type="button" title="New conversation" data-i18n-title="New conversation">
|
|
38
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 5v14M5 12h14" /></svg>
|
|
39
|
+
<span data-i18n="New conversation">New conversation</span>
|
|
40
|
+
</button>
|
|
41
|
+
<button id="workspace-button" class="workspace-button" type="button" title="Working directory" data-i18n-title="Working directory">
|
|
42
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 7.5A2.5 2.5 0 0 1 5.5 5H9l2 2.5h7.5A2.5 2.5 0 0 1 21 10v7a2.5 2.5 0 0 1-2.5 2.5h-13A2.5 2.5 0 0 1 3 17z" /></svg>
|
|
43
|
+
<span id="workspace-label" class="workspace-label" data-i18n="All directories">All directories</span>
|
|
44
|
+
<svg class="workspace-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6" /></svg>
|
|
45
|
+
</button>
|
|
46
|
+
<button id="agents-open" class="workspace-button" type="button" title="Other agents" data-i18n-title="Other agents">
|
|
47
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 12a9 9 0 1 0 3-6.7" /><path d="M3 4v5h5" /><path d="M12 7v5l3 2" /></svg>
|
|
48
|
+
<span class="workspace-label" data-i18n="Other agents">Other agents</span>
|
|
49
|
+
<svg class="workspace-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6" /></svg>
|
|
50
|
+
</button>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
35
53
|
<div id="sessions" class="sessions"></div>
|
|
36
54
|
<footer class="sidebar-foot">
|
|
37
|
-
<span>Local agent console</span>
|
|
55
|
+
<span class="foot-note" data-i18n="Local agent console">Local agent console</span>
|
|
56
|
+
<label class="language-picker" title="Interface language" data-i18n-title="Interface language">
|
|
57
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="12" cy="12" r="9" /><path d="M3 12h18M12 3c2.5 2.6 3.8 5.6 3.8 9S14.5 18.4 12 21c-2.5-2.6-3.8-5.6-3.8-9S9.5 5.6 12 3z" /></svg>
|
|
58
|
+
<select id="language-select" aria-label="Interface language" data-i18n-aria-label="Interface language">
|
|
59
|
+
<option value="en">English</option>
|
|
60
|
+
<option value="zh">简体中文</option>
|
|
61
|
+
</select>
|
|
62
|
+
</label>
|
|
38
63
|
</footer>
|
|
39
64
|
</aside>
|
|
40
65
|
|
|
41
66
|
<main id="main">
|
|
42
67
|
<header id="main-header" class="main-header">
|
|
43
|
-
<button id="back-to-menu" class="icon-btn back-to-menu" type="button" title="Back to conversations" aria-label="Back to conversations" aria-controls="sidebar">
|
|
68
|
+
<button id="back-to-menu" class="icon-btn back-to-menu" type="button" title="Back to conversations" aria-label="Back to conversations" data-i18n-title="Back to conversations" data-i18n-aria-label="Back to conversations" aria-controls="sidebar">
|
|
44
69
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m12 5-7 7 7 7M5 12h14" /></svg>
|
|
45
70
|
</button>
|
|
46
71
|
<div class="main-title">
|
|
47
|
-
<h1 id="session-title">Select a conversation</h1>
|
|
72
|
+
<h1 id="session-title" data-i18n="Select a conversation">Select a conversation</h1>
|
|
48
73
|
<div id="session-sub" class="sub"></div>
|
|
49
74
|
</div>
|
|
50
75
|
<div id="controls" class="controls"></div>
|
|
51
76
|
</header>
|
|
52
77
|
|
|
53
78
|
<form id="model-picker" class="model-picker hidden" aria-label="Conversation model">
|
|
54
|
-
<label>Provider
|
|
55
|
-
<label>Model
|
|
56
|
-
<label>Thinking
|
|
57
|
-
<button id="model-apply" class="control" type="submit">Apply</button>
|
|
79
|
+
<label><span data-i18n="Provider">Provider</span><select id="model-provider"></select></label>
|
|
80
|
+
<label><span data-i18n="Model">Model</span><select id="model-name"></select></label>
|
|
81
|
+
<label><span data-i18n="Thinking">Thinking</span><select id="model-intensity"></select></label>
|
|
82
|
+
<button id="model-apply" class="control" type="submit" data-i18n="Apply">Apply</button>
|
|
58
83
|
<p id="model-feedback" class="form-feedback" role="status" aria-live="polite"></p>
|
|
59
84
|
</form>
|
|
60
85
|
|
|
86
|
+
<aside id="plan-card" class="plan-card hidden" aria-live="polite"></aside>
|
|
87
|
+
|
|
61
88
|
<section id="messages" class="messages">
|
|
62
89
|
<div class="empty">
|
|
63
90
|
<span class="empty-mark" aria-hidden="true">
|
|
@@ -66,8 +93,9 @@
|
|
|
66
93
|
<circle cx="12" cy="12" r="3.1" stroke="currentColor" stroke-width="1.7" />
|
|
67
94
|
</svg>
|
|
68
95
|
</span>
|
|
69
|
-
<strong>No conversation open</strong>
|
|
70
|
-
<span>Choose a conversation from the sidebar to view it.</span>
|
|
96
|
+
<strong data-i18n="No conversation open">No conversation open</strong>
|
|
97
|
+
<span data-i18n="Choose a conversation from the sidebar to view it.">Choose a conversation from the sidebar to view it.</span>
|
|
98
|
+
<button id="empty-new-chat" class="control primary" type="button" data-i18n="New conversation">New conversation</button>
|
|
71
99
|
</div>
|
|
72
100
|
</section>
|
|
73
101
|
|
|
@@ -76,12 +104,16 @@
|
|
|
76
104
|
<footer id="composer" class="composer hidden">
|
|
77
105
|
<div class="composer-inner">
|
|
78
106
|
<div class="composer-card">
|
|
79
|
-
<textarea id="input" rows="1" placeholder="Message Neutrino…" aria-label="Message"></textarea>
|
|
80
|
-
<button id="send" class="primary" type="button" title="Send message" aria-label="Send message">
|
|
107
|
+
<textarea id="input" rows="1" placeholder="Message Neutrino…" aria-label="Message" data-i18n-placeholder="Message Neutrino…"></textarea>
|
|
108
|
+
<button id="send" class="primary" type="button" title="Send message" aria-label="Send message" data-i18n-title="Send message" data-i18n-aria-label="Send message">
|
|
81
109
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M12 19V5M5 12l7-7 7 7" /></svg>
|
|
82
110
|
</button>
|
|
83
111
|
</div>
|
|
84
|
-
<div class="composer-hint"
|
|
112
|
+
<div class="composer-hint">
|
|
113
|
+
<span><kbd>Enter</kbd> <span data-i18n="to send">to send</span></span>
|
|
114
|
+
<span class="hint-sep">·</span>
|
|
115
|
+
<span><kbd>Shift</kbd> + <kbd>Enter</kbd> <span data-i18n="for a new line">for a new line</span></span>
|
|
116
|
+
</div>
|
|
85
117
|
</div>
|
|
86
118
|
</footer>
|
|
87
119
|
</main>
|
|
@@ -91,38 +123,182 @@
|
|
|
91
123
|
<form id="settings-form">
|
|
92
124
|
<header class="settings-header">
|
|
93
125
|
<div>
|
|
94
|
-
<h2 id="settings-title">Settings</h2>
|
|
95
|
-
<p class="settings-sub">Models, approvals, and console access.</p>
|
|
126
|
+
<h2 id="settings-title" data-i18n="Settings">Settings</h2>
|
|
127
|
+
<p class="settings-sub" data-i18n="Models, approvals, and console access.">Models, approvals, and console access.</p>
|
|
96
128
|
</div>
|
|
97
|
-
<button id="settings-close" class="icon-btn" type="button" aria-label="Close settings">
|
|
129
|
+
<button id="settings-close" class="icon-btn" type="button" aria-label="Close settings" data-i18n-aria-label="Close settings">
|
|
98
130
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18M6 6l12 12" /></svg>
|
|
99
131
|
</button>
|
|
100
132
|
</header>
|
|
101
133
|
<div class="settings-fields">
|
|
102
|
-
<h3>
|
|
103
|
-
<
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
134
|
+
<h3 data-i18n="Interface">Interface</h3>
|
|
135
|
+
<div class="settings-grid">
|
|
136
|
+
<label><span data-i18n="Language">Language</span>
|
|
137
|
+
<select id="settings-language">
|
|
138
|
+
<option value="en">English</option>
|
|
139
|
+
<option value="zh">简体中文</option>
|
|
140
|
+
</select>
|
|
141
|
+
</label>
|
|
142
|
+
<label><span data-i18n="Default approval mode">Default approval mode</span>
|
|
143
|
+
<select id="settings-approval">
|
|
144
|
+
<option value="request" data-i18n="Request Approval">Request Approval</option>
|
|
145
|
+
<option value="auto" data-i18n="Auto Approval">Auto Approval</option>
|
|
146
|
+
</select>
|
|
147
|
+
</label>
|
|
148
|
+
</div>
|
|
149
|
+
<label class="checkbox-label"><input id="settings-plan" type="checkbox" /> <span data-i18n="Plan-first turns">Plan-first turns</span></label>
|
|
150
|
+
<p class="settings-note" data-i18n="Split multi-step requests into a plan before answering.">Split multi-step requests into a plan before answering.</p>
|
|
151
|
+
<h3 data-i18n="Defaults for new conversations">Defaults for new conversations</h3>
|
|
152
|
+
<div class="settings-grid">
|
|
153
|
+
<label><span data-i18n="Provider">Provider</span><select id="default-provider"></select></label>
|
|
154
|
+
<label><span data-i18n="Model">Model</span><select id="default-model"></select></label>
|
|
155
|
+
<label><span data-i18n="Thinking intensity">Thinking intensity</span><select id="default-intensity"></select></label>
|
|
156
|
+
</div>
|
|
157
|
+
<h3 data-i18n="Conversation and approvals">Conversation and approvals</h3>
|
|
158
|
+
<label><span data-i18n="Model context window (tokens)">Model context window (tokens)</span><input id="settings-context" type="number" min="1" max="9007199254740991" step="1" required /></label>
|
|
159
|
+
<p id="settings-compress-note" class="settings-note" data-i18n="Auto-compress at 80% of this model's context window. Default: 1,000,000 tokens.">Auto-compress at 80% of this model's context window. Default: 1,000,000 tokens.</p>
|
|
160
|
+
<label><span data-i18n="Approval reviewer model">Approval reviewer model</span><select id="settings-reviewer"></select></label>
|
|
161
|
+
<label class="checkbox-label"><input id="settings-extreme" type="checkbox" /> <span data-i18n="Extreme-risk auto-approval (del class, 3 separate review rounds)">Extreme-risk auto-approval (del class, 3 separate review rounds)</span></label>
|
|
162
|
+
<label class="checkbox-label"><input id="settings-sound" type="checkbox" /> <span data-i18n="Sound alerts (turn finished, approval waiting)">Sound alerts (turn finished, approval waiting)</span></label>
|
|
163
|
+
<label class="checkbox-label"><input id="settings-web-console" type="checkbox" /> <span data-i18n="Start the Web console with the terminal">Start the Web console with the terminal</span></label>
|
|
164
|
+
<p class="settings-note" data-i18n="Safety determines automatic approval; task relevance only blocks unanimously confirmed, extreme mismatches. Delete-class automatic approval also requires this setting.">Safety determines automatic approval; task relevance only blocks unanimously confirmed, extreme mismatches. Delete-class automatic approval also requires this setting.</p>
|
|
165
|
+
<h3 data-i18n="Web access">Web access</h3>
|
|
166
|
+
<div class="settings-grid">
|
|
167
|
+
<label><span data-i18n="New Web password">New Web password</span><input id="settings-password" type="password" autocomplete="new-password" maxlength="256" placeholder="Leave blank to keep current password" data-i18n-placeholder="Leave blank to keep current password" /></label>
|
|
168
|
+
<label><span data-i18n="Confirm password">Confirm password</span><input id="settings-password-confirm" type="password" autocomplete="new-password" maxlength="256" placeholder="Repeat new password" data-i18n-placeholder="Repeat new password" /></label>
|
|
169
|
+
</div>
|
|
170
|
+
<p class="settings-note" data-i18n="The password is permanent and survives restarts. Default: 114514. Saving a new password signs out other browsers.">The password is permanent and survives restarts. Default: 114514. Saving a new password signs out other browsers.</p>
|
|
117
171
|
<p id="settings-feedback" class="form-feedback" role="status" aria-live="polite"></p>
|
|
118
172
|
</div>
|
|
119
173
|
<footer class="settings-actions">
|
|
120
|
-
<button id="settings-cancel" class="control" type="button">Cancel</button>
|
|
121
|
-
<button id="settings-save" class="primary" type="submit">Save changes</button>
|
|
174
|
+
<button id="settings-cancel" class="control" type="button" data-i18n="Cancel">Cancel</button>
|
|
175
|
+
<button id="settings-save" class="primary" type="submit" data-i18n="Save changes">Save changes</button>
|
|
122
176
|
</footer>
|
|
123
177
|
</form>
|
|
124
178
|
</dialog>
|
|
125
179
|
|
|
180
|
+
<dialog id="new-chat-dialog" class="sheet-dialog" aria-labelledby="new-chat-title">
|
|
181
|
+
<form id="new-chat-form" class="sheet">
|
|
182
|
+
<header class="sheet-header">
|
|
183
|
+
<div>
|
|
184
|
+
<h2 id="new-chat-title" data-i18n="New conversation">New conversation</h2>
|
|
185
|
+
<p class="sheet-sub" data-i18n="Choose a working directory and a model.">Choose a working directory and a model.</p>
|
|
186
|
+
</div>
|
|
187
|
+
<button id="new-chat-close" class="icon-btn" type="button" aria-label="Close" data-i18n-aria-label="Close">
|
|
188
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18M6 6l12 12" /></svg>
|
|
189
|
+
</button>
|
|
190
|
+
</header>
|
|
191
|
+
<div class="sheet-body">
|
|
192
|
+
<section class="field-group">
|
|
193
|
+
<h3 data-i18n="Working directory">Working directory</h3>
|
|
194
|
+
<div class="path-row">
|
|
195
|
+
<input id="new-chat-cwd" class="path-input" type="text" spellcheck="false" autocomplete="off" placeholder="C:\path\to\project" aria-label="Working directory" data-i18n-aria-label="Working directory" />
|
|
196
|
+
<button id="new-chat-browse" class="control" type="button" data-i18n="Browse…">Browse…</button>
|
|
197
|
+
</div>
|
|
198
|
+
<p class="settings-note" data-i18n="This working directory is used for the conversation's tools.">This working directory is used for the conversation's tools.</p>
|
|
199
|
+
<h4 class="recent-title" data-i18n="Recent folders">Recent folders</h4>
|
|
200
|
+
<div id="new-chat-recents" class="workspace-recents"></div>
|
|
201
|
+
</section>
|
|
202
|
+
<section class="field-group">
|
|
203
|
+
<h3 data-i18n="Model">Model</h3>
|
|
204
|
+
<div class="settings-grid">
|
|
205
|
+
<label><span data-i18n="Provider">Provider</span><select id="new-chat-provider"></select></label>
|
|
206
|
+
<label><span data-i18n="Model">Model</span><select id="new-chat-model"></select></label>
|
|
207
|
+
<label><span data-i18n="Thinking">Thinking</span><select id="new-chat-intensity"></select></label>
|
|
208
|
+
</div>
|
|
209
|
+
<label><span data-i18n="Default approval mode">Default approval mode</span>
|
|
210
|
+
<select id="new-chat-approval">
|
|
211
|
+
<option value="request" data-i18n="Request Approval">Request Approval</option>
|
|
212
|
+
<option value="auto" data-i18n="Auto Approval">Auto Approval</option>
|
|
213
|
+
</select>
|
|
214
|
+
</label>
|
|
215
|
+
<p id="new-chat-note" class="settings-note"></p>
|
|
216
|
+
</section>
|
|
217
|
+
<p id="new-chat-feedback" class="form-feedback" role="status" aria-live="polite"></p>
|
|
218
|
+
</div>
|
|
219
|
+
<footer class="sheet-actions">
|
|
220
|
+
<button id="new-chat-cancel" class="control" type="button" data-i18n="Cancel">Cancel</button>
|
|
221
|
+
<button id="new-chat-start" class="primary" type="submit" data-i18n="Start conversation">Start conversation</button>
|
|
222
|
+
</footer>
|
|
223
|
+
</form>
|
|
224
|
+
</dialog>
|
|
225
|
+
|
|
226
|
+
<dialog id="folder-dialog" class="sheet-dialog" aria-labelledby="folder-title">
|
|
227
|
+
<div class="sheet folder-sheet">
|
|
228
|
+
<header class="sheet-header">
|
|
229
|
+
<div>
|
|
230
|
+
<h2 id="folder-title" data-i18n="Open working directory">Open working directory</h2>
|
|
231
|
+
<p class="sheet-sub" data-i18n="Choose a folder to open as the working directory.">Choose a folder to open as the working directory.</p>
|
|
232
|
+
</div>
|
|
233
|
+
<button id="folder-close" class="icon-btn" type="button" aria-label="Close" data-i18n-aria-label="Close">
|
|
234
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18M6 6l12 12" /></svg>
|
|
235
|
+
</button>
|
|
236
|
+
</header>
|
|
237
|
+
<div class="folder-toolbar">
|
|
238
|
+
<button id="folder-up" class="icon-btn" type="button" title="Up" aria-label="Up" data-i18n-title="Up" data-i18n-aria-label="Up">
|
|
239
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m18 15-6-6-6 6" /></svg>
|
|
240
|
+
</button>
|
|
241
|
+
<input id="folder-path" class="path-input" type="text" spellcheck="false" autocomplete="off" aria-label="Working directory" data-i18n-aria-label="Working directory" />
|
|
242
|
+
<button id="folder-go" class="control" type="button" data-i18n="Open">Open</button>
|
|
243
|
+
</div>
|
|
244
|
+
<div id="folder-roots" class="folder-roots"></div>
|
|
245
|
+
<div id="folder-list" class="folder-list" role="listbox" aria-label="Folders"></div>
|
|
246
|
+
<div id="folder-new" class="folder-new hidden">
|
|
247
|
+
<input id="folder-new-name" class="path-input" type="text" maxlength="255" placeholder="Folder name" aria-label="Folder name" data-i18n-placeholder="Folder name" data-i18n-aria-label="Folder name" />
|
|
248
|
+
<button id="folder-new-create" class="primary" type="button" data-i18n="Create">Create</button>
|
|
249
|
+
<button id="folder-new-cancel" class="control" type="button" data-i18n="Cancel">Cancel</button>
|
|
250
|
+
</div>
|
|
251
|
+
<p id="folder-feedback" class="form-feedback" role="status" aria-live="polite"></p>
|
|
252
|
+
<footer class="sheet-actions folder-actions">
|
|
253
|
+
<button id="folder-mkdir" class="control" type="button" data-i18n="New folder">New folder</button>
|
|
254
|
+
<span class="sheet-spacer"></span>
|
|
255
|
+
<button id="folder-cancel" class="control" type="button" data-i18n="Cancel">Cancel</button>
|
|
256
|
+
<button id="folder-use" class="primary" type="button" data-i18n="Use this folder">Use this folder</button>
|
|
257
|
+
</footer>
|
|
258
|
+
</div>
|
|
259
|
+
</dialog>
|
|
260
|
+
|
|
261
|
+
<dialog id="agents-dialog" class="sheet-dialog" aria-labelledby="agents-title">
|
|
262
|
+
<div class="sheet">
|
|
263
|
+
<header class="sheet-header">
|
|
264
|
+
<div>
|
|
265
|
+
<h2 id="agents-title" data-i18n="Other agents">Other agents</h2>
|
|
266
|
+
<p class="sheet-sub" data-i18n="Read-only sessions recorded by other coding agents in this working directory.">Read-only sessions recorded by other coding agents in this working directory.</p>
|
|
267
|
+
</div>
|
|
268
|
+
<button id="agents-close" class="icon-btn" type="button" aria-label="Close" data-i18n-aria-label="Close">
|
|
269
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18M6 6l12 12" /></svg>
|
|
270
|
+
</button>
|
|
271
|
+
</header>
|
|
272
|
+
<div id="agents-list" class="agents-list"></div>
|
|
273
|
+
<p id="agents-feedback" class="form-feedback" role="status" aria-live="polite"></p>
|
|
274
|
+
<footer class="sheet-actions">
|
|
275
|
+
<span id="agents-cwd" class="agents-cwd"></span>
|
|
276
|
+
<span class="sheet-spacer"></span>
|
|
277
|
+
</footer>
|
|
278
|
+
</div>
|
|
279
|
+
</dialog>
|
|
280
|
+
|
|
281
|
+
<dialog id="workspace-dialog" class="sheet-dialog" aria-labelledby="workspace-title">
|
|
282
|
+
<div class="sheet">
|
|
283
|
+
<header class="sheet-header">
|
|
284
|
+
<div>
|
|
285
|
+
<h2 id="workspace-title" data-i18n="Working directories">Working directories</h2>
|
|
286
|
+
<p class="sheet-sub" data-i18n="Choose a working directory to browse and start conversations in.">Choose a working directory to browse and start conversations in.</p>
|
|
287
|
+
</div>
|
|
288
|
+
<button id="workspace-close" class="icon-btn" type="button" aria-label="Close" data-i18n-aria-label="Close">
|
|
289
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M18 6 6 18M6 6l12 12" /></svg>
|
|
290
|
+
</button>
|
|
291
|
+
</header>
|
|
292
|
+
<div id="workspace-list" class="workspace-list"></div>
|
|
293
|
+
<p id="workspace-feedback" class="form-feedback" role="status" aria-live="polite"></p>
|
|
294
|
+
<footer class="sheet-actions">
|
|
295
|
+
<button id="workspace-all" class="control" type="button" data-i18n="All directories">All directories</button>
|
|
296
|
+
<span class="sheet-spacer"></span>
|
|
297
|
+
<button id="workspace-add" class="primary" type="button" data-i18n="Open folder…">Open folder…</button>
|
|
298
|
+
</footer>
|
|
299
|
+
</div>
|
|
300
|
+
</dialog>
|
|
301
|
+
|
|
126
302
|
<script src="app.js" type="module"></script>
|
|
127
303
|
</body>
|
|
128
304
|
</html>
|