agileflow 3.4.3 → 4.0.0-alpha.2
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 +238 -473
- package/README.md +22 -114
- package/bin/agileflow.js +15 -0
- package/bin/hooks/pre-bash.js +35 -0
- package/bin/hooks/pre-compact.js +34 -0
- package/bin/hooks/pre-edit.js +32 -0
- package/bin/hooks/pre-write.js +32 -0
- package/bin/hooks/session-start.js +42 -0
- package/bin/hooks/stop.js +34 -0
- package/content/plugins/ads/plugin.yaml +14 -0
- package/content/plugins/audit/plugin.yaml +14 -0
- package/content/plugins/core/hooks/babysit-mentor-injector.js +55 -0
- package/content/plugins/core/hooks/context-loader.js +169 -0
- package/content/plugins/core/hooks/damage-control-bash.js +78 -0
- package/content/plugins/core/hooks/damage-control-edit.js +76 -0
- package/content/plugins/core/hooks/damage-control-patterns.yaml +100 -0
- package/content/plugins/core/hooks/damage-control-write.js +72 -0
- package/content/plugins/core/hooks/pre-compact-state.js +90 -0
- package/content/plugins/core/hooks/session-welcome.js +19 -0
- package/content/plugins/core/plugin.yaml +82 -0
- package/content/plugins/core/skills/agileflow-adr/SKILL.md +179 -0
- package/content/plugins/core/skills/agileflow-babysit-mentor/SKILL.md +144 -0
- package/content/plugins/core/skills/agileflow-epic-planner/SKILL.md +179 -0
- package/content/plugins/core/skills/agileflow-status-updater/SKILL.md +132 -0
- package/content/plugins/core/skills/agileflow-story-writer/SKILL.md +200 -0
- package/content/plugins/council/plugin.yaml +14 -0
- package/content/plugins/seo/plugin.yaml +14 -0
- package/package.json +29 -49
- package/src/cli/commands/doctor.js +159 -0
- package/src/cli/commands/hook.js +80 -0
- package/src/cli/commands/setup.js +292 -0
- package/src/cli/commands/status.js +47 -0
- package/src/cli/commands/update.js +83 -0
- package/src/cli/index.js +73 -0
- package/src/cli/wizard/behaviors-picker.js +108 -0
- package/src/cli/wizard/ide-picker.js +57 -0
- package/src/cli/wizard/personalization.js +64 -0
- package/src/cli/wizard/plugin-picker.js +106 -0
- package/src/lib/hash.js +41 -0
- package/src/runtime/config/defaults.js +61 -0
- package/src/runtime/config/loader.js +117 -0
- package/src/runtime/config/schema.json +99 -0
- package/src/runtime/config/writer.js +55 -0
- package/src/runtime/hooks/aggregator.js +157 -0
- package/src/runtime/hooks/chain.js +93 -0
- package/src/runtime/hooks/logger.js +68 -0
- package/src/runtime/hooks/manifest-loader.js +228 -0
- package/src/runtime/hooks/orchestrator.js +322 -0
- package/src/runtime/ide/capabilities.js +111 -0
- package/src/runtime/ide/claude-code-settings.js +234 -0
- package/src/runtime/ide/claude-code-skills.js +202 -0
- package/src/runtime/installer/file-index.js +112 -0
- package/src/runtime/installer/install.js +329 -0
- package/src/runtime/installer/stash.js +61 -0
- package/src/runtime/installer/sync-engine.js +205 -0
- package/src/runtime/plugins/registry.js +132 -0
- package/src/runtime/plugins/resolver.js +138 -0
- package/src/runtime/plugins/validator.js +196 -0
- package/src/runtime/skills/validator.js +335 -0
- package/lib/README.md +0 -178
- package/lib/api-routes.js +0 -625
- package/lib/api-server.js +0 -278
- package/lib/cache-provider.js +0 -155
- package/lib/codebase-indexer.js +0 -819
- package/lib/colors.generated.js +0 -117
- package/lib/colors.js +0 -341
- package/lib/consent.js +0 -232
- package/lib/content-sanitizer.js +0 -464
- package/lib/correlation.js +0 -277
- package/lib/drivers/claude-driver.ts +0 -312
- package/lib/drivers/codex-driver.ts +0 -464
- package/lib/drivers/driver-manager.ts +0 -159
- package/lib/drivers/gemini-driver.ts +0 -498
- package/lib/drivers/index.ts +0 -17
- package/lib/error-codes.js +0 -590
- package/lib/errors.js +0 -670
- package/lib/feature-flags.js +0 -171
- package/lib/feedback.js +0 -595
- package/lib/file-cache.js +0 -541
- package/lib/flag-detection.js +0 -344
- package/lib/format-error.js +0 -156
- package/lib/gate-runner.js +0 -282
- package/lib/generator-factory.js +0 -333
- package/lib/git-operations.js +0 -266
- package/lib/lazy-require.js +0 -59
- package/lib/lock-file.js +0 -144
- package/lib/logger.js +0 -106
- package/lib/merge-operations.js +0 -1006
- package/lib/path-resolver.js +0 -544
- package/lib/path-utils.js +0 -49
- package/lib/paths.js +0 -291
- package/lib/placeholder-registry.js +0 -822
- package/lib/process-executor.js +0 -214
- package/lib/progress.js +0 -334
- package/lib/protocol/driver.ts +0 -354
- package/lib/protocol/index.ts +0 -12
- package/lib/protocol/ir.ts +0 -271
- package/lib/registry-cache.js +0 -80
- package/lib/registry-di.js +0 -358
- package/lib/result-schema.js +0 -363
- package/lib/result.js +0 -210
- package/lib/session-display.js +0 -331
- package/lib/session-operations.js +0 -611
- package/lib/session-registry.js +0 -484
- package/lib/session-state-machine.js +0 -465
- package/lib/session-switching.js +0 -191
- package/lib/skill-loader.js +0 -213
- package/lib/smart-json-file.js +0 -682
- package/lib/state-machine.js +0 -286
- package/lib/table-formatter.js +0 -519
- package/lib/template-loader.js +0 -143
- package/lib/transient-status.js +0 -374
- package/lib/ui-manager.js +0 -612
- package/lib/validate-args.js +0 -213
- package/lib/validate-commands.js +0 -308
- package/lib/validate-names.js +0 -143
- package/lib/validate-paths.js +0 -434
- package/lib/validate.js +0 -134
- package/lib/worktree-operations.js +0 -201
- package/lib/yaml-utils.js +0 -164
- package/scripts/README.md +0 -267
- package/scripts/af +0 -34
- package/scripts/agent-loop.js +0 -879
- package/scripts/agileflow-configure.js +0 -368
- package/scripts/agileflow-statusline.sh +0 -857
- package/scripts/agileflow-welcome.js +0 -2246
- package/scripts/api-server-runner.js +0 -177
- package/scripts/archive-completed-stories.sh +0 -308
- package/scripts/auto-self-improve.js +0 -326
- package/scripts/automation-run-due.js +0 -128
- package/scripts/babysit-clear-restore.js +0 -154
- package/scripts/babysit-context-restore.js +0 -89
- package/scripts/backfill-ideation-status.js +0 -128
- package/scripts/batch-pmap-loop.js +0 -551
- package/scripts/check-sessions.js +0 -116
- package/scripts/check-update.js +0 -282
- package/scripts/ci-summary.js +0 -294
- package/scripts/claude-smart.sh +0 -85
- package/scripts/claude-tmux.sh +0 -737
- package/scripts/claude-watchdog.sh +0 -225
- package/scripts/clear-active-command.js +0 -48
- package/scripts/compress-status.sh +0 -116
- package/scripts/context-loader.js +0 -310
- package/scripts/damage-control/bash-tool-damage-control.js +0 -22
- package/scripts/damage-control/edit-tool-damage-control.js +0 -19
- package/scripts/damage-control/patterns.yaml +0 -227
- package/scripts/damage-control/write-tool-damage-control.js +0 -19
- package/scripts/damage-control-bash.js +0 -51
- package/scripts/damage-control-edit.js +0 -48
- package/scripts/damage-control-multi-agent.js +0 -231
- package/scripts/damage-control-write.js +0 -48
- package/scripts/dependency-check.js +0 -311
- package/scripts/document-repl.js +0 -793
- package/scripts/expertise-metrics.sh +0 -264
- package/scripts/generate-all.sh +0 -77
- package/scripts/generate-colors.js +0 -314
- package/scripts/generators/agent-registry.js +0 -183
- package/scripts/generators/command-registry.js +0 -166
- package/scripts/generators/index.js +0 -85
- package/scripts/generators/inject-babysit.js +0 -191
- package/scripts/generators/inject-help.js +0 -125
- package/scripts/generators/inject-readme.js +0 -166
- package/scripts/generators/skill-registry.js +0 -188
- package/scripts/get-env.js +0 -225
- package/scripts/init.sh +0 -76
- package/scripts/lib/README-portable-tasks.md +0 -424
- package/scripts/lib/ac-test-matcher.js +0 -452
- package/scripts/lib/audit-cleanup.js +0 -250
- package/scripts/lib/audit-registry.js +0 -340
- package/scripts/lib/automation-registry.js +0 -544
- package/scripts/lib/automation-runner.js +0 -476
- package/scripts/lib/browser-qa-evidence.js +0 -409
- package/scripts/lib/browser-qa-status.js +0 -192
- package/scripts/lib/bus-utils.js +0 -473
- package/scripts/lib/colors.generated.sh +0 -82
- package/scripts/lib/colors.sh +0 -46
- package/scripts/lib/command-prereqs.js +0 -280
- package/scripts/lib/concurrency-limiter.js +0 -511
- package/scripts/lib/configure-detect.js +0 -596
- package/scripts/lib/configure-features.js +0 -1927
- package/scripts/lib/configure-repair.js +0 -327
- package/scripts/lib/configure-utils.js +0 -114
- package/scripts/lib/context-formatter.js +0 -1158
- package/scripts/lib/context-loader.js +0 -840
- package/scripts/lib/counter.js +0 -103
- package/scripts/lib/damage-control-utils.js +0 -619
- package/scripts/lib/feature-catalog.js +0 -332
- package/scripts/lib/file-lock.js +0 -392
- package/scripts/lib/file-tracking.js +0 -735
- package/scripts/lib/frontmatter-parser.js +0 -133
- package/scripts/lib/gate-enforcer.js +0 -295
- package/scripts/lib/hook-metrics.js +0 -324
- package/scripts/lib/ideation-index.js +0 -1205
- package/scripts/lib/json-utils.sh +0 -162
- package/scripts/lib/lifecycle-detector.js +0 -125
- package/scripts/lib/model-profiles.js +0 -118
- package/scripts/lib/portable-tasks-cli.js +0 -274
- package/scripts/lib/portable-tasks.js +0 -479
- package/scripts/lib/process-cleanup.js +0 -527
- package/scripts/lib/quality-gates.js +0 -788
- package/scripts/lib/scale-detector.js +0 -396
- package/scripts/lib/sessionRegistry.js +0 -678
- package/scripts/lib/signal-detectors.js +0 -867
- package/scripts/lib/skill-catalog.js +0 -557
- package/scripts/lib/skill-recommender.js +0 -311
- package/scripts/lib/state-migrator.js +0 -353
- package/scripts/lib/status-task-bridge.js +0 -522
- package/scripts/lib/status-writer.js +0 -255
- package/scripts/lib/story-claiming.js +0 -704
- package/scripts/lib/story-state-machine.js +0 -437
- package/scripts/lib/sync-ideation-status.js +0 -291
- package/scripts/lib/task-registry-cache.js +0 -490
- package/scripts/lib/task-registry.js +0 -1191
- package/scripts/lib/task-sync.js +0 -230
- package/scripts/lib/tdd-phase-manager.js +0 -455
- package/scripts/lib/team-events.js +0 -510
- package/scripts/lib/tmux-audit-monitor.js +0 -612
- package/scripts/lib/tmux-group-colors.js +0 -113
- package/scripts/lib/tool-registry.yaml +0 -241
- package/scripts/lib/tool-shed.js +0 -441
- package/scripts/lib/validation-registry.js +0 -177
- package/scripts/messaging-bridge.js +0 -561
- package/scripts/migrate-ideation-index.js +0 -553
- package/scripts/native-team-observer.js +0 -219
- package/scripts/obtain-context.js +0 -272
- package/scripts/pre-push-check.sh +0 -46
- package/scripts/precompact-context.sh +0 -306
- package/scripts/query-codebase.js +0 -543
- package/scripts/ralph-loop.js +0 -1278
- package/scripts/resume-session.sh +0 -121
- package/scripts/screenshot-verifier.js +0 -215
- package/scripts/session-boundary.js +0 -138
- package/scripts/session-coordinator.sh +0 -232
- package/scripts/session-manager.js +0 -546
- package/scripts/smart-detect.js +0 -449
- package/scripts/spawn-audit-sessions.js +0 -877
- package/scripts/spawn-parallel.js +0 -751
- package/scripts/strip-ai-attribution.js +0 -63
- package/scripts/task-completed-gate.js +0 -237
- package/scripts/team-manager.js +0 -596
- package/scripts/team-status-display.js +0 -200
- package/scripts/teammate-idle-gate.js +0 -237
- package/scripts/test-session-boundary.js +0 -80
- package/scripts/tmux-close-windows.sh +0 -180
- package/scripts/tmux-restore-window.sh +0 -67
- package/scripts/tmux-save-closed-window.sh +0 -35
- package/scripts/tui/App.js +0 -151
- package/scripts/tui/Dashboard.js +0 -277
- package/scripts/tui/blessed/data/watcher.js +0 -180
- package/scripts/tui/blessed/index.js +0 -244
- package/scripts/tui/blessed/panels/output.js +0 -101
- package/scripts/tui/blessed/panels/sessions.js +0 -150
- package/scripts/tui/blessed/panels/trace.js +0 -97
- package/scripts/tui/blessed/ui/help.js +0 -77
- package/scripts/tui/blessed/ui/screen.js +0 -52
- package/scripts/tui/blessed/ui/statusbar.js +0 -47
- package/scripts/tui/blessed/ui/tabbar.js +0 -99
- package/scripts/tui/index.js +0 -70
- package/scripts/tui/lib/crashRecovery.js +0 -304
- package/scripts/tui/lib/eventStream.js +0 -309
- package/scripts/tui/lib/keyboard.js +0 -261
- package/scripts/tui/lib/loopControl.js +0 -371
- package/scripts/tui/panels/OutputPanel.js +0 -240
- package/scripts/tui/panels/SessionPanel.js +0 -170
- package/scripts/tui/panels/TracePanel.js +0 -298
- package/scripts/tui/simple-tui.js +0 -510
- package/scripts/validate-expertise.sh +0 -263
- package/scripts/validate-tokens.sh +0 -73
- package/scripts/validators/README.md +0 -143
- package/scripts/validators/component-validator.js +0 -239
- package/scripts/validators/json-schema-validator.js +0 -186
- package/scripts/validators/markdown-validator.js +0 -152
- package/scripts/validators/migration-validator.js +0 -129
- package/scripts/validators/security-validator.js +0 -380
- package/scripts/validators/story-format-validator.js +0 -197
- package/scripts/validators/test-result-validator.js +0 -114
- package/scripts/validators/workflow-validator.js +0 -247
- package/scripts/welcome-deferred.js +0 -437
- package/scripts/worktree-create.sh +0 -111
- package/src/core/agents/a11y-analyzer-aria.md +0 -155
- package/src/core/agents/a11y-analyzer-forms.md +0 -162
- package/src/core/agents/a11y-analyzer-keyboard.md +0 -175
- package/src/core/agents/a11y-analyzer-semantic.md +0 -153
- package/src/core/agents/a11y-analyzer-visual.md +0 -158
- package/src/core/agents/a11y-consensus.md +0 -248
- package/src/core/agents/accessibility.md +0 -515
- package/src/core/agents/adr-writer.md +0 -463
- package/src/core/agents/ads-audit-budget.md +0 -181
- package/src/core/agents/ads-audit-compliance.md +0 -169
- package/src/core/agents/ads-audit-creative.md +0 -164
- package/src/core/agents/ads-audit-google.md +0 -226
- package/src/core/agents/ads-audit-meta.md +0 -183
- package/src/core/agents/ads-audit-tracking.md +0 -197
- package/src/core/agents/ads-consensus.md +0 -396
- package/src/core/agents/ads-generate.md +0 -145
- package/src/core/agents/ads-performance-tracker.md +0 -197
- package/src/core/agents/analytics.md +0 -617
- package/src/core/agents/api-quality-analyzer-conventions.md +0 -148
- package/src/core/agents/api-quality-analyzer-docs.md +0 -176
- package/src/core/agents/api-quality-analyzer-errors.md +0 -183
- package/src/core/agents/api-quality-analyzer-pagination.md +0 -171
- package/src/core/agents/api-quality-analyzer-versioning.md +0 -143
- package/src/core/agents/api-quality-consensus.md +0 -214
- package/src/core/agents/api-validator.md +0 -183
- package/src/core/agents/api.md +0 -665
- package/src/core/agents/arch-analyzer-circular.md +0 -148
- package/src/core/agents/arch-analyzer-complexity.md +0 -171
- package/src/core/agents/arch-analyzer-coupling.md +0 -146
- package/src/core/agents/arch-analyzer-layering.md +0 -151
- package/src/core/agents/arch-analyzer-patterns.md +0 -162
- package/src/core/agents/arch-consensus.md +0 -227
- package/src/core/agents/brainstorm-analyzer-features.md +0 -169
- package/src/core/agents/brainstorm-analyzer-growth.md +0 -161
- package/src/core/agents/brainstorm-analyzer-integration.md +0 -172
- package/src/core/agents/brainstorm-analyzer-market.md +0 -147
- package/src/core/agents/brainstorm-analyzer-ux.md +0 -167
- package/src/core/agents/brainstorm-consensus.md +0 -237
- package/src/core/agents/browser-qa.md +0 -328
- package/src/core/agents/ci.md +0 -511
- package/src/core/agents/code-reviewer.md +0 -288
- package/src/core/agents/codebase-query.md +0 -266
- package/src/core/agents/completeness-analyzer-api.md +0 -190
- package/src/core/agents/completeness-analyzer-conditional.md +0 -201
- package/src/core/agents/completeness-analyzer-handlers.md +0 -159
- package/src/core/agents/completeness-analyzer-imports.md +0 -159
- package/src/core/agents/completeness-analyzer-routes.md +0 -182
- package/src/core/agents/completeness-analyzer-state.md +0 -188
- package/src/core/agents/completeness-analyzer-stubs.md +0 -198
- package/src/core/agents/completeness-consensus.md +0 -286
- package/src/core/agents/compliance.md +0 -509
- package/src/core/agents/council-advocate.md +0 -206
- package/src/core/agents/council-analyst.md +0 -252
- package/src/core/agents/council-optimist.md +0 -170
- package/src/core/agents/database.md +0 -601
- package/src/core/agents/datamigration.md +0 -699
- package/src/core/agents/design.md +0 -525
- package/src/core/agents/devops.md +0 -720
- package/src/core/agents/documentation.md +0 -504
- package/src/core/agents/epic-planner.md +0 -480
- package/src/core/agents/error-analyzer.md +0 -201
- package/src/core/agents/integrations.md +0 -603
- package/src/core/agents/legal-analyzer-a11y.md +0 -110
- package/src/core/agents/legal-analyzer-ai.md +0 -117
- package/src/core/agents/legal-analyzer-consumer.md +0 -108
- package/src/core/agents/legal-analyzer-content.md +0 -113
- package/src/core/agents/legal-analyzer-international.md +0 -115
- package/src/core/agents/legal-analyzer-licensing.md +0 -115
- package/src/core/agents/legal-analyzer-privacy.md +0 -108
- package/src/core/agents/legal-analyzer-security.md +0 -112
- package/src/core/agents/legal-analyzer-terms.md +0 -111
- package/src/core/agents/legal-consensus.md +0 -242
- package/src/core/agents/logic-analyzer-edge.md +0 -170
- package/src/core/agents/logic-analyzer-flow.md +0 -253
- package/src/core/agents/logic-analyzer-invariant.md +0 -206
- package/src/core/agents/logic-analyzer-race.md +0 -266
- package/src/core/agents/logic-analyzer-type.md +0 -217
- package/src/core/agents/logic-consensus.md +0 -253
- package/src/core/agents/mentor.md +0 -654
- package/src/core/agents/mobile.md +0 -501
- package/src/core/agents/monitoring.md +0 -537
- package/src/core/agents/multi-expert.md +0 -311
- package/src/core/agents/orchestrator.md +0 -749
- package/src/core/agents/perf-analyzer-assets.md +0 -174
- package/src/core/agents/perf-analyzer-bundle.md +0 -165
- package/src/core/agents/perf-analyzer-caching.md +0 -160
- package/src/core/agents/perf-analyzer-compute.md +0 -165
- package/src/core/agents/perf-analyzer-memory.md +0 -182
- package/src/core/agents/perf-analyzer-network.md +0 -157
- package/src/core/agents/perf-analyzer-queries.md +0 -155
- package/src/core/agents/perf-analyzer-rendering.md +0 -156
- package/src/core/agents/perf-consensus.md +0 -280
- package/src/core/agents/performance.md +0 -492
- package/src/core/agents/product.md +0 -535
- package/src/core/agents/qa.md +0 -765
- package/src/core/agents/readme-updater.md +0 -579
- package/src/core/agents/refactor.md +0 -558
- package/src/core/agents/research.md +0 -453
- package/src/core/agents/rlm-subcore.md +0 -207
- package/src/core/agents/schema-validator.md +0 -454
- package/src/core/agents/security-analyzer-api.md +0 -199
- package/src/core/agents/security-analyzer-auth.md +0 -160
- package/src/core/agents/security-analyzer-authz.md +0 -168
- package/src/core/agents/security-analyzer-deps.md +0 -147
- package/src/core/agents/security-analyzer-infra.md +0 -176
- package/src/core/agents/security-analyzer-injection.md +0 -148
- package/src/core/agents/security-analyzer-input.md +0 -191
- package/src/core/agents/security-analyzer-secrets.md +0 -175
- package/src/core/agents/security-consensus.md +0 -276
- package/src/core/agents/security.md +0 -486
- package/src/core/agents/seo-analyzer-content.md +0 -167
- package/src/core/agents/seo-analyzer-images.md +0 -187
- package/src/core/agents/seo-analyzer-performance.md +0 -206
- package/src/core/agents/seo-analyzer-schema.md +0 -176
- package/src/core/agents/seo-analyzer-sitemap.md +0 -172
- package/src/core/agents/seo-analyzer-technical.md +0 -144
- package/src/core/agents/seo-consensus.md +0 -289
- package/src/core/agents/team-coordinator.md +0 -333
- package/src/core/agents/team-lead.md +0 -171
- package/src/core/agents/test-analyzer-assertions.md +0 -181
- package/src/core/agents/test-analyzer-coverage.md +0 -183
- package/src/core/agents/test-analyzer-fragility.md +0 -185
- package/src/core/agents/test-analyzer-integration.md +0 -155
- package/src/core/agents/test-analyzer-maintenance.md +0 -173
- package/src/core/agents/test-analyzer-mocking.md +0 -178
- package/src/core/agents/test-analyzer-patterns.md +0 -189
- package/src/core/agents/test-analyzer-structure.md +0 -177
- package/src/core/agents/test-consensus.md +0 -294
- package/src/core/agents/testing.md +0 -527
- package/src/core/agents/ui-validator.md +0 -331
- package/src/core/agents/ui.md +0 -1227
- package/src/core/commands/adr/list.md +0 -191
- package/src/core/commands/adr/update.md +0 -258
- package/src/core/commands/adr/view.md +0 -274
- package/src/core/commands/adr.md +0 -394
- package/src/core/commands/ads/audit.md +0 -453
- package/src/core/commands/ads/budget.md +0 -97
- package/src/core/commands/ads/competitor.md +0 -112
- package/src/core/commands/ads/creative.md +0 -85
- package/src/core/commands/ads/generate.md +0 -238
- package/src/core/commands/ads/google.md +0 -112
- package/src/core/commands/ads/health.md +0 -327
- package/src/core/commands/ads/landing.md +0 -119
- package/src/core/commands/ads/linkedin.md +0 -112
- package/src/core/commands/ads/meta.md +0 -91
- package/src/core/commands/ads/microsoft.md +0 -115
- package/src/core/commands/ads/plan.md +0 -321
- package/src/core/commands/ads/test-plan.md +0 -317
- package/src/core/commands/ads/tiktok.md +0 -129
- package/src/core/commands/ads/track.md +0 -288
- package/src/core/commands/ads/youtube.md +0 -124
- package/src/core/commands/ads.md +0 -140
- package/src/core/commands/agent.md +0 -256
- package/src/core/commands/api.md +0 -267
- package/src/core/commands/assign.md +0 -369
- package/src/core/commands/audit.md +0 -531
- package/src/core/commands/auto.md +0 -556
- package/src/core/commands/automate.md +0 -415
- package/src/core/commands/babysit.md +0 -643
- package/src/core/commands/baseline.md +0 -743
- package/src/core/commands/batch.md +0 -551
- package/src/core/commands/blockers.md +0 -602
- package/src/core/commands/board.md +0 -509
- package/src/core/commands/browser-qa.md +0 -240
- package/src/core/commands/changelog.md +0 -582
- package/src/core/commands/choose.md +0 -430
- package/src/core/commands/ci.md +0 -330
- package/src/core/commands/code/accessibility.md +0 -363
- package/src/core/commands/code/api.md +0 -313
- package/src/core/commands/code/architecture.md +0 -313
- package/src/core/commands/code/completeness.md +0 -519
- package/src/core/commands/code/legal.md +0 -509
- package/src/core/commands/code/logic.md +0 -432
- package/src/core/commands/code/performance.md +0 -506
- package/src/core/commands/code/security.md +0 -509
- package/src/core/commands/code/test.md +0 -505
- package/src/core/commands/compress.md +0 -408
- package/src/core/commands/configure.md +0 -1159
- package/src/core/commands/context/export.md +0 -296
- package/src/core/commands/context/full.md +0 -353
- package/src/core/commands/context/note.md +0 -380
- package/src/core/commands/council.md +0 -592
- package/src/core/commands/debt.md +0 -491
- package/src/core/commands/deploy.md +0 -864
- package/src/core/commands/deps.md +0 -728
- package/src/core/commands/diagnose.md +0 -404
- package/src/core/commands/docs.md +0 -469
- package/src/core/commands/epic/edit.md +0 -213
- package/src/core/commands/epic/list.md +0 -190
- package/src/core/commands/epic/view.md +0 -267
- package/src/core/commands/epic.md +0 -477
- package/src/core/commands/export.md +0 -238
- package/src/core/commands/feedback.md +0 -603
- package/src/core/commands/handoff.md +0 -386
- package/src/core/commands/help.md +0 -194
- package/src/core/commands/ideate/brief.md +0 -363
- package/src/core/commands/ideate/discover.md +0 -399
- package/src/core/commands/ideate/features.md +0 -497
- package/src/core/commands/ideate/history.md +0 -403
- package/src/core/commands/ideate/new.md +0 -900
- package/src/core/commands/impact.md +0 -407
- package/src/core/commands/install.md +0 -529
- package/src/core/commands/learn/explain.md +0 -118
- package/src/core/commands/learn/glossary.md +0 -135
- package/src/core/commands/learn/patterns.md +0 -138
- package/src/core/commands/learn/tour.md +0 -126
- package/src/core/commands/maintain.md +0 -558
- package/src/core/commands/metrics.md +0 -844
- package/src/core/commands/migrate/codemods.md +0 -151
- package/src/core/commands/migrate/plan.md +0 -131
- package/src/core/commands/migrate/scan.md +0 -114
- package/src/core/commands/migrate/validate.md +0 -119
- package/src/core/commands/multi-expert.md +0 -447
- package/src/core/commands/packages.md +0 -535
- package/src/core/commands/pr.md +0 -337
- package/src/core/commands/readme-sync.md +0 -329
- package/src/core/commands/research/analyze.md +0 -798
- package/src/core/commands/research/ask.md +0 -864
- package/src/core/commands/research/import.md +0 -1025
- package/src/core/commands/research/list.md +0 -273
- package/src/core/commands/research/synthesize.md +0 -928
- package/src/core/commands/research/view.md +0 -323
- package/src/core/commands/retro.md +0 -795
- package/src/core/commands/review.md +0 -694
- package/src/core/commands/rlm.md +0 -446
- package/src/core/commands/roadmap/analyze.md +0 -400
- package/src/core/commands/rpi.md +0 -633
- package/src/core/commands/seo/audit.md +0 -444
- package/src/core/commands/seo/competitor.md +0 -174
- package/src/core/commands/seo/content.md +0 -107
- package/src/core/commands/seo/geo.md +0 -229
- package/src/core/commands/seo/hreflang.md +0 -140
- package/src/core/commands/seo/images.md +0 -96
- package/src/core/commands/seo/page.md +0 -198
- package/src/core/commands/seo/plan.md +0 -163
- package/src/core/commands/seo/programmatic.md +0 -131
- package/src/core/commands/seo/references/cwv-thresholds.md +0 -64
- package/src/core/commands/seo/references/eeat-framework.md +0 -110
- package/src/core/commands/seo/references/quality-gates.md +0 -91
- package/src/core/commands/seo/references/schema-types.md +0 -102
- package/src/core/commands/seo/schema.md +0 -183
- package/src/core/commands/seo/sitemap.md +0 -97
- package/src/core/commands/seo/technical.md +0 -100
- package/src/core/commands/seo.md +0 -107
- package/src/core/commands/session/cleanup.md +0 -452
- package/src/core/commands/session/end.md +0 -865
- package/src/core/commands/session/history.md +0 -293
- package/src/core/commands/session/init.md +0 -210
- package/src/core/commands/session/new.md +0 -827
- package/src/core/commands/session/resume.md +0 -291
- package/src/core/commands/session/spawn.md +0 -205
- package/src/core/commands/session/status.md +0 -274
- package/src/core/commands/skill/list.md +0 -139
- package/src/core/commands/skill/recommend.md +0 -216
- package/src/core/commands/sprint.md +0 -714
- package/src/core/commands/status/undo.md +0 -191
- package/src/core/commands/status.md +0 -423
- package/src/core/commands/story/edit.md +0 -204
- package/src/core/commands/story/list.md +0 -199
- package/src/core/commands/story/view.md +0 -312
- package/src/core/commands/story-validate.md +0 -491
- package/src/core/commands/story.md +0 -465
- package/src/core/commands/tdd-next.md +0 -238
- package/src/core/commands/tdd.md +0 -211
- package/src/core/commands/team/guide.md +0 -688
- package/src/core/commands/team/list.md +0 -59
- package/src/core/commands/team/start.md +0 -130
- package/src/core/commands/team/status.md +0 -66
- package/src/core/commands/team/stop.md +0 -78
- package/src/core/commands/template.md +0 -644
- package/src/core/commands/tests.md +0 -731
- package/src/core/commands/update.md +0 -591
- package/src/core/commands/validate-expertise.md +0 -305
- package/src/core/commands/velocity.md +0 -630
- package/src/core/commands/verify.md +0 -534
- package/src/core/commands/whats-new.md +0 -201
- package/src/core/commands/workflow.md +0 -449
- package/src/core/council/sessions/.gitkeep +0 -0
- package/src/core/council/shared_reasoning.template.md +0 -106
- package/src/core/experts/README.md +0 -236
- package/src/core/experts/_core-expertise.yaml +0 -105
- package/src/core/experts/accessibility/expertise.yaml +0 -115
- package/src/core/experts/accessibility/question.md +0 -41
- package/src/core/experts/accessibility/self-improve.md +0 -45
- package/src/core/experts/accessibility/workflow.md +0 -59
- package/src/core/experts/adr-writer/expertise.yaml +0 -138
- package/src/core/experts/adr-writer/question.md +0 -56
- package/src/core/experts/adr-writer/self-improve.md +0 -106
- package/src/core/experts/adr-writer/workflow.md +0 -184
- package/src/core/experts/analytics/expertise.yaml +0 -119
- package/src/core/experts/analytics/question.md +0 -74
- package/src/core/experts/analytics/self-improve.md +0 -163
- package/src/core/experts/analytics/workflow.md +0 -272
- package/src/core/experts/api/expertise.yaml +0 -124
- package/src/core/experts/api/question.md +0 -74
- package/src/core/experts/api/self-improve.md +0 -122
- package/src/core/experts/api/workflow.md +0 -248
- package/src/core/experts/ci/expertise.yaml +0 -106
- package/src/core/experts/ci/question.md +0 -69
- package/src/core/experts/ci/self-improve.md +0 -100
- package/src/core/experts/ci/workflow.md +0 -145
- package/src/core/experts/codebase-query/expertise.yaml +0 -121
- package/src/core/experts/codebase-query/question.md +0 -73
- package/src/core/experts/codebase-query/self-improve.md +0 -105
- package/src/core/experts/compliance/expertise.yaml +0 -101
- package/src/core/experts/compliance/question.md +0 -56
- package/src/core/experts/compliance/self-improve.md +0 -106
- package/src/core/experts/compliance/workflow.md +0 -184
- package/src/core/experts/database/expertise.yaml +0 -109
- package/src/core/experts/database/question.md +0 -74
- package/src/core/experts/database/self-improve.md +0 -121
- package/src/core/experts/database/workflow.md +0 -234
- package/src/core/experts/datamigration/expertise.yaml +0 -141
- package/src/core/experts/datamigration/question.md +0 -56
- package/src/core/experts/datamigration/self-improve.md +0 -106
- package/src/core/experts/datamigration/workflow.md +0 -184
- package/src/core/experts/design/expertise.yaml +0 -116
- package/src/core/experts/design/question.md +0 -56
- package/src/core/experts/design/self-improve.md +0 -106
- package/src/core/experts/design/workflow.md +0 -184
- package/src/core/experts/devops/expertise.yaml +0 -116
- package/src/core/experts/devops/question.md +0 -68
- package/src/core/experts/devops/self-improve.md +0 -102
- package/src/core/experts/devops/workflow.md +0 -142
- package/src/core/experts/documentation/expertise.yaml +0 -126
- package/src/core/experts/documentation/question.md +0 -41
- package/src/core/experts/documentation/self-improve.md +0 -45
- package/src/core/experts/documentation/workflow.md +0 -55
- package/src/core/experts/epic-planner/expertise.yaml +0 -144
- package/src/core/experts/epic-planner/question.md +0 -56
- package/src/core/experts/epic-planner/self-improve.md +0 -106
- package/src/core/experts/epic-planner/workflow.md +0 -184
- package/src/core/experts/integrations/expertise.yaml +0 -113
- package/src/core/experts/integrations/question.md +0 -74
- package/src/core/experts/integrations/self-improve.md +0 -151
- package/src/core/experts/integrations/workflow.md +0 -246
- package/src/core/experts/mentor/expertise.yaml +0 -125
- package/src/core/experts/mentor/question.md +0 -56
- package/src/core/experts/mentor/self-improve.md +0 -106
- package/src/core/experts/mentor/workflow.md +0 -184
- package/src/core/experts/mobile/expertise.yaml +0 -136
- package/src/core/experts/mobile/question.md +0 -72
- package/src/core/experts/mobile/self-improve.md +0 -140
- package/src/core/experts/mobile/workflow.md +0 -240
- package/src/core/experts/monitoring/expertise.yaml +0 -132
- package/src/core/experts/monitoring/question.md +0 -76
- package/src/core/experts/monitoring/self-improve.md +0 -150
- package/src/core/experts/monitoring/workflow.md +0 -264
- package/src/core/experts/performance/expertise.yaml +0 -68
- package/src/core/experts/performance/question.md +0 -41
- package/src/core/experts/performance/self-improve.md +0 -45
- package/src/core/experts/performance/workflow.md +0 -61
- package/src/core/experts/product/expertise.yaml +0 -143
- package/src/core/experts/product/question.md +0 -56
- package/src/core/experts/product/self-improve.md +0 -106
- package/src/core/experts/product/workflow.md +0 -184
- package/src/core/experts/qa/expertise.yaml +0 -110
- package/src/core/experts/qa/question.md +0 -56
- package/src/core/experts/qa/self-improve.md +0 -106
- package/src/core/experts/qa/workflow.md +0 -184
- package/src/core/experts/readme-updater/expertise.yaml +0 -141
- package/src/core/experts/readme-updater/question.md +0 -56
- package/src/core/experts/readme-updater/self-improve.md +0 -106
- package/src/core/experts/readme-updater/workflow.md +0 -184
- package/src/core/experts/refactor/expertise.yaml +0 -135
- package/src/core/experts/refactor/question.md +0 -41
- package/src/core/experts/refactor/self-improve.md +0 -45
- package/src/core/experts/refactor/workflow.md +0 -57
- package/src/core/experts/research/expertise.yaml +0 -143
- package/src/core/experts/research/question.md +0 -56
- package/src/core/experts/research/self-improve.md +0 -106
- package/src/core/experts/research/workflow.md +0 -184
- package/src/core/experts/security/expertise.yaml +0 -117
- package/src/core/experts/security/question.md +0 -77
- package/src/core/experts/security/self-improve.md +0 -102
- package/src/core/experts/security/workflow.md +0 -152
- package/src/core/experts/templates/expertise-template.yaml +0 -67
- package/src/core/experts/templates/question-template.md +0 -56
- package/src/core/experts/templates/self-improve-template.md +0 -106
- package/src/core/experts/templates/workflow-template.md +0 -184
- package/src/core/experts/testing/expertise.yaml +0 -112
- package/src/core/experts/testing/question.md +0 -68
- package/src/core/experts/testing/self-improve.md +0 -102
- package/src/core/experts/testing/workflow.md +0 -143
- package/src/core/experts/ui/expertise.yaml +0 -133
- package/src/core/experts/ui/question.md +0 -74
- package/src/core/experts/ui/self-improve.md +0 -122
- package/src/core/experts/ui/workflow.md +0 -262
- package/src/core/knowledge/ads/ad-audit-checklist-scoring.md +0 -424
- package/src/core/knowledge/ads/ad-optimization-logic.md +0 -590
- package/src/core/knowledge/ads/ad-technical-specifications.md +0 -385
- package/src/core/knowledge/ads/definitive-advertising-reference-2026.md +0 -506
- package/src/core/knowledge/ads/paid-advertising-research-2026.md +0 -445
- package/src/core/profiles/COMPARISON.md +0 -170
- package/src/core/profiles/README.md +0 -178
- package/src/core/profiles/claude-code.yaml +0 -111
- package/src/core/profiles/codex.yaml +0 -103
- package/src/core/profiles/cursor.yaml +0 -134
- package/src/core/profiles/examples.js +0 -250
- package/src/core/profiles/loader.js +0 -235
- package/src/core/profiles/windsurf.yaml +0 -159
- package/src/core/skills/_learnings/README.md +0 -91
- package/src/core/skills/_learnings/_template.yaml +0 -106
- package/src/core/skills/_learnings/code-review.yaml +0 -118
- package/src/core/skills/_learnings/commit.yaml +0 -69
- package/src/core/skills/_learnings/story-writer.yaml +0 -71
- package/src/core/teams/backend.json +0 -41
- package/src/core/teams/builder-validator.json +0 -51
- package/src/core/teams/code-review.json +0 -41
- package/src/core/teams/frontend.json +0 -41
- package/src/core/teams/fullstack.json +0 -41
- package/src/core/teams/logic-audit.json +0 -53
- package/src/core/teams/perf-audit.json +0 -71
- package/src/core/teams/qa.json +0 -41
- package/src/core/teams/security-audit.json +0 -71
- package/src/core/teams/solo.json +0 -35
- package/src/core/teams/test-audit.json +0 -71
- package/src/core/templates/CONTEXT.md.example +0 -49
- package/src/core/templates/README-template.md +0 -16
- package/src/core/templates/adr-template.md +0 -28
- package/src/core/templates/agent-coordination-pattern.md +0 -38
- package/src/core/templates/agent-profile-template.md +0 -51
- package/src/core/templates/agileflow-metadata.json +0 -150
- package/src/core/templates/browser-qa-spec.yaml +0 -94
- package/src/core/templates/ci-workflow.yml +0 -74
- package/src/core/templates/claude-settings.advanced.example.json +0 -75
- package/src/core/templates/claude-settings.example.json +0 -26
- package/src/core/templates/command-documentation.md +0 -187
- package/src/core/templates/command-prerequisites.yaml +0 -169
- package/src/core/templates/comms-note-template.md +0 -24
- package/src/core/templates/damage-control-patterns.yaml +0 -243
- package/src/core/templates/environment.json +0 -18
- package/src/core/templates/epic-template.md +0 -27
- package/src/core/templates/plan-template.md +0 -125
- package/src/core/templates/preserve-rules-common.md +0 -107
- package/src/core/templates/preserve-rules.json +0 -42
- package/src/core/templates/proactive-action-spec.md +0 -29
- package/src/core/templates/product-brief.md +0 -136
- package/src/core/templates/quality-gate-priorities.md +0 -34
- package/src/core/templates/research-template.md +0 -44
- package/src/core/templates/session-harness-protocol.md +0 -128
- package/src/core/templates/session-state.json +0 -56
- package/src/core/templates/story-lifecycle.md +0 -213
- package/src/core/templates/story-template.md +0 -92
- package/src/core/templates/tdd-test-template.js +0 -241
- package/src/core/templates/worktrees-guide.md +0 -231
- package/tools/agileflow-npx.js +0 -52
- package/tools/cli/agileflow-cli.js +0 -72
- package/tools/cli/commands/config.js +0 -285
- package/tools/cli/commands/doctor.js +0 -496
- package/tools/cli/commands/list.js +0 -385
- package/tools/cli/commands/session.js +0 -1176
- package/tools/cli/commands/setup.js +0 -255
- package/tools/cli/commands/status.js +0 -101
- package/tools/cli/commands/tui.js +0 -56
- package/tools/cli/commands/uninstall.js +0 -155
- package/tools/cli/commands/update.js +0 -299
- package/tools/cli/installers/core/installer.js +0 -892
- package/tools/cli/installers/ide/_base-ide.js +0 -518
- package/tools/cli/installers/ide/_interface.js +0 -238
- package/tools/cli/installers/ide/claude-code.js +0 -432
- package/tools/cli/installers/ide/codex.js +0 -426
- package/tools/cli/installers/ide/cursor.js +0 -217
- package/tools/cli/installers/ide/manager.js +0 -222
- package/tools/cli/installers/ide/windsurf.js +0 -282
- package/tools/cli/lib/command-context.js +0 -382
- package/tools/cli/lib/config-manager.js +0 -446
- package/tools/cli/lib/content-injector.js +0 -969
- package/tools/cli/lib/content-transformer.js +0 -496
- package/tools/cli/lib/docs-setup.js +0 -464
- package/tools/cli/lib/error-handler.js +0 -165
- package/tools/cli/lib/ide-error-factory.js +0 -421
- package/tools/cli/lib/ide-errors.js +0 -367
- package/tools/cli/lib/ide-generator.js +0 -357
- package/tools/cli/lib/ide-health-monitor.js +0 -364
- package/tools/cli/lib/ide-registry.js +0 -297
- package/tools/cli/lib/npm-utils.js +0 -103
- package/tools/cli/lib/self-update.js +0 -148
- package/tools/cli/lib/ui.js +0 -211
- package/tools/cli/lib/utils.js +0 -87
- package/tools/cli/lib/validation-middleware.js +0 -491
- package/tools/cli/lib/version-checker.js +0 -95
- package/tools/postinstall.js +0 -190
|
@@ -1,426 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgileFlow CLI - OpenAI Codex Installer
|
|
3
|
-
*
|
|
4
|
-
* Installs AgileFlow for OpenAI Codex:
|
|
5
|
-
* - Agents become Codex Skills (.codex/skills/agileflow-NAME/)
|
|
6
|
-
* - Commands become Codex Prompts (~/.codex/prompts/agileflow-NAME.md)
|
|
7
|
-
* - AGENTS.md provides project instructions at repo root
|
|
8
|
-
*
|
|
9
|
-
* @see https://developers.openai.com/codex/
|
|
10
|
-
* @see ADR-0002: OpenAI Codex Integration Strategy
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
const path = require('node:path');
|
|
14
|
-
const os = require('node:os');
|
|
15
|
-
const fs = require('fs-extra');
|
|
16
|
-
const chalk = require('chalk');
|
|
17
|
-
const { yaml } = require('../../../../lib/yaml-utils');
|
|
18
|
-
const { BaseIdeSetup } = require('./_base-ide');
|
|
19
|
-
const {
|
|
20
|
-
getFrontmatter,
|
|
21
|
-
stripFrontmatter,
|
|
22
|
-
replaceReferences,
|
|
23
|
-
IDE_REPLACEMENTS,
|
|
24
|
-
} = require('../../lib/content-transformer');
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* OpenAI Codex setup handler
|
|
28
|
-
*/
|
|
29
|
-
class CodexSetup extends BaseIdeSetup {
|
|
30
|
-
constructor() {
|
|
31
|
-
super('codex', 'OpenAI Codex', false);
|
|
32
|
-
// Per-repo config directory
|
|
33
|
-
this.configDir = '.codex';
|
|
34
|
-
// User-level Codex home (can be overridden by $CODEX_HOME)
|
|
35
|
-
this.codexHome = process.env.CODEX_HOME || path.join(os.homedir(), '.codex');
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Get the Codex home directory
|
|
40
|
-
* @returns {string} Path to ~/.codex or $CODEX_HOME
|
|
41
|
-
*/
|
|
42
|
-
getCodexHome() {
|
|
43
|
-
return this.codexHome;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Detect if OpenAI Codex is installed/configured
|
|
48
|
-
* @param {string} projectDir - Project directory
|
|
49
|
-
* @returns {Promise<boolean>}
|
|
50
|
-
*/
|
|
51
|
-
async detect(projectDir) {
|
|
52
|
-
// Check if Codex home exists (user has OpenAI Codex)
|
|
53
|
-
const codexHomeExists = await this.exists(this.codexHome);
|
|
54
|
-
// Check if project has .codex/ or AGENTS.md
|
|
55
|
-
const projectCodexExists = await this.exists(path.join(projectDir, this.configDir));
|
|
56
|
-
const agentsMdExists = await this.exists(path.join(projectDir, 'AGENTS.md'));
|
|
57
|
-
|
|
58
|
-
return codexHomeExists || projectCodexExists || agentsMdExists;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* Convert an AgileFlow agent markdown file to Codex SKILL.md format
|
|
63
|
-
* Uses content-transformer module for consistent transformations
|
|
64
|
-
* @param {string} content - Original agent markdown content
|
|
65
|
-
* @param {string} agentName - Agent name (e.g., 'database')
|
|
66
|
-
* @returns {string} Codex SKILL.md content
|
|
67
|
-
*/
|
|
68
|
-
convertAgentToSkill(content, agentName) {
|
|
69
|
-
// Extract frontmatter using content-transformer
|
|
70
|
-
const frontmatter = getFrontmatter(content);
|
|
71
|
-
const description = frontmatter.description || `AgileFlow ${agentName} agent`;
|
|
72
|
-
|
|
73
|
-
// Create SKILL.md with YAML frontmatter
|
|
74
|
-
const skillFrontmatter = yaml
|
|
75
|
-
.dump({
|
|
76
|
-
name: `agileflow-${agentName}`,
|
|
77
|
-
description: description,
|
|
78
|
-
version: '1.0.0',
|
|
79
|
-
})
|
|
80
|
-
.trim();
|
|
81
|
-
|
|
82
|
-
// Remove original frontmatter from content using content-transformer
|
|
83
|
-
let bodyContent = stripFrontmatter(content);
|
|
84
|
-
|
|
85
|
-
// Add Codex-specific header
|
|
86
|
-
const codexHeader = `# AgileFlow: ${agentName.charAt(0).toUpperCase() + agentName.slice(1)} Agent
|
|
87
|
-
|
|
88
|
-
> Invoke with \`$agileflow-${agentName}\` or via \`/skills\`
|
|
89
|
-
|
|
90
|
-
`;
|
|
91
|
-
|
|
92
|
-
// Replace Claude-specific references using content-transformer
|
|
93
|
-
bodyContent = replaceReferences(bodyContent, IDE_REPLACEMENTS.codex);
|
|
94
|
-
|
|
95
|
-
// Replace /agileflow: prefix and all subsequent colons for Codex compatibility
|
|
96
|
-
// e.g., /agileflow:story:list → $agileflow-story-list
|
|
97
|
-
bodyContent = bodyContent.replace(/\/agileflow:([a-zA-Z0-9:_-]+)/g, (_match, rest) => {
|
|
98
|
-
return '$agileflow-' + rest.replace(/:/g, '-');
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
return `---
|
|
102
|
-
${skillFrontmatter}
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
${codexHeader}${bodyContent}`;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Convert an AgileFlow command markdown file to Codex prompt format
|
|
110
|
-
* Uses content-transformer module for consistent transformations
|
|
111
|
-
* @param {string} content - Original command markdown content
|
|
112
|
-
* @param {string} commandName - Command name (e.g., 'board')
|
|
113
|
-
* @returns {string} Codex prompt content
|
|
114
|
-
*/
|
|
115
|
-
convertCommandToPrompt(content, commandName) {
|
|
116
|
-
// Extract description from frontmatter using content-transformer
|
|
117
|
-
const frontmatter = getFrontmatter(content);
|
|
118
|
-
const description = frontmatter.description || `AgileFlow ${commandName} command`;
|
|
119
|
-
|
|
120
|
-
// Remove original frontmatter from content using content-transformer
|
|
121
|
-
let bodyContent = stripFrontmatter(content);
|
|
122
|
-
|
|
123
|
-
// Replace Claude-specific references using content-transformer
|
|
124
|
-
bodyContent = replaceReferences(bodyContent, IDE_REPLACEMENTS.codex);
|
|
125
|
-
|
|
126
|
-
// Replace /agileflow: prefix and all subsequent colons for Codex compatibility
|
|
127
|
-
// e.g., /agileflow:story:list → $agileflow-story-list
|
|
128
|
-
bodyContent = bodyContent.replace(/\/agileflow:([a-zA-Z0-9:_-]+)/g, (_match, rest) => {
|
|
129
|
-
return '$agileflow-' + rest.replace(/:/g, '-');
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
// Add Codex prompt header
|
|
133
|
-
const header = `# AgileFlow: ${commandName}
|
|
134
|
-
|
|
135
|
-
> ${description}
|
|
136
|
-
|
|
137
|
-
## Instructions
|
|
138
|
-
|
|
139
|
-
`;
|
|
140
|
-
|
|
141
|
-
// Add input placeholder at the end
|
|
142
|
-
const footer = `
|
|
143
|
-
|
|
144
|
-
## Context
|
|
145
|
-
|
|
146
|
-
{{input}}
|
|
147
|
-
`;
|
|
148
|
-
|
|
149
|
-
return `${header}${bodyContent}${footer}`;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/**
|
|
153
|
-
* Install AgileFlow agents as Codex skills
|
|
154
|
-
* @param {string} projectDir - Project directory
|
|
155
|
-
* @param {string} agileflowDir - AgileFlow installation directory
|
|
156
|
-
* @returns {Promise<number>} Number of skills installed
|
|
157
|
-
*/
|
|
158
|
-
async installSkills(projectDir, agileflowDir) {
|
|
159
|
-
const agentsSource = path.join(agileflowDir, 'agents');
|
|
160
|
-
const skillsTarget = path.join(projectDir, this.configDir, 'skills');
|
|
161
|
-
|
|
162
|
-
if (!(await this.exists(agentsSource))) {
|
|
163
|
-
return 0;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
let skillCount = 0;
|
|
167
|
-
const agents = await this.scanDirectory(agentsSource, '.md');
|
|
168
|
-
|
|
169
|
-
for (const agent of agents) {
|
|
170
|
-
const content = await this.readFile(agent.path);
|
|
171
|
-
const skillContent = this.convertAgentToSkill(content, agent.name);
|
|
172
|
-
|
|
173
|
-
// Create skill directory: .codex/skills/agileflow-{name}/
|
|
174
|
-
const skillDir = path.join(skillsTarget, `agileflow-${agent.name}`);
|
|
175
|
-
await this.ensureDir(skillDir);
|
|
176
|
-
|
|
177
|
-
// Write SKILL.md
|
|
178
|
-
await this.writeFile(path.join(skillDir, 'SKILL.md'), skillContent);
|
|
179
|
-
skillCount++;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
return skillCount;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Install AgileFlow commands as Codex prompts (user-level)
|
|
187
|
-
* @param {string} agileflowDir - AgileFlow installation directory
|
|
188
|
-
* @returns {Promise<number>} Number of prompts installed
|
|
189
|
-
*/
|
|
190
|
-
async installPrompts(agileflowDir) {
|
|
191
|
-
const commandsSource = path.join(agileflowDir, 'commands');
|
|
192
|
-
const promptsTarget = path.join(this.codexHome, 'prompts');
|
|
193
|
-
|
|
194
|
-
if (!(await this.exists(commandsSource))) {
|
|
195
|
-
return 0;
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
await this.ensureDir(promptsTarget);
|
|
199
|
-
|
|
200
|
-
let promptCount = 0;
|
|
201
|
-
const commands = await this.scanDirectory(commandsSource, '.md');
|
|
202
|
-
|
|
203
|
-
for (const command of commands) {
|
|
204
|
-
const content = await this.readFile(command.path);
|
|
205
|
-
const promptContent = this.convertCommandToPrompt(content, command.name);
|
|
206
|
-
|
|
207
|
-
// Write prompt: ~/.codex/prompts/agileflow-{name}.md
|
|
208
|
-
const promptPath = path.join(promptsTarget, `agileflow-${command.name}.md`);
|
|
209
|
-
await this.writeFile(promptPath, promptContent);
|
|
210
|
-
promptCount++;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
return promptCount;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/**
|
|
217
|
-
* Generate AGENTS.md scaffolding for the project
|
|
218
|
-
* @param {string} projectDir - Project directory
|
|
219
|
-
* @returns {Promise<boolean>} Whether AGENTS.md was created
|
|
220
|
-
*/
|
|
221
|
-
async generateAgentsMd(projectDir) {
|
|
222
|
-
const agentsMdPath = path.join(projectDir, 'AGENTS.md');
|
|
223
|
-
|
|
224
|
-
// Don't overwrite existing AGENTS.md
|
|
225
|
-
if (await this.exists(agentsMdPath)) {
|
|
226
|
-
console.log(chalk.dim(` - AGENTS.md already exists (preserved)`));
|
|
227
|
-
return false;
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
const content = `# AGENTS.md
|
|
231
|
-
|
|
232
|
-
> Project instructions for OpenAI Codex with AgileFlow integration
|
|
233
|
-
|
|
234
|
-
## Project Commands
|
|
235
|
-
|
|
236
|
-
\`\`\`bash
|
|
237
|
-
# Run tests
|
|
238
|
-
npm test
|
|
239
|
-
|
|
240
|
-
# Lint code
|
|
241
|
-
npm run lint
|
|
242
|
-
|
|
243
|
-
# Build project
|
|
244
|
-
npm run build
|
|
245
|
-
\`\`\`
|
|
246
|
-
|
|
247
|
-
## Conventions
|
|
248
|
-
|
|
249
|
-
- Prefer running tests before claiming success
|
|
250
|
-
- Keep changes small and reviewable
|
|
251
|
-
- Use AgileFlow skills when relevant (see below)
|
|
252
|
-
- Check \`${this.docsFolder}/09-agents/status.json\` for current work status
|
|
253
|
-
|
|
254
|
-
## When to Use AgileFlow Skills
|
|
255
|
-
|
|
256
|
-
Invoke skills with \`$skill-name\` or list available skills with \`/skills\`.
|
|
257
|
-
|
|
258
|
-
| Task Type | Skill to Use |
|
|
259
|
-
|-----------|--------------|
|
|
260
|
-
| Architecture decisions | \`$agileflow-adr-writer\` |
|
|
261
|
-
| Database work | \`$agileflow-database\` |
|
|
262
|
-
| API endpoints | \`$agileflow-api\` |
|
|
263
|
-
| UI components | \`$agileflow-ui\` |
|
|
264
|
-
| Testing | \`$agileflow-testing\` |
|
|
265
|
-
| CI/CD setup | \`$agileflow-ci\` |
|
|
266
|
-
| Security review | \`$agileflow-security\` |
|
|
267
|
-
| Performance | \`$agileflow-performance\` |
|
|
268
|
-
| Documentation | \`$agileflow-documentation\` |
|
|
269
|
-
|
|
270
|
-
## AgileFlow Status
|
|
271
|
-
|
|
272
|
-
- **Stories**: \`${this.docsFolder}/09-agents/status.json\`
|
|
273
|
-
- **Research**: \`${this.docsFolder}/10-research/\`
|
|
274
|
-
- **Decisions**: \`${this.docsFolder}/03-decisions/\`
|
|
275
|
-
- **Epics**: \`${this.docsFolder}/05-epics/\`
|
|
276
|
-
|
|
277
|
-
## Security Recommendations
|
|
278
|
-
|
|
279
|
-
For safe operation, configure Codex with:
|
|
280
|
-
|
|
281
|
-
\`\`\`toml
|
|
282
|
-
# ~/.codex/config.toml
|
|
283
|
-
approval_policy = "on-request"
|
|
284
|
-
sandbox_mode = "workspace-write"
|
|
285
|
-
\`\`\`
|
|
286
|
-
|
|
287
|
-
---
|
|
288
|
-
|
|
289
|
-
*Generated by AgileFlow - https://github.com/projectquestorg/AgileFlow*
|
|
290
|
-
`;
|
|
291
|
-
|
|
292
|
-
await this.writeFile(agentsMdPath, content);
|
|
293
|
-
return true;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
/**
|
|
297
|
-
* Generate AGENTS.override.md template for subdirectories
|
|
298
|
-
* @param {string} targetDir - Directory to create override in
|
|
299
|
-
* @returns {Promise<boolean>} Whether file was created
|
|
300
|
-
*/
|
|
301
|
-
async generateAgentsOverride(targetDir) {
|
|
302
|
-
const overridePath = path.join(targetDir, 'AGENTS.override.md');
|
|
303
|
-
|
|
304
|
-
// Don't overwrite existing override
|
|
305
|
-
if (await this.exists(overridePath)) {
|
|
306
|
-
return false;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
const content = `# AGENTS.override.md
|
|
310
|
-
|
|
311
|
-
> Override instructions for this subdirectory
|
|
312
|
-
|
|
313
|
-
## Directory-Specific Context
|
|
314
|
-
|
|
315
|
-
This directory contains: [describe purpose]
|
|
316
|
-
|
|
317
|
-
## Additional Commands
|
|
318
|
-
|
|
319
|
-
\`\`\`bash
|
|
320
|
-
# Directory-specific commands here
|
|
321
|
-
\`\`\`
|
|
322
|
-
|
|
323
|
-
## Directory Conventions
|
|
324
|
-
|
|
325
|
-
- [List any patterns specific to this directory]
|
|
326
|
-
|
|
327
|
-
---
|
|
328
|
-
|
|
329
|
-
*This file overrides AGENTS.md for this subdirectory*
|
|
330
|
-
`;
|
|
331
|
-
|
|
332
|
-
await this.writeFile(overridePath, content);
|
|
333
|
-
return true;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
/**
|
|
337
|
-
* Setup OpenAI Codex configuration
|
|
338
|
-
* @param {string} projectDir - Project directory
|
|
339
|
-
* @param {string} agileflowDir - AgileFlow installation directory
|
|
340
|
-
* @param {Object} options - Setup options
|
|
341
|
-
*/
|
|
342
|
-
async setup(projectDir, agileflowDir, options = {}) {
|
|
343
|
-
console.log(chalk.hex('#e8683a')(` Setting up ${this.displayName}...`));
|
|
344
|
-
|
|
345
|
-
// Clean up old installation first
|
|
346
|
-
await this.cleanup(projectDir);
|
|
347
|
-
|
|
348
|
-
// Ensure .codex directory exists
|
|
349
|
-
await this.ensureDir(path.join(projectDir, this.configDir));
|
|
350
|
-
|
|
351
|
-
// 1. Install agents as skills (per-repo)
|
|
352
|
-
const skillCount = await this.installSkills(projectDir, agileflowDir);
|
|
353
|
-
if (skillCount > 0) {
|
|
354
|
-
console.log(chalk.dim(` - ${skillCount} skills installed to .codex/skills/`));
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
// 2. Install commands as prompts (user-level)
|
|
358
|
-
const promptCount = await this.installPrompts(agileflowDir);
|
|
359
|
-
if (promptCount > 0) {
|
|
360
|
-
console.log(chalk.dim(` - ${promptCount} prompts installed to ~/.codex/prompts/`));
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
// 3. Generate AGENTS.md if it doesn't exist
|
|
364
|
-
const agentsMdCreated = await this.generateAgentsMd(projectDir);
|
|
365
|
-
if (agentsMdCreated) {
|
|
366
|
-
console.log(chalk.dim(` - AGENTS.md created at project root`));
|
|
367
|
-
}
|
|
368
|
-
|
|
369
|
-
console.log(chalk.green(` ✓ ${this.displayName} configured`));
|
|
370
|
-
console.log(chalk.dim(` - Skills: .codex/skills/agileflow-*/`));
|
|
371
|
-
console.log(chalk.dim(` - Prompts: ~/.codex/prompts/agileflow-*.md`));
|
|
372
|
-
console.log(chalk.dim(` - Instructions: AGENTS.md`));
|
|
373
|
-
|
|
374
|
-
return {
|
|
375
|
-
success: true,
|
|
376
|
-
skills: skillCount,
|
|
377
|
-
prompts: promptCount,
|
|
378
|
-
agentsMd: agentsMdCreated,
|
|
379
|
-
};
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
/**
|
|
383
|
-
* Cleanup Codex configuration
|
|
384
|
-
* @param {string} projectDir - Project directory
|
|
385
|
-
* @param {Object} options - Cleanup options
|
|
386
|
-
* @param {boolean} options.removeAgentsMd - Also remove AGENTS.md (requires confirmation)
|
|
387
|
-
*/
|
|
388
|
-
async cleanup(projectDir, options = {}) {
|
|
389
|
-
// Clean up per-repo skills
|
|
390
|
-
const skillsDir = path.join(projectDir, this.configDir, 'skills');
|
|
391
|
-
if (await this.exists(skillsDir)) {
|
|
392
|
-
const entries = await fs.readdir(skillsDir);
|
|
393
|
-
for (const entry of entries) {
|
|
394
|
-
if (entry.startsWith('agileflow-')) {
|
|
395
|
-
await fs.remove(path.join(skillsDir, entry));
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
console.log(chalk.dim(` Cleaned up AgileFlow skills from .codex/skills/`));
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
// Clean up user-level prompts
|
|
402
|
-
const promptsDir = path.join(this.codexHome, 'prompts');
|
|
403
|
-
if (await this.exists(promptsDir)) {
|
|
404
|
-
const entries = await fs.readdir(promptsDir);
|
|
405
|
-
for (const entry of entries) {
|
|
406
|
-
if (entry.startsWith('agileflow-')) {
|
|
407
|
-
await fs.remove(path.join(promptsDir, entry));
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
console.log(chalk.dim(` Cleaned up AgileFlow prompts from ~/.codex/prompts/`));
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
// Optionally remove AGENTS.md if explicitly requested
|
|
414
|
-
if (options.removeAgentsMd) {
|
|
415
|
-
const agentsMdPath = path.join(projectDir, 'AGENTS.md');
|
|
416
|
-
if (await this.exists(agentsMdPath)) {
|
|
417
|
-
await fs.remove(agentsMdPath);
|
|
418
|
-
console.log(chalk.dim(` Removed AGENTS.md`));
|
|
419
|
-
}
|
|
420
|
-
} else {
|
|
421
|
-
console.log(chalk.dim(` Note: AGENTS.md preserved (use removeAgentsMd option to delete)`));
|
|
422
|
-
}
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
module.exports = { CodexSetup };
|
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgileFlow CLI - Cursor IDE Installer
|
|
3
|
-
*
|
|
4
|
-
* Installs AgileFlow commands, agents, and hooks for Cursor IDE.
|
|
5
|
-
* Cursor uses:
|
|
6
|
-
* - Plain Markdown files in .cursor/commands/ for slash commands
|
|
7
|
-
* - Markdown files in .cursor/agents/ for subagents (with YAML frontmatter)
|
|
8
|
-
* - .cursor/hooks.json for lifecycle hooks
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
const path = require('node:path');
|
|
12
|
-
const fs = require('fs-extra');
|
|
13
|
-
const chalk = require('chalk');
|
|
14
|
-
const { BaseIdeSetup } = require('./_base-ide');
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Cursor IDE setup handler
|
|
18
|
-
*/
|
|
19
|
-
class CursorSetup extends BaseIdeSetup {
|
|
20
|
-
constructor() {
|
|
21
|
-
super('cursor', 'Cursor', false);
|
|
22
|
-
this.configDir = '.cursor';
|
|
23
|
-
this.commandsDir = 'commands';
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Setup Cursor IDE configuration
|
|
28
|
-
* @param {string} projectDir - Project directory
|
|
29
|
-
* @param {string} agileflowDir - AgileFlow installation directory
|
|
30
|
-
* @param {Object} options - Setup options
|
|
31
|
-
*/
|
|
32
|
-
async setup(projectDir, agileflowDir, options = {}) {
|
|
33
|
-
// Use standard setup for commands and agents
|
|
34
|
-
const result = await this.setupStandard(projectDir, agileflowDir, {
|
|
35
|
-
targetSubdir: this.commandsDir,
|
|
36
|
-
agileflowFolder: 'AgileFlow',
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
const { ideDir, agileflowTargetDir } = result;
|
|
40
|
-
const agentsSource = path.join(agileflowDir, 'agents');
|
|
41
|
-
|
|
42
|
-
// Cursor specific: Install agents as spawnable subagents (.cursor/agents/AgileFlow/)
|
|
43
|
-
// This allows Cursor's async subagent spawning feature
|
|
44
|
-
const spawnableAgentsDir = path.join(ideDir, 'agents', 'AgileFlow');
|
|
45
|
-
|
|
46
|
-
// Clean existing spawnable agents directory to prevent duplicates during update
|
|
47
|
-
if (await fs.pathExists(spawnableAgentsDir)) {
|
|
48
|
-
await fs.remove(spawnableAgentsDir);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const agentInstallResult = await this.installCommandsRecursive(
|
|
52
|
-
agentsSource,
|
|
53
|
-
spawnableAgentsDir,
|
|
54
|
-
agileflowDir,
|
|
55
|
-
false
|
|
56
|
-
);
|
|
57
|
-
console.log(chalk.dim(` - Spawnable agents: .cursor/agents/AgileFlow/`));
|
|
58
|
-
|
|
59
|
-
// Cursor specific: Setup damage control hooks
|
|
60
|
-
await this.setupDamageControlHooks(projectDir, agileflowDir, ideDir, options);
|
|
61
|
-
|
|
62
|
-
return {
|
|
63
|
-
...result,
|
|
64
|
-
agents: agentInstallResult.commands,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Setup damage control hooks for Cursor
|
|
70
|
-
* Maps Claude Code's PreToolUse hooks to Cursor's lifecycle events:
|
|
71
|
-
* - beforeShellExecution (for bash commands)
|
|
72
|
-
* - afterFileEdit (for file edits)
|
|
73
|
-
*
|
|
74
|
-
* @param {string} projectDir - Project directory
|
|
75
|
-
* @param {string} agileflowDir - AgileFlow installation directory
|
|
76
|
-
* @param {string} cursorDir - .cursor directory path
|
|
77
|
-
* @param {Object} options - Setup options
|
|
78
|
-
*/
|
|
79
|
-
async setupDamageControlHooks(projectDir, agileflowDir, cursorDir, options = {}) {
|
|
80
|
-
if (options.skipDamageControl) {
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
const hooksPath = path.join(cursorDir, 'hooks.json');
|
|
85
|
-
let hooks = [];
|
|
86
|
-
|
|
87
|
-
// Load existing hooks if they exist
|
|
88
|
-
if (fs.existsSync(hooksPath)) {
|
|
89
|
-
try {
|
|
90
|
-
const content = await fs.readFile(hooksPath, 'utf8');
|
|
91
|
-
hooks = JSON.parse(content);
|
|
92
|
-
if (!Array.isArray(hooks)) {
|
|
93
|
-
hooks = [];
|
|
94
|
-
}
|
|
95
|
-
} catch (e) {
|
|
96
|
-
hooks = [];
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// Define damage control hooks for Cursor
|
|
101
|
-
// Cursor's hooks.json format: Array of {event, command, args, order}
|
|
102
|
-
const damageControlHooks = [
|
|
103
|
-
{
|
|
104
|
-
event: 'beforeShellExecution',
|
|
105
|
-
command: 'node',
|
|
106
|
-
args: ['$CURSOR_PROJECT_DIR/.cursor/hooks/damage-control/bash-tool-damage-control.js'],
|
|
107
|
-
order: 1,
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
event: 'afterFileEdit',
|
|
111
|
-
command: 'node',
|
|
112
|
-
args: ['$CURSOR_PROJECT_DIR/.cursor/hooks/damage-control/edit-tool-damage-control.js'],
|
|
113
|
-
order: 1,
|
|
114
|
-
},
|
|
115
|
-
];
|
|
116
|
-
|
|
117
|
-
// Check if damage control hooks already exist and merge
|
|
118
|
-
let hasUpdates = false;
|
|
119
|
-
for (const newHook of damageControlHooks) {
|
|
120
|
-
const existingIdx = hooks.findIndex(
|
|
121
|
-
h =>
|
|
122
|
-
h.event === newHook.event &&
|
|
123
|
-
h.command === newHook.command &&
|
|
124
|
-
(h.args?.join(' ') === newHook.args?.join(' ') ||
|
|
125
|
-
(h.args && h.args.some(arg => arg.includes('damage-control'))))
|
|
126
|
-
);
|
|
127
|
-
|
|
128
|
-
if (existingIdx === -1) {
|
|
129
|
-
hooks.push(newHook);
|
|
130
|
-
hasUpdates = true;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// Only write if we have updates or if file didn't exist
|
|
135
|
-
if (hasUpdates || !fs.existsSync(hooksPath)) {
|
|
136
|
-
await fs.ensureDir(path.dirname(hooksPath));
|
|
137
|
-
await fs.writeFile(hooksPath, JSON.stringify(hooks, null, 2));
|
|
138
|
-
console.log(chalk.dim(` - Damage control: hooks enabled`));
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// Copy damage control scripts
|
|
142
|
-
await this.setupDamageControlScripts(agileflowDir, cursorDir);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Copy damage control scripts to .cursor/hooks/damage-control/
|
|
147
|
-
* @param {string} agileflowDir - AgileFlow installation directory
|
|
148
|
-
* @param {string} cursorDir - .cursor directory path
|
|
149
|
-
*/
|
|
150
|
-
async setupDamageControlScripts(agileflowDir, cursorDir) {
|
|
151
|
-
const damageControlSource = path.join(agileflowDir, 'scripts', 'damage-control');
|
|
152
|
-
const damageControlTarget = path.join(cursorDir, 'hooks', 'damage-control');
|
|
153
|
-
|
|
154
|
-
if (!fs.existsSync(damageControlSource)) {
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
await this.ensureDir(damageControlTarget);
|
|
159
|
-
|
|
160
|
-
// Copy hook scripts
|
|
161
|
-
const scripts = [
|
|
162
|
-
'bash-tool-damage-control.js',
|
|
163
|
-
'edit-tool-damage-control.js',
|
|
164
|
-
'write-tool-damage-control.js',
|
|
165
|
-
];
|
|
166
|
-
|
|
167
|
-
for (const script of scripts) {
|
|
168
|
-
const src = path.join(damageControlSource, script);
|
|
169
|
-
const dest = path.join(damageControlTarget, script);
|
|
170
|
-
if (fs.existsSync(src)) {
|
|
171
|
-
await fs.copy(src, dest);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
// Copy lib/damage-control-utils.js (required by hook scripts)
|
|
176
|
-
const libSource = path.join(agileflowDir, 'scripts', 'lib', 'damage-control-utils.js');
|
|
177
|
-
const libTarget = path.join(cursorDir, 'hooks', 'lib', 'damage-control-utils.js');
|
|
178
|
-
if (fs.existsSync(libSource)) {
|
|
179
|
-
await this.ensureDir(path.dirname(libTarget));
|
|
180
|
-
await fs.copy(libSource, libTarget);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// Copy patterns.yaml (preserve existing)
|
|
184
|
-
const patternsSource = path.join(damageControlSource, 'patterns.yaml');
|
|
185
|
-
const patternsTarget = path.join(damageControlTarget, 'patterns.yaml');
|
|
186
|
-
if (fs.existsSync(patternsSource) && !fs.existsSync(patternsTarget)) {
|
|
187
|
-
await fs.copy(patternsSource, patternsTarget);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
/**
|
|
192
|
-
* Cleanup old AgileFlow installation
|
|
193
|
-
* @param {string} projectDir - Project directory
|
|
194
|
-
*/
|
|
195
|
-
async cleanup(projectDir) {
|
|
196
|
-
// Remove old .cursor/rules/agileflow (deprecated)
|
|
197
|
-
const oldRulesPath = path.join(projectDir, this.configDir, 'rules', 'agileflow');
|
|
198
|
-
if (await this.exists(oldRulesPath)) {
|
|
199
|
-
await fs.remove(oldRulesPath);
|
|
200
|
-
console.log(chalk.dim(` Removed old AgileFlow rules from ${this.displayName}`));
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// Remove .cursor/commands/AgileFlow (for re-installation)
|
|
204
|
-
const commandsPath = path.join(projectDir, this.configDir, this.commandsDir, 'AgileFlow');
|
|
205
|
-
if (await this.exists(commandsPath)) {
|
|
206
|
-
await fs.remove(commandsPath);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// Remove .cursor/agents/AgileFlow (for re-installation)
|
|
210
|
-
const agentsPath = path.join(projectDir, this.configDir, 'agents', 'AgileFlow');
|
|
211
|
-
if (await this.exists(agentsPath)) {
|
|
212
|
-
await fs.remove(agentsPath);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
module.exports = { CursorSetup };
|