mika kuns and Claude Sonnet 4.6
a4cb03b1b5
refactor(ui): use sidebar-pane in PlanningDiffView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:53:56 +02:00
mika kuns and Claude Sonnet 4.6
f53292e134
refactor(ui): use diff-lineno and sidebar-pane in DiffModal
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:53:34 +02:00
mika kuns and Claude Sonnet 4.6
539ebecf3a
refactor(ui): use danger-box in MergeModal
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:53:07 +02:00
mika kuns and Claude Sonnet 4.6
dff5651db7
refactor(ui): use danger-box in SettingsModal
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:52:49 +02:00
mika kuns and Claude Sonnet 4.6
9f49b0131f
refactor(ui): use shared section style in ListSettingsModal
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:52:30 +02:00
mika kuns and Claude Sonnet 4.6
fb3a6acf52
refactor(ui): reuse task-row style for worktree rows
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:52:12 +02:00
mika kuns and Claude Sonnet 4.6
4f84b15b6a
refactor(ui): use section-divider in DetailsIslandView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:51:46 +02:00
mika kuns and Claude Sonnet 4.6
27b0d51db0
refactor(ui): drop duplicate converters and normalize binding in ListsIslandView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:51:19 +02:00
mika kuns
2a381048fe
refactor(ui): merge task-row styles and add shared section/danger-box/sidebar/accent styles
2026-05-30 17:49:24 +02:00
mika kuns
bddef5abef
refactor(ui): unify text and close button in ThemedDatePicker
2026-05-30 17:40:07 +02:00
mika kuns
51d3ea2e1c
refactor(ui): unify text and close button in ConflictResolutionView
2026-05-30 17:39:18 +02:00
mika kuns
335b422e23
refactor(ui): unify text and close button in PlanningDiffView
2026-05-30 17:38:44 +02:00
mika kuns
08f3babca4
refactor(ui): unify text and close button in DiffModalView
2026-05-30 17:38:09 +02:00
mika kuns
9082f2ed71
refactor(ui): unify text and close button in WorktreeModalView
2026-05-30 17:37:06 +02:00
mika kuns
0f64b1c6e0
refactor(ui): unify text and close button in WorktreesOverviewModalView
2026-05-30 17:36:23 +02:00
mika kuns
dd453874ba
refactor(ui): unify text and close button in RepoImportModalView
2026-05-30 17:33:52 +02:00
mika kuns
00e1d2d6c9
refactor(ui): unify text and close button in UnfinishedPlanningModalView
2026-05-30 17:33:29 +02:00
mika kuns
9a9113542d
refactor(ui): unify text and close button in AboutModalView
2026-05-30 17:33:06 +02:00
mika kuns
8e595a1e43
refactor(ui): unify text and close button in MergeModalView
2026-05-30 17:32:29 +02:00
mika kuns
97fc715856
refactor(ui): unify text and close button in ListSettingsModalView
2026-05-30 17:32:02 +02:00
mika kuns
ed8607d4c9
refactor(ui): unify text and close button in SettingsModalView
2026-05-30 17:31:31 +02:00
mika kuns and Claude Sonnet 4.6
929e0ca1ee
refactor(ui): apply text classes to SessionTerminalView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:29:04 +02:00
mika kuns and Claude Sonnet 4.6
40a36308ae
refactor(ui): apply text classes to AgentStripView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:28:35 +02:00
mika kuns and Claude Sonnet 4.6
b9f5d829c8
refactor(ui): apply text classes to TaskRowView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:27:49 +02:00
mika kuns and Claude Sonnet 4.6
e0dda3e71b
refactor(ui): apply text classes to DetailsIslandView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:27:13 +02:00
mika kuns and Claude Sonnet 4.6
d4c66dea63
refactor(ui): apply text classes to TasksIslandView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:26:10 +02:00
mika kuns and Claude Sonnet 4.6
a132127e9e
refactor(ui): apply text classes to ListsIslandView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:25:48 +02:00
mika kuns and Claude Sonnet 4.6
6e3125e78d
refactor(ui): apply text classes to MainWindow
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 17:24:58 +02:00
mika kuns
b00e4d994f
feat(ui): unify type scale to 11/13/18/24 and add canonical text classes
2026-05-30 17:22:29 +02:00
mika kuns
16717ab9e9
fix(ui): restore resize and full-width rows in WorktreesOverview modal
2026-05-30 17:16:08 +02:00
mika kuns
7af892f410
refactor(ui): consolidate list-section-label into shared section-label
2026-05-30 17:07:47 +02:00
mika kuns
e86464e802
fix(ui): unclip Edit/Preview buttons; enlarge section labels and use mono field labels
2026-05-30 17:02:35 +02:00
mika kuns
df7337810e
docs(ui): add visual-check checklist for normalization pass
2026-05-30 16:53:36 +02:00
mika kuns
8944074997
refactor(ui): fold selected-day White to TextBrush token
2026-05-30 16:52:56 +02:00
mika kuns
fbd5d9f7ca
refactor(ui): tokenize WorktreeModalView font sizes
2026-05-30 16:52:16 +02:00
mika kuns and Claude Sonnet 4.6
5fdd9f0b4c
refactor(ui): tokenize and dynamic-ize PlanningDiffView
...
Convert StaticResource token attrs to DynamicResource, snap font sizes to tokens, replace Consolas,Menlo,monospace with MonoFont DynamicResource, and fold Orange warning color to BloodBrush.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:50:43 +02:00
mika kuns and Claude Sonnet 4.6
bce4e0a1e6
refactor(ui): migrate ConflictResolutionView to ModalShell and use dynamic resources
...
Replace manual titlebar/drag handler with ModalShell, move action buttons to footer, convert StaticResource token attrs to DynamicResource, replace OrangeRed with BloodBrush, and use MonoFont DynamicResource.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:50:38 +02:00
mika kuns and Claude Sonnet 4.6
229f865e7e
refactor(ui): migrate DiffModal to ModalShell and use dynamic resources
...
Replace manual titlebar/drag handler with ModalShell, move Merge button to footer, convert StaticResource token attrs to DynamicResource, snap font sizes to tokens, use MonoFont DynamicResource, and fold tint color literals to RunningTintBrush/ErrorTintBrush.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:50:32 +02:00
mika kuns and Claude Sonnet 4.6
a444033aa9
refactor(ui): migrate WorktreesOverviewModal to ModalShell
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:47:32 +02:00
mika kuns and Claude Sonnet 4.6
2265829a29
refactor(ui): migrate RepoImportModal to ModalShell
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:45:51 +02:00
mika kuns and Claude Sonnet 4.6
50e05b9140
refactor(ui): migrate UnfinishedPlanningModal to ModalShell
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:45:16 +02:00
mika kuns and Claude Sonnet 4.6
538839c004
refactor(ui): migrate AboutModal to ModalShell
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:44:41 +02:00
mika kuns and Claude Sonnet 4.6
8d07fc298c
refactor(ui): migrate MergeModal to ModalShell
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:44:04 +02:00
mika kuns and Claude Sonnet 4.6
e1bfbb0fa6
refactor(ui): migrate ListSettingsModal to ModalShell
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:43:17 +02:00
mika kuns
b1006ac7b0
fix(ui): correct SettingsModal font snap (11px is Mono, not Body)
2026-05-30 16:41:05 +02:00
mika kuns
4f5db367a7
refactor(ui): migrate SettingsModal to ModalShell
2026-05-30 16:40:09 +02:00
mika kuns
c20fbe3613
feat(ui): add reusable ModalShell control
2026-05-30 16:38:02 +02:00
mika kuns and Claude Sonnet 4.6
16b0d1177a
refactor(ui): tokenize ThemedDatePicker
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:36:23 +02:00
mika kuns and Claude Sonnet 4.6
a1f05da97b
refactor(ui): tokenize SessionTerminalView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:35:46 +02:00
mika kuns and Claude Sonnet 4.6
0c0c73bc9e
refactor(ui): tokenize AgentStripView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:35:22 +02:00
mika kuns and Claude Sonnet 4.6
3d4a64a8fd
fix(ui): use LineBrush for schedule flyout border and tokenize TaskRowView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:34:25 +02:00
mika kuns and Claude Sonnet 4.6
bff15c9bf3
refactor(ui): tokenize DetailsIslandView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:33:46 +02:00
mika kuns and Claude Sonnet 4.6
f40de4bbe0
refactor(ui): tokenize TasksIslandView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:32:03 +02:00
mika kuns and Claude Sonnet 4.6
e120b0fd70
refactor(ui): tokenize ListsIslandView
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:31:39 +02:00
mika kuns and Claude Sonnet 4.6
e8ce725897
refactor(ui): tokenize MainWindow
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-30 16:31:00 +02:00
mika kuns
7a6bfbe1b4
refactor(ui): tokenize IslandStyles values and add shared modal styles
2026-05-30 16:28:47 +02:00
mika kuns
5a25818e3a
feat(ui): set global Inter Tight font default on all windows
2026-05-30 16:24:00 +02:00
mika kuns
f0f8cd103d
feat(ui): add named tint and hairline overlay brush tokens
2026-05-30 16:23:34 +02:00
mika kuns
d52f23f7c8
docs(ui): add UI normalization design spec and implementation plan
2026-05-30 16:22:00 +02:00
mika kuns and Claude Opus 4.7
cfc45118e4
docs: sync CLAUDE.md files with current architecture
...
Release / release (push) Successful in 35s
Drop the removed tag system, fix the retired Manual status and the atomic
queue-claim location, refresh the App DI registrations to the Islands VMs,
update the Data table list, correct a stale test reference, and document the
interface-folder and single-consumer-fold conventions plus the .NET 8 build path.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 15:59:43 +02:00
mika kuns and Claude Opus 4.7
1856943925
refactor: merge TaskRunner failure handlers and reuse NullIfBlank
...
Unify the near-identical HandleFailure/MarkFailed into a single MarkFailed that
always persists the failed state and never throws, and replace the inline
null-if-blank checks in ListMcpTools with the existing extension.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 15:51:14 +02:00
mika kuns and Claude Opus 4.7
ce9fadc0b5
refactor: fold single-consumer helper types into their owners
...
Consolidate small single-purpose types into the files that own them:
StreamResult into StreamAnalyzer, the Planning context records into
PlanningSessionContext, PrimeClock/PrimeSchedulerOptions into PrimeScheduler,
AgentMcpTools into LifecycleMcpTools, the locator subclasses into
InstallArtifactLocator, LogLineViewModel into DetailsIslandViewModel,
RepoImportItemViewModel into its modal, and StepViewModel into InstallPageViewModel.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 15:47:46 +02:00
mika kuns and Claude Opus 4.7
25ee623c42
refactor: remove dead PlanningMergeEvents records and unused RunNowRequestedEvent
...
The PlanningMergeEvents record types were never instantiated (the broadcaster
uses identically-named methods), and RunNowRequestedEvent had no subscribers.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 15:42:25 +02:00
mika kuns and Claude Opus 4.7
41da124a31
refactor: extract interfaces to Interfaces folders and consolidate filters
...
Move interface declarations into per-area Interfaces/ subfolders, merge the
small task-list filter classes into StatusFilter/SmartFlagFilter, and simplify
related services, converters and hub DTO handling.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 15:41:10 +02:00
mika kuns and Claude Opus 4.7
77100b6b3b
Merge feat/external-mcp-ui-parity: external MCP UI parity for start/observe
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 14:37:58 +02:00
mika kuns and Claude Opus 4.7
32daa4a602
docs(worker): correct external MCP tool inventory, drop removed tag tools
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 14:16:48 +02:00
mika kuns and Claude Opus 4.7
b41a78ec29
feat(worker): register new external MCP tool classes
...
Wire ListMcpTools, ConfigMcpTools, RunHistoryMcpTools, AgentMcpTools,
LifecycleMcpTools, and AppSettingsMcpTools into the external MCP
container and expose them via WithTools<>().
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 14:15:26 +02:00
mika kuns and Claude Opus 4.7
9ea60701d2
feat(worker): add external MCP app-settings read tool
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 14:12:18 +02:00
mika kuns and Claude Opus 4.7
5a592c4be6
feat(worker): add external MCP reset-failed-task tool
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 14:07:59 +02:00
mika kuns and Claude Opus 4.7
7196aab31f
feat(worker): add external MCP agent-listing tool
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 14:05:30 +02:00
mika kuns and Claude Opus 4.7
fec2fe2dda
fix(worker): cap run-log read size and harden run-history tests
...
- GetTaskLog reads at most last 256 KB; prepends truncation marker if file exceeds cap
- Wrap temp-file cleanup in finally block to prevent leak on assertion failure
- Add GetRun_NotFound_Throws, GetTaskLog_RunExistsButNoLogPath_Throws, and GetTaskLog_LargeFile_ReturnsTruncatedTail tests
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 14:04:22 +02:00
mika kuns and Claude Opus 4.7
3afe29d721
feat(worker): add external MCP run-history and log tools
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 13:59:54 +02:00
mika kuns and Claude Opus 4.7
f3f8af4b11
docs(worker): clarify SetTaskConfig null-clears-override wording
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 13:57:59 +02:00
mika kuns and Claude Opus 4.7
c3493a3a74
feat(worker): add external MCP list/task config tools
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 13:54:08 +02:00
mika kuns and Claude Opus 4.7
ac2f1d824e
fix(worker): reuse shared hub fake and guard blank list name
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 13:51:34 +02:00
mika kuns and Claude Opus 4.7
53f4e2de0f
feat(worker): add external MCP list-management tools
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 13:47:02 +02:00
mika kuns and Claude Opus 4.7
99dc08488b
docs(worker): add external MCP UI-parity spec and plan
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 13:42:24 +02:00
mika kuns and Claude Opus 4.7
26c4e5771b
feat(worker): run worker as per-user logon task instead of Windows service
...
A LocalSystem Windows service can't see the logged-in user's Claude CLI
authentication, so the worker now runs as the current user via a hidden
per-user logon Scheduled Task with restart-on-failure.
- Worker is WinExe (no console window) with a Serilog rolling file sink and
a single-instance mutex so the logon task, app ensure-running, and Restart
button can't fight over the SignalR port.
- Installer replaces the service steps (register/start/stop) with autostart
task steps, migrates the legacy ClaudeDoWorker service away on update, and
removes the task on uninstall. ServicePage drops the service-account UI.
- UI gains a WorkerLocator; the app ensures the worker is running at startup
and the Restart button kills+relaunches this install's worker process.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 09:39:41 +02:00
mika kuns and Claude Opus 4.7
1e5b3a6c3e
chore: add .gitattributes to normalize line endings
...
Default to LF, force CRLF for Windows script/solution files, and mark
common binary types — silences the CRLF-on-commit warnings.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 09:39:19 +02:00
mika kuns and Claude Opus 4.7
59d72635da
test(ui): rebase IWorkerClient fakes onto shared StubWorkerClient base
...
Add a StubWorkerClient base implementing the full IWorkerClient surface so
the planning/conflict/diff test fakes only override the members they exercise.
Eliminates the constructor-drift duplication across the three fakes.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 09:39:12 +02:00
mika kuns and Claude Opus 4.7
7a88e8a848
fix(ui): apply blue PLANNED badge for finalized planning, drop dead converter statics
...
Bind the planning-parent badge to IsPlanActive/IsPlanFinalized so a
finalized plan shows the blue "planned" style instead of staying amber.
Remove the unused Instance statics on BoolToItalicConverter and
BoolToDraftOpacityConverter (registered via the App.axaml resource dictionary).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 09:39:04 +02:00
mika kuns and Claude Opus 4.7
b84716ff9c
fix(releases): strip prerelease and build metadata before version compare
...
System.Version can't parse SemVer prerelease ("-alpha") or MinVer build
metadata ("+sha") suffixes, so an installed 1.0.2-alpha was treated as
unparseable. Reduce both sides to their numeric core before comparing.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-30 09:38:57 +02:00
mika kuns
ce879f6f70
Merge feat/repo-import-polish: remember folders, search, compact rows, no auto-select
2026-05-29 16:39:06 +02:00
mika kuns
2f7f00d4cc
docs(ui): clarify repo-import checkbox default intent
2026-05-29 16:31:31 +02:00
mika kuns
6d0973c67c
feat(ui): repo-import modal — remember folders, search, compact rows, no auto-select
2026-05-29 16:29:22 +02:00
mika kuns
bb8b3e235a
Merge feat/delete-list-button: add delete-list button to List Settings modal
2026-05-29 16:13:32 +02:00
mika kuns
6e3947c0b1
fix(ui): narrow delete-list FK catch to SqliteException
2026-05-29 16:12:15 +02:00
mika kuns
128fb7d4d2
feat(ui): add delete-list button to List Settings modal
2026-05-29 16:09:17 +02:00
mika kuns
3af8fb9aa0
Merge feat/repo-import-list-helper: add repos-as-lists import helper
2026-05-29 15:59:45 +02:00
mika kuns
5b15e30b8a
docs: add repo import list helper implementation plan
2026-05-29 15:59:37 +02:00
mika kuns
e5bce07719
docs(ui): document RepoImportModalView
2026-05-29 15:52:34 +02:00
mika kuns and Claude Sonnet 4.6
9c638e72b1
feat(ui): add 'Add repos as lists' Help-menu entry point
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-29 15:50:52 +02:00
mika kuns and Claude Sonnet 4.6
c43b06d83d
feat(ui): add repo import button to Lists island
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-29 15:46:45 +02:00
mika kuns
d4674cd74e
chore(di): register RepoImportModalViewModel
2026-05-29 15:45:04 +02:00
mika kuns
e4d958dcf3
feat(ui): add RepoImportModalView
2026-05-29 15:43:52 +02:00
mika kuns and Claude Opus 4.7
0f41384fa8
test(ui): assert FullPath in RepoImport candidate test
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-29 15:42:05 +02:00
mika kuns
50b1589b23
feat(ui): add RepoImportModalViewModel with candidate merge logic
2026-05-29 15:39:43 +02:00
mika kuns
1c689a8472
feat(ui): add RepoImportItemViewModel
2026-05-29 15:37:10 +02:00
mika kuns and Claude Opus 4.7
4877c11aa2
fix(ui): narrow RepoScanner catch to filesystem exceptions
...
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-05-29 15:36:12 +02:00
mika kuns and Claude Sonnet 4.6
03617ee3cd
feat(ui): add RepoScanner for git repo discovery
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-05-29 15:34:32 +02:00