feat: AIUI chat mode integration with iframe, context broker, overnight loop

- Chat mode: AIUI loads in sandboxed iframe at /dashboard/chat with transparent bg
- Mode switcher: Easy + Pro tabs only, Chat is a launcher button
- Keyboard shortcuts: Cmd+1 (Easy), Cmd+2 (Pro), Cmd+3 (Chat), Cmd+M (cycle)
- Directional transitions: chat slides from/to left, dashboard from/to right
- Context broker: postMessage protocol for quarantined AIUI communication
- AI permissions store: user-controlled toggles for data access categories
- Settings UI: AI Data Access section with per-category toggles
- AIUI container manifest and nginx proxy config for /aiui/
- Deploy script builds AIUI with /aiui/ base path
- Overnight loop infrastructure (loop.sh, prepare.sh, plan.md, prompt.md)
- Security hooks for autonomous overnight runs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Dorian
2026-03-04 12:06:20 +00:00
co-authored by Claude Opus 4.6
parent 7b044d22ef
commit 584ce646e1
23 changed files with 1528 additions and 77 deletions
+9 -1
View File
@@ -25,9 +25,17 @@ export const useUIModeStore = defineStore('uiMode', () => {
localStorage.setItem(STORAGE_KEY, newMode)
}
function cycleMode(): UIMode {
const order: UIMode[] = ['easy', 'gamer']
const idx = order.indexOf(mode.value)
const next = order[(idx >= 0 ? idx + 1 : 0) % order.length] as UIMode
setMode(next)
return next
}
const isGamer = computed(() => mode.value === 'gamer')
const isEasy = computed(() => mode.value === 'easy')
const isChat = computed(() => mode.value === 'chat')
return { mode, setMode, syncFromBackend, isGamer, isEasy, isChat }
return { mode, setMode, cycleMode, syncFromBackend, isGamer, isEasy, isChat }
})