UNPKG

ubon

Version:

Security scanner for AI-generated apps (Cursor, Lovable, Windsurf, v0). Catches hardcoded secrets, prompt injection, hallucinated imports, Server Actions / Edge runtime mistakes, and the vibe-coded vulnerabilities traditional linters miss.

133 lines (128 loc) 5.36 kB
"use strict"; /** * Shell completion scripts for `ubon`. * * Implementation note: keep these as static template strings rather than * dynamically introspecting Commander. Static scripts (a) work without * loading the JS runtime on every <Tab>, and (b) survive when commander * options are renamed across releases (a slightly stale completion is * better than a broken one). */ Object.defineProperty(exports, "__esModule", { value: true }); exports.bashCompletion = bashCompletion; exports.zshCompletion = zshCompletion; exports.fishCompletion = fishCompletion; exports.emit = emit; const SHARED_OPTS = [ '--directory', '--verbose', '--fail-on', '--min-confidence', '--enable-rule', '--disable-rule', '--baseline', '--update-baseline', '--no-baseline', '--json', '--ndjson', '--sarif', '--output', '--changed-files', '--git-changed-since', '--fix-dry-run', '--preview-fixes', '--apply-fixes', '--profile', '--git-history-depth', '--fast', '--crawl-internal', '--crawl-start-url', '--crawl-depth', '--crawl-timeout', '--detailed', '--focus-critical', '--focus-security', '--focus-new', '--color', '--group-by', '--format', '--min-severity', '--max-issues', '--show-context', '--explain', '--show-confidence', '--show-suppressed', '--ignore-suppressed', '--clear-cache', '--no-cache', '--no-result-cache', '--pr-comment', '--interactive', '--quiet', '--allow-config-js', '--schema', ]; const TOP_COMMANDS = ['scan', 'check', 'explain', 'init', 'install-hooks', 'cache', 'lsp', 'completion', 'doctor', 'mcp', 'hooks']; const PROFILES = ['auto', 'lovable', 'react', 'next', 'sveltekit', 'astro', 'remix', 'hono']; function bashCompletion() { return `# bash completion for ubon _ubon_complete() { local cur prev words cword COMPREPLY=() cur="\${COMP_WORDS[COMP_CWORD]}" prev="\${COMP_WORDS[COMP_CWORD-1]}" local cmd="\${COMP_WORDS[1]}" if [ "\${COMP_CWORD}" -eq 1 ]; then COMPREPLY=( $(compgen -W "${TOP_COMMANDS.join(' ')}" -- "\$cur") ) return 0 fi case "\$prev" in --profile) COMPREPLY=( $(compgen -W "${PROFILES.join(' ')}" -- "\$cur") ); return 0 ;; --color) COMPREPLY=( $(compgen -W "auto always never" -- "\$cur") ); return 0 ;; --group-by) COMPREPLY=( $(compgen -W "category file rule severity" -- "\$cur") ); return 0 ;; --format) COMPREPLY=( $(compgen -W "human table" -- "\$cur") ); return 0 ;; --min-severity) COMPREPLY=( $(compgen -W "low medium high" -- "\$cur") ); return 0 ;; --fail-on) COMPREPLY=( $(compgen -W "none warning error" -- "\$cur") ); return 0 ;; --directory|--baseline|--output|--sarif) COMPREPLY=( $(compgen -d -- "\$cur") ); return 0 ;; esac if [[ "\$cur" == --* ]]; then COMPREPLY=( $(compgen -W "${SHARED_OPTS.join(' ')}" -- "\$cur") ) return 0 fi } complete -F _ubon_complete ubon `; } function zshCompletion() { return `#compdef ubon # zsh completion for ubon _ubon() { local -a commands commands=( 'scan:Run a full scan' 'check:Quick health check (static analysis only)' 'explain:Show details for a rule' 'init:Generate ubon.config.json' 'install-hooks:Install git pre-commit hooks' 'cache:Manage Ubon cache' 'lsp:Start the Ubon language server' 'completion:Print shell completion script' 'doctor:Check Ubon environment health' 'mcp:Run Ubon as an MCP server' 'hooks:Manage Cursor / git hooks' ) if (( CURRENT == 2 )); then _describe -t commands 'ubon command' commands return fi _arguments \ '--profile=[Scan profile]:profile:(${PROFILES.join(' ')})' \ '--color=[Color mode]:mode:(auto always never)' \ '--group-by=[Group results]:by:(category file rule severity)' \ '--format=[Output format]:fmt:(human table)' \ '--min-severity=[Minimum severity]:level:(low medium high)' \ '--fail-on=[Fail on level]:level:(none warning error)' \ '--directory=[Directory]:_directories' \ '--json[Output as JSON]' '--ndjson[Stream NDJSON]' '--sarif=[SARIF path]' \ '--quiet[Suppress banners]' '--schema[Print JSON schema]' \ '--allow-config-js[Allow ubon.config.js]' \ '--fast[Fast mode]' '--interactive[Interactive triage]' } _ubon "$@" `; } function fishCompletion() { return `# fish completion for ubon complete -c ubon -f ${TOP_COMMANDS.map((c) => `complete -c ubon -n '__fish_use_subcommand' -a '${c}'`).join('\n')} complete -c ubon -l profile -xa '${PROFILES.join(' ')}' complete -c ubon -l color -xa 'auto always never' complete -c ubon -l group-by -xa 'category file rule severity' complete -c ubon -l format -xa 'human table' complete -c ubon -l min-severity -xa 'low medium high' complete -c ubon -l fail-on -xa 'none warning error' complete -c ubon -l json complete -c ubon -l ndjson complete -c ubon -l quiet complete -c ubon -l schema complete -c ubon -l allow-config-js complete -c ubon -l fast complete -c ubon -l interactive `; } function emit(shell) { switch (shell) { case 'bash': return { ok: true, output: bashCompletion() }; case 'zsh': return { ok: true, output: zshCompletion() }; case 'fish': return { ok: true, output: fishCompletion() }; default: return { ok: false, output: `Unknown shell: ${shell}. Supported: bash, zsh, fish.\n`, }; } } //# sourceMappingURL=completion.js.map