devflow-kit 1.8.3 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +182 -7
- package/LICENSE +1 -1
- package/README.md +139 -219
- package/dist/cli/agents-view/index.js +9 -0
- package/dist/cli/agents-view/render.js +310 -0
- package/dist/cli/agents-view/state.js +423 -0
- package/dist/cli/agents-view/terminal.js +179 -0
- package/dist/cli/commands/agents.js +585 -0
- package/dist/cli/commands/ambient.js +231 -0
- package/dist/cli/commands/capture.js +133 -0
- package/dist/cli/commands/compliance-prompts.js +174 -0
- package/dist/cli/commands/compliance.js +337 -0
- package/dist/cli/commands/context.js +66 -0
- package/dist/cli/commands/debug.js +122 -0
- package/dist/cli/commands/flags.js +119 -0
- package/dist/cli/commands/hud.js +229 -0
- package/dist/cli/commands/init-seed.js +226 -0
- package/dist/cli/commands/init.js +1786 -0
- package/dist/cli/commands/knowledge/index.js +25 -0
- package/dist/cli/commands/knowledge/list.js +115 -0
- package/dist/cli/commands/knowledge/toggle.js +84 -0
- package/dist/cli/commands/learning.js +311 -0
- package/dist/cli/commands/legacy-hooks.js +40 -0
- package/dist/cli/commands/memory.js +349 -0
- package/dist/cli/commands/proxy.js +1435 -0
- package/dist/cli/commands/rules.js +334 -0
- package/dist/cli/commands/safe-delete.js +140 -0
- package/dist/cli/commands/security.js +179 -0
- package/dist/cli/commands/skills.js +140 -0
- package/dist/cli/commands/uninstall.js +1214 -0
- package/dist/cli.js +35 -10
- package/dist/commands/bug-analysis.md +400 -0
- package/dist/commands/code-review.md +403 -0
- package/dist/commands/debug.md +282 -0
- package/dist/commands/dynamic-build.md +972 -0
- package/dist/commands/dynamic-plan.md +383 -0
- package/dist/commands/dynamic-profile.md +206 -0
- package/dist/commands/dynamic-tickets.md +583 -0
- package/dist/commands/explore.md +208 -0
- package/dist/commands/implement.md +590 -0
- package/dist/commands/plan.md +570 -0
- package/dist/commands/release.md +206 -0
- package/dist/commands/research.md +212 -0
- package/dist/commands/resolve.md +731 -0
- package/dist/commands/self-review.md +251 -0
- package/dist/core/agent-frontmatter.js +209 -0
- package/dist/core/agent-models.js +556 -0
- package/dist/core/agent-state.js +44 -0
- package/dist/core/assets.js +39 -0
- package/dist/core/cache.js +205 -0
- package/dist/core/codex-auth-inspect.js +128 -0
- package/dist/core/compliance-compose.js +458 -0
- package/dist/core/compliance.js +165 -0
- package/dist/core/external-models.js +76 -0
- package/dist/core/feature-config.js +125 -0
- package/dist/core/flags.js +309 -0
- package/dist/core/fs-atomic.js +74 -0
- package/dist/core/git.js +61 -0
- package/dist/core/learning-queue-cleanup.js +92 -0
- package/dist/core/learning-tuning-config.js +78 -0
- package/dist/core/manifest.js +171 -0
- package/dist/core/migrations.js +330 -0
- package/dist/core/model-discovery.js +655 -0
- package/dist/core/observation-io.js +50 -0
- package/dist/core/observations.js +109 -0
- package/dist/core/orphan-sweep.js +92 -0
- package/dist/core/paths.js +48 -0
- package/dist/core/plugins.js +525 -0
- package/dist/core/project-paths.js +159 -0
- package/dist/core/proxy-log.js +165 -0
- package/dist/core/proxy-state.js +305 -0
- package/dist/core/safe-delete-install.js +191 -0
- package/dist/core/teammate-mode-cleanup.js +33 -0
- package/dist/hud/colors.js +13 -2
- package/dist/hud/components/config-counts.js +2 -2
- package/dist/hud/components/context-usage.js +2 -2
- package/dist/hud/components/learning-counts.js +92 -0
- package/dist/hud/components/session-cost.js +10 -2
- package/dist/hud/components/usage-quota.js +43 -8
- package/dist/hud/components/version-badge.js +14 -4
- package/dist/hud/config.js +4 -2
- package/dist/hud/cost-history.js +281 -0
- package/dist/hud/git.js +112 -71
- package/dist/hud/index.js +47 -4
- package/dist/hud/render.js +8 -20
- package/dist/hud/transcript.js +5 -6
- package/dist/targets/claude-code/claude-paths.js +106 -0
- package/dist/targets/claude-code/compliance-install.js +305 -0
- package/dist/targets/claude-code/hooks.js +9 -0
- package/dist/targets/claude-code/installer.js +458 -0
- package/dist/targets/claude-code/legacy.js +239 -0
- package/dist/targets/claude-code/post-install.js +971 -0
- package/package.json +23 -17
- package/src/assets/agents/code.md +244 -0
- package/src/assets/agents/design.md +113 -0
- package/src/assets/agents/diagnose.md +210 -0
- package/src/assets/agents/evaluate.md +117 -0
- package/src/assets/agents/git.md +938 -0
- package/src/assets/agents/knowledge.md +89 -0
- package/src/assets/agents/learning.md +203 -0
- package/src/assets/agents/research.md +134 -0
- package/src/assets/agents/review.md +220 -0
- package/src/assets/agents/scrutinize.md +95 -0
- package/src/assets/agents/simplify.md +108 -0
- package/src/assets/agents/skim.md +136 -0
- package/src/assets/agents/synthesize.md +402 -0
- package/src/assets/agents/test.md +155 -0
- package/src/assets/agents/triage.md +141 -0
- package/src/assets/agents/validate.md +103 -0
- package/src/assets/commands/_partials/_compliance.mds +5 -0
- package/src/assets/commands/_partials/_decisions.mds +20 -0
- package/src/assets/commands/_partials/_engine.mds +244 -0
- package/src/assets/commands/_partials/_factory.mds +216 -0
- package/src/assets/commands/_partials/_knowledge.mds +95 -0
- package/src/assets/commands/_partials/_plan_contract.mds +51 -0
- package/src/assets/commands/_partials/_preamble.mds +82 -0
- package/src/assets/commands/_partials/_publication.mds +7 -0
- package/src/assets/commands/_partials/_roster.mds +31 -0
- package/src/assets/commands/_partials/_ticket_template.mds +59 -0
- package/src/assets/commands/_partials/_wave.mds +123 -0
- package/src/assets/commands/bug-analysis.mds +353 -0
- package/src/assets/commands/code-review.mds +355 -0
- package/src/assets/commands/debug.mds +224 -0
- package/src/assets/commands/dynamic-build.mds +534 -0
- package/src/assets/commands/dynamic-plan.mds +244 -0
- package/src/assets/commands/dynamic-profile.mds +132 -0
- package/src/assets/commands/dynamic-tickets.mds +226 -0
- package/src/assets/commands/explore.mds +150 -0
- package/src/assets/commands/implement.mds +496 -0
- package/src/assets/commands/plan.mds +523 -0
- package/src/assets/commands/release.md +206 -0
- package/src/assets/commands/research.mds +164 -0
- package/src/assets/commands/resolve.mds +636 -0
- package/src/assets/commands/self-review.mds +156 -0
- package/src/assets/rules/accessibility.md +11 -0
- package/src/assets/rules/compliance.md +15 -0
- package/src/assets/rules/engineering.md +13 -0
- package/src/assets/rules/go.md +12 -0
- package/src/assets/rules/java.md +12 -0
- package/src/assets/rules/python.md +12 -0
- package/src/assets/rules/quality.md +14 -0
- package/src/assets/rules/react.md +11 -0
- package/src/assets/rules/reliability.md +12 -0
- package/src/assets/rules/rust.md +12 -0
- package/src/assets/rules/security.md +12 -0
- package/src/assets/rules/typescript.md +12 -0
- package/src/assets/rules/ui-design.md +11 -0
- package/src/assets/scripts/hooks/assets/orchestrator-charter.md +21 -0
- package/src/assets/scripts/hooks/background-memory-update +460 -0
- package/src/assets/scripts/hooks/capture-prompt +87 -0
- package/src/assets/scripts/hooks/capture-question +153 -0
- package/src/assets/scripts/hooks/capture-turn +105 -0
- package/src/assets/scripts/hooks/debug-trace +75 -0
- package/src/assets/scripts/hooks/decisions-usage-scan.cjs +131 -0
- package/src/assets/scripts/hooks/ensure-devflow-init +39 -0
- package/src/assets/scripts/hooks/ensure-proxy +294 -0
- package/src/assets/scripts/hooks/ensure-root-gitignore +116 -0
- package/src/assets/scripts/hooks/get-mtime +23 -0
- package/src/assets/scripts/hooks/git-marker +16 -0
- package/src/assets/scripts/hooks/hook-bootstrap +25 -0
- package/src/assets/scripts/hooks/hook-log-init +41 -0
- package/src/assets/scripts/hooks/json-helper.cjs +725 -0
- package/src/assets/scripts/hooks/json-parse +243 -0
- package/src/assets/scripts/hooks/learning-lock +44 -0
- package/src/assets/scripts/hooks/lib/decisions-format.cjs +301 -0
- package/src/assets/scripts/hooks/lib/mkdir-lock.cjs +106 -0
- package/src/assets/scripts/hooks/lib/project-paths.cjs +230 -0
- package/src/assets/scripts/hooks/lib/render-decisions.cjs +398 -0
- package/src/assets/scripts/hooks/lib/safe-path.cjs +29 -0
- package/src/assets/scripts/hooks/log-paths +24 -0
- package/src/assets/scripts/hooks/memory-worker +101 -0
- package/src/assets/scripts/hooks/pre-compact-memory +126 -0
- package/src/assets/scripts/hooks/preamble +77 -0
- package/src/assets/scripts/hooks/queue-append +120 -0
- package/src/assets/scripts/hooks/resolve-project-root +37 -0
- package/src/assets/scripts/hooks/run-hook +31 -0
- package/src/assets/scripts/hooks/session-start-context +180 -0
- package/src/assets/scripts/hooks/session-start-memory +318 -0
- package/src/assets/scripts/hooks/session-start-orchestrator +54 -0
- package/src/assets/scripts/hud.sh +5 -0
- package/src/assets/scripts/redact-secrets.cjs +410 -0
- package/src/assets/skills/accessibility/SKILL.md +145 -0
- package/src/assets/skills/accessibility/references/patterns.md +398 -0
- package/src/assets/skills/accessibility/references/sources.md +26 -0
- package/src/assets/skills/accessibility/references/violations.md +358 -0
- package/src/assets/skills/apply-decisions/SKILL.md +100 -0
- package/src/assets/skills/apply-feature-knowledge/SKILL.md +69 -0
- package/src/assets/skills/architecture/SKILL.md +138 -0
- package/src/assets/skills/architecture/references/patterns.md +378 -0
- package/src/assets/skills/architecture/references/sources.md +41 -0
- package/src/assets/skills/architecture/references/violations.md +314 -0
- package/src/assets/skills/boundary-validation/SKILL.md +119 -0
- package/src/assets/skills/boundary-validation/references/detection.md +283 -0
- package/src/assets/skills/boundary-validation/references/patterns.md +283 -0
- package/src/assets/skills/boundary-validation/references/sources.md +41 -0
- package/src/assets/skills/boundary-validation/references/violations.md +211 -0
- package/src/assets/skills/complexity/SKILL.md +150 -0
- package/src/assets/skills/compliance/SKILL.md +121 -0
- package/src/assets/skills/compliance/frameworks/gdpr/fragment.md +11 -0
- package/src/assets/skills/compliance/frameworks/gdpr/reference.md +50 -0
- package/src/assets/skills/compliance/frameworks/hipaa/fragment.md +11 -0
- package/src/assets/skills/compliance/frameworks/hipaa/reference.md +44 -0
- package/src/assets/skills/compliance/frameworks/iso-27001/fragment.md +10 -0
- package/src/assets/skills/compliance/frameworks/iso-27001/reference.md +45 -0
- package/src/assets/skills/compliance/frameworks/pci-dss/fragment.md +11 -0
- package/src/assets/skills/compliance/frameworks/pci-dss/reference.md +55 -0
- package/src/assets/skills/compliance/frameworks/soc2/fragment.md +10 -0
- package/src/assets/skills/compliance/frameworks/soc2/reference.md +53 -0
- package/src/assets/skills/compliance/frameworks/sox/fragment.md +10 -0
- package/src/assets/skills/compliance/frameworks/sox/reference.md +67 -0
- package/src/assets/skills/compliance/references/detection.md +108 -0
- package/src/assets/skills/compliance/references/sources.md +28 -0
- package/src/assets/skills/consistency/SKILL.md +140 -0
- package/src/assets/skills/database/SKILL.md +134 -0
- package/src/assets/skills/dependencies/SKILL.md +141 -0
- package/src/assets/skills/dependency-research/SKILL.md +133 -0
- package/src/assets/skills/dependency-research/references/evaluation-criteria.md +101 -0
- package/src/assets/skills/design-review/SKILL.md +155 -0
- package/src/assets/skills/design-review/references/anti-patterns.md +207 -0
- package/src/assets/skills/docs-framework/SKILL.md +190 -0
- package/src/assets/skills/docs-framework/references/patterns.md +381 -0
- package/src/assets/skills/docs-framework/references/violations.md +221 -0
- package/src/assets/skills/documentation/SKILL.md +126 -0
- package/src/assets/skills/feature-knowledge/SKILL.md +341 -0
- package/src/assets/skills/gap-analysis/SKILL.md +151 -0
- package/src/assets/skills/gap-analysis/references/check-layers.md +125 -0
- package/src/assets/skills/git/SKILL.md +287 -0
- package/src/assets/skills/git/references/github-api.md +666 -0
- package/src/assets/skills/git/references/patterns.md +324 -0
- package/src/assets/skills/git/references/sources.md +16 -0
- package/src/assets/skills/git/references/violations.md +128 -0
- package/src/assets/skills/go/SKILL.md +147 -0
- package/src/assets/skills/go/references/concurrency.md +335 -0
- package/src/assets/skills/go/references/patterns.md +278 -0
- package/src/assets/skills/go/references/sources.md +41 -0
- package/src/assets/skills/go/references/violations.md +262 -0
- package/src/assets/skills/java/SKILL.md +148 -0
- package/src/assets/skills/java/references/modern-java.md +335 -0
- package/src/assets/skills/java/references/patterns.md +311 -0
- package/src/assets/skills/java/references/sources.md +44 -0
- package/src/assets/skills/java/references/violations.md +257 -0
- package/src/assets/skills/patterns/SKILL.md +162 -0
- package/src/assets/skills/performance/SKILL.md +135 -0
- package/src/assets/skills/performance/references/patterns.md +516 -0
- package/src/assets/skills/performance/references/sources.md +41 -0
- package/src/assets/skills/performance/references/violations.md +417 -0
- package/src/assets/skills/python/SKILL.md +156 -0
- package/src/assets/skills/python/references/async.md +255 -0
- package/src/assets/skills/python/references/patterns.md +280 -0
- package/src/assets/skills/python/references/sources.md +41 -0
- package/src/assets/skills/python/references/violations.md +272 -0
- package/src/assets/skills/qa/SKILL.md +136 -0
- package/src/assets/skills/qa/references/browser-testing.md +97 -0
- package/src/assets/skills/qa/references/patterns.md +118 -0
- package/src/assets/skills/qa/references/scenario-templates.md +102 -0
- package/src/assets/skills/qa/references/sources.md +30 -0
- package/src/assets/skills/qa/references/violations.md +98 -0
- package/src/assets/skills/quality-gates/SKILL.md +152 -0
- package/src/assets/skills/quality-gates/references/stub-detection.md +135 -0
- package/src/assets/skills/react/SKILL.md +143 -0
- package/src/assets/skills/react/references/error-handling.md +179 -0
- package/src/assets/skills/react/references/forms.md +214 -0
- package/src/assets/skills/react/references/hooks.md +193 -0
- package/src/assets/skills/react/references/patterns.md +1336 -0
- package/src/assets/skills/react/references/sources.md +35 -0
- package/src/assets/skills/react/references/violations.md +570 -0
- package/src/assets/skills/regression/SKILL.md +146 -0
- package/src/assets/skills/reliability/SKILL.md +153 -0
- package/src/assets/skills/reliability/references/detection.md +66 -0
- package/src/assets/skills/reliability/references/patterns.md +151 -0
- package/src/assets/skills/reliability/references/sources.md +27 -0
- package/src/assets/skills/reliability/references/violations.md +125 -0
- package/src/assets/skills/research-codebase/SKILL.md +135 -0
- package/src/assets/skills/research-competitor/SKILL.md +145 -0
- package/src/assets/skills/research-external/SKILL.md +141 -0
- package/src/assets/skills/research-market/SKILL.md +145 -0
- package/src/assets/skills/research-technology/SKILL.md +180 -0
- package/src/assets/skills/review-methodology/SKILL.md +121 -0
- package/src/assets/skills/review-methodology/references/patterns.md +186 -0
- package/src/assets/skills/review-methodology/references/report-template.md +142 -0
- package/src/assets/skills/review-methodology/references/violations.md +125 -0
- package/src/assets/skills/rust/SKILL.md +148 -0
- package/src/assets/skills/rust/references/ownership.md +278 -0
- package/src/assets/skills/rust/references/patterns.md +247 -0
- package/src/assets/skills/rust/references/sources.md +46 -0
- package/src/assets/skills/rust/references/violations.md +252 -0
- package/src/assets/skills/security/SKILL.md +121 -0
- package/src/assets/skills/security/references/patterns.md +271 -0
- package/src/assets/skills/security/references/sources.md +41 -0
- package/src/assets/skills/security/references/violations.md +241 -0
- package/src/assets/skills/software-design/SKILL.md +143 -0
- package/src/assets/skills/software-design/references/checklist.md +259 -0
- package/src/assets/skills/software-design/references/code-smell-violations.md +189 -0
- package/src/assets/skills/software-design/references/patterns.md +359 -0
- package/src/assets/skills/software-design/references/sources.md +41 -0
- package/src/assets/skills/software-design/references/violations.md +341 -0
- package/src/assets/skills/test-driven-development/SKILL.md +197 -0
- package/src/assets/skills/testing/SKILL.md +139 -0
- package/src/assets/skills/testing/references/patterns.md +346 -0
- package/src/assets/skills/testing/references/sources.md +53 -0
- package/src/assets/skills/testing/references/violations.md +322 -0
- package/src/assets/skills/typescript/SKILL.md +150 -0
- package/src/assets/skills/typescript/references/async.md +333 -0
- package/src/assets/skills/typescript/references/patterns.md +440 -0
- package/src/assets/skills/typescript/references/sources.md +41 -0
- package/src/assets/skills/typescript/references/type-guards.md +333 -0
- package/src/assets/skills/typescript/references/utility-types.md +255 -0
- package/src/assets/skills/typescript/references/violations.md +285 -0
- package/src/assets/skills/ui-design/SKILL.md +144 -0
- package/src/assets/skills/ui-design/references/patterns.md +341 -0
- package/src/assets/skills/ui-design/references/sources.md +41 -0
- package/src/assets/skills/ui-design/references/violations.md +312 -0
- package/src/assets/skills/worktree-support/SKILL.md +92 -0
- package/src/targets/claude-code/templates/claudeignore.template +188 -0
- package/src/targets/claude-code/templates/settings.json +86 -0
- package/dist/cli.d.ts +0 -3
- package/dist/commands/ambient.d.ts +0 -18
- package/dist/commands/ambient.js +0 -137
- package/dist/commands/hud.d.ts +0 -22
- package/dist/commands/hud.js +0 -180
- package/dist/commands/init.d.ts +0 -16
- package/dist/commands/init.js +0 -738
- package/dist/commands/list.d.ts +0 -24
- package/dist/commands/list.js +0 -89
- package/dist/commands/memory.d.ts +0 -22
- package/dist/commands/memory.js +0 -175
- package/dist/commands/skills.d.ts +0 -11
- package/dist/commands/skills.js +0 -116
- package/dist/commands/uninstall.d.ts +0 -22
- package/dist/commands/uninstall.js +0 -558
- package/dist/hud/cache.d.ts +0 -14
- package/dist/hud/cache.js +0 -54
- package/dist/hud/colors.d.ts +0 -23
- package/dist/hud/components/config-counts.d.ts +0 -8
- package/dist/hud/components/context-usage.d.ts +0 -8
- package/dist/hud/components/diff-stats.d.ts +0 -3
- package/dist/hud/components/directory.d.ts +0 -3
- package/dist/hud/components/git-ahead-behind.d.ts +0 -3
- package/dist/hud/components/git-branch.d.ts +0 -3
- package/dist/hud/components/model.d.ts +0 -3
- package/dist/hud/components/release-info.d.ts +0 -3
- package/dist/hud/components/session-cost.d.ts +0 -3
- package/dist/hud/components/session-duration.d.ts +0 -3
- package/dist/hud/components/todo-progress.d.ts +0 -3
- package/dist/hud/components/usage-quota.d.ts +0 -3
- package/dist/hud/components/version-badge.d.ts +0 -3
- package/dist/hud/components/worktree-count.d.ts +0 -3
- package/dist/hud/config.d.ts +0 -10
- package/dist/hud/credentials.d.ts +0 -17
- package/dist/hud/credentials.js +0 -99
- package/dist/hud/git.d.ts +0 -7
- package/dist/hud/index.d.ts +0 -2
- package/dist/hud/render.d.ts +0 -7
- package/dist/hud/stdin.d.ts +0 -6
- package/dist/hud/transcript.d.ts +0 -7
- package/dist/hud/types.d.ts +0 -116
- package/dist/hud/usage-api.d.ts +0 -7
- package/dist/hud/usage-api.js +0 -84
- package/dist/plugins.d.ts +0 -46
- package/dist/plugins.js +0 -233
- package/dist/utils/cli.d.ts +0 -5
- package/dist/utils/cli.js +0 -14
- package/dist/utils/git.d.ts +0 -11
- package/dist/utils/git.js +0 -36
- package/dist/utils/installer.d.ts +0 -41
- package/dist/utils/installer.js +0 -195
- package/dist/utils/manifest.d.ts +0 -46
- package/dist/utils/manifest.js +0 -100
- package/dist/utils/paths.d.ts +0 -42
- package/dist/utils/paths.js +0 -106
- package/dist/utils/post-install.d.ts +0 -87
- package/dist/utils/post-install.js +0 -546
- package/dist/utils/safe-delete-install.d.ts +0 -29
- package/dist/utils/safe-delete-install.js +0 -191
- package/dist/utils/safe-delete.d.ts +0 -12
- package/plugins/devflow-accessibility/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-accessibility/skills/accessibility/SKILL.md +0 -229
- package/plugins/devflow-accessibility/skills/accessibility/references/patterns.md +0 -670
- package/plugins/devflow-accessibility/skills/accessibility/references/violations.md +0 -419
- package/plugins/devflow-ambient/.claude-plugin/plugin.json +0 -33
- package/plugins/devflow-ambient/README.md +0 -68
- package/plugins/devflow-ambient/agents/coder.md +0 -135
- package/plugins/devflow-ambient/agents/reviewer.md +0 -165
- package/plugins/devflow-ambient/agents/scrutinizer.md +0 -82
- package/plugins/devflow-ambient/agents/shepherd.md +0 -108
- package/plugins/devflow-ambient/agents/simplifier.md +0 -102
- package/plugins/devflow-ambient/agents/skimmer.md +0 -143
- package/plugins/devflow-ambient/agents/validator.md +0 -86
- package/plugins/devflow-ambient/skills/ambient-router/SKILL.md +0 -145
- package/plugins/devflow-ambient/skills/ambient-router/references/skill-catalog.md +0 -74
- package/plugins/devflow-ambient/skills/debug-orchestration/SKILL.md +0 -69
- package/plugins/devflow-ambient/skills/implementation-orchestration/SKILL.md +0 -92
- package/plugins/devflow-ambient/skills/plan-orchestration/SKILL.md +0 -71
- package/plugins/devflow-audit-claude/.claude-plugin/plugin.json +0 -19
- package/plugins/devflow-audit-claude/README.md +0 -46
- package/plugins/devflow-audit-claude/agents/claude-md-auditor.md +0 -134
- package/plugins/devflow-audit-claude/commands/audit-claude.md +0 -89
- package/plugins/devflow-code-review/.claude-plugin/plugin.json +0 -38
- package/plugins/devflow-code-review/README.md +0 -73
- package/plugins/devflow-code-review/agents/git.md +0 -277
- package/plugins/devflow-code-review/agents/reviewer.md +0 -165
- package/plugins/devflow-code-review/agents/synthesizer.md +0 -211
- package/plugins/devflow-code-review/commands/code-review-teams.md +0 -285
- package/plugins/devflow-code-review/commands/code-review.md +0 -163
- package/plugins/devflow-code-review/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-code-review/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-code-review/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-code-review/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-code-review/skills/architecture-patterns/SKILL.md +0 -153
- package/plugins/devflow-code-review/skills/architecture-patterns/references/patterns.md +0 -873
- package/plugins/devflow-code-review/skills/architecture-patterns/references/violations.md +0 -575
- package/plugins/devflow-code-review/skills/complexity-patterns/SKILL.md +0 -143
- package/plugins/devflow-code-review/skills/consistency-patterns/SKILL.md +0 -140
- package/plugins/devflow-code-review/skills/database-patterns/SKILL.md +0 -134
- package/plugins/devflow-code-review/skills/dependencies-patterns/SKILL.md +0 -141
- package/plugins/devflow-code-review/skills/documentation-patterns/SKILL.md +0 -125
- package/plugins/devflow-code-review/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-code-review/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-code-review/skills/performance-patterns/SKILL.md +0 -154
- package/plugins/devflow-code-review/skills/performance-patterns/references/patterns.md +0 -503
- package/plugins/devflow-code-review/skills/performance-patterns/references/violations.md +0 -354
- package/plugins/devflow-code-review/skills/regression-patterns/SKILL.md +0 -146
- package/plugins/devflow-code-review/skills/review-methodology/SKILL.md +0 -119
- package/plugins/devflow-code-review/skills/review-methodology/references/patterns.md +0 -186
- package/plugins/devflow-code-review/skills/review-methodology/references/report-template.md +0 -142
- package/plugins/devflow-code-review/skills/review-methodology/references/violations.md +0 -125
- package/plugins/devflow-code-review/skills/security-patterns/SKILL.md +0 -156
- package/plugins/devflow-code-review/skills/security-patterns/references/patterns.md +0 -507
- package/plugins/devflow-code-review/skills/security-patterns/references/violations.md +0 -237
- package/plugins/devflow-code-review/skills/test-patterns/SKILL.md +0 -183
- package/plugins/devflow-code-review/skills/test-patterns/references/patterns.md +0 -220
- package/plugins/devflow-code-review/skills/test-patterns/references/violations.md +0 -221
- package/plugins/devflow-core-skills/.claude-plugin/plugin.json +0 -31
- package/plugins/devflow-core-skills/README.md +0 -50
- package/plugins/devflow-core-skills/skills/core-patterns/SKILL.md +0 -162
- package/plugins/devflow-core-skills/skills/core-patterns/references/checklist.md +0 -276
- package/plugins/devflow-core-skills/skills/core-patterns/references/code-smell-violations.md +0 -144
- package/plugins/devflow-core-skills/skills/core-patterns/references/patterns.md +0 -576
- package/plugins/devflow-core-skills/skills/core-patterns/references/violations.md +0 -369
- package/plugins/devflow-core-skills/skills/docs-framework/SKILL.md +0 -143
- package/plugins/devflow-core-skills/skills/docs-framework/references/patterns.md +0 -346
- package/plugins/devflow-core-skills/skills/docs-framework/references/violations.md +0 -221
- package/plugins/devflow-core-skills/skills/git-safety/SKILL.md +0 -122
- package/plugins/devflow-core-skills/skills/git-safety/references/patterns.md +0 -289
- package/plugins/devflow-core-skills/skills/git-safety/references/violations.md +0 -18
- package/plugins/devflow-core-skills/skills/git-workflow/SKILL.md +0 -158
- package/plugins/devflow-core-skills/skills/git-workflow/references/commit-patterns.md +0 -115
- package/plugins/devflow-core-skills/skills/git-workflow/references/commit-violations.md +0 -77
- package/plugins/devflow-core-skills/skills/git-workflow/references/pr-patterns.md +0 -127
- package/plugins/devflow-core-skills/skills/git-workflow/references/pr-violations.md +0 -96
- package/plugins/devflow-core-skills/skills/github-patterns/SKILL.md +0 -153
- package/plugins/devflow-core-skills/skills/github-patterns/references/patterns.md +0 -572
- package/plugins/devflow-core-skills/skills/github-patterns/references/violations.md +0 -298
- package/plugins/devflow-core-skills/skills/input-validation/SKILL.md +0 -148
- package/plugins/devflow-core-skills/skills/input-validation/references/detection.md +0 -283
- package/plugins/devflow-core-skills/skills/input-validation/references/patterns.md +0 -361
- package/plugins/devflow-core-skills/skills/input-validation/references/violations.md +0 -224
- package/plugins/devflow-core-skills/skills/search-first/SKILL.md +0 -133
- package/plugins/devflow-core-skills/skills/search-first/references/evaluation-criteria.md +0 -101
- package/plugins/devflow-core-skills/skills/test-driven-development/SKILL.md +0 -137
- package/plugins/devflow-core-skills/skills/test-patterns/SKILL.md +0 -183
- package/plugins/devflow-core-skills/skills/test-patterns/references/detection.md +0 -149
- package/plugins/devflow-core-skills/skills/test-patterns/references/patterns.md +0 -220
- package/plugins/devflow-core-skills/skills/test-patterns/references/report-template.md +0 -108
- package/plugins/devflow-core-skills/skills/test-patterns/references/violations.md +0 -221
- package/plugins/devflow-debug/.claude-plugin/plugin.json +0 -26
- package/plugins/devflow-debug/README.md +0 -65
- package/plugins/devflow-debug/agents/git.md +0 -277
- package/plugins/devflow-debug/agents/synthesizer.md +0 -211
- package/plugins/devflow-debug/commands/debug-teams.md +0 -245
- package/plugins/devflow-debug/commands/debug.md +0 -174
- package/plugins/devflow-debug/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-debug/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-debug/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-debug/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-debug/skills/git-safety/SKILL.md +0 -122
- package/plugins/devflow-debug/skills/git-safety/references/detection.md +0 -290
- package/plugins/devflow-debug/skills/git-safety/references/patterns.md +0 -289
- package/plugins/devflow-debug/skills/git-safety/references/violations.md +0 -18
- package/plugins/devflow-debug/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-debug/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-frontend-design/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-frontend-design/skills/frontend-design/SKILL.md +0 -254
- package/plugins/devflow-frontend-design/skills/frontend-design/references/patterns.md +0 -511
- package/plugins/devflow-frontend-design/skills/frontend-design/references/violations.md +0 -453
- package/plugins/devflow-go/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-go/skills/go/SKILL.md +0 -187
- package/plugins/devflow-go/skills/go/references/concurrency.md +0 -312
- package/plugins/devflow-go/skills/go/references/patterns.md +0 -232
- package/plugins/devflow-go/skills/go/references/violations.md +0 -205
- package/plugins/devflow-implement/.claude-plugin/plugin.json +0 -35
- package/plugins/devflow-implement/README.md +0 -71
- package/plugins/devflow-implement/agents/coder.md +0 -135
- package/plugins/devflow-implement/agents/git.md +0 -277
- package/plugins/devflow-implement/agents/scrutinizer.md +0 -82
- package/plugins/devflow-implement/agents/shepherd.md +0 -108
- package/plugins/devflow-implement/agents/simplifier.md +0 -102
- package/plugins/devflow-implement/agents/skimmer.md +0 -143
- package/plugins/devflow-implement/agents/synthesizer.md +0 -211
- package/plugins/devflow-implement/agents/validator.md +0 -86
- package/plugins/devflow-implement/commands/implement-teams.md +0 -620
- package/plugins/devflow-implement/commands/implement.md +0 -430
- package/plugins/devflow-implement/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-implement/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-implement/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-implement/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-implement/skills/implementation-patterns/SKILL.md +0 -162
- package/plugins/devflow-implement/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-implement/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-implement/skills/self-review/SKILL.md +0 -149
- package/plugins/devflow-implement/skills/self-review/references/stub-detection.md +0 -135
- package/plugins/devflow-java/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-java/skills/java/SKILL.md +0 -183
- package/plugins/devflow-java/skills/java/references/modern-java.md +0 -270
- package/plugins/devflow-java/skills/java/references/patterns.md +0 -235
- package/plugins/devflow-java/skills/java/references/violations.md +0 -213
- package/plugins/devflow-python/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-python/skills/python/SKILL.md +0 -188
- package/plugins/devflow-python/skills/python/references/async.md +0 -220
- package/plugins/devflow-python/skills/python/references/patterns.md +0 -226
- package/plugins/devflow-python/skills/python/references/violations.md +0 -204
- package/plugins/devflow-react/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-react/skills/react/SKILL.md +0 -276
- package/plugins/devflow-react/skills/react/references/patterns.md +0 -1331
- package/plugins/devflow-react/skills/react/references/violations.md +0 -565
- package/plugins/devflow-resolve/.claude-plugin/plugin.json +0 -29
- package/plugins/devflow-resolve/README.md +0 -65
- package/plugins/devflow-resolve/agents/git.md +0 -277
- package/plugins/devflow-resolve/agents/resolver.md +0 -131
- package/plugins/devflow-resolve/agents/simplifier.md +0 -102
- package/plugins/devflow-resolve/commands/resolve-teams.md +0 -307
- package/plugins/devflow-resolve/commands/resolve.md +0 -246
- package/plugins/devflow-resolve/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-resolve/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-resolve/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-resolve/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-resolve/skills/implementation-patterns/SKILL.md +0 -162
- package/plugins/devflow-resolve/skills/implementation-patterns/references/patterns.md +0 -1063
- package/plugins/devflow-resolve/skills/implementation-patterns/references/violations.md +0 -483
- package/plugins/devflow-resolve/skills/knowledge-persistence/SKILL.md +0 -128
- package/plugins/devflow-resolve/skills/knowledge-persistence/references/examples.md +0 -44
- package/plugins/devflow-resolve/skills/security-patterns/SKILL.md +0 -156
- package/plugins/devflow-resolve/skills/security-patterns/references/detection.md +0 -287
- package/plugins/devflow-resolve/skills/security-patterns/references/patterns.md +0 -507
- package/plugins/devflow-resolve/skills/security-patterns/references/violations.md +0 -237
- package/plugins/devflow-rust/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-rust/skills/rust/SKILL.md +0 -193
- package/plugins/devflow-rust/skills/rust/references/ownership.md +0 -242
- package/plugins/devflow-rust/skills/rust/references/patterns.md +0 -210
- package/plugins/devflow-rust/skills/rust/references/violations.md +0 -191
- package/plugins/devflow-self-review/.claude-plugin/plugin.json +0 -26
- package/plugins/devflow-self-review/README.md +0 -38
- package/plugins/devflow-self-review/agents/scrutinizer.md +0 -82
- package/plugins/devflow-self-review/agents/simplifier.md +0 -102
- package/plugins/devflow-self-review/agents/validator.md +0 -86
- package/plugins/devflow-self-review/commands/self-review.md +0 -132
- package/plugins/devflow-self-review/skills/core-patterns/SKILL.md +0 -162
- package/plugins/devflow-self-review/skills/core-patterns/references/checklist.md +0 -276
- package/plugins/devflow-self-review/skills/core-patterns/references/code-smell-violations.md +0 -144
- package/plugins/devflow-self-review/skills/core-patterns/references/detection.md +0 -303
- package/plugins/devflow-self-review/skills/core-patterns/references/patterns.md +0 -576
- package/plugins/devflow-self-review/skills/core-patterns/references/violations.md +0 -369
- package/plugins/devflow-self-review/skills/self-review/SKILL.md +0 -149
- package/plugins/devflow-self-review/skills/self-review/references/patterns.md +0 -405
- package/plugins/devflow-self-review/skills/self-review/references/report-template.md +0 -253
- package/plugins/devflow-self-review/skills/self-review/references/stub-detection.md +0 -135
- package/plugins/devflow-self-review/skills/self-review/references/violations.md +0 -308
- package/plugins/devflow-specify/.claude-plugin/plugin.json +0 -25
- package/plugins/devflow-specify/README.md +0 -46
- package/plugins/devflow-specify/agents/skimmer.md +0 -143
- package/plugins/devflow-specify/agents/synthesizer.md +0 -211
- package/plugins/devflow-specify/commands/specify-teams.md +0 -321
- package/plugins/devflow-specify/commands/specify.md +0 -186
- package/plugins/devflow-specify/skills/agent-teams/SKILL.md +0 -124
- package/plugins/devflow-specify/skills/agent-teams/references/cleanup.md +0 -104
- package/plugins/devflow-specify/skills/agent-teams/references/communication.md +0 -122
- package/plugins/devflow-specify/skills/agent-teams/references/team-patterns.md +0 -217
- package/plugins/devflow-typescript/.claude-plugin/plugin.json +0 -21
- package/plugins/devflow-typescript/skills/typescript/SKILL.md +0 -176
- package/plugins/devflow-typescript/skills/typescript/references/patterns.md +0 -1105
- package/plugins/devflow-typescript/skills/typescript/references/violations.md +0 -433
- package/scripts/hooks/ambient-prompt +0 -50
- package/scripts/hooks/background-memory-update +0 -257
- package/scripts/hooks/ensure-memory-gitignore +0 -17
- package/scripts/hooks/pre-compact-memory +0 -87
- package/scripts/hooks/run-hook +0 -23
- package/scripts/hooks/session-start-memory +0 -165
- package/scripts/hooks/stop-update-memory +0 -85
- package/scripts/hud/cache.d.ts +0 -14
- package/scripts/hud/cache.d.ts.map +0 -1
- package/scripts/hud/cache.js +0 -54
- package/scripts/hud/cache.js.map +0 -1
- package/scripts/hud/colors.d.ts +0 -23
- package/scripts/hud/colors.d.ts.map +0 -1
- package/scripts/hud/colors.js +0 -62
- package/scripts/hud/colors.js.map +0 -1
- package/scripts/hud/components/config-counts.d.ts +0 -8
- package/scripts/hud/components/config-counts.d.ts.map +0 -1
- package/scripts/hud/components/config-counts.js +0 -91
- package/scripts/hud/components/config-counts.js.map +0 -1
- package/scripts/hud/components/context-usage.d.ts +0 -8
- package/scripts/hud/components/context-usage.d.ts.map +0 -1
- package/scripts/hud/components/context-usage.js +0 -49
- package/scripts/hud/components/context-usage.js.map +0 -1
- package/scripts/hud/components/diff-stats.d.ts +0 -3
- package/scripts/hud/components/diff-stats.d.ts.map +0 -1
- package/scripts/hud/components/diff-stats.js +0 -36
- package/scripts/hud/components/diff-stats.js.map +0 -1
- package/scripts/hud/components/directory.d.ts +0 -3
- package/scripts/hud/components/directory.d.ts.map +0 -1
- package/scripts/hud/components/directory.js +0 -10
- package/scripts/hud/components/directory.js.map +0 -1
- package/scripts/hud/components/git-ahead-behind.d.ts +0 -3
- package/scripts/hud/components/git-ahead-behind.d.ts.map +0 -1
- package/scripts/hud/components/git-ahead-behind.js +0 -16
- package/scripts/hud/components/git-ahead-behind.js.map +0 -1
- package/scripts/hud/components/git-branch.d.ts +0 -3
- package/scripts/hud/components/git-branch.d.ts.map +0 -1
- package/scripts/hud/components/git-branch.js +0 -14
- package/scripts/hud/components/git-branch.js.map +0 -1
- package/scripts/hud/components/model.d.ts +0 -3
- package/scripts/hud/components/model.d.ts.map +0 -1
- package/scripts/hud/components/model.js +0 -21
- package/scripts/hud/components/model.js.map +0 -1
- package/scripts/hud/components/release-info.d.ts +0 -3
- package/scripts/hud/components/release-info.d.ts.map +0 -1
- package/scripts/hud/components/release-info.js +0 -9
- package/scripts/hud/components/release-info.js.map +0 -1
- package/scripts/hud/components/session-cost.d.ts +0 -3
- package/scripts/hud/components/session-cost.d.ts.map +0 -1
- package/scripts/hud/components/session-cost.js +0 -9
- package/scripts/hud/components/session-cost.js.map +0 -1
- package/scripts/hud/components/session-duration.d.ts +0 -3
- package/scripts/hud/components/session-duration.d.ts.map +0 -1
- package/scripts/hud/components/session-duration.js +0 -18
- package/scripts/hud/components/session-duration.js.map +0 -1
- package/scripts/hud/components/todo-progress.d.ts +0 -3
- package/scripts/hud/components/todo-progress.d.ts.map +0 -1
- package/scripts/hud/components/todo-progress.js +0 -11
- package/scripts/hud/components/todo-progress.js.map +0 -1
- package/scripts/hud/components/usage-quota.d.ts +0 -3
- package/scripts/hud/components/usage-quota.d.ts.map +0 -1
- package/scripts/hud/components/usage-quota.js +0 -45
- package/scripts/hud/components/usage-quota.js.map +0 -1
- package/scripts/hud/components/version-badge.d.ts +0 -3
- package/scripts/hud/components/version-badge.d.ts.map +0 -1
- package/scripts/hud/components/version-badge.js +0 -80
- package/scripts/hud/components/version-badge.js.map +0 -1
- package/scripts/hud/components/worktree-count.d.ts +0 -3
- package/scripts/hud/components/worktree-count.d.ts.map +0 -1
- package/scripts/hud/components/worktree-count.js +0 -8
- package/scripts/hud/components/worktree-count.js.map +0 -1
- package/scripts/hud/config.d.ts +0 -10
- package/scripts/hud/config.d.ts.map +0 -1
- package/scripts/hud/config.js +0 -55
- package/scripts/hud/config.js.map +0 -1
- package/scripts/hud/credentials.d.ts +0 -17
- package/scripts/hud/credentials.d.ts.map +0 -1
- package/scripts/hud/credentials.js +0 -99
- package/scripts/hud/credentials.js.map +0 -1
- package/scripts/hud/git.d.ts +0 -7
- package/scripts/hud/git.d.ts.map +0 -1
- package/scripts/hud/git.js +0 -153
- package/scripts/hud/git.js.map +0 -1
- package/scripts/hud/index.d.ts +0 -2
- package/scripts/hud/index.d.ts.map +0 -1
- package/scripts/hud/index.js +0 -81
- package/scripts/hud/index.js.map +0 -1
- package/scripts/hud/render.d.ts +0 -7
- package/scripts/hud/render.d.ts.map +0 -1
- package/scripts/hud/render.js +0 -111
- package/scripts/hud/render.js.map +0 -1
- package/scripts/hud/stdin.d.ts +0 -6
- package/scripts/hud/stdin.d.ts.map +0 -1
- package/scripts/hud/stdin.js +0 -25
- package/scripts/hud/stdin.js.map +0 -1
- package/scripts/hud/transcript.d.ts +0 -7
- package/scripts/hud/transcript.d.ts.map +0 -1
- package/scripts/hud/transcript.js +0 -130
- package/scripts/hud/transcript.js.map +0 -1
- package/scripts/hud/types.d.ts +0 -116
- package/scripts/hud/types.d.ts.map +0 -1
- package/scripts/hud/types.js +0 -2
- package/scripts/hud/types.js.map +0 -1
- package/scripts/hud/usage-api.d.ts +0 -7
- package/scripts/hud/usage-api.d.ts.map +0 -1
- package/scripts/hud/usage-api.js +0 -84
- package/scripts/hud/usage-api.js.map +0 -1
- package/scripts/hud.sh +0 -5
- package/shared/agents/coder.md +0 -135
- package/shared/agents/git.md +0 -277
- package/shared/agents/resolver.md +0 -131
- package/shared/agents/reviewer.md +0 -165
- package/shared/agents/scrutinizer.md +0 -82
- package/shared/agents/shepherd.md +0 -108
- package/shared/agents/simplifier.md +0 -102
- package/shared/agents/skimmer.md +0 -143
- package/shared/agents/synthesizer.md +0 -211
- package/shared/agents/validator.md +0 -86
- package/shared/skills/accessibility/SKILL.md +0 -229
- package/shared/skills/accessibility/references/detection.md +0 -171
- package/shared/skills/accessibility/references/patterns.md +0 -670
- package/shared/skills/accessibility/references/violations.md +0 -419
- package/shared/skills/agent-teams/SKILL.md +0 -124
- package/shared/skills/agent-teams/references/cleanup.md +0 -104
- package/shared/skills/agent-teams/references/communication.md +0 -122
- package/shared/skills/agent-teams/references/team-patterns.md +0 -217
- package/shared/skills/ambient-router/SKILL.md +0 -145
- package/shared/skills/ambient-router/references/skill-catalog.md +0 -74
- package/shared/skills/architecture-patterns/SKILL.md +0 -153
- package/shared/skills/architecture-patterns/references/detection.md +0 -337
- package/shared/skills/architecture-patterns/references/patterns.md +0 -873
- package/shared/skills/architecture-patterns/references/violations.md +0 -575
- package/shared/skills/complexity-patterns/SKILL.md +0 -143
- package/shared/skills/complexity-patterns/references/detection.md +0 -264
- package/shared/skills/complexity-patterns/references/patterns.md +0 -487
- package/shared/skills/complexity-patterns/references/violations.md +0 -361
- package/shared/skills/consistency-patterns/SKILL.md +0 -140
- package/shared/skills/consistency-patterns/references/detection.md +0 -207
- package/shared/skills/consistency-patterns/references/patterns.md +0 -202
- package/shared/skills/consistency-patterns/references/violations.md +0 -213
- package/shared/skills/core-patterns/SKILL.md +0 -162
- package/shared/skills/core-patterns/references/checklist.md +0 -276
- package/shared/skills/core-patterns/references/code-smell-violations.md +0 -144
- package/shared/skills/core-patterns/references/detection.md +0 -303
- package/shared/skills/core-patterns/references/patterns.md +0 -576
- package/shared/skills/core-patterns/references/violations.md +0 -369
- package/shared/skills/database-patterns/SKILL.md +0 -134
- package/shared/skills/database-patterns/references/detection.md +0 -208
- package/shared/skills/database-patterns/references/patterns.md +0 -394
- package/shared/skills/database-patterns/references/violations.md +0 -332
- package/shared/skills/debug-orchestration/SKILL.md +0 -69
- package/shared/skills/dependencies-patterns/SKILL.md +0 -141
- package/shared/skills/dependencies-patterns/references/detection.md +0 -181
- package/shared/skills/dependencies-patterns/references/patterns.md +0 -225
- package/shared/skills/dependencies-patterns/references/violations.md +0 -247
- package/shared/skills/docs-framework/SKILL.md +0 -143
- package/shared/skills/docs-framework/references/patterns.md +0 -346
- package/shared/skills/docs-framework/references/violations.md +0 -221
- package/shared/skills/documentation-patterns/SKILL.md +0 -125
- package/shared/skills/documentation-patterns/references/detection.md +0 -190
- package/shared/skills/documentation-patterns/references/patterns.md +0 -189
- package/shared/skills/documentation-patterns/references/violations.md +0 -163
- package/shared/skills/frontend-design/SKILL.md +0 -254
- package/shared/skills/frontend-design/references/detection.md +0 -184
- package/shared/skills/frontend-design/references/patterns.md +0 -511
- package/shared/skills/frontend-design/references/violations.md +0 -453
- package/shared/skills/git-safety/SKILL.md +0 -122
- package/shared/skills/git-safety/references/detection.md +0 -290
- package/shared/skills/git-safety/references/patterns.md +0 -289
- package/shared/skills/git-safety/references/violations.md +0 -18
- package/shared/skills/git-workflow/SKILL.md +0 -158
- package/shared/skills/git-workflow/references/commit-patterns.md +0 -115
- package/shared/skills/git-workflow/references/commit-violations.md +0 -77
- package/shared/skills/git-workflow/references/pr-patterns.md +0 -127
- package/shared/skills/git-workflow/references/pr-violations.md +0 -96
- package/shared/skills/github-patterns/SKILL.md +0 -153
- package/shared/skills/github-patterns/references/patterns.md +0 -572
- package/shared/skills/github-patterns/references/violations.md +0 -298
- package/shared/skills/go/SKILL.md +0 -187
- package/shared/skills/go/references/concurrency.md +0 -312
- package/shared/skills/go/references/detection.md +0 -129
- package/shared/skills/go/references/patterns.md +0 -232
- package/shared/skills/go/references/violations.md +0 -205
- package/shared/skills/implementation-orchestration/SKILL.md +0 -92
- package/shared/skills/implementation-patterns/SKILL.md +0 -162
- package/shared/skills/implementation-patterns/references/patterns.md +0 -1063
- package/shared/skills/implementation-patterns/references/violations.md +0 -483
- package/shared/skills/input-validation/SKILL.md +0 -148
- package/shared/skills/input-validation/references/detection.md +0 -283
- package/shared/skills/input-validation/references/patterns.md +0 -361
- package/shared/skills/input-validation/references/violations.md +0 -224
- package/shared/skills/java/SKILL.md +0 -183
- package/shared/skills/java/references/detection.md +0 -120
- package/shared/skills/java/references/modern-java.md +0 -270
- package/shared/skills/java/references/patterns.md +0 -235
- package/shared/skills/java/references/violations.md +0 -213
- package/shared/skills/knowledge-persistence/SKILL.md +0 -128
- package/shared/skills/knowledge-persistence/references/examples.md +0 -44
- package/shared/skills/performance-patterns/SKILL.md +0 -154
- package/shared/skills/performance-patterns/references/detection.md +0 -351
- package/shared/skills/performance-patterns/references/patterns.md +0 -503
- package/shared/skills/performance-patterns/references/violations.md +0 -354
- package/shared/skills/plan-orchestration/SKILL.md +0 -71
- package/shared/skills/python/SKILL.md +0 -188
- package/shared/skills/python/references/async.md +0 -220
- package/shared/skills/python/references/detection.md +0 -128
- package/shared/skills/python/references/patterns.md +0 -226
- package/shared/skills/python/references/violations.md +0 -204
- package/shared/skills/react/SKILL.md +0 -276
- package/shared/skills/react/references/patterns.md +0 -1331
- package/shared/skills/react/references/violations.md +0 -565
- package/shared/skills/regression-patterns/SKILL.md +0 -146
- package/shared/skills/regression-patterns/references/detection.md +0 -237
- package/shared/skills/regression-patterns/references/patterns.md +0 -226
- package/shared/skills/regression-patterns/references/violations.md +0 -225
- package/shared/skills/review-methodology/SKILL.md +0 -119
- package/shared/skills/review-methodology/references/patterns.md +0 -186
- package/shared/skills/review-methodology/references/report-template.md +0 -142
- package/shared/skills/review-methodology/references/violations.md +0 -125
- package/shared/skills/rust/SKILL.md +0 -193
- package/shared/skills/rust/references/detection.md +0 -131
- package/shared/skills/rust/references/ownership.md +0 -242
- package/shared/skills/rust/references/patterns.md +0 -210
- package/shared/skills/rust/references/violations.md +0 -191
- package/shared/skills/search-first/SKILL.md +0 -133
- package/shared/skills/search-first/references/evaluation-criteria.md +0 -101
- package/shared/skills/security-patterns/SKILL.md +0 -156
- package/shared/skills/security-patterns/references/detection.md +0 -287
- package/shared/skills/security-patterns/references/patterns.md +0 -507
- package/shared/skills/security-patterns/references/violations.md +0 -237
- package/shared/skills/self-review/SKILL.md +0 -149
- package/shared/skills/self-review/references/patterns.md +0 -405
- package/shared/skills/self-review/references/report-template.md +0 -253
- package/shared/skills/self-review/references/stub-detection.md +0 -135
- package/shared/skills/self-review/references/violations.md +0 -308
- package/shared/skills/test-driven-development/SKILL.md +0 -137
- package/shared/skills/test-driven-development/references/rationalization-prevention.md +0 -111
- package/shared/skills/test-patterns/SKILL.md +0 -183
- package/shared/skills/test-patterns/references/detection.md +0 -149
- package/shared/skills/test-patterns/references/patterns.md +0 -220
- package/shared/skills/test-patterns/references/report-template.md +0 -108
- package/shared/skills/test-patterns/references/violations.md +0 -221
- package/shared/skills/typescript/SKILL.md +0 -176
- package/shared/skills/typescript/references/patterns.md +0 -1105
- package/shared/skills/typescript/references/violations.md +0 -433
- package/src/templates/claudeignore.template +0 -188
- package/src/templates/settings.json +0 -59
- /package/dist/{utils → core}/safe-delete.js +0 -0
- /package/{plugins/devflow-accessibility → src/assets}/skills/accessibility/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/architecture-patterns → src/assets/skills/architecture}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/complexity-patterns → src/assets/skills/complexity}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/complexity-patterns → src/assets/skills/complexity}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/complexity-patterns → src/assets/skills/complexity}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/consistency-patterns → src/assets/skills/consistency}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/consistency-patterns → src/assets/skills/consistency}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/consistency-patterns → src/assets/skills/consistency}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/database-patterns → src/assets/skills/database}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/database-patterns → src/assets/skills/database}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/database-patterns → src/assets/skills/database}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/dependencies-patterns → src/assets/skills/dependencies}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/dependencies-patterns → src/assets/skills/dependencies}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/dependencies-patterns → src/assets/skills/dependencies}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/documentation-patterns → src/assets/skills/documentation}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/documentation-patterns → src/assets/skills/documentation}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/documentation-patterns → src/assets/skills/documentation}/references/violations.md +0 -0
- /package/{plugins/devflow-core-skills/skills/git-safety → src/assets/skills/git}/references/detection.md +0 -0
- /package/{plugins/devflow-go → src/assets}/skills/go/references/detection.md +0 -0
- /package/{plugins/devflow-java → src/assets}/skills/java/references/detection.md +0 -0
- /package/{plugins/devflow-implement/skills/implementation-patterns → src/assets/skills/patterns}/references/patterns.md +0 -0
- /package/{plugins/devflow-implement/skills/implementation-patterns → src/assets/skills/patterns}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/performance-patterns → src/assets/skills/performance}/references/detection.md +0 -0
- /package/{plugins/devflow-python → src/assets}/skills/python/references/detection.md +0 -0
- /package/{plugins/devflow-implement/skills/self-review → src/assets/skills/quality-gates}/references/patterns.md +0 -0
- /package/{plugins/devflow-implement/skills/self-review → src/assets/skills/quality-gates}/references/report-template.md +0 -0
- /package/{plugins/devflow-implement/skills/self-review → src/assets/skills/quality-gates}/references/violations.md +0 -0
- /package/{plugins/devflow-code-review/skills/regression-patterns → src/assets/skills/regression}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/regression-patterns → src/assets/skills/regression}/references/patterns.md +0 -0
- /package/{plugins/devflow-code-review/skills/regression-patterns → src/assets/skills/regression}/references/violations.md +0 -0
- /package/{plugins/devflow-rust → src/assets}/skills/rust/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/security-patterns → src/assets/skills/security}/references/detection.md +0 -0
- /package/{plugins/devflow-core-skills/skills/core-patterns → src/assets/skills/software-design}/references/detection.md +0 -0
- /package/{plugins/devflow-core-skills → src/assets}/skills/test-driven-development/references/rationalization-prevention.md +0 -0
- /package/{plugins/devflow-code-review/skills/test-patterns → src/assets/skills/testing}/references/detection.md +0 -0
- /package/{plugins/devflow-code-review/skills/test-patterns → src/assets/skills/testing}/references/report-template.md +0 -0
- /package/{plugins/devflow-frontend-design/skills/frontend-design → src/assets/skills/ui-design}/references/detection.md +0 -0
- /package/src/{templates → targets/claude-code/templates}/managed-settings.json +0 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
# Async Python Patterns
|
|
2
|
+
|
|
3
|
+
Deep-dive on async Python programming. Reference from main SKILL.md.
|
|
4
|
+
All citations reference `sources.md`.
|
|
5
|
+
|
|
6
|
+
## Core asyncio Patterns [16][1]
|
|
7
|
+
|
|
8
|
+
asyncio implements the Reactor pattern — a single-threaded event loop dispatches
|
|
9
|
+
callbacks when I/O completes [16]. Ramalho's Part V of Fluent Python covers the
|
|
10
|
+
design in depth [1].
|
|
11
|
+
|
|
12
|
+
### Basic Async Function [16]
|
|
13
|
+
|
|
14
|
+
```python
|
|
15
|
+
import asyncio
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
async def fetch_user(user_id: str) -> User:
|
|
19
|
+
async with aiohttp.ClientSession() as session:
|
|
20
|
+
async with session.get(f"/api/users/{user_id}") as response:
|
|
21
|
+
data = await response.json()
|
|
22
|
+
return User.model_validate(data)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Concurrent Execution with gather [16][1]
|
|
26
|
+
|
|
27
|
+
`asyncio.gather` runs independent coroutines concurrently — Ramalho's "spinner"
|
|
28
|
+
example demonstrates that gather returns when ALL tasks complete [1]:
|
|
29
|
+
|
|
30
|
+
```python
|
|
31
|
+
async def load_dashboard(user_id: str) -> Dashboard:
|
|
32
|
+
# Independent fetches run concurrently
|
|
33
|
+
user, orders, preferences = await asyncio.gather(
|
|
34
|
+
fetch_user(user_id),
|
|
35
|
+
fetch_orders(user_id),
|
|
36
|
+
fetch_preferences(user_id),
|
|
37
|
+
)
|
|
38
|
+
return Dashboard(user=user, orders=orders, preferences=preferences)
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Structured Concurrency with TaskGroup [16]
|
|
42
|
+
|
|
43
|
+
### TaskGroup for Safe Concurrency (Python 3.11+) [16]
|
|
44
|
+
|
|
45
|
+
`asyncio.TaskGroup` is the structured concurrency primitive introduced in
|
|
46
|
+
Python 3.11. It cancels all sibling tasks when one raises, preventing leaked
|
|
47
|
+
coroutines [16]:
|
|
48
|
+
|
|
49
|
+
```python
|
|
50
|
+
async def process_batch(items: list[Item]) -> list[Result]:
|
|
51
|
+
results: list[Result] = []
|
|
52
|
+
|
|
53
|
+
async with asyncio.TaskGroup() as tg:
|
|
54
|
+
for item in items:
|
|
55
|
+
tg.create_task(process_and_collect(item, results))
|
|
56
|
+
|
|
57
|
+
return results
|
|
58
|
+
|
|
59
|
+
async def process_and_collect(item: Item, results: list[Result]) -> None:
|
|
60
|
+
result = await process_item(item)
|
|
61
|
+
results.append(result)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Error Handling with TaskGroup [16]
|
|
65
|
+
|
|
66
|
+
TaskGroup cancels all tasks if one raises — wrap individual tasks for per-item
|
|
67
|
+
error collection [16]:
|
|
68
|
+
|
|
69
|
+
```python
|
|
70
|
+
async def resilient_batch(items: list[Item]) -> tuple[list[Result], list[Error]]:
|
|
71
|
+
results: list[Result] = []
|
|
72
|
+
errors: list[Error] = []
|
|
73
|
+
|
|
74
|
+
# TaskGroup cancels all tasks if one raises — wrap individual tasks
|
|
75
|
+
async def safe_process(item: Item) -> None:
|
|
76
|
+
try:
|
|
77
|
+
result = await process_item(item)
|
|
78
|
+
results.append(result)
|
|
79
|
+
except ProcessingError as e:
|
|
80
|
+
errors.append(Error(item_id=item.id, message=str(e)))
|
|
81
|
+
|
|
82
|
+
async with asyncio.TaskGroup() as tg:
|
|
83
|
+
for item in items:
|
|
84
|
+
tg.create_task(safe_process(item))
|
|
85
|
+
|
|
86
|
+
return results, errors
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Async Generators [1][16]
|
|
90
|
+
|
|
91
|
+
Ramalho covers async generators in depth — they enable streaming without loading
|
|
92
|
+
all results into memory [1]:
|
|
93
|
+
|
|
94
|
+
### Streaming Results
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
from typing import AsyncGenerator
|
|
98
|
+
|
|
99
|
+
async def stream_results(query: str, params: tuple = ()) -> AsyncGenerator[Record, None]:
|
|
100
|
+
async with get_connection() as conn:
|
|
101
|
+
cursor = await conn.execute(query, params)
|
|
102
|
+
async for row in cursor:
|
|
103
|
+
yield Record.from_row(row)
|
|
104
|
+
|
|
105
|
+
# Usage
|
|
106
|
+
async for record in stream_results("SELECT * FROM events WHERE type = ?", ("click",)):
|
|
107
|
+
await process(record)
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Async Generator with Cleanup [1]
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
async def paginated_fetch(url: str, page_size: int = 100) -> AsyncGenerator[Item, None]:
|
|
114
|
+
page = 0
|
|
115
|
+
while True:
|
|
116
|
+
response = await fetch_page(url, page=page, size=page_size)
|
|
117
|
+
if not response.items:
|
|
118
|
+
break
|
|
119
|
+
for item in response.items:
|
|
120
|
+
yield item
|
|
121
|
+
page += 1
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Semaphore for Rate Limiting [16][10]
|
|
125
|
+
|
|
126
|
+
asyncio Semaphore provides bounded concurrency — Beazley & Jones Cookbook
|
|
127
|
+
shows this pattern for controlling outbound request volume [10][16]:
|
|
128
|
+
|
|
129
|
+
### Bounded Concurrency
|
|
130
|
+
|
|
131
|
+
```python
|
|
132
|
+
async def fetch_all(urls: list[str], max_concurrent: int = 10) -> list[Response]:
|
|
133
|
+
semaphore = asyncio.Semaphore(max_concurrent)
|
|
134
|
+
|
|
135
|
+
async def bounded_fetch(url: str) -> Response:
|
|
136
|
+
async with semaphore:
|
|
137
|
+
return await fetch(url)
|
|
138
|
+
|
|
139
|
+
return await asyncio.gather(*[bounded_fetch(url) for url in urls])
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## aiohttp Patterns [16]
|
|
143
|
+
|
|
144
|
+
### Client Session Management
|
|
145
|
+
|
|
146
|
+
Session reuse amortizes connection overhead across many requests [16]:
|
|
147
|
+
|
|
148
|
+
```python
|
|
149
|
+
from contextlib import asynccontextmanager
|
|
150
|
+
from typing import AsyncGenerator
|
|
151
|
+
|
|
152
|
+
@asynccontextmanager
|
|
153
|
+
async def api_client(base_url: str) -> AsyncGenerator[aiohttp.ClientSession, None]:
|
|
154
|
+
timeout = aiohttp.ClientTimeout(total=30)
|
|
155
|
+
async with aiohttp.ClientSession(base_url, timeout=timeout) as session:
|
|
156
|
+
yield session
|
|
157
|
+
|
|
158
|
+
# Usage — session reused for multiple requests
|
|
159
|
+
async def sync_users(user_ids: list[str]) -> list[User]:
|
|
160
|
+
async with api_client("https://api.example.com") as client:
|
|
161
|
+
tasks = [fetch_user_with_session(client, uid) for uid in user_ids]
|
|
162
|
+
return await asyncio.gather(*tasks)
|
|
163
|
+
|
|
164
|
+
async def fetch_user_with_session(
|
|
165
|
+
client: aiohttp.ClientSession, user_id: str
|
|
166
|
+
) -> User:
|
|
167
|
+
async with client.get(f"/users/{user_id}") as response:
|
|
168
|
+
response.raise_for_status()
|
|
169
|
+
data = await response.json()
|
|
170
|
+
return User.model_validate(data)
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Timeout Patterns [16]
|
|
174
|
+
|
|
175
|
+
`asyncio.timeout` (Python 3.11+) replaces the `wait_for` pattern for per-operation
|
|
176
|
+
timeouts [16]:
|
|
177
|
+
|
|
178
|
+
### Per-Operation Timeout
|
|
179
|
+
|
|
180
|
+
```python
|
|
181
|
+
async def fetch_with_timeout(url: str, timeout_seconds: float = 5.0) -> dict[str, Any]:
|
|
182
|
+
try:
|
|
183
|
+
async with asyncio.timeout(timeout_seconds):
|
|
184
|
+
return await fetch(url)
|
|
185
|
+
except TimeoutError:
|
|
186
|
+
raise OperationTimeout(f"Request to {url} timed out after {timeout_seconds}s")
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Anti-Patterns
|
|
190
|
+
|
|
191
|
+
### Blocking Calls in Async Code [16][2]
|
|
192
|
+
|
|
193
|
+
Slatkin's Item 62 and asyncio docs both flag synchronous I/O inside async functions
|
|
194
|
+
as blocking the event loop for all other coroutines [2][16]:
|
|
195
|
+
|
|
196
|
+
```python
|
|
197
|
+
# VIOLATION: Blocks the event loop [16]
|
|
198
|
+
async def bad_fetch(url: str) -> str:
|
|
199
|
+
import requests
|
|
200
|
+
return requests.get(url).text # Blocks entire event loop!
|
|
201
|
+
|
|
202
|
+
# CORRECT: Use async library or run in executor [16]
|
|
203
|
+
async def good_fetch(url: str) -> str:
|
|
204
|
+
async with aiohttp.ClientSession() as session:
|
|
205
|
+
async with session.get(url) as response:
|
|
206
|
+
return await response.text()
|
|
207
|
+
|
|
208
|
+
# CORRECT: Offload blocking call to thread pool [16]
|
|
209
|
+
async def run_blocking(func: Callable[..., R], *args: Any) -> R:
|
|
210
|
+
loop = asyncio.get_running_loop()
|
|
211
|
+
return await loop.run_in_executor(None, func, *args)
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Fire-and-Forget Without Error Handling [16][1]
|
|
215
|
+
|
|
216
|
+
Ramalho and asyncio docs both warn that `create_task` without a done callback
|
|
217
|
+
silently discards exceptions [1][16]:
|
|
218
|
+
|
|
219
|
+
```python
|
|
220
|
+
# VIOLATION: Exception silently lost [16]
|
|
221
|
+
async def bad_handler(event: Event) -> None:
|
|
222
|
+
asyncio.create_task(send_notification(event)) # Error vanishes
|
|
223
|
+
|
|
224
|
+
# CORRECT: Track the task and handle errors [16]
|
|
225
|
+
async def good_handler(event: Event) -> None:
|
|
226
|
+
task = asyncio.create_task(send_notification(event))
|
|
227
|
+
task.add_done_callback(handle_task_exception)
|
|
228
|
+
|
|
229
|
+
def handle_task_exception(task: asyncio.Task[Any]) -> None:
|
|
230
|
+
if not task.cancelled() and task.exception() is not None:
|
|
231
|
+
logger.error("Background task failed", exc_info=task.exception())
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Sequential When Parallel Is Safe [16][1]
|
|
235
|
+
|
|
236
|
+
Ramalho's dashboard example (Fluent Python Ch. 21) benchmarks sequential vs
|
|
237
|
+
concurrent fetching — 3 sequential awaits take 3x longer than gather [1]:
|
|
238
|
+
|
|
239
|
+
```python
|
|
240
|
+
# VIOLATION: Unnecessarily sequential — 3x slower [1]
|
|
241
|
+
async def slow_load(user_id: str) -> Dashboard:
|
|
242
|
+
user = await fetch_user(user_id)
|
|
243
|
+
orders = await fetch_orders(user_id)
|
|
244
|
+
prefs = await fetch_preferences(user_id)
|
|
245
|
+
return Dashboard(user=user, orders=orders, preferences=prefs)
|
|
246
|
+
|
|
247
|
+
# CORRECT: Concurrent — ~1x latency [1][16]
|
|
248
|
+
async def fast_load(user_id: str) -> Dashboard:
|
|
249
|
+
user, orders, prefs = await asyncio.gather(
|
|
250
|
+
fetch_user(user_id),
|
|
251
|
+
fetch_orders(user_id),
|
|
252
|
+
fetch_preferences(user_id),
|
|
253
|
+
)
|
|
254
|
+
return Dashboard(user=user, orders=orders, preferences=prefs)
|
|
255
|
+
```
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
# Python Correct Patterns
|
|
2
|
+
|
|
3
|
+
Extended correct patterns for Python development. Reference from main SKILL.md.
|
|
4
|
+
All citations reference `sources.md`.
|
|
5
|
+
|
|
6
|
+
## Dependency Injection [9][1]
|
|
7
|
+
|
|
8
|
+
### Constructor Injection
|
|
9
|
+
|
|
10
|
+
Cosmic Python's repository pattern uses constructor injection for all service
|
|
11
|
+
dependencies [9]. Ramalho notes that Protocol-typed parameters decouple interface
|
|
12
|
+
from implementation [1].
|
|
13
|
+
|
|
14
|
+
```python
|
|
15
|
+
from typing import Protocol
|
|
16
|
+
|
|
17
|
+
class EmailSender(Protocol):
|
|
18
|
+
def send(self, to: str, subject: str, body: str) -> None: ...
|
|
19
|
+
|
|
20
|
+
class UserService:
|
|
21
|
+
def __init__(self, repo: UserRepository, emailer: EmailSender) -> None:
|
|
22
|
+
self._repo = repo
|
|
23
|
+
self._emailer = emailer
|
|
24
|
+
|
|
25
|
+
def create_user(self, request: CreateUserRequest) -> User:
|
|
26
|
+
user = User(name=request.name, email=request.email)
|
|
27
|
+
saved = self._repo.save(user)
|
|
28
|
+
self._emailer.send(user.email, "Welcome", f"Hello {user.name}")
|
|
29
|
+
return saved
|
|
30
|
+
|
|
31
|
+
# Easy to test — inject fakes [13]
|
|
32
|
+
service = UserService(repo=FakeUserRepo(), emailer=FakeEmailSender())
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Factory Functions [9]
|
|
36
|
+
|
|
37
|
+
Cosmic Python recommends a top-level factory (bootstrap module) that wires all
|
|
38
|
+
real dependencies at startup [9]:
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
def create_app(config: AppConfig) -> Flask:
|
|
42
|
+
app = Flask(__name__)
|
|
43
|
+
db = Database(config.database_url)
|
|
44
|
+
cache = RedisCache(config.redis_url)
|
|
45
|
+
user_service = UserService(repo=SqlUserRepo(db), emailer=SmtpSender(config.smtp))
|
|
46
|
+
register_routes(app, user_service)
|
|
47
|
+
return app
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Decorator Patterns [10][1]
|
|
51
|
+
|
|
52
|
+
### Retry Decorator
|
|
53
|
+
|
|
54
|
+
Beazley & Jones Cookbook recipe for retry with exponential backoff [10].
|
|
55
|
+
Uses `ParamSpec` (PEP 612) for preserving callable signatures [1]:
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
import functools
|
|
59
|
+
import time
|
|
60
|
+
from typing import TypeVar, Callable, ParamSpec
|
|
61
|
+
|
|
62
|
+
P = ParamSpec("P")
|
|
63
|
+
R = TypeVar("R")
|
|
64
|
+
|
|
65
|
+
def retry(
|
|
66
|
+
max_attempts: int = 3,
|
|
67
|
+
delay: float = 1.0,
|
|
68
|
+
exceptions: tuple[type[Exception], ...] = (Exception,),
|
|
69
|
+
) -> Callable[[Callable[P, R]], Callable[P, R]]:
|
|
70
|
+
def decorator(func: Callable[P, R]) -> Callable[P, R]:
|
|
71
|
+
@functools.wraps(func)
|
|
72
|
+
def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
|
|
73
|
+
last_error: Exception | None = None
|
|
74
|
+
for attempt in range(max_attempts):
|
|
75
|
+
try:
|
|
76
|
+
return func(*args, **kwargs)
|
|
77
|
+
except exceptions as e:
|
|
78
|
+
last_error = e
|
|
79
|
+
if attempt < max_attempts - 1:
|
|
80
|
+
time.sleep(delay * (2 ** attempt))
|
|
81
|
+
raise last_error # type: ignore[misc]
|
|
82
|
+
return wrapper
|
|
83
|
+
return decorator
|
|
84
|
+
|
|
85
|
+
@retry(max_attempts=3, delay=0.5, exceptions=(ConnectionError, TimeoutError))
|
|
86
|
+
def fetch_data(url: str) -> dict[str, Any]:
|
|
87
|
+
...
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Validation Decorator [12]
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
def validate_input(schema: type[BaseModel]):
|
|
94
|
+
def decorator(func: Callable[P, R]) -> Callable[P, R]:
|
|
95
|
+
@functools.wraps(func)
|
|
96
|
+
def wrapper(*args: P.args, **kwargs: P.kwargs) -> R:
|
|
97
|
+
# Validate first positional arg after self/cls
|
|
98
|
+
data = args[1] if len(args) > 1 else args[0]
|
|
99
|
+
schema.model_validate(data)
|
|
100
|
+
return func(*args, **kwargs)
|
|
101
|
+
return wrapper
|
|
102
|
+
return decorator
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## Context Manager Patterns [10][9]
|
|
106
|
+
|
|
107
|
+
### Database Transaction
|
|
108
|
+
|
|
109
|
+
Unit-of-work pattern from Cosmic Python; transaction wraps the session lifecycle [9].
|
|
110
|
+
Beazley & Jones provide the `@contextmanager` recipe [10]:
|
|
111
|
+
|
|
112
|
+
```python
|
|
113
|
+
from contextlib import contextmanager
|
|
114
|
+
from typing import Generator
|
|
115
|
+
|
|
116
|
+
@contextmanager
|
|
117
|
+
def transaction(session: Session) -> Generator[Session, None, None]:
|
|
118
|
+
try:
|
|
119
|
+
yield session
|
|
120
|
+
session.commit()
|
|
121
|
+
except Exception:
|
|
122
|
+
session.rollback()
|
|
123
|
+
raise
|
|
124
|
+
finally:
|
|
125
|
+
session.close()
|
|
126
|
+
|
|
127
|
+
# Usage
|
|
128
|
+
with transaction(db.session()) as session:
|
|
129
|
+
session.add(user)
|
|
130
|
+
session.add(audit_log)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Temporary Directory [10]
|
|
134
|
+
|
|
135
|
+
```python
|
|
136
|
+
from contextlib import contextmanager
|
|
137
|
+
from pathlib import Path
|
|
138
|
+
import tempfile
|
|
139
|
+
import shutil
|
|
140
|
+
|
|
141
|
+
@contextmanager
|
|
142
|
+
def temp_workspace() -> Generator[Path, None, None]:
|
|
143
|
+
path = Path(tempfile.mkdtemp())
|
|
144
|
+
try:
|
|
145
|
+
yield path
|
|
146
|
+
finally:
|
|
147
|
+
shutil.rmtree(path, ignore_errors=True)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Pytest Fixture Patterns [13][9]
|
|
151
|
+
|
|
152
|
+
### Service Fixtures with DI
|
|
153
|
+
|
|
154
|
+
pytest fixtures compose naturally with the DI pattern from Cosmic Python [9][13]:
|
|
155
|
+
|
|
156
|
+
```python
|
|
157
|
+
import pytest
|
|
158
|
+
|
|
159
|
+
@pytest.fixture
|
|
160
|
+
def fake_repo() -> FakeUserRepo:
|
|
161
|
+
return FakeUserRepo()
|
|
162
|
+
|
|
163
|
+
@pytest.fixture
|
|
164
|
+
def fake_emailer() -> FakeEmailSender:
|
|
165
|
+
return FakeEmailSender()
|
|
166
|
+
|
|
167
|
+
@pytest.fixture
|
|
168
|
+
def user_service(fake_repo: FakeUserRepo, fake_emailer: FakeEmailSender) -> UserService:
|
|
169
|
+
return UserService(repo=fake_repo, emailer=fake_emailer)
|
|
170
|
+
|
|
171
|
+
def test_create_user_sends_welcome_email(
|
|
172
|
+
user_service: UserService,
|
|
173
|
+
fake_emailer: FakeEmailSender,
|
|
174
|
+
) -> None:
|
|
175
|
+
user_service.create_user(CreateUserRequest(name="Alice", email="a@b.com"))
|
|
176
|
+
assert fake_emailer.sent_count == 1
|
|
177
|
+
assert fake_emailer.last_to == "a@b.com"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Parametrized Tests [13]
|
|
181
|
+
|
|
182
|
+
Slatkin's "Effective Python" recommends parametrize for exhaustive edge coverage [2][13]:
|
|
183
|
+
|
|
184
|
+
```python
|
|
185
|
+
@pytest.mark.parametrize(
|
|
186
|
+
"input_age, expected_valid",
|
|
187
|
+
[
|
|
188
|
+
(25, True),
|
|
189
|
+
(0, True),
|
|
190
|
+
(150, True),
|
|
191
|
+
(-1, False),
|
|
192
|
+
(151, False),
|
|
193
|
+
(None, False),
|
|
194
|
+
],
|
|
195
|
+
)
|
|
196
|
+
def test_age_validation(input_age: int | None, expected_valid: bool) -> None:
|
|
197
|
+
result = validate_age(input_age)
|
|
198
|
+
assert result.is_valid == expected_valid
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
## Structured Logging [20]
|
|
202
|
+
|
|
203
|
+
structlog binds context to a logger instance, producing machine-readable JSON [20]:
|
|
204
|
+
|
|
205
|
+
```python
|
|
206
|
+
import structlog
|
|
207
|
+
|
|
208
|
+
logger = structlog.get_logger()
|
|
209
|
+
|
|
210
|
+
def process_order(order: Order) -> OrderResult:
|
|
211
|
+
log = logger.bind(order_id=order.id, user_id=order.user_id)
|
|
212
|
+
log.info("processing_order", item_count=len(order.items))
|
|
213
|
+
|
|
214
|
+
try:
|
|
215
|
+
result = fulfill(order)
|
|
216
|
+
log.info("order_fulfilled", total=result.total)
|
|
217
|
+
return result
|
|
218
|
+
except InsufficientStockError as e:
|
|
219
|
+
log.warning("order_failed_stock", item_id=e.item_id)
|
|
220
|
+
raise
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Enum Patterns [2][24]
|
|
224
|
+
|
|
225
|
+
PEP 634 structural pattern matching works cleanly with Enum [24].
|
|
226
|
+
Slatkin recommends enum state machines with explicit transition tables [2]:
|
|
227
|
+
|
|
228
|
+
```python
|
|
229
|
+
from enum import Enum, auto
|
|
230
|
+
|
|
231
|
+
class OrderStatus(Enum):
|
|
232
|
+
PENDING = auto()
|
|
233
|
+
PROCESSING = auto()
|
|
234
|
+
SHIPPED = auto()
|
|
235
|
+
DELIVERED = auto()
|
|
236
|
+
CANCELLED = auto()
|
|
237
|
+
|
|
238
|
+
@property
|
|
239
|
+
def is_terminal(self) -> bool:
|
|
240
|
+
return self in (OrderStatus.DELIVERED, OrderStatus.CANCELLED)
|
|
241
|
+
|
|
242
|
+
def can_transition_to(self, target: "OrderStatus") -> bool:
|
|
243
|
+
valid = {
|
|
244
|
+
OrderStatus.PENDING: {OrderStatus.PROCESSING, OrderStatus.CANCELLED},
|
|
245
|
+
OrderStatus.PROCESSING: {OrderStatus.SHIPPED, OrderStatus.CANCELLED},
|
|
246
|
+
OrderStatus.SHIPPED: {OrderStatus.DELIVERED},
|
|
247
|
+
}
|
|
248
|
+
return target in valid.get(self, set())
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
## Generic Types [7][4]
|
|
252
|
+
|
|
253
|
+
PEP 695 (Python 3.12) introduces clean generic syntax [7]:
|
|
254
|
+
|
|
255
|
+
```python
|
|
256
|
+
# Before PEP 695
|
|
257
|
+
from typing import TypeVar, Generic
|
|
258
|
+
T = TypeVar("T")
|
|
259
|
+
|
|
260
|
+
class Stack(Generic[T]):
|
|
261
|
+
def push(self, item: T) -> None: ...
|
|
262
|
+
def pop(self) -> T: ...
|
|
263
|
+
|
|
264
|
+
# After PEP 695 (Python 3.12+)
|
|
265
|
+
class Stack[T]:
|
|
266
|
+
def push(self, item: T) -> None: ...
|
|
267
|
+
def pop(self) -> T: ...
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## Protocol vs ABC Decision [5][1][14]
|
|
271
|
+
|
|
272
|
+
Use **Protocol** (structural) when:
|
|
273
|
+
- The implementing class should not be forced to import the interface [5]
|
|
274
|
+
- Third-party classes already satisfy the interface [1]
|
|
275
|
+
- You want duck-typing behavior with static verification [5]
|
|
276
|
+
|
|
277
|
+
Use **ABC** (nominal) when:
|
|
278
|
+
- You need shared implementation via `@abstractmethod` + mixin [1]
|
|
279
|
+
- You need `isinstance()` checks at runtime [14]
|
|
280
|
+
- The interface is coupled to the hierarchy (e.g., plugin system) [9]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Python Skill — Sources
|
|
2
|
+
|
|
3
|
+
## Primary References
|
|
4
|
+
|
|
5
|
+
| # | Source | Author(s) | Year | Access | Topics |
|
|
6
|
+
|---|--------|-----------|------|--------|--------|
|
|
7
|
+
| 1 | "Fluent Python" 2nd Ed | Luciano Ramalho | 2022 | Purchase | Data model, protocols, iterators, async, descriptors |
|
|
8
|
+
| 2 | "Effective Python" 2nd Ed | Brett Slatkin | 2020 | Purchase | 90 items for Pythonic code, type hints, concurrency |
|
|
9
|
+
| 3 | PEP 20: The Zen of Python | Tim Peters | 2004 | [Free](https://peps.python.org/pep-0020/) | Core philosophy — explicit, simple, readable |
|
|
10
|
+
| 4 | PEP 484: Type Hints | van Rossum, Lehtosalo, Langa | 2014 | [Free](https://peps.python.org/pep-0484/) | Type annotation foundation, Optional, Union, generics |
|
|
11
|
+
| 5 | PEP 544: Protocols — Structural subtyping | Levkivskyi, Lehtosalo, van Rossum | 2017 | [Free](https://peps.python.org/pep-0544/) | Structural subtyping, duck typing formalized |
|
|
12
|
+
| 6 | PEP 557: Data Classes | Eric V. Smith | 2017 | [Free](https://peps.python.org/pep-0557/) | Dataclass decorator, frozen, field, default_factory |
|
|
13
|
+
| 7 | PEP 695: Type Parameter Syntax | Python 3.12 | 2023 | [Free](https://peps.python.org/pep-0695/) | Generic syntax `type[T]`, new `type` statement |
|
|
14
|
+
| 8 | Google Python Style Guide | Google | 2024 | [Free](https://google.github.io/styleguide/pyguide.html) | Naming, formatting, imports, docstrings |
|
|
15
|
+
| 9 | "Architecture Patterns with Python" (Cosmic Python) | Percival & Gregory | 2020 | [Free](https://www.cosmicpython.com) | DDD, repository pattern, CQRS, dependency injection |
|
|
16
|
+
| 10 | "Python Cookbook" 3rd Ed | Beazley & Jones | 2013 | Purchase | Advanced recipes, metaprogramming, decorators |
|
|
17
|
+
| 11 | mypy Documentation | mypy-lang.org | 2024 | [Free](https://mypy.readthedocs.io) | Static type checking, strict mode, ignore patterns |
|
|
18
|
+
| 12 | Pydantic Documentation | Samuel Colvin | 2024 | [Free](https://docs.pydantic.dev) | Data validation, model_validate, field validators |
|
|
19
|
+
| 13 | pytest Documentation | pytest.org | 2024 | [Free](https://docs.pytest.org) | Testing framework, fixtures, parametrize, plugins |
|
|
20
|
+
| 14 | "Robust Python" | Patrick Viafore | 2021 | Purchase | Type-driven design, user-defined types, protocols |
|
|
21
|
+
| 15 | PEP 3107: Function Annotations | Collin Winter | 2006 | [Free](https://peps.python.org/pep-3107/) | Annotation syntax origin, `__annotations__` |
|
|
22
|
+
| 16 | asyncio Documentation | Python.org | 2024 | [Free](https://docs.python.org/3/library/asyncio.html) | Event loop, tasks, gather, TaskGroup, timeout |
|
|
23
|
+
| 17 | "Python Type Checking" | Geir Arne Hjelle | 2023 | [Free](https://realpython.com/python-type-checking/) | Type hints tutorial, mypy walkthrough |
|
|
24
|
+
|
|
25
|
+
## Case Studies & Design
|
|
26
|
+
|
|
27
|
+
| # | Source | Author(s) | Year | Access | Topics |
|
|
28
|
+
|---|--------|-----------|------|--------|--------|
|
|
29
|
+
| 18 | Dropbox typing case study | Jukka Lehtosalo | 2018 | [Free](https://dropbox.tech/application/our-journey-to-type-checking-4-million-lines-of-python) | Large-scale typing migration, mypy at Dropbox |
|
|
30
|
+
| 19 | "Making wrong code look wrong" | Joel Spolsky | 2005 | [Free](https://www.joelonsoftware.com/2005/05/11/making-wrong-code-look-wrong/) | Type naming, Hungarian notation to type hints |
|
|
31
|
+
| 20 | structlog Documentation | Hynek Schlawack | 2024 | [Free](https://www.structlog.org) | Structured logging, context binding, processors |
|
|
32
|
+
|
|
33
|
+
## PEP Progression
|
|
34
|
+
|
|
35
|
+
| # | Source | Year | Access | Topics |
|
|
36
|
+
|---|--------|------|--------|--------|
|
|
37
|
+
| 21 | PEP 526: Variable Annotations | 2016 | [Free](https://peps.python.org/pep-0526/) | Class-level and variable annotation syntax |
|
|
38
|
+
| 22 | PEP 563: Postponed Evaluation of Annotations | 2017 | [Free](https://peps.python.org/pep-0563/) | `from __future__ import annotations` — forward refs |
|
|
39
|
+
| 23 | PEP 604: Union Types with `\|` | 2020 | [Free](https://peps.python.org/pep-0604/) | `X \| Y` syntax replacing `Union[X, Y]` |
|
|
40
|
+
| 24 | PEP 634: Structural Pattern Matching | 2020 | [Free](https://peps.python.org/pep-0634/) | `match`/`case` statement, structural patterns |
|
|
41
|
+
| 25 | PEP 673: Self Type | 2021 | [Free](https://peps.python.org/pep-0673/) | `Self` type for methods returning same class |
|