@lazyingart/agintiflow 0.20.1 → 0.20.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/model-selection.md +14 -4
- package/package.json +1 -1
- package/public/app.js +155 -23
- package/public/index.html +208 -166
- package/public/styles.css +83 -0
- package/references/model-routing-provider-design.md +6 -1
- package/scripts/smoke-cli-chat.js +10 -0
- package/scripts/smoke-model-roles.js +5 -1
- package/src/interactive-cli.js +214 -21
- package/src/model-client.js +14 -2
package/public/index.html
CHANGED
|
@@ -106,8 +106,9 @@
|
|
|
106
106
|
|
|
107
107
|
<label>
|
|
108
108
|
<span data-i18n="modelLabel">Model</span>
|
|
109
|
-
<
|
|
110
|
-
|
|
109
|
+
<select id="model" name="model">
|
|
110
|
+
<option value="deepseek-v4-flash">DeepSeek v4 flash</option>
|
|
111
|
+
</select>
|
|
111
112
|
</label>
|
|
112
113
|
</div>
|
|
113
114
|
|
|
@@ -122,70 +123,6 @@
|
|
|
122
123
|
<div id="model-catalog" class="model-catalog"></div>
|
|
123
124
|
</section>
|
|
124
125
|
|
|
125
|
-
<section class="model-role-editor" aria-label="Model role settings">
|
|
126
|
-
<div class="model-role-editor-head">
|
|
127
|
-
<strong>Model roles</strong>
|
|
128
|
-
<span>Route, main, spare, wrapper, auxiliary</span>
|
|
129
|
-
</div>
|
|
130
|
-
<div class="role-editor-grid">
|
|
131
|
-
<label>
|
|
132
|
-
<span>Route</span>
|
|
133
|
-
<select id="routeProvider" name="routeProvider">
|
|
134
|
-
<option value="deepseek">DeepSeek</option>
|
|
135
|
-
<option value="openai">OpenAI</option>
|
|
136
|
-
<option value="qwen">Qwen</option>
|
|
137
|
-
<option value="venice">Venice</option>
|
|
138
|
-
<option value="mock">Mock</option>
|
|
139
|
-
</select>
|
|
140
|
-
<input id="routeModel" name="routeModel" type="text" placeholder="deepseek-v4-flash" />
|
|
141
|
-
</label>
|
|
142
|
-
<label>
|
|
143
|
-
<span>Main</span>
|
|
144
|
-
<select id="mainProvider" name="mainProvider">
|
|
145
|
-
<option value="deepseek">DeepSeek</option>
|
|
146
|
-
<option value="openai">OpenAI</option>
|
|
147
|
-
<option value="qwen">Qwen</option>
|
|
148
|
-
<option value="venice">Venice</option>
|
|
149
|
-
</select>
|
|
150
|
-
<input id="mainModel" name="mainModel" type="text" placeholder="deepseek-v4-pro" />
|
|
151
|
-
</label>
|
|
152
|
-
<label>
|
|
153
|
-
<span>Spare</span>
|
|
154
|
-
<select id="spareProvider" name="spareProvider">
|
|
155
|
-
<option value="openai">OpenAI</option>
|
|
156
|
-
<option value="deepseek">DeepSeek</option>
|
|
157
|
-
<option value="qwen">Qwen</option>
|
|
158
|
-
<option value="venice">Venice</option>
|
|
159
|
-
</select>
|
|
160
|
-
<input id="spareModel" name="spareModel" type="text" placeholder="gpt-5.4" />
|
|
161
|
-
<select id="spareReasoning" name="spareReasoning">
|
|
162
|
-
<option value="low">low</option>
|
|
163
|
-
<option value="medium">medium</option>
|
|
164
|
-
<option value="high">high</option>
|
|
165
|
-
<option value="xhigh">xhigh</option>
|
|
166
|
-
</select>
|
|
167
|
-
</label>
|
|
168
|
-
<label>
|
|
169
|
-
<span>Wrapper</span>
|
|
170
|
-
<input id="wrapperModel" name="wrapperModel" type="text" placeholder="gpt-5.5" />
|
|
171
|
-
<select id="wrapperReasoning" name="wrapperReasoning">
|
|
172
|
-
<option value="low">low</option>
|
|
173
|
-
<option value="medium">medium</option>
|
|
174
|
-
<option value="high">high</option>
|
|
175
|
-
<option value="xhigh">xhigh</option>
|
|
176
|
-
</select>
|
|
177
|
-
</label>
|
|
178
|
-
<label>
|
|
179
|
-
<span>Auxiliary</span>
|
|
180
|
-
<select id="auxiliaryProvider" name="auxiliaryProvider">
|
|
181
|
-
<option value="grsai">GRS AI</option>
|
|
182
|
-
<option value="venice">Venice image</option>
|
|
183
|
-
</select>
|
|
184
|
-
<input id="auxiliaryModel" name="auxiliaryModel" type="text" placeholder="nano-banana-2" />
|
|
185
|
-
</label>
|
|
186
|
-
</div>
|
|
187
|
-
</section>
|
|
188
|
-
|
|
189
126
|
<label>
|
|
190
127
|
<span data-i18n="taskProfileLabel">Task profile</span>
|
|
191
128
|
<select id="taskProfile" name="taskProfile">
|
|
@@ -204,16 +141,6 @@
|
|
|
204
141
|
></textarea>
|
|
205
142
|
</label>
|
|
206
143
|
|
|
207
|
-
<label>
|
|
208
|
-
<span data-i18n="startUrlLabel">Start URL</span>
|
|
209
|
-
<input id="startUrl" name="startUrl" type="url" data-i18n-placeholder="startUrlPlaceholder" placeholder="https://news.ycombinator.com" />
|
|
210
|
-
</label>
|
|
211
|
-
|
|
212
|
-
<label>
|
|
213
|
-
<span data-i18n="allowedDomainsLabel">Allowed domains</span>
|
|
214
|
-
<input id="allowedDomains" name="allowedDomains" type="text" data-i18n-placeholder="allowedDomainsPlaceholder" placeholder="news.ycombinator.com,github.com" />
|
|
215
|
-
</label>
|
|
216
|
-
|
|
217
144
|
<div class="grid">
|
|
218
145
|
<label>
|
|
219
146
|
<span data-i18n="commandCwdLabel">Working directory</span>
|
|
@@ -246,11 +173,6 @@
|
|
|
246
173
|
</div>
|
|
247
174
|
|
|
248
175
|
<div class="checks">
|
|
249
|
-
<label class="switch-label">
|
|
250
|
-
<input id="headless" name="headless" type="checkbox" checked />
|
|
251
|
-
<span class="switch" aria-hidden="true"></span>
|
|
252
|
-
<span data-i18n="headlessLabel">Headless browser</span>
|
|
253
|
-
</label>
|
|
254
176
|
<label class="switch-label">
|
|
255
177
|
<input id="allowShellTool" name="allowShellTool" type="checkbox" checked />
|
|
256
178
|
<span class="switch" aria-hidden="true"></span>
|
|
@@ -261,103 +183,19 @@
|
|
|
261
183
|
<span class="switch" aria-hidden="true"></span>
|
|
262
184
|
<span data-i18n="fileToolLabel">Enable file tools</span>
|
|
263
185
|
</label>
|
|
264
|
-
<label class="switch-label">
|
|
265
|
-
<input id="allowAuxiliaryTools" name="allowAuxiliaryTools" type="checkbox" checked />
|
|
266
|
-
<span class="switch" aria-hidden="true"></span>
|
|
267
|
-
<span data-i18n="auxiliaryToolLabel">Enable auxiliary skills</span>
|
|
268
|
-
</label>
|
|
269
186
|
<label class="switch-label">
|
|
270
187
|
<input id="allowWebSearch" name="allowWebSearch" type="checkbox" checked />
|
|
271
188
|
<span class="switch" aria-hidden="true"></span>
|
|
272
189
|
<span data-i18n="webSearchLabel">Enable web search</span>
|
|
273
190
|
</label>
|
|
274
|
-
<label class="switch-label">
|
|
275
|
-
<input id="allowParallelScouts" name="allowParallelScouts" type="checkbox" checked />
|
|
276
|
-
<span class="switch" aria-hidden="true"></span>
|
|
277
|
-
<span data-i18n="parallelScoutsLabel">Parallel DeepSeek scouts</span>
|
|
278
|
-
</label>
|
|
279
|
-
<label class="switch-label">
|
|
280
|
-
<input id="allowPasswords" name="allowPasswords" type="checkbox" />
|
|
281
|
-
<span class="switch" aria-hidden="true"></span>
|
|
282
|
-
<span data-i18n="allowPasswordsLabel">Allow password typing</span>
|
|
283
|
-
</label>
|
|
284
|
-
<label class="switch-label">
|
|
285
|
-
<input id="allowDestructive" name="allowDestructive" type="checkbox" />
|
|
286
|
-
<span class="switch" aria-hidden="true"></span>
|
|
287
|
-
<span data-i18n="allowDestructiveLabel">Allow destructive actions</span>
|
|
288
|
-
</label>
|
|
289
|
-
</div>
|
|
290
|
-
|
|
291
|
-
<label>
|
|
292
|
-
<span data-i18n="parallelScoutCountLabel">Scout count</span>
|
|
293
|
-
<input id="parallelScoutCount" name="parallelScoutCount" type="number" min="1" max="10" value="3" />
|
|
294
|
-
</label>
|
|
295
|
-
|
|
296
|
-
<div class="grid wrapper-controls">
|
|
297
|
-
<label class="switch-label switch-card">
|
|
298
|
-
<input id="allowWrapperTools" name="allowWrapperTools" type="checkbox" />
|
|
299
|
-
<span class="switch" aria-hidden="true"></span>
|
|
300
|
-
<span data-i18n="wrapperToolLabel">Enable agent wrappers</span>
|
|
301
|
-
</label>
|
|
302
|
-
<label>
|
|
303
|
-
<span data-i18n="preferredWrapperLabel">Preferred wrapper</span>
|
|
304
|
-
<select id="preferredWrapper" name="preferredWrapper">
|
|
305
|
-
<option value="codex">Codex</option>
|
|
306
|
-
<option value="claude">Claude Code</option>
|
|
307
|
-
<option value="gemini">Gemini CLI</option>
|
|
308
|
-
<option value="copilot">GitHub Copilot CLI</option>
|
|
309
|
-
<option value="qwen">Qwen Code</option>
|
|
310
|
-
</select>
|
|
311
|
-
</label>
|
|
312
191
|
</div>
|
|
313
192
|
|
|
314
|
-
<
|
|
315
|
-
<span data-i18n="dockerImageLabel">Docker image</span>
|
|
316
|
-
<input
|
|
317
|
-
id="dockerSandboxImage"
|
|
318
|
-
name="dockerSandboxImage"
|
|
319
|
-
type="text"
|
|
320
|
-
value="agintiflow-sandbox:latest"
|
|
321
|
-
data-i18n-placeholder="dockerImagePlaceholder"
|
|
322
|
-
placeholder="agintiflow-sandbox:latest"
|
|
323
|
-
/>
|
|
324
|
-
</label>
|
|
193
|
+
<button id="open-settings" type="button" class="secondary settings-button">Advanced settings</button>
|
|
325
194
|
|
|
326
195
|
<div class="actions">
|
|
327
196
|
<button type="submit" data-i18n="startRunButton">Start run</button>
|
|
328
197
|
<span id="key-status" class="subtle"></span>
|
|
329
198
|
</div>
|
|
330
|
-
|
|
331
|
-
<section class="capability-card">
|
|
332
|
-
<div>
|
|
333
|
-
<h2 data-i18n="wrapperCapabilityTitle">Agent wrappers</h2>
|
|
334
|
-
<p id="wrapper-status" class="subtle wrapper-status"></p>
|
|
335
|
-
</div>
|
|
336
|
-
<div id="wrapper-grid" class="capability-grid"></div>
|
|
337
|
-
</section>
|
|
338
|
-
|
|
339
|
-
<section class="capability-card workspace-card">
|
|
340
|
-
<div>
|
|
341
|
-
<h2 data-i18n="workspaceCapabilityTitle">Workspace files</h2>
|
|
342
|
-
<p id="workspace-status" class="subtle wrapper-status"></p>
|
|
343
|
-
</div>
|
|
344
|
-
<div id="workspace-tools" class="capability-grid"></div>
|
|
345
|
-
<div id="workspace-changes" class="workspace-changes"></div>
|
|
346
|
-
</section>
|
|
347
|
-
|
|
348
|
-
<section class="sandbox-card">
|
|
349
|
-
<div class="header-row">
|
|
350
|
-
<div>
|
|
351
|
-
<h2 data-i18n="sandboxStatusTitle">Sandbox status</h2>
|
|
352
|
-
<p id="sandbox-status" class="subtle route-hint" data-i18n="sandboxStatusEmpty">Not checked yet.</p>
|
|
353
|
-
</div>
|
|
354
|
-
<div class="sandbox-actions">
|
|
355
|
-
<button id="check-sandbox" type="button" class="secondary" data-i18n="checkSandboxButton">Check</button>
|
|
356
|
-
<button id="preflight-sandbox" type="button" class="secondary" data-i18n="preflightSandboxButton">Preflight</button>
|
|
357
|
-
</div>
|
|
358
|
-
</div>
|
|
359
|
-
<pre id="sandbox-logs" class="sandbox-logs" data-i18n="sandboxLogsEmpty">No sandbox logs yet.</pre>
|
|
360
|
-
</section>
|
|
361
199
|
</form>
|
|
362
200
|
</section>
|
|
363
201
|
|
|
@@ -425,9 +263,213 @@
|
|
|
425
263
|
</div>
|
|
426
264
|
<div id="logs" class="logs" data-i18n="noRunStarted">No run started.</div>
|
|
427
265
|
</section>
|
|
266
|
+
|
|
267
|
+
<section class="capability-card">
|
|
268
|
+
<div>
|
|
269
|
+
<h2 data-i18n="wrapperCapabilityTitle">Agent wrappers</h2>
|
|
270
|
+
<p id="wrapper-status" class="subtle wrapper-status"></p>
|
|
271
|
+
</div>
|
|
272
|
+
<div id="wrapper-grid" class="capability-grid"></div>
|
|
273
|
+
</section>
|
|
274
|
+
|
|
275
|
+
<section class="capability-card workspace-card">
|
|
276
|
+
<div>
|
|
277
|
+
<h2 data-i18n="workspaceCapabilityTitle">Workspace files</h2>
|
|
278
|
+
<p id="workspace-status" class="subtle wrapper-status"></p>
|
|
279
|
+
</div>
|
|
280
|
+
<div id="workspace-tools" class="capability-grid"></div>
|
|
281
|
+
<div id="workspace-changes" class="workspace-changes"></div>
|
|
282
|
+
</section>
|
|
283
|
+
|
|
284
|
+
<section class="sandbox-card">
|
|
285
|
+
<div class="header-row">
|
|
286
|
+
<div>
|
|
287
|
+
<h2 data-i18n="sandboxStatusTitle">Sandbox status</h2>
|
|
288
|
+
<p id="sandbox-status" class="subtle route-hint" data-i18n="sandboxStatusEmpty">Not checked yet.</p>
|
|
289
|
+
</div>
|
|
290
|
+
<div class="sandbox-actions">
|
|
291
|
+
<button id="check-sandbox" type="button" class="secondary" data-i18n="checkSandboxButton">Check</button>
|
|
292
|
+
<button id="preflight-sandbox" type="button" class="secondary" data-i18n="preflightSandboxButton">Preflight</button>
|
|
293
|
+
</div>
|
|
294
|
+
</div>
|
|
295
|
+
<pre id="sandbox-logs" class="sandbox-logs" data-i18n="sandboxLogsEmpty">No sandbox logs yet.</pre>
|
|
296
|
+
</section>
|
|
428
297
|
</section>
|
|
429
298
|
</main>
|
|
430
299
|
|
|
300
|
+
<dialog id="settings-modal" class="modal settings-modal">
|
|
301
|
+
<section class="modal-card settings-modal-card" aria-labelledby="settings-modal-title">
|
|
302
|
+
<div class="modal-header">
|
|
303
|
+
<div>
|
|
304
|
+
<h2 id="settings-modal-title">Advanced settings</h2>
|
|
305
|
+
<p class="subtle">Model roles, browser targets, wrappers, scouts, and safety toggles.</p>
|
|
306
|
+
</div>
|
|
307
|
+
<button id="close-settings" class="icon-button" type="button" data-i18n-aria-label="cancelButton" aria-label="Cancel">x</button>
|
|
308
|
+
</div>
|
|
309
|
+
|
|
310
|
+
<section class="settings-section model-role-editor" aria-label="Model role settings">
|
|
311
|
+
<div class="model-role-editor-head">
|
|
312
|
+
<strong>Model roles</strong>
|
|
313
|
+
<span>Route, main, spare, wrapper, auxiliary</span>
|
|
314
|
+
</div>
|
|
315
|
+
<div class="role-editor-grid">
|
|
316
|
+
<label>
|
|
317
|
+
<span>Route</span>
|
|
318
|
+
<select id="routeProvider" name="routeProvider">
|
|
319
|
+
<option value="deepseek">DeepSeek</option>
|
|
320
|
+
<option value="openai">OpenAI</option>
|
|
321
|
+
<option value="qwen">Qwen</option>
|
|
322
|
+
<option value="venice">Venice</option>
|
|
323
|
+
<option value="mock">Mock</option>
|
|
324
|
+
</select>
|
|
325
|
+
<select id="routeModel" name="routeModel">
|
|
326
|
+
<option value="deepseek-v4-flash">DeepSeek v4 flash</option>
|
|
327
|
+
</select>
|
|
328
|
+
</label>
|
|
329
|
+
<label>
|
|
330
|
+
<span>Main</span>
|
|
331
|
+
<select id="mainProvider" name="mainProvider">
|
|
332
|
+
<option value="deepseek">DeepSeek</option>
|
|
333
|
+
<option value="openai">OpenAI</option>
|
|
334
|
+
<option value="qwen">Qwen</option>
|
|
335
|
+
<option value="venice">Venice</option>
|
|
336
|
+
</select>
|
|
337
|
+
<select id="mainModel" name="mainModel">
|
|
338
|
+
<option value="deepseek-v4-pro">DeepSeek v4 pro</option>
|
|
339
|
+
</select>
|
|
340
|
+
</label>
|
|
341
|
+
<label>
|
|
342
|
+
<span>Spare</span>
|
|
343
|
+
<select id="spareProvider" name="spareProvider">
|
|
344
|
+
<option value="openai">OpenAI</option>
|
|
345
|
+
<option value="deepseek">DeepSeek</option>
|
|
346
|
+
<option value="qwen">Qwen</option>
|
|
347
|
+
<option value="venice">Venice</option>
|
|
348
|
+
</select>
|
|
349
|
+
<select id="spareModel" name="spareModel">
|
|
350
|
+
<option value="gpt-5.4">GPT-5.4</option>
|
|
351
|
+
</select>
|
|
352
|
+
<select id="spareReasoning" name="spareReasoning">
|
|
353
|
+
<option value="low">low</option>
|
|
354
|
+
<option value="medium">medium</option>
|
|
355
|
+
<option value="high">high</option>
|
|
356
|
+
<option value="xhigh">xhigh</option>
|
|
357
|
+
</select>
|
|
358
|
+
</label>
|
|
359
|
+
<label>
|
|
360
|
+
<span>Wrapper</span>
|
|
361
|
+
<select id="wrapperModel" name="wrapperModel">
|
|
362
|
+
<option value="gpt-5.5">GPT-5.5</option>
|
|
363
|
+
</select>
|
|
364
|
+
<select id="wrapperReasoning" name="wrapperReasoning">
|
|
365
|
+
<option value="low">low</option>
|
|
366
|
+
<option value="medium">medium</option>
|
|
367
|
+
<option value="high">high</option>
|
|
368
|
+
<option value="xhigh">xhigh</option>
|
|
369
|
+
</select>
|
|
370
|
+
</label>
|
|
371
|
+
<label>
|
|
372
|
+
<span>Auxiliary</span>
|
|
373
|
+
<select id="auxiliaryProvider" name="auxiliaryProvider">
|
|
374
|
+
<option value="grsai">GRS AI</option>
|
|
375
|
+
<option value="venice">Venice image</option>
|
|
376
|
+
</select>
|
|
377
|
+
<select id="auxiliaryModel" name="auxiliaryModel">
|
|
378
|
+
<option value="nano-banana-2">Nano Banana 2</option>
|
|
379
|
+
</select>
|
|
380
|
+
</label>
|
|
381
|
+
</div>
|
|
382
|
+
</section>
|
|
383
|
+
|
|
384
|
+
<section class="settings-section">
|
|
385
|
+
<div class="settings-section-head">
|
|
386
|
+
<strong>Browser and target</strong>
|
|
387
|
+
<span class="subtle">Optional browser start point and allowed domains.</span>
|
|
388
|
+
</div>
|
|
389
|
+
<div class="settings-grid">
|
|
390
|
+
<label>
|
|
391
|
+
<span data-i18n="startUrlLabel">Start URL</span>
|
|
392
|
+
<input id="startUrl" name="startUrl" type="url" data-i18n-placeholder="startUrlPlaceholder" placeholder="https://news.ycombinator.com" />
|
|
393
|
+
</label>
|
|
394
|
+
<label>
|
|
395
|
+
<span data-i18n="allowedDomainsLabel">Allowed domains</span>
|
|
396
|
+
<input id="allowedDomains" name="allowedDomains" type="text" data-i18n-placeholder="allowedDomainsPlaceholder" placeholder="news.ycombinator.com,github.com" />
|
|
397
|
+
</label>
|
|
398
|
+
</div>
|
|
399
|
+
</section>
|
|
400
|
+
|
|
401
|
+
<section class="settings-section">
|
|
402
|
+
<div class="settings-section-head">
|
|
403
|
+
<strong>Tools and wrappers</strong>
|
|
404
|
+
<span class="subtle">Less-used capabilities stay here to keep the daily panel focused.</span>
|
|
405
|
+
</div>
|
|
406
|
+
<div class="checks settings-checks">
|
|
407
|
+
<label class="switch-label">
|
|
408
|
+
<input id="headless" name="headless" type="checkbox" checked />
|
|
409
|
+
<span class="switch" aria-hidden="true"></span>
|
|
410
|
+
<span data-i18n="headlessLabel">Headless browser</span>
|
|
411
|
+
</label>
|
|
412
|
+
<label class="switch-label">
|
|
413
|
+
<input id="allowAuxiliaryTools" name="allowAuxiliaryTools" type="checkbox" checked />
|
|
414
|
+
<span class="switch" aria-hidden="true"></span>
|
|
415
|
+
<span data-i18n="auxiliaryToolLabel">Enable auxiliary skills</span>
|
|
416
|
+
</label>
|
|
417
|
+
<label class="switch-label">
|
|
418
|
+
<input id="allowParallelScouts" name="allowParallelScouts" type="checkbox" checked />
|
|
419
|
+
<span class="switch" aria-hidden="true"></span>
|
|
420
|
+
<span data-i18n="parallelScoutsLabel">Parallel DeepSeek scouts</span>
|
|
421
|
+
</label>
|
|
422
|
+
<label class="switch-label">
|
|
423
|
+
<input id="allowPasswords" name="allowPasswords" type="checkbox" />
|
|
424
|
+
<span class="switch" aria-hidden="true"></span>
|
|
425
|
+
<span data-i18n="allowPasswordsLabel">Allow password typing</span>
|
|
426
|
+
</label>
|
|
427
|
+
<label class="switch-label">
|
|
428
|
+
<input id="allowDestructive" name="allowDestructive" type="checkbox" />
|
|
429
|
+
<span class="switch" aria-hidden="true"></span>
|
|
430
|
+
<span data-i18n="allowDestructiveLabel">Allow destructive actions</span>
|
|
431
|
+
</label>
|
|
432
|
+
<label class="switch-label switch-card">
|
|
433
|
+
<input id="allowWrapperTools" name="allowWrapperTools" type="checkbox" />
|
|
434
|
+
<span class="switch" aria-hidden="true"></span>
|
|
435
|
+
<span data-i18n="wrapperToolLabel">Enable agent wrappers</span>
|
|
436
|
+
</label>
|
|
437
|
+
</div>
|
|
438
|
+
<div class="settings-grid">
|
|
439
|
+
<label>
|
|
440
|
+
<span data-i18n="parallelScoutCountLabel">Scout count</span>
|
|
441
|
+
<input id="parallelScoutCount" name="parallelScoutCount" type="number" min="1" max="10" value="3" />
|
|
442
|
+
</label>
|
|
443
|
+
<label>
|
|
444
|
+
<span data-i18n="preferredWrapperLabel">Preferred wrapper</span>
|
|
445
|
+
<select id="preferredWrapper" name="preferredWrapper">
|
|
446
|
+
<option value="codex">Codex</option>
|
|
447
|
+
<option value="claude">Claude Code</option>
|
|
448
|
+
<option value="gemini">Gemini CLI</option>
|
|
449
|
+
<option value="copilot">GitHub Copilot CLI</option>
|
|
450
|
+
<option value="qwen">Qwen Code</option>
|
|
451
|
+
</select>
|
|
452
|
+
</label>
|
|
453
|
+
<label class="settings-wide">
|
|
454
|
+
<span data-i18n="dockerImageLabel">Docker image</span>
|
|
455
|
+
<input
|
|
456
|
+
id="dockerSandboxImage"
|
|
457
|
+
name="dockerSandboxImage"
|
|
458
|
+
type="text"
|
|
459
|
+
value="agintiflow-sandbox:latest"
|
|
460
|
+
data-i18n-placeholder="dockerImagePlaceholder"
|
|
461
|
+
placeholder="agintiflow-sandbox:latest"
|
|
462
|
+
/>
|
|
463
|
+
</label>
|
|
464
|
+
</div>
|
|
465
|
+
</section>
|
|
466
|
+
|
|
467
|
+
<div class="modal-actions">
|
|
468
|
+
<button id="done-settings" type="button">Done</button>
|
|
469
|
+
</div>
|
|
470
|
+
</section>
|
|
471
|
+
</dialog>
|
|
472
|
+
|
|
431
473
|
<dialog id="session-manager" class="modal">
|
|
432
474
|
<section class="modal-card" aria-labelledby="session-manager-title">
|
|
433
475
|
<div class="modal-header">
|
package/public/styles.css
CHANGED
|
@@ -44,6 +44,7 @@ body {
|
|
|
44
44
|
.stack {
|
|
45
45
|
display: grid;
|
|
46
46
|
min-width: 0;
|
|
47
|
+
grid-auto-rows: min-content;
|
|
47
48
|
align-content: start;
|
|
48
49
|
gap: 14px;
|
|
49
50
|
}
|
|
@@ -57,6 +58,13 @@ body {
|
|
|
57
58
|
box-shadow: 0 18px 50px rgba(62, 49, 26, 0.08);
|
|
58
59
|
}
|
|
59
60
|
|
|
61
|
+
.form-panel,
|
|
62
|
+
.chat-panel,
|
|
63
|
+
.output-panel {
|
|
64
|
+
min-width: 0;
|
|
65
|
+
align-self: start;
|
|
66
|
+
}
|
|
67
|
+
|
|
60
68
|
h1,
|
|
61
69
|
h2 {
|
|
62
70
|
margin-top: 0;
|
|
@@ -441,6 +449,11 @@ textarea {
|
|
|
441
449
|
min-height: 100%;
|
|
442
450
|
}
|
|
443
451
|
|
|
452
|
+
.settings-button {
|
|
453
|
+
width: 100%;
|
|
454
|
+
justify-self: stretch;
|
|
455
|
+
}
|
|
456
|
+
|
|
444
457
|
button {
|
|
445
458
|
border: 0;
|
|
446
459
|
border-radius: 999px;
|
|
@@ -516,6 +529,13 @@ button.danger {
|
|
|
516
529
|
justify-content: flex-end;
|
|
517
530
|
}
|
|
518
531
|
|
|
532
|
+
#run-meta {
|
|
533
|
+
min-width: 0;
|
|
534
|
+
max-width: 100%;
|
|
535
|
+
overflow-wrap: anywhere;
|
|
536
|
+
text-align: right;
|
|
537
|
+
}
|
|
538
|
+
|
|
519
539
|
.sandbox-card {
|
|
520
540
|
display: grid;
|
|
521
541
|
gap: 12px;
|
|
@@ -689,6 +709,8 @@ button.danger {
|
|
|
689
709
|
}
|
|
690
710
|
|
|
691
711
|
.logs {
|
|
712
|
+
width: 100%;
|
|
713
|
+
min-width: 0;
|
|
692
714
|
min-height: 300px;
|
|
693
715
|
max-height: 42vh;
|
|
694
716
|
overflow: auto;
|
|
@@ -705,6 +727,12 @@ button.danger {
|
|
|
705
727
|
overflow-wrap: anywhere;
|
|
706
728
|
}
|
|
707
729
|
|
|
730
|
+
.output-panel {
|
|
731
|
+
display: grid;
|
|
732
|
+
gap: 12px;
|
|
733
|
+
overflow: hidden;
|
|
734
|
+
}
|
|
735
|
+
|
|
708
736
|
.log-line {
|
|
709
737
|
margin: 0 0 10px;
|
|
710
738
|
}
|
|
@@ -1160,6 +1188,56 @@ button.danger {
|
|
|
1160
1188
|
margin: 0;
|
|
1161
1189
|
}
|
|
1162
1190
|
|
|
1191
|
+
.settings-modal {
|
|
1192
|
+
width: min(980px, calc(100% - 28px));
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
.settings-modal-card {
|
|
1196
|
+
max-height: min(860px, calc(100vh - 28px));
|
|
1197
|
+
overflow: auto;
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
.settings-section {
|
|
1201
|
+
display: grid;
|
|
1202
|
+
gap: 12px;
|
|
1203
|
+
padding: 14px;
|
|
1204
|
+
border: 1px solid rgba(15, 118, 110, 0.16);
|
|
1205
|
+
border-radius: 18px;
|
|
1206
|
+
background: rgba(255, 253, 250, 0.72);
|
|
1207
|
+
}
|
|
1208
|
+
|
|
1209
|
+
.settings-section.model-role-editor {
|
|
1210
|
+
margin-top: 0;
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
.settings-section-head {
|
|
1214
|
+
display: flex;
|
|
1215
|
+
flex-wrap: wrap;
|
|
1216
|
+
gap: 8px 14px;
|
|
1217
|
+
align-items: baseline;
|
|
1218
|
+
justify-content: space-between;
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
.settings-section-head strong {
|
|
1222
|
+
color: #0f766e;
|
|
1223
|
+
text-transform: uppercase;
|
|
1224
|
+
letter-spacing: 0.08em;
|
|
1225
|
+
}
|
|
1226
|
+
|
|
1227
|
+
.settings-grid {
|
|
1228
|
+
display: grid;
|
|
1229
|
+
gap: 12px;
|
|
1230
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
.settings-wide {
|
|
1234
|
+
grid-column: 1 / -1;
|
|
1235
|
+
}
|
|
1236
|
+
|
|
1237
|
+
.settings-checks {
|
|
1238
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
1239
|
+
}
|
|
1240
|
+
|
|
1163
1241
|
.artifact-modal {
|
|
1164
1242
|
width: min(1120px, calc(100% - 28px));
|
|
1165
1243
|
max-width: 100%;
|
|
@@ -1478,6 +1556,11 @@ button.danger {
|
|
|
1478
1556
|
.artifact-modal-card {
|
|
1479
1557
|
overflow: auto;
|
|
1480
1558
|
}
|
|
1559
|
+
|
|
1560
|
+
.settings-grid,
|
|
1561
|
+
.settings-checks {
|
|
1562
|
+
grid-template-columns: 1fr;
|
|
1563
|
+
}
|
|
1481
1564
|
}
|
|
1482
1565
|
|
|
1483
1566
|
@media (max-width: 720px) {
|
|
@@ -42,15 +42,20 @@ Interactive equivalents:
|
|
|
42
42
|
|
|
43
43
|
```text
|
|
44
44
|
/models
|
|
45
|
+
/provider
|
|
45
46
|
/venice
|
|
47
|
+
/venice off
|
|
46
48
|
/route deepseek/deepseek-v4-flash
|
|
47
49
|
/model deepseek/deepseek-v4-pro
|
|
50
|
+
/spare
|
|
48
51
|
/spare openai/gpt-5.4 medium
|
|
49
52
|
/wrapper codex gpt-5.5 medium
|
|
50
53
|
/auxiliary model grsai/nano-banana-2
|
|
51
54
|
```
|
|
52
55
|
|
|
53
|
-
`/venice` keeps smart routing enabled and points both route and main roles at `venice/venice-uncensored-1-2
|
|
56
|
+
`/venice` is a toggle: it keeps smart routing enabled and points both route and main roles at `venice/venice-uncensored-1-2`; running it again or using `/venice off` restores `deepseek/deepseek-v4-flash` for route and `deepseek/deepseek-v4-pro` for main.
|
|
57
|
+
|
|
58
|
+
The web UI should expose model names as dropdowns, not free-text fields. The left panel should stay focused on common daily controls, while model-role editing and less-used switches live in an Advanced settings modal. The terminal-like capability panels belong after the runtime log so the left control panel remains short.
|
|
54
59
|
|
|
55
60
|
## OpenAI Model Reference
|
|
56
61
|
|
|
@@ -202,6 +202,16 @@ try {
|
|
|
202
202
|
if (abbreviatedSkillsResult.stdout.includes("Unknown command") || !abbreviatedSkillsResult.stdout.includes("website-app")) {
|
|
203
203
|
throw new Error("interactive slash command prefix did not auto-select the first matching command");
|
|
204
204
|
}
|
|
205
|
+
const abbreviatedVeniceResult = await runChat("/ve\n");
|
|
206
|
+
const veniceOffResult = await runChat("/venice off\n");
|
|
207
|
+
if (
|
|
208
|
+
!abbreviatedVeniceResult.stdout.includes("venice=on") ||
|
|
209
|
+
!abbreviatedVeniceResult.stdout.includes("route=venice/venice-uncensored-1-2") ||
|
|
210
|
+
!veniceOffResult.stdout.includes("venice=off") ||
|
|
211
|
+
!veniceOffResult.stdout.includes("route=deepseek/deepseek-v4-flash")
|
|
212
|
+
) {
|
|
213
|
+
throw new Error("interactive /ve prefix did not toggle Venice roles and restore DeepSeek defaults");
|
|
214
|
+
}
|
|
205
215
|
await runChat("remember that this project prefers pytest smoke tests in AGINTI.md\n/exit\n");
|
|
206
216
|
const updatedInstructions = await fs.readFile(path.join(tempRoot, "AGINTI.md"), "utf8");
|
|
207
217
|
if (!updatedInstructions.includes("pytest smoke tests")) {
|
|
@@ -113,9 +113,13 @@ assert(AUXILIARY_MODEL_CATALOG["venice-image"].some((item) => item.id === "gpt-i
|
|
|
113
113
|
const output = await runCli(["models"]);
|
|
114
114
|
assert(output.includes("/route") && output.includes("/spare") && output.includes("venice-gpt"), "aginti models output missing role details");
|
|
115
115
|
|
|
116
|
-
const interactiveOutput = await runInteractive("/venice\n
|
|
116
|
+
const interactiveOutput = await runInteractive("/venice\n");
|
|
117
|
+
assert(interactiveOutput.includes("venice=on"), "/venice did not enable Venice roles");
|
|
117
118
|
assert(interactiveOutput.includes("route=venice/venice-uncensored-1-2"), "/venice did not set Venice route role");
|
|
118
119
|
assert(interactiveOutput.includes("main=venice/venice-uncensored-1-2"), "/venice did not set Venice main role");
|
|
120
|
+
const interactiveOffOutput = await runInteractive("/venice off\n");
|
|
121
|
+
assert(interactiveOffOutput.includes("venice=off"), "/venice off did not restore DeepSeek roles");
|
|
122
|
+
assert(interactiveOffOutput.includes("route=deepseek/deepseek-v4-flash"), "/venice off did not restore DeepSeek route role");
|
|
119
123
|
|
|
120
124
|
console.log(
|
|
121
125
|
JSON.stringify(
|