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
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed user-facing errors for the AgileFlow CLI.
|
|
3
|
+
*
|
|
4
|
+
* Every error a user is likely to hit (bad argument, missing config,
|
|
5
|
+
* failed install) should be one of these classes so the formatter can
|
|
6
|
+
* print a consistent two-line message:
|
|
7
|
+
*
|
|
8
|
+
* ✗ agileflow <cmd>: <message>
|
|
9
|
+
* Try: <suggestion>
|
|
10
|
+
*
|
|
11
|
+
* Internal/programmer errors should stay as plain `Error` — `fail()`
|
|
12
|
+
* wraps them with a generic "Try: re-run with --debug" suggestion so
|
|
13
|
+
* the CLI never prints a bare stack trace at users.
|
|
14
|
+
*/
|
|
15
|
+
const chalk = require("chalk");
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @typedef {object} AgileflowErrorOptions
|
|
19
|
+
* @property {string} [suggestion] Actionable fix the user should try next.
|
|
20
|
+
* @property {string} [code] Stable machine-readable code (defaults per subclass).
|
|
21
|
+
* @property {Error} [cause] Underlying error, if wrapping.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
class AgileflowError extends Error {
|
|
25
|
+
/**
|
|
26
|
+
* @param {string} message
|
|
27
|
+
* @param {AgileflowErrorOptions} [options]
|
|
28
|
+
*/
|
|
29
|
+
constructor(message, options = {}) {
|
|
30
|
+
super(message);
|
|
31
|
+
this.name = "AgileflowError";
|
|
32
|
+
this.suggestion = options.suggestion;
|
|
33
|
+
this.code = options.code || "ERR_AGILEFLOW";
|
|
34
|
+
if (options.cause) this.cause = options.cause;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
class MissingFileError extends AgileflowError {
|
|
39
|
+
constructor(message, options = {}) {
|
|
40
|
+
super(message, { code: "ERR_MISSING_FILE", ...options });
|
|
41
|
+
this.name = "MissingFileError";
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
class InvalidArgumentError extends AgileflowError {
|
|
46
|
+
constructor(message, options = {}) {
|
|
47
|
+
super(message, { code: "ERR_INVALID_ARGUMENT", ...options });
|
|
48
|
+
this.name = "InvalidArgumentError";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
class OperationFailedError extends AgileflowError {
|
|
53
|
+
constructor(message, options = {}) {
|
|
54
|
+
super(message, { code: "ERR_OPERATION_FAILED", ...options });
|
|
55
|
+
this.name = "OperationFailedError";
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Format an error as a two-line stderr string. Does not write — caller decides.
|
|
61
|
+
*
|
|
62
|
+
* @param {Error} err
|
|
63
|
+
* @param {{ command?: string }} [opts]
|
|
64
|
+
* @returns {string}
|
|
65
|
+
*/
|
|
66
|
+
function formatError(err, opts = {}) {
|
|
67
|
+
const cmd = opts.command ? `agileflow ${opts.command}` : "agileflow";
|
|
68
|
+
const head = `${chalk.red("✗")} ${cmd}: ${err.message}`;
|
|
69
|
+
const isAgileflowError = err instanceof AgileflowError;
|
|
70
|
+
const hasStringSuggestion =
|
|
71
|
+
isAgileflowError && typeof err.suggestion === "string" && err.suggestion;
|
|
72
|
+
const suggestion = hasStringSuggestion
|
|
73
|
+
? err.suggestion
|
|
74
|
+
: isAgileflowError
|
|
75
|
+
? null
|
|
76
|
+
: "Re-run with DEBUG=1 for a stack trace, or report at https://github.com/anthropics/agileflow/issues";
|
|
77
|
+
if (!suggestion) return head;
|
|
78
|
+
return `${head}\n ${chalk.dim(`Try: ${suggestion}`)}`;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Print an error to stderr and exit with code 1. Use this at the leaf of
|
|
83
|
+
* a command handler instead of `console.error(...); process.exit(1)`.
|
|
84
|
+
*
|
|
85
|
+
* Internal errors (non-AgileflowError) are still printed clearly; their
|
|
86
|
+
* stack trace is emitted only when `DEBUG=1` is set, so users don't see
|
|
87
|
+
* Node internals by default.
|
|
88
|
+
*
|
|
89
|
+
* @param {Error} err
|
|
90
|
+
* @param {{ command?: string }} [opts]
|
|
91
|
+
* @returns {never}
|
|
92
|
+
*/
|
|
93
|
+
function fail(err, opts = {}) {
|
|
94
|
+
console.error(formatError(err, opts));
|
|
95
|
+
if (isDebugEnabled() && err.stack) {
|
|
96
|
+
console.error(chalk.dim(err.stack));
|
|
97
|
+
}
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Treat DEBUG as set unless it's an explicit falsy string. Mirrors the
|
|
103
|
+
* convention used by most Node libraries (`debug`, `npm`), where
|
|
104
|
+
* DEBUG=0 / DEBUG=false / DEBUG="" all mean off.
|
|
105
|
+
*/
|
|
106
|
+
function isDebugEnabled() {
|
|
107
|
+
const v = process.env.DEBUG;
|
|
108
|
+
if (!v) return false;
|
|
109
|
+
const lowered = String(v).toLowerCase();
|
|
110
|
+
return lowered !== "0" && lowered !== "false" && lowered !== "no";
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
module.exports = {
|
|
114
|
+
AgileflowError,
|
|
115
|
+
MissingFileError,
|
|
116
|
+
InvalidArgumentError,
|
|
117
|
+
OperationFailedError,
|
|
118
|
+
formatError,
|
|
119
|
+
fail,
|
|
120
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check whether a command is resolvable on the user's PATH.
|
|
3
|
+
*
|
|
4
|
+
* Used by `agileflow launch` to detect which AI CLIs (claude, codex,
|
|
5
|
+
* cursor-agent, aider) are installed so the onboarding picker only
|
|
6
|
+
* offers real choices.
|
|
7
|
+
*
|
|
8
|
+
* Implementation: shell out to `command -v` (POSIX) or `where` (Windows).
|
|
9
|
+
* Both are built-ins, present on every supported platform, and exit
|
|
10
|
+
* non-zero when the name is not found.
|
|
11
|
+
*
|
|
12
|
+
* Safety: the name argument is constrained to a conservative character
|
|
13
|
+
* class before being interpolated into the shell command. These are CLI
|
|
14
|
+
* binary names — not free-form user input — so the restriction is
|
|
15
|
+
* intentional rather than limiting.
|
|
16
|
+
*/
|
|
17
|
+
const { execSync } = require("child_process");
|
|
18
|
+
|
|
19
|
+
const SAFE_NAME = /^[A-Za-z0-9._-]+$/;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* @param {string} name
|
|
23
|
+
* @returns {boolean}
|
|
24
|
+
*/
|
|
25
|
+
function commandExists(name) {
|
|
26
|
+
if (typeof name !== "string" || !SAFE_NAME.test(name)) return false;
|
|
27
|
+
|
|
28
|
+
const probe =
|
|
29
|
+
process.platform === "win32" ? `where ${name}` : `command -v ${name}`;
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
execSync(probe, { stdio: "ignore", shell: true });
|
|
33
|
+
return true;
|
|
34
|
+
} catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
module.exports = { commandExists, SAFE_NAME };
|
|
@@ -4,28 +4,26 @@
|
|
|
4
4
|
* Returned when `agileflow.config.json` is absent. Also merged into
|
|
5
5
|
* user-supplied config so missing sections get sensible defaults.
|
|
6
6
|
*
|
|
7
|
-
* @typedef {Object} Personalization
|
|
8
|
-
* @property {'concise'|'detailed'|'teaching'} tone
|
|
9
|
-
* @property {'none'|'decision_points'|'always'} ask_level
|
|
10
|
-
* @property {'low'|'medium'|'high'} verbosity
|
|
11
|
-
*
|
|
12
7
|
* @typedef {Object} PluginEntry
|
|
13
8
|
* @property {boolean} enabled
|
|
14
9
|
* @property {Record<string, unknown>} [settings]
|
|
15
10
|
*
|
|
16
11
|
* @typedef {Object} Behaviors
|
|
17
|
-
* @property {boolean} loadContext
|
|
18
|
-
* @property {boolean} babysitDefault
|
|
19
|
-
* @property {boolean}
|
|
20
|
-
* @property {boolean}
|
|
12
|
+
* @property {boolean} loadContext - SessionStart context dump
|
|
13
|
+
* @property {boolean} babysitDefault - HARD mentor mode at SessionStart
|
|
14
|
+
* @property {boolean} damageControlBash - PreToolUse guard on Bash
|
|
15
|
+
* @property {boolean} damageControlEdit - PreToolUse guard on Edit
|
|
16
|
+
* @property {boolean} damageControlWrite - PreToolUse guard on Write
|
|
17
|
+
* @property {boolean} preCompactState - PreCompact state preservation
|
|
21
18
|
*
|
|
22
19
|
* @typedef {Object} AgileflowConfig
|
|
23
20
|
* @property {1} version
|
|
24
21
|
* @property {Record<string, PluginEntry>} plugins
|
|
25
22
|
* @property {Record<string, { enabled?: boolean, timeout?: number, skipOnError?: boolean }>} hooks
|
|
23
|
+
* @property {{ scope: 'project' | 'global' }} install
|
|
26
24
|
* @property {Behaviors} behaviors
|
|
27
|
-
* @property {
|
|
28
|
-
* @property {{ primary: 'claude-code'|'cursor'|'windsurf'|'codex' }} ide
|
|
25
|
+
* @property {{ enabled: boolean }} learnings
|
|
26
|
+
* @property {{ primary?: string, targets: Array<'claude-code'|'cursor'|'windsurf'|'codex'|'antigravity'> }} ide
|
|
29
27
|
* @property {string} language
|
|
30
28
|
*/
|
|
31
29
|
|
|
@@ -37,22 +35,29 @@ function defaultConfig() {
|
|
|
37
35
|
core: { enabled: true },
|
|
38
36
|
},
|
|
39
37
|
hooks: {},
|
|
38
|
+
install: {
|
|
39
|
+
scope: "project",
|
|
40
|
+
},
|
|
40
41
|
behaviors: {
|
|
41
42
|
// Behaviors are presets that map to one or more hooks. The
|
|
42
43
|
// wizard surfaces these as a curated multiselect; advanced
|
|
43
44
|
// users can override individual hooks via the `hooks:` map.
|
|
44
45
|
loadContext: true,
|
|
45
46
|
babysitDefault: true,
|
|
46
|
-
|
|
47
|
+
damageControlBash: true,
|
|
48
|
+
damageControlEdit: true,
|
|
49
|
+
damageControlWrite: true,
|
|
47
50
|
preCompactState: true,
|
|
48
51
|
},
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
learnings: {
|
|
53
|
+
// Global on/off for the skill self-improvement system. When false,
|
|
54
|
+
// install-time scaffolding is skipped and no learnings hint is
|
|
55
|
+
// injected into the session prompt — the `agileflow learn` CLI
|
|
56
|
+
// still works for users who want to manually append signals.
|
|
57
|
+
enabled: true,
|
|
53
58
|
},
|
|
54
59
|
ide: {
|
|
55
|
-
|
|
60
|
+
targets: ["claude-code"],
|
|
56
61
|
},
|
|
57
62
|
language: "en",
|
|
58
63
|
};
|
|
@@ -21,9 +21,57 @@ const ajv = new Ajv({ allErrors: true, useDefaults: false, strict: false });
|
|
|
21
21
|
const validate = ajv.compile(schema);
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
25
|
-
* `
|
|
26
|
-
*
|
|
24
|
+
* Migrate older config shapes into the current schema before validation.
|
|
25
|
+
* This keeps `agileflow setup` usable across alpha bumps even when a
|
|
26
|
+
* project already has an older config checked in.
|
|
27
|
+
*
|
|
28
|
+
* @param {any} parsed
|
|
29
|
+
* @returns {any}
|
|
30
|
+
*/
|
|
31
|
+
function migrateLegacyConfig(parsed) {
|
|
32
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
33
|
+
return parsed;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const migrated = { ...parsed };
|
|
37
|
+
|
|
38
|
+
if (
|
|
39
|
+
migrated.behaviors &&
|
|
40
|
+
typeof migrated.behaviors === "object" &&
|
|
41
|
+
!Array.isArray(migrated.behaviors)
|
|
42
|
+
) {
|
|
43
|
+
const behaviors = { ...migrated.behaviors };
|
|
44
|
+
if (Object.prototype.hasOwnProperty.call(behaviors, "damageControl")) {
|
|
45
|
+
const damageControl = Boolean(behaviors.damageControl);
|
|
46
|
+
delete behaviors.damageControl;
|
|
47
|
+
behaviors.damageControlBash = damageControl;
|
|
48
|
+
behaviors.damageControlEdit = damageControl;
|
|
49
|
+
behaviors.damageControlWrite = damageControl;
|
|
50
|
+
}
|
|
51
|
+
migrated.behaviors = behaviors;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
if (
|
|
55
|
+
migrated.ide &&
|
|
56
|
+
typeof migrated.ide === "object" &&
|
|
57
|
+
!Array.isArray(migrated.ide)
|
|
58
|
+
) {
|
|
59
|
+
const ide = { ...migrated.ide };
|
|
60
|
+
if (!Array.isArray(ide.targets) || ide.targets.length === 0) {
|
|
61
|
+
if (typeof ide.primary === "string") {
|
|
62
|
+
ide.targets = [ide.primary];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
migrated.ide = ide;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return migrated;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Shallow-merge user config on top of defaults. `plugins` and `hooks`
|
|
73
|
+
* sub-objects are deep-merged at one level so that partial user configs
|
|
74
|
+
* don't wipe defaults.
|
|
27
75
|
*
|
|
28
76
|
* @param {import('./defaults.js').AgileflowConfig} defaults
|
|
29
77
|
* @param {Partial<import('./defaults.js').AgileflowConfig>} user
|
|
@@ -34,16 +82,35 @@ function mergeConfig(defaults, user) {
|
|
|
34
82
|
version: user.version ?? defaults.version,
|
|
35
83
|
plugins: { ...defaults.plugins, ...(user.plugins || {}) },
|
|
36
84
|
hooks: { ...defaults.hooks, ...(user.hooks || {}) },
|
|
85
|
+
install: { ...defaults.install, ...(user.install || {}) },
|
|
37
86
|
behaviors: { ...defaults.behaviors, ...(user.behaviors || {}) },
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
...(user.personalization || {}),
|
|
41
|
-
},
|
|
42
|
-
ide: { ...defaults.ide, ...(user.ide || {}) },
|
|
87
|
+
learnings: { ...defaults.learnings, ...(user.learnings || {}) },
|
|
88
|
+
ide: mergeIde(defaults.ide, user.ide),
|
|
43
89
|
language: user.language ?? defaults.language,
|
|
44
90
|
};
|
|
45
91
|
}
|
|
46
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Merge user `ide` block onto defaults, normalizing legacy `primary` into
|
|
95
|
+
* `targets`. Old configs (alpha.1 / alpha.2) shipped only `primary`; we
|
|
96
|
+
* migrate them in-memory so a single re-install moves them onto the new
|
|
97
|
+
* shape without forcing the user to hand-edit JSON.
|
|
98
|
+
*
|
|
99
|
+
* @param {{ targets: string[], primary?: string }} defaultsIde
|
|
100
|
+
* @param {{ targets?: string[], primary?: string } | undefined} userIde
|
|
101
|
+
* @returns {{ targets: string[], primary?: string }}
|
|
102
|
+
*/
|
|
103
|
+
function mergeIde(defaultsIde, userIde) {
|
|
104
|
+
const merged = { ...defaultsIde, ...(userIde || {}) };
|
|
105
|
+
if (!Array.isArray(merged.targets) || merged.targets.length === 0) {
|
|
106
|
+
merged.targets =
|
|
107
|
+
typeof merged.primary === "string"
|
|
108
|
+
? [merged.primary]
|
|
109
|
+
: [...defaultsIde.targets];
|
|
110
|
+
}
|
|
111
|
+
return merged;
|
|
112
|
+
}
|
|
113
|
+
|
|
47
114
|
/**
|
|
48
115
|
* Format Ajv errors as a single human-readable message with JSON Pointers.
|
|
49
116
|
* @param {import('ajv').ErrorObject[]} errors
|
|
@@ -93,6 +160,8 @@ async function loadConfig(cwd) {
|
|
|
93
160
|
throw new Error(`Invalid JSON in ${configPath}: ${err.message}`);
|
|
94
161
|
}
|
|
95
162
|
|
|
163
|
+
parsed = migrateLegacyConfig(parsed);
|
|
164
|
+
|
|
96
165
|
if (!validate(parsed)) {
|
|
97
166
|
const details = formatSchemaErrors(validate.errors || []);
|
|
98
167
|
throw new Error(`Config validation failed for ${configPath}:\n${details}`);
|
|
@@ -39,6 +39,18 @@
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
},
|
|
42
|
+
"install": {
|
|
43
|
+
"type": "object",
|
|
44
|
+
"additionalProperties": false,
|
|
45
|
+
"description": "Where AgileFlow is installed. Project installs write into the current repository; global installs write under the user's home directory.",
|
|
46
|
+
"properties": {
|
|
47
|
+
"scope": {
|
|
48
|
+
"type": "string",
|
|
49
|
+
"enum": ["project", "global"],
|
|
50
|
+
"description": "Install scope for config, AgileFlow state, and IDE mirrors."
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
},
|
|
42
54
|
"behaviors": {
|
|
43
55
|
"type": "object",
|
|
44
56
|
"description": "Curated behavior presets. Each maps to one or more hooks the installer wires up. Disabling a behavior excludes its hooks from the generated hook-manifest.yaml.",
|
|
@@ -52,9 +64,17 @@
|
|
|
52
64
|
"type": "boolean",
|
|
53
65
|
"description": "SessionStart: inject the babysit-mentor pattern so Claude defaults to mentor mode without explicit invocation."
|
|
54
66
|
},
|
|
55
|
-
"
|
|
67
|
+
"damageControlBash": {
|
|
68
|
+
"type": "boolean",
|
|
69
|
+
"description": "PreToolUse: block dangerous Bash commands (rm -rf /, fork bombs, etc.)."
|
|
70
|
+
},
|
|
71
|
+
"damageControlEdit": {
|
|
56
72
|
"type": "boolean",
|
|
57
|
-
"description": "PreToolUse: block
|
|
73
|
+
"description": "PreToolUse: block risky Edit operations on sensitive paths (.env, .ssh/, etc.)."
|
|
74
|
+
},
|
|
75
|
+
"damageControlWrite": {
|
|
76
|
+
"type": "boolean",
|
|
77
|
+
"description": "PreToolUse: block risky Write operations on sensitive paths (.env, .ssh/, etc.)."
|
|
58
78
|
},
|
|
59
79
|
"preCompactState": {
|
|
60
80
|
"type": "boolean",
|
|
@@ -62,22 +82,12 @@
|
|
|
62
82
|
}
|
|
63
83
|
}
|
|
64
84
|
},
|
|
65
|
-
"
|
|
85
|
+
"learnings": {
|
|
66
86
|
"type": "object",
|
|
67
87
|
"additionalProperties": false,
|
|
88
|
+
"description": "Global on/off for the skill self-improvement system. When false, install-time scaffolding is skipped and no learnings hint is injected into the session prompt.",
|
|
68
89
|
"properties": {
|
|
69
|
-
"
|
|
70
|
-
"type": "string",
|
|
71
|
-
"enum": ["concise", "detailed", "teaching"]
|
|
72
|
-
},
|
|
73
|
-
"ask_level": {
|
|
74
|
-
"type": "string",
|
|
75
|
-
"enum": ["none", "decision_points", "always"]
|
|
76
|
-
},
|
|
77
|
-
"verbosity": {
|
|
78
|
-
"type": "string",
|
|
79
|
-
"enum": ["low", "medium", "high"]
|
|
80
|
-
}
|
|
90
|
+
"enabled": { "type": "boolean" }
|
|
81
91
|
}
|
|
82
92
|
},
|
|
83
93
|
"ide": {
|
|
@@ -86,7 +96,24 @@
|
|
|
86
96
|
"properties": {
|
|
87
97
|
"primary": {
|
|
88
98
|
"type": "string",
|
|
89
|
-
"enum": ["claude-code", "cursor", "windsurf", "codex"]
|
|
99
|
+
"enum": ["claude-code", "cursor", "windsurf", "codex", "antigravity"],
|
|
100
|
+
"description": "Deprecated alias for targets[0]; kept for back-compat with prior alphas."
|
|
101
|
+
},
|
|
102
|
+
"targets": {
|
|
103
|
+
"type": "array",
|
|
104
|
+
"minItems": 1,
|
|
105
|
+
"uniqueItems": true,
|
|
106
|
+
"items": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"enum": [
|
|
109
|
+
"claude-code",
|
|
110
|
+
"cursor",
|
|
111
|
+
"windsurf",
|
|
112
|
+
"codex",
|
|
113
|
+
"antigravity"
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
"description": "IDEs / CLIs to install AgileFlow surface into (skills, hooks, settings)."
|
|
90
117
|
}
|
|
91
118
|
}
|
|
92
119
|
},
|
|
@@ -30,14 +30,16 @@ async function writeConfig(cwd, config) {
|
|
|
30
30
|
version: 1,
|
|
31
31
|
plugins: config.plugins,
|
|
32
32
|
hooks: config.hooks,
|
|
33
|
+
install: config.install,
|
|
33
34
|
behaviors: config.behaviors,
|
|
34
|
-
|
|
35
|
+
learnings: config.learnings,
|
|
35
36
|
ide: config.ide,
|
|
36
37
|
language: config.language,
|
|
37
38
|
};
|
|
38
39
|
const content = JSON.stringify(payload, null, 2) + "\n";
|
|
39
40
|
|
|
40
41
|
try {
|
|
42
|
+
await fs.promises.mkdir(cwd, { recursive: true });
|
|
41
43
|
await fs.promises.writeFile(tmp, content, "utf8");
|
|
42
44
|
await fs.promises.rename(tmp, file);
|
|
43
45
|
} catch (err) {
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Babysit mentor skill renderer.
|
|
3
|
+
*
|
|
4
|
+
* The bundled babysit skill stays as the shared baseline. At install
|
|
5
|
+
* time we append IDE-specific guidance so the mirrored SKILL.md only
|
|
6
|
+
* names primitives the target can actually use.
|
|
7
|
+
*/
|
|
8
|
+
const { capabilitiesFor } = require("./capabilities.js");
|
|
9
|
+
|
|
10
|
+
const VALID_MODES = new Set(["full", "light", "minimal", "custom"]);
|
|
11
|
+
|
|
12
|
+
const DEFAULT_CUSTOM_FEATURES = {
|
|
13
|
+
planMode: true,
|
|
14
|
+
askQuestions: true,
|
|
15
|
+
taskTracking: true,
|
|
16
|
+
delegation: true,
|
|
17
|
+
progressUpdates: true,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @param {any} config
|
|
22
|
+
* @returns {{ mode: 'full' | 'light' | 'minimal' | 'custom' | null, features: Record<string, boolean> }}
|
|
23
|
+
*/
|
|
24
|
+
function resolveBabysitSettings(config) {
|
|
25
|
+
const raw =
|
|
26
|
+
config &&
|
|
27
|
+
config.plugins &&
|
|
28
|
+
config.plugins.core &&
|
|
29
|
+
config.plugins.core.settings &&
|
|
30
|
+
config.plugins.core.settings.babysit;
|
|
31
|
+
const mode = raw && VALID_MODES.has(raw.mode) ? raw.mode : null;
|
|
32
|
+
const features =
|
|
33
|
+
raw && raw.features && typeof raw.features === "object"
|
|
34
|
+
? { ...DEFAULT_CUSTOM_FEATURES, ...raw.features }
|
|
35
|
+
: { ...DEFAULT_CUSTOM_FEATURES };
|
|
36
|
+
return { mode, features };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @param {string} targetIde
|
|
41
|
+
* @param {any} config
|
|
42
|
+
* @returns {'full' | 'light' | 'minimal' | 'custom'}
|
|
43
|
+
*/
|
|
44
|
+
function resolveBabysitMode(targetIde, config) {
|
|
45
|
+
const { mode } = resolveBabysitSettings(config);
|
|
46
|
+
if (mode) return mode;
|
|
47
|
+
return targetIde === "claude-code" ? "full" : "light";
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @param {'full' | 'light' | 'minimal' | 'custom'} mode
|
|
52
|
+
* @param {Record<string, boolean>} customFeatures
|
|
53
|
+
* @returns {Record<string, boolean>}
|
|
54
|
+
*/
|
|
55
|
+
function featuresForMode(mode, customFeatures) {
|
|
56
|
+
if (mode === "custom")
|
|
57
|
+
return { ...DEFAULT_CUSTOM_FEATURES, ...customFeatures };
|
|
58
|
+
if (mode === "minimal") {
|
|
59
|
+
return {
|
|
60
|
+
planMode: false,
|
|
61
|
+
askQuestions: false,
|
|
62
|
+
taskTracking: false,
|
|
63
|
+
delegation: false,
|
|
64
|
+
progressUpdates: false,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
if (mode === "light") {
|
|
68
|
+
return {
|
|
69
|
+
planMode: true,
|
|
70
|
+
askQuestions: true,
|
|
71
|
+
taskTracking: true,
|
|
72
|
+
delegation: false,
|
|
73
|
+
progressUpdates: true,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return { ...DEFAULT_CUSTOM_FEATURES };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Build the IDE-specific appendix for the babysit skill.
|
|
81
|
+
*
|
|
82
|
+
* @param {string} targetIde
|
|
83
|
+
* @param {any} config
|
|
84
|
+
* @returns {string}
|
|
85
|
+
*/
|
|
86
|
+
function renderBabysitAppendix(targetIde, config) {
|
|
87
|
+
const caps = capabilitiesFor(targetIde);
|
|
88
|
+
const mode = resolveBabysitMode(targetIde, config);
|
|
89
|
+
const settings = resolveBabysitSettings(config);
|
|
90
|
+
const features = featuresForMode(mode, settings.features);
|
|
91
|
+
|
|
92
|
+
const lines = [];
|
|
93
|
+
lines.push("## IDE-specific guidance");
|
|
94
|
+
lines.push("");
|
|
95
|
+
lines.push(`- Installed babysit mode: \`${mode}\``);
|
|
96
|
+
if (mode === "custom") {
|
|
97
|
+
const enabled = Object.entries(features)
|
|
98
|
+
.filter(([, value]) => value)
|
|
99
|
+
.map(([key]) => key);
|
|
100
|
+
lines.push(
|
|
101
|
+
`- Custom behaviors enabled: ${enabled.length ? enabled.join(", ") : "none"}`,
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (targetIde === "claude-code") {
|
|
106
|
+
if (features.askQuestions) {
|
|
107
|
+
lines.push(
|
|
108
|
+
"- Use `AskUserQuestion` at decision points when a choice would benefit from user control.",
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
if (features.planMode) {
|
|
112
|
+
lines.push(
|
|
113
|
+
"- Use `EnterPlanMode` for non-trivial implementation, then `ExitPlanMode` when the plan is ready.",
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
if (features.taskTracking) {
|
|
117
|
+
lines.push(
|
|
118
|
+
"- Use `TaskCreate` / `TaskUpdate` for 3+ step work and update as each step lands.",
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
if (features.delegation) {
|
|
122
|
+
lines.push(
|
|
123
|
+
"- Use subagents for bounded parallel exploration or delegation when the work splits cleanly.",
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
if (features.progressUpdates) {
|
|
127
|
+
lines.push("- Send short progress updates while working for a while.");
|
|
128
|
+
}
|
|
129
|
+
if (mode === "light") {
|
|
130
|
+
lines.push(
|
|
131
|
+
"- Keep the prompt surface lighter: ask only when blocked or when the next move is genuinely ambiguous.",
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
if (mode === "minimal") {
|
|
135
|
+
lines.push(
|
|
136
|
+
"- Keep the interaction terse: make one recommendation, explain the next action, and avoid repeated confirmation loops.",
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
return `${lines.join("\n")}\n`;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (targetIde === "codex" && features.taskTracking) {
|
|
143
|
+
lines.push(
|
|
144
|
+
"- Use Codex tasks for multi-step work and keep the task scoped to a single clear outcome.",
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
if (features.askQuestions) {
|
|
148
|
+
lines.push(
|
|
149
|
+
"- Use `request_user_input` for small sets of clarifying questions when collaboration mode is enabled; otherwise fall back to a concise numbered choice list with one recommended option first.",
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
if (features.planMode) {
|
|
153
|
+
lines.push(
|
|
154
|
+
"- Write a short plan in plain text before non-trivial implementation.",
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
if (features.delegation) {
|
|
158
|
+
if (caps.agents) {
|
|
159
|
+
lines.push(
|
|
160
|
+
"- Use subagents for bounded parallel exploration or delegation when the work splits cleanly.",
|
|
161
|
+
);
|
|
162
|
+
} else {
|
|
163
|
+
lines.push(
|
|
164
|
+
"- If subagents are unavailable, keep delegation in plain text and split the work into explicit named steps.",
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (features.taskTracking) {
|
|
169
|
+
lines.push(
|
|
170
|
+
"- Track progress visibly with a checklist or step list and mark each item complete as soon as it lands.",
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
if (features.progressUpdates) {
|
|
174
|
+
lines.push("- Keep the user updated as each step lands.");
|
|
175
|
+
}
|
|
176
|
+
return `${lines.join("\n")}\n`;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Append IDE-specific babysit guidance to a SKILL.md payload.
|
|
181
|
+
*
|
|
182
|
+
* @param {string} skillId
|
|
183
|
+
* @param {string} sourceText
|
|
184
|
+
* @param {{ targetIde?: string, config?: any }} [context]
|
|
185
|
+
* @returns {string}
|
|
186
|
+
*/
|
|
187
|
+
function renderSkillForTarget(skillId, sourceText, context = {}) {
|
|
188
|
+
if (skillId !== "agileflow-babysit-mentor") {
|
|
189
|
+
return sourceText;
|
|
190
|
+
}
|
|
191
|
+
const targetIde = context.targetIde || "claude-code";
|
|
192
|
+
const appendix = renderBabysitAppendix(targetIde, context.config);
|
|
193
|
+
return `${sourceText.replace(/\s+$/u, "")}\n\n${appendix}`;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
module.exports = {
|
|
197
|
+
resolveBabysitSettings,
|
|
198
|
+
resolveBabysitMode,
|
|
199
|
+
featuresForMode,
|
|
200
|
+
renderBabysitAppendix,
|
|
201
|
+
renderSkillForTarget,
|
|
202
|
+
};
|