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,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure keypress reducer for the devflow agents TUI.
|
|
3
|
+
*
|
|
4
|
+
* applies ADR-013: CLI-layer view module; consumes src/core/ imports only.
|
|
5
|
+
* avoids PF-014: pure functions only — no process.exit(), no I/O.
|
|
6
|
+
*
|
|
7
|
+
* Model cycle (proxy ON): default → haiku → sonnet → opus → fable →
|
|
8
|
+
* <picker names in registry order> → default
|
|
9
|
+
* Picker names: all aliases for each model; canonical id iff
|
|
10
|
+
* the model has no aliases (zero-maintenance, catalog-driven).
|
|
11
|
+
* Model cycle (proxy OFF): default → haiku → sonnet → opus → fable → default
|
|
12
|
+
* Effort cycle: default → low → medium → high → xhigh → max → default
|
|
13
|
+
*
|
|
14
|
+
* Dormancy semantics (plan D5 / Phase 1):
|
|
15
|
+
* When proxy is off and a row's saved model is a GPT model, configuredModel
|
|
16
|
+
* starts as 'default' and the saved GPT name is kept in dormantModel for
|
|
17
|
+
* display annotation and untouched-preservation on save.
|
|
18
|
+
*
|
|
19
|
+
* Off-cycle pin semantics (Phase D):
|
|
20
|
+
* When proxy is on and a row's saved model is absent from the discovered
|
|
21
|
+
* selectableNames (retired model), offCyclePin holds the saved model.
|
|
22
|
+
* The per-row effective cycle is [...modelCycle, offCyclePin], so the
|
|
23
|
+
* pin is always reachable after a full cycle without pressing 'd'.
|
|
24
|
+
*
|
|
25
|
+
* Dirty detection: current !== original (touch-then-revert → not dirty).
|
|
26
|
+
*
|
|
27
|
+
* Performance (AC-P6): modelCycle is built ONCE in buildTuiState and stored
|
|
28
|
+
* on the state — never reallocated per keypress. The reducer receives it as
|
|
29
|
+
* state.modelCycle and threads it through without reconstructing.
|
|
30
|
+
*/
|
|
31
|
+
import { EFFORT_LEVELS } from '../../core/agent-models.js';
|
|
32
|
+
import { CLAUDE_MODEL_ALIASES, isDormantExternalModel, } from '../../core/external-models.js';
|
|
33
|
+
import { classifyAgentState, } from '../../core/agent-state.js';
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Cycle builders (pure)
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
/**
|
|
38
|
+
* The picker names for a single model: all aliases when the model has any,
|
|
39
|
+
* or the canonical id when it has none. This is the single alias-selection
|
|
40
|
+
* site — both `pickerNames` (cycle builder) and `buildPickerNameMap` (id→alias
|
|
41
|
+
* normaliser) call it so the two can never drift.
|
|
42
|
+
*
|
|
43
|
+
* Module-private: callers consume the public wrappers below.
|
|
44
|
+
* Pure function, no I/O.
|
|
45
|
+
*/
|
|
46
|
+
function pickerNamesFor(model) {
|
|
47
|
+
return model.aliases.length > 0 ? model.aliases : [model.id];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Extract the picker name list from a model list.
|
|
51
|
+
*
|
|
52
|
+
* Zero-maintenance rule (Fix 1):
|
|
53
|
+
* - For each model IN REGISTRY ORDER: contribute ALL of its aliases.
|
|
54
|
+
* - Contribute the canonical ID if and only if the model has NO aliases.
|
|
55
|
+
*
|
|
56
|
+
* This means:
|
|
57
|
+
* gpt-5.6-sol [aliases: ['sol']] → 'sol'
|
|
58
|
+
* gpt-5.5 [aliases: []] → 'gpt-5.5'
|
|
59
|
+
* gpt-x [aliases: ['a','b']] → 'a', 'b'
|
|
60
|
+
*
|
|
61
|
+
* When a currently-alias-less model gains an alias in a future subswitch
|
|
62
|
+
* release, it automatically renders as that alias with no code change.
|
|
63
|
+
*
|
|
64
|
+
* NOTE: catalog.selectableNames is NOT used here — it doubles as the --set
|
|
65
|
+
* validation allowlist (includes both aliases and canonical ids). Narrowing
|
|
66
|
+
* it would reject `devflow agents --set coder --model gpt-5.6-sol`.
|
|
67
|
+
*
|
|
68
|
+
* Pure function, no I/O.
|
|
69
|
+
*/
|
|
70
|
+
export function pickerNames(models) {
|
|
71
|
+
return models.flatMap(pickerNamesFor);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Build a map from every stored identifier (alias or canonical id) to the
|
|
75
|
+
* picker name that represents it in the TUI cycle.
|
|
76
|
+
*
|
|
77
|
+
* Used by buildRow to normalize a stored canonical id to its alias on read,
|
|
78
|
+
* e.g. 'gpt-5.6-sol' → 'sol', so the value stays in-cycle and does not
|
|
79
|
+
* appear as an off-cycle pin. NEVER rewrites the value on disk — only for
|
|
80
|
+
* display.
|
|
81
|
+
*
|
|
82
|
+
* Returns an empty map when the catalog is unknown.
|
|
83
|
+
*
|
|
84
|
+
* Pure function, no I/O.
|
|
85
|
+
*/
|
|
86
|
+
export function buildPickerNameMap(catalog) {
|
|
87
|
+
if (!catalog.known)
|
|
88
|
+
return new Map();
|
|
89
|
+
const map = new Map();
|
|
90
|
+
for (const model of catalog.models) {
|
|
91
|
+
const names = pickerNamesFor(model);
|
|
92
|
+
const [representative] = names;
|
|
93
|
+
// Canonical id → first picker name (first alias if any, else canonical id)
|
|
94
|
+
map.set(model.id, representative);
|
|
95
|
+
// Each picker name → itself (identity, already a picker name)
|
|
96
|
+
for (const name of names) {
|
|
97
|
+
map.set(name, name);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
return map;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Build the model cycle from a discovered catalog.
|
|
104
|
+
* Exported so agents.ts can call it once and store the result in state.
|
|
105
|
+
*
|
|
106
|
+
* Cycle order (catalog known):
|
|
107
|
+
* default → haiku → sonnet → opus → fable →
|
|
108
|
+
* <picker names in registry order> → (wraps)
|
|
109
|
+
*
|
|
110
|
+
* Picker names are alias-only (canonical id only when no aliases exist),
|
|
111
|
+
* produced by pickerNames(). catalog.selectableNames is NOT used here —
|
|
112
|
+
* it is the --set validation allowlist, not the TUI picker subset.
|
|
113
|
+
*
|
|
114
|
+
* Cycle order (catalog unknown):
|
|
115
|
+
* default → haiku → sonnet → opus → fable → (wraps)
|
|
116
|
+
*
|
|
117
|
+
* Dormancy (proxy off + GPT model saved) does not shrink the cycle — external
|
|
118
|
+
* models remain selectable so users can inspect and change dormant mappings.
|
|
119
|
+
* The catalog itself controls what is in the cycle; see selectCatalog() in
|
|
120
|
+
* agents.ts for how the proxy-off path supplies the cache-based catalog.
|
|
121
|
+
*/
|
|
122
|
+
export function buildModelCycle(catalog) {
|
|
123
|
+
const base = ['default', ...CLAUDE_MODEL_ALIASES];
|
|
124
|
+
if (!catalog.known)
|
|
125
|
+
return base;
|
|
126
|
+
return [...base, ...pickerNames(catalog.models)];
|
|
127
|
+
}
|
|
128
|
+
const EFFORT_CYCLE = ['default', ...EFFORT_LEVELS];
|
|
129
|
+
function cycleNext(cycle, current) {
|
|
130
|
+
const idx = cycle.indexOf(current);
|
|
131
|
+
if (idx === -1)
|
|
132
|
+
return cycle[0];
|
|
133
|
+
return cycle[(idx + 1) % cycle.length];
|
|
134
|
+
}
|
|
135
|
+
function cyclePrev(cycle, current) {
|
|
136
|
+
const idx = cycle.indexOf(current);
|
|
137
|
+
if (idx === -1)
|
|
138
|
+
return cycle[cycle.length - 1];
|
|
139
|
+
return cycle[(idx - 1 + cycle.length) % cycle.length];
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* True when `model` is not present in `cycle`.
|
|
143
|
+
* Named predicate for intent visibility at every call site.
|
|
144
|
+
*/
|
|
145
|
+
export function isOffCycle(cycle, model) {
|
|
146
|
+
return !cycle.includes(model);
|
|
147
|
+
}
|
|
148
|
+
// ---------------------------------------------------------------------------
|
|
149
|
+
// Dirty helpers (pure, exported for render and tests)
|
|
150
|
+
// ---------------------------------------------------------------------------
|
|
151
|
+
export function isDirtyModel(row) {
|
|
152
|
+
// Suppress dirty when the selected model matches the saved dormant GPT model —
|
|
153
|
+
// cycling back to that value is not a change from the persisted mapping entry.
|
|
154
|
+
if (row.dormantModel !== null && row.configuredModel === row.dormantModel)
|
|
155
|
+
return false;
|
|
156
|
+
return row.configuredModel !== row.originalModel;
|
|
157
|
+
}
|
|
158
|
+
export function isDirtyEffort(row) {
|
|
159
|
+
return row.configuredEffort !== row.originalEffort;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* The model value that will be persisted to disk for this row.
|
|
163
|
+
*
|
|
164
|
+
* For a dirty row: the in-session selection (configuredModel).
|
|
165
|
+
* For an untouched dormant row: the saved GPT model (dormantModel), which
|
|
166
|
+
* preserves the mapping entry byte-identical even though configuredModel
|
|
167
|
+
* shows 'default' while the proxy is off.
|
|
168
|
+
* For all other untouched rows: configuredModel (which equals originalModel).
|
|
169
|
+
*
|
|
170
|
+
* Used by both rowState (STATE column display) and mergeTuiRowsIntoMapping
|
|
171
|
+
* (save merge) so the two surfaces share a single persisted-value predicate.
|
|
172
|
+
*/
|
|
173
|
+
export function persistedModelFor(row) {
|
|
174
|
+
return isDirtyModel(row) ? row.configuredModel : (row.dormantModel ?? row.configuredModel);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* The effort value that will be persisted to disk for this row.
|
|
178
|
+
*
|
|
179
|
+
* For a dirty row: the in-session selection (configuredEffort).
|
|
180
|
+
* For an untouched row: the original effort (originalEffort).
|
|
181
|
+
*
|
|
182
|
+
* Used by both rowState (STATE column display) and mergeTuiRowsIntoMapping
|
|
183
|
+
* (save merge) so the two surfaces share a single persisted-value predicate.
|
|
184
|
+
*/
|
|
185
|
+
export function persistedEffortFor(row) {
|
|
186
|
+
return isDirtyEffort(row) ? row.configuredEffort : row.originalEffort;
|
|
187
|
+
}
|
|
188
|
+
/** Count of rows with any dirty field (model OR effort). */
|
|
189
|
+
export function unsavedCount(rows) {
|
|
190
|
+
let count = 0;
|
|
191
|
+
for (const row of rows) {
|
|
192
|
+
if (isDirtyModel(row) || isDirtyEffort(row))
|
|
193
|
+
count++;
|
|
194
|
+
}
|
|
195
|
+
return count;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Classify the live state of a TUI row for display in the STATE column.
|
|
199
|
+
*
|
|
200
|
+
* Single source of truth — delegates to classifyAgentState, so the TUI STATE
|
|
201
|
+
* column and `--list`'s STATE column share one vocabulary and cannot drift.
|
|
202
|
+
*
|
|
203
|
+
* The classified value is the model this row WILL persist, which is what makes
|
|
204
|
+
* the dormancy marker track the KEYPRESS rather than the last save:
|
|
205
|
+
* - dirty row → configuredModel (the in-session selection)
|
|
206
|
+
* - untouched row → dormantModel when set, else configuredModel
|
|
207
|
+
*
|
|
208
|
+
* The untouched branch exists because mergeTuiRowsIntoMapping writes nothing
|
|
209
|
+
* for a clean row: its persisted value survives as-is, and for a dormant row
|
|
210
|
+
* that value lives in dormantModel (configuredModel falls back to 'default'
|
|
211
|
+
* while the proxy is off). Keying on dormantModel unconditionally would pin
|
|
212
|
+
* the marker to the pre-edit value — cycling a dormant row onto a live Claude
|
|
213
|
+
* model would keep showing 'saved-inactive' even though 'opus' is what gets
|
|
214
|
+
* written. Mirroring the merge rule keeps display and persistence in lockstep.
|
|
215
|
+
*
|
|
216
|
+
* Pure function, no I/O.
|
|
217
|
+
*/
|
|
218
|
+
export function rowState(row, proxyEnabled) {
|
|
219
|
+
return classifyAgentState({
|
|
220
|
+
configured: persistedModelFor(row),
|
|
221
|
+
proxyEnabled,
|
|
222
|
+
installed: row.installed,
|
|
223
|
+
inRegistry: row.inRegistry,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
// ---------------------------------------------------------------------------
|
|
227
|
+
// Row and field helpers (pure) — single-row update and cycle direction
|
|
228
|
+
// ---------------------------------------------------------------------------
|
|
229
|
+
/**
|
|
230
|
+
* Return a new rows array with the row at `cursor` replaced by `newRow`.
|
|
231
|
+
* All other rows are returned by reference (no unnecessary copies).
|
|
232
|
+
*/
|
|
233
|
+
function replaceRow(rows, cursor, newRow) {
|
|
234
|
+
return rows.map((r, i) => (i === cursor ? newRow : r));
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Return a new AgentRow with the named field cycled one step in the given direction.
|
|
238
|
+
*
|
|
239
|
+
* Model cycle uses the prebuilt state.modelCycle (no allocation per call for normal
|
|
240
|
+
* rows). Off-cycle pin recovery: if row.offCyclePin is non-null, the effective cycle
|
|
241
|
+
* for this row is [...modelCycle, offCyclePin], keeping the retired model reachable
|
|
242
|
+
* after a full forward+backward navigation (AC-F4).
|
|
243
|
+
*
|
|
244
|
+
* Pure: no I/O, no side effects.
|
|
245
|
+
*/
|
|
246
|
+
function cycleField(row, field, dir, modelCycle) {
|
|
247
|
+
if (field === 'model') {
|
|
248
|
+
// Build effective cycle: splice off-cycle pin at the end if present.
|
|
249
|
+
// This is the ≤ 1 array allocation case (AC-P6): only allocates when offCyclePin != null.
|
|
250
|
+
const effectiveCycle = row.offCyclePin !== null && isOffCycle(modelCycle, row.offCyclePin)
|
|
251
|
+
? [...modelCycle, row.offCyclePin]
|
|
252
|
+
: modelCycle;
|
|
253
|
+
// cycleNext/cyclePrev handle the case where configuredModel is not in effectiveCycle
|
|
254
|
+
// by falling back to cycle[0] / cycle[last]. This is correct for the off-cycle case
|
|
255
|
+
// where configuredModel IS in effectiveCycle (we splice it in above).
|
|
256
|
+
const next = dir === 'forward'
|
|
257
|
+
? cycleNext(effectiveCycle, row.configuredModel)
|
|
258
|
+
: cyclePrev(effectiveCycle, row.configuredModel);
|
|
259
|
+
return { ...row, configuredModel: next };
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
const next = dir === 'forward'
|
|
263
|
+
? cycleNext(EFFORT_CYCLE, row.configuredEffort)
|
|
264
|
+
: cyclePrev(EFFORT_CYCLE, row.configuredEffort);
|
|
265
|
+
// Sound narrowing: EFFORT_CYCLE is ['default', ...EFFORT_LEVELS], so next
|
|
266
|
+
// is always EffortLevel | 'default'. cycleNext/cyclePrev return string
|
|
267
|
+
// because their signature is intentionally generic (also used for model cycles).
|
|
268
|
+
return { ...row, configuredEffort: next };
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// ---------------------------------------------------------------------------
|
|
272
|
+
// Viewport adjustment (pure)
|
|
273
|
+
// ---------------------------------------------------------------------------
|
|
274
|
+
function adjustViewport(cursor, viewportOffset, viewportHeight, rowCount) {
|
|
275
|
+
if (viewportHeight <= 0 || rowCount === 0)
|
|
276
|
+
return 0;
|
|
277
|
+
let offset = viewportOffset;
|
|
278
|
+
if (cursor < offset)
|
|
279
|
+
offset = cursor;
|
|
280
|
+
if (cursor >= offset + viewportHeight)
|
|
281
|
+
offset = cursor - viewportHeight + 1;
|
|
282
|
+
const maxOffset = Math.max(0, rowCount - viewportHeight);
|
|
283
|
+
return Math.max(0, Math.min(offset, maxOffset));
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Build an AgentRow from initial mapping state.
|
|
287
|
+
*
|
|
288
|
+
* Handles dormancy: if savedModel is an external model and proxy is off,
|
|
289
|
+
* configuredModel starts as 'default' and dormantModel holds the saved model.
|
|
290
|
+
*
|
|
291
|
+
* Handles off-cycle pin: if proxy is on, savedModel is configured, but is
|
|
292
|
+
* absent from modelCycle (retired/unavailable model), offCyclePin is set so
|
|
293
|
+
* the model remains reachable in the per-row effective cycle.
|
|
294
|
+
*/
|
|
295
|
+
export function buildRow(input) {
|
|
296
|
+
const dormant = isDormantExternalModel(input.savedModel, input.proxyEnabled);
|
|
297
|
+
const cycle = input.modelCycle ?? [];
|
|
298
|
+
// Normalize stored canonical id to picker name (Fix 1: in-memory only, never
|
|
299
|
+
// written back to disk). E.g. 'gpt-5.6-sol' → 'sol' when pickerNameMap is known.
|
|
300
|
+
// This keeps the value in-cycle so it does not become a spurious off-cycle pin.
|
|
301
|
+
const normalizedSavedModel = input.savedModel !== undefined && input.pickerNameMap !== undefined
|
|
302
|
+
? (input.pickerNameMap.get(input.savedModel) ?? input.savedModel)
|
|
303
|
+
: input.savedModel;
|
|
304
|
+
const configuredModel = dormant ? 'default' : (normalizedSavedModel ?? 'default');
|
|
305
|
+
const configuredEffort = input.savedEffort ?? 'default';
|
|
306
|
+
// Off-cycle pin detection: proxy on, model configured but absent from cycle.
|
|
307
|
+
// Use the normalized model for cycle lookup — the saved model (pre-norm) for
|
|
308
|
+
// the pin value so the original identifier is preserved on display.
|
|
309
|
+
const offCyclePin = !dormant &&
|
|
310
|
+
normalizedSavedModel !== undefined &&
|
|
311
|
+
normalizedSavedModel !== 'default' &&
|
|
312
|
+
cycle.length > 0 &&
|
|
313
|
+
isOffCycle(cycle, normalizedSavedModel)
|
|
314
|
+
? normalizedSavedModel
|
|
315
|
+
: null;
|
|
316
|
+
return {
|
|
317
|
+
name: input.name,
|
|
318
|
+
shippedDefault: input.shippedDefault,
|
|
319
|
+
configuredModel,
|
|
320
|
+
originalModel: configuredModel,
|
|
321
|
+
configuredEffort,
|
|
322
|
+
originalEffort: configuredEffort,
|
|
323
|
+
dormantModel: dormant ? (input.savedModel ?? null) : null,
|
|
324
|
+
offCyclePin,
|
|
325
|
+
installed: input.installed,
|
|
326
|
+
inRegistry: input.inRegistry,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
// ---------------------------------------------------------------------------
|
|
330
|
+
// reduce
|
|
331
|
+
// ---------------------------------------------------------------------------
|
|
332
|
+
/**
|
|
333
|
+
* Pure keypress reducer.
|
|
334
|
+
*
|
|
335
|
+
* Recognized key strings (normalized by terminal.ts):
|
|
336
|
+
* 'up', 'down', 'left', 'right', 'k', 'j', 'tab', 'space',
|
|
337
|
+
* 'd', 'enter', 'escape', 'q', 'ctrl-c'
|
|
338
|
+
*
|
|
339
|
+
* Unknown keys → intent 'none', state unchanged (same reference).
|
|
340
|
+
*
|
|
341
|
+
* Performance: modelCycle is read from state (prebuilt, startup-constant);
|
|
342
|
+
* the modelCycle reference is threaded unchanged through every
|
|
343
|
+
* non-cycle reduce path (AC-P6: Object.is(s1.modelCycle, s2.modelCycle)).
|
|
344
|
+
*/
|
|
345
|
+
export function reduce(state, key) {
|
|
346
|
+
const { rows, cursor, activeField, viewportOffset, viewportHeight, modelCycle } = state;
|
|
347
|
+
const n = rows.length;
|
|
348
|
+
switch (key) {
|
|
349
|
+
case 'up':
|
|
350
|
+
case 'k': {
|
|
351
|
+
if (n === 0)
|
|
352
|
+
return { state, intent: 'none' };
|
|
353
|
+
const newCursor = Math.max(0, cursor - 1);
|
|
354
|
+
const newOffset = adjustViewport(newCursor, viewportOffset, viewportHeight, n);
|
|
355
|
+
if (newCursor === cursor && newOffset === viewportOffset)
|
|
356
|
+
return { state, intent: 'none' };
|
|
357
|
+
return {
|
|
358
|
+
state: { ...state, cursor: newCursor, viewportOffset: newOffset },
|
|
359
|
+
intent: 'none',
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
case 'down':
|
|
363
|
+
case 'j': {
|
|
364
|
+
if (n === 0)
|
|
365
|
+
return { state, intent: 'none' };
|
|
366
|
+
const newCursor = Math.min(n - 1, cursor + 1);
|
|
367
|
+
const newOffset = adjustViewport(newCursor, viewportOffset, viewportHeight, n);
|
|
368
|
+
if (newCursor === cursor && newOffset === viewportOffset)
|
|
369
|
+
return { state, intent: 'none' };
|
|
370
|
+
return {
|
|
371
|
+
state: { ...state, cursor: newCursor, viewportOffset: newOffset },
|
|
372
|
+
intent: 'none',
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
case 'tab': {
|
|
376
|
+
const newField = activeField === 'model' ? 'effort' : 'model';
|
|
377
|
+
return { state: { ...state, activeField: newField }, intent: 'none' };
|
|
378
|
+
}
|
|
379
|
+
case 'right':
|
|
380
|
+
case 'space': {
|
|
381
|
+
if (n === 0)
|
|
382
|
+
return { state, intent: 'none' };
|
|
383
|
+
const newRow = cycleField(rows[cursor], activeField, 'forward', modelCycle);
|
|
384
|
+
return {
|
|
385
|
+
state: { ...state, rows: replaceRow(rows, cursor, newRow) },
|
|
386
|
+
intent: 'none',
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
case 'left': {
|
|
390
|
+
if (n === 0)
|
|
391
|
+
return { state, intent: 'none' };
|
|
392
|
+
const newRow = cycleField(rows[cursor], activeField, 'backward', modelCycle);
|
|
393
|
+
return {
|
|
394
|
+
state: { ...state, rows: replaceRow(rows, cursor, newRow) },
|
|
395
|
+
intent: 'none',
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
case 'd': {
|
|
399
|
+
if (n === 0)
|
|
400
|
+
return { state, intent: 'none' };
|
|
401
|
+
const row = rows[cursor];
|
|
402
|
+
const newRow = activeField === 'model'
|
|
403
|
+
? { ...row, configuredModel: 'default' }
|
|
404
|
+
: { ...row, configuredEffort: 'default' };
|
|
405
|
+
return {
|
|
406
|
+
state: { ...state, rows: replaceRow(rows, cursor, newRow) },
|
|
407
|
+
intent: 'none',
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
case 'enter': {
|
|
411
|
+
return { state, intent: 'save' };
|
|
412
|
+
}
|
|
413
|
+
case 'escape':
|
|
414
|
+
case 'q':
|
|
415
|
+
case 'ctrl-c': {
|
|
416
|
+
return { state, intent: 'cancel' };
|
|
417
|
+
}
|
|
418
|
+
default: {
|
|
419
|
+
return { state, intent: 'none' };
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin impure shell for the devflow agents TUI.
|
|
3
|
+
*
|
|
4
|
+
* applies ADR-013: impure I/O shell in CLI layer; pure logic lives in state.ts/render.ts.
|
|
5
|
+
* avoids PF-014: all cleanup wired via Promise resolve — never process.exit() inside
|
|
6
|
+
* a finally-guarded scope. Cleanup is idempotent and runs on save, cancel,
|
|
7
|
+
* SIGINT, SIGTERM, and keypress limit exhaustion.
|
|
8
|
+
*
|
|
9
|
+
* Bounded: MAX_KEYPRESSES = 50_000 hard limit (reliability rule — every loop bounded).
|
|
10
|
+
*
|
|
11
|
+
* Returns a Promise resolving to { action: 'save'|'cancel', state } on any
|
|
12
|
+
* terminal event that terminates the TUI.
|
|
13
|
+
*/
|
|
14
|
+
import * as readline from 'readline';
|
|
15
|
+
import { reduce } from './state.js';
|
|
16
|
+
import { renderFrame, computeViewportHeight } from './render.js';
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Constants
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
/** Hard upper bound on keypress events — resolves with 'cancel' on exhaustion. */
|
|
21
|
+
export const MAX_KEYPRESSES = 50_000;
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Terminal escape sequences
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
const ESC = '\x1b';
|
|
26
|
+
const ENTER_ALT = `${ESC}[?1049h`;
|
|
27
|
+
const LEAVE_ALT = `${ESC}[?1049l`;
|
|
28
|
+
const HIDE_CURSOR = `${ESC}[?25l`;
|
|
29
|
+
const SHOW_CURSOR = `${ESC}[?25h`;
|
|
30
|
+
/** Move cursor to top-left without clearing (less flicker than full clear). */
|
|
31
|
+
const HOME = `${ESC}[H`;
|
|
32
|
+
/** Erase from cursor to end of line. */
|
|
33
|
+
const ERASE_EOL = `${ESC}[K`;
|
|
34
|
+
function normalizeKey(str, key) {
|
|
35
|
+
if (key?.ctrl && key.name === 'c')
|
|
36
|
+
return 'ctrl-c';
|
|
37
|
+
const name = key?.name ?? '';
|
|
38
|
+
switch (name) {
|
|
39
|
+
case 'up': return 'up';
|
|
40
|
+
case 'down': return 'down';
|
|
41
|
+
case 'left': return 'left';
|
|
42
|
+
case 'right': return 'right';
|
|
43
|
+
case 'tab': return 'tab';
|
|
44
|
+
case 'return': return 'enter';
|
|
45
|
+
case 'escape': return 'escape';
|
|
46
|
+
case 'space': return 'space';
|
|
47
|
+
default:
|
|
48
|
+
return str ?? name;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// Dims / viewport
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
function getDims(stdout) {
|
|
55
|
+
return {
|
|
56
|
+
rows: stdout.rows ?? 24,
|
|
57
|
+
cols: stdout.columns ?? 80,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Redraw
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
function redraw(state, stdout) {
|
|
64
|
+
const dims = getDims(stdout);
|
|
65
|
+
const lines = renderFrame(state, dims);
|
|
66
|
+
let out = HOME;
|
|
67
|
+
for (const line of lines) {
|
|
68
|
+
out += line + ERASE_EOL + '\n';
|
|
69
|
+
}
|
|
70
|
+
stdout.write(out);
|
|
71
|
+
}
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// runAgentsTui
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
/**
|
|
76
|
+
* Launch the interactive agents TUI.
|
|
77
|
+
*
|
|
78
|
+
* @param initialState - Initial state built by the agents command.
|
|
79
|
+
* @param io - Optional I/O override (defaults to process.stdin/stdout). Pass fake
|
|
80
|
+
* streams in tests to drive the TUI without a real TTY.
|
|
81
|
+
* @returns Promise resolving to { action, state } when the user saves or cancels.
|
|
82
|
+
*/
|
|
83
|
+
export async function runAgentsTui(initialState, io) {
|
|
84
|
+
// D-SEAM: default to process.stdin/stdout; callers (tests) may inject fakes.
|
|
85
|
+
const stdin = (io?.stdin ?? process.stdin);
|
|
86
|
+
const stdout = (io?.stdout ?? process.stdout);
|
|
87
|
+
// ── Enable readline keypress events ─────────────────────────────────────
|
|
88
|
+
// TuiIO.stdin is NodeJS.ReadableStream, which readline.emitKeypressEvents expects
|
|
89
|
+
// directly. PassThrough (tests) and process.stdin (production) both satisfy it.
|
|
90
|
+
readline.emitKeypressEvents(stdin);
|
|
91
|
+
// ── Enter alt-screen, hide cursor ───────────────────────────────────────
|
|
92
|
+
stdout.write(ENTER_ALT + HIDE_CURSOR);
|
|
93
|
+
// ── Raw mode ─────────────────────────────────────────────────────────────
|
|
94
|
+
if (stdin.isTTY && typeof stdin.setRawMode === 'function') {
|
|
95
|
+
stdin.setRawMode(true);
|
|
96
|
+
}
|
|
97
|
+
stdin.resume();
|
|
98
|
+
return new Promise((resolve) => {
|
|
99
|
+
let state = initialState;
|
|
100
|
+
let cleaned = false;
|
|
101
|
+
let keypressCount = 0;
|
|
102
|
+
// Initial viewport size
|
|
103
|
+
const dims = getDims(stdout);
|
|
104
|
+
state = { ...state, viewportHeight: computeViewportHeight(dims.rows) };
|
|
105
|
+
redraw(state, stdout);
|
|
106
|
+
// ── Cleanup (idempotent) ───────────────────────────────────────────────
|
|
107
|
+
function cleanup() {
|
|
108
|
+
if (cleaned)
|
|
109
|
+
return;
|
|
110
|
+
cleaned = true;
|
|
111
|
+
stdin.removeListener('keypress', onKeypress);
|
|
112
|
+
process.removeListener('SIGINT', onSigint);
|
|
113
|
+
process.removeListener('SIGTERM', onSigterm);
|
|
114
|
+
stdout.removeListener('resize', onResize);
|
|
115
|
+
if (stdin.isTTY && typeof stdin.setRawMode === 'function') {
|
|
116
|
+
try {
|
|
117
|
+
stdin.setRawMode(false);
|
|
118
|
+
}
|
|
119
|
+
catch { /* ignore */ }
|
|
120
|
+
}
|
|
121
|
+
// Pause stdin to release the ref'd TTY handle — mirrors the stdin.resume()
|
|
122
|
+
// at startup. Without this the resumed stdin keeps the event loop alive and
|
|
123
|
+
// the CLI (which has no forced process.exit) hangs after the TUI resolves.
|
|
124
|
+
stdin.pause();
|
|
125
|
+
stdout.write(LEAVE_ALT + SHOW_CURSOR);
|
|
126
|
+
}
|
|
127
|
+
function settle(result) {
|
|
128
|
+
cleanup();
|
|
129
|
+
resolve(result);
|
|
130
|
+
}
|
|
131
|
+
// ── Resize handler ─────────────────────────────────────────────────────
|
|
132
|
+
function onResize() {
|
|
133
|
+
const d = getDims(stdout);
|
|
134
|
+
state = { ...state, viewportHeight: computeViewportHeight(d.rows) };
|
|
135
|
+
redraw(state, stdout);
|
|
136
|
+
}
|
|
137
|
+
// ── Keypress handler ───────────────────────────────────────────────────
|
|
138
|
+
function onKeypress(str, key) {
|
|
139
|
+
keypressCount++;
|
|
140
|
+
if (keypressCount > MAX_KEYPRESSES) {
|
|
141
|
+
// Hard safety bound — cancel on exhaustion (avoids unbounded event loop)
|
|
142
|
+
settle({ action: 'cancel', state });
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
const normalized = normalizeKey(str, key);
|
|
146
|
+
const { state: next, intent } = reduce(state, normalized);
|
|
147
|
+
state = next;
|
|
148
|
+
switch (intent) {
|
|
149
|
+
case 'save':
|
|
150
|
+
settle({ action: 'save', state });
|
|
151
|
+
return;
|
|
152
|
+
case 'cancel':
|
|
153
|
+
settle({ action: 'cancel', state });
|
|
154
|
+
return;
|
|
155
|
+
case 'none':
|
|
156
|
+
redraw(state, stdout);
|
|
157
|
+
return;
|
|
158
|
+
default: {
|
|
159
|
+
const _ = intent;
|
|
160
|
+
void _;
|
|
161
|
+
redraw(state, stdout);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// ── Signal handlers ────────────────────────────────────────────────────
|
|
166
|
+
function onSigint() {
|
|
167
|
+
settle({ action: 'cancel', state });
|
|
168
|
+
}
|
|
169
|
+
function onSigterm() {
|
|
170
|
+
settle({ action: 'cancel', state });
|
|
171
|
+
}
|
|
172
|
+
// Register all listeners
|
|
173
|
+
stdin.on('keypress', onKeypress);
|
|
174
|
+
process.on('SIGINT', onSigint);
|
|
175
|
+
process.on('SIGTERM', onSigterm);
|
|
176
|
+
stdout.on('resize', onResize);
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=terminal.js.map
|