aicodeman 1.30.0 → 1.32.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 +7 -6
- package/dist/config/cli-registry/schema.d.ts +8 -0
- package/dist/config/cli-registry/schema.d.ts.map +1 -1
- package/dist/config/cli-registry/schema.js +29 -0
- package/dist/config/cli-registry/schema.js.map +1 -1
- package/dist/config/cli-registry/stock.d.ts.map +1 -1
- package/dist/config/cli-registry/stock.js +62 -7
- package/dist/config/cli-registry/stock.js.map +1 -1
- package/dist/config/cli-registry/types.d.ts +62 -0
- package/dist/config/cli-registry/types.d.ts.map +1 -1
- package/dist/config/remote-wake-limits.d.ts +23 -0
- package/dist/config/remote-wake-limits.d.ts.map +1 -0
- package/dist/config/remote-wake-limits.js +23 -0
- package/dist/config/remote-wake-limits.js.map +1 -0
- package/dist/custom-model-hosts.d.ts +32 -0
- package/dist/custom-model-hosts.d.ts.map +1 -1
- package/dist/custom-model-hosts.js.map +1 -1
- package/dist/custom-model-injection-apply.d.ts +29 -1
- package/dist/custom-model-injection-apply.d.ts.map +1 -1
- package/dist/custom-model-injection-apply.js +191 -5
- package/dist/custom-model-injection-apply.js.map +1 -1
- package/dist/custom-model-injection.d.ts +35 -9
- package/dist/custom-model-injection.d.ts.map +1 -1
- package/dist/custom-model-injection.js +37 -16
- package/dist/custom-model-injection.js.map +1 -1
- package/dist/mux-interface.d.ts +12 -0
- package/dist/mux-interface.d.ts.map +1 -1
- package/dist/remote-hosts.d.ts +20 -0
- package/dist/remote-hosts.d.ts.map +1 -1
- package/dist/remote-hosts.js +33 -0
- package/dist/remote-hosts.js.map +1 -1
- package/dist/remote-wake.d.ts +446 -0
- package/dist/remote-wake.d.ts.map +1 -0
- package/dist/remote-wake.js +880 -0
- package/dist/remote-wake.js.map +1 -0
- package/dist/session-env-clamp.d.ts +12 -7
- package/dist/session-env-clamp.d.ts.map +1 -1
- package/dist/session-env-clamp.js +12 -7
- package/dist/session-env-clamp.js.map +1 -1
- package/dist/session-submit-verifier.d.ts +44 -0
- package/dist/session-submit-verifier.d.ts.map +1 -0
- package/dist/session-submit-verifier.js +122 -0
- package/dist/session-submit-verifier.js.map +1 -0
- package/dist/session.d.ts +9 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +42 -1
- package/dist/session.js.map +1 -1
- package/dist/tmux-manager.d.ts.map +1 -1
- package/dist/tmux-manager.js +9 -0
- package/dist/tmux-manager.js.map +1 -1
- package/dist/types/session.d.ts +26 -0
- package/dist/types/session.d.ts.map +1 -1
- package/dist/types/session.js.map +1 -1
- package/dist/web/public/admin-ui.js.gz +0 -0
- package/dist/web/public/api-client.c9b1cddc.js.gz +0 -0
- package/dist/web/public/app.a792bf71.js +38 -0
- package/dist/web/public/app.a792bf71.js.br +0 -0
- package/dist/web/public/app.a792bf71.js.gz +0 -0
- package/dist/web/public/approvals-ui.js.gz +0 -0
- package/dist/web/public/{constants.258b140f.js → constants.b26748e9.js} +123 -0
- package/dist/web/public/constants.b26748e9.js.br +0 -0
- package/dist/web/public/constants.b26748e9.js.gz +0 -0
- package/dist/web/public/cron-ui.js.gz +0 -0
- package/dist/web/public/entrance-animations.js.gz +0 -0
- package/dist/web/public/home-sessions.js.gz +0 -0
- package/dist/web/public/host-wake-ui.js +440 -0
- package/dist/web/public/host-wake-ui.js.br +0 -0
- package/dist/web/public/host-wake-ui.js.gz +0 -0
- package/dist/web/public/i18n.d22be5c4.js +1 -0
- package/dist/web/public/i18n.d22be5c4.js.br +0 -0
- package/dist/web/public/i18n.d22be5c4.js.gz +0 -0
- package/dist/web/public/{image-input.cd4b97c4.js → image-input.a216cf9e.js} +8 -4
- package/dist/web/public/image-input.a216cf9e.js.br +0 -0
- package/dist/web/public/image-input.a216cf9e.js.gz +0 -0
- package/dist/web/public/index.html +191 -12
- package/dist/web/public/index.html.br +0 -0
- package/dist/web/public/index.html.gz +0 -0
- package/dist/web/public/input-cjk.8bc46081.js.gz +0 -0
- package/dist/web/public/{keyboard-accessory.2cf04f17.js → keyboard-accessory.c1e7c7b7.js} +280 -15
- package/dist/web/public/keyboard-accessory.c1e7c7b7.js.br +0 -0
- package/dist/web/public/keyboard-accessory.c1e7c7b7.js.gz +0 -0
- package/dist/web/public/mobile-handlers.6f354a87.js.gz +0 -0
- package/dist/web/public/mobile-overview.js.gz +0 -0
- package/dist/web/public/mobile.6caaa28a.css.gz +0 -0
- package/dist/web/public/notification-manager.36ea4624.js.gz +0 -0
- package/dist/web/public/orchestrator-panel.js.gz +0 -0
- package/dist/web/public/{panels-ui.5b07ad14.js → panels-ui.28df5053.js} +5 -5
- package/dist/web/public/panels-ui.28df5053.js.br +0 -0
- package/dist/web/public/panels-ui.28df5053.js.gz +0 -0
- package/dist/web/public/ralph-panel.6de2d0f8.js.gz +0 -0
- package/dist/web/public/ralph-wizard.13a1831e.js.gz +0 -0
- package/dist/web/public/readmymind-ui.js.gz +0 -0
- package/dist/web/public/reboot-restore-ui.js.gz +0 -0
- package/dist/web/public/respawn-ui.ff0dae4c.js.gz +0 -0
- package/dist/web/public/sanitize-html.bc7078d6.js.gz +0 -0
- package/dist/web/public/session-lineage.js.gz +0 -0
- package/dist/web/public/session-ui.7df17fd3.js +88 -0
- package/dist/web/public/session-ui.7df17fd3.js.br +0 -0
- package/dist/web/public/session-ui.7df17fd3.js.gz +0 -0
- package/dist/web/public/settings-ui.df5ffb68.js +78 -0
- package/dist/web/public/settings-ui.df5ffb68.js.br +0 -0
- package/dist/web/public/settings-ui.df5ffb68.js.gz +0 -0
- package/dist/web/public/styles.74f312e5.css +1 -0
- package/dist/web/public/styles.74f312e5.css.br +0 -0
- package/dist/web/public/styles.74f312e5.css.gz +0 -0
- package/dist/web/public/subagent-windows.e6ca799f.js.gz +0 -0
- package/dist/web/public/sw.js.gz +0 -0
- package/dist/web/public/tab-rail-resize.42c24949.js.gz +0 -0
- package/dist/web/public/terminal-keycode229-recovery.fb91b25b.js.gz +0 -0
- package/dist/web/public/terminal-split.js +804 -0
- package/dist/web/public/terminal-split.js.br +0 -0
- package/dist/web/public/terminal-split.js.gz +0 -0
- package/dist/web/public/terminal-ui.32fbeaf6.js +2 -0
- package/dist/web/public/terminal-ui.32fbeaf6.js.br +0 -0
- package/dist/web/public/terminal-ui.32fbeaf6.js.gz +0 -0
- package/dist/web/public/ultracode-panel.js.gz +0 -0
- package/dist/web/public/ultracode-windows.js.gz +0 -0
- package/dist/web/public/upload.html.gz +0 -0
- package/dist/web/public/vendor/dompurify.min.js.gz +0 -0
- package/dist/web/public/vendor/marked.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-fit.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-serialize.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-unicode11.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-addon-webgl.min.js.gz +0 -0
- package/dist/web/public/vendor/xterm-predictive-echo.bd6882b8.js.gz +0 -0
- package/dist/web/public/vendor/xterm-zerolag-input.6fee72f2.js.gz +0 -0
- package/dist/web/public/vendor/xterm.css.gz +0 -0
- package/dist/web/public/vendor/xterm.min.js.gz +0 -0
- package/dist/web/public/voice-input.c4b51eb6.js.gz +0 -0
- package/dist/web/public/voice-pcm-worklet.js.gz +0 -0
- package/dist/web/public/webview-tabs.js.gz +0 -0
- package/dist/web/routes/custom-model-routes.d.ts +173 -0
- package/dist/web/routes/custom-model-routes.d.ts.map +1 -1
- package/dist/web/routes/custom-model-routes.js +628 -11
- package/dist/web/routes/custom-model-routes.js.map +1 -1
- package/dist/web/routes/index.d.ts +1 -1
- package/dist/web/routes/index.d.ts.map +1 -1
- package/dist/web/routes/index.js +1 -1
- package/dist/web/routes/index.js.map +1 -1
- package/dist/web/routes/session-routes.d.ts +6 -1
- package/dist/web/routes/session-routes.d.ts.map +1 -1
- package/dist/web/routes/session-routes.js +448 -17
- package/dist/web/routes/session-routes.js.map +1 -1
- package/dist/web/schemas.d.ts +15 -0
- package/dist/web/schemas.d.ts.map +1 -1
- package/dist/web/schemas.js +76 -0
- package/dist/web/schemas.js.map +1 -1
- package/dist/web/server.d.ts +21 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +142 -9
- package/dist/web/server.js.map +1 -1
- package/dist/web/sse-events.d.ts +25 -2
- package/dist/web/sse-events.d.ts.map +1 -1
- package/dist/web/sse-events.js +30 -3
- package/dist/web/sse-events.js.map +1 -1
- package/package.json +1 -1
- package/skills/codeman/SKILL.md +75 -26
- package/skills/codeman/preamble.sh +66 -19
- package/skills/codeman/reference/recipes.md +1 -1
- package/dist/web/public/app.6d2dc4e8.js +0 -38
- package/dist/web/public/app.6d2dc4e8.js.br +0 -0
- package/dist/web/public/app.6d2dc4e8.js.gz +0 -0
- package/dist/web/public/constants.258b140f.js.br +0 -0
- package/dist/web/public/constants.258b140f.js.gz +0 -0
- package/dist/web/public/i18n.5f897ed5.js +0 -1
- package/dist/web/public/i18n.5f897ed5.js.br +0 -0
- package/dist/web/public/i18n.5f897ed5.js.gz +0 -0
- package/dist/web/public/image-input.cd4b97c4.js.br +0 -0
- package/dist/web/public/image-input.cd4b97c4.js.gz +0 -0
- package/dist/web/public/keyboard-accessory.2cf04f17.js.br +0 -0
- package/dist/web/public/keyboard-accessory.2cf04f17.js.gz +0 -0
- package/dist/web/public/panels-ui.5b07ad14.js.br +0 -0
- package/dist/web/public/panels-ui.5b07ad14.js.gz +0 -0
- package/dist/web/public/session-ui.42b81477.js +0 -77
- package/dist/web/public/session-ui.42b81477.js.br +0 -0
- package/dist/web/public/session-ui.42b81477.js.gz +0 -0
- package/dist/web/public/settings-ui.58f1d756.js +0 -67
- package/dist/web/public/settings-ui.58f1d756.js.br +0 -0
- package/dist/web/public/settings-ui.58f1d756.js.gz +0 -0
- package/dist/web/public/styles.e6edfb0b.css +0 -1
- package/dist/web/public/styles.e6edfb0b.css.br +0 -0
- package/dist/web/public/styles.e6edfb0b.css.gz +0 -0
- package/dist/web/public/terminal-ui.4f8d5820.js +0 -2
- package/dist/web/public/terminal-ui.4f8d5820.js.br +0 -0
- package/dist/web/public/terminal-ui.4f8d5820.js.gz +0 -0
|
@@ -124,12 +124,15 @@ Object.assign(CodemanApp.prototype, {
|
|
|
124
124
|
// 20 photos don't crawl through serially.
|
|
125
125
|
_uploadConcurrency: 3,
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
/** Upload a batch and normally insert its paths into the active terminal.
|
|
128
|
+
* The prompt composer passes `{ insert: false }` so it can put those paths
|
|
129
|
+
* into its textarea instead. Returns successful paths in selection order. */
|
|
130
|
+
async _uploadAndInsertImages(fileList, options = {}) {
|
|
128
131
|
const sessionId = this.activeSessionId;
|
|
129
|
-
if (!sessionId) return;
|
|
132
|
+
if (!sessionId) return [];
|
|
130
133
|
|
|
131
134
|
let files = Array.from(fileList || []);
|
|
132
|
-
if (files.length === 0) return;
|
|
135
|
+
if (files.length === 0) return [];
|
|
133
136
|
|
|
134
137
|
// Cap the batch and tell the user what got dropped (no silent truncation).
|
|
135
138
|
let capped = false;
|
|
@@ -175,7 +178,7 @@ Object.assign(CodemanApp.prototype, {
|
|
|
175
178
|
await Promise.all(Array.from({ length: Math.min(this._uploadConcurrency, total) }, () => worker()));
|
|
176
179
|
|
|
177
180
|
const paths = results.filter(Boolean);
|
|
178
|
-
if (paths.length > 0) {
|
|
181
|
+
if (paths.length > 0 && options.insert !== false) {
|
|
179
182
|
// Insert all paths in one shot, space-separated, in selection order.
|
|
180
183
|
await this.sendInput(paths.join(' '));
|
|
181
184
|
}
|
|
@@ -187,6 +190,7 @@ Object.assign(CodemanApp.prototype, {
|
|
|
187
190
|
if (capped) parts.push(`max ${this._maxBatchImages} per batch`);
|
|
188
191
|
const tone = paths.length > 0 ? (failed > 0 || capped ? 'info' : 'success') : 'error';
|
|
189
192
|
this.showToast(parts.join(' · ') || 'No images uploaded', tone);
|
|
193
|
+
return paths;
|
|
190
194
|
},
|
|
191
195
|
|
|
192
196
|
async _uploadPasteImage(sessionId, file) {
|
|
Binary file
|
|
Binary file
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<link rel="manifest" href="manifest.json">
|
|
17
17
|
<title>Codeman</title>
|
|
18
18
|
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cdefs%3E%3ClinearGradient id='g' x1='0%25' y1='0%25' x2='100%25' y2='100%25'%3E%3Cstop offset='0%25' stop-color='%2360a5fa'/%3E%3Cstop offset='100%25' stop-color='%233b82f6'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width='32' height='32' rx='6' fill='%230a0a0a'/%3E%3Cpath d='M18 4L8 18h6l-2 10 10-14h-6z' fill='url(%23g)'/%3E%3C/svg%3E">
|
|
19
|
-
<link rel="stylesheet" href="styles.
|
|
19
|
+
<link rel="stylesheet" href="styles.74f312e5.css">
|
|
20
20
|
<link rel="stylesheet" href="mobile.6caaa28a.css" media="(max-width: 1023px)">
|
|
21
21
|
<!-- xterm.css loaded async — terminal won't display until xterm.js runs anyway -->
|
|
22
22
|
<link rel="preload" href="vendor/xterm.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
<!-- Symbols font before the terminal first paints — a late-loading icon font
|
|
28
28
|
leaves tofu in xterm's glyph atlas until something forces a re-render. -->
|
|
29
29
|
<link rel="preload" href="fonts/symbols-nerd-font-mono.woff2" as="font" type="font/woff2" crossorigin>
|
|
30
|
-
<link rel="preload" href="constants.
|
|
31
|
-
<link rel="preload" href="app.
|
|
30
|
+
<link rel="preload" href="constants.b26748e9.js" as="script">
|
|
31
|
+
<link rel="preload" href="app.a792bf71.js" as="script">
|
|
32
32
|
<!-- Self-hosted xterm.js — eliminates CDN DNS/TLS latency (~100ms).
|
|
33
33
|
'defer' preserves execution order (xterm loads before fit addon). -->
|
|
34
34
|
<script defer src="vendor/xterm.min.js"></script>
|
|
@@ -191,6 +191,7 @@
|
|
|
191
191
|
</button>
|
|
192
192
|
<button class="btn-icon-header btn-file-viewer" onclick="app.toggleFileBrowserButton()" title="File Viewer" aria-label="Open file viewer" aria-expanded="false"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg></button>
|
|
193
193
|
<button class="btn-icon-header btn-multimonitor btn-multimonitor--hidden" onclick="app.launchMultiMonitor()" title="Open Codeman across all displays" aria-label="Open Codeman across all displays"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="4" width="13" height="9" rx="1.5"/><rect x="11" y="9" width="11" height="8" rx="1.5"/></svg></button>
|
|
194
|
+
<button class="btn-icon-header btn-split btn-split--hidden" onclick="app.openSplitPicker(event)" title="Split: open a second session beside this one" aria-label="Split: open a second session beside this one" aria-pressed="false"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="3" width="20" height="18" rx="2"/><line x1="12" y1="3" x2="12" y2="21"/></svg></button>
|
|
194
195
|
<button class="btn-icon-header btn-ultracode-agents btn-ultracode-agents--hidden" onclick="app.toggleUltracodeAgentsPanel()" title="Ultracode / Workflow agents" aria-label="Open ultracode workflow agents"><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="6" cy="6" r="2.5"/><circle cx="6" cy="18" r="2.5"/><circle cx="18" cy="12" r="2.5"/><path d="M8.2 7.2 15.6 11M8.2 16.8 15.6 13"/></svg></button>
|
|
195
196
|
<div class="header-plan-usage header-plan-usage--hidden" id="planUsageChip" title="Claude and Codex plan usage limits">—</div>
|
|
196
197
|
<button class="btn-icon-header btn-notifications" onclick="app.toggleNotifications()" title="Notifications" aria-label="Toggle notifications" style="display:none;">
|
|
@@ -213,6 +214,18 @@
|
|
|
213
214
|
<button class="offline-banner-retry" id="offlineBannerRetry" onclick="app.retryConnection()">Retry now</button>
|
|
214
215
|
</div>
|
|
215
216
|
|
|
217
|
+
<!-- Remote-host unreachable: the machine SLEEPS, the local ssh pane stalls
|
|
218
|
+
silently (send-keys succeeds against it, so typed input would vanish) and
|
|
219
|
+
Codeman can wake it. Amber, not red: the session is fine, the host is
|
|
220
|
+
asleep. Without a configured wake target the action becomes "Configure
|
|
221
|
+
WoL" and opens the small config dialog. -->
|
|
222
|
+
<div class="offline-banner host-wake-banner" id="hostWakeBanner" role="status" hidden>
|
|
223
|
+
<span class="offline-banner-dot" aria-hidden="true"></span>
|
|
224
|
+
<span class="offline-banner-text" id="hostWakeBannerText">Remote host is unreachable</span>
|
|
225
|
+
<span class="offline-banner-detail" id="hostWakeBannerDetail"></span>
|
|
226
|
+
<button class="offline-banner-retry" id="hostWakeBannerAction" onclick="app.hostWakeAction()">Wake</button>
|
|
227
|
+
</div>
|
|
228
|
+
|
|
216
229
|
<!-- Reboot-restore offer: shown when the server found sessions a host reboot
|
|
217
230
|
killed and is asking whether to rebuild them. Populated by
|
|
218
231
|
reboot-restore-ui.js; nothing is created until the user clicks. -->
|
|
@@ -668,6 +681,14 @@
|
|
|
668
681
|
<button class="run-mode-option" data-mode="omp" onclick="app.setRunMode('omp')">
|
|
669
682
|
<span class="run-mode-dot omp"></span>OMP
|
|
670
683
|
</button>
|
|
684
|
+
<!-- Custom Model Endpoint Profiles (docs/custom-model-endpoints-plan.md): one
|
|
685
|
+
generated entry per (harness, saved endpoint) pair, e.g. "Claude Code
|
|
686
|
+
(llama.cpp)". Built entirely by _refreshCustomModelRunOptions() — hidden
|
|
687
|
+
when the feature is off or no endpoint has a usable default model, never
|
|
688
|
+
a fixed per-harness duplicate in this markup. -->
|
|
689
|
+
<div class="run-mode-sep" id="runModeCustomModelSep" style="display: none;"></div>
|
|
690
|
+
<div class="run-mode-header" id="runModeCustomModelHeader" style="display: none;">Custom Endpoints</div>
|
|
691
|
+
<div class="run-mode-custom-models" id="runModeCustomModels"></div>
|
|
671
692
|
<div class="run-mode-sep"></div>
|
|
672
693
|
<button class="run-mode-option" data-mode="shell" onclick="app.setRunMode('shell')">
|
|
673
694
|
<span class="run-mode-dot shell"></span>Terminal / Shell
|
|
@@ -920,6 +941,67 @@
|
|
|
920
941
|
</div>
|
|
921
942
|
</div>
|
|
922
943
|
|
|
944
|
+
<!-- Custom Model Endpoint Profiles: "which model" picker (docs/custom-model-endpoints-plan.md).
|
|
945
|
+
Shown only when the chosen endpoint has more than one discovered model — see
|
|
946
|
+
selectCustomModelEntry() in session-ui.js, which skips straight to launch otherwise. -->
|
|
947
|
+
<div class="modal" id="customModelPickModal">
|
|
948
|
+
<div class="modal-backdrop" onclick="app.closeCustomModelPickModal()"></div>
|
|
949
|
+
<div class="modal-content modal-sm">
|
|
950
|
+
<div class="modal-header">
|
|
951
|
+
<h3 id="customModelPickTitle">Choose a model</h3>
|
|
952
|
+
<button class="modal-close" onclick="app.closeCustomModelPickModal()" aria-label="Close model picker">×</button>
|
|
953
|
+
</div>
|
|
954
|
+
<div class="modal-body">
|
|
955
|
+
<p class="form-hint" id="customModelPickHint"></p>
|
|
956
|
+
<div id="customModelPickList" class="run-mode-custom-models"></div>
|
|
957
|
+
</div>
|
|
958
|
+
</div>
|
|
959
|
+
</div>
|
|
960
|
+
|
|
961
|
+
<!-- Custom Model Endpoint Profiles: llama-swap model-swap confirmation
|
|
962
|
+
(docs/custom-model-endpoints-plan.md) — replaces a native confirm()
|
|
963
|
+
popup, shown when switching would unload a model another live
|
|
964
|
+
session is actively using. See _confirmModelSwap() in session-ui.js. -->
|
|
965
|
+
<div class="modal" id="customModelSwapConfirmModal">
|
|
966
|
+
<div class="modal-backdrop" onclick="app._resolveModelSwapConfirm(false)"></div>
|
|
967
|
+
<div class="modal-content modal-sm">
|
|
968
|
+
<div class="modal-header">
|
|
969
|
+
<h3>Switch models?</h3>
|
|
970
|
+
<button class="modal-close" onclick="app._resolveModelSwapConfirm(false)" aria-label="Cancel">×</button>
|
|
971
|
+
</div>
|
|
972
|
+
<div class="modal-body">
|
|
973
|
+
<p class="form-hint" id="customModelSwapConfirmMessage"></p>
|
|
974
|
+
</div>
|
|
975
|
+
<div class="modal-footer">
|
|
976
|
+
<button class="btn-toolbar" onclick="app._resolveModelSwapConfirm(false)">Cancel</button>
|
|
977
|
+
<button class="btn-toolbar btn-primary" onclick="app._resolveModelSwapConfirm(true)">Switch anyway</button>
|
|
978
|
+
</div>
|
|
979
|
+
</div>
|
|
980
|
+
</div>
|
|
981
|
+
|
|
982
|
+
<!-- Custom Model Endpoint Profiles: context-window-too-small warning
|
|
983
|
+
(docs/custom-model-endpoints-plan.md) — shown before launching a CLI
|
|
984
|
+
whose own fixed system-prompt/tool-schema overhead exceeds the
|
|
985
|
+
model's real discovered context, which guarantees a first-message
|
|
986
|
+
failure regardless of CLAUDE_CODE_MAX_CONTEXT_TOKENS. See
|
|
987
|
+
_confirmContextWarning() in session-ui.js. -->
|
|
988
|
+
<div class="modal" id="customModelContextWarningModal">
|
|
989
|
+
<div class="modal-backdrop" onclick="app._resolveContextWarningConfirm(false)"></div>
|
|
990
|
+
<div class="modal-content modal-sm">
|
|
991
|
+
<div class="modal-header">
|
|
992
|
+
<h3>Context window too small</h3>
|
|
993
|
+
<button class="modal-close" onclick="app._resolveContextWarningConfirm(false)" aria-label="Cancel">×</button>
|
|
994
|
+
</div>
|
|
995
|
+
<div class="modal-body">
|
|
996
|
+
<p class="form-hint" id="customModelContextWarningMessage" style="white-space: pre-wrap;"></p>
|
|
997
|
+
</div>
|
|
998
|
+
<div class="modal-footer">
|
|
999
|
+
<button class="btn-toolbar" onclick="app._resolveContextWarningConfirm(false)">Cancel</button>
|
|
1000
|
+
<button class="btn-toolbar btn-primary" onclick="app._resolveContextWarningConfirm(true)">Launch anyway</button>
|
|
1001
|
+
</div>
|
|
1002
|
+
</div>
|
|
1003
|
+
</div>
|
|
1004
|
+
|
|
923
1005
|
<!-- Cron Jobs Modal -->
|
|
924
1006
|
<div class="modal" id="cronModal">
|
|
925
1007
|
<div class="modal-backdrop" onclick="app.closeCron()"></div>
|
|
@@ -1843,6 +1925,7 @@
|
|
|
1843
1925
|
<label class="set-chip" data-preview="header" data-preview-order="9"><input type="checkbox" id="appSettingsShowAttachmentsButton"><svg class="set-chip-ico" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m21.44 11.05-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"/></svg><span>Attachments</span></label>
|
|
1844
1926
|
<label class="set-chip" data-preview="header" data-preview-order="10"><input type="checkbox" id="appSettingsShowFileViewerButton"><svg class="set-chip-ico" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/></svg><span>File Viewer</span></label>
|
|
1845
1927
|
<label class="set-chip" data-preview="header" data-preview-order="11"><input type="checkbox" id="appSettingsShowMultiMonitorButton"><svg class="set-chip-ico" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="4" width="13" height="9" rx="1.5"/><rect x="11" y="9" width="11" height="8" rx="1.5"/></svg><span>Multi-monitor</span></label>
|
|
1928
|
+
<label class="set-chip" data-preview="header" data-preview-order="11.5"><input type="checkbox" id="appSettingsShowSplitButton"><svg class="set-chip-ico" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="3" width="20" height="18" rx="2"/><line x1="12" y1="3" x2="12" y2="21"/></svg><span>Split</span></label>
|
|
1846
1929
|
<label class="set-chip" data-preview="header" data-preview-order="13" data-preview-text="42%"><input type="checkbox" id="appSettingsShowPlanUsageLimits"><svg class="set-chip-ico" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 18a8 8 0 1 1 16 0"/><path d="M12 18l4.5-5"/></svg><span>Plan Usage</span></label>
|
|
1847
1930
|
<label class="set-chip" data-preview="header" data-preview-order="14"><input type="checkbox" id="appSettingsShowLifecycleLog"><svg class="set-chip-ico" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg><span>Lifecycle Log</span></label>
|
|
1848
1931
|
</div>
|
|
@@ -2216,6 +2299,60 @@
|
|
|
2216
2299
|
</div>
|
|
2217
2300
|
</div>
|
|
2218
2301
|
</div>
|
|
2302
|
+
|
|
2303
|
+
<div class="set-group" id="customModelEndpointsGroup">
|
|
2304
|
+
<div class="set-group-head"><h4>Custom model endpoints</h4><span class="set-scope">synced</span></div>
|
|
2305
|
+
<p class="set-group-hint">Point a harness at your own OpenAI-compatible server (llama.cpp, vLLM, DGX Spark, Azure AI Foundry, OpenRouter) instead of its native cloud backend. When on, the Run menu offers an extra entry per harness that supports it, per saved endpoint.</p>
|
|
2306
|
+
<div class="set-group-body">
|
|
2307
|
+
<div class="set-row" data-search="custom model endpoint llama.cpp local llm run menu picker">
|
|
2308
|
+
<div class="set-row-text">
|
|
2309
|
+
<span class="set-row-label">Enable custom model endpoints</span>
|
|
2310
|
+
<span class="set-row-desc">Adds a per-endpoint entry to the Run menu for every harness that can redirect to one.</span>
|
|
2311
|
+
</div>
|
|
2312
|
+
<label class="switch switch-sm"><input type="checkbox" id="appSettingsCustomModelEndpoints" onchange="app.applyCustomModelEndpointsVisibility()"><span class="slider"></span></label>
|
|
2313
|
+
</div>
|
|
2314
|
+
<!-- Gated on the toggle above (applyCustomModelEndpointsVisibility): with the
|
|
2315
|
+
feature off, a list of endpoints that do nothing is worse than nothing. -->
|
|
2316
|
+
<div id="customModelEndpointsBody" style="display:none">
|
|
2317
|
+
<div id="customModelHostsList" class="set-group-body" data-search="endpoints"></div>
|
|
2318
|
+
<button type="button" class="btn-toolbar btn-sm" id="customModelHostAddBtn" onclick="app.openCustomModelHostEditor()">+ Add endpoint</button>
|
|
2319
|
+
<div id="customModelHostEditor" class="set-inline-form" style="display:none">
|
|
2320
|
+
<h5 id="customModelHostEditorTitle">Add endpoint</h5>
|
|
2321
|
+
<div class="set-row has-field">
|
|
2322
|
+
<div class="set-row-text"><span class="set-row-label">Id</span><span class="set-row-desc">Short, stable — used in URLs, never shown to the CLI.</span></div>
|
|
2323
|
+
<input type="text" id="customModelHostId" class="set-input" placeholder="llama-cpp-local">
|
|
2324
|
+
</div>
|
|
2325
|
+
<div class="set-row has-field">
|
|
2326
|
+
<div class="set-row-text"><span class="set-row-label">Label</span></div>
|
|
2327
|
+
<input type="text" id="customModelHostLabel" class="set-input" placeholder="llama.cpp (local)">
|
|
2328
|
+
</div>
|
|
2329
|
+
<div class="set-row has-field">
|
|
2330
|
+
<div class="set-row-text"><span class="set-row-label">Base URL</span></div>
|
|
2331
|
+
<input type="text" id="customModelHostBaseUrl" class="set-input" placeholder="http://192.168.1.50:8080">
|
|
2332
|
+
</div>
|
|
2333
|
+
<div class="set-row has-field">
|
|
2334
|
+
<div class="set-row-text"><span class="set-row-label">API key</span><span class="set-row-desc">Optional. Left blank on edit keeps the existing key.</span></div>
|
|
2335
|
+
<input type="password" id="customModelHostApiKey" class="set-input" autocomplete="new-password">
|
|
2336
|
+
</div>
|
|
2337
|
+
<div class="set-row has-field">
|
|
2338
|
+
<div class="set-row-text"><span class="set-row-label">Auth header</span><span class="set-row-desc">Never send both — some servers hang indefinitely.</span></div>
|
|
2339
|
+
<select id="customModelHostAuthStyle" class="set-select">
|
|
2340
|
+
<option value="bearer">Authorization: Bearer (default)</option>
|
|
2341
|
+
<option value="api-key">api-key header (Azure)</option>
|
|
2342
|
+
</select>
|
|
2343
|
+
</div>
|
|
2344
|
+
<div class="set-row has-field">
|
|
2345
|
+
<div class="set-row-text"><span class="set-row-label">Default model</span><span class="set-row-desc">What the Run-menu picker applies for this endpoint. Discover models first.</span></div>
|
|
2346
|
+
<select id="customModelHostDefaultModel" class="set-select" disabled></select>
|
|
2347
|
+
</div>
|
|
2348
|
+
<div class="set-row-actions">
|
|
2349
|
+
<button type="button" class="btn-toolbar btn-sm" onclick="app.saveCustomModelHostFromEditor()">Save</button>
|
|
2350
|
+
<button type="button" class="btn-toolbar btn-sm" onclick="app.closeCustomModelHostEditor()">Cancel</button>
|
|
2351
|
+
</div>
|
|
2352
|
+
</div>
|
|
2353
|
+
</div>
|
|
2354
|
+
</div>
|
|
2355
|
+
</div>
|
|
2219
2356
|
</section>
|
|
2220
2357
|
|
|
2221
2358
|
<!-- ══ Agents & CLIs ═════════════════════════════════════════ -->
|
|
@@ -2878,6 +3015,11 @@
|
|
|
2878
3015
|
<input type="number" id="remoteHostPort" placeholder="22" min="1" max="65535" autocomplete="off">
|
|
2879
3016
|
<span class="form-hint">Optional. Leave blank for the default port 22.</span>
|
|
2880
3017
|
</div>
|
|
3018
|
+
<div class="form-row">
|
|
3019
|
+
<label>Wake-on-LAN MAC</label>
|
|
3020
|
+
<input type="text" id="remoteHostWakeMac" placeholder="04:d9:f5:80:c6:58" autocomplete="off" autocapitalize="off" spellcheck="false">
|
|
3021
|
+
<span class="form-hint">Optional. Comma-separated for several NICs. Codeman sends the magic packet itself so a sleeping host can be woken from the session banner.</span>
|
|
3022
|
+
</div>
|
|
2881
3023
|
<div class="form-row">
|
|
2882
3024
|
<label>Codex Command Override</label>
|
|
2883
3025
|
<input type="text" id="remoteHostCodexCommand" placeholder="exec codx personal" autocomplete="off" autocapitalize="off" spellcheck="false">
|
|
@@ -2886,6 +3028,11 @@
|
|
|
2886
3028
|
<details class="advanced-options">
|
|
2887
3029
|
<summary><svg class="set-adv-chev" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M6 9l6 6 6-6"/></svg><span>Advanced SSH</span></summary>
|
|
2888
3030
|
<div class="advanced-options-content">
|
|
3031
|
+
<div class="form-row">
|
|
3032
|
+
<label>Wake Command</label>
|
|
3033
|
+
<input type="text" id="remoteHostWakeCommand" placeholder="/home/user/bin/wake-this-host" autocomplete="off" autocapitalize="off" autocorrect="off" spellcheck="false">
|
|
3034
|
+
<span class="form-hint">Optional override for the MAC above (takes precedence). A single executable path, run without a shell — use it when the host needs a router/other machine to send the packet.</span>
|
|
3035
|
+
</div>
|
|
2889
3036
|
<div class="form-row">
|
|
2890
3037
|
<label>Identity File</label>
|
|
2891
3038
|
<input type="text" id="remoteHostIdentityFile" placeholder="~/.ssh/remote_ed25519" autocomplete="off" autocapitalize="off" autocorrect="off" spellcheck="false">
|
|
@@ -3481,6 +3628,36 @@
|
|
|
3481
3628
|
text is set via value/textContent only: predictor output derives from
|
|
3482
3629
|
observable (injectable) content, and the explicit click here is the
|
|
3483
3630
|
security boundary (nothing is ever auto-sent). -->
|
|
3631
|
+
<!-- Wake-on-LAN setup for a remote host whose session cannot be woken yet. Kept
|
|
3632
|
+
deliberately small (host is fixed, only the wake fields are editable) so it can
|
|
3633
|
+
be opened from the banner with one click. Persists via PUT /api/remote-hosts/:id. -->
|
|
3634
|
+
<div class="modal" id="wakeConfigModal">
|
|
3635
|
+
<div class="modal-backdrop" onclick="app.closeWakeConfigDialog()"></div>
|
|
3636
|
+
<div class="modal-content">
|
|
3637
|
+
<div class="modal-header">
|
|
3638
|
+
<h3>Wake-on-LAN · <span id="wakeConfigHostLabel"></span></h3>
|
|
3639
|
+
<button class="modal-close" onclick="app.closeWakeConfigDialog()" aria-label="Close">×</button>
|
|
3640
|
+
</div>
|
|
3641
|
+
<div class="modal-body">
|
|
3642
|
+
<div class="form-row">
|
|
3643
|
+
<label>MAC address(es)</label>
|
|
3644
|
+
<input type="text" id="wakeConfigMac" placeholder="04:d9:f5:80:c6:58" autocomplete="off" autocapitalize="off" autocorrect="off" spellcheck="false">
|
|
3645
|
+
<span class="form-hint">Comma-separated for several NICs. Codeman sends the magic packet itself (UDP port 9, broadcast).</span>
|
|
3646
|
+
</div>
|
|
3647
|
+
<div class="form-row">
|
|
3648
|
+
<label>Wake command (optional)</label>
|
|
3649
|
+
<input type="text" id="wakeConfigCommand" placeholder="/home/user/bin/wake-this-host" autocomplete="off" autocapitalize="off" autocorrect="off" spellcheck="false">
|
|
3650
|
+
<span class="form-hint">Takes precedence over the MAC. A single executable path, run without a shell.</span>
|
|
3651
|
+
</div>
|
|
3652
|
+
<div class="form-hint" id="wakeConfigStatus"></div>
|
|
3653
|
+
</div>
|
|
3654
|
+
<div class="modal-footer">
|
|
3655
|
+
<button class="btn-toolbar" onclick="app.closeWakeConfigDialog()">Cancel</button>
|
|
3656
|
+
<button class="btn-toolbar btn-primary" id="wakeConfigSave" onclick="app.saveWakeConfig()">Save</button>
|
|
3657
|
+
</div>
|
|
3658
|
+
</div>
|
|
3659
|
+
</div>
|
|
3660
|
+
|
|
3484
3661
|
<div class="modal" id="readMyMindModal">
|
|
3485
3662
|
<div class="modal-backdrop" onclick="app.closeReadMyMind()"></div>
|
|
3486
3663
|
<div class="modal-content readmymind-modal">
|
|
@@ -3530,32 +3707,34 @@
|
|
|
3530
3707
|
<div class="approvals-list"></div>
|
|
3531
3708
|
</div>
|
|
3532
3709
|
|
|
3533
|
-
<script defer src="constants.
|
|
3534
|
-
<script defer src="i18n.
|
|
3710
|
+
<script defer src="constants.b26748e9.js"></script>
|
|
3711
|
+
<script defer src="i18n.d22be5c4.js"></script>
|
|
3535
3712
|
<script defer src="mobile-handlers.6f354a87.js"></script>
|
|
3536
3713
|
<script defer src="voice-input.c4b51eb6.js"></script>
|
|
3537
3714
|
<script defer src="notification-manager.36ea4624.js"></script>
|
|
3538
|
-
<script defer src="keyboard-accessory.
|
|
3715
|
+
<script defer src="keyboard-accessory.c1e7c7b7.js"></script>
|
|
3539
3716
|
<script defer src="input-cjk.8bc46081.js"></script>
|
|
3540
3717
|
<!-- Forwards committed input events that xterm drops on Android/GBoard soft keyboards. Must precede terminal-ui.js. -->
|
|
3541
3718
|
<script defer src="terminal-keycode229-recovery.fb91b25b.js"></script>
|
|
3542
3719
|
<!-- Hardened markdown HTML sanitizer (wires DOMPurify). Must precede app.js. -->
|
|
3543
3720
|
<script defer src="sanitize-html.bc7078d6.js"></script>
|
|
3544
|
-
<script defer src="app.
|
|
3721
|
+
<script defer src="app.a792bf71.js"></script>
|
|
3545
3722
|
<script defer src="tab-rail-resize.42c24949.js"></script>
|
|
3546
|
-
<script defer src="terminal-ui.
|
|
3723
|
+
<script defer src="terminal-ui.32fbeaf6.js"></script>
|
|
3724
|
+
<script defer src="terminal-split.js"></script>
|
|
3547
3725
|
<script defer src="respawn-ui.ff0dae4c.js"></script>
|
|
3548
3726
|
<script defer src="ralph-panel.6de2d0f8.js"></script>
|
|
3549
3727
|
<script defer src="orchestrator-panel.js"></script>
|
|
3550
3728
|
<script defer src="cron-ui.js"></script>
|
|
3551
|
-
<script defer src="settings-ui.
|
|
3552
|
-
<script defer src="panels-ui.
|
|
3729
|
+
<script defer src="settings-ui.df5ffb68.js"></script>
|
|
3730
|
+
<script defer src="panels-ui.28df5053.js"></script>
|
|
3553
3731
|
<script defer src="readmymind-ui.js"></script>
|
|
3554
3732
|
<script defer src="ultracode-panel.js"></script>
|
|
3555
3733
|
<script defer src="approvals-ui.js"></script>
|
|
3556
3734
|
<script defer src="reboot-restore-ui.js"></script>
|
|
3557
3735
|
<script defer src="admin-ui.js"></script>
|
|
3558
|
-
<script defer src="session-ui.
|
|
3736
|
+
<script defer src="session-ui.7df17fd3.js"></script>
|
|
3737
|
+
<script defer src="host-wake-ui.js"></script>
|
|
3559
3738
|
<script defer src="webview-tabs.js"></script>
|
|
3560
3739
|
<script defer src="mobile-overview.js"></script>
|
|
3561
3740
|
<script defer src="home-sessions.js"></script>
|
|
@@ -3565,6 +3744,6 @@
|
|
|
3565
3744
|
<script defer src="subagent-windows.e6ca799f.js"></script>
|
|
3566
3745
|
<script defer src="ultracode-windows.js"></script>
|
|
3567
3746
|
<script defer src="session-lineage.js"></script>
|
|
3568
|
-
<script defer src="image-input.
|
|
3747
|
+
<script defer src="image-input.a216cf9e.js"></script>
|
|
3569
3748
|
</body>
|
|
3570
3749
|
</html>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|