diff --git a/.doc-manager.yml b/.doc-manager.yml new file mode 100644 index 00000000..2094e3ab --- /dev/null +++ b/.doc-manager.yml @@ -0,0 +1,149 @@ +platform: hugo +exclude: +- '*.pb.go' +- '*_test.go' +- vendor/* +- test/* +- specs/* +- .specify/* +- .spec-workflow/* +sources: +- cmd/**/*.go +- internal/**/*.go +- '*.go' +docs_path: docs +use_gitignore: true +doc_mappings: + cli: docs/03-reference/command-reference.md + api: docs/03-reference/security-architecture.md + config: docs/03-reference/configuration.md + dependency: docs/01-getting-started/manual-install.md + infrastructure: docs/06-development/ci-cd.md +metadata: + language: Go + created: '2025-11-28T23:13:03.879609' + version: 1.0.0 +include_root_readme: true + +api_coverage: + strategy: all_then_underscore + preset: go-test + exclude_symbols: + # Test symbols + - "*_test" + - "mock*" + - "Mock*" + + # Internal data structures (not user-facing config) + # Vault/Credential types + - "Credential" + - "VaultData" + - "RecoveryMetadata" + - "UsageRecord" + - "UpdateOpts" + - "CredentialMetadata" + - "usageRecordWithPath" + + # Service types (internal API) + - "KeychainService" + - "CryptoService" + - "VaultService" + + # Health check types + - "HealthReport" + - "CheckResult" + - "HealthSummary" + - "BackupChecker" + - "ConfigChecker" + - "VersionCheckDetails" + - "VaultCheckDetails" + - "ConfigCheckDetails" + - "KeychainCheckDetails" + - "BackupCheckDetails" + - "ConfigError" + - "KeychainEntry" + - "BackupFile" + + # Validation types (internal) + - "ValidationResult" + - "ValidationError" + - "ValidationWarning" + - "Keybinding" + + # Vault operation types + - "KeychainStatus" + - "RemoveVaultResult" + + # Only Config and TerminalConfig are user-facing configuration + +# ============================================================================ +# Configuration Guide & Examples +# ============================================================================ + +# Exclude Patterns +# ---------------- +# Use glob patterns to exclude files from documentation tracking. +# Examples: +# exclude: +# - "**/node_modules/**" # Exclude all node_modules directories +# - "**/*.pyc" # Exclude Python bytecode files +# - "**/dist/**" # Exclude build artifacts +# - "**/.git/**" # Exclude git directory +# - "**/venv/**" # Exclude Python virtual environments +# - "**/__pycache__/**" # Exclude Python cache + +# Source Files (Glob Patterns) +# ----------------------------- +# Glob patterns to specify which source files to track. +# IMPORTANT: Use glob patterns (e.g., 'src/**/*.py'), not just directory names. +# Examples: +# sources: +# - "src/**/*.py" # All Python files in src/ +# - "lib/**/*.js" # All JavaScript files in lib/ +# - "packages/core/**/*.ts" # TypeScript files in packages/core/ +# - "**/*.go" # All Go files in project + +# Documentation Path +# ------------------- +# Path to documentation directory (relative to project root). +# Common values: docs, doc, documentation, website/docs + +# Platform +# -------- +# Documentation platform: mkdocs, sphinx, hugo, docusaurus, etc. +# Set to 'unknown' if not using a specific platform. + +# Include Root README +# ------------------- +# Set to true to include the root README.md in documentation operations. +# When enabled, validation, quality assessment, and change detection +# will include the root README.md alongside docs in the docs/ directory. +# Default: false (backwards compatible) + +# Use Gitignore +# ------------- +# Set to true to automatically exclude files based on .gitignore patterns. +# When enabled, files ignored by git will also be excluded from doc tracking. +# Priority: user excludes > .gitignore > built-in defaults +# Default: false (opt-in feature) +# Example: +# use_gitignore: true +# exclude: # Additional patterns beyond .gitignore +# - "specs/**" + +# Documentation Path Mappings +# --------------------------- +# Map change categories to documentation file paths. +# Supports non-standard layouts (documentation/, wiki/, _docs/, etc.). +# When not configured, falls back to default paths in docs/. +# Example: +# doc_mappings: +# cli: 'docs/reference/command-reference.md' +# api: 'docs/reference/api.md' +# config: 'docs/reference/configuration.md' +# dependency: 'docs/getting-started/installation.md' +# infrastructure: 'docs/development/ci-cd.md' +# Non-standard layout example: +# doc_mappings: +# cli: 'documentation/commands.md' # Uses documentation/ instead of docs/ +# api: 'wiki/API-Reference.md' # Uses wiki/ directory diff --git a/.doc-manager/dependencies.json b/.doc-manager/dependencies.json new file mode 100644 index 00000000..f9850949 --- /dev/null +++ b/.doc-manager/dependencies.json @@ -0,0 +1,3319 @@ +{ + "_meta": { + "generated_by": "doc-manager-mcp", + "tool_version": "1.2.3", + "warning": "AUTO-GENERATED FILE - Do not edit manually. Changes will be overwritten by doc-manager." + }, + "generated_at": "2025-12-04T23:31:38.303997", + "doc_to_code": { + "01-getting-started/manual-install.md": [ + "cmd/init.go", + "cmd/version.go" + ], + "01-getting-started/quick-install.md": [ + "cmd/version.go" + ], + "01-getting-started/quick-start.md": [ + "cmd/add.go", + "cmd/delete.go", + "cmd/doctor.go", + "cmd/get.go", + "cmd/init.go", + "cmd/list.go", + "cmd/update.go", + "cmd/version.go" + ], + "02-guides/backup-restore.md": [ + "cmd/doctor.go", + "cmd/vault_backup_create.go", + "cmd/vault_backup_info.go", + "cmd/vault_backup_restore.go" + ], + "02-guides/basic-workflows.md": [ + "cmd/doctor.go", + "cmd/generate.go", + "cmd/keychain_enable.go", + "cmd/keychain_status.go", + "cmd/list.go", + "cmd/tui.go", + "cmd/tui/app.go", + "cmd/tui/components/detail.go", + "cmd/tui/components/forms.go", + "cmd/tui/components/sidebar.go", + "cmd/tui/components/statusbar.go", + "cmd/tui/components/table.go", + "cmd/tui/events/focus.go", + "cmd/tui/events/handlers.go", + "cmd/tui/layout/manager.go", + "cmd/tui/layout/pages.go", + "cmd/tui/main.go", + "cmd/tui/models/navigation.go", + "cmd/tui/models/search.go", + "cmd/tui/models/state.go", + "cmd/tui/styles/theme.go" + ], + "02-guides/keychain-setup.md": [ + "cmd/doctor.go", + "cmd/keychain_enable.go", + "cmd/keychain_status.go", + "cmd/tui.go", + "cmd/tui/app.go", + "cmd/tui/components/detail.go", + "cmd/tui/components/forms.go", + "cmd/tui/components/sidebar.go", + "cmd/tui/components/statusbar.go", + "cmd/tui/components/table.go", + "cmd/tui/events/focus.go", + "cmd/tui/events/handlers.go", + "cmd/tui/layout/manager.go", + "cmd/tui/layout/pages.go", + "cmd/tui/main.go", + "cmd/tui/models/navigation.go", + "cmd/tui/models/search.go", + "cmd/tui/models/state.go", + "cmd/tui/styles/theme.go" + ], + "02-guides/recovery-phrase.md": [ + "cmd/init.go" + ], + "02-guides/scripting-guide.md": [ + "cmd/list.go" + ], + "02-guides/tui-guide.md": [ + "cmd/get.go", + "cmd/list.go" + ], + "02-guides/usage-tracking.md": [ + "cmd/list.go" + ], + "03-reference/_index.md": [], + "03-reference/command-reference.md": [ + "cmd/add.go", + "cmd/config.go", + "cmd/delete.go", + "cmd/doctor.go", + "cmd/generate.go", + "cmd/get.go", + "cmd/init.go", + "cmd/keychain.go", + "cmd/keychain_enable.go", + "cmd/keychain_status.go", + "cmd/list.go", + "cmd/tui.go", + "cmd/tui/app.go", + "cmd/tui/components/detail.go", + "cmd/tui/components/forms.go", + "cmd/tui/components/sidebar.go", + "cmd/tui/components/statusbar.go", + "cmd/tui/components/table.go", + "cmd/tui/events/focus.go", + "cmd/tui/events/handlers.go", + "cmd/tui/layout/manager.go", + "cmd/tui/layout/pages.go", + "cmd/tui/main.go", + "cmd/tui/models/navigation.go", + "cmd/tui/models/search.go", + "cmd/tui/models/state.go", + "cmd/tui/styles/theme.go", + "cmd/update.go", + "cmd/usage.go", + "cmd/vault.go", + "cmd/vault_backup.go", + "cmd/vault_backup_create.go", + "cmd/vault_backup_info.go", + "cmd/vault_backup_restore.go", + "cmd/vault_remove.go", + "cmd/version.go" + ], + "03-reference/configuration.md": [], + "03-reference/known-limitations.md": [ + "cmd/init.go" + ], + "03-reference/migration.md": [ + "cmd/generate.go", + "cmd/init.go", + "cmd/list.go" + ], + "03-reference/security-architecture.md": [ + "cmd/init.go" + ], + "04-troubleshooting/faq.md": [ + "cmd/list.go" + ], + "04-troubleshooting/installation.md": [ + "cmd/init.go", + "cmd/list.go", + "cmd/version.go" + ], + "04-troubleshooting/keychain.md": [ + "cmd/init.go" + ], + "04-troubleshooting/tui.md": [ + "cmd/get.go", + "cmd/list.go", + "cmd/tui.go", + "cmd/tui/app.go", + "cmd/tui/components/detail.go", + "cmd/tui/components/forms.go", + "cmd/tui/components/sidebar.go", + "cmd/tui/components/statusbar.go", + "cmd/tui/components/table.go", + "cmd/tui/events/focus.go", + "cmd/tui/events/handlers.go", + "cmd/tui/layout/manager.go", + "cmd/tui/layout/pages.go", + "cmd/tui/main.go", + "cmd/tui/models/navigation.go", + "cmd/tui/models/search.go", + "cmd/tui/models/state.go", + "cmd/tui/styles/theme.go" + ], + "04-troubleshooting/vault.md": [ + "cmd/init.go", + "cmd/list.go" + ], + "05-operations/health-checks.md": [ + "cmd/doctor.go", + "cmd/init.go" + ], + "05-operations/security-operations.md": [ + "cmd/generate.go", + "cmd/init.go", + "cmd/list.go", + "cmd/version.go" + ], + "06-development/branch-workflow.md": [], + "06-development/ci-cd.md": [], + "06-development/contributing.md": [ + "cmd/add.go", + "cmd/init.go", + "cmd/root.go" + ], + "06-development/homebrew.md": [ + "cmd/version.go" + ], + "06-development/release.md": [], + "06-development/scoop.md": [ + "cmd/version.go" + ], + "_index.md": [], + "README.md": [ + "cmd/doctor.go", + "cmd/generate.go", + "cmd/init.go", + "cmd/keychain_enable.go", + "cmd/keychain_status.go", + "cmd/list.go", + "cmd/vault_backup_create.go", + "cmd/vault_backup_info.go", + "cmd/vault_backup_restore.go", + "cmd/vault_remove.go" + ] + }, + "code_to_doc": { + "cmd/init.go": [ + "01-getting-started/manual-install.md", + "01-getting-started/quick-start.md", + "02-guides/recovery-phrase.md", + "03-reference/command-reference.md", + "03-reference/known-limitations.md", + "03-reference/migration.md", + "03-reference/security-architecture.md", + "04-troubleshooting/installation.md", + "04-troubleshooting/keychain.md", + "04-troubleshooting/vault.md", + "05-operations/health-checks.md", + "05-operations/security-operations.md", + "06-development/contributing.md", + "README.md" + ], + "cmd/version.go": [ + "01-getting-started/manual-install.md", + "01-getting-started/quick-install.md", + "01-getting-started/quick-start.md", + "03-reference/command-reference.md", + "04-troubleshooting/installation.md", + "05-operations/security-operations.md", + "06-development/homebrew.md", + "06-development/scoop.md" + ], + "cmd/add.go": [ + "01-getting-started/quick-start.md", + "03-reference/command-reference.md", + "06-development/contributing.md" + ], + "cmd/delete.go": [ + "01-getting-started/quick-start.md", + "03-reference/command-reference.md" + ], + "cmd/doctor.go": [ + "01-getting-started/quick-start.md", + "02-guides/backup-restore.md", + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "05-operations/health-checks.md", + "README.md" + ], + "cmd/get.go": [ + "01-getting-started/quick-start.md", + "02-guides/tui-guide.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/list.go": [ + "01-getting-started/quick-start.md", + "02-guides/basic-workflows.md", + "02-guides/scripting-guide.md", + "02-guides/tui-guide.md", + "02-guides/usage-tracking.md", + "03-reference/command-reference.md", + "03-reference/migration.md", + "04-troubleshooting/faq.md", + "04-troubleshooting/installation.md", + "04-troubleshooting/tui.md", + "04-troubleshooting/vault.md", + "05-operations/security-operations.md", + "README.md" + ], + "cmd/update.go": [ + "01-getting-started/quick-start.md", + "03-reference/command-reference.md" + ], + "cmd/vault_backup_create.go": [ + "02-guides/backup-restore.md", + "03-reference/command-reference.md", + "README.md" + ], + "cmd/vault_backup_info.go": [ + "02-guides/backup-restore.md", + "03-reference/command-reference.md", + "README.md" + ], + "cmd/vault_backup_restore.go": [ + "02-guides/backup-restore.md", + "03-reference/command-reference.md", + "README.md" + ], + "cmd/generate.go": [ + "02-guides/basic-workflows.md", + "03-reference/command-reference.md", + "03-reference/migration.md", + "05-operations/security-operations.md", + "README.md" + ], + "cmd/keychain_enable.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "README.md" + ], + "cmd/keychain_status.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "README.md" + ], + "cmd/tui.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/app.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/components/detail.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/components/forms.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/components/sidebar.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/components/statusbar.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/components/table.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/events/focus.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/events/handlers.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/layout/manager.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/layout/pages.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/main.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/models/navigation.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/models/search.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/models/state.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/tui/styles/theme.go": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "cmd/config.go": [ + "03-reference/command-reference.md" + ], + "cmd/keychain.go": [ + "03-reference/command-reference.md" + ], + "cmd/usage.go": [ + "03-reference/command-reference.md" + ], + "cmd/vault.go": [ + "03-reference/command-reference.md" + ], + "cmd/vault_backup.go": [ + "03-reference/command-reference.md" + ], + "cmd/vault_remove.go": [ + "03-reference/command-reference.md", + "README.md" + ], + "cmd/root.go": [ + "06-development/contributing.md" + ] + }, + "unmatched_references": { + "checksums.txt": [ + "01-getting-started/manual-install.md", + "06-development/scoop.md" + ], + "pass-cli": [ + "01-getting-started/manual-install.md", + "02-guides/tui-guide.md", + "03-reference/command-reference.md", + "03-reference/migration.md", + "04-troubleshooting/tui.md", + "06-development/homebrew.md", + "README.md" + ], + "explicit": [ + "01-getting-started/manual-install.md", + "02-guides/tui-guide.md" + ], + "pass-cli version": [ + "01-getting-started/manual-install.md", + "01-getting-started/quick-install.md", + "01-getting-started/quick-start.md", + "03-reference/command-reference.md", + "04-troubleshooting/installation.md", + "05-operations/security-operations.md", + "06-development/homebrew.md", + "06-development/scoop.md" + ], + "pass-cli init": [ + "01-getting-started/manual-install.md", + "01-getting-started/quick-start.md", + "02-guides/recovery-phrase.md", + "03-reference/command-reference.md", + "03-reference/migration.md", + "03-reference/security-architecture.md", + "04-troubleshooting/installation.md", + "04-troubleshooting/keychain.md", + "04-troubleshooting/vault.md", + "05-operations/health-checks.md", + "05-operations/security-operations.md", + "README.md" + ], + "pass-cli add test # Add a test credential": [ + "01-getting-started/manual-install.md" + ], + "pass-cli get test # Retrieve it": [ + "01-getting-started/manual-install.md" + ], + "pass-cli delete test": [ + "01-getting-started/manual-install.md" + ], + "vault_path": [ + "01-getting-started/quick-start.md", + "02-guides/scripting-guide.md", + "03-reference/configuration.md", + "03-reference/migration.md", + "05-operations/health-checks.md" + ], + "pass-cli list": [ + "01-getting-started/quick-start.md", + "02-guides/basic-workflows.md", + "02-guides/scripting-guide.md", + "02-guides/usage-tracking.md", + "03-reference/command-reference.md", + "03-reference/migration.md", + "04-troubleshooting/faq.md", + "04-troubleshooting/installation.md", + "04-troubleshooting/tui.md", + "04-troubleshooting/vault.md", + "05-operations/security-operations.md", + "README.md" + ], + "pass-cli add github": [ + "01-getting-started/quick-start.md", + "02-guides/backup-restore.md", + "02-guides/basic-workflows.md", + "03-reference/command-reference.md", + "03-reference/migration.md", + "README.md" + ], + "vault-requiring": [ + "01-getting-started/quick-start.md", + "03-reference/command-reference.md" + ], + "pass-cli get github": [ + "01-getting-started/quick-start.md", + "02-guides/basic-workflows.md", + "02-guides/scripting-guide.md", + "02-guides/tui-guide.md", + "03-reference/command-reference.md", + "03-reference/migration.md", + "04-troubleshooting/tui.md", + "README.md" + ], + "vault.enc.backup": [ + "02-guides/backup-restore.md", + "03-reference/command-reference.md", + "03-reference/security-architecture.md", + "04-troubleshooting/vault.md" + ], + "pass-cli vault backup info": [ + "02-guides/backup-restore.md", + "03-reference/command-reference.md", + "README.md" + ], + "pass-cli vault backup create": [ + "02-guides/backup-restore.md", + "03-reference/command-reference.md", + "README.md" + ], + "pass-cli doctor": [ + "02-guides/backup-restore.md", + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "05-operations/health-checks.md", + "README.md" + ], + "restore": [ + "02-guides/backup-restore.md" + ], + "info": [ + "02-guides/backup-restore.md" + ], + "pass-cli vault backup restore": [ + "02-guides/backup-restore.md", + "03-reference/command-reference.md", + "README.md" + ], + "pass-cli generate": [ + "02-guides/basic-workflows.md", + "03-reference/command-reference.md", + "03-reference/migration.md", + "05-operations/security-operations.md", + "README.md" + ], + "pass-cli generate --length": [ + "02-guides/basic-workflows.md" + ], + "pass-cli add github -u": [ + "02-guides/basic-workflows.md" + ], + "pass-cli update github --generate": [ + "02-guides/basic-workflows.md" + ], + "pass-cli update github --generate --gen-length": [ + "02-guides/basic-workflows.md" + ], + "pass-cli keychain enable": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "README.md" + ], + "pass-cli keychain status": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md", + "03-reference/command-reference.md", + "README.md" + ], + "pass-cli get github --json": [ + "02-guides/basic-workflows.md" + ], + "pass-cli update github": [ + "02-guides/basic-workflows.md", + "03-reference/command-reference.md", + "README.md" + ], + "pass-cli delete github": [ + "02-guides/basic-workflows.md", + "03-reference/command-reference.md", + "README.md" + ], + "pass-cli tui # Opens directly, no password prompt": [ + "02-guides/basic-workflows.md", + "02-guides/keychain-setup.md" + ], + "use": [ + "02-guides/keychain-setup.md" + ], + "recovery": [ + "02-guides/recovery-phrase.md", + "03-reference/command-reference.md" + ], + "pass-cli change-password": [ + "02-guides/recovery-phrase.md", + "03-reference/command-reference.md", + "03-reference/security-architecture.md", + "04-troubleshooting/faq.md", + "04-troubleshooting/vault.md", + "README.md" + ], + "in": [ + "02-guides/scripting-guide.md" + ], + "pass-cli add service": [ + "02-guides/scripting-guide.md" + ], + "pass-cli update testservice": [ + "02-guides/scripting-guide.md" + ], + "Tab": [ + "02-guides/tui-guide.md" + ], + "Enter": [ + "02-guides/tui-guide.md", + "03-reference/command-reference.md" + ], + "Esc": [ + "02-guides/tui-guide.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "pass-cli get": [ + "02-guides/tui-guide.md", + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "detail_position": [ + "02-guides/tui-guide.md" + ], + "detail_auto_threshold": [ + "02-guides/tui-guide.md" + ], + "no": [ + "02-guides/tui-guide.md", + "03-reference/command-reference.md" + ], + "pass-cli # Opens interactive interface": [ + "02-guides/tui-guide.md" + ], + "pass-cli list # Outputs credential table to stdout": [ + "02-guides/tui-guide.md" + ], + "pass-cli add newcred # Interactive prompts for credential data": [ + "02-guides/tui-guide.md" + ], + "pass-cli list --by-project": [ + "02-guides/usage-tracking.md" + ], + "pass-cli get testservice": [ + "02-guides/usage-tracking.md" + ], + "pass-cli usage github": [ + "02-guides/usage-tracking.md", + "03-reference/command-reference.md" + ], + "pass-cli usage aws-prod": [ + "02-guides/usage-tracking.md" + ], + "cli": [ + "03-reference/_index.md", + "README.md" + ], + "MyPassword": [ + "03-reference/command-reference.md" + ], + "pass-cli change-password --recover": [ + "03-reference/command-reference.md", + "03-reference/migration.md", + "03-reference/security-architecture.md", + "04-troubleshooting/vault.md", + "README.md" + ], + "EDITOR": [ + "03-reference/command-reference.md" + ], + "pass-cli init --enable-audit": [ + "03-reference/command-reference.md", + "README.md" + ], + "pass-cli get github --quiet": [ + "03-reference/command-reference.md" + ], + "pass-cli get github --field": [ + "03-reference/command-reference.md" + ], + "any": [ + "03-reference/command-reference.md" + ], + "each": [ + "03-reference/command-reference.md" + ], + "this": [ + "03-reference/command-reference.md" + ], + "by": [ + "03-reference/command-reference.md" + ], + "pass-cli verify-audit": [ + "03-reference/command-reference.md", + "03-reference/migration.md", + "03-reference/security-architecture.md" + ], + "pass-cli add [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli add github \\": [ + "03-reference/command-reference.md" + ], + "pass-cli get [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli list [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli update [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli update github \\": [ + "03-reference/command-reference.md" + ], + "pass-cli delete [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli change-password [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli generate [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli usage [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli usage aws": [ + "03-reference/command-reference.md" + ], + "pass-cli usage postgres": [ + "03-reference/command-reference.md" + ], + "pass-cli usage heroku": [ + "03-reference/command-reference.md" + ], + "pass-cli usage redis": [ + "03-reference/command-reference.md" + ], + "pass-cli config ": [ + "03-reference/command-reference.md" + ], + "pass-cli config init": [ + "03-reference/command-reference.md", + "03-reference/configuration.md" + ], + "pass-cli config edit": [ + "03-reference/command-reference.md", + "03-reference/configuration.md" + ], + "pass-cli config validate": [ + "03-reference/command-reference.md", + "03-reference/configuration.md" + ], + "pass-cli config reset": [ + "03-reference/command-reference.md", + "03-reference/configuration.md" + ], + "pass-cli keychain ": [ + "03-reference/command-reference.md" + ], + "pass-cli keychain enable [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli keychain status [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli vault ": [ + "03-reference/command-reference.md" + ], + "pass-cli vault remove [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli vault remove /path/to/vault.enc": [ + "03-reference/command-reference.md" + ], + "pass-cli vault backup ": [ + "03-reference/command-reference.md" + ], + "pass-cli vault backup create [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli vault backup restore [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli vault backup info [flags]": [ + "03-reference/command-reference.md" + ], + "pass-cli verify-audit [audit-log-path]": [ + "03-reference/command-reference.md" + ], + "pass-cli verify-audit /path/to/audit.log": [ + "03-reference/command-reference.md" + ], + "pass-cli doctor [flags]": [ + "03-reference/command-reference.md", + "05-operations/health-checks.md" + ], + "pass-cli tui": [ + "03-reference/command-reference.md", + "04-troubleshooting/tui.md" + ], + "pass-cli # Also launches TUI when no command specified": [ + "03-reference/command-reference.md" + ], + "pass-cli help": [ + "03-reference/command-reference.md" + ], + "add_credential": [ + "03-reference/configuration.md" + ], + "edit_credential": [ + "03-reference/configuration.md" + ], + "delete_credential": [ + "03-reference/configuration.md" + ], + "toggle_detail": [ + "03-reference/configuration.md" + ], + "toggle_sidebar": [ + "03-reference/configuration.md" + ], + "InputField": [ + "03-reference/known-limitations.md" + ], + "pass-cli init # CLI mode": [ + "03-reference/known-limitations.md" + ], + "pass-cli # TUI mode": [ + "03-reference/known-limitations.md" + ], + "pass-cli migrate": [ + "03-reference/migration.md" + ], + "every": [ + "03-reference/migration.md" + ], + "migration": [ + "03-reference/migration.md" + ], + "pass-cli add service1": [ + "03-reference/migration.md" + ], + "pass-cli add service2": [ + "03-reference/migration.md" + ], + "pass-cli generate # Copy generated password": [ + "03-reference/migration.md" + ], + "pass-cli get service1": [ + "03-reference/migration.md" + ], + "pass-cli add newservice": [ + "03-reference/migration.md" + ], + "pass-cli get oldservice": [ + "03-reference/migration.md" + ], + "pass-cli generate # Automatically meets policy requirements": [ + "03-reference/migration.md" + ], + "CryptGenRandom": [ + "03-reference/security-architecture.md" + ], + "vault.enc": [ + "03-reference/security-architecture.md", + "04-troubleshooting/vault.md" + ], + "change-password": [ + "04-troubleshooting/faq.md" + ], + "Backspace": [ + "04-troubleshooting/tui.md" + ], + "of": [ + "04-troubleshooting/tui.md" + ], + "pass-cli # No arguments": [ + "04-troubleshooting/tui.md" + ], + "pass-cli list # This is CLI mode": [ + "04-troubleshooting/tui.md" + ], + "complete": [ + "05-operations/health-checks.md", + "_index.md", + "README.md" + ], + "pass-cli doctor # Show details": [ + "05-operations/health-checks.md" + ], + "pass-cli update service": [ + "05-operations/security-operations.md" + ], + "pass-cli get service --json": [ + "05-operations/security-operations.md" + ], + "pass-cli delete old-service": [ + "05-operations/security-operations.md" + ], + "Lint": [ + "06-development/branch-workflow.md" + ], + "Build": [ + "06-development/branch-workflow.md" + ], + "common": [ + "06-development/branch-workflow.md", + "06-development/contributing.md" + ], + "contents": [ + "06-development/ci-cd.md" + ], + "packages": [ + "06-development/ci-cd.md" + ], + "cobra": [ + "06-development/contributing.md" + ], + "pass-cli --help": [ + "06-development/scoop.md" + ], + "pass-cli init --no-recovery": [ + "README.md" + ], + "cross-platform": [ + "README.md" + ], + "core": [ + "README.md" + ], + "pass-cli vault remove": [ + "README.md" + ] + }, + "all_references": { + "config_key": [ + { + "reference": "checksums.txt", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "vault_path", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "vault.enc.backup", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "vault.enc.backup", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "vault_path", + "doc_file": "02-guides/scripting-guide.md" + }, + { + "reference": "detail_position", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "detail_auto_threshold", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "detail_position", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "detail_position", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "detail_position", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "detail_auto_threshold", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "vault.enc.backup", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "vault_path", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "vault_path", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "add_credential", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "edit_credential", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "delete_credential", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "toggle_detail", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "toggle_sidebar", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "vault_path", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "vault_path", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "vault_path", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "vault_path", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "vault_path", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "vault.enc.backup", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "vault.enc", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "vault.enc.backup", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "vault.enc", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "vault.enc.backup", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "vault.enc.backup", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "vault.enc", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "vault.enc", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "vault.enc", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "vault.enc.backup", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "vault.enc.backup", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "vault_path", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "vault_path", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "contents", + "doc_file": "06-development/ci-cd.md" + }, + { + "reference": "contents", + "doc_file": "06-development/ci-cd.md" + }, + { + "reference": "packages", + "doc_file": "06-development/ci-cd.md" + }, + { + "reference": "checksums.txt", + "doc_file": "06-development/scoop.md" + } + ], + "command": [ + { + "reference": "grep", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "pass-cli", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "pass-cli version", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "pass-cli version", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "pass-cli version", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "pass-cli", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "pass-cli init", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "pass-cli", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "pass-cli add test # Add a test credential", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "pass-cli get test # Retrieve it", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "pass-cli delete test", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "pass-cli version", + "doc_file": "01-getting-started/quick-install.md" + }, + { + "reference": "add", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "get", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "list", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "update", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "delete", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "version", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "doctor", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "help", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "init", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "pass-cli list", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "echo", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "pass-cli version", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "pass-cli list", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "pass-cli init", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "pass-cli init", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "pass-cli init", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "pass-cli init", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "info", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup info", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup create", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup create", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup create", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup restore", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup restore", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup restore", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup restore", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup info", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup info", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup info", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup restore", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup create", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup info", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup info", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup restore", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup restore", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup create", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "pass-cli vault backup create", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "secret-tool clear service pass-cli", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "jq", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli generate --length", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli add github -u", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli add github -u", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli update github --generate", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli update github --generate --gen-length", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli keychain enable", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli keychain status", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli keychain status", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli get github --json", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli update github", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli delete github", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli update github", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli update github", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli keychain enable", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli keychain status", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli keychain status", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli tui # Opens directly, no password prompt", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "02-guides/basic-workflows.md" + }, + { + "reference": "pass-cli keychain enable", + "doc_file": "02-guides/keychain-setup.md" + }, + { + "reference": "pass-cli keychain status", + "doc_file": "02-guides/keychain-setup.md" + }, + { + "reference": "pass-cli keychain status", + "doc_file": "02-guides/keychain-setup.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "02-guides/keychain-setup.md" + }, + { + "reference": "pass-cli keychain enable", + "doc_file": "02-guides/keychain-setup.md" + }, + { + "reference": "pass-cli keychain status", + "doc_file": "02-guides/keychain-setup.md" + }, + { + "reference": "pass-cli keychain status", + "doc_file": "02-guides/keychain-setup.md" + }, + { + "reference": "pass-cli tui # Opens directly, no password prompt", + "doc_file": "02-guides/keychain-setup.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "02-guides/keychain-setup.md" + }, + { + "reference": "pass-cli init", + "doc_file": "02-guides/recovery-phrase.md" + }, + { + "reference": "pass-cli init", + "doc_file": "02-guides/recovery-phrase.md" + }, + { + "reference": "pass-cli init", + "doc_file": "02-guides/recovery-phrase.md" + }, + { + "reference": "change-password --recover", + "doc_file": "02-guides/recovery-phrase.md" + }, + { + "reference": "pass-cli init", + "doc_file": "02-guides/recovery-phrase.md" + }, + { + "reference": "pass-cli init", + "doc_file": "02-guides/recovery-phrase.md" + }, + { + "reference": "pass-cli init", + "doc_file": "02-guides/recovery-phrase.md" + }, + { + "reference": "pass-cli change-password", + "doc_file": "02-guides/recovery-phrase.md" + }, + { + "reference": "pass-cli init", + "doc_file": "02-guides/recovery-phrase.md" + }, + { + "reference": "pass-cli change-password", + "doc_file": "02-guides/recovery-phrase.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "02-guides/scripting-guide.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "02-guides/scripting-guide.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "02-guides/scripting-guide.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/scripting-guide.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "02-guides/scripting-guide.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "02-guides/scripting-guide.md" + }, + { + "reference": "pass-cli add service", + "doc_file": "02-guides/scripting-guide.md" + }, + { + "reference": "pass-cli update testservice", + "doc_file": "02-guides/scripting-guide.md" + }, + { + "reference": "pass-cli", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "pass-cli get", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "auto", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "right", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "bottom", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "pass-cli", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "pass-cli", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "pass-cli # Opens interactive interface", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "pass-cli list # Outputs credential table to stdout", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "pass-cli add newcred # Interactive prompts for credential data", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "pass-cli", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "pass-cli list --by-project", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli get testservice", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli usage github", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli usage github", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli usage github", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli usage github", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli usage aws-prod", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli usage aws-prod", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "pass-cli list", + "doc_file": "02-guides/usage-tracking.md" + }, + { + "reference": "password123", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli change-password --recover", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "username", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "password", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "category", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "url", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "notes", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "service", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "created", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "modified", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "accessed", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "rm", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "remove", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "gen", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pwd", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "a-z", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "table", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "table", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "json", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "simple", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "get", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "config reset", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "audit-log-path", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init --enable-audit", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "add", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "get", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "list", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "update", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "delete", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get github --quiet", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get github --field", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli verify-audit", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli add [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli add github \\", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli add github \\", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli add github \\", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli list [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli update [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli update github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli update github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli update github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli update github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli update github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli update github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli update github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli update github \\", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli update github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli update github \\", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli delete [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli delete github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli delete github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli delete github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli change-password [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli change-password", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli change-password", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli generate [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli version", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli version", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli usage [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli usage github", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli usage aws", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli usage postgres", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli usage heroku", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli usage redis", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli config ", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli config init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli config init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli config edit", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli config edit", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli config validate", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli config validate", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli config reset", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli config reset", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli keychain ", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli keychain enable [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli keychain enable", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli keychain enable", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli keychain status [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli keychain status", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault ", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault remove [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault remove /path/to/vault.enc", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault remove /path/to/vault.enc", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault remove /path/to/vault.enc", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault backup ", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault backup create [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault backup create", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault backup create", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault backup restore [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault backup restore", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault backup restore", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault backup restore", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault backup restore", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault backup info [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault backup info", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli vault backup info", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli verify-audit [audit-log-path]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli verify-audit", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli verify-audit /path/to/audit.log", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli doctor [flags]", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli tui", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli # Also launches TUI when no command specified", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli tui", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli version", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli help", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "quit", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "help", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "search", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "pass-cli config init", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "pass-cli config edit", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "pass-cli config validate", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "pass-cli config reset", + "doc_file": "03-reference/configuration.md" + }, + { + "reference": "string", + "doc_file": "03-reference/known-limitations.md" + }, + { + "reference": "defer", + "doc_file": "03-reference/known-limitations.md" + }, + { + "reference": "pass-cli init # CLI mode", + "doc_file": "03-reference/known-limitations.md" + }, + { + "reference": "pass-cli # TUI mode", + "doc_file": "03-reference/known-limitations.md" + }, + { + "reference": "pass-cli migrate", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli verify-audit", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli change-password --recover", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli verify-audit", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli add service1", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli add service2", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli generate # Copy generated password", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli add service1", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli get service1", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli add newservice", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli get oldservice", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli generate # Automatically meets policy requirements", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "pass-cli list", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "fsync", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "pass-cli verify-audit", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "pass-cli change-password --recover", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "pass-cli change-password", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "pass-cli init", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "pass-cli verify-audit", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "change-password", + "doc_file": "04-troubleshooting/faq.md" + }, + { + "reference": "pass-cli change-password", + "doc_file": "04-troubleshooting/faq.md" + }, + { + "reference": "pass-cli change-password", + "doc_file": "04-troubleshooting/faq.md" + }, + { + "reference": "pass-cli list", + "doc_file": "04-troubleshooting/faq.md" + }, + { + "reference": "pass-cli version", + "doc_file": "04-troubleshooting/installation.md" + }, + { + "reference": "pass-cli list", + "doc_file": "04-troubleshooting/installation.md" + }, + { + "reference": "pass-cli init", + "doc_file": "04-troubleshooting/installation.md" + }, + { + "reference": "pass-cli init", + "doc_file": "04-troubleshooting/installation.md" + }, + { + "reference": "pass-cli init", + "doc_file": "04-troubleshooting/keychain.md" + }, + { + "reference": "pass-cli get", + "doc_file": "04-troubleshooting/tui.md" + }, + { + "reference": "pass-cli get", + "doc_file": "04-troubleshooting/tui.md" + }, + { + "reference": "pass-cli list", + "doc_file": "04-troubleshooting/tui.md" + }, + { + "reference": "pass-cli tui", + "doc_file": "04-troubleshooting/tui.md" + }, + { + "reference": "pass-cli # No arguments", + "doc_file": "04-troubleshooting/tui.md" + }, + { + "reference": "pass-cli list # This is CLI mode", + "doc_file": "04-troubleshooting/tui.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "04-troubleshooting/tui.md" + }, + { + "reference": "pass-cli", + "doc_file": "04-troubleshooting/tui.md" + }, + { + "reference": "pass-cli init", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "pass-cli change-password --recover", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "pass-cli list", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "pass-cli init", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "pass-cli change-password", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "pass-cli init", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "pass-cli init", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "pass-cli list", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "pass-cli list", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "pass-cli list", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "pass-cli list", + "doc_file": "04-troubleshooting/vault.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli init", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli init", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "libsecret", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "apt-get install libsecret-1-0", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "keyring", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "gnome-keyring", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "jq", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli init", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli doctor [flags]", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli doctor # Show details", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "05-operations/security-operations.md" + }, + { + "reference": "pass-cli init", + "doc_file": "05-operations/security-operations.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "05-operations/security-operations.md" + }, + { + "reference": "pass-cli update service", + "doc_file": "05-operations/security-operations.md" + }, + { + "reference": "pass-cli get service --json", + "doc_file": "05-operations/security-operations.md" + }, + { + "reference": "history -c", + "doc_file": "05-operations/security-operations.md" + }, + { + "reference": "pass-cli list", + "doc_file": "05-operations/security-operations.md" + }, + { + "reference": "pass-cli delete old-service", + "doc_file": "05-operations/security-operations.md" + }, + { + "reference": "pass-cli init", + "doc_file": "05-operations/security-operations.md" + }, + { + "reference": "pass-cli list", + "doc_file": "05-operations/security-operations.md" + }, + { + "reference": "pass-cli version", + "doc_file": "05-operations/security-operations.md" + }, + { + "reference": "main", + "doc_file": "06-development/branch-workflow.md" + }, + { + "reference": "main", + "doc_file": "06-development/branch-workflow.md" + }, + { + "reference": "main", + "doc_file": "06-development/branch-workflow.md" + }, + { + "reference": "main", + "doc_file": "06-development/branch-workflow.md" + }, + { + "reference": "main", + "doc_file": "06-development/ci-cd.md" + }, + { + "reference": "main", + "doc_file": "06-development/ci-cd.md" + }, + { + "reference": "go vet", + "doc_file": "06-development/contributing.md" + }, + { + "reference": "gofmt", + "doc_file": "06-development/contributing.md" + }, + { + "reference": "latest", + "doc_file": "06-development/homebrew.md" + }, + { + "reference": "latest", + "doc_file": "06-development/homebrew.md" + }, + { + "reference": "brew test pass-cli", + "doc_file": "06-development/homebrew.md" + }, + { + "reference": "pass-cli version", + "doc_file": "06-development/homebrew.md" + }, + { + "reference": "pass-cli", + "doc_file": "06-development/homebrew.md" + }, + { + "reference": "netgo", + "doc_file": "06-development/release.md" + }, + { + "reference": "latest", + "doc_file": "06-development/scoop.md" + }, + { + "reference": "latest", + "doc_file": "06-development/scoop.md" + }, + { + "reference": "scoop hash", + "doc_file": "06-development/scoop.md" + }, + { + "reference": "scoop checkver pass-cli -u", + "doc_file": "06-development/scoop.md" + }, + { + "reference": "scoop checkver pass-cli", + "doc_file": "06-development/scoop.md" + }, + { + "reference": "pass-cli version", + "doc_file": "06-development/scoop.md" + }, + { + "reference": "pass-cli --help", + "doc_file": "06-development/scoop.md" + }, + { + "reference": "doctor", + "doc_file": "README.md" + }, + { + "reference": "pass-cli keychain enable", + "doc_file": "README.md" + }, + { + "reference": "pass-cli keychain status", + "doc_file": "README.md" + }, + { + "reference": "pass-cli change-password --recover", + "doc_file": "README.md" + }, + { + "reference": "pass-cli init --no-recovery", + "doc_file": "README.md" + }, + { + "reference": "pass-cli init --enable-audit", + "doc_file": "README.md" + }, + { + "reference": "pass", + "doc_file": "README.md" + }, + { + "reference": "pass-cli init", + "doc_file": "README.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "README.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "README.md" + }, + { + "reference": "pass-cli list", + "doc_file": "README.md" + }, + { + "reference": "pass-cli", + "doc_file": "README.md" + }, + { + "reference": "pass-cli list", + "doc_file": "README.md" + }, + { + "reference": "pass-cli init", + "doc_file": "README.md" + }, + { + "reference": "pass-cli add github", + "doc_file": "README.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "README.md" + }, + { + "reference": "pass-cli get github", + "doc_file": "README.md" + }, + { + "reference": "pass-cli list", + "doc_file": "README.md" + }, + { + "reference": "pass-cli update github", + "doc_file": "README.md" + }, + { + "reference": "pass-cli delete github", + "doc_file": "README.md" + }, + { + "reference": "pass-cli generate", + "doc_file": "README.md" + }, + { + "reference": "pass-cli vault remove", + "doc_file": "README.md" + }, + { + "reference": "pass-cli vault backup create", + "doc_file": "README.md" + }, + { + "reference": "pass-cli vault backup restore", + "doc_file": "README.md" + }, + { + "reference": "pass-cli vault backup info", + "doc_file": "README.md" + }, + { + "reference": "pass-cli doctor", + "doc_file": "README.md" + }, + { + "reference": "pass-cli change-password", + "doc_file": "README.md" + } + ], + "semantic_command": [ + { + "reference": "explicit", + "doc_file": "01-getting-started/manual-install.md" + }, + { + "reference": "vault-requiring", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "init", + "doc_file": "01-getting-started/quick-start.md" + }, + { + "reference": "restore", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "info", + "doc_file": "02-guides/backup-restore.md" + }, + { + "reference": "use", + "doc_file": "02-guides/keychain-setup.md" + }, + { + "reference": "recovery", + "doc_file": "02-guides/recovery-phrase.md" + }, + { + "reference": "in", + "doc_file": "02-guides/scripting-guide.md" + }, + { + "reference": "no", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "explicit", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "cli", + "doc_file": "03-reference/_index.md" + }, + { + "reference": "any", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "recovery", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "each", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "this", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "by", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "no", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "vault-requiring", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "get", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "every", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "migration", + "doc_file": "03-reference/migration.md" + }, + { + "reference": "change-password", + "doc_file": "04-troubleshooting/faq.md" + }, + { + "reference": "of", + "doc_file": "04-troubleshooting/tui.md" + }, + { + "reference": "doctor", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "complete", + "doc_file": "05-operations/health-checks.md" + }, + { + "reference": "common", + "doc_file": "06-development/branch-workflow.md" + }, + { + "reference": "cobra", + "doc_file": "06-development/contributing.md" + }, + { + "reference": "root", + "doc_file": "06-development/contributing.md" + }, + { + "reference": "init", + "doc_file": "06-development/contributing.md" + }, + { + "reference": "add", + "doc_file": "06-development/contributing.md" + }, + { + "reference": "common", + "doc_file": "06-development/contributing.md" + }, + { + "reference": "complete", + "doc_file": "_index.md" + }, + { + "reference": "complete", + "doc_file": "_index.md" + }, + { + "reference": "cross-platform", + "doc_file": "README.md" + }, + { + "reference": "complete", + "doc_file": "README.md" + }, + { + "reference": "doctor", + "doc_file": "README.md" + }, + { + "reference": "cli", + "doc_file": "README.md" + }, + { + "reference": "core", + "doc_file": "README.md" + } + ], + "class": [ + { + "reference": "Tab", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "Enter", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "Tab", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "Esc", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "Esc", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "Esc", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "Esc", + "doc_file": "02-guides/tui-guide.md" + }, + { + "reference": "MyPassword", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "EDITOR", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "Tab", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "Enter", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "Esc", + "doc_file": "03-reference/command-reference.md" + }, + { + "reference": "InputField", + "doc_file": "03-reference/known-limitations.md" + }, + { + "reference": "InputField", + "doc_file": "03-reference/known-limitations.md" + }, + { + "reference": "InputField", + "doc_file": "03-reference/known-limitations.md" + }, + { + "reference": "CryptGenRandom", + "doc_file": "03-reference/security-architecture.md" + }, + { + "reference": "Esc", + "doc_file": "04-troubleshooting/tui.md" + }, + { + "reference": "Backspace", + "doc_file": "04-troubleshooting/tui.md" + }, + { + "reference": "Lint", + "doc_file": "06-development/branch-workflow.md" + }, + { + "reference": "Build", + "doc_file": "06-development/branch-workflow.md" + } + ], + "file_path": [ + { + "reference": ".github/workflows/release.yml", + "doc_file": "06-development/branch-workflow.md" + }, + { + "reference": ".github/workflows/ci.yml", + "doc_file": "06-development/branch-workflow.md" + }, + { + "reference": "ci.yml", + "doc_file": "06-development/ci-cd.md" + }, + { + "reference": "release.yml", + "doc_file": "06-development/ci-cd.md" + }, + { + "reference": ".github/dependabot.yml", + "doc_file": "06-development/ci-cd.md" + }, + { + "reference": "homebrew/pass-cli.rb", + "doc_file": "06-development/homebrew.md" + }, + { + "reference": "Formula/pass-cli.rb", + "doc_file": "06-development/homebrew.md" + }, + { + "reference": "update-docs-version.yml", + "doc_file": "06-development/release.md" + }, + { + "reference": ".github/workflows/release.yml", + "doc_file": "06-development/release.md" + }, + { + "reference": ".goreleaser.yml", + "doc_file": "06-development/release.md" + }, + { + "reference": "scoop/pass-cli.json", + "doc_file": "06-development/scoop.md" + }, + { + "reference": ".goreleaser.yml", + "doc_file": "06-development/scoop.md" + }, + { + "reference": "bucket/pass-cli.json", + "doc_file": "06-development/scoop.md" + } + ] + }, + "asset_to_docs": { + "https://img.shields.io/github/v/release/ari1110/pass-cli?label=Version": [ + "01-getting-started/quick-install.md", + "01-getting-started/quick-start.md", + "02-guides/recovery-phrase.md", + "03-reference/command-reference.md", + "03-reference/known-limitations.md", + "03-reference/migration.md", + "03-reference/security-architecture.md", + "04-troubleshooting/installation.md", + "05-operations/health-checks.md", + "06-development/branch-workflow.md", + "06-development/ci-cd.md", + "06-development/contributing.md", + "06-development/homebrew.md", + "06-development/release.md", + "06-development/scoop.md", + "_index.md", + "README.md" + ], + "https://img.shields.io/github/last-commit/ari1110/pass-cli?path=docs&label=Last%20Updated": [ + "01-getting-started/quick-install.md", + "01-getting-started/quick-start.md", + "02-guides/recovery-phrase.md", + "03-reference/command-reference.md", + "03-reference/known-limitations.md", + "03-reference/migration.md", + "03-reference/security-architecture.md", + "04-troubleshooting/installation.md", + "05-operations/health-checks.md", + "06-development/branch-workflow.md", + "06-development/ci-cd.md", + "06-development/contributing.md", + "06-development/homebrew.md", + "06-development/release.md", + "06-development/scoop.md", + "_index.md" + ], + "https://img.shields.io/github/last-commit/ari1110/pass-cli?label=Last%20Updated": [ + "README.md" + ] + } +} \ No newline at end of file diff --git a/.doc-manager/memory/doc-conventions.yml b/.doc-manager/memory/doc-conventions.yml new file mode 100644 index 00000000..d7dfa506 --- /dev/null +++ b/.doc-manager/memory/doc-conventions.yml @@ -0,0 +1,123 @@ +# Documentation Conventions Configuration +# Generated by doc-manager +# +# This file defines documentation standards for your project. +# Edit these values to match your team's preferences. + +style: + headings: + # Heading case style: sentence_case | title_case | lower | upper + # Examples: + # sentence_case: "This is a heading" + # title_case: "This Is A Heading" + case: title_case + + # Enforce consistent heading case throughout project + consistency_required: true + + # Brand names and terms that should not be case-corrected + # These maintain their original casing even in title_case headings + exceptions: + - macOS + - iOS + - iPadOS + - iPhone + - iPad + - GoReleaser + - GitHub + - GitLab + - PowerShell + - npm + - pnpm + - yarn + + code: + # Format for inline code references: backticks | html + inline_format: backticks + + # Require language specification in code blocks (```python vs ```) + block_language_required: true + + voice: + # Grammatical person for documentation: first | second | third + # first: "We recommend...", second: "You should...", third: "Users should..." + person: second + + # Prefer active voice ("Click the button") over passive ("The button should be clicked") + active_voice_preferred: true + +structure: + # Require introductory paragraph before first heading + require_intro: true + + # Table of contents requirements + require_toc: + # Whether to require TOC + enabled: true + + # Generate TOC for docs longer than N words + min_length: 500 + + # Maximum heading depth (1-6, where 1 is #, 6 is ######) + max_heading_depth: 6 + + # Enforce strict heading hierarchy (no skipping levels: H1→H3 is invalid) + # Options: strict | relaxed + heading_hierarchy: strict + +quality: + sentences: + # Sentence length limits (in words) + max_length: 25 + min_length: 3 + + paragraphs: + # Maximum paragraph length (in words) + max_length: 150 + + links: + # Validate all links are reachable + validate_links: true + + images: + # All images must have descriptive alt text + require_alt_text: true + + code: + # Validate code syntax (expensive, requires TreeSitter) + validate_syntax: false + +# Project-specific terminology +terminology: + # Preferred terms (enforce consistent usage) + # Format: abbreviation_key: + # full_form: "Full Term Name" + # abbreviation: "ABBR" + # guidance: "Usage guidance" + preferred: {} + # Example: + # mcp: + # full_form: "Model Context Protocol" + # abbreviation: "MCP" + # guidance: "Spell out on first use, abbreviate after" + + # Words/phrases to avoid (flagged as warnings) + # Note: May produce false positives - review warnings manually + avoid: + - word: simply + reason: "Use specific descriptions instead" + exceptions: [] + + - word: just + reason: "Be precise about what you mean" + exceptions: ["just-in-time", "justify"] + + - word: easy + reason: "Describe specific effort required" + exceptions: [] + + - word: obviously + reason: "What's obvious to you may not be to readers" + exceptions: [] + +# Future enhancement: semantic_checking: true # Requires spaCy (optional) diff --git a/.doc-manager/memory/repo-baseline.json b/.doc-manager/memory/repo-baseline.json new file mode 100644 index 00000000..c2ea74b1 --- /dev/null +++ b/.doc-manager/memory/repo-baseline.json @@ -0,0 +1,145 @@ +{ + "_meta": { + "generated_by": "doc-manager-mcp", + "tool_version": "1.2.3", + "warning": "AUTO-GENERATED FILE - Do not edit manually. Changes will be overwritten by doc-manager." + }, + "repo_name": "pass-cli", + "description": "Repository for pass-cli", + "language": "Go", + "docs_exist": true, + "metadata": { + "git_commit": "a598898bdcb85e6e1a5a5545af630ddafe7f6040", + "git_branch": "docs/review-with-doc-manager" + }, + "timestamp": "2025-12-04T23:31:37.284645", + "version": "1.0.0", + "file_count": 125, + "files": { + "CHANGELOG.md": "d72447f51be5bf54e38a8802bf7db155b85c877555e7e74f07e117b99b91c638", + "CLAUDE.md": "2bcc51fedb86dc1c1b0b303dffade31cb68e8727403a94060d7631b5cb656116", + "CONTRIBUTING.md": "1e4e9c95ebddb6b6fc7ef3fc9bbf1f634c9908230d6663101132d5a83d430c5b", + "go.mod": "1a3ffdc928ab7415386b9c8bfbe9b24cdac2d67f54f12f4ad5953687828312b6", + "go.sum": "e12956337ce5b0c90e0f137f3051838935003455109513e8696ea006fac3c3e7", + "LICENSE": "a66c73aa52d80b8e6287af2d3b4ed036ceb2f9decb540ed411cccc7a39ad215b", + "main.go": "b9d587d7c749d5b70b152fe8dc42f727b213ca765ac8507359ea4b5b5ce6d374", + "README.md": "64ea45c7398b79799dccb0d59051980854a24e9b3dc55eac0f3517a8220524b1", + "SECURITY.md": "46b11317eb0c8d8efe21f891060dd4c722d973c8debf7c89fefa99b8d829ccf2", + "cmd/add.go": "5bb7d5bbee88304fa8cdfe3c268baedd8805610030aa98740575fdb11983f11e", + "cmd/change_password.go": "8355659b5a9bf4693d81092b03ad7d936c6043207b97c4dcea02e7cbf0386e2f", + "cmd/config.go": "ea9810cf6f4dbcc93ffc53bfb34ce2dcb4d93a90e48b230ade4036c728cd1fad", + "cmd/delete.go": "135188b75f1360eefcc9473fe25fa252a2abff31a3a0247bed900763c589b480", + "cmd/doctor.go": "966dd049ce155ede7a8a9cd740fb9253bb1e05508a0d6417cd44a81845deb080", + "cmd/generate.go": "2e805f671aa139319aab02e4da538ad2dd87c2b91f0326dc31f5c8129953024b", + "cmd/get.go": "73613e26a3f32cd9c47eca02061dced441b5c462770d6e7a940d3a1d5986d321", + "cmd/helpers.go": "da94ca7963f179f16bc0bb0f9ea108868cde8973b6f77635b4bae8742a35ad79", + "cmd/init.go": "a17dbd98398e225d3071d1ee77c408c0fdce55899210a73553cead8d76729f05", + "cmd/keychain.go": "039c26a58d7d04c71ecdb7f257bc20e61b137697ce453026b8fe6fef411c43bb", + "cmd/keychain_enable.go": "4fe42263bf198f27aeb672d5b5e4ab7e61d0ab27182319dfb0597e46d0d1e83b", + "cmd/keychain_status.go": "d407c0e680323c5003dcddbd25f1ea4baa26497ff8281aa69b64dd1ab3ebd83b", + "cmd/list.go": "89da75775a8915a2150f4c6663dc12ae0677e01d116301cfcadfef7390cabade", + "cmd/root.go": "0098285b3013b3ac2978f8eed91a799d1af689693dc397479ba1e194db25a253", + "cmd/tui.go": "2c598900b4cc5be38f699ea21d13f18f1f296b181cce127f3dbd8eb5f9a1229d", + "cmd/update.go": "044717de710142b86d3d8d53c77a88d1723ff87520c2efda8876f4d1fb0fc604", + "cmd/usage.go": "8c8b38a6706e5d6b85f468170ffeaea4e17433164d0e30cae33402af906cac3f", + "cmd/vault.go": "a5774e7025de9475854a364e0593f31fdad41d29eff8e36396d1b9d6d3a415dd", + "cmd/vault_backup.go": "588881f8dad1c7a1c71cb91907ccc70cad951f417c001f46d4fc9c49e16b22e9", + "cmd/vault_backup_create.go": "4999983a3efd5f74ce89c576935a5ce5ddfac76f0aa25e2bf8ee73446bdf123c", + "cmd/vault_backup_info.go": "a808402b4766bd95bdc84d5c08b0700f19d1faa8b1ce006ddd1758fad40efaf4", + "cmd/vault_backup_restore.go": "df31f93339b74155363f0faa119c2e6ed1baeda50641d5f28c0a73944ccd454e", + "cmd/vault_remove.go": "9cb61bb2b409acfc266a51e28cd1002d7f52338a4798ddff83da1987025ea612", + "cmd/verify_audit.go": "013727a6064c86cb0e7136fbc4ac976a7738d3bd200ae9d6533152206fb675a2", + "cmd/version.go": "ccbe76818fdf4173438824a2976bf3a82f912767f752915453dd9a38d5eaa10d", + "cmd/tui/app.go": "43eeb51b0b40a715b8476c0e97e4bc822d70791f5c857bff8c5d7354c058c457", + "cmd/tui/main.go": "ee842e04c166c95c71427f31fb379d5c95a41feaee12f82bee1e1cf9b5a38c3a", + "cmd/tui/components/detail.go": "db5d898aba779de1ad007aa44ede9c1e0715e873ab6e384b4c042420141d2075", + "cmd/tui/components/forms.go": "f360218d34b6c9951a6ab3de2529089bb8cceb039e7559a0d0cc7d7877e04261", + "cmd/tui/components/sidebar.go": "f7991b7eddaa2b9e3c75ae80f61cde53f1518bafa9621397ec7924872f79893e", + "cmd/tui/components/statusbar.go": "1921a2c7b0b34122e4caf4514839c47dcc6438d6d863b07580db17cef900bfaf", + "cmd/tui/components/table.go": "285ef9846cf032efdb8b4b1c1d4199d0d3af0864a8d02c5a5fcfa484becdbf9e", + "cmd/tui/events/focus.go": "e2d6c4f035e4981646a9bc28a2b5fa097dc6b18d981ff860a40429033f6f7f79", + "cmd/tui/events/handlers.go": "9e7ef5f9b8ffb2ed0ee33bfc728d88b92b2685208d08c8892e4d15162aae5863", + "cmd/tui/layout/manager.go": "0e31721268f04f7e06854fba0e9b42c4ee8e727860f21173b2212da53bd7931c", + "cmd/tui/layout/pages.go": "21ee8b0987cd7dab996118281d47bc280b2a5e204ef523d1944fb368a9f8511a", + "cmd/tui/models/navigation.go": "88e5a7903d63eea25200be42ee3e1967c46eb18e9519d4bff1751d58ab9be1b6", + "cmd/tui/models/search.go": "baf4867219d8f1a6d2851a25240ef00de14a961ece1ef91693f0afe9204a3b99", + "cmd/tui/models/state.go": "2dcff4b9218d00025b0ee7b3e2f876dd21b14ce34eef6f9ba77d4012e1e2ec59", + "cmd/tui/styles/theme.go": "5713de3928333c8161eabebd093f61cd8d1a92c504c10913f2fbdae07444e398", + "docs/README.md": "018b6dcec4fd9db3d98657d1a5b4dcb94367a3d0ce6e2b2248dbca1198940fc7", + "docs/_index.md": "018b6dcec4fd9db3d98657d1a5b4dcb94367a3d0ce6e2b2248dbca1198940fc7", + "docs/01-getting-started/manual-install.md": "19f4d5fa7b358cb989c7d1855acbc13a5c59912d11da1116f64e02cd8c9e3209", + "docs/01-getting-started/quick-install.md": "776259dee84c9e2f074a590b79b2c484e64bdd5f977cce016dbf3df77d899b5e", + "docs/01-getting-started/quick-start.md": "76100d9574216c50a4ec25bba6f96100937db004fa2a01be4d72c450abd1840e", + "docs/01-getting-started/uninstall.md": "c7b3686bb8920dcd1a2912d76cb9fbc401e3a1fb31f16cc86f9db5b64b04068f", + "docs/01-getting-started/_index.md": "24f76b99f8c6796d7dea7c50928a33938897d06a8b491c4906209612adfc25f6", + "docs/02-guides/backup-restore.md": "96a9f8bed3561f9ba36b2d8041c86a263b185ca536e11a0d2f5416df41235308", + "docs/02-guides/basic-workflows.md": "12b41a6ddec42e4b9a5027167e2a6b8b98bcd746d5a2e6c0c2d3a49aa0e5a1b8", + "docs/02-guides/keychain-setup.md": "27e2499dab96d5cf776be1ea585cb378b2db80d7d44c21bb8820d2ca73ff0980", + "docs/02-guides/recovery-phrase.md": "7c3c31c85a2774aa8055b00c26fbc708732a12ed4c1bb342c20b748d963cd36b", + "docs/02-guides/scripting-guide.md": "9996c8f7dd8a102a2091cf975d57dcf73edf6638e3be13e47db98e3f6fd61a93", + "docs/02-guides/tui-guide.md": "e5837f5368e3fad5a2ae359a071b8d6cee7bc6cc1950fc0d0d4060694d32c457", + "docs/02-guides/usage-tracking.md": "4ba15ce03bc86f33db7e4e6f0613c3a7984f6a5ce247c7318acf26e6783e68ed", + "docs/02-guides/_index.md": "c6dd48a1975eda4610622424ba76f710bf05f94fe0a6bebe418addab4313ab06", + "docs/03-reference/command-reference.md": "0c5fcfe40886365e3aaddc8d2131dae0ce53a99556dacae23b4b281228d10187", + "docs/03-reference/configuration.md": "2a578290811deb21bc96f971fd36ef455655ae68ad62994016355162e4d72a70", + "docs/03-reference/known-limitations.md": "cf6fc6396a8fb23a71da49b3703010c1c1a1158c36d16377539c9aa51dda396e", + "docs/03-reference/migration.md": "e3687f502bc64f32d484c5f17935a9c9783467d7781f49514395460d9773ebce", + "docs/03-reference/security-architecture.md": "09f7bebc3971226921af9a7e8003263e16b352847461233103665d2c7c08f69d", + "docs/03-reference/_index.md": "7f4375eb417603299a10f5b5514efec9375ecf0dbe5aac25bd10cb8d4d962703", + "docs/04-troubleshooting/faq.md": "0f7a67ba120e9649473b0308ce1e5fb4260b4a90eb77382f00fa8557cf4b31ff", + "docs/04-troubleshooting/installation.md": "241bb4919f0dfc69c8f7779ba7c9784845c09936a8a477832d423f4f3ce54c60", + "docs/04-troubleshooting/keychain.md": "203d54aa1ebfc1367e2a5d4c11d0390f3893a1be780abb06d1efd15cdbcbe8e7", + "docs/04-troubleshooting/tui.md": "a0f13894c2cbca0035dc18ae468551193342332d51c988ed72e9c2b52eaff6e6", + "docs/04-troubleshooting/vault.md": "33d278ee3abc27044147b4807ad5f2b56df7e316adc110297058825c0d688add", + "docs/04-troubleshooting/_index.md": "c9bed28801a06cf760d45358f8449fb9f73a227efae934cbd76700e335a14b18", + "docs/05-operations/health-checks.md": "596732e89ca82eb87138075f54d9ab42872e30259e8aa3e0e468867c3e1e67f0", + "docs/05-operations/security-operations.md": "cf9667f96d5f866d36aa2a982b5ffad4afae75b6779a09e6a45a5957c4754ab3", + "docs/05-operations/_index.md": "1b243fc3b06e3c9218c76a6fae1ce9fe16c995c9d7fb486a0ad9e3ad8b0f74e1", + "docs/06-development/branch-workflow.md": "013ff876608e2015a6a9c2b33fa54303e911e59b23163a5565f6490042366d4a", + "docs/06-development/ci-cd.md": "08b5d7679bddc6b14aa8c740cf9f320752a72b8cb52b3a03405bfd0db7e29628", + "docs/06-development/contributing.md": "11d19bbd1792aaa9162bab01602c43d7faaa08a73921f82d0a17427a785da559", + "docs/06-development/homebrew.md": "6b5cae03d66e72a7cebb88951eaafc8706a078aa3abc799ffd60a3eb5183b54d", + "docs/06-development/release.md": "1476afcf264708f5146669ac50aec037f51255cde6f92401e20a50cf1eaaa48d", + "docs/06-development/scoop.md": "45da8095cbe0d7a2edf85d2e39ce18de907cffd3dfc562e3fcd5cf640a50aff1", + "docs/06-development/_index.md": "0c42aa905b325d11412f118dddb08592ba6691f3f843356c5217c7fb1d32995f", + "docsite/go.mod": "3a00b8ca7f8c1f0dbc8059d602ad62f6270f83b632d9ce6146b39ae0f82cafc7", + "docsite/go.sum": "f77fa4d8c436f59bf47fced4c59314ec7404d8c214e4f08c30762d2654b7d258", + "docsite/hugo.yaml": "ab82f93b5e6804fdcefa4d9700d03cef5eb9fe8fb54769556f9fe92e11e4caca", + "docsite/layouts/_default/_markup/render-link.html": "21b2c86abd5bb3125b3574d1b162e14ccc3581d92ab5204a05b43b2290c7f935", + "homebrew/pass-cli.rb": "8a0698d414be4c3eb02eb1db29c6d840a546405ea205298f24abb81f38d87308", + "internal/config/config.go": "4bdf7fd0dee283c655ec8525772b2292eee5290780197ba8d491bb05ef9f1b63", + "internal/config/keybinding.go": "339aef6ebe15ba93c8d99ae33470819a76469eb175eaef02a5392bbb7430c133", + "internal/crypto/crypto.go": "1477c28c4d7e9f8ad6c20c3d66dcbbc12a8c1cb2d80f3c4b321f1ff4f88adf57", + "internal/health/backup.go": "ec9a1d09f08167c01c0feeb426942498e3dfbd8e3cd82be817b03ee8e537034f", + "internal/health/checker.go": "a696e3d7e6c01fdb916f181d202c90f546479f2b4c8d2dbcbe53e3610805eb3a", + "internal/health/config.go": "eba4b79f5239cb502ea0672edf03b2c0a1275a268f4dc1d1bd8a9ab27e1bc3a5", + "internal/health/keychain.go": "6e1f055e6a8df004eae7f1f08c6cc92c292ee277a68328fcc1a0d68a0cebf82c", + "internal/health/keyring_production.go": "15006aa965f9564e844d95f552cb91e4a3d5b637c78f5b591181b76c4bbd70eb", + "internal/health/keyring_service.go": "492cf9753a9aad188419918d57d1f39b7994a2d9ebb96e107870e20dc4938de3", + "internal/health/types.go": "c806d5df05527e564b91c62c698a1c682835bb921046dbbbed798f6f3b2c45cf", + "internal/health/vault.go": "2d35efbab34b96552108dba1fc8e75715749889ab3fd046549824d6933b48f6a", + "internal/health/version.go": "8dd64df30f3784ae85729c7a8e701188b10f4822852200a40844a36899d80ea7", + "internal/keychain/keychain.go": "9444e0d3deb9e240ed04868963fe055048560ff52912c82a71f854b3168a6445", + "internal/recovery/challenge.go": "a0c1f6bf2259a29d32da9f1ac17a53e39133f7966e23f01c22a7ad9772250eaf", + "internal/recovery/constants.go": "9e09245e75fb841bbdcdb4b4b26361d63026b3cca1df0dc5a5ddd6d4ca4e31fb", + "internal/recovery/crypto.go": "92e9955a85bf11d1092d93597f07554a4ec6b0b502bcccd7ec51c6f4d8e9dc9c", + "internal/recovery/errors.go": "87fad0d7aae5707c74bd5696ef926acbf0373714852dfb8bec5ca7b8e4ba8488", + "internal/recovery/mnemonic.go": "9cc6f33390182d6ff068751c4f13ef62fa7ddd8e0473cb0df7386fa4c7b99cb4", + "internal/recovery/recovery.go": "5d49bca16f4aa2bf75548d7faafae60db6ba3cf1f6e96a3cf3a43579dc245981", + "internal/security/audit.go": "ce9c7c1212180f5369a217d471b99c69058c38198b8bae1ace3d122a1b72d7d1", + "internal/security/password.go": "d0130b1bb05895d3a0ecbde6c18e551bd0a95e69c2ae81cc2b8af9297309c911", + "internal/storage/atomic_save.go": "fdaebc0dd8cc50172b4bb1cfa795d0b1fc3a981ee7e47631ca7521ea80dde872", + "internal/storage/backup.go": "ccb257153d4289fc4262c11430851c86122ee7edf6c526d5374e87ab712d43cc", + "internal/storage/errors.go": "21b024772cbe1d95f0965f6279ae40c8661279a95fb816c395f17d07ddb72923", + "internal/storage/filesystem.go": "3ffffcfae9cf862a1a81bd03f81de8f421fa829ab8044151b3ac1dc75ca392a0", + "internal/storage/filesystem_spy.go": "6e8822d6adf87f6daf43f63acfdea09a0012583973c486bf4f52b701c958cbd2", + "internal/storage/storage.go": "cbafb5b99b9ff1c3e3f504d4e737e9ea32adef35bd4861468ea763128b268cf7", + "internal/vault/firstrun.go": "575f5ce7ae8a26f53c0b2ead4f12ff172c718384c5ef8bc8a6ab11410ea48cfa", + "internal/vault/metadata.go": "94cbf40d6c6f7897c058d1bdfbdca8379b0063c66ee91b4575c2b5a48c90a304", + "internal/vault/vault.go": "1bcac600b2125c87e83915b6ea8458980dd1b3ee134d8b47a1735f0738dc6d3e", + "manifests/snap/README.md": "e395fff58a46147995b5e4aaf981f624b615b4dba8b3ccac3bb65fb582bb3d7d", + "manifests/winget/pass-cli.yaml": "c4a88dcb7b345331bd742c5663692abe861237bef3c6903aeb16e7773837fe3a", + "manifests/winget/README.md": "e8ef23efb46f2e5c5dad763e0ea17fd710ed38aeaeb2b7def28e7dd0fc45f37f", + "scoop/pass-cli.json": "35b1c6462993e009b89a98ff3303e44c663a89681c19592e1576ca8d3a7213ec" + } +} \ No newline at end of file diff --git a/.doc-manager/memory/symbol-baseline.json b/.doc-manager/memory/symbol-baseline.json new file mode 100644 index 00000000..8edce47b --- /dev/null +++ b/.doc-manager/memory/symbol-baseline.json @@ -0,0 +1,8899 @@ +{ + "_meta": { + "generated_by": "doc-manager-mcp", + "tool_version": "1.2.3", + "warning": "AUTO-GENERATED FILE - Do not edit manually. Changes will be overwritten by doc-manager." + }, + "version": "1.1", + "created_at": "2025-11-29T04:31:53.752027+00:00", + "updated_at": "2025-12-05T04:31:37.393216+00:00", + "project_root": "R:\\Test-Projects\\pass-cli", + "symbols": { + "init": [ + { + "name": "init", + "type": "function", + "file": "cmd/add.go", + "line": 67, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/change_password.go", + "line": 46, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/config.go", + "line": 79, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/delete.go", + "line": 45, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/doctor.go", + "line": 55, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/generate.go", + "line": 61, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/get.go", + "line": 56, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/init.go", + "line": 46, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/keychain.go", + "line": 17, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/keychain_enable.go", + "line": 37, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/keychain_status.go", + "line": 29, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/list.go", + "line": 76, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/root.go", + "line": 67, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/tui.go", + "line": 51, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/update.go", + "line": 90, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/usage.go", + "line": 51, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/vault.go", + "line": 13, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/vault_backup.go", + "line": 19, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/vault_backup_create.go", + "line": 40, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/vault_backup_info.go", + "line": 41, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/vault_backup_restore.go", + "line": 47, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/vault_remove.go", + "line": 52, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/verify_audit.go", + "line": 36, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + }, + { + "name": "init", + "type": "function", + "file": "cmd/version.go", + "line": 21, + "column": 0, + "signature": "func init()", + "parent": null, + "doc": null + } + ], + "runAdd": [ + { + "name": "runAdd", + "type": "function", + "file": "cmd/add.go", + "line": 81, + "column": 0, + "signature": "func runAdd(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "generatePasswordForAdd": [ + { + "name": "generatePasswordForAdd", + "type": "function", + "file": "cmd/add.go", + "line": 180, + "column": 0, + "signature": "func generatePasswordForAdd(length int) (string, error)", + "parent": null, + "doc": null + } + ], + "runChangePassword": [ + { + "name": "runChangePassword", + "type": "function", + "file": "cmd/change_password.go", + "line": 52, + "column": 0, + "signature": "func runChangePassword(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "unlockWithRecovery": [ + { + "name": "unlockWithRecovery", + "type": "function", + "file": "cmd/change_password.go", + "line": 143, + "column": 0, + "signature": "func unlockWithRecovery(vaultService *vault.VaultService, vaultPath string) error", + "parent": null, + "doc": null + } + ], + "runConfigInit": [ + { + "name": "runConfigInit", + "type": "function", + "file": "cmd/config.go", + "line": 88, + "column": 0, + "signature": "func runConfigInit(cmd *cobra.Command, args []string)", + "parent": null, + "doc": null + } + ], + "runConfigEdit": [ + { + "name": "runConfigEdit", + "type": "function", + "file": "cmd/config.go", + "line": 114, + "column": 0, + "signature": "func runConfigEdit(cmd *cobra.Command, args []string)", + "parent": null, + "doc": null + } + ], + "runConfigValidate": [ + { + "name": "runConfigValidate", + "type": "function", + "file": "cmd/config.go", + "line": 139, + "column": 0, + "signature": "func runConfigValidate(cmd *cobra.Command, args []string)", + "parent": null, + "doc": null + } + ], + "runConfigReset": [ + { + "name": "runConfigReset", + "type": "function", + "file": "cmd/config.go", + "line": 196, + "column": 0, + "signature": "func runConfigReset(cmd *cobra.Command, args []string)", + "parent": null, + "doc": null + } + ], + "runDelete": [ + { + "name": "runDelete", + "type": "function", + "file": "cmd/delete.go", + "line": 50, + "column": 0, + "signature": "func runDelete(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "runDoctor": [ + { + "name": "runDoctor", + "type": "function", + "file": "cmd/doctor.go", + "line": 63, + "column": 0, + "signature": "func runDoctor(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "outputHumanReadable": [ + { + "name": "outputHumanReadable", + "type": "function", + "file": "cmd/doctor.go", + "line": 106, + "column": 0, + "signature": "func outputHumanReadable(report health.HealthReport, opts health.CheckOptions, verbose bool)", + "parent": null, + "doc": null + } + ], + "outputHealthReportJSON": [ + { + "name": "outputHealthReportJSON", + "type": "function", + "file": "cmd/doctor.go", + "line": 178, + "column": 0, + "signature": "func outputHealthReportJSON(report health.HealthReport, opts health.CheckOptions) error", + "parent": null, + "doc": null + } + ], + "getConfigPath": [ + { + "name": "getConfigPath", + "type": "function", + "file": "cmd/doctor.go", + "line": 192, + "column": 0, + "signature": "func getConfigPath() string", + "parent": null, + "doc": null + } + ], + "runGenerate": [ + { + "name": "runGenerate", + "type": "function", + "file": "cmd/generate.go", + "line": 71, + "column": 0, + "signature": "func runGenerate(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "generatePassword": [ + { + "name": "generatePassword", + "type": "function", + "file": "cmd/generate.go", + "line": 145, + "column": 0, + "signature": "func generatePassword(length int, charset string) (string, error)", + "parent": null, + "doc": null + } + ], + "calculateEntropy": [ + { + "name": "calculateEntropy", + "type": "function", + "file": "cmd/generate.go", + "line": 200, + "column": 0, + "signature": "func calculateEntropy(length int, charsetSize int) float64", + "parent": null, + "doc": null + } + ], + "joinWithCommas": [ + { + "name": "joinWithCommas", + "type": "function", + "file": "cmd/generate.go", + "line": 215, + "column": 0, + "signature": "func joinWithCommas(items []string) string", + "parent": null, + "doc": null + } + ], + "runGet": [ + { + "name": "runGet", + "type": "function", + "file": "cmd/get.go", + "line": 64, + "column": 0, + "signature": "func runGet(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "outputQuietMode": [ + { + "name": "outputQuietMode", + "type": "function", + "file": "cmd/get.go", + "line": 104, + "column": 0, + "signature": "func outputQuietMode(cred *vault.Credential, vaultService *vault.VaultService, service string) error", + "parent": null, + "doc": null + } + ], + "outputNormalMode": [ + { + "name": "outputNormalMode", + "type": "function", + "file": "cmd/get.go", + "line": 142, + "column": 0, + "signature": "func outputNormalMode(cred *vault.Credential, vaultService *vault.VaultService, service string) error", + "parent": null, + "doc": null + } + ], + "readLine": [ + { + "name": "readLine", + "type": "function", + "file": "cmd/helpers.go", + "line": 31, + "column": 0, + "signature": "func readLine() (string, error)", + "parent": null, + "doc": null + } + ], + "readPassword": [ + { + "name": "readPassword", + "type": "function", + "file": "cmd/helpers.go", + "line": 52, + "column": 0, + "signature": "func readPassword() ([]byte, error)", + "parent": null, + "doc": null + } + ], + "getAuditLogPath": [ + { + "name": "getAuditLogPath", + "type": "function", + "file": "cmd/helpers.go", + "line": 86, + "column": 0, + "signature": "func getAuditLogPath(vaultPath string) string", + "parent": null, + "doc": null + } + ], + "getVaultID": [ + { + "name": "getVaultID", + "type": "function", + "file": "cmd/helpers.go", + "line": 99, + "column": 0, + "signature": "func getVaultID(vaultPath string) string", + "parent": null, + "doc": null + } + ], + "getKeychainUnavailableMessage": [ + { + "name": "getKeychainUnavailableMessage", + "type": "function", + "file": "cmd/helpers.go", + "line": 108, + "column": 0, + "signature": "func getKeychainUnavailableMessage() string", + "parent": null, + "doc": null + } + ], + "formatRelativeTime": [ + { + "name": "formatRelativeTime", + "type": "function", + "file": "cmd/helpers.go", + "line": 124, + "column": 0, + "signature": "func formatRelativeTime(timestamp time.Time) string", + "parent": null, + "doc": null + }, + { + "name": "formatRelativeTime", + "type": "function", + "file": "cmd/tui/components/table.go", + "line": 218, + "column": 0, + "signature": "func formatRelativeTime(t time.Time) string", + "parent": null, + "doc": null + } + ], + "pathExists": [ + { + "name": "pathExists", + "type": "function", + "file": "cmd/helpers.go", + "line": 193, + "column": 0, + "signature": "func pathExists(path string) bool", + "parent": null, + "doc": null + } + ], + "formatFieldCounts": [ + { + "name": "formatFieldCounts", + "type": "function", + "file": "cmd/helpers.go", + "line": 200, + "column": 0, + "signature": "func formatFieldCounts(fieldCounts map[string]int) string", + "parent": null, + "doc": null + } + ], + "formatUsageTable": [ + { + "name": "formatUsageTable", + "type": "function", + "file": "cmd/helpers.go", + "line": 224, + "column": 0, + "signature": "func formatUsageTable(records []vault.UsageRecord) string", + "parent": null, + "doc": null + } + ], + "initVaultAndStorage": [ + { + "name": "initVaultAndStorage", + "type": "function", + "file": "cmd/helpers.go", + "line": 256, + "column": 0, + "signature": "func initVaultAndStorage(vaultPath string) (*vault.VaultService, error)", + "parent": null, + "doc": null + } + ], + "logVerbose": [ + { + "name": "logVerbose", + "type": "function", + "file": "cmd/helpers.go", + "line": 266, + "column": 0, + "signature": "func logVerbose(verbose bool, format string, args ...interface", + "parent": null, + "doc": null + } + ], + "formatAge": [ + { + "name": "formatAge", + "type": "function", + "file": "cmd/helpers.go", + "line": 276, + "column": 0, + "signature": "func formatAge(d time.Duration) string", + "parent": null, + "doc": null + } + ], + "formatSize": [ + { + "name": "formatSize", + "type": "function", + "file": "cmd/helpers.go", + "line": 317, + "column": 0, + "signature": "func formatSize(bytes int64) string", + "parent": null, + "doc": null + } + ], + "unlockVault": [ + { + "name": "unlockVault", + "type": "function", + "file": "cmd/helpers.go", + "line": 331, + "column": 0, + "signature": "func unlockVault(vaultService *vault.VaultService) error", + "parent": null, + "doc": null + } + ], + "displayMnemonic": [ + { + "name": "displayMnemonic", + "type": "function", + "file": "cmd/helpers.go", + "line": 358, + "column": 0, + "signature": "func displayMnemonic(mnemonic string)", + "parent": null, + "doc": null + } + ], + "promptForWord": [ + { + "name": "promptForWord", + "type": "function", + "file": "cmd/helpers.go", + "line": 394, + "column": 0, + "signature": "func promptForWord(position int) (string, error)", + "parent": null, + "doc": null + } + ], + "promptYesNo": [ + { + "name": "promptYesNo", + "type": "function", + "file": "cmd/helpers.go", + "line": 423, + "column": 0, + "signature": "func promptYesNo(prompt string, defaultYes bool) (bool, error)", + "parent": null, + "doc": null + } + ], + "promptForWordWithValidation": [ + { + "name": "promptForWordWithValidation", + "type": "function", + "file": "cmd/helpers.go", + "line": 470, + "column": 0, + "signature": "func promptForWordWithValidation(position int) (string, error)", + "parent": null, + "doc": null + } + ], + "runInit": [ + { + "name": "runInit", + "type": "function", + "file": "cmd/init.go", + "line": 55, + "column": 0, + "signature": "func runInit(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "runKeychainEnable": [ + { + "name": "runKeychainEnable", + "type": "function", + "file": "cmd/keychain_enable.go", + "line": 43, + "column": 0, + "signature": "func runKeychainEnable(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "runKeychainStatus": [ + { + "name": "runKeychainStatus", + "type": "function", + "file": "cmd/keychain_status.go", + "line": 33, + "column": 0, + "signature": "func runKeychainStatus(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "getBackendImplementation": [ + { + "name": "getBackendImplementation", + "type": "function", + "file": "cmd/keychain_status.go", + "line": 139, + "column": 0, + "signature": "func getBackendImplementation() string", + "parent": null, + "doc": null + } + ], + "runList": [ + { + "name": "runList", + "type": "function", + "file": "cmd/list.go", + "line": 86, + "column": 0, + "signature": "func runList(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "filterUnused": [ + { + "name": "filterUnused", + "type": "function", + "file": "cmd/list.go", + "line": 158, + "column": 0, + "signature": "func filterUnused(metadata []vault.CredentialMetadata, days int) []vault.CredentialMetadata", + "parent": null, + "doc": null + } + ], + "filterCredentialsByLocation": [ + { + "name": "filterCredentialsByLocation", + "type": "function", + "file": "cmd/list.go", + "line": 176, + "column": 0, + "signature": "func filterCredentialsByLocation(metadata []vault.CredentialMetadata, location string, recursive bool) ([]vault.CredentialMetadata, error)", + "parent": null, + "doc": null + } + ], + "outputSimple": [ + { + "name": "outputSimple", + "type": "function", + "file": "cmd/list.go", + "line": 234, + "column": 0, + "signature": "func outputSimple(metadata []vault.CredentialMetadata) error", + "parent": null, + "doc": null + } + ], + "outputJSON": [ + { + "name": "outputJSON", + "type": "function", + "file": "cmd/list.go", + "line": 241, + "column": 0, + "signature": "func outputJSON(metadata []vault.CredentialMetadata) error", + "parent": null, + "doc": null + } + ], + "outputTable": [ + { + "name": "outputTable", + "type": "function", + "file": "cmd/list.go", + "line": 250, + "column": 0, + "signature": "func outputTable(metadata []vault.CredentialMetadata) error", + "parent": null, + "doc": null + } + ], + "groupCredentialsByProject": [ + { + "name": "groupCredentialsByProject", + "type": "function", + "file": "cmd/list.go", + "line": 309, + "column": 0, + "signature": "func groupCredentialsByProject(metadata []vault.CredentialMetadata) map[string][]string", + "parent": null, + "doc": null + } + ], + "outputByProject": [ + { + "name": "outputByProject", + "type": "function", + "file": "cmd/list.go", + "line": 345, + "column": 0, + "signature": "func outputByProject(projects map[string][]string, format string) error", + "parent": null, + "doc": null + } + ], + "outputByProjectTable": [ + { + "name": "outputByProjectTable", + "type": "function", + "file": "cmd/list.go", + "line": 359, + "column": 0, + "signature": "func outputByProjectTable(projects map[string][]string) error", + "parent": null, + "doc": null + } + ], + "outputByProjectJSON": [ + { + "name": "outputByProjectJSON", + "type": "function", + "file": "cmd/list.go", + "line": 398, + "column": 0, + "signature": "func outputByProjectJSON(projects map[string][]string) error", + "parent": null, + "doc": null + } + ], + "outputByProjectSimple": [ + { + "name": "outputByProjectSimple", + "type": "function", + "file": "cmd/list.go", + "line": 414, + "column": 0, + "signature": "func outputByProjectSimple(projects map[string][]string) error", + "parent": null, + "doc": null + } + ], + "Execute": [ + { + "name": "Execute", + "type": "function", + "file": "cmd/root.go", + "line": 60, + "column": 0, + "signature": "func Execute()", + "parent": null, + "doc": null + } + ], + "GetVaultPath": [ + { + "name": "GetVaultPath", + "type": "function", + "file": "cmd/root.go", + "line": 108, + "column": 0, + "signature": "func GetVaultPath() string", + "parent": null, + "doc": null + } + ], + "GetVaultPathWithSource": [ + { + "name": "GetVaultPathWithSource", + "type": "function", + "file": "cmd/root.go", + "line": 168, + "column": 0, + "signature": "func GetVaultPathWithSource() (path string, source string)", + "parent": null, + "doc": null + } + ], + "IsVerbose": [ + { + "name": "IsVerbose", + "type": "function", + "file": "cmd/root.go", + "line": 234, + "column": 0, + "signature": "func IsVerbose() bool", + "parent": null, + "doc": null + } + ], + "runRootCommand": [ + { + "name": "runRootCommand", + "type": "function", + "file": "cmd/root.go", + "line": 240, + "column": 0, + "signature": "func runRootCommand(cmd *cobra.Command, args []string)", + "parent": null, + "doc": null + } + ], + "checkFirstRun": [ + { + "name": "checkFirstRun", + "type": "function", + "file": "cmd/root.go", + "line": 288, + "column": 0, + "signature": "func checkFirstRun(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "initConfig": [ + { + "name": "initConfig", + "type": "function", + "file": "cmd/root.go", + "line": 315, + "column": 0, + "signature": "func initConfig()", + "parent": null, + "doc": null + } + ], + "runTUI": [ + { + "name": "runTUI", + "type": "function", + "file": "cmd/tui.go", + "line": 55, + "column": 0, + "signature": "func runTUI(cmd *cobra.Command, args []string)", + "parent": null, + "doc": null + } + ], + "launchTUI": [ + { + "name": "launchTUI", + "type": "function", + "file": "cmd/tui.go", + "line": 91, + "column": 0, + "signature": "func launchTUI(vaultService *vault.VaultService) error", + "parent": null, + "doc": null + }, + { + "name": "launchTUI", + "type": "function", + "file": "cmd/tui/main.go", + "line": 257, + "column": 0, + "signature": "func launchTUI(vaultService *vault.VaultService) error", + "parent": null, + "doc": null + } + ], + "promptForMasterPassword": [ + { + "name": "promptForMasterPassword", + "type": "function", + "file": "cmd/tui.go", + "line": 170, + "column": 0, + "signature": "func promptForMasterPassword() ([]byte, error)", + "parent": null, + "doc": null + } + ], + "createTUIApp": [ + { + "name": "createTUIApp", + "type": "function", + "file": "cmd/tui.go", + "line": 176, + "column": 0, + "signature": "func createTUIApp() *tview.Application", + "parent": null, + "doc": null + } + ], + "restoreTerminal": [ + { + "name": "restoreTerminal", + "type": "function", + "file": "cmd/tui.go", + "line": 183, + "column": 0, + "signature": "func restoreTerminal()", + "parent": null, + "doc": null + } + ], + "runUpdate": [ + { + "name": "runUpdate", + "type": "function", + "file": "cmd/update.go", + "line": 108, + "column": 0, + "signature": "func runUpdate(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "generatePasswordForUpdate": [ + { + "name": "generatePasswordForUpdate", + "type": "function", + "file": "cmd/update.go", + "line": 311, + "column": 0, + "signature": "func generatePasswordForUpdate(length int) (string, error)", + "parent": null, + "doc": null + } + ], + "runUsage": [ + { + "name": "runUsage", + "type": "function", + "file": "cmd/usage.go", + "line": 71, + "column": 0, + "signature": "func runUsage(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "outputUsageTable": [ + { + "name": "outputUsageTable", + "type": "function", + "file": "cmd/usage.go", + "line": 132, + "column": 0, + "signature": "func outputUsageTable(records []vault.UsageRecord, originalCount int) error", + "parent": null, + "doc": null + } + ], + "outputUsageJSON": [ + { + "name": "outputUsageJSON", + "type": "function", + "file": "cmd/usage.go", + "line": 160, + "column": 0, + "signature": "func outputUsageJSON(serviceName string, records []vault.UsageRecord) error", + "parent": null, + "doc": null + } + ], + "outputUsageSimple": [ + { + "name": "outputUsageSimple", + "type": "function", + "file": "cmd/usage.go", + "line": 185, + "column": 0, + "signature": "func outputUsageSimple(records []vault.UsageRecord) error", + "parent": null, + "doc": null + } + ], + "usageRecordWithPath": [ + { + "name": "usageRecordWithPath", + "type": "struct", + "file": "cmd/usage.go", + "line": 61, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Location", + "parent_symbol": "usageRecordWithPath", + "field_type": "string", + "default_value": null, + "file": "cmd/usage.go", + "line": 62, + "column": 1, + "tags": { + "json": "location" + }, + "is_optional": false, + "doc": null + }, + { + "name": "GitRepo", + "parent_symbol": "usageRecordWithPath", + "field_type": "string", + "default_value": null, + "file": "cmd/usage.go", + "line": 63, + "column": 1, + "tags": { + "json": "git_repository" + }, + "is_optional": false, + "doc": null + }, + { + "name": "PathExists", + "parent_symbol": "usageRecordWithPath", + "field_type": "bool", + "default_value": null, + "file": "cmd/usage.go", + "line": 64, + "column": 1, + "tags": { + "json": "path_exists" + }, + "is_optional": false, + "doc": null + }, + { + "name": "LastAccess", + "parent_symbol": "usageRecordWithPath", + "field_type": "string", + "default_value": null, + "file": "cmd/usage.go", + "line": 65, + "column": 1, + "tags": { + "json": "last_access" + }, + "is_optional": false, + "doc": null + }, + { + "name": "AccessCount", + "parent_symbol": "usageRecordWithPath", + "field_type": "int", + "default_value": null, + "file": "cmd/usage.go", + "line": 66, + "column": 1, + "tags": { + "json": "access_count" + }, + "is_optional": false, + "doc": null + }, + { + "name": "FieldCounts", + "parent_symbol": "usageRecordWithPath", + "field_type": "map[string]int", + "default_value": null, + "file": "cmd/usage.go", + "line": 67, + "column": 1, + "tags": { + "json": "field_counts" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "runVaultBackupCreate": [ + { + "name": "runVaultBackupCreate", + "type": "function", + "file": "cmd/vault_backup_create.go", + "line": 45, + "column": 0, + "signature": "func runVaultBackupCreate(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "runVaultBackupInfo": [ + { + "name": "runVaultBackupInfo", + "type": "function", + "file": "cmd/vault_backup_info.go", + "line": 46, + "column": 0, + "signature": "func runVaultBackupInfo(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "displayBackup": [ + { + "name": "displayBackup", + "type": "function", + "file": "cmd/vault_backup_info.go", + "line": 136, + "column": 0, + "signature": "func displayBackup(b *storage.BackupInfo, verbose bool)", + "parent": null, + "doc": null + } + ], + "runVaultBackupRestore": [ + { + "name": "runVaultBackupRestore", + "type": "function", + "file": "cmd/vault_backup_restore.go", + "line": 54, + "column": 0, + "signature": "func runVaultBackupRestore(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "runVaultRemove": [ + { + "name": "runVaultRemove", + "type": "function", + "file": "cmd/vault_remove.go", + "line": 60, + "column": 0, + "signature": "func runVaultRemove(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "runVerifyAudit": [ + { + "name": "runVerifyAudit", + "type": "function", + "file": "cmd/verify_audit.go", + "line": 41, + "column": 0, + "signature": "func runVerifyAudit(cmd *cobra.Command, args []string) error", + "parent": null, + "doc": null + } + ], + "NewApp": [ + { + "name": "NewApp", + "type": "function", + "file": "cmd/tui/app.go", + "line": 13, + "column": 0, + "signature": "func NewApp() *tview.Application", + "parent": null, + "doc": null + } + ], + "SetRootSafely": [ + { + "name": "SetRootSafely", + "type": "function", + "file": "cmd/tui/app.go", + "line": 24, + "column": 0, + "signature": "func SetRootSafely(app *tview.Application, root tview.Primitive, fullscreen bool)", + "parent": null, + "doc": null + } + ], + "Quit": [ + { + "name": "Quit", + "type": "function", + "file": "cmd/tui/app.go", + "line": 32, + "column": 0, + "signature": "func Quit(app *tview.Application)", + "parent": null, + "doc": null + } + ], + "RestoreTerminal": [ + { + "name": "RestoreTerminal", + "type": "function", + "file": "cmd/tui/app.go", + "line": 39, + "column": 0, + "signature": "func RestoreTerminal()", + "parent": null, + "doc": null + } + ], + "Run": [ + { + "name": "Run", + "type": "function", + "file": "cmd/tui/main.go", + "line": 23, + "column": 0, + "signature": "func Run(vaultPath string) error", + "parent": null, + "doc": null + }, + { + "name": "Run", + "type": "method", + "file": "internal/health/backup.go", + "line": 29, + "column": 0, + "signature": "func (b *BackupChecker) Run(ctx context.Context) CheckResult", + "parent": null, + "doc": null + }, + { + "name": "Run", + "type": "method", + "file": "internal/health/config.go", + "line": 30, + "column": 0, + "signature": "func (c *ConfigChecker) Run(ctx context.Context) CheckResult", + "parent": null, + "doc": null + }, + { + "name": "Run", + "type": "method", + "file": "internal/health/keychain.go", + "line": 30, + "column": 0, + "signature": "func (k *KeychainChecker) Run(ctx context.Context) CheckResult", + "parent": null, + "doc": null + }, + { + "name": "Run", + "type": "method", + "file": "internal/health/vault.go", + "line": 28, + "column": 0, + "signature": "func (v *VaultChecker) Run(ctx context.Context) CheckResult", + "parent": null, + "doc": null + }, + { + "name": "Run", + "type": "method", + "file": "internal/health/version.go", + "line": 35, + "column": 0, + "signature": "func (v *VersionChecker) Run(ctx context.Context) CheckResult", + "parent": null, + "doc": null + } + ], + "getDefaultVaultPath": [ + { + "name": "getDefaultVaultPath", + "type": "function", + "file": "cmd/tui/main.go", + "line": 101, + "column": 0, + "signature": "func getDefaultVaultPath() string", + "parent": null, + "doc": null + } + ], + "promptForPassword": [ + { + "name": "promptForPassword", + "type": "function", + "file": "cmd/tui/main.go", + "line": 112, + "column": 0, + "signature": "func promptForPassword() ([]byte, error)", + "parent": null, + "doc": null + } + ], + "LaunchTUI": [ + { + "name": "LaunchTUI", + "type": "function", + "file": "cmd/tui/main.go", + "line": 126, + "column": 0, + "signature": "func LaunchTUI(vaultService *vault.VaultService) error", + "parent": null, + "doc": null + } + ], + "NewDetailView": [ + { + "name": "NewDetailView", + "type": "function", + "file": "cmd/tui/components/detail.go", + "line": 41, + "column": 0, + "signature": "func NewDetailView(appState *models.AppState) *DetailView", + "parent": null, + "doc": null + } + ], + "colorWithBg": [ + { + "name": "colorWithBg", + "type": "function", + "file": "cmd/tui/components/detail.go", + "line": 327, + "column": 0, + "signature": "func colorWithBg(colorName string) string", + "parent": null, + "doc": null + } + ], + "textColor": [ + { + "name": "textColor", + "type": "function", + "file": "cmd/tui/components/detail.go", + "line": 335, + "column": 0, + "signature": "func textColor() string", + "parent": null, + "doc": null + } + ], + "separator": [ + { + "name": "separator", + "type": "function", + "file": "cmd/tui/components/detail.go", + "line": 345, + "column": 0, + "signature": "func separator() string", + "parent": null, + "doc": null + } + ], + "SortUsageLocations": [ + { + "name": "SortUsageLocations", + "type": "function", + "file": "cmd/tui/components/detail.go", + "line": 356, + "column": 0, + "signature": "func SortUsageLocations(records map[string]vault.UsageRecord) []vault.UsageRecord", + "parent": null, + "doc": null + } + ], + "FormatTimestamp": [ + { + "name": "FormatTimestamp", + "type": "function", + "file": "cmd/tui/components/detail.go", + "line": 380, + "column": 0, + "signature": "func FormatTimestamp(t time.Time) string", + "parent": null, + "doc": null + } + ], + "FormatUsageLocations": [ + { + "name": "FormatUsageLocations", + "type": "function", + "file": "cmd/tui/components/detail.go", + "line": 418, + "column": 0, + "signature": "func FormatUsageLocations(cred *vault.Credential) string", + "parent": null, + "doc": null + } + ], + "Refresh": [ + { + "name": "Refresh", + "type": "method", + "file": "cmd/tui/components/detail.go", + "line": 62, + "column": 0, + "signature": "func (dv *DetailView) Refresh()", + "parent": null, + "doc": null + }, + { + "name": "Refresh", + "type": "method", + "file": "cmd/tui/components/sidebar.go", + "line": 75, + "column": 0, + "signature": "func (s *Sidebar) Refresh()", + "parent": null, + "doc": null + }, + { + "name": "Refresh", + "type": "method", + "file": "cmd/tui/components/table.go", + "line": 76, + "column": 0, + "signature": "func (ct *CredentialTable) Refresh()", + "parent": null, + "doc": null + } + ], + "formatCredential": [ + { + "name": "formatCredential", + "type": "method", + "file": "cmd/tui/components/detail.go", + "line": 90, + "column": 0, + "signature": "func (dv *DetailView) formatCredential(cred *vault.CredentialMetadata) string", + "parent": null, + "doc": null + } + ], + "formatPasswordField": [ + { + "name": "formatPasswordField", + "type": "method", + "file": "cmd/tui/components/detail.go", + "line": 170, + "column": 0, + "signature": "func (dv *DetailView) formatPasswordField(b *strings.Builder, cred *vault.CredentialMetadata)", + "parent": null, + "doc": null + } + ], + "showEmptyState": [ + { + "name": "showEmptyState", + "type": "method", + "file": "cmd/tui/components/detail.go", + "line": 191, + "column": 0, + "signature": "func (dv *DetailView) showEmptyState()", + "parent": null, + "doc": null + } + ], + "TogglePasswordVisibility": [ + { + "name": "TogglePasswordVisibility", + "type": "method", + "file": "cmd/tui/components/detail.go", + "line": 207, + "column": 0, + "signature": "func (dv *DetailView) TogglePasswordVisibility()", + "parent": null, + "doc": null + } + ], + "CopyPasswordToClipboard": [ + { + "name": "CopyPasswordToClipboard", + "type": "method", + "file": "cmd/tui/components/detail.go", + "line": 216, + "column": 0, + "signature": "func (dv *DetailView) CopyPasswordToClipboard() error", + "parent": null, + "doc": null + } + ], + "CopyFieldToClipboard": [ + { + "name": "CopyFieldToClipboard", + "type": "method", + "file": "cmd/tui/components/detail.go", + "line": 256, + "column": 0, + "signature": "func (dv *DetailView) CopyFieldToClipboard(field string) error", + "parent": null, + "doc": null + } + ], + "applyStyles": [ + { + "name": "applyStyles", + "type": "method", + "file": "cmd/tui/components/detail.go", + "line": 318, + "column": 0, + "signature": "func (dv *DetailView) applyStyles()", + "parent": null, + "doc": null + }, + { + "name": "applyStyles", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 370, + "column": 0, + "signature": "func (af *AddForm) applyStyles()", + "parent": null, + "doc": null + }, + { + "name": "applyStyles", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 830, + "column": 0, + "signature": "func (ef *EditForm) applyStyles()", + "parent": null, + "doc": null + }, + { + "name": "applyStyles", + "type": "method", + "file": "cmd/tui/components/sidebar.go", + "line": 185, + "column": 0, + "signature": "func (s *Sidebar) applyStyles()", + "parent": null, + "doc": null + }, + { + "name": "applyStyles", + "type": "method", + "file": "cmd/tui/components/table.go", + "line": 208, + "column": 0, + "signature": "func (ct *CredentialTable) applyStyles()", + "parent": null, + "doc": null + } + ], + "DetailView": [ + { + "name": "DetailView", + "type": "struct", + "file": "cmd/tui/components/detail.go", + "line": 31, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "normalizeCategory": [ + { + "name": "normalizeCategory", + "type": "function", + "file": "cmd/tui/components/forms.go", + "line": 22, + "column": 0, + "signature": "func normalizeCategory(c string) string", + "parent": null, + "doc": null + } + ], + "NewAddForm": [ + { + "name": "NewAddForm", + "type": "function", + "file": "cmd/tui/components/forms.go", + "line": 64, + "column": 0, + "signature": "func NewAddForm(appState *models.AppState) *AddForm", + "parent": null, + "doc": null + } + ], + "NewEditForm": [ + { + "name": "NewEditForm", + "type": "function", + "file": "cmd/tui/components/forms.go", + "line": 447, + "column": 0, + "signature": "func NewEditForm(appState *models.AppState, credential *vault.CredentialMetadata) *EditForm", + "parent": null, + "doc": null + } + ], + "generateSecurePassword": [ + { + "name": "generateSecurePassword", + "type": "function", + "file": "cmd/tui/components/forms.go", + "line": 907, + "column": 0, + "signature": "func generateSecurePassword(length int) (string, error)", + "parent": null, + "doc": null + } + ], + "buildFormFields": [ + { + "name": "buildFormFields", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 81, + "column": 0, + "signature": "func (af *AddForm) buildFormFields()", + "parent": null, + "doc": null + } + ], + "onAddPressed": [ + { + "name": "onAddPressed", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 152, + "column": 0, + "signature": "func (af *AddForm) onAddPressed()", + "parent": null, + "doc": null + } + ], + "onCancelPressed": [ + { + "name": "onCancelPressed", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 188, + "column": 0, + "signature": "func (af *AddForm) onCancelPressed()", + "parent": null, + "doc": null + }, + { + "name": "onCancelPressed", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 649, + "column": 0, + "signature": "func (ef *EditForm) onCancelPressed()", + "parent": null, + "doc": null + } + ], + "onGeneratePassword": [ + { + "name": "onGeneratePassword", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 212, + "column": 0, + "signature": "func (af *AddForm) onGeneratePassword()", + "parent": null, + "doc": null + }, + { + "name": "onGeneratePassword", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 673, + "column": 0, + "signature": "func (ef *EditForm) onGeneratePassword()", + "parent": null, + "doc": null + } + ], + "hasUnsavedData": [ + { + "name": "hasUnsavedData", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 233, + "column": 0, + "signature": "func (af *AddForm) hasUnsavedData() bool", + "parent": null, + "doc": null + } + ], + "validate": [ + { + "name": "validate", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 250, + "column": 0, + "signature": "func (af *AddForm) validate() error", + "parent": null, + "doc": null + }, + { + "name": "validate", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 714, + "column": 0, + "signature": "func (ef *EditForm) validate() error", + "parent": null, + "doc": null + } + ], + "updatePasswordLabel": [ + { + "name": "updatePasswordLabel", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 273, + "column": 0, + "signature": "func (af *AddForm) updatePasswordLabel(field *tview.InputField, password []byte)", + "parent": null, + "doc": null + }, + { + "name": "updatePasswordLabel", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 808, + "column": 0, + "signature": "func (ef *EditForm) updatePasswordLabel(field *tview.InputField, password []byte)", + "parent": null, + "doc": null + } + ], + "getCategories": [ + { + "name": "getCategories", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 296, + "column": 0, + "signature": "func (af *AddForm) getCategories() []string", + "parent": null, + "doc": null + }, + { + "name": "getCategories", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 734, + "column": 0, + "signature": "func (ef *EditForm) getCategories() []string", + "parent": null, + "doc": null + } + ], + "wrapInFrame": [ + { + "name": "wrapInFrame", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 305, + "column": 0, + "signature": "func (af *AddForm) wrapInFrame()", + "parent": null, + "doc": null + }, + { + "name": "wrapInFrame", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 743, + "column": 0, + "signature": "func (ef *EditForm) wrapInFrame()", + "parent": null, + "doc": null + } + ], + "setupKeyboardShortcuts": [ + { + "name": "setupKeyboardShortcuts", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 336, + "column": 0, + "signature": "func (af *AddForm) setupKeyboardShortcuts()", + "parent": null, + "doc": null + }, + { + "name": "setupKeyboardShortcuts", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 774, + "column": 0, + "signature": "func (ef *EditForm) setupKeyboardShortcuts()", + "parent": null, + "doc": null + } + ], + "togglePasswordVisibility": [ + { + "name": "togglePasswordVisibility", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 400, + "column": 0, + "signature": "func (af *AddForm) togglePasswordVisibility()", + "parent": null, + "doc": null + }, + { + "name": "togglePasswordVisibility", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 860, + "column": 0, + "signature": "func (ef *EditForm) togglePasswordVisibility()", + "parent": null, + "doc": null + } + ], + "SetOnSubmit": [ + { + "name": "SetOnSubmit", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 421, + "column": 0, + "signature": "func (af *AddForm) SetOnSubmit(callback func())", + "parent": null, + "doc": null + }, + { + "name": "SetOnSubmit", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 881, + "column": 0, + "signature": "func (ef *EditForm) SetOnSubmit(callback func())", + "parent": null, + "doc": null + } + ], + "SetOnCancel": [ + { + "name": "SetOnCancel", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 426, + "column": 0, + "signature": "func (af *AddForm) SetOnCancel(callback func())", + "parent": null, + "doc": null + }, + { + "name": "SetOnCancel", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 886, + "column": 0, + "signature": "func (ef *EditForm) SetOnCancel(callback func())", + "parent": null, + "doc": null + } + ], + "SetOnCancelConfirm": [ + { + "name": "SetOnCancelConfirm", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 431, + "column": 0, + "signature": "func (af *AddForm) SetOnCancelConfirm(callback func(message string, onYes func(), onNo func()))", + "parent": null, + "doc": null + }, + { + "name": "SetOnCancelConfirm", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 891, + "column": 0, + "signature": "func (ef *EditForm) SetOnCancelConfirm(callback func(message string, onYes func(), onNo func()))", + "parent": null, + "doc": null + } + ], + "GetFormItem": [ + { + "name": "GetFormItem", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 436, + "column": 0, + "signature": "func (af *AddForm) GetFormItem(index int) tview.FormItem", + "parent": null, + "doc": null + }, + { + "name": "GetFormItem", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 896, + "column": 0, + "signature": "func (ef *EditForm) GetFormItem(index int) tview.FormItem", + "parent": null, + "doc": null + } + ], + "GetInputCapture": [ + { + "name": "GetInputCapture", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 441, + "column": 0, + "signature": "func (af *AddForm) GetInputCapture() func(event *tcell.EventKey) *tcell.EventKey", + "parent": null, + "doc": null + }, + { + "name": "GetInputCapture", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 901, + "column": 0, + "signature": "func (ef *EditForm) GetInputCapture() func(event *tcell.EventKey) *tcell.EventKey", + "parent": null, + "doc": null + } + ], + "buildFormFieldsWithValues": [ + { + "name": "buildFormFieldsWithValues", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 465, + "column": 0, + "signature": "func (ef *EditForm) buildFormFieldsWithValues()", + "parent": null, + "doc": null + } + ], + "fetchPasswordIfNeeded": [ + { + "name": "fetchPasswordIfNeeded", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 540, + "column": 0, + "signature": "func (ef *EditForm) fetchPasswordIfNeeded(passwordField *tview.InputField)", + "parent": null, + "doc": null + } + ], + "onSavePressed": [ + { + "name": "onSavePressed", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 567, + "column": 0, + "signature": "func (ef *EditForm) onSavePressed()", + "parent": null, + "doc": null + } + ], + "performSave": [ + { + "name": "performSave", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 587, + "column": 0, + "signature": "func (ef *EditForm) performSave()", + "parent": null, + "doc": null + } + ], + "hasUnsavedChanges": [ + { + "name": "hasUnsavedChanges", + "type": "method", + "file": "cmd/tui/components/forms.go", + "line": 694, + "column": 0, + "signature": "func (ef *EditForm) hasUnsavedChanges() bool", + "parent": null, + "doc": null + } + ], + "AddForm": [ + { + "name": "AddForm", + "type": "struct", + "file": "cmd/tui/components/forms.go", + "line": 31, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "EditForm": [ + { + "name": "EditForm", + "type": "struct", + "file": "cmd/tui/components/forms.go", + "line": 46, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewSidebar": [ + { + "name": "NewSidebar", + "type": "function", + "file": "cmd/tui/components/sidebar.go", + "line": 31, + "column": 0, + "signature": "func NewSidebar(appState *models.AppState) *Sidebar", + "parent": null, + "doc": null + } + ], + "onSelect": [ + { + "name": "onSelect", + "type": "method", + "file": "cmd/tui/components/sidebar.go", + "line": 143, + "column": 0, + "signature": "func (s *Sidebar) onSelect(node *tview.TreeNode)", + "parent": null, + "doc": null + } + ], + "NodeReference": [ + { + "name": "NodeReference", + "type": "struct", + "file": "cmd/tui/components/sidebar.go", + "line": 15, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "Sidebar": [ + { + "name": "Sidebar", + "type": "struct", + "file": "cmd/tui/components/sidebar.go", + "line": 22, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewStatusBar": [ + { + "name": "NewStatusBar", + "type": "function", + "file": "cmd/tui/components/statusbar.go", + "line": 40, + "column": 0, + "signature": "func NewStatusBar(app *tview.Application, appState *models.AppState, cfg *config.Config) *StatusBar", + "parent": null, + "doc": null + } + ], + "UpdateForContext": [ + { + "name": "UpdateForContext", + "type": "method", + "file": "cmd/tui/components/statusbar.go", + "line": 67, + "column": 0, + "signature": "func (sb *StatusBar) UpdateForContext(focus FocusContext)", + "parent": null, + "doc": null + } + ], + "ShowSuccess": [ + { + "name": "ShowSuccess", + "type": "method", + "file": "cmd/tui/components/statusbar.go", + "line": 76, + "column": 0, + "signature": "func (sb *StatusBar) ShowSuccess(message string)", + "parent": null, + "doc": null + } + ], + "ShowInfo": [ + { + "name": "ShowInfo", + "type": "method", + "file": "cmd/tui/components/statusbar.go", + "line": 82, + "column": 0, + "signature": "func (sb *StatusBar) ShowInfo(message string)", + "parent": null, + "doc": null + } + ], + "ShowError": [ + { + "name": "ShowError", + "type": "method", + "file": "cmd/tui/components/statusbar.go", + "line": 88, + "column": 0, + "signature": "func (sb *StatusBar) ShowError(err error)", + "parent": null, + "doc": null + } + ], + "showTemporaryMessage": [ + { + "name": "showTemporaryMessage", + "type": "method", + "file": "cmd/tui/components/statusbar.go", + "line": 94, + "column": 0, + "signature": "func (sb *StatusBar) showTemporaryMessage(message string, duration time.Duration)", + "parent": null, + "doc": null + } + ], + "getShortcutsForContext": [ + { + "name": "getShortcutsForContext", + "type": "method", + "file": "cmd/tui/components/statusbar.go", + "line": 110, + "column": 0, + "signature": "func (sb *StatusBar) getShortcutsForContext(focus FocusContext) string", + "parent": null, + "doc": null + } + ], + "FocusContext": [ + { + "name": "FocusContext", + "type": "type", + "file": "cmd/tui/components/statusbar.go", + "line": 15, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "StatusBar": [ + { + "name": "StatusBar", + "type": "struct", + "file": "cmd/tui/components/statusbar.go", + "line": 29, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewCredentialTable": [ + { + "name": "NewCredentialTable", + "type": "function", + "file": "cmd/tui/components/table.go", + "line": 25, + "column": 0, + "signature": "func NewCredentialTable(appState *models.AppState) *CredentialTable", + "parent": null, + "doc": null + } + ], + "buildHeader": [ + { + "name": "buildHeader", + "type": "method", + "file": "cmd/tui/components/table.go", + "line": 59, + "column": 0, + "signature": "func (ct *CredentialTable) buildHeader()", + "parent": null, + "doc": null + } + ], + "applySelection": [ + { + "name": "applySelection", + "type": "method", + "file": "cmd/tui/components/table.go", + "line": 154, + "column": 0, + "signature": "func (ct *CredentialTable) applySelection(row int)", + "parent": null, + "doc": null + } + ], + "filterByCategory": [ + { + "name": "filterByCategory", + "type": "method", + "file": "cmd/tui/components/table.go", + "line": 176, + "column": 0, + "signature": "func (ct *CredentialTable) filterByCategory(creds []vault.CredentialMetadata, category string) []vault.CredentialMetadata", + "parent": null, + "doc": null + } + ], + "filterBySearch": [ + { + "name": "filterBySearch", + "type": "method", + "file": "cmd/tui/components/table.go", + "line": 192, + "column": 0, + "signature": "func (ct *CredentialTable) filterBySearch(creds []vault.CredentialMetadata, searchState *models.SearchState) []vault.CredentialMetadata", + "parent": null, + "doc": null + } + ], + "CredentialTable": [ + { + "name": "CredentialTable", + "type": "struct", + "file": "cmd/tui/components/table.go", + "line": 15, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "IsComponentVisible": [ + { + "name": "IsComponentVisible", + "type": "function", + "file": "cmd/tui/events/focus.go", + "line": 16, + "column": 0, + "signature": "func IsComponentVisible(component models.FocusableComponent, mode layout.LayoutMode) bool", + "parent": null, + "doc": null + } + ], + "GetNextVisibleComponent": [ + { + "name": "GetNextVisibleComponent", + "type": "function", + "file": "cmd/tui/events/focus.go", + "line": 37, + "column": 0, + "signature": "func GetNextVisibleComponent(current models.FocusableComponent, mode layout.LayoutMode) models.FocusableComponent", + "parent": null, + "doc": null + } + ], + "GetPreviousVisibleComponent": [ + { + "name": "GetPreviousVisibleComponent", + "type": "function", + "file": "cmd/tui/events/focus.go", + "line": 76, + "column": 0, + "signature": "func GetPreviousVisibleComponent(current models.FocusableComponent, mode layout.LayoutMode) models.FocusableComponent", + "parent": null, + "doc": null + } + ], + "OnFocusChanged": [ + { + "name": "OnFocusChanged", + "type": "function", + "file": "cmd/tui/events/focus.go", + "line": 114, + "column": 0, + "signature": "func OnFocusChanged(focus models.FocusableComponent, statusBar *components.StatusBar)", + "parent": null, + "doc": null + } + ], + "SetFocusToComponent": [ + { + "name": "SetFocusToComponent", + "type": "function", + "file": "cmd/tui/events/focus.go", + "line": 133, + "column": 0, + "signature": "func SetFocusToComponent(nav *models.NavigationState, target models.FocusableComponent, mode layout.LayoutMode) error", + "parent": null, + "doc": null + } + ], + "FocusOnFirstCredential": [ + { + "name": "FocusOnFirstCredential", + "type": "function", + "file": "cmd/tui/events/focus.go", + "line": 146, + "column": 0, + "signature": "func FocusOnFirstCredential(nav *models.NavigationState)", + "parent": null, + "doc": null + } + ], + "RestoreFocusAfterModal": [ + { + "name": "RestoreFocusAfterModal", + "type": "function", + "file": "cmd/tui/events/focus.go", + "line": 152, + "column": 0, + "signature": "func RestoreFocusAfterModal(nav *models.NavigationState)", + "parent": null, + "doc": null + } + ], + "CycleFocusWithLayoutAwareness": [ + { + "name": "CycleFocusWithLayoutAwareness", + "type": "function", + "file": "cmd/tui/events/focus.go", + "line": 158, + "column": 0, + "signature": "func CycleFocusWithLayoutAwareness(nav *models.NavigationState, layoutManager *layout.LayoutManager)", + "parent": null, + "doc": null + } + ], + "CycleFocusReverseWithLayoutAwareness": [ + { + "name": "CycleFocusReverseWithLayoutAwareness", + "type": "function", + "file": "cmd/tui/events/focus.go", + "line": 168, + "column": 0, + "signature": "func CycleFocusReverseWithLayoutAwareness(nav *models.NavigationState, layoutManager *layout.LayoutManager)", + "parent": null, + "doc": null + } + ], + "NewEventHandler": [ + { + "name": "NewEventHandler", + "type": "function", + "file": "cmd/tui/events/handlers.go", + "line": 29, + "column": 0, + "signature": "func NewEventHandler(\r\n\tapp *tview.Application,\r\n\tappState *models.AppState,\r\n\tnav *models.NavigationState,\r\n\tpageManager *layout.PageManager,\r\n\tstatusBar *components.StatusBar,\r\n\tdetailView *components.DetailView,\r\n\tlayoutMgr *layout.LayoutManager,\r\n\tcfg *config.Config,\r\n) *EventHandler", + "parent": null, + "doc": null + } + ], + "SetupGlobalShortcuts": [ + { + "name": "SetupGlobalShortcuts", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 53, + "column": 0, + "signature": "func (eh *EventHandler) SetupGlobalShortcuts()", + "parent": null, + "doc": null + } + ], + "handleGlobalKey": [ + { + "name": "handleGlobalKey", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 103, + "column": 0, + "signature": "func (eh *EventHandler) handleGlobalKey(event *tcell.EventKey) *tcell.EventKey", + "parent": null, + "doc": null + } + ], + "handleQuit": [ + { + "name": "handleQuit", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 187, + "column": 0, + "signature": "func (eh *EventHandler) handleQuit()", + "parent": null, + "doc": null + } + ], + "handleNewCredential": [ + { + "name": "handleNewCredential", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 199, + "column": 0, + "signature": "func (eh *EventHandler) handleNewCredential()", + "parent": null, + "doc": null + } + ], + "handleEditCredential": [ + { + "name": "handleEditCredential", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 219, + "column": 0, + "signature": "func (eh *EventHandler) handleEditCredential()", + "parent": null, + "doc": null + } + ], + "handleDeleteCredential": [ + { + "name": "handleDeleteCredential", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 245, + "column": 0, + "signature": "func (eh *EventHandler) handleDeleteCredential()", + "parent": null, + "doc": null + } + ], + "handleTogglePassword": [ + { + "name": "handleTogglePassword", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 273, + "column": 0, + "signature": "func (eh *EventHandler) handleTogglePassword()", + "parent": null, + "doc": null + } + ], + "handleCopyPassword": [ + { + "name": "handleCopyPassword", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 282, + "column": 0, + "signature": "func (eh *EventHandler) handleCopyPassword()", + "parent": null, + "doc": null + } + ], + "handleCopyField": [ + { + "name": "handleCopyField", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 296, + "column": 0, + "signature": "func (eh *EventHandler) handleCopyField(field string)", + "parent": null, + "doc": null + } + ], + "handleToggleDetailPanel": [ + { + "name": "handleToggleDetailPanel", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 317, + "column": 0, + "signature": "func (eh *EventHandler) handleToggleDetailPanel()", + "parent": null, + "doc": null + } + ], + "handleToggleSidebar": [ + { + "name": "handleToggleSidebar", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 329, + "column": 0, + "signature": "func (eh *EventHandler) handleToggleSidebar()", + "parent": null, + "doc": null + } + ], + "handleShowHelp": [ + { + "name": "handleShowHelp", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 339, + "column": 0, + "signature": "func (eh *EventHandler) handleShowHelp()", + "parent": null, + "doc": null + } + ], + "handleTabFocus": [ + { + "name": "handleTabFocus", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 497, + "column": 0, + "signature": "func (eh *EventHandler) handleTabFocus()", + "parent": null, + "doc": null + } + ], + "handleShiftTabFocus": [ + { + "name": "handleShiftTabFocus", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 502, + "column": 0, + "signature": "func (eh *EventHandler) handleShiftTabFocus()", + "parent": null, + "doc": null + } + ], + "handleSearchActivate": [ + { + "name": "handleSearchActivate", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 507, + "column": 0, + "signature": "func (eh *EventHandler) handleSearchActivate()", + "parent": null, + "doc": null + } + ], + "handleSearchDeactivate": [ + { + "name": "handleSearchDeactivate", + "type": "method", + "file": "cmd/tui/events/handlers.go", + "line": 572, + "column": 0, + "signature": "func (eh *EventHandler) handleSearchDeactivate()", + "parent": null, + "doc": null + } + ], + "EventHandler": [ + { + "name": "EventHandler", + "type": "struct", + "file": "cmd/tui/events/handlers.go", + "line": 17, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewLayoutManager": [ + { + "name": "NewLayoutManager", + "type": "function", + "file": "cmd/tui/layout/manager.go", + "line": 83, + "column": 0, + "signature": "func NewLayoutManager(app *tview.Application, appState *models.AppState, cfg *config.Config) *LayoutManager", + "parent": null, + "doc": null + } + ], + "determineDetailPosition": [ + { + "name": "determineDetailPosition", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 106, + "column": 0, + "signature": "func (lm *LayoutManager) determineDetailPosition() string", + "parent": null, + "doc": null + } + ], + "shouldShowDetailInMode": [ + { + "name": "shouldShowDetailInMode", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 122, + "column": 0, + "signature": "func (lm *LayoutManager) shouldShowDetailInMode(mode LayoutMode) bool", + "parent": null, + "doc": null + } + ], + "CreateMainLayout": [ + { + "name": "CreateMainLayout", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 154, + "column": 0, + "signature": "func (lm *LayoutManager) CreateMainLayout() *tview.Flex", + "parent": null, + "doc": null + } + ], + "HandleResize": [ + { + "name": "HandleResize", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 177, + "column": 0, + "signature": "func (lm *LayoutManager) HandleResize(width, height int)", + "parent": null, + "doc": null + } + ], + "RebuildLayout": [ + { + "name": "RebuildLayout", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 223, + "column": 0, + "signature": "func (lm *LayoutManager) RebuildLayout()", + "parent": null, + "doc": null + } + ], + "determineLayoutMode": [ + { + "name": "determineLayoutMode", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 342, + "column": 0, + "signature": "func (lm *LayoutManager) determineLayoutMode(width int) LayoutMode", + "parent": null, + "doc": null + } + ], + "GetCurrentMode": [ + { + "name": "GetCurrentMode", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 353, + "column": 0, + "signature": "func (lm *LayoutManager) GetCurrentMode() LayoutMode", + "parent": null, + "doc": null + } + ], + "SetBreakpoints": [ + { + "name": "SetBreakpoints", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 359, + "column": 0, + "signature": "func (lm *LayoutManager) SetBreakpoints(medium, large int)", + "parent": null, + "doc": null + } + ], + "SetPageManager": [ + { + "name": "SetPageManager", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 366, + "column": 0, + "signature": "func (lm *LayoutManager) SetPageManager(pm PageManagerInterface)", + "parent": null, + "doc": null + } + ], + "ToggleDetailPanel": [ + { + "name": "ToggleDetailPanel", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 376, + "column": 0, + "signature": "func (lm *LayoutManager) ToggleDetailPanel() string", + "parent": null, + "doc": null + } + ], + "shouldShowSidebar": [ + { + "name": "shouldShowSidebar", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 403, + "column": 0, + "signature": "func (lm *LayoutManager) shouldShowSidebar() bool", + "parent": null, + "doc": null + } + ], + "getTableArea": [ + { + "name": "getTableArea", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 414, + "column": 0, + "signature": "func (lm *LayoutManager) getTableArea() tview.Primitive", + "parent": null, + "doc": null + } + ], + "ToggleSidebar": [ + { + "name": "ToggleSidebar", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 437, + "column": 0, + "signature": "func (lm *LayoutManager) ToggleSidebar() string", + "parent": null, + "doc": null + } + ], + "GetSidebarOverride": [ + { + "name": "GetSidebarOverride", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 463, + "column": 0, + "signature": "func (lm *LayoutManager) GetSidebarOverride() *bool", + "parent": null, + "doc": null + } + ], + "SetSidebarOverride": [ + { + "name": "SetSidebarOverride", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 468, + "column": 0, + "signature": "func (lm *LayoutManager) SetSidebarOverride(override *bool)", + "parent": null, + "doc": null + } + ], + "ShouldShowSidebar": [ + { + "name": "ShouldShowSidebar", + "type": "method", + "file": "cmd/tui/layout/manager.go", + "line": 473, + "column": 0, + "signature": "func (lm *LayoutManager) ShouldShowSidebar() bool", + "parent": null, + "doc": null + } + ], + "LayoutMode": [ + { + "name": "LayoutMode", + "type": "type", + "file": "cmd/tui/layout/manager.go", + "line": 19, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "PageManagerInterface": [ + { + "name": "PageManagerInterface", + "type": "interface", + "file": "cmd/tui/layout/manager.go", + "line": 32, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "LayoutManager": [ + { + "name": "LayoutManager", + "type": "struct", + "file": "cmd/tui/layout/manager.go", + "line": 40, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewPageManager": [ + { + "name": "NewPageManager", + "type": "function", + "file": "cmd/tui/layout/pages.go", + "line": 45, + "column": 0, + "signature": "func NewPageManager(app *tview.Application) *PageManager", + "parent": null, + "doc": null + } + ], + "ShowPage": [ + { + "name": "ShowPage", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 61, + "column": 0, + "signature": "func (pm *PageManager) ShowPage(name string, primitive tview.Primitive) *PageManager", + "parent": null, + "doc": null + } + ], + "SwitchToPage": [ + { + "name": "SwitchToPage", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 67, + "column": 0, + "signature": "func (pm *PageManager) SwitchToPage(name string) *PageManager", + "parent": null, + "doc": null + } + ], + "ShowModal": [ + { + "name": "ShowModal", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 79, + "column": 0, + "signature": "func (pm *PageManager) ShowModal(name string, modal tview.Primitive, width, height int) *PageManager", + "parent": null, + "doc": null + } + ], + "ShowForm": [ + { + "name": "ShowForm", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 91, + "column": 0, + "signature": "func (pm *PageManager) ShowForm(form *tview.Form, title string) *PageManager", + "parent": null, + "doc": null + } + ], + "ShowModalWithAutoHeight": [ + { + "name": "ShowModalWithAutoHeight", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 110, + "column": 0, + "signature": "func (pm *PageManager) ShowModalWithAutoHeight(name string, form *tview.Form, width int) *PageManager", + "parent": null, + "doc": null + } + ], + "ShowConfirmDialog": [ + { + "name": "ShowConfirmDialog", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 141, + "column": 0, + "signature": "func (pm *PageManager) ShowConfirmDialog(title, message string, onYes, onNo func()) *PageManager", + "parent": null, + "doc": null + } + ], + "CloseModal": [ + { + "name": "CloseModal", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 163, + "column": 0, + "signature": "func (pm *PageManager) CloseModal(name string)", + "parent": null, + "doc": null + } + ], + "CloseTopModal": [ + { + "name": "CloseTopModal", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 182, + "column": 0, + "signature": "func (pm *PageManager) CloseTopModal()", + "parent": null, + "doc": null + } + ], + "HasModals": [ + { + "name": "HasModals", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 190, + "column": 0, + "signature": "func (pm *PageManager) HasModals() bool", + "parent": null, + "doc": null + } + ], + "centerModal": [ + { + "name": "centerModal", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 196, + "column": 0, + "signature": "func (pm *PageManager) centerModal(modal tview.Primitive, width, height int) tview.Primitive", + "parent": null, + "doc": null + } + ], + "setupEscapeHandler": [ + { + "name": "setupEscapeHandler", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 217, + "column": 0, + "signature": "func (pm *PageManager) setupEscapeHandler()", + "parent": null, + "doc": null + } + ], + "ShowSizeWarning": [ + { + "name": "ShowSizeWarning", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 232, + "column": 0, + "signature": "func (pm *PageManager) ShowSizeWarning(currentWidth, currentHeight, minWidth, minHeight int)", + "parent": null, + "doc": null + } + ], + "HideSizeWarning": [ + { + "name": "HideSizeWarning", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 283, + "column": 0, + "signature": "func (pm *PageManager) HideSizeWarning()", + "parent": null, + "doc": null + } + ], + "ApplyPendingWarnings": [ + { + "name": "ApplyPendingWarnings", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 295, + "column": 0, + "signature": "func (pm *PageManager) ApplyPendingWarnings()", + "parent": null, + "doc": null + } + ], + "IsSizeWarningActive": [ + { + "name": "IsSizeWarningActive", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 325, + "column": 0, + "signature": "func (pm *PageManager) IsSizeWarningActive() bool", + "parent": null, + "doc": null + } + ], + "ShowConfigValidationError": [ + { + "name": "ShowConfigValidationError", + "type": "method", + "file": "cmd/tui/layout/pages.go", + "line": 332, + "column": 0, + "signature": "func (pm *PageManager) ShowConfigValidationError(errors []string)", + "parent": null, + "doc": null + } + ], + "PageManager": [ + { + "name": "PageManager", + "type": "struct", + "file": "cmd/tui/layout/pages.go", + "line": 32, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewNavigationState": [ + { + "name": "NewNavigationState", + "type": "function", + "file": "cmd/tui/models/navigation.go", + "line": 31, + "column": 0, + "signature": "func NewNavigationState(app *tview.Application, appState *AppState) *NavigationState", + "parent": null, + "doc": null + } + ], + "SetFocusOrder": [ + { + "name": "SetFocusOrder", + "type": "method", + "file": "cmd/tui/models/navigation.go", + "line": 56, + "column": 0, + "signature": "func (ns *NavigationState) SetFocusOrder(order []tview.Primitive)", + "parent": null, + "doc": null + } + ], + "CycleFocus": [ + { + "name": "CycleFocus", + "type": "method", + "file": "cmd/tui/models/navigation.go", + "line": 63, + "column": 0, + "signature": "func (ns *NavigationState) CycleFocus()", + "parent": null, + "doc": null + } + ], + "CycleFocusReverse": [ + { + "name": "CycleFocusReverse", + "type": "method", + "file": "cmd/tui/models/navigation.go", + "line": 74, + "column": 0, + "signature": "func (ns *NavigationState) CycleFocusReverse()", + "parent": null, + "doc": null + } + ], + "SetFocus": [ + { + "name": "SetFocus", + "type": "method", + "file": "cmd/tui/models/navigation.go", + "line": 87, + "column": 0, + "signature": "func (ns *NavigationState) SetFocus(target FocusableComponent)", + "parent": null, + "doc": null + } + ], + "GetCurrentFocus": [ + { + "name": "GetCurrentFocus", + "type": "method", + "file": "cmd/tui/models/navigation.go", + "line": 95, + "column": 0, + "signature": "func (ns *NavigationState) GetCurrentFocus() FocusableComponent", + "parent": null, + "doc": null + } + ], + "SetOnFocusChanged": [ + { + "name": "SetOnFocusChanged", + "type": "method", + "file": "cmd/tui/models/navigation.go", + "line": 103, + "column": 0, + "signature": "func (ns *NavigationState) SetOnFocusChanged(callback func(FocusableComponent))", + "parent": null, + "doc": null + } + ], + "setFocus": [ + { + "name": "setFocus", + "type": "method", + "file": "cmd/tui/models/navigation.go", + "line": 109, + "column": 0, + "signature": "func (ns *NavigationState) setFocus(index int)", + "parent": null, + "doc": null + } + ], + "updateBorderColors": [ + { + "name": "updateBorderColors", + "type": "method", + "file": "cmd/tui/models/navigation.go", + "line": 128, + "column": 0, + "signature": "func (ns *NavigationState) updateBorderColors(activeIndex int)", + "parent": null, + "doc": null + } + ], + "FocusableComponent": [ + { + "name": "FocusableComponent", + "type": "type", + "file": "cmd/tui/models/navigation.go", + "line": 9, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NavigationState": [ + { + "name": "NavigationState", + "type": "struct", + "file": "cmd/tui/models/navigation.go", + "line": 19, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "MatchesCredential": [ + { + "name": "MatchesCredential", + "type": "method", + "file": "cmd/tui/models/search.go", + "line": 20, + "column": 0, + "signature": "func (ss *SearchState) MatchesCredential(cred *vault.CredentialMetadata) bool", + "parent": null, + "doc": null + } + ], + "Activate": [ + { + "name": "Activate", + "type": "method", + "file": "cmd/tui/models/search.go", + "line": 37, + "column": 0, + "signature": "func (ss *SearchState) Activate()", + "parent": null, + "doc": null + } + ], + "Deactivate": [ + { + "name": "Deactivate", + "type": "method", + "file": "cmd/tui/models/search.go", + "line": 45, + "column": 0, + "signature": "func (ss *SearchState) Deactivate()", + "parent": null, + "doc": null + } + ], + "SearchState": [ + { + "name": "SearchState", + "type": "struct", + "file": "cmd/tui/models/search.go", + "line": 12, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewSearchState": [ + { + "name": "NewSearchState", + "type": "function", + "file": "cmd/tui/models/state.go", + "line": 73, + "column": 0, + "signature": "func NewSearchState() *SearchState", + "parent": null, + "doc": null + } + ], + "NewAppState": [ + { + "name": "NewAppState", + "type": "function", + "file": "cmd/tui/models/state.go", + "line": 82, + "column": 0, + "signature": "func NewAppState(vaultService VaultService) *AppState", + "parent": null, + "doc": null + } + ], + "GetCredentials": [ + { + "name": "GetCredentials", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 92, + "column": 0, + "signature": "func (s *AppState) GetCredentials() []vault.CredentialMetadata", + "parent": null, + "doc": null + } + ], + "GetCategories": [ + { + "name": "GetCategories", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 99, + "column": 0, + "signature": "func (s *AppState) GetCategories() []string", + "parent": null, + "doc": null + } + ], + "GetSelectedCredential": [ + { + "name": "GetSelectedCredential", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 110, + "column": 0, + "signature": "func (s *AppState) GetSelectedCredential() *vault.CredentialMetadata", + "parent": null, + "doc": null + } + ], + "GetSelectedCategory": [ + { + "name": "GetSelectedCategory", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 117, + "column": 0, + "signature": "func (s *AppState) GetSelectedCategory() string", + "parent": null, + "doc": null + } + ], + "FindCredentialByService": [ + { + "name": "FindCredentialByService", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 125, + "column": 0, + "signature": "func (s *AppState) FindCredentialByService(service string) (*vault.CredentialMetadata, bool)", + "parent": null, + "doc": null + } + ], + "GetFullCredential": [ + { + "name": "GetFullCredential", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 140, + "column": 0, + "signature": "func (s *AppState) GetFullCredential(service string) (*vault.Credential, error)", + "parent": null, + "doc": null + } + ], + "GetFullCredentialWithTracking": [ + { + "name": "GetFullCredentialWithTracking", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 146, + "column": 0, + "signature": "func (s *AppState) GetFullCredentialWithTracking(service string, track bool) (*vault.Credential, error)", + "parent": null, + "doc": null + } + ], + "RecordFieldAccess": [ + { + "name": "RecordFieldAccess", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 155, + "column": 0, + "signature": "func (s *AppState) RecordFieldAccess(service, field string) error", + "parent": null, + "doc": null + }, + { + "name": "RecordFieldAccess", + "type": "method", + "file": "internal/vault/vault.go", + "line": 782, + "column": 0, + "signature": "func (v *VaultService) RecordFieldAccess(service, field string) error", + "parent": null, + "doc": null + } + ], + "LoadCredentials": [ + { + "name": "LoadCredentials", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 164, + "column": 0, + "signature": "func (s *AppState) LoadCredentials() error", + "parent": null, + "doc": null + } + ], + "AddCredential": [ + { + "name": "AddCredential", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 189, + "column": 0, + "signature": "func (s *AppState) AddCredential(service, username, password, category, url, notes string) error", + "parent": null, + "doc": null + }, + { + "name": "AddCredential", + "type": "method", + "file": "internal/vault/vault.go", + "line": 706, + "column": 0, + "signature": "func (v *VaultService) AddCredential(service, username string, password []byte, category, url, notes string) error", + "parent": null, + "doc": null + } + ], + "UpdateCredential": [ + { + "name": "UpdateCredential", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 224, + "column": 0, + "signature": "func (s *AppState) UpdateCredential(service string, opts UpdateCredentialOpts) error", + "parent": null, + "doc": null + }, + { + "name": "UpdateCredential", + "type": "method", + "file": "internal/vault/vault.go", + "line": 955, + "column": 0, + "signature": "func (v *VaultService) UpdateCredential(service string, opts UpdateOpts) error", + "parent": null, + "doc": null + } + ], + "DeleteCredential": [ + { + "name": "DeleteCredential", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 264, + "column": 0, + "signature": "func (s *AppState) DeleteCredential(service string) error", + "parent": null, + "doc": null + }, + { + "name": "DeleteCredential", + "type": "method", + "file": "internal/vault/vault.go", + "line": 1042, + "column": 0, + "signature": "func (v *VaultService) DeleteCredential(service string) error", + "parent": null, + "doc": null + } + ], + "SetSelectedCategory": [ + { + "name": "SetSelectedCategory", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 295, + "column": 0, + "signature": "func (s *AppState) SetSelectedCategory(category string)", + "parent": null, + "doc": null + } + ], + "SetSelectedCredential": [ + { + "name": "SetSelectedCredential", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 306, + "column": 0, + "signature": "func (s *AppState) SetSelectedCredential(credential *vault.CredentialMetadata)", + "parent": null, + "doc": null + } + ], + "SetSelection": [ + { + "name": "SetSelection", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 333, + "column": 0, + "signature": "func (s *AppState) SetSelection(category string, credential *vault.CredentialMetadata)", + "parent": null, + "doc": null + } + ], + "SetSidebar": [ + { + "name": "SetSidebar", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 343, + "column": 0, + "signature": "func (s *AppState) SetSidebar(sidebar *tview.TreeView)", + "parent": null, + "doc": null + } + ], + "GetSidebar": [ + { + "name": "GetSidebar", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 350, + "column": 0, + "signature": "func (s *AppState) GetSidebar() *tview.TreeView", + "parent": null, + "doc": null + } + ], + "SetTable": [ + { + "name": "SetTable", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 357, + "column": 0, + "signature": "func (s *AppState) SetTable(table *tview.Table)", + "parent": null, + "doc": null + } + ], + "GetTable": [ + { + "name": "GetTable", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 364, + "column": 0, + "signature": "func (s *AppState) GetTable() *tview.Table", + "parent": null, + "doc": null + } + ], + "SetDetailView": [ + { + "name": "SetDetailView", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 371, + "column": 0, + "signature": "func (s *AppState) SetDetailView(view *tview.TextView)", + "parent": null, + "doc": null + } + ], + "GetDetailView": [ + { + "name": "GetDetailView", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 378, + "column": 0, + "signature": "func (s *AppState) GetDetailView() *tview.TextView", + "parent": null, + "doc": null + } + ], + "SetStatusBar": [ + { + "name": "SetStatusBar", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 385, + "column": 0, + "signature": "func (s *AppState) SetStatusBar(bar *tview.TextView)", + "parent": null, + "doc": null + } + ], + "GetStatusBar": [ + { + "name": "GetStatusBar", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 392, + "column": 0, + "signature": "func (s *AppState) GetStatusBar() *tview.TextView", + "parent": null, + "doc": null + } + ], + "SetSearchState": [ + { + "name": "SetSearchState", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 399, + "column": 0, + "signature": "func (s *AppState) SetSearchState(searchState *SearchState)", + "parent": null, + "doc": null + } + ], + "GetSearchState": [ + { + "name": "GetSearchState", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 406, + "column": 0, + "signature": "func (s *AppState) GetSearchState() *SearchState", + "parent": null, + "doc": null + } + ], + "SetOnCredentialsChanged": [ + { + "name": "SetOnCredentialsChanged", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 413, + "column": 0, + "signature": "func (s *AppState) SetOnCredentialsChanged(callback func())", + "parent": null, + "doc": null + } + ], + "SetOnSelectionChanged": [ + { + "name": "SetOnSelectionChanged", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 420, + "column": 0, + "signature": "func (s *AppState) SetOnSelectionChanged(callback func())", + "parent": null, + "doc": null + } + ], + "SetOnError": [ + { + "name": "SetOnError", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 427, + "column": 0, + "signature": "func (s *AppState) SetOnError(callback func(error))", + "parent": null, + "doc": null + } + ], + "SetOnFilterChanged": [ + { + "name": "SetOnFilterChanged", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 435, + "column": 0, + "signature": "func (s *AppState) SetOnFilterChanged(callback func())", + "parent": null, + "doc": null + } + ], + "notifyCredentialsChanged": [ + { + "name": "notifyCredentialsChanged", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 443, + "column": 0, + "signature": "func (s *AppState) notifyCredentialsChanged()", + "parent": null, + "doc": null + } + ], + "notifySelectionChanged": [ + { + "name": "notifySelectionChanged", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 456, + "column": 0, + "signature": "func (s *AppState) notifySelectionChanged()", + "parent": null, + "doc": null + } + ], + "TriggerRefresh": [ + { + "name": "TriggerRefresh", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 472, + "column": 0, + "signature": "func (s *AppState) TriggerRefresh()", + "parent": null, + "doc": null + } + ], + "TriggerFilterChanged": [ + { + "name": "TriggerFilterChanged", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 478, + "column": 0, + "signature": "func (s *AppState) TriggerFilterChanged()", + "parent": null, + "doc": null + } + ], + "notifyFilterChanged": [ + { + "name": "notifyFilterChanged", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 484, + "column": 0, + "signature": "func (s *AppState) notifyFilterChanged()", + "parent": null, + "doc": null + } + ], + "notifyError": [ + { + "name": "notifyError", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 497, + "column": 0, + "signature": "func (s *AppState) notifyError(err error)", + "parent": null, + "doc": null + } + ], + "updateCategories": [ + { + "name": "updateCategories", + "type": "method", + "file": "cmd/tui/models/state.go", + "line": 510, + "column": 0, + "signature": "func (s *AppState) updateCategories()", + "parent": null, + "doc": null + } + ], + "VaultService": [ + { + "name": "VaultService", + "type": "interface", + "file": "cmd/tui/models/state.go", + "line": 19, + "column": 0, + "signature": null, + "parent": null, + "doc": null + }, + { + "name": "VaultService", + "type": "struct", + "file": "internal/vault/vault.go", + "line": 88, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "UpdateCredentialOpts": [ + { + "name": "UpdateCredentialOpts", + "type": "struct", + "file": "cmd/tui/models/state.go", + "line": 31, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "AppState": [ + { + "name": "AppState", + "type": "struct", + "file": "cmd/tui/models/state.go", + "line": 41, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "GetCurrentTheme": [ + { + "name": "GetCurrentTheme", + "type": "function", + "file": "cmd/tui/styles/theme.go", + "line": 174, + "column": 0, + "signature": "func GetCurrentTheme() ColorScheme", + "parent": null, + "doc": null + } + ], + "SetTheme": [ + { + "name": "SetTheme", + "type": "function", + "file": "cmd/tui/styles/theme.go", + "line": 181, + "column": 0, + "signature": "func SetTheme(name string) error", + "parent": null, + "doc": null + } + ], + "GetAvailableThemes": [ + { + "name": "GetAvailableThemes", + "type": "function", + "file": "cmd/tui/styles/theme.go", + "line": 198, + "column": 0, + "signature": "func GetAvailableThemes() []string", + "parent": null, + "doc": null + } + ], + "SetRoundedBorders": [ + { + "name": "SetRoundedBorders", + "type": "function", + "file": "cmd/tui/styles/theme.go", + "line": 203, + "column": 0, + "signature": "func SetRoundedBorders()", + "parent": null, + "doc": null + } + ], + "ApplyBorderedStyle": [ + { + "name": "ApplyBorderedStyle", + "type": "function", + "file": "cmd/tui/styles/theme.go", + "line": 214, + "column": 0, + "signature": "func ApplyBorderedStyle(p tview.Primitive, title string, active bool)", + "parent": null, + "doc": null + } + ], + "ApplyTableStyle": [ + { + "name": "ApplyTableStyle", + "type": "function", + "file": "cmd/tui/styles/theme.go", + "line": 274, + "column": 0, + "signature": "func ApplyTableStyle(table *tview.Table)", + "parent": null, + "doc": null + } + ], + "ApplyFormStyle": [ + { + "name": "ApplyFormStyle", + "type": "function", + "file": "cmd/tui/styles/theme.go", + "line": 286, + "column": 0, + "signature": "func ApplyFormStyle(form *tview.Form)", + "parent": null, + "doc": null + } + ], + "Lighten": [ + { + "name": "Lighten", + "type": "function", + "file": "cmd/tui/styles/theme.go", + "line": 307, + "column": 0, + "signature": "func Lighten(color tcell.Color, amount float64) tcell.Color", + "parent": null, + "doc": null + } + ], + "Darken": [ + { + "name": "Darken", + "type": "function", + "file": "cmd/tui/styles/theme.go", + "line": 316, + "column": 0, + "signature": "func Darken(color tcell.Color, amount float64) tcell.Color", + "parent": null, + "doc": null + } + ], + "clampUint8": [ + { + "name": "clampUint8", + "type": "function", + "file": "cmd/tui/styles/theme.go", + "line": 325, + "column": 0, + "signature": "func clampUint8(v float64) int32", + "parent": null, + "doc": null + } + ], + "ColorScheme": [ + { + "name": "ColorScheme", + "type": "struct", + "file": "cmd/tui/styles/theme.go", + "line": 11, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "GetDefaults": [ + { + "name": "GetDefaults", + "type": "function", + "file": "internal/config/config.go", + "line": 57, + "column": 0, + "signature": "func GetDefaults() *Config", + "parent": null, + "doc": null + } + ], + "GetConfigPath": [ + { + "name": "GetConfigPath", + "type": "function", + "file": "internal/config/config.go", + "line": 90, + "column": 0, + "signature": "func GetConfigPath() (string, error)", + "parent": null, + "doc": null + } + ], + "GetEditor": [ + { + "name": "GetEditor", + "type": "function", + "file": "internal/config/config.go", + "line": 113, + "column": 0, + "signature": "func GetEditor() (string, error)", + "parent": null, + "doc": null + } + ], + "OpenEditor": [ + { + "name": "OpenEditor", + "type": "function", + "file": "internal/config/config.go", + "line": 137, + "column": 0, + "signature": "func OpenEditor(filePath string) error", + "parent": null, + "doc": null + } + ], + "GetDefaultConfigTemplate": [ + { + "name": "GetDefaultConfigTemplate", + "type": "function", + "file": "internal/config/config.go", + "line": 153, + "column": 0, + "signature": "func GetDefaultConfigTemplate() string", + "parent": null, + "doc": null + } + ], + "detectUnknownFields": [ + { + "name": "detectUnknownFields", + "type": "function", + "file": "internal/config/config.go", + "line": 223, + "column": 0, + "signature": "func detectUnknownFields(v *viper.Viper) []ValidationWarning", + "parent": null, + "doc": null + } + ], + "shouldLogConfig": [ + { + "name": "shouldLogConfig", + "type": "function", + "file": "internal/config/config.go", + "line": 265, + "column": 0, + "signature": "func shouldLogConfig() bool", + "parent": null, + "doc": null + } + ], + "LoadFromPath": [ + { + "name": "LoadFromPath", + "type": "function", + "file": "internal/config/config.go", + "line": 269, + "column": 0, + "signature": "func LoadFromPath(configPath string) (*Config, *ValidationResult)", + "parent": null, + "doc": null + } + ], + "Load": [ + { + "name": "Load", + "type": "function", + "file": "internal/config/config.go", + "line": 390, + "column": 0, + "signature": "func Load() (*Config, *ValidationResult)", + "parent": null, + "doc": null + } + ], + "containsNullByte": [ + { + "name": "containsNullByte", + "type": "function", + "file": "internal/config/config.go", + "line": 592, + "column": 0, + "signature": "func containsNullByte(s string) bool", + "parent": null, + "doc": null + } + ], + "isPathWithVariable": [ + { + "name": "isPathWithVariable", + "type": "function", + "file": "internal/config/config.go", + "line": 602, + "column": 0, + "signature": "func isPathWithVariable(path string) bool", + "parent": null, + "doc": null + } + ], + "Validate": [ + { + "name": "Validate", + "type": "method", + "file": "internal/config/config.go", + "line": 406, + "column": 0, + "signature": "func (c *Config) Validate() *ValidationResult", + "parent": null, + "doc": null + }, + { + "name": "Validate", + "type": "method", + "file": "internal/security/password.go", + "line": 54, + "column": 0, + "signature": "func (p *PasswordPolicy) Validate(password []byte) error", + "parent": null, + "doc": null + } + ], + "validateTerminal": [ + { + "name": "validateTerminal", + "type": "method", + "file": "internal/config/config.go", + "line": 434, + "column": 0, + "signature": "func (c *Config) validateTerminal(result *ValidationResult) *ValidationResult", + "parent": null, + "doc": null + } + ], + "validateKeybindings": [ + { + "name": "validateKeybindings", + "type": "method", + "file": "internal/config/config.go", + "line": 494, + "column": 0, + "signature": "func (c *Config) validateKeybindings(result *ValidationResult) *ValidationResult", + "parent": null, + "doc": null + } + ], + "validateVaultPath": [ + { + "name": "validateVaultPath", + "type": "method", + "file": "internal/config/config.go", + "line": 544, + "column": 0, + "signature": "func (c *Config) validateVaultPath(result *ValidationResult) *ValidationResult", + "parent": null, + "doc": null + } + ], + "GetParsedKeybindings": [ + { + "name": "GetParsedKeybindings", + "type": "method", + "file": "internal/config/config.go", + "line": 617, + "column": 0, + "signature": "func (c *Config) GetParsedKeybindings() map[string]*Keybinding", + "parent": null, + "doc": null + } + ], + "validateTheme": [ + { + "name": "validateTheme", + "type": "method", + "file": "internal/config/config.go", + "line": 625, + "column": 0, + "signature": "func (c *Config) validateTheme(result *ValidationResult) *ValidationResult", + "parent": null, + "doc": null + } + ], + "Config": [ + { + "name": "Config", + "type": "struct", + "file": "internal/config/config.go", + "line": 14, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Terminal", + "parent_symbol": "Config", + "field_type": "TerminalConfig", + "default_value": null, + "file": "internal/config/config.go", + "line": 15, + "column": 1, + "tags": { + "mapstructure": "terminal" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Keybindings", + "parent_symbol": "Config", + "field_type": "map[string]string", + "default_value": null, + "file": "internal/config/config.go", + "line": 16, + "column": 1, + "tags": { + "mapstructure": "keybindings" + }, + "is_optional": false, + "doc": null + }, + { + "name": "VaultPath", + "parent_symbol": "Config", + "field_type": "string", + "default_value": null, + "file": "internal/config/config.go", + "line": 17, + "column": 1, + "tags": { + "mapstructure": "vault_path" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Theme", + "parent_symbol": "Config", + "field_type": "string", + "default_value": null, + "file": "internal/config/config.go", + "line": 18, + "column": 1, + "tags": { + "mapstructure": "theme" + }, + "is_optional": false, + "doc": null + }, + { + "name": "LoadErrors", + "parent_symbol": "Config", + "field_type": "[]string", + "default_value": null, + "file": "internal/config/config.go", + "line": 21, + "column": 1, + "tags": { + "mapstructure": "-" + }, + "is_optional": false, + "doc": null + }, + { + "name": "ParsedKeybindings", + "parent_symbol": "Config", + "field_type": "map[string]*Keybinding", + "default_value": null, + "file": "internal/config/config.go", + "line": 24, + "column": 1, + "tags": { + "mapstructure": "-" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "TerminalConfig": [ + { + "name": "TerminalConfig", + "type": "struct", + "file": "internal/config/config.go", + "line": 28, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "WarningEnabled", + "parent_symbol": "TerminalConfig", + "field_type": "bool", + "default_value": null, + "file": "internal/config/config.go", + "line": 29, + "column": 1, + "tags": { + "mapstructure": "warning_enabled" + }, + "is_optional": false, + "doc": null + }, + { + "name": "MinWidth", + "parent_symbol": "TerminalConfig", + "field_type": "int", + "default_value": null, + "file": "internal/config/config.go", + "line": 30, + "column": 1, + "tags": { + "mapstructure": "min_width" + }, + "is_optional": false, + "doc": null + }, + { + "name": "MinHeight", + "parent_symbol": "TerminalConfig", + "field_type": "int", + "default_value": null, + "file": "internal/config/config.go", + "line": 31, + "column": 1, + "tags": { + "mapstructure": "min_height" + }, + "is_optional": false, + "doc": null + }, + { + "name": "DetailPosition", + "parent_symbol": "TerminalConfig", + "field_type": "string", + "default_value": null, + "file": "internal/config/config.go", + "line": 32, + "column": 1, + "tags": { + "mapstructure": "detail_position" + }, + "is_optional": false, + "doc": null + }, + { + "name": "DetailAutoThreshold", + "parent_symbol": "TerminalConfig", + "field_type": "int", + "default_value": null, + "file": "internal/config/config.go", + "line": 33, + "column": 1, + "tags": { + "mapstructure": "detail_auto_threshold" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "ValidationResult": [ + { + "name": "ValidationResult", + "type": "struct", + "file": "internal/config/config.go", + "line": 37, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "ValidationError": [ + { + "name": "ValidationError", + "type": "struct", + "file": "internal/config/config.go", + "line": 44, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "ValidationWarning": [ + { + "name": "ValidationWarning", + "type": "struct", + "file": "internal/config/config.go", + "line": 51, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "GetValidActions": [ + { + "name": "GetValidActions", + "type": "function", + "file": "internal/config/keybinding.go", + "line": 37, + "column": 0, + "signature": "func GetValidActions() []string", + "parent": null, + "doc": null + } + ], + "ParseKeybinding": [ + { + "name": "ParseKeybinding", + "type": "function", + "file": "internal/config/keybinding.go", + "line": 49, + "column": 0, + "signature": "func ParseKeybinding(keyStr string) (tcell.Key, rune, tcell.ModMask, error)", + "parent": null, + "doc": null + } + ], + "ValidateActions": [ + { + "name": "ValidateActions", + "type": "function", + "file": "internal/config/keybinding.go", + "line": 161, + "column": 0, + "signature": "func ValidateActions(bindings map[string]string) []string", + "parent": null, + "doc": null + } + ], + "DetectKeybindingConflicts": [ + { + "name": "DetectKeybindingConflicts", + "type": "function", + "file": "internal/config/keybinding.go", + "line": 181, + "column": 0, + "signature": "func DetectKeybindingConflicts(bindings map[string]string) []string", + "parent": null, + "doc": null + } + ], + "GetDisplayString": [ + { + "name": "GetDisplayString", + "type": "function", + "file": "internal/config/keybinding.go", + "line": 249, + "column": 0, + "signature": "func GetDisplayString(keyStr string) string", + "parent": null, + "doc": null + } + ], + "GetKeybindingForAction": [ + { + "name": "GetKeybindingForAction", + "type": "method", + "file": "internal/config/keybinding.go", + "line": 208, + "column": 0, + "signature": "func (c *Config) GetKeybindingForAction(action string) string", + "parent": null, + "doc": null + } + ], + "MatchesKeybinding": [ + { + "name": "MatchesKeybinding", + "type": "method", + "file": "internal/config/keybinding.go", + "line": 217, + "column": 0, + "signature": "func (c *Config) MatchesKeybinding(event *tcell.EventKey, action string) bool", + "parent": null, + "doc": null + } + ], + "Keybinding": [ + { + "name": "Keybinding", + "type": "struct", + "file": "internal/config/keybinding.go", + "line": 12, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewCryptoService": [ + { + "name": "NewCryptoService", + "type": "function", + "file": "internal/crypto/crypto.go", + "line": 36, + "column": 0, + "signature": "func NewCryptoService() *CryptoService", + "parent": null, + "doc": null + } + ], + "ClearBytes": [ + { + "name": "ClearBytes", + "type": "function", + "file": "internal/crypto/crypto.go", + "line": 156, + "column": 0, + "signature": "func ClearBytes(data []byte)", + "parent": null, + "doc": null + } + ], + "GetIterations": [ + { + "name": "GetIterations", + "type": "function", + "file": "internal/crypto/crypto.go", + "line": 171, + "column": 0, + "signature": "func GetIterations() int", + "parent": null, + "doc": null + }, + { + "name": "GetIterations", + "type": "method", + "file": "internal/storage/storage.go", + "line": 360, + "column": 0, + "signature": "func (s *StorageService) GetIterations() int", + "parent": null, + "doc": null + } + ], + "GenerateSalt": [ + { + "name": "GenerateSalt", + "type": "method", + "file": "internal/crypto/crypto.go", + "line": 40, + "column": 0, + "signature": "func (c *CryptoService) GenerateSalt() ([]byte, error)", + "parent": null, + "doc": null + } + ], + "DeriveKey": [ + { + "name": "DeriveKey", + "type": "method", + "file": "internal/crypto/crypto.go", + "line": 48, + "column": 0, + "signature": "func (c *CryptoService) DeriveKey(password []byte, salt []byte, iterations int) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "Encrypt": [ + { + "name": "Encrypt", + "type": "method", + "file": "internal/crypto/crypto.go", + "line": 58, + "column": 0, + "signature": "func (c *CryptoService) Encrypt(data []byte, key []byte) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "Decrypt": [ + { + "name": "Decrypt", + "type": "method", + "file": "internal/crypto/crypto.go", + "line": 93, + "column": 0, + "signature": "func (c *CryptoService) Decrypt(encryptedData []byte, key []byte) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "SecureRandom": [ + { + "name": "SecureRandom", + "type": "method", + "file": "internal/crypto/crypto.go", + "line": 127, + "column": 0, + "signature": "func (c *CryptoService) SecureRandom(length int) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "ClearKey": [ + { + "name": "ClearKey", + "type": "method", + "file": "internal/crypto/crypto.go", + "line": 140, + "column": 0, + "signature": "func (c *CryptoService) ClearKey(key []byte)", + "parent": null, + "doc": null + } + ], + "ClearData": [ + { + "name": "ClearData", + "type": "method", + "file": "internal/crypto/crypto.go", + "line": 146, + "column": 0, + "signature": "func (c *CryptoService) ClearData(data []byte)", + "parent": null, + "doc": null + } + ], + "CryptoService": [ + { + "name": "CryptoService", + "type": "struct", + "file": "internal/crypto/crypto.go", + "line": 34, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewBackupChecker": [ + { + "name": "NewBackupChecker", + "type": "function", + "file": "internal/health/backup.go", + "line": 17, + "column": 0, + "signature": "func NewBackupChecker(vaultDir string) HealthChecker", + "parent": null, + "doc": null + } + ], + "Name": [ + { + "name": "Name", + "type": "method", + "file": "internal/health/backup.go", + "line": 24, + "column": 0, + "signature": "func (b *BackupChecker) Name() string", + "parent": null, + "doc": null + }, + { + "name": "Name", + "type": "method", + "file": "internal/health/config.go", + "line": 25, + "column": 0, + "signature": "func (c *ConfigChecker) Name() string", + "parent": null, + "doc": null + }, + { + "name": "Name", + "type": "method", + "file": "internal/health/keychain.go", + "line": 25, + "column": 0, + "signature": "func (k *KeychainChecker) Name() string", + "parent": null, + "doc": null + }, + { + "name": "Name", + "type": "method", + "file": "internal/health/vault.go", + "line": 23, + "column": 0, + "signature": "func (v *VaultChecker) Name() string", + "parent": null, + "doc": null + }, + { + "name": "Name", + "type": "method", + "file": "internal/health/version.go", + "line": 30, + "column": 0, + "signature": "func (v *VersionChecker) Name() string", + "parent": null, + "doc": null + } + ], + "BackupChecker": [ + { + "name": "BackupChecker", + "type": "struct", + "file": "internal/health/backup.go", + "line": 12, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "RunChecks": [ + { + "name": "RunChecks", + "type": "function", + "file": "internal/health/checker.go", + "line": 77, + "column": 0, + "signature": "func RunChecks(ctx context.Context, opts CheckOptions) HealthReport", + "parent": null, + "doc": null + } + ], + "buildSummary": [ + { + "name": "buildSummary", + "type": "function", + "file": "internal/health/checker.go", + "line": 105, + "column": 0, + "signature": "func buildSummary(results []CheckResult) HealthSummary", + "parent": null, + "doc": null + } + ], + "DetermineExitCode": [ + { + "name": "DetermineExitCode", + "type": "method", + "file": "internal/health/checker.go", + "line": 66, + "column": 0, + "signature": "func (s HealthSummary) DetermineExitCode() int", + "parent": "HealthSummary", + "doc": null + } + ], + "CheckStatus": [ + { + "name": "CheckStatus", + "type": "type", + "file": "internal/health/checker.go", + "line": 17, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "HealthChecker": [ + { + "name": "HealthChecker", + "type": "interface", + "file": "internal/health/checker.go", + "line": 26, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "CheckResult": [ + { + "name": "CheckResult", + "type": "struct", + "file": "internal/health/checker.go", + "line": 32, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Name", + "parent_symbol": "CheckResult", + "field_type": "string", + "default_value": null, + "file": "internal/health/checker.go", + "line": 33, + "column": 1, + "tags": { + "json": "name" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Status", + "parent_symbol": "CheckResult", + "field_type": "CheckStatus", + "default_value": null, + "file": "internal/health/checker.go", + "line": 34, + "column": 1, + "tags": { + "json": "status" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Message", + "parent_symbol": "CheckResult", + "field_type": "string", + "default_value": null, + "file": "internal/health/checker.go", + "line": 35, + "column": 1, + "tags": { + "json": "message" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Recommendation", + "parent_symbol": "CheckResult", + "field_type": "string", + "default_value": null, + "file": "internal/health/checker.go", + "line": 36, + "column": 1, + "tags": { + "json": "recommendation" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Details", + "parent_symbol": "CheckResult", + "field_type": null, + "default_value": null, + "file": "internal/health/checker.go", + "line": 37, + "column": 1, + "tags": { + "json": "details" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "HealthSummary": [ + { + "name": "HealthSummary", + "type": "struct", + "file": "internal/health/checker.go", + "line": 41, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Passed", + "parent_symbol": "HealthSummary", + "field_type": "int", + "default_value": null, + "file": "internal/health/checker.go", + "line": 42, + "column": 1, + "tags": { + "json": "passed" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Warnings", + "parent_symbol": "HealthSummary", + "field_type": "int", + "default_value": null, + "file": "internal/health/checker.go", + "line": 43, + "column": 1, + "tags": { + "json": "warnings" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Errors", + "parent_symbol": "HealthSummary", + "field_type": "int", + "default_value": null, + "file": "internal/health/checker.go", + "line": 44, + "column": 1, + "tags": { + "json": "errors" + }, + "is_optional": false, + "doc": null + }, + { + "name": "ExitCode", + "parent_symbol": "HealthSummary", + "field_type": "int", + "default_value": null, + "file": "internal/health/checker.go", + "line": 45, + "column": 1, + "tags": { + "json": "exit_code" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "HealthReport": [ + { + "name": "HealthReport", + "type": "struct", + "file": "internal/health/checker.go", + "line": 49, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Summary", + "parent_symbol": "HealthReport", + "field_type": "HealthSummary", + "default_value": null, + "file": "internal/health/checker.go", + "line": 50, + "column": 1, + "tags": { + "json": "summary" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Checks", + "parent_symbol": "HealthReport", + "field_type": "[]CheckResult", + "default_value": null, + "file": "internal/health/checker.go", + "line": 51, + "column": 1, + "tags": { + "json": "checks" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Timestamp", + "parent_symbol": "HealthReport", + "field_type": "time.Time", + "default_value": null, + "file": "internal/health/checker.go", + "line": 52, + "column": 1, + "tags": { + "json": "timestamp" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "CheckOptions": [ + { + "name": "CheckOptions", + "type": "struct", + "file": "internal/health/checker.go", + "line": 56, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "CurrentVersion", + "parent_symbol": "CheckOptions", + "field_type": "string", + "default_value": null, + "file": "internal/health/checker.go", + "line": 57, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "GitHubRepo", + "parent_symbol": "CheckOptions", + "field_type": "string", + "default_value": null, + "file": "internal/health/checker.go", + "line": 58, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "VaultPath", + "parent_symbol": "CheckOptions", + "field_type": "string", + "default_value": null, + "file": "internal/health/checker.go", + "line": 59, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "VaultPathSource", + "parent_symbol": "CheckOptions", + "field_type": "string", + "default_value": null, + "file": "internal/health/checker.go", + "line": 60, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "VaultDir", + "parent_symbol": "CheckOptions", + "field_type": "string", + "default_value": null, + "file": "internal/health/checker.go", + "line": 61, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "ConfigPath", + "parent_symbol": "CheckOptions", + "field_type": "string", + "default_value": null, + "file": "internal/health/checker.go", + "line": 62, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + } + ] + } + ], + "NewConfigChecker": [ + { + "name": "NewConfigChecker", + "type": "function", + "file": "internal/health/config.go", + "line": 18, + "column": 0, + "signature": "func NewConfigChecker(configPath string) HealthChecker", + "parent": null, + "doc": null + } + ], + "ConfigChecker": [ + { + "name": "ConfigChecker", + "type": "struct", + "file": "internal/health/config.go", + "line": 13, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewKeychainChecker": [ + { + "name": "NewKeychainChecker", + "type": "function", + "file": "internal/health/keychain.go", + "line": 17, + "column": 0, + "signature": "func NewKeychainChecker(defaultVaultPath string) HealthChecker", + "parent": null, + "doc": null + } + ], + "getKeychainBackend": [ + { + "name": "getKeychainBackend", + "type": "method", + "file": "internal/health/keychain.go", + "line": 112, + "column": 0, + "signature": "func (k *KeychainChecker) getKeychainBackend() string", + "parent": null, + "doc": null + } + ], + "checkVaultExists": [ + { + "name": "checkVaultExists", + "type": "method", + "file": "internal/health/keychain.go", + "line": 126, + "column": 0, + "signature": "func (k *KeychainChecker) checkVaultExists(path string) bool", + "parent": null, + "doc": null + } + ], + "checkOrphanedEntries": [ + { + "name": "checkOrphanedEntries", + "type": "method", + "file": "internal/health/keychain.go", + "line": 133, + "column": 0, + "signature": "func (k *KeychainChecker) checkOrphanedEntries(service string, details *KeychainCheckDetails) int", + "parent": null, + "doc": null + } + ], + "KeychainChecker": [ + { + "name": "KeychainChecker", + "type": "struct", + "file": "internal/health/keychain.go", + "line": 11, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewGoKeyringService": [ + { + "name": "NewGoKeyringService", + "type": "function", + "file": "internal/health/keyring_production.go", + "line": 13, + "column": 0, + "signature": "func NewGoKeyringService() KeyringService", + "parent": null, + "doc": null + } + ], + "Get": [ + { + "name": "Get", + "type": "method", + "file": "internal/health/keyring_production.go", + "line": 18, + "column": 0, + "signature": "func (g *goKeyringService) Get(service, user string) (string, error)", + "parent": null, + "doc": null + } + ], + "List": [ + { + "name": "List", + "type": "method", + "file": "internal/health/keyring_production.go", + "line": 24, + "column": 0, + "signature": "func (g *goKeyringService) List(service string) ([]KeyringEntry, error)", + "parent": null, + "doc": null + } + ], + "goKeyringService": [ + { + "name": "goKeyringService", + "type": "struct", + "file": "internal/health/keyring_production.go", + "line": 10, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "KeyringService": [ + { + "name": "KeyringService", + "type": "interface", + "file": "internal/health/keyring_service.go", + "line": 5, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "KeyringEntry": [ + { + "name": "KeyringEntry", + "type": "struct", + "file": "internal/health/keyring_service.go", + "line": 16, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "VersionCheckDetails": [ + { + "name": "VersionCheckDetails", + "type": "struct", + "file": "internal/health/types.go", + "line": 6, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Current", + "parent_symbol": "VersionCheckDetails", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 7, + "column": 1, + "tags": { + "json": "current" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Latest", + "parent_symbol": "VersionCheckDetails", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 8, + "column": 1, + "tags": { + "json": "latest" + }, + "is_optional": false, + "doc": null + }, + { + "name": "UpdateURL", + "parent_symbol": "VersionCheckDetails", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 9, + "column": 1, + "tags": { + "json": "update_url" + }, + "is_optional": false, + "doc": null + }, + { + "name": "UpToDate", + "parent_symbol": "VersionCheckDetails", + "field_type": "bool", + "default_value": null, + "file": "internal/health/types.go", + "line": 10, + "column": 1, + "tags": { + "json": "up_to_date" + }, + "is_optional": false, + "doc": null + }, + { + "name": "CheckError", + "parent_symbol": "VersionCheckDetails", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 11, + "column": 1, + "tags": { + "json": "check_error" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "VaultCheckDetails": [ + { + "name": "VaultCheckDetails", + "type": "struct", + "file": "internal/health/types.go", + "line": 15, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Path", + "parent_symbol": "VaultCheckDetails", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 16, + "column": 1, + "tags": { + "json": "path" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Exists", + "parent_symbol": "VaultCheckDetails", + "field_type": "bool", + "default_value": null, + "file": "internal/health/types.go", + "line": 17, + "column": 1, + "tags": { + "json": "exists" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Readable", + "parent_symbol": "VaultCheckDetails", + "field_type": "bool", + "default_value": null, + "file": "internal/health/types.go", + "line": 18, + "column": 1, + "tags": { + "json": "readable" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Size", + "parent_symbol": "VaultCheckDetails", + "field_type": "int64", + "default_value": null, + "file": "internal/health/types.go", + "line": 19, + "column": 1, + "tags": { + "json": "size" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Permissions", + "parent_symbol": "VaultCheckDetails", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 20, + "column": 1, + "tags": { + "json": "permissions" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Error", + "parent_symbol": "VaultCheckDetails", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 21, + "column": 1, + "tags": { + "json": "error" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "ConfigCheckDetails": [ + { + "name": "ConfigCheckDetails", + "type": "struct", + "file": "internal/health/types.go", + "line": 25, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Path", + "parent_symbol": "ConfigCheckDetails", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 26, + "column": 1, + "tags": { + "json": "path" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Exists", + "parent_symbol": "ConfigCheckDetails", + "field_type": "bool", + "default_value": null, + "file": "internal/health/types.go", + "line": 27, + "column": 1, + "tags": { + "json": "exists" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Valid", + "parent_symbol": "ConfigCheckDetails", + "field_type": "bool", + "default_value": null, + "file": "internal/health/types.go", + "line": 28, + "column": 1, + "tags": { + "json": "valid" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Errors", + "parent_symbol": "ConfigCheckDetails", + "field_type": "[]ConfigError", + "default_value": null, + "file": "internal/health/types.go", + "line": 29, + "column": 1, + "tags": { + "json": "errors" + }, + "is_optional": false, + "doc": null + }, + { + "name": "UnknownKeys", + "parent_symbol": "ConfigCheckDetails", + "field_type": "[]string", + "default_value": null, + "file": "internal/health/types.go", + "line": 30, + "column": 1, + "tags": { + "json": "unknown_keys" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "ConfigError": [ + { + "name": "ConfigError", + "type": "struct", + "file": "internal/health/types.go", + "line": 34, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Key", + "parent_symbol": "ConfigError", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 35, + "column": 1, + "tags": { + "json": "key" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Problem", + "parent_symbol": "ConfigError", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 36, + "column": 1, + "tags": { + "json": "problem" + }, + "is_optional": false, + "doc": null + }, + { + "name": "CurrentValue", + "parent_symbol": "ConfigError", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 37, + "column": 1, + "tags": { + "json": "current" + }, + "is_optional": false, + "doc": null + }, + { + "name": "ExpectedValue", + "parent_symbol": "ConfigError", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 38, + "column": 1, + "tags": { + "json": "expected" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "KeychainCheckDetails": [ + { + "name": "KeychainCheckDetails", + "type": "struct", + "file": "internal/health/types.go", + "line": 42, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Available", + "parent_symbol": "KeychainCheckDetails", + "field_type": "bool", + "default_value": null, + "file": "internal/health/types.go", + "line": 43, + "column": 1, + "tags": { + "json": "available" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Backend", + "parent_symbol": "KeychainCheckDetails", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 44, + "column": 1, + "tags": { + "json": "backend" + }, + "is_optional": false, + "doc": null + }, + { + "name": "CurrentVault", + "parent_symbol": "KeychainCheckDetails", + "field_type": "*KeychainEntry", + "default_value": null, + "file": "internal/health/types.go", + "line": 45, + "column": 1, + "tags": { + "json": "current_vault" + }, + "is_optional": false, + "doc": null + }, + { + "name": "OrphanedEntries", + "parent_symbol": "KeychainCheckDetails", + "field_type": "[]KeychainEntry", + "default_value": null, + "file": "internal/health/types.go", + "line": 46, + "column": 1, + "tags": { + "json": "orphaned_entries" + }, + "is_optional": false, + "doc": null + }, + { + "name": "AccessError", + "parent_symbol": "KeychainCheckDetails", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 47, + "column": 1, + "tags": { + "json": "access_error" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "KeychainEntry": [ + { + "name": "KeychainEntry", + "type": "struct", + "file": "internal/health/types.go", + "line": 51, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Key", + "parent_symbol": "KeychainEntry", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 52, + "column": 1, + "tags": { + "json": "key" + }, + "is_optional": false, + "doc": null + }, + { + "name": "VaultPath", + "parent_symbol": "KeychainEntry", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 53, + "column": 1, + "tags": { + "json": "vault_path" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Exists", + "parent_symbol": "KeychainEntry", + "field_type": "bool", + "default_value": null, + "file": "internal/health/types.go", + "line": 54, + "column": 1, + "tags": { + "json": "exists" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "BackupCheckDetails": [ + { + "name": "BackupCheckDetails", + "type": "struct", + "file": "internal/health/types.go", + "line": 58, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "VaultDir", + "parent_symbol": "BackupCheckDetails", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 59, + "column": 1, + "tags": { + "json": "vault_dir" + }, + "is_optional": false, + "doc": null + }, + { + "name": "BackupFiles", + "parent_symbol": "BackupCheckDetails", + "field_type": "[]BackupFile", + "default_value": null, + "file": "internal/health/types.go", + "line": 60, + "column": 1, + "tags": { + "json": "backup_files" + }, + "is_optional": false, + "doc": null + }, + { + "name": "OldBackups", + "parent_symbol": "BackupCheckDetails", + "field_type": "int", + "default_value": null, + "file": "internal/health/types.go", + "line": 61, + "column": 1, + "tags": { + "json": "old_backups" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "BackupFile": [ + { + "name": "BackupFile", + "type": "struct", + "file": "internal/health/types.go", + "line": 65, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Path", + "parent_symbol": "BackupFile", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 66, + "column": 1, + "tags": { + "json": "path" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Size", + "parent_symbol": "BackupFile", + "field_type": "int64", + "default_value": null, + "file": "internal/health/types.go", + "line": 67, + "column": 1, + "tags": { + "json": "size" + }, + "is_optional": false, + "doc": null + }, + { + "name": "ModifiedAt", + "parent_symbol": "BackupFile", + "field_type": "time.Time", + "default_value": null, + "file": "internal/health/types.go", + "line": 68, + "column": 1, + "tags": { + "json": "modified_at" + }, + "is_optional": false, + "doc": null + }, + { + "name": "AgeHours", + "parent_symbol": "BackupFile", + "field_type": "float64", + "default_value": null, + "file": "internal/health/types.go", + "line": 69, + "column": 1, + "tags": { + "json": "age_hours" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Status", + "parent_symbol": "BackupFile", + "field_type": "string", + "default_value": null, + "file": "internal/health/types.go", + "line": 70, + "column": 1, + "tags": { + "json": "status" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "NewVaultChecker": [ + { + "name": "NewVaultChecker", + "type": "function", + "file": "internal/health/vault.go", + "line": 16, + "column": 0, + "signature": "func NewVaultChecker(vaultPath string) HealthChecker", + "parent": null, + "doc": null + } + ], + "VaultChecker": [ + { + "name": "VaultChecker", + "type": "struct", + "file": "internal/health/vault.go", + "line": 11, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewVersionChecker": [ + { + "name": "NewVersionChecker", + "type": "function", + "file": "internal/health/version.go", + "line": 21, + "column": 0, + "signature": "func NewVersionChecker(currentVersion string, githubRepo string) HealthChecker", + "parent": null, + "doc": null + } + ], + "fetchLatestRelease": [ + { + "name": "fetchLatestRelease", + "type": "method", + "file": "internal/health/version.go", + "line": 78, + "column": 0, + "signature": "func (v *VersionChecker) fetchLatestRelease(ctx context.Context) (string, string, error)", + "parent": null, + "doc": null + } + ], + "isNewer": [ + { + "name": "isNewer", + "type": "method", + "file": "internal/health/version.go", + "line": 121, + "column": 0, + "signature": "func (v *VersionChecker) isNewer(a, b string) bool", + "parent": null, + "doc": null + } + ], + "VersionChecker": [ + { + "name": "VersionChecker", + "type": "struct", + "file": "internal/health/version.go", + "line": 14, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "New": [ + { + "name": "New", + "type": "function", + "file": "internal/keychain/keychain.go", + "line": 30, + "column": 0, + "signature": "func New() *KeychainService", + "parent": null, + "doc": null + }, + { + "name": "New", + "type": "function", + "file": "internal/vault/vault.go", + "line": 108, + "column": 0, + "signature": "func New(vaultPath string) (*VaultService, error)", + "parent": null, + "doc": null + } + ], + "Ping": [ + { + "name": "Ping", + "type": "method", + "file": "internal/keychain/keychain.go", + "line": 36, + "column": 0, + "signature": "func (ks *KeychainService) Ping() error", + "parent": null, + "doc": null + } + ], + "IsAvailable": [ + { + "name": "IsAvailable", + "type": "method", + "file": "internal/keychain/keychain.go", + "line": 56, + "column": 0, + "signature": "func (ks *KeychainService) IsAvailable() bool", + "parent": null, + "doc": null + } + ], + "Store": [ + { + "name": "Store", + "type": "method", + "file": "internal/keychain/keychain.go", + "line": 66, + "column": 0, + "signature": "func (ks *KeychainService) Store(password string) error", + "parent": null, + "doc": null + } + ], + "Retrieve": [ + { + "name": "Retrieve", + "type": "method", + "file": "internal/keychain/keychain.go", + "line": 78, + "column": 0, + "signature": "func (ks *KeychainService) Retrieve() (string, error)", + "parent": null, + "doc": null + } + ], + "Delete": [ + { + "name": "Delete", + "type": "method", + "file": "internal/keychain/keychain.go", + "line": 95, + "column": 0, + "signature": "func (ks *KeychainService) Delete() error", + "parent": null, + "doc": null + } + ], + "Clear": [ + { + "name": "Clear", + "type": "method", + "file": "internal/keychain/keychain.go", + "line": 105, + "column": 0, + "signature": "func (ks *KeychainService) Clear() error", + "parent": null, + "doc": null + } + ], + "KeychainService": [ + { + "name": "KeychainService", + "type": "struct", + "file": "internal/keychain/keychain.go", + "line": 25, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "selectChallengePositions": [ + { + "name": "selectChallengePositions", + "type": "function", + "file": "internal/recovery/challenge.go", + "line": 14, + "column": 0, + "signature": "func selectChallengePositions(totalWords, count int) ([]int, error)", + "parent": null, + "doc": null + } + ], + "SelectVerifyPositions": [ + { + "name": "SelectVerifyPositions", + "type": "function", + "file": "internal/recovery/challenge.go", + "line": 52, + "column": 0, + "signature": "func SelectVerifyPositions(count int) ([]int, error)", + "parent": null, + "doc": null + } + ], + "splitWords": [ + { + "name": "splitWords", + "type": "function", + "file": "internal/recovery/challenge.go", + "line": 59, + "column": 0, + "signature": "func splitWords(mnemonic string, challengePos []int) (challenge, stored []string)", + "parent": null, + "doc": null + } + ], + "ShuffleChallengePositions": [ + { + "name": "ShuffleChallengePositions", + "type": "function", + "file": "internal/recovery/challenge.go", + "line": 87, + "column": 0, + "signature": "func ShuffleChallengePositions(positions []int) []int", + "parent": null, + "doc": null + } + ], + "reconstructMnemonic": [ + { + "name": "reconstructMnemonic", + "type": "function", + "file": "internal/recovery/challenge.go", + "line": 107, + "column": 0, + "signature": "func reconstructMnemonic(challengeWords []string, challengePos []int, storedWords []string) (string, error)", + "parent": null, + "doc": null + } + ], + "deriveKey": [ + { + "name": "deriveKey", + "type": "function", + "file": "internal/recovery/crypto.go", + "line": 18, + "column": 0, + "signature": "func deriveKey(seed, salt []byte, params *vault.KDFParams) []byte", + "parent": null, + "doc": null + } + ], + "encryptStoredWords": [ + { + "name": "encryptStoredWords", + "type": "function", + "file": "internal/recovery/crypto.go", + "line": 35, + "column": 0, + "signature": "func encryptStoredWords(words []string, key []byte) (ciphertext, nonce []byte, err error)", + "parent": null, + "doc": null + } + ], + "decryptStoredWords": [ + { + "name": "decryptStoredWords", + "type": "function", + "file": "internal/recovery/crypto.go", + "line": 70, + "column": 0, + "signature": "func decryptStoredWords(ciphertext, nonce, key []byte) ([]string, error)", + "parent": null, + "doc": null + } + ], + "GenerateMnemonic": [ + { + "name": "GenerateMnemonic", + "type": "function", + "file": "internal/recovery/mnemonic.go", + "line": 13, + "column": 0, + "signature": "func GenerateMnemonic() (string, error)", + "parent": null, + "doc": null + } + ], + "ValidateWord": [ + { + "name": "ValidateWord", + "type": "function", + "file": "internal/recovery/mnemonic.go", + "line": 33, + "column": 0, + "signature": "func ValidateWord(word string) bool", + "parent": null, + "doc": null + } + ], + "ValidateMnemonic": [ + { + "name": "ValidateMnemonic", + "type": "function", + "file": "internal/recovery/mnemonic.go", + "line": 53, + "column": 0, + "signature": "func ValidateMnemonic(mnemonic string) bool", + "parent": null, + "doc": null + } + ], + "SetupRecovery": [ + { + "name": "SetupRecovery", + "type": "function", + "file": "internal/recovery/recovery.go", + "line": 45, + "column": 0, + "signature": "func SetupRecovery(config *SetupConfig) (*SetupResult, error)", + "parent": null, + "doc": null + } + ], + "PerformRecovery": [ + { + "name": "PerformRecovery", + "type": "function", + "file": "internal/recovery/recovery.go", + "line": 144, + "column": 0, + "signature": "func PerformRecovery(config *RecoveryConfig) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "decryptData": [ + { + "name": "decryptData", + "type": "function", + "file": "internal/recovery/recovery.go", + "line": 257, + "column": 0, + "signature": "func decryptData(ciphertext, nonce, key []byte) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "VerifyBackup": [ + { + "name": "VerifyBackup", + "type": "function", + "file": "internal/recovery/recovery.go", + "line": 282, + "column": 0, + "signature": "func VerifyBackup(config *VerifyConfig) error", + "parent": null, + "doc": null + } + ], + "encryptData": [ + { + "name": "encryptData", + "type": "function", + "file": "internal/recovery/recovery.go", + "line": 322, + "column": 0, + "signature": "func encryptData(plaintext, key []byte) (ciphertext, nonce []byte, err error)", + "parent": null, + "doc": null + } + ], + "SetupConfig": [ + { + "name": "SetupConfig", + "type": "struct", + "file": "internal/recovery/recovery.go", + "line": 16, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Passphrase", + "parent_symbol": "SetupConfig", + "field_type": "[]byte", + "default_value": null, + "file": "internal/recovery/recovery.go", + "line": 17, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "KDFParams", + "parent_symbol": "SetupConfig", + "field_type": "*vault.KDFParams", + "default_value": null, + "file": "internal/recovery/recovery.go", + "line": 18, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + } + ] + } + ], + "SetupResult": [ + { + "name": "SetupResult", + "type": "struct", + "file": "internal/recovery/recovery.go", + "line": 22, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "RecoveryConfig": [ + { + "name": "RecoveryConfig", + "type": "struct", + "file": "internal/recovery/recovery.go", + "line": 29, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "ChallengeWords", + "parent_symbol": "RecoveryConfig", + "field_type": "[]string", + "default_value": null, + "file": "internal/recovery/recovery.go", + "line": 30, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "Passphrase", + "parent_symbol": "RecoveryConfig", + "field_type": "[]byte", + "default_value": null, + "file": "internal/recovery/recovery.go", + "line": 31, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "Metadata", + "parent_symbol": "RecoveryConfig", + "field_type": "*vault.RecoveryMetadata", + "default_value": null, + "file": "internal/recovery/recovery.go", + "line": 32, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + } + ] + } + ], + "VerifyConfig": [ + { + "name": "VerifyConfig", + "type": "struct", + "file": "internal/recovery/recovery.go", + "line": 36, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Mnemonic", + "parent_symbol": "VerifyConfig", + "field_type": "string", + "default_value": null, + "file": "internal/recovery/recovery.go", + "line": 37, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "VerifyPositions", + "parent_symbol": "VerifyConfig", + "field_type": "[]int", + "default_value": null, + "file": "internal/recovery/recovery.go", + "line": 38, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "UserWords", + "parent_symbol": "VerifyConfig", + "field_type": "[]string", + "default_value": null, + "file": "internal/recovery/recovery.go", + "line": 39, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + } + ] + } + ], + "GetOrCreateAuditKey": [ + { + "name": "GetOrCreateAuditKey", + "type": "function", + "file": "internal/security/audit.go", + "line": 205, + "column": 0, + "signature": "func GetOrCreateAuditKey(vaultID string) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "DeleteAuditKey": [ + { + "name": "DeleteAuditKey", + "type": "function", + "file": "internal/security/audit.go", + "line": 236, + "column": 0, + "signature": "func DeleteAuditKey(vaultID string) error", + "parent": null, + "doc": null + } + ], + "NewAuditLogger": [ + { + "name": "NewAuditLogger", + "type": "function", + "file": "internal/security/audit.go", + "line": 247, + "column": 0, + "signature": "func NewAuditLogger(filePath string, vaultID string) (*AuditLogger, error)", + "parent": null, + "doc": null + } + ], + "Sign": [ + { + "name": "Sign", + "type": "method", + "file": "internal/security/audit.go", + "line": 70, + "column": 0, + "signature": "func (e *AuditLogEntry) Sign(key []byte) error", + "parent": null, + "doc": null + } + ], + "Verify": [ + { + "name": "Verify", + "type": "method", + "file": "internal/security/audit.go", + "line": 88, + "column": 0, + "signature": "func (e *AuditLogEntry) Verify(key []byte) error", + "parent": null, + "doc": null + } + ], + "ShouldRotate": [ + { + "name": "ShouldRotate", + "type": "method", + "file": "internal/security/audit.go", + "line": 111, + "column": 0, + "signature": "func (l *AuditLogger) ShouldRotate() bool", + "parent": null, + "doc": null + } + ], + "Rotate": [ + { + "name": "Rotate", + "type": "method", + "file": "internal/security/audit.go", + "line": 118, + "column": 0, + "signature": "func (l *AuditLogger) Rotate() error", + "parent": null, + "doc": null + } + ], + "Log": [ + { + "name": "Log", + "type": "method", + "file": "internal/security/audit.go", + "line": 157, + "column": 0, + "signature": "func (l *AuditLogger) Log(entry *AuditLogEntry) error", + "parent": null, + "doc": null + } + ], + "AuditLogEntry": [ + { + "name": "AuditLogEntry", + "type": "struct", + "file": "internal/security/audit.go", + "line": 18, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Timestamp", + "parent_symbol": "AuditLogEntry", + "field_type": "time.Time", + "default_value": null, + "file": "internal/security/audit.go", + "line": 19, + "column": 1, + "tags": { + "json": "timestamp" + }, + "is_optional": false, + "doc": null + }, + { + "name": "EventType", + "parent_symbol": "AuditLogEntry", + "field_type": "string", + "default_value": null, + "file": "internal/security/audit.go", + "line": 20, + "column": 1, + "tags": { + "json": "event_type" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Outcome", + "parent_symbol": "AuditLogEntry", + "field_type": "string", + "default_value": null, + "file": "internal/security/audit.go", + "line": 21, + "column": 1, + "tags": { + "json": "outcome" + }, + "is_optional": false, + "doc": null + }, + { + "name": "CredentialName", + "parent_symbol": "AuditLogEntry", + "field_type": "string", + "default_value": null, + "file": "internal/security/audit.go", + "line": 22, + "column": 1, + "tags": { + "json": "credential_name" + }, + "is_optional": false, + "doc": null + }, + { + "name": "HMACSignature", + "parent_symbol": "AuditLogEntry", + "field_type": "[]byte", + "default_value": null, + "file": "internal/security/audit.go", + "line": 23, + "column": 1, + "tags": { + "json": "hmac_signature" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "AuditLogger": [ + { + "name": "AuditLogger", + "type": "struct", + "file": "internal/security/audit.go", + "line": 61, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewValidationRateLimiter": [ + { + "name": "NewValidationRateLimiter", + "type": "function", + "file": "internal/security/password.go", + "line": 179, + "column": 0, + "signature": "func NewValidationRateLimiter() *ValidationRateLimiter", + "parent": null, + "doc": null + } + ], + "String": [ + { + "name": "String", + "type": "method", + "file": "internal/security/password.go", + "line": 39, + "column": 0, + "signature": "func (s PasswordStrength) String() string", + "parent": "PasswordStrength", + "doc": null + } + ], + "Strength": [ + { + "name": "Strength", + "type": "method", + "file": "internal/security/password.go", + "line": 105, + "column": 0, + "signature": "func (p *PasswordPolicy) Strength(password []byte) PasswordStrength", + "parent": null, + "doc": null + } + ], + "CheckAndRecordFailure": [ + { + "name": "CheckAndRecordFailure", + "type": "method", + "file": "internal/security/password.go", + "line": 185, + "column": 0, + "signature": "func (rl *ValidationRateLimiter) CheckAndRecordFailure() error", + "parent": null, + "doc": null + } + ], + "Reset": [ + { + "name": "Reset", + "type": "method", + "file": "internal/security/password.go", + "line": 217, + "column": 0, + "signature": "func (rl *ValidationRateLimiter) Reset()", + "parent": null, + "doc": null + } + ], + "PasswordPolicy": [ + { + "name": "PasswordPolicy", + "type": "struct", + "file": "internal/security/password.go", + "line": 12, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "PasswordStrength": [ + { + "name": "PasswordStrength", + "type": "type", + "file": "internal/security/password.go", + "line": 31, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "ValidationRateLimiter": [ + { + "name": "ValidationRateLimiter", + "type": "struct", + "file": "internal/security/password.go", + "line": 171, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "randomHexSuffix": [ + { + "name": "randomHexSuffix", + "type": "function", + "file": "internal/storage/atomic_save.go", + "line": 22, + "column": 0, + "signature": "func randomHexSuffix(length int) string", + "parent": null, + "doc": null + } + ], + "generateTempFileName": [ + { + "name": "generateTempFileName", + "type": "method", + "file": "internal/storage/atomic_save.go", + "line": 15, + "column": 0, + "signature": "func (s *StorageService) generateTempFileName() string", + "parent": null, + "doc": null + } + ], + "writeToTempFile": [ + { + "name": "writeToTempFile", + "type": "method", + "file": "internal/storage/atomic_save.go", + "line": 34, + "column": 0, + "signature": "func (s *StorageService) writeToTempFile(path string, data []byte) error", + "parent": null, + "doc": null + } + ], + "verifyTempFile": [ + { + "name": "verifyTempFile", + "type": "method", + "file": "internal/storage/atomic_save.go", + "line": 65, + "column": 0, + "signature": "func (s *StorageService) verifyTempFile(path string, password string) error", + "parent": null, + "doc": null + } + ], + "atomicRename": [ + { + "name": "atomicRename", + "type": "method", + "file": "internal/storage/atomic_save.go", + "line": 101, + "column": 0, + "signature": "func (s *StorageService) atomicRename(oldPath, newPath string) error", + "parent": null, + "doc": null + } + ], + "cleanupTempFile": [ + { + "name": "cleanupTempFile", + "type": "method", + "file": "internal/storage/atomic_save.go", + "line": 119, + "column": 0, + "signature": "func (s *StorageService) cleanupTempFile(path string) error", + "parent": null, + "doc": null + } + ], + "cleanupOrphanedTempFiles": [ + { + "name": "cleanupOrphanedTempFiles", + "type": "method", + "file": "internal/storage/atomic_save.go", + "line": 129, + "column": 0, + "signature": "func (s *StorageService) cleanupOrphanedTempFiles(currentTempPath string)", + "parent": null, + "doc": null + } + ], + "validateVaultStructure": [ + { + "name": "validateVaultStructure", + "type": "function", + "file": "internal/storage/backup.go", + "line": 191, + "column": 0, + "signature": "func validateVaultStructure(data []byte) error", + "parent": null, + "doc": null + } + ], + "generateManualBackupPath": [ + { + "name": "generateManualBackupPath", + "type": "method", + "file": "internal/storage/backup.go", + "line": 49, + "column": 0, + "signature": "func (s *StorageService) generateManualBackupPath() string", + "parent": null, + "doc": null + } + ], + "CreateManualBackup": [ + { + "name": "CreateManualBackup", + "type": "method", + "file": "internal/storage/backup.go", + "line": 59, + "column": 0, + "signature": "func (s *StorageService) CreateManualBackup() (string, error)", + "parent": null, + "doc": null + } + ], + "ListBackups": [ + { + "name": "ListBackups", + "type": "method", + "file": "internal/storage/backup.go", + "line": 83, + "column": 0, + "signature": "func (s *StorageService) ListBackups() ([]BackupInfo, error)", + "parent": null, + "doc": null + } + ], + "FindNewestBackup": [ + { + "name": "FindNewestBackup", + "type": "method", + "file": "internal/storage/backup.go", + "line": 134, + "column": 0, + "signature": "func (s *StorageService) FindNewestBackup() (*BackupInfo, error)", + "parent": null, + "doc": null + } + ], + "verifyBackupIntegrity": [ + { + "name": "verifyBackupIntegrity", + "type": "method", + "file": "internal/storage/backup.go", + "line": 155, + "column": 0, + "signature": "func (s *StorageService) verifyBackupIntegrity(backupPath string) error", + "parent": null, + "doc": null + } + ], + "copyFile": [ + { + "name": "copyFile", + "type": "method", + "file": "internal/storage/backup.go", + "line": 218, + "column": 0, + "signature": "func (s *StorageService) copyFile(src, dst string) error", + "parent": null, + "doc": null + } + ], + "BackupInfo": [ + { + "name": "BackupInfo", + "type": "struct", + "file": "internal/storage/backup.go", + "line": 38, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "actionableErrorMessage": [ + { + "name": "actionableErrorMessage", + "type": "function", + "file": "internal/storage/errors.go", + "line": 25, + "column": 0, + "signature": "func actionableErrorMessage(err error) error", + "parent": null, + "doc": null + } + ], + "criticalErrorMessage": [ + { + "name": "criticalErrorMessage", + "type": "function", + "file": "internal/storage/errors.go", + "line": 52, + "column": 0, + "signature": "func criticalErrorMessage(err error) error", + "parent": null, + "doc": null + } + ], + "NewOSFileSystem": [ + { + "name": "NewOSFileSystem", + "type": "function", + "file": "internal/storage/filesystem.go", + "line": 29, + "column": 0, + "signature": "func NewOSFileSystem() FileSystem", + "parent": null, + "doc": null + } + ], + "OpenFile": [ + { + "name": "OpenFile", + "type": "method", + "file": "internal/storage/filesystem.go", + "line": 33, + "column": 0, + "signature": "func (f *osFileSystem) OpenFile(name string, flag int, perm os.FileMode) (*os.File, error)", + "parent": null, + "doc": null + }, + { + "name": "OpenFile", + "type": "method", + "file": "internal/storage/filesystem_spy.go", + "line": 40, + "column": 0, + "signature": "func (s *spyFileSystem) OpenFile(name string, flag int, perm os.FileMode) (*os.File, error)", + "parent": null, + "doc": null + } + ], + "ReadFile": [ + { + "name": "ReadFile", + "type": "method", + "file": "internal/storage/filesystem.go", + "line": 38, + "column": 0, + "signature": "func (f *osFileSystem) ReadFile(name string) ([]byte, error)", + "parent": null, + "doc": null + }, + { + "name": "ReadFile", + "type": "method", + "file": "internal/storage/filesystem_spy.go", + "line": 50, + "column": 0, + "signature": "func (s *spyFileSystem) ReadFile(name string) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "WriteFile": [ + { + "name": "WriteFile", + "type": "method", + "file": "internal/storage/filesystem.go", + "line": 43, + "column": 0, + "signature": "func (f *osFileSystem) WriteFile(name string, data []byte, perm os.FileMode) error", + "parent": null, + "doc": null + }, + { + "name": "WriteFile", + "type": "method", + "file": "internal/storage/filesystem_spy.go", + "line": 61, + "column": 0, + "signature": "func (s *spyFileSystem) WriteFile(name string, data []byte, perm os.FileMode) error", + "parent": null, + "doc": null + } + ], + "Remove": [ + { + "name": "Remove", + "type": "method", + "file": "internal/storage/filesystem.go", + "line": 47, + "column": 0, + "signature": "func (f *osFileSystem) Remove(name string) error", + "parent": null, + "doc": null + }, + { + "name": "Remove", + "type": "method", + "file": "internal/storage/filesystem_spy.go", + "line": 65, + "column": 0, + "signature": "func (s *spyFileSystem) Remove(name string) error", + "parent": null, + "doc": null + } + ], + "Rename": [ + { + "name": "Rename", + "type": "method", + "file": "internal/storage/filesystem.go", + "line": 51, + "column": 0, + "signature": "func (f *osFileSystem) Rename(oldpath, newpath string) error", + "parent": null, + "doc": null + }, + { + "name": "Rename", + "type": "method", + "file": "internal/storage/filesystem_spy.go", + "line": 69, + "column": 0, + "signature": "func (s *spyFileSystem) Rename(oldpath, newpath string) error", + "parent": null, + "doc": null + } + ], + "MkdirAll": [ + { + "name": "MkdirAll", + "type": "method", + "file": "internal/storage/filesystem.go", + "line": 55, + "column": 0, + "signature": "func (f *osFileSystem) MkdirAll(path string, perm os.FileMode) error", + "parent": null, + "doc": null + }, + { + "name": "MkdirAll", + "type": "method", + "file": "internal/storage/filesystem_spy.go", + "line": 96, + "column": 0, + "signature": "func (s *spyFileSystem) MkdirAll(path string, perm os.FileMode) error", + "parent": null, + "doc": null + } + ], + "Stat": [ + { + "name": "Stat", + "type": "method", + "file": "internal/storage/filesystem.go", + "line": 59, + "column": 0, + "signature": "func (f *osFileSystem) Stat(name string) (os.FileInfo, error)", + "parent": null, + "doc": null + }, + { + "name": "Stat", + "type": "method", + "file": "internal/storage/filesystem_spy.go", + "line": 100, + "column": 0, + "signature": "func (s *spyFileSystem) Stat(name string) (os.FileInfo, error)", + "parent": null, + "doc": null + } + ], + "Glob": [ + { + "name": "Glob", + "type": "method", + "file": "internal/storage/filesystem.go", + "line": 63, + "column": 0, + "signature": "func (f *osFileSystem) Glob(pattern string) ([]string, error)", + "parent": null, + "doc": null + }, + { + "name": "Glob", + "type": "method", + "file": "internal/storage/filesystem_spy.go", + "line": 104, + "column": 0, + "signature": "func (s *spyFileSystem) Glob(pattern string) ([]string, error)", + "parent": null, + "doc": null + } + ], + "FileSystem": [ + { + "name": "FileSystem", + "type": "interface", + "file": "internal/storage/filesystem.go", + "line": 9, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "osFileSystem": [ + { + "name": "osFileSystem", + "type": "struct", + "file": "internal/storage/filesystem.go", + "line": 26, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewSpyFileSystem": [ + { + "name": "NewSpyFileSystem", + "type": "function", + "file": "internal/storage/filesystem_spy.go", + "line": 31, + "column": 0, + "signature": "func NewSpyFileSystem() *spyFileSystem", + "parent": null, + "doc": null + } + ], + "ResetRenameCount": [ + { + "name": "ResetRenameCount", + "type": "method", + "file": "internal/storage/filesystem_spy.go", + "line": 109, + "column": 0, + "signature": "func (s *spyFileSystem) ResetRenameCount()", + "parent": null, + "doc": null + } + ], + "GetRenameCallCount": [ + { + "name": "GetRenameCallCount", + "type": "method", + "file": "internal/storage/filesystem_spy.go", + "line": 114, + "column": 0, + "signature": "func (s *spyFileSystem) GetRenameCallCount() int", + "parent": null, + "doc": null + } + ], + "spyFileSystem": [ + { + "name": "spyFileSystem", + "type": "struct", + "file": "internal/storage/filesystem_spy.go", + "line": 10, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "NewStorageService": [ + { + "name": "NewStorageService", + "type": "function", + "file": "internal/storage/storage.go", + "line": 54, + "column": 0, + "signature": "func NewStorageService(cryptoService *crypto.CryptoService, vaultPath string) (*StorageService, error)", + "parent": null, + "doc": null + } + ], + "NewStorageServiceWithFS": [ + { + "name": "NewStorageServiceWithFS", + "type": "function", + "file": "internal/storage/storage.go", + "line": 59, + "column": 0, + "signature": "func NewStorageServiceWithFS(cryptoService *crypto.CryptoService, vaultPath string, fs FileSystem) (*StorageService, error)", + "parent": null, + "doc": null + } + ], + "InitializeVault": [ + { + "name": "InitializeVault", + "type": "method", + "file": "internal/storage/storage.go", + "line": 85, + "column": 0, + "signature": "func (s *StorageService) InitializeVault(password string) error", + "parent": null, + "doc": null + } + ], + "LoadVault": [ + { + "name": "LoadVault", + "type": "method", + "file": "internal/storage/storage.go", + "line": 118, + "column": 0, + "signature": "func (s *StorageService) LoadVault(password string) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "LoadVaultWithKey": [ + { + "name": "LoadVaultWithKey", + "type": "method", + "file": "internal/storage/storage.go", + "line": 144, + "column": 0, + "signature": "func (s *StorageService) LoadVaultWithKey(key []byte) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "SaveVault": [ + { + "name": "SaveVault", + "type": "method", + "file": "internal/storage/storage.go", + "line": 159, + "column": 0, + "signature": "func (s *StorageService) SaveVault(data []byte, password string, callback ProgressCallback) error", + "parent": null, + "doc": null + } + ], + "prepareEncryptedData": [ + { + "name": "prepareEncryptedData", + "type": "method", + "file": "internal/storage/storage.go", + "line": 257, + "column": 0, + "signature": "func (s *StorageService) prepareEncryptedData(data []byte, metadata VaultMetadata, password string) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "SaveVaultWithIterations": [ + { + "name": "SaveVaultWithIterations", + "type": "method", + "file": "internal/storage/storage.go", + "line": 288, + "column": 0, + "signature": "func (s *StorageService) SaveVaultWithIterations(data []byte, password string, iterations int) error", + "parent": null, + "doc": null + } + ], + "SaveVaultWithIterationsUnsafe": [ + { + "name": "SaveVaultWithIterationsUnsafe", + "type": "method", + "file": "internal/storage/storage.go", + "line": 329, + "column": 0, + "signature": "func (s *StorageService) SaveVaultWithIterationsUnsafe(data []byte, password string, iterations int) error", + "parent": null, + "doc": null + } + ], + "SetIterations": [ + { + "name": "SetIterations", + "type": "method", + "file": "internal/storage/storage.go", + "line": 371, + "column": 0, + "signature": "func (s *StorageService) SetIterations(iterations int) error", + "parent": null, + "doc": null + } + ], + "VaultExists": [ + { + "name": "VaultExists", + "type": "method", + "file": "internal/storage/storage.go", + "line": 388, + "column": 0, + "signature": "func (s *StorageService) VaultExists() bool", + "parent": null, + "doc": null + } + ], + "GetVaultInfo": [ + { + "name": "GetVaultInfo", + "type": "method", + "file": "internal/storage/storage.go", + "line": 393, + "column": 0, + "signature": "func (s *StorageService) GetVaultInfo() (*VaultMetadata, error)", + "parent": null, + "doc": null + } + ], + "ValidateVault": [ + { + "name": "ValidateVault", + "type": "method", + "file": "internal/storage/storage.go", + "line": 410, + "column": 0, + "signature": "func (s *StorageService) ValidateVault() error", + "parent": null, + "doc": null + } + ], + "CreateBackup": [ + { + "name": "CreateBackup", + "type": "method", + "file": "internal/storage/storage.go", + "line": 446, + "column": 0, + "signature": "func (s *StorageService) CreateBackup() error", + "parent": null, + "doc": null + } + ], + "RestoreFromBackup": [ + { + "name": "RestoreFromBackup", + "type": "method", + "file": "internal/storage/storage.go", + "line": 453, + "column": 0, + "signature": "func (s *StorageService) RestoreFromBackup(backupPath string) error", + "parent": null, + "doc": null + } + ], + "RemoveBackup": [ + { + "name": "RemoveBackup", + "type": "method", + "file": "internal/storage/storage.go", + "line": 476, + "column": 0, + "signature": "func (s *StorageService) RemoveBackup() error", + "parent": null, + "doc": null + } + ], + "loadEncryptedVault": [ + { + "name": "loadEncryptedVault", + "type": "method", + "file": "internal/storage/storage.go", + "line": 487, + "column": 0, + "signature": "func (s *StorageService) loadEncryptedVault() (*EncryptedVault, error)", + "parent": null, + "doc": null + } + ], + "saveEncryptedVault": [ + { + "name": "saveEncryptedVault", + "type": "method", + "file": "internal/storage/storage.go", + "line": 510, + "column": 0, + "signature": "func (s *StorageService) saveEncryptedVault(data []byte, metadata VaultMetadata, password string) error", + "parent": null, + "doc": null + } + ], + "atomicWrite": [ + { + "name": "atomicWrite", + "type": "method", + "file": "internal/storage/storage.go", + "line": 540, + "column": 0, + "signature": "func (s *StorageService) atomicWrite(path string, data []byte) error", + "parent": null, + "doc": null + } + ], + "preflightChecks": [ + { + "name": "preflightChecks", + "type": "method", + "file": "internal/storage/storage.go", + "line": 593, + "column": 0, + "signature": "func (s *StorageService) preflightChecks() error", + "parent": null, + "doc": null + } + ], + "getAvailableDiskSpace": [ + { + "name": "getAvailableDiskSpace", + "type": "method", + "file": "internal/storage/storage.go", + "line": 629, + "column": 0, + "signature": "func (s *StorageService) getAvailableDiskSpace(path string) (int64, error)", + "parent": null, + "doc": null + } + ], + "createBackup": [ + { + "name": "createBackup", + "type": "method", + "file": "internal/storage/storage.go", + "line": 643, + "column": 0, + "signature": "func (s *StorageService) createBackup() error", + "parent": null, + "doc": null + } + ], + "restoreFromBackup": [ + { + "name": "restoreFromBackup", + "type": "method", + "file": "internal/storage/storage.go", + "line": 675, + "column": 0, + "signature": "func (s *StorageService) restoreFromBackup(backupPath string) error", + "parent": null, + "doc": null + } + ], + "ProgressCallback": [ + { + "name": "ProgressCallback", + "type": "type", + "file": "internal/storage/storage.go", + "line": 33, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "VaultMetadata": [ + { + "name": "VaultMetadata", + "type": "struct", + "file": "internal/storage/storage.go", + "line": 35, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Version", + "parent_symbol": "VaultMetadata", + "field_type": "int", + "default_value": null, + "file": "internal/storage/storage.go", + "line": 36, + "column": 1, + "tags": { + "json": "version" + }, + "is_optional": false, + "doc": null + }, + { + "name": "CreatedAt", + "parent_symbol": "VaultMetadata", + "field_type": "time.Time", + "default_value": null, + "file": "internal/storage/storage.go", + "line": 37, + "column": 1, + "tags": { + "json": "created_at" + }, + "is_optional": false, + "doc": null + }, + { + "name": "UpdatedAt", + "parent_symbol": "VaultMetadata", + "field_type": "time.Time", + "default_value": null, + "file": "internal/storage/storage.go", + "line": 38, + "column": 1, + "tags": { + "json": "updated_at" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Salt", + "parent_symbol": "VaultMetadata", + "field_type": "[]byte", + "default_value": null, + "file": "internal/storage/storage.go", + "line": 39, + "column": 1, + "tags": { + "json": "salt" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Iterations", + "parent_symbol": "VaultMetadata", + "field_type": "int", + "default_value": null, + "file": "internal/storage/storage.go", + "line": 40, + "column": 1, + "tags": { + "json": "iterations" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "EncryptedVault": [ + { + "name": "EncryptedVault", + "type": "struct", + "file": "internal/storage/storage.go", + "line": 43, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Metadata", + "parent_symbol": "EncryptedVault", + "field_type": "VaultMetadata", + "default_value": null, + "file": "internal/storage/storage.go", + "line": 44, + "column": 1, + "tags": { + "json": "metadata" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Data", + "parent_symbol": "EncryptedVault", + "field_type": "[]byte", + "default_value": null, + "file": "internal/storage/storage.go", + "line": 45, + "column": 1, + "tags": { + "json": "data" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "StorageService": [ + { + "name": "StorageService", + "type": "struct", + "file": "internal/storage/storage.go", + "line": 48, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "DetectFirstRun": [ + { + "name": "DetectFirstRun", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 57, + "column": 0, + "signature": "func DetectFirstRun(commandName string, vaultFlag string) FirstRunState", + "parent": null, + "doc": null + } + ], + "commandRequiresVault": [ + { + "name": "commandRequiresVault", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 90, + "column": 0, + "signature": "func commandRequiresVault(commandName string) bool", + "parent": null, + "doc": null + } + ], + "RunGuidedInit": [ + { + "name": "RunGuidedInit", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 108, + "column": 0, + "signature": "func RunGuidedInit(vaultPath string, isTTY bool) error", + "parent": null, + "doc": null + } + ], + "RunGuidedInitWithInput": [ + { + "name": "RunGuidedInitWithInput", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 158, + "column": 0, + "signature": "func RunGuidedInitWithInput(vaultPath string, isTTY bool, input string) error", + "parent": null, + "doc": null + } + ], + "promptMasterPassword": [ + { + "name": "promptMasterPassword", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 199, + "column": 0, + "signature": "func promptMasterPassword(reader *bufio.Reader) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "promptMasterPasswordWithReader": [ + { + "name": "promptMasterPasswordWithReader", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 203, + "column": 0, + "signature": "func promptMasterPasswordWithReader(reader *bufio.Reader, maxAttempts int) ([]byte, error)", + "parent": null, + "doc": null + } + ], + "validatePasswordPolicy": [ + { + "name": "validatePasswordPolicy", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 275, + "column": 0, + "signature": "func validatePasswordPolicy(password []byte) error", + "parent": null, + "doc": null + } + ], + "promptKeychainOption": [ + { + "name": "promptKeychainOption", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 318, + "column": 0, + "signature": "func promptKeychainOption(reader *bufio.Reader) bool", + "parent": null, + "doc": null + } + ], + "promptAuditOption": [ + { + "name": "promptAuditOption", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 331, + "column": 0, + "signature": "func promptAuditOption(reader *bufio.Reader) bool", + "parent": null, + "doc": null + } + ], + "showNonTTYError": [ + { + "name": "showNonTTYError", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 345, + "column": 0, + "signature": "func showNonTTYError() error", + "parent": null, + "doc": null + } + ], + "showManualInitInstructions": [ + { + "name": "showManualInitInstructions", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 355, + "column": 0, + "signature": "func showManualInitInstructions() error", + "parent": null, + "doc": null + } + ], + "showSuccessMessage": [ + { + "name": "showSuccessMessage", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 363, + "column": 0, + "signature": "func showSuccessMessage(keychainEnabled, auditEnabled bool)", + "parent": null, + "doc": null + } + ], + "createVaultFromConfig": [ + { + "name": "createVaultFromConfig", + "type": "function", + "file": "internal/vault/firstrun.go", + "line": 378, + "column": 0, + "signature": "func createVaultFromConfig(config GuidedInitConfig) error", + "parent": null, + "doc": null + } + ], + "FirstRunState": [ + { + "name": "FirstRunState", + "type": "struct", + "file": "internal/vault/firstrun.go", + "line": 25, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "GuidedInitConfig": [ + { + "name": "GuidedInitConfig", + "type": "struct", + "file": "internal/vault/firstrun.go", + "line": 36, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "VaultPath", + "parent_symbol": "GuidedInitConfig", + "field_type": "string", + "default_value": null, + "file": "internal/vault/firstrun.go", + "line": 37, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "EnableKeychain", + "parent_symbol": "GuidedInitConfig", + "field_type": "bool", + "default_value": null, + "file": "internal/vault/firstrun.go", + "line": 38, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "EnableAuditLog", + "parent_symbol": "GuidedInitConfig", + "field_type": "bool", + "default_value": null, + "file": "internal/vault/firstrun.go", + "line": 39, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + }, + { + "name": "MasterPassword", + "parent_symbol": "GuidedInitConfig", + "field_type": "[]byte", + "default_value": null, + "file": "internal/vault/firstrun.go", + "line": 40, + "column": 1, + "tags": null, + "is_optional": false, + "doc": null + } + ] + } + ], + "MetadataPath": [ + { + "name": "MetadataPath", + "type": "function", + "file": "internal/vault/metadata.go", + "line": 44, + "column": 0, + "signature": "func MetadataPath(vaultPath string) string", + "parent": null, + "doc": null + } + ], + "LoadMetadata": [ + { + "name": "LoadMetadata", + "type": "function", + "file": "internal/vault/metadata.go", + "line": 49, + "column": 0, + "signature": "func LoadMetadata(vaultPath string) (*Metadata, error)", + "parent": null, + "doc": null + }, + { + "name": "LoadMetadata", + "type": "method", + "file": "internal/vault/vault.go", + "line": 1336, + "column": 0, + "signature": "func (v *VaultService) LoadMetadata() (*Metadata, error)", + "parent": null, + "doc": null + } + ], + "SaveMetadata": [ + { + "name": "SaveMetadata", + "type": "function", + "file": "internal/vault/metadata.go", + "line": 81, + "column": 0, + "signature": "func SaveMetadata(vaultPath string, metadata *Metadata) error", + "parent": null, + "doc": null + }, + { + "name": "SaveMetadata", + "type": "method", + "file": "internal/vault/vault.go", + "line": 1341, + "column": 0, + "signature": "func (v *VaultService) SaveMetadata(metadata *Metadata) error", + "parent": null, + "doc": null + } + ], + "DeleteMetadata": [ + { + "name": "DeleteMetadata", + "type": "function", + "file": "internal/vault/metadata.go", + "line": 101, + "column": 0, + "signature": "func DeleteMetadata(vaultPath string) error", + "parent": null, + "doc": null + }, + { + "name": "DeleteMetadata", + "type": "method", + "file": "internal/vault/vault.go", + "line": 1346, + "column": 0, + "signature": "func (v *VaultService) DeleteMetadata() error", + "parent": null, + "doc": null + } + ], + "Metadata": [ + { + "name": "Metadata", + "type": "struct", + "file": "internal/vault/metadata.go", + "line": 11, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Version", + "parent_symbol": "Metadata", + "field_type": "string", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 12, + "column": 1, + "tags": { + "json": "version" + }, + "is_optional": false, + "doc": null + }, + { + "name": "CreatedAt", + "parent_symbol": "Metadata", + "field_type": "time.Time", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 13, + "column": 1, + "tags": { + "json": "created_at" + }, + "is_optional": false, + "doc": null + }, + { + "name": "LastModified", + "parent_symbol": "Metadata", + "field_type": "time.Time", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 14, + "column": 1, + "tags": { + "json": "last_modified" + }, + "is_optional": false, + "doc": null + }, + { + "name": "KeychainEnabled", + "parent_symbol": "Metadata", + "field_type": "bool", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 15, + "column": 1, + "tags": { + "json": "keychain_enabled" + }, + "is_optional": false, + "doc": null + }, + { + "name": "AuditEnabled", + "parent_symbol": "Metadata", + "field_type": "bool", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 16, + "column": 1, + "tags": { + "json": "audit_enabled" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Recovery", + "parent_symbol": "Metadata", + "field_type": "*RecoveryMetadata", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 17, + "column": 1, + "tags": { + "json": "recovery,omitempty" + }, + "is_optional": true, + "doc": null + } + ] + } + ], + "RecoveryMetadata": [ + { + "name": "RecoveryMetadata", + "type": "struct", + "file": "internal/vault/metadata.go", + "line": 21, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Enabled", + "parent_symbol": "RecoveryMetadata", + "field_type": "bool", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 22, + "column": 1, + "tags": { + "json": "enabled" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Version", + "parent_symbol": "RecoveryMetadata", + "field_type": "string", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 23, + "column": 1, + "tags": { + "json": "version" + }, + "is_optional": false, + "doc": null + }, + { + "name": "PassphraseRequired", + "parent_symbol": "RecoveryMetadata", + "field_type": "bool", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 24, + "column": 1, + "tags": { + "json": "passphrase_required" + }, + "is_optional": false, + "doc": null + }, + { + "name": "ChallengePositions", + "parent_symbol": "RecoveryMetadata", + "field_type": "[]int", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 25, + "column": 1, + "tags": { + "json": "challenge_positions" + }, + "is_optional": false, + "doc": null + }, + { + "name": "KDFParams", + "parent_symbol": "RecoveryMetadata", + "field_type": "KDFParams", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 26, + "column": 1, + "tags": { + "json": "kdf_params" + }, + "is_optional": false, + "doc": null + }, + { + "name": "EncryptedStoredWords", + "parent_symbol": "RecoveryMetadata", + "field_type": "[]byte", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 27, + "column": 1, + "tags": { + "json": "encrypted_stored_words" + }, + "is_optional": false, + "doc": null + }, + { + "name": "NonceStored", + "parent_symbol": "RecoveryMetadata", + "field_type": "[]byte", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 28, + "column": 1, + "tags": { + "json": "nonce_stored" + }, + "is_optional": false, + "doc": null + }, + { + "name": "EncryptedRecoveryKey", + "parent_symbol": "RecoveryMetadata", + "field_type": "[]byte", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 29, + "column": 1, + "tags": { + "json": "encrypted_recovery_key" + }, + "is_optional": false, + "doc": null + }, + { + "name": "NonceRecovery", + "parent_symbol": "RecoveryMetadata", + "field_type": "[]byte", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 30, + "column": 1, + "tags": { + "json": "nonce_recovery" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "KDFParams": [ + { + "name": "KDFParams", + "type": "struct", + "file": "internal/vault/metadata.go", + "line": 34, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Algorithm", + "parent_symbol": "KDFParams", + "field_type": "string", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 35, + "column": 1, + "tags": { + "json": "algorithm" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Time", + "parent_symbol": "KDFParams", + "field_type": "uint32", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 36, + "column": 1, + "tags": { + "json": "time" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Memory", + "parent_symbol": "KDFParams", + "field_type": "uint32", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 37, + "column": 1, + "tags": { + "json": "memory" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Threads", + "parent_symbol": "KDFParams", + "field_type": "uint8", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 38, + "column": 1, + "tags": { + "json": "threads" + }, + "is_optional": false, + "doc": null + }, + { + "name": "SaltChallenge", + "parent_symbol": "KDFParams", + "field_type": "[]byte", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 39, + "column": 1, + "tags": { + "json": "salt_challenge" + }, + "is_optional": false, + "doc": null + }, + { + "name": "SaltRecovery", + "parent_symbol": "KDFParams", + "field_type": "[]byte", + "default_value": null, + "file": "internal/vault/metadata.go", + "line": 40, + "column": 1, + "tags": { + "json": "salt_recovery" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "GetStorageService": [ + { + "name": "GetStorageService", + "type": "method", + "file": "internal/vault/vault.go", + "line": 179, + "column": 0, + "signature": "func (v *VaultService) GetStorageService() *storage.StorageService", + "parent": null, + "doc": null + } + ], + "EnableAudit": [ + { + "name": "EnableAudit", + "type": "method", + "file": "internal/vault/vault.go", + "line": 186, + "column": 0, + "signature": "func (v *VaultService) EnableAudit(auditLogPath, vaultID string) error", + "parent": null, + "doc": null + } + ], + "DisableAudit": [ + { + "name": "DisableAudit", + "type": "method", + "file": "internal/vault/vault.go", + "line": 231, + "column": 0, + "signature": "func (v *VaultService) DisableAudit()", + "parent": null, + "doc": null + } + ], + "LogAudit": [ + { + "name": "LogAudit", + "type": "method", + "file": "internal/vault/vault.go", + "line": 239, + "column": 0, + "signature": "func (v *VaultService) LogAudit(eventType, outcome, credentialName string)", + "parent": null, + "doc": null + } + ], + "createAuditCallback": [ + { + "name": "createAuditCallback", + "type": "method", + "file": "internal/vault/vault.go", + "line": 261, + "column": 0, + "signature": "func (v *VaultService) createAuditCallback() storage.ProgressCallback", + "parent": null, + "doc": null + } + ], + "Initialize": [ + { + "name": "Initialize", + "type": "method", + "file": "internal/vault/vault.go", + "line": 319, + "column": 0, + "signature": "func (v *VaultService) Initialize(masterPassword []byte, useKeychain bool, auditLogPath, vaultID string) error", + "parent": null, + "doc": null + } + ], + "Unlock": [ + { + "name": "Unlock", + "type": "method", + "file": "internal/vault/vault.go", + "line": 420, + "column": 0, + "signature": "func (v *VaultService) Unlock(masterPassword []byte) error", + "parent": null, + "doc": null + } + ], + "UnlockWithKey": [ + { + "name": "UnlockWithKey", + "type": "method", + "file": "internal/vault/vault.go", + "line": 553, + "column": 0, + "signature": "func (v *VaultService) UnlockWithKey(vaultKey []byte) error", + "parent": null, + "doc": null + } + ], + "UnlockWithKeychain": [ + { + "name": "UnlockWithKeychain", + "type": "method", + "file": "internal/vault/vault.go", + "line": 637, + "column": 0, + "signature": "func (v *VaultService) UnlockWithKeychain() error", + "parent": null, + "doc": null + } + ], + "Lock": [ + { + "name": "Lock", + "type": "method", + "file": "internal/vault/vault.go", + "line": 661, + "column": 0, + "signature": "func (v *VaultService) Lock()", + "parent": null, + "doc": null + } + ], + "IsUnlocked": [ + { + "name": "IsUnlocked", + "type": "method", + "file": "internal/vault/vault.go", + "line": 677, + "column": 0, + "signature": "func (v *VaultService) IsUnlocked() bool", + "parent": null, + "doc": null + } + ], + "save": [ + { + "name": "save", + "type": "method", + "file": "internal/vault/vault.go", + "line": 682, + "column": 0, + "signature": "func (v *VaultService) save() error", + "parent": null, + "doc": null + } + ], + "GetCredential": [ + { + "name": "GetCredential", + "type": "method", + "file": "internal/vault/vault.go", + "line": 760, + "column": 0, + "signature": "func (v *VaultService) GetCredential(service string, trackUsage bool) (*Credential, error)", + "parent": null, + "doc": null + } + ], + "getGitRepo": [ + { + "name": "getGitRepo", + "type": "method", + "file": "internal/vault/vault.go", + "line": 837, + "column": 0, + "signature": "func (v *VaultService) getGitRepo(dir string) string", + "parent": null, + "doc": null + } + ], + "ListCredentials": [ + { + "name": "ListCredentials", + "type": "method", + "file": "internal/vault/vault.go", + "line": 858, + "column": 0, + "signature": "func (v *VaultService) ListCredentials() ([]string, error)", + "parent": null, + "doc": null + } + ], + "ListCredentialsWithMetadata": [ + { + "name": "ListCredentialsWithMetadata", + "type": "method", + "file": "internal/vault/vault.go", + "line": 899, + "column": 0, + "signature": "func (v *VaultService) ListCredentialsWithMetadata() ([]CredentialMetadata, error)", + "parent": null, + "doc": null + } + ], + "UpdateCredentialFields": [ + { + "name": "UpdateCredentialFields", + "type": "method", + "file": "internal/vault/vault.go", + "line": 1019, + "column": 0, + "signature": "func (v *VaultService) UpdateCredentialFields(service, username, password, category, url, notes string) error", + "parent": null, + "doc": null + } + ], + "GetUsageStats": [ + { + "name": "GetUsageStats", + "type": "method", + "file": "internal/vault/vault.go", + "line": 1063, + "column": 0, + "signature": "func (v *VaultService) GetUsageStats(service string) (map[string]UsageRecord, error)", + "parent": null, + "doc": null + } + ], + "ChangePassword": [ + { + "name": "ChangePassword", + "type": "method", + "file": "internal/vault/vault.go", + "line": 1085, + "column": 0, + "signature": "func (v *VaultService) ChangePassword(newPassword []byte) error", + "parent": null, + "doc": null + } + ], + "EnableKeychain": [ + { + "name": "EnableKeychain", + "type": "method", + "file": "internal/vault/vault.go", + "line": 1163, + "column": 0, + "signature": "func (v *VaultService) EnableKeychain(password []byte, force bool) error", + "parent": null, + "doc": null + } + ], + "GetKeychainStatus": [ + { + "name": "GetKeychainStatus", + "type": "method", + "file": "internal/vault/vault.go", + "line": 1210, + "column": 0, + "signature": "func (v *VaultService) GetKeychainStatus() *KeychainStatus", + "parent": null, + "doc": null + } + ], + "RemoveVault": [ + { + "name": "RemoveVault", + "type": "method", + "file": "internal/vault/vault.go", + "line": 1242, + "column": 0, + "signature": "func (v *VaultService) RemoveVault(force bool, removeAll bool) (*RemoveVaultResult, error)", + "parent": null, + "doc": null + } + ], + "PingKeychain": [ + { + "name": "PingKeychain", + "type": "method", + "file": "internal/vault/vault.go", + "line": 1351, + "column": 0, + "signature": "func (v *VaultService) PingKeychain() error", + "parent": null, + "doc": null + } + ], + "KeychainStatus": [ + { + "name": "KeychainStatus", + "type": "struct", + "file": "internal/vault/vault.go", + "line": 20, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "RemoveVaultResult": [ + { + "name": "RemoveVaultResult", + "type": "struct", + "file": "internal/vault/vault.go", + "line": 27, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "UsageRecord": [ + { + "name": "UsageRecord", + "type": "struct", + "file": "internal/vault/vault.go", + "line": 53, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Location", + "parent_symbol": "UsageRecord", + "field_type": "string", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 54, + "column": 1, + "tags": { + "json": "location" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Timestamp", + "parent_symbol": "UsageRecord", + "field_type": "time.Time", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 55, + "column": 1, + "tags": { + "json": "timestamp" + }, + "is_optional": false, + "doc": null + }, + { + "name": "GitRepo", + "parent_symbol": "UsageRecord", + "field_type": "string", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 56, + "column": 1, + "tags": { + "json": "git_repo" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Count", + "parent_symbol": "UsageRecord", + "field_type": "int", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 57, + "column": 1, + "tags": { + "json": "count" + }, + "is_optional": false, + "doc": null + }, + { + "name": "LineNumber", + "parent_symbol": "UsageRecord", + "field_type": "int", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 58, + "column": 1, + "tags": { + "json": "line_number,omitempty" + }, + "is_optional": true, + "doc": null + }, + { + "name": "FieldAccess", + "parent_symbol": "UsageRecord", + "field_type": "map[string]int", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 59, + "column": 1, + "tags": { + "json": "field_access" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "Credential": [ + { + "name": "Credential", + "type": "struct", + "file": "internal/vault/vault.go", + "line": 64, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Service", + "parent_symbol": "Credential", + "field_type": "string", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 65, + "column": 1, + "tags": { + "json": "service" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Username", + "parent_symbol": "Credential", + "field_type": "string", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 66, + "column": 1, + "tags": { + "json": "username" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Password", + "parent_symbol": "Credential", + "field_type": "[]byte", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 67, + "column": 1, + "tags": { + "json": "password" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Category", + "parent_symbol": "Credential", + "field_type": "string", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 68, + "column": 1, + "tags": { + "json": "category,omitempty" + }, + "is_optional": true, + "doc": null + }, + { + "name": "URL", + "parent_symbol": "Credential", + "field_type": "string", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 69, + "column": 1, + "tags": { + "json": "url,omitempty" + }, + "is_optional": true, + "doc": null + }, + { + "name": "Notes", + "parent_symbol": "Credential", + "field_type": "string", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 70, + "column": 1, + "tags": { + "json": "notes" + }, + "is_optional": false, + "doc": null + }, + { + "name": "CreatedAt", + "parent_symbol": "Credential", + "field_type": "time.Time", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 71, + "column": 1, + "tags": { + "json": "created_at" + }, + "is_optional": false, + "doc": null + }, + { + "name": "UpdatedAt", + "parent_symbol": "Credential", + "field_type": "time.Time", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 72, + "column": 1, + "tags": { + "json": "updated_at" + }, + "is_optional": false, + "doc": null + }, + { + "name": "ModifiedCount", + "parent_symbol": "Credential", + "field_type": "int", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 73, + "column": 1, + "tags": { + "json": "modified_count" + }, + "is_optional": false, + "doc": null + }, + { + "name": "UsageRecord", + "parent_symbol": "Credential", + "field_type": "map[string]UsageRecord", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 74, + "column": 1, + "tags": { + "json": "usage_records" + }, + "is_optional": false, + "doc": null + } + ] + } + ], + "VaultData": [ + { + "name": "VaultData", + "type": "struct", + "file": "internal/vault/vault.go", + "line": 78, + "column": 0, + "signature": null, + "parent": null, + "doc": null, + "config_fields": [ + { + "name": "Credentials", + "parent_symbol": "VaultData", + "field_type": "map[string]Credential", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 79, + "column": 1, + "tags": { + "json": "credentials" + }, + "is_optional": false, + "doc": null + }, + { + "name": "Version", + "parent_symbol": "VaultData", + "field_type": "int", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 80, + "column": 1, + "tags": { + "json": "version" + }, + "is_optional": false, + "doc": null + }, + { + "name": "AuditEnabled", + "parent_symbol": "VaultData", + "field_type": "bool", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 82, + "column": 1, + "tags": { + "json": "audit_enabled,omitempty" + }, + "is_optional": true, + "doc": null + }, + { + "name": "AuditLogPath", + "parent_symbol": "VaultData", + "field_type": "string", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 83, + "column": 1, + "tags": { + "json": "audit_log_path,omitempty" + }, + "is_optional": true, + "doc": null + }, + { + "name": "VaultID", + "parent_symbol": "VaultData", + "field_type": "string", + "default_value": null, + "file": "internal/vault/vault.go", + "line": 84, + "column": 1, + "tags": { + "json": "vault_id,omitempty" + }, + "is_optional": true, + "doc": null + } + ] + } + ], + "UpdateOpts": [ + { + "name": "UpdateOpts", + "type": "struct", + "file": "internal/vault/vault.go", + "line": 874, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "CredentialMetadata": [ + { + "name": "CredentialMetadata", + "type": "struct", + "file": "internal/vault/vault.go", + "line": 883, + "column": 0, + "signature": null, + "parent": null, + "doc": null + } + ], + "main": [ + { + "name": "main", + "type": "function", + "file": "main.go", + "line": 11, + "column": 0, + "signature": "func main()", + "parent": null, + "doc": null + } + ] + } +} \ No newline at end of file diff --git a/README.md b/README.md index 471a83e6..ab095a80 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -``` +```text ╔═══╗ ║ ║ ╔═╩═══╩═╗ diff --git a/docs/01-getting-started/manual-install.md b/docs/01-getting-started/manual-install.md index e6597d75..1a192a61 100644 --- a/docs/01-getting-started/manual-install.md +++ b/docs/01-getting-started/manual-install.md @@ -6,7 +6,7 @@ toc: true Manual installation gives you direct control over the binary location and version. -### Download Pre-built Binaries +### Download Pre-Built Binaries 1. **Visit the Releases Page** @@ -166,7 +166,7 @@ $env:Path = [System.Environment]::GetEnvironmentVariable("Path", "Machine") + "; pass-cli version ``` -## Building from Source +## Building From Source Building from source gives you the latest development version and allows customization. @@ -272,7 +272,7 @@ For maximum portability: CGO_ENABLED=0 go build -ldflags="-s -w" -o pass-cli . ``` -#### All Platforms (using GoReleaser) +#### All Platforms (Using GoReleaser) ```bash # Install GoReleaser diff --git a/docs/01-getting-started/quick-start.md b/docs/01-getting-started/quick-start.md index bef00328..e4f31481 100644 --- a/docs/01-getting-started/quick-start.md +++ b/docs/01-getting-started/quick-start.md @@ -10,7 +10,7 @@ This 5-minute guide will walk you through initializing your vault and storing yo ## Installation -See [Quick Install]({{< relref "quick-install" >}}) for platform-specific installation instructions (Homebrew, Scoop) or [Manual Installation]({{< relref "manual-install" >}}) for binary download. +See [Quick Install](quick-install) for platform-specific installation instructions (Homebrew, Scoop) or [Manual Installation](manual-install) for binary download. After installation, verify pass-cli is available: @@ -56,7 +56,7 @@ Password Requirements: Enter master password: •••••••••••••• Confirm master password: •••••••••••••• -✓ Password meets all requirements +[PASS] Password meets all requirements ┌────────────────────────────────────────────────────────────┐ │ Step 2: Keychain Integration │ @@ -66,13 +66,13 @@ Store your master password in OS keychain for convenience? (Windows Credential Manager, macOS Keychain, Linux Secret Service) Benefits: - ✓ No need to type password for every operation - ✓ Secure OS-level storage - ✓ Can be disabled later via OS credential manager + [PASS] No need to type password for every operation + [PASS] Secure OS-level storage + [PASS] Can be disabled later via OS credential manager Enable keychain storage? (y/n): y -✓ Master password stored in keychain +[PASS] Master password stored in keychain ┌────────────────────────────────────────────────────────────┐ │ Step 3: Audit Logging │ @@ -81,13 +81,13 @@ Enable keychain storage? (y/n): y Enable audit logging to track all vault operations? Benefits: - ✓ Security audit trail - ✓ Tamper-evident with HMAC signatures - ✓ Track all add/get/update/delete operations + [PASS] Security audit trail + [PASS] Tamper-evident with HMAC signatures + [PASS] Track all add/get/update/delete operations Enable audit logging? (y/n): y -✓ Audit logging enabled +[PASS] Audit logging enabled ┌────────────────────────────────────────────────────────────┐ │ Setup Complete! │ @@ -189,5 +189,5 @@ Enter username: your-github-username Enter password: •••••••••••• Confirm password: •••••••••••• -✓ Credential 'github' added successfully +[PASS] Credential 'github' added successfully ``` diff --git a/docs/01-getting-started/uninstall.md b/docs/01-getting-started/uninstall.md index 150a49af..d62dc9c2 100644 --- a/docs/01-getting-started/uninstall.md +++ b/docs/01-getting-started/uninstall.md @@ -109,7 +109,7 @@ history -c If you encounter issues not covered here: -1. Check the [Troubleshooting Guide]({{< relref "../04-troubleshooting/_index" >}}) +1. Check the [Troubleshooting Guide](../04-troubleshooting/_index) 2. Review [GitHub Issues](https://github.com/ari1110/pass-cli/issues) 3. Ask in [GitHub Discussions](https://github.com/ari1110/pass-cli/discussions) 4. File a [new issue](https://github.com/ari1110/pass-cli/issues/new) @@ -118,6 +118,6 @@ If you encounter issues not covered here: After uninstalling, you might want to: -- Review the [Security Architecture]({{< relref "../03-reference/security-architecture" >}}) +- Review the [Security Architecture](../03-reference/security-architecture) - Check [pass-cli Documentation](https://ari1110.github.io/pass-cli/) for other topics diff --git a/docs/02-guides/backup-restore.md b/docs/02-guides/backup-restore.md index ac75e9a5..b3ffbab3 100644 --- a/docs/02-guides/backup-restore.md +++ b/docs/02-guides/backup-restore.md @@ -64,7 +64,7 @@ Manual backups create timestamped copies of your vault that persist alongside au pass-cli vault backup create # Output: -# ✅ Backup created successfully +# [OK] Backup created successfully # # Backup: /home/user/.pass-cli/vault.enc.20251111-143022.manual.backup # Size: 2.5 KB @@ -96,7 +96,7 @@ pass-cli vault backup create --verbose - **Before system changes**: OS upgrades, migrations, or hardware changes - **Before major updates**: Upgrading pass-cli to a new version -## Restoring from Backup +## Restoring From Backup The restore command automatically selects the newest valid backup (manual or automatic) and replaces your current vault. @@ -107,7 +107,7 @@ The restore command automatically selects the newest valid backup (manual or aut pass-cli vault backup restore # Output: -# ⚠️ Warning: This will overwrite your current vault with the backup. +# [WARNING] Warning: This will overwrite your current vault with the backup. # # Backup to restore: # File: /home/user/.pass-cli/vault.enc.20251111-143022.manual.backup @@ -124,7 +124,7 @@ pass-cli vault backup restore pass-cli vault backup restore --force # Output: -# ✅ Vault restored successfully from backup +# [OK] Vault restored successfully from backup # # Restored from: /home/user/.pass-cli/vault.enc.20251111-143022.manual.backup # Backup type: manual @@ -183,17 +183,17 @@ pass-cli vault backup info # 📦 Vault Backup Status # # Automatic Backup: -# ✓ 2 hours ago, 2.5 KB +# [PASS] 2 hours ago, 2.5 KB # # Manual Backups (3 total): # -# 1. ✓ 2 hours ago, 2.5 KB -# 2. ✓ 1 day ago, 2.4 KB -# 3. ✓ 1 week ago, 2.3 KB +# 1. [PASS] 2 hours ago, 2.5 KB +# 2. [PASS] 1 day ago, 2.4 KB +# 3. [PASS] 1 week ago, 2.3 KB # # Total backup size: 7.2 KB # -# ✓ Restore priority: manual backup (2 hours ago) +# [PASS] Restore priority: manual backup (2 hours ago) ``` ### Info with Verbose Output @@ -205,13 +205,13 @@ pass-cli vault backup info --verbose # 📦 Vault Backup Status # # Automatic Backup: -# ✓ 2 hours ago, 2.5 KB +# [PASS] 2 hours ago, 2.5 KB # Path: /home/user/.pass-cli/vault.enc.backup # Modified: 2025-11-11 14:30:22 # # Manual Backups (3 total): # -# 1. ✓ 2 hours ago, 2.5 KB +# 1. [PASS] 2 hours ago, 2.5 KB # Path: /home/user/.pass-cli/vault.enc.20251111-143022.manual.backup # Modified: 2025-11-11 14:30:22 # ... @@ -219,8 +219,8 @@ pass-cli vault backup info --verbose ### Understanding Info Output -- **✓** = Backup passed integrity verification -- **⚠️** = Backup is corrupted or invalid +- **[PASS]** = Backup passed integrity verification +- **[WARNING]** = Backup is corrupted or invalid - **Restore priority** = Which backup will be used for restore - **Total backup size** = Combined size of all backups @@ -228,10 +228,10 @@ pass-cli vault backup info --verbose ```bash # Old backup warning (>30 days) -⚠️ Warning: Backup is 45 days old. Consider creating a fresh backup. +[WARNING] Warning: Backup is 45 days old. Consider creating a fresh backup. # Too many manual backups (>5) -⚠️ Warning: 12 manual backups found. Consider removing old backups to free disk space. +[WARNING] Warning: 12 manual backups found. Consider removing old backups to free disk space. ``` ## Best Practices @@ -288,8 +288,8 @@ Verify backups are valid before relying on them: pass-cli vault backup info # Look for: -# - ✓ (checkmark) = valid backup -# - ⚠️ (warning) = corrupted backup +# - [PASS] (checkmark) = valid backup +# - [WARNING] (warning) = corrupted backup # Test restore (dry run) pass-cli vault backup restore --dry-run @@ -314,7 +314,7 @@ pass-cli vault backup create ```bash # Info shows corrupted backup -⚠️ 2 hours ago, 2.5 KB +[WARNING] 2 hours ago, 2.5 KB ``` **Causes**: @@ -389,9 +389,9 @@ pass-cli vault backup restore --force # Create daily backup with error handling if pass-cli vault backup create &>/dev/null; then - echo "✓ Backup created: $(date)" + echo "[PASS] Backup created: $(date)" else - echo "✗ Backup failed: $(date)" >&2 + echo "[FAIL] Backup failed: $(date)" >&2 exit 1 fi @@ -466,12 +466,12 @@ Monitor backup health with cron: ```bash # Add to crontab: check backup health daily -0 2 * * * pass-cli vault backup info | grep -q "⚠️" && echo "Warning: Backup issue detected" | mail -s "pass-cli backup alert" admin@example.com +0 2 * * * pass-cli vault backup info | grep -q "[WARNING]" && echo "Warning: Backup issue detected" | mail -s "pass-cli backup alert" admin@example.com ``` ## See Also -- [Security Architecture]({{< relref "../03-reference/security-architecture" >}}) - Encryption details and security best practices -- [Troubleshooting]({{< relref "../04-troubleshooting/_index" >}}) - General troubleshooting for pass-cli -- [Health Checks]({{< relref "../05-operations/health-checks" >}}) - Vault health checks and diagnostics -- [Quick Start]({{< relref "../01-getting-started/quick-start" >}}) - First-time setup and basic workflows +- [Security Architecture](../03-reference/security-architecture) - Encryption details and security best practices +- [Troubleshooting](../04-troubleshooting/_index) - General troubleshooting for pass-cli +- [Health Checks](../05-operations/health-checks) - Vault health checks and diagnostics +- [Quick Start](../01-getting-started/quick-start) - First-time setup and basic workflows diff --git a/docs/02-guides/basic-workflows.md b/docs/02-guides/basic-workflows.md index 45913b0c..22bc1962 100644 --- a/docs/02-guides/basic-workflows.md +++ b/docs/02-guides/basic-workflows.md @@ -29,7 +29,7 @@ pass-cli list ``` Output: -``` +```text Stored Credentials ================== @@ -88,8 +88,8 @@ $ pass-cli add github -u myuser --generate # Generate with custom length $ pass-cli add github -u myuser --generate --gen-length 32 -✓ Generated 32-character password -✓ Credential 'github' added successfully +[PASS] Generated 32-character password +[PASS] Credential 'github' added successfully ``` **Generate During Update (Password Rotation):** @@ -100,8 +100,8 @@ $ pass-cli update github --generate # Generate with custom length $ pass-cli update github --generate --gen-length 24 -✓ Generated 24-character password -✓ Credential 'github' updated successfully +[PASS] Generated 24-character password +[PASS] Credential 'github' updated successfully ``` **TUI Generation:** @@ -119,7 +119,7 @@ If you didn't enable keychain during initialization, you can enable it anytime: $ pass-cli keychain enable Master password: •••••••••••• -✅ Keychain integration enabled for vault at /home/user/.pass-cli/vault.enc +[OK] Keychain integration enabled for vault at /home/user/.pass-cli/vault.enc Future commands will not prompt for password when keychain is available. ``` @@ -133,12 +133,12 @@ $ pass-cli keychain status Keychain Status for /home/user/.pass-cli/vault.enc: -✓ System Keychain: Available (macOS Keychain) -✓ Password Stored: Yes -✓ Backend: keychain -✓ Vault Configuration: Keychain enabled +[PASS] System Keychain: Available (macOS Keychain) +[PASS] Password Stored: Yes +[PASS] Backend: keychain +[PASS] Vault Configuration: Keychain enabled -✓ Keychain integration is properly configured. +[PASS] Keychain integration is properly configured. Your vault password is securely stored in the system keychain. Future commands will not prompt for password. ``` @@ -149,9 +149,9 @@ $ pass-cli keychain status Keychain Status for /home/user/.pass-cli/vault.enc: -✓ System Keychain: Available (Windows Credential Manager) -✗ Password Stored: No -✓ Vault Configuration: Keychain not enabled +[PASS] System Keychain: Available (Windows Credential Manager) +[FAIL] Password Stored: No +[PASS] Vault Configuration: Keychain not enabled The system keychain is available but no password is stored for this vault. Suggestion: Enable keychain integration with 'pass-cli keychain enable' @@ -167,7 +167,7 @@ To remove your master password from the keychain, use your operating system's cr After removing the keychain entry, you'll need to enter your master password for each operation. -See [Keychain Setup]({{< relref "keychain-setup" >}}) for detailed platform-specific instructions. +See [Keychain Setup](keychain-setup) for detailed platform-specific instructions. ### Platform-Specific Backends @@ -241,22 +241,22 @@ $ pass-cli doctor Health Check Results ==================== -✓ Version: v1.2.3 (up to date) -✓ Vault: vault.enc accessible (600 permissions) -✓ Config: Valid configuration -✓ Keychain: Integration active -✓ Backup: 3 backup files found +[PASS] Version: v1.2.3 (up to date) +[PASS] Vault: vault.enc accessible (600 permissions) +[PASS] Config: Valid configuration +[PASS] Keychain: Integration active +[PASS] Backup: 3 backup files found Overall Status: HEALTHY ``` -See [Health Checks]({{< relref "../05-operations/health-checks" >}}) for detailed health check documentation. +See [Health Checks](../05-operations/health-checks) for detailed health check documentation. ### Common First-Time Issues #### Keychain Access Denied (macOS) **Symptom**: -``` +```text ⚠ Keychain: Access denied by OS ``` diff --git a/docs/02-guides/keychain-setup.md b/docs/02-guides/keychain-setup.md index 13534ca9..aa1ac320 100644 --- a/docs/02-guides/keychain-setup.md +++ b/docs/02-guides/keychain-setup.md @@ -18,7 +18,7 @@ If you didn't enable keychain during initialization, you can enable it anytime: $ pass-cli keychain enable Master password: •••••••••••• -✅ Keychain integration enabled for vault at /home/user/.pass-cli/vault.enc +[OK] Keychain integration enabled for vault at /home/user/.pass-cli/vault.enc Future commands will not prompt for password when keychain is available. ``` @@ -32,12 +32,12 @@ $ pass-cli keychain status Keychain Status for /home/user/.pass-cli/vault.enc: -✓ System Keychain: Available (macOS Keychain) -✓ Password Stored: Yes -✓ Backend: keychain -✓ Vault Configuration: Keychain enabled +[PASS] System Keychain: Available (macOS Keychain) +[PASS] Password Stored: Yes +[PASS] Backend: keychain +[PASS] Vault Configuration: Keychain enabled -✓ Keychain integration is properly configured. +[PASS] Keychain integration is properly configured. Your vault password is securely stored in the system keychain. Future commands will not prompt for password. ``` @@ -48,9 +48,9 @@ $ pass-cli keychain status Keychain Status for /home/user/.pass-cli/vault.enc: -✓ System Keychain: Available (Windows Credential Manager) -✗ Password Stored: No -✓ Vault Configuration: Keychain not enabled +[PASS] System Keychain: Available (Windows Credential Manager) +[FAIL] Password Stored: No +[PASS] Vault Configuration: Keychain not enabled The system keychain is available but no password is stored for this vault. Suggestion: Enable keychain integration with 'pass-cli keychain enable' @@ -128,22 +128,22 @@ $ pass-cli doctor Health Check Results ==================== -✓ Version: v1.2.3 (up to date) -✓ Vault: vault.enc accessible (600 permissions) -✓ Config: Valid configuration -✓ Keychain: Integration active -✓ Backup: 3 backup files found +[PASS] Version: v1.2.3 (up to date) +[PASS] Vault: vault.enc accessible (600 permissions) +[PASS] Config: Valid configuration +[PASS] Keychain: Integration active +[PASS] Backup: 3 backup files found Overall Status: HEALTHY ``` -See [Health Checks]({{< relref "../05-operations/health-checks" >}}) for detailed health check documentation. +See [Health Checks](../05-operations/health-checks) for detailed health check documentation. ### Common First-Time Issues #### Keychain Access Denied (macOS) **Symptom**: -``` +```text ⚠ Keychain: Access denied by OS ``` diff --git a/docs/02-guides/recovery-phrase.md b/docs/02-guides/recovery-phrase.md index be0f1f39..5e9bf7c0 100644 --- a/docs/02-guides/recovery-phrase.md +++ b/docs/02-guides/recovery-phrase.md @@ -13,10 +13,10 @@ Complete guide to using BIP39 recovery phrases to recover vault access if you fo Pass-CLI's BIP39 recovery feature generates a 24-word recovery phrase when you create your vault. If you ever forget your master password, you can reset it using just 6 words from your recovery phrase. **Key Benefits**: -- ✅ **Industry Standard**: Uses BIP39 (same as hardware wallets) -- ✅ **Secure**: 6 words = 73.8 quintillion combinations -- ✅ **Fast**: Recover in under 30 seconds -- ✅ **Optional**: Can skip with `--no-recovery` flag if you use keychain integration +- [OK] **Industry Standard**: Uses BIP39 (same as hardware wallets) +- [OK] **Secure**: 6 words = 73.8 quintillion combinations +- [OK] **Fast**: Recover in under 30 seconds +- [OK] **Optional**: Can skip with `--no-recovery` flag if you use keychain integration ## Setting Up Recovery @@ -29,7 +29,7 @@ $ pass-cli init Enter master password: **** Confirm master password: **** -✓ Vault created +[PASS] Vault created ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Recovery Phrase Setup @@ -53,16 +53,16 @@ Advanced: Add passphrase protection? (y/N): n Verify your backup? (Y/n): y Enter word #7: device -✓ (1/3) +[PASS] (1/3) Enter word #18: identify -✓ (2/3) +[PASS] (2/3) Enter word #22: spin -✓ (3/3) +[PASS] (3/3) -✓ Recovery phrase verified -✓ Vault initialized successfully +[PASS] Recovery phrase verified +[PASS] Vault initialized successfully ``` ### Skipping Recovery Phrase @@ -81,17 +81,17 @@ pass-cli init --no-recovery **CRITICAL**: Write down your 24-word phrase **on paper** (not digitally). Store it securely: **Secure Storage** (Recommended): -- ✅ Physical safe or lockbox -- ✅ Safety deposit box at bank -- ✅ Fireproof/waterproof document safe at home -- ✅ Split across multiple secure locations (advanced) +- [OK] Physical safe or lockbox +- [OK] Safety deposit box at bank +- [OK] Fireproof/waterproof document safe at home +- [OK] Split across multiple secure locations (advanced) **Insecure Storage** (Avoid): -- ❌ Digital notes apps (Apple Notes, Google Keep, etc.) -- ❌ Cloud storage (Dropbox, Google Drive, iCloud) -- ❌ Email or messaging apps -- ❌ Screenshots or photos on phone -- ❌ Password managers (defeats the purpose) +- [ERROR] Digital notes apps (Apple Notes, Google Keep, etc.) +- [ERROR] Cloud storage (Dropbox, Google Drive, iCloud) +- [ERROR] Email or messaging apps +- [ERROR] Screenshots or photos on phone +- [ERROR] Password managers (defeats the purpose) **Keep your phrase offline**. If someone gets your phrase, they can access your vault. @@ -100,9 +100,9 @@ pass-cli init --no-recovery ### When to Use Recovery Use recovery if: -- ✅ You forgot your master password -- ✅ You have your 24-word recovery phrase -- ✅ Recovery was enabled during `pass-cli init` +- [OK] You forgot your master password +- [OK] You have your 24-word recovery phrase +- [OK] Recovery was enabled during `pass-cli init` **Note**: If keychain is enabled and accessible, you don't need recovery. Your master password is stored securely in your OS keychain. @@ -125,25 +125,25 @@ You will be asked for 6 words from your 24-word phrase. Have your recovery phrase ready. Enter word #18: identify -✓ (1/6) +[PASS] (1/6) Enter word #3: about -✓ (2/6) +[PASS] (2/6) Enter word #22: spin -✓ (3/6) +[PASS] (3/6) Enter word #7: device -✓ (4/6) +[PASS] (4/6) Enter word #11: diary -✓ (5/6) +[PASS] (5/6) Enter word #15: hybrid -✓ (6/6) +[PASS] (6/6) -✓ Recovery phrase verified -✓ Vault unlocked +[PASS] Recovery phrase verified +[PASS] Vault unlocked ``` #### Step 3: Set New Master Password @@ -152,7 +152,7 @@ Enter word #15: hybrid Enter new master password: **** Confirm new master password: **** -✓ Master password changed successfully +[PASS] Master password changed successfully Your vault has been re-encrypted with the new password. ``` @@ -191,22 +191,22 @@ Your vault is now accessible with your new master password. If keychain integrat ### What Never to Do **Never Store Digitally**: -- ❌ Photos or screenshots -- ❌ Cloud storage services -- ❌ Email or messaging apps -- ❌ Password managers -- ❌ Digital note-taking apps +- [ERROR] Photos or screenshots +- [ERROR] Cloud storage services +- [ERROR] Email or messaging apps +- [ERROR] Password managers +- [ERROR] Digital note-taking apps **Never Share**: -- ❌ Don't tell anyone your recovery phrase -- ❌ Pass-CLI will never ask for your full phrase -- ❌ No support person needs your recovery phrase -- ❌ Recovery phrase = full vault access +- [ERROR] Don't tell anyone your recovery phrase +- [ERROR] Pass-CLI will never ask for your full phrase +- [ERROR] No support person needs your recovery phrase +- [ERROR] Recovery phrase = full vault access **Never Memorize Only**: -- ❌ Human memory is fallible -- ❌ Always have physical backup -- ❌ Don't rely on memory alone +- [ERROR] Human memory is fallible +- [ERROR] Always have physical backup +- [ERROR] Don't rely on memory alone ### Testing Your Backup @@ -216,14 +216,19 @@ After writing down your recovery phrase: 2. **Store phrase securely** before testing recovery 3. **Optional**: Test recovery in safe environment: ```bash - # Create test vault - pass-cli init --config /tmp/test-config.yaml - - # Test recovery - pass-cli change-password --recover --config /tmp/test-config.yaml - - # Clean up test vault - rm -rf /tmp/test-config.yaml ~/.pass-cli/vault.enc + # Backup existing config (if any) + cp ~/.pass-cli/config.yml ~/.pass-cli/config.yml.backup 2>/dev/null + + # Point to temporary test vault + echo "vault_path: /tmp/test-vault.enc" > ~/.pass-cli/config.yml + + # Create test vault and test recovery + pass-cli init + pass-cli change-password --recover + + # Restore original config and clean up + mv ~/.pass-cli/config.yml.backup ~/.pass-cli/config.yml 2>/dev/null || rm ~/.pass-cli/config.yml + rm -f /tmp/test-vault.enc ``` ## Advanced: Passphrase Protection @@ -242,20 +247,20 @@ Advanced: Add passphrase protection? (y/N): y Enter passphrase (optional 25th word): **** Confirm passphrase: **** -✓ Passphrase protection enabled +[PASS] Passphrase protection enabled ``` ### Security Trade-offs **Benefits**: -- ✅ Even if someone finds your 24 words, they still need the passphrase -- ✅ Plausible deniability (can have multiple vaults with same phrase + different passphrases) -- ✅ Extra layer of security +- [OK] Even if someone finds your 24 words, they still need the passphrase +- [OK] Plausible deniability (can have multiple vaults with same phrase + different passphrases) +- [OK] Extra layer of security **Risks**: -- ❌ If you lose the passphrase, you **cannot** recover your vault -- ❌ Must remember/store passphrase separately from 24-word phrase -- ❌ More complex recovery process +- [ERROR] If you lose the passphrase, you **cannot** recover your vault +- [ERROR] Must remember/store passphrase separately from 24-word phrase +- [ERROR] More complex recovery process **Recommendation**: Only use passphrase protection if you: - Understand the risks diff --git a/docs/02-guides/tui-guide.md b/docs/02-guides/tui-guide.md index 9c36a917..c90a1800 100644 --- a/docs/02-guides/tui-guide.md +++ b/docs/02-guides/tui-guide.md @@ -217,7 +217,7 @@ The detail panel shows where each credential has been accessed. - **Line number** (if available): File path with line number (e.g., `/path/file.go:42`) **Display Format**: -``` +```text Usage Locations: /home/user/projects/web-app Accessed: 12 times diff --git a/docs/03-reference/command-reference.md b/docs/03-reference/command-reference.md index 6e4f0aeb..5a16c508 100644 --- a/docs/03-reference/command-reference.md +++ b/docs/03-reference/command-reference.md @@ -71,7 +71,7 @@ pass-cli init | `--use-keychain` | bool | Store master password in OS keychain | | `--no-recovery` | bool | Skip BIP39 recovery phrase generation | -#### Password Policy (January 2025) +#### Password Policy All master passwords must meet complexity requirements: - **Minimum Length**: 12 characters @@ -81,10 +81,10 @@ All master passwords must meet complexity requirements: - **Symbol**: At least one special symbol (!@#$%^&*()-_=+[]{}|;:,.<>?) **Examples**: -- ✅ `MySecureP@ssw0rd2025!` (meets all requirements) -- ✅ `Correct-Horse-Battery-29!` (meets all requirements) -- ❌ `password123` (too short, no uppercase, no symbol) -- ❌ `MyPassword` (no digit, no symbol) +- [OK] `MySecureP@ssw0rd2025!` (meets all requirements) +- [OK] `Correct-Horse-Battery-29!` (meets all requirements) +- [ERROR] `password123` (too short, no uppercase, no symbol) +- [ERROR] `MyPassword` (no digit, no symbol) #### Audit Logging (Optional) @@ -140,7 +140,7 @@ pass-cli init --no-recovery - You keep master password in another password manager - You prefer single point of failure (master password only) -For detailed recovery procedures, see [Recovery Phrase Guide](../../02-guides/recovery-phrase.md) and [Security Architecture](security-architecture.md#bip39-recovery-phrase). +For detailed recovery procedures, see [Recovery Phrase Guide](../02-guides/recovery-phrase.md) and [Security Architecture](security-architecture.md#bip39-recovery-phrase). #### Notes @@ -220,7 +220,7 @@ pass-cli add github \ When not using flags, you'll be prompted: -``` +```text Enter username: user@example.com Enter password: ******* (hidden input) Enter URL (optional): https://github.com @@ -268,6 +268,7 @@ pass-cli get [flags] For `--field` flag: - `username` - User's username - `password` - User's password +- `category` - Credential category - `url` - Service URL - `notes` - Additional notes - `service` - Service name @@ -302,14 +303,14 @@ pass-cli get github --masked #### Output Examples **Default output:** -``` +```text Service: github Username: user@example.com Password: mySecretPassword123! URL: https://github.com Notes: Personal account -✓ Password copied to clipboard (will clear in 5 seconds) +[PASS] Password copied to clipboard (will clear in 5 seconds) ``` **Quiet mode:** @@ -346,9 +347,12 @@ pass-cli list [flags] | Flag | Type | Description | |------|------|-------------| -| `--format` | string | Output format: table, json, simple (default: table) | +| `--format`, `-f` | string | Output format: table, json, simple (default: table) | | `--unused` | bool | Show only unused credentials | | `--days` | int | Days threshold for unused (default: 30) | +| `--by-project` | bool | Group credentials by git repository | +| `--location` | string | Filter credentials by directory path | +| `--recursive` | bool | Include subdirectories with --location | #### Examples @@ -367,12 +371,27 @@ pass-cli list --unused # Show credentials not used in 90 days pass-cli list --unused --days 90 + +# Group credentials by git repository +pass-cli list --by-project + +# Group by project with JSON output +pass-cli list --by-project --format json + +# Filter by location (current directory) +pass-cli list --location . + +# Filter by location with subdirectories +pass-cli list --location /home/user/projects --recursive + +# Combine location filter with project grouping +pass-cli list --location ~/work --by-project --recursive ``` #### Output Examples **Table format (default):** -``` +```text +----------+----------------------+---------------------+ | SERVICE | USERNAME | LAST ACCESSED | +----------+----------------------+---------------------+ @@ -383,7 +402,7 @@ pass-cli list --unused --days 90 ``` **Simple format:** -``` +```text github aws-prod database @@ -468,7 +487,7 @@ pass-cli update github \ If no flags provided, prompts for password: -``` +```text Enter new password (leave blank to keep current): ******* Password updated successfully! ``` @@ -491,6 +510,10 @@ Delete a credential from the vault. pass-cli delete [flags] ``` +#### Aliases + +`rm`, `remove` + #### Flags | Flag | Short | Type | Description | @@ -512,7 +535,7 @@ pass-cli delete github -f Without `--force`: -``` +```text Are you sure you want to delete 'github'? (yes/no): yes Credential 'github' deleted successfully! ``` @@ -567,7 +590,7 @@ pass-cli change-password --recover #### Interactive Flow **Normal password change:** -``` +```text 🔐 Change Master Password 📁 Vault location: /home/user/.pass-cli/vault.enc @@ -575,20 +598,20 @@ Enter current master password: ******** Enter new master password (min 12 characters with uppercase, lowercase, digit, symbol): ******** -Password strength: Strong ✅ -- Length: 16 characters ✅ -- Uppercase: Yes ✅ -- Lowercase: Yes ✅ -- Digits: Yes ✅ -- Symbols: Yes ✅ +Password strength: Strong [OK] +- Length: 16 characters [OK] +- Uppercase: Yes [OK] +- Lowercase: Yes [OK] +- Digits: Yes [OK] +- Symbols: Yes [OK] Confirm new master password: ******** -✅ Master password changed successfully! +[OK] Master password changed successfully! ``` **Recovery flow with BIP39 phrase:** -``` +```text 🔐 Recover Vault Access 📁 Vault location: /home/user/.pass-cli/vault.enc @@ -599,29 +622,29 @@ BIP39 Recovery Phrase Challenge You will be asked to provide 6 words from your 24-word recovery phrase. Enter word #7: device -✓ (1/6) +[PASS] (1/6) Enter word #12: diesel -✓ (2/6) +[PASS] (2/6) Enter word #18: identify -✓ (3/6) +[PASS] (3/6) Enter word #3: about -✓ (4/6) +[PASS] (4/6) Enter word #22: spin -✓ (5/6) +[PASS] (5/6) Enter word #15: hybrid -✓ (6/6) +[PASS] (6/6) -✅ Recovery phrase verified successfully! +[OK] Recovery phrase verified successfully! Enter new master password: ******** Confirm new master password: ******** -✅ Master password changed successfully! +[OK] Master password changed successfully! Your vault has been re-encrypted with the new password. ``` @@ -650,10 +673,10 @@ If you used `--no-recovery` during initialization, the `--recover` flag will not #### See Also -- [Password Policy]({{< relref "security-architecture#password-policy" >}}) - Password policy details -- [BIP39 Recovery]({{< relref "security-architecture#bip39-recovery-phrase" >}}) - Recovery phrase details -- [Recovery Guide]({{< relref "../02-guides/recovery-phrase" >}}) - Detailed recovery procedures -- [Keychain Setup]({{< relref "../02-guides/keychain-setup" >}}) - Keychain integration +- [Password Policy](security-architecture#password-policy) - Password policy details +- [BIP39 Recovery](security-architecture#bip39-recovery-phrase) - Recovery phrase details +- [Recovery Guide](../02-guides/recovery-phrase) - Detailed recovery procedures +- [Keychain Setup](../02-guides/keychain-setup) - Keychain integration --- @@ -724,43 +747,27 @@ Default character sets: ### version - Show Version -Display version information. +Display version information including build details. #### Synopsis ```bash -pass-cli version [flags] +pass-cli version ``` -#### Flags - -| Flag | Type | Description | -|------|------|-------------| -| `--verbose` | bool | Show detailed version info | - #### Examples ```bash # Show version pass-cli version - -# Verbose version info -pass-cli version --verbose ``` -#### Output Examples +#### Output -**Default:** -``` -pass-cli version X.Y.Z -``` - -**Verbose:** -``` -pass-cli version X.Y.Z +```text +pass-cli X.Y.Z commit: abc123f built: 2025-01-20T10:30:00Z - go: go1.25.1 ``` --- @@ -820,14 +827,14 @@ pass-cli usage redis --format simple #### Output (Table Format) -``` +```text Usage History for 'github': Location Git Repo Last Access Count Fields ────────────────────────────────────────────────────────────────────────────────────────────────── -/home/user/projects/webapp ✓ webapp 2025-11-12 14:30 12 password(8), username(4) -/home/user/projects/api-service ✓ api-service 2025-11-10 09:15 5 password(5) -/home/user/scripts ✗ (not a git repo) 2025-11-08 16:45 3 password(2), url(1) +/home/user/projects/webapp [PASS] webapp 2025-11-12 14:30 12 password(8), username(4) +/home/user/projects/api-service [PASS] api-service 2025-11-10 09:15 5 password(5) +/home/user/scripts [FAIL] (not a git repo) 2025-11-08 16:45 3 password(2), url(1) Total locations: 3 Total accesses: 20 @@ -858,7 +865,7 @@ Total accesses: 20 #### Output (Simple Format) -``` +```text /home/user/projects/webapp /home/user/projects/api-service /home/user/scripts @@ -866,7 +873,7 @@ Total accesses: 20 #### Notes -- **Path Validation**: Shows ✓ if location path still exists, ✗ if deleted +- **Path Validation**: Shows [PASS] if location path still exists, [FAIL] if deleted - **Git Integration**: Detects git repositories and shows repo name - **Field Tracking**: Counts which credential fields were accessed - **Automatic**: Usage tracked automatically on every `get` command @@ -874,7 +881,7 @@ Total accesses: 20 #### See Also -- [Usage Tracking Guide]({{< relref "../02-guides/usage-tracking" >}}) - Comprehensive usage tracking guide +- [Usage Tracking Guide](../02-guides/usage-tracking) - Comprehensive usage tracking guide --- @@ -900,7 +907,7 @@ Manages settings for: #### Subcommands -##### config init +##### Config Init Create configuration file with commented examples. @@ -919,8 +926,8 @@ pass-cli config init ``` **Output:** -``` -✅ Configuration file created: /home/user/.pass-cli/config.yml +```text +[OK] Configuration file created: /home/user/.pass-cli/config.yml Edit the file to customize your settings: - Terminal warnings @@ -928,7 +935,7 @@ Edit the file to customize your settings: - Vault location ``` -##### config edit +##### Config Edit Open configuration file in your default editor. @@ -953,7 +960,7 @@ pass-cli config edit EDITOR=vim pass-cli config edit ``` -##### config validate +##### Config Validate Validate configuration file syntax and settings. @@ -981,8 +988,8 @@ pass-cli config validate ``` **Output (Valid):** -``` -✅ Configuration is valid +```text +[OK] Configuration is valid Settings: Vault path: ~/.pass-cli/vault.enc @@ -991,8 +998,8 @@ Settings: ``` **Output (Invalid):** -``` -❌ Configuration has errors: +```text +[ERROR] Configuration has errors: Line 12: Invalid terminal width: 0 (must be between 1-10000) Line 25: Duplicate keybinding: Ctrl+S assigned to both 'save' and 'search' @@ -1001,43 +1008,33 @@ Line 34: Unknown action: 'invalid_action' Fix these errors and run 'config validate' again. ``` -##### config reset +##### Config Reset Reset configuration to default values. **Synopsis:** ```bash -pass-cli config reset [flags] +pass-cli config reset ``` -**Flags:** -| Flag | Type | Description | -|------|------|-------------| -| `--force`, `-f` | bool | Skip confirmation prompt | - **Description:** -Overwrites existing config file with defaults. Requires confirmation unless `--force` flag is used. +Resets the configuration file to default values. Creates a backup of your current config at `.backup` before overwriting. **Examples:** ```bash -# Reset with confirmation +# Reset config to defaults (creates backup automatically) pass-cli config reset - -# Reset without confirmation -pass-cli config reset --force ``` **Output:** -``` -⚠️ This will overwrite your current configuration. -Are you sure you want to reset to defaults? (y/n): y - -✅ Configuration reset to defaults: /home/user/.pass-cli/config.yml +```text +Config file backed up to /home/user/.pass-cli/config.yml.backup +Config file reset to defaults at /home/user/.pass-cli/config.yml ``` #### See Also -- [Configuration Reference]({{< relref "configuration" >}}) - Configuration file reference +- [Configuration Reference](configuration) - Configuration file reference --- @@ -1053,7 +1050,7 @@ pass-cli keychain #### Subcommands -##### keychain enable +##### Keychain Enable Enable keychain integration for an existing vault by storing the master password in the system keychain. @@ -1083,15 +1080,15 @@ pass-cli keychain enable --force ``` **Output:** -``` +```text Master password: ******** -✅ Keychain integration enabled for vault at /home/user/.pass-cli/vault.enc +[OK] Keychain integration enabled for vault at /home/user/.pass-cli/vault.enc Future commands will not prompt for password when keychain is available. ``` -##### keychain status +##### Keychain Status Display keychain integration status for the current vault. @@ -1114,34 +1111,34 @@ pass-cli keychain status **Output Examples:** **When keychain is enabled:** -``` +```text Keychain Status for /home/user/.pass-cli/vault.enc: -✓ System Keychain: Available (keychain) -✓ Password Stored: Yes -✓ Backend: keychain +[PASS] System Keychain: Available (keychain) +[PASS] Password Stored: Yes +[PASS] Backend: keychain Your vault password is securely stored in the system keychain. Future commands will not prompt for password. ``` **When keychain is available but not enabled:** -``` +```text Keychain Status for /home/user/.pass-cli/vault.enc: -✓ System Keychain: Available (wincred) -✗ Password Stored: No +[PASS] System Keychain: Available (wincred) +[FAIL] Password Stored: No The system keychain is available but no password is stored for this vault. Run 'pass-cli keychain enable' to store your password and skip future prompts. ``` **When keychain is not available:** -``` +```text Keychain Status for /home/user/.pass-cli/vault.enc: -✗ System Keychain: Not available on this platform -✗ Password Stored: N/A +[FAIL] System Keychain: Not available on this platform +[FAIL] Password Stored: N/A System keychain is not accessible. You will be prompted for password on each command. ``` @@ -1166,7 +1163,7 @@ pass-cli vault #### Subcommands -##### vault remove +##### Vault Remove Permanently delete a vault file and its associated keychain entry. @@ -1181,7 +1178,7 @@ Permanently deletes: 2. The master password from the system keychain 3. Any orphaned keychain entries -**⚠️ WARNING:** This operation is irreversible. All stored credentials will be lost. Ensure you have backups before proceeding. +**[WARNING] WARNING:** This operation is irreversible. All stored credentials will be lost. Ensure you have backups before proceeding. **Arguments:** @@ -1209,17 +1206,17 @@ pass-cli vault remove /path/to/vault.enc --force ``` **Output:** -``` -⚠️ WARNING: This will permanently delete the vault and all stored credentials. +```text +[WARNING] WARNING: This will permanently delete the vault and all stored credentials. Are you sure you want to remove /home/user/.pass-cli/vault.enc? (y/n): y -✅ Vault removed successfully: +[OK] Vault removed successfully: • Vault file deleted • Keychain entry removed • Orphaned entries cleaned up ``` -##### vault backup +##### Vault Backup Manage vault backups for disaster recovery. @@ -1228,7 +1225,7 @@ Manage vault backups for disaster recovery. pass-cli vault backup ``` -###### vault backup create +###### Vault Backup Create Create a timestamped manual backup of the vault. @@ -1256,13 +1253,13 @@ pass-cli vault backup create --verbose ``` **Output:** -``` -✅ Manual backup created successfully: +```text +[OK] Manual backup created successfully: /home/user/.pass-cli/vault.enc.20251112-143022.manual.backup Size: 2.45 MB ``` -###### vault backup restore +###### Vault Backup Restore Restore vault from the most recent backup. @@ -1274,7 +1271,7 @@ pass-cli vault backup restore [flags] **Description:** Automatically selects the newest valid backup (automatic or manual) and restores it. Considers both `vault.enc.backup` (automatic) and `vault.enc.*.manual.backup` files. -**⚠️ WARNING:** This command overwrites your current vault file with the backup. +**[WARNING] WARNING:** This command overwrites your current vault file with the backup. **Flags:** @@ -1300,18 +1297,18 @@ pass-cli vault backup restore --verbose ``` **Output:** -``` +```text Found backup: /home/user/.pass-cli/vault.enc.20251112-143022.manual.backup Backup age: 2 hours ago Size: 2.45 MB -⚠️ This will overwrite your current vault file. +[WARNING] This will overwrite your current vault file. Are you sure you want to restore from this backup? (y/n): y -✅ Vault restored successfully from backup +[OK] Vault restored successfully from backup ``` -###### vault backup info +###### Vault Backup Info View backup status and information. @@ -1344,20 +1341,20 @@ pass-cli vault backup info --verbose ``` **Output:** -``` +```text 📦 Backup Status for: /home/user/.pass-cli/vault.enc Automatic Backup: - ✅ vault.enc.backup + [OK] vault.enc.backup Size: 2.45 MB Created: 1 day ago (2025-11-11 14:30:22) Manual Backups: - ✅ vault.enc.20251112-143022.manual.backup ← Would be used for restore + [OK] vault.enc.20251112-143022.manual.backup ← Would be used for restore Size: 2.45 MB Created: 2 hours ago (2025-11-12 14:30:22) - ✅ vault.enc.20251110-091545.manual.backup + [OK] vault.enc.20251110-091545.manual.backup Size: 2.40 MB Created: 2 days ago (2025-11-10 09:15:45) @@ -1366,7 +1363,7 @@ Total disk space: 7.30 MB ``` **See Also:** -- [Backup & Restore Guide]({{< relref "../02-guides/backup-restore" >}}) - Comprehensive backup guide +- [Backup & Restore Guide](../02-guides/backup-restore) - Comprehensive backup guide --- @@ -1421,24 +1418,24 @@ PASS_AUDIT_LOG=/custom/audit.log pass-cli verify-audit #### Output (All Valid) -``` +```text 🔍 Verifying audit log: /home/user/.pass-cli/audit.log -✅ Audit log verification complete: +[OK] Audit log verification complete: Total entries: 127 Valid entries: 127 Invalid entries: 0 Tampered entries: 0 -Audit log integrity: VERIFIED ✅ +Audit log integrity: VERIFIED [OK] ``` #### Output (Tampered Detected) -``` +```text 🔍 Verifying audit log: /home/user/.pass-cli/audit.log -⚠️ Audit log verification failed: +[WARNING] Audit log verification failed: Total entries: 127 Valid entries: 123 Invalid entries: 4 @@ -1450,7 +1447,7 @@ Invalid entries detected: Line 89: Invalid JSON structure Line 102: Missing required fields -Audit log integrity: FAILED ❌ +Audit log integrity: FAILED [ERROR] CRITICAL: Audit log may have been tampered with or corrupted. Review the log file and investigate the flagged entries. @@ -1489,39 +1486,130 @@ Review the log file and investigate the flagged entries. #### See Also -- [Audit Logging]({{< relref "security-architecture#audit-logging" >}}) - Audit logging architecture -- [Security Operations]({{< relref "../05-operations/security-operations" >}}) - Security best practices +- [Audit Logging](security-architecture#audit-logging) - Audit logging architecture +- [Security Operations](../05-operations/security-operations) - Security best practices --- -**Use Cases:** -- Decommissioning a vault that's no longer needed +### doctor - System Health Check + +Run diagnostic checks on your pass-cli installation. + +#### Synopsis + +```bash +pass-cli doctor [flags] +``` + +#### Description + +Performs comprehensive health checks on your vault, configuration, keychain integration, and backups. Useful for troubleshooting issues or verifying system state. + +**Checks Performed:** +1. **Version Check**: Compares installed version against latest release +2. **Vault Check**: Verifies vault file exists and has correct permissions 3. **Config Check**: Validates configuration syntax and settings 4. **Keychain Check**: Tests OS keychain integration status 5. **Backup Check**: Verifies backup files exist and are accessible -**Exit Codes**: -- `0` = All checks passed (HEALTHY) -- `1` = Warnings detected (review recommended) -- `2` = Errors detected (action required) +#### Flags + +| Flag | Type | Description | +|------|------|-------------| +| `--json` | bool | Output results as JSON | +| `--quiet` | bool | Only show warnings and errors | +| `--verbose`, `-v` | bool | Verbose output with detailed check execution | -**Example Output**: +#### Examples + +```bash +# Run all health checks +pass-cli doctor + +# Output as JSON (for scripts) +pass-cli doctor --json + +# Show only problems +pass-cli doctor --quiet + +# Verbose mode (detailed check execution) +pass-cli doctor --verbose ``` -Health Check Results -==================== -✓ Version: v1.2.3 (up to date) -✓ Vault: vault.enc accessible (600 permissions) -✓ Config: Valid configuration -✓ Keychain: Integration active -✓ Backup: 3 backup files found +#### Exit Codes + +| Code | Meaning | +|------|---------| +| 0 | All checks passed (HEALTHY) | +| 1 | Warnings detected (review recommended) | +| 2 | Errors detected (action required) | + +#### See Also + +- [Health Checks Guide](../05-operations/health-checks) - Detailed documentation and troubleshooting + +--- + +### tui - Interactive Terminal Interface -Overall Status: HEALTHY +Launch the interactive terminal user interface. + +#### Synopsis + +```bash +pass-cli tui +pass-cli # Also launches TUI when no command specified ``` -See [Health Checks]({{< relref "../05-operations/health-checks" >}}) for detailed documentation and troubleshooting. +#### Description + +Opens an interactive terminal interface for browsing and managing credentials. The TUI provides keyboard-driven navigation, search, and credential operations without memorizing CLI commands. -#### Why does doctor report orphaned keychain entries? +**Features:** +- Sidebar navigation with credential tree +- Detail panel with credential information +- Search and filter credentials +- Add, edit, and delete credentials +- Copy passwords to clipboard +- Usage statistics display + +#### Flags + +None. + +#### Examples + +```bash +# Launch TUI explicitly +pass-cli tui + +# Launch TUI (default when no command given) +pass-cli +``` + +#### Keyboard Shortcuts + +| Key | Action | +|-----|--------| +| `Tab` | Switch between panels | +| `Enter` | Select/expand item | +| `Esc` | Cancel/go back | +| `/` | Search | +| `a` | Add credential | +| `e` | Edit credential | +| `d` | Delete credential | +| `c` | Copy password | +| `q` | Quit | + +#### See Also + +- [TUI Guide](../02-guides/tui-guide) - Complete TUI documentation and customization + +--- + +### Troubleshooting + +#### Why Does Doctor Report Orphaned Keychain Entries? **Symptom**: Doctor reports "⚠ Keychain: Orphaned entry detected" @@ -1530,51 +1618,27 @@ See [Health Checks]({{< relref "../05-operations/health-checks" >}}) for detaile - Vault path changed but old keychain entry wasn't cleaned up - Multiple vaults were created and old entries weren't removed -**Impact**: Low - orphaned entries don't affect current vault operations, but clutter the keychain - **Solutions**: -**Option 1: Clean up manually** (macOS): +**macOS**: ```bash -# Open Keychain Access open -a "Keychain Access" - -# Search for "pass-cli" -# Delete old/orphaned entries +# Search for "pass-cli" and delete old entries ``` -**Option 2: Clean up manually** (Windows): +**Windows**: ```powershell -# Open Credential Manager control /name Microsoft.CredentialManager - -# Navigate to "Windows Credentials" -# Remove old "pass-cli" entries +# Navigate to "Windows Credentials" and remove old "pass-cli" entries ``` -**Option 3: Clean up manually** (Linux): +**Linux**: ```bash -# List all pass-cli keychain entries secret-tool search service pass-cli - -# Delete specific entry -secret-tool clear service pass-cli vault /old/path/vault.enc -``` - -**Prevention**: When deleting or moving vaults, remove the keychain entry first using your OS credential manager: - -```bash -# Windows -cmdkey /delete:pass-cli - -# macOS -security delete-generic-password -s "pass-cli" -a "$USER" - -# Linux secret-tool clear service pass-cli vault /old/path/vault.enc ``` -#### What if first-run detection doesn't trigger? +#### What If First-Run Detection Doesn't Trigger? **Expected Behavior**: When running vault-requiring commands (`add`, `get`, `list`, `update`, `delete`) for the first time without an existing vault, pass-cli offers guided initialization. @@ -1633,12 +1697,12 @@ tty # Should show /dev/pts/X or similar, not "not a tty" pass-cli init ``` -See [Quick Start Guide]({{< relref "../01-getting-started/quick-start" >}}) for complete first-run documentation. +See [Quick Start Guide](../01-getting-started/quick-start) for complete first-run documentation. ## Getting Help - Run any command with `--help` flag - See [pass-cli Documentation](https://ari1110.github.io/pass-cli/) for overview -- Check [Troubleshooting]({{< relref "../04-troubleshooting/_index" >}}) for common issues +- Check [Troubleshooting](../04-troubleshooting/_index) for common issues - Visit [GitHub Issues](https://github.com/ari1110/pass-cli/issues) diff --git a/docs/03-reference/configuration.md b/docs/03-reference/configuration.md index bb9efbd4..21c96177 100644 --- a/docs/03-reference/configuration.md +++ b/docs/03-reference/configuration.md @@ -6,7 +6,7 @@ toc: true Complete configuration options for pass-cli including vault location, clipboard settings, TUI theme, and keyboard shortcuts. -**Configuration Location** (added January 2025): +**Configuration Location**: - **All platforms**: `~/.pass-cli/config.yml` **Management Commands**: diff --git a/docs/03-reference/known-limitations.md b/docs/03-reference/known-limitations.md index 7418e365..8c1907f3 100644 --- a/docs/03-reference/known-limitations.md +++ b/docs/03-reference/known-limitations.md @@ -60,8 +60,8 @@ password := passwordField.GetText() // Returns string (immutable) | Aspect | CLI Mode | TUI Mode | |--------|----------|----------| | **Password Input** | `term.ReadPassword()` → `[]byte` | `InputField.GetText()` → `string` | -| **Memory Clearing** | ✅ Immediate (deferred) | ⚠️ Relies on Go GC | -| **String Conversion** | ❌ Never converted | ⚠️ Converted once for vault ops | +| **Memory Clearing** | [OK] Immediate (deferred) | [WARNING] Relies on Go GC | +| **String Conversion** | [ERROR] Never converted | [WARNING] Converted once for vault ops | | **Security Level** | High | Medium-High | | **Usability** | Low (no visual feedback) | High (strength indicator, edit, etc.) | @@ -106,9 +106,9 @@ defer crypto.ClearBytes(passwordBytes) ``` **What We Don't Do**: -- ❌ Clear the original string (impossible in Go) -- ❌ Avoid string conversion (tview API limitation) -- ❌ Use custom input widget (out of scope for current release) +- [ERROR] Clear the original string (impossible in Go) +- [ERROR] Avoid string conversion (tview API limitation) +- [ERROR] Use custom input widget (out of scope for current release) ### Test Verification @@ -123,8 +123,8 @@ go test -v ./tests/security -run TestTerminalInputSecurity ``` **Expected Results**: -- ✅ CLI mode: passwords cleared immediately -- ⚠️ TUI mode: string lingers until GC (documented limitation) +- [OK] CLI mode: passwords cleared immediately +- [WARNING] TUI mode: string lingers until GC (documented limitation) ### Related Issues diff --git a/docs/03-reference/migration.md b/docs/03-reference/migration.md index 4fb81de6..788bdbb5 100644 --- a/docs/03-reference/migration.md +++ b/docs/03-reference/migration.md @@ -3,14 +3,14 @@ title: "Migration" weight: 5 toc: true --- -Guide for upgrading Pass-CLI vaults and adapting to security hardening changes (January 2025 release). +Guide for upgrading Pass-CLI vaults and adapting to security hardening changes introduced in v0.3.0. ![Version](https://img.shields.io/github/v/release/ari1110/pass-cli?label=Version) ![Last Updated](https://img.shields.io/github/last-commit/ari1110/pass-cli?path=docs&label=Last%20Updated) ## Overview -The January 2025 security hardening release introduces several important changes: +The v0.3.0 security hardening release introduces several important changes: 1. **Vault Location Configuration**: `--vault` flag removed, use config file instead 2. **Increased PBKDF2 Iterations**: 100,000 → 600,000 (6x stronger) @@ -198,26 +198,9 @@ pass-cli get github **Time Required**: ~5-10 minutes for 20 credentials. -### Option B: In-Place Migration (Future Feature) +### Option B: In-Place Migration (Planned) -> **⚠️ WARNING**: This feature is **NOT YET IMPLEMENTED**. The `pass-cli migrate` command does not currently exist. Use Option A (Manual Migration) instead. - -**Status**: Not yet implemented. Planned for future release. - -**Planned Command** (for future reference only): -```bash -# Future: Migrate vault to 600k iterations in-place -pass-cli migrate --iterations 600000 - -# Future: Migrate with audit logging enabled -pass-cli migrate --iterations 600000 --enable-audit -``` - -**Expected Behavior**: -- Reads existing vault with current iteration count -- Re-encrypts all credentials with 600k iterations -- Creates backup automatically -- Atomic operation (rollback on failure) +> **Note**: An automated `pass-cli migrate` command is planned for a future release. Until then, use Option A (Fresh Vault) or Option C (Hybrid Approach). ### Option C: Hybrid Approach (Keep Old Vault) @@ -225,37 +208,38 @@ pass-cli migrate --iterations 600000 --enable-audit **Steps**: -1. **Create new vault in custom location**: +1. **Create new vault in separate location**: ```bash - # Create config for new vault - mkdir -p ~/.pass-cli - echo "vault_path: ~/.pass-cli/vault-new.enc" > ~/.pass-cli/config-new.yml + # Backup current config + cp ~/.pass-cli/config.yml ~/.pass-cli/config.yml.backup + + # Point config to new vault location + echo "vault_path: ~/.pass-cli/vault-new.enc" > ~/.pass-cli/config.yml - # Initialize new vault - pass-cli --config ~/.pass-cli/config-new.yml init --enable-audit + # Initialize new vault (uses 600k iterations) + pass-cli init --enable-audit ``` 2. **Add new credentials to new vault**: ```bash - pass-cli --config ~/.pass-cli/config-new.yml add newservice + pass-cli add newservice ``` -3. **Keep old vault for existing credentials**: +3. **Switch back to old vault when needed**: ```bash - # Use default config (points to ~/.pass-cli/vault.enc) + # Restore original config to access old vault + cp ~/.pass-cli/config.yml.backup ~/.pass-cli/config.yml pass-cli get oldservice ``` -4. **Switch to new vault when ready**: +4. **Promote new vault when ready**: ```bash - # Backup old vault - mv ~/.pass-cli/vault.enc ~/.pass-cli/vault-old-backup.enc + # Point config back to new vault + echo "vault_path: ~/.pass-cli/vault-new.enc" > ~/.pass-cli/config.yml - # Promote new vault to default + # Or rename new vault to default location mv ~/.pass-cli/vault-new.enc ~/.pass-cli/vault.enc - - # Update default config (or remove custom config file) - rm ~/.pass-cli/config-new.yml + rm ~/.pass-cli/config.yml # Use default location ``` ## Backward Compatibility @@ -263,39 +247,39 @@ pass-cli migrate --iterations 600000 --enable-audit ### Vault File Format **100k Iteration Vaults**: -- ✅ Fully supported -- ✅ Auto-detected by iteration count in metadata -- ✅ No performance degradation -- ✅ Can be used alongside 600k vaults +- [OK] Fully supported +- [OK] Auto-detected by iteration count in metadata +- [OK] No performance degradation +- [OK] Can be used alongside 600k vaults **600k Iteration Vaults**: -- ⚠️ **Not compatible with older Pass-CLI versions** (pre-January 2025) -- ✅ Auto-detected by iteration count in metadata -- ✅ Future-proof format +- [WARNING] **Not compatible with Pass-CLI versions before v0.3.0** +- [OK] Auto-detected by iteration count in metadata +- [OK] Future-proof format ### Password Policy **Existing Credentials**: -- ✅ Old passwords (not meeting policy) remain valid -- ⚠️ Policy enforced only when creating/updating credentials -- ✅ No forced password changes +- [OK] Old passwords (not meeting policy) remain valid +- [WARNING] Policy enforced only when creating/updating credentials +- [OK] No forced password changes **New/Updated Credentials**: -- ⚠️ Must meet new policy requirements -- ✅ Real-time validation with helpful error messages -- ✅ TUI shows password strength indicator +- [WARNING] Must meet new policy requirements +- [OK] Real-time validation with helpful error messages +- [OK] TUI shows password strength indicator ### Cross-Version Compatibility Matrix -| Vault Type | Pass-CLI (Old) | Pass-CLI (Jan 2025) | +| Vault Type | Pass-CLI < v0.3.0 | Pass-CLI v0.3.0+ | |------------|----------------|---------------------| -| 100k iterations | ✅ Read/Write | ✅ Read/Write | -| 600k iterations | ❌ Incompatible | ✅ Read/Write | -| With audit logging | ❌ Incompatible | ✅ Read/Write | +| 100k iterations | [OK] Read/Write | [OK] Read/Write | +| 600k iterations | [ERROR] Incompatible | [OK] Read/Write | +| With audit logging | [ERROR] Incompatible | [OK] Read/Write | ## Troubleshooting -### Problem: "Password does not meet requirements" +### Problem: "Password Does Not Meet Requirements" **Symptom**: Error when creating/updating credentials. @@ -314,7 +298,7 @@ Admin#2025$Password pass-cli generate # Automatically meets policy requirements ``` -### Problem: Vault unlock is slower after upgrade +### Problem: Vault Unlock Is Slower After Upgrade **Symptom**: Vault unlock takes 50-100ms instead of 15-20ms. @@ -327,7 +311,7 @@ pass-cli generate # Automatically meets policy requirements - Mid-range CPU (2018-2022): 200-500ms - Older CPU (2015-2017): 500-1000ms -### Problem: Cannot downgrade to older Pass-CLI version +### Problem: Cannot Downgrade to Older Pass-CLI Version **Symptom**: "Invalid vault format" error when using old Pass-CLI with new vault. @@ -336,7 +320,7 @@ pass-cli generate # Automatically meets policy requirements 2. Or create new vault with old Pass-CLI version 3. Or upgrade to latest Pass-CLI version -### Problem: Audit log verification fails +### Problem: Audit Log Verification Fails **Symptom**: `pass-cli verify-audit` reports HMAC verification failures. @@ -357,7 +341,7 @@ mv ~/.pass-cli/audit.log ~/.pass-cli/audit.log.corrupted pass-cli init --enable-audit ``` -### Problem: "Vault file corrupted" after migration +### Problem: "Vault File Corrupted" After Migration **Symptom**: Cannot unlock vault after re-initialization. @@ -374,15 +358,15 @@ pass-cli list ## FAQ -### Q: Do I have to migrate? +### Q: Do I Have to Migrate? **A**: No. Existing vaults with 100k iterations continue to work indefinitely. Migration is optional for users wanting stronger security. -### Q: Will migration delete my credentials? +### Q: Will Migration Delete My Credentials? **A**: No. Migration is non-destructive. Always creates backup before changes. Credentials are preserved. -### Q: How long does migration take? +### Q: How Long Does Migration Take? **A**: Depends on vault size: - Small vault (< 20 credentials): 5-10 minutes @@ -391,31 +375,31 @@ pass-cli list Time includes manual re-entry of credentials. Future in-place migration will be automatic (seconds). -### Q: Can I migrate back to 100k iterations? +### Q: Can I Migrate Back to 100k Iterations? **A**: Technically yes (create new vault), but not recommended. Forward migration only makes sense for security. -### Q: Does audit logging slow down vault operations? +### Q: Does Audit Logging Slow Down Vault Operations? **A**: Minimal impact (~1-2ms per operation). Audit logging uses asynchronous writes and graceful degradation. -### Q: What if I forget my master password after migration? +### Q: What If I Forget My Master Password After Migration? **A**: If you enabled BIP39 recovery during `pass-cli init`, you can recover using `pass-cli change-password --recover` and your 24-word recovery phrase. If you used `--no-recovery` or are on an older vault without recovery, the vault is unrecoverable. Keep master password and recovery phrase backups secure. -### Q: Are audit logs encrypted? +### Q: Are Audit Logs Encrypted? **A**: Audit logs are **not encrypted** (they contain service names, not passwords). Logs are **tamper-evident** via HMAC signatures. If encryption is required, use full-disk encryption. -### Q: Can I disable audit logging after enabling? +### Q: Can I Disable Audit Logging After Enabling? **A**: Yes, but audit logs remain on disk. You can manually delete old logs. Future releases may add a command to disable audit logging cleanly. -### Q: Will old Pass-CLI versions work with migrated vaults? +### Q: Will Old Pass-CLI Versions Work With Migrated Vaults? -**A**: No. 600k iteration vaults require January 2025+ Pass-CLI versions. Keep old vault backup if you need old version compatibility. +**A**: No. 600k iteration vaults require Pass-CLI v0.3.0 or later. Keep old vault backup if you need compatibility with older versions. -### Q: Is there a tool to convert vault format? +### Q: Is There a Tool to Convert Vault Format? **A**: Not yet. Currently requires manual re-initialization. In-place migration planned for future release. @@ -423,28 +407,28 @@ Time includes manual re-entry of credentials. Future in-place migration will be ### Before Migration -1. ✅ Backup vault file: `cp ~/.pass-cli/vault.enc ~/backup/` -2. ✅ Export credentials: `pass-cli list --format json > backup.json` -3. ✅ Test new Pass-CLI version with test vault first -4. ✅ Read this migration guide completely +1. [OK] Backup vault file: `cp ~/.pass-cli/vault.enc ~/backup/` +2. [OK] Export credentials: `pass-cli list --format json > backup.json` +3. [OK] Test new Pass-CLI version with test vault first +4. [OK] Read this migration guide completely ### During Migration -1. ✅ Use `pass-cli generate` command for policy-compliant passwords -2. ✅ Verify each credential after adding -3. ✅ Test vault unlock multiple times -4. ✅ Enable audit logging for compliance needs +1. [OK] Use `pass-cli generate` command for policy-compliant passwords +2. [OK] Verify each credential after adding +3. [OK] Test vault unlock multiple times +4. [OK] Enable audit logging for compliance needs ### After Migration -1. ✅ Verify all credentials accessible -2. ✅ Test credential retrieval in scripts -3. ✅ Update documentation/runbooks with new requirements -4. ✅ Delete old vault backup after 30-day grace period -5. ✅ Run `pass-cli verify-audit` monthly (if audit logging enabled) +1. [OK] Verify all credentials accessible +2. [OK] Test credential retrieval in scripts +3. [OK] Update documentation/runbooks with new requirements +4. [OK] Delete old vault backup after 30-day grace period +5. [OK] Run `pass-cli verify-audit` monthly (if audit logging enabled) ## Support -- **Documentation**: [Security Architecture]({{< relref "security-architecture" >}}), [Command Reference]({{< relref "command-reference" >}}) +- **Documentation**: [Security Architecture](security-architecture), [Command Reference](command-reference) - **Issues**: [GitHub Issues](https://github.com/ari1110/pass-cli/issues) diff --git a/docs/03-reference/security-architecture.md b/docs/03-reference/security-architecture.md index 80fadc3a..f8b7ad8f 100644 --- a/docs/03-reference/security-architecture.md +++ b/docs/03-reference/security-architecture.md @@ -14,7 +14,7 @@ Pass-CLI is designed with security as the primary concern. All credentials are e ### Key Security Features - **AES-256-GCM Encryption**: Military-grade authenticated encryption -- **PBKDF2 Key Derivation**: 600,000 iterations with SHA-256 (hardened, January 2025) +- **PBKDF2 Key Derivation**: 600,000 iterations with SHA-256 (hardened) - **BIP39 Recovery Phrase**: 24-word mnemonic for vault password recovery (industry-standard) - **System Keychain Integration**: Secure master password storage - **Offline-First Design**: No network calls, no cloud dependencies @@ -49,7 +49,7 @@ Pass-CLI is designed with security as the primary concern. All credentials are e - **Algorithm**: Password-Based Key Derivation Function 2 - **Hash Function**: SHA-256 -- **Iterations**: 600,000 (increased from 100,000 in January 2025) +- **Iterations**: 600,000 (hardened from 100,000) - **Salt Length**: 32 bytes (256 bits) - **Output Length**: 32 bytes (256 bits) - **Implementation**: `golang.org/x/crypto/pbkdf2` @@ -57,7 +57,7 @@ Pass-CLI is designed with security as the primary concern. All credentials are e #### Key Derivation Process -``` +```text Master Key = PBKDF2( password = user's master password, salt = unique 32-byte random salt, @@ -74,7 +74,7 @@ Master Key = PBKDF2( 3. **Standard**: NIST recommended for password-based cryptography 4. **Deterministic**: Same password + salt = same key -#### Migration from 100k to 600k Iterations +#### Migration From 100k to 600k Iterations - **Backward Compatibility**: Vaults with 100k iterations continue to work - **Automatic Detection**: Iteration count stored in vault metadata @@ -86,22 +86,22 @@ Master Key = PBKDF2( #### Encrypting Credentials 1. **Generate Salt** (first time only) - ``` + ```text salt = crypto/rand.Read(32 bytes) ``` 2. **Derive Encryption Key** - ``` + ```text key = PBKDF2(master_password, salt, 600000, SHA256, 32) ``` 3. **Generate Nonce** - ``` + ```text nonce = crypto/rand.Read(12 bytes) // Per-encryption unique ``` 4. **Encrypt Data** - ``` + ```text ciphertext = AES-256-GCM.Encrypt( plaintext = JSON(credentials), key = derived_key, @@ -111,7 +111,7 @@ Master Key = PBKDF2( ``` 5. **Combine Components** - ``` + ```text vault_file = nonce || ciphertext || auth_tag ``` @@ -121,7 +121,7 @@ Master Key = PBKDF2( 2. **Read Vault File** and extract salt, nonce, ciphertext 3. **Derive Key** using PBKDF2 with stored salt 4. **Decrypt and Verify** - ``` + ```text plaintext = AES-256-GCM.Decrypt( ciphertext, key, @@ -188,7 +188,7 @@ Pass-CLI integrates with your operating system's secure credential storage to sa ### Master Password Requirements -**Since January 2025** - Password policy enforced for both vault and credential passwords: +Password policy enforced for both vault and credential passwords: - **Minimum Length**: 12 characters (enforced) - **Uppercase Letter**: At least one required @@ -201,18 +201,18 @@ Pass-CLI integrates with your operating system's secure credential storage to sa ### Master Password Security **What Pass-CLI Does:** -- ✅ Stores master password in system keychain -- ✅ Clears password from memory after use -- ✅ Never writes password to disk in plaintext -- ✅ Never logs password +- [OK] Stores master password in system keychain +- [OK] Clears password from memory after use +- [OK] Never writes password to disk in plaintext +- [OK] Never logs password **What You Should Do:** -- ✅ Use a unique master password (not reused elsewhere) -- ✅ Make it strong (20+ characters or passphrase) -- ✅ Store backup securely (password manager, safe place) -- ✅ Save your BIP39 recovery phrase offline (paper, safe) -- ❌ Don't share your master password -- ❌ Don't write it in plaintext files +- [OK] Use a unique master password (not reused elsewhere) +- [OK] Make it strong (20+ characters or passphrase) +- [OK] Store backup securely (password manager, safe place) +- [OK] Save your BIP39 recovery phrase offline (paper, safe) +- [ERROR] Don't share your master password +- [ERROR] Don't write it in plaintext files ### BIP39 Recovery Phrase @@ -257,21 +257,21 @@ pass-cli change-password --recover #### Storage Recommendations **Secure Storage** (Recommended): -- ✅ Write on paper and store in physical safe -- ✅ Safety deposit box -- ✅ Fireproof/waterproof document safe -- ✅ Split across multiple secure locations (advanced) +- [OK] Write on paper and store in physical safe +- [OK] Safety deposit box +- [OK] Fireproof/waterproof document safe +- [OK] Split across multiple secure locations (advanced) **Insecure Storage** (Avoid): -- ❌ Digital notes apps -- ❌ Cloud storage (Dropbox, Google Drive) -- ❌ Email or messaging apps -- ❌ Screenshots or photos -- ❌ Password managers (defeats the purpose) +- [ERROR] Digital notes apps +- [ERROR] Cloud storage (Dropbox, Google Drive) +- [ERROR] Email or messaging apps +- [ERROR] Screenshots or photos +- [ERROR] Password managers (defeats the purpose) **Important**: Anyone with your 24-word phrase can access your vault. Protect it as carefully as your master password. -For detailed recovery procedures, see [Recovery Phrase Guide](../../02-guides/recovery-phrase.md). +For detailed recovery procedures, see [Recovery Phrase Guide](../02-guides/recovery-phrase.md). ## Data Storage Security @@ -289,7 +289,7 @@ Vault files are created with restricted permissions: ### Vault File Structure -``` +```text +------------------+ | Salt (32 bytes) | ← PBKDF2 salt +------------------+ @@ -328,11 +328,11 @@ Before each vault save operation, pass-cli creates an N-1 backup: **Security Implications**: -- ⚠️ **Backup files contain unencrypted vault structure**: `vault.enc.backup` is AES-256-GCM encrypted (same as vault), but still sensitive -- ✅ **File permissions**: Backup automatically inherits vault permissions (0600 - owner read/write only) -- ⚠️ **Temporary files**: `vault.enc.tmp.*` files may remain if process crashes (cleaned up automatically on next save) -- ✅ **Automatic cleanup**: Backup removed after successful unlock, minimizing exposure window -- ⚠️ **Contains N-1 state**: Backup has previous vault version (not current), may contain deleted credentials +- [WARNING] **Backup files contain unencrypted vault structure**: `vault.enc.backup` is AES-256-GCM encrypted (same as vault), but still sensitive +- [OK] **File permissions**: Backup automatically inherits vault permissions (0600 - owner read/write only) +- [WARNING] **Temporary files**: `vault.enc.tmp.*` files may remain if process crashes (cleaned up automatically on next save) +- [OK] **Automatic cleanup**: Backup removed after successful unlock, minimizing exposure window +- [WARNING] **Contains N-1 state**: Backup has previous vault version (not current), may contain deleted credentials **Manual Backup Recommendations**: @@ -354,7 +354,7 @@ chmod 600 ~/backups/vault-*.enc ### Audit Logging (Optional) -**Since January 2025** - Tamper-evident audit trail for vault operations: +Tamper-evident audit trail for vault operations: - **Opt-In**: Disabled by default, enable with `--enable-audit` flag - **HMAC Signatures**: HMAC-SHA256 signatures for tamper detection @@ -393,51 +393,51 @@ pass-cli verify-audit ### What Pass-CLI Protects Against -✅ **Offline Attacks** +[OK] **Offline Attacks** - Vault file encryption protects against offline brute-force - PBKDF2 slows down password cracking (600,000 iterations) - No plaintext credentials stored anywhere -✅ **File System Compromise** +[OK] **File System Compromise** - Encrypted vault remains secure even if file is stolen - File permissions prevent unauthorized local access -✅ **Process Memory Dumps** +[OK] **Process Memory Dumps** - Sensitive data cleared from memory after use - Master password not kept in memory permanently -✅ **Accidental Disclosure** +[OK] **Accidental Disclosure** - No cloud storage = no cloud breach risk - No network calls = no network interception -✅ **Unauthorized Local Access** +[OK] **Unauthorized Local Access** - System keychain protects master password - File permissions restrict vault access ### What Pass-CLI Does NOT Protect Against -❌ **Malware on Your Machine** +[ERROR] **Malware on Your Machine** - Keyloggers can capture master password when entered - Memory scrapers can extract decrypted credentials - Root/admin access bypasses file permissions -❌ **Physical Access Attacks** +[ERROR] **Physical Access Attacks** - Attacker with physical access can copy vault file - Vault encryption is only protection (strong password essential) -❌ **Side-Channel Attacks** +[ERROR] **Side-Channel Attacks** - Timing attacks, power analysis not mitigated - Not designed for hostile multi-user systems -❌ **Weak Master Passwords** +[ERROR] **Weak Master Passwords** - PBKDF2 slows attacks but doesn't prevent them - Short/common passwords can be brute-forced -❌ **Social Engineering** +[ERROR] **Social Engineering** - Cannot protect against phishing for master password - User education essential -❌ **TUI Display Security (Interactive Mode)** +[ERROR] **TUI Display Security (Interactive Mode)** - Shoulder surfing: Credentials visible on screen in TUI mode - Screen recording: TUI displays service names and details - Password visibility toggle: `Ctrl+P` shows plaintext passwords @@ -486,9 +486,9 @@ pass-cli verify-audit ### Out of Scope -- ✗ Cloud synchronization -- ✗ Multi-user support -- ✗ Hardware security module (HSM) integration -- ✗ Biometric authentication -- ✗ Two-factor authentication for master password +- [FAIL] Cloud synchronization +- [FAIL] Multi-user support +- [FAIL] Hardware security module (HSM) integration +- [FAIL] Biometric authentication +- [FAIL] Two-factor authentication for master password diff --git a/docs/04-troubleshooting/faq.md b/docs/04-troubleshooting/faq.md index 74b3ae67..2dad4940 100644 --- a/docs/04-troubleshooting/faq.md +++ b/docs/04-troubleshooting/faq.md @@ -78,10 +78,10 @@ You'll be prompted to enter 6 words from your 24-word recovery phrase to verify **Q: Is my data sent to the cloud?** A: No. Pass-CLI: -- ✅ Works completely offline -- ✅ Never makes network calls -- ✅ Stores everything locally -- ✅ No telemetry or tracking +- [OK] Works completely offline +- [OK] Never makes network calls +- [OK] Stores everything locally +- [OK] No telemetry or tracking --- @@ -114,7 +114,7 @@ pass-cli list --format json | jq '.[] | .service' **Q: How secure is Pass-CLI?** -A: See [Security Architecture]({{< relref "../03-reference/security-architecture" >}}) for full details: +A: See [Security Architecture](../03-reference/security-architecture) for full details: - AES-256-GCM encryption - PBKDF2 key derivation (600,000 iterations as of January 2025) - System keychain integration diff --git a/docs/04-troubleshooting/vault.md b/docs/04-troubleshooting/vault.md index 246c1879..d4b1d13b 100644 --- a/docs/04-troubleshooting/vault.md +++ b/docs/04-troubleshooting/vault.md @@ -144,7 +144,7 @@ Set-Acl "$env:USERPROFILE\.pass-cli\vault.enc" $acl 3. If verification succeeds, you can set a new master password 4. Vault is re-encrypted with new password - For detailed recovery instructions, see [Recovery Phrase Guide](../../02-guides/recovery-phrase.md). + For detailed recovery instructions, see [Recovery Phrase Guide](../02-guides/recovery-phrase.md). 2. **Check keychain** (if still accessible) - macOS: Keychain Access → search "pass-cli" @@ -166,11 +166,11 @@ Set-Acl "$env:USERPROFILE\.pass-cli\vault.enc" $acl ``` **Prevention**: -- ✅ Enable recovery phrase during init (it's enabled by default) -- ✅ Write recovery phrase on paper and store in safe -- ✅ Write master password in secure location -- ✅ Store master password in another password manager -- ✅ Keep backup of master password +- [OK] Enable recovery phrase during init (it's enabled by default) +- [OK] Write recovery phrase on paper and store in safe +- [OK] Write master password in secure location +- [OK] Store master password in another password manager +- [OK] Keep backup of master password --- diff --git a/docs/05-operations/health-checks.md b/docs/05-operations/health-checks.md index 338a1c5b..b2b6722c 100644 --- a/docs/05-operations/health-checks.md +++ b/docs/05-operations/health-checks.md @@ -36,15 +36,15 @@ pass-cli doctor Produces formatted output with status indicators: -``` +```text Health Check Results ==================== -✓ Version: v1.2.3 (up to date) -✓ Vault: vault.enc accessible (600 permissions) -✓ Config: Valid configuration -✓ Keychain: Integration active -✓ Backup: 3 backup files found +[PASS] Version: v1.2.3 (up to date) +[PASS] Vault: vault.enc accessible (600 permissions) +[PASS] Config: Valid configuration +[PASS] Keychain: Integration active +[PASS] Backup: 3 backup files found Overall Status: HEALTHY ``` @@ -141,18 +141,18 @@ esac #### Update Available (Warning) **Symptom**: -``` +```text ⚠ Version: Update available: v1.2.3 → v1.2.4 Recommendation: Update to latest version: https://github.com/ari1110/pass-cli/releases/tag/v1.2.4 ``` **Solution**: Update pass-cli to the latest version using your package manager or download from GitHub. -#### Network Timeout (Pass with Error) +#### Network Timeout (Pass With Error) **Symptom**: -``` -✓ Version: Current version: v1.2.3 (unable to check for updates: offline) +```text +[PASS] Version: Current version: v1.2.3 (unable to check for updates: offline) ``` **Details**: The check gracefully falls back when offline. This is not an error - it just means the version check couldn't reach GitHub. Your current version information is still displayed. @@ -162,8 +162,8 @@ esac #### Vault Not Found (Error) **Symptom**: -``` -✗ Vault: Vault file not found +```text +[FAIL] Vault: Vault file not found Recommendation: Run 'pass-cli init' to create a new vault ``` @@ -172,8 +172,8 @@ esac #### Permission Issues (Error) **Symptom**: -``` -✗ Vault: Vault file has insecure permissions (644) +```text +[FAIL] Vault: Vault file has insecure permissions (644) Recommendation: Run 'chmod 600 /home/user/.pass-cli/vault.enc' ``` @@ -188,8 +188,8 @@ On Windows, ensure only your user account has read/write access. #### Vault Corrupted (Error) **Symptom**: -``` -✗ Vault: Vault file is corrupted or tampered +```text +[FAIL] Vault: Vault file is corrupted or tampered Recommendation: Restore from backup or reinitialize vault ``` @@ -203,8 +203,8 @@ On Windows, ensure only your user account has read/write access. #### Invalid Configuration (Error) **Symptom**: -``` -✗ Config: Invalid YAML syntax at line 5 +```text +[FAIL] Config: Invalid YAML syntax at line 5 Recommendation: Fix configuration syntax or delete to use defaults ``` @@ -213,8 +213,8 @@ On Windows, ensure only your user account has read/write access. #### Missing Configuration (Pass) **Symptom**: -``` -✓ Config: Using default configuration +```text +[PASS] Config: Using default configuration ``` **Details**: This is normal if you haven't customized your configuration. The system uses sensible defaults. @@ -224,7 +224,7 @@ On Windows, ensure only your user account has read/write access. #### Keychain Unavailable (Warning) **Symptom**: -``` +```text ⚠ Keychain: OS keychain not available (running in SSH session) Recommendation: Use local environment or enable keychain access ``` @@ -238,8 +238,8 @@ On Windows, ensure only your user account has read/write access. #### Permission Denied (Error) **Symptom**: -``` -✗ Keychain: Access denied by OS +```text +[FAIL] Keychain: Access denied by OS Recommendation: Grant keychain access in system settings ``` @@ -253,7 +253,7 @@ On Windows, ensure only your user account has read/write access. #### No Backups Found (Warning) **Symptom**: -``` +```text ⚠ Backup: No backup files found Recommendation: Backups are created automatically after modifications ``` @@ -263,7 +263,7 @@ On Windows, ensure only your user account has read/write access. #### Backup Integrity Issue (Warning) **Symptom**: -``` +```text ⚠ Backup: Backup file corrupted: vault.enc.backup.2 Recommendation: Remove corrupted backup or restore from valid backup ``` @@ -357,7 +357,7 @@ echo "pass_cli_health_status $metric" >> /var/lib/prometheus/node_exporter/pass_ ## Troubleshooting Tips -### Run with Verbose Logging +### Run With Verbose Logging For detailed diagnostic information: @@ -388,7 +388,7 @@ If you run `doctor` on a fresh installation: ```bash $ pass-cli doctor -✗ Vault: Vault file not found +[FAIL] Vault: Vault file not found Recommendation: Run 'pass-cli init' to create a new vault Overall Status: ERROR (exit code 2) @@ -398,8 +398,8 @@ This is expected. Run `pass-cli init` to create your vault, then `doctor` will s ## See Also -- [Quick Start Guide]({{< relref "../01-getting-started/quick-start" >}}) - First-time setup and initialization -- [Troubleshooting]({{< relref "../04-troubleshooting/_index" >}}) - Common issues and solutions -- [Security Operations]({{< relref "security-operations" >}}) - Security best practices -- [Command Reference]({{< relref "../03-reference/command-reference" >}}) - Complete command reference +- [Quick Start Guide](../01-getting-started/quick-start) - First-time setup and initialization +- [Troubleshooting](../04-troubleshooting/_index) - Common issues and solutions +- [Security Operations](security-operations) - Security best practices +- [Command Reference](../03-reference/command-reference) - Complete command reference diff --git a/docs/05-operations/security-operations.md b/docs/05-operations/security-operations.md index fcd4c983..d2e82013 100644 --- a/docs/05-operations/security-operations.md +++ b/docs/05-operations/security-operations.md @@ -11,11 +11,11 @@ Best practices, security checklist, incident response procedures, and security a ### Password Management 1. **Strong Master Password** - ``` - ✅ Good: "correct-horse-battery-staple-29!" (33 chars) - ✅ Good: "MyD0g!sN@med$potAnd1L0veH1m" (29 chars) - ❌ Bad: "password123" (11 chars, common) - ❌ Bad: "MyPassword1" (11 chars, predictable) + ```text + [OK] Good: "correct-horse-battery-staple-29!" (33 chars) + [OK] Good: "MyD0g!sN@med$potAnd1L0veH1m" (29 chars) + [ERROR] Bad: "password123" (11 chars, common) + [ERROR] Bad: "MyPassword1" (11 chars, predictable) ``` 2. **Password Storage** @@ -45,10 +45,10 @@ Best practices, security checklist, incident response procedures, and security a 3. **Script Security** ```bash - # ✅ Good: Use quiet mode to avoid logging + # [OK] Good: Use quiet mode to avoid logging export API_KEY=$(pass-cli get service --quiet) - # ❌ Bad: Full output might be logged + # [ERROR] Bad: Full output might be logged export API_KEY=$(pass-cli get service) ``` @@ -64,7 +64,7 @@ Best practices, security checklist, incident response procedures, and security a ### TUI-Specific Security 1. **Screen Privacy** - - ⚠️ **Shoulder Surfing Risk**: TUI displays credential list on screen + - [WARNING] **Shoulder Surfing Risk**: TUI displays credential list on screen - Use privacy screen protector in public spaces - Be aware of people nearby when using TUI - Consider using CLI mode for sensitive environments @@ -110,7 +110,7 @@ Best practices, security checklist, incident response procedures, and security a 2. **File System Security** - Don't commit vault to version control - Add to `.gitignore`: - ``` + ```ini .pass-cli/ *.enc ``` @@ -273,7 +273,7 @@ pass-cli version ### PBKDF2 Parameters -- **Iteration Count**: 600,000 (increased January 2025) +- **Iteration Count**: 600,000 (hardened) - Provides ~50-100ms delay on modern CPUs (2023+) - Older hardware: 500-1000ms (acceptable per NIST recommendations) - Significantly increases brute-force cost diff --git a/docs/06-development/branch-workflow.md b/docs/06-development/branch-workflow.md index 45cce529..7a2aab26 100644 --- a/docs/06-development/branch-workflow.md +++ b/docs/06-development/branch-workflow.md @@ -129,8 +129,8 @@ The release workflow will: ### Main Branch Protection **Enabled protections:** -- ✅ Require pull request before merging -- ✅ Require status checks to pass: +- [OK] Require pull request before merging +- [OK] Require status checks to pass: - `Detect Code Changes` - `Lint` - `Unit Tests` @@ -139,21 +139,21 @@ The release workflow will: - `Integration Tests (windows-latest)` - `Security Scan` - `Build` -- ✅ Block force pushes -- ✅ Restrict deletions -- ✅ Repository admins can bypass (for emergency fixes) +- [OK] Block force pushes +- [OK] Restrict deletions +- [OK] Repository admins can bypass (for emergency fixes) **Result**: All changes require PR and passing CI. Direct pushes blocked. ## CI/CD Pipeline ### On Feature Branch Push -``` +```text Feature branch push → No CI (saves compute time) ``` ### On PR to `main` -``` +```text PR created → CI runs automatically (lint, tests, security, build) → PR shows CI status → Merge blocked until CI passes @@ -162,12 +162,12 @@ PR created → CI runs automatically (lint, tests, security, build) **Smart filtering**: CI skips test jobs when only non-code files change (docs/, specs/, .md files). ### On Merge to `main` -``` +```text PR merged → main branch updated → CI runs on main (verification) ``` ### On Release Tag -``` +```text Tag pushed to main (v*) → Release workflow runs → Build binaries for all platforms → @@ -202,22 +202,22 @@ git push origin v0.x.x ## Common Commands -### Check which branch you're on +### Check Which Branch You're On ```bash git branch --show-current ``` -### See recent commits on main +### See Recent Commits on Main ```bash git log main --oneline -10 ``` -### Compare your branch with main +### Compare Your Branch With Main ```bash git diff main..HEAD ``` -### Update your branch with latest main +### Update Your Branch With Latest Main ```bash # While on your feature branch git fetch origin @@ -227,12 +227,12 @@ git rebase origin/main git merge origin/main ``` -### List all branches +### List All Branches ```bash git branch -a ``` -### Delete merged feature branches +### Delete Merged Feature Branches ```bash # Delete local branch git branch -d feat/my-feature @@ -253,7 +253,7 @@ git push origin --delete feat/my-feature ## Troubleshooting -### "Cannot push to main" error +### "Cannot Push to Main" Error This is expected! Create a pull request from your feature branch instead. ```bash @@ -264,7 +264,7 @@ git checkout feat/my-feature # Switch to your feature branch # Now push and create PR ``` -### PR has merge conflicts +### PR Has Merge Conflicts ```bash # Update your branch with latest main @@ -281,7 +281,7 @@ git rebase --continue git push origin your-feature-branch --force-with-lease ``` -### CI failing on your PR +### CI Failing on Your PR ```bash # Pull the latest changes from your PR branch @@ -299,7 +299,7 @@ git push origin your-feature-branch # CI will automatically re-run on the PR ``` -### Forgot to create feature branch +### Forgot to Create Feature Branch ```bash # If you made changes directly on main diff --git a/docs/06-development/ci-cd.md b/docs/06-development/ci-cd.md index 683b0aab..aed3b6d9 100644 --- a/docs/06-development/ci-cd.md +++ b/docs/06-development/ci-cd.md @@ -98,20 +98,6 @@ This document describes the automated CI/CD pipeline for Pass-CLI. - Release artifacts retained for 30 days - Coverage reports uploaded to Codecov -### GitHub Actions Versions - -Current action versions in use: - -- **actions/checkout**: v5 -- **actions/setup-go**: v6 -- **actions/upload-artifact**: v4 -- **actions/download-artifact**: v5 -- **codecov/codecov-action**: v5 -- **golangci/golangci-lint-action**: v8 (with golangci-lint v2.5) -- **securego/gosec**: master -- **github/codeql-action/upload-sarif**: v3 -- **goreleaser/goreleaser-action**: v6 - ## Dependabot Integration **Configuration**: `.github/dependabot.yml` @@ -335,20 +321,9 @@ Add to README.md: - Don't commit secrets to repository - Use GitHub Secrets for sensitive data -## Future Enhancements - -Potential workflow improvements: - -- Docker image builds and publishing -- Performance regression testing -- Automated changelog generation -- Slack/Discord notifications -- Deployment to package registries -- Automated documentation deployment - ## See Also - [GoReleaser Documentation](https://goreleaser.com) - [GitHub Actions Documentation](https://docs.github.com/en/actions) -- [Release Process]({{< relref "release" >}}) -- [Branch Workflow]({{< relref "branch-workflow" >}}) +- [Release Process](release) +- [Branch Workflow](branch-workflow) diff --git a/docs/06-development/contributing.md b/docs/06-development/contributing.md index 1602fc51..8e332259 100644 --- a/docs/06-development/contributing.md +++ b/docs/06-development/contributing.md @@ -315,7 +315,7 @@ func GeneratePassword(length int, opts PasswordOptions) (string, error) { ## Project Structure -``` +```text pass-cli/ ├── cmd/ # Cobra command definitions │ ├── root.go # Root command @@ -411,7 +411,7 @@ go tool pprof mem.prof ## Release Process -See [Release Process]({{< relref "release" >}}) for detailed release instructions. +See [Release Process](release) for detailed release instructions. Quick reference: @@ -469,7 +469,7 @@ For questions or discussions, visit [GitHub Discussions](https://github.com/ari1 - **Issues**: [GitHub Issues](https://github.com/ari1110/pass-cli/issues) - **Discussions**: [GitHub Discussions](https://github.com/ari1110/pass-cli/discussions) -- **Documentation**: [docs/](.) +- **Documentation**: [docs/](../_index.md) ## Resources diff --git a/docs/06-development/homebrew.md b/docs/06-development/homebrew.md index dfe8f025..e5a12193 100644 --- a/docs/06-development/homebrew.md +++ b/docs/06-development/homebrew.md @@ -132,7 +132,7 @@ Test on all supported platforms: ### Prerequisites 1. **Stable Release**: Must have a stable version with release artifacts -2. **Open Source**: Must have an OSI-approved license (MIT ✓) +2. **Open Source**: Must have an OSI-approved license (MIT [PASS]) 3. **Notable Project**: Should have some community adoption 4. **Documentation**: README, LICENSE, and proper documentation @@ -241,20 +241,20 @@ done ## Formula Best Practices ### Do's -- ✅ Use stable release URLs (not `latest`) -- ✅ Include accurate SHA256 checksums -- ✅ Support all relevant platforms -- ✅ Include meaningful tests -- ✅ Add shell completion generation -- ✅ Provide helpful caveats for first-time users -- ✅ Keep formula simple and maintainable +- [OK] Use stable release URLs (not `latest`) +- [OK] Include accurate SHA256 checksums +- [OK] Support all relevant platforms +- [OK] Include meaningful tests +- [OK] Add shell completion generation +- [OK] Provide helpful caveats for first-time users +- [OK] Keep formula simple and maintainable ### Don'ts -- ❌ Don't use `latest` tag in URLs -- ❌ Don't skip checksums -- ❌ Don't include build-time patches without good reason -- ❌ Don't add unnecessary dependencies -- ❌ Don't use deprecated Homebrew DSL features +- [ERROR] Don't use `latest` tag in URLs +- [ERROR] Don't skip checksums +- [ERROR] Don't include build-time patches without good reason +- [ERROR] Don't add unnecessary dependencies +- [ERROR] Don't use deprecated Homebrew DSL features ## Troubleshooting diff --git a/docs/06-development/scoop.md b/docs/06-development/scoop.md index 53df1f69..95d94eac 100644 --- a/docs/06-development/scoop.md +++ b/docs/06-development/scoop.md @@ -240,7 +240,7 @@ checksum: ### Prerequisites 1. **Stable Release**: Must have a stable version with release artifacts -2. **Open Source**: Must have an OSI-approved license (MIT ✓) +2. **Open Source**: Must have an OSI-approved license (MIT [PASS]) 3. **Windows Binary**: Must provide Windows executables 4. **Documentation**: README and LICENSE required @@ -248,7 +248,7 @@ checksum: - **Main Bucket**: Command-line tools that don't require GUI - Repository: [ScoopInstaller/Main](https://github.com/ScoopInstaller/Main) - - Best fit for Pass-CLI ✓ + - Best fit for Pass-CLI [PASS] - **Extras Bucket**: GUI apps and less common tools - Repository: [ScoopInstaller/Extras](https://github.com/ScoopInstaller/Extras) @@ -338,7 +338,7 @@ When releasing a new version: git commit -am "pass-cli: Update to version 1.1.0" ``` -### Automatic Update (with checkver) +### Automatic Update (With Checkver) If autoupdate is configured correctly, maintainers can update automatically: @@ -396,22 +396,22 @@ Usage: ## Manifest Best Practices ### Do's -- ✅ Use stable release URLs (not `latest`) -- ✅ Include accurate SHA256 hashes -- ✅ Support all relevant architectures -- ✅ Configure autoupdate correctly -- ✅ Provide helpful post-install messages -- ✅ Use proper JSON formatting -- ✅ Test on all supported architectures -- ✅ Follow Scoop manifest conventions +- [OK] Use stable release URLs (not `latest`) +- [OK] Include accurate SHA256 hashes +- [OK] Support all relevant architectures +- [OK] Configure autoupdate correctly +- [OK] Provide helpful post-install messages +- [OK] Use proper JSON formatting +- [OK] Test on all supported architectures +- [OK] Follow Scoop manifest conventions ### Don'ts -- ❌ Don't use `latest` tag in URLs -- ❌ Don't skip hash validation -- ❌ Don't hardcode version numbers in autoupdate URLs -- ❌ Don't include unnecessary dependencies -- ❌ Don't use deprecated manifest features -- ❌ Don't forget to update checksums.txt +- [ERROR] Don't use `latest` tag in URLs +- [ERROR] Don't skip hash validation +- [ERROR] Don't hardcode version numbers in autoupdate URLs +- [ERROR] Don't include unnecessary dependencies +- [ERROR] Don't use deprecated manifest features +- [ERROR] Don't forget to update checksums.txt ## Troubleshooting @@ -495,7 +495,7 @@ For maintainers updating the manifest: - [ ] Tag release in pass-cli repository - [ ] Update release notes -## Integration with CI/CD +## Integration With CI/CD Add to your release workflow: diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index d5ddcbcb..00000000 --- a/docs/README.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: "pass-cli Documentation" ---- - -![Version](https://img.shields.io/github/v/release/ari1110/pass-cli?label=Version) ![Last Updated](https://img.shields.io/github/last-commit/ari1110/pass-cli?path=docs&label=Last%20Updated) - -Welcome to the **pass-cli** documentation. pass-cli is a secure, cross-platform CLI password and API key manager designed for developers. - -## Quick Links - -- [Quick Start]({{< relref "01-getting-started/quick-start" >}}) - First-time setup and initialization (5 minutes) -- [Quick Install]({{< relref "01-getting-started/quick-install" >}}) - Installation instructions for all platforms -- [Command Reference]({{< relref "03-reference/command-reference" >}}) - Complete command reference -- [Recovery Phrase]({{< relref "02-guides/recovery-phrase" >}}) - BIP39 recovery phrase setup and usage -- [Backup & Restore Guide]({{< relref "02-guides/backup-restore" >}}) - Manual vault backup management -- [Security Architecture]({{< relref "03-reference/security-architecture" >}}) - Security features and cryptography -- [Troubleshooting]({{< relref "04-troubleshooting/_index" >}}) - Common issues and solutions by category - -## Features - -- **Strong Encryption**: AES-256-GCM with PBKDF2 key derivation (600,000 iterations) -- **BIP39 Recovery**: 24-word mnemonic for vault password recovery -- **Cross-Platform**: Works on Windows, macOS, and Linux -- **Keychain Integration**: Optional OS keychain support for automatic unlocking -- **Interactive TUI**: Beautiful terminal UI built with tview -- **Clipboard Support**: Secure clipboard integration with auto-clear -- **Usage Tracking**: Per-credential usage statistics -- **Audit Logging**: HMAC-signed audit logs for all operations -- **Manual Backups**: Create and restore vault backups on demand - -## Getting Help - -- **GitHub Issues**: [Report bugs or request features](https://github.com/ari1110/pass-cli/issues) -- **GitHub Discussions**: [Ask questions and share ideas](https://github.com/ari1110/pass-cli/discussions) -- **Documentation**: You're reading it! - -## Contributing - -See [Contributing Guide]({{< relref "06-development/contributing" >}}) for developer documentation and contribution guidelines. diff --git a/docs/README.md b/docs/README.md new file mode 120000 index 00000000..9eb48a35 --- /dev/null +++ b/docs/README.md @@ -0,0 +1 @@ +_index.md \ No newline at end of file diff --git a/docs/_index.md b/docs/_index.md index 1fd9c91f..df439a30 100644 --- a/docs/_index.md +++ b/docs/_index.md @@ -1,5 +1,5 @@ --- -title: "pass-cli Documentation" +title: "Pass-CLI Documentation" cascade: type: docs --- @@ -10,13 +10,13 @@ Welcome to the **pass-cli** documentation. pass-cli is a secure, cross-platform ## Quick Links -- [Quick Start]({{< relref "01-getting-started/quick-start" >}}) - First-time setup and initialization (5 minutes) -- [Quick Install]({{< relref "01-getting-started/quick-install" >}}) - Installation instructions for all platforms -- [Command Reference]({{< relref "03-reference/command-reference" >}}) - Complete command reference -- [Recovery Phrase]({{< relref "02-guides/recovery-phrase" >}}) - BIP39 recovery phrase setup and usage -- [Backup & Restore Guide]({{< relref "02-guides/backup-restore" >}}) - Manual vault backup management -- [Security Architecture]({{< relref "03-reference/security-architecture" >}}) - Security features and cryptography -- [Troubleshooting]({{< relref "04-troubleshooting/_index" >}}) - Common issues and solutions by category +- [Quick Start](01-getting-started/quick-start) - First-time setup and initialization (5 minutes) +- [Quick Install](01-getting-started/quick-install) - Installation instructions for all platforms +- [Command Reference](03-reference/command-reference) - Complete command reference +- [Recovery Phrase](02-guides/recovery-phrase) - BIP39 recovery phrase setup and usage +- [Backup & Restore Guide](02-guides/backup-restore) - Manual vault backup management +- [Security Architecture](03-reference/security-architecture) - Security features and cryptography +- [Troubleshooting](04-troubleshooting/_index) - Common issues and solutions by category ## Features @@ -38,4 +38,4 @@ Welcome to the **pass-cli** documentation. pass-cli is a secure, cross-platform ## Contributing -See [Contributing Guide]({{< relref "06-development/contributing" >}}) for developer documentation and contribution guidelines. +See [Contributing Guide](06-development/contributing) for developer documentation and contribution guidelines. diff --git a/docsite/layouts/_default/_markup/render-link.html b/docsite/layouts/_default/_markup/render-link.html new file mode 100644 index 00000000..9756d975 --- /dev/null +++ b/docsite/layouts/_default/_markup/render-link.html @@ -0,0 +1,26 @@ +{{- $url := urls.Parse .Destination -}} +{{- $scheme := $url.Scheme -}} + +{{- if $scheme -}} + {{/* External link - render as-is */}} + + {{- .Text | safeHTML -}} + +{{- else -}} + {{/* Internal link - validate it exists */}} + {{- $path := $url.Path -}} + {{- with $.Page.GetPage $path -}} + {{/* Valid internal link */}} + + {{- $.Text | safeHTML -}} + + {{- else -}} + {{/* Broken internal link - fail the build */}} + {{- errorf "Broken internal link in %s: target '%s' not found" $.Page.File.Path $path -}} + {{- end -}} +{{- end -}} diff --git a/docs/06-development/documentation-lifecycle.md b/specs/documentation-lifecycle.md similarity index 99% rename from docs/06-development/documentation-lifecycle.md rename to specs/documentation-lifecycle.md index 9388be80..a7f9e78f 100644 --- a/docs/06-development/documentation-lifecycle.md +++ b/specs/documentation-lifecycle.md @@ -137,7 +137,7 @@ Documentation should be archived/removed when ANY of these conditions occur: 7. **PR**: Submit as atomic change (one doc per PR when possible) **Commit Message Format**: -``` +```text docs: archive - Rationale: @@ -153,7 +153,7 @@ Accessible via git history at commit if recovery needed. **Default**: DO NOT archive specs (Rule 1: indefinite retention) **Exception**: If spec created in error: -``` +```text docs: remove incorrect spec 042 - created in wrong repository Rationale: Spec 042 documented feature for pass-cli-gui project, @@ -172,7 +172,7 @@ Correct spec exists at pass-cli-gui repo. 7. **Commit**: One commit per consolidated topic **Commit Message Format**: -``` +```text docs: consolidate documentation into - Merged content from , , @@ -191,7 +191,7 @@ Reduces duplicate maintenance and improves search clarity. 4. **Document**: Note link fixes in commit message **Commit Message Format**: -``` +```text docs: fix broken links in - Updated internal links (file moves)