-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprogress.yaml
More file actions
1050 lines (1039 loc) · 37.7 KB
/
Copy pathprogress.yaml
File metadata and controls
1050 lines (1039 loc) · 37.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
---
# Vimeflow CLI Agent Workspace — Machine-Readable Progress Tracker
# Source: docs/roadmap/ui-update-roadmap.md
# Schema: phase → steps → dod (definition of done)
# Status values: pending | in_progress | done | blocked
# Revised: 2026-07-06 — native Ghostty terminal runtime shipped for packaged
# macOS arm64 via libghostty-spm; xterm.js remains Linux/dev fallback.
# OpenCode adapter (observability v1) merged; Kimi Code support merged;
# Electron runtime cutover complete. Tauri runtime fully removed; vimeflow
# now ships as an Electron shell with a runtime-neutral Rust sidecar binary
# (vimeflow-backend).
version: 13
updated: '2026-07-06'
roadmap: docs/roadmap/ui-update-roadmap.md
changelog:
en: CHANGELOG.md
zh-CN: CHANGELOG.zh-CN.md
notes: >-
Phases 1-4 are done. The built-in native Ghostty terminal runtime is
shipped for packaged macOS arm64: `libghostty-spm` feeds the parented
Ghostty `NSView` path, while the Rust sidecar remains the PTY owner
and xterm.js stays as the Linux/dev fallback. The Electron migration
(a separate track from
the original Tauri-targeting roadmap) shipped as three merged PRs
over six design tracks May 13-16, 2026: PR-A (runtime-neutral Rust
backend), PR-B (sidecar IPC), PR-C (frontend backend bridge), PR-D1
(Electron shell wiring), PR-D2 (E2E driver swap to
@wdio/electron-service), PR-D3 (final Tauri removal + electron-builder
Linux AppImage packaging) — see the electron-migration phase entry
below for details and the linear CHANGELOG for the bilingual
narrative. The Electron E2E DoD is now done: the E2E Tests workflow
passed on main at d09cd60 (#230) on 2026-05-20. UI handoff migration
is the active visual track: steps 1-5c2 landed in #171, #173, #174,
#190, #198, #199, #203, and #204. Later chrome work has also landed:
DockPanel position switcher (#215), shared focus and container
shortcuts (#218), elastic dock resize (#219), command-palette accent
row/themed scrollbar (#221), tooltip shortcut chips (#224). Remaining
known gaps include auto-grow on layout pick, activity-panel polish, and
in-UI discovery for Mod+\ / Mod+B (issue #225).
Phase 4 D6 was manually verified via docs/media/hero-init.gif against
a real Claude Code session. Several later-roadmap capabilities
shipped out-of-order during Phase 4: Files Changed from live git
state (#86), typed Activity feed (#80), Claude Code test-run
surfacing (#109), PTY reattach with cursor replay (#107), Tooltip
primitive (#83), StatusCard in the sidebar header (#120), Token
Cache block (#115), Codex adapter support (#154), Kimi Code
adapter support (merged 2026-06-16), and OpenCode adapter support
(observability v1 — bridge plugin, locator, decoder, streamer,
frontend branding; live-session fixes for pid binding, context
window, and cache-aware occupancy; quota-unavailable notice; VIM-193,
merged 2026-06-21). Bilingual CHANGELOG.md /
CHANGELOG.zh-CN.md continues as the linear timeline paired with
docs/reviews/.
phases:
- id: phase-1
name: 'Tauri Scaffold + CI Green'
status: done
blocked_by: []
specs: []
steps:
- id: p1-s1
name: 'Run `npx tauri init` to scaffold `src-tauri/`'
status: done
commit: 9ce4d61
pr: 27
notes: null
- id: p1-s2
name: 'Configure tauri.conf.json: devUrl → http://localhost:5173, frontendDist → ../dist'
status: done
commit: 9ce4d61
pr: 27
notes: null
- id: p1-s3
name: 'Add `tauri:dev` and `tauri:build` npm scripts'
status: done
commit: 9ce4d61
pr: 27
notes: null
- id: p1-s4
name: 'Create src/lib/environment.ts — isTauri() detection'
status: done
commit: 9ce4d61
pr: 27
notes: null
- id: p1-s5
name: 'Update CI tauri-build.yml — add Rust caching'
status: done
commit: 9ce4d61
pr: 27
notes: null
- id: p1-s6
name: 'Add .gitignore entries for src-tauri/target/, src-tauri/gen/'
status: done
commit: 9ce4d61
pr: 27
notes: null
dod:
- id: p1-d1
check: '`npm run tauri:dev` opens a native window showing the React app'
status: done
commit: 9ce4d61
pr: 27
- id: p1-d2
check: '`npm run dev` still works as standalone Vite dev server'
status: done
commit: 9ce4d61
pr: 27
- id: p1-d3
check: 'CI passes on macOS, Windows, Linux'
status: done
commit: 9ce4d61
pr: 27
- id: p1-d4
check: 'All existing tests still pass'
status: done
commit: 9ce4d61
pr: 27
- id: phase-2
name: 'Workspace Layout Shell'
status: done
blocked_by:
- phase-1
specs:
- docs/superpowers/specs/2026-04-06-cli-agent-workspace-design.md
- docs/design/agent_workspace/code.html
steps:
- id: p2-s1
name: 'Remove chat-related code: ChatView, features/chat/, chat types, mock messages'
status: done
commit: ba395c7
pr: 31
notes: 'Removed features/chat/ and all chat-related components'
- id: p2-s2
name: 'Refactor App.tsx from chat-first to workspace layout (4-zone grid)'
status: done
commit: ba395c7
pr: 31
notes: 'App.tsx now renders WorkspaceView instead of ChatView'
- id: p2-s3
name: 'Build new Icon Rail component — project avatars, + new project, settings'
status: done
commit: ba395c7
pr: 31
notes: 'IconRail with project avatars, active highlight, + and ⚙ buttons'
- id: p2-s4
name: 'Build new Sidebar component — session list (mock data) + context switcher tabs'
status: done
commit: ba395c7
pr: 31
notes: 'Sidebar with session list and ContextSwitcher tabs (Files/Editor/Diff)'
- id: p2-s5
name: 'Build Terminal Zone placeholder — tab bar + mock terminal content area'
status: done
commit: ba395c7
pr: 31
notes: 'TerminalZone with tab bar (agent/shell tabs) and placeholder content'
- id: p2-s6
name: 'Build Agent Activity panel — status card, context smiley, usage bar, collapsible sections (mock data)'
status: done
commit: ba395c7
pr: 31
notes: 'Complete AgentActivity panel with StatusCard, PinnedMetrics, collapsible sections, footer'
- id: p2-s7
name: 'Wire context switcher tabs to show existing Files Explorer / Editor / Diff in sidebar'
status: done
commit: ba395c7
pr: 31
notes: 'Context panels integrated with sidebar context switcher'
- id: p2-s8
name: 'Apply Obsidian Lens design tokens — match Stitch code.html reference with authoritative overrides'
status: done
commit: ba395c7
pr: 31
notes: 'All workspace components use semantic design tokens'
- id: p2-s9
name: 'Update Tailwind config with new semantic tokens (success, tertiary, primary-dim, etc.)'
status: done
commit: ba395c7
pr: 31
notes: 'Tailwind config updated with Obsidian Lens semantic tokens'
- id: p2-s10
name: 'Update tests for new layout components'
status: done
commit: ba395c7
pr: 31
notes: 'Integration tests added, 1074 tests passing, 92.99% coverage'
dod:
- id: p2-d1
check: '4-zone layout renders: icon rail, sidebar, terminal zone, agent activity'
status: done
commit: ba395c7
pr: 31
- id: p2-d2
check: 'Icon rail shows project avatars with active highlight'
status: done
commit: ba395c7
pr: 31
- id: p2-d3
check: 'Sidebar shows mock session list with status badges'
status: done
commit: ba395c7
pr: 31
- id: p2-d4
check: 'Context switcher tabs (Files/Editor/Diff) work in sidebar'
status: done
commit: ba395c7
pr: 31
- id: p2-d5
check: 'Agent Activity panel shows all sections (mock data)'
status: done
commit: ba395c7
pr: 31
- id: p2-d6
check: 'Chat view and all chat code removed'
status: done
commit: ba395c7
pr: 31
- id: p2-d7
check: 'All new components match Stitch mockup (docs/design/agent_workspace/screen.png)'
status: done
commit: ba395c7
pr: 31
- id: p2-d8
check: 'All tests pass, Prettier + ESLint clean'
status: done
commit: ba395c7
pr: 31
- id: phase-3
name: 'Terminal Core'
status: done
blocked_by:
- phase-2
specs:
- docs/superpowers/specs/2026-04-06-cli-agent-workspace-design.md
steps:
- id: p3-s1
name: 'Add `portable-pty` Rust crate for cross-platform PTY spawning'
status: done
commit: ba395c7
pr: 31
notes: 'portable-pty 0.8 in Cargo.toml, already present from Phase 2'
- id: p3-s2
name: 'Implement Rust commands: pty_spawn, pty_write, pty_resize, pty_kill'
status: done
commit: ba395c7
pr: 31
notes: 'Full implementation in src-tauri/src/terminal/ with tests'
- id: p3-s3
name: 'Wire PTY stdout → Tauri events → frontend'
status: done
commit: 1ecee29
pr: null
notes: 'TauriTerminalService listens to pty-data/pty-exit/pty-error events'
- id: p3-s4
name: 'Wire frontend keyboard input → Tauri invoke → PTY stdin'
status: done
commit: 1ecee29
pr: null
notes: 'TauriTerminalService.write() calls invoke(write_pty), useTerminal hook wires xterm onData'
- id: p3-s5
name: 'Add xterm.js + @xterm/addon-fit + @xterm/addon-webgl to frontend'
status: done
commit: ba395c7
pr: 31
notes: '@xterm/xterm@^6.0.0, @xterm/addon-fit@^0.11.0, @xterm/addon-webgl@^0.19.0 already installed'
- id: p3-s6
name: 'Create TerminalPane React component rendering xterm.js'
status: done
commit: ba395c7
pr: 31
notes: 'TerminalPane with xterm.js, FitAddon, WebglAddon, session caching'
- id: p3-s7
name: 'Replace terminal zone placeholder with real TerminalPane'
status: done
commit: ba395c7
pr: 31
notes: 'TerminalZone renders TerminalPane per session with tab switching'
- id: p3-s8
name: 'Configure Catppuccin Mocha theme for xterm.js'
status: done
commit: ba395c7
pr: 31
notes: 'catppuccin-mocha.ts with toXtermTheme() converter'
dod:
- id: p3-d1
check: 'Can spawn a shell process and interact with it in the terminal pane'
status: done
commit: 2fc3fa2
pr: 34
notes: 'TauriTerminalService IPC bridge merged'
- id: p3-d2
check: 'Can run `claude` (Claude Code) in a terminal pane'
status: done
commit: 2fc3fa2
pr: 34
notes: 'Verified via agent-status detection (phase-4)'
- id: p3-d3
check: 'Terminal resizes correctly when window resizes'
status: done
commit: 2fc3fa2
pr: 34
notes: 'ResizeObserver + FitAddon + resize_pty wired'
- id: p3-d4
check: 'Multiple terminal tabs work (switch between them)'
status: done
commit: 2fc3fa2
pr: 34
notes: 'TerminalZone tab switching with session caching'
- id: p3-d5
check: 'PTY processes are cleaned up on tab close / app exit'
status: done
commit: 2fc3fa2
pr: 34
notes: 'useTerminal cleanup kills session on unmount'
- id: p3-d6
check: 'Packaged macOS arm64 uses built-in native Ghostty as the terminal renderer'
status: done
commit: null
pr: null
notes: 'macOS packaging builds/smokes ghostty_native_parent.node + libGhosttyElectronBridge.dylib from native/ghostty-helper (libghostty-spm) and bundles dist-native/ghostty-parent; Rust PTY ownership and xterm.js fallback remain.'
- id: phase-4
name: 'Agent Status Sidebar'
status: done
blocked_by:
- phase-3
specs:
- docs/superpowers/specs/2026-04-12-agent-status-sidebar/CLAUDE.md
steps:
- id: p4-s1
name: 'Rust agent types and process-tree detector'
status: done
commit: de43dfc
pr: 57
notes: 'AgentType/AgentDetectedEvent/AgentDisconnectedEvent + polling detector in src-tauri/src/agent/'
- id: p4-s2
name: 'Statusline file watcher (notify crate)'
status: done
commit: de43dfc
pr: 57
notes: 'Per-session watcher in src-tauri/src/agent/watcher.rs emitting agent-status events'
- id: p4-s3
name: 'Transcript JSONL parser for tool call tracking'
status: done
commit: ca50df6
pr: 63
notes: 'src-tauri/src/agent/transcript.rs emits agent-tool-call events'
- id: p4-s4
name: 'ts-rs type codegen → src/bindings/'
status: done
commit: 53789f5
pr: 49
notes: 'Rust agent types exported for type-safe frontend consumption'
- id: p4-s5
name: 'Frontend types, useAgentStatus hook, panel shell'
status: done
commit: de43dfc
pr: 57
notes: 'src/features/agent-status/ hooks/, components/, types/'
- id: p4-s6
name: 'StatusCard (identity + model badge) + BudgetMetrics (API key vs subscriber)'
status: done
commit: de43dfc
pr: 57
notes: null
- id: p4-s7
name: 'ContextReservoirCard, ToolCallSummary, RecentToolCalls, FilesChanged, TestResults'
status: done
commit: de43dfc
pr: 57
notes: null
- id: p4-s8
name: 'Per-session statusline shell bridge (pipes Claude Code status JSON to watched file)'
status: done
commit: de43dfc
pr: 57
notes: null
- id: p4-s9
name: 'Store resolved CWD in PtyState for watcher path derivation'
status: done
commit: e8d243c
pr: 60
notes: 'Bug fix: watcher path now derived from resolved cwd'
dod:
- id: p4-d1
check: 'Panel auto-detects Claude Code sessions and shows model/budget/context'
status: done
commit: de43dfc
pr: 57
- id: p4-d2
check: 'Panel collapses to 0px when no agent detected; expands to 280px on detection'
status: done
commit: de43dfc
pr: 57
- id: p4-d3
check: 'Tool calls appear in real time as Claude Code executes them (from transcript)'
status: done
commit: ca50df6
pr: 63
- id: p4-d4
check: 'Statusline bridge updates budget/context live (5h + weekly)'
status: done
commit: de43dfc
pr: 57
- id: p4-d5
check: 'All types in src/bindings/ regenerate via `npm run generate:bindings`'
status: done
commit: 53789f5
pr: 49
- id: p4-d6
check: 'Manual verification in tauri:dev with a real Claude Code session (end-to-end)'
status: done
commit: null
pr: 121
notes: >-
Manually verified 2026-05-01 against a real Claude Code session.
Demo recorded as docs/media/hero-init.gif (spawn → /init → agent
panel auto-detects → tool calls stream into Activity feed → Files
Changed and Tests panels populate). E2E infra context:
Phase 1a/1b/2 landed 2026-04-19 on native Linux (Fedora/Nobara)
— tauri-driver + WebdriverIO configs, frontend E2E bridge
(window.__VIMEFLOW_E2E__), Cargo e2e-test feature, and 10 spec
files (11 tests) all green locally covering app launch, IPC
round-trip, navigation, PTY spawn, terminal I/O, session
lifecycle, multi-tab isolation, terminal resize, file→editor
flow, and fake-claude agent detection. WSL2 (#65) scoped down
to "local env unsupported; use native Linux or CI". Deferred:
REPL, structured logging (#61), agent transcript parsing in
E2E, HMR orphan PTY harness (#55), Phase 3 CI. Spec:
docs/superpowers/specs/2026-04-14-e2e-testing-design.md.
- id: phase-5
name: 'Session Management + State'
status: pending
blocked_by:
- phase-3
specs:
- docs/superpowers/specs/2026-04-06-cli-agent-workspace-design.md
steps:
- id: p5-s1
name: 'Install Zustand, create store architecture'
status: pending
commit: null
pr: null
notes: null
- id: p5-s2
name: 'Create appStore — migrate global state from App.tsx'
status: pending
commit: null
pr: null
notes: null
- id: p5-s3
name: 'Create sessionStore — project/session data model, CRUD operations'
status: pending
commit: null
pr: null
notes: null
- id: p5-s4
name: 'Create terminalStore — manage PTY instances per session'
status: pending
commit: null
pr: null
notes: null
- id: p5-s5
name: 'Wire sidebar session list to sessionStore (replace mock data)'
status: pending
commit: null
pr: null
notes: null
- id: p5-s6
name: 'Wire icon rail project avatars to real project data'
status: pending
commit: null
pr: null
notes: null
- id: p5-s7
name: 'Wire session switching: click session → update terminal + activity panel'
status: pending
commit: null
pr: null
notes: null
- id: p5-s8
name: 'Persist sessions across app restarts (SQLite or JSON in app data dir)'
status: pending
commit: null
pr: null
notes: null
dod:
- id: p5-d1
check: 'Sessions backed by Zustand store, not mock data'
status: pending
commit: null
pr: null
- id: p5-d2
check: 'Clicking a session switches the terminal and activity panel'
status: pending
commit: null
pr: null
- id: p5-d3
check: 'New session can be created (spawns Claude Code in a PTY)'
status: pending
commit: null
pr: null
- id: p5-d4
check: 'Session state persists across app restarts'
status: pending
commit: null
pr: null
- id: p5-d5
check: 'All tests pass, zero prop drilling'
status: pending
commit: null
pr: null
- id: phase-6
name: 'File Watcher + Agent Activity Panel'
status: pending
blocked_by:
- phase-5
specs:
- docs/superpowers/specs/2026-04-06-cli-agent-workspace-design.md
steps:
- id: p6-s1
name: 'Configure `notify` crate for directory filesystem watching (crate already installed in phase-4 for statusline watcher)'
status: pending
commit: null
pr: null
notes: 'Reuse/extend the watcher infrastructure added in src-tauri/src/agent/watcher.rs rather than re-adding the dependency.'
- id: p6-s2
name: 'Implement Rust commands: watch_directory, unwatch_directory'
status: pending
commit: null
pr: null
notes: null
- id: p6-s3
name: 'Emit file change events (created/modified/deleted) via Tauri events'
status: pending
commit: null
pr: null
notes: null
- id: p6-s4
name: 'Create activityStore — aggregate file changes per session'
status: pending
commit: null
pr: null
notes: null
- id: p6-s5
name: 'Wire "Files Changed" section to live file watcher data'
status: pending
commit: null
pr: null
notes: null
- id: p6-s6
name: 'Wire pinned section to real session data (status, context, usage)'
status: pending
commit: null
pr: null
notes: null
- id: p6-s7
name: 'Wire git diff integration: click changed file → opens in Diff context panel'
status: pending
commit: null
pr: null
notes: null
dod:
- id: p6-d1
check: 'File changes appear in real-time as the agent modifies files'
status: pending
commit: null
pr: null
- id: p6-d2
check: 'Context window smiley indicator displays correctly'
status: pending
commit: null
pr: null
- id: p6-d3
check: '5-hour usage bar shows progress'
status: pending
commit: null
pr: null
- id: p6-d4
check: 'Collapsible sections expand/collapse with chevron toggle'
status: pending
commit: null
pr: null
- id: p6-d5
check: 'File watcher scoped to active session working directory'
status: pending
commit: null
pr: null
- id: phase-7
name: 'Terminal Parser + Agent Adapters'
status: pending
blocked_by:
- phase-6
specs: []
steps:
- id: p7-s1
name: 'Design AgentAdapter interface (parse terminal output → structured events)'
status: pending
commit: null
pr: null
notes: null
- id: p7-s2
name: 'Implement ClaudeCodeAdapter — tool calls, test results, status changes'
status: pending
commit: null
pr: null
notes: null
- id: p7-s3
name: 'Implement GenericAdapter fallback (no parsing, file watcher only)'
status: pending
commit: null
pr: null
notes: null
- id: p7-s4
name: 'Wire adapter output to activityStore'
status: pending
commit: null
pr: null
notes: null
- id: p7-s5
name: 'Update Tool Calls and Tests sections with real parsed data'
status: pending
commit: null
pr: null
notes: null
- id: p7-s6
name: 'Auto-expand sections on relevant events'
status: pending
commit: null
pr: null
notes: null
dod:
- id: p7-d1
check: 'Tool calls appear in real-time as Claude Code executes them'
status: pending
commit: null
pr: null
- id: p7-d2
check: 'Test results appear when Claude Code runs tests'
status: pending
commit: null
pr: null
- id: p7-d3
check: 'Agent status updates reflected in status card'
status: pending
commit: null
pr: null
- id: p7-d4
check: 'Collapsible sections auto-expand when relevant events occur'
status: pending
commit: null
pr: null
- id: p7-d5
check: 'Generic adapter works for non-Claude-Code processes'
status: pending
commit: null
pr: null
- id: phase-8
name: 'Context Panel Integration'
status: pending
blocked_by:
- phase-5
specs:
- docs/superpowers/specs/2026-04-04-files-explorer-ui-design.md
- docs/superpowers/specs/2026-04-04-git-diff-viewer-design.md
steps:
- id: p8-s1
name: 'Implement Rust git/file IPC commands (git2, walkdir, tokio::fs)'
status: pending
commit: null
pr: null
notes: null
- id: p8-s2
name: 'Create TauriGitService and TauriFileService (service factory pattern)'
status: pending
commit: null
pr: null
notes: null
- id: p8-s3
name: 'Adapt Files Explorer for 260px sidebar width'
status: pending
commit: null
pr: null
notes: null
- id: p8-s4
name: 'Adapt Code Editor for sidebar (compact) + full-width overlay'
status: pending
commit: null
pr: null
notes: null
- id: p8-s5
name: 'Adapt Git Diff for sidebar (unified) + full-width overlay (side-by-side)'
status: pending
commit: null
pr: null
notes: null
- id: p8-s6
name: 'Scope all context panels to active session working directory'
status: pending
commit: null
pr: null
notes: null
- id: p8-s7
name: 'Cross-panel navigation: Files → Editor, modified file → Diff'
status: pending
commit: null
pr: null
notes: null
dod:
- id: p8-d1
check: 'Files/Editor/Diff panels render correctly in sidebar'
status: pending
commit: null
pr: null
- id: p8-d2
check: 'Panels scoped to active session working directory'
status: pending
commit: null
pr: null
- id: p8-d3
check: 'Full-width overlay works for Editor and Diff'
status: pending
commit: null
pr: null
- id: p8-d4
check: 'Cross-panel navigation works'
status: pending
commit: null
pr: null
- id: p8-d5
check: 'Vite API plugins remain functional as dev fallback'
status: pending
commit: null
pr: null
- id: phase-9
name: 'Usage Metrics'
status: pending
blocked_by:
- phase-7
specs: []
steps:
- id: p9-s1
name: 'Research Claude Code usage data exposure (billing API, local logs, terminal output)'
status: pending
commit: null
pr: null
notes: null
- id: p9-s2
name: 'Implement context window tracking (parse from terminal or estimate)'
status: pending
commit: null
pr: null
notes: null
- id: p9-s3
name: 'Implement 5-hour window usage counter'
status: pending
commit: null
pr: null
notes: null
- id: p9-s4
name: 'Build Usage Details collapsible section: weekly, monthly, cost breakdown'
status: pending
commit: null
pr: null
notes: null
- id: p9-s5
name: 'Persist usage data locally (SQLite or JSON in app data dir)'
status: pending
commit: null
pr: null
notes: null
dod:
- id: p9-d1
check: 'Context window smiley reflects actual usage'
status: pending
commit: null
pr: null
- id: p9-d2
check: '5-hour usage counter updates in real-time'
status: pending
commit: null
pr: null
- id: p9-d3
check: 'Usage Details shows weekly/monthly breakdown'
status: pending
commit: null
pr: null
- id: p9-d4
check: 'Usage persists across app restarts'
status: pending
commit: null
pr: null
- id: phase-10
name: 'Desktop Polish'
status: pending
blocked_by:
- phase-7
specs: []
steps:
- id: p10-s1
name: 'Window state persistence (tauri-plugin-window-state)'
status: pending
commit: null
pr: null
notes: null
- id: p10-s2
name: 'Native menu bar (platform-specific)'
status: pending
commit: null
pr: null
notes: null
- id: p10-s3
name: 'System tray with show/hide and quit'
status: pending
commit: null
pr: null
notes: null
- id: p10-s4
name: 'Global keyboard shortcuts (tauri-plugin-global-shortcut)'
status: pending
commit: null
pr: null
notes: null
- id: p10-s5
name: 'Auto-updater (tauri-plugin-updater + GitHub releases)'
status: pending
commit: null
pr: null
notes: null
- id: p10-s6
name: 'Platform-specific title bar (macOS traffic lights, Windows controls)'
status: pending
commit: null
pr: null
notes: null
- id: p10-s7
name: 'Bundle fonts (Manrope, Inter, JetBrains Mono) — no CDN dependency'
status: pending
commit: null
pr: null
notes: null
dod:
- id: p10-d1
check: 'Window position and size persists across restarts'
status: pending
commit: null
pr: null
- id: p10-d2
check: 'System tray works on all platforms'
status: pending
commit: null
pr: null
- id: p10-d3
check: 'Auto-updater checks GitHub releases and prompts user'
status: pending
commit: null
pr: null
- id: p10-d4
check: 'App renders correctly with no network connection (bundled fonts)'
status: pending
commit: null
pr: null
- id: electron-migration
name: 'Electron Runtime Migration (Tauri → Electron, 3 merged PRs / 6 design tracks)'
status: in_progress
blocked_by: []
specs:
- docs/superpowers/plans/2026-05-13-electron-rust-backend-migration.md
- docs/superpowers/specs/2026-05-13-pr-a-runtime-neutral-rust-backend-design.md
- docs/superpowers/specs/2026-05-13-pr-b-rust-sidecar-ipc-design.md
- docs/superpowers/specs/2026-05-14-pr-c-frontend-backend-bridge-design.md
- docs/superpowers/specs/2026-05-14-pr-d1-electron-shell-sidecar-wiring-design.md
- docs/superpowers/specs/2026-05-15-pr-d2-e2e-electron-driver-swap-design.md
- docs/superpowers/specs/2026-05-15-pr-d3-tauri-removal-design.md
notes: >-
Sub-project track parallel to the main phase ladder. Goal: replace
the Tauri 2 desktop shell with Electron while preserving the Rust
backend (PTY sessions, filesystem, git status/diff/watch, agent
observability). The Rust crate now compiles without any `tauri::*`
dep — production state is an Electron shell that spawns
`vimeflow-backend` as a stdio sidecar with LSP-framed JSON IPC.
Frontend renderer talks through `window.vimeflow.{invoke,listen}`
exposed by the Electron preload script. `npm run electron:build`
produces a Linux AppImage with the sidecar bundled as an
extraResource. macOS/Windows packaging matrix, code signing,
auto-update wiring are deferred follow-ups (Phase 10 / future
tracks). The `src-tauri/` → `crates/backend/` directory rename is
complete in this follow-up branch. The runtime cutover is
complete; the phase remains in_progress until the final main-branch
E2E workflow DoD below is observed.
Retrospective: docs/superpowers/retros/2026-05-16-electron-migration.md.
steps:
- id: em-pra
name: 'PR-A — Runtime-neutral Rust backend (BackendState + EventSink trait)'
status: done
notes: 'Extracted *_inner helpers + BackendState methods so production wrappers and tests share runtime-neutral entry points.'
- id: em-prb
name: 'PR-B — Rust sidecar IPC (LSP-framed JSON, stdout writer task, backpressure)'
status: done
notes: 'Added crates/backend/src/bin/vimeflow-backend.rs + crates/backend/src/runtime/ipc.rs; the sidecar is what Electron spawns.'
- id: em-prc
name: 'PR-C — Frontend backend bridge (src/lib/backend.ts)'
status: done
notes: 'Renderer-side IPC seam. Falls back to @tauri-apps/api when window.vimeflow is unset; pinned PR-D3 to a 4-to-6-line bridge edit (PR-C spec §2.5).'
- id: em-prd1
name: 'PR-D1 — Electron shell + sidecar wiring (#209)'
status: done
commit: 105f0ec
pr: 209
notes: 'electron/main.ts + preload.ts + sidecar.ts. Tauri stays alive — npm run tauri:dev and npm run electron:dev work side-by-side.'
- id: em-prd2
name: 'PR-D2 — E2E driver swap to @wdio/electron-service (#210)'
status: done
commit: 96aed26
pr: 210
notes: 'Replaced tauri-driver with @wdio/electron-service; all 11 E2E specs land unchanged.'
- id: em-prd3
name: 'PR-D3 — Final Tauri runtime removal + electron-builder packaging (#211)'
status: done
commit: c5433da
pr: 211
notes: '20 #[tauri::command] wrappers deleted; src-tauri/{main.rs, build.rs, tauri.conf.json, capabilities/, icons/} deleted; @tauri-apps/* + tauri Cargo deps removed; electron-builder.yml + build/icon.png + crate README added (now crates/backend/README.md); npm run electron:build produces a Linux AppImage.'
dod:
- id: em-d1
check: '`npm run electron:dev` opens Electron with a working PTY terminal'
status: done
- id: em-d2
check: '`npm run electron:build` produces a runnable AppImage at release/vimeflow-*.AppImage'
status: done
commit: c5433da
pr: 211
- id: em-d3
check: '`cargo test` count matches PR-D2 baseline (deleted Tauri wrappers had no tests; cfg(test) aliases preserved)'
status: done
commit: c5433da
pr: 211
- id: em-d4
check: 'Zero runtime Tauri references in src/, crates/backend/, tests/, package.json, vite.config.ts (excluding docs/, target/, bindings/, *.md, *.puml, *.svg)'
status: done
commit: c5433da
pr: 211
- id: em-d5
check: 'CI e2e.yml green on Electron (no GTK/webkit2gtk apt deps)'
status: done
commit: d09cd60
pr: 230
notes: 'E2E Tests workflow passed on main for d09cd60 on 2026-05-20 after PR #230 fixed terminal keystroke chunking.'
- id: ui-handoff-migration
name: 'UI Handoff Migration (handoff §9 + token cleanup)'
status: in_progress
blocked_by: []
specs:
- docs/superpowers/specs/2026-05-05-ui-handoff-migration-design.md
notes: >-
UI handoff migration is the active visual track. Steps 1-5c2 landed:
tokens/registry (#171), shell layout (#173), sidebar/session tabs
(#174), single TerminalPane (#190), pane model (#198), SplitView
render (#199), layout picker + focus + motion (#203), and pane
lifecycle mutations (#204). BottomDrawer was replaced by DockPanel
(#215), then shared focus/shortcuts (#218), elastic resize (#219),
command-palette result styling (#221), and tooltip shortcut chips
(#224) followed. The pane-layout registry / ratio-model / `grid3x2`
expansion is now in progress on VIM-151: the active branch adds a
central layout registry, track-array resize state, 6-pane `grid3x2`
rendering, restore support, and `Mod+1-6` pane focus. Remaining
active gaps: 5d auto-grow on layout pick, activity-panel polish, full
command-palette modal polish, and issue #225 for Mod+\ / Mod+B
shortcut discovery.
steps:
- id: ui-s1
name: 'Tokens + agents registry'
status: done
commit: 38af7ab
pr: 171
- id: ui-s2
name: 'App shell layout (proportions + status bar + session-tab strip)'
status: done
commit: 266b3a0
pr: 173
- id: ui-s3
name: 'Sidebar sessions list + browser-style session tabs'
status: done
commit: ab1b888
pr: 174
- id: ui-s4
name: 'Single TerminalPane (handoff §4.6)'
status: done
commit: f585ac8
pr: 190
notes: 'TerminalPane handoff shell, header/body/footer, xterm bridge, and UI adjustments. Later native Ghostty work made the packaged macOS renderer path built-in while preserving xterm fallback.'