summaryrefslogtreecommitdiff
path: root/internal/cli/cli.go
AgeCommit message (Collapse)Author
2026-04-18feat: make keepass the default backend with master.kdbx default pathPaul Buetow
Change default backend from "geheim" to "keepass" and default KDBXPath from ~/Documents/Keepass/master to ~/Documents/Keepass/master.kdbx. Existing geheim users must set backend="geheim" in ~/.config/foostore.json. Update resolveBackend fallback, struct comments, and test assertions to match. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-18feat: add --kdbx-path CLI flag to override KeePass database path at runtimePaul Buetow
Allows specifying the .kdbx file path without editing the config file: foostore --backend keepass --kdbx-path /path/to/db.kdbx ls The flag overrides cfg.KDBXPath for the process lifetime. Implemented by extracting a shared parseFlagValue helper used by both parseBackendFlag and the new parseKDBXPathFlag. Help text updated to document both global flags. Table-driven tests added for parseKDBXPathFlag (mirrors TestParseBackendFlag). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17refactor: extract buildGeheimGit helper to keep buildGeheimBackend under 30 ↵Paul Buetow
lines Extracts a 3-line buildGeheimGit(cfg) helper from buildGeheimBackend, mirroring the existing buildKeepassGit pattern and satisfying the project guideline of keeping functions under 30 lines. Also includes the full o4 backend-abstraction changeset: Gitter interface, git.NoOp, --backend flag parsing, keepass backend wiring, and effectiveBackend guard for migrate-kdbx. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17refactor: extract Backend interface decoupling CLI from *store.Store (task j4)Paul Buetow
Add internal/backend/backend.go with a Backend interface covering all 10 CLI-facing methods. Change CLI.st field type to backend.Backend. Compile-time guard var _ Backend = (*store.Store)(nil) prevents drift. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-07Add KeePass migration command with text/password and binary attachment supportPaul Buetow
2026-03-02store/cli: move search output to CLI layer (task 400)Paul Buetow
2026-03-02store: make Data carry injected deps (task 402)Paul Buetow
2026-03-02store/cli: deduplicate shred helper (task 400)Paul Buetow
2026-02-23Release v0.5.2v0.5.2Paul Buetow
2026-02-22Replace all geheim path/name defaults with foostorePaul Buetow
- Default data_dir: ~/git/geheimlager → ~/git/foostore-data - Default export_dir: ~/.geheimlagerexport → ~/.foostore-export - Default key_file: ~/.geheimlager.key → ~/.foostore.key - Rename env var GEHEIM_SHELL → FOOSTORE_SHELL - Update package-level comments across cli, shell, store, git, config - Update Magefile and CLAUDE.md docs to reflect new paths Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22Rename binary from geheim to foostorePaul Buetow
- go.mod: module path codeberg.org/snonux/geheim → codeberg.org/snonux/foostore - cmd/geheim/ → cmd/foostore/ - Magefile.go: binary/binaryName/mainPkg constants updated - internal/config: config file path ~/.config/geheim.json → ~/.config/foostore.json - All import paths and comments updated throughout - Delete geheim.rb (the original Ruby implementation, superseded by this Go rewrite) - CLAUDE.md rewritten to reflect the Go implementation, new binary name, build system (mage), and current package architecture Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22Enforce Go best practices (task 344)Paul Buetow
- Magefile.go: add Default() target so bare `mage` builds the binary; fix Install()/Uninstall() to use $GOPATH/bin (default ~/go/bin) instead of the previous hardcoded ~/.local/bin path; use cp -v for visibility; fix 0755 -> 0o755 octal literal in createBinDir; extract binaryName const - cmd/geheim/main.go: add -version flag (prints version.Version and exits); pass flag.Args() instead of os.Args[1:] so flags are parsed cleanly - internal/cli/cli.go: remove dead fatal() and prompt() helpers that were never called anywhere in the codebase Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22Update main.go and cli API for signal-cancellable context (task 352/main)Paul Buetow
main.go: set up signal.NotifyContext(SIGINT, SIGTERM) so long-running operations (fzf, external editors) terminate gracefully on interrupts. Call cli.New(ctx) explicitly and pass the context to c.Run(ctx, argv), matching the task spec and allowing the context to flow through all store/git/crypto operations. cli: expose New(ctx) and Run(ctx, argv) as the public API; remove the package-level Run() helper that created its own context.Background(). Verified: mage build produces ./bin/geheim; PIN=test ./bin/geheim version prints "> geheim v0.4.0". Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22Implement internal/cli package (task 352/cli)Paul Buetow
Full command dispatch, interactive shell loop, and all geheim commands mirroring the Ruby CLI class (geheim.rb lines 551-713). Key design points: - CLI struct holds all runtime deps; lastResult field enables Ruby-style fallback search term when a search command is given without an argument - dispatch → dispatchSimple (no-term commands) + dispatchSearch (term-based) kept under ~50 lines each per style guidelines - ActionOpen shreds the exported file immediately after opening, matching Ruby's shred_file(delay: 0) call - import implements Ruby's three-way dest_dir logic: nil→full src_path, contains-dot→literal dest, plain-dir→dir/basename(src) - completionFn notes $PIN limitation for description completion - openExported extends Ruby's OS detection with xdg-open, iTerm, Termux heuristics; comment documents the divergence from Ruby's evince default Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22Add Go project scaffold (task 352)Paul Buetow
- go.mod with module codeberg.org/snonux/geheim (go 1.22, mage dep) - Magefile.go with Build, Test, Install, Uninstall targets - cmd/geheim/main.go delegating to internal/cli - Stub packages: cli, version, config, crypto, git, store, clipboard, shell - go.sum generated; binary confirmed to build via mage build Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>