Commit Graph

128 Commits

Author SHA1 Message Date
7119c8474e ci(release): use system zip now that it's installed on the runner 2026-04-15 06:33:50 +00:00
aea09098e6 feat(ci): add Gitea Actions release workflow
Builds App + Worker + Installer for win-x64 self-contained on v* tag push,
bundles into ClaudeDo-<version>-win-x64.zip (app + worker),
renames installer to ClaudeDo.Installer-<version>.exe,
writes sha256 checksums.txt, then creates a Gitea Release on
releases/ClaudeDo and attaches all three assets.

Uses the workflow-scoped GITEA_TOKEN; no PAT required.
Host-mode runner (ubuntu-latest:host) with installed .NET 8 at
/home/mika/.dotnet. Uses python3 -m zipfile because the host
runner has no zip CLI, and git clone instead of actions/checkout
because DEFAULT_ACTIONS_URL=self has no local checkout mirror.
2026-04-15 06:31:50 +00:00
Mika Kuns
0498fbae47 docs(installer): finalize decisions — self-contained, auto-check, full uninstall
- App + Worker now self-contained (zero .NET runtime dep on target)
- Collapse Manage mode into "update check -> Config view" on every
  subsequent launch; Repair + Uninstall become buttons in Config
- Uninstall removes {InstallDir} and ~/.todo-app in full (no prompt
  to keep data) — matches user's stated intent

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 08:21:12 +02:00
Mika Kuns
43a10cff95 docs(installer): pin release target to releases/ClaudeDo
VPS confirmed the releases/ org is world-readable without auth; the
ClaudeDo source already lives at git.kuns.dev/releases/ClaudeDo, so the
workflow uses the built-in gitea.token (no cross-org PAT needed).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 08:14:28 +02:00
Mika Kuns
bd7d5940a2 docs(installer): add download-mode + Gitea Releases design spec
Design for rewriting the installer to fetch prebuilt binaries from Gitea
Releases on git.kuns.dev instead of building from source. Covers the
Actions workflow, release artifact layout, install.json marker file,
Install/Update/Manage mode detection, and the new DownloadAndExtractStep.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 08:03:40 +02:00
CubeGameLP
78831b2263 feat(installer): add WPF installer/configurator project
Standalone WPF app (ClaudeDo.Installer) that handles full installation
and ongoing configuration of ClaudeDo. Two modes: wizard for first run,
tabbed settings panel for subsequent launches. Page-based extensibility
via IInstallerPage interface — adding new config sections requires only
one new class.

Install pipeline: dotnet publish, deploy binaries, write configs, init
DB (via SchemaInitializer from ClaudeDo.Data), register Windows Service,
create shortcuts. Dark theme matching the Avalonia app (forest teal accent).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 21:01:03 +02:00
Mika Kuns
2479bb6ea1 feat: worker CLI modernization + UI fixes
Merge feat/worker-cli-modernization into main.

Worker: StreamAnalyzer, ClaudeArgsBuilder, config resolution,
auto-retry, multi-turn continue, agent file management.

UI: StreamLineFormatter for NDJSON display, LiveText replaces
LiveLines, start feedback, log reload, config editors with
model/prompt/agent fields, modal theming.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 17:03:47 +02:00
Mika Kuns
2a1f26d817 fix(ui): fix live output visibility and editor dialog graying out
- Remove wrapping ScrollViewer from live output TextBox — Avalonia
  TextBox with AcceptsReturn handles its own scrolling; nested
  ScrollViewer caused layout collapse
- Auto-scroll via CaretIndex instead of removed ScrollViewer
- Add OnWindowClosed to both editor ViewModels, ensuring the
  TaskCompletionSource always resolves when the dialog closes
  (including via X button), preventing RelayCommand from staying
  permanently disabled

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 17:01:08 +02:00
Mika Kuns
7363e48496 fix(ui): address code review findings
- Fix event handler leak in TaskDetailView.OnDataContextChanged
  (unsubscribe from previous ViewModel before subscribing to new one)
- Move FormatFile call off UI thread with Task.Run to prevent freeze
  on large log files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 16:47:46 +02:00
Mika Kuns
f8be2c178b feat(ui): add config override fields to TaskEditorView
Adds Model, SystemPrompt, and AgentPath override fields to TaskEditorViewModel and TaskEditorView. Wires agent loading from WorkerClient in TaskListViewModel before opening the editor dialog.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 16:39:50 +02:00
Mika Kuns
699fe8a148 feat(ui): complete Batch 2 — LiveText display, start feedback, modal theming, ListEditor config
- Replace LiveLines with formatted LiveText + StreamLineFormatter
- Add log reload from disk for completed tasks
- Add start feedback (starting.../running) on detail and list views
- Apply dark theme (WindowBgBrush, AccentBrush) to editor modals
- Add model/system-prompt/agent-path config to ListEditorView
- Wire config loading/saving in MainWindowViewModel
- Fix duplicate AgentInfo DTO (use canonical Data.Models version)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 16:36:40 +02:00
Mika Kuns
0764bb30ab feat(ui): replace LiveLines with formatted LiveText, add log reload and start feedback
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 16:28:12 +02:00
Mika Kuns
503fd69cd1 feat(ui): add starting state feedback to task list
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 16:27:04 +02:00
Mika Kuns
365ecba990 feat(ui): add StreamLineFormatter for NDJSON stream parsing
Parses Claude CLI stream-json output into human-readable text.
Handles text deltas, tool use, results, API retries, and trims large files.
All 13 tests pass.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 16:22:36 +02:00
Mika Kuns
aaaa93323c test(ui): add ClaudeDo.Ui.Tests project to solution
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 16:22:26 +02:00
Mika Kuns
945a1eef11 feat(worker): default to claude-sonnet-4-6 when no model configured
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 16:20:48 +02:00
Mika Kuns
026df8d8f6 feat(ui): add RunNowRequestedEvent and GetAgentsAsync to WorkerClient
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 16:20:39 +02:00
Mika Kuns
a6fe91d106 docs(ui): add implementation plan for UI fixes
23 tasks covering: StreamLineFormatter (TDD), LiveText display,
start feedback, log reload, modal theming, and config editors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 16:15:15 +02:00
Mika Kuns
fb3c96c405 docs(ui): add design spec for post-integration UI fixes
Covers four issues from first real test: raw NDJSON display,
missing start feedback, lost live output, and config editor gaps.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 16:08:12 +02:00
Mika Kuns
3eb040f618 chore(claudedo): Add a Readme to the repo
ClaudeDo-Task: 6a119bda-2368-443e-b9b2-55584527bcfb
2026-04-14 15:37:17 +02:00
Mika Kuns
95c8cc8372 fix(ui): allow RunNow for any non-running task, not just queued 2026-04-14 15:35:02 +02:00
Mika Kuns
c1c4c75979 refactor(worker): remove MessageParser (replaced by StreamAnalyzer) 2026-04-14 14:12:21 +02:00
Mika Kuns
03728c8e4a docs(worker): update CLAUDE.md with CLI modernization changes 2026-04-14 14:10:46 +02:00
Mika Kuns
c98a29c086 test(worker): add integration test for auto-retry flow
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 14:10:44 +02:00
Mika Kuns
26c2445bb5 fix(tests): update QueueServiceTests for new TaskRunner constructor signature 2026-04-14 14:09:06 +02:00
Mika Kuns
adc5a16afc feat(worker): add ContinueTask routing to QueueService 2026-04-14 14:04:28 +02:00
Mika Kuns
6cb8012d82 feat(worker): add ContinueTask, GetAgents, RefreshAgents hub methods and RunCreated broadcast 2026-04-14 14:04:17 +02:00
Mika Kuns
76473dd92a refactor(worker): rewrite TaskRunner with config resolution, retry, and continue support 2026-04-14 14:02:57 +02:00
Mika Kuns
1cdaaf9fd2 refactor(worker): simplify ClaudeProcess to accept pre-built args and use StreamAnalyzer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 11:45:23 +02:00
Mika Kuns
8825351526 feat(worker): add AgentFileService for filesystem agent management
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:39:24 +02:00
Mika Kuns
54c4d3cf93 feat(worker): extend RunResult with structured output, session ID, and token metrics
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:38:39 +02:00
Mika Kuns
f57cdb7cb4 feat(data): extend TaskRepository with model, system_prompt, agent_path columns
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:37:08 +02:00
Mika Kuns
8b342bcc21 feat(worker): add StreamAnalyzer for rich NDJSON stream parsing 2026-04-14 11:36:58 +02:00
Mika Kuns
dab461cc41 feat(worker): add ClaudeArgsBuilder for dynamic CLI argument construction
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:35:46 +02:00
Mika Kuns
5232d5f130 feat(data): add GetConfigAsync and SetConfigAsync to ListRepository
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:34:16 +02:00
Mika Kuns
19a210406e feat(data): add TaskRunRepository with CRUD and query methods
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:31:34 +02:00
Mika Kuns
02aaa9da64 feat(data): add ListConfigEntity, TaskRunEntity, AgentInfo models and task config fields
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:27:04 +02:00
Mika Kuns
36ae6532b4 feat(data): add list_config, task_runs tables and task config columns
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:25:12 +02:00
Mika Kuns
221640a203 feat(ui): UX redesign — Microsoft To Do style with Rider island layout
- Inline task creation (Enter to add, Escape to cancel)
- Editable detail pane with auto-save on focus-lost
- Tag chips with inline add/remove
- Circular checkboxes with status colors
- Keyboard shortcuts (Ctrl+N, Ctrl+L, Ctrl+R, Delete, Space, F2)
- Rider-style island layout with rounded panels
- Warm Charcoal theme with Forest Teal accent
- Reactive proportional column sizing
- Completed task strikethrough and dimming

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 11:18:27 +02:00
Mika Kuns
028cd9a061 style(ui): replace blue selection highlight with dimmed green
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 10:58:41 +02:00
Mika Kuns
cd91120552 style(ui): increase text contrast for better readability
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 10:54:35 +02:00
Mika Kuns
c3fed45481 style(ui): island layout with Warm Charcoal theme (Rider-style)
Replace flat columns with rounded island panels on a dark base.
Remove GridSplitters, add gap-based spacing between islands.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 10:52:52 +02:00
Mika Kuns
5f51fe9621 fix(ui): replace deprecated Watermark with PlaceholderText
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 10:38:06 +02:00
Mika Kuns
c44aefde77 style(ui): add strikethrough and dimming for completed tasks
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 10:36:06 +02:00
Mika Kuns
ff5e56a6f0 feat(ui): add global keyboard shortcuts (Ctrl+N, Ctrl+L, Ctrl+R, Ctrl+Shift+N)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 10:33:48 +02:00
Mika Kuns
2dcfc7e352 feat(ui): add inline add handlers, checkbox click, and task keyboard shortcuts
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 10:33:45 +02:00
Mika Kuns
a44c104940 feat(ui): add auto-save LostFocus handlers and tag input KeyDown
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 10:31:54 +02:00
Mika Kuns
df132e8be1 style(ui): redesign TaskDetailView with editable fields, tag chips, and accent styling
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 10:30:17 +02:00
Mika Kuns
eb7c1ebf69 style(ui): redesign task rows with checkboxes, inline add field, remove toolbar
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 10:29:44 +02:00
Mika Kuns
2d6b5bbaff style(ui): redesign MainWindow with reactive layout, sidebar polish, and list header
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-14 10:27:49 +02:00