7.3 KiB
Complete Partial Features Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Finish sshkeeper features that are currently stubbed or partially implemented, then align documentation and screenshots with the actual product.
Architecture: Keep changes surgical and local to existing command, TUI, database, SSH, and tunnel modules. Prefer existing callbacks and model types over new abstractions. Each task must end with focused tests, a commit, and a push to origin/main.
Tech Stack: Go 1.25, Cobra, Bubble Tea, SQLite via modernc.org/sqlite, OpenSSH command execution.
Files
- Modify
cmd/forward.go: makeforward editupdate stored forwards instead of printing a fake success. - Modify
cmd/tunnel.go: add--background,list,stop, andstop-alltunnel CLI support. - Modify
internal/tunnel/manager.go: improve process status checks, cleanup, and background tunnel startup validation. - Modify
internal/ssh/command.goand/orinternal/ssh/pty.go: support safe non-interactive background tunnel behavior for secret auth or reject unsupported modes clearly. - Modify
internal/db/servers.go: search route JSON, tags, and forward fields. - Modify
internal/tui/forward.go: fix SOCKS/dynamic focus panic. - Modify
internal/tui/app.go,internal/tui/help_screen.go,cmd/tui.go: remove or implement action-menu stubs. - Modify
cmd/import.go,cmd/extra.goas needed if TUI import/export should delegate to existing CLI behavior. - Modify
README.md,docs/guide.md,docs/roadmap/v0.2.0.md: bring docs into line with implemented behavior. - Replace
docs/screenshots/screen_*.png: clean screenshots for main, action menu, routes, forwards, tunnels. - Add/modify tests in
cmd/*_test.go,internal/db/*_test.go,internal/tui/*_test.go,internal/tunnel/*_test.go,internal/ssh/*_test.go.
Task 1: Small Partial Features and Search
-
Step 1: Add failing tests for SOCKS forward form focus.
- Test file:
internal/tui/app_test.go. - Behavior: selecting dynamic/SOCKS and rendering/updating focus must not panic.
- Run:
env GOCACHE=/tmp/sshkeeper-go-cache go test ./internal/tui -run 'TestForward.*Dynamic|TestForward.*SOCKS'. - Expected before implementation: fail or panic.
- Test file:
-
Step 2: Fix the forward form label/focus logic.
- File:
internal/tui/forward.go. - Keep hidden inputs from asking for labels that do not exist for dynamic forwards.
- File:
-
Step 3: Add failing CLI tests for
forward edit.- Test file:
cmd/forward_test.goor existing cmd tests. - Behavior: editing
--enabled=falsepersists the enabled state for the selected forward. - Run focused cmd tests.
- Test file:
-
Step 4: Implement
forward edit.- File:
cmd/forward.go. - Load the forward, validate it exists, apply only changed flags, persist with
appDB.UpdateForward.
- File:
-
Step 5: Add failing search tests.
- Test file:
internal/db/servers_test.go. - Behavior: search finds servers by tags, route hops, and forward ports.
- Test file:
-
Step 6: Implement expanded search.
- File:
internal/db/servers.go. - Use SQL
EXISTSsubqueries for tags and forwards, includeroute_hops.
- File:
-
Step 7: Verify and commit.
- Run:
env GOCACHE=/tmp/sshkeeper-go-cache go test ./internal/tui ./internal/db ./cmd. - Run:
env GOCACHE=/tmp/sshkeeper-go-cache go vet ./.... - Commit:
fix: complete forwards and search behavior. - Push:
git push origin main.
- Run:
Task 2: Tunnel CLI and Background State
-
Step 1: Add failing tests for tunnel process status.
- Test file:
internal/tunnel/manager_test.go. - Behavior:
IsRunningreturns false for missing/stopped PIDs and uses signal 0 semantics.
- Test file:
-
Step 2: Fix process status and cleanup.
- File:
internal/tunnel/manager.go. - Use
syscall.Signal(0), remove stopped states on list/refresh where appropriate, and report save errors when state persistence fails.
- File:
-
Step 3: Add failing command tests for tunnel subcommands.
- Test file:
cmd/tunnel_test.go. - Behavior:
tunnel --helpexposes--background;tunnel list,tunnel stop <id>, andtunnel stop-allare registered.
- Test file:
-
Step 4: Implement tunnel CLI subcommands.
- File:
cmd/tunnel.go. --backgroundstartstunnelpkg.Start;listprints saved states and status;stopandstop-alldelegate to manager.
- File:
-
Step 5: Handle secret auth background tunnels safely.
- File:
cmd/tunnel.goorinternal/tunnel/manager.go. - If password/key-passphrase background tunneling cannot be supported safely without interactive PTY, reject with a clear error. Do not create a broken saved state.
- File:
-
Step 6: Verify and commit.
- Run:
env GOCACHE=/tmp/sshkeeper-go-cache go test ./internal/tunnel ./cmd ./internal/ssh. - Run:
env GOCACHE=/tmp/sshkeeper-go-cache go vet ./.... - Commit:
feat: add tunnel background cli management. - Push:
git push origin main.
- Run:
Task 3: TUI Stub Actions
-
Step 1: Route action.
- Implement a non-stub route action in TUI. Minimal acceptable behavior: open an edit flow for route hops or delegate to server edit where route/proxy jump can be changed, with clear user-facing text.
- Add tests that action no longer sets
not yet implemented.
-
Step 2: Import/export actions.
- Implement TUI import by calling existing import logic and refreshing the server list.
- Implement TUI export if a real export command exists; otherwise remove the TUI action and documentation entry so no fake capability is shown.
-
Step 3: Vault actions.
- Implement TUI vault lock by locking the current process vault.
- Implement TUI vault change password only if it can safely exit to a CLI prompt; otherwise remove the menu entry and keep the CLI command documented.
-
Step 4: Verify and commit.
- Run:
env GOCACHE=/tmp/sshkeeper-go-cache go test ./internal/tui ./cmd. - Run:
env GOCACHE=/tmp/sshkeeper-go-cache go vet ./.... - Commit:
feat: replace tui action stubs. - Push:
git push origin main.
- Run:
Task 4: Documentation and Screenshots
-
Step 1: Update README and guide.
- Ensure every documented command exists and every TUI action described is implemented or intentionally absent.
- Clarify background tunnels with secret auth limitations if unsupported.
-
Step 2: Update roadmap status.
- Mark fulfilled features accurately and note remaining future work only if it is not shown as available.
-
Step 3: Rebuild and capture screenshots.
- Build binary with
env GOCACHE=/tmp/sshkeeper-go-cache go build -o /tmp/sshkeeper-screens .. - Use isolated
XDG_CONFIG_HOMEandXDG_DATA_HOMEunder/tmp. - Capture clean terminal screenshots for main list, action menu, route/forward/tunnel screens.
- Build binary with
-
Step 4: Verify and commit.
- Run:
env GOCACHE=/tmp/sshkeeper-go-cache go test ./.... - Run:
env GOCACHE=/tmp/sshkeeper-go-cache go vet ./.... - Commit:
docs: align guide and screenshots. - Push:
git push origin main.
- Run:
Final Verification
- Run full checks:
env GOCACHE=/tmp/sshkeeper-go-cache go test ./.... - Run full vet:
env GOCACHE=/tmp/sshkeeper-go-cache go vet ./.... - Confirm
git status --short --branchis clean andmainis pushed.