Skip to content

Tui rewrite#49

Merged
bborn merged 24 commits intomainfrom
tui-rewrite
Jan 8, 2026
Merged

Tui rewrite#49
bborn merged 24 commits intomainfrom
tui-rewrite

Conversation

@bborn
Copy link
Copy Markdown
Owner

@bborn bborn commented Jan 8, 2026

No description provided.

bborn and others added 24 commits January 7, 2026 21:05
- Add instructions TEXT column to projects table with migration
- Update Project struct with Instructions field
- Update CRUD functions (Create, Update, List, GetByName) to include instructions
- Add textarea input for instructions in settings UI form
- Handle focus navigation between name, path, aliases, and instructions fields

The instructions field allows users to add project-specific instructions
that can be provided to AI when working on tasks for that project.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
When the list filter is focused, keyboard shortcuts (like 's' for settings)
were intercepting key events before the filter input could process them.
Now we check list.SettingFilter() and pass all keys to the list when filtering.

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Users can now type to filter/quick-select options for project,
type, and priority fields. Uses huh's built-in Filtering(true).

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Add LocalTime type that wraps time.Time and converts from UTC to local
timezone when scanning from SQLite. This ensures timestamps display in
the user's local time rather than UTC.

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
- Improved NEEDS_INPUT detection in executor to scan all output lines,
  not just the last line
- Added 'question' log type to store the agent's question
- Retry view now displays the question when available, making it clear
  what input is needed
- Added GetLastQuestion() to retrieve the most recent question for a task
- Added tests for NEEDS_INPUT detection and question retrieval

This enables agents to pause execution and request human input when they
encounter ambiguous requirements or need clarification.

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
- Background executor runs as separate daemon process (task daemon)
- Auto-starts daemon when running task -l
- daemon stop/status commands for management
- Parallel task execution (multiple tasks run concurrently)
- Retry preserves full history instead of clearing logs
- Fix list filtering (pass FilterMatchesMsg to list Update)
- Capture full multi-line output from Claude/Crush
- Add projects from database to task form
- DB migration for project instructions column
- New UI components: dashboard, watch, filebrowser, memories, styles
- Config, GitHub client, hooks modules
- Makefile and install script

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
- Add project_memories table schema with categories (pattern, context,
  decision, gotcha, general)
- Implement CRUD operations for memories in db package
- Add memories UI accessible via 'm' key with project filtering
- Inject project memories into executor prompts for task context
- Add comprehensive tests for memory operations
- Update AGENTS.md with memories documentation

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
- memories.go: TUI for viewing/editing project memories
- memories_test.go: Comprehensive tests for memory CRUD operations
- AGENTS.md: Document project memories feature and usage

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Add the updateMemories function that was referenced but not defined
in the previous commit.

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
- Press 'a' to toggle between active and all tasks
- Shows '×' icon for closed tasks in the list
- Title changes to "Tasks (all)" when viewing all tasks

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Allow users to interrupt running tasks via 'i' key from dashboard or watch view.
The interrupt cancels the context and sets status to interrupted in DB for
cross-process communication.

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Typing numbers in the task list view filters/jumps to tasks:
- Exact ID match selects that task in the full list
- Partial match filters list to tasks whose ID starts with the digits
- Backspace removes digits from filter
- Escape clears the filter
- Title shows current filter as "Tasks [#123]"

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
When a task is retried with user feedback, the executor now includes
the conversation history (questions asked and user responses) in the
prompt. This allows the AI to properly continue from where it left off.

- Added getConversationHistory() to extract Q&A from task logs
- Modified buildPrompt() to include history for all task types
- Added tests for conversation history handling

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
The execution log now automatically scrolls to the bottom when new content
arrives, but only if the user was already viewing the bottom. If the user
has scrolled up to review earlier logs, their position is preserved.

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Tasks now go through a triage step before execution if they are missing
project/type or have sparse descriptions. The triage process uses Claude
to:
- Determine appropriate project and task type
- Enhance vague task descriptions with acceptance criteria
- Check project instructions for special processing requirements
- Block tasks that need more information from the user

Also adds project instructions support - projects can now have custom
instructions that are included in both triage and execution prompts.

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Add GotoBottom() calls after setting viewport content in both
initViewport() and SetSize() so the execution log always starts
showing the most recent entries.

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Reduce complexity by consolidating statuses:
- pending/interrupted → backlog
- queued/triaging/processing → in_progress
- ready/closed → done
- blocked remains unchanged

The previous 8-status model added unnecessary complexity. Now:
- backlog: tasks not yet started
- in_progress: executor is working on it
- blocked: needs user input
- done: completed

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Changed ColorInProgress from #B8A56A to #9C9265 for a less
prominent, more muted appearance in the TUI.

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Use lipgloss.Height() to measure the actual rendered help height
instead of hardcoding helpHeight=2. This correctly recalculates
the kanban board height when pressing ? to expand/collapse help.

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Add comprehensive tests for GetProjectByPath function that detects
which project the user is in based on their current working directory.

Also improve UI responsiveness when queueing or closing tasks from the
detail view by updating the task status immediately in the UI before
the database operation completes.

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
- Send TASK_CWD env var from client to server over SSH session
- Extract working directory in SSH handler for project auto-detection
- Add GetEnvValue helper with tests
- Add theme configuration support

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
- Add theme.go with configurable color schemes
- Update styles.go to use OneDark-inspired colors
- Use theme colors for selected card in kanban

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
- Add theme section to settings view with horizontal theme picker
- Navigate themes with arrow keys or tab between sections
- Theme changes apply immediately and persist to database
- Load saved theme on app startup
- Add comprehensive tests for theme functionality

Available themes: onedark (default), nord, gruvbox, catppuccin, default

💘 Generated with Crush

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
@bborn bborn merged commit cecb6cb into main Jan 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant