@sebastienrousseau/dotfiles 0.2.501 → 0.2.503
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 +155 -4
- package/LICENSE +21 -1283
- package/README.md +40 -8
- 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/01-dot-cli.md +63 -45
- package/docs/manual/03-reference/02-config-files.md +2 -2
- package/docs/manual/03-reference/05-feature-flags.md +62 -3
- package/docs/manual/_toc.yml +1 -1
- package/docs/manual/command-index.md +72 -55
- package/docs/manual/index.md +66 -0
- package/docs/operations/CI_COMPOSITES.md +2 -2
- package/docs/operations/COMPLETIONS.md +2 -2
- package/docs/operations/COVERAGE.md +40 -6
- package/docs/operations/HARD_AUDIT_2026.md +631 -0
- package/docs/operations/MAINTENANCE.md +3 -3
- package/docs/operations/MANIFEST.md +127 -0
- package/docs/operations/REGISTRY.md +89 -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 +665 -0
- package/docs/operations/ROADMAP_V0_2_503.md +134 -0
- package/docs/operations/TESTING.md +17 -0
- package/docs/operations/TRACEABILITY.md +9 -3
- package/docs/operations/VERSION_SYNC.md +4 -4
- package/docs/reference/POWERSHELL_PARITY.md +81 -0
- package/docs/registry.json +6 -0
- package/docs/schema/dot-env-v1.json +110 -0
- package/docs/security/CI_EGRESS_ALLOWLIST.md +1 -1
- package/docs/security/CI_PINNING.md +121 -0
- package/docs/security/COMMIT_SIGNING.md +138 -0
- package/docs/security/DEPS_DEV_EXCEPTIONS.md +2 -2
- package/docs/security/DISCLOSURE.md +130 -0
- package/docs/security/FUZZING.md +114 -0
- package/docs/security/INSTALL_VERIFICATION.md +2 -2
- package/docs/security/KEY_ROTATION.md +81 -1
- package/docs/security/POLICY_RELEASES.md +2 -2
- package/docs/security/SCORECARD.md +130 -15
- package/docs/security/SHELL_EXEMPTIONS.md +4 -4
- package/docs/security/VERIFY_RELEASE.md +201 -0
- package/docs/security/security-pubkey.asc +15 -0
- package/install.sh +67 -38
- 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 +4 -4
- package/scripts/diagnostics/conflicts.sh +2 -2
- package/scripts/diagnostics/doctor-unified.sh +2 -2
- package/scripts/diagnostics/doctor.sh +45 -15
- 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 +4 -4
- package/scripts/diagnostics/scorecard.sh +4 -4
- package/scripts/diagnostics/security-score.sh +2 -2
- 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 +2 -2
- package/scripts/diagnostics/workstation-attestation.sh +14 -14
- package/scripts/dot/commands/agent.sh +27 -22
- package/scripts/dot/commands/agents.sh +335 -0
- package/scripts/dot/commands/ai.sh +144 -25
- package/scripts/dot/commands/aliases.sh +10 -8
- package/scripts/dot/commands/appearance.sh +2 -2
- package/scripts/dot/commands/core.sh +12 -6
- package/scripts/dot/commands/diagnostics.sh +5 -5
- package/scripts/dot/commands/env-emit.sh +202 -0
- package/scripts/dot/commands/fleet.sh +290 -14
- package/scripts/dot/commands/init.sh +184 -0
- package/scripts/dot/commands/lint.sh +9 -4
- package/scripts/dot/commands/manual.sh +3 -3
- package/scripts/dot/commands/meta.sh +19 -10
- package/scripts/dot/commands/patterns.sh +2 -2
- package/scripts/dot/commands/registry.sh +263 -0
- 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 +62 -4
- 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 +2 -2
- package/scripts/git-hooks/pre-push +13 -0
- package/scripts/lib/secrets_provider.sh +32 -6
- package/scripts/ops/ai-setup.sh +1 -1
- package/scripts/ops/bundle.sh +2 -2
- package/scripts/ops/chaos.sh +2 -2
- package/scripts/ops/chezmoi-apply.sh +4 -4
- 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 +18 -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/check-disclosure-key-expiry.sh +110 -0
- 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-configs.sh +11 -2
- 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 +8 -1
- 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 +58 -7
- 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/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/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 -134
- 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 -635
- 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 -596
- package/dot_local/bin/executable_dot-ai +0 -36
- package/dot_local/bin/executable_dot-bootstrap +0 -77
- 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 -283
- 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/install-chezmoi-verified.sh +0 -64
- package/scripts/ci/run-coverage.sh +0 -362
- package/scripts/ci/validate-chezmoidata.sh +0 -25
- package/scripts/ci/validate-ci-config.sh +0 -224
- 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 -99
- package/scripts/dot/lib/ui.sh +0 -518
- 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
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
set -euo pipefail
|
|
32
32
|
|
|
33
33
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
34
|
-
# shellcheck source
|
|
34
|
+
# shellcheck source=../../lib/dot/ui.sh
|
|
35
35
|
# shellcheck disable=SC1091
|
|
36
|
-
source "$SCRIPT_DIR
|
|
36
|
+
source "$SCRIPT_DIR/../../lib/dot/ui.sh"
|
|
37
37
|
|
|
38
38
|
# Parse arguments
|
|
39
39
|
STRICT_MODE=0
|
|
@@ -93,14 +93,17 @@ log_warn() {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
MCP_CONFIG="${MCP_CONFIG:-$HOME/.config/claude/mcp_servers.json}"
|
|
96
|
-
if [[ ! -f "$MCP_CONFIG"
|
|
97
|
-
|
|
96
|
+
if [[ ! -f "$MCP_CONFIG" ]]; then
|
|
97
|
+
for cand in "$HOME/.dotfiles/defaults/dot_config/claude/mcp_servers.json" \
|
|
98
|
+
"$HOME/.dotfiles/dot_config/claude/mcp_servers.json"; do
|
|
99
|
+
[[ -f "$cand" ]] && MCP_CONFIG="$cand" && break
|
|
100
|
+
done
|
|
98
101
|
fi
|
|
99
102
|
|
|
100
103
|
REPO_ROOT="${REPO_ROOT:-$(cd "$SCRIPT_DIR/../.." && pwd)}"
|
|
101
|
-
MCP_POLICY_CONFIG="${MCP_POLICY_CONFIG:-$REPO_ROOT/dot_config/dotfiles/mcp-policy.json}"
|
|
102
|
-
MCP_LOCK_CONFIG="${MCP_LOCK_CONFIG:-$REPO_ROOT/dot_config/dotfiles/mcp-lock.json}"
|
|
103
|
-
MCP_REGISTRY_CONFIG="${MCP_REGISTRY_CONFIG:-$REPO_ROOT/dot_config/dotfiles/mcp-registry.json}"
|
|
104
|
+
MCP_POLICY_CONFIG="${MCP_POLICY_CONFIG:-$REPO_ROOT/defaults/dot_config/dotfiles/mcp-policy.json}"
|
|
105
|
+
MCP_LOCK_CONFIG="${MCP_LOCK_CONFIG:-$REPO_ROOT/defaults/dot_config/dotfiles/mcp-lock.json}"
|
|
106
|
+
MCP_REGISTRY_CONFIG="${MCP_REGISTRY_CONFIG:-$REPO_ROOT/defaults/dot_config/dotfiles/mcp-registry.json}"
|
|
104
107
|
|
|
105
108
|
if [[ "$JSON_MODE" -ne 1 ]]; then
|
|
106
109
|
ui_init
|
|
@@ -9,12 +9,12 @@ _cleanup_files=()
|
|
|
9
9
|
trap 'rm -f "${_cleanup_files[@]}"' EXIT
|
|
10
10
|
|
|
11
11
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
12
|
-
# shellcheck source
|
|
12
|
+
# shellcheck source=../../lib/dot/ui.sh
|
|
13
13
|
# shellcheck disable=SC1091
|
|
14
|
-
source "$SCRIPT_DIR
|
|
15
|
-
# shellcheck source
|
|
14
|
+
source "$SCRIPT_DIR/../../lib/dot/ui.sh"
|
|
15
|
+
# shellcheck source=../../lib/dot/log.sh
|
|
16
16
|
# shellcheck disable=SC1091
|
|
17
|
-
source "$SCRIPT_DIR
|
|
17
|
+
source "$SCRIPT_DIR/../../lib/dot/log.sh"
|
|
18
18
|
export DOT_COMMAND="perf"
|
|
19
19
|
|
|
20
20
|
ui_init
|
|
@@ -6,12 +6,12 @@
|
|
|
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
|
|
12
|
-
# shellcheck source
|
|
11
|
+
source "$SCRIPT_DIR/../../lib/dot/ui.sh"
|
|
12
|
+
# shellcheck source=../../lib/dot/log.sh
|
|
13
13
|
# shellcheck disable=SC1091
|
|
14
|
-
source "$SCRIPT_DIR
|
|
14
|
+
source "$SCRIPT_DIR/../../lib/dot/log.sh"
|
|
15
15
|
export DOT_COMMAND="scorecard"
|
|
16
16
|
|
|
17
17
|
ui_init
|
|
@@ -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
|
|
@@ -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
|
|
|
@@ -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
|
|
|
@@ -218,14 +226,15 @@ EOF
|
|
|
218
226
|
checkpoint_id="$(basename "$checkpoint_file" .json)"
|
|
219
227
|
ui_info "Agent mode" "$name"
|
|
220
228
|
dot_agent_session_log "run_start" "$name" "running" "argv=$*" "checkpoint_id=$checkpoint_id"
|
|
221
|
-
set +e
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
if
|
|
226
|
-
|
|
227
|
-
else
|
|
229
|
+
# `if !` instead of `set +e / "$@" / set -e` — bash's errexit
|
|
230
|
+
# is automatically suspended inside a conditional, so we capture
|
|
231
|
+
# the exit code cleanly without toggling shell options.
|
|
232
|
+
local exit_code=0
|
|
233
|
+
if ! "$@"; then
|
|
234
|
+
exit_code=$?
|
|
228
235
|
dot_agent_session_log "run_finish" "$name" "failed" "exit_code=$exit_code" "checkpoint_id=$checkpoint_id"
|
|
236
|
+
else
|
|
237
|
+
dot_agent_session_log "run_finish" "$name" "ok" "exit_code=$exit_code" "checkpoint_id=$checkpoint_id"
|
|
229
238
|
fi
|
|
230
239
|
return "$exit_code"
|
|
231
240
|
;;
|
|
@@ -335,14 +344,12 @@ EOF
|
|
|
335
344
|
[[ "${#replay_argv[@]}" -gt 0 ]] || die "Checkpoint has no replayable command: $checkpoint_id"
|
|
336
345
|
_agent_apply_profile_env "$replay_profile"
|
|
337
346
|
dot_agent_session_log "checkpoint_replay" "$replay_profile" "running" "checkpoint_id=$checkpoint_id"
|
|
338
|
-
|
|
339
|
-
"${replay_argv[@]}"
|
|
340
|
-
|
|
341
|
-
set -e
|
|
342
|
-
if [[ "$exit_code" -eq 0 ]]; then
|
|
343
|
-
dot_agent_session_log "checkpoint_replay_finish" "$replay_profile" "ok" "checkpoint_id=$checkpoint_id" "exit_code=$exit_code"
|
|
344
|
-
else
|
|
347
|
+
local exit_code=0
|
|
348
|
+
if ! "${replay_argv[@]}"; then
|
|
349
|
+
exit_code=$?
|
|
345
350
|
dot_agent_session_log "checkpoint_replay_finish" "$replay_profile" "failed" "checkpoint_id=$checkpoint_id" "exit_code=$exit_code"
|
|
351
|
+
else
|
|
352
|
+
dot_agent_session_log "checkpoint_replay_finish" "$replay_profile" "ok" "checkpoint_id=$checkpoint_id" "exit_code=$exit_code"
|
|
346
353
|
fi
|
|
347
354
|
return "$exit_code"
|
|
348
355
|
;;
|
|
@@ -382,16 +389,14 @@ EOF
|
|
|
382
389
|
export DOT_AGENT_PARENT_PROFILE="$current_profile"
|
|
383
390
|
dot_agent_session_log "delegate_start" "$delegate_profile" "running" "delegate=$delegate_name" "parent=$current_profile" "timeout=$delegate_timeout"
|
|
384
391
|
ui_info "Delegating" "$delegate_name (profile: $delegate_profile, timeout: ${delegate_timeout}s)"
|
|
385
|
-
|
|
386
|
-
timeout "$delegate_timeout" "$@"
|
|
387
|
-
|
|
388
|
-
set -e
|
|
389
|
-
if [[ "$exit_code" -eq 0 ]]; then
|
|
390
|
-
dot_agent_session_log "delegate_finish" "$delegate_profile" "ok" "delegate=$delegate_name" "exit_code=$exit_code"
|
|
391
|
-
ui_ok "Delegate" "$delegate_name completed"
|
|
392
|
-
else
|
|
392
|
+
local exit_code=0
|
|
393
|
+
if ! timeout "$delegate_timeout" "$@"; then
|
|
394
|
+
exit_code=$?
|
|
393
395
|
dot_agent_session_log "delegate_finish" "$delegate_profile" "failed" "delegate=$delegate_name" "exit_code=$exit_code"
|
|
394
396
|
ui_err "Delegate" "$delegate_name failed (exit $exit_code)"
|
|
397
|
+
else
|
|
398
|
+
dot_agent_session_log "delegate_finish" "$delegate_profile" "ok" "delegate=$delegate_name" "exit_code=$exit_code"
|
|
399
|
+
ui_ok "Delegate" "$delegate_name completed"
|
|
395
400
|
fi
|
|
396
401
|
return "$exit_code"
|
|
397
402
|
;;
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Copyright (c) 2015-2026 Dotfiles. All rights reserved.
|
|
3
|
+
# shellcheck shell=bash
|
|
4
|
+
#
|
|
5
|
+
# scripts/dot/commands/agents.sh
|
|
6
|
+
#
|
|
7
|
+
# `dot agents` — multi-harness AI agent configuration manager.
|
|
8
|
+
#
|
|
9
|
+
# Closes the #1 competitive gap identified in HARD_AUDIT_2026:
|
|
10
|
+
# every other dotfiles framework either targets one AI tool or
|
|
11
|
+
# requires hand-maintenance of N parallel config files. This command
|
|
12
|
+
# keeps CLAUDE.md (canonical) and AGENTS.md (cross-harness standard)
|
|
13
|
+
# in sync, plus stubs the Cursor/Codex tool-specific formats.
|
|
14
|
+
#
|
|
15
|
+
# Subcommands:
|
|
16
|
+
# render Regenerate AGENTS.md and tool-specific stubs from CLAUDE.md.
|
|
17
|
+
# check Verify AGENTS.md tracks CLAUDE.md (exit 0 in sync, 1 drifted).
|
|
18
|
+
# list Show which harnesses are recognised + their target paths.
|
|
19
|
+
#
|
|
20
|
+
# Reads: CLAUDE.md (repo root) — the canonical agent context.
|
|
21
|
+
# Writes: AGENTS.md, .cursor/rules/dotfiles.mdc, .codex/config.toml
|
|
22
|
+
# (only when invoked with `render`).
|
|
23
|
+
|
|
24
|
+
set -euo pipefail
|
|
25
|
+
|
|
26
|
+
# shellcheck disable=SC1091
|
|
27
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
28
|
+
source "$SCRIPT_DIR/../../../lib/dot/ui.sh"
|
|
29
|
+
source "$SCRIPT_DIR/../../../lib/dot/utils.sh"
|
|
30
|
+
|
|
31
|
+
_agents_repo_root() {
|
|
32
|
+
# Resolve the chezmoi source dir (where CLAUDE.md/AGENTS.md live).
|
|
33
|
+
# We REQUIRE the resolved dir to contain `.chezmoidata.toml` so a
|
|
34
|
+
# user running `dot agents render` from inside some other git
|
|
35
|
+
# checkout doesn't accidentally write CLAUDE.md/AGENTS.md/.cursor/
|
|
36
|
+
# /.codex/ into that repo. Round-2 audit C-finding.
|
|
37
|
+
#
|
|
38
|
+
# On a CI runner `chezmoi source-path` may return a default path
|
|
39
|
+
# like `$HOME/.local/share/chezmoi` that doesn't exist on disk —
|
|
40
|
+
# we treat that as "not a match" and fall through to git, rather
|
|
41
|
+
# than accepting the wrong candidate.
|
|
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
|
+
}
|
|
48
|
+
if command -v chezmoi >/dev/null 2>&1; then
|
|
49
|
+
candidate="$(chezmoi source-path 2>/dev/null || true)"
|
|
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
|
|
56
|
+
candidate=""
|
|
57
|
+
fi
|
|
58
|
+
fi
|
|
59
|
+
if [[ -z "$candidate" ]]; then
|
|
60
|
+
candidate="$(git -C "$PWD" rev-parse --show-toplevel 2>/dev/null || true)"
|
|
61
|
+
fi
|
|
62
|
+
if [[ -z "$candidate" ]] || ! _has_chezmoidata "$candidate"; then
|
|
63
|
+
return 1
|
|
64
|
+
fi
|
|
65
|
+
printf '%s\n' "$candidate"
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
_agents_canonical() {
|
|
69
|
+
printf "%s/CLAUDE.md" "$(_agents_repo_root)"
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
_agents_targets() {
|
|
73
|
+
# printed one-per-line: <harness>\t<path-relative-to-repo-root>
|
|
74
|
+
# Closes the round-2 audit gap #3 — harness parity with
|
|
75
|
+
# TonyCasey/ai-dotfiles-manager (who covers 9 surfaces; we now
|
|
76
|
+
# cover 12 to maintain a margin).
|
|
77
|
+
local root
|
|
78
|
+
root="$(_agents_repo_root)"
|
|
79
|
+
cat <<EOF
|
|
80
|
+
agents-md $root/AGENTS.md
|
|
81
|
+
cursor $root/.cursor/rules/dotfiles.mdc
|
|
82
|
+
codex $root/.codex/config.toml
|
|
83
|
+
windsurf $root/.windsurf/rules.md
|
|
84
|
+
zed $root/.zed/agent-config.toml
|
|
85
|
+
roo $root/.roo/rules.md
|
|
86
|
+
cline $root/.clinerules
|
|
87
|
+
aider $root/.aider.conf.yml
|
|
88
|
+
continue $root/.continuerc.json
|
|
89
|
+
jules $root/.jules/system.md
|
|
90
|
+
gemini $root/.gemini/GEMINI.md
|
|
91
|
+
EOF
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
# Strip the leading HTML comment header (everything up to the first blank
|
|
95
|
+
# line after the `-->`), the H1 title line (which differs by design
|
|
96
|
+
# between CLAUDE.md / AGENTS.md), and the trailing cross-reference
|
|
97
|
+
# block. Leaves the comparable content body.
|
|
98
|
+
_agents_body() {
|
|
99
|
+
local file="$1"
|
|
100
|
+
awk '
|
|
101
|
+
BEGIN { in_header = 0; saw_close = 0; emit = 0 }
|
|
102
|
+
/^<!--/ && NR <= 5 { in_header = 1; next }
|
|
103
|
+
in_header && /-->/ { in_header = 0; saw_close = 1; next }
|
|
104
|
+
in_header { next }
|
|
105
|
+
saw_close && /^$/ && !emit { emit = 1; next }
|
|
106
|
+
saw_close && emit { print }
|
|
107
|
+
!saw_close { emit = 1; print }
|
|
108
|
+
' "$file" |
|
|
109
|
+
# Drop the H1 (`# CLAUDE.md ...` or `# AGENTS.md ...`) and the
|
|
110
|
+
# trailing "Need richer context?" footer if present.
|
|
111
|
+
awk '
|
|
112
|
+
/^# (CLAUDE|AGENTS)\.md/ { next }
|
|
113
|
+
/^---$/ { trailer = 1; next }
|
|
114
|
+
trailer && /^\*\*Need richer context\?\*\*/ { next }
|
|
115
|
+
trailer && NF == 0 { next }
|
|
116
|
+
{ trailer = 0; print }
|
|
117
|
+
'
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
cmd_agents() {
|
|
121
|
+
local subcommand="${1:-list}"
|
|
122
|
+
shift || true
|
|
123
|
+
|
|
124
|
+
case "$subcommand" in
|
|
125
|
+
list)
|
|
126
|
+
ui_header "Agent harness targets"
|
|
127
|
+
echo ""
|
|
128
|
+
ui_table_begin "Harness" "Target Path" "Status"
|
|
129
|
+
while IFS=$'\t' read -r harness path; do
|
|
130
|
+
if [[ -f "$path" ]]; then
|
|
131
|
+
ui_table_add "$harness" "$path" "rendered"
|
|
132
|
+
else
|
|
133
|
+
ui_table_add "$harness" "$path" "not yet rendered"
|
|
134
|
+
fi
|
|
135
|
+
done < <(_agents_targets)
|
|
136
|
+
ui_table_end
|
|
137
|
+
;;
|
|
138
|
+
check)
|
|
139
|
+
local claude_md agents_md
|
|
140
|
+
claude_md="$(_agents_canonical)"
|
|
141
|
+
agents_md="$(_agents_repo_root)/AGENTS.md"
|
|
142
|
+
if [[ ! -f "$claude_md" ]]; then
|
|
143
|
+
ui_err "CLAUDE.md" "not found at $claude_md"
|
|
144
|
+
return 2
|
|
145
|
+
fi
|
|
146
|
+
if [[ ! -f "$agents_md" ]]; then
|
|
147
|
+
ui_warn "AGENTS.md" "missing — run 'dot agents render'"
|
|
148
|
+
return 1
|
|
149
|
+
fi
|
|
150
|
+
# Diff the bodies (header comments differ by design).
|
|
151
|
+
# `--ignore-blank-lines` so the trailing newline from the footer
|
|
152
|
+
# block doesn't false-positive as drift.
|
|
153
|
+
if diff -q --ignore-blank-lines <(_agents_body "$claude_md") <(_agents_body "$agents_md") >/dev/null 2>&1; then
|
|
154
|
+
ui_ok "AGENTS.md" "in sync with CLAUDE.md"
|
|
155
|
+
return 0
|
|
156
|
+
fi
|
|
157
|
+
ui_warn "AGENTS.md" "drifted from CLAUDE.md — run 'dot agents render'"
|
|
158
|
+
return 1
|
|
159
|
+
;;
|
|
160
|
+
render)
|
|
161
|
+
local claude_md root
|
|
162
|
+
claude_md="$(_agents_canonical)"
|
|
163
|
+
root="$(_agents_repo_root)"
|
|
164
|
+
[[ -f "$claude_md" ]] || {
|
|
165
|
+
ui_err "CLAUDE.md" "not found at $claude_md"
|
|
166
|
+
return 2
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
# 1. AGENTS.md — body of CLAUDE.md + AGENTS.md cross-reference header.
|
|
170
|
+
local agents_md="$root/AGENTS.md"
|
|
171
|
+
{
|
|
172
|
+
cat <<'HEADER'
|
|
173
|
+
<!--
|
|
174
|
+
AGENTS.md — Cross-harness AI agent guidelines for this repository.
|
|
175
|
+
|
|
176
|
+
This file follows the AGENTS.md standard (originated by OpenAI in
|
|
177
|
+
August 2025, stewarded since December 2025 by the Linux Foundation
|
|
178
|
+
Agentic AI Foundation). Native readers: Codex CLI, GitHub Copilot,
|
|
179
|
+
Cursor, Windsurf, Amp, Devin, and a growing list of other agents.
|
|
180
|
+
|
|
181
|
+
Canonical source: CLAUDE.md (Claude Code uses CLAUDE.md natively).
|
|
182
|
+
This file is kept in sync via `dot agents render`. Edit CLAUDE.md
|
|
183
|
+
first; do not hand-edit AGENTS.md.
|
|
184
|
+
-->
|
|
185
|
+
|
|
186
|
+
HEADER
|
|
187
|
+
# Replace the title line so the rendered file declares its
|
|
188
|
+
# purpose, but pass everything else through unchanged.
|
|
189
|
+
_agents_body "$claude_md" | sed '1s/^# CLAUDE\.md.*/# AGENTS.md — AI Assistant Guidelines/'
|
|
190
|
+
cat <<'FOOTER'
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
**Need richer context?** This file is the cross-harness summary. Claude Code reads the full canonical version from [`CLAUDE.md`](./CLAUDE.md). Both files are kept in sync via `dot agents render`.
|
|
195
|
+
FOOTER
|
|
196
|
+
} >"$agents_md"
|
|
197
|
+
chmod 0644 "$agents_md" 2>/dev/null || true
|
|
198
|
+
ui_ok "AGENTS.md" "rendered → $agents_md"
|
|
199
|
+
|
|
200
|
+
# 2. Cursor rules — MDC format, points at CLAUDE.md/AGENTS.md.
|
|
201
|
+
local cursor_dir="$root/.cursor/rules"
|
|
202
|
+
mkdir -p "$cursor_dir"
|
|
203
|
+
cat >"$cursor_dir/dotfiles.mdc" <<'MDC'
|
|
204
|
+
---
|
|
205
|
+
description: Repo conventions for the dotfiles project (sourced from CLAUDE.md/AGENTS.md)
|
|
206
|
+
globs:
|
|
207
|
+
- "**/*"
|
|
208
|
+
alwaysApply: true
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
See `AGENTS.md` and `CLAUDE.md` in the repository root for the full
|
|
212
|
+
project conventions, repository layout, testing, and CI policy. This
|
|
213
|
+
Cursor rule file exists so Cursor's rule engine picks up the same
|
|
214
|
+
context; do not duplicate content here — keep CLAUDE.md canonical.
|
|
215
|
+
MDC
|
|
216
|
+
chmod 0644 "$cursor_dir/dotfiles.mdc" 2>/dev/null || true
|
|
217
|
+
ui_ok "Cursor" "rendered → $cursor_dir/dotfiles.mdc"
|
|
218
|
+
|
|
219
|
+
# 3. Codex CLI config stub — declares the AGENTS.md path.
|
|
220
|
+
local codex_dir="$root/.codex"
|
|
221
|
+
mkdir -p "$codex_dir"
|
|
222
|
+
cat >"$codex_dir/config.toml" <<'TOML'
|
|
223
|
+
# Codex CLI config — points at the AGENTS.md cross-harness context.
|
|
224
|
+
# Codex reads AGENTS.md natively; this file is a project-scoped pin so
|
|
225
|
+
# the CLI prefers the in-repo guidance over any global default.
|
|
226
|
+
project_context = "AGENTS.md"
|
|
227
|
+
TOML
|
|
228
|
+
chmod 0644 "$codex_dir/config.toml" 2>/dev/null || true
|
|
229
|
+
ui_ok "Codex" "rendered → $codex_dir/config.toml"
|
|
230
|
+
|
|
231
|
+
# 4-11. Per-harness rules files. All eight emitters reuse the
|
|
232
|
+
# same body extracted from CLAUDE.md so a single edit propagates
|
|
233
|
+
# consistently. The header differs per harness so each tool sees
|
|
234
|
+
# syntax it expects (front-matter style, comment block, etc.).
|
|
235
|
+
_agents_render_markdown_with_header() {
|
|
236
|
+
local _path="$1" _harness="$2" _header="$3"
|
|
237
|
+
mkdir -p "$(dirname "$_path")"
|
|
238
|
+
{
|
|
239
|
+
printf '%s\n\n' "$_header"
|
|
240
|
+
_agents_body "$claude_md"
|
|
241
|
+
# Heredoc instead of printf — Codacy/shellcheck flags
|
|
242
|
+
# printf-with-backticks-in-single-quotes (SC2016) as
|
|
243
|
+
# ambiguous even when the backticks are literal Markdown.
|
|
244
|
+
cat <<'FOOTER'
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
**Canonical source:** [`CLAUDE.md`](./CLAUDE.md) — keep in sync via `dot agents render`.
|
|
249
|
+
FOOTER
|
|
250
|
+
} >"$_path"
|
|
251
|
+
chmod 0644 "$_path" 2>/dev/null || true
|
|
252
|
+
ui_ok "$_harness" "rendered → $_path"
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
# 4. Windsurf — looks for `.windsurf/rules.md`.
|
|
256
|
+
_agents_render_markdown_with_header "$root/.windsurf/rules.md" \
|
|
257
|
+
"Windsurf" "# Windsurf project rules
|
|
258
|
+
|
|
259
|
+
These rules govern Cascade and the Windsurf agent inside this repository."
|
|
260
|
+
|
|
261
|
+
# 5. Roo — looks for `.roo/rules.md`.
|
|
262
|
+
_agents_render_markdown_with_header "$root/.roo/rules.md" \
|
|
263
|
+
"Roo" "# Roo project rules"
|
|
264
|
+
|
|
265
|
+
# 6. Cline — looks for `.clinerules` (no extension).
|
|
266
|
+
_agents_render_markdown_with_header "$root/.clinerules" \
|
|
267
|
+
"Cline" "# Cline workspace rules"
|
|
268
|
+
|
|
269
|
+
# 7. Jules — looks for `.jules/system.md`.
|
|
270
|
+
_agents_render_markdown_with_header "$root/.jules/system.md" \
|
|
271
|
+
"Jules" "# Jules system prompt"
|
|
272
|
+
|
|
273
|
+
# 8. Gemini — looks for `.gemini/GEMINI.md`.
|
|
274
|
+
_agents_render_markdown_with_header "$root/.gemini/GEMINI.md" \
|
|
275
|
+
"Gemini" "# Gemini agent rules"
|
|
276
|
+
|
|
277
|
+
# 9. Zed — config pointer (TOML).
|
|
278
|
+
local zed_dir="$root/.zed"
|
|
279
|
+
mkdir -p "$zed_dir"
|
|
280
|
+
cat >"$zed_dir/agent-config.toml" <<'TOML'
|
|
281
|
+
# Zed agent config — points at AGENTS.md for the cross-harness body.
|
|
282
|
+
# Zed reads this file when its agent mode is enabled; the actual rule
|
|
283
|
+
# body lives in AGENTS.md (which `dot agents render` keeps current).
|
|
284
|
+
agent_context = "AGENTS.md"
|
|
285
|
+
TOML
|
|
286
|
+
chmod 0644 "$zed_dir/agent-config.toml" 2>/dev/null || true
|
|
287
|
+
ui_ok "Zed" "rendered → $zed_dir/agent-config.toml"
|
|
288
|
+
|
|
289
|
+
# 10. Aider — YAML pointer to AGENTS.md / CLAUDE.md.
|
|
290
|
+
cat >"$root/.aider.conf.yml" <<'YML'
|
|
291
|
+
# Aider config — surfaces the cross-harness context bundle.
|
|
292
|
+
# Aider's `--read` flag pulls in AGENTS.md / CLAUDE.md per session.
|
|
293
|
+
read:
|
|
294
|
+
- AGENTS.md
|
|
295
|
+
- CLAUDE.md
|
|
296
|
+
YML
|
|
297
|
+
chmod 0644 "$root/.aider.conf.yml" 2>/dev/null || true
|
|
298
|
+
ui_ok "Aider" "rendered → $root/.aider.conf.yml"
|
|
299
|
+
|
|
300
|
+
# 11. Continue — JSON pointer used by VS Code / JetBrains plugin.
|
|
301
|
+
cat >"$root/.continuerc.json" <<'JSON'
|
|
302
|
+
{
|
|
303
|
+
"_comment": "Continue config pointer — see AGENTS.md for the full body.",
|
|
304
|
+
"systemMessage": "Apply the rules in AGENTS.md (canonical source: CLAUDE.md). Run `dot agents render` if the two drift."
|
|
305
|
+
}
|
|
306
|
+
JSON
|
|
307
|
+
chmod 0644 "$root/.continuerc.json" 2>/dev/null || true
|
|
308
|
+
ui_ok "Continue" "rendered → $root/.continuerc.json"
|
|
309
|
+
|
|
310
|
+
ui_info "Hint" "commit AGENTS.md alongside CLAUDE.md changes (or add to your pre-commit hook)"
|
|
311
|
+
;;
|
|
312
|
+
--help | -h | help)
|
|
313
|
+
cat <<EOF
|
|
314
|
+
Usage: dot agents <subcommand>
|
|
315
|
+
|
|
316
|
+
Subcommands:
|
|
317
|
+
list Show which agent harnesses are recognised and their target paths
|
|
318
|
+
check Verify AGENTS.md tracks CLAUDE.md (exit 0 in sync, 1 drifted)
|
|
319
|
+
render Regenerate AGENTS.md + 10 harness-specific files from CLAUDE.md
|
|
320
|
+
|
|
321
|
+
CLAUDE.md is the canonical source. AGENTS.md follows the cross-harness
|
|
322
|
+
standard read by Codex, Copilot, Cursor, Windsurf, Amp, and Devin.
|
|
323
|
+
|
|
324
|
+
Harnesses covered by 'render':
|
|
325
|
+
agents-md, cursor, codex, windsurf, zed, roo, cline,
|
|
326
|
+
aider, continue, jules, gemini.
|
|
327
|
+
EOF
|
|
328
|
+
;;
|
|
329
|
+
*)
|
|
330
|
+
ui_err "Unknown subcommand" "$subcommand"
|
|
331
|
+
echo "Run 'dot agents --help' for usage." >&2
|
|
332
|
+
return 1
|
|
333
|
+
;;
|
|
334
|
+
esac
|
|
335
|
+
}
|