devflow-kit 1.8.2 → 2.0.0
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 +191 -6
- package/LICENSE +1 -1
- package/README.md +139 -219
- package/dist/cli/agents-view/index.js +9 -0
- package/dist/cli/agents-view/render.js +310 -0
- package/dist/cli/agents-view/state.js +423 -0
- package/dist/cli/agents-view/terminal.js +179 -0
- package/dist/cli/commands/agents.js +585 -0
- package/dist/cli/commands/ambient.js +231 -0
- package/dist/cli/commands/capture.js +133 -0
- package/dist/cli/commands/compliance-prompts.js +174 -0
- package/dist/cli/commands/compliance.js +337 -0
- package/dist/cli/commands/context.js +66 -0
- package/dist/cli/commands/debug.js +122 -0
- package/dist/cli/commands/flags.js +119 -0
- package/dist/cli/commands/hud.js +229 -0
- package/dist/cli/commands/init-seed.js +226 -0
- package/dist/cli/commands/init.js +1786 -0
- package/dist/cli/commands/knowledge/index.js +25 -0
- package/dist/cli/commands/knowledge/list.js +115 -0
- package/dist/cli/commands/knowledge/toggle.js +84 -0
- package/dist/cli/commands/learning.js +311 -0
- package/dist/cli/commands/legacy-hooks.js +40 -0
- package/dist/cli/commands/memory.js +349 -0
- package/dist/cli/commands/proxy.js +1435 -0
- package/dist/cli/commands/rules.js +334 -0
- package/dist/cli/commands/safe-delete.js +140 -0
- package/dist/cli/commands/security.js +179 -0
- package/dist/cli/commands/skills.js +140 -0
- package/dist/cli/commands/uninstall.js +1214 -0
- package/dist/cli.js +35 -10
- package/dist/commands/bug-analysis.md +400 -0
- package/dist/commands/code-review.md +403 -0
- package/dist/commands/debug.md +282 -0
- package/dist/commands/dynamic-build.md +972 -0
- package/dist/commands/dynamic-plan.md +383 -0
- package/dist/commands/dynamic-profile.md +206 -0
- package/dist/commands/dynamic-tickets.md +583 -0
- package/dist/commands/explore.md +208 -0
- package/dist/commands/implement.md +590 -0
- package/dist/commands/plan.md +570 -0
- package/dist/commands/release.md +206 -0
- package/dist/commands/research.md +212 -0
- package/dist/commands/resolve.md +731 -0
- package/dist/commands/self-review.md +251 -0
- package/dist/core/agent-frontmatter.js +209 -0
- package/dist/core/agent-models.js +556 -0
- package/dist/core/agent-state.js +44 -0
- package/dist/core/assets.js +39 -0
- package/dist/core/cache.js +205 -0
- package/dist/core/codex-auth-inspect.js +128 -0
- package/dist/core/compliance-compose.js +458 -0
- package/dist/core/compliance.js +165 -0
- package/dist/core/external-models.js +76 -0
- package/dist/core/feature-config.js +125 -0
- package/dist/core/flags.js +309 -0
- package/dist/core/fs-atomic.js +74 -0
- package/dist/core/git.js +61 -0
- package/dist/core/learning-queue-cleanup.js +92 -0
- package/dist/core/learning-tuning-config.js +78 -0
- package/dist/core/manifest.js +171 -0
- package/dist/core/migrations.js +330 -0
- package/dist/core/model-discovery.js +655 -0
- package/dist/core/observation-io.js +50 -0
- package/dist/core/observations.js +109 -0
- package/dist/core/orphan-sweep.js +92 -0
- package/dist/core/paths.js +48 -0
- package/dist/core/plugins.js +525 -0
- package/dist/core/project-paths.js +159 -0
- package/dist/core/proxy-log.js +165 -0
- package/dist/core/proxy-state.js +305 -0
- package/dist/core/safe-delete-install.js +191 -0
- package/dist/core/teammate-mode-cleanup.js +33 -0
- package/dist/hud/colors.js +13 -2
- package/dist/hud/components/config-counts.js +2 -2
- package/dist/hud/components/context-usage.js +2 -2
- package/dist/hud/components/learning-counts.js +92 -0
- package/dist/hud/components/session-cost.js +10 -2
- package/dist/hud/components/usage-quota.js +43 -8
- package/dist/hud/components/version-badge.js +17 -7
- package/dist/hud/config.js +4 -2
- package/dist/hud/cost-history.js +281 -0
- package/dist/hud/git.js +112 -71
- package/dist/hud/index.js +47 -4
- package/dist/hud/render.js +8 -20
- package/dist/hud/transcript.js +5 -6
- package/dist/targets/claude-code/claude-paths.js +106 -0
- package/dist/targets/claude-code/compliance-install.js +305 -0
- package/dist/targets/claude-code/hooks.js +9 -0
- package/dist/targets/claude-code/installer.js +458 -0
- package/dist/targets/claude-code/legacy.js +239 -0
- package/dist/targets/claude-code/post-install.js +971 -0
- package/package.json +23 -17
- package/src/assets/agents/code.md +244 -0
- package/src/assets/agents/design.md +113 -0
- package/src/assets/agents/diagnose.md +210 -0
- package/src/assets/agents/evaluate.md +117 -0
- package/src/assets/agents/git.md +938 -0
- package/src/assets/agents/knowledge.md +89 -0
- package/src/assets/agents/learning.md +203 -0
- package/src/assets/agents/research.md +134 -0
- package/src/assets/agents/review.md +220 -0
- package/src/assets/agents/scrutinize.md +95 -0
- package/src/assets/agents/simplify.md +108 -0
- package/src/assets/agents/skim.md +136 -0
- package/src/assets/agents/synthesize.md +402 -0
- package/src/assets/agents/test.md +155 -0
- package/src/assets/agents/triage.md +141 -0
- package/src/assets/agents/validate.md +103 -0
- package/src/assets/commands/_partials/_compliance.mds +5 -0
- package/src/assets/commands/_partials/_decisions.mds +20 -0
- package/src/assets/commands/_partials/_engine.mds +244 -0
- package/src/assets/commands/_partials/_factory.mds +216 -0
- package/src/assets/commands/_partials/_knowledge.mds +95 -0
- package/src/assets/commands/_partials/_plan_contract.mds +51 -0
- package/src/assets/commands/_partials/_preamble.mds +82 -0
- package/src/assets/commands/_partials/_publication.mds +7 -0
- package/src/assets/commands/_partials/_roster.mds +31 -0
- package/src/assets/commands/_partials/_ticket_template.mds +59 -0
- package/src/assets/commands/_partials/_wave.mds +123 -0
- package/src/assets/commands/bug-analysis.mds +353 -0
- package/src/assets/commands/code-review.mds +355 -0
- package/src/assets/commands/debug.mds +224 -0
- package/src/assets/commands/dynamic-build.mds +534 -0
- package/src/assets/commands/dynamic-plan.mds +244 -0
- package/src/assets/commands/dynamic-profile.mds +132 -0
- package/src/assets/commands/dynamic-tickets.mds +226 -0
- package/src/assets/commands/explore.mds +150 -0
- package/src/assets/commands/implement.mds +496 -0
- package/src/assets/commands/plan.mds +523 -0
- package/src/assets/commands/release.md +206 -0
- package/src/assets/commands/research.mds +164 -0
- package/src/assets/commands/resolve.mds +636 -0
- package/src/assets/commands/self-review.mds +156 -0
- package/src/assets/rules/accessibility.md +11 -0
- package/src/assets/rules/compliance.md +15 -0
- package/src/assets/rules/engineering.md +13 -0
- package/src/assets/rules/go.md +12 -0
- package/src/assets/rules/java.md +12 -0
- package/src/assets/rules/python.md +12 -0
- package/src/assets/rules/quality.md +14 -0
- package/src/assets/rules/react.md +11 -0
- package/src/assets/rules/reliability.md +12 -0
- package/src/assets/rules/rust.md +12 -0
- package/src/assets/rules/security.md +12 -0
- package/src/assets/rules/typescript.md +12 -0
- package/src/assets/rules/ui-design.md +11 -0
- package/src/assets/scripts/hooks/assets/orchestrator-charter.md +21 -0
- package/src/assets/scripts/hooks/background-memory-update +460 -0
- package/src/assets/scripts/hooks/capture-prompt +87 -0
- package/src/assets/scripts/hooks/capture-question +153 -0
- package/src/assets/scripts/hooks/capture-turn +105 -0
- package/src/assets/scripts/hooks/debug-trace +75 -0
- package/src/assets/scripts/hooks/decisions-usage-scan.cjs +131 -0
- package/src/assets/scripts/hooks/ensure-devflow-init +39 -0
- package/src/assets/scripts/hooks/ensure-proxy +294 -0
- package/src/assets/scripts/hooks/ensure-root-gitignore +116 -0
- package/src/assets/scripts/hooks/get-mtime +23 -0
- package/src/assets/scripts/hooks/git-marker +16 -0
- package/src/assets/scripts/hooks/hook-bootstrap +25 -0
- package/src/assets/scripts/hooks/hook-log-init +41 -0
- package/src/assets/scripts/hooks/json-helper.cjs +725 -0
- package/src/assets/scripts/hooks/json-parse +243 -0
- package/src/assets/scripts/hooks/learning-lock +44 -0
- package/src/assets/scripts/hooks/lib/decisions-format.cjs +301 -0
- package/src/assets/scripts/hooks/lib/mkdir-lock.cjs +106 -0
- package/src/assets/scripts/hooks/lib/project-paths.cjs +230 -0
- package/src/assets/scripts/hooks/lib/render-decisions.cjs +398 -0
- package/src/assets/scripts/hooks/lib/safe-path.cjs +29 -0
- package/src/assets/scripts/hooks/log-paths +24 -0
- package/src/assets/scripts/hooks/memory-worker +101 -0
- package/src/assets/scripts/hooks/pre-compact-memory +126 -0
- package/src/assets/scripts/hooks/preamble +77 -0
- package/src/assets/scripts/hooks/queue-append +120 -0
- package/src/assets/scripts/hooks/resolve-project-root +37 -0
- package/src/assets/scripts/hooks/run-hook +31 -0
- package/src/assets/scripts/hooks/session-start-context +180 -0
- package/src/assets/scripts/hooks/session-start-memory +318 -0
- package/src/assets/scripts/hooks/session-start-orchestrator +54 -0
- package/src/assets/scripts/hud.sh +5 -0
- package/src/assets/scripts/redact-secrets.cjs +410 -0
- package/src/assets/skills/accessibility/SKILL.md +145 -0
- package/src/assets/skills/accessibility/references/patterns.md +398 -0
- package/src/assets/skills/accessibility/references/sources.md +26 -0
- package/src/assets/skills/accessibility/references/violations.md +358 -0
- package/src/assets/skills/apply-decisions/SKILL.md +100 -0
- package/src/assets/skills/apply-feature-knowledge/SKILL.md +69 -0
- package/src/assets/skills/architecture/SKILL.md +138 -0
- package/src/assets/skills/architecture/references/patterns.md +378 -0
- package/src/assets/skills/architecture/references/sources.md +41 -0
- package/src/assets/skills/architecture/references/violations.md +314 -0
- package/src/assets/skills/boundary-validation/SKILL.md +119 -0
- package/src/assets/skills/boundary-validation/references/detection.md +283 -0
- package/src/assets/skills/boundary-validation/references/patterns.md +283 -0
- package/src/assets/skills/boundary-validation/references/sources.md +41 -0
- package/src/assets/skills/boundary-validation/references/violations.md +211 -0
- package/src/assets/skills/complexity/SKILL.md +150 -0
- package/src/assets/skills/compliance/SKILL.md +121 -0
- package/src/assets/skills/compliance/frameworks/gdpr/fragment.md +11 -0
- package/src/assets/skills/compliance/frameworks/gdpr/reference.md +50 -0
- package/src/assets/skills/compliance/frameworks/hipaa/fragment.md +11 -0
- package/src/assets/skills/compliance/frameworks/hipaa/reference.md +44 -0
- package/src/assets/skills/compliance/frameworks/iso-27001/fragment.md +10 -0
- package/src/assets/skills/compliance/frameworks/iso-27001/reference.md +45 -0
- package/src/assets/skills/compliance/frameworks/pci-dss/fragment.md +11 -0
- package/src/assets/skills/compliance/frameworks/pci-dss/reference.md +55 -0
- package/src/assets/skills/compliance/frameworks/soc2/fragment.md +10 -0
- package/src/assets/skills/compliance/frameworks/soc2/reference.md +53 -0
- package/src/assets/skills/compliance/frameworks/sox/fragment.md +10 -0
- package/src/assets/skills/compliance/frameworks/sox/reference.md +67 -0
- package/src/assets/skills/compliance/references/detection.md +108 -0
- package/src/assets/skills/compliance/references/sources.md +28 -0
- package/src/assets/skills/consistency/SKILL.md +140 -0
- package/src/assets/skills/database/SKILL.md +134 -0
- package/src/assets/skills/dependencies/SKILL.md +141 -0
- package/src/assets/skills/dependency-research/SKILL.md +133 -0
- package/src/assets/skills/dependency-research/references/evaluation-criteria.md +101 -0
- package/src/assets/skills/design-review/SKILL.md +155 -0
- package/src/assets/skills/design-review/references/anti-patterns.md +207 -0
- package/src/assets/skills/docs-framework/SKILL.md +190 -0
- package/src/assets/skills/docs-framework/references/patterns.md +381 -0
- package/src/assets/skills/docs-framework/references/violations.md +221 -0
- package/src/assets/skills/documentation/SKILL.md +126 -0
- package/src/assets/skills/feature-knowledge/SKILL.md +341 -0
- package/src/assets/skills/gap-analysis/SKILL.md +151 -0
- package/src/assets/skills/gap-analysis/references/check-layers.md +125 -0
- package/src/assets/skills/git/SKILL.md +287 -0
- package/src/assets/skills/git/references/github-api.md +666 -0
- package/src/assets/skills/git/references/patterns.md +324 -0
- package/src/assets/skills/git/references/sources.md +16 -0
- package/src/assets/skills/git/references/violations.md +128 -0
- package/src/assets/skills/go/SKILL.md +147 -0
- package/src/assets/skills/go/references/concurrency.md +335 -0
- package/src/assets/skills/go/references/patterns.md +278 -0
- package/src/assets/skills/go/references/sources.md +41 -0
- package/src/assets/skills/go/references/violations.md +262 -0
- package/src/assets/skills/java/SKILL.md +148 -0
- package/src/assets/skills/java/references/modern-java.md +335 -0
- package/src/assets/skills/java/references/patterns.md +311 -0
- package/src/assets/skills/java/references/sources.md +44 -0
- package/src/assets/skills/java/references/violations.md +257 -0
- package/src/assets/skills/patterns/SKILL.md +162 -0
- package/src/assets/skills/performance/SKILL.md +135 -0
- package/src/assets/skills/performance/references/patterns.md +516 -0
- package/src/assets/skills/performance/references/sources.md +41 -0
- package/src/assets/skills/performance/references/violations.md +417 -0
- package/src/assets/skills/python/SKILL.md +156 -0
- package/src/assets/skills/python/references/async.md +255 -0
- package/src/assets/skills/python/references/patterns.md +280 -0
- package/src/assets/skills/python/references/sources.md +41 -0
- package/src/assets/skills/python/references/violations.md +272 -0
- package/src/assets/skills/qa/SKILL.md +136 -0
- package/src/assets/skills/qa/references/browser-testing.md +97 -0
- package/src/assets/skills/qa/references/patterns.md +118 -0
- package/src/assets/skills/qa/references/scenario-templates.md +102 -0
- package/src/assets/skills/qa/references/sources.md +30 -0
- package/src/assets/skills/qa/references/violations.md +98 -0
- package/src/assets/skills/quality-gates/SKILL.md +152 -0
- package/src/assets/skills/quality-gates/references/stub-detection.md +135 -0
- package/src/assets/skills/react/SKILL.md +143 -0
- package/src/assets/skills/react/references/error-handling.md +179 -0
- package/src/assets/skills/react/references/forms.md +214 -0
- package/src/assets/skills/react/references/hooks.md +193 -0
- package/src/assets/skills/react/references/patterns.md +1336 -0
- package/src/assets/skills/react/references/sources.md +35 -0
- package/src/assets/skills/react/references/violations.md +570 -0
- package/src/assets/skills/regression/SKILL.md +146 -0
- package/src/assets/skills/reliability/SKILL.md +153 -0
- package/src/assets/skills/reliability/references/detection.md +66 -0
- package/src/assets/skills/reliability/references/patterns.md +151 -0
- package/src/assets/skills/reliability/references/sources.md +27 -0
- package/src/assets/skills/reliability/references/violations.md +125 -0
- package/src/assets/skills/research-codebase/SKILL.md +135 -0
- package/src/assets/skills/research-competitor/SKILL.md +145 -0
- package/src/assets/skills/research-external/SKILL.md +141 -0
- package/src/assets/skills/research-market/SKILL.md +145 -0
- package/src/assets/skills/research-technology/SKILL.md +180 -0
- package/src/assets/skills/review-methodology/SKILL.md +121 -0
- package/src/assets/skills/review-methodology/references/patterns.md +186 -0
- package/src/assets/skills/review-methodology/references/report-template.md +142 -0
- package/src/assets/skills/review-methodology/references/violations.md +125 -0
- package/src/assets/skills/rust/SKILL.md +148 -0
- package/src/assets/skills/rust/references/ownership.md +278 -0
- package/src/assets/skills/rust/references/patterns.md +247 -0
- package/src/assets/skills/rust/references/sources.md +46 -0
- package/src/assets/skills/rust/references/violations.md +252 -0
- package/src/assets/skills/security/SKILL.md +121 -0
- package/src/assets/skills/security/references/patterns.md +271 -0
- package/src/assets/skills/security/references/sources.md +41 -0
- package/src/assets/skills/security/references/violations.md +241 -0
- package/src/assets/skills/software-design/SKILL.md +143 -0
- package/src/assets/skills/software-design/references/checklist.md +259 -0
- package/src/assets/skills/software-design/references/code-smell-violations.md +189 -0
- package/src/assets/skills/software-design/references/patterns.md +359 -0
- package/src/assets/skills/software-design/references/sources.md +41 -0
- package/src/assets/skills/software-design/references/violations.md +341 -0
- package/src/assets/skills/test-driven-development/SKILL.md +197 -0
- package/src/assets/skills/testing/SKILL.md +139 -0
- package/src/assets/skills/testing/references/patterns.md +346 -0
- package/src/assets/skills/testing/references/sources.md +53 -0
- package/src/assets/skills/testing/references/violations.md +322 -0
- package/src/assets/skills/typescript/SKILL.md +150 -0
- package/src/assets/skills/typescript/references/async.md +333 -0
- package/src/assets/skills/typescript/references/patterns.md +440 -0
- package/src/assets/skills/typescript/references/sources.md +41 -0
- package/src/assets/skills/typescript/references/type-guards.md +333 -0
- package/src/assets/skills/typescript/references/utility-types.md +255 -0
- package/src/assets/skills/typescript/references/violations.md +285 -0
- package/src/assets/skills/ui-design/SKILL.md +144 -0
- package/src/assets/skills/ui-design/references/patterns.md +341 -0
- package/src/assets/skills/ui-design/references/sources.md +41 -0
- package/src/assets/skills/ui-design/references/violations.md +312 -0
- package/src/assets/skills/worktree-support/SKILL.md +92 -0
- package/src/targets/claude-code/templates/claudeignore.template +188 -0
- package/src/targets/claude-code/templates/settings.json +86 -0
- package/dist/cli.d.ts +0 -3
- package/dist/commands/ambient.d.ts +0 -18
- package/dist/commands/ambient.js +0 -137
- package/dist/commands/hud.d.ts +0 -22
- package/dist/commands/hud.js +0 -180
- package/dist/commands/init.d.ts +0 -16
- package/dist/commands/init.js +0 -738
- package/dist/commands/list.d.ts +0 -24
- package/dist/commands/list.js +0 -89
- package/dist/commands/memory.d.ts +0 -22
- package/dist/commands/memory.js +0 -175
- package/dist/commands/skills.d.ts +0 -11
- package/dist/commands/skills.js +0 -116
- package/dist/commands/uninstall.d.ts +0 -22
- package/dist/commands/uninstall.js +0 -558
- package/dist/hud/cache.d.ts +0 -14
- package/dist/hud/cache.js +0 -54
- package/dist/hud/colors.d.ts +0 -23
- package/dist/hud/components/config-counts.d.ts +0 -8
- package/dist/hud/components/context-usage.d.ts +0 -8
- package/dist/hud/components/diff-stats.d.ts +0 -3
- package/dist/hud/components/directory.d.ts +0 -3
- package/dist/hud/components/git-ahead-behind.d.ts +0 -3
- package/dist/hud/components/git-branch.d.ts +0 -3
- package/dist/hud/components/model.d.ts +0 -3
- package/dist/hud/components/release-info.d.ts +0 -3
- package/dist/hud/components/session-cost.d.ts +0 -3
- package/dist/hud/components/session-duration.d.ts +0 -3
- package/dist/hud/components/todo-progress.d.ts +0 -3
- package/dist/hud/components/usage-quota.d.ts +0 -3
- package/dist/hud/components/version-badge.d.ts +0 -3
- package/dist/hud/components/worktree-count.d.ts +0 -3
- package/dist/hud/config.d.ts +0 -10
- package/dist/hud/credentials.d.ts +0 -17
- package/dist/hud/credentials.js +0 -99
- package/dist/hud/git.d.ts +0 -7
- package/dist/hud/index.d.ts +0 -2
- package/dist/hud/render.d.ts +0 -7
- package/dist/hud/stdin.d.ts +0 -6
- package/dist/hud/transcript.d.ts +0 -7
- package/dist/hud/types.d.ts +0 -116
- package/dist/hud/usage-api.d.ts +0 -7
- package/dist/hud/usage-api.js +0 -84
- package/dist/plugins.d.ts +0 -46
- package/dist/plugins.js +0 -233
- package/dist/utils/cli.d.ts +0 -5
- package/dist/utils/cli.js +0 -14
- package/dist/utils/git.d.ts +0 -11
- package/dist/utils/git.js +0 -36
- package/dist/utils/installer.d.ts +0 -41
- package/dist/utils/installer.js +0 -195
- package/dist/utils/manifest.d.ts +0 -46
- package/dist/utils/manifest.js +0 -100
- package/dist/utils/paths.d.ts +0 -42
- package/dist/utils/paths.js +0 -106
- package/dist/utils/post-install.d.ts +0 -87
- package/dist/utils/post-install.js +0 -546
- package/dist/utils/safe-delete-install.d.ts +0 -29
- package/dist/utils/safe-delete-install.js +0 -191
- package/dist/utils/safe-delete.d.ts +0 -12
- package/plugins/devflow-accessibility/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-accessibility/skills/accessibility/SKILL.md +0 -229
- package/plugins/devflow-accessibility/skills/accessibility/references/patterns.md +0 -670
- package/plugins/devflow-accessibility/skills/accessibility/references/violations.md +0 -419
- package/plugins/devflow-ambient/.claude-plugin/plugin.json +0 -33
- package/plugins/devflow-ambient/README.md +0 -68
- package/plugins/devflow-ambient/agents/coder.md +0 -135
- package/plugins/devflow-ambient/agents/reviewer.md +0 -165
- package/plugins/devflow-ambient/agents/scrutinizer.md +0 -82
- package/plugins/devflow-ambient/agents/shepherd.md +0 -108
- package/plugins/devflow-ambient/agents/simplifier.md +0 -102
- package/plugins/devflow-ambient/agents/skimmer.md +0 -143
- package/plugins/devflow-ambient/agents/validator.md +0 -86
- package/plugins/devflow-ambient/skills/ambient-router/SKILL.md +0 -145
- package/plugins/devflow-ambient/skills/ambient-router/references/skill-catalog.md +0 -74
- package/plugins/devflow-ambient/skills/debug-orchestration/SKILL.md +0 -69
- package/plugins/devflow-ambient/skills/implementation-orchestration/SKILL.md +0 -92
- package/plugins/devflow-ambient/skills/plan-orchestration/SKILL.md +0 -71
- package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +0 -19
- package/plugins/devflow-audit-claude/README.md +0 -46
- package/plugins/devflow-audit-claude/agents/claude-md-auditor.md +0 -134
- package/plugins/devflow-audit-claude/commands/audit-claude.md +0 -89
- package/plugins/devflow-code-review/.claude-plugin/plugin.json +0 -38
- package/plugins/devflow-code-review/README.md +0 -73
- package/plugins/devflow-code-review/agents/git.md +0 -277
- package/plugins/devflow-code-review/agents/reviewer.md +0 -165
- package/plugins/devflow-code-review/agents/synthesizer.md +0 -211
- package/plugins/devflow-code-review/commands/code-review-teams.md +0 -285
- package/plugins/devflow-code-review/commands/code-review.md +0 -163
- package/plugins/devflow-code-review/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-code-review/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-code-review/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-code-review/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-code-review/skills/architecture-patterns/SKILL.md +0 -153
- package/plugins/devflow-code-review/skills/architecture-patterns/references/patterns.md +0 -873
- package/plugins/devflow-code-review/skills/architecture-patterns/references/violations.md +0 -575
- package/plugins/devflow-code-review/skills/complexity-patterns/SKILL.md +0 -143
- package/plugins/devflow-code-review/skills/consistency-patterns/SKILL.md +0 -140
- package/plugins/devflow-code-review/skills/database-patterns/SKILL.md +0 -134
- package/plugins/devflow-code-review/skills/dependencies-patterns/SKILL.md +0 -141
- package/plugins/devflow-code-review/skills/documentation-patterns/SKILL.md +0 -125
- package/plugins/devflow-code-review/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-code-review/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-code-review/skills/performance-patterns/SKILL.md +0 -154
- package/plugins/devflow-code-review/skills/performance-patterns/references/patterns.md +0 -503
- package/plugins/devflow-code-review/skills/performance-patterns/references/violations.md +0 -354
- package/plugins/devflow-code-review/skills/regression-patterns/SKILL.md +0 -146
- package/plugins/devflow-code-review/skills/review-methodology/SKILL.md +0 -119
- package/plugins/devflow-code-review/skills/review-methodology/references/patterns.md +0 -186
- package/plugins/devflow-code-review/skills/review-methodology/references/report-template.md +0 -142
- package/plugins/devflow-code-review/skills/review-methodology/references/violations.md +0 -125
- package/plugins/devflow-code-review/skills/security-patterns/SKILL.md +0 -156
- package/plugins/devflow-code-review/skills/security-patterns/references/patterns.md +0 -507
- package/plugins/devflow-code-review/skills/security-patterns/references/violations.md +0 -237
- package/plugins/devflow-code-review/skills/test-patterns/SKILL.md +0 -183
- package/plugins/devflow-code-review/skills/test-patterns/references/patterns.md +0 -220
- package/plugins/devflow-code-review/skills/test-patterns/references/violations.md +0 -221
- package/plugins/devflow-core-skills/.claude-plugin/plugin.json +0 -31
- package/plugins/devflow-core-skills/README.md +0 -50
- package/plugins/devflow-core-skills/skills/core-patterns/SKILL.md +0 -162
- package/plugins/devflow-core-skills/skills/core-patterns/references/checklist.md +0 -276
- package/plugins/devflow-core-skills/skills/core-patterns/references/code-smell-violations.md +0 -144
- package/plugins/devflow-core-skills/skills/core-patterns/references/patterns.md +0 -576
- package/plugins/devflow-core-skills/skills/core-patterns/references/violations.md +0 -369
- package/plugins/devflow-core-skills/skills/docs-framework/SKILL.md +0 -143
- package/plugins/devflow-core-skills/skills/docs-framework/references/patterns.md +0 -346
- package/plugins/devflow-core-skills/skills/docs-framework/references/violations.md +0 -221
- package/plugins/devflow-core-skills/skills/git-safety/SKILL.md +0 -122
- package/plugins/devflow-core-skills/skills/git-safety/references/patterns.md +0 -289
- package/plugins/devflow-core-skills/skills/git-safety/references/violations.md +0 -18
- package/plugins/devflow-core-skills/skills/git-workflow/SKILL.md +0 -158
- package/plugins/devflow-core-skills/skills/git-workflow/references/commit-patterns.md +0 -115
- package/plugins/devflow-core-skills/skills/git-workflow/references/commit-violations.md +0 -77
- package/plugins/devflow-core-skills/skills/git-workflow/references/pr-patterns.md +0 -127
- package/plugins/devflow-core-skills/skills/git-workflow/references/pr-violations.md +0 -96
- package/plugins/devflow-core-skills/skills/github-patterns/SKILL.md +0 -153
- package/plugins/devflow-core-skills/skills/github-patterns/references/patterns.md +0 -572
- package/plugins/devflow-core-skills/skills/github-patterns/references/violations.md +0 -298
- package/plugins/devflow-core-skills/skills/input-validation/SKILL.md +0 -148
- package/plugins/devflow-core-skills/skills/input-validation/references/detection.md +0 -283
- package/plugins/devflow-core-skills/skills/input-validation/references/patterns.md +0 -361
- package/plugins/devflow-core-skills/skills/input-validation/references/violations.md +0 -224
- package/plugins/devflow-core-skills/skills/search-first/SKILL.md +0 -133
- package/plugins/devflow-core-skills/skills/search-first/references/evaluation-criteria.md +0 -101
- package/plugins/devflow-core-skills/skills/test-driven-development/SKILL.md +0 -137
- package/plugins/devflow-core-skills/skills/test-patterns/SKILL.md +0 -183
- package/plugins/devflow-core-skills/skills/test-patterns/references/detection.md +0 -149
- package/plugins/devflow-core-skills/skills/test-patterns/references/patterns.md +0 -220
- package/plugins/devflow-core-skills/skills/test-patterns/references/report-template.md +0 -108
- package/plugins/devflow-core-skills/skills/test-patterns/references/violations.md +0 -221
- package/plugins/devflow-debug/.claude-plugin/plugin.json +0 -26
- package/plugins/devflow-debug/README.md +0 -65
- package/plugins/devflow-debug/agents/git.md +0 -277
- package/plugins/devflow-debug/agents/synthesizer.md +0 -211
- package/plugins/devflow-debug/commands/debug-teams.md +0 -245
- package/plugins/devflow-debug/commands/debug.md +0 -174
- package/plugins/devflow-debug/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-debug/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-debug/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-debug/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-debug/skills/git-safety/SKILL.md +0 -122
- package/plugins/devflow-debug/skills/git-safety/references/detection.md +0 -290
- package/plugins/devflow-debug/skills/git-safety/references/patterns.md +0 -289
- package/plugins/devflow-debug/skills/git-safety/references/violations.md +0 -18
- package/plugins/devflow-debug/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-debug/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-frontend-design/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-frontend-design/skills/frontend-design/SKILL.md +0 -254
- package/plugins/devflow-frontend-design/skills/frontend-design/references/patterns.md +0 -511
- package/plugins/devflow-frontend-design/skills/frontend-design/references/violations.md +0 -453
- package/plugins/devflow-go/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-go/skills/go/SKILL.md +0 -187
- package/plugins/devflow-go/skills/go/references/concurrency.md +0 -312
- package/plugins/devflow-go/skills/go/references/patterns.md +0 -232
- package/plugins/devflow-go/skills/go/references/violations.md +0 -205
- package/plugins/devflow-implement/.claude-plugin/plugin.json +0 -35
- package/plugins/devflow-implement/README.md +0 -71
- package/plugins/devflow-implement/agents/coder.md +0 -135
- package/plugins/devflow-implement/agents/git.md +0 -277
- package/plugins/devflow-implement/agents/scrutinizer.md +0 -82
- package/plugins/devflow-implement/agents/shepherd.md +0 -108
- package/plugins/devflow-implement/agents/simplifier.md +0 -102
- package/plugins/devflow-implement/agents/skimmer.md +0 -143
- package/plugins/devflow-implement/agents/synthesizer.md +0 -211
- package/plugins/devflow-implement/agents/validator.md +0 -86
- package/plugins/devflow-implement/commands/implement-teams.md +0 -620
- package/plugins/devflow-implement/commands/implement.md +0 -430
- package/plugins/devflow-implement/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-implement/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-implement/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-implement/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-implement/skills/implementation-patterns/SKILL.md +0 -162
- package/plugins/devflow-implement/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-implement/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-implement/skills/self-review/SKILL.md +0 -149
- package/plugins/devflow-implement/skills/self-review/references/stub-detection.md +0 -135
- package/plugins/devflow-java/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-java/skills/java/SKILL.md +0 -183
- package/plugins/devflow-java/skills/java/references/modern-java.md +0 -270
- package/plugins/devflow-java/skills/java/references/patterns.md +0 -235
- package/plugins/devflow-java/skills/java/references/violations.md +0 -213
- package/plugins/devflow-python/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-python/skills/python/SKILL.md +0 -188
- package/plugins/devflow-python/skills/python/references/async.md +0 -220
- package/plugins/devflow-python/skills/python/references/patterns.md +0 -226
- package/plugins/devflow-python/skills/python/references/violations.md +0 -204
- package/plugins/devflow-react/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-react/skills/react/SKILL.md +0 -276
- package/plugins/devflow-react/skills/react/references/patterns.md +0 -1331
- package/plugins/devflow-react/skills/react/references/violations.md +0 -565
- package/plugins/devflow-resolve/.claude-plugin/plugin.json +0 -29
- package/plugins/devflow-resolve/README.md +0 -65
- package/plugins/devflow-resolve/agents/git.md +0 -277
- package/plugins/devflow-resolve/agents/resolver.md +0 -131
- package/plugins/devflow-resolve/agents/simplifier.md +0 -102
- package/plugins/devflow-resolve/commands/resolve-teams.md +0 -307
- package/plugins/devflow-resolve/commands/resolve.md +0 -246
- package/plugins/devflow-resolve/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-resolve/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-resolve/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-resolve/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-resolve/skills/implementation-patterns/SKILL.md +0 -162
- package/plugins/devflow-resolve/skills/implementation-patterns/references/patterns.md +0 -1063
- package/plugins/devflow-resolve/skills/implementation-patterns/references/violations.md +0 -483
- package/plugins/devflow-resolve/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-resolve/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-resolve/skills/security-patterns/SKILL.md +0 -156
- package/plugins/devflow-resolve/skills/security-patterns/references/detection.md +0 -287
- package/plugins/devflow-resolve/skills/security-patterns/references/patterns.md +0 -507
- package/plugins/devflow-resolve/skills/security-patterns/references/violations.md +0 -237
- package/plugins/devflow-rust/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-rust/skills/rust/SKILL.md +0 -193
- package/plugins/devflow-rust/skills/rust/references/ownership.md +0 -242
- package/plugins/devflow-rust/skills/rust/references/patterns.md +0 -210
- package/plugins/devflow-rust/skills/rust/references/violations.md +0 -191
- package/plugins/devflow-self-review/.claude-plugin/plugin.json +0 -26
- package/plugins/devflow-self-review/README.md +0 -38
- package/plugins/devflow-self-review/agents/scrutinizer.md +0 -82
- package/plugins/devflow-self-review/agents/simplifier.md +0 -102
- package/plugins/devflow-self-review/agents/validator.md +0 -86
- package/plugins/devflow-self-review/commands/self-review.md +0 -132
- package/plugins/devflow-self-review/skills/core-patterns/SKILL.md +0 -162
- package/plugins/devflow-self-review/skills/core-patterns/references/checklist.md +0 -276
- package/plugins/devflow-self-review/skills/core-patterns/references/code-smell-violations.md +0 -144
- package/plugins/devflow-self-review/skills/core-patterns/references/detection.md +0 -303
- package/plugins/devflow-self-review/skills/core-patterns/references/patterns.md +0 -576
- package/plugins/devflow-self-review/skills/core-patterns/references/violations.md +0 -369
- package/plugins/devflow-self-review/skills/self-review/SKILL.md +0 -149
- package/plugins/devflow-self-review/skills/self-review/references/patterns.md +0 -405
- package/plugins/devflow-self-review/skills/self-review/references/report-template.md +0 -253
- package/plugins/devflow-self-review/skills/self-review/references/stub-detection.md +0 -135
- package/plugins/devflow-self-review/skills/self-review/references/violations.md +0 -308
- package/plugins/devflow-specify/.claude-plugin/plugin.json +0 -25
- package/plugins/devflow-specify/README.md +0 -46
- package/plugins/devflow-specify/agents/skimmer.md +0 -143
- package/plugins/devflow-specify/agents/synthesizer.md +0 -211
- package/plugins/devflow-specify/commands/specify-teams.md +0 -321
- package/plugins/devflow-specify/commands/specify.md +0 -186
- package/plugins/devflow-specify/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-specify/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-specify/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-specify/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-typescript/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-typescript/skills/typescript/SKILL.md +0 -176
- package/plugins/devflow-typescript/skills/typescript/references/patterns.md +0 -1105
- package/plugins/devflow-typescript/skills/typescript/references/violations.md +0 -433
- package/scripts/hooks/ambient-prompt +0 -50
- package/scripts/hooks/background-memory-update +0 -257
- package/scripts/hooks/ensure-memory-gitignore +0 -17
- package/scripts/hooks/pre-compact-memory +0 -87
- package/scripts/hooks/run-hook +0 -23
- package/scripts/hooks/session-start-memory +0 -165
- package/scripts/hooks/stop-update-memory +0 -85
- package/scripts/hud/cache.d.ts +0 -14
- package/scripts/hud/cache.d.ts.map +0 -1
- package/scripts/hud/cache.js +0 -54
- package/scripts/hud/cache.js.map +0 -1
- package/scripts/hud/colors.d.ts +0 -23
- package/scripts/hud/colors.d.ts.map +0 -1
- package/scripts/hud/colors.js +0 -62
- package/scripts/hud/colors.js.map +0 -1
- package/scripts/hud/components/config-counts.d.ts +0 -8
- package/scripts/hud/components/config-counts.d.ts.map +0 -1
- package/scripts/hud/components/config-counts.js +0 -91
- package/scripts/hud/components/config-counts.js.map +0 -1
- package/scripts/hud/components/context-usage.d.ts +0 -8
- package/scripts/hud/components/context-usage.d.ts.map +0 -1
- package/scripts/hud/components/context-usage.js +0 -49
- package/scripts/hud/components/context-usage.js.map +0 -1
- package/scripts/hud/components/diff-stats.d.ts +0 -3
- package/scripts/hud/components/diff-stats.d.ts.map +0 -1
- package/scripts/hud/components/diff-stats.js +0 -36
- package/scripts/hud/components/diff-stats.js.map +0 -1
- package/scripts/hud/components/directory.d.ts +0 -3
- package/scripts/hud/components/directory.d.ts.map +0 -1
- package/scripts/hud/components/directory.js +0 -10
- package/scripts/hud/components/directory.js.map +0 -1
- package/scripts/hud/components/git-ahead-behind.d.ts +0 -3
- package/scripts/hud/components/git-ahead-behind.d.ts.map +0 -1
- package/scripts/hud/components/git-ahead-behind.js +0 -16
- package/scripts/hud/components/git-ahead-behind.js.map +0 -1
- package/scripts/hud/components/git-branch.d.ts +0 -3
- package/scripts/hud/components/git-branch.d.ts.map +0 -1
- package/scripts/hud/components/git-branch.js +0 -14
- package/scripts/hud/components/git-branch.js.map +0 -1
- package/scripts/hud/components/model.d.ts +0 -3
- package/scripts/hud/components/model.d.ts.map +0 -1
- package/scripts/hud/components/model.js +0 -21
- package/scripts/hud/components/model.js.map +0 -1
- package/scripts/hud/components/release-info.d.ts +0 -3
- package/scripts/hud/components/release-info.d.ts.map +0 -1
- package/scripts/hud/components/release-info.js +0 -9
- package/scripts/hud/components/release-info.js.map +0 -1
- package/scripts/hud/components/session-cost.d.ts +0 -3
- package/scripts/hud/components/session-cost.d.ts.map +0 -1
- package/scripts/hud/components/session-cost.js +0 -9
- package/scripts/hud/components/session-cost.js.map +0 -1
- package/scripts/hud/components/session-duration.d.ts +0 -3
- package/scripts/hud/components/session-duration.d.ts.map +0 -1
- package/scripts/hud/components/session-duration.js +0 -18
- package/scripts/hud/components/session-duration.js.map +0 -1
- package/scripts/hud/components/todo-progress.d.ts +0 -3
- package/scripts/hud/components/todo-progress.d.ts.map +0 -1
- package/scripts/hud/components/todo-progress.js +0 -11
- package/scripts/hud/components/todo-progress.js.map +0 -1
- package/scripts/hud/components/usage-quota.d.ts +0 -3
- package/scripts/hud/components/usage-quota.d.ts.map +0 -1
- package/scripts/hud/components/usage-quota.js +0 -45
- package/scripts/hud/components/usage-quota.js.map +0 -1
- package/scripts/hud/components/version-badge.d.ts +0 -3
- package/scripts/hud/components/version-badge.d.ts.map +0 -1
- package/scripts/hud/components/version-badge.js +0 -80
- package/scripts/hud/components/version-badge.js.map +0 -1
- package/scripts/hud/components/worktree-count.d.ts +0 -3
- package/scripts/hud/components/worktree-count.d.ts.map +0 -1
- package/scripts/hud/components/worktree-count.js +0 -8
- package/scripts/hud/components/worktree-count.js.map +0 -1
- package/scripts/hud/config.d.ts +0 -10
- package/scripts/hud/config.d.ts.map +0 -1
- package/scripts/hud/config.js +0 -55
- package/scripts/hud/config.js.map +0 -1
- package/scripts/hud/credentials.d.ts +0 -17
- package/scripts/hud/credentials.d.ts.map +0 -1
- package/scripts/hud/credentials.js +0 -99
- package/scripts/hud/credentials.js.map +0 -1
- package/scripts/hud/git.d.ts +0 -7
- package/scripts/hud/git.d.ts.map +0 -1
- package/scripts/hud/git.js +0 -153
- package/scripts/hud/git.js.map +0 -1
- package/scripts/hud/index.d.ts +0 -2
- package/scripts/hud/index.d.ts.map +0 -1
- package/scripts/hud/index.js +0 -81
- package/scripts/hud/index.js.map +0 -1
- package/scripts/hud/render.d.ts +0 -7
- package/scripts/hud/render.d.ts.map +0 -1
- package/scripts/hud/render.js +0 -111
- package/scripts/hud/render.js.map +0 -1
- package/scripts/hud/stdin.d.ts +0 -6
- package/scripts/hud/stdin.d.ts.map +0 -1
- package/scripts/hud/stdin.js +0 -25
- package/scripts/hud/stdin.js.map +0 -1
- package/scripts/hud/transcript.d.ts +0 -7
- package/scripts/hud/transcript.d.ts.map +0 -1
- package/scripts/hud/transcript.js +0 -130
- package/scripts/hud/transcript.js.map +0 -1
- package/scripts/hud/types.d.ts +0 -116
- package/scripts/hud/types.d.ts.map +0 -1
- package/scripts/hud/types.js +0 -2
- package/scripts/hud/types.js.map +0 -1
- package/scripts/hud/usage-api.d.ts +0 -7
- package/scripts/hud/usage-api.d.ts.map +0 -1
- package/scripts/hud/usage-api.js +0 -84
- package/scripts/hud/usage-api.js.map +0 -1
- package/scripts/hud.sh +0 -5
- package/shared/agents/coder.md +0 -135
- package/shared/agents/git.md +0 -277
- package/shared/agents/resolver.md +0 -131
- package/shared/agents/reviewer.md +0 -165
- package/shared/agents/scrutinizer.md +0 -82
- package/shared/agents/shepherd.md +0 -108
- package/shared/agents/simplifier.md +0 -102
- package/shared/agents/skimmer.md +0 -143
- package/shared/agents/synthesizer.md +0 -211
- package/shared/agents/validator.md +0 -86
- package/shared/skills/accessibility/SKILL.md +0 -229
- package/shared/skills/accessibility/references/detection.md +0 -171
- package/shared/skills/accessibility/references/patterns.md +0 -670
- package/shared/skills/accessibility/references/violations.md +0 -419
- package/shared/skills/agent-teams/SKILL.md +0 -124
- package/shared/skills/agent-teams/references/cleanup.md +0 -104
- package/shared/skills/agent-teams/references/communication.md +0 -122
- package/shared/skills/agent-teams/references/team-patterns.md +0 -217
- package/shared/skills/ambient-router/SKILL.md +0 -145
- package/shared/skills/ambient-router/references/skill-catalog.md +0 -74
- package/shared/skills/architecture-patterns/SKILL.md +0 -153
- package/shared/skills/architecture-patterns/references/detection.md +0 -337
- package/shared/skills/architecture-patterns/references/patterns.md +0 -873
- package/shared/skills/architecture-patterns/references/violations.md +0 -575
- package/shared/skills/complexity-patterns/SKILL.md +0 -143
- package/shared/skills/complexity-patterns/references/detection.md +0 -264
- package/shared/skills/complexity-patterns/references/patterns.md +0 -487
- package/shared/skills/complexity-patterns/references/violations.md +0 -361
- package/shared/skills/consistency-patterns/SKILL.md +0 -140
- package/shared/skills/consistency-patterns/references/detection.md +0 -207
- package/shared/skills/consistency-patterns/references/patterns.md +0 -202
- package/shared/skills/consistency-patterns/references/violations.md +0 -213
- package/shared/skills/core-patterns/SKILL.md +0 -162
- package/shared/skills/core-patterns/references/checklist.md +0 -276
- package/shared/skills/core-patterns/references/code-smell-violations.md +0 -144
- package/shared/skills/core-patterns/references/detection.md +0 -303
- package/shared/skills/core-patterns/references/patterns.md +0 -576
- package/shared/skills/core-patterns/references/violations.md +0 -369
- package/shared/skills/database-patterns/SKILL.md +0 -134
- package/shared/skills/database-patterns/references/detection.md +0 -208
- package/shared/skills/database-patterns/references/patterns.md +0 -394
- package/shared/skills/database-patterns/references/violations.md +0 -332
- package/shared/skills/debug-orchestration/SKILL.md +0 -69
- package/shared/skills/dependencies-patterns/SKILL.md +0 -141
- package/shared/skills/dependencies-patterns/references/detection.md +0 -181
- package/shared/skills/dependencies-patterns/references/patterns.md +0 -225
- package/shared/skills/dependencies-patterns/references/violations.md +0 -247
- package/shared/skills/docs-framework/SKILL.md +0 -143
- package/shared/skills/docs-framework/references/patterns.md +0 -346
- package/shared/skills/docs-framework/references/violations.md +0 -221
- package/shared/skills/documentation-patterns/SKILL.md +0 -125
- package/shared/skills/documentation-patterns/references/detection.md +0 -190
- package/shared/skills/documentation-patterns/references/patterns.md +0 -189
- package/shared/skills/documentation-patterns/references/violations.md +0 -163
- package/shared/skills/frontend-design/SKILL.md +0 -254
- package/shared/skills/frontend-design/references/detection.md +0 -184
- package/shared/skills/frontend-design/references/patterns.md +0 -511
- package/shared/skills/frontend-design/references/violations.md +0 -453
- package/shared/skills/git-safety/SKILL.md +0 -122
- package/shared/skills/git-safety/references/detection.md +0 -290
- package/shared/skills/git-safety/references/patterns.md +0 -289
- package/shared/skills/git-safety/references/violations.md +0 -18
- package/shared/skills/git-workflow/SKILL.md +0 -158
- package/shared/skills/git-workflow/references/commit-patterns.md +0 -115
- package/shared/skills/git-workflow/references/commit-violations.md +0 -77
- package/shared/skills/git-workflow/references/pr-patterns.md +0 -127
- package/shared/skills/git-workflow/references/pr-violations.md +0 -96
- package/shared/skills/github-patterns/SKILL.md +0 -153
- package/shared/skills/github-patterns/references/patterns.md +0 -572
- package/shared/skills/github-patterns/references/violations.md +0 -298
- package/shared/skills/go/SKILL.md +0 -187
- package/shared/skills/go/references/concurrency.md +0 -312
- package/shared/skills/go/references/detection.md +0 -129
- package/shared/skills/go/references/patterns.md +0 -232
- package/shared/skills/go/references/violations.md +0 -205
- package/shared/skills/implementation-orchestration/SKILL.md +0 -92
- package/shared/skills/implementation-patterns/SKILL.md +0 -162
- package/shared/skills/implementation-patterns/references/patterns.md +0 -1063
- package/shared/skills/implementation-patterns/references/violations.md +0 -483
- package/shared/skills/input-validation/SKILL.md +0 -148
- package/shared/skills/input-validation/references/detection.md +0 -283
- package/shared/skills/input-validation/references/patterns.md +0 -361
- package/shared/skills/input-validation/references/violations.md +0 -224
- package/shared/skills/java/SKILL.md +0 -183
- package/shared/skills/java/references/detection.md +0 -120
- package/shared/skills/java/references/modern-java.md +0 -270
- package/shared/skills/java/references/patterns.md +0 -235
- package/shared/skills/java/references/violations.md +0 -213
- package/shared/skills/knowledge-persistence/SKILL.md +0 -128
- package/shared/skills/knowledge-persistence/references/examples.md +0 -44
- package/shared/skills/performance-patterns/SKILL.md +0 -154
- package/shared/skills/performance-patterns/references/detection.md +0 -351
- package/shared/skills/performance-patterns/references/patterns.md +0 -503
- package/shared/skills/performance-patterns/references/violations.md +0 -354
- package/shared/skills/plan-orchestration/SKILL.md +0 -71
- package/shared/skills/python/SKILL.md +0 -188
- package/shared/skills/python/references/async.md +0 -220
- package/shared/skills/python/references/detection.md +0 -128
- package/shared/skills/python/references/patterns.md +0 -226
- package/shared/skills/python/references/violations.md +0 -204
- package/shared/skills/react/SKILL.md +0 -276
- package/shared/skills/react/references/patterns.md +0 -1331
- package/shared/skills/react/references/violations.md +0 -565
- package/shared/skills/regression-patterns/SKILL.md +0 -146
- package/shared/skills/regression-patterns/references/detection.md +0 -237
- package/shared/skills/regression-patterns/references/patterns.md +0 -226
- package/shared/skills/regression-patterns/references/violations.md +0 -225
- package/shared/skills/review-methodology/SKILL.md +0 -119
- package/shared/skills/review-methodology/references/patterns.md +0 -186
- package/shared/skills/review-methodology/references/report-template.md +0 -142
- package/shared/skills/review-methodology/references/violations.md +0 -125
- package/shared/skills/rust/SKILL.md +0 -193
- package/shared/skills/rust/references/detection.md +0 -131
- package/shared/skills/rust/references/ownership.md +0 -242
- package/shared/skills/rust/references/patterns.md +0 -210
- package/shared/skills/rust/references/violations.md +0 -191
- package/shared/skills/search-first/SKILL.md +0 -133
- package/shared/skills/search-first/references/evaluation-criteria.md +0 -101
- package/shared/skills/security-patterns/SKILL.md +0 -156
- package/shared/skills/security-patterns/references/detection.md +0 -287
- package/shared/skills/security-patterns/references/patterns.md +0 -507
- package/shared/skills/security-patterns/references/violations.md +0 -237
- package/shared/skills/self-review/SKILL.md +0 -149
- package/shared/skills/self-review/references/patterns.md +0 -405
- package/shared/skills/self-review/references/report-template.md +0 -253
- package/shared/skills/self-review/references/stub-detection.md +0 -135
- package/shared/skills/self-review/references/violations.md +0 -308
- package/shared/skills/test-driven-development/SKILL.md +0 -137
- package/shared/skills/test-driven-development/references/rationalization-prevention.md +0 -111
- package/shared/skills/test-patterns/SKILL.md +0 -183
- package/shared/skills/test-patterns/references/detection.md +0 -149
- package/shared/skills/test-patterns/references/patterns.md +0 -220
- package/shared/skills/test-patterns/references/report-template.md +0 -108
- package/shared/skills/test-patterns/references/violations.md +0 -221
- package/shared/skills/typescript/SKILL.md +0 -176
- package/shared/skills/typescript/references/patterns.md +0 -1105
- package/shared/skills/typescript/references/violations.md +0 -433
- package/src/templates/claudeignore.template +0 -188
- package/src/templates/settings.json +0 -59
- /package/dist/{utils → core}/safe-delete.js +0 -0
- /package/{plugins/devflow-accessibility → src/assets}/skills/accessibility/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/architecture-patterns → src/assets/skills/architecture}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/complexity-patterns → src/assets/skills/complexity}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/complexity-patterns → src/assets/skills/complexity}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/complexity-patterns → src/assets/skills/complexity}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/consistency-patterns → src/assets/skills/consistency}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/consistency-patterns → src/assets/skills/consistency}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/consistency-patterns → src/assets/skills/consistency}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/database-patterns → src/assets/skills/database}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/database-patterns → src/assets/skills/database}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/database-patterns → src/assets/skills/database}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/dependencies-patterns → src/assets/skills/dependencies}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/dependencies-patterns → src/assets/skills/dependencies}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/dependencies-patterns → src/assets/skills/dependencies}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/documentation-patterns → src/assets/skills/documentation}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/documentation-patterns → src/assets/skills/documentation}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/documentation-patterns → src/assets/skills/documentation}/references/violations.md +0 -0
- /package/{plugins/devflow-core-skills/skills/git-safety → src/assets/skills/git}/references/detection.md +0 -0
- /package/{plugins/devflow-go → src/assets}/skills/go/references/detection.md +0 -0
- /package/{plugins/devflow-java → src/assets}/skills/java/references/detection.md +0 -0
- /package/{plugins/devflow-implement/skills/implementation-patterns → src/assets/skills/patterns}/references/patterns.md +0 -0
- /package/{plugins/devflow-implement/skills/implementation-patterns → src/assets/skills/patterns}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/performance-patterns → src/assets/skills/performance}/references/detection.md +0 -0
- /package/{plugins/devflow-python → src/assets}/skills/python/references/detection.md +0 -0
- /package/{plugins/devflow-implement/skills/self-review → src/assets/skills/quality-gates}/references/patterns.md +0 -0
- /package/{plugins/devflow-implement/skills/self-review → src/assets/skills/quality-gates}/references/report-template.md +0 -0
- /package/{plugins/devflow-implement/skills/self-review → src/assets/skills/quality-gates}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/regression-patterns → src/assets/skills/regression}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/regression-patterns → src/assets/skills/regression}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/regression-patterns → src/assets/skills/regression}/references/violations.md +0 -0
- /package/{plugins/devflow-rust → src/assets}/skills/rust/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/security-patterns → src/assets/skills/security}/references/detection.md +0 -0
- /package/{plugins/devflow-core-skills/skills/core-patterns → src/assets/skills/software-design}/references/detection.md +0 -0
- /package/{plugins/devflow-core-skills → src/assets}/skills/test-driven-development/references/rationalization-prevention.md +0 -0
- /package/{plugins/devflow-code-review/skills/test-patterns → src/assets/skills/testing}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/test-patterns → src/assets/skills/testing}/references/report-template.md +0 -0
- /package/{plugins/devflow-frontend-design/skills/frontend-design → src/assets/skills/ui-design}/references/detection.md +0 -0
- /package/src/{templates → targets/claude-code/templates}/managed-settings.json +0 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External model dormancy predicate and Claude model alias set.
|
|
3
|
+
*
|
|
4
|
+
* Dormancy asks "does this model name need the proxy?" — answerable from the
|
|
5
|
+
* complement (the static Claude passthrough set) without any discovery I/O.
|
|
6
|
+
* This keeps the safety property correct even when discovery fails.
|
|
7
|
+
*
|
|
8
|
+
* Live model discovery (discoverExternalModels / getExternalModelsCached) lives
|
|
9
|
+
* in src/core/model-discovery.ts. The TUI picker and --set validation use the
|
|
10
|
+
* ExternalModelCatalog returned by those functions.
|
|
11
|
+
*
|
|
12
|
+
* applies ADR-013: pure core-layer module, no Claude Code adapter concerns.
|
|
13
|
+
*
|
|
14
|
+
* NOTE: the internal routing runtime package name must NEVER appear in
|
|
15
|
+
* user-visible strings, CLI output, or error messages. User-facing vocabulary:
|
|
16
|
+
* "external model routing (GPT models via your OpenAI/Codex subscription)" /
|
|
17
|
+
* "Devflow proxy".
|
|
18
|
+
*/
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Claude model alias set — exported for TUI cycle builders and tests.
|
|
21
|
+
// Lives in external-models (leaf module, no project imports) so callers in
|
|
22
|
+
// agents-view/state.ts can import without cycles.
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
/**
|
|
25
|
+
* Claude model short-alias identifiers.
|
|
26
|
+
* A mapping entry with one of these model values applies unconditionally —
|
|
27
|
+
* it is NOT an external model and is NOT subject to proxy dormancy.
|
|
28
|
+
*
|
|
29
|
+
* Includes 'fable': devflow's Claude set is intentionally a SUPERSET of the
|
|
30
|
+
* routing runtime's own Anthropic passthrough regex (which does not match
|
|
31
|
+
* 'fable'). The runtime's fallbackProvider is 'anthropic', so 'fable' routes
|
|
32
|
+
* correctly. Excluding 'fable' here would misclassify it as external and
|
|
33
|
+
* silently revert it to the shipped default when the proxy is off.
|
|
34
|
+
*/
|
|
35
|
+
export const CLAUDE_MODEL_ALIASES = ['haiku', 'sonnet', 'opus', 'fable'];
|
|
36
|
+
const CLAUDE_EXACT = new Set([...CLAUDE_MODEL_ALIASES, 'inherit']);
|
|
37
|
+
/**
|
|
38
|
+
* Returns true when `model` names a Claude-native model — an alias
|
|
39
|
+
* (haiku/sonnet/opus/fable/inherit) or a full claude- prefixed identifier.
|
|
40
|
+
*
|
|
41
|
+
* Used as the COMPLEMENT predicate for dormancy: a model is external if and
|
|
42
|
+
* only if it is not a Claude model name (and not 'default').
|
|
43
|
+
*
|
|
44
|
+
* Pure function, no I/O.
|
|
45
|
+
*/
|
|
46
|
+
export function isClaudeModelName(model) {
|
|
47
|
+
return CLAUDE_EXACT.has(model) || model.startsWith('claude-');
|
|
48
|
+
}
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// Dormancy predicate
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
/**
|
|
53
|
+
* Returns true when `model` names a non-Claude model that requires the
|
|
54
|
+
* Devflow proxy AND the proxy is currently disabled — i.e., the entry is
|
|
55
|
+
* DORMANT and the shipped default model should be used instead.
|
|
56
|
+
*
|
|
57
|
+
* Classification is by the COMPLEMENT: a model is dormant-when-off iff it is
|
|
58
|
+
* NOT a Claude model name (and not 'default' or undefined). This makes dormancy
|
|
59
|
+
* independent of runtime discovery — a discovery failure cannot degrade the
|
|
60
|
+
* safety property by returning an empty external set.
|
|
61
|
+
*
|
|
62
|
+
* Single source of truth for dormancy — do NOT inline this predicate at call
|
|
63
|
+
* sites. (anti-pattern, KNOWLEDGE.md § Anti-Patterns — "Duplicating the dormancy predicate")
|
|
64
|
+
*
|
|
65
|
+
* Pure function, no I/O. Lives in external-models (leaf module, no project
|
|
66
|
+
* imports) so callers in agents-view/state.ts can import without cycles.
|
|
67
|
+
*
|
|
68
|
+
* @param model - The configured model string, or undefined (no mapping entry).
|
|
69
|
+
* @param proxyEnabled - Whether the Devflow proxy is currently active.
|
|
70
|
+
*/
|
|
71
|
+
export function isDormantExternalModel(model, proxyEnabled) {
|
|
72
|
+
if (model === undefined || proxyEnabled)
|
|
73
|
+
return false;
|
|
74
|
+
return model !== 'default' && !isClaudeModelName(model);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=external-models.js.map
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import * as path from 'path';
|
|
2
|
+
import { promises as fs } from 'fs';
|
|
3
|
+
import { getFeatureConfigPath } from './project-paths.js';
|
|
4
|
+
export const DEFAULT_CONFIG = {
|
|
5
|
+
memory: true,
|
|
6
|
+
learning: true,
|
|
7
|
+
knowledge: true,
|
|
8
|
+
reviewPublication: 'auto',
|
|
9
|
+
};
|
|
10
|
+
export function getConfigPath(projectRoot) {
|
|
11
|
+
return getFeatureConfigPath(projectRoot);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Parse and narrow an unknown JSON value into a FeatureConfig, merging onto
|
|
15
|
+
* DEFAULT_CONFIG. Pure function — no I/O, no side effects.
|
|
16
|
+
*
|
|
17
|
+
* Coalesces legacy `decisions` key into `learning` when both are present:
|
|
18
|
+
* `decisions` wins (legacy-decisions-wins semantics; intentionally opposite to
|
|
19
|
+
* manifest.ts's new-key-wins self-heal — migration-compat requires the old key
|
|
20
|
+
* to take precedence so old configs with `decisions: false` are not silently
|
|
21
|
+
* re-enabled by a newer `learning: true` key).
|
|
22
|
+
* Silently ignores `autoCommit` — old configs may still contain it.
|
|
23
|
+
*
|
|
24
|
+
* Returns null when `parsed` is not a plain object (caller falls through to
|
|
25
|
+
* the next candidate path).
|
|
26
|
+
*/
|
|
27
|
+
function coerceConfig(parsed) {
|
|
28
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed))
|
|
29
|
+
return null;
|
|
30
|
+
const p = parsed;
|
|
31
|
+
// Coalesce decisions (legacy key) → learning. decisions wins when both present.
|
|
32
|
+
let learning = DEFAULT_CONFIG.learning;
|
|
33
|
+
if (typeof p.learning === 'boolean')
|
|
34
|
+
learning = p.learning;
|
|
35
|
+
if (typeof p.decisions === 'boolean')
|
|
36
|
+
learning = p.decisions; // decisions wins
|
|
37
|
+
// Coerce reviewPublication: any invalid or absent value → 'auto' (self-heal, ADR-014 idiom).
|
|
38
|
+
const rp = p.reviewPublication;
|
|
39
|
+
const reviewPublication = rp === 'auto' || rp === 'full' || rp === 'off' ? rp : 'auto';
|
|
40
|
+
return {
|
|
41
|
+
memory: typeof p.memory === 'boolean' ? p.memory : DEFAULT_CONFIG.memory,
|
|
42
|
+
learning,
|
|
43
|
+
knowledge: typeof p.knowledge === 'boolean' ? p.knowledge : DEFAULT_CONFIG.knowledge,
|
|
44
|
+
reviewPublication,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Read the feature config for a project root.
|
|
49
|
+
* Returns DEFAULT_CONFIG when the file is missing or unreadable.
|
|
50
|
+
* Applies ADR-001: .devflow/config.json is the sole source of truth;
|
|
51
|
+
* `devflow init` writes it directly on first install. An absent file falls
|
|
52
|
+
* through to DEFAULT_CONFIG (all features enabled by default).
|
|
53
|
+
*/
|
|
54
|
+
export async function readConfig(projectRoot) {
|
|
55
|
+
const configPath = getFeatureConfigPath(projectRoot);
|
|
56
|
+
try {
|
|
57
|
+
const config = coerceConfig(JSON.parse(await fs.readFile(configPath, 'utf-8')));
|
|
58
|
+
if (config !== null)
|
|
59
|
+
return config;
|
|
60
|
+
return { ...DEFAULT_CONFIG };
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return { ...DEFAULT_CONFIG };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Write the feature config for a project root.
|
|
68
|
+
* Creates the .devflow/ directory if missing.
|
|
69
|
+
* Uses an atomic temp+rename pattern to prevent partial reads under concurrent writes.
|
|
70
|
+
*/
|
|
71
|
+
export async function writeConfig(projectRoot, config) {
|
|
72
|
+
const configPath = getFeatureConfigPath(projectRoot);
|
|
73
|
+
await fs.mkdir(path.join(projectRoot, '.devflow'), { recursive: true });
|
|
74
|
+
const tmpPath = configPath + '.tmp.' + process.pid;
|
|
75
|
+
await fs.writeFile(tmpPath, JSON.stringify(config, null, 2) + '\n', { encoding: 'utf-8', mode: 0o600 });
|
|
76
|
+
await fs.rename(tmpPath, configPath);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Toggle a single feature in the feature config.
|
|
80
|
+
* Reads current config, applies the change, and writes back.
|
|
81
|
+
*
|
|
82
|
+
* D1: Non-atomic read-modify-write. Concurrent invocations of `updateFeature`
|
|
83
|
+
* could lose each other's writes. Acceptable here because: (a) devflow CLI
|
|
84
|
+
* commands are single-threaded user-initiated actions, and (b) the window is
|
|
85
|
+
* milliseconds on a local filesystem with no concurrent writers in normal use.
|
|
86
|
+
* If concurrent safety is ever required, replace with an atomic file-swap or
|
|
87
|
+
* a lock file.
|
|
88
|
+
*/
|
|
89
|
+
export async function updateFeature(projectRoot, feature, enabled) {
|
|
90
|
+
const config = await readConfig(projectRoot);
|
|
91
|
+
await writeConfig(projectRoot, { ...config, [feature]: enabled });
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check whether a specific feature is enabled for the given project root.
|
|
95
|
+
*/
|
|
96
|
+
export async function isFeatureEnabled(projectRoot, feature) {
|
|
97
|
+
const config = await readConfig(projectRoot);
|
|
98
|
+
return config[feature];
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Read the feature config for a project root, returning null when the file
|
|
102
|
+
* is absent or malformed.
|
|
103
|
+
*
|
|
104
|
+
* Unlike readConfig (which falls back to DEFAULT_CONFIG on any error),
|
|
105
|
+
* readConfigIfPresent distinguishes "not configured yet" (null) from
|
|
106
|
+
* "configured with specific values" (FeatureConfig). The distinction
|
|
107
|
+
* matters for init-seed resolution: a present config overrides the
|
|
108
|
+
* manifest for memory/learning/knowledge even when the manifest is absent.
|
|
109
|
+
*
|
|
110
|
+
* Applies ADR-001: .devflow/config.json is the source of truth; null means
|
|
111
|
+
* the config file does not exist or is unreadable — not that all features
|
|
112
|
+
* are disabled.
|
|
113
|
+
*/
|
|
114
|
+
export async function readConfigIfPresent(projectRoot) {
|
|
115
|
+
const configPath = getFeatureConfigPath(projectRoot);
|
|
116
|
+
try {
|
|
117
|
+
const text = await fs.readFile(configPath, 'utf-8');
|
|
118
|
+
return coerceConfig(JSON.parse(text)); // null when JSON is not a plain object
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// ENOENT (absent) or SyntaxError (malformed) — treat as not present
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=feature-config.js.map
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code flag registry.
|
|
3
|
+
*
|
|
4
|
+
* Typed, extensible mechanism for managing Claude Code feature flags.
|
|
5
|
+
* Pure functions: applyFlags, stripFlags, getDefaultFlags — no I/O.
|
|
6
|
+
*/
|
|
7
|
+
export const FLAG_REGISTRY = [
|
|
8
|
+
// === Recommended (default ON) ===
|
|
9
|
+
{
|
|
10
|
+
id: 'tui',
|
|
11
|
+
label: 'Fullscreen terminal UI',
|
|
12
|
+
description: 'Flicker-free fullscreen rendering',
|
|
13
|
+
hint: 'Modern fullscreen interface',
|
|
14
|
+
target: { type: 'setting', key: 'tui', value: 'fullscreen' },
|
|
15
|
+
defaultEnabled: true,
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: 'tool-search',
|
|
19
|
+
label: 'Deferred tool loading',
|
|
20
|
+
description: 'Load tool schemas on demand instead of all at startup',
|
|
21
|
+
hint: 'Faster startup',
|
|
22
|
+
target: { type: 'env', key: 'ENABLE_TOOL_SEARCH', value: 'true' },
|
|
23
|
+
defaultEnabled: true,
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'lsp',
|
|
27
|
+
label: 'LSP support',
|
|
28
|
+
description: 'Enable Language Server Protocol integration',
|
|
29
|
+
hint: 'Code intelligence from your editor',
|
|
30
|
+
target: { type: 'env', key: 'ENABLE_LSP_TOOL', value: 'true' },
|
|
31
|
+
defaultEnabled: true,
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
id: 'prompt-caching-1h',
|
|
35
|
+
label: 'Extended prompt cache',
|
|
36
|
+
description: 'Extend prompt cache TTL from 5min to 1h',
|
|
37
|
+
hint: 'Cheaper long sessions',
|
|
38
|
+
target: { type: 'env', key: 'ENABLE_PROMPT_CACHING_1H', value: 'true' },
|
|
39
|
+
defaultEnabled: true,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
id: 'show-turn-duration',
|
|
43
|
+
label: 'Show turn duration',
|
|
44
|
+
description: 'Display timing info after each turn',
|
|
45
|
+
hint: 'See how long each response takes',
|
|
46
|
+
target: { type: 'setting', key: 'showTurnDuration', value: true },
|
|
47
|
+
defaultEnabled: true,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: 'clear-context-on-plan',
|
|
51
|
+
label: 'Clear context on plan accept',
|
|
52
|
+
description: 'Clear context window when accepting a plan',
|
|
53
|
+
hint: 'Clean slate after planning',
|
|
54
|
+
target: { type: 'setting', key: 'showClearContextOnPlanAccept', value: true },
|
|
55
|
+
defaultEnabled: true,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
id: 'disable-bundled-skills',
|
|
59
|
+
label: 'Disable bundled skills',
|
|
60
|
+
description: "Remove Claude Code's built-in skills and workflows (devflow provides its own)",
|
|
61
|
+
hint: 'Cleaner skill list',
|
|
62
|
+
target: { type: 'setting', key: 'disableBundledSkills', value: true },
|
|
63
|
+
defaultEnabled: true,
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: 'pin-sonnet-4-6',
|
|
67
|
+
label: 'Pin Sonnet to 4.6',
|
|
68
|
+
description: 'Pin the default Sonnet model to claude-sonnet-4-6',
|
|
69
|
+
hint: 'Stable, deterministic Sonnet version',
|
|
70
|
+
target: { type: 'env', key: 'ANTHROPIC_DEFAULT_SONNET_MODEL', value: 'claude-sonnet-4-6' },
|
|
71
|
+
defaultEnabled: true,
|
|
72
|
+
},
|
|
73
|
+
// === Optional (default OFF) — skip these if you're unsure ===
|
|
74
|
+
{
|
|
75
|
+
id: 'brief',
|
|
76
|
+
label: 'Brief output mode',
|
|
77
|
+
description: 'Reduce verbosity of Claude Code output',
|
|
78
|
+
hint: 'Shorter responses',
|
|
79
|
+
target: { type: 'env', key: 'CLAUDE_CODE_BRIEF', value: 'true' },
|
|
80
|
+
defaultEnabled: false,
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
id: 'thinking-summaries',
|
|
84
|
+
label: 'Thinking summaries',
|
|
85
|
+
description: 'Show thinking summaries during reasoning',
|
|
86
|
+
hint: 'See reasoning previews',
|
|
87
|
+
target: { type: 'setting', key: 'showThinkingSummaries', value: true },
|
|
88
|
+
defaultEnabled: false,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: 'subprocess-env-scrub',
|
|
92
|
+
label: 'Subprocess env scrub',
|
|
93
|
+
description: 'Strip cloud credentials from subprocesses',
|
|
94
|
+
hint: 'Security: strip cloud creds from subprocesses',
|
|
95
|
+
target: { type: 'env', key: 'CLAUDE_CODE_SUBPROCESS_ENV_SCRUB', value: '1' },
|
|
96
|
+
defaultEnabled: false,
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: 'disable-nonessential-traffic',
|
|
100
|
+
label: 'Disable non-essential traffic',
|
|
101
|
+
description: 'Suppress usage metrics telemetry',
|
|
102
|
+
hint: 'No telemetry',
|
|
103
|
+
target: { type: 'env', key: 'CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC', value: 'true' },
|
|
104
|
+
defaultEnabled: false,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: 'forked-subagents',
|
|
108
|
+
label: 'Forked subagents',
|
|
109
|
+
description: 'Better subagent perf on external builds',
|
|
110
|
+
hint: 'Faster parallel agents (experimental)',
|
|
111
|
+
target: { type: 'env', key: 'CLAUDE_CODE_FORK_SUBAGENT', value: '1' },
|
|
112
|
+
defaultEnabled: false,
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
id: 'disable-adaptive-thinking',
|
|
116
|
+
label: 'Disable adaptive thinking',
|
|
117
|
+
description: 'Disable adaptive reasoning on Opus/Sonnet 4.6',
|
|
118
|
+
hint: 'Fixed thinking budget',
|
|
119
|
+
target: { type: 'env', key: 'CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING', value: 'true' },
|
|
120
|
+
defaultEnabled: false,
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
id: 'always-thinking',
|
|
124
|
+
label: 'Always enable thinking',
|
|
125
|
+
description: 'Enable extended thinking by default',
|
|
126
|
+
hint: 'Thinking on every turn',
|
|
127
|
+
target: { type: 'setting', key: 'alwaysThinkingEnabled', value: true },
|
|
128
|
+
defaultEnabled: false,
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
id: 'disable-git-instructions',
|
|
132
|
+
label: 'Disable git instructions',
|
|
133
|
+
description: 'Remove git workflow instructions from system prompt',
|
|
134
|
+
hint: 'Smaller system prompt',
|
|
135
|
+
target: { type: 'env', key: 'CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS', value: 'true' },
|
|
136
|
+
defaultEnabled: false,
|
|
137
|
+
},
|
|
138
|
+
// NOTE: DISABLE_COMPACT and DISABLE_AUTOUPDATER intentionally omit the CLAUDE_CODE_ prefix —
|
|
139
|
+
// these names are defined by upstream Claude Code and must match exactly.
|
|
140
|
+
{
|
|
141
|
+
id: 'disable-compact',
|
|
142
|
+
label: 'Disable auto-compaction',
|
|
143
|
+
description: 'Disable automatic context compaction',
|
|
144
|
+
hint: 'Keep full context (uses more tokens)',
|
|
145
|
+
target: { type: 'env', key: 'DISABLE_COMPACT', value: 'true' },
|
|
146
|
+
defaultEnabled: false,
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: 'disable-1m-context',
|
|
150
|
+
label: 'Disable 1M context window',
|
|
151
|
+
description: 'Use standard context window instead of extended 1M',
|
|
152
|
+
hint: 'Use smaller context window',
|
|
153
|
+
target: { type: 'env', key: 'CLAUDE_CODE_DISABLE_1M_CONTEXT', value: 'true' },
|
|
154
|
+
defaultEnabled: false,
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: 'disable-autoupdater',
|
|
158
|
+
label: 'Disable auto-updater',
|
|
159
|
+
description: 'Prevent automatic update checks',
|
|
160
|
+
hint: 'No automatic updates',
|
|
161
|
+
target: { type: 'env', key: 'DISABLE_AUTOUPDATER', value: 'true' },
|
|
162
|
+
defaultEnabled: false,
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
id: 'agent-teams',
|
|
166
|
+
label: 'Agent Teams (experimental)',
|
|
167
|
+
description: 'Enable Claude Code experimental Agent Teams',
|
|
168
|
+
hint: 'Peer agents / teammate mode — experimental',
|
|
169
|
+
target: { type: 'env', key: 'CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS', value: '1' },
|
|
170
|
+
defaultEnabled: false,
|
|
171
|
+
// Note: the legacy `teammateMode:"auto"` settings key is stripped by
|
|
172
|
+
// src/core/teammate-mode-cleanup.ts during uninstall (stripDevflowTeammateModeFromJson).
|
|
173
|
+
// The env var above is the only surface managed by FLAG_REGISTRY for this flag.
|
|
174
|
+
},
|
|
175
|
+
];
|
|
176
|
+
/**
|
|
177
|
+
* Return IDs of all flags that are enabled by default.
|
|
178
|
+
*/
|
|
179
|
+
export function getDefaultFlags() {
|
|
180
|
+
return FLAG_REGISTRY.filter(f => f.defaultEnabled).map(f => f.id);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Apply enabled flags to a settings JSON string.
|
|
184
|
+
* Sets env vars for env-type flags and top-level keys for setting-type flags.
|
|
185
|
+
* Ignores unknown flag IDs (forward-compatible with old manifests).
|
|
186
|
+
*/
|
|
187
|
+
export function applyFlags(settingsJson, flagIds) {
|
|
188
|
+
const settings = JSON.parse(settingsJson);
|
|
189
|
+
const flagMap = new Map(FLAG_REGISTRY.map(f => [f.id, f]));
|
|
190
|
+
for (const id of flagIds) {
|
|
191
|
+
const flag = flagMap.get(id);
|
|
192
|
+
if (!flag)
|
|
193
|
+
continue;
|
|
194
|
+
if (flag.target.type === 'env') {
|
|
195
|
+
settings.env ??= {};
|
|
196
|
+
settings.env[flag.target.key] = flag.target.value;
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
settings[flag.target.key] = flag.target.value;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return JSON.stringify(settings, null, 2) + '\n';
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Strip all flag-managed keys from a settings JSON string.
|
|
206
|
+
* Removes env vars and top-level settings controlled by the flag registry.
|
|
207
|
+
* Cleans up empty env object when last entry is removed.
|
|
208
|
+
*/
|
|
209
|
+
export function stripFlags(settingsJson) {
|
|
210
|
+
const settings = JSON.parse(settingsJson);
|
|
211
|
+
const env = settings.env;
|
|
212
|
+
for (const flag of FLAG_REGISTRY) {
|
|
213
|
+
if (flag.target.type === 'env') {
|
|
214
|
+
if (env) {
|
|
215
|
+
delete env[flag.target.key];
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
delete settings[flag.target.key];
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
if (env && Object.keys(env).length === 0) {
|
|
223
|
+
delete settings.env;
|
|
224
|
+
}
|
|
225
|
+
return JSON.stringify(settings, null, 2) + '\n';
|
|
226
|
+
}
|
|
227
|
+
const VIEW_MODE_KEY = 'viewMode';
|
|
228
|
+
/** All valid view mode values. Used for validation at manifest read boundaries. */
|
|
229
|
+
export const VIEW_MODES = ['default', 'verbose', 'focus'];
|
|
230
|
+
/**
|
|
231
|
+
* Apply a view mode to a settings JSON string.
|
|
232
|
+
* 'default' removes the viewMode key (Claude Code default behaviour);
|
|
233
|
+
* 'verbose' and 'focus' set the key explicitly.
|
|
234
|
+
*/
|
|
235
|
+
export function applyViewMode(settingsJson, mode) {
|
|
236
|
+
const settings = JSON.parse(settingsJson);
|
|
237
|
+
if (mode === 'default') {
|
|
238
|
+
delete settings[VIEW_MODE_KEY];
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
settings[VIEW_MODE_KEY] = mode;
|
|
242
|
+
}
|
|
243
|
+
return JSON.stringify(settings, null, 2) + '\n';
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Strip the viewMode key from a settings JSON string.
|
|
247
|
+
* Used during uninstall / flag strip to restore Claude Code defaults.
|
|
248
|
+
*/
|
|
249
|
+
export function stripViewMode(settingsJson) {
|
|
250
|
+
const settings = JSON.parse(settingsJson);
|
|
251
|
+
delete settings[VIEW_MODE_KEY];
|
|
252
|
+
return JSON.stringify(settings, null, 2) + '\n';
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Extract the non-default view mode from a settings JSON string.
|
|
256
|
+
*
|
|
257
|
+
* Returns the persisted ViewMode when it is a recognised non-default value
|
|
258
|
+
* ('focus' or 'verbose'), so callers can chain with ?? to fall through to
|
|
259
|
+
* a manifest value or the 'default' literal:
|
|
260
|
+
*
|
|
261
|
+
* viewMode = resolveExistingViewMode(snapshot) ?? manifest?.features.viewMode ?? 'default'
|
|
262
|
+
*
|
|
263
|
+
* Returns undefined when:
|
|
264
|
+
* - JSON is malformed
|
|
265
|
+
* - the viewMode key is absent
|
|
266
|
+
* - viewMode is 'default' (no meaningful override to preserve)
|
|
267
|
+
* - viewMode is an unrecognised string
|
|
268
|
+
*/
|
|
269
|
+
export function resolveExistingViewMode(settingsJson) {
|
|
270
|
+
try {
|
|
271
|
+
const parsed = JSON.parse(settingsJson);
|
|
272
|
+
if (parsed !== null && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
273
|
+
const existing = parsed[VIEW_MODE_KEY];
|
|
274
|
+
if (typeof existing === 'string' &&
|
|
275
|
+
VIEW_MODES.includes(existing) &&
|
|
276
|
+
existing !== 'default') {
|
|
277
|
+
return existing;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
catch { /* malformed settings.json — treat as no opinion */ }
|
|
282
|
+
return undefined;
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Resolve the final view mode to write, combining an existing settings value,
|
|
286
|
+
* an init-prompt-selected value, and whether the selection was explicit (via
|
|
287
|
+
* CLI flag) or implicit (prompt default / recommended path).
|
|
288
|
+
*
|
|
289
|
+
* @param current - Existing viewMode from settings.json (resolveExistingViewMode).
|
|
290
|
+
* undefined means no opinion in the current settings.
|
|
291
|
+
* @param selected - What the init prompt (or recommended path) would use.
|
|
292
|
+
* @param explicit - true when the user made an explicit interactive selection in
|
|
293
|
+
* the Advanced init prompt, or when --reset was passed (which
|
|
294
|
+
* forces viewMode back to 'default' and sets explicit=true so
|
|
295
|
+
* that 'default' wins over any externally-set value).
|
|
296
|
+
*
|
|
297
|
+
* Rules:
|
|
298
|
+
* 1. explicit ⇒ selected wins (user intent is unambiguous, even 'default')
|
|
299
|
+
* 2. non-default current ⇒ current wins (preserve externally-set mode, e.g. /focus)
|
|
300
|
+
* 3. else ⇒ selected
|
|
301
|
+
*/
|
|
302
|
+
export function resolveFinalViewMode(current, selected, explicit) {
|
|
303
|
+
if (explicit)
|
|
304
|
+
return selected;
|
|
305
|
+
if (current !== undefined && current !== 'default')
|
|
306
|
+
return current;
|
|
307
|
+
return selected;
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=flags.js.map
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
/**
|
|
3
|
+
* @file fs-atomic.ts
|
|
4
|
+
*
|
|
5
|
+
* D34: Canonical atomic-write helper for the TypeScript CLI surface.
|
|
6
|
+
*
|
|
7
|
+
* Call sites: used by the CLI's exclusive-write call sites (migrations, init, post-install,
|
|
8
|
+
* uninstall, security, ambient, memory, HUD, observation I/O).
|
|
9
|
+
* The CJS counterpart (`writeExclusive` in `src/assets/scripts/hooks/json-helper.cjs` and
|
|
10
|
+
* `src/assets/scripts/hooks/decisions-usage-scan.cjs`) intentionally remains a separate
|
|
11
|
+
* implementation — same semantics, different module system. Any change to the
|
|
12
|
+
* retry logic here MUST be mirrored in both CJS files.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Atomically write `filePath` by writing to a sibling `.tmp` then renaming.
|
|
16
|
+
*
|
|
17
|
+
* Uses `{ flag: 'wx' }` (O_EXCL | O_WRONLY) so the kernel rejects the open if
|
|
18
|
+
* a file — or a symlink an attacker placed there between our decision to write
|
|
19
|
+
* and the actual open() call (TOCTOU) — already exists at the `.tmp` path.
|
|
20
|
+
*
|
|
21
|
+
* On EEXIST (stale `.tmp` from a prior crash, or adversarially-placed file) we
|
|
22
|
+
* unlink and retry once. The unlink is wrapped in its own try/catch so that a
|
|
23
|
+
* concurrent writer that already removed the stale file between our EEXIST
|
|
24
|
+
* check and our unlink does not cause an unexpected throw — this matches the
|
|
25
|
+
* race-tolerant pattern in the CJS `writeExclusive` implementations.
|
|
26
|
+
*
|
|
27
|
+
* The final `fs.rename` is a single POSIX atomic operation — readers either see
|
|
28
|
+
* the old content or the new content, never a partial write.
|
|
29
|
+
*
|
|
30
|
+
* @param filePath - Absolute path to the target file.
|
|
31
|
+
* @param data - UTF-8 encoded content to write.
|
|
32
|
+
*/
|
|
33
|
+
export async function writeFileAtomicExclusive(filePath, data) {
|
|
34
|
+
// PID-scope the tmp name so concurrent writers from different processes
|
|
35
|
+
// (e.g., two Claude Code sessions) never collide on the same .tmp path.
|
|
36
|
+
// mirrors proxy-log.ts rotation at src/core/proxy-log.ts which PID-scopes
|
|
37
|
+
// for the same reason. avoids PF-011.
|
|
38
|
+
const tmp = `${filePath}.tmp.${process.pid}`;
|
|
39
|
+
try {
|
|
40
|
+
await fs.writeFile(tmp, data, { encoding: 'utf-8', flag: 'wx' });
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
if (err.code !== 'EEXIST')
|
|
44
|
+
throw err;
|
|
45
|
+
// Stale or adversarially-placed .tmp — unlink and retry once.
|
|
46
|
+
// Race-tolerant: if a concurrent writer already removed the file,
|
|
47
|
+
// the unlinkSync in the CJS counterpart silently ignores ENOENT here too.
|
|
48
|
+
try {
|
|
49
|
+
await fs.unlink(tmp);
|
|
50
|
+
}
|
|
51
|
+
catch { /* race — already removed */ }
|
|
52
|
+
await fs.writeFile(tmp, data, { encoding: 'utf-8', flag: 'wx' });
|
|
53
|
+
}
|
|
54
|
+
// Preserve the target's permission mode across the atomic replace.
|
|
55
|
+
// A user who hardened the target (e.g. settings.json → 0600 to protect
|
|
56
|
+
// ANTHROPIC_API_KEY) must not have it silently widened to umask default
|
|
57
|
+
// (~0644) on every proxy enable/disable or post-install rewrite.
|
|
58
|
+
//
|
|
59
|
+
// Non-fatal path: if stat fails (ENOENT → fresh file, or any other I/O
|
|
60
|
+
// error), skip chmod and keep the umask default — the write must still
|
|
61
|
+
// complete correctly (avoids PF-009 failure-isolation principle).
|
|
62
|
+
try {
|
|
63
|
+
const { mode } = await fs.stat(filePath);
|
|
64
|
+
// mode includes file-type bits; mask to permission bits only for chmod.
|
|
65
|
+
await fs.chmod(tmp, mode & 0o777);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Fresh write (ENOENT) or stat/chmod failure — use umask default.
|
|
69
|
+
// Intentionally non-fatal: mode preservation is best-effort; the write
|
|
70
|
+
// itself must never be corrupted by a chmod error.
|
|
71
|
+
}
|
|
72
|
+
await fs.rename(tmp, filePath);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=fs-atomic.js.map
|
package/dist/core/git.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { exec } from 'child_process';
|
|
2
|
+
import { promisify } from 'util';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
const execAsync = promisify(exec);
|
|
5
|
+
/**
|
|
6
|
+
* Canonical trunk branch names used by the HUD to determine whether a branch
|
|
7
|
+
* should compare against origin/<branch> rather than the repo's default branch.
|
|
8
|
+
*
|
|
9
|
+
* Keep in exact sync with the Protected Branches (Canonical List) section in
|
|
10
|
+
* src/assets/skills/worktree-support/SKILL.md. Both lists must be updated together.
|
|
11
|
+
*/
|
|
12
|
+
export const TRUNK_BRANCHES = [
|
|
13
|
+
'main', 'master', 'develop', 'integration', 'trunk', 'staging', 'production',
|
|
14
|
+
];
|
|
15
|
+
export const TRUNK_BRANCH_PREFIXES = ['release/'];
|
|
16
|
+
/**
|
|
17
|
+
* Returns true when `branch` is a canonical trunk branch — i.e., one of the
|
|
18
|
+
* TRUNK_BRANCHES literals or a branch whose name starts with a TRUNK_BRANCH_PREFIXES
|
|
19
|
+
* prefix (e.g. `release/1.2`).
|
|
20
|
+
*/
|
|
21
|
+
export function isTrunkBranch(branch) {
|
|
22
|
+
if (TRUNK_BRANCHES.includes(branch))
|
|
23
|
+
return true;
|
|
24
|
+
return TRUNK_BRANCH_PREFIXES.some(p => branch.startsWith(p));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get git repository root directory (async, non-blocking)
|
|
28
|
+
* Returns null if not in a git repository
|
|
29
|
+
*
|
|
30
|
+
* Security: Validates output to prevent command injection
|
|
31
|
+
* - Rejects paths with injection characters (newlines, semicolons, shell operators)
|
|
32
|
+
* - Ensures path is absolute
|
|
33
|
+
* - Resolves path canonically
|
|
34
|
+
*
|
|
35
|
+
* @param cwd - Directory to resolve the git root from. Defaults to process.cwd().
|
|
36
|
+
* Callers that already carry an explicit working directory must pass it, otherwise
|
|
37
|
+
* they resolve half their paths from the injected dir and half from the process dir.
|
|
38
|
+
*/
|
|
39
|
+
export async function getGitRoot(cwd = process.cwd()) {
|
|
40
|
+
try {
|
|
41
|
+
const { stdout } = await execAsync('git rev-parse --show-toplevel', {
|
|
42
|
+
cwd,
|
|
43
|
+
encoding: 'utf-8'
|
|
44
|
+
});
|
|
45
|
+
const gitRootRaw = stdout.trim();
|
|
46
|
+
// Validate git root path (security: prevent injection)
|
|
47
|
+
if (!gitRootRaw || gitRootRaw.includes('\n') || gitRootRaw.includes(';') || gitRootRaw.includes('&&')) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
// Validate it's an absolute path
|
|
51
|
+
const gitRoot = path.resolve(gitRootRaw);
|
|
52
|
+
if (!path.isAbsolute(gitRoot)) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
return gitRoot;
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=git.js.map
|