agileflow 4.0.0-alpha.2 → 4.0.0-alpha.21
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 +51 -0
- package/content/plugins/accessibility/plugin.yaml +14 -0
- package/content/plugins/accessibility/skills/agileflow-accessibility/SKILL.md +392 -0
- package/content/plugins/accessibility/skills/agileflow-accessibility/references/aria-patterns.md +528 -0
- package/content/plugins/accessibility/skills/agileflow-accessibility/references/testing-checklist.md +457 -0
- package/content/plugins/accessibility/skills/agileflow-accessibility/references/wcag-guide.md +683 -0
- package/content/plugins/accessibility/skills/agileflow-accessibility/workflows/audit-page.md +310 -0
- package/content/plugins/accessibility/skills/agileflow-accessibility/workflows/implement-accessible-component.md +479 -0
- package/content/plugins/ads/agents/ads-audit-budget.md +185 -0
- package/content/plugins/ads/agents/ads-audit-compliance.md +171 -0
- package/content/plugins/ads/agents/ads-audit-creative.md +168 -0
- package/content/plugins/ads/agents/ads-audit-google.md +227 -0
- package/content/plugins/ads/agents/ads-audit-meta.md +184 -0
- package/content/plugins/ads/agents/ads-audit-tracking.md +205 -0
- package/content/plugins/ads/agents/ads-consensus.md +410 -0
- package/content/plugins/ads/agents/ads-generate.md +152 -0
- package/content/plugins/ads/agents/ads-performance-tracker.md +212 -0
- package/content/plugins/ads/plugin.yaml +23 -4
- package/content/plugins/ads/skills/agileflow-ads/SKILL.md +218 -0
- package/content/plugins/ads/skills/agileflow-ads/references/ad-copy-formula-guide.md +131 -0
- package/content/plugins/ads/skills/agileflow-ads/references/audience-targeting-guide.md +137 -0
- package/content/plugins/ads/skills/agileflow-ads/references/bid-strategy-guide.md +115 -0
- package/content/plugins/ads/skills/agileflow-ads/references/platform-benchmarks.md +100 -0
- package/content/plugins/ads/skills/agileflow-ads/workflows/audit.md +118 -0
- package/content/plugins/ads/skills/agileflow-ads/workflows/generate.md +84 -0
- package/content/plugins/audit/agents/a11y-analyzer-aria.md +173 -0
- package/content/plugins/audit/agents/a11y-analyzer-forms.md +173 -0
- package/content/plugins/audit/agents/a11y-analyzer-keyboard.md +183 -0
- package/content/plugins/audit/agents/a11y-analyzer-semantic.md +169 -0
- package/content/plugins/audit/agents/a11y-analyzer-visual.md +172 -0
- package/content/plugins/audit/agents/a11y-consensus.md +249 -0
- package/content/plugins/audit/agents/accessibility.md +558 -0
- package/content/plugins/audit/agents/api-quality-analyzer-conventions.md +156 -0
- package/content/plugins/audit/agents/api-quality-analyzer-docs.md +184 -0
- package/content/plugins/audit/agents/api-quality-analyzer-errors.md +191 -0
- package/content/plugins/audit/agents/api-quality-analyzer-pagination.md +179 -0
- package/content/plugins/audit/agents/api-quality-analyzer-versioning.md +150 -0
- package/content/plugins/audit/agents/api-quality-consensus.md +217 -0
- package/content/plugins/audit/agents/api-validator.md +191 -0
- package/content/plugins/audit/agents/arch-analyzer-circular.md +156 -0
- package/content/plugins/audit/agents/arch-analyzer-complexity.md +193 -0
- package/content/plugins/audit/agents/arch-analyzer-coupling.md +152 -0
- package/content/plugins/audit/agents/arch-analyzer-layering.md +160 -0
- package/content/plugins/audit/agents/arch-analyzer-patterns.md +210 -0
- package/content/plugins/audit/agents/arch-consensus.md +228 -0
- package/content/plugins/audit/agents/browser-qa.md +342 -0
- package/content/plugins/audit/agents/code-reviewer.md +298 -0
- package/content/plugins/audit/agents/completeness-analyzer-api.md +199 -0
- package/content/plugins/audit/agents/completeness-analyzer-conditional.md +211 -0
- package/content/plugins/audit/agents/completeness-analyzer-handlers.md +166 -0
- package/content/plugins/audit/agents/completeness-analyzer-imports.md +165 -0
- package/content/plugins/audit/agents/completeness-analyzer-routes.md +190 -0
- package/content/plugins/audit/agents/completeness-analyzer-state.md +196 -0
- package/content/plugins/audit/agents/completeness-analyzer-stubs.md +206 -0
- package/content/plugins/audit/agents/completeness-consensus.md +295 -0
- package/content/plugins/audit/agents/error-analyzer.md +213 -0
- package/content/plugins/audit/agents/flow-analyzer-authorization.md +182 -0
- package/content/plugins/audit/agents/flow-analyzer-discovery.md +174 -0
- package/content/plugins/audit/agents/flow-analyzer-errors.md +186 -0
- package/content/plugins/audit/agents/flow-analyzer-feedback.md +185 -0
- package/content/plugins/audit/agents/flow-analyzer-navigation.md +177 -0
- package/content/plugins/audit/agents/flow-analyzer-persistence.md +193 -0
- package/content/plugins/audit/agents/flow-analyzer-wiring.md +169 -0
- package/content/plugins/audit/agents/flow-consensus.md +237 -0
- package/content/plugins/audit/agents/legal-analyzer-a11y.md +114 -0
- package/content/plugins/audit/agents/legal-analyzer-ai.md +121 -0
- package/content/plugins/audit/agents/legal-analyzer-consumer.md +114 -0
- package/content/plugins/audit/agents/legal-analyzer-content.md +117 -0
- package/content/plugins/audit/agents/legal-analyzer-international.md +119 -0
- package/content/plugins/audit/agents/legal-analyzer-licensing.md +119 -0
- package/content/plugins/audit/agents/legal-analyzer-privacy.md +112 -0
- package/content/plugins/audit/agents/legal-analyzer-security.md +116 -0
- package/content/plugins/audit/agents/legal-analyzer-terms.md +115 -0
- package/content/plugins/audit/agents/legal-consensus.md +250 -0
- package/content/plugins/audit/agents/logic-analyzer-edge.md +179 -0
- package/content/plugins/audit/agents/logic-analyzer-flow.md +264 -0
- package/content/plugins/audit/agents/logic-analyzer-invariant.md +215 -0
- package/content/plugins/audit/agents/logic-analyzer-race.md +280 -0
- package/content/plugins/audit/agents/logic-analyzer-type.md +227 -0
- package/content/plugins/audit/agents/logic-consensus.md +259 -0
- package/content/plugins/audit/agents/perf-analyzer-assets.md +182 -0
- package/content/plugins/audit/agents/perf-analyzer-bundle.md +173 -0
- package/content/plugins/audit/agents/perf-analyzer-caching.md +170 -0
- package/content/plugins/audit/agents/perf-analyzer-compute.md +173 -0
- package/content/plugins/audit/agents/perf-analyzer-memory.md +193 -0
- package/content/plugins/audit/agents/perf-analyzer-network.md +165 -0
- package/content/plugins/audit/agents/perf-analyzer-queries.md +162 -0
- package/content/plugins/audit/agents/perf-analyzer-rendering.md +168 -0
- package/content/plugins/audit/agents/perf-consensus.md +287 -0
- package/content/plugins/audit/agents/qa.md +820 -0
- package/content/plugins/audit/agents/quality-analyzer-comments.md +159 -0
- package/content/plugins/audit/agents/quality-analyzer-duplication.md +184 -0
- package/content/plugins/audit/agents/quality-analyzer-naming.md +160 -0
- package/content/plugins/audit/agents/quality-consensus.md +241 -0
- package/content/plugins/audit/agents/schema-validator.md +473 -0
- package/content/plugins/audit/agents/security-analyzer-api.md +210 -0
- package/content/plugins/audit/agents/security-analyzer-auth.md +169 -0
- package/content/plugins/audit/agents/security-analyzer-authz.md +180 -0
- package/content/plugins/audit/agents/security-analyzer-deps.md +153 -0
- package/content/plugins/audit/agents/security-analyzer-infra.md +184 -0
- package/content/plugins/audit/agents/security-analyzer-injection.md +155 -0
- package/content/plugins/audit/agents/security-analyzer-input.md +201 -0
- package/content/plugins/audit/agents/security-analyzer-secrets.md +183 -0
- package/content/plugins/audit/agents/security-consensus.md +283 -0
- package/content/plugins/audit/agents/test-analyzer-assertions.md +188 -0
- package/content/plugins/audit/agents/test-analyzer-coverage.md +189 -0
- package/content/plugins/audit/agents/test-analyzer-fragility.md +193 -0
- package/content/plugins/audit/agents/test-analyzer-integration.md +161 -0
- package/content/plugins/audit/agents/test-analyzer-maintenance.md +180 -0
- package/content/plugins/audit/agents/test-analyzer-mocking.md +188 -0
- package/content/plugins/audit/agents/test-analyzer-patterns.md +196 -0
- package/content/plugins/audit/agents/test-analyzer-structure.md +184 -0
- package/content/plugins/audit/agents/test-consensus.md +301 -0
- package/content/plugins/audit/agents/testing.md +561 -0
- package/content/plugins/audit/agents/ui-validator.md +344 -0
- package/content/plugins/audit/plugin.yaml +186 -5
- package/content/plugins/audit/skills/agileflow-audit/SKILL.md +113 -0
- package/content/plugins/audit/skills/agileflow-audit/references/audit-depth-guide.md +151 -0
- package/content/plugins/audit/skills/agileflow-audit/references/dependency-risk-guide.md +139 -0
- package/content/plugins/audit/skills/agileflow-audit/references/owasp-top10.md +120 -0
- package/content/plugins/audit/skills/agileflow-audit/references/performance-budget-guide.md +143 -0
- package/content/plugins/audit/skills/agileflow-audit/references/wcag-criteria.md +117 -0
- package/content/plugins/audit/skills/agileflow-audit/workflows/run-audit.md +52 -0
- package/content/plugins/audit/skills/agileflow-audit/workflows/tdd.md +66 -0
- package/content/plugins/core/agents/adr-writer.md +521 -0
- package/content/plugins/core/agents/epic-planner.md +520 -0
- package/content/plugins/core/agents/mentor.md +709 -0
- package/content/plugins/core/agents/orchestrator.md +776 -0
- package/content/plugins/core/agents/team-coordinator.md +334 -0
- package/content/plugins/core/agents/team-lead.md +181 -0
- package/content/plugins/core/agents/workspace-orchestrator.md +146 -0
- package/content/plugins/core/hooks/context-loader.js +31 -4
- package/content/plugins/core/hooks/damage-control-bash.js +10 -2
- package/content/plugins/core/hooks/damage-control-edit.js +4 -1
- package/content/plugins/core/hooks/damage-control-patterns.yaml +1 -1
- package/content/plugins/core/hooks/damage-control-write.js +4 -1
- package/content/plugins/core/hooks/{pre-compact-state.js → post-compact-state.js} +25 -8
- package/content/plugins/core/hooks/preferences-injector.js +352 -0
- package/content/plugins/core/plugin.yaml +24 -28
- package/content/plugins/core/skills/agileflow-adr/SKILL.md +34 -8
- package/content/plugins/core/skills/agileflow-adr/references/madr-format-guide.md +86 -0
- package/content/plugins/core/skills/agileflow-adr/workflows/write-adr.md +57 -0
- package/content/plugins/core/skills/agileflow-babysit-mentor/SKILL.md +94 -27
- package/content/plugins/core/skills/agileflow-babysit-mentor/references/mentor-decision-guide.md +81 -0
- package/content/plugins/core/skills/agileflow-babysit-mentor/workflows/mentor-session.md +79 -0
- package/content/plugins/core/skills/agileflow-epic-planner/SKILL.md +37 -7
- package/content/plugins/core/skills/agileflow-epic-planner/references/epic-sizing-guide.md +81 -0
- package/content/plugins/core/skills/agileflow-epic-planner/workflows/plan-epic.md +55 -0
- package/content/plugins/core/skills/agileflow-status-updater/SKILL.md +36 -20
- package/content/plugins/core/skills/agileflow-status-updater/references/status-transitions.md +89 -0
- package/content/plugins/core/skills/agileflow-status-updater/workflows/update-status.md +56 -0
- package/content/plugins/core/skills/agileflow-story-writer/SKILL.md +39 -114
- package/content/plugins/core/skills/agileflow-story-writer/references/estimation-reference.md +36 -0
- package/content/plugins/core/skills/agileflow-story-writer/references/story-template.md +92 -0
- package/content/plugins/core/skills/agileflow-story-writer/workflows/write-story.md +138 -0
- package/content/plugins/council/agents/council-advocate.md +223 -0
- package/content/plugins/council/agents/council-analyst.md +278 -0
- package/content/plugins/council/agents/council-compounder.md +204 -0
- package/content/plugins/council/agents/council-contrarian.md +217 -0
- package/content/plugins/council/agents/council-moonshot.md +217 -0
- package/content/plugins/council/agents/council-optimist.md +185 -0
- package/content/plugins/council/agents/council-revenue.md +200 -0
- package/content/plugins/council/agents/council-technical.md +218 -0
- package/content/plugins/council/agents/multi-expert.md +334 -0
- package/content/plugins/council/plugin.yaml +23 -4
- package/content/plugins/council/skills/agileflow-council/SKILL.md +102 -0
- package/content/plugins/council/skills/agileflow-council/references/decision-log-template.md +109 -0
- package/content/plugins/council/skills/agileflow-council/references/perspective-guide.md +104 -0
- package/content/plugins/council/skills/agileflow-council/references/when-to-convene-guide.md +112 -0
- package/content/plugins/council/skills/agileflow-council/workflows/convene.md +73 -0
- package/content/plugins/council/skills/agileflow-council/workflows/multi-expert.md +75 -0
- package/content/plugins/database/plugin.yaml +14 -0
- package/content/plugins/database/skills/agileflow-database/SKILL.md +284 -0
- package/content/plugins/database/skills/agileflow-database/references/indexing-guide.md +313 -0
- package/content/plugins/database/skills/agileflow-database/references/migration-guide.md +328 -0
- package/content/plugins/database/skills/agileflow-database/references/schema-design-guide.md +467 -0
- package/content/plugins/database/skills/agileflow-database/workflows/design-schema.md +213 -0
- package/content/plugins/database/skills/agileflow-database/workflows/optimize-query.md +253 -0
- package/content/plugins/debugging/plugin.yaml +14 -0
- package/content/plugins/debugging/skills/agileflow-debug/SKILL.md +236 -0
- package/content/plugins/debugging/skills/agileflow-debug/references/common-patterns.md +350 -0
- package/content/plugins/debugging/skills/agileflow-debug/references/debugging-strategies.md +328 -0
- package/content/plugins/debugging/skills/agileflow-debug/workflows/debug-issue.md +187 -0
- package/content/plugins/debugging/skills/agileflow-debug/workflows/reproduce-bug.md +194 -0
- package/content/plugins/delivery/agents/ci.md +547 -0
- package/content/plugins/delivery/agents/devops.md +789 -0
- package/content/plugins/delivery/plugin.yaml +19 -0
- package/content/plugins/delivery/skills/agileflow-delivery/SKILL.md +111 -0
- package/content/plugins/delivery/skills/agileflow-delivery/references/changelog-format-guide.md +133 -0
- package/content/plugins/delivery/skills/agileflow-delivery/references/ci-pipeline-guide.md +158 -0
- package/content/plugins/delivery/skills/agileflow-delivery/references/pr-checklist-guide.md +133 -0
- package/content/plugins/delivery/skills/agileflow-delivery/references/release-checklist.md +142 -0
- package/content/plugins/delivery/skills/agileflow-delivery/workflows/changelog.md +72 -0
- package/content/plugins/delivery/skills/agileflow-delivery/workflows/deploy.md +74 -0
- package/content/plugins/delivery/skills/agileflow-delivery/workflows/pr.md +75 -0
- package/content/plugins/docs/agents/documentation.md +544 -0
- package/content/plugins/docs/agents/readme-updater.md +640 -0
- package/content/plugins/docs/plugin.yaml +19 -0
- package/content/plugins/docs/skills/agileflow-docs/SKILL.md +106 -0
- package/content/plugins/docs/skills/agileflow-docs/references/api-doc-template.md +167 -0
- package/content/plugins/docs/skills/agileflow-docs/references/doc-types-guide.md +141 -0
- package/content/plugins/docs/skills/agileflow-docs/references/readme-template.md +156 -0
- package/content/plugins/docs/skills/agileflow-docs/workflows/readme-sync.md +57 -0
- package/content/plugins/docs/skills/agileflow-docs/workflows/sync.md +64 -0
- package/content/plugins/engineering/agents/api.md +718 -0
- package/content/plugins/engineering/agents/codebase-query.md +285 -0
- package/content/plugins/engineering/agents/compliance.md +559 -0
- package/content/plugins/engineering/agents/database.md +644 -0
- package/content/plugins/engineering/agents/integrations.md +644 -0
- package/content/plugins/engineering/agents/mobile.md +552 -0
- package/content/plugins/engineering/agents/monitoring.md +585 -0
- package/content/plugins/engineering/agents/performance.md +529 -0
- package/content/plugins/engineering/agents/refactor.md +592 -0
- package/content/plugins/engineering/agents/security.md +524 -0
- package/content/plugins/engineering/agents/ui.md +1336 -0
- package/content/plugins/engineering/plugin.yaml +37 -0
- package/content/plugins/engineering/skills/agileflow-engineering/SKILL.md +127 -0
- package/content/plugins/engineering/skills/agileflow-engineering/references/code-review-guide.md +126 -0
- package/content/plugins/engineering/skills/agileflow-engineering/references/domain-routing-guide.md +89 -0
- package/content/plugins/engineering/skills/agileflow-engineering/references/refactoring-guide.md +136 -0
- package/content/plugins/engineering/skills/agileflow-engineering/workflows/diagnose.md +63 -0
- package/content/plugins/engineering/skills/agileflow-engineering/workflows/impact.md +60 -0
- package/content/plugins/ideation/agents/brainstorm-analyzer-features.md +179 -0
- package/content/plugins/ideation/agents/brainstorm-analyzer-growth.md +169 -0
- package/content/plugins/ideation/agents/brainstorm-analyzer-integration.md +181 -0
- package/content/plugins/ideation/agents/brainstorm-analyzer-market.md +150 -0
- package/content/plugins/ideation/agents/brainstorm-analyzer-ux.md +180 -0
- package/content/plugins/ideation/agents/brainstorm-consensus.md +245 -0
- package/content/plugins/ideation/agents/design.md +568 -0
- package/content/plugins/ideation/agents/product.md +582 -0
- package/content/plugins/ideation/plugin.yaml +31 -0
- package/content/plugins/ideation/skills/agileflow-ideation/SKILL.md +109 -0
- package/content/plugins/ideation/skills/agileflow-ideation/references/brainstorm-techniques.md +138 -0
- package/content/plugins/ideation/skills/agileflow-ideation/references/competitive-analysis-template.md +148 -0
- package/content/plugins/ideation/skills/agileflow-ideation/references/feature-prioritization-guide.md +147 -0
- package/content/plugins/ideation/skills/agileflow-ideation/references/user-story-patterns.md +152 -0
- package/content/plugins/ideation/skills/agileflow-ideation/workflows/features.md +65 -0
- package/content/plugins/ideation/skills/agileflow-ideation/workflows/ideate.md +54 -0
- package/content/plugins/migration/agents/datamigration.md +757 -0
- package/content/plugins/migration/plugin.yaml +17 -0
- package/content/plugins/migration/skills/agileflow-migration/SKILL.md +106 -0
- package/content/plugins/migration/skills/agileflow-migration/references/data-validation-checklist.md +154 -0
- package/content/plugins/migration/skills/agileflow-migration/references/migration-patterns.md +209 -0
- package/content/plugins/migration/skills/agileflow-migration/references/rollback-playbook.md +171 -0
- package/content/plugins/migration/skills/agileflow-migration/references/version-compatibility-matrix.md +155 -0
- package/content/plugins/migration/skills/agileflow-migration/workflows/plan.md +73 -0
- package/content/plugins/migration/skills/agileflow-migration/workflows/validate.md +71 -0
- package/content/plugins/performance/plugin.yaml +14 -0
- package/content/plugins/performance/skills/agileflow-performance/SKILL.md +224 -0
- package/content/plugins/performance/skills/agileflow-performance/references/optimization-patterns.md +554 -0
- package/content/plugins/performance/skills/agileflow-performance/references/profiling-guide.md +383 -0
- package/content/plugins/performance/skills/agileflow-performance/references/web-vitals-guide.md +360 -0
- package/content/plugins/performance/skills/agileflow-performance/workflows/improve-web-vitals.md +344 -0
- package/content/plugins/performance/skills/agileflow-performance/workflows/profile-and-fix.md +254 -0
- package/content/plugins/planning/agents/analytics.md +670 -0
- package/content/plugins/planning/agents/rlm-subcore.md +215 -0
- package/content/plugins/planning/plugin.yaml +19 -0
- package/content/plugins/planning/skills/agileflow-planning/SKILL.md +111 -0
- package/content/plugins/planning/skills/agileflow-planning/references/estimation-guide.md +114 -0
- package/content/plugins/planning/skills/agileflow-planning/references/rpi-workflow.md +119 -0
- package/content/plugins/planning/skills/agileflow-planning/references/sprint-planning-guide.md +145 -0
- package/content/plugins/planning/skills/agileflow-planning/workflows/impact.md +63 -0
- package/content/plugins/planning/skills/agileflow-planning/workflows/rpi.md +104 -0
- package/content/plugins/psychology/plugin.yaml +14 -0
- package/content/plugins/psychology/skills/agileflow-retention/SKILL.md +252 -0
- package/content/plugins/psychology/skills/agileflow-retention/references/competitor-analysis.md +240 -0
- package/content/plugins/psychology/skills/agileflow-retention/references/psychology-models.md +349 -0
- package/content/plugins/psychology/skills/agileflow-retention/references/retention-patterns.md +279 -0
- package/content/plugins/psychology/skills/agileflow-retention/workflows/design-retention-feature.md +287 -0
- package/content/plugins/psychology/skills/agileflow-retention/workflows/retention-audit.md +259 -0
- package/content/plugins/refactoring/plugin.yaml +14 -0
- package/content/plugins/refactoring/skills/agileflow-refactor/SKILL.md +235 -0
- package/content/plugins/refactoring/skills/agileflow-refactor/references/refactoring-patterns.md +405 -0
- package/content/plugins/refactoring/skills/agileflow-refactor/references/safety-checks.md +177 -0
- package/content/plugins/refactoring/skills/agileflow-refactor/workflows/extract-module.md +226 -0
- package/content/plugins/refactoring/skills/agileflow-refactor/workflows/safe-refactor.md +169 -0
- package/content/plugins/research/agents/research.md +503 -0
- package/content/plugins/research/plugin.yaml +17 -0
- package/content/plugins/research/skills/agileflow-research/SKILL.md +110 -0
- package/content/plugins/research/skills/agileflow-research/references/knowledge-decay-guide.md +121 -0
- package/content/plugins/research/skills/agileflow-research/references/research-prompt-guide.md +141 -0
- package/content/plugins/research/skills/agileflow-research/references/synthesis-template.md +154 -0
- package/content/plugins/research/skills/agileflow-research/workflows/analyze.md +60 -0
- package/content/plugins/research/skills/agileflow-research/workflows/ask.md +64 -0
- package/content/plugins/research/skills/agileflow-research/workflows/import.md +66 -0
- package/content/plugins/research/skills/agileflow-research/workflows/synthesize.md +66 -0
- package/content/plugins/reviews/plugin.yaml +14 -0
- package/content/plugins/reviews/skills/agileflow-pr-reviewer/SKILL.md +241 -0
- package/content/plugins/reviews/skills/agileflow-pr-reviewer/references/review-checklist.md +200 -0
- package/content/plugins/reviews/skills/agileflow-pr-reviewer/references/security-patterns.md +328 -0
- package/content/plugins/reviews/skills/agileflow-pr-reviewer/workflows/review-pr.md +153 -0
- package/content/plugins/reviews/skills/agileflow-pr-reviewer/workflows/security-review.md +177 -0
- package/content/plugins/seo/agents/seo-analyzer-content.md +169 -0
- package/content/plugins/seo/agents/seo-analyzer-images.md +198 -0
- package/content/plugins/seo/agents/seo-analyzer-performance.md +217 -0
- package/content/plugins/seo/agents/seo-analyzer-schema.md +184 -0
- package/content/plugins/seo/agents/seo-analyzer-sitemap.md +177 -0
- package/content/plugins/seo/agents/seo-analyzer-technical.md +151 -0
- package/content/plugins/seo/agents/seo-consensus.md +304 -0
- package/content/plugins/seo/plugin.yaml +19 -4
- package/content/plugins/seo/skills/agileflow-seo/SKILL.md +188 -0
- package/content/plugins/seo/skills/agileflow-seo/references/cwv-thresholds.md +110 -0
- package/content/plugins/seo/skills/agileflow-seo/references/eeat-framework.md +144 -0
- package/content/plugins/seo/skills/agileflow-seo/references/keyword-research-guide.md +125 -0
- package/content/plugins/seo/skills/agileflow-seo/references/schema-types.md +139 -0
- package/content/plugins/seo/skills/agileflow-seo/references/technical-seo-checklist.md +139 -0
- package/content/plugins/seo/skills/agileflow-seo/workflows/audit.md +98 -0
- package/content/plugins/seo/skills/agileflow-seo/workflows/page.md +118 -0
- package/content/plugins/testing/plugin.yaml +16 -0
- package/content/plugins/testing/skills/agileflow-test-writer/SKILL.md +260 -0
- package/content/plugins/testing/skills/agileflow-test-writer/references/coverage-targets.md +239 -0
- package/content/plugins/testing/skills/agileflow-test-writer/references/test-patterns.md +420 -0
- package/content/plugins/testing/skills/agileflow-test-writer/workflows/add-coverage.md +154 -0
- package/content/plugins/testing/skills/agileflow-test-writer/workflows/write-tests-from-ac.md +225 -0
- package/package.json +2 -2
- package/src/cli/commands/doctor.js +818 -30
- package/src/cli/commands/hook.js +17 -14
- package/src/cli/commands/launch.js +1454 -0
- package/src/cli/commands/learn.js +149 -0
- package/src/cli/commands/plugins.js +113 -0
- package/src/cli/commands/setup.js +455 -110
- package/src/cli/commands/skills.js +324 -0
- package/src/cli/commands/status.js +8 -10
- package/src/cli/commands/update.js +76 -15
- package/src/cli/index.js +90 -26
- package/src/cli/wizard/babysit-mode-picker.js +192 -0
- package/src/cli/wizard/behaviors-picker.js +208 -54
- package/src/cli/wizard/ide-picker.js +40 -28
- package/src/cli/wizard/install-scope-picker.js +57 -0
- package/src/cli/wizard/launch-alias-picker.js +50 -0
- package/src/cli/wizard/launch-cli-picker.js +129 -0
- package/src/cli/wizard/launch-tmux-picker.js +133 -0
- package/src/cli/wizard/learnings-picker.js +40 -0
- package/src/cli/wizard/plugin-picker.js +47 -16
- package/src/lib/brand.js +116 -0
- package/src/lib/errors.js +120 -0
- package/src/lib/path-check.js +39 -0
- package/src/runtime/config/defaults.js +22 -17
- package/src/runtime/config/loader.js +77 -8
- package/src/runtime/config/schema.json +43 -16
- package/src/runtime/config/writer.js +3 -1
- package/src/runtime/ide/babysit-skill.js +202 -0
- package/src/runtime/ide/capabilities.js +84 -29
- package/src/runtime/ide/claude-code-content.js +177 -0
- package/src/runtime/ide/claude-code-settings.js +67 -29
- package/src/runtime/ide/claude-code-skills.js +47 -32
- package/src/runtime/ide/codex-config.js +295 -0
- package/src/runtime/installer/install.js +252 -24
- package/src/runtime/launch/alias-installer.js +191 -0
- package/src/runtime/launch/cli-resume.js +244 -0
- package/src/runtime/launch/closed-windows.js +338 -0
- package/src/runtime/launch/defaults.js +66 -0
- package/src/runtime/launch/detect-clis.js +69 -0
- package/src/runtime/launch/doctor.js +464 -0
- package/src/runtime/launch/exec-wrapper.js +114 -0
- package/src/runtime/launch/parallel-session.js +247 -0
- package/src/runtime/launch/prefs.js +211 -0
- package/src/runtime/launch/project-prefs.js +234 -0
- package/src/runtime/launch/resolve-cli.js +56 -0
- package/src/runtime/launch/restore.js +152 -0
- package/src/runtime/launch/schema.json +75 -0
- package/src/runtime/launch/session-lifecycle.js +313 -0
- package/src/runtime/launch/session-registry.js +401 -0
- package/src/runtime/launch/spawn.js +103 -0
- package/src/runtime/launch/tabs.js +350 -0
- package/src/runtime/launch/tmux.js +764 -0
- package/src/runtime/launch/worktree.js +260 -0
- package/src/runtime/plugins/registry.js +16 -11
- package/src/runtime/plugins/validator.js +57 -43
- package/src/runtime/skills/learnings.js +308 -0
- package/content/plugins/core/hooks/babysit-mentor-injector.js +0 -55
- package/src/cli/wizard/personalization.js +0 -64
|
@@ -49,8 +49,16 @@ async function main() {
|
|
|
49
49
|
try {
|
|
50
50
|
const parsed = yaml.load(fs.readFileSync(patternsPath, "utf8"));
|
|
51
51
|
patterns = Array.isArray(parsed && parsed.patterns) ? parsed.patterns : [];
|
|
52
|
-
} catch {
|
|
53
|
-
|
|
52
|
+
} catch (err) {
|
|
53
|
+
// Fail open, but warn loudly: a missing/unreadable patterns file
|
|
54
|
+
// means every dangerous command will go through unblocked, and
|
|
55
|
+
// the user MUST notice. Repeated warnings on every Bash call are
|
|
56
|
+
// intentional — they signal "damageControl is broken, fix it or
|
|
57
|
+
// disable the preset in agileflow.config.json".
|
|
58
|
+
process.stderr.write(
|
|
59
|
+
`agileflow damage-control: WARNING — patterns file unreadable (${err.code || err.name}: ${patternsPath}). Bash safety guards are DISABLED until this is fixed.\n`,
|
|
60
|
+
);
|
|
61
|
+
process.exit(0);
|
|
54
62
|
}
|
|
55
63
|
|
|
56
64
|
for (const p of patterns) {
|
|
@@ -46,7 +46,10 @@ async function main() {
|
|
|
46
46
|
try {
|
|
47
47
|
const parsed = yaml.load(fs.readFileSync(patternsPath, "utf8"));
|
|
48
48
|
patterns = Array.isArray(parsed && parsed.patterns) ? parsed.patterns : [];
|
|
49
|
-
} catch {
|
|
49
|
+
} catch (err) {
|
|
50
|
+
process.stderr.write(
|
|
51
|
+
`agileflow damage-control: WARNING — patterns file unreadable (${err.code || err.name}: ${patternsPath}). Edit safety guards are DISABLED until this is fixed.\n`,
|
|
52
|
+
);
|
|
50
53
|
process.exit(0);
|
|
51
54
|
}
|
|
52
55
|
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
patterns:
|
|
17
17
|
# --- Catastrophic filesystem operations ---
|
|
18
|
-
- regex: 'rm\s+-[a-zA-Z]*r[a-zA-Z]*f[a-zA-Z]*\s+(/|~|\$HOME)\
|
|
18
|
+
- regex: 'rm\s+-[a-zA-Z]*r[a-zA-Z]*f[a-zA-Z]*\s+(/|~|\$HOME)(\s|$)'
|
|
19
19
|
kind: bash
|
|
20
20
|
severity: error
|
|
21
21
|
reason: rm -rf on / or $HOME is almost certainly a mistake — refuse outright
|
|
@@ -42,7 +42,10 @@ async function main() {
|
|
|
42
42
|
try {
|
|
43
43
|
const parsed = yaml.load(fs.readFileSync(patternsPath, "utf8"));
|
|
44
44
|
patterns = Array.isArray(parsed && parsed.patterns) ? parsed.patterns : [];
|
|
45
|
-
} catch {
|
|
45
|
+
} catch (err) {
|
|
46
|
+
process.stderr.write(
|
|
47
|
+
`agileflow damage-control: WARNING — patterns file unreadable (${err.code || err.name}: ${patternsPath}). Write safety guards are DISABLED until this is fixed.\n`,
|
|
48
|
+
);
|
|
46
49
|
process.exit(0);
|
|
47
50
|
}
|
|
48
51
|
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Core hook:
|
|
3
|
+
* Core hook: post-compact-state (PostCompact).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* compaction often loses thread on multi-turn implementation work.
|
|
5
|
+
* Re-injects the state Claude needs after compaction replaces most of
|
|
6
|
+
* the conversation: active story, active command, git state, and user
|
|
7
|
+
* preferences. Without this, compaction loses thread on multi-turn work.
|
|
9
8
|
*
|
|
10
9
|
* Output is plain markdown printed to stdout — Claude Code includes
|
|
11
|
-
* the hook's stdout in the
|
|
10
|
+
* the hook's stdout in the fresh context after compaction.
|
|
12
11
|
*
|
|
13
|
-
* Exits 0 always (must not block
|
|
12
|
+
* Exits 0 always (must not block).
|
|
14
13
|
*/
|
|
15
14
|
const fs = require("fs");
|
|
16
15
|
const path = require("path");
|
|
@@ -38,12 +37,27 @@ function git(args) {
|
|
|
38
37
|
}
|
|
39
38
|
}
|
|
40
39
|
|
|
40
|
+
const { buildPreferencesBlock } = require("./preferences-injector.js");
|
|
41
|
+
|
|
41
42
|
const out = [];
|
|
43
|
+
|
|
44
|
+
const prefsBlock = buildPreferencesBlock();
|
|
45
|
+
if (prefsBlock) {
|
|
46
|
+
out.push(prefsBlock);
|
|
47
|
+
out.push("");
|
|
48
|
+
}
|
|
49
|
+
|
|
42
50
|
out.push("## Pre-compaction state preservation");
|
|
43
51
|
out.push("");
|
|
44
52
|
|
|
45
53
|
const status = readJSON(path.join(projectDir, "docs/09-agents/status.json"));
|
|
46
|
-
if (status
|
|
54
|
+
if (!status) {
|
|
55
|
+
// Fresh project — no story tracker yet. Say so explicitly so the
|
|
56
|
+
// post-compaction prompt knows the section was reached, not silently
|
|
57
|
+
// skipped due to an error.
|
|
58
|
+
out.push("Active stories: (none yet — docs/09-agents/status.json not found)");
|
|
59
|
+
out.push("");
|
|
60
|
+
} else if (status.stories) {
|
|
47
61
|
const inProgress = Object.entries(status.stories)
|
|
48
62
|
.filter(([, s]) => s && s.status === "in_progress")
|
|
49
63
|
.map(([id, s]) => `${id} ${s.title || ""}`);
|
|
@@ -51,6 +65,9 @@ if (status && status.stories) {
|
|
|
51
65
|
out.push("Active stories:");
|
|
52
66
|
for (const s of inProgress) out.push(` - ${s}`);
|
|
53
67
|
out.push("");
|
|
68
|
+
} else {
|
|
69
|
+
out.push("Active stories: (none in progress)");
|
|
70
|
+
out.push("");
|
|
54
71
|
}
|
|
55
72
|
}
|
|
56
73
|
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Core hook: preferences-injector (SessionStart).
|
|
4
|
+
*
|
|
5
|
+
* Reads agileflow.config.json and emits a concise user-preferences block
|
|
6
|
+
* so every skill and interaction in the session automatically respects
|
|
7
|
+
* the user's configured settings — without each skill needing its own
|
|
8
|
+
* config-reading logic.
|
|
9
|
+
*
|
|
10
|
+
* Always exits 0.
|
|
11
|
+
*/
|
|
12
|
+
const path = require("path");
|
|
13
|
+
const fs = require("fs");
|
|
14
|
+
|
|
15
|
+
const projectDir =
|
|
16
|
+
process.env.AGILEFLOW_PROJECT_DIR ||
|
|
17
|
+
process.env.CLAUDE_PROJECT_DIR ||
|
|
18
|
+
process.cwd();
|
|
19
|
+
|
|
20
|
+
// Resolve capabilities.js from the installed runtime or the source tree.
|
|
21
|
+
let IDE_CAPABILITIES = null;
|
|
22
|
+
try {
|
|
23
|
+
({ IDE_CAPABILITIES } = require("../../../src/runtime/ide/capabilities.js"));
|
|
24
|
+
} catch {
|
|
25
|
+
try {
|
|
26
|
+
// Installed path: node_modules/agileflow/src/runtime/ide/capabilities.js
|
|
27
|
+
({
|
|
28
|
+
IDE_CAPABILITIES,
|
|
29
|
+
} = require("agileflow/src/runtime/ide/capabilities.js"));
|
|
30
|
+
} catch {
|
|
31
|
+
// capabilities unavailable — skip capability block
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// Resolve learnings helpers from the installed runtime or the source tree.
|
|
36
|
+
let _readLearnings = null;
|
|
37
|
+
let _formatLearningsBlock = null;
|
|
38
|
+
try {
|
|
39
|
+
const learnings = require("../../../src/runtime/skills/learnings.js");
|
|
40
|
+
_readLearnings = learnings.readLearnings;
|
|
41
|
+
_formatLearningsBlock = learnings.formatLearningsBlock;
|
|
42
|
+
} catch {
|
|
43
|
+
try {
|
|
44
|
+
const learnings = require("agileflow/src/runtime/skills/learnings.js");
|
|
45
|
+
_readLearnings = learnings.readLearnings;
|
|
46
|
+
_formatLearningsBlock = learnings.formatLearningsBlock;
|
|
47
|
+
} catch {
|
|
48
|
+
// learnings unavailable — skip learnings block
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
module.exports = { buildPreferencesBlock, buildLearningsBlock };
|
|
53
|
+
|
|
54
|
+
function buildCapabilitiesBlock(cfg) {
|
|
55
|
+
if (!IDE_CAPABILITIES) return null;
|
|
56
|
+
|
|
57
|
+
const targets = cfg?.ide?.targets;
|
|
58
|
+
if (!Array.isArray(targets) || targets.length === 0) return null;
|
|
59
|
+
|
|
60
|
+
// Use the first target as the primary IDE for capability detection.
|
|
61
|
+
const primaryIde = targets[0];
|
|
62
|
+
const caps = IDE_CAPABILITIES[primaryIde];
|
|
63
|
+
if (!caps) return null;
|
|
64
|
+
|
|
65
|
+
const tick = (v) => (v ? "✓" : "✗");
|
|
66
|
+
|
|
67
|
+
const lines = [
|
|
68
|
+
`## Runtime Capabilities (${caps.description})`,
|
|
69
|
+
"",
|
|
70
|
+
"Skills and workflows adapt their behavior based on what this IDE supports:",
|
|
71
|
+
"",
|
|
72
|
+
`| Capability | Available | Behavior when unavailable |`,
|
|
73
|
+
`|------------|-----------|--------------------------|`,
|
|
74
|
+
`| **Interactive prompts** (AskUserQuestion) | ${tick(caps.interactivePrompts)} | Present options as a numbered list instead |`,
|
|
75
|
+
`| **Agent spawning** (Task / multi-agent) | ${tick(caps.multiAgent)} | Work through each analysis inline, sequentially |`,
|
|
76
|
+
`| **Session restore** (PostCompact hook) | ${tick(caps.sessionRestore)} | Re-state context manually if conversation compacts |`,
|
|
77
|
+
`| **Lifecycle hooks** | ${tick(caps.hooks)} | Guidance and state injection unavailable between sessions |`,
|
|
78
|
+
"",
|
|
79
|
+
];
|
|
80
|
+
|
|
81
|
+
if (!caps.interactivePrompts) {
|
|
82
|
+
lines.push(
|
|
83
|
+
"**Note:** This IDE does not support interactive prompts. When a workflow says to present options, write a numbered list and ask the user to reply with a number.",
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
if (!caps.multiAgent) {
|
|
87
|
+
lines.push(
|
|
88
|
+
"**Note:** This IDE does not support agent spawning. When a workflow calls for running multiple expert agents in parallel, perform each analysis inline and sequentially instead.",
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Filter trailing empty string if no notes added
|
|
93
|
+
return lines.join("\n").trimEnd();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function buildPreferencesBlock() {
|
|
97
|
+
let cfg = {};
|
|
98
|
+
try {
|
|
99
|
+
const raw = fs.readFileSync(
|
|
100
|
+
path.join(projectDir, "agileflow.config.json"),
|
|
101
|
+
"utf8",
|
|
102
|
+
);
|
|
103
|
+
cfg = JSON.parse(raw);
|
|
104
|
+
} catch {
|
|
105
|
+
// config missing — emit nothing
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const babysit = cfg?.plugins?.core?.settings?.babysit;
|
|
110
|
+
if (!babysit) return null;
|
|
111
|
+
|
|
112
|
+
const mode = babysit.mode || "full";
|
|
113
|
+
const f = babysit.features || {};
|
|
114
|
+
|
|
115
|
+
const on = (key) => {
|
|
116
|
+
if (mode === "full") return true;
|
|
117
|
+
if (mode === "light")
|
|
118
|
+
return ["askQuestions", "planMode", "taskTracking"].includes(key);
|
|
119
|
+
if (mode === "minimal") return key === "askQuestions";
|
|
120
|
+
// custom — default true for core features unless explicitly false
|
|
121
|
+
const defaults = {
|
|
122
|
+
askQuestions: true,
|
|
123
|
+
planMode: true,
|
|
124
|
+
delegation: true,
|
|
125
|
+
taskTracking: true,
|
|
126
|
+
progressUpdates: true,
|
|
127
|
+
auditAll: false,
|
|
128
|
+
logicAudit: true,
|
|
129
|
+
flowAudit: true,
|
|
130
|
+
securityAudit: true,
|
|
131
|
+
performanceAudit: false,
|
|
132
|
+
accessibilityAudit: false,
|
|
133
|
+
legalAudit: false,
|
|
134
|
+
strictMode: false,
|
|
135
|
+
tddMode: false,
|
|
136
|
+
};
|
|
137
|
+
return key in f ? f[key] : (defaults[key] ?? false);
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
const prefs = [];
|
|
141
|
+
|
|
142
|
+
if (on("askQuestions")) {
|
|
143
|
+
prefs.push(
|
|
144
|
+
'- **Ask at decision points** — end responses with AskUserQuestion (specific options, one marked Recommended). Never generic "Continue?".',
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
if (on("planMode")) {
|
|
148
|
+
prefs.push(
|
|
149
|
+
"- **Plan mode for non-trivial work** — EnterPlanMode before implementing anything beyond a one-liner.",
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
if (on("delegation")) {
|
|
153
|
+
prefs.push(
|
|
154
|
+
"- **Delegate to domain experts** — use Task tool with appropriate subagent_type for complex single-domain work; orchestrator for multi-domain.",
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
if (on("taskTracking")) {
|
|
158
|
+
prefs.push(
|
|
159
|
+
"- **Track progress** — TaskCreate for 3+ step tasks, TaskUpdate as each completes.",
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
if (on("progressUpdates")) {
|
|
163
|
+
prefs.push(
|
|
164
|
+
"- **Short status updates** — brief progress notes while working.",
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
const always = mode === "full" || on("auditAll");
|
|
168
|
+
|
|
169
|
+
if (on("logicAudit")) {
|
|
170
|
+
prefs.push(
|
|
171
|
+
always
|
|
172
|
+
? "- **Logic audit after every implementation** — suggest 🔍 Run logic audit as (Recommended) after every implementation."
|
|
173
|
+
: "- **Logic audit after implementation** — suggest 🔍 Run logic audit as (Recommended) after implementation.",
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
if (on("flowAudit")) {
|
|
177
|
+
prefs.push(
|
|
178
|
+
always
|
|
179
|
+
? "- **Flow audit after every implementation** — suggest 🔄 Run flow audit after every implementation. Include a Verify flow integrity step in plans."
|
|
180
|
+
: "- **Flow audit after implementation** — when user-facing flows were touched (forms, navigation, auth, CRUD), suggest 🔄 Run flow audit after implementation. Include a Verify flow integrity step in plans.",
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
if (on("securityAudit")) {
|
|
184
|
+
prefs.push(
|
|
185
|
+
always
|
|
186
|
+
? "- **Security audit after every implementation** — suggest 🔒 Run security audit after every implementation."
|
|
187
|
+
: "- **Security audit after implementation** — when auth, APIs, user input, file handling, or sensitive data were touched, suggest 🔒 Run security audit after implementation.",
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
if (on("performanceAudit")) {
|
|
191
|
+
prefs.push(
|
|
192
|
+
always
|
|
193
|
+
? "- **Performance audit after every implementation** — suggest ⚡ Run performance audit after every implementation."
|
|
194
|
+
: "- **Performance audit after implementation** — when database queries, rendering, large data, or caching were touched, suggest ⚡ Run performance audit after implementation.",
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
if (on("accessibilityAudit")) {
|
|
198
|
+
prefs.push(
|
|
199
|
+
always
|
|
200
|
+
? "- **Accessibility audit after every implementation** — suggest ♿ Run accessibility audit after every implementation."
|
|
201
|
+
: "- **Accessibility audit after implementation** — when UI components, forms, or interactive elements were changed, suggest ♿ Run accessibility audit after implementation.",
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
if (on("legalAudit")) {
|
|
205
|
+
prefs.push(
|
|
206
|
+
always
|
|
207
|
+
? "- **Legal audit after every implementation** — suggest ⚖️ Run legal audit after every implementation."
|
|
208
|
+
: "- **Legal audit after implementation** — when data collection, privacy, user consent, or compliance-sensitive code was touched, suggest ⚖️ Run legal audit after implementation.",
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
if (on("strictMode")) {
|
|
212
|
+
prefs.push(
|
|
213
|
+
"- **Strict gates** — hide commit option until tests pass; auto-trigger code review at 5+ files changed; remove skip options.",
|
|
214
|
+
);
|
|
215
|
+
}
|
|
216
|
+
if (on("tddMode")) {
|
|
217
|
+
prefs.push(
|
|
218
|
+
"- **TDD phases** — RED (failing tests first) → GREEN (minimum code) → REFACTOR. Gate each phase.",
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
if (prefs.length === 0) return null;
|
|
223
|
+
|
|
224
|
+
const modeLabel =
|
|
225
|
+
mode === "custom"
|
|
226
|
+
? `custom (${Object.entries(f)
|
|
227
|
+
.filter(([, v]) => v)
|
|
228
|
+
.map(([k]) => k)
|
|
229
|
+
.join(", ")})`
|
|
230
|
+
: mode;
|
|
231
|
+
|
|
232
|
+
const prefsBlock = [
|
|
233
|
+
`## User Preferences (agileflow ${modeLabel} mode)`,
|
|
234
|
+
"",
|
|
235
|
+
"Apply these preferences throughout this session across all skills and tasks:",
|
|
236
|
+
"",
|
|
237
|
+
...prefs,
|
|
238
|
+
"",
|
|
239
|
+
"To change: run `agileflow setup`.",
|
|
240
|
+
].join("\n");
|
|
241
|
+
|
|
242
|
+
const capsBlock = buildCapabilitiesBlock(cfg);
|
|
243
|
+
|
|
244
|
+
return capsBlock ? `${capsBlock}\n\n${prefsBlock}` : prefsBlock;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Build a learnings block by scanning the installed skills directory for
|
|
249
|
+
* skills that have `learns.enabled: true` and have at least one learning entry.
|
|
250
|
+
*
|
|
251
|
+
* @param {object} cfg - parsed agileflow.config.json
|
|
252
|
+
* @returns {string|null}
|
|
253
|
+
*/
|
|
254
|
+
function buildLearningsBlock(cfg) {
|
|
255
|
+
if (!_readLearnings || !_formatLearningsBlock) return null;
|
|
256
|
+
if (!cfg?.learnings?.enabled) return null;
|
|
257
|
+
|
|
258
|
+
const primaryIde =
|
|
259
|
+
Array.isArray(cfg?.ide?.targets) && cfg.ide.targets.length > 0
|
|
260
|
+
? cfg.ide.targets[0]
|
|
261
|
+
: "claude-code";
|
|
262
|
+
|
|
263
|
+
const skillsDir =
|
|
264
|
+
IDE_CAPABILITIES?.[primaryIde]?.skillsDir ?? ".claude/skills";
|
|
265
|
+
const absoluteSkillsDir = path.join(projectDir, skillsDir);
|
|
266
|
+
|
|
267
|
+
let skillNames;
|
|
268
|
+
try {
|
|
269
|
+
skillNames = fs.readdirSync(absoluteSkillsDir);
|
|
270
|
+
} catch {
|
|
271
|
+
return null; // skills dir not yet installed
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
const yaml = (() => {
|
|
275
|
+
try {
|
|
276
|
+
return require("js-yaml");
|
|
277
|
+
} catch {
|
|
278
|
+
return null;
|
|
279
|
+
}
|
|
280
|
+
})();
|
|
281
|
+
if (!yaml) return null;
|
|
282
|
+
|
|
283
|
+
const blocks = [];
|
|
284
|
+
|
|
285
|
+
for (const skillName of skillNames) {
|
|
286
|
+
const skillMdPath = path.join(absoluteSkillsDir, skillName, "SKILL.md");
|
|
287
|
+
let skillMdText;
|
|
288
|
+
try {
|
|
289
|
+
skillMdText = fs.readFileSync(skillMdPath, "utf8");
|
|
290
|
+
} catch {
|
|
291
|
+
continue;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// Parse frontmatter between first two `---` fences.
|
|
295
|
+
const fmMatch = skillMdText.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
296
|
+
if (!fmMatch) continue;
|
|
297
|
+
|
|
298
|
+
let fm;
|
|
299
|
+
try {
|
|
300
|
+
fm = yaml.load(fmMatch[1]);
|
|
301
|
+
} catch {
|
|
302
|
+
continue;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
if (!fm?.learns?.enabled) continue;
|
|
306
|
+
|
|
307
|
+
// readLearnings is async — run synchronously via the already-read skills dir.
|
|
308
|
+
// We resolve the learnings file path directly.
|
|
309
|
+
const learnFile = fm.learns.file || `_learnings/${skillName}.yaml`;
|
|
310
|
+
const safeParts = learnFile
|
|
311
|
+
.split("/")
|
|
312
|
+
.filter((p) => p && p !== ".." && p !== ".");
|
|
313
|
+
const learnFilePath = path.join(absoluteSkillsDir, skillName, ...safeParts);
|
|
314
|
+
|
|
315
|
+
let learningsData;
|
|
316
|
+
try {
|
|
317
|
+
const text = fs.readFileSync(learnFilePath, "utf8");
|
|
318
|
+
if (!text.trim()) continue;
|
|
319
|
+
const doc = yaml.load(text);
|
|
320
|
+
if (!doc || !Array.isArray(doc.entries) || doc.entries.length === 0)
|
|
321
|
+
continue;
|
|
322
|
+
learningsData = { entries: doc.entries, skill: skillName };
|
|
323
|
+
} catch {
|
|
324
|
+
continue; // file absent or invalid — skip silently
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
const block = _formatLearningsBlock(learningsData);
|
|
328
|
+
if (block) blocks.push(block);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
return blocks.length > 0 ? blocks.join("\n\n") : null;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
if (require.main === module) {
|
|
335
|
+
let cfg = {};
|
|
336
|
+
try {
|
|
337
|
+
cfg = JSON.parse(
|
|
338
|
+
fs.readFileSync(path.join(projectDir, "agileflow.config.json"), "utf8"),
|
|
339
|
+
);
|
|
340
|
+
} catch {
|
|
341
|
+
/* ignore */
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
const prefsBlock = buildPreferencesBlock();
|
|
345
|
+
const learnBlock = buildLearningsBlock(cfg);
|
|
346
|
+
|
|
347
|
+
const parts = [prefsBlock, learnBlock].filter(Boolean);
|
|
348
|
+
if (parts.length > 0) {
|
|
349
|
+
process.stdout.write(parts.join("\n\n") + "\n");
|
|
350
|
+
}
|
|
351
|
+
process.exit(0);
|
|
352
|
+
}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
# Core plugin — essential AgileFlow workflow.
|
|
2
|
-
# Always enabled; cannot be disabled.
|
|
3
|
-
#
|
|
4
|
-
# Hooks declared here are CANDIDATES — the install-time aggregator
|
|
5
|
-
# filters them by the user's `behaviors:` map in agileflow.config.json.
|
|
6
|
-
# A hook ID that maps to a disabled behavior never enters the
|
|
7
|
-
# generated hook-manifest.yaml. See apps/cli/src/runtime/hooks/aggregator.js.
|
|
8
1
|
id: core
|
|
9
2
|
name: Core
|
|
10
|
-
description:
|
|
3
|
+
description: Essential AgileFlow skills.
|
|
11
4
|
version: 1.0.0
|
|
12
5
|
enabledByDefault: true
|
|
13
6
|
cannotDisable: true
|
|
@@ -15,7 +8,6 @@ cannotDisable: true
|
|
|
15
8
|
depends: []
|
|
16
9
|
|
|
17
10
|
provides:
|
|
18
|
-
commands: []
|
|
19
11
|
skills:
|
|
20
12
|
- id: agileflow-adr
|
|
21
13
|
dir: skills/agileflow-adr
|
|
@@ -27,56 +19,60 @@ provides:
|
|
|
27
19
|
dir: skills/agileflow-status-updater
|
|
28
20
|
- id: agileflow-babysit-mentor
|
|
29
21
|
dir: skills/agileflow-babysit-mentor
|
|
30
|
-
agents:
|
|
22
|
+
agents:
|
|
23
|
+
- id: adr-writer
|
|
24
|
+
path: agents/adr-writer.md
|
|
25
|
+
- id: epic-planner
|
|
26
|
+
path: agents/epic-planner.md
|
|
27
|
+
- id: mentor
|
|
28
|
+
path: agents/mentor.md
|
|
29
|
+
- id: orchestrator
|
|
30
|
+
path: agents/orchestrator.md
|
|
31
|
+
- id: team-coordinator
|
|
32
|
+
path: agents/team-coordinator.md
|
|
33
|
+
- id: team-lead
|
|
34
|
+
path: agents/team-lead.md
|
|
35
|
+
- id: workspace-orchestrator
|
|
36
|
+
path: agents/workspace-orchestrator.md
|
|
31
37
|
hooks:
|
|
32
|
-
# SessionStart — context loading + (optional) mentor injection.
|
|
33
38
|
- id: context-loader
|
|
34
39
|
event: SessionStart
|
|
35
40
|
script: hooks/context-loader.js
|
|
36
41
|
timeout: 5000
|
|
37
42
|
skipOnError: true
|
|
38
43
|
behavior: loadContext
|
|
39
|
-
|
|
40
|
-
- id: babysit-mentor-injector
|
|
44
|
+
- id: preferences-injector
|
|
41
45
|
event: SessionStart
|
|
42
|
-
script: hooks/
|
|
46
|
+
script: hooks/preferences-injector.js
|
|
43
47
|
timeout: 2000
|
|
44
48
|
skipOnError: true
|
|
45
49
|
runAfter: [context-loader]
|
|
46
50
|
behavior: babysitDefault
|
|
47
|
-
|
|
48
|
-
# PreToolUse — damage control. skipOnError false: errors should
|
|
49
|
-
# block dangerous operations rather than be tolerated.
|
|
50
51
|
- id: damage-control-bash
|
|
51
52
|
event: PreToolUse
|
|
52
53
|
matcher: Bash
|
|
53
54
|
script: hooks/damage-control-bash.js
|
|
54
55
|
timeout: 3000
|
|
55
56
|
skipOnError: false
|
|
56
|
-
behavior:
|
|
57
|
-
|
|
57
|
+
behavior: damageControlBash
|
|
58
58
|
- id: damage-control-edit
|
|
59
59
|
event: PreToolUse
|
|
60
60
|
matcher: Edit
|
|
61
61
|
script: hooks/damage-control-edit.js
|
|
62
62
|
timeout: 3000
|
|
63
63
|
skipOnError: false
|
|
64
|
-
behavior:
|
|
65
|
-
|
|
64
|
+
behavior: damageControlEdit
|
|
66
65
|
- id: damage-control-write
|
|
67
66
|
event: PreToolUse
|
|
68
67
|
matcher: Write
|
|
69
68
|
script: hooks/damage-control-write.js
|
|
70
69
|
timeout: 3000
|
|
71
70
|
skipOnError: false
|
|
72
|
-
behavior:
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
event: PreCompact
|
|
77
|
-
script: hooks/pre-compact-state.js
|
|
71
|
+
behavior: damageControlWrite
|
|
72
|
+
- id: post-compact-state
|
|
73
|
+
event: PostCompact
|
|
74
|
+
script: hooks/post-compact-state.js
|
|
78
75
|
timeout: 5000
|
|
79
76
|
skipOnError: true
|
|
80
77
|
behavior: preCompactState
|
|
81
|
-
|
|
82
78
|
templates: []
|
|
@@ -34,8 +34,6 @@ depends:
|
|
|
34
34
|
plugins: [core]
|
|
35
35
|
---
|
|
36
36
|
|
|
37
|
-
<!-- {{PERSONALIZATION_BLOCK}} -->
|
|
38
|
-
|
|
39
37
|
# AgileFlow ADR Writer
|
|
40
38
|
|
|
41
39
|
Captures architectural / technical decisions as formal Architecture
|
|
@@ -66,6 +64,7 @@ and link the chain.
|
|
|
66
64
|
## Self-improving learnings
|
|
67
65
|
|
|
68
66
|
`.agileflow/skills/_learnings/adr.yaml` records preferences:
|
|
67
|
+
|
|
69
68
|
- Default `Status:` value (Proposed vs Accepted)
|
|
70
69
|
- Whether to require all four MADR sections or allow brief mode
|
|
71
70
|
- Preferred date format
|
|
@@ -82,14 +81,17 @@ and link the chain.
|
|
|
82
81
|
**Tags**: architecture, database, api, …
|
|
83
82
|
|
|
84
83
|
## Context and Problem Statement
|
|
84
|
+
|
|
85
85
|
[Describe the context and problem. What are we trying to solve? Why now?]
|
|
86
86
|
|
|
87
87
|
## Decision Drivers
|
|
88
|
+
|
|
88
89
|
- [e.g., Performance requirements]
|
|
89
90
|
- [e.g., Team expertise]
|
|
90
91
|
- [e.g., Cost constraints]
|
|
91
92
|
|
|
92
93
|
## Considered Options
|
|
94
|
+
|
|
93
95
|
- [Option 1]
|
|
94
96
|
- [Option 2]
|
|
95
97
|
- [Option 3]
|
|
@@ -101,24 +103,29 @@ and link the chain.
|
|
|
101
103
|
**Justification**: [Why this option best satisfies the drivers]
|
|
102
104
|
|
|
103
105
|
### Positive Consequences
|
|
106
|
+
|
|
104
107
|
- [Good outcome 1]
|
|
105
108
|
- [Good outcome 2]
|
|
106
109
|
|
|
107
110
|
### Negative Consequences
|
|
111
|
+
|
|
108
112
|
- [Bad outcome 1] — Mitigation: [plan, if any]
|
|
109
113
|
- [Bad outcome 2]
|
|
110
114
|
|
|
111
115
|
## Pros and Cons of the Options
|
|
112
116
|
|
|
113
117
|
### [Option 1]
|
|
118
|
+
|
|
114
119
|
**Pros**: …
|
|
115
120
|
**Cons**: …
|
|
116
121
|
|
|
117
122
|
### [Option 2]
|
|
123
|
+
|
|
118
124
|
**Pros**: …
|
|
119
125
|
**Cons**: …
|
|
120
126
|
|
|
121
127
|
## Links
|
|
128
|
+
|
|
122
129
|
- [Related ADRs]
|
|
123
130
|
- [Relevant documentation]
|
|
124
131
|
- [External resources]
|
|
@@ -134,10 +141,12 @@ and link the chain.
|
|
|
134
141
|
## When to write the ADR vs ask first
|
|
135
142
|
|
|
136
143
|
Write it now (with `Status: Accepted`):
|
|
144
|
+
|
|
137
145
|
- The user has already made a clear decision and wants to record it
|
|
138
146
|
- The user explicitly asks for the ADR
|
|
139
147
|
|
|
140
148
|
Ask first (then write with `Status: Proposed` or `Accepted`):
|
|
149
|
+
|
|
141
150
|
- Multiple options are still in play
|
|
142
151
|
- Drivers / constraints aren't clear yet
|
|
143
152
|
- The chosen option's justification is one-line ("we like it more")
|
|
@@ -157,12 +166,13 @@ Ask first (then write with `Status: Proposed` or `Accepted`):
|
|
|
157
166
|
|
|
158
167
|
## Integration
|
|
159
168
|
|
|
160
|
-
- **agileflow-story-writer** — completed ADRs inform Technical Notes
|
|
161
|
-
|
|
162
|
-
- **agileflow-
|
|
163
|
-
|
|
164
|
-
- **agileflow-
|
|
165
|
-
|
|
169
|
+
- **agileflow-story-writer** — completed ADRs inform Technical Notes in stories; reference the ADR number in the story's context section
|
|
170
|
+
- **agileflow-epic-planner** — major epics often spawn one or more ADRs at planning time; create the ADR before writing stories so implementation decisions are settled
|
|
171
|
+
- **agileflow-status-updater** — flipping an ADR from Proposed to Accepted is a status mutation; route through status-updater to keep `status.json` accurate
|
|
172
|
+
- **agileflow-council** — council sessions are the primary source of ADR content; after a council reaches a decision, create an ADR to record it formally
|
|
173
|
+
- **agileflow-research** — research provides the factual foundation for ADRs (benchmarks, library comparisons, community precedent); always link or summarise the research in the ADR body
|
|
174
|
+
- **agileflow-planning** — use planning's impact analysis output as the context section of an ADR when the decision involves scope or delivery trade-offs
|
|
175
|
+
- **agileflow-delivery** — for breaking API changes or major dependency upgrades, create an ADR before the delivery cycle begins so the rationale is documented before merge
|
|
166
176
|
|
|
167
177
|
## Notes
|
|
168
178
|
|
|
@@ -177,3 +187,19 @@ Ask first (then write with `Status: Proposed` or `Accepted`):
|
|
|
177
187
|
knowing who to ask.
|
|
178
188
|
- Date the ADR — context erodes; the date is the timestamp on the
|
|
179
189
|
thinking, not just the file.
|
|
190
|
+
|
|
191
|
+
## References
|
|
192
|
+
|
|
193
|
+
Load these files when you need deeper context for the relevant task:
|
|
194
|
+
|
|
195
|
+
| File | When to load |
|
|
196
|
+
| --------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
|
197
|
+
| `references/madr-format-guide.md` | Writing or reviewing an ADR — MADR format, required sections, common mistakes, numbering conventions |
|
|
198
|
+
|
|
199
|
+
## Workflows
|
|
200
|
+
|
|
201
|
+
Follow these step-by-step when the user initiates the matching action:
|
|
202
|
+
|
|
203
|
+
| File | When to follow |
|
|
204
|
+
| ------------------------ | --------------------------------------------------------------------------------------------------------------------- |
|
|
205
|
+
| `workflows/write-adr.md` | User wants to record a decision or is comparing options — gathers context, drafts ADR, gets confirmation, writes file |
|