@sebastienrousseau/dotfiles 0.2.502 → 0.2.504
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +109 -9
- package/LICENSE +21 -1283
- package/README.md +6 -4
- package/docs/CONFIG_STRATEGY.md +124 -0
- package/docs/COPYRIGHT +1 -1
- package/docs/GOVERNANCE.md +98 -0
- package/docs/MAINTAINERS.md +41 -0
- package/docs/OPENCODE.md +127 -0
- package/docs/README.md +2 -0
- package/docs/STRUCTURE.md +102 -0
- package/docs/adr/ADR-011-nushell-tier3-keep.md +2 -2
- package/docs/architecture/AI_COST_OPTIMIZATION.md +143 -0
- package/docs/architecture/REPO_LAYOUT.md +8 -8
- package/docs/archive/MILESTONE_v0.2.493.md +1 -1
- package/docs/index.md +2 -2
- package/docs/interop/POWERSHELL.md +1 -1
- package/docs/manual/00-introduction.md +1 -1
- package/docs/manual/01-concepts/02-trust-model.md +1 -1
- package/docs/manual/03-reference/02-config-files.md +2 -2
- package/docs/manual/_toc.yml +1 -1
- package/docs/manual/command-index.md +72 -59
- package/docs/operations/CI_COMPOSITES.md +2 -2
- package/docs/operations/COMPLETIONS.md +2 -2
- package/docs/operations/COVERAGE.md +5 -5
- package/docs/operations/HARD_AUDIT_2026.md +11 -11
- package/docs/operations/MAINTENANCE.md +3 -3
- package/docs/operations/MANIFEST.md +127 -0
- package/docs/operations/RELEASE_PIPELINE.md +130 -0
- package/docs/operations/RFC_v0_2_503_reorganization.md +280 -0
- package/docs/operations/ROADMAP_2026.md +6 -6
- package/docs/operations/ROADMAP_V0_2_503.md +134 -0
- package/docs/operations/TESTING.md +17 -0
- package/docs/operations/TRACEABILITY.md +6 -3
- package/docs/operations/VERSION_SYNC.md +4 -4
- package/docs/reference/POWERSHELL_PARITY.md +8 -7
- package/docs/schema/dot-env-v1.json +110 -0
- package/docs/security/CI_EGRESS_ALLOWLIST.md +1 -1
- package/docs/security/CI_PINNING.md +17 -9
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +2 -2
- package/docs/security/FUZZING.md +114 -0
- package/docs/security/INSTALL_VERIFICATION.md +2 -2
- package/docs/security/POLICY_RELEASES.md +2 -2
- package/docs/security/SCORECARD.md +58 -3
- package/docs/security/SHELL_EXEMPTIONS.md +4 -4
- package/docs/security/VERIFY_RELEASE.md +201 -0
- package/install.sh +118 -5
- package/package.json +1 -1
- package/scripts/README.md +123 -0
- package/scripts/ci/check-copyright-headers.sh +4 -93
- package/scripts/ci/check-shell-preamble.sh +4 -103
- package/scripts/ci/guard-gitleaks-checkout.sh +4 -54
- package/scripts/diagnostics/a2a-conformance.sh +4 -4
- package/scripts/diagnostics/alias-governance.sh +1 -1
- package/scripts/diagnostics/aliases-cheatsheet.sh +2 -2
- package/scripts/diagnostics/benchmark.sh +5 -5
- package/scripts/diagnostics/conflicts.sh +2 -2
- package/scripts/diagnostics/doctor-unified.sh +3 -3
- package/scripts/diagnostics/doctor.sh +10 -10
- package/scripts/diagnostics/drift-dashboard.sh +2 -2
- package/scripts/diagnostics/health.sh +4 -4
- package/scripts/diagnostics/history-analysis.sh +2 -2
- package/scripts/diagnostics/mcp-doctor.sh +10 -7
- package/scripts/diagnostics/perf.sh +5 -5
- package/scripts/diagnostics/scorecard.sh +4 -4
- package/scripts/diagnostics/security-score.sh +25 -6
- package/scripts/diagnostics/smoke-test.sh +2 -2
- package/scripts/diagnostics/snapshot.sh +2 -2
- package/scripts/diagnostics/verify.sh +4 -4
- package/scripts/diagnostics/version-locks.sh +13 -3
- package/scripts/diagnostics/workstation-attestation.sh +14 -14
- package/scripts/dot/commands/agent.sh +8 -0
- package/scripts/dot/commands/agents.sh +14 -4
- package/scripts/dot/commands/ai.sh +156 -37
- package/scripts/dot/commands/appearance.sh +2 -2
- package/scripts/dot/commands/core.sh +2 -2
- package/scripts/dot/commands/diagnostics.sh +5 -5
- package/scripts/dot/commands/env-emit.sh +202 -0
- package/scripts/dot/commands/fleet.sh +22 -16
- package/scripts/dot/commands/init.sh +4 -4
- package/scripts/dot/commands/lint.sh +9 -4
- package/scripts/dot/commands/manual.sh +3 -3
- package/scripts/dot/commands/meta.sh +12 -6
- package/scripts/dot/commands/patterns.sh +2 -2
- package/scripts/dot/commands/registry.sh +4 -4
- package/scripts/dot/commands/restore.sh +4 -4
- package/scripts/dot/commands/secrets.sh +4 -3
- package/scripts/dot/commands/security.sh +2 -2
- package/scripts/dot/commands/tools.sh +13 -3
- package/scripts/dot/powershell/Dot.psm1 +199 -0
- package/scripts/fonts/install-nerd-fonts.sh +2 -2
- package/scripts/git-hooks/pre-commit-audit.sh +3 -3
- package/scripts/git-hooks/pre-push +13 -0
- package/scripts/ops/ai-setup.sh +1 -1
- package/scripts/ops/bundle.sh +3 -3
- package/scripts/ops/chaos.sh +2 -2
- package/scripts/ops/chezmoi-apply.sh +12 -6
- package/scripts/ops/heal.sh +4 -4
- package/scripts/ops/post-apply-repair.sh +2 -2
- package/scripts/ops/prewarm.sh +2 -2
- package/scripts/ops/release.sh +4 -4
- package/scripts/ops/rollback.sh +4 -4
- package/scripts/ops/setup.sh +2 -2
- package/scripts/qa/check-version-consistency.sh +123 -0
- package/scripts/qa/coverage-baseline.sh +1 -1
- package/scripts/qa/docs-coverage.sh +2 -2
- package/scripts/qa/powershell-contract.ps1 +1 -1
- package/scripts/qa/scorecard-snapshot.sh +127 -0
- package/scripts/security/backup.sh +2 -2
- package/scripts/security/dns-doh.sh +4 -4
- package/scripts/security/encryption-check.sh +4 -4
- package/scripts/security/enforce-policies.sh +2 -2
- package/scripts/security/firewall.sh +4 -4
- package/scripts/security/lock-screen.sh +4 -4
- package/scripts/security/manage-secrets.sh +2 -2
- package/scripts/security/ssh-cert.sh +2 -2
- package/scripts/security/telemetry-kill.sh +4 -4
- package/scripts/security/usb-safety.sh +4 -4
- package/scripts/theme/extract-heic-frames.sh +114 -0
- package/scripts/theme/rebuild-themes.sh +31 -2
- package/scripts/theme/switch.sh +13 -6
- package/scripts/theme/wallpaper-sync.sh +297 -93
- package/scripts/tuning/linux.sh +2 -2
- package/scripts/tuning/macos.sh +2 -2
- package/scripts/version-sync.sh +74 -10
- package/dot_config/.module-manifest.json +0 -69
- package/dot_config/ai/identity.md +0 -23
- package/dot_config/ai/patterns/architect.md +0 -16
- package/dot_config/ai/patterns/hardener.md +0 -15
- package/dot_config/ai/patterns/refactor.md +0 -15
- package/dot_config/aider/aider.conf.yml +0 -32
- package/dot_config/alacritty/alacritty.toml.tmpl +0 -55
- package/dot_config/ansible/ansible.cfg +0 -11
- package/dot_config/atuin/config.toml.tmpl +0 -47
- package/dot_config/bat/config +0 -23
- package/dot_config/brave-flags.conf.tmpl +0 -7
- package/dot_config/btop/btop.conf +0 -16
- package/dot_config/btop/themes/tokyonight.theme +0 -34
- package/dot_config/bun/bunfig.toml.tmpl +0 -33
- package/dot_config/claude/mcp_servers.json +0 -20
- package/dot_config/containers/containers.conf +0 -14
- package/dot_config/curl/dot_curlrc +0 -18
- package/dot_config/dlv/config.yml +0 -39
- package/dot_config/docker/config.json +0 -15
- package/dot_config/dotfiles/agent-card.json +0 -29
- package/dot_config/dotfiles/agent-profiles.json +0 -92
- package/dot_config/dotfiles/boot/README.md +0 -13
- package/dot_config/dotfiles/grub/README.md +0 -13
- package/dot_config/dotfiles/lock/README.md +0 -13
- package/dot_config/dotfiles/mcp-lock.json +0 -33
- package/dot_config/dotfiles/mcp-policy.json +0 -52
- package/dot_config/dotfiles/mcp-registry.json +0 -47
- package/dot_config/dotfiles/model-registry.json +0 -20
- package/dot_config/dotfiles/policy-bundles.json +0 -38
- package/dot_config/dotfiles/prompt-registry.json +0 -16
- package/dot_config/dotfiles/versions.env +0 -18
- package/dot_config/duf/duf.conf +0 -6
- package/dot_config/duti/defaults.duti +0 -5
- package/dot_config/emoji/emoji.txt +0 -34
- package/dot_config/environment.d/50-ssh-agent.conf +0 -2
- package/dot_config/environment.d/90-wayland.conf +0 -19
- package/dot_config/fastfetch/config.jsonc +0 -28
- package/dot_config/firefox/user.js.tmpl +0 -58
- package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +0 -9
- package/dot_config/fish/completions/dot.fish.tmpl +0 -115
- package/dot_config/fish/conf.d/000-perf-cache.fish +0 -56
- package/dot_config/fish/conf.d/aliases.fish.tmpl +0 -77
- package/dot_config/fish/conf.d/direnv.fish +0 -4
- package/dot_config/fish/conf.d/env.fish.tmpl +0 -48
- package/dot_config/fish/conf.d/functions.fish.tmpl +0 -22
- package/dot_config/fish/conf.d/init.fish.tmpl +0 -172
- package/dot_config/fish/conf.d/mise-activate.fish +0 -5
- package/dot_config/fish/config.fish.tmpl +0 -44
- package/dot_config/fish/fish_plugins +0 -1
- package/dot_config/fish/functions/_.fish +0 -3
- package/dot_config/fish/functions/_cached_eval.fish +0 -131
- package/dot_config/fish/functions/_cached_eval_clear.fish +0 -17
- package/dot_config/fish/functions/als.fish +0 -46
- package/dot_config/fish/functions/bg-upgrade.fish +0 -7
- package/dot_config/fish/functions/c.fish +0 -3
- package/dot_config/fish/functions/cat.fish +0 -9
- package/dot_config/fish/functions/d.fish +0 -7
- package/dot_config/fish/functions/dot.fish +0 -34
- package/dot_config/fish/functions/h.fish +0 -3
- package/dot_config/fish/functions/l.fish +0 -7
- package/dot_config/fish/functions/la.fish +0 -7
- package/dot_config/fish/functions/ll.fish +0 -7
- package/dot_config/fish/functions/log_error.fish +0 -13
- package/dot_config/fish/functions/log_info.fish +0 -13
- package/dot_config/fish/functions/lr.fish +0 -7
- package/dot_config/fish/functions/lra.fish +0 -7
- package/dot_config/fish/functions/ls.fish +0 -7
- package/dot_config/fish/functions/lt.fish +0 -7
- package/dot_config/fish/functions/lta.fish +0 -7
- package/dot_config/fish/functions/notify-run.fish +0 -11
- package/dot_config/fish/functions/q.fish +0 -3
- package/dot_config/fish/functions/silent-run.fish +0 -7
- package/dot_config/fish/functions/yy.fish +0 -8
- package/dot_config/flatpak/flatpak.list +0 -4
- package/dot_config/fontconfig/fonts.conf.tmpl +0 -57
- package/dot_config/foot/foot.ini.tmpl +0 -33
- package/dot_config/fuzzel/fuzzel.ini.tmpl +0 -18
- package/dot_config/fzf/fzf.zsh +0 -48
- package/dot_config/gem/gemrc +0 -9
- package/dot_config/gh/config.yml +0 -12
- package/dot_config/ghostty/config.tmpl +0 -165
- package/dot_config/git/allowed_signers.tmpl +0 -18
- package/dot_config/git/attributes +0 -12
- package/dot_config/git/commit-template +0 -10
- package/dot_config/git/hooks/executable_commit-msg +0 -146
- package/dot_config/git/ignore +0 -27
- package/dot_config/gnupg/gpg-agent.conf +0 -11
- package/dot_config/go/golangci.yml +0 -118
- package/dot_config/go/gopls.json +0 -30
- package/dot_config/goose/config.yaml +0 -29
- package/dot_config/gtk-3.0/gtk.css.tmpl +0 -184
- package/dot_config/gtk-3.0/settings.ini.tmpl +0 -27
- package/dot_config/gtk-4.0/gtk.css.tmpl +0 -252
- package/dot_config/gtk-4.0/settings.ini.tmpl +0 -18
- package/dot_config/htop/htoprc +0 -20
- package/dot_config/inputrc +0 -2
- package/dot_config/ipython/profile_default/ipython_config.py +0 -19
- package/dot_config/just/justfile +0 -122
- package/dot_config/k9s/config.yaml +0 -65
- package/dot_config/k9s/skins/catppuccin-mocha.yaml +0 -116
- package/dot_config/kanshi/config.tmpl +0 -22
- package/dot_config/karabiner/karabiner.json +0 -14
- package/dot_config/kitty/kitty.conf.tmpl +0 -53
- package/dot_config/lazydocker/config.yml +0 -186
- package/dot_config/lazygit/config.yml +0 -35
- package/dot_config/mako/config +0 -47
- package/dot_config/mas/masapps.txt +0 -5
- package/dot_config/micro/settings.json +0 -3
- package/dot_config/mimeapps.list +0 -77
- package/dot_config/minikube/config.json +0 -13
- package/dot_config/mise/config.toml +0 -99
- package/dot_config/mongosh/mongoshrc.js +0 -68
- package/dot_config/mpv/input.conf +0 -47
- package/dot_config/mpv/mpv.conf +0 -47
- package/dot_config/mycli/myclirc +0 -67
- package/dot_config/nano/nanorc +0 -28
- package/dot_config/ncdu/config +0 -12
- package/dot_config/niri/config.kdl.tmpl +0 -327
- package/dot_config/nushell/aliases.nu +0 -18
- package/dot_config/nushell/cached_eval.nu +0 -80
- package/dot_config/nushell/completions.nu.tmpl +0 -52
- package/dot_config/nushell/config.nu.tmpl +0 -86
- package/dot_config/nushell/env.nu.tmpl +0 -102
- package/dot_config/nushell/functions.nu.tmpl +0 -17
- package/dot_config/nvim/init.lua +0 -18
- package/dot_config/nvim/lazy-lock.json +0 -58
- package/dot_config/nvim/lua/config/autocmds.lua +0 -107
- package/dot_config/nvim/lua/config/keymaps.lua +0 -92
- package/dot_config/nvim/lua/config/lazy.lua +0 -44
- package/dot_config/nvim/lua/config/options.lua +0 -49
- package/dot_config/nvim/lua/plugins/ai.lua +0 -75
- package/dot_config/nvim/lua/plugins/coding.lua +0 -216
- package/dot_config/nvim/lua/plugins/completion.lua +0 -60
- package/dot_config/nvim/lua/plugins/dap.lua +0 -412
- package/dot_config/nvim/lua/plugins/editor.lua +0 -55
- package/dot_config/nvim/lua/plugins/git.lua +0 -10
- package/dot_config/nvim/lua/plugins/lsp.lua +0 -156
- package/dot_config/nvim/lua/plugins/markdown.lua +0 -18
- package/dot_config/nvim/lua/plugins/rust.lua +0 -34
- package/dot_config/nvim/lua/plugins/sessions.lua +0 -33
- package/dot_config/nvim/lua/plugins/ui.lua +0 -509
- package/dot_config/paru/paru.conf +0 -10
- package/dot_config/pip/pip.conf.tmpl +0 -32
- package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +0 -81
- package/dot_config/pueue/pueue.yml +0 -34
- package/dot_config/pypoetry/config.toml +0 -6
- package/dot_config/pyrightconfig.json +0 -5
- package/dot_config/raycast/README.md +0 -13
- package/dot_config/redis/redisclirc +0 -41
- package/dot_config/ripgrep/ripgreprc +0 -21
- package/dot_config/shell/00-core-paths.sh.tmpl +0 -141
- package/dot_config/shell/05-core-safety.sh +0 -48
- package/dot_config/shell/10-secrets.sh +0 -41
- package/dot_config/shell/40-fzf-defaults.sh.tmpl +0 -17
- package/dot_config/shell/40-ls-colors.sh +0 -49
- package/dot_config/shell/50-logic-functions-core.sh.tmpl +0 -11
- package/dot_config/shell/50-logic-functions.sh.tmpl +0 -11
- package/dot_config/shell/51-logic-functions-extra.sh.tmpl +0 -65
- package/dot_config/shell/90-ux-aliases.sh.tmpl +0 -121
- package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +0 -55
- package/dot_config/shell/Brewfile +0 -207
- package/dot_config/shell/Brewfile.cask +0 -92
- package/dot_config/shell/Brewfile.cli +0 -127
- package/dot_config/shell/README.md +0 -284
- package/dot_config/shell/als_data.txt.tmpl +0 -65
- package/dot_config/shell/custom/auto_ls.zsh +0 -20
- package/dot_config/shell/custom/context_suggest.zsh +0 -68
- package/dot_config/shell/custom/error_analysis.zsh +0 -45
- package/dot_config/sops/dot_sops.yaml +0 -23
- package/dot_config/starship.toml.tmpl +0 -202
- package/dot_config/swaylock/config +0 -43
- package/dot_config/systemd/user/dotfiles-maintenance.service +0 -8
- package/dot_config/systemd/user/dotfiles-maintenance.timer +0 -11
- package/dot_config/systemd/user/pueued.service +0 -12
- package/dot_config/systemd/user/ssh-agent.service +0 -12
- package/dot_config/task/Taskfile.yml +0 -86
- package/dot_config/tflint/tflint.hcl +0 -9
- package/dot_config/tmux/tmux.conf.tmpl +0 -223
- package/dot_config/topgrade.toml.tmpl +0 -54
- package/dot_config/user-dirs.dirs +0 -10
- package/dot_config/vscode/extensions.txt +0 -11
- package/dot_config/vscode/settings.json.tmpl +0 -82
- package/dot_config/waybar/config.jsonc.tmpl +0 -90
- package/dot_config/waybar/style.css.tmpl +0 -211
- package/dot_config/wezterm/wezterm.lua.tmpl +0 -64
- package/dot_config/wget/wgetrc +0 -12
- package/dot_config/xdg-desktop-portal/niri-portals.conf +0 -5
- package/dot_config/yarn/yarnrc.yml +0 -36
- package/dot_config/yazi/keymap.toml +0 -67
- package/dot_config/yazi/theme.toml +0 -102
- package/dot_config/yazi/yazi.toml +0 -40
- package/dot_config/zathura/zathurarc +0 -52
- package/dot_config/zellij/config.kdl.tmpl +0 -79
- package/dot_config/zsh/dot_zprofile +0 -7
- package/dot_config/zsh/dot_zshenv +0 -5
- package/dot_config/zsh/dot_zshrc.tmpl +0 -688
- package/dot_config/zsh/rc.d/00-alias-shims.zsh +0 -99
- package/dot_config/zsh/rc.d/05-ssh-agent.zsh +0 -18
- package/dot_config/zsh/rc.d/10-env.zsh.tmpl +0 -28
- package/dot_config/zsh/rc.d/20-zinit.zsh +0 -65
- package/dot_config/zsh/rc.d/30-options.zsh.tmpl +0 -214
- package/dot_config/zsh/rc.d/40-bell.zsh +0 -20
- package/dot_config/zsh/rc.d/50-login-fortune.zsh +0 -9
- package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +0 -32
- package/dot_local/bin/executable_ai-update +0 -195
- package/dot_local/bin/executable_ai_core +0 -152
- package/dot_local/bin/executable_antigravity +0 -11
- package/dot_local/bin/executable_b64 +0 -84
- package/dot_local/bin/executable_bm +0 -79
- package/dot_local/bin/executable_cb +0 -39
- package/dot_local/bin/executable_dot +0 -636
- package/dot_local/bin/executable_dot-ai +0 -36
- package/dot_local/bin/executable_dot-bootstrap +0 -76
- package/dot_local/bin/executable_dot-launch-or-focus +0 -52
- package/dot_local/bin/executable_dot-load-benchmark +0 -31
- package/dot_local/bin/executable_dot-load-benchmark-pty +0 -77
- package/dot_local/bin/executable_dot-theme-sync +0 -952
- package/dot_local/bin/executable_dot_completion +0 -57
- package/dot_local/bin/executable_dtags +0 -28
- package/dot_local/bin/executable_epoch +0 -67
- package/dot_local/bin/executable_extract +0 -41
- package/dot_local/bin/executable_gbd +0 -52
- package/dot_local/bin/executable_gd +0 -42
- package/dot_local/bin/executable_git-ai-commit +0 -175
- package/dot_local/bin/executable_git-ai-diff +0 -169
- package/dot_local/bin/executable_gl +0 -101
- package/dot_local/bin/executable_hash +0 -161
- package/dot_local/bin/executable_hashsum +0 -160
- package/dot_local/bin/executable_hex +0 -115
- package/dot_local/bin/executable_jsonv +0 -78
- package/dot_local/bin/executable_jwt +0 -94
- package/dot_local/bin/executable_kill-port +0 -75
- package/dot_local/bin/executable_lorem +0 -118
- package/dot_local/bin/executable_mkscript +0 -35
- package/dot_local/bin/executable_monitor +0 -56
- package/dot_local/bin/executable_myip +0 -51
- package/dot_local/bin/executable_notify +0 -24
- package/dot_local/bin/executable_open +0 -38
- package/dot_local/bin/executable_pw +0 -27
- package/dot_local/bin/executable_rec-start +0 -46
- package/dot_local/bin/executable_rec-stop +0 -35
- package/dot_local/bin/executable_regex +0 -132
- package/dot_local/bin/executable_start-niri +0 -8
- package/dot_local/bin/executable_tmux-sessionizer +0 -314
- package/dot_local/bin/executable_tour +0 -177
- package/dot_local/bin/executable_up +0 -23
- package/dot_local/bin/executable_update +0 -142
- package/dot_local/bin/executable_uuid +0 -87
- package/dot_local/bin/executable_win +0 -32
- package/dot_local/bin/executable_yamlv +0 -57
- package/dot_local/share/bash-completion/completions/dot +0 -72
- package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
- package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
- package/dot_local/share/man/man1/dot.1 +0 -149
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +0 -64
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +0 -18
- package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +0 -13
- package/dot_local/share/wayland-sessions/niri.desktop.tmpl +0 -6
- package/dot_local/share/zsh/completions/.keep +0 -0
- package/dot_local/share/zsh/completions/_dot +0 -287
- package/scripts/ci/check-dangerous-chmod.sh +0 -19
- package/scripts/ci/check-deps-dev.sh +0 -236
- package/scripts/ci/check-insecure-tls.sh +0 -61
- package/scripts/ci/check-regression-traceability.sh +0 -67
- package/scripts/ci/dot-cli-startup-bench.sh +0 -126
- package/scripts/ci/install-chezmoi-verified.sh +0 -67
- package/scripts/ci/lint-reusable-pins.sh +0 -78
- package/scripts/ci/run-coverage.sh +0 -451
- package/scripts/ci/validate-chezmoidata.sh +0 -25
- package/scripts/ci/validate-ci-config.sh +0 -224
- package/scripts/ci/windows-smoke-test.ps1 +0 -136
- package/scripts/docs/build-manual.sh +0 -883
- package/scripts/docs/check-manual.sh +0 -213
- package/scripts/dot/lib/bento.sh +0 -50
- package/scripts/dot/lib/log.sh +0 -200
- package/scripts/dot/lib/platform.sh +0 -112
- package/scripts/dot/lib/ui.sh +0 -650
- package/scripts/dot/lib/utils.sh +0 -377
- package/scripts/maintenance/check-updates.sh +0 -131
- package/scripts/release/package-policy-bundles.sh +0 -125
|
@@ -30,9 +30,9 @@ set -euo pipefail
|
|
|
30
30
|
set +o xtrace 2>/dev/null || true
|
|
31
31
|
|
|
32
32
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
33
|
-
# shellcheck source
|
|
33
|
+
# shellcheck source=../../lib/dot/ui.sh
|
|
34
34
|
# shellcheck disable=SC1091
|
|
35
|
-
source "$SCRIPT_DIR
|
|
35
|
+
source "$SCRIPT_DIR/../../lib/dot/ui.sh"
|
|
36
36
|
|
|
37
37
|
# Parse arguments
|
|
38
38
|
VERBOSE=true
|
|
@@ -64,7 +64,25 @@ YELLOW="${YELLOW:-}"
|
|
|
64
64
|
# Scoring
|
|
65
65
|
TOTAL_POINTS=0
|
|
66
66
|
MAX_POINTS=0
|
|
67
|
-
declare -A
|
|
67
|
+
# Parallel indexed arrays instead of `declare -A` (bash 4+; macOS ships
|
|
68
|
+
# bash 3.2). CAT_NAMES[i] holds a category name, CAT_SCORES[i] its running
|
|
69
|
+
# total. Category names can contain spaces, so an emulation via dynamic
|
|
70
|
+
# variable names wouldn't work — a linear scan over the handful of
|
|
71
|
+
# categories is fine.
|
|
72
|
+
CAT_NAMES=()
|
|
73
|
+
CAT_SCORES=()
|
|
74
|
+
|
|
75
|
+
_cat_add() {
|
|
76
|
+
local name="$1" pts="$2" i
|
|
77
|
+
for ((i = 0; i < ${#CAT_NAMES[@]}; i++)); do
|
|
78
|
+
if [[ "${CAT_NAMES[$i]}" == "$name" ]]; then
|
|
79
|
+
CAT_SCORES[i]=$((CAT_SCORES[i] + pts))
|
|
80
|
+
return 0
|
|
81
|
+
fi
|
|
82
|
+
done
|
|
83
|
+
CAT_NAMES+=("$name")
|
|
84
|
+
CAT_SCORES+=("$pts")
|
|
85
|
+
}
|
|
68
86
|
|
|
69
87
|
add_points() {
|
|
70
88
|
local category="$1"
|
|
@@ -74,7 +92,7 @@ add_points() {
|
|
|
74
92
|
|
|
75
93
|
TOTAL_POINTS=$((TOTAL_POINTS + points))
|
|
76
94
|
MAX_POINTS=$((MAX_POINTS + max))
|
|
77
|
-
|
|
95
|
+
_cat_add "$category" "$points"
|
|
78
96
|
|
|
79
97
|
if ! $JSON_OUTPUT && $VERBOSE; then
|
|
80
98
|
local icon
|
|
@@ -339,10 +357,11 @@ print_summary() {
|
|
|
339
357
|
echo " \"grade\": \"$(get_grade $score)\","
|
|
340
358
|
echo " \"categories\": {"
|
|
341
359
|
local first=true
|
|
342
|
-
|
|
360
|
+
local _ci
|
|
361
|
+
for ((_ci = 0; _ci < ${#CAT_NAMES[@]}; _ci++)); do
|
|
343
362
|
$first || echo ","
|
|
344
363
|
first=false
|
|
345
|
-
printf " \"%s\": %d" "$
|
|
364
|
+
printf " \"%s\": %d" "${CAT_NAMES[$_ci]}" "${CAT_SCORES[$_ci]}"
|
|
346
365
|
done
|
|
347
366
|
echo ""
|
|
348
367
|
echo " }"
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
set -euo pipefail
|
|
6
6
|
|
|
7
7
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
-
# shellcheck source
|
|
8
|
+
# shellcheck source=../../lib/dot/ui.sh
|
|
9
9
|
# shellcheck disable=SC1091
|
|
10
|
-
source "$SCRIPT_DIR
|
|
10
|
+
source "$SCRIPT_DIR/../../lib/dot/ui.sh"
|
|
11
11
|
ui_init
|
|
12
12
|
|
|
13
13
|
ui_header "Dotfiles Smoke Tests"
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
|
|
8
8
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
# shellcheck source
|
|
9
|
+
# shellcheck source=../../lib/dot/ui.sh
|
|
10
10
|
# shellcheck disable=SC1091
|
|
11
|
-
source "$SCRIPT_DIR
|
|
11
|
+
source "$SCRIPT_DIR/../../lib/dot/ui.sh"
|
|
12
12
|
|
|
13
13
|
ui_init
|
|
14
14
|
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
|
|
8
8
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
# shellcheck source
|
|
9
|
+
# shellcheck source=../../lib/dot/ui.sh
|
|
10
10
|
# shellcheck disable=SC1091
|
|
11
|
-
source "$SCRIPT_DIR
|
|
11
|
+
source "$SCRIPT_DIR/../../lib/dot/ui.sh"
|
|
12
12
|
|
|
13
13
|
ui_init
|
|
14
14
|
ui_dot_banner "Diagnostics"
|
|
@@ -43,8 +43,8 @@ resolve_dot_bin() {
|
|
|
43
43
|
elif [[ -d "$HOME/.local/share/chezmoi" ]]; then
|
|
44
44
|
src_dir="$HOME/.local/share/chezmoi"
|
|
45
45
|
fi
|
|
46
|
-
if [[ -n "$src_dir" && -x "$src_dir/
|
|
47
|
-
printf "%s\n" "$src_dir/
|
|
46
|
+
if [[ -n "$src_dir" && -x "$src_dir/bin/dot" ]]; then
|
|
47
|
+
printf "%s\n" "$src_dir/bin/dot"
|
|
48
48
|
return
|
|
49
49
|
fi
|
|
50
50
|
return 1
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
|
|
8
8
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
# shellcheck source
|
|
9
|
+
# shellcheck source=../../lib/dot/ui.sh
|
|
10
10
|
# shellcheck disable=SC1091
|
|
11
|
-
source "$SCRIPT_DIR
|
|
11
|
+
source "$SCRIPT_DIR/../../lib/dot/ui.sh"
|
|
12
12
|
|
|
13
13
|
ui_init
|
|
14
14
|
|
|
@@ -30,10 +30,20 @@ resolve_source_dir() {
|
|
|
30
30
|
|
|
31
31
|
src_dir=$(resolve_source_dir)
|
|
32
32
|
|
|
33
|
+
# resolve_source_dir returns the repo root, but since the defaults/ reorg the
|
|
34
|
+
# deployable tree lives under the .chezmoiroot subdir (defaults/). Descend
|
|
35
|
+
# into it so paths like dot_config/... resolve. (Without this the mise lookup
|
|
36
|
+
# below silently reported "config not found" on every run.)
|
|
37
|
+
cm_src="$src_dir"
|
|
38
|
+
if [[ -f "$src_dir/.chezmoiroot" ]]; then
|
|
39
|
+
_cm_root="$(tr -d '[:space:]' <"$src_dir/.chezmoiroot")"
|
|
40
|
+
[[ -n "$_cm_root" && -d "$src_dir/$_cm_root" ]] && cm_src="$src_dir/$_cm_root"
|
|
41
|
+
fi
|
|
42
|
+
|
|
33
43
|
ui_header "Version Locks"
|
|
34
44
|
|
|
35
45
|
ui_section "mise toolchain"
|
|
36
|
-
mise_config="$
|
|
46
|
+
mise_config="$cm_src/dot_config/mise/conf.d/00-dotfiles.toml"
|
|
37
47
|
if [[ -f "$mise_config" ]]; then
|
|
38
48
|
awk -F= '
|
|
39
49
|
/^\[tools\]/ {in_tools=1; next}
|
|
@@ -13,12 +13,12 @@ REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../.." && pwd)}"
|
|
|
13
13
|
# without the env-prefix dance that confuses shellcheck (SC2097/SC2098).
|
|
14
14
|
export REPO_ROOT
|
|
15
15
|
|
|
16
|
-
# shellcheck source
|
|
17
|
-
source "$SCRIPT_DIR
|
|
18
|
-
# shellcheck source
|
|
19
|
-
source "$SCRIPT_DIR
|
|
20
|
-
# shellcheck source
|
|
21
|
-
source "$SCRIPT_DIR
|
|
16
|
+
# shellcheck source=../../lib/dot/ui.sh
|
|
17
|
+
source "$SCRIPT_DIR/../../lib/dot/ui.sh"
|
|
18
|
+
# shellcheck source=../../lib/dot/platform.sh
|
|
19
|
+
source "$SCRIPT_DIR/../../lib/dot/platform.sh"
|
|
20
|
+
# shellcheck source=../../lib/dot/utils.sh
|
|
21
|
+
source "$SCRIPT_DIR/../../lib/dot/utils.sh"
|
|
22
22
|
|
|
23
23
|
JSON_MODE=0
|
|
24
24
|
WRITE_PATH=""
|
|
@@ -72,14 +72,14 @@ platform_id="$(dot_platform_id)"
|
|
|
72
72
|
host_os="$(dot_host_os)"
|
|
73
73
|
arch="$(uname -m)"
|
|
74
74
|
hostname_value="$(hostname 2>/dev/null || true)"
|
|
75
|
-
agent_profile_file="$REPO_ROOT/dot_config/dotfiles/agent-profiles.json"
|
|
76
|
-
agent_card_file="$REPO_ROOT/dot_config/dotfiles/agent-card.json"
|
|
75
|
+
agent_profile_file="$REPO_ROOT/defaults/dot_config/dotfiles/agent-profiles.json"
|
|
76
|
+
agent_card_file="$REPO_ROOT/defaults/dot_config/dotfiles/agent-card.json"
|
|
77
77
|
agent_state_file="${AGENT_STATE_FILE:-$HOME/.config/dotfiles/agent-mode.env}"
|
|
78
|
-
policy_bundles_file="$REPO_ROOT/dot_config/dotfiles/policy-bundles.json"
|
|
79
|
-
model_registry_file="$REPO_ROOT/dot_config/dotfiles/model-registry.json"
|
|
80
|
-
prompt_registry_file="$REPO_ROOT/dot_config/dotfiles/prompt-registry.json"
|
|
81
|
-
mcp_policy_file="$REPO_ROOT/dot_config/dotfiles/mcp-policy.json"
|
|
82
|
-
mcp_registry_file="$REPO_ROOT/dot_config/dotfiles/mcp-registry.json"
|
|
78
|
+
policy_bundles_file="$REPO_ROOT/defaults/dot_config/dotfiles/policy-bundles.json"
|
|
79
|
+
model_registry_file="$REPO_ROOT/defaults/dot_config/dotfiles/model-registry.json"
|
|
80
|
+
prompt_registry_file="$REPO_ROOT/defaults/dot_config/dotfiles/prompt-registry.json"
|
|
81
|
+
mcp_policy_file="$REPO_ROOT/defaults/dot_config/dotfiles/mcp-policy.json"
|
|
82
|
+
mcp_registry_file="$REPO_ROOT/defaults/dot_config/dotfiles/mcp-registry.json"
|
|
83
83
|
signing_format="$(git config --global gpg.format 2>/dev/null || echo ssh)"
|
|
84
84
|
signing_key="$(git config --global user.signingkey 2>/dev/null || true)"
|
|
85
85
|
allowed_signers="$(git config --global gpg.ssh.allowedSignersFile 2>/dev/null || echo "$HOME/.config/git/allowed_signers")"
|
|
@@ -94,7 +94,7 @@ if [[ -z "$current_profile" ]] && [[ -f "$agent_profile_file" ]]; then
|
|
|
94
94
|
current_profile="$(jq -r '.defaultProfile // "ask"' "$agent_profile_file")"
|
|
95
95
|
fi
|
|
96
96
|
|
|
97
|
-
MCP_CONFIG="$REPO_ROOT/dot_config/claude/mcp_servers.json"
|
|
97
|
+
MCP_CONFIG="$REPO_ROOT/defaults/dot_config/claude/mcp_servers.json"
|
|
98
98
|
export MCP_CONFIG
|
|
99
99
|
mcp_summary="$(bash "$REPO_ROOT/scripts/diagnostics/mcp-doctor.sh" --strict --json)"
|
|
100
100
|
|
|
@@ -9,6 +9,14 @@ set -euo pipefail
|
|
|
9
9
|
# These functions are sourced by meta.sh for dispatch.
|
|
10
10
|
|
|
11
11
|
_agent_repo_root() {
|
|
12
|
+
# Post-Phase-4b: agent profile/card JSON ships under defaults/dot_config/.
|
|
13
|
+
# Prefer the chezmoi source dir so callers can append dot_config/... directly.
|
|
14
|
+
local dir
|
|
15
|
+
dir="$(resolve_chezmoi_source_dir)"
|
|
16
|
+
[[ -n "$dir" ]] && {
|
|
17
|
+
printf '%s\n' "$dir"
|
|
18
|
+
return
|
|
19
|
+
}
|
|
12
20
|
require_source_dir
|
|
13
21
|
}
|
|
14
22
|
|
|
@@ -25,8 +25,8 @@ set -euo pipefail
|
|
|
25
25
|
|
|
26
26
|
# shellcheck disable=SC1091
|
|
27
27
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
28
|
-
source "$SCRIPT_DIR
|
|
29
|
-
source "$SCRIPT_DIR
|
|
28
|
+
source "$SCRIPT_DIR/../../../lib/dot/ui.sh"
|
|
29
|
+
source "$SCRIPT_DIR/../../../lib/dot/utils.sh"
|
|
30
30
|
|
|
31
31
|
_agents_repo_root() {
|
|
32
32
|
# Resolve the chezmoi source dir (where CLAUDE.md/AGENTS.md live).
|
|
@@ -40,16 +40,26 @@ _agents_repo_root() {
|
|
|
40
40
|
# we treat that as "not a match" and fall through to git, rather
|
|
41
41
|
# than accepting the wrong candidate.
|
|
42
42
|
local candidate=""
|
|
43
|
+
# Sanity probe: post-Phase-4b the data file lives at
|
|
44
|
+
# defaults/.chezmoidata.toml; older deployments kept it at the root.
|
|
45
|
+
_has_chezmoidata() {
|
|
46
|
+
[[ -f "$1/.chezmoidata.toml" || -f "$1/defaults/.chezmoidata.toml" ]]
|
|
47
|
+
}
|
|
43
48
|
if command -v chezmoi >/dev/null 2>&1; then
|
|
44
49
|
candidate="$(chezmoi source-path 2>/dev/null || true)"
|
|
45
|
-
|
|
50
|
+
# chezmoi source-path returns defaults/ when .chezmoiroot is set;
|
|
51
|
+
# peel back one level so callers receive the actual repo root.
|
|
52
|
+
if [[ -n "$candidate" && -f "$candidate/.chezmoidata.toml" && "$(basename "$candidate")" == "defaults" ]]; then
|
|
53
|
+
candidate="$(dirname "$candidate")"
|
|
54
|
+
fi
|
|
55
|
+
if [[ -n "$candidate" ]] && ! _has_chezmoidata "$candidate"; then
|
|
46
56
|
candidate=""
|
|
47
57
|
fi
|
|
48
58
|
fi
|
|
49
59
|
if [[ -z "$candidate" ]]; then
|
|
50
60
|
candidate="$(git -C "$PWD" rev-parse --show-toplevel 2>/dev/null || true)"
|
|
51
61
|
fi
|
|
52
|
-
if [[ -z "$candidate" ]] ||
|
|
62
|
+
if [[ -z "$candidate" ]] || ! _has_chezmoidata "$candidate"; then
|
|
53
63
|
return 1
|
|
54
64
|
fi
|
|
55
65
|
printf '%s\n' "$candidate"
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
##
|
|
5
5
|
## Provides AI CLI status, setup, RAG query, and bridge commands.
|
|
6
6
|
## Wraps AI CLI tools with contextual patterns and system metadata.
|
|
7
|
-
## Usage: dot ai|ai-setup|ai-query|cl|copilot|gemini|kiro|sgpt|ollama|opencode|aider|autohand|vibe|qwen|zai
|
|
7
|
+
## Usage: dot ai [delegate|cost|status]|ai-setup|ai-query|cl|copilot|gemini|kiro|sgpt|ollama|opencode|aider|autohand|vibe|qwen|zai
|
|
8
8
|
|
|
9
9
|
set -euo pipefail
|
|
10
10
|
|
|
11
11
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
-
# shellcheck source
|
|
13
|
-
source "$SCRIPT_DIR
|
|
12
|
+
# shellcheck source=../../../lib/dot/utils.sh
|
|
13
|
+
source "$SCRIPT_DIR/../../../lib/dot/utils.sh"
|
|
14
14
|
|
|
15
15
|
dot_ui_command_banner "AI and Agents" "${1:-}"
|
|
16
16
|
|
|
@@ -53,7 +53,8 @@ _ai_extract_version() {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
_ai_refresh_status_cache() {
|
|
56
|
-
local -n
|
|
56
|
+
# Entries passed by value (not a `local -n` nameref — bash 4.3+; macOS bash is 3.2).
|
|
57
|
+
local ai_entries=("$@")
|
|
57
58
|
local tmp_file
|
|
58
59
|
tmp_file="$(mktemp)"
|
|
59
60
|
mkdir -p "$AI_CACHE_DIR"
|
|
@@ -82,16 +83,18 @@ _ai_refresh_status_cache() {
|
|
|
82
83
|
indexed+=("$i|$entry")
|
|
83
84
|
i=$((i + 1))
|
|
84
85
|
done
|
|
86
|
+
# Probe is non-interactive: </dev/null is a clean EOF for tools that
|
|
87
|
+
# prompt for an API key on first run; `timeout 3` caps the wait.
|
|
85
88
|
# shellcheck disable=SC2016
|
|
89
|
+
local _TO=""
|
|
90
|
+
command -v timeout >/dev/null 2>&1 && _TO="timeout 3 "
|
|
86
91
|
local probe_script='
|
|
87
|
-
payload="$1"
|
|
88
|
-
|
|
89
|
-
i="${payload%%|*}"
|
|
90
|
-
entry="${payload#*|}"
|
|
92
|
+
payload="$1"; out_dir="$2"; to="$3"
|
|
93
|
+
i="${payload%%|*}"; entry="${payload#*|}"
|
|
91
94
|
IFS="|" read -r category role name bin desc <<<"$entry"
|
|
92
95
|
if command -v "$bin" >/dev/null 2>&1; then
|
|
93
|
-
output=$("$bin" --version 2>/dev/null | head -1) || true
|
|
94
|
-
version=$(printf "%s" "$output" | sed "s/^[^0-9]
|
|
96
|
+
output=$($to "$bin" --version </dev/null 2>/dev/null | head -1) || true
|
|
97
|
+
version=$(printf "%s" "$output" | sed "s/^[^0-9]*//;s/[[:space:]]*$//;s/\.$//")
|
|
95
98
|
printf "%s\t1\t%s\n" "$bin" "$version" >"$out_dir/$i"
|
|
96
99
|
else
|
|
97
100
|
printf "%s\t0\t\n" "$bin" >"$out_dir/$i"
|
|
@@ -107,7 +110,7 @@ _ai_refresh_status_cache() {
|
|
|
107
110
|
# agent") don't trigger xargs's "unterminated quote" parser.
|
|
108
111
|
printf '%s\0' "${indexed[@]}" |
|
|
109
112
|
xargs -0 -I{} -P"$jobs" \
|
|
110
|
-
bash -c "$probe_script" _ {} "$probe_dir" \
|
|
113
|
+
bash -c "$probe_script" _ {} "$probe_dir" "$_TO" \
|
|
111
114
|
2>/dev/null || true
|
|
112
115
|
|
|
113
116
|
# Re-assemble in original entry order.
|
|
@@ -132,6 +135,12 @@ _ai_get_cached_status() {
|
|
|
132
135
|
cat "$AI_STATUS_CACHE_FILE"
|
|
133
136
|
}
|
|
134
137
|
|
|
138
|
+
# Look up field $2 (2=present 0/1, 3=version) for binary $1 from the
|
|
139
|
+
# cached TSV. Replaces a bash-4 associative array for macOS bash 3.2.
|
|
140
|
+
_ai_status_field() {
|
|
141
|
+
awk -F'\t' -v b="$1" -v f="$2" '$1==b{print $f;exit}' "$AI_STATUS_CACHE_FILE" 2>/dev/null
|
|
142
|
+
}
|
|
143
|
+
|
|
135
144
|
# binary -> mise package mapping
|
|
136
145
|
_ai_mise_pkg() {
|
|
137
146
|
case "$1" in
|
|
@@ -175,17 +184,9 @@ cmd_ai_status() {
|
|
|
175
184
|
)
|
|
176
185
|
|
|
177
186
|
if ! _ai_cache_fresh "$AI_STATUS_CACHE_FILE"; then
|
|
178
|
-
_ai_refresh_status_cache ai_clis
|
|
187
|
+
_ai_refresh_status_cache "${ai_clis[@]}"
|
|
179
188
|
fi
|
|
180
189
|
|
|
181
|
-
declare -A ai_present=()
|
|
182
|
-
declare -A ai_version=()
|
|
183
|
-
local cached_bin cached_present cached_version
|
|
184
|
-
while IFS=$'\t' read -r cached_bin cached_present cached_version; do
|
|
185
|
-
ai_present["$cached_bin"]="$cached_present"
|
|
186
|
-
ai_version["$cached_bin"]="$cached_version"
|
|
187
|
-
done < <(_ai_get_cached_status)
|
|
188
|
-
|
|
189
190
|
local -a installed=()
|
|
190
191
|
local -a missing=()
|
|
191
192
|
local current_category=""
|
|
@@ -197,8 +198,9 @@ cmd_ai_status() {
|
|
|
197
198
|
ui_section "$category"
|
|
198
199
|
current_category="$category"
|
|
199
200
|
fi
|
|
200
|
-
if [[ "$
|
|
201
|
-
ver="$
|
|
201
|
+
if [[ "$(_ai_status_field "$bin" 2)" == "1" ]]; then
|
|
202
|
+
ver="$(_ai_status_field "$bin" 3)"
|
|
203
|
+
[[ -z "$ver" ]] && ver="installed"
|
|
202
204
|
[[ "$bin" == "claude" ]] && ver="${ver%% *}"
|
|
203
205
|
ui_ok "$name" "$ver — $desc"
|
|
204
206
|
installed+=("$name|$bin|$role")
|
|
@@ -312,6 +314,94 @@ cmd_ai_query() {
|
|
|
312
314
|
run_script "dot_local/bin/executable_dot-ai" "AI RAG script" "$@"
|
|
313
315
|
}
|
|
314
316
|
|
|
317
|
+
# Locate the vibe-delegate / delegate-report tools deployed by the
|
|
318
|
+
# /vibe Claude Code skill. Path stays in sync with
|
|
319
|
+
# defaults/dot_claude/skills/vibe/tools/.
|
|
320
|
+
_ai_delegate_tool() {
|
|
321
|
+
local tool="$1" # vibe-delegate | delegate-report
|
|
322
|
+
local path="${HOME}/.claude/skills/vibe/tools/${tool}"
|
|
323
|
+
if [[ ! -x "$path" ]]; then
|
|
324
|
+
# Errors to stderr so callers capturing stdout via $() get just the path.
|
|
325
|
+
ui_err "$tool" "not found at $path" >&2
|
|
326
|
+
ui_info "Hint" "Run 'chezmoi apply' to deploy the /vibe skill" >&2
|
|
327
|
+
return 1
|
|
328
|
+
fi
|
|
329
|
+
printf '%s\n' "$path"
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
cmd_ai_delegate() {
|
|
333
|
+
# Front-door to the same delegator the /vibe slash command uses.
|
|
334
|
+
# Usage: dot ai delegate "<prompt>" [max-turns] [agent] [timeout]
|
|
335
|
+
if [[ $# -lt 1 ]]; then
|
|
336
|
+
ui_err "Usage" "dot ai delegate \"<prompt>\" [max-turns] [agent] [timeout-secs]"
|
|
337
|
+
ui_info "Example" "dot ai delegate \"add a CHANGELOG entry for v0.2.504\""
|
|
338
|
+
return 1
|
|
339
|
+
fi
|
|
340
|
+
local prompt="$1"
|
|
341
|
+
shift
|
|
342
|
+
local max_turns="${1:-10}"
|
|
343
|
+
local agent="${2:-}"
|
|
344
|
+
local timeout="${3:-180}"
|
|
345
|
+
local tool
|
|
346
|
+
tool="$(_ai_delegate_tool vibe-delegate)" || return 1
|
|
347
|
+
if ! has_command vibe; then
|
|
348
|
+
ui_warn "vibe" "not installed"
|
|
349
|
+
ui_info "Install" "mise use -g pipx:mistral-vibe"
|
|
350
|
+
return 1
|
|
351
|
+
fi
|
|
352
|
+
"$tool" "$(pwd)" "$prompt" "$max_turns" "$agent" "$timeout"
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
cmd_ai_cost() {
|
|
356
|
+
# Unified AI spend report. Wraps delegate-report (vibe runs) and is
|
|
357
|
+
# the documented interface for users: path may move later.
|
|
358
|
+
local tool
|
|
359
|
+
tool="$(_ai_delegate_tool delegate-report)" || return 1
|
|
360
|
+
"$tool" "$@"
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
# Append a best-effort run entry to the unified AI log read by
|
|
364
|
+
# delegate-report. Token/cost fields are left blank when the provider
|
|
365
|
+
# CLI does not surface them — the report tolerates missing fields and
|
|
366
|
+
# groups by `model`. This gives users one place to see invocations
|
|
367
|
+
# across Claude, Gemini, Aider, Vibe, etc., not just Vibe.
|
|
368
|
+
_ai_log_run() {
|
|
369
|
+
local provider="$1" exit_code="$2" duration_secs="$3" prompt_words="$4"
|
|
370
|
+
local log_file="${HOME}/.local/share/delegate-runs.jsonl"
|
|
371
|
+
mkdir -p "$(dirname "$log_file")"
|
|
372
|
+
local project ts
|
|
373
|
+
project="$(basename "$PWD")"
|
|
374
|
+
ts="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
|
|
375
|
+
# python3 keeps the encoding boring; jq would also work but isn't
|
|
376
|
+
# guaranteed present everywhere this script runs.
|
|
377
|
+
python3 - "$log_file" "$provider" "$project" "$exit_code" "$duration_secs" "$prompt_words" "$ts" <<'PY'
|
|
378
|
+
import json, sys
|
|
379
|
+
log, provider, project, ec, dur, pw, ts = sys.argv[1:8]
|
|
380
|
+
entry = {
|
|
381
|
+
"ts": ts,
|
|
382
|
+
"delegate": provider,
|
|
383
|
+
"model": provider,
|
|
384
|
+
"project": project,
|
|
385
|
+
"exit_code": int(ec),
|
|
386
|
+
"duration_secs": float(dur),
|
|
387
|
+
"prompt_words": int(pw),
|
|
388
|
+
"tool_calls": 0,
|
|
389
|
+
"files_changed": 0,
|
|
390
|
+
"wrote_nothing": False,
|
|
391
|
+
"warn_count": 0,
|
|
392
|
+
"search_replace_fails": 0,
|
|
393
|
+
"syntax_errors": 0,
|
|
394
|
+
"tokens_in": 0,
|
|
395
|
+
"tokens_out": 0,
|
|
396
|
+
"tokens_total": 0,
|
|
397
|
+
"cost_usd": 0,
|
|
398
|
+
"cost_claude_eq": 0,
|
|
399
|
+
}
|
|
400
|
+
with open(log, "a") as fh:
|
|
401
|
+
fh.write(json.dumps(entry) + "\n")
|
|
402
|
+
PY
|
|
403
|
+
}
|
|
404
|
+
|
|
315
405
|
run_ai_with_context() {
|
|
316
406
|
local tool="$1"
|
|
317
407
|
shift
|
|
@@ -405,61 +495,90 @@ ${prompt}"
|
|
|
405
495
|
|
|
406
496
|
ui_info "Executing $tool with pattern: ${pattern_name:-none}"
|
|
407
497
|
|
|
498
|
+
# Wrap the provider invocation so we can log it to the unified AI run
|
|
499
|
+
# log. Each entry feeds `dot ai cost` so users see spend across every
|
|
500
|
+
# provider, not just vibe. Token-level fields are zero for providers
|
|
501
|
+
# that don't surface them — the report tolerates missing data.
|
|
502
|
+
local _ai_start_ts _ai_exit _ai_end_ts _ai_dur _ai_prompt_words
|
|
503
|
+
_ai_start_ts=$(date +%s)
|
|
504
|
+
_ai_prompt_words=$(printf '%s' "$prompt" | wc -w | tr -d ' ')
|
|
505
|
+
_ai_exit=0
|
|
408
506
|
case "$tool" in
|
|
409
507
|
cl | claude)
|
|
410
|
-
printf "%s" "$full_prompt" | claude
|
|
508
|
+
printf "%s" "$full_prompt" | claude || _ai_exit=$?
|
|
411
509
|
;;
|
|
412
510
|
codex)
|
|
413
|
-
printf "%s" "$full_prompt" | codex
|
|
511
|
+
printf "%s" "$full_prompt" | codex || _ai_exit=$?
|
|
414
512
|
;;
|
|
415
513
|
copilot)
|
|
416
|
-
copilot -sp "$full_prompt"
|
|
514
|
+
copilot -sp "$full_prompt" || _ai_exit=$?
|
|
417
515
|
;;
|
|
418
516
|
gemini)
|
|
419
|
-
printf "%s" "$full_prompt" | gemini chat
|
|
517
|
+
printf "%s" "$full_prompt" | gemini chat || _ai_exit=$?
|
|
420
518
|
;;
|
|
421
519
|
goose)
|
|
422
|
-
printf "%s" "$full_prompt" | goose session start
|
|
520
|
+
printf "%s" "$full_prompt" | goose session start || _ai_exit=$?
|
|
423
521
|
;;
|
|
424
522
|
kiro | kiro-cli)
|
|
425
|
-
printf "%s" "$full_prompt" | kiro-cli chat
|
|
523
|
+
printf "%s" "$full_prompt" | kiro-cli chat || _ai_exit=$?
|
|
426
524
|
;;
|
|
427
525
|
sgpt)
|
|
428
|
-
printf "%s" "$full_prompt" | sgpt --chat shell-gpt
|
|
526
|
+
printf "%s" "$full_prompt" | sgpt --chat shell-gpt || _ai_exit=$?
|
|
429
527
|
;;
|
|
430
528
|
ollama)
|
|
431
|
-
printf "%s" "$full_prompt" | ollama run llama3.2
|
|
529
|
+
printf "%s" "$full_prompt" | ollama run llama3.2 || _ai_exit=$?
|
|
432
530
|
;;
|
|
433
531
|
opencode)
|
|
434
|
-
printf "%s" "$full_prompt" | opencode query
|
|
532
|
+
printf "%s" "$full_prompt" | opencode query || _ai_exit=$?
|
|
435
533
|
;;
|
|
436
534
|
aider)
|
|
437
|
-
printf "%s" "$full_prompt" | aider --msg "-"
|
|
535
|
+
printf "%s" "$full_prompt" | aider --msg "-" || _ai_exit=$?
|
|
438
536
|
;;
|
|
439
537
|
autohand)
|
|
440
|
-
printf "%s" "$full_prompt" | autohand chat
|
|
538
|
+
printf "%s" "$full_prompt" | autohand chat || _ai_exit=$?
|
|
441
539
|
;;
|
|
442
540
|
vibe)
|
|
443
|
-
printf "%s" "$full_prompt" | vibe chat
|
|
541
|
+
printf "%s" "$full_prompt" | vibe chat || _ai_exit=$?
|
|
444
542
|
;;
|
|
445
543
|
qwen)
|
|
446
|
-
printf "%s" "$full_prompt" | qwen chat
|
|
544
|
+
printf "%s" "$full_prompt" | qwen chat || _ai_exit=$?
|
|
447
545
|
;;
|
|
448
546
|
zai)
|
|
449
|
-
printf "%s" "$full_prompt" | zai chat
|
|
547
|
+
printf "%s" "$full_prompt" | zai chat || _ai_exit=$?
|
|
450
548
|
;;
|
|
451
549
|
*)
|
|
452
550
|
ui_err "Unsupported tool" "$tool"
|
|
453
551
|
exit 1
|
|
454
552
|
;;
|
|
455
553
|
esac
|
|
554
|
+
_ai_end_ts=$(date +%s)
|
|
555
|
+
_ai_dur=$((_ai_end_ts - _ai_start_ts))
|
|
556
|
+
_ai_log_run "$tool_bin" "$_ai_exit" "$_ai_dur" "$_ai_prompt_words" 2>/dev/null || true
|
|
557
|
+
return "$_ai_exit"
|
|
456
558
|
}
|
|
457
559
|
|
|
458
560
|
# Dispatch
|
|
459
561
|
case "${1:-}" in
|
|
460
562
|
ai)
|
|
461
563
|
shift
|
|
462
|
-
|
|
564
|
+
# Subcommands first: `dot ai delegate`, `dot ai cost`. Fall through
|
|
565
|
+
# to status if no subcommand or unknown one.
|
|
566
|
+
case "${1:-}" in
|
|
567
|
+
delegate)
|
|
568
|
+
shift
|
|
569
|
+
cmd_ai_delegate "$@"
|
|
570
|
+
;;
|
|
571
|
+
cost)
|
|
572
|
+
shift
|
|
573
|
+
cmd_ai_cost "$@"
|
|
574
|
+
;;
|
|
575
|
+
"" | status)
|
|
576
|
+
cmd_ai_status "$@"
|
|
577
|
+
;;
|
|
578
|
+
*)
|
|
579
|
+
cmd_ai_status "$@"
|
|
580
|
+
;;
|
|
581
|
+
esac
|
|
463
582
|
;;
|
|
464
583
|
ai-setup)
|
|
465
584
|
shift
|
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
set -euo pipefail
|
|
7
7
|
|
|
8
8
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
9
|
-
# shellcheck source
|
|
10
|
-
source "$SCRIPT_DIR
|
|
9
|
+
# shellcheck source=../../../lib/dot/utils.sh
|
|
10
|
+
source "$SCRIPT_DIR/../../../lib/dot/utils.sh"
|
|
11
11
|
|
|
12
12
|
dot_ui_command_banner "Appearance" "${1:-}"
|
|
13
13
|
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
set -euo pipefail
|
|
27
27
|
|
|
28
28
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
29
|
-
# shellcheck source
|
|
30
|
-
source "$SCRIPT_DIR
|
|
29
|
+
# shellcheck source=../../../lib/dot/utils.sh
|
|
30
|
+
source "$SCRIPT_DIR/../../../lib/dot/utils.sh"
|
|
31
31
|
|
|
32
32
|
if [[ "${1:-}" != "cd" ]]; then
|
|
33
33
|
dot_ui_command_banner "Core" "${1:-}"
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
set -euo pipefail
|
|
8
8
|
|
|
9
9
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
10
|
-
# shellcheck source
|
|
11
|
-
source "$SCRIPT_DIR
|
|
10
|
+
# shellcheck source=../../../lib/dot/utils.sh
|
|
11
|
+
source "$SCRIPT_DIR/../../../lib/dot/utils.sh"
|
|
12
12
|
|
|
13
13
|
dot_ui_command_banner "Diagnostics" "${1:-}" "$@"
|
|
14
14
|
|
|
@@ -29,7 +29,7 @@ cmd_smoke_test() {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
cmd_intelligence() {
|
|
32
|
-
run_script "
|
|
32
|
+
run_script "lib/dot/bento.sh" "Intelligence Surface" "$@"
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
cmd_heal() {
|
|
@@ -120,9 +120,9 @@ cmd_metrics() {
|
|
|
120
120
|
echo "Dotfiles source not found." >&2
|
|
121
121
|
exit 1
|
|
122
122
|
fi
|
|
123
|
-
# shellcheck source
|
|
123
|
+
# shellcheck source=../../../lib/dot/log.sh
|
|
124
124
|
# shellcheck disable=SC1091
|
|
125
|
-
source "$src_dir/
|
|
125
|
+
source "$src_dir/lib/dot/log.sh"
|
|
126
126
|
ui_header "Recent Metrics"
|
|
127
127
|
echo ""
|
|
128
128
|
dot_metrics_summary "${1:-20}"
|