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,464 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AgileFlow CLI - Docs Structure Setup
|
|
3
|
-
*
|
|
4
|
-
* Creates the complete AgileFlow docs/ directory structure with README files.
|
|
5
|
-
* Idempotent - checks for existing files and only creates missing ones.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const fs = require('fs-extra');
|
|
9
|
-
const path = require('node:path');
|
|
10
|
-
const chalk = require('chalk');
|
|
11
|
-
|
|
12
|
-
// Load AgileFlow version from package.json (used for docs metadata)
|
|
13
|
-
const packageJsonPath = path.join(__dirname, '..', '..', '..', 'package.json');
|
|
14
|
-
const packageJson = require(packageJsonPath);
|
|
15
|
-
|
|
16
|
-
// Load package README.md for docs/README.md
|
|
17
|
-
const packageReadmePath = path.join(__dirname, '..', '..', '..', 'README.md');
|
|
18
|
-
let packageReadme = '';
|
|
19
|
-
try {
|
|
20
|
-
packageReadme = fs.readFileSync(packageReadmePath, 'utf8');
|
|
21
|
-
// Fix relative image paths to use npm CDN
|
|
22
|
-
packageReadme = packageReadme.replace(
|
|
23
|
-
/src="assets\//g,
|
|
24
|
-
'src="https://cdn.jsdelivr.net/npm/agileflow/assets/'
|
|
25
|
-
);
|
|
26
|
-
} catch (e) {
|
|
27
|
-
// Fallback if README not found
|
|
28
|
-
packageReadme =
|
|
29
|
-
'# AgileFlow\n\nSee https://github.com/projectquestorg/AgileFlow for documentation.';
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Directory structure to create
|
|
34
|
-
* @param {string} docsFolder - Name of the docs folder (default: "docs")
|
|
35
|
-
*/
|
|
36
|
-
function getDirectoryStructure(docsFolder = 'docs') {
|
|
37
|
-
return [
|
|
38
|
-
`${docsFolder}/00-meta/templates`,
|
|
39
|
-
`${docsFolder}/00-meta/guides`,
|
|
40
|
-
`${docsFolder}/00-meta/scripts`,
|
|
41
|
-
`${docsFolder}/01-brainstorming/ideas`,
|
|
42
|
-
`${docsFolder}/01-brainstorming/sketches`,
|
|
43
|
-
`${docsFolder}/02-practices/prompts/agents`,
|
|
44
|
-
`${docsFolder}/03-decisions`,
|
|
45
|
-
`${docsFolder}/04-architecture`,
|
|
46
|
-
`${docsFolder}/05-epics`,
|
|
47
|
-
`${docsFolder}/06-stories`,
|
|
48
|
-
`${docsFolder}/07-testing/acceptance`,
|
|
49
|
-
`${docsFolder}/07-testing/test-cases`,
|
|
50
|
-
`${docsFolder}/08-project`,
|
|
51
|
-
`${docsFolder}/08-project/ideation`,
|
|
52
|
-
`${docsFolder}/08-project/logic-audits`,
|
|
53
|
-
`${docsFolder}/09-agents/bus`,
|
|
54
|
-
`${docsFolder}/10-research`,
|
|
55
|
-
];
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
/**
|
|
59
|
-
* README content templates
|
|
60
|
-
* @param {string} docsFolder - Name of the docs folder
|
|
61
|
-
*/
|
|
62
|
-
function getReadmeTemplates(docsFolder = 'docs') {
|
|
63
|
-
return {
|
|
64
|
-
[`${docsFolder}/README.md`]: packageReadme,
|
|
65
|
-
|
|
66
|
-
[`${docsFolder}/00-meta/README.md`]: `# Meta Documentation
|
|
67
|
-
|
|
68
|
-
System metadata, templates, and guides for AgileFlow.
|
|
69
|
-
|
|
70
|
-
## Contents
|
|
71
|
-
|
|
72
|
-
- **templates/**: Document templates (story, epic, ADR, etc.)
|
|
73
|
-
- **guides/**: How-to guides and best practices
|
|
74
|
-
- **scripts/**: Utility scripts for automation
|
|
75
|
-
- **agileflow-metadata.json**: System configuration and settings
|
|
76
|
-
- **glossary.md**: Project terminology and definitions
|
|
77
|
-
- **conventions.md**: Coding and documentation conventions
|
|
78
|
-
`,
|
|
79
|
-
|
|
80
|
-
[`${docsFolder}/01-brainstorming/README.md`]: `# Brainstorming
|
|
81
|
-
|
|
82
|
-
Ideas and sketches for future features and improvements.
|
|
83
|
-
|
|
84
|
-
## Contents
|
|
85
|
-
|
|
86
|
-
- **ideas/**: Feature ideas and proposals
|
|
87
|
-
- **sketches/**: UI/UX sketches and mockups
|
|
88
|
-
|
|
89
|
-
Use this space to capture thoughts before they become formal stories.
|
|
90
|
-
`,
|
|
91
|
-
|
|
92
|
-
[`${docsFolder}/02-practices/README.md`]: `# Project Practices
|
|
93
|
-
|
|
94
|
-
Project-specific practices, conventions, and standards for YOUR codebase.
|
|
95
|
-
|
|
96
|
-
## Contents
|
|
97
|
-
|
|
98
|
-
- **testing.md**: Testing strategies and patterns
|
|
99
|
-
- **git-branching.md**: Git workflow and branching strategy
|
|
100
|
-
- **releasing.md**: Release process and versioning
|
|
101
|
-
- **security.md**: Security practices and guidelines
|
|
102
|
-
- **ci.md**: CI/CD configuration and workflows
|
|
103
|
-
- **prompts/agents/**: Custom agent prompts for this project
|
|
104
|
-
|
|
105
|
-
**Note**: This is for YOUR project's practices (styling, typography, component patterns, API conventions), NOT AgileFlow system practices (those go in 00-meta/).
|
|
106
|
-
`,
|
|
107
|
-
|
|
108
|
-
[`${docsFolder}/03-decisions/README.md`]: `# Architecture Decision Records (ADRs)
|
|
109
|
-
|
|
110
|
-
Technical decisions, trade-offs, and alternatives considered.
|
|
111
|
-
|
|
112
|
-
## Format
|
|
113
|
-
|
|
114
|
-
Use \`/agileflow:adr\` to create new decision records.
|
|
115
|
-
|
|
116
|
-
Each ADR should include:
|
|
117
|
-
- **Context**: What problem are we solving?
|
|
118
|
-
- **Decision**: What did we decide?
|
|
119
|
-
- **Consequences**: What are the impacts?
|
|
120
|
-
`,
|
|
121
|
-
|
|
122
|
-
[`${docsFolder}/04-architecture/README.md`]: `# Architecture Documentation
|
|
123
|
-
|
|
124
|
-
System architecture, data models, API specifications, and technical designs.
|
|
125
|
-
|
|
126
|
-
## Contents
|
|
127
|
-
|
|
128
|
-
- Data models and schemas
|
|
129
|
-
- API specifications
|
|
130
|
-
- Component architecture
|
|
131
|
-
- File/directory structure
|
|
132
|
-
- Testing architecture
|
|
133
|
-
- Technical constraints
|
|
134
|
-
|
|
135
|
-
Use this documentation to maintain architectural context for development.
|
|
136
|
-
`,
|
|
137
|
-
|
|
138
|
-
[`${docsFolder}/05-epics/README.md`]: `# Epics
|
|
139
|
-
|
|
140
|
-
Large features broken down into user stories.
|
|
141
|
-
|
|
142
|
-
## Format
|
|
143
|
-
|
|
144
|
-
Use \`/agileflow:epic\` to create new epics.
|
|
145
|
-
|
|
146
|
-
Each epic includes:
|
|
147
|
-
- Epic ID (EP-XXXX)
|
|
148
|
-
- Description and goals
|
|
149
|
-
- Related stories
|
|
150
|
-
- Milestones and timeline
|
|
151
|
-
`,
|
|
152
|
-
|
|
153
|
-
[`${docsFolder}/06-stories/README.md`]: `# User Stories
|
|
154
|
-
|
|
155
|
-
Implementation tasks with acceptance criteria and technical details.
|
|
156
|
-
|
|
157
|
-
## Format
|
|
158
|
-
|
|
159
|
-
Use \`/agileflow:story\` to create new stories.
|
|
160
|
-
|
|
161
|
-
Each story includes:
|
|
162
|
-
- Story ID (US-XXXX)
|
|
163
|
-
- Description
|
|
164
|
-
- Acceptance criteria (Given/When/Then)
|
|
165
|
-
- Architecture context
|
|
166
|
-
- Testing strategy
|
|
167
|
-
- Implementation notes
|
|
168
|
-
`,
|
|
169
|
-
|
|
170
|
-
[`${docsFolder}/07-testing/README.md`]: `# Testing Documentation
|
|
171
|
-
|
|
172
|
-
Test cases, acceptance criteria, and testing strategies.
|
|
173
|
-
|
|
174
|
-
## Contents
|
|
175
|
-
|
|
176
|
-
- **acceptance/**: Acceptance test definitions
|
|
177
|
-
- **test-cases/**: Detailed test case documentation
|
|
178
|
-
|
|
179
|
-
Use \`/agileflow:tests\` to set up testing infrastructure.
|
|
180
|
-
`,
|
|
181
|
-
|
|
182
|
-
[`${docsFolder}/08-project/README.md`]: `# Project Management
|
|
183
|
-
|
|
184
|
-
Project-level planning and tracking.
|
|
185
|
-
|
|
186
|
-
## Contents
|
|
187
|
-
|
|
188
|
-
- **roadmap.md**: Product roadmap and vision
|
|
189
|
-
- **backlog.md**: Prioritized backlog
|
|
190
|
-
- **milestones.md**: Release milestones
|
|
191
|
-
- **risks.md**: Project risks and mitigation strategies
|
|
192
|
-
- **ideation/**: Ideation reports from \`/agileflow:ideate:new\`
|
|
193
|
-
- **code-audits/**: Code audit reports from \`/agileflow:code:logic\`
|
|
194
|
-
`,
|
|
195
|
-
|
|
196
|
-
[`${docsFolder}/09-agents/README.md`]: `# Agent Status Tracking
|
|
197
|
-
|
|
198
|
-
Real-time status of stories being worked on by agents.
|
|
199
|
-
|
|
200
|
-
## Files
|
|
201
|
-
|
|
202
|
-
- **status.json**: Active stories and recent completions
|
|
203
|
-
- **status-archive.json**: Archived completed stories
|
|
204
|
-
- **bus/log.jsonl**: Agent communication log
|
|
205
|
-
|
|
206
|
-
Use \`/agileflow:status\` to update story status.
|
|
207
|
-
`,
|
|
208
|
-
|
|
209
|
-
[`${docsFolder}/10-research/README.md`]: `# Research Notes
|
|
210
|
-
|
|
211
|
-
Research findings, investigations, and technical explorations.
|
|
212
|
-
|
|
213
|
-
## Format
|
|
214
|
-
|
|
215
|
-
Use \`/agileflow:research:ask\` to generate research prompts for web AI, then \`/agileflow:research:import\` to bring results back.
|
|
216
|
-
|
|
217
|
-
| Date | Topic | Path | Summary |
|
|
218
|
-
|------|-------|------|---------|
|
|
219
|
-
| | | | |
|
|
220
|
-
`,
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
/**
|
|
225
|
-
* Create docs structure with README files
|
|
226
|
-
* @param {string} targetDir - Target directory for installation
|
|
227
|
-
* @param {string} docsFolder - Name of the docs folder (default: "docs")
|
|
228
|
-
* @param {Object} options - Options
|
|
229
|
-
* @param {boolean} options.updateGitignore - Whether to create/update .gitignore (default: true)
|
|
230
|
-
* @returns {Promise<Object>} Result object with counts
|
|
231
|
-
*/
|
|
232
|
-
async function createDocsStructure(targetDir, docsFolder = 'docs', options = {}) {
|
|
233
|
-
const { updateGitignore = true } = options;
|
|
234
|
-
const result = {
|
|
235
|
-
success: false,
|
|
236
|
-
counts: {
|
|
237
|
-
directoriesCreated: 0,
|
|
238
|
-
filesCreated: 0,
|
|
239
|
-
filesSkipped: 0,
|
|
240
|
-
},
|
|
241
|
-
errors: [],
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
try {
|
|
245
|
-
console.log(chalk.hex('#e8683a')(`\nCreating ${docsFolder}/ structure...`));
|
|
246
|
-
|
|
247
|
-
// Create directories
|
|
248
|
-
const directories = getDirectoryStructure(docsFolder);
|
|
249
|
-
for (const dir of directories) {
|
|
250
|
-
const fullPath = path.join(targetDir, dir);
|
|
251
|
-
if (!fs.existsSync(fullPath)) {
|
|
252
|
-
await fs.ensureDir(fullPath);
|
|
253
|
-
result.counts.directoriesCreated++;
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// Create README files
|
|
258
|
-
const readmes = getReadmeTemplates(docsFolder);
|
|
259
|
-
for (const [filePath, content] of Object.entries(readmes)) {
|
|
260
|
-
const fullPath = path.join(targetDir, filePath);
|
|
261
|
-
if (!fs.existsSync(fullPath)) {
|
|
262
|
-
await fs.writeFile(fullPath, content, 'utf8');
|
|
263
|
-
result.counts.filesCreated++;
|
|
264
|
-
console.log(chalk.green(` ✓ Created ${filePath}`));
|
|
265
|
-
} else {
|
|
266
|
-
result.counts.filesSkipped++;
|
|
267
|
-
console.log(chalk.dim(` ⊘ Skipped ${filePath} (already exists)`));
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// Create agileflow-metadata.json
|
|
272
|
-
const metadataPath = path.join(targetDir, docsFolder, '00-meta', 'agileflow-metadata.json');
|
|
273
|
-
if (!fs.existsSync(metadataPath)) {
|
|
274
|
-
const metadata = {
|
|
275
|
-
version: packageJson.version,
|
|
276
|
-
created: new Date().toISOString(),
|
|
277
|
-
updated: new Date().toISOString(),
|
|
278
|
-
docsFolder: docsFolder,
|
|
279
|
-
archival: {
|
|
280
|
-
threshold_days: 30,
|
|
281
|
-
enabled: true,
|
|
282
|
-
},
|
|
283
|
-
};
|
|
284
|
-
await fs.writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf8');
|
|
285
|
-
result.counts.filesCreated++;
|
|
286
|
-
console.log(chalk.green(` ✓ Created ${docsFolder}/00-meta/agileflow-metadata.json`));
|
|
287
|
-
} else {
|
|
288
|
-
// Update existing metadata (keep docsFolder and version in sync)
|
|
289
|
-
try {
|
|
290
|
-
const existing = JSON.parse(await fs.readFile(metadataPath, 'utf8'));
|
|
291
|
-
const updates = [];
|
|
292
|
-
|
|
293
|
-
if (!existing.docsFolder) {
|
|
294
|
-
existing.docsFolder = docsFolder;
|
|
295
|
-
updates.push('docsFolder');
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
if (existing.version !== packageJson.version) {
|
|
299
|
-
existing.version = packageJson.version;
|
|
300
|
-
updates.push('version');
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
if (updates.length > 0) {
|
|
304
|
-
existing.updated = new Date().toISOString();
|
|
305
|
-
await fs.writeFile(metadataPath, JSON.stringify(existing, null, 2), 'utf8');
|
|
306
|
-
console.log(
|
|
307
|
-
chalk.yellow(
|
|
308
|
-
` ↻ Updated ${docsFolder}/00-meta/agileflow-metadata.json (${updates.join(', ')})`
|
|
309
|
-
)
|
|
310
|
-
);
|
|
311
|
-
}
|
|
312
|
-
} catch (err) {
|
|
313
|
-
console.log(chalk.yellow(` ⚠ Could not update metadata: ${err.message}`));
|
|
314
|
-
}
|
|
315
|
-
result.counts.filesSkipped++;
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
// Create status.json
|
|
319
|
-
const statusPath = path.join(targetDir, docsFolder, '09-agents', 'status.json');
|
|
320
|
-
if (!fs.existsSync(statusPath)) {
|
|
321
|
-
const status = {
|
|
322
|
-
updated: new Date().toISOString(),
|
|
323
|
-
stories: {},
|
|
324
|
-
};
|
|
325
|
-
await fs.writeFile(statusPath, JSON.stringify(status, null, 2), 'utf8');
|
|
326
|
-
result.counts.filesCreated++;
|
|
327
|
-
console.log(chalk.green(` ✓ Created ${docsFolder}/09-agents/status.json`));
|
|
328
|
-
} else {
|
|
329
|
-
result.counts.filesSkipped++;
|
|
330
|
-
console.log(chalk.dim(` ⊘ Skipped ${docsFolder}/09-agents/status.json (already exists)`));
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
// Create empty bus log
|
|
334
|
-
const busLogPath = path.join(targetDir, docsFolder, '09-agents', 'bus', 'log.jsonl');
|
|
335
|
-
if (!fs.existsSync(busLogPath)) {
|
|
336
|
-
await fs.writeFile(busLogPath, '', 'utf8');
|
|
337
|
-
result.counts.filesCreated++;
|
|
338
|
-
console.log(chalk.green(` ✓ Created ${docsFolder}/09-agents/bus/log.jsonl`));
|
|
339
|
-
} else {
|
|
340
|
-
result.counts.filesSkipped++;
|
|
341
|
-
}
|
|
342
|
-
|
|
343
|
-
// Create basic practice files
|
|
344
|
-
const practiceFiles = {
|
|
345
|
-
[`${docsFolder}/02-practices/testing.md`]: `# Testing Practices
|
|
346
|
-
|
|
347
|
-
Document your testing strategies and patterns here.
|
|
348
|
-
`,
|
|
349
|
-
[`${docsFolder}/02-practices/git-branching.md`]: `# Git Branching Strategy
|
|
350
|
-
|
|
351
|
-
Document your git workflow and branching strategy here.
|
|
352
|
-
`,
|
|
353
|
-
[`${docsFolder}/02-practices/releasing.md`]: `# Release Process
|
|
354
|
-
|
|
355
|
-
Document your release process and versioning strategy here.
|
|
356
|
-
`,
|
|
357
|
-
[`${docsFolder}/02-practices/security.md`]: `# Security Practices
|
|
358
|
-
|
|
359
|
-
Document your security guidelines and practices here.
|
|
360
|
-
`,
|
|
361
|
-
[`${docsFolder}/02-practices/ci.md`]: `# CI/CD Configuration
|
|
362
|
-
|
|
363
|
-
Document your CI/CD workflows and configuration here.
|
|
364
|
-
`,
|
|
365
|
-
};
|
|
366
|
-
|
|
367
|
-
for (const [filePath, content] of Object.entries(practiceFiles)) {
|
|
368
|
-
const fullPath = path.join(targetDir, filePath);
|
|
369
|
-
if (!fs.existsSync(fullPath)) {
|
|
370
|
-
await fs.writeFile(fullPath, content, 'utf8');
|
|
371
|
-
result.counts.filesCreated++;
|
|
372
|
-
console.log(chalk.green(` ✓ Created ${filePath}`));
|
|
373
|
-
} else {
|
|
374
|
-
result.counts.filesSkipped++;
|
|
375
|
-
}
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
if (updateGitignore) {
|
|
379
|
-
// Create .gitignore additions for docs folder
|
|
380
|
-
const gitignorePath = path.join(targetDir, '.gitignore');
|
|
381
|
-
const gitignoreEntries = [
|
|
382
|
-
'.env',
|
|
383
|
-
'.env.*',
|
|
384
|
-
'!.env.example',
|
|
385
|
-
'.DS_Store',
|
|
386
|
-
'node_modules/',
|
|
387
|
-
'dist/',
|
|
388
|
-
'build/',
|
|
389
|
-
'coverage/',
|
|
390
|
-
];
|
|
391
|
-
|
|
392
|
-
if (fs.existsSync(gitignorePath)) {
|
|
393
|
-
const existingGitignore = await fs.readFile(gitignorePath, 'utf8');
|
|
394
|
-
const newEntries = gitignoreEntries.filter(entry => !existingGitignore.includes(entry));
|
|
395
|
-
if (newEntries.length > 0) {
|
|
396
|
-
await fs.appendFile(gitignorePath, '\n' + newEntries.join('\n') + '\n', 'utf8');
|
|
397
|
-
console.log(chalk.yellow(` ↻ Updated .gitignore with ${newEntries.length} entries`));
|
|
398
|
-
}
|
|
399
|
-
} else {
|
|
400
|
-
await fs.writeFile(gitignorePath, gitignoreEntries.join('\n') + '\n', 'utf8');
|
|
401
|
-
result.counts.filesCreated++;
|
|
402
|
-
console.log(chalk.green(` ✓ Created .gitignore`));
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
result.success = true;
|
|
407
|
-
console.log(
|
|
408
|
-
chalk.green(
|
|
409
|
-
`\n✨ Docs structure created: ${result.counts.directoriesCreated} directories, ${result.counts.filesCreated} files`
|
|
410
|
-
)
|
|
411
|
-
);
|
|
412
|
-
if (result.counts.filesSkipped > 0) {
|
|
413
|
-
console.log(chalk.dim(` ${result.counts.filesSkipped} files skipped (already exist)`));
|
|
414
|
-
}
|
|
415
|
-
} catch (err) {
|
|
416
|
-
result.errors.push(err.message);
|
|
417
|
-
console.error(chalk.red(`\n✗ Failed to create docs structure: ${err.message}`));
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
return result;
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
/**
|
|
424
|
-
* Check if a folder is an AgileFlow docs folder
|
|
425
|
-
* @param {string} folderPath - Path to check
|
|
426
|
-
* @returns {boolean} True if it's an AgileFlow docs folder
|
|
427
|
-
*/
|
|
428
|
-
function isAgileFlowDocsFolder(folderPath) {
|
|
429
|
-
const metadataPath = path.join(folderPath, '00-meta', 'agileflow-metadata.json');
|
|
430
|
-
return fs.existsSync(metadataPath);
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
/**
|
|
434
|
-
* Get the docs folder name from metadata or default
|
|
435
|
-
* Checks both 'docs' and 'agileflow-docs' folders
|
|
436
|
-
* @param {string} targetDir - Target directory
|
|
437
|
-
* @returns {Promise<string>} Docs folder name
|
|
438
|
-
*/
|
|
439
|
-
async function getDocsFolderName(targetDir) {
|
|
440
|
-
// Check in order of preference: existing metadata, then probe folders
|
|
441
|
-
const candidateFolders = ['docs', 'agileflow-docs'];
|
|
442
|
-
|
|
443
|
-
for (const folder of candidateFolders) {
|
|
444
|
-
try {
|
|
445
|
-
const folderPath = path.join(targetDir, folder);
|
|
446
|
-
const metadataPath = path.join(folderPath, '00-meta', 'agileflow-metadata.json');
|
|
447
|
-
if (fs.existsSync(metadataPath)) {
|
|
448
|
-
const metadata = JSON.parse(await fs.readFile(metadataPath, 'utf8'));
|
|
449
|
-
return metadata.docsFolder || folder;
|
|
450
|
-
}
|
|
451
|
-
} catch (_err) {
|
|
452
|
-
// Continue to next candidate
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
// No existing AgileFlow docs found, default to 'docs'
|
|
457
|
-
return 'docs';
|
|
458
|
-
}
|
|
459
|
-
|
|
460
|
-
module.exports = {
|
|
461
|
-
createDocsStructure,
|
|
462
|
-
getDocsFolderName,
|
|
463
|
-
isAgileFlowDocsFolder,
|
|
464
|
-
};
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* error-handler.js - Centralized Error Handling with Actionable Guidance
|
|
3
|
-
*
|
|
4
|
-
* Provides three-tier error handling:
|
|
5
|
-
* - INFO: Non-blocking issues (does not exit)
|
|
6
|
-
* - WARNING: Issues that should be addressed (exit 1)
|
|
7
|
-
* - CRITICAL: Severe errors (exit 1 + stack trace if DEBUG=1)
|
|
8
|
-
*
|
|
9
|
-
* Error output format: "X <problem> | Action: <what to do> | Run: <command>"
|
|
10
|
-
*
|
|
11
|
-
* Note: Formatting logic is extracted to lib/format-error.js for standalone use.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
const {
|
|
15
|
-
formatError: formatErrorHelper,
|
|
16
|
-
formatWarning: formatWarningHelper,
|
|
17
|
-
formatErrorWithStack,
|
|
18
|
-
} = require('../../../lib/format-error');
|
|
19
|
-
|
|
20
|
-
class ErrorHandler {
|
|
21
|
-
/**
|
|
22
|
-
* Create an ErrorHandler instance
|
|
23
|
-
* @param {string} commandName - Name of the command using this handler
|
|
24
|
-
*/
|
|
25
|
-
constructor(commandName = 'agileflow') {
|
|
26
|
-
this.commandName = commandName;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Format error with actionable guidance
|
|
31
|
-
* Output: "X <problem> | Action: <what to do> | Run: <command>"
|
|
32
|
-
*
|
|
33
|
-
* @param {string} message - The error message describing the problem
|
|
34
|
-
* @param {string} [actionText] - What the user should do to fix it
|
|
35
|
-
* @param {string} [commandHint] - Command to run to fix it
|
|
36
|
-
* @returns {string} Formatted error string
|
|
37
|
-
*/
|
|
38
|
-
formatError(message, actionText, commandHint) {
|
|
39
|
-
return formatErrorHelper(message, actionText, commandHint);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Format warning message (yellow indicator)
|
|
44
|
-
* @param {string} message - The warning message
|
|
45
|
-
* @param {string} [actionText] - What the user should do
|
|
46
|
-
* @param {string} [commandHint] - Command to run
|
|
47
|
-
* @returns {string} Formatted warning string
|
|
48
|
-
*/
|
|
49
|
-
formatWarning(message, actionText, commandHint) {
|
|
50
|
-
return formatWarningHelper(message, actionText, commandHint);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* INFO: Non-blocking issue, continue execution (does NOT exit)
|
|
55
|
-
* Use for informational messages about issues that don't prevent operation.
|
|
56
|
-
*
|
|
57
|
-
* @param {string} message - The info message
|
|
58
|
-
* @param {string} [actionText] - Optional action hint
|
|
59
|
-
* @param {string} [commandHint] - Optional command hint
|
|
60
|
-
*/
|
|
61
|
-
info(message, actionText, commandHint) {
|
|
62
|
-
console.log(this.formatWarning(message, actionText, commandHint));
|
|
63
|
-
// Does NOT exit - allows continuation
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* WARNING: Issue that should be addressed (exit 1)
|
|
68
|
-
* Use for problems that prevent the operation from completing properly.
|
|
69
|
-
*
|
|
70
|
-
* @param {string} message - The warning message
|
|
71
|
-
* @param {string} [actionText] - What the user should do
|
|
72
|
-
* @param {string} [commandHint] - Command to run to fix it
|
|
73
|
-
*/
|
|
74
|
-
warning(message, actionText, commandHint) {
|
|
75
|
-
console.error(this.formatError(message, actionText, commandHint));
|
|
76
|
-
process.exit(1);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* CRITICAL: Severe error (exit 1 + stack trace if DEBUG=1)
|
|
81
|
-
* Use for unexpected errors, crashes, or severe failures.
|
|
82
|
-
*
|
|
83
|
-
* @param {string} message - The error message
|
|
84
|
-
* @param {string} [actionText] - What the user should do
|
|
85
|
-
* @param {string} [commandHint] - Command to run
|
|
86
|
-
* @param {Error} [error] - Original error object for stack trace
|
|
87
|
-
*/
|
|
88
|
-
critical(message, actionText, commandHint, error) {
|
|
89
|
-
const formatted = formatErrorWithStack(message, error, {
|
|
90
|
-
action: actionText,
|
|
91
|
-
command: commandHint,
|
|
92
|
-
});
|
|
93
|
-
console.error(formatted);
|
|
94
|
-
process.exit(1);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Convenience method: Get formatted error string without exiting
|
|
99
|
-
* Useful for collecting multiple errors before displaying.
|
|
100
|
-
*
|
|
101
|
-
* @param {string} message - The error message
|
|
102
|
-
* @param {string} [actionText] - What the user should do
|
|
103
|
-
* @param {string} [commandHint] - Command to run
|
|
104
|
-
* @returns {string} Formatted error string
|
|
105
|
-
*/
|
|
106
|
-
errorWithAction(message, actionText, commandHint) {
|
|
107
|
-
return this.formatError(message, actionText, commandHint);
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Convenience method: Get formatted warning string without exiting
|
|
112
|
-
*
|
|
113
|
-
* @param {string} message - The warning message
|
|
114
|
-
* @param {string} [actionText] - What the user should do
|
|
115
|
-
* @param {string} [commandHint] - Command to run
|
|
116
|
-
* @returns {string} Formatted warning string
|
|
117
|
-
*/
|
|
118
|
-
warningWithAction(message, actionText, commandHint) {
|
|
119
|
-
return this.formatWarning(message, actionText, commandHint);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Display multiple issues at once, then exit with appropriate code
|
|
124
|
-
* Useful for validation that collects all errors before reporting.
|
|
125
|
-
*
|
|
126
|
-
* @param {Array<{type: 'info'|'warning'|'error', message: string, action?: string, command?: string}>} issues
|
|
127
|
-
* @returns {boolean} True if there were errors/warnings (would normally exit)
|
|
128
|
-
*/
|
|
129
|
-
reportIssues(issues) {
|
|
130
|
-
let hasErrors = false;
|
|
131
|
-
let hasWarnings = false;
|
|
132
|
-
|
|
133
|
-
for (const issue of issues) {
|
|
134
|
-
if (issue.type === 'error') {
|
|
135
|
-
console.error(this.formatError(issue.message, issue.action, issue.command));
|
|
136
|
-
hasErrors = true;
|
|
137
|
-
} else if (issue.type === 'warning') {
|
|
138
|
-
console.error(this.formatWarning(issue.message, issue.action, issue.command));
|
|
139
|
-
hasWarnings = true;
|
|
140
|
-
} else {
|
|
141
|
-
console.log(this.formatWarning(issue.message, issue.action, issue.command));
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
if (hasErrors || hasWarnings) {
|
|
146
|
-
process.exit(1);
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
return hasErrors || hasWarnings;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Create a pre-configured ErrorHandler instance
|
|
155
|
-
* @param {string} commandName - Name of the command
|
|
156
|
-
* @returns {ErrorHandler} New ErrorHandler instance
|
|
157
|
-
*/
|
|
158
|
-
function createErrorHandler(commandName) {
|
|
159
|
-
return new ErrorHandler(commandName);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
module.exports = {
|
|
163
|
-
ErrorHandler,
|
|
164
|
-
createErrorHandler,
|
|
165
|
-
};
|