cli/pkg/i18n/locales/en_GB.json
Snider febdb1ba92 Sanitize user input in execInContainer to prevent injection (#305)
* security: sanitize user input in execInContainer

This change implements command injection protection for the 'vm exec' command
by adding a command whitelist and robust shell argument escaping.

Changes:
- Added `escapeShellArg` utility in `pkg/container/linuxkit.go` to safely quote
  arguments for the remote shell.
- Updated `LinuxKitManager.Exec` to escape all command arguments before
  passing them to SSH.
- Implemented `allowedExecCommands` whitelist in `internal/cmd/vm/cmd_container.go`.
- Added i18n support for new security-related error messages.
- Added unit tests for escaping logic and whitelist validation.

Fixes findings from OWASP Top 10 Security Audit (PR #205).

* security: sanitize user input in execInContainer

This change implements command injection protection for the 'vm exec' command
by adding a command whitelist and robust shell argument escaping.

Changes:
- Added `escapeShellArg` utility in `pkg/container/linuxkit.go` to safely quote
  arguments for the remote shell.
- Updated `LinuxKitManager.Exec` to escape all command arguments before
  passing them to SSH.
- Implemented `allowedExecCommands` whitelist in `internal/cmd/vm/cmd_container.go`.
- Added i18n support for new security-related error messages.
- Added unit tests for escaping logic and whitelist validation.
- Fixed minor formatting issue in `pkg/io/local/client.go`.

Fixes findings from OWASP Top 10 Security Audit (PR #205).

* security: sanitize user input in execInContainer

This change implements command injection protection for the 'vm exec' command
by adding a command whitelist and robust shell argument escaping.

Changes:
- Added `escapeShellArg` utility in `pkg/container/linuxkit.go` to safely quote
  arguments for the remote shell (mitigates SSH command injection).
- Updated `LinuxKitManager.Exec` to escape all command arguments.
- Implemented `allowedExecCommands` whitelist in `internal/cmd/vm/cmd_container.go`.
- Added i18n support for new security-related error messages in `en_GB.json`.
- Added unit tests for escaping logic and whitelist validation.
- Fixed a minor pre-existing formatting issue in `pkg/io/local/client.go`.

Note: The 'merge / auto-merge' CI failure was identified as an external
reusable workflow issue (missing repository context for the 'gh' CLI), and
has been left unchanged to maintain PR scope and security policies.

Fixes findings from OWASP Top 10 Security Audit (PR #205).
2026-02-05 03:43:12 +00:00

755 lines
38 KiB
JSON

{
"gram": {
"verb": {
"be": { "base": "be", "past": "was", "gerund": "being" },
"go": { "base": "go", "past": "went", "gerund": "going" },
"do": { "base": "do", "past": "did", "gerund": "doing" },
"have": { "base": "have", "past": "had", "gerund": "having" },
"make": { "base": "make", "past": "made", "gerund": "making" },
"get": { "base": "get", "past": "got", "gerund": "getting" },
"run": { "base": "run", "past": "ran", "gerund": "running" },
"write": { "base": "write", "past": "wrote", "gerund": "writing" },
"build": { "base": "build", "past": "built", "gerund": "building" },
"send": { "base": "send", "past": "sent", "gerund": "sending" },
"find": { "base": "find", "past": "found", "gerund": "finding" },
"take": { "base": "take", "past": "took", "gerund": "taking" },
"begin": { "base": "begin", "past": "began", "gerund": "beginning" },
"keep": { "base": "keep", "past": "kept", "gerund": "keeping" },
"hold": { "base": "hold", "past": "held", "gerund": "holding" },
"bring": { "base": "bring", "past": "brought", "gerund": "bringing" },
"think": { "base": "think", "past": "thought", "gerund": "thinking" },
"buy": { "base": "buy", "past": "bought", "gerund": "buying" },
"catch": { "base": "catch", "past": "caught", "gerund": "catching" },
"choose": { "base": "choose", "past": "chose", "gerund": "choosing" },
"lose": { "base": "lose", "past": "lost", "gerund": "losing" },
"win": { "base": "win", "past": "won", "gerund": "winning" },
"meet": { "base": "meet", "past": "met", "gerund": "meeting" },
"lead": { "base": "lead", "past": "led", "gerund": "leading" },
"leave": { "base": "leave", "past": "left", "gerund": "leaving" },
"spend": { "base": "spend", "past": "spent", "gerund": "spending" },
"pay": { "base": "pay", "past": "paid", "gerund": "paying" },
"sell": { "base": "sell", "past": "sold", "gerund": "selling" },
"commit": { "base": "commit", "past": "committed", "gerund": "committing" },
"stop": { "base": "stop", "past": "stopped", "gerund": "stopping" },
"scan": { "base": "scan", "past": "scanned", "gerund": "scanning" },
"format": { "base": "format", "past": "formatted", "gerund": "formatting" },
"set": { "base": "set", "past": "set", "gerund": "setting" },
"put": { "base": "put", "past": "put", "gerund": "putting" },
"cut": { "base": "cut", "past": "cut", "gerund": "cutting" },
"hit": { "base": "hit", "past": "hit", "gerund": "hitting" },
"sit": { "base": "sit", "past": "sat", "gerund": "sitting" },
"split": { "base": "split", "past": "split", "gerund": "splitting" },
"shut": { "base": "shut", "past": "shut", "gerund": "shutting" }
},
"noun": {
"file": { "one": "file", "other": "files" },
"repo": { "one": "repo", "other": "repos" },
"repository": { "one": "repository", "other": "repositories" },
"commit": { "one": "commit", "other": "commits" },
"branch": { "one": "branch", "other": "branches" },
"change": { "one": "change", "other": "changes" },
"item": { "one": "item", "other": "items" },
"issue": { "one": "issue", "other": "issues" },
"task": { "one": "task", "other": "tasks" },
"person": { "one": "person", "other": "people" },
"child": { "one": "child", "other": "children" },
"package": { "one": "package", "other": "packages" },
"artifact": { "one": "artifact", "other": "artifacts" },
"vulnerability": { "one": "vulnerability", "other": "vulnerabilities" },
"dependency": { "one": "dependency", "other": "dependencies" },
"directory": { "one": "directory", "other": "directories" },
"category": { "one": "category", "other": "categories" },
"query": { "one": "query", "other": "queries" },
"passed": { "one": "passed", "other": "passed" },
"failed": { "one": "failed", "other": "failed" },
"skipped": { "one": "skipped", "other": "skipped" },
"check": { "one": "check", "other": "checks" },
"test": { "one": "test", "other": "tests" }
},
"article": {
"indefinite": { "default": "a", "vowel": "an" },
"definite": "the"
},
"word": {
"url": "URL",
"id": "ID",
"ok": "OK",
"ci": "CI",
"qa": "QA",
"php": "PHP",
"sdk": "SDK",
"html": "HTML",
"cgo": "CGO",
"pid": "PID",
"cpus": "CPUs",
"ssh": "SSH",
"ssl": "SSL",
"api": "API",
"pr": "PR",
"vite": "Vite",
"pnpm": "pnpm",
"app_url": "app URL",
"blocked_by": "blocked by",
"claimed_by": "claimed by",
"related_files": "related files",
"up_to_date": "up to date",
"dry_run": "dry run",
"go_mod": "go.mod",
"test": "test",
"package": "package",
"filter": "filter",
"coverage": "coverage",
"passed": "passed",
"failed": "failed",
"skipped": "skipped"
},
"punct": {
"label": ":",
"progress": "..."
},
"number": {
"thousands": ",",
"decimal": ".",
"percent": "%s%%"
}
},
"prompt": {
"yes": "y",
"no": "n",
"continue": "Continue?",
"proceed": "Proceed?",
"confirm": "Are you sure?",
"overwrite": "Overwrite?",
"discard": "Discard changes?"
},
"time": {
"just_now": "just now",
"ago": {
"second": { "one": "{{.Count}} second ago", "other": "{{.Count}} seconds ago" },
"minute": { "one": "{{.Count}} minute ago", "other": "{{.Count}} minutes ago" },
"hour": { "one": "{{.Count}} hour ago", "other": "{{.Count}} hours ago" },
"day": { "one": "{{.Count}} day ago", "other": "{{.Count}} days ago" },
"week": { "one": "{{.Count}} week ago", "other": "{{.Count}} weeks ago" }
}
},
"cmd": {
"ai": {
"short": "AI agent task management",
"long": "AI agent task management for core-agentic integration. Provides commands to list, claim, update, and complete tasks from the agentic task queue. Includes RAG tools and metrics.",
"claude.short": "Claude Code integration",
"claude.long": "Claude Code integration for AI-assisted development workflows.",
"claude.config.short": "Configure Claude Code settings",
"claude.run.short": "Run Claude Code on current directory",
"task.short": "Show task details or auto-select a task",
"task.long": "Show details of a specific task or auto-select the next available task from the queue.",
"task.flag.auto": "Auto-select the next available task",
"task.flag.claim": "Claim the task for yourself",
"task.flag.context": "Include full context in output",
"task.id_required": "task ID required (or use --auto)",
"task.no_pending": "No pending tasks available.",
"tasks.short": "List available tasks from core-agentic",
"task_commit.short": "Auto-commit changes with task reference",
"task_commit.no_changes": "No uncommitted changes to commit.",
"task_complete.short": "Mark a task as completed",
"task_pr.short": "Create a pull request for a task",
"task_pr.branch_error": "cannot create PR from {{.Branch}} branch; create a feature branch first",
"task_update.short": "Update task status or progress",
"metrics.short": "View AI and security event metrics",
"metrics.long": "View collected metrics from AI tasks, security scans, and job creation events. Reads JSONL event logs from ~/.core/ai/metrics/.",
"metrics.flag.since": "Time period to show (e.g. 7d, 24h, 30d)",
"metrics.none_found": "No events recorded in this period."
},
"build": {
"short": "Build projects with auto-detection and cross-compilation",
"long": "Build projects with automatic project type detection and cross-compilation support. Supports Go, Wails, Node.js, and PHP projects.",
"flag.archive": "Create archive (tar.gz/zip) of build output",
"flag.checksum": "Generate SHA256 checksums",
"flag.ci": "Run in CI mode (non-interactive)",
"flag.config": "Path to build configuration file",
"flag.format": "Output format (binary, docker, appimage)",
"flag.image": "Docker image name for container builds",
"flag.no_sign": "Skip code signing",
"flag.notarize": "Notarize macOS builds",
"flag.output": "Output directory for build artifacts",
"flag.push": "Push container image to registry",
"flag.targets": "Comma-separated build targets (e.g., linux/amd64,darwin/arm64)",
"flag.type": "Project type override (go, wails, node, php)",
"label.build": "Build",
"label.type": "Type:",
"label.output": "Output:",
"label.binary": "Binary:",
"label.targets": "Targets:",
"label.sign": "Sign",
"label.archive": "Archive",
"label.checksum": "Checksum",
"label.ok": "OK",
"building_project": "Building project",
"built_artifacts": "Built {{.Count}} artifacts",
"signing_binaries": "Signing binaries",
"creating_archives": "Creating archives",
"computing_checksums": "Computing checksums",
"error.invalid_target": "invalid target format \"{{.Target}}\", expected OS/arch (e.g., linux/amd64)",
"error.no_project_type": "no supported project type detected in {{.Dir}}\nSupported types: go (go.mod), wails (wails.json), node (package.json), php (composer.json)",
"error.no_targets": "no build targets specified",
"error.signing_failed": "signing failed",
"error.notarization_failed": "notarization failed",
"error.archive_failed": "archive creation failed",
"error.checksum_failed": "checksum generation failed",
"error.gpg_signing_failed": "GPG signing failed",
"error.node_not_implemented": "Node.js builds not yet implemented",
"error.php_not_implemented": "PHP builds not yet implemented",
"error.unsupported_type": "unsupported project type",
"from_path.short": "Build from a local directory",
"from_path.flag.path": "Path to application directory",
"from_path.starting": "Building from path:",
"from_path.generating_template": "Generating application template...",
"from_path.copying_files": "Copying application files...",
"from_path.compiling": "Compiling application...",
"from_path.success": "Build complete:",
"from_path.error.invalid_path": "invalid path",
"from_path.error.must_be_directory": "path must be a directory",
"from_path.error.go_mod_tidy": "go mod tidy failed",
"from_path.error.go_build": "go build failed",
"pwa.short": "Build from a live PWA URL",
"pwa.flag.url": "URL of the PWA to build",
"pwa.starting": "Building PWA from URL:",
"pwa.downloading_to": "Downloading to:",
"pwa.no_manifest": "No manifest.json found, using defaults",
"pwa.found_manifest": "Found manifest:",
"pwa.download_complete": "Download complete",
"pwa.error.no_manifest_tag": "no manifest link tag found in HTML",
"sdk.short": "Generate API SDKs from OpenAPI spec",
"sdk.long": "Generate API SDKs from an OpenAPI specification file. Supports multiple languages including TypeScript, Go, and PHP.",
"sdk.flag.dry_run": "Show what would be generated without writing files",
"sdk.flag.lang": "Target language (typescript, go, php)",
"sdk.flag.version": "SDK version to generate",
"sdk.label": "SDK",
"sdk.generating": "Generating SDK",
"sdk.dry_run_mode": "(dry run - no files will be written)",
"sdk.language_label": "Language:",
"sdk.languages_label": "Languages:",
"sdk.would_generate": "Would generate SDK",
"sdk.generated_label": "Generated:",
"sdk.complete": "SDK generation complete",
"release.short": "Build, archive, and publish a release",
"release.long": "Build all targets, create archives, generate checksums, and publish to configured destinations. Requires .core/release.yaml configuration.",
"release.flag.go_for_launch": "Actually publish to configured targets (default: dry-run only)",
"release.flag.version": "Version to release (overrides config)",
"release.flag.draft": "Create as draft release",
"release.flag.prerelease": "Mark as pre-release",
"release.label.release": "Release",
"release.building_and_publishing": "Building and publishing release",
"release.dry_run_hint": "(dry-run) no artifacts will be published",
"release.completed": "Release completed",
"release.label.artifacts": "Artifacts:",
"release.label.published": "Published to:",
"release.error.no_config": "No .core/release.yaml found",
"release.hint.create_config": "Create .core/release.yaml to configure release settings"
},
"ci": {
"short": "Publish releases (dry-run by default)",
"long": "Publish releases to GitHub with automatic changelog generation. Runs in dry-run mode by default for safety.",
"flag.draft": "Create as draft release",
"flag.prerelease": "Mark as pre-release",
"flag.version": "Version to release (e.g., v1.2.3)",
"flag.go_for_launch": "Actually publish the release (disables dry-run)",
"dry_run_hint": "(dry-run) use --we-are-go-for-launch to publish",
"go_for_launch": "GO FOR LAUNCH",
"init.short": "Initialize release configuration",
"changelog.short": "Generate changelog",
"version.short": "Show or set version"
},
"deploy": {
"short": "Infrastructure deployment via Coolify",
"long": "Infrastructure deployment tools for managing Coolify servers, projects, applications, databases, and services."
},
"dev": {
"short": "Multi-repo development workflow",
"long": "Multi-repo development workflow tools for managing federated monorepos. Provides health checks, commit assistance, push/pull operations, and CI status across all repositories.",
"api.short": "Start API development server",
"workflow.short": "Manage GitHub Actions workflows",
"workflow.long": "Manage GitHub Actions workflows across repositories. List, sync, and update workflow files.",
"workflow.list.short": "List workflows across repos",
"workflow.sync.short": "Sync workflow files across repos",
"vm.boot.short": "Boot development VM",
"vm.claude.short": "Run Claude in development VM",
"vm.install.short": "Install development VM",
"vm.serve.short": "Start services in development VM",
"vm.shell.short": "Open shell in development VM",
"vm.stop.short": "Stop development VM",
"vm.test.short": "Run tests in development VM",
"vm.update.short": "Update development VM",
"vm.status.short": "Show development VM status",
"no_changes": "No uncommitted changes found.",
"no_git_repos": "No git repositories found.",
"confirm_claude_commit": "Have Claude commit these repos?",
"health.short": "Quick health check across all repos",
"health.long": "Shows a summary of repository health across all repos in the workspace.",
"health.flag.verbose": "Show detailed breakdown",
"health.repos": "repos",
"health.to_push": "to push",
"health.to_pull": "to pull",
"health.errors": "errors",
"health.more": "+{{.Count}} more",
"health.dirty_label": "Dirty:",
"health.ahead_label": "Ahead:",
"health.behind_label": "Behind:",
"health.errors_label": "Errors:",
"status.clean": "clean",
"commit.short": "Claude-assisted commits across repos",
"push.short": "Push commits across all repos",
"push.diverged": "branch has diverged from remote",
"push.diverged_help": "Some repos have diverged (local and remote have different commits).",
"push.uncommitted_changes_commit": "You have uncommitted changes. Commit with Claude first?",
"pull.short": "Pull updates across all repos",
"work.short": "Multi-repo git operations",
"work.use_commit_flag": "Use --commit to have Claude create commits",
"issues.short": "List open issues across all repos",
"reviews.short": "List PRs needing review across all repos",
"ci.short": "Check CI status across all repos",
"impact.short": "Show impact of changing a repo",
"impact.requires_registry": "impact analysis requires repos.yaml with dependency information",
"sync.short": "Synchronizes public service APIs with internal implementations",
"vm.short": "Dev environment commands",
"vm.not_installed": "dev environment not installed (run 'core dev install' first)",
"vm.not_running": "Dev environment is not running",
"file_sync.short": "Sync files across repos (agent-safe)",
"file_sync.long": "Safely sync files or directories across multiple repositories with automatic pull/commit/push. Designed for AI agents to avoid common git pitfalls.",
"file_sync.flag.to": "Target repos pattern (e.g., packages/core-*)",
"file_sync.flag.message": "Commit message for the sync",
"file_sync.flag.co_author": "Co-author for commit (e.g., 'Name <email>')",
"file_sync.flag.dry_run": "Show what would be done without making changes",
"file_sync.flag.push": "Push after committing",
"file_sync.source": "Source",
"file_sync.targets": "Targets",
"file_sync.summary": "Summary",
"file_sync.no_changes": "no changes",
"file_sync.dry_run_mode": "(dry run)",
"file_sync.error.source_not_found": "Source not found: {{.Path}}",
"file_sync.error.no_targets": "No target repos matched the pattern",
"file_sync.error.no_registry": "No repos.yaml found",
"apply.short": "Run command or script across repos (agent-safe)",
"apply.long": "Run a command or script across multiple repositories with optional commit and push. Designed for AI agents to safely apply changes at scale.",
"apply.flag.command": "Shell command to run in each repo",
"apply.flag.script": "Script file to run in each repo",
"apply.flag.repos": "Comma-separated list of repo names (default: all)",
"apply.flag.commit": "Commit changes after running",
"apply.flag.message": "Commit message (required with --commit)",
"apply.flag.co_author": "Co-author for commit",
"apply.flag.dry_run": "Show what would be done without making changes",
"apply.flag.push": "Push after committing",
"apply.flag.continue": "Continue on error instead of stopping",
"apply.action": "Action",
"apply.targets": "Targets",
"apply.summary": "Summary",
"apply.no_changes": "no changes",
"apply.dry_run_mode": "(dry run)",
"apply.error.no_command": "Either --command or --script is required",
"apply.error.both_command_script": "Cannot use both --command and --script",
"apply.error.commit_needs_message": "--commit requires --message",
"apply.error.script_not_found": "Script not found: {{.Path}}",
"apply.error.no_repos": "No repos found",
"apply.error.no_registry": "No repos.yaml found",
"apply.error.command_failed": "Command failed (use --continue to skip failures)"
},
"docs": {
"short": "Documentation management",
"long": "Documentation management tools for listing and syncing documentation across repositories.",
"list.short": "List documentation across repos",
"sync.short": "Sync documentation to core-php/docs/packages/"
},
"doctor": {
"short": "Check development environment",
"long": "Check development environment for required tools and configuration. Verifies git, gh CLI, language runtimes, and SSH setup.",
"verbose_flag": "Show detailed check results",
"ready": "Doctor: Environment ready",
"no_repos_yaml": "No repos.yaml found (run from workspace directory)",
"install_missing": "Install missing tools:",
"install_macos": "brew install git gh php composer node pnpm docker",
"ssh_missing": "SSH key missing - run: ssh-keygen && gh ssh-key add"
},
"git": {
"short": "Git workflow commands",
"long": "Git workflow commands for managing repositories. Includes status, commit, push, pull operations and safe multi-repo commands for AI agents."
},
"go": {
"short": "Go development tools",
"long": "Go development tools including testing, formatting, linting, and module management.",
"test.short": "Run Go tests",
"cov.short": "Run tests with coverage report",
"fmt.short": "Format Go code",
"fmt.no_changes": "No changed Go files to format.",
"fmt.flag.check": "Check if formatted (exit 1 if not)",
"fmt.flag.all": "Check all files, not just changed ones",
"lint.short": "Run golangci-lint",
"lint.no_changes": "No changed Go files to lint.",
"lint.flag.all": "Lint all files, not just changed ones",
"install.short": "Install Go binary",
"mod.short": "Module management",
"work.short": "Workspace management",
"qa.short": "Run QA checks (fmt, lint, test)"
},
"php": {
"short": "Laravel/PHP development tools",
"dev.short": "Start Laravel development environment",
"dev.press_ctrl_c": "Press Ctrl+C to stop all services",
"test.short": "Run PHP tests (PHPUnit/Pest)",
"test.flag.parallel": "Run tests in parallel",
"test.flag.coverage": "Generate code coverage report",
"test.flag.filter": "Filter tests by name pattern",
"test.flag.group": "Run only tests in specified group",
"test.flag.junit": "Output results in JUnit XML format",
"fmt.short": "Format PHP code with Laravel Pint",
"fmt.flag.fix": "Apply formatting fixes",
"analyse.short": "Run PHPStan static analysis",
"analyse.flag.level": "PHPStan analysis level (0-9)",
"analyse.flag.memory": "Memory limit (e.g., 2G)",
"audit.short": "Security audit for dependencies",
"psalm.short": "Run Psalm static analysis",
"psalm.flag.level": "Psalm error level (1=strictest, 8=lenient)",
"psalm.flag.baseline": "Generate/update baseline file",
"psalm.flag.show_info": "Show info-level issues",
"rector.short": "Automated code refactoring",
"rector.flag.fix": "Apply refactoring changes",
"rector.flag.diff": "Show detailed diff of changes",
"rector.flag.clear_cache": "Clear cache before running",
"infection.short": "Mutation testing for test quality",
"infection.flag.min_msi": "Minimum mutation score indicator (0-100)",
"infection.flag.min_covered_msi": "Minimum covered mutation score (0-100)",
"infection.flag.threads": "Number of parallel threads",
"infection.flag.filter": "Filter files by pattern",
"infection.flag.only_covered": "Only mutate covered code",
"security.short": "Security vulnerability scanning",
"security.flag.severity": "Minimum severity (critical, high, medium, low)",
"security.flag.sarif": "Output as SARIF for GitHub Security tab",
"security.flag.url": "URL to check HTTP security headers",
"qa.short": "Run full QA pipeline",
"qa.flag.quick": "Run quick checks only (audit, fmt, stan)",
"qa.flag.full": "Run all stages including slow checks",
"build.short": "Build Docker or LinuxKit image",
"deploy.short": "Deploy to Coolify",
"deploy.long": "Deploy the PHP application to Coolify",
"deploy.deploying": "Deploying to {{.Environment}}",
"deploy.warning_status": "Deployment finished with status: {{.Status}}",
"deploy.triggered": "Deployment triggered successfully",
"deploy.flag.staging": "Deploy to staging environment",
"deploy.flag.force": "Force deployment even if no changes detected",
"deploy.flag.wait": "Wait for deployment to complete",
"deploy_list.short": "List deployments",
"deploy_list.long": "List recent deployments",
"deploy_list.recent": "Recent deployments for {{.Environment}}",
"deploy_list.none_found": "No deployments found",
"deploy_list.flag.staging": "List staging deployments",
"deploy_list.flag.limit": "Number of deployments to list",
"deploy_rollback.short": "Rollback to previous deployment",
"deploy_rollback.long": "Rollback to a previous deployment",
"deploy_rollback.rolling_back": "Rolling back {{.Environment}}",
"deploy_rollback.warning_status": "Rollback finished with status: {{.Status}}",
"deploy_rollback.triggered": "Rollback triggered successfully",
"deploy_rollback.flag.staging": "Rollback staging environment",
"deploy_rollback.flag.id": "Specific deployment ID to rollback to",
"deploy_rollback.flag.wait": "Wait for rollback to complete",
"deploy_status.short": "Show deployment status",
"deploy_status.long": "Show the status of a deployment",
"deploy_status.flag.staging": "Check staging deployment",
"deploy_status.flag.id": "Specific deployment ID",
"label.deploy": "Deploy",
"error.deploy_failed": "Deployment failed",
"serve.short": "Run production container",
"ssl.short": "Setup SSL certificates with mkcert",
"packages.short": "Manage local PHP packages",
"logs.short": "View application logs",
"shell.short": "Open shell in container",
"status.short": "Show container status",
"stop.short": "Stop running containers",
"stan.short": "Run PHPStan static analysis",
"ci.short": "Run CI/CD pipeline with combined reporting",
"ci.long": "Run all QA checks in optimal order and generate combined reports in JSON, markdown, or SARIF format for CI/CD integration.",
"ci.flag.json": "Output combined JSON report",
"ci.flag.summary": "Output markdown summary (for PR comments)",
"ci.flag.sarif": "Generate SARIF files for static analysis",
"ci.flag.upload_sarif": "Upload SARIF to GitHub Security tab",
"ci.flag.fail_on": "Severity level to fail on (critical, high, warning)"
},
"pkg": {
"short": "Package management for core-* repos",
"long": "Package management for core-* repositories. Clone, list, update, and search for packages.",
"install.short": "Clone a package from GitHub",
"list.short": "List installed packages",
"update.short": "Update installed packages",
"outdated.short": "Check for outdated packages",
"search.short": "Search GitHub for packages",
"error.invalid_repo_format": "invalid repo format: use org/repo (e.g., host-uk/core-php)"
},
"sdk": {
"short": "SDK validation and API compatibility tools",
"long": "SDK validation and API compatibility tools. Check for breaking changes and validate OpenAPI specifications.",
"diff.short": "Check for breaking API changes",
"validate.short": "Validate OpenAPI spec"
},
"setup": {
"short": "Bootstrap workspace or clone packages from registry",
"long": "Bootstrap a new workspace or clone packages from a repos.yaml registry. Interactive wizard for selecting packages to clone.",
"flag.all": "Clone all packages from registry",
"flag.build": "Build packages after cloning",
"flag.dry_run": "Show what would be cloned without cloning",
"flag.name": "Package name to clone",
"flag.only": "Only clone packages of this type",
"flag.registry": "Path to repos.yaml registry file",
"complete": "Setup complete",
"bootstrap_mode": "Bootstrap mode (no repos.yaml found)",
"nothing_to_clone": "Nothing to clone.",
"wizard.select_packages": "Select packages to clone",
"wizard.what_to_do": "What would you like to do?",
"github.short": "Configure GitHub repos with org standards",
"github.long": "Configure GitHub repositories with organisation standards including labels, webhooks, branch protection, and security settings.",
"github.flag.repo": "Specific repo to setup",
"github.flag.all": "Setup all repos in registry",
"github.flag.labels": "Only sync labels",
"github.flag.webhooks": "Only sync webhooks",
"github.flag.protection": "Only sync branch protection",
"github.flag.security": "Only sync security settings",
"github.flag.check": "Dry-run: show what would change",
"github.flag.config": "Path to github.yaml config",
"github.dry_run_mode": "(dry run) no changes will be made",
"github.no_repos_specified": "No repos specified.",
"github.usage_hint": "Use --repo <name> for a single repo, or --all for all repos",
"github.no_changes": "no changes needed",
"github.repos_checked": "Repos checked",
"github.repos_with_changes": "Repos with changes",
"github.all_up_to_date": "All repos are up to date",
"github.to_create": "To create",
"github.to_update": "To update",
"github.to_delete": "To delete",
"github.run_without_check": "Run without --check to apply changes",
"github.error.not_authenticated": "GitHub CLI not authenticated. Run: gh auth login",
"github.error.config_not_found": "GitHub config file not found",
"github.error.conflicting_flags": "Cannot use --repo and --all together"
},
"security": {
"short": "Security alerts and vulnerability scanning",
"long": "View security alerts from Dependabot, code scanning, and secret scanning across repositories.",
"alerts.short": "List all security alerts across repos",
"alerts.long": "List security alerts from Dependabot, code scanning, and secret scanning. Aggregates alerts across all repos in the registry.",
"deps.short": "List Dependabot vulnerability alerts",
"deps.long": "List vulnerable dependencies detected by Dependabot with upgrade recommendations.",
"deps.flag.vulnerable": "Show only vulnerable dependencies",
"scan.short": "List code scanning alerts",
"scan.long": "List code scanning alerts from tools like CodeQL, Semgrep, etc.",
"scan.flag.tool": "Filter by tool name (e.g., codeql, semgrep)",
"secrets.short": "List exposed secrets",
"secrets.long": "List secrets detected by GitHub secret scanning.",
"flag.repo": "Specific repo to check",
"flag.severity": "Filter by severity (critical,high,medium,low)",
"flag.target": "External repo to scan (e.g. wailsapp/wails)",
"jobs.short": "Create GitHub issues from scan results",
"jobs.long": "Create GitHub issues from security scan results so contributors can claim and work on them. Supports targeting external repositories.",
"jobs.flag.targets": "Target repos to scan (owner/repo format)",
"jobs.flag.issue_repo": "Repository to create issues in",
"jobs.flag.dry_run": "Show what would be created without creating issues",
"jobs.flag.copies": "Number of duplicate issues for parallel work"
},
"qa": {
"short": "Quality assurance workflows",
"long": "Quality assurance commands for verifying work - CI status, reviews, issues.",
"watch.short": "Watch GitHub Actions after a push",
"watch.long": "Monitor GitHub Actions workflow runs triggered by a commit, showing live progress and actionable failure details.",
"watch.flag.repo": "Repository to watch (default: current)",
"watch.flag.commit": "Commit SHA to watch (default: HEAD)",
"watch.flag.timeout": "Timeout duration (default: 10m)",
"watch.commit": "Commit:",
"watch.waiting_for_workflows": "Waiting for workflows to start...",
"watch.timeout": "Timeout after {{.Duration}} waiting for workflows",
"watch.workflows_failed": "{{.Count}} workflow(s) failed",
"watch.all_passed": "All workflows passed",
"watch.error.not_git_repo": "Not in a git repository",
"watch.error.repo_format": "Invalid repo format. Use --repo org/name or run from a git repo",
"review.short": "Check PR review status",
"review.long": "Show PR review status with actionable next steps. Answers: What do I need to do to get my PRs merged? What reviews am I blocking?",
"review.flag.mine": "Show only your open PRs",
"review.flag.requested": "Show only PRs where your review is requested",
"review.flag.repo": "Specific repository (default: current)",
"review.your_prs": "Your PRs",
"review.review_requested": "Review Requested",
"review.no_prs": "No open PRs",
"review.no_reviews": "No reviews requested",
"review.error.no_repo": "Not in a git repository. Use --repo to specify one",
"health.short": "Aggregate CI health across all repos",
"health.long": "Shows CI health summary across all repos with focus on problems that need attention.",
"health.flag.problems": "Show only repos with problems",
"health.summary": "CI Health",
"health.all_healthy": "All repos are healthy",
"health.passing": "Passing",
"health.tests_failing": "Tests failing",
"health.running": "Running",
"health.cancelled": "Cancelled",
"health.skipped": "Skipped",
"health.no_ci_configured": "No CI configured",
"health.workflow_disabled": "Workflow disabled",
"health.fetch_error": "Failed to fetch status",
"health.parse_error": "Failed to parse response",
"health.count_passing": "Passing",
"health.count_failing": "Failing",
"health.count_pending": "Pending",
"health.count_no_ci": "No CI",
"health.count_disabled": "Disabled",
"issues.short": "Intelligent issue triage",
"issues.long": "Show prioritised, actionable issues across all repos. Groups by: needs response, ready to work, blocked, and needs triage.",
"issues.flag.mine": "Show only issues assigned to you",
"issues.flag.triage": "Show only issues needing triage",
"issues.flag.blocked": "Show only blocked issues",
"issues.flag.limit": "Maximum issues per repo",
"issues.fetching": "Fetching...",
"issues.no_issues": "No open issues found",
"issues.category.needs_response": "Needs Response",
"issues.category.ready": "Ready to Work",
"issues.category.blocked": "Blocked",
"issues.category.triage": "Needs Triage",
"issues.hint.needs_response": "commented recently",
"issues.hint.blocked": "Waiting on dependency",
"issues.hint.triage": "Add labels and assignee",
"docblock.short": "Check docstring coverage for Go code",
"docblock.long": "Analyse Go packages for docstring coverage on exported symbols. Checks functions, types, constants, and variables.",
"docblock.flag.threshold": "Minimum coverage percentage required",
"docblock.missing_docs": "Missing documentation:",
"docblock.coverage": "Docstring coverage:",
"docblock.use_verbose": "Run with -v to see missing docstrings"
},
"test": {
"short": "Run Go tests with coverage",
"long": "Run Go tests with optional coverage reporting, race detection, and filtering.",
"flag.json": "Output results as JSON",
"flag.pkg": "Package to test (default: ./...)",
"flag.race": "Enable race detector",
"flag.run": "Run only tests matching pattern",
"flag.short": "Run only short tests",
"flag.verbose": "Verbose output"
},
"vm": {
"short": "LinuxKit VM management",
"long": "LinuxKit VM management for running isolated development environments. Create, run, and manage lightweight VMs.",
"run.short": "Run a LinuxKit image or template",
"ps.short": "List running VMs",
"stop.short": "Stop a running VM",
"logs.short": "View VM logs",
"exec.short": "Execute a command in a VM",
"error.id_and_cmd_required": "container ID and command required",
"error.command_not_allowed": "command not allowed: {{.Command}}",
"templates.short": "Manage LinuxKit templates"
},
"monitor": {
"short": "Aggregate security findings from GitHub",
"long": "Monitor GitHub Security Tab, Dependabot, and secret scanning for actionable findings. Aggregates results from free tier scanners (Semgrep, Trivy, Gitleaks, OSV-Scanner, Checkov, CodeQL).",
"flag.repo": "Specific repository to scan",
"flag.severity": "Filter by severity (critical, high, medium, low)",
"flag.json": "Output as JSON for piping to other tools",
"flag.all": "Scan all repos in registry",
"scanning": "Scanning",
"found": "Found",
"no_findings": "No security findings",
"error.no_repos": "No repositories to scan. Use --repo, --all, or run from a git repo",
"error.not_git_repo": "Not in a git repository. Use --repo to specify one"
},
"rag": {
"short": "RAG (Retrieval Augmented Generation) tools",
"long": "RAG tools for storing documentation in Qdrant vector database and querying with semantic search. Eliminates need to repeatedly remind Claude about project specifics.",
"flag.qdrant_host": "Qdrant server hostname",
"flag.qdrant_port": "Qdrant gRPC port",
"flag.ollama_host": "Ollama server hostname",
"flag.ollama_port": "Ollama server port",
"flag.model": "Embedding model name",
"ingest.short": "Ingest markdown files into Qdrant",
"ingest.long": "Ingest markdown files from a directory into Qdrant vector database. Chunks files, generates embeddings via Ollama, and stores for semantic search.",
"ingest.flag.collection": "Qdrant collection name",
"ingest.flag.recreate": "Delete and recreate collection",
"ingest.flag.chunk_size": "Characters per chunk",
"ingest.flag.chunk_overlap": "Overlap between chunks",
"query.short": "Query the vector database",
"query.long": "Search for similar documents using semantic similarity. Returns relevant chunks ranked by score.",
"query.flag.collection": "Qdrant collection name",
"query.flag.top": "Number of results to return",
"query.flag.threshold": "Minimum similarity score (0-1)",
"query.flag.category": "Filter by category",
"query.flag.format": "Output format (text, json, context)",
"collections.short": "List and manage collections",
"collections.long": "List available collections, show statistics, or delete collections from Qdrant.",
"collections.flag.list": "List all collections",
"collections.flag.stats": "Show collection statistics",
"collections.flag.delete": "Delete a collection"
}
},
"common": {
"status": {
"dirty": "dirty",
"clean": "clean",
"synced": "synced",
"up_to_date": "up to date"
},
"label": {
"done": "Done",
"success": "Success",
"error": "Error",
"warning": "Warning",
"info": "Info",
"fix": "Fix:",
"install": "Install:",
"summary": "Summary:",
"setup": "Setup:",
"config": "Config:",
"repo": "Repo:",
"test": "Running tests...",
"package": "Package:",
"coverage": "Coverage:"
},
"flag": {
"fix": "Auto-fix issues where possible",
"diff": "Show diff of changes",
"json": "Output as JSON",
"sarif": "Output as SARIF for GitHub Security tab",
"verbose": "Show detailed output",
"registry": "Path to repos.yaml registry file",
"coverage": "Generate coverage report",
"spec": "Path to OpenAPI specification file"
},
"progress": {
"running": "Running {{.Task}}...",
"checking": "Checking {{.Item}}..."
},
"result": {
"no_issues": "No issues found",
"all_passed": "All tests passed"
},
"success": {
"completed": "{{.Action}} successfully"
},
"error": {
"failed": "Failed to {{.Action}}",
"json_sarif_exclusive": "--json and --sarif flags are mutually exclusive"
},
"hint": {
"fix_deps": "Update dependencies to fix vulnerabilities"
},
"count": {
"succeeded": "{{.Count}} succeeded",
"failed": "{{.Count}} failed",
"skipped": "{{.Count}} skipped",
"passed": "{{.Count}} passed"
}
},
"error": {
"gh_not_found": "'gh' CLI not found. Install from https://cli.github.com/",
"registry_not_found": "No repos.yaml found",
"repo_not_found": "Repository '{{.Name}}' not found"
},
"lang": {
"de": "German",
"en": "English",
"es": "Spanish",
"fr": "French",
"zh": "Chinese"
},
"cli": {
"pass": "PASS",
"fail": "FAIL"
}
}