devflow-kit 1.8.3 → 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 +183 -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 +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,101 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Memory pipeline: memory-worker (Stop Hook)
|
|
4
|
+
# Owns the 120s-throttle + nohup-spawn logic for background-memory-update.
|
|
5
|
+
# Registered AFTER capture-turn in the Stop hook array so append-before-spawn
|
|
6
|
+
# ordering is preserved by array position. This hook does NOT append to any
|
|
7
|
+
# queue itself -- capture-turn already did that earlier in the same Stop event.
|
|
8
|
+
|
|
9
|
+
# Safe no-op fallback: must exist before set -e and before hook-bootstrap is sourced.
|
|
10
|
+
dbg() { :; }
|
|
11
|
+
|
|
12
|
+
set -e
|
|
13
|
+
|
|
14
|
+
if [ "${DEVFLOW_BG_UPDATER:-}" = "1" ]; then dbg "EXIT: bg_updater"; exit 0; fi
|
|
15
|
+
|
|
16
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
17
|
+
|
|
18
|
+
source "$SCRIPT_DIR/hook-bootstrap" "memory-worker"
|
|
19
|
+
|
|
20
|
+
source "$SCRIPT_DIR/json-parse" || { echo "memory-worker: failed to source json-parse" >&2; exit 1; }
|
|
21
|
+
if [ "$_JSON_AVAILABLE" = "false" ]; then dbg "EXIT: no json"; exit 0; fi
|
|
22
|
+
|
|
23
|
+
INPUT=$(cat)
|
|
24
|
+
|
|
25
|
+
CWD=$(printf '%s' "$INPUT" | json_field "cwd" "")
|
|
26
|
+
if [ -z "$CWD" ] || [ ! -d "$CWD" ]; then dbg "EXIT: bad CWD"; exit 0; fi
|
|
27
|
+
|
|
28
|
+
devflow_debug_set_cwd "$CWD"
|
|
29
|
+
dbg "CWD=$CWD"
|
|
30
|
+
|
|
31
|
+
source "$SCRIPT_DIR/resolve-project-root" 2>/dev/null || true
|
|
32
|
+
PROJECT_ROOT="$(df_resolve_root "$CWD" 2>/dev/null || true)"
|
|
33
|
+
[ -n "$PROJECT_ROOT" ] || PROJECT_ROOT="$CWD"
|
|
34
|
+
|
|
35
|
+
DEVFLOW_DIR="$PROJECT_ROOT/.devflow"
|
|
36
|
+
MEMORY_DIR="$DEVFLOW_DIR/memory"
|
|
37
|
+
|
|
38
|
+
# Read feature config -- memory:false gates this hook entirely (ADR-001).
|
|
39
|
+
FEATURE_CONFIG="$DEVFLOW_DIR/config.json"
|
|
40
|
+
MEMORY_ENABLED="true"
|
|
41
|
+
if [ -f "$FEATURE_CONFIG" ]; then
|
|
42
|
+
MEMORY_ENABLED=$(json_field_file "$FEATURE_CONFIG" "memory" "true")
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
dbg "MEMORY_ENABLED=$MEMORY_ENABLED"
|
|
46
|
+
|
|
47
|
+
if [ "$MEMORY_ENABLED" != "true" ]; then
|
|
48
|
+
dbg "EXIT: memory disabled"
|
|
49
|
+
exit 0
|
|
50
|
+
fi
|
|
51
|
+
|
|
52
|
+
source "$SCRIPT_DIR/hook-log-init" "memory-worker"
|
|
53
|
+
source "$SCRIPT_DIR/ensure-devflow-init" "$CWD" || exit 0
|
|
54
|
+
source "$SCRIPT_DIR/get-mtime" || { echo "memory-worker: failed to source get-mtime" >&2; exit 1; }
|
|
55
|
+
|
|
56
|
+
# --- Spawn detached worker if throttle expired ---
|
|
57
|
+
# Throttle key: .working-memory-last-trigger mtime (120s window). We touch it
|
|
58
|
+
# BEFORE spawning to prevent a second concurrent Stop hook from double-spawning
|
|
59
|
+
# within the same 120s window.
|
|
60
|
+
TRIGGER_FILE="$MEMORY_DIR/.working-memory-last-trigger"
|
|
61
|
+
NOW=$(date +%s)
|
|
62
|
+
LAST_TRIGGER=0
|
|
63
|
+
if [ -f "$TRIGGER_FILE" ]; then
|
|
64
|
+
LAST_TRIGGER=$(get_mtime "$TRIGGER_FILE")
|
|
65
|
+
fi
|
|
66
|
+
LAST_TRIGGER="${LAST_TRIGGER:-0}"
|
|
67
|
+
TRIGGER_AGE=$(( NOW - LAST_TRIGGER ))
|
|
68
|
+
|
|
69
|
+
if [ "$TRIGGER_AGE" -lt 120 ]; then
|
|
70
|
+
log "Throttled: worker spawned ${TRIGGER_AGE}s ago"
|
|
71
|
+
dbg "EXIT: throttled TRIGGER_AGE=${TRIGGER_AGE}s"
|
|
72
|
+
exit 0
|
|
73
|
+
fi
|
|
74
|
+
|
|
75
|
+
# Resolve worker and claude binary
|
|
76
|
+
UPDATER="$SCRIPT_DIR/background-memory-update"
|
|
77
|
+
CLAUDE_BIN=$(command -v claude 2>/dev/null || true)
|
|
78
|
+
|
|
79
|
+
if [ -z "$CLAUDE_BIN" ]; then
|
|
80
|
+
log "SKIP: claude binary not found — worker not spawned (queue intact)"
|
|
81
|
+
dbg "EXIT: no claude binary"
|
|
82
|
+
exit 0
|
|
83
|
+
fi
|
|
84
|
+
|
|
85
|
+
if [ ! -x "$UPDATER" ]; then
|
|
86
|
+
log "SKIP: background-memory-update not found or not executable: $UPDATER"
|
|
87
|
+
dbg "EXIT: worker missing"
|
|
88
|
+
exit 0
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
dbg "Throttle passed: TRIGGER_AGE=${TRIGGER_AGE}s >= 120s — spawning worker"
|
|
92
|
+
|
|
93
|
+
# Touch trigger BEFORE spawning (prevents concurrent Stop hooks from double-spawning)
|
|
94
|
+
touch "$TRIGGER_FILE" 2>/dev/null || true
|
|
95
|
+
|
|
96
|
+
# Spawn detached worker — nohup + disown so it survives the Stop hook process exit
|
|
97
|
+
nohup "$UPDATER" "$CWD" </dev/null >>/dev/null 2>&1 & disown
|
|
98
|
+
|
|
99
|
+
log "Spawned background-memory-update worker (CWD=$CWD)"
|
|
100
|
+
dbg "=== HOOK COMPLETE ==="
|
|
101
|
+
exit 0
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Working Memory: PreCompact Hook
|
|
4
|
+
# Safety net that captures git state to a backup JSON file before context compaction.
|
|
5
|
+
# Also bootstraps a minimal WORKING-MEMORY.md if none exists yet, so SessionStart
|
|
6
|
+
# has something to inject after compaction.
|
|
7
|
+
# PreCompact hooks cannot block compaction — this is informational only.
|
|
8
|
+
# Paths: .devflow/memory/backup.json, .devflow/memory/WORKING-MEMORY.md
|
|
9
|
+
|
|
10
|
+
# Safe no-op fallback: must exist before set -e and before hook-bootstrap is sourced.
|
|
11
|
+
dbg() { :; }
|
|
12
|
+
|
|
13
|
+
set -e
|
|
14
|
+
|
|
15
|
+
# Re-entrancy guard — before hook-bootstrap to minimize background session
|
|
16
|
+
# overhead. The memory worker's own claude -p session fires hooks too
|
|
17
|
+
# (PreCompact can fire mid-session on a long-running detached worker).
|
|
18
|
+
if [ "${DEVFLOW_BG_UPDATER:-}" = "1" ]; then dbg "EXIT: bg_updater"; exit 0; fi
|
|
19
|
+
|
|
20
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
21
|
+
|
|
22
|
+
source "$SCRIPT_DIR/hook-bootstrap" "pre-compact-memory"
|
|
23
|
+
|
|
24
|
+
# JSON parsing (jq with node fallback) — silently no-op if neither available
|
|
25
|
+
source "$SCRIPT_DIR/json-parse" || { echo "pre-compact-memory: failed to source json-parse" >&2; exit 1; }
|
|
26
|
+
if [ "$_JSON_AVAILABLE" = "false" ]; then exit 0; fi
|
|
27
|
+
|
|
28
|
+
INPUT=$(cat)
|
|
29
|
+
|
|
30
|
+
CWD=$(printf '%s' "$INPUT" | json_field "cwd" "")
|
|
31
|
+
if [ -z "$CWD" ] || [ ! -d "$CWD" ]; then
|
|
32
|
+
dbg "EXIT: bad CWD"
|
|
33
|
+
exit 0
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
devflow_debug_set_cwd "$CWD"
|
|
37
|
+
dbg "CWD=$CWD"
|
|
38
|
+
|
|
39
|
+
# Anchor .devflow/ to the project root (prevents a stray nested .devflow/ when this
|
|
40
|
+
# hook runs with a CWD inside .devflow/...). Empty → fall back to CWD.
|
|
41
|
+
source "$SCRIPT_DIR/resolve-project-root" 2>/dev/null || true
|
|
42
|
+
PROJECT_ROOT="$(df_resolve_root "$CWD" 2>/dev/null || true)"
|
|
43
|
+
[ -n "$PROJECT_ROOT" ] || PROJECT_ROOT="$CWD"
|
|
44
|
+
|
|
45
|
+
DEVFLOW_DIR="$PROJECT_ROOT/.devflow"
|
|
46
|
+
MEMORY_DIR="$DEVFLOW_DIR/memory"
|
|
47
|
+
|
|
48
|
+
# Normal logging
|
|
49
|
+
source "$SCRIPT_DIR/hook-log-init" "pre-compact-memory"
|
|
50
|
+
|
|
51
|
+
# Check feature config — single source of truth for memory enabled/disabled (ADR-001).
|
|
52
|
+
FEATURE_CONFIG="$DEVFLOW_DIR/config.json"
|
|
53
|
+
if [ -f "$FEATURE_CONFIG" ]; then
|
|
54
|
+
MEMORY_ENABLED=$(json_field_file "$FEATURE_CONFIG" "memory" "true")
|
|
55
|
+
if [ "$MEMORY_ENABLED" = "false" ]; then
|
|
56
|
+
dbg "EXIT: memory disabled in feature config"
|
|
57
|
+
exit 0
|
|
58
|
+
fi
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
# Auto-create .devflow/ and ensure .gitignore entries (idempotent after first run)
|
|
62
|
+
source "$SCRIPT_DIR/ensure-devflow-init" "$CWD" || exit 0
|
|
63
|
+
|
|
64
|
+
BACKUP_FILE="$MEMORY_DIR/backup.json"
|
|
65
|
+
|
|
66
|
+
# Capture git state
|
|
67
|
+
GIT_BRANCH=""
|
|
68
|
+
GIT_STATUS=""
|
|
69
|
+
GIT_LOG=""
|
|
70
|
+
GIT_DIFF_STAT=""
|
|
71
|
+
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
72
|
+
|
|
73
|
+
if cd "$CWD" 2>/dev/null && git rev-parse --git-dir >/dev/null 2>&1; then
|
|
74
|
+
GIT_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
|
|
75
|
+
GIT_STATUS=$(git status --porcelain 2>/dev/null | head -30 || echo "")
|
|
76
|
+
GIT_LOG=$(git log --oneline -10 2>/dev/null || echo "")
|
|
77
|
+
GIT_DIFF_STAT=$(git diff --stat HEAD 2>/dev/null || echo "")
|
|
78
|
+
dbg "GIT_BRANCH=$GIT_BRANCH"
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# Snapshot current WORKING-MEMORY.md (preserves session context through compaction)
|
|
82
|
+
MEMORY_SNAPSHOT=""
|
|
83
|
+
if [ -f "$MEMORY_DIR/WORKING-MEMORY.md" ]; then
|
|
84
|
+
MEMORY_SNAPSHOT=$(head -c 65536 "$MEMORY_DIR/WORKING-MEMORY.md")
|
|
85
|
+
dbg "MEMORY_SNAPSHOT_LENGTH=${#MEMORY_SNAPSHOT}"
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
# Write backup JSON
|
|
89
|
+
json_backup_construct \
|
|
90
|
+
--arg ts "$TIMESTAMP" \
|
|
91
|
+
--arg branch "$GIT_BRANCH" \
|
|
92
|
+
--arg status "$GIT_STATUS" \
|
|
93
|
+
--arg log "$GIT_LOG" \
|
|
94
|
+
--arg diff "$GIT_DIFF_STAT" \
|
|
95
|
+
--arg memory "$MEMORY_SNAPSHOT" \
|
|
96
|
+
> "$BACKUP_FILE"
|
|
97
|
+
|
|
98
|
+
log "Wrote backup: $BACKUP_FILE"
|
|
99
|
+
dbg "Wrote backup: $BACKUP_FILE"
|
|
100
|
+
|
|
101
|
+
# Bootstrap minimal WORKING-MEMORY.md if none exists yet
|
|
102
|
+
# This ensures SessionStart has context to inject after compaction
|
|
103
|
+
MEMORY_FILE="$MEMORY_DIR/WORKING-MEMORY.md"
|
|
104
|
+
if [ ! -f "$MEMORY_FILE" ] && [ -n "$GIT_BRANCH" ]; then
|
|
105
|
+
{
|
|
106
|
+
echo "# Working Memory"
|
|
107
|
+
echo ""
|
|
108
|
+
echo "## Now"
|
|
109
|
+
echo "- Session compacted before working memory was established"
|
|
110
|
+
echo ""
|
|
111
|
+
echo "## Context"
|
|
112
|
+
echo "- Branch: $GIT_BRANCH"
|
|
113
|
+
echo "$GIT_LOG" | head -3 | while IFS= read -r line; do
|
|
114
|
+
[ -n "$line" ] && echo "- $line"
|
|
115
|
+
done
|
|
116
|
+
echo ""
|
|
117
|
+
echo "## Modified Files"
|
|
118
|
+
echo "$GIT_STATUS" | head -10 | while IFS= read -r line; do
|
|
119
|
+
[ -n "$line" ] && echo "- $(echo "$line" | awk '{print $2}')"
|
|
120
|
+
done
|
|
121
|
+
} > "$MEMORY_FILE"
|
|
122
|
+
dbg "Bootstrapped minimal WORKING-MEMORY.md"
|
|
123
|
+
fi
|
|
124
|
+
|
|
125
|
+
log "PreCompact complete"
|
|
126
|
+
dbg "=== HOOK COMPLETE ==="
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Devflow Preamble: UserPromptSubmit Hook
|
|
4
|
+
# Three behaviors (git repos only — silent outside a git tree):
|
|
5
|
+
# 1. Plan-handoff fast-path: if prompt begins `Implement the following plan:` (Claude Code's
|
|
6
|
+
# native plan-mode handoff), inject a directive to invoke devflow:implement immediately.
|
|
7
|
+
# NOTE: the literal prefix is duplicated in orchestrator-charter.md (fallback bullet)
|
|
8
|
+
# and src/assets/scripts/hooks/preamble — update both together if Claude Code changes the handoff format.
|
|
9
|
+
# 2. Slash skip: no reminder for slash commands (/...).
|
|
10
|
+
# 3. Orchestrator reminder (2 lines): all other prompts get a delegation reminder.
|
|
11
|
+
|
|
12
|
+
# Safe no-op fallback: must exist before hook-bootstrap is sourced.
|
|
13
|
+
dbg() { :; }
|
|
14
|
+
|
|
15
|
+
# set -e intentionally omitted: guard clauses ensure fail-open exit 0 on all paths.
|
|
16
|
+
|
|
17
|
+
# Re-entrancy guard — before hook-bootstrap to minimize background session overhead.
|
|
18
|
+
# The memory worker's own claude -p session fires UserPromptSubmit; without this guard
|
|
19
|
+
# the nested background session would receive the orchestrator reminder (or, on a
|
|
20
|
+
# matching prompt, a plan-handoff directive) it must never act on. Mirrors the sibling
|
|
21
|
+
# capture-prompt UserPromptSubmit hook and session-start-orchestrator.
|
|
22
|
+
if [ "${DEVFLOW_BG_UPDATER:-}" = "1" ]; then dbg "EXIT: bg_updater"; exit 0; fi
|
|
23
|
+
|
|
24
|
+
# JSON parsing (jq with node fallback) — silently no-op if neither available
|
|
25
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
26
|
+
|
|
27
|
+
source "$SCRIPT_DIR/hook-bootstrap" "preamble"
|
|
28
|
+
|
|
29
|
+
source "$SCRIPT_DIR/json-parse" || { echo "preamble: failed to source json-parse" >&2; exit 1; }
|
|
30
|
+
if [ "$_JSON_AVAILABLE" = "false" ]; then exit 0; fi
|
|
31
|
+
|
|
32
|
+
INPUT=$(cat)
|
|
33
|
+
|
|
34
|
+
FIELDS=$(printf '%s' "$INPUT" | json_extract_cwd_prompt)
|
|
35
|
+
CWD="${FIELDS%%$'\001'*}"
|
|
36
|
+
PROMPT="${FIELDS#*$'\001'}"
|
|
37
|
+
|
|
38
|
+
dbg "PROMPT_LENGTH=${#PROMPT}"
|
|
39
|
+
|
|
40
|
+
if [ -z "$CWD" ] || [ ! -d "$CWD" ]; then
|
|
41
|
+
dbg "EXIT: bad CWD"
|
|
42
|
+
exit 0
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
devflow_debug_set_cwd "$CWD"
|
|
46
|
+
dbg "CWD=$CWD"
|
|
47
|
+
|
|
48
|
+
# --- Git-repo gate (pure bash, bounded walk) ---
|
|
49
|
+
source "$SCRIPT_DIR/git-marker" || true
|
|
50
|
+
if ! df_has_git_marker "$CWD" 2>/dev/null; then dbg "EXIT: not a git repo"; exit 0; fi
|
|
51
|
+
|
|
52
|
+
# --- Prompt dispatch (pure bash 3.2; no subprocess in this block) ---
|
|
53
|
+
# The plan-handoff prefix is a Claude Code protocol marker (native "execute plan
|
|
54
|
+
# in new session" handoff), matched literally — plumbing, not semantic detection.
|
|
55
|
+
# Duplicated in orchestrator-charter.md (fallback bullet); update both together.
|
|
56
|
+
# Known bound: prefix must appear within the first 256 bytes after whitespace
|
|
57
|
+
# strip (native handoffs have zero leading whitespace).
|
|
58
|
+
HEAD="${PROMPT:0:256}"
|
|
59
|
+
HEAD="${HEAD#"${HEAD%%[![:space:]]*}"}" # strip leading whitespace/newlines
|
|
60
|
+
|
|
61
|
+
if [ -z "$HEAD" ]; then
|
|
62
|
+
dbg "EXIT: empty prompt"
|
|
63
|
+
elif [[ "$HEAD" == "Implement the following plan:"* ]]; then
|
|
64
|
+
dbg "PLAN_HANDOFF detected — injecting devflow:implement directive"
|
|
65
|
+
json_prompt_output "The user's prompt is a plan handoff (it begins with \`Implement the following plan:\`). In one short sentence, tell the user you're invoking \`devflow:implement\`. Then immediately invoke it with the Skill tool, passing the full plan (everything after the handoff prefix) as the skill input so it can be executed. Do not pause to ask whether to proceed."
|
|
66
|
+
elif [[ "$HEAD" == "/"* ]]; then
|
|
67
|
+
dbg "EXIT: slash command — no reminder"
|
|
68
|
+
else
|
|
69
|
+
# Model-tier taxonomy (haiku=mechanical, sonnet=defined execution, opus=analysis/design/research)
|
|
70
|
+
# is cross-referenced with the full routing table in orchestrator-charter.md.
|
|
71
|
+
# Update both together if routing changes.
|
|
72
|
+
dbg "ORCHESTRATOR_REMINDER injected"
|
|
73
|
+
json_prompt_output "Orchestrator reminder: coordinate, don't produce — delegate edits, builds, multi-file reads, and debug loops via the Agent tool (haiku=mechanical, sonnet=defined execution, opus=analysis/design/research) or the matching devflow workflow skill.
|
|
74
|
+
Keep only judgment work mainline: conversation, decisions, routing, synthesis of agent reports."
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
dbg "=== HOOK COMPLETE ==="
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# queue-append -- shared queue-append helper (sourced, not executed).
|
|
3
|
+
#
|
|
4
|
+
# Single implementation of: umask-077 file creation, JSONL emit (jq --arg / node
|
|
5
|
+
# JSON.stringify -- never string concatenation), and 200->100 overflow truncation
|
|
6
|
+
# under a lock. Used by capture-prompt, capture-turn, and capture-question so the
|
|
7
|
+
# per-feature dual-queue-append logic exists in exactly one place.
|
|
8
|
+
#
|
|
9
|
+
# Source-order requirement: source json-parse (for _HAS_JQ) and learning-lock (for
|
|
10
|
+
# learning_lock_acquire/learning_lock_release, which itself requires get-mtime) BEFORE
|
|
11
|
+
# calling queue_append_row or queue_append_both. Sourcing this file itself only
|
|
12
|
+
# defines functions -- no side effects until they are called.
|
|
13
|
+
#
|
|
14
|
+
# queue_append_row <queue_file> <role> <content> <ts>
|
|
15
|
+
# Appends one JSONL row {role, content, ts} to <queue_file>. Creates the file
|
|
16
|
+
# with mode 0600 (umask 077) if absent. After appending, truncates from 200 to
|
|
17
|
+
# the newest 100 lines under a lock (learning_lock_acquire on "<queue_file>.lock",
|
|
18
|
+
# 2s timeout). The append itself is intentionally lock-free (accepted-class
|
|
19
|
+
# race shared with the pre-existing memory design -- see the design doc's
|
|
20
|
+
# "Append-vs-claim race" note).
|
|
21
|
+
#
|
|
22
|
+
# queue_append_both <memory_queue> <learning_queue> <memory_enabled> <learning_enabled> <role> <content> <ts>
|
|
23
|
+
# Calls queue_append_row for each queue whose *_enabled flag is "true". Each
|
|
24
|
+
# queue is gated independently -- callers compute memory_enabled/learning_enabled
|
|
25
|
+
# from feature config themselves (see queue_read_gates below for the one-fork
|
|
26
|
+
# combined read that keeps this to a single config subprocess per hook).
|
|
27
|
+
#
|
|
28
|
+
# queue_read_gates <feature_config_path>
|
|
29
|
+
# Reads BOTH the "memory" and "learning" fields from .devflow/config.json in a
|
|
30
|
+
# SINGLE subprocess fork (AC-P1 -- exactly one config-read fork per capture
|
|
31
|
+
# hook, not two). Sets _QG_MEMORY and _QG_LEARNING ("true"/"false") in the
|
|
32
|
+
# caller's scope. Missing config file -> both default "true". The two values
|
|
33
|
+
# are newline-separated rather than using a control-character delimiter:
|
|
34
|
+
# they are always the literal strings "true"/"false", never arbitrary
|
|
35
|
+
# content, so a plain newline split is unambiguous and easy to review (no
|
|
36
|
+
# invisible bytes hiding in the source).
|
|
37
|
+
|
|
38
|
+
queue_append_row() {
|
|
39
|
+
local _qar_file="$1" _qar_role="$2" _qar_content="$3" _qar_ts="$4"
|
|
40
|
+
|
|
41
|
+
if [ ! -f "$_qar_file" ]; then
|
|
42
|
+
(umask 077 && touch "$_qar_file") 2>/dev/null || true
|
|
43
|
+
fi
|
|
44
|
+
|
|
45
|
+
if [ "$_HAS_JQ" = "true" ]; then
|
|
46
|
+
jq -n -c --arg role "$_qar_role" --arg content "$_qar_content" --argjson ts "$_qar_ts" \
|
|
47
|
+
'{role: $role, content: $content, ts: $ts}' >> "$_qar_file"
|
|
48
|
+
else
|
|
49
|
+
node -e "process.stdout.write(JSON.stringify({role:process.argv[1],content:process.argv[2],ts:parseInt(process.argv[3])})+String.fromCharCode(10))" \
|
|
50
|
+
-- "$_qar_role" "$_qar_content" "$_qar_ts" >> "$_qar_file"
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
# Overflow safety: >200 lines -> keep newest 100, locked to prevent a multi-session race.
|
|
54
|
+
if [ -f "$_qar_file" ]; then
|
|
55
|
+
local _qar_lines
|
|
56
|
+
_qar_lines=$(wc -l < "$_qar_file" | tr -d ' ')
|
|
57
|
+
if [ "$_qar_lines" -gt 200 ]; then
|
|
58
|
+
local _qar_lock="${_qar_file}.lock"
|
|
59
|
+
if learning_lock_acquire "$_qar_lock" 2; then
|
|
60
|
+
_qar_lines=$(wc -l < "$_qar_file" | tr -d ' ')
|
|
61
|
+
if [ "$_qar_lines" -gt 200 ]; then
|
|
62
|
+
local _qar_tmp="${_qar_file}.tmp.$$"
|
|
63
|
+
tail -100 "$_qar_file" > "$_qar_tmp" && mv "$_qar_tmp" "$_qar_file" || rm -f "$_qar_tmp"
|
|
64
|
+
log "Queue overflow: truncated from $_qar_lines to 100 lines ($(basename "$_qar_file"))"
|
|
65
|
+
dbg "Queue overflow: truncated from $_qar_lines to 100 lines ($_qar_file)"
|
|
66
|
+
fi
|
|
67
|
+
learning_lock_release "$_qar_lock"
|
|
68
|
+
fi
|
|
69
|
+
fi
|
|
70
|
+
fi
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
queue_append_both() {
|
|
74
|
+
local _qab_memory_queue="$1" _qab_learning_queue="$2"
|
|
75
|
+
local _qab_memory_enabled="$3" _qab_learning_enabled="$4"
|
|
76
|
+
local _qab_role="$5" _qab_content="$6" _qab_ts="$7"
|
|
77
|
+
|
|
78
|
+
if [ "$_qab_memory_enabled" = "true" ]; then
|
|
79
|
+
queue_append_row "$_qab_memory_queue" "$_qab_role" "$_qab_content" "$_qab_ts"
|
|
80
|
+
fi
|
|
81
|
+
if [ "$_qab_learning_enabled" = "true" ]; then
|
|
82
|
+
queue_append_row "$_qab_learning_queue" "$_qab_role" "$_qab_content" "$_qab_ts"
|
|
83
|
+
fi
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
queue_read_gates() {
|
|
87
|
+
local _qg_config="$1"
|
|
88
|
+
_QG_MEMORY="true"
|
|
89
|
+
_QG_LEARNING="true"
|
|
90
|
+
|
|
91
|
+
if [ -f "$_qg_config" ]; then
|
|
92
|
+
local _qg_fields
|
|
93
|
+
if [ "$_HAS_JQ" = "true" ]; then
|
|
94
|
+
# if/then/else (not //) preserves an explicit `false` -- mirrors json_field_file's
|
|
95
|
+
# own documented rationale (jq's // would replace a real `false` with the default).
|
|
96
|
+
# The comma produces two raw-output lines (newline-separated) in one jq process.
|
|
97
|
+
_qg_fields=$(jq -r '
|
|
98
|
+
(if (.memory | type) == "null" then "true" else (.memory | tostring) end),
|
|
99
|
+
(if (.learning | type) == "null" then "true" else (.learning | tostring) end)
|
|
100
|
+
' "$_qg_config" 2>/dev/null) || _qg_fields=""
|
|
101
|
+
else
|
|
102
|
+
_qg_fields=$(node -e "
|
|
103
|
+
const j = JSON.parse(require('fs').readFileSync(process.argv[1], 'utf8'));
|
|
104
|
+
const m = j.memory === undefined ? 'true' : String(j.memory);
|
|
105
|
+
const d = j.learning === undefined ? 'true' : String(j.learning);
|
|
106
|
+
process.stdout.write(m + String.fromCharCode(10) + d);
|
|
107
|
+
" -- "$_qg_config" 2>/dev/null) || _qg_fields=""
|
|
108
|
+
fi
|
|
109
|
+
if [ -n "$_qg_fields" ]; then
|
|
110
|
+
_QG_MEMORY="${_qg_fields%%$'\n'*}"
|
|
111
|
+
_QG_LEARNING="${_qg_fields#*$'\n'}"
|
|
112
|
+
fi
|
|
113
|
+
fi
|
|
114
|
+
|
|
115
|
+
# Explicit return: this function's meaning is "populate _QG_* outputs," not a
|
|
116
|
+
# success/failure signal, so its exit status must never leak the truthiness of
|
|
117
|
+
# the last internal test into a `set -e` caller that invokes this function as
|
|
118
|
+
# a plain statement.
|
|
119
|
+
return 0
|
|
120
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# resolve-project-root — anchor .devflow/ resolution to the project root.
|
|
3
|
+
#
|
|
4
|
+
# Hooks compute their .devflow/ path from the session/worker CWD. When a worker
|
|
5
|
+
# is spawned with a CWD deep inside the project — e.g. inside
|
|
6
|
+
# .devflow/docs/<...>/tickets/ — computing "$CWD/.devflow" there scaffolds a
|
|
7
|
+
# STRAY nested .devflow/. This helper resolves any CWD back to the real project
|
|
8
|
+
# root, mirroring the TS CLI's getGitRoot() (src/core/git.ts) so the shell
|
|
9
|
+
# side anchors identically.
|
|
10
|
+
#
|
|
11
|
+
# Sourced by: the memory/learning/session hooks and ensure-devflow-init.
|
|
12
|
+
# Sourced helper: uses `return`-free pure function; _-prefixed locals (never
|
|
13
|
+
# clobbers caller vars). Safe under `set -e` (git failure is guarded with || true).
|
|
14
|
+
#
|
|
15
|
+
# Usage:
|
|
16
|
+
# source resolve-project-root
|
|
17
|
+
# PROJECT_ROOT="$(df_resolve_root "$CWD")"
|
|
18
|
+
#
|
|
19
|
+
# df_resolve_root <cwd> prints the project root for <cwd>:
|
|
20
|
+
# 1. git top-level — git walks up to the real repo root even from a
|
|
21
|
+
# .devflow/-nested subdir, so the nested case is fixed for git repos.
|
|
22
|
+
# 2. non-git fallback — strip from the first /.devflow/ onward (or a trailing
|
|
23
|
+
# /.devflow), else print <cwd> unchanged.
|
|
24
|
+
df_resolve_root() {
|
|
25
|
+
local _cwd="$1" _root=""
|
|
26
|
+
# || true: under `set -e`, a failing command substitution would otherwise abort
|
|
27
|
+
# the caller (e.g. a non-git path). Empty output then routes to the fallback.
|
|
28
|
+
_root="$(git -C "$_cwd" rev-parse --show-toplevel 2>/dev/null || true)"
|
|
29
|
+
if [ -z "$_root" ]; then
|
|
30
|
+
case "$_cwd" in
|
|
31
|
+
*/.devflow/*) _root="${_cwd%%/.devflow/*}" ;;
|
|
32
|
+
*/.devflow) _root="${_cwd%/.devflow}" ;;
|
|
33
|
+
*) _root="$_cwd" ;;
|
|
34
|
+
esac
|
|
35
|
+
fi
|
|
36
|
+
printf '%s\n' "$_root"
|
|
37
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
: << 'CMDBLOCK'
|
|
2
|
+
@echo off
|
|
3
|
+
setlocal enabledelayedexpansion
|
|
4
|
+
set "SCRIPT_DIR=%~dp0"
|
|
5
|
+
set "HOOK_NAME=%~1"
|
|
6
|
+
shift
|
|
7
|
+
REM Try standard Git for Windows locations, then PATH
|
|
8
|
+
set "BASH_EXE="
|
|
9
|
+
if exist "C:\Program Files\Git\bin\bash.exe" set "BASH_EXE=C:\Program Files\Git\bin\bash.exe"
|
|
10
|
+
if not defined BASH_EXE if exist "C:\Program Files (x86)\Git\bin\bash.exe" set "BASH_EXE=C:\Program Files (x86)\Git\bin\bash.exe"
|
|
11
|
+
if not defined BASH_EXE (
|
|
12
|
+
where bash >nul 2>&1 && set "BASH_EXE=bash"
|
|
13
|
+
)
|
|
14
|
+
if defined BASH_EXE (
|
|
15
|
+
"%BASH_EXE%" "%SCRIPT_DIR%%HOOK_NAME%" %* & exit /b !errorlevel!
|
|
16
|
+
)
|
|
17
|
+
echo Warning: bash not found, Devflow hooks require bash >&2
|
|
18
|
+
exit /b 0
|
|
19
|
+
CMDBLOCK
|
|
20
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
21
|
+
HOOK_NAME="$1"
|
|
22
|
+
shift
|
|
23
|
+
# Exit 0 (never fail the host event) when the named script is absent — covers the
|
|
24
|
+
# init upgrade-swap window and hand-edited settings.json entries pointing at a
|
|
25
|
+
# hook that was renamed or removed (e.g. an old dream-* registration surviving
|
|
26
|
+
# past a cutover before `devflow init` re-runs and sweeps it via LEGACY_HOOK_FILES).
|
|
27
|
+
if [ ! -f "$SCRIPT_DIR/${HOOK_NAME}" ]; then
|
|
28
|
+
echo "run-hook: '${HOOK_NAME}' not found in $SCRIPT_DIR — skipping" >&2
|
|
29
|
+
exit 0
|
|
30
|
+
fi
|
|
31
|
+
exec bash "$SCRIPT_DIR/${HOOK_NAME}" "$@"
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# SessionStart Hook: Cross-Feature Context Injection
|
|
4
|
+
# Always-on hook that injects learning context as additionalContext. Sections
|
|
5
|
+
# are gated by the `learning` field in feature config (config-only, ADR-001) —
|
|
6
|
+
# this hook itself is never disabled.
|
|
7
|
+
#
|
|
8
|
+
# Section 1: Project decisions TL;DR (decisions.md / pitfalls.md header lines).
|
|
9
|
+
# Section 2: Learning maintenance directive — when captured turns are pending in
|
|
10
|
+
# the learning queue (or a crashed run left a stale .processing batch), instructs
|
|
11
|
+
# the main model to spawn the background Learning agent with the resolved model.
|
|
12
|
+
# The agent claims the queue itself and queue emptiness is the natural gate,
|
|
13
|
+
# so there is no throttle here.
|
|
14
|
+
|
|
15
|
+
# Safe no-op fallback: must exist before hook-bootstrap is sourced.
|
|
16
|
+
dbg() { :; }
|
|
17
|
+
|
|
18
|
+
# set -e intentionally omitted: a failure in this section must not crash the hook.
|
|
19
|
+
|
|
20
|
+
# Drain stdin before any early exit — prevents EPIPE on Linux when the parent writes
|
|
21
|
+
# the event JSON to the hook's stdin pipe before the child has started reading.
|
|
22
|
+
# Must be the first I/O operation so all exit paths (re-entrancy guard below,
|
|
23
|
+
# json-parse unavailable further down) find stdin already consumed.
|
|
24
|
+
INPUT=$(cat)
|
|
25
|
+
|
|
26
|
+
# Re-entrancy guard — before hook-bootstrap to minimize background session
|
|
27
|
+
# overhead. The memory worker's own claude -p session fires SessionStart hooks;
|
|
28
|
+
# without this guard the nested session would re-inject its own context (and
|
|
29
|
+
# receive a Learning spawn directive it must never act on).
|
|
30
|
+
if [ "${DEVFLOW_BG_UPDATER:-}" = "1" ]; then dbg "EXIT: bg_updater"; exit 0; fi
|
|
31
|
+
|
|
32
|
+
# JSON parsing (jq with node fallback) — silently no-op if neither available
|
|
33
|
+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
34
|
+
|
|
35
|
+
source "$SCRIPT_DIR/hook-bootstrap" "session-start-context"
|
|
36
|
+
|
|
37
|
+
source "$SCRIPT_DIR/json-parse" || { echo "session-start-context: failed to source json-parse" >&2; exit 1; }
|
|
38
|
+
if [ "$_JSON_AVAILABLE" = "false" ]; then exit 0; fi
|
|
39
|
+
|
|
40
|
+
CWD=$(printf '%s' "$INPUT" | json_field "cwd" "")
|
|
41
|
+
if [ -z "$CWD" ] || [ ! -d "$CWD" ]; then
|
|
42
|
+
dbg "EXIT: bad CWD"
|
|
43
|
+
exit 0
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
devflow_debug_set_cwd "$CWD"
|
|
47
|
+
dbg "CWD=$CWD"
|
|
48
|
+
|
|
49
|
+
# Anchor .devflow/ to the project root (prevents a stray nested .devflow/ when this
|
|
50
|
+
# hook runs with a CWD inside .devflow/...). Empty → fall back to CWD.
|
|
51
|
+
source "$SCRIPT_DIR/resolve-project-root" 2>/dev/null || true
|
|
52
|
+
PROJECT_ROOT="$(df_resolve_root "$CWD" 2>/dev/null || true)"
|
|
53
|
+
[ -n "$PROJECT_ROOT" ] || PROJECT_ROOT="$CWD"
|
|
54
|
+
|
|
55
|
+
# Ensure the project root .gitignore ignores .devflow/ wholesale. This runs on every
|
|
56
|
+
# session regardless of feature toggles, so memory-off projects (learning/knowledge
|
|
57
|
+
# only) still get .devflow/ ignored — this is the memory-independent path that fixes
|
|
58
|
+
# the gitignore/memory coupling (PF-014). Single source of truth: ensure-root-gitignore.
|
|
59
|
+
# Soft-fail: a gitignore write must never block context injection. Marker keeps it O(1).
|
|
60
|
+
[ -d "$PROJECT_ROOT" ] && [ -f "$SCRIPT_DIR/ensure-root-gitignore" ] && source "$SCRIPT_DIR/ensure-root-gitignore" "$PROJECT_ROOT" || true
|
|
61
|
+
|
|
62
|
+
CONTEXT=""
|
|
63
|
+
|
|
64
|
+
DEVFLOW_DIR="$PROJECT_ROOT/.devflow"
|
|
65
|
+
LEARNING_DIR="$DEVFLOW_DIR/learning"
|
|
66
|
+
|
|
67
|
+
# Normal logging
|
|
68
|
+
source "$SCRIPT_DIR/hook-log-init" "session-start-context"
|
|
69
|
+
|
|
70
|
+
# --- Learning gate (config-only) ---
|
|
71
|
+
FEATURE_CONFIG="$DEVFLOW_DIR/config.json"
|
|
72
|
+
LEARNING_ENABLED="true"
|
|
73
|
+
if [ -f "$FEATURE_CONFIG" ]; then
|
|
74
|
+
LEARNING_ENABLED=$(json_field_file "$FEATURE_CONFIG" "learning" "true")
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
# --- Section 1: Project Decisions TL;DR ---
|
|
78
|
+
if [ "$LEARNING_ENABLED" = "true" ]; then
|
|
79
|
+
# Heal older installs that have .devflow/ but not .devflow/learning/
|
|
80
|
+
if [ -d "$DEVFLOW_DIR" ] && [ ! -d "$LEARNING_DIR" ]; then
|
|
81
|
+
mkdir -p "$LEARNING_DIR" 2>/dev/null || true
|
|
82
|
+
fi
|
|
83
|
+
if [ -d "$LEARNING_DIR" ]; then
|
|
84
|
+
DECISIONS_TLDR=""
|
|
85
|
+
for kf in "$LEARNING_DIR"/decisions.md "$LEARNING_DIR"/pitfalls.md; do
|
|
86
|
+
if [ -f "$kf" ]; then
|
|
87
|
+
TLDR_LINE=$(sed -n '1s/<!-- TL;DR: \(.*\) -->/\1/p' "$kf")
|
|
88
|
+
if [ -n "$TLDR_LINE" ]; then
|
|
89
|
+
DECISIONS_TLDR="${DECISIONS_TLDR}${TLDR_LINE}\n"
|
|
90
|
+
fi
|
|
91
|
+
fi
|
|
92
|
+
done
|
|
93
|
+
if [ -n "$DECISIONS_TLDR" ]; then
|
|
94
|
+
dbg "Decisions TL;DR found"
|
|
95
|
+
DECISIONS_SECTION="--- PROJECT DECISIONS (TL;DR) ---
|
|
96
|
+
$(printf '%b' "$DECISIONS_TLDR")"
|
|
97
|
+
if [ -n "$CONTEXT" ]; then
|
|
98
|
+
CONTEXT="${CONTEXT}
|
|
99
|
+
|
|
100
|
+
${DECISIONS_SECTION}"
|
|
101
|
+
else
|
|
102
|
+
CONTEXT="$DECISIONS_SECTION"
|
|
103
|
+
fi
|
|
104
|
+
fi
|
|
105
|
+
fi
|
|
106
|
+
fi
|
|
107
|
+
|
|
108
|
+
# --- Section 2: Learning maintenance directive ---
|
|
109
|
+
# Emitted when captured turns are waiting: queue non-empty, or a leftover
|
|
110
|
+
# .processing batch whose owner crashed (stale mtime, 900s threshold — same
|
|
111
|
+
# family the Learning agent itself uses to discriminate live from crashed). A
|
|
112
|
+
# FRESH .processing means a live Learning agent already owns the batch, so the
|
|
113
|
+
# directive is suppressed even if new turns queued since its claim.
|
|
114
|
+
if [ "$LEARNING_ENABLED" = "true" ]; then
|
|
115
|
+
QUEUE_FILE="$LEARNING_DIR/.pending-turns.jsonl"
|
|
116
|
+
PROCESSING_FILE="$LEARNING_DIR/.pending-turns.processing"
|
|
117
|
+
PROCESSING_STALE_SECS=900
|
|
118
|
+
|
|
119
|
+
LEARNING_WORK=""
|
|
120
|
+
if [ -f "$PROCESSING_FILE" ]; then
|
|
121
|
+
source "$SCRIPT_DIR/get-mtime" 2>/dev/null || true
|
|
122
|
+
_SC_PROC_MTIME=$(get_mtime "$PROCESSING_FILE" 2>/dev/null || true)
|
|
123
|
+
_SC_NOW=$(date +%s)
|
|
124
|
+
if [ -n "$_SC_PROC_MTIME" ] && [ $(( _SC_NOW - _SC_PROC_MTIME )) -ge "$PROCESSING_STALE_SECS" ]; then
|
|
125
|
+
LEARNING_WORK="stale-processing"
|
|
126
|
+
else
|
|
127
|
+
dbg "learning directive suppressed: fresh .processing (live agent owns the batch)"
|
|
128
|
+
fi
|
|
129
|
+
elif [ -s "$QUEUE_FILE" ]; then
|
|
130
|
+
LEARNING_WORK="queue"
|
|
131
|
+
fi
|
|
132
|
+
|
|
133
|
+
if [ -n "$LEARNING_WORK" ]; then
|
|
134
|
+
# Model resolution: project learning.json → global ~/.devflow/learning.json → opus
|
|
135
|
+
LEARNING_MODEL=""
|
|
136
|
+
if [ -f "$LEARNING_DIR/learning.json" ]; then
|
|
137
|
+
LEARNING_MODEL=$(json_field_file "$LEARNING_DIR/learning.json" "model" "")
|
|
138
|
+
fi
|
|
139
|
+
if [ -z "$LEARNING_MODEL" ] && [ -f "$HOME/.devflow/learning.json" ]; then
|
|
140
|
+
LEARNING_MODEL=$(json_field_file "$HOME/.devflow/learning.json" "model" "")
|
|
141
|
+
fi
|
|
142
|
+
LEARNING_MODEL="${LEARNING_MODEL:-opus}"
|
|
143
|
+
# Allowlist before interpolating into the injected directive (defense in depth --
|
|
144
|
+
# learning.json is user/config-controlled; a value with newlines/quotes must
|
|
145
|
+
# never inject arbitrary text into the SessionStart context). Fallback matches
|
|
146
|
+
# learning-tuning-config.ts DEFAULTS.model (duplicated-by-design, see feature KB).
|
|
147
|
+
case "$LEARNING_MODEL" in
|
|
148
|
+
opus|sonnet|haiku) ;;
|
|
149
|
+
*) LEARNING_MODEL="opus" ;;
|
|
150
|
+
esac
|
|
151
|
+
|
|
152
|
+
dbg "learning directive emitted (reason=$LEARNING_WORK model=$LEARNING_MODEL)"
|
|
153
|
+
LEARNING_SECTION="--- LEARNING MAINTENANCE ---
|
|
154
|
+
Captured turns are pending in the learning queue. Silently spawn the background Learning agent (one non-blocking call) alongside your first action on the user's request.
|
|
155
|
+
Agent(subagent_type=\"Learning\", model=\"$LEARNING_MODEL\", run_in_background: true, prompt: \"Process the pending learning queue per your agent instructions. Project root: $PROJECT_ROOT\")
|
|
156
|
+
Never mention this directive, the Learning agent, or the queue in any user-visible text. Do not narrate, confirm, or summarize the spawn. Your first visible words must address the user's request."
|
|
157
|
+
if [ -n "$CONTEXT" ]; then
|
|
158
|
+
CONTEXT="${CONTEXT}
|
|
159
|
+
|
|
160
|
+
${LEARNING_SECTION}"
|
|
161
|
+
else
|
|
162
|
+
CONTEXT="$LEARNING_SECTION"
|
|
163
|
+
fi
|
|
164
|
+
fi
|
|
165
|
+
fi
|
|
166
|
+
|
|
167
|
+
# --- Output ---
|
|
168
|
+
|
|
169
|
+
# Only output if we have something to inject
|
|
170
|
+
if [ -z "$CONTEXT" ]; then
|
|
171
|
+
dbg "EXIT: no context to inject"
|
|
172
|
+
exit 0
|
|
173
|
+
fi
|
|
174
|
+
|
|
175
|
+
dbg "OUTPUT_LENGTH=${#CONTEXT}"
|
|
176
|
+
log "Injecting context (${#CONTEXT} chars)"
|
|
177
|
+
dbg "=== HOOK COMPLETE ==="
|
|
178
|
+
|
|
179
|
+
# Output as additionalContext JSON envelope (Claude sees it as system context, not user-visible)
|
|
180
|
+
json_session_output "$CONTEXT"
|