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,556 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent model mapping engine — schema, persistence, and convergence for the
|
|
3
|
+
* per-agent model configuration feature.
|
|
4
|
+
*
|
|
5
|
+
* applies ADR-013: pure core-layer module, no Claude Code adapter concerns.
|
|
6
|
+
* avoids PF-014: all fallible operations return Result, no process.exit().
|
|
7
|
+
*
|
|
8
|
+
* Mapping file: ~/.devflow/agent-models.json
|
|
9
|
+
* { version: 1, agents: { [name]: { model?, effort? } } }
|
|
10
|
+
* Deviations-only: omit an agent to inherit its shipped default.
|
|
11
|
+
* Unknown agent names are tolerated and preserved on save (plugin may not be installed).
|
|
12
|
+
* Invalid effort values are dropped with a warning.
|
|
13
|
+
*
|
|
14
|
+
* Dormancy semantics:
|
|
15
|
+
* A mapping entry whose model is an external GPT model (classified via
|
|
16
|
+
* isDormantExternalModel — the complement of isClaudeModelName) materializes
|
|
17
|
+
* into frontmatter ONLY when proxyEnabled=true. When the proxy is disabled,
|
|
18
|
+
* the entry stays saved but the SHIPPED DEFAULT model is applied instead.
|
|
19
|
+
* Effort is orthogonal — it ALWAYS applies regardless of proxy state.
|
|
20
|
+
*
|
|
21
|
+
* Dependency direction:
|
|
22
|
+
* core/proxy-state ← core/agent-models ← cli commands
|
|
23
|
+
* (no cycles)
|
|
24
|
+
*/
|
|
25
|
+
import { promises as fs } from 'fs';
|
|
26
|
+
import * as path from 'path';
|
|
27
|
+
import { writeFileAtomicExclusive } from './fs-atomic.js';
|
|
28
|
+
import { isDormantExternalModel } from './external-models.js';
|
|
29
|
+
import { rewriteAgentFrontmatter, readFrontmatterModel, isValidModelName } from './agent-frontmatter.js';
|
|
30
|
+
import { agentsDir } from './assets.js';
|
|
31
|
+
import { getAllAgentNames } from './plugins.js';
|
|
32
|
+
import { mdEntryName, mdFileName } from './orphan-sweep.js';
|
|
33
|
+
import { isContainedIn } from './paths.js';
|
|
34
|
+
function Ok(value) {
|
|
35
|
+
return { ok: true, value };
|
|
36
|
+
}
|
|
37
|
+
function Err(error) {
|
|
38
|
+
return { ok: false, error };
|
|
39
|
+
}
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Constants
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
/**
|
|
44
|
+
* Valid effort level identifiers.
|
|
45
|
+
* Invalid values are dropped with a warning on mapping read.
|
|
46
|
+
*/
|
|
47
|
+
export const EFFORT_LEVELS = ['low', 'medium', 'high', 'xhigh', 'max'];
|
|
48
|
+
/**
|
|
49
|
+
* Membership set typed as ReadonlySet<string> so .has() accepts a plain
|
|
50
|
+
* string argument without a cast — TypeScript's Set<T>.has() requires T, and
|
|
51
|
+
* EFFORT_LEVELS[number] is a literal union, not string (applies ADR-003).
|
|
52
|
+
*/
|
|
53
|
+
const EFFORT_LEVELS_SET = new Set(EFFORT_LEVELS);
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Key migration
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
/**
|
|
58
|
+
* Maps old agent keys (form A slugs) to their canonical replacement keys.
|
|
59
|
+
*
|
|
60
|
+
* 13 agents renamed from noun form (coder, reviewer, …) to action-verb form
|
|
61
|
+
* (code, review, …). The canonicalise-agent-keys-v1 migration in migrations.ts
|
|
62
|
+
* calls canonicaliseAgentKeys() to rewrite ~/.devflow/agent-models.json on the
|
|
63
|
+
* user's first init after upgrading.
|
|
64
|
+
*
|
|
65
|
+
* PROTOTYPE SAFETY: Object.create(null) prevents prototype-pollution.
|
|
66
|
+
* Every lookup MUST use Object.hasOwn — never key in LEGACY_AGENT_KEYS or
|
|
67
|
+
* direct bracket access. `--set constructor` would otherwise return a function
|
|
68
|
+
* that flows into path.join (the object-literal lookup on argv trap).
|
|
69
|
+
*
|
|
70
|
+
* DORMANCY: entries here are stored whether or not the key rename has been
|
|
71
|
+
* applied to the file yet. canonicaliseAgentKeys() is idempotent, so
|
|
72
|
+
* double-execution from concurrent sessions is a harmless no-op — the second
|
|
73
|
+
* run finds the file already migrated and makes zero writes.
|
|
74
|
+
*/
|
|
75
|
+
export const LEGACY_AGENT_KEYS = Object.assign(Object.create(null), {
|
|
76
|
+
// Phase 4 — agent-action-verbs rename (old slug → new slug)
|
|
77
|
+
'coder': 'code',
|
|
78
|
+
'designer': 'design',
|
|
79
|
+
'evaluator': 'evaluate',
|
|
80
|
+
'researcher': 'research',
|
|
81
|
+
'reviewer': 'review',
|
|
82
|
+
'scrutinizer': 'scrutinize',
|
|
83
|
+
'simplifier': 'simplify',
|
|
84
|
+
'skimmer': 'skim',
|
|
85
|
+
'synthesizer': 'synthesize',
|
|
86
|
+
'tester': 'test',
|
|
87
|
+
'triager': 'triage',
|
|
88
|
+
'validator': 'validate',
|
|
89
|
+
'bug-analyzer': 'diagnose',
|
|
90
|
+
});
|
|
91
|
+
/**
|
|
92
|
+
* Canonicalise agent keys in a raw agents map by applying LEGACY_AGENT_KEYS.
|
|
93
|
+
*
|
|
94
|
+
* For each old key found in the map:
|
|
95
|
+
* - If the new (canonical) key is NOT already present: rename old → new.
|
|
96
|
+
* - If the new key IS already present (collision): new wins, old dropped, one warning.
|
|
97
|
+
*
|
|
98
|
+
* Collision detection is against the ORIGINAL map so results are order-independent.
|
|
99
|
+
*
|
|
100
|
+
* The function is pure and idempotent: calling it twice on the same input
|
|
101
|
+
* produces the same result as calling it once (idempotent under concurrent execution).
|
|
102
|
+
*
|
|
103
|
+
* __proto__ is skipped on both read and write sides — setting it would mutate
|
|
104
|
+
* the prototype instead of creating a property, violating byte-identity.
|
|
105
|
+
*
|
|
106
|
+
* @param rawAgents - The `agents` field from the raw JSON file (any value types).
|
|
107
|
+
* @param onWarning - Optional callback for collision warnings.
|
|
108
|
+
* @returns { agents, didMutate, renamed, dropped, guardDropped } — caller persists iff didMutate is true.
|
|
109
|
+
* renamed: legacy keys successfully renamed to their canonical form.
|
|
110
|
+
* dropped: legacy keys dropped due to canonical-key collision (new value wins).
|
|
111
|
+
* guardDropped: legacy keys dropped due to prototype-pollution guard (distinct from collision).
|
|
112
|
+
*/
|
|
113
|
+
export function canonicaliseAgentKeys(rawAgents, onWarning) {
|
|
114
|
+
const warn = onWarning ?? (() => undefined);
|
|
115
|
+
const renamed = [];
|
|
116
|
+
const dropped = [];
|
|
117
|
+
const guardDropped = [];
|
|
118
|
+
// Fast path: no legacy keys defined — skip without reading input.
|
|
119
|
+
if (Object.keys(LEGACY_AGENT_KEYS).length === 0) {
|
|
120
|
+
return { agents: rawAgents, didMutate: false, renamed, dropped, guardDropped };
|
|
121
|
+
}
|
|
122
|
+
// Snapshot the original keys for collision detection (order-independent result).
|
|
123
|
+
const originalKeys = new Set(Object.keys(rawAgents));
|
|
124
|
+
const result = { ...rawAgents };
|
|
125
|
+
let didMutate = false;
|
|
126
|
+
for (const oldKey of originalKeys) {
|
|
127
|
+
// Skip the __proto__ old-key: iteration is safe but we must never rename or
|
|
128
|
+
// assign it — even reading result['__proto__'] would touch the prototype chain.
|
|
129
|
+
// If LEGACY_AGENT_KEYS declares it, treat as a guard-drop (removes the own
|
|
130
|
+
// property that spread may have copied, and records the truthful outcome).
|
|
131
|
+
if (oldKey === '__proto__') {
|
|
132
|
+
if (Object.hasOwn(LEGACY_AGENT_KEYS, '__proto__')) {
|
|
133
|
+
// Reflect.deleteProperty safely removes the own '__proto__' property
|
|
134
|
+
// (created by spread's [[DefineOwnProperty]]) without touching the prototype chain.
|
|
135
|
+
Reflect.deleteProperty(result, '__proto__');
|
|
136
|
+
guardDropped.push('__proto__');
|
|
137
|
+
didMutate = true;
|
|
138
|
+
}
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (!Object.hasOwn(LEGACY_AGENT_KEYS, oldKey))
|
|
142
|
+
continue;
|
|
143
|
+
const newKey = LEGACY_AGENT_KEYS[oldKey];
|
|
144
|
+
// Guard new key: creating an own property named __proto__ would silently
|
|
145
|
+
// set the prototype chain instead. Drop and remove the old key without creating target.
|
|
146
|
+
// This is a pollution-guard drop, not a collision drop — report under guardDropped.
|
|
147
|
+
if (newKey === '__proto__') {
|
|
148
|
+
guardDropped.push(oldKey);
|
|
149
|
+
delete result[oldKey];
|
|
150
|
+
didMutate = true;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (originalKeys.has(newKey)) {
|
|
154
|
+
// Collision: new (canonical) key already present → new wins, old dropped.
|
|
155
|
+
// Warning is surfaced by the caller's structured dropped-block (e.g. migrations.ts)
|
|
156
|
+
// to avoid printing the same collision twice in two different vocabularies (F8).
|
|
157
|
+
dropped.push(oldKey);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
result[newKey] = result[oldKey];
|
|
161
|
+
renamed.push(oldKey);
|
|
162
|
+
}
|
|
163
|
+
// Remove the legacy key regardless of collision outcome.
|
|
164
|
+
delete result[oldKey];
|
|
165
|
+
didMutate = true;
|
|
166
|
+
}
|
|
167
|
+
return { agents: result, didMutate, renamed, dropped, guardDropped };
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Read and validate the agent-models.json envelope for migration purposes.
|
|
171
|
+
*
|
|
172
|
+
* Returns a discriminated result:
|
|
173
|
+
* skip — file absent, empty, or agents field absent; caller is a no-op.
|
|
174
|
+
* warn — IO error, JSON parse failure, or structural violation; caller
|
|
175
|
+
* pushes the message to its warnings array (no migration prefix here).
|
|
176
|
+
* ok — envelope and rawAgents are validated and ready for canonicalisation.
|
|
177
|
+
*
|
|
178
|
+
* Does NOT apply canonicaliseAgentKeys — that is the migration's responsibility.
|
|
179
|
+
* Raw read (not readAgentMapping) intentionally avoids dropping unknown fields
|
|
180
|
+
* on a round-trip (parseRawEnvelope discipline: read raw, validate defensively).
|
|
181
|
+
*
|
|
182
|
+
* Pure I/O; does not mutate the file.
|
|
183
|
+
*/
|
|
184
|
+
export async function parseAgentMappingEnvelope(filePath) {
|
|
185
|
+
let raw;
|
|
186
|
+
try {
|
|
187
|
+
raw = await fs.readFile(filePath, 'utf-8');
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
const code = err.code;
|
|
191
|
+
if (code === 'ENOENT')
|
|
192
|
+
return { kind: 'skip' };
|
|
193
|
+
return { kind: 'warn', message: `cannot read ${filePath}: ${err.message}` };
|
|
194
|
+
}
|
|
195
|
+
// Strip BOM (U+FEFF) — some Windows editors prepend it to JSON files.
|
|
196
|
+
const content = raw.charCodeAt(0) === 0xFEFF ? raw.slice(1) : raw;
|
|
197
|
+
if (content.trim() === '')
|
|
198
|
+
return { kind: 'skip' };
|
|
199
|
+
let parsed;
|
|
200
|
+
try {
|
|
201
|
+
parsed = JSON.parse(content);
|
|
202
|
+
}
|
|
203
|
+
catch {
|
|
204
|
+
return { kind: 'warn', message: `${filePath} contains invalid JSON — skipping` };
|
|
205
|
+
}
|
|
206
|
+
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
207
|
+
return { kind: 'warn', message: `${filePath} is not a JSON object — skipping` };
|
|
208
|
+
}
|
|
209
|
+
const envelope = parsed;
|
|
210
|
+
const rawAgents = envelope['agents'];
|
|
211
|
+
if (rawAgents === undefined || rawAgents === null) {
|
|
212
|
+
return { kind: 'skip' }; // no agents field → nothing to migrate
|
|
213
|
+
}
|
|
214
|
+
if (typeof rawAgents !== 'object' || Array.isArray(rawAgents)) {
|
|
215
|
+
return { kind: 'warn', message: `${filePath} has non-object agents field — skipping` };
|
|
216
|
+
}
|
|
217
|
+
return { kind: 'ok', envelope, rawAgents: rawAgents };
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Read and tolerantly parse ~/.devflow/agent-models.json.
|
|
221
|
+
* Returns an empty mapping when the file is missing.
|
|
222
|
+
* Drops invalid effort values with a warning; preserves unknown agent names.
|
|
223
|
+
*/
|
|
224
|
+
export async function readAgentMapping(devflowDir, opts) {
|
|
225
|
+
const filePath = path.join(devflowDir, 'agent-models.json');
|
|
226
|
+
const warn = opts?.onWarning ?? (() => undefined);
|
|
227
|
+
// parseAgentMappingEnvelope handles I/O, BOM-strip, JSON parse, and shape
|
|
228
|
+
// validation — shared with the migration path so BOM tolerance is consistent.
|
|
229
|
+
const envelope = await parseAgentMappingEnvelope(filePath);
|
|
230
|
+
if (envelope.kind === 'skip')
|
|
231
|
+
return Ok({ version: 1, agents: {} });
|
|
232
|
+
if (envelope.kind === 'warn') {
|
|
233
|
+
// A non-object agents field (e.g. agents:[]) is treated as empty mapping — graceful
|
|
234
|
+
// degradation matches the prior inline logic and avoids Err for a recoverable state.
|
|
235
|
+
// All other warn cases (IO error, bad JSON, root non-object) are hard errors.
|
|
236
|
+
if (envelope.message.includes('non-object agents field')) {
|
|
237
|
+
return Ok({ version: 1, agents: {} });
|
|
238
|
+
}
|
|
239
|
+
return Err(envelope.message);
|
|
240
|
+
}
|
|
241
|
+
// ok arm: iterate rawAgents and validate per-entry fields.
|
|
242
|
+
const agents = {};
|
|
243
|
+
for (const [name, entry] of Object.entries(envelope.rawAgents)) {
|
|
244
|
+
if (typeof entry !== 'object' || entry === null)
|
|
245
|
+
continue;
|
|
246
|
+
const raw = entry;
|
|
247
|
+
const mapping = {};
|
|
248
|
+
if (typeof raw.model === 'string') {
|
|
249
|
+
// Tighten to the same charset used by rewriteAgentFrontmatter.
|
|
250
|
+
// The effort field is enum-validated below; model must be equally strict.
|
|
251
|
+
// An invalid entry is dropped with a warning rather than silently
|
|
252
|
+
// persisting and permanently poisoning that agent on every reapply.
|
|
253
|
+
if (isValidModelName(raw.model)) {
|
|
254
|
+
mapping.model = raw.model;
|
|
255
|
+
}
|
|
256
|
+
else {
|
|
257
|
+
warn(`agent-models: invalid-model name for agent "${name}" — dropping entry`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
if (typeof raw.effort === 'string') {
|
|
261
|
+
if (EFFORT_LEVELS_SET.has(raw.effort)) {
|
|
262
|
+
// Sound narrowing: has() proved membership; EffortLevel is a literal
|
|
263
|
+
// subtype of string so the assertion is not a compensating cast.
|
|
264
|
+
mapping.effort = raw.effort;
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
warn(`agent-models: dropping invalid effort "${raw.effort}" for agent "${name}"`);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
agents[name] = mapping;
|
|
271
|
+
}
|
|
272
|
+
// Apply key migration: old keys (e.g. 'coder', 'reviewer') are transparently renamed
|
|
273
|
+
// on every read, covering all four call sites (agents.ts --set, proxy.ts, init.ts × 2).
|
|
274
|
+
// Generic T=AgentMapping is inferred — no compensating cast needed.
|
|
275
|
+
const { agents: migratedAgents } = canonicaliseAgentKeys(agents, warn);
|
|
276
|
+
return Ok({ version: 1, agents: migratedAgents });
|
|
277
|
+
}
|
|
278
|
+
// ---------------------------------------------------------------------------
|
|
279
|
+
// readInstalledAgentNames
|
|
280
|
+
// ---------------------------------------------------------------------------
|
|
281
|
+
/**
|
|
282
|
+
* Return the set of agent names currently installed in `installDir`.
|
|
283
|
+
*
|
|
284
|
+
* Uses a single fs.readdir call — O(dir) not O(agents) — replacing the
|
|
285
|
+
* previous per-name fs.access loop (T8 assertion: exactly ONE readdir,
|
|
286
|
+
* ZERO fs.access calls).
|
|
287
|
+
*
|
|
288
|
+
* A missing directory returns an empty set rather than throwing (ENOENT is
|
|
289
|
+
* not an error — the install dir may not exist on a fresh machine before
|
|
290
|
+
* `devflow init` runs). Any other OS error also returns an empty set
|
|
291
|
+
* (degrade-not-throw per PF-009) — a transient or misconfigured path must
|
|
292
|
+
* not prevent the TUI or --list from starting.
|
|
293
|
+
*
|
|
294
|
+
* @param installDir - Path to ~/.claude/agents/devflow (or equivalent).
|
|
295
|
+
*/
|
|
296
|
+
export async function readInstalledAgentNames(installDir) {
|
|
297
|
+
try {
|
|
298
|
+
const entries = await fs.readdir(installDir);
|
|
299
|
+
return new Set(entries
|
|
300
|
+
.map(mdEntryName)
|
|
301
|
+
.filter((n) => n !== null));
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
return new Set();
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// ---------------------------------------------------------------------------
|
|
308
|
+
// saveAgentMapping
|
|
309
|
+
// ---------------------------------------------------------------------------
|
|
310
|
+
/**
|
|
311
|
+
* Atomically write the agent mapping to ~/.devflow/agent-models.json.
|
|
312
|
+
* Creates the directory if needed.
|
|
313
|
+
*/
|
|
314
|
+
export async function saveAgentMapping(devflowDir, mapping) {
|
|
315
|
+
const filePath = path.join(devflowDir, 'agent-models.json');
|
|
316
|
+
try {
|
|
317
|
+
await fs.mkdir(devflowDir, { recursive: true });
|
|
318
|
+
await writeFileAtomicExclusive(filePath, JSON.stringify(mapping, null, 2) + '\n');
|
|
319
|
+
return Ok(undefined);
|
|
320
|
+
}
|
|
321
|
+
catch (err) {
|
|
322
|
+
return Err(`Failed to write agent-models.json: ${err.message}`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Compute the effective model/effort for an agent, applying dormancy semantics.
|
|
327
|
+
*
|
|
328
|
+
* Dormancy rule (plan D5):
|
|
329
|
+
* If the mapping entry's model is an external GPT model (classified via
|
|
330
|
+
* isDormantExternalModel) AND proxyEnabled is false → the entry is DORMANT.
|
|
331
|
+
* The shipped default model is used instead. The entry remains saved.
|
|
332
|
+
*
|
|
333
|
+
* Effort is ALWAYS applied regardless of proxy state.
|
|
334
|
+
*
|
|
335
|
+
* Pure function — no I/O.
|
|
336
|
+
*
|
|
337
|
+
* @param agentName - The agent's short name (e.g., 'code').
|
|
338
|
+
* @param mapping - The full mapping file.
|
|
339
|
+
* @param shippedDefaults - Map of agent name → shipped default model.
|
|
340
|
+
* @param proxyEnabled - Whether the Devflow proxy is currently active.
|
|
341
|
+
*/
|
|
342
|
+
export function resolveEffective(agentName, mapping, shippedDefaults, proxyEnabled) {
|
|
343
|
+
const entry = mapping.agents[agentName];
|
|
344
|
+
let model;
|
|
345
|
+
if (entry?.model !== undefined) {
|
|
346
|
+
// Dormant: external model configured but proxy is off → fall back to shipped default.
|
|
347
|
+
model = isDormantExternalModel(entry.model, proxyEnabled)
|
|
348
|
+
? shippedDefaults[agentName]
|
|
349
|
+
: entry.model;
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
// No mapping entry → use shipped default.
|
|
353
|
+
model = shippedDefaults[agentName];
|
|
354
|
+
}
|
|
355
|
+
const effort = entry?.effort;
|
|
356
|
+
return { model, effort };
|
|
357
|
+
}
|
|
358
|
+
// ---------------------------------------------------------------------------
|
|
359
|
+
// loadShippedDefaults
|
|
360
|
+
// ---------------------------------------------------------------------------
|
|
361
|
+
/**
|
|
362
|
+
* Load shipped default models from the source agent files.
|
|
363
|
+
* Reads every file in agentsDir() and parses the frontmatter model field.
|
|
364
|
+
* Unknown or malformed files are silently skipped.
|
|
365
|
+
*/
|
|
366
|
+
export async function loadShippedDefaults() {
|
|
367
|
+
const sourceDir = agentsDir();
|
|
368
|
+
const defaults = {};
|
|
369
|
+
let entries;
|
|
370
|
+
try {
|
|
371
|
+
entries = await fs.readdir(sourceDir);
|
|
372
|
+
}
|
|
373
|
+
catch {
|
|
374
|
+
return defaults;
|
|
375
|
+
}
|
|
376
|
+
const pairs = await Promise.all(entries.map(async (file) => {
|
|
377
|
+
const agentName = mdEntryName(file);
|
|
378
|
+
if (agentName === null)
|
|
379
|
+
return null;
|
|
380
|
+
try {
|
|
381
|
+
const content = await fs.readFile(path.join(sourceDir, file), 'utf-8');
|
|
382
|
+
const result = readFrontmatterModel(content);
|
|
383
|
+
if (result.ok && result.value) {
|
|
384
|
+
return [agentName, result.value];
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
catch {
|
|
388
|
+
// Silently skip unreadable files
|
|
389
|
+
}
|
|
390
|
+
return null;
|
|
391
|
+
}));
|
|
392
|
+
for (const pair of pairs) {
|
|
393
|
+
if (pair !== null) {
|
|
394
|
+
defaults[pair[0]] = pair[1];
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
return defaults;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Idempotent convergence function: walk every installed agent file and
|
|
401
|
+
* rewrite frontmatter model/effort to match the effective mapping.
|
|
402
|
+
*
|
|
403
|
+
* - Reads shipped defaults LIVE from src/assets/agents/ sources.
|
|
404
|
+
* - Gets the agent name list from the registry (getAllAgentNames()) plus
|
|
405
|
+
* any mapping entries for agents not in the registry.
|
|
406
|
+
* - Missing installed files → skip silently (recorded in skippedMissing).
|
|
407
|
+
* - Malformed frontmatter → warn and leave file untouched.
|
|
408
|
+
* - DOES NOT store previousModel anywhere (plan D4): computes from shipped defaults.
|
|
409
|
+
*/
|
|
410
|
+
export async function reapplyAgentMapping(opts) {
|
|
411
|
+
const warnings = [];
|
|
412
|
+
const warn = (msg) => {
|
|
413
|
+
warnings.push(msg);
|
|
414
|
+
opts.onWarning?.(msg);
|
|
415
|
+
};
|
|
416
|
+
const mappingResult = await readAgentMapping(opts.devflowDir, { onWarning: warn });
|
|
417
|
+
if (!mappingResult.ok) {
|
|
418
|
+
warn(`reapplyAgentMapping: failed to read mapping — ${mappingResult.error}`);
|
|
419
|
+
return { updated: [], unchanged: [], skippedMissing: [], invalidMapping: [], warnings };
|
|
420
|
+
}
|
|
421
|
+
const mapping = mappingResult.value;
|
|
422
|
+
const shippedDefaults = await loadShippedDefaults();
|
|
423
|
+
// Build the union of: all registered agent names + all names in the mapping
|
|
424
|
+
// (so agents not yet in the registry but configured are also processed).
|
|
425
|
+
const registryNames = new Set(getAllAgentNames());
|
|
426
|
+
const mappingNames = new Set(Object.keys(mapping.agents));
|
|
427
|
+
const allNames = new Set([...registryNames, ...mappingNames]);
|
|
428
|
+
// Stable iteration order — Set preserves insertion order, array fixes it for the map.
|
|
429
|
+
const allNamesList = [...allNames];
|
|
430
|
+
const perResults = await Promise.all(allNamesList.map(async (agentName) => {
|
|
431
|
+
const localWarnings = [];
|
|
432
|
+
// Emit to callback immediately for live feedback; collect for deterministic aggregation.
|
|
433
|
+
const localWarn = (msg) => {
|
|
434
|
+
localWarnings.push(msg);
|
|
435
|
+
opts.onWarning?.(msg);
|
|
436
|
+
};
|
|
437
|
+
const installPath = path.join(opts.installDir, mdFileName(agentName));
|
|
438
|
+
// Guard: reject mapping keys that would read/write outside the install directory.
|
|
439
|
+
// A corrupted or adversarial agent-models.json could contain path-traversal keys
|
|
440
|
+
// such as '../../etc/passwd'; this check prevents any filesystem access beyond
|
|
441
|
+
// opts.installDir. Per PF-009 (degrade-not-throw), this emits a warning and skips gracefully.
|
|
442
|
+
if (!isContainedIn(opts.installDir, mdFileName(agentName))) {
|
|
443
|
+
localWarn(`reapplyAgentMapping: agent name "${agentName}" resolves outside the install ` +
|
|
444
|
+
`directory — skipped (containment guard)`);
|
|
445
|
+
return { bucket: 'skipped', localWarnings };
|
|
446
|
+
}
|
|
447
|
+
let currentContent;
|
|
448
|
+
try {
|
|
449
|
+
currentContent = await fs.readFile(installPath, 'utf-8');
|
|
450
|
+
}
|
|
451
|
+
catch (err) {
|
|
452
|
+
const code = err.code;
|
|
453
|
+
if (code !== 'ENOENT') {
|
|
454
|
+
localWarn(`reapplyAgentMapping: cannot read ${agentName}.md — ${err.message}`);
|
|
455
|
+
}
|
|
456
|
+
return { bucket: 'skipped', localWarnings };
|
|
457
|
+
}
|
|
458
|
+
const effective = resolveEffective(agentName, mapping, shippedDefaults, opts.proxyEnabled);
|
|
459
|
+
if (effective.model === undefined) {
|
|
460
|
+
// No shipped default and no mapping → nothing to write
|
|
461
|
+
return { bucket: 'unchanged', localWarnings };
|
|
462
|
+
}
|
|
463
|
+
const rewriteResult = rewriteAgentFrontmatter(currentContent, {
|
|
464
|
+
model: effective.model,
|
|
465
|
+
effort: effective.effort ?? null,
|
|
466
|
+
});
|
|
467
|
+
if (!rewriteResult.ok) {
|
|
468
|
+
if (rewriteResult.error === 'invalid-model') {
|
|
469
|
+
// The invalid model came from agent-models.json (the mapping),
|
|
470
|
+
// not from the installed .md file. Name the real artifact so the user
|
|
471
|
+
// knows where to look; file under invalidMapping (not skippedMissing).
|
|
472
|
+
localWarn(`reapplyAgentMapping: invalid-model name in agent-models.json for "${agentName}" — skipping`);
|
|
473
|
+
return { bucket: 'invalid-mapping', localWarnings };
|
|
474
|
+
}
|
|
475
|
+
localWarn(`reapplyAgentMapping: malformed frontmatter in ${agentName}.md (${rewriteResult.error}) — skipping`);
|
|
476
|
+
return { bucket: 'skipped', localWarnings }; // treated as unprocessable
|
|
477
|
+
}
|
|
478
|
+
if (!rewriteResult.value.changed) {
|
|
479
|
+
return { bucket: 'unchanged', localWarnings };
|
|
480
|
+
}
|
|
481
|
+
try {
|
|
482
|
+
await writeFileAtomicExclusive(installPath, rewriteResult.value.content);
|
|
483
|
+
return { bucket: 'updated', localWarnings };
|
|
484
|
+
}
|
|
485
|
+
catch (err) {
|
|
486
|
+
localWarn(`reapplyAgentMapping: failed to write ${agentName}.md — ${err.message}`);
|
|
487
|
+
return { bucket: 'write-error', localWarnings };
|
|
488
|
+
}
|
|
489
|
+
}));
|
|
490
|
+
// Aggregate in allNamesList order — deterministic warning order and bucket assignment.
|
|
491
|
+
const updated = [];
|
|
492
|
+
const unchanged = [];
|
|
493
|
+
const skippedMissing = [];
|
|
494
|
+
const invalidMapping = [];
|
|
495
|
+
for (let i = 0; i < allNamesList.length; i++) {
|
|
496
|
+
const agentName = allNamesList[i];
|
|
497
|
+
const { bucket, localWarnings } = perResults[i];
|
|
498
|
+
warnings.push(...localWarnings);
|
|
499
|
+
switch (bucket) {
|
|
500
|
+
case 'updated':
|
|
501
|
+
updated.push(agentName);
|
|
502
|
+
break;
|
|
503
|
+
case 'unchanged':
|
|
504
|
+
unchanged.push(agentName);
|
|
505
|
+
break;
|
|
506
|
+
case 'skipped':
|
|
507
|
+
skippedMissing.push(agentName);
|
|
508
|
+
break;
|
|
509
|
+
case 'invalid-mapping':
|
|
510
|
+
invalidMapping.push(agentName);
|
|
511
|
+
break;
|
|
512
|
+
case 'write-error': break; // warning already emitted; no bucket (original semantics)
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
return { updated, unchanged, skippedMissing, invalidMapping, warnings };
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* Revert all installed agent files to their shipped default models.
|
|
519
|
+
* Equivalent to reapplyAgentMapping({proxyEnabled: false}).
|
|
520
|
+
*
|
|
521
|
+
* Used by: proxy --disable, uninstall pre-cleanup.
|
|
522
|
+
*/
|
|
523
|
+
export async function revertExternalAgents(opts) {
|
|
524
|
+
return reapplyAgentMapping({
|
|
525
|
+
installDir: opts.installDir,
|
|
526
|
+
devflowDir: opts.devflowDir,
|
|
527
|
+
proxyEnabled: false,
|
|
528
|
+
onWarning: opts.onWarning,
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
// ---------------------------------------------------------------------------
|
|
532
|
+
// countExternalMappedAgents
|
|
533
|
+
// ---------------------------------------------------------------------------
|
|
534
|
+
/**
|
|
535
|
+
* Count the number of mapping entries whose model requires the Devflow proxy
|
|
536
|
+
* (i.e., is not a Claude model name and not 'default').
|
|
537
|
+
*
|
|
538
|
+
* Uses the complement predicate (isClaudeModelName — isDormantExternalModel's
|
|
539
|
+
* building block) so that alias-shaped names are correctly counted as
|
|
540
|
+
* external — preventing "External-mapped agents: none" when a user has
|
|
541
|
+
* pinned every agent to a non-Claude alias (avoids AC-C6 live-correctness
|
|
542
|
+
* bug where discovery-driven counting would miss such entries).
|
|
543
|
+
*
|
|
544
|
+
* Used by: proxy --status display.
|
|
545
|
+
* Pure function — no I/O.
|
|
546
|
+
*/
|
|
547
|
+
export function countExternalMappedAgents(mapping) {
|
|
548
|
+
let count = 0;
|
|
549
|
+
for (const entry of Object.values(mapping.agents)) {
|
|
550
|
+
if (isDormantExternalModel(entry.model, false)) {
|
|
551
|
+
count++;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
return count;
|
|
555
|
+
}
|
|
556
|
+
//# sourceMappingURL=agent-models.js.map
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent installation-state classification.
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for the STATE column shared by `--list` and the TUI.
|
|
5
|
+
* Centralised here (core layer) per ADR-013 so neither cli/commands nor
|
|
6
|
+
* cli/agents-view owns the vocabulary.
|
|
7
|
+
*
|
|
8
|
+
* applies ADR-013: pure core-layer module, no CLI-adapter concerns.
|
|
9
|
+
*/
|
|
10
|
+
import { isDormantExternalModel } from './external-models.js';
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// AGENT_STATE_LABELS
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
/**
|
|
15
|
+
* Display labels for each {@link AgentState}, shared by `--list` and the TUI
|
|
16
|
+
* so the two surfaces cannot drift from each other.
|
|
17
|
+
*
|
|
18
|
+
* Apply colour at each call site; this map holds bare text only.
|
|
19
|
+
*/
|
|
20
|
+
export const AGENT_STATE_LABELS = {
|
|
21
|
+
'active': 'active',
|
|
22
|
+
'saved-inactive': 'saved-inactive',
|
|
23
|
+
'not-installed': 'not installed',
|
|
24
|
+
'unknown': 'unknown',
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Classify an agent row's install state.
|
|
28
|
+
*
|
|
29
|
+
* Single source of truth shared by `--list` and the TUI so the two surfaces
|
|
30
|
+
* cannot drift. The four-way result drives the STATE column in render.ts and
|
|
31
|
+
* the STATE column in --list output.
|
|
32
|
+
*
|
|
33
|
+
* Pure function, no I/O.
|
|
34
|
+
*/
|
|
35
|
+
export function classifyAgentState({ configured, proxyEnabled, installed, inRegistry, }) {
|
|
36
|
+
if (!inRegistry)
|
|
37
|
+
return 'unknown';
|
|
38
|
+
if (!installed)
|
|
39
|
+
return 'not-installed';
|
|
40
|
+
if (isDormantExternalModel(configured, proxyEnabled))
|
|
41
|
+
return 'saved-inactive';
|
|
42
|
+
return 'active';
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=agent-state.js.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { join } from 'path';
|
|
2
|
+
import { getPackageRoot } from './paths.js';
|
|
3
|
+
/**
|
|
4
|
+
* Flat skills source directory: src/assets/skills/{name}/
|
|
5
|
+
* All plugins' skills live here directly (no per-plugin subdirectory).
|
|
6
|
+
*/
|
|
7
|
+
export function skillsDir() {
|
|
8
|
+
return join(getPackageRoot(), 'src', 'assets', 'skills');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Flat agents source directory: src/assets/agents/{name}.md
|
|
12
|
+
* All plugins' agents live here directly.
|
|
13
|
+
*/
|
|
14
|
+
export function agentsDir() {
|
|
15
|
+
return join(getPackageRoot(), 'src', 'assets', 'agents');
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Flat rules source directory: src/assets/rules/{name}.md
|
|
19
|
+
* All plugins' rules live here directly (no per-plugin subdirectory).
|
|
20
|
+
*/
|
|
21
|
+
export function rulesDir() {
|
|
22
|
+
return join(getPackageRoot(), 'src', 'assets', 'rules');
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Scripts source directory: src/assets/scripts/
|
|
26
|
+
* Contains hooks/ and hud.sh shipped with devflow.
|
|
27
|
+
*/
|
|
28
|
+
export function scriptsDir() {
|
|
29
|
+
return join(getPackageRoot(), 'src', 'assets', 'scripts');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Compiled commands directory: dist/commands/
|
|
33
|
+
* Single lookup directory for installed commands — .mds compile output
|
|
34
|
+
* plus verbatim hand-authored .md copies.
|
|
35
|
+
*/
|
|
36
|
+
export function commandsDir() {
|
|
37
|
+
return join(getPackageRoot(), 'dist', 'commands');
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=assets.js.map
|