diff --git a/dsh/templates/chat.html b/dsh/templates/chat.html
index e3d5f35..efcdc6a 100644
--- a/dsh/templates/chat.html
+++ b/dsh/templates/chat.html
@@ -38,6 +38,28 @@
.modelrow label { font-size: 12px; color: #777; }
+
+ .composer { display: flex; flex-direction: column; gap: 8px; padding: 8px 12px; }
+ #input {
+ width: 100%; min-height: 2.9em; padding: 9px 11px; box-sizing: border-box;
+ border: 1px solid #ddd; border-radius: 8px;
+ font: 15px/1.4 var(--font-family, sans-serif); resize: vertical;
+ }
+ .send-row { display: flex; justify-content: flex-end; }
+ #sendBtn { border: none; border-radius: 8px; padding: 9px 20px; cursor: pointer; background: var(--primary, #0075de); color: #fff; font-size: 14px; }
+ #toolsPanel { border-top: 1px solid var(--hairline, #e6e6e6); }
+ #toolsToggle {
+ width: 100%; text-align: left; background: none; border: none; cursor: pointer;
+ padding: 8px 12px; color: #666; font-size: 12px; display: flex; align-items: center; gap: 6px;
+ }
+ #toolsArrow { font-size: 11px; }
+ #toolsBody { padding: 0 12px 10px; }
+ #toolsBody.hidden { display: none; }
+ .tools-row { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 6px; }
+ .tools-row input[type=text], .tools-row input[type=file] { flex: 2 1 170px; border: 1px solid #ddd; border-radius: 8px; padding: 6px 10px; font-size: 13px; }
+ .tools-row button { flex: 0 0 auto; border: 1px solid #ddd; border-radius: 8px; padding: 6px 10px; cursor: pointer; background: #fff; }
+ .modelrow { display: flex; gap: 8px; align-items: center; }
+ .modelrow select { border: 1px solid #ddd; border-radius: 8px; padding: 5px 8px; font-size: 13px; }
@media (max-width: 720px) {
#menuBtn { display: inline-flex !important; }
#sidebar {
@@ -47,7 +69,9 @@
}
#sidebar.open { transform: translateX(0); }
.chat-col { flex: 1; min-width: 0; }
- .composer input, .composer button, .modelrow select { flex: 1 1 100% !important; width: 100% !important; }
+ .tools-row { flex-direction: column; }
+ .tools-row input[type=text], .tools-row input[type=file], .tools-row button { flex: 1 1 100% !important; width: 100% !important; }
+ .send-row { justify-content: flex-end; }
#input { font-size: 16px; } /* avoid iOS auto-zoom */
}
@@ -71,24 +95,26 @@
@@ -232,6 +258,23 @@
logEl.scrollTop = logEl.scrollHeight;
});
+ // Ctrl/Cmd+Enter sends in the multiline box
+ input.addEventListener('keydown', (e) => {
+ if (e.key === 'Enter' && (e.ctrlKey || e.metaKey)) { e.preventDefault(); form.requestSubmit(); }
+ });
+
+ // collapsible model & tools panel (persisted)
+ const toolsBody = document.getElementById('toolsBody');
+ const toolsArrow = document.getElementById('toolsArrow');
+ const toolsToggle = document.getElementById('toolsToggle');
+ function applyTools(open) {
+ if (open) { toolsBody.classList.remove('hidden'); toolsArrow.textContent = '▾'; }
+ else { toolsBody.classList.add('hidden'); toolsArrow.textContent = '▴'; }
+ localStorage.setItem('dshTools', open ? '1' : '0');
+ }
+ applyTools(localStorage.getItem('dshTools') !== '0');
+ toolsToggle.addEventListener('click', () => applyTools(toolsBody.classList.contains('hidden')));
+
const imgIn = document.getElementById('imgIn'); window.__img = null;
imgIn.addEventListener('change', () => { const f = imgIn.files[0]; if (!f) return; const r = new FileReader(); r.onload = () => { window.__img = r.result; imgIn.title = f.name + ' ✓'; }; r.readAsDataURL(f); });
diff --git a/todo.txt b/todo.txt
index d6db85e..e6438ce 100644
--- a/todo.txt
+++ b/todo.txt
@@ -1,12 +1,12 @@
-(B) Add change-password page to portal +project:family-home-lab +agent:family_home_lab
+x 2026-08-25 Add change-password page to portal +project:family-home-lab +agent:family_home_lab
x 2026-08-25 DeepSeek Remember chats (persistent per-user history + Clear) +project:family-home-lab +agent:family_home_lab
x 2026-08-25 dsh plugins Phase 1: web + doc summarise (test.md + example.com verified) +project:family-home-lab +agent:family_home_lab
x 2026-08-25 dsh image INGEST + GENERATE done (OpenRouter gpt-5 vision + gpt-image-1); saved to workspace images/ +project:family-home-lab +agent:family_home_lab
(C) BUY AMD 6600 GPU for docker in Nixos +project:family-home-lab +agent:family_home_lab
x 2026-08-25 2026-08-25 Add extra links - .35 Docker, .13 Docker and Websites, make an option list +project:family-home-lab +agent:family_home_lab
x 2026-08-26 2026-08-26 Admin Pi Dashboard view +project:family-home-lab +agent:family_home_lab
-(B) Update obsidian websites and Docker containers notes +project:family-home-lab +agent:family_home_lab
-x 2026-08-25 2026-08-25 Fonts and layout. Wrong font. Admin +project:family-home-lab +agent:fam uily_home_lab
+x 2026-08-25 Update obsidian websites and Docker containers notes +project:family-home-lab +agent:family_home_lab
+x 2026-08-25 2026-08-25 Fonts and layout. Wrong font. Admin +project:family-home-lab +agent:family_home_lab
(B) Check apprise consumers still work after basic-auth: n8n + Go dashboard script on .13 need creds added to URL +project:family-home-lab +agent:family_home_lab
x 2026-08-26 2026-08-26 Kitchen Owl: add AI feature (AI to kitchen/recipes) +project:family-home-lab +agent:family_home_lab
(C) Fix abandoned websites: sams.home.lab, laravel, t3_react_app (Laravel+T3 part of Lora car-tracker site) +project:family-home-lab +agent:family_home_lab
@@ -17,4 +17,6 @@ x 2026-08-25 Removed Heimdall + Homarr from console (redundant; user removing fr
(C) AMD 6600 GPU -> .13: install NVIDIA-free AMD GPU in NixOS (for faster MuScriptor/BasicPitch/ML). NixOS driver config needed (amdgpu). +project:family-home-lab +agent:family_home_lab
x 2026-08-25 dsh conversation sidebar: multi-session persistence + history UI (list/new/delete/switch, auto-named) +project:family-home-lab +agent:family_home_lab
x 2026-08-26 2026-08-26 DS Harness - ensure no bash or local editing possible +project:family-home-lab +agent:family_home_lab
-x 2026-08-26 2026-08-26 REmove Openweb ui - caddy, folder, docker +project:family-home-lab +agent:family_home_lab(A) Admin Pi Dashboard view +project:family-home-lab +agent:family_home_lab
+x 2026-08-26 2026-08-26 Remove OpenWebUI - Caddy, folder, docker +project:family-home-lab +agent:family_home_lab
+(B) Home dash: add a common 'Links' section with categories Media/Work/Family. Media: Spotify, Netflix. Work: mail.google.com, calendar.google.com, secure1.inmotionhosting.com/index/login, mxt.smsglobal.com/login/ +project:family-home-lab +agent:family_home_lab
+(C) Sam admin dashboard panel: add router links — netcom router http://192.168.20.1:8079/login.html (may be in Caddy) and second router http://192.168.20.254/ +project:family-home-lab +agent:family_home_lab