devflow-kit 1.8.3 → 2.0.1
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 +182 -7
- 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 +14 -4
- 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,585 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* devflow agents — Manage per-agent model/effort assignments.
|
|
3
|
+
*
|
|
4
|
+
* applies ADR-013: CLI-layer module; core logic in src/core/agent-models.ts.
|
|
5
|
+
* avoids PF-014: never process.exit() inside a finally-guarded scope (terminal.ts
|
|
6
|
+
* handles cleanup in Promise resolve, not process.exit).
|
|
7
|
+
*
|
|
8
|
+
* Branding note: "subswitch" must NEVER appear in user-visible strings.
|
|
9
|
+
* User-facing vocabulary: "external model routing" / "Devflow proxy" /
|
|
10
|
+
* "GPT models via your OpenAI/Codex subscription".
|
|
11
|
+
*
|
|
12
|
+
* Subcommands:
|
|
13
|
+
* devflow agents → interactive TUI (requires TTY)
|
|
14
|
+
* devflow agents --list → tabular list (safe in non-TTY)
|
|
15
|
+
* devflow agents --set <agent> --model <m> --effort <e>
|
|
16
|
+
* devflow agents --reset [--yes]
|
|
17
|
+
*/
|
|
18
|
+
import { Command } from 'commander';
|
|
19
|
+
import * as path from 'path';
|
|
20
|
+
import * as p from '@clack/prompts';
|
|
21
|
+
import color from 'picocolors';
|
|
22
|
+
import { EFFORT_LEVELS, LEGACY_AGENT_KEYS, readAgentMapping, saveAgentMapping, reapplyAgentMapping, loadShippedDefaults, readInstalledAgentNames, } from '../../core/agent-models.js';
|
|
23
|
+
import { CLAUDE_MODEL_ALIASES, isDormantExternalModel, } from '../../core/external-models.js';
|
|
24
|
+
import { classifyAgentState, AGENT_STATE_LABELS, } from '../../core/agent-state.js';
|
|
25
|
+
import { isValidModelName } from '../../core/agent-frontmatter.js';
|
|
26
|
+
import { isProxyEnabled } from '../../core/proxy-state.js';
|
|
27
|
+
import { getAllAgentNames } from '../../core/plugins.js';
|
|
28
|
+
import { getClaudeDirectory, getDevFlowDirectory, } from '../../targets/claude-code/claude-paths.js';
|
|
29
|
+
import { buildRow, buildModelCycle, buildPickerNameMap, computeViewportHeight, isDirtyModel, isDirtyEffort, persistedModelFor, persistedEffortFor, } from '../agents-view/index.js';
|
|
30
|
+
import { stripAnsi } from '../../hud/colors.js';
|
|
31
|
+
import { discoverExternalModels, getExternalModelsCached, } from '../../core/model-discovery.js';
|
|
32
|
+
import { modelCacheDir } from '../../core/cache.js';
|
|
33
|
+
function Ok(value) {
|
|
34
|
+
return { ok: true, value };
|
|
35
|
+
}
|
|
36
|
+
function Err(error) {
|
|
37
|
+
return { ok: false, error };
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Validate --set arguments against the given catalog.
|
|
41
|
+
*
|
|
42
|
+
* When catalog is known (live cache hit): reject models absent from
|
|
43
|
+
* 'default' ∪ CLAUDE_MODEL_ALIASES ∪ catalog.selectableNames.
|
|
44
|
+
*
|
|
45
|
+
* When catalog is unknown ({known:false}, cache miss): accept any model name —
|
|
46
|
+
* the existing dormancy warning at the call site fires for non-Claude names.
|
|
47
|
+
* This preserves the configure-first-then-enable provisioning flow and keeps
|
|
48
|
+
* `--set` at zero subprocess cost (AC-P9: cache-only, 0 spawns).
|
|
49
|
+
*
|
|
50
|
+
* Returns Err when:
|
|
51
|
+
* - neither model nor effort is provided
|
|
52
|
+
* - model is unknown AND catalog is known
|
|
53
|
+
* - effort is unknown (not in EFFORT_LEVELS ∪ 'default')
|
|
54
|
+
*/
|
|
55
|
+
export function validateSetArgs(args, catalog = { known: false }) {
|
|
56
|
+
const { model, effort } = args;
|
|
57
|
+
if (model === undefined && effort === undefined) {
|
|
58
|
+
return Err('Specify at least one of --model or --effort');
|
|
59
|
+
}
|
|
60
|
+
if (model !== undefined) {
|
|
61
|
+
// Charset gate: applied at every trust boundary regardless of catalog state.
|
|
62
|
+
// Rejects injection payloads (newlines, YAML metacharacters) before they can
|
|
63
|
+
// propagate to agent-models.json or agent frontmatter. avoids PF-017: allowlist
|
|
64
|
+
// what the callee actually consumes rather than denylist individual bad chars.
|
|
65
|
+
if (!isValidModelName(model)) {
|
|
66
|
+
return Err(`Invalid model name "${model}". Model names must start with an alphanumeric character ` +
|
|
67
|
+
`and contain only alphanumeric, dot, underscore, or hyphen characters (max 64 chars).`);
|
|
68
|
+
}
|
|
69
|
+
if (catalog.known) {
|
|
70
|
+
// Full validation against the discovered catalog.
|
|
71
|
+
const valid = ['default', ...CLAUDE_MODEL_ALIASES, ...catalog.selectableNames];
|
|
72
|
+
if (!valid.includes(model)) {
|
|
73
|
+
return Err(`Unknown model "${model}". Valid: ${valid.join(', ')}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// else: catalog unknown (cache miss) → charset-valid name accepted; dormancy
|
|
77
|
+
// warning fires at agents.ts call site if the proxy is off.
|
|
78
|
+
}
|
|
79
|
+
if (effort !== undefined) {
|
|
80
|
+
const valid = ['default', ...EFFORT_LEVELS];
|
|
81
|
+
if (!valid.includes(effort)) {
|
|
82
|
+
return Err(`Unknown effort "${effort}". Valid: ${valid.join(', ')}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return Ok(args);
|
|
86
|
+
}
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
// Pure helper: applySetMapping
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
/**
|
|
91
|
+
* Return a new AgentMappingFile with the given model/effort applied to agentName.
|
|
92
|
+
* 'default' clears the respective key.
|
|
93
|
+
* Does not mutate the input mapping.
|
|
94
|
+
*/
|
|
95
|
+
export function applySetMapping(mapping, agentName, args) {
|
|
96
|
+
const existing = { ...mapping.agents[agentName] };
|
|
97
|
+
if (args.model !== undefined) {
|
|
98
|
+
if (args.model === 'default') {
|
|
99
|
+
delete existing.model;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
existing.model = args.model;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
if (args.effort !== undefined) {
|
|
106
|
+
if (args.effort === 'default') {
|
|
107
|
+
delete existing.effort;
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// Sound narrowing: validateSetArgs already confirmed args.effort is a valid
|
|
111
|
+
// EffortLevel before this function is called. SetArgs.effort is string to keep
|
|
112
|
+
// the CLI entry type permissive; the assertion here is not a compensating cast.
|
|
113
|
+
existing.effort = args.effort;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
version: 1,
|
|
118
|
+
agents: {
|
|
119
|
+
...mapping.agents,
|
|
120
|
+
[agentName]: existing,
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Build list row data for each agent.
|
|
126
|
+
* Uses readInstalledAgentNames for a single readdir (Foundation B).
|
|
127
|
+
*/
|
|
128
|
+
export async function buildListRows(input) {
|
|
129
|
+
const { agentNames, mapping, installDir, shippedDefaults, proxyEnabled } = input;
|
|
130
|
+
// Foundation B: one readdir replaces N fs.access calls.
|
|
131
|
+
const installedNames = await readInstalledAgentNames(installDir);
|
|
132
|
+
const rows = agentNames.map((name) => {
|
|
133
|
+
const entry = mapping.agents[name];
|
|
134
|
+
const configured = entry?.model ?? 'default';
|
|
135
|
+
const effort = entry?.effort ?? 'default';
|
|
136
|
+
const defaultModel = shippedDefaults[name] ?? 'unknown';
|
|
137
|
+
const installed = installedNames.has(name);
|
|
138
|
+
// inRegistry is always true here — agentNames comes from the registry.
|
|
139
|
+
const state = classifyAgentState({ configured, proxyEnabled, installed, inRegistry: true });
|
|
140
|
+
return { name, defaultModel, configured, effort, state };
|
|
141
|
+
});
|
|
142
|
+
return rows;
|
|
143
|
+
}
|
|
144
|
+
// ---------------------------------------------------------------------------
|
|
145
|
+
// --list output formatting
|
|
146
|
+
// ---------------------------------------------------------------------------
|
|
147
|
+
export function formatListOutput(rows, proxyEnabled) {
|
|
148
|
+
const lines = [];
|
|
149
|
+
const AGENT_W = 20;
|
|
150
|
+
const DEFAULT_W = 10;
|
|
151
|
+
const CONFIGURED_W = 16;
|
|
152
|
+
const EFFORT_W = 12;
|
|
153
|
+
// Header
|
|
154
|
+
lines.push([
|
|
155
|
+
color.gray('AGENT'.padEnd(AGENT_W)),
|
|
156
|
+
color.gray('DEFAULT'.padEnd(DEFAULT_W)),
|
|
157
|
+
color.gray('CONFIGURED'.padEnd(CONFIGURED_W)),
|
|
158
|
+
color.gray('EFFORT'.padEnd(EFFORT_W)),
|
|
159
|
+
color.gray('STATE'),
|
|
160
|
+
].join(' '));
|
|
161
|
+
// Rows
|
|
162
|
+
for (const row of rows) {
|
|
163
|
+
let stateStr;
|
|
164
|
+
switch (row.state) {
|
|
165
|
+
case 'active':
|
|
166
|
+
stateStr = color.green(AGENT_STATE_LABELS['active']);
|
|
167
|
+
break;
|
|
168
|
+
case 'saved-inactive':
|
|
169
|
+
// Compose the report-surface detail suffix for --list only.
|
|
170
|
+
// The TUI STATE column stays bare 'saved-inactive' (width math assumes 14).
|
|
171
|
+
stateStr = color.yellow(AGENT_STATE_LABELS['saved-inactive'] + ' (proxy off)');
|
|
172
|
+
break;
|
|
173
|
+
case 'not-installed':
|
|
174
|
+
stateStr = color.dim(AGENT_STATE_LABELS['not-installed']);
|
|
175
|
+
break;
|
|
176
|
+
case 'unknown':
|
|
177
|
+
stateStr = color.dim(AGENT_STATE_LABELS['unknown']);
|
|
178
|
+
break;
|
|
179
|
+
default: {
|
|
180
|
+
const _ = row.state;
|
|
181
|
+
void _;
|
|
182
|
+
stateStr = '';
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
// Strip escape sequences from all user-derived fields before column
|
|
186
|
+
// arithmetic and terminal output to prevent injection via model IDs.
|
|
187
|
+
lines.push([
|
|
188
|
+
stripAnsi(row.name).padEnd(AGENT_W).slice(0, AGENT_W),
|
|
189
|
+
stripAnsi(row.defaultModel).padEnd(DEFAULT_W).slice(0, DEFAULT_W),
|
|
190
|
+
stripAnsi(row.configured).padEnd(CONFIGURED_W).slice(0, CONFIGURED_W),
|
|
191
|
+
stripAnsi(row.effort).padEnd(EFFORT_W).slice(0, EFFORT_W),
|
|
192
|
+
stateStr,
|
|
193
|
+
].join(' '));
|
|
194
|
+
}
|
|
195
|
+
const installed = rows.filter(r => r.state !== 'not-installed').length;
|
|
196
|
+
const configured = rows.filter(r => r.configured !== 'default' || r.effort !== 'default').length;
|
|
197
|
+
const proxyLabel = proxyEnabled ? color.green('enabled') : color.yellow('disabled');
|
|
198
|
+
lines.push('');
|
|
199
|
+
lines.push(`${installed}/${rows.length} installed · ${configured} configured · proxy: ${proxyLabel}`);
|
|
200
|
+
return lines.join('\n');
|
|
201
|
+
}
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
// Catalog source selector
|
|
204
|
+
// ---------------------------------------------------------------------------
|
|
205
|
+
/**
|
|
206
|
+
* Return the synchronous model catalog for the interactive TUI.
|
|
207
|
+
*
|
|
208
|
+
* Proxy-off path: cache-only, zero spawns (getExternalModelsCached).
|
|
209
|
+
* This is the same source as --set, preserving the
|
|
210
|
+
* configure-first-then-enable flow for dormant GPT mappings.
|
|
211
|
+
* Proxy-on path: returns {known:false}; the caller starts async discovery
|
|
212
|
+
* via discoverExternalModels so the spinner can overlap TUI init.
|
|
213
|
+
*
|
|
214
|
+
* Exported as a testable seam: allows tests to assert that the proxy-off
|
|
215
|
+
* path reads from the cache rather than returning a hard-coded {known:false}.
|
|
216
|
+
*/
|
|
217
|
+
export function selectCatalog(proxyEnabled, cacheDir) {
|
|
218
|
+
if (proxyEnabled)
|
|
219
|
+
return { known: false };
|
|
220
|
+
return getExternalModelsCached(cacheDir);
|
|
221
|
+
}
|
|
222
|
+
// ---------------------------------------------------------------------------
|
|
223
|
+
// TUI state builder
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
/**
|
|
226
|
+
* Build the initial AgentsViewState for the interactive TUI.
|
|
227
|
+
*
|
|
228
|
+
* Builds modelCycle ONCE from the catalog and stores it in state.
|
|
229
|
+
* The pure reducer reads state.modelCycle directly — never reallocates per
|
|
230
|
+
* keypress (AC-P6).
|
|
231
|
+
*/
|
|
232
|
+
async function buildTuiState(agentNames, mapping, shippedDefaults, proxyEnabled, catalog, installDir) {
|
|
233
|
+
// Build the cycle and picker-name map once — shared across all rows and all keypresses.
|
|
234
|
+
const modelCycle = buildModelCycle(catalog);
|
|
235
|
+
const pickerNameMap = buildPickerNameMap(catalog);
|
|
236
|
+
// Foundation B: one readdir for install state of all agents.
|
|
237
|
+
const installedNames = await readInstalledAgentNames(installDir);
|
|
238
|
+
// Registry rows (in sorted order)
|
|
239
|
+
const registrySet = new Set(agentNames);
|
|
240
|
+
const rows = agentNames.map(name => {
|
|
241
|
+
const entry = mapping.agents[name];
|
|
242
|
+
return buildRow({
|
|
243
|
+
name,
|
|
244
|
+
shippedDefault: shippedDefaults[name] ?? 'unknown',
|
|
245
|
+
savedModel: entry?.model,
|
|
246
|
+
savedEffort: entry?.effort,
|
|
247
|
+
proxyEnabled,
|
|
248
|
+
modelCycle,
|
|
249
|
+
pickerNameMap,
|
|
250
|
+
installed: installedNames.has(name),
|
|
251
|
+
inRegistry: true,
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
// Orphan rows: keys in agent-models.json not present in the registry.
|
|
255
|
+
// Appended at the end so they are visually separated from known agents.
|
|
256
|
+
for (const orphanKey of Object.keys(mapping.agents)) {
|
|
257
|
+
if (registrySet.has(orphanKey))
|
|
258
|
+
continue;
|
|
259
|
+
const entry = mapping.agents[orphanKey];
|
|
260
|
+
rows.push(buildRow({
|
|
261
|
+
name: orphanKey,
|
|
262
|
+
shippedDefault: 'unknown',
|
|
263
|
+
savedModel: entry?.model,
|
|
264
|
+
savedEffort: entry?.effort,
|
|
265
|
+
proxyEnabled,
|
|
266
|
+
modelCycle,
|
|
267
|
+
pickerNameMap,
|
|
268
|
+
installed: installedNames.has(orphanKey),
|
|
269
|
+
inRegistry: false,
|
|
270
|
+
}));
|
|
271
|
+
}
|
|
272
|
+
return {
|
|
273
|
+
rows,
|
|
274
|
+
cursor: 0,
|
|
275
|
+
activeField: 'model',
|
|
276
|
+
viewportOffset: 0,
|
|
277
|
+
viewportHeight: computeViewportHeight(process.stdout.rows ?? 24),
|
|
278
|
+
proxyEnabled,
|
|
279
|
+
modelCycle,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
// ---------------------------------------------------------------------------
|
|
283
|
+
// mergeTuiRowsIntoMapping — pure helper (Fix 2)
|
|
284
|
+
// ---------------------------------------------------------------------------
|
|
285
|
+
/**
|
|
286
|
+
* Merge dirty TUI rows back into the original mapping.
|
|
287
|
+
*
|
|
288
|
+
* Only rows with changed fields update the mapping — untouched rows (including
|
|
289
|
+
* dormant GPT entries) are preserved byte-identical. This is the "inertness"
|
|
290
|
+
* guarantee of Fix 2: a row that was never edited produces no write.
|
|
291
|
+
*
|
|
292
|
+
* Pure function — no I/O, no side effects.
|
|
293
|
+
*/
|
|
294
|
+
export function mergeTuiRowsIntoMapping(rows, originalMapping) {
|
|
295
|
+
const newAgents = { ...originalMapping.agents };
|
|
296
|
+
for (const row of rows) {
|
|
297
|
+
const modelDirty = isDirtyModel(row);
|
|
298
|
+
const effortDirty = isDirtyEffort(row);
|
|
299
|
+
if (!modelDirty && !effortDirty)
|
|
300
|
+
continue;
|
|
301
|
+
const entry = { ...newAgents[row.name] };
|
|
302
|
+
if (modelDirty) {
|
|
303
|
+
const persistedModel = persistedModelFor(row);
|
|
304
|
+
if (persistedModel === 'default') {
|
|
305
|
+
delete entry.model;
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
entry.model = persistedModel;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
if (effortDirty) {
|
|
312
|
+
const persistedEffort = persistedEffortFor(row);
|
|
313
|
+
if (persistedEffort === 'default') {
|
|
314
|
+
delete entry.effort;
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
entry.effort = persistedEffort;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
// Remove empty entries (no model, no effort → no deviation from defaults)
|
|
321
|
+
if (Object.keys(entry).length === 0) {
|
|
322
|
+
delete newAgents[row.name];
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
newAgents[row.name] = entry;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
return { version: 1, agents: newAgents };
|
|
329
|
+
}
|
|
330
|
+
// ---------------------------------------------------------------------------
|
|
331
|
+
// Apply TUI save result
|
|
332
|
+
// ---------------------------------------------------------------------------
|
|
333
|
+
async function applyTuiSave(tuiState, originalMapping, devflowDir, installDir, proxyEnabled) {
|
|
334
|
+
const newMapping = mergeTuiRowsIntoMapping(tuiState.rows, originalMapping);
|
|
335
|
+
const persistResult = await saveAgentMapping(devflowDir, newMapping);
|
|
336
|
+
if (!persistResult.ok) {
|
|
337
|
+
return Err(persistResult.error);
|
|
338
|
+
}
|
|
339
|
+
const reapplyResult = await reapplyAgentMapping({
|
|
340
|
+
installDir,
|
|
341
|
+
devflowDir,
|
|
342
|
+
proxyEnabled,
|
|
343
|
+
});
|
|
344
|
+
return Ok({
|
|
345
|
+
updated: reapplyResult.updated.length,
|
|
346
|
+
unchanged: reapplyResult.unchanged.length,
|
|
347
|
+
warnings: reapplyResult.warnings,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
export const agentsCommand = new Command('agents')
|
|
351
|
+
.description('Manage per-agent model/effort assignments for external model routing')
|
|
352
|
+
.option('--list', 'List all agents with their current configuration')
|
|
353
|
+
.option('--set <agent>', 'Set model/effort for a specific agent')
|
|
354
|
+
.option('--model <model>', 'Model to assign (use with --set)')
|
|
355
|
+
.option('--effort <level>', 'Effort level to assign (use with --set)')
|
|
356
|
+
.option('--reset', 'Clear all agent customisations and restore defaults')
|
|
357
|
+
.option('--yes', 'Skip confirmation prompt (use with --reset)')
|
|
358
|
+
.action(async (options) => {
|
|
359
|
+
const claudeDir = getClaudeDirectory();
|
|
360
|
+
const devflowDir = getDevFlowDirectory();
|
|
361
|
+
const installDir = path.join(claudeDir, 'agents', 'devflow');
|
|
362
|
+
// Cache directory for model discovery — authoritative path from cache.ts (avoids PF-013).
|
|
363
|
+
const cacheDir = modelCacheDir(devflowDir);
|
|
364
|
+
// Log path mirrors proxy.ts for unified proxy diagnostics.
|
|
365
|
+
const logPath = path.join(devflowDir, 'logs', 'proxy.log');
|
|
366
|
+
const mappingResult = await readAgentMapping(devflowDir, {
|
|
367
|
+
onWarning: (msg) => p.log.warn(msg),
|
|
368
|
+
});
|
|
369
|
+
if (!mappingResult.ok) {
|
|
370
|
+
p.log.error(`Failed to read agent mapping: ${mappingResult.error}`);
|
|
371
|
+
process.exitCode = 1;
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
const mapping = mappingResult.value;
|
|
375
|
+
const proxyEnabled = await isProxyEnabled(devflowDir);
|
|
376
|
+
const shippedDefaults = await loadShippedDefaults();
|
|
377
|
+
// ── --list ──────────────────────────────────────────────────────────────
|
|
378
|
+
if (options.list) {
|
|
379
|
+
const agentNames = getAllAgentNames().sort();
|
|
380
|
+
const rows = await buildListRows({
|
|
381
|
+
agentNames,
|
|
382
|
+
mapping,
|
|
383
|
+
installDir,
|
|
384
|
+
shippedDefaults,
|
|
385
|
+
proxyEnabled,
|
|
386
|
+
});
|
|
387
|
+
process.stdout.write(formatListOutput(rows, proxyEnabled) + '\n');
|
|
388
|
+
return;
|
|
389
|
+
}
|
|
390
|
+
// ── --reset ─────────────────────────────────────────────────────────────
|
|
391
|
+
if (options.reset) {
|
|
392
|
+
const isInteractive = process.stdin.isTTY && process.stdout.isTTY;
|
|
393
|
+
let confirmed;
|
|
394
|
+
if (options.yes) {
|
|
395
|
+
confirmed = true;
|
|
396
|
+
}
|
|
397
|
+
else if (!isInteractive) {
|
|
398
|
+
p.log.error('Non-TTY environment: pass --yes to confirm reset without a prompt.');
|
|
399
|
+
process.exitCode = 1;
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
const answer = await p.confirm({
|
|
404
|
+
message: 'Reset all agent model/effort customisations to shipped defaults?',
|
|
405
|
+
initialValue: false,
|
|
406
|
+
});
|
|
407
|
+
if (p.isCancel(answer)) {
|
|
408
|
+
p.outro(color.dim('Cancelled.'));
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
confirmed = answer;
|
|
412
|
+
}
|
|
413
|
+
if (!confirmed) {
|
|
414
|
+
p.outro(color.dim('No changes made.'));
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
const emptyMapping = { version: 1, agents: {} };
|
|
418
|
+
const saveResult = await saveAgentMapping(devflowDir, emptyMapping);
|
|
419
|
+
if (!saveResult.ok) {
|
|
420
|
+
p.log.error(`Failed to save mapping: ${saveResult.error}`);
|
|
421
|
+
process.exitCode = 1;
|
|
422
|
+
return;
|
|
423
|
+
}
|
|
424
|
+
const reapplyResult = await reapplyAgentMapping({
|
|
425
|
+
installDir,
|
|
426
|
+
devflowDir,
|
|
427
|
+
proxyEnabled,
|
|
428
|
+
});
|
|
429
|
+
for (const warn of reapplyResult.warnings) {
|
|
430
|
+
p.log.warn(warn);
|
|
431
|
+
}
|
|
432
|
+
p.outro(`Reset complete. Updated ${color.green(String(reapplyResult.updated.length))} agent${reapplyResult.updated.length !== 1 ? 's' : ''}.`);
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
// ── --set ────────────────────────────────────────────────────────────────
|
|
436
|
+
if (options.set) {
|
|
437
|
+
// Transparently rewrite legacy agent names to their canonical counterparts,
|
|
438
|
+
// mirroring how parsePluginSelection handles legacy plugin names.
|
|
439
|
+
let agentName = options.set;
|
|
440
|
+
if (Object.hasOwn(LEGACY_AGENT_KEYS, agentName)) {
|
|
441
|
+
const canonical = LEGACY_AGENT_KEYS[agentName];
|
|
442
|
+
p.log.info(`Agent '${agentName}' has been renamed to '${canonical}' — using canonical name.`);
|
|
443
|
+
agentName = canonical;
|
|
444
|
+
}
|
|
445
|
+
// Validate agent name
|
|
446
|
+
const knownAgents = getAllAgentNames();
|
|
447
|
+
const knownMapping = Object.keys(mapping.agents);
|
|
448
|
+
const allKnown = new Set([...knownAgents, ...knownMapping]);
|
|
449
|
+
if (!allKnown.has(agentName)) {
|
|
450
|
+
p.log.error(`Unknown agent "${agentName}". Valid: ${[...allKnown].sort().join(', ')}`);
|
|
451
|
+
process.exitCode = 1;
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
// Cache-only discovery — 0 spawns (AC-P9). On cache miss, catalog is
|
|
455
|
+
// {known:false} and validateSetArgs accepts any non-Claude name (the
|
|
456
|
+
// dormancy warning below fires if needed). This preserves the
|
|
457
|
+
// configure-first-then-enable provisioning flow.
|
|
458
|
+
const setCatalog = getExternalModelsCached(cacheDir);
|
|
459
|
+
const validation = validateSetArgs({ model: options.model, effort: options.effort }, setCatalog);
|
|
460
|
+
if (!validation.ok) {
|
|
461
|
+
p.log.error(validation.error);
|
|
462
|
+
process.exitCode = 1;
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
const newMapping = applySetMapping(mapping, agentName, {
|
|
466
|
+
model: options.model,
|
|
467
|
+
effort: options.effort,
|
|
468
|
+
});
|
|
469
|
+
const saveResult = await saveAgentMapping(devflowDir, newMapping);
|
|
470
|
+
if (!saveResult.ok) {
|
|
471
|
+
p.log.error(`Failed to save mapping: ${saveResult.error}`);
|
|
472
|
+
process.exitCode = 1;
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
const reapplyResult = await reapplyAgentMapping({
|
|
476
|
+
installDir,
|
|
477
|
+
devflowDir,
|
|
478
|
+
proxyEnabled,
|
|
479
|
+
});
|
|
480
|
+
// Warn on non-Claude model while proxy off.
|
|
481
|
+
// Distinguish: catalog-known (verified dormant) vs cache-miss (unverified).
|
|
482
|
+
// On a cache miss "dormant" implies the model will work when the proxy is
|
|
483
|
+
// enabled — that is actively wrong for a typo or misremembered model ID.
|
|
484
|
+
if (isDormantExternalModel(options.model, proxyEnabled)) {
|
|
485
|
+
if (setCatalog.known) {
|
|
486
|
+
p.log.warn(`GPT model saved — inactive until you run ${color.bold('devflow proxy --enable')}`);
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
// Cache miss: model name was not verified against the live catalog.
|
|
490
|
+
p.log.warn(`Model saved but not yet verified against the external catalog (cache cold or proxy off). ` +
|
|
491
|
+
`Run ${color.bold('devflow proxy --enable')} then ` +
|
|
492
|
+
`${color.bold('devflow agents --list')} to confirm the model is recognised.`);
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
for (const warn of reapplyResult.warnings) {
|
|
496
|
+
p.log.warn(warn);
|
|
497
|
+
}
|
|
498
|
+
const updatedCount = reapplyResult.updated.length;
|
|
499
|
+
const unchangedCount = reapplyResult.unchanged.length;
|
|
500
|
+
p.outro(`Updated ${color.green(String(updatedCount))} agent${updatedCount !== 1 ? 's' : ''}, ` +
|
|
501
|
+
`${color.dim(`${unchangedCount} unchanged`)}.`);
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
// ── Bare `devflow agents` ────────────────────────────────────────────────
|
|
505
|
+
const isInteractive = process.stdin.isTTY && process.stdout.isTTY;
|
|
506
|
+
if (!isInteractive) {
|
|
507
|
+
// Non-TTY: print list and exit 1 with note
|
|
508
|
+
const agentNames = getAllAgentNames().sort();
|
|
509
|
+
const rows = await buildListRows({
|
|
510
|
+
agentNames,
|
|
511
|
+
mapping,
|
|
512
|
+
installDir,
|
|
513
|
+
shippedDefaults,
|
|
514
|
+
proxyEnabled,
|
|
515
|
+
});
|
|
516
|
+
process.stdout.write(formatListOutput(rows, proxyEnabled) + '\n');
|
|
517
|
+
process.stderr.write('Note: interactive view requires a terminal. Use --list for non-TTY output.\n');
|
|
518
|
+
process.exitCode = 1;
|
|
519
|
+
return;
|
|
520
|
+
}
|
|
521
|
+
// Interactive TUI
|
|
522
|
+
//
|
|
523
|
+
// Start discovery without awaiting — overlaps with TUI initialization work.
|
|
524
|
+
// Only in the interactive path: --list, --set, --reset never discover (AC-P4).
|
|
525
|
+
// Proxy-off: cache-only via selectCatalog (0 spawns, same source as --set).
|
|
526
|
+
// Proxy-on: live async discovery via discoverExternalModels.
|
|
527
|
+
const discoveryPromise = proxyEnabled
|
|
528
|
+
? discoverExternalModels(cacheDir, logPath)
|
|
529
|
+
: Promise.resolve(selectCatalog(false, cacheDir));
|
|
530
|
+
p.intro(color.bgCyan(color.black(' Devflow Agents ')));
|
|
531
|
+
const agentNames = getAllAgentNames().sort();
|
|
532
|
+
// Await the catalog. Show a spinner only if discovery exceeds 250 ms so the
|
|
533
|
+
// TUI never sits silently. On fast cache hits (typical) no spinner appears.
|
|
534
|
+
const DISCOVERY_SPINNER_DELAY_MS = 250;
|
|
535
|
+
let catalog;
|
|
536
|
+
// Capture the timer so we can clear it on the fast path. Without
|
|
537
|
+
// clearTimeout, a fast cache hit leaves a 250ms handle pending and keeps
|
|
538
|
+
// the event loop alive after the TUI resolves.
|
|
539
|
+
let spinnerTimer;
|
|
540
|
+
const raceOutcome = await Promise.race([
|
|
541
|
+
discoveryPromise.then(c => ({ kind: 'done', catalog: c })),
|
|
542
|
+
new Promise(r => {
|
|
543
|
+
spinnerTimer = setTimeout(() => r({ kind: 'timeout' }), DISCOVERY_SPINNER_DELAY_MS);
|
|
544
|
+
}),
|
|
545
|
+
]);
|
|
546
|
+
if (raceOutcome.kind === 'done') {
|
|
547
|
+
// Fast path: disarm the pending timer so it does not hold the event loop.
|
|
548
|
+
clearTimeout(spinnerTimer);
|
|
549
|
+
catalog = raceOutcome.catalog;
|
|
550
|
+
}
|
|
551
|
+
else {
|
|
552
|
+
// Slow path: timer has already fired; show a spinner for the remaining wait.
|
|
553
|
+
// try/finally ensures spinner.stop() runs even if discoveryPromise rejects.
|
|
554
|
+
const spinner = p.spinner();
|
|
555
|
+
spinner.start('Discovering available GPT models…');
|
|
556
|
+
try {
|
|
557
|
+
catalog = await discoveryPromise;
|
|
558
|
+
}
|
|
559
|
+
finally {
|
|
560
|
+
spinner.stop('');
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
const tuiState = await buildTuiState(agentNames, mapping, shippedDefaults, proxyEnabled, catalog, installDir);
|
|
564
|
+
// Lazy-import terminal to avoid loading readline/tty in non-TTY paths
|
|
565
|
+
const { runAgentsTui } = await import('../agents-view/terminal.js');
|
|
566
|
+
const result = await runAgentsTui(tuiState);
|
|
567
|
+
if (result.action === 'cancel') {
|
|
568
|
+
p.outro(color.dim('No changes made.'));
|
|
569
|
+
return;
|
|
570
|
+
}
|
|
571
|
+
// Save
|
|
572
|
+
const saveResult = await applyTuiSave(result.state, mapping, devflowDir, installDir, proxyEnabled);
|
|
573
|
+
if (!saveResult.ok) {
|
|
574
|
+
p.log.error(`Save failed: ${saveResult.error}`);
|
|
575
|
+
process.exitCode = 1;
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
const { updated, unchanged, warnings } = saveResult.value;
|
|
579
|
+
for (const warn of warnings) {
|
|
580
|
+
p.log.warn(warn);
|
|
581
|
+
}
|
|
582
|
+
p.outro(`Updated ${color.green(String(updated))} agent${updated !== 1 ? 's' : ''}, ` +
|
|
583
|
+
`${color.dim(`${unchanged} unchanged`)}.`);
|
|
584
|
+
});
|
|
585
|
+
//# sourceMappingURL=agents.js.map
|