diff --git a/CHANGELOG.md b/CHANGELOG.md index 344051c1..d9667044 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # aicodeman +## 0.5.9 + +### Patch Changes + +- Mobile keyboard accessory bar: add configurable "Extended Keyboard Bar" setting (Settings > Display > Input) that toggles between simple mode (up/down arrows, /init, /clear, /compact, paste, dismiss) and extended mode (adds left/right arrows, Tab, Shift+Tab, Ctrl+O, Alt+Enter, Esc). Default is simple mode. Setting is device-specific (not synced to server). + + Restyle dismiss button: muted steel-blue tone, fills remaining bar space via flex, larger tap target. Arrow buttons now blue. + + Fix paste overlay visibility on mobile: dialog repositioned to top of screen (15vh from top) so the virtual keyboard doesn't cover it. Textarea enlarged for better usability. + + (Also includes all v0.5.8 changes: case reorder/delete, XSS sanitization, auto-attach PTY on restart, mobile keyboard buttons, macOS installer fixes, terminal flicker fix, state store collision fix.) + ## 0.5.8 ### Patch Changes diff --git a/CLAUDE.md b/CLAUDE.md index 0d515e1c..a582ac52 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -52,7 +52,7 @@ When user says "COM": 4. **Sync CLAUDE.md version**: Update the `**Version**` line below to match the new version from `package.json` 5. **Commit and deploy**: `git add -A && git commit -m "chore: version packages" && git push && npm run build && systemctl --user restart codeman-web` -**Version**: 0.5.8 (must match `package.json`) +**Version**: 0.5.9 (must match `package.json`) ## Project Overview diff --git a/package.json b/package.json index b3690301..a29f4cec 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aicodeman", - "version": "0.5.8", + "version": "0.5.9", "description": "The missing control plane for AI coding agents - run 20 autonomous agents with real-time monitoring and session persistence", "type": "module", "main": "dist/index.js", diff --git a/src/web/public/app.js b/src/web/public/app.js index 8c9a297f..dac3df42 100644 --- a/src/web/public/app.js +++ b/src/web/public/app.js @@ -523,6 +523,9 @@ class CodemanApp { SwipeHandler.init(); VoiceInput.init(); KeyboardAccessoryBar.init(); + // Apply keyboard bar mode from settings + const _kbSettings = this.loadAppSettingsFromStorage(); + if (_kbSettings.extendedKeyboardBar) KeyboardAccessoryBar.setMode('extended'); this.applyHeaderVisibilitySettings(); this.applyTabWrapSettings(); this.applyMonitorVisibility(); diff --git a/src/web/public/index.html b/src/web/public/index.html index 4dc12f27..42f95d3f 100644 --- a/src/web/public/index.html +++ b/src/web/public/index.html @@ -892,6 +892,17 @@ +
+
+ Extended Keyboard Bar + Extra keys: Tab, Esc, arrows, Ctrl+O +
+ +
+
Header Displays
diff --git a/src/web/public/keyboard-accessory.js b/src/web/public/keyboard-accessory.js index 9ae2bee7..e58aebba 100644 --- a/src/web/public/keyboard-accessory.js +++ b/src/web/public/keyboard-accessory.js @@ -4,7 +4,7 @@ * Defines two exports: * * - KeyboardAccessoryBar (singleton object) — Quick action buttons shown above the virtual - * keyboard on mobile: Esc, arrow up/down, Tab, Shift+Tab, Ctrl+O, /init, /clear, /compact, paste, and dismiss. + * keyboard on mobile: arrow up/down, /init, /clear, /compact, paste, and dismiss. * Destructive actions (/clear, /compact) require double-tap confirmation (2s amber state). * Commands are sent as text + Enter separately for Ink compatibility. * Only initializes on touch devices (MobileDetection.isTouchDevice guard). @@ -33,16 +33,37 @@ */ const KeyboardAccessoryBar = { element: null, + _mode: 'simple', // 'simple' or 'extended' - /** Create and inject the accessory bar */ - init() { - // Only on mobile - if (!MobileDetection.isTouchDevice()) return; + /** HTML for simple mode: arrows, commands, paste, dismiss */ + _simpleButtons: ` + + + + + + + `, - // Create accessory bar element - this.element = document.createElement('div'); - this.element.className = 'keyboard-accessory-bar'; - this.element.innerHTML = ` + /** HTML for extended mode: all keys including arrows, Tab, Esc, etc. */ + _extendedButtons: `