@sebastienrousseau/dotfiles 0.2.499 → 0.2.501

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.
Files changed (567) hide show
  1. package/CHANGELOG.md +452 -0
  2. package/LICENSE +1283 -0
  3. package/README.md +322 -0
  4. package/docs/.vitepress/reports/localization-readability-audit.md +73 -0
  5. package/docs/AI.md +108 -0
  6. package/docs/CNAME +1 -0
  7. package/docs/COPYRIGHT +4 -3
  8. package/docs/NAMING_CONVENTIONS.md +102 -0
  9. package/docs/README.md +82 -0
  10. package/docs/_config.yml +59 -0
  11. package/docs/adr/ADR-001-ci-cd-pipeline.md +118 -0
  12. package/docs/adr/ADR-002-shell-performance.md +130 -0
  13. package/docs/adr/ADR-003-security-first.md +158 -0
  14. package/docs/adr/ADR-004-cli-architecture.md +171 -0
  15. package/docs/adr/ADR-005-chezmoi-choice.md +99 -0
  16. package/docs/adr/ADR-006-shell-selection.md +124 -0
  17. package/docs/adr/ADR-007-multi-shell-parity.md +62 -0
  18. package/docs/adr/ADR-008-alias-system-architecture.md +95 -0
  19. package/docs/adr/ADR-009-wallpaper-driven-theming.md +131 -0
  20. package/docs/adr/ADR-010-starship-transient-prompt.md +144 -0
  21. package/docs/adr/ADR-011-nushell-tier3-keep.md +144 -0
  22. package/docs/adr/README.md +39 -0
  23. package/docs/architecture/ARCHITECTURE.md +117 -0
  24. package/docs/architecture/INTEROP.md +44 -0
  25. package/docs/architecture/REPO_LAYOUT.md +241 -0
  26. package/docs/architecture/WALKTHROUGH.md +86 -0
  27. package/docs/architecture/fleet-deployment.md +77 -0
  28. package/docs/archive/EUXIS_2026_REVIEW.md +127 -0
  29. package/docs/archive/LEGACY_ROADMAP.md +160 -0
  30. package/docs/archive/MILESTONE_v0.2.493.md +47 -0
  31. package/docs/{PLAN.md → archive/PLAN.md} +50 -12
  32. package/docs/archive/REPO_AUDIT.md +31 -0
  33. package/docs/guides/INSTALL.md +144 -0
  34. package/docs/guides/NEOVIM_IDE_GUIDE.md +61 -0
  35. package/docs/guides/THEMING.md +230 -0
  36. package/docs/guides/TROUBLESHOOTING.md +176 -0
  37. package/docs/guides/WSL2_NIX_TROUBLESHOOTING.md +792 -0
  38. package/docs/index.md +43 -0
  39. package/docs/interop/A2A.md +39 -0
  40. package/docs/interop/POWERSHELL.md +102 -0
  41. package/docs/manual/00-introduction.md +89 -0
  42. package/docs/manual/01-concepts/01-architecture.md +138 -0
  43. package/docs/manual/01-concepts/02-trust-model.md +182 -0
  44. package/docs/manual/01-concepts/03-theme-engine.md +186 -0
  45. package/docs/manual/01-concepts/04-fleet.md +148 -0
  46. package/docs/manual/01-concepts/05-self-healing.md +204 -0
  47. package/docs/manual/02-tutorials/01-first-install.md +197 -0
  48. package/docs/manual/02-tutorials/02-add-wallpaper.md +216 -0
  49. package/docs/manual/02-tutorials/03-create-profile.md +244 -0
  50. package/docs/manual/02-tutorials/04-encrypt-secret.md +281 -0
  51. package/docs/manual/02-tutorials/05-deploy-fleet.md +283 -0
  52. package/docs/manual/03-reference/01-dot-cli.md +417 -0
  53. package/docs/manual/03-reference/02-config-files.md +265 -0
  54. package/docs/manual/03-reference/03-environment.md +124 -0
  55. package/docs/manual/03-reference/04-templates.md +190 -0
  56. package/docs/manual/03-reference/05-feature-flags.md +128 -0
  57. package/docs/manual/04-cookbook/01-recipes.md +285 -0
  58. package/docs/manual/04-cookbook/02-troubleshooting.md +351 -0
  59. package/docs/manual/04-cookbook/03-faq.md +175 -0
  60. package/docs/manual/05-appendices/A-platform-matrix.md +101 -0
  61. package/docs/manual/05-appendices/B-security-checklist.md +84 -0
  62. package/docs/manual/05-appendices/C-glossary.md +40 -0
  63. package/docs/manual/05-appendices/D-bibliography.md +58 -0
  64. package/docs/manual/05-appendices/E-license.md +38 -0
  65. package/docs/manual/_toc.yml +58 -0
  66. package/docs/manual/command-index.md +62 -0
  67. package/docs/manual/concept-index.md +168 -0
  68. package/docs/operations/ATTESTATION.md +44 -0
  69. package/docs/operations/CI_CADENCE.md +107 -0
  70. package/docs/operations/CI_COMPOSITES.md +156 -0
  71. package/docs/operations/COMPLETIONS.md +123 -0
  72. package/docs/operations/COVERAGE.md +148 -0
  73. package/docs/operations/DRIFT.md +107 -0
  74. package/docs/operations/MAINTENANCE.md +63 -0
  75. package/docs/operations/MIGRATION.md +109 -0
  76. package/docs/operations/OPERATIONS.md +188 -0
  77. package/docs/operations/PERFORMANCE.md +133 -0
  78. package/docs/operations/RELIABILITY.md +122 -0
  79. package/docs/{ROADMAP.md → operations/ROADMAP.md} +57 -39
  80. package/docs/operations/TESTING.md +199 -0
  81. package/docs/operations/TRACEABILITY.md +35 -0
  82. package/docs/operations/TRUSTED_AGENT_WORKSTATION.md +65 -0
  83. package/docs/operations/VERSION_SYNC.md +393 -0
  84. package/docs/reference/ALIASES.md +131 -0
  85. package/docs/reference/ALIASES_CHEATSHEET.md +32 -0
  86. package/docs/reference/ALIASES_DEPRECATIONS.md +13 -0
  87. package/docs/reference/FEATURES.md +66 -0
  88. package/docs/reference/FONTS.md +112 -0
  89. package/docs/reference/PROFILES.md +69 -0
  90. package/docs/reference/SCREENSHOTS.md +121 -0
  91. package/docs/reference/SCRIPTS.md +71 -0
  92. package/docs/reference/SUPPORT_MATRIX.md +80 -0
  93. package/docs/reference/THEMES.md +117 -0
  94. package/docs/reference/TOOLS.md +109 -0
  95. package/docs/reference/UTILS.md +155 -0
  96. package/docs/security/AI_ACT_COMPLIANCE.md +94 -0
  97. package/docs/security/AUDIT_BYPASS.md +103 -0
  98. package/docs/security/AUTOMATION_SECRETS.md +26 -0
  99. package/docs/security/CI_EGRESS_ALLOWLIST.md +127 -0
  100. package/docs/security/COMPLIANCE.md +458 -0
  101. package/docs/security/DEPS_DEV_EXCEPTIONS.md +86 -0
  102. package/docs/security/ENCRYPTION.md +57 -0
  103. package/docs/security/FMEA.md +159 -0
  104. package/docs/security/HISTORY_FILTERING.md +132 -0
  105. package/docs/security/INCIDENT_RESPONSE.md +579 -0
  106. package/docs/security/INSTALL_VERIFICATION.md +122 -0
  107. package/docs/security/KEYS.md +49 -0
  108. package/docs/security/KEY_ROTATION.md +223 -0
  109. package/docs/security/MCP_POLICY.md +78 -0
  110. package/docs/security/POLICY_RELEASES.md +37 -0
  111. package/docs/security/README.md +28 -0
  112. package/docs/security/SCORECARD.md +80 -0
  113. package/docs/security/SECRETS.md +158 -0
  114. package/docs/security/SECURITY.md +45 -0
  115. package/docs/security/SECURITY_CHECKLIST.md +55 -0
  116. package/docs/security/SHELL_EXEMPTIONS.md +145 -0
  117. package/docs/security/SOUP_REGISTER.md +36 -0
  118. package/docs/security/THREAT_MODEL.md +130 -0
  119. package/docs/security/VERIFICATION_VALIDATION.md +228 -0
  120. package/docs/themes/README.md +10 -0
  121. package/docs/themes/VISUAL_INTEGRITY_REPORT.md +30 -0
  122. package/docs/themes/hero-shot.svg +78 -0
  123. package/dot_config/.module-manifest.json +69 -0
  124. package/dot_config/ai/identity.md +23 -0
  125. package/dot_config/ai/patterns/architect.md +16 -0
  126. package/dot_config/ai/patterns/hardener.md +15 -0
  127. package/dot_config/ai/patterns/refactor.md +15 -0
  128. package/dot_config/aider/aider.conf.yml +32 -0
  129. package/dot_config/alacritty/alacritty.toml.tmpl +55 -0
  130. package/dot_config/ansible/ansible.cfg +11 -0
  131. package/dot_config/atuin/config.toml.tmpl +47 -0
  132. package/dot_config/bat/config +23 -0
  133. package/dot_config/brave-flags.conf.tmpl +7 -0
  134. package/dot_config/btop/btop.conf +16 -0
  135. package/dot_config/btop/themes/tokyonight.theme +34 -0
  136. package/dot_config/bun/bunfig.toml.tmpl +33 -0
  137. package/dot_config/claude/mcp_servers.json +20 -0
  138. package/dot_config/containers/containers.conf +14 -0
  139. package/dot_config/curl/dot_curlrc +18 -0
  140. package/dot_config/dlv/config.yml +39 -0
  141. package/dot_config/docker/config.json +15 -0
  142. package/dot_config/dotfiles/agent-card.json +29 -0
  143. package/dot_config/dotfiles/agent-profiles.json +92 -0
  144. package/dot_config/dotfiles/boot/README.md +13 -0
  145. package/dot_config/dotfiles/grub/README.md +13 -0
  146. package/dot_config/dotfiles/lock/README.md +13 -0
  147. package/dot_config/dotfiles/mcp-lock.json +33 -0
  148. package/dot_config/dotfiles/mcp-policy.json +52 -0
  149. package/dot_config/dotfiles/mcp-registry.json +47 -0
  150. package/dot_config/dotfiles/model-registry.json +20 -0
  151. package/dot_config/dotfiles/policy-bundles.json +38 -0
  152. package/dot_config/dotfiles/prompt-registry.json +16 -0
  153. package/dot_config/dotfiles/versions.env +18 -0
  154. package/dot_config/duf/duf.conf +6 -0
  155. package/dot_config/duti/defaults.duti +5 -0
  156. package/dot_config/emoji/emoji.txt +34 -0
  157. package/dot_config/environment.d/50-ssh-agent.conf +2 -0
  158. package/dot_config/environment.d/90-wayland.conf +19 -0
  159. package/dot_config/fastfetch/config.jsonc +28 -0
  160. package/dot_config/firefox/user.js.tmpl +58 -0
  161. package/dot_config/fish/completions/dot-theme-sync.fish.tmpl +9 -0
  162. package/dot_config/fish/completions/dot.fish.tmpl +115 -0
  163. package/dot_config/fish/conf.d/000-perf-cache.fish +56 -0
  164. package/dot_config/fish/conf.d/aliases.fish.tmpl +77 -0
  165. package/dot_config/fish/conf.d/env.fish.tmpl +48 -0
  166. package/dot_config/fish/conf.d/functions.fish.tmpl +22 -0
  167. package/dot_config/fish/conf.d/init.fish.tmpl +172 -0
  168. package/dot_config/fish/config.fish.tmpl +44 -0
  169. package/dot_config/fish/fish_plugins +1 -0
  170. package/dot_config/fish/functions/_.fish +3 -0
  171. package/dot_config/fish/functions/_cached_eval.fish +131 -0
  172. package/dot_config/fish/functions/_cached_eval_clear.fish +17 -0
  173. package/dot_config/fish/functions/als.fish +46 -0
  174. package/dot_config/fish/functions/bg-upgrade.fish +7 -0
  175. package/dot_config/fish/functions/c.fish +3 -0
  176. package/dot_config/fish/functions/cat.fish +9 -0
  177. package/dot_config/fish/functions/d.fish +7 -0
  178. package/dot_config/fish/functions/dot.fish +34 -0
  179. package/dot_config/fish/functions/h.fish +3 -0
  180. package/dot_config/fish/functions/l.fish +7 -0
  181. package/dot_config/fish/functions/la.fish +7 -0
  182. package/dot_config/fish/functions/ll.fish +7 -0
  183. package/dot_config/fish/functions/log_error.fish +13 -0
  184. package/dot_config/fish/functions/log_info.fish +13 -0
  185. package/dot_config/fish/functions/lr.fish +7 -0
  186. package/dot_config/fish/functions/lra.fish +7 -0
  187. package/dot_config/fish/functions/ls.fish +7 -0
  188. package/dot_config/fish/functions/lt.fish +7 -0
  189. package/dot_config/fish/functions/lta.fish +7 -0
  190. package/dot_config/fish/functions/notify-run.fish +11 -0
  191. package/dot_config/fish/functions/q.fish +3 -0
  192. package/dot_config/fish/functions/silent-run.fish +7 -0
  193. package/dot_config/fish/functions/yy.fish +8 -0
  194. package/dot_config/flatpak/flatpak.list +4 -0
  195. package/dot_config/fontconfig/fonts.conf.tmpl +57 -0
  196. package/dot_config/foot/foot.ini.tmpl +33 -0
  197. package/dot_config/fuzzel/fuzzel.ini.tmpl +18 -0
  198. package/dot_config/fzf/fzf.zsh +48 -0
  199. package/dot_config/gem/gemrc +9 -0
  200. package/dot_config/gh/config.yml +12 -0
  201. package/dot_config/ghostty/config.tmpl +165 -0
  202. package/dot_config/git/allowed_signers.tmpl +18 -0
  203. package/dot_config/git/attributes +12 -0
  204. package/dot_config/git/commit-template +10 -0
  205. package/dot_config/git/hooks/executable_commit-msg +146 -0
  206. package/dot_config/git/ignore +27 -0
  207. package/dot_config/gnupg/gpg-agent.conf +11 -0
  208. package/dot_config/go/golangci.yml +118 -0
  209. package/dot_config/go/gopls.json +30 -0
  210. package/dot_config/goose/config.yaml +29 -0
  211. package/dot_config/gtk-3.0/gtk.css.tmpl +184 -0
  212. package/dot_config/gtk-3.0/settings.ini.tmpl +27 -0
  213. package/dot_config/gtk-4.0/gtk.css.tmpl +252 -0
  214. package/dot_config/gtk-4.0/settings.ini.tmpl +18 -0
  215. package/dot_config/htop/htoprc +20 -0
  216. package/dot_config/inputrc +2 -0
  217. package/dot_config/ipython/profile_default/ipython_config.py +19 -0
  218. package/dot_config/just/justfile +122 -0
  219. package/dot_config/k9s/config.yaml +65 -0
  220. package/dot_config/k9s/skins/catppuccin-mocha.yaml +116 -0
  221. package/dot_config/kanshi/config.tmpl +22 -0
  222. package/dot_config/karabiner/karabiner.json +14 -0
  223. package/dot_config/kitty/kitty.conf.tmpl +53 -0
  224. package/dot_config/lazydocker/config.yml +186 -0
  225. package/dot_config/lazygit/config.yml +35 -0
  226. package/dot_config/mako/config +47 -0
  227. package/dot_config/mas/masapps.txt +5 -0
  228. package/dot_config/micro/settings.json +3 -0
  229. package/dot_config/mimeapps.list +77 -0
  230. package/dot_config/minikube/config.json +13 -0
  231. package/dot_config/mise/config.toml +99 -0
  232. package/dot_config/mongosh/mongoshrc.js +68 -0
  233. package/dot_config/mpv/input.conf +47 -0
  234. package/dot_config/mpv/mpv.conf +47 -0
  235. package/dot_config/mycli/myclirc +67 -0
  236. package/dot_config/nano/nanorc +28 -0
  237. package/dot_config/ncdu/config +12 -0
  238. package/dot_config/niri/config.kdl.tmpl +327 -0
  239. package/dot_config/nushell/aliases.nu +18 -0
  240. package/dot_config/nushell/cached_eval.nu +80 -0
  241. package/dot_config/nushell/completions.nu.tmpl +52 -0
  242. package/dot_config/nushell/config.nu.tmpl +86 -0
  243. package/dot_config/nushell/env.nu.tmpl +102 -0
  244. package/dot_config/nushell/functions.nu.tmpl +17 -0
  245. package/dot_config/nvim/init.lua +18 -0
  246. package/dot_config/nvim/lazy-lock.json +58 -0
  247. package/dot_config/nvim/lua/config/autocmds.lua +107 -0
  248. package/dot_config/nvim/lua/config/keymaps.lua +92 -0
  249. package/dot_config/nvim/lua/config/lazy.lua +44 -0
  250. package/dot_config/nvim/lua/config/options.lua +49 -0
  251. package/dot_config/nvim/lua/plugins/ai.lua +75 -0
  252. package/dot_config/nvim/lua/plugins/coding.lua +216 -0
  253. package/dot_config/nvim/lua/plugins/completion.lua +60 -0
  254. package/dot_config/nvim/lua/plugins/dap.lua +412 -0
  255. package/dot_config/nvim/lua/plugins/editor.lua +55 -0
  256. package/dot_config/nvim/lua/plugins/git.lua +10 -0
  257. package/dot_config/nvim/lua/plugins/lsp.lua +156 -0
  258. package/dot_config/nvim/lua/plugins/markdown.lua +18 -0
  259. package/dot_config/nvim/lua/plugins/rust.lua +34 -0
  260. package/dot_config/nvim/lua/plugins/sessions.lua +33 -0
  261. package/dot_config/nvim/lua/plugins/ui.lua +509 -0
  262. package/dot_config/paru/paru.conf +10 -0
  263. package/dot_config/pip/pip.conf.tmpl +32 -0
  264. package/dot_config/powershell/Microsoft.PowerShell_profile.ps1.tmpl +81 -0
  265. package/dot_config/pueue/pueue.yml +34 -0
  266. package/dot_config/pypoetry/config.toml +6 -0
  267. package/dot_config/pyrightconfig.json +5 -0
  268. package/dot_config/raycast/README.md +13 -0
  269. package/dot_config/redis/redisclirc +41 -0
  270. package/dot_config/ripgrep/ripgreprc +21 -0
  271. package/dot_config/shell/00-core-paths.sh.tmpl +134 -0
  272. package/dot_config/shell/05-core-safety.sh +48 -0
  273. package/dot_config/shell/10-secrets.sh +41 -0
  274. package/dot_config/shell/40-fzf-defaults.sh.tmpl +17 -0
  275. package/dot_config/shell/40-ls-colors.sh +49 -0
  276. package/dot_config/shell/50-logic-functions-core.sh.tmpl +11 -0
  277. package/dot_config/shell/50-logic-functions.sh.tmpl +11 -0
  278. package/dot_config/shell/51-logic-functions-extra.sh.tmpl +65 -0
  279. package/dot_config/shell/90-ux-aliases.sh.tmpl +121 -0
  280. package/dot_config/shell/91-ux-aliases-lazy.sh.tmpl +55 -0
  281. package/dot_config/shell/Brewfile +207 -0
  282. package/dot_config/shell/Brewfile.cask +92 -0
  283. package/dot_config/shell/Brewfile.cli +127 -0
  284. package/dot_config/shell/README.md +284 -0
  285. package/dot_config/shell/als_data.txt.tmpl +65 -0
  286. package/dot_config/shell/custom/auto_ls.zsh +20 -0
  287. package/dot_config/shell/custom/context_suggest.zsh +68 -0
  288. package/dot_config/shell/custom/error_analysis.zsh +45 -0
  289. package/dot_config/sops/dot_sops.yaml +23 -0
  290. package/dot_config/starship.toml.tmpl +202 -0
  291. package/dot_config/swaylock/config +43 -0
  292. package/dot_config/systemd/user/dotfiles-maintenance.service +8 -0
  293. package/dot_config/systemd/user/dotfiles-maintenance.timer +11 -0
  294. package/dot_config/systemd/user/pueued.service +12 -0
  295. package/dot_config/systemd/user/ssh-agent.service +12 -0
  296. package/dot_config/task/Taskfile.yml +86 -0
  297. package/dot_config/tflint/tflint.hcl +9 -0
  298. package/dot_config/tmux/tmux.conf.tmpl +223 -0
  299. package/dot_config/topgrade.toml.tmpl +54 -0
  300. package/dot_config/user-dirs.dirs +10 -0
  301. package/dot_config/vscode/extensions.txt +11 -0
  302. package/dot_config/vscode/settings.json.tmpl +82 -0
  303. package/dot_config/waybar/config.jsonc.tmpl +90 -0
  304. package/dot_config/waybar/style.css.tmpl +211 -0
  305. package/dot_config/wezterm/wezterm.lua.tmpl +64 -0
  306. package/dot_config/wget/wgetrc +12 -0
  307. package/dot_config/xdg-desktop-portal/niri-portals.conf +5 -0
  308. package/dot_config/yarn/yarnrc.yml +36 -0
  309. package/dot_config/yazi/keymap.toml +67 -0
  310. package/dot_config/yazi/theme.toml +102 -0
  311. package/dot_config/yazi/yazi.toml +40 -0
  312. package/dot_config/zathura/zathurarc +52 -0
  313. package/dot_config/zellij/config.kdl.tmpl +79 -0
  314. package/dot_config/zsh/dot_zprofile +7 -0
  315. package/dot_config/zsh/dot_zshenv +5 -0
  316. package/dot_config/zsh/dot_zshrc.tmpl +635 -0
  317. package/dot_config/zsh/rc.d/00-alias-shims.zsh +99 -0
  318. package/dot_config/zsh/rc.d/05-ssh-agent.zsh +18 -0
  319. package/dot_config/zsh/rc.d/10-env.zsh.tmpl +28 -0
  320. package/dot_config/zsh/rc.d/20-zinit.zsh +65 -0
  321. package/dot_config/zsh/rc.d/30-options.zsh.tmpl +214 -0
  322. package/dot_config/zsh/rc.d/40-bell.zsh +20 -0
  323. package/dot_config/zsh/rc.d/50-login-fortune.zsh +9 -0
  324. package/dot_config/zsh/rc.d/99-alias-wrapper.zsh +32 -0
  325. package/dot_local/bin/executable_ai-update +195 -0
  326. package/dot_local/bin/executable_ai_core +152 -0
  327. package/dot_local/bin/executable_antigravity +11 -0
  328. package/dot_local/bin/executable_b64 +84 -0
  329. package/dot_local/bin/executable_bm +79 -0
  330. package/dot_local/bin/executable_cb +39 -0
  331. package/dot_local/bin/executable_dot +596 -0
  332. package/dot_local/bin/executable_dot-ai +36 -0
  333. package/dot_local/bin/executable_dot-bootstrap +77 -0
  334. package/dot_local/bin/executable_dot-launch-or-focus +52 -0
  335. package/dot_local/bin/executable_dot-load-benchmark +31 -0
  336. package/dot_local/bin/executable_dot-load-benchmark-pty +77 -0
  337. package/dot_local/bin/executable_dot-theme-sync +952 -0
  338. package/dot_local/bin/executable_dot_completion +57 -0
  339. package/dot_local/bin/executable_dtags +28 -0
  340. package/dot_local/bin/executable_epoch +67 -0
  341. package/dot_local/bin/executable_extract +41 -0
  342. package/dot_local/bin/executable_gbd +52 -0
  343. package/dot_local/bin/executable_gd +42 -0
  344. package/dot_local/bin/executable_git-ai-commit +175 -0
  345. package/dot_local/bin/executable_git-ai-diff +169 -0
  346. package/dot_local/bin/executable_gl +101 -0
  347. package/dot_local/bin/executable_hash +161 -0
  348. package/dot_local/bin/executable_hashsum +160 -0
  349. package/dot_local/bin/executable_hex +115 -0
  350. package/dot_local/bin/executable_jsonv +78 -0
  351. package/dot_local/bin/executable_jwt +94 -0
  352. package/dot_local/bin/executable_kill-port +75 -0
  353. package/dot_local/bin/executable_lorem +118 -0
  354. package/dot_local/bin/executable_mkscript +35 -0
  355. package/dot_local/bin/executable_monitor +56 -0
  356. package/dot_local/bin/executable_myip +51 -0
  357. package/dot_local/bin/executable_notify +24 -0
  358. package/dot_local/bin/executable_open +38 -0
  359. package/dot_local/bin/executable_pw +27 -0
  360. package/dot_local/bin/executable_rec-start +46 -0
  361. package/dot_local/bin/executable_rec-stop +35 -0
  362. package/dot_local/bin/executable_regex +132 -0
  363. package/dot_local/bin/executable_start-niri +8 -0
  364. package/dot_local/bin/executable_tmux-sessionizer +314 -0
  365. package/dot_local/bin/executable_tour +177 -0
  366. package/dot_local/bin/executable_up +23 -0
  367. package/dot_local/bin/executable_update +142 -0
  368. package/dot_local/bin/executable_uuid +87 -0
  369. package/dot_local/bin/executable_win +32 -0
  370. package/dot_local/bin/executable_yamlv +57 -0
  371. package/dot_local/share/bash-completion/completions/dot +72 -0
  372. package/dot_local/share/icons/hicolor/128x128/apps/rousseau.png +0 -0
  373. package/dot_local/share/icons/hicolor/16x16/apps/rousseau.png +0 -0
  374. package/dot_local/share/icons/hicolor/24x24/apps/rousseau.png +0 -0
  375. package/dot_local/share/icons/hicolor/256x256/apps/rousseau.png +0 -0
  376. package/dot_local/share/icons/hicolor/32x32/apps/rousseau.png +0 -0
  377. package/dot_local/share/icons/hicolor/48x48/apps/rousseau.png +0 -0
  378. package/dot_local/share/icons/hicolor/512x512/apps/rousseau.png +0 -0
  379. package/dot_local/share/icons/hicolor/64x64/apps/rousseau.png +0 -0
  380. package/dot_local/share/icons/hicolor/96x96/apps/rousseau.png +0 -0
  381. package/dot_local/share/icons/hicolor/scalable/apps/rousseau.png +0 -0
  382. package/dot_local/share/man/man1/dot.1 +149 -0
  383. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_download +64 -0
  384. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_install +18 -0
  385. package/dot_local/share/mise/plugins/kiro-cli/bin/executable_list-all +13 -0
  386. package/dot_local/share/wayland-sessions/niri.desktop.tmpl +6 -0
  387. package/dot_local/share/zsh/completions/.keep +0 -0
  388. package/dot_local/share/zsh/completions/_dot +283 -0
  389. package/install.sh +350 -0
  390. package/package.json +1 -1
  391. package/scripts/ci/check-copyright-headers.sh +96 -0
  392. package/scripts/ci/check-dangerous-chmod.sh +19 -0
  393. package/scripts/ci/check-deps-dev.sh +236 -0
  394. package/scripts/ci/check-insecure-tls.sh +61 -0
  395. package/scripts/ci/check-regression-traceability.sh +67 -0
  396. package/scripts/ci/check-shell-preamble.sh +106 -0
  397. package/scripts/ci/guard-gitleaks-checkout.sh +57 -0
  398. package/scripts/ci/install-chezmoi-verified.sh +64 -0
  399. package/scripts/ci/run-coverage.sh +362 -0
  400. package/scripts/ci/validate-chezmoidata.sh +25 -0
  401. package/scripts/ci/validate-ci-config.sh +224 -0
  402. package/scripts/demo/record.sh +42 -0
  403. package/scripts/diagnostics/a2a-conformance.sh +162 -0
  404. package/scripts/diagnostics/alias-governance.sh +137 -0
  405. package/scripts/diagnostics/aliases-cheatsheet.sh +73 -0
  406. package/scripts/diagnostics/aliases-manifest.sh +31 -0
  407. package/scripts/diagnostics/benchmark.sh +381 -0
  408. package/scripts/diagnostics/conflicts.sh +72 -0
  409. package/scripts/diagnostics/doctor-unified.sh +38 -0
  410. package/scripts/diagnostics/doctor.sh +709 -0
  411. package/scripts/diagnostics/drift-dashboard.sh +201 -0
  412. package/scripts/diagnostics/health.sh +614 -0
  413. package/scripts/diagnostics/history-analysis.sh +85 -0
  414. package/scripts/diagnostics/mcp-doctor.sh +575 -0
  415. package/scripts/diagnostics/perf.sh +452 -0
  416. package/scripts/diagnostics/scorecard.sh +118 -0
  417. package/scripts/diagnostics/secret-governance.sh +58 -0
  418. package/scripts/diagnostics/security-score.sh +438 -0
  419. package/scripts/diagnostics/smoke-test.sh +87 -0
  420. package/scripts/diagnostics/snapshot.sh +89 -0
  421. package/scripts/diagnostics/verify.sh +107 -0
  422. package/scripts/{verify_state.sh → diagnostics/verify_state.sh} +22 -22
  423. package/scripts/diagnostics/version-locks.sh +79 -0
  424. package/scripts/diagnostics/workstation-attestation.sh +186 -0
  425. package/scripts/docs/build-manual.sh +883 -0
  426. package/scripts/docs/check-manual.sh +213 -0
  427. package/scripts/dot/commands/agent.sh +474 -0
  428. package/scripts/dot/commands/ai.sh +481 -0
  429. package/scripts/dot/commands/aliases.sh +250 -0
  430. package/scripts/dot/commands/appearance.sh +80 -0
  431. package/scripts/dot/commands/core.sh +185 -0
  432. package/scripts/dot/commands/diagnostics.sh +229 -0
  433. package/scripts/dot/commands/fleet.sh +399 -0
  434. package/scripts/dot/commands/lint.sh +177 -0
  435. package/scripts/dot/commands/manual.sh +168 -0
  436. package/scripts/dot/commands/meta.sh +248 -0
  437. package/scripts/dot/commands/patterns.sh +54 -0
  438. package/scripts/dot/commands/restore.sh +231 -0
  439. package/scripts/dot/commands/secrets.sh +223 -0
  440. package/scripts/dot/commands/security.sh +76 -0
  441. package/scripts/dot/commands/tools.sh +469 -0
  442. package/scripts/dot/data/alias-deprecations.tsv +2 -0
  443. package/scripts/dot/lib/bento.sh +50 -0
  444. package/scripts/dot/lib/log.sh +200 -0
  445. package/scripts/dot/lib/platform.sh +99 -0
  446. package/scripts/dot/lib/ui.sh +518 -0
  447. package/scripts/dot/lib/utils.sh +377 -0
  448. package/scripts/fonts/install-nerd-fonts.sh +68 -0
  449. package/scripts/fonts/patch-fonts.sh +35 -0
  450. package/scripts/git-hooks/install.sh +11 -0
  451. package/scripts/git-hooks/pre-commit +12 -0
  452. package/scripts/git-hooks/pre-commit-audit.sh +145 -0
  453. package/scripts/git-hooks/pre-push +92 -0
  454. package/scripts/git-hooks/prepare-commit-msg +29 -0
  455. package/scripts/lib/secrets_provider.sh +158 -0
  456. package/scripts/maintenance/check-updates.sh +131 -0
  457. package/scripts/ops/ai-setup.sh +55 -0
  458. package/scripts/ops/bundle.sh +77 -0
  459. package/scripts/ops/chaos.sh +49 -0
  460. package/scripts/ops/chezmoi-apply.sh +270 -0
  461. package/scripts/ops/chezmoi-diff.sh +15 -0
  462. package/scripts/ops/chezmoi-remove.sh +45 -0
  463. package/scripts/ops/chezmoi-update.sh +48 -0
  464. package/scripts/ops/heal-chezmoi.sh +86 -0
  465. package/scripts/ops/heal-system.sh +128 -0
  466. package/scripts/ops/heal-tools.sh +340 -0
  467. package/scripts/ops/heal.sh +222 -0
  468. package/scripts/ops/post-apply-repair.sh +106 -0
  469. package/scripts/ops/prewarm.sh +127 -0
  470. package/scripts/ops/release.sh +252 -0
  471. package/scripts/ops/rollback.sh +589 -0
  472. package/scripts/ops/setup.sh +137 -0
  473. package/scripts/ops/teleport.sh +33 -0
  474. package/scripts/qa/coverage-baseline.sh +60 -0
  475. package/scripts/qa/docs-coverage.sh +111 -0
  476. package/scripts/qa/powershell-contract.ps1 +95 -0
  477. package/scripts/qa/reliability-audit.sh +138 -0
  478. package/scripts/qa/traceability-coverage.sh +116 -0
  479. package/scripts/qa/validate-examples.sh +26 -0
  480. package/scripts/qa/wsl-contract.sh +11 -0
  481. package/scripts/release/package-policy-bundles.sh +125 -0
  482. package/scripts/secrets/age-init.sh +70 -0
  483. package/scripts/secrets/create-secrets-file.sh +45 -0
  484. package/scripts/secrets/encrypt-ssh-key.sh +43 -0
  485. package/scripts/security/backup.sh +57 -0
  486. package/scripts/security/dns-doh.sh +51 -0
  487. package/scripts/security/encryption-check.sh +54 -0
  488. package/scripts/security/enforce-policies.sh +334 -0
  489. package/scripts/security/firewall.sh +90 -0
  490. package/scripts/security/lock-configs.sh +57 -0
  491. package/scripts/security/lock-screen.sh +55 -0
  492. package/scripts/security/manage-secrets.sh +428 -0
  493. package/scripts/security/ssh-cert.sh +203 -0
  494. package/scripts/security/telemetry-kill.sh +50 -0
  495. package/scripts/security/usb-safety.sh +51 -0
  496. package/scripts/theme/apply-gnome-theme.sh +328 -0
  497. package/scripts/theme/extract-theme.py +677 -0
  498. package/scripts/theme/install-boot-logo.sh +62 -0
  499. package/scripts/theme/install-catppuccin-themes.sh +370 -0
  500. package/scripts/theme/install-cursors.sh +25 -0
  501. package/scripts/theme/install-file-icons.sh +26 -0
  502. package/scripts/theme/install-grub-theme.sh +61 -0
  503. package/scripts/theme/install-lock-icon.sh +30 -0
  504. package/scripts/theme/merge-wallpaper.sh +145 -0
  505. package/scripts/theme/rebuild-themes.sh +309 -0
  506. package/scripts/theme/switch.sh +431 -0
  507. package/scripts/theme/wallpaper-rotate.sh +136 -0
  508. package/scripts/theme/wallpaper-sync.sh +397 -0
  509. package/scripts/tools/cmatrix.sh +21 -0
  510. package/scripts/{detect-collisions.py → tools/detect-collisions.py} +2 -2
  511. package/scripts/tools/emoji-picker.sh +48 -0
  512. package/scripts/tools/figlet-banner.sh +18 -0
  513. package/scripts/tools/log-rotate.sh +30 -0
  514. package/scripts/tools/lolcat-wrap.sh +19 -0
  515. package/scripts/tools/pipes.sh +48 -0
  516. package/scripts/tuning/linux.sh +185 -0
  517. package/scripts/tuning/macos.sh +55 -0
  518. package/scripts/uninstall.sh +85 -0
  519. package/scripts/version-sync.sh +487 -0
  520. package/templates/chezmoi-data/geekom-a9.toml.example +21 -0
  521. package/templates/chezmoi-data/mac-m1.toml.example +16 -0
  522. package/templates/chezmoi-data/mac-t2-linux.toml.example +21 -0
  523. package/templates/chezmoi-data/surface-pro-7p.toml.example +21 -0
  524. package/templates/projects/go/.github/workflows/ci.yml +31 -0
  525. package/templates/projects/go/README.md +4 -0
  526. package/templates/projects/go/cmd/__PROJECT_NAME__/main.go +1 -0
  527. package/templates/projects/go/go.sum +0 -0
  528. package/templates/projects/molecule/README.md +7 -0
  529. package/templates/projects/molecule/converge.yml +7 -0
  530. package/templates/projects/molecule/molecule.yml +16 -0
  531. package/templates/projects/node/.github/workflows/ci.yml +30 -0
  532. package/templates/projects/node/README.md +4 -0
  533. package/templates/projects/node/package-lock.json +12 -0
  534. package/templates/projects/node/src/index.js +1 -0
  535. package/templates/projects/packer/README.md +15 -0
  536. package/templates/projects/packer/main.pkr.hcl +15 -0
  537. package/templates/projects/python/.github/workflows/ci.yml +34 -0
  538. package/templates/projects/python/README.md +4 -0
  539. package/templates/projects/python/pyproject.toml +15 -0
  540. package/templates/projects/python/src/__PROJECT_NAME__/__init__.py +1 -0
  541. package/templates/projects/python/tests/test_basic.py +1 -0
  542. package/docs/ARCHITECTURE.md +0 -62
  543. package/docs/COMPLIANCE.md +0 -47
  544. package/docs/OPERATIONS.md +0 -103
  545. package/docs/PR_DESCRIPTION.md +0 -150
  546. package/docs/ROADMAP_legacy.md +0 -556
  547. package/docs/SECURITY_CHECKLIST.md +0 -25
  548. package/docs/TASK.md +0 -99
  549. package/docs/WALKTHROUGH.md +0 -46
  550. package/scripts/backup.sh +0 -142
  551. package/scripts/banner.sh +0 -20
  552. package/scripts/benchmark.sh +0 -20
  553. package/scripts/build.sh +0 -41
  554. package/scripts/clean.sh +0 -31
  555. package/scripts/compile.sh +0 -54
  556. package/scripts/copy.sh +0 -108
  557. package/scripts/doctor.sh +0 -79
  558. package/scripts/dotfiles.sh +0 -63
  559. package/scripts/download.sh +0 -35
  560. package/scripts/help.sh +0 -57
  561. package/scripts/lock-configs.sh +0 -57
  562. package/scripts/package.sh +0 -46
  563. package/scripts/ssh.sh +0 -55
  564. package/scripts/teleport.sh +0 -23
  565. package/scripts/test-aliases.sh +0 -25
  566. package/scripts/test_smoke.sh +0 -88
  567. package/scripts/unpack.sh +0 -28
@@ -0,0 +1,481 @@
1
+ #!/usr/bin/env bash
2
+ # Copyright (c) 2015-2026 Dotfiles. All rights reserved.
3
+ ## Dotfiles AI Commands.
4
+ ##
5
+ ## Provides AI CLI status, setup, RAG query, and bridge commands.
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
8
+
9
+ set -euo pipefail
10
+
11
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
12
+ # shellcheck source=../lib/utils.sh
13
+ source "$SCRIPT_DIR/../lib/utils.sh"
14
+
15
+ dot_ui_command_banner "AI and Agents" "${1:-}"
16
+
17
+ PATTERN_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/ai/patterns"
18
+ AI_CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/dotfiles/ai"
19
+ AI_STATUS_TTL="${DOTFILES_AI_STATUS_TTL:-300}"
20
+ AI_STATUS_CACHE_FILE="${AI_CACHE_DIR}/status.tsv"
21
+
22
+ # Fallback to source tree if patterns don't exist in config (common in CI)
23
+ if [[ ! -d "$PATTERN_DIR" ]]; then
24
+ _AI_SRC="$(cd "$SCRIPT_DIR/../../.." && pwd)"
25
+ if [[ -d "$_AI_SRC/dot_config/ai/patterns" ]]; then
26
+ PATTERN_DIR="$_AI_SRC/dot_config/ai/patterns"
27
+ fi
28
+ fi
29
+
30
+ _show_ai_bridge_usage() {
31
+ echo "Usage: dot cl|codex|copilot|gemini|goose|kiro|autohand|vibe|qwen|zai --pattern [name] \"prompt\""
32
+ echo ""
33
+ echo "Available Patterns:"
34
+ # shellcheck disable=SC2012
35
+ ls -1 "$PATTERN_DIR" 2>/dev/null | sed 's/\.md$//' | sed 's/^/ - /' || echo " (none)"
36
+ }
37
+
38
+ _ai_cache_fresh() {
39
+ local file="$1"
40
+ [[ -f "$file" ]] || return 1
41
+ local now mtime
42
+ now=$(date +%s)
43
+ mtime=$(stat -c %Y "$file" 2>/dev/null || stat -f %m "$file" 2>/dev/null || echo 0)
44
+ ((now - mtime < AI_STATUS_TTL))
45
+ }
46
+
47
+ _ai_extract_version() {
48
+ local bin="$1"
49
+ local output version
50
+ output=$("$bin" --version 2>/dev/null | head -1) || true
51
+ version=$(printf '%s' "$output" | sed 's/^[^0-9]*//' | sed 's/[[:space:]]*$//' | sed 's/\.$//')
52
+ [[ -n "$version" ]] && printf '%s\n' "$version" || printf 'installed\n'
53
+ }
54
+
55
+ _ai_refresh_status_cache() {
56
+ local -n ai_entries=$1
57
+ local tmp_file
58
+ tmp_file="$(mktemp)"
59
+ mkdir -p "$AI_CACHE_DIR"
60
+
61
+ local total=${#ai_entries[@]}
62
+
63
+ # Cold-cache refresh runs `$bin --version` for every tool — node-
64
+ # based ones are slow to start, so the total can hit 15-30s. Show a
65
+ # spinner so the user has feedback.
66
+ ui_spinner_start "Probing $total AI tools (cached for ${AI_STATUS_TTL}s)"
67
+
68
+ local jobs="${DOTFILES_AI_PROBE_JOBS:-$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 4)}"
69
+ local probe_dir
70
+ probe_dir="$(mktemp -d)"
71
+
72
+ # Probe via xargs -P. The probe logic lives INLINE in the bash -c
73
+ # string rather than as an exported function, because `export -f`
74
+ # doesn't always survive across bash invocations on every platform
75
+ # (notably macOS bash 3.2 needs the BASH_FUNC_*() env-var format,
76
+ # which subtly breaks for some shells in PATH). Inlining sidesteps
77
+ # the inheritance question entirely.
78
+ local i=0
79
+ local entry
80
+ local indexed=()
81
+ for entry in "${ai_entries[@]}"; do
82
+ indexed+=("$i|$entry")
83
+ i=$((i + 1))
84
+ done
85
+ # shellcheck disable=SC2016
86
+ local probe_script='
87
+ payload="$1"
88
+ out_dir="$2"
89
+ i="${payload%%|*}"
90
+ entry="${payload#*|}"
91
+ IFS="|" read -r category role name bin desc <<<"$entry"
92
+ 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]*//" | sed "s/[[:space:]]*$//" | sed "s/\.$//")
95
+ printf "%s\t1\t%s\n" "$bin" "$version" >"$out_dir/$i"
96
+ else
97
+ printf "%s\t0\t\n" "$bin" >"$out_dir/$i"
98
+ fi
99
+ '
100
+ # NOTE: `-I{}` already implies one input line per invocation. Adding
101
+ # `-n1` on top triggers a BSD-xargs quirk where the input line is
102
+ # word-split on whitespace ("0|Agents (autonomous)|..." → multiple
103
+ # entries). Use only `-I{}`.
104
+ #
105
+ # ALSO: feed null-delimited records (`-0`) so apostrophes and
106
+ # other quote-like characters in the descriptions ("Block's coding
107
+ # agent") don't trigger xargs's "unterminated quote" parser.
108
+ printf '%s\0' "${indexed[@]}" |
109
+ xargs -0 -I{} -P"$jobs" \
110
+ bash -c "$probe_script" _ {} "$probe_dir" \
111
+ 2>/dev/null || true
112
+
113
+ # Re-assemble in original entry order.
114
+ local n
115
+ for ((n = 0; n < i; n++)); do
116
+ [[ -f "$probe_dir/$n" ]] && cat "$probe_dir/$n" >>"$tmp_file"
117
+ done
118
+ rm -rf "$probe_dir"
119
+
120
+ # Guard with `|| true` because ui_spinner_stop's last line evaluates
121
+ # to rc=1 when stdout is a TTY (the `[[ ! -t 1 ]] && printf` short-
122
+ # circuit). Under `set -euo pipefail` that rc would kill the script
123
+ # right before we get to write the cache, leaving the user with a
124
+ # silent broken cold-cache run. Defence in depth — the function
125
+ # now also has an explicit `return 0` upstream.
126
+ ui_spinner_stop || true
127
+
128
+ mv "$tmp_file" "$AI_STATUS_CACHE_FILE"
129
+ }
130
+
131
+ _ai_get_cached_status() {
132
+ cat "$AI_STATUS_CACHE_FILE"
133
+ }
134
+
135
+ # binary -> mise package mapping
136
+ _ai_mise_pkg() {
137
+ case "$1" in
138
+ claude) echo "npm:@anthropic-ai/claude-code" ;;
139
+ codex) echo "npm:@openai/codex" ;;
140
+ copilot) echo "npm:@github/copilot" ;;
141
+ goose) echo "pipx:goose-ai" ;;
142
+ aider) echo "pipx:aider-chat" ;;
143
+ opencode) echo "npm:opencode-ai" ;;
144
+ sgpt) echo "pipx:shell-gpt" ;;
145
+ gemini) echo "npm:@google/gemini-cli" ;;
146
+ ollama) echo "aqua:ollama/ollama" ;;
147
+ kiro-cli) echo "kiro-cli" ;;
148
+ autohand) echo "npm:autohand-cli" ;;
149
+ vibe) echo "pipx:mistral-vibe" ;;
150
+ qwen) echo "npm:@qwen-code/qwen-code" ;;
151
+ zai) echo "npm:@guizmo-ai/zai-cli" ;;
152
+ *) echo "" ;;
153
+ esac
154
+ }
155
+
156
+ cmd_ai_status() {
157
+ ui_header "AI CLI Status"
158
+
159
+ # category|role|name|binary|description
160
+ local -a ai_clis=(
161
+ "Agents (autonomous)|agent|Claude Code|claude|Anthropic CLI agent"
162
+ "Agents (autonomous)|agent|Codex CLI|codex|OpenAI Codex agent"
163
+ "Agents (autonomous)|agent|Copilot CLI|copilot|GitHub Copilot CLI"
164
+ "Agents (autonomous)|agent|Goose|goose|Block's coding agent"
165
+ "Coding (interactive)|coding|Aider|aider|AI pair programmer"
166
+ "Coding (interactive)|coding|OpenCode|opencode|Terminal coding assistant"
167
+ "Coding (interactive)|coding|Autohand Code|autohand|Autohand coding agent"
168
+ "Coding (interactive)|coding|Mistral Vibe|vibe|Mistral AI coding agent"
169
+ "Coding (interactive)|coding|Qwen Code|qwen|Qwen AI coding assistant"
170
+ "Coding (interactive)|coding|ZAI|zai|Zhipu AI coding agent"
171
+ "General (prompt-based)|general|Shell-GPT|sgpt|ChatGPT terminal interface"
172
+ "General (prompt-based)|general|Gemini CLI|gemini|Google AI CLI"
173
+ "Runtime (local)|local|Ollama|ollama|Local LLM runner"
174
+ "Cloud (platform)|cloud|Kiro CLI|kiro-cli|AWS AI assistant"
175
+ )
176
+
177
+ if ! _ai_cache_fresh "$AI_STATUS_CACHE_FILE"; then
178
+ _ai_refresh_status_cache ai_clis
179
+ fi
180
+
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
+ local -a installed=()
190
+ local -a missing=()
191
+ local current_category=""
192
+ local category role name bin desc ver
193
+ for entry in "${ai_clis[@]}"; do
194
+ IFS='|' read -r category role name bin desc <<<"$entry"
195
+ if [[ "$category" != "$current_category" ]]; then
196
+ echo ""
197
+ ui_section "$category"
198
+ current_category="$category"
199
+ fi
200
+ if [[ "${ai_present[$bin]:-0}" == "1" ]]; then
201
+ ver="${ai_version[$bin]:-installed}"
202
+ [[ "$bin" == "claude" ]] && ver="${ver%% *}"
203
+ ui_ok "$name" "$ver — $desc"
204
+ installed+=("$name|$bin|$role")
205
+ else
206
+ ui_info "$name" "— $desc (not installed)"
207
+ missing+=("$name|$bin")
208
+ fi
209
+ done
210
+
211
+ # Offer to install missing providers via mise
212
+ if [[ ${#missing[@]} -gt 0 ]] && has_command mise; then
213
+ echo ""
214
+ local _ai_install_action=""
215
+ if has_command gum; then
216
+ _ai_install_action=$(printf '%s\n' "Install all" "Choose which to install" "Skip" |
217
+ gum choose --header "Missing AI providers — install via mise?") || _ai_install_action=""
218
+ else
219
+ ui_info "Tip" "Install missing providers: mise install"
220
+ ui_info "Tip" "Or individually: mise use -g <package>@latest"
221
+ fi
222
+
223
+ local -a _ai_to_install=()
224
+ case "$_ai_install_action" in
225
+ "Install all")
226
+ _ai_to_install=("${missing[@]}")
227
+ ;;
228
+ "Choose which to install")
229
+ local -a _ai_pick_choices=()
230
+ for entry in "${missing[@]}"; do
231
+ IFS='|' read -r name bin <<<"$entry"
232
+ _ai_pick_choices+=("$name")
233
+ done
234
+ local _ai_picked
235
+ _ai_picked=$(printf '%s\n' "${_ai_pick_choices[@]}" |
236
+ gum choose --no-limit --header "Select providers to install (Space to toggle, Enter to confirm)") || _ai_picked=""
237
+ if [[ -n "$_ai_picked" ]]; then
238
+ while IFS= read -r selected; do
239
+ [[ -z "$selected" ]] && continue
240
+ for entry in "${missing[@]}"; do
241
+ IFS='|' read -r name bin <<<"$entry"
242
+ if [[ "$name" == "$selected" ]]; then
243
+ _ai_to_install+=("$entry")
244
+ fi
245
+ done
246
+ done <<<"$_ai_picked"
247
+ fi
248
+ ;;
249
+ esac
250
+
251
+ if [[ ${#_ai_to_install[@]} -gt 0 ]]; then
252
+ echo ""
253
+ for entry in "${_ai_to_install[@]}"; do
254
+ IFS='|' read -r name bin <<<"$entry"
255
+ local pkg
256
+ pkg=$(_ai_mise_pkg "$bin")
257
+ if [[ -n "$pkg" ]]; then
258
+ if has_command gum; then
259
+ if gum spin --spinner dot --title "Installing $name ($pkg)" -- \
260
+ mise use -g "$pkg@latest" 2>&1; then
261
+ ui_ok "$name" "installed"
262
+ else
263
+ ui_warn "$name" "install failed (continuing)"
264
+ fi
265
+ else
266
+ ui_info "Installing" "$name via mise ($pkg)"
267
+ mise use -g "$pkg@latest" 2>&1 || ui_warn "$name" "install failed (continuing)"
268
+ fi
269
+ fi
270
+ done
271
+ # Invalidate cache after installs
272
+ rm -f "$AI_STATUS_CACHE_FILE"
273
+ echo ""
274
+ ui_ok "Done" "Run 'dot ai' again to see updated status"
275
+ fi
276
+ fi
277
+
278
+ echo ""
279
+ if [ ${#installed[@]} -eq 0 ]; then
280
+ ui_warn "No AI CLIs installed"
281
+ elif has_command gum; then
282
+ ui_info "Launch" "Select an AI CLI to start"
283
+ local -a choices=()
284
+ for entry in "${installed[@]}"; do
285
+ IFS='|' read -r name bin role <<<"$entry"
286
+ choices+=("$(printf '%-16s — %s' "$name" "$role")")
287
+ done
288
+ local pick
289
+ pick=$(printf '%s\n' "${choices[@]}" | gum choose --header "Select an AI CLI") || true
290
+ if [ -n "$pick" ]; then
291
+ pick="${pick%% — *}"
292
+ pick="${pick%"${pick##*[![:space:]]}"}"
293
+ for entry in "${installed[@]}"; do
294
+ IFS='|' read -r name bin role <<<"$entry"
295
+ if [ "$name" = "$pick" ]; then
296
+ echo ""
297
+ ui_info "Starting" "$name ($bin)"
298
+ exec "$bin"
299
+ fi
300
+ done
301
+ fi
302
+ else
303
+ ui_info "Tip" "Install gum for interactive launcher: mise use -g gum"
304
+ fi
305
+ }
306
+
307
+ cmd_ai_setup() {
308
+ run_script "scripts/ops/ai-setup.sh" "AI setup script" "$@"
309
+ }
310
+
311
+ cmd_ai_query() {
312
+ run_script "dot_local/bin/executable_dot-ai" "AI RAG script" "$@"
313
+ }
314
+
315
+ run_ai_with_context() {
316
+ local tool="$1"
317
+ shift
318
+ local pattern_name=""
319
+ local prompt=""
320
+
321
+ while [[ $# -gt 0 ]]; do
322
+ case "$1" in
323
+ --help | -h)
324
+ _show_ai_bridge_usage
325
+ exit 0
326
+ ;;
327
+ --pattern | -p)
328
+ pattern_name="$2"
329
+ shift 2
330
+ ;;
331
+ *)
332
+ prompt="$1"
333
+ shift
334
+ ;;
335
+ esac
336
+ done
337
+
338
+ if [[ -z "$prompt" ]]; then
339
+ _show_ai_bridge_usage
340
+ exit 1
341
+ fi
342
+
343
+ local system_context=""
344
+ if [[ -n "$pattern_name" ]]; then
345
+ local pattern_file="$PATTERN_DIR/${pattern_name}.md"
346
+ if [[ -f "$pattern_file" ]]; then
347
+ system_context=$(cat "$pattern_file")
348
+ else
349
+ ui_err "Pattern not found" "$pattern_name"
350
+ exit 1
351
+ fi
352
+ fi
353
+
354
+ # Inject dynamic system metadata
355
+ local metadata
356
+ metadata="## System Metadata
357
+ - OS: $(uname -s) $(uname -r)
358
+ - Arch: $(uname -m)
359
+ - Date: $(date -u)"
360
+
361
+ local full_prompt="${system_context}
362
+
363
+ ${metadata}
364
+
365
+ ## User Request
366
+ ${prompt}"
367
+
368
+ # Resolve the binary name for the tool
369
+ local tool_bin="$tool"
370
+ case "$tool" in
371
+ cl) tool_bin="claude" ;;
372
+ kiro) tool_bin="kiro-cli" ;;
373
+ esac
374
+
375
+ # Check if the tool is installed; offer mise install if not
376
+ if ! has_command "$tool_bin"; then
377
+ local mise_pkg
378
+ mise_pkg=$(_ai_mise_pkg "$tool_bin")
379
+ if [[ -n "$mise_pkg" ]] && has_command mise; then
380
+ ui_warn "$tool" "not installed"
381
+ local do_install=""
382
+ if has_command gum; then
383
+ do_install=$(gum confirm "Install $tool via mise ($mise_pkg)?" && echo "yes" || echo "no")
384
+ else
385
+ printf "Install %s via mise (%s)? [y/N] " "$tool" "$mise_pkg"
386
+ read -r do_install
387
+ case "$do_install" in y | Y | yes) do_install="yes" ;; *) do_install="no" ;; esac
388
+ fi
389
+ if [[ "$do_install" == "yes" ]]; then
390
+ ui_info "Installing" "$tool via mise ($mise_pkg)"
391
+ mise use -g "$mise_pkg@latest" 2>&1 || {
392
+ ui_err "$tool" "installation failed"
393
+ exit 1
394
+ }
395
+ rm -f "$AI_STATUS_CACHE_FILE"
396
+ else
397
+ ui_err "$tool" "not installed — install with: mise use -g $mise_pkg@latest"
398
+ exit 1
399
+ fi
400
+ else
401
+ ui_err "$tool" "not installed and mise not available"
402
+ exit 1
403
+ fi
404
+ fi
405
+
406
+ ui_info "Executing $tool with pattern: ${pattern_name:-none}"
407
+
408
+ case "$tool" in
409
+ cl | claude)
410
+ printf "%s" "$full_prompt" | claude
411
+ ;;
412
+ codex)
413
+ printf "%s" "$full_prompt" | codex
414
+ ;;
415
+ copilot)
416
+ copilot -sp "$full_prompt"
417
+ ;;
418
+ gemini)
419
+ printf "%s" "$full_prompt" | gemini chat
420
+ ;;
421
+ goose)
422
+ printf "%s" "$full_prompt" | goose session start
423
+ ;;
424
+ kiro | kiro-cli)
425
+ printf "%s" "$full_prompt" | kiro-cli chat
426
+ ;;
427
+ sgpt)
428
+ printf "%s" "$full_prompt" | sgpt --chat shell-gpt
429
+ ;;
430
+ ollama)
431
+ printf "%s" "$full_prompt" | ollama run llama3.2
432
+ ;;
433
+ opencode)
434
+ printf "%s" "$full_prompt" | opencode query
435
+ ;;
436
+ aider)
437
+ printf "%s" "$full_prompt" | aider --msg "-"
438
+ ;;
439
+ autohand)
440
+ printf "%s" "$full_prompt" | autohand chat
441
+ ;;
442
+ vibe)
443
+ printf "%s" "$full_prompt" | vibe chat
444
+ ;;
445
+ qwen)
446
+ printf "%s" "$full_prompt" | qwen chat
447
+ ;;
448
+ zai)
449
+ printf "%s" "$full_prompt" | zai chat
450
+ ;;
451
+ *)
452
+ ui_err "Unsupported tool" "$tool"
453
+ exit 1
454
+ ;;
455
+ esac
456
+ }
457
+
458
+ # Dispatch
459
+ case "${1:-}" in
460
+ ai)
461
+ shift
462
+ cmd_ai_status "$@"
463
+ ;;
464
+ ai-setup)
465
+ shift
466
+ cmd_ai_setup "$@"
467
+ ;;
468
+ ai-query)
469
+ shift
470
+ cmd_ai_query "$@"
471
+ ;;
472
+ cl | claude | codex | copilot | gemini | goose | kiro | sgpt | ollama | opencode | aider | autohand | vibe | qwen | zai)
473
+ tool="$1"
474
+ shift
475
+ run_ai_with_context "$tool" "$@"
476
+ ;;
477
+ *)
478
+ echo "Unknown ai command: ${1:-}" >&2
479
+ exit 1
480
+ ;;
481
+ esac