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
package/lib/git-operations.js
DELETED
|
@@ -1,266 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* git-operations.js - Git command execution and phase detection
|
|
3
|
-
*
|
|
4
|
-
* Provides cached git operations and session phase detection for Kanban visualization.
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
const { spawnSync, spawn } = require('child_process');
|
|
8
|
-
const fs = require('fs');
|
|
9
|
-
|
|
10
|
-
const { getProjectRoot } = require('./paths');
|
|
11
|
-
const { git } = require('./process-executor');
|
|
12
|
-
|
|
13
|
-
const ROOT = getProjectRoot();
|
|
14
|
-
|
|
15
|
-
// Git command cache (10 second TTL to avoid stale data)
|
|
16
|
-
const gitCache = {
|
|
17
|
-
data: new Map(),
|
|
18
|
-
ttlMs: 10000,
|
|
19
|
-
get(key) {
|
|
20
|
-
const entry = this.data.get(key);
|
|
21
|
-
if (entry && Date.now() - entry.timestamp < this.ttlMs) {
|
|
22
|
-
return entry.value;
|
|
23
|
-
}
|
|
24
|
-
this.data.delete(key);
|
|
25
|
-
return null;
|
|
26
|
-
},
|
|
27
|
-
set(key, value) {
|
|
28
|
-
this.data.set(key, { value, timestamp: Date.now() });
|
|
29
|
-
},
|
|
30
|
-
invalidate(key) {
|
|
31
|
-
if (key) {
|
|
32
|
-
this.data.delete(key);
|
|
33
|
-
} else {
|
|
34
|
-
this.data.clear();
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Execute git command asynchronously (Promise-based, non-blocking)
|
|
41
|
-
* @param {string[]} args - Git command arguments
|
|
42
|
-
* @param {string} cwd - Working directory
|
|
43
|
-
* @returns {Promise<{stdout: string, stderr: string, code: number}>}
|
|
44
|
-
*/
|
|
45
|
-
function execGitAsync(args, cwd) {
|
|
46
|
-
return new Promise((resolve, reject) => {
|
|
47
|
-
const proc = spawn('git', args, {
|
|
48
|
-
cwd,
|
|
49
|
-
encoding: 'utf8',
|
|
50
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
let stdout = '';
|
|
54
|
-
let stderr = '';
|
|
55
|
-
|
|
56
|
-
proc.stdout.on('data', data => {
|
|
57
|
-
stdout += data;
|
|
58
|
-
});
|
|
59
|
-
proc.stderr.on('data', data => {
|
|
60
|
-
stderr += data;
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
proc.on('error', err => {
|
|
64
|
-
reject(err);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
proc.on('close', code => {
|
|
68
|
-
resolve({ stdout: stdout.trim(), stderr: stderr.trim(), code });
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Get current git branch (cached for performance)
|
|
75
|
-
* @param {string} [cwd=ROOT] - Working directory
|
|
76
|
-
* @returns {string} Current branch name
|
|
77
|
-
*/
|
|
78
|
-
function getCurrentBranch(cwd = ROOT) {
|
|
79
|
-
const cacheKey = `branch:${cwd}`;
|
|
80
|
-
const cached = gitCache.get(cacheKey);
|
|
81
|
-
if (cached !== null) return cached;
|
|
82
|
-
|
|
83
|
-
const result = git(['branch', '--show-current'], { cwd, fallback: 'unknown' });
|
|
84
|
-
const branch = result.data;
|
|
85
|
-
gitCache.set(cacheKey, branch);
|
|
86
|
-
return branch;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Get main branch name (main or master) - cached since it rarely changes
|
|
91
|
-
* @param {string} [cwd=ROOT] - Working directory
|
|
92
|
-
* @returns {string} Main branch name ('main' or 'master')
|
|
93
|
-
*/
|
|
94
|
-
function getMainBranch(cwd = ROOT) {
|
|
95
|
-
const cacheKey = `mainBranch:${cwd}`;
|
|
96
|
-
const cached = gitCache.get(cacheKey);
|
|
97
|
-
if (cached !== null) return cached;
|
|
98
|
-
|
|
99
|
-
const checkMain = spawnSync('git', ['show-ref', '--verify', '--quiet', 'refs/heads/main'], {
|
|
100
|
-
cwd,
|
|
101
|
-
encoding: 'utf8',
|
|
102
|
-
});
|
|
103
|
-
|
|
104
|
-
if (checkMain.status === 0) {
|
|
105
|
-
gitCache.set(cacheKey, 'main');
|
|
106
|
-
return 'main';
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
const checkMaster = spawnSync('git', ['show-ref', '--verify', '--quiet', 'refs/heads/master'], {
|
|
110
|
-
cwd,
|
|
111
|
-
encoding: 'utf8',
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
if (checkMaster.status === 0) {
|
|
115
|
-
gitCache.set(cacheKey, 'master');
|
|
116
|
-
return 'master';
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
gitCache.set(cacheKey, 'main');
|
|
120
|
-
return 'main'; // Default fallback
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
// Session phases for Kanban-style visualization
|
|
124
|
-
const SESSION_PHASES = {
|
|
125
|
-
TODO: 'todo',
|
|
126
|
-
CODING: 'coding',
|
|
127
|
-
REVIEW: 'review',
|
|
128
|
-
MERGED: 'merged',
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Determine phase from git state (commits and status)
|
|
133
|
-
* @param {number} commits - Number of commits ahead of main
|
|
134
|
-
* @param {boolean} hasUncommittedChanges - Whether there are uncommitted changes
|
|
135
|
-
* @returns {string} Phase constant
|
|
136
|
-
*/
|
|
137
|
-
function determinePhaseFromGitState(commits, hasUncommittedChanges) {
|
|
138
|
-
if (commits === 0) {
|
|
139
|
-
return SESSION_PHASES.TODO;
|
|
140
|
-
}
|
|
141
|
-
// Has commits - check for uncommitted changes
|
|
142
|
-
return hasUncommittedChanges ? SESSION_PHASES.CODING : SESSION_PHASES.REVIEW;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Check early-exit conditions for session phase
|
|
147
|
-
* Returns phase if early exit, null if git state check needed
|
|
148
|
-
* @param {Object} session - Session object
|
|
149
|
-
* @returns {string|null} Phase if determinable without git, null otherwise
|
|
150
|
-
*/
|
|
151
|
-
function getSessionPhaseEarlyExit(session) {
|
|
152
|
-
if (session.merged_at || session.is_main) {
|
|
153
|
-
return SESSION_PHASES.MERGED;
|
|
154
|
-
}
|
|
155
|
-
if (!fs.existsSync(session.path)) {
|
|
156
|
-
return SESSION_PHASES.TODO;
|
|
157
|
-
}
|
|
158
|
-
return null;
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Get session phase synchronously (with caching)
|
|
163
|
-
* @param {Object} session - Session object
|
|
164
|
-
* @returns {string} Phase constant
|
|
165
|
-
*/
|
|
166
|
-
function getSessionPhase(session) {
|
|
167
|
-
// Early exit checks
|
|
168
|
-
const earlyExit = getSessionPhaseEarlyExit(session);
|
|
169
|
-
if (earlyExit) return earlyExit;
|
|
170
|
-
|
|
171
|
-
const sessionPath = session.path;
|
|
172
|
-
const cacheKey = `phase:${sessionPath}`;
|
|
173
|
-
const cached = gitCache.get(cacheKey);
|
|
174
|
-
if (cached !== null) return cached;
|
|
175
|
-
|
|
176
|
-
try {
|
|
177
|
-
const mainBranch = getMainBranch(sessionPath);
|
|
178
|
-
const commitResult = git(['rev-list', '--count', `${mainBranch}..HEAD`], {
|
|
179
|
-
cwd: sessionPath,
|
|
180
|
-
fallback: '0',
|
|
181
|
-
});
|
|
182
|
-
const commits = parseInt(commitResult.data, 10);
|
|
183
|
-
|
|
184
|
-
const statusResult = git(['status', '--porcelain'], {
|
|
185
|
-
cwd: sessionPath,
|
|
186
|
-
fallback: '',
|
|
187
|
-
});
|
|
188
|
-
const status = statusResult.data;
|
|
189
|
-
|
|
190
|
-
const phase = determinePhaseFromGitState(commits, status !== '');
|
|
191
|
-
gitCache.set(cacheKey, phase);
|
|
192
|
-
return phase;
|
|
193
|
-
} catch (e) {
|
|
194
|
-
return SESSION_PHASES.CODING;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
/**
|
|
199
|
-
* Detect session phase asynchronously (non-blocking git calls)
|
|
200
|
-
* @param {Object} session - Session object
|
|
201
|
-
* @returns {Promise<string>} Phase constant
|
|
202
|
-
*/
|
|
203
|
-
async function getSessionPhaseAsync(session) {
|
|
204
|
-
// Early exit checks (shared with sync version)
|
|
205
|
-
const earlyExit = getSessionPhaseEarlyExit(session);
|
|
206
|
-
if (earlyExit) return earlyExit;
|
|
207
|
-
|
|
208
|
-
const sessionPath = session.path;
|
|
209
|
-
const cacheKey = `phase:${sessionPath}`;
|
|
210
|
-
const cached = gitCache.get(cacheKey);
|
|
211
|
-
if (cached !== null) return cached;
|
|
212
|
-
|
|
213
|
-
try {
|
|
214
|
-
const mainBranch = getMainBranch(sessionPath);
|
|
215
|
-
const commitResult = await execGitAsync(
|
|
216
|
-
['rev-list', '--count', `${mainBranch}..HEAD`],
|
|
217
|
-
sessionPath
|
|
218
|
-
);
|
|
219
|
-
const commits = parseInt(commitResult.stdout || '0', 10);
|
|
220
|
-
|
|
221
|
-
const statusResult = await execGitAsync(['status', '--porcelain'], sessionPath);
|
|
222
|
-
|
|
223
|
-
const phase = determinePhaseFromGitState(commits, statusResult.stdout !== '');
|
|
224
|
-
gitCache.set(cacheKey, phase);
|
|
225
|
-
return phase;
|
|
226
|
-
} catch (e) {
|
|
227
|
-
return SESSION_PHASES.CODING;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* Get phases for multiple sessions in parallel (Promise.all batching)
|
|
233
|
-
* @param {Object[]} sessions - Array of session objects
|
|
234
|
-
* @returns {Promise<Object[]>} Sessions with phase property added
|
|
235
|
-
*/
|
|
236
|
-
async function getSessionPhasesAsync(sessions) {
|
|
237
|
-
const phasePromises = sessions.map(async session => {
|
|
238
|
-
const phase = await getSessionPhaseAsync(session);
|
|
239
|
-
return { session, phase };
|
|
240
|
-
});
|
|
241
|
-
|
|
242
|
-
const results = await Promise.all(phasePromises);
|
|
243
|
-
|
|
244
|
-
// Return as array with phase included
|
|
245
|
-
return results.map(({ session, phase }) => ({
|
|
246
|
-
...session,
|
|
247
|
-
phase,
|
|
248
|
-
}));
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
module.exports = {
|
|
252
|
-
// Git cache
|
|
253
|
-
gitCache,
|
|
254
|
-
// Git command execution
|
|
255
|
-
execGitAsync,
|
|
256
|
-
// Branch operations
|
|
257
|
-
getCurrentBranch,
|
|
258
|
-
getMainBranch,
|
|
259
|
-
// Phase detection
|
|
260
|
-
SESSION_PHASES,
|
|
261
|
-
determinePhaseFromGitState,
|
|
262
|
-
getSessionPhaseEarlyExit,
|
|
263
|
-
getSessionPhase,
|
|
264
|
-
getSessionPhaseAsync,
|
|
265
|
-
getSessionPhasesAsync,
|
|
266
|
-
};
|
package/lib/lazy-require.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* lazy-require.js - Reusable Lazy-Loading Utility
|
|
3
|
-
*
|
|
4
|
-
* AgileFlow scripts are copied to user projects (.agileflow/scripts/) and run
|
|
5
|
-
* as hooks. When these scripts eagerly require() npm dependencies at module
|
|
6
|
-
* load time, they crash if the dependency isn't resolvable from the user's
|
|
7
|
-
* project directory. This utility standardizes the lazy-loading pattern used
|
|
8
|
-
* ad-hoc in yaml-utils.js.
|
|
9
|
-
*
|
|
10
|
-
* Usage:
|
|
11
|
-
* const { lazyRequire } = require('./lazy-require');
|
|
12
|
-
*
|
|
13
|
-
* // Returns a getter function; require() is deferred until first call
|
|
14
|
-
* const getChalk = lazyRequire('chalk');
|
|
15
|
-
*
|
|
16
|
-
* // With fallback resolution paths
|
|
17
|
-
* const getYaml = lazyRequire('js-yaml',
|
|
18
|
-
* path.join(__dirname, '..', 'node_modules', 'js-yaml')
|
|
19
|
-
* );
|
|
20
|
-
*
|
|
21
|
-
* // Later, when actually needed:
|
|
22
|
-
* const chalk = getChalk();
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
'use strict';
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Create a lazy-loading getter for an npm module.
|
|
29
|
-
*
|
|
30
|
-
* The returned function defers require() until first invocation, then caches
|
|
31
|
-
* the result. Multiple resolution paths are tried in order, so the module can
|
|
32
|
-
* be found from the user's node_modules, AgileFlow's own node_modules, or any
|
|
33
|
-
* other location.
|
|
34
|
-
*
|
|
35
|
-
* @param {string} name - Primary module name (passed to require())
|
|
36
|
-
* @param {...string} fallbackPaths - Additional paths to try if primary fails
|
|
37
|
-
* @returns {function(): any} Getter that returns the loaded module
|
|
38
|
-
*/
|
|
39
|
-
function lazyRequire(name, ...fallbackPaths) {
|
|
40
|
-
let cached = null;
|
|
41
|
-
return () => {
|
|
42
|
-
if (cached) return cached;
|
|
43
|
-
const paths = [name, ...fallbackPaths];
|
|
44
|
-
for (const p of paths) {
|
|
45
|
-
try {
|
|
46
|
-
cached = require(p);
|
|
47
|
-
return cached;
|
|
48
|
-
} catch (_e) {
|
|
49
|
-
// Continue to next path
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
throw new Error(
|
|
53
|
-
`${name} not found. Run: npm install ${name}\n` +
|
|
54
|
-
'Or reinstall AgileFlow: npx agileflow setup --force'
|
|
55
|
-
);
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
module.exports = { lazyRequire };
|
package/lib/lock-file.js
DELETED
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* lock-file.js - Lock file operations for session management
|
|
3
|
-
*
|
|
4
|
-
* Manages session lock files for PID-based liveness detection.
|
|
5
|
-
* Lock files use a simple key-value format: pid=12345\nstarted=1706825600
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
const fs = require('fs');
|
|
9
|
-
const path = require('path');
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Parse lock file content into an object
|
|
13
|
-
* @param {string} content - Raw lock file content
|
|
14
|
-
* @returns {Object} Parsed key-value pairs
|
|
15
|
-
*/
|
|
16
|
-
function parseLockContent(content) {
|
|
17
|
-
const lock = {};
|
|
18
|
-
content.split('\n').forEach(line => {
|
|
19
|
-
const [key, value] = line.split('=');
|
|
20
|
-
if (key && value) {
|
|
21
|
-
lock[key.trim()] = value.trim();
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
return lock;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* Get lock file path for a session
|
|
29
|
-
* @param {string} sessionsDir - Sessions directory path
|
|
30
|
-
* @param {string} sessionId - Session identifier
|
|
31
|
-
* @returns {string} Full path to lock file
|
|
32
|
-
*/
|
|
33
|
-
function getLockPath(sessionsDir, sessionId) {
|
|
34
|
-
return path.join(sessionsDir, `${sessionId}.lock`);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Read lock file synchronously
|
|
39
|
-
* @param {string} sessionsDir - Sessions directory path
|
|
40
|
-
* @param {string} sessionId - Session identifier
|
|
41
|
-
* @returns {Object|null} Parsed lock data or null if not found
|
|
42
|
-
*/
|
|
43
|
-
function readLock(sessionsDir, sessionId) {
|
|
44
|
-
const lockPath = getLockPath(sessionsDir, sessionId);
|
|
45
|
-
if (!fs.existsSync(lockPath)) return null;
|
|
46
|
-
|
|
47
|
-
try {
|
|
48
|
-
const content = fs.readFileSync(lockPath, 'utf8');
|
|
49
|
-
return parseLockContent(content);
|
|
50
|
-
} catch (e) {
|
|
51
|
-
return null;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Read lock file asynchronously
|
|
57
|
-
* @param {string} sessionsDir - Sessions directory path
|
|
58
|
-
* @param {string} sessionId - Session identifier
|
|
59
|
-
* @returns {Promise<Object|null>} Parsed lock data or null if not found
|
|
60
|
-
*/
|
|
61
|
-
async function readLockAsync(sessionsDir, sessionId) {
|
|
62
|
-
const lockPath = getLockPath(sessionsDir, sessionId);
|
|
63
|
-
try {
|
|
64
|
-
const content = await fs.promises.readFile(lockPath, 'utf8');
|
|
65
|
-
return parseLockContent(content);
|
|
66
|
-
} catch (e) {
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Write lock file for a session
|
|
73
|
-
* @param {string} sessionsDir - Sessions directory path
|
|
74
|
-
* @param {string} sessionId - Session identifier
|
|
75
|
-
* @param {number} pid - Process ID to record
|
|
76
|
-
*/
|
|
77
|
-
function writeLock(sessionsDir, sessionId, pid) {
|
|
78
|
-
const lockPath = getLockPath(sessionsDir, sessionId);
|
|
79
|
-
const content = `pid=${pid}\nstarted=${Math.floor(Date.now() / 1000)}\n`;
|
|
80
|
-
fs.writeFileSync(lockPath, content);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Remove lock file for a session
|
|
85
|
-
* @param {string} sessionsDir - Sessions directory path
|
|
86
|
-
* @param {string} sessionId - Session identifier
|
|
87
|
-
*/
|
|
88
|
-
function removeLock(sessionsDir, sessionId) {
|
|
89
|
-
const lockPath = getLockPath(sessionsDir, sessionId);
|
|
90
|
-
if (fs.existsSync(lockPath)) {
|
|
91
|
-
fs.unlinkSync(lockPath);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* Check if a PID is alive
|
|
97
|
-
* @param {number} pid - Process ID to check
|
|
98
|
-
* @returns {boolean} True if process is alive
|
|
99
|
-
*/
|
|
100
|
-
function isPidAlive(pid) {
|
|
101
|
-
if (!pid) return false;
|
|
102
|
-
try {
|
|
103
|
-
process.kill(pid, 0);
|
|
104
|
-
return true;
|
|
105
|
-
} catch (e) {
|
|
106
|
-
return false;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Check if session is active (has lock with alive PID)
|
|
112
|
-
* @param {string} sessionsDir - Sessions directory path
|
|
113
|
-
* @param {string} sessionId - Session identifier
|
|
114
|
-
* @returns {boolean} True if session is active
|
|
115
|
-
*/
|
|
116
|
-
function isSessionActive(sessionsDir, sessionId) {
|
|
117
|
-
const lock = readLock(sessionsDir, sessionId);
|
|
118
|
-
if (!lock || !lock.pid) return false;
|
|
119
|
-
return isPidAlive(parseInt(lock.pid, 10));
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Check if session is active asynchronously
|
|
124
|
-
* @param {string} sessionsDir - Sessions directory path
|
|
125
|
-
* @param {string} sessionId - Session identifier
|
|
126
|
-
* @returns {Promise<boolean>} True if session is active
|
|
127
|
-
*/
|
|
128
|
-
async function isSessionActiveAsync(sessionsDir, sessionId) {
|
|
129
|
-
const lock = await readLockAsync(sessionsDir, sessionId);
|
|
130
|
-
if (!lock || !lock.pid) return false;
|
|
131
|
-
return isPidAlive(parseInt(lock.pid, 10));
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
module.exports = {
|
|
135
|
-
parseLockContent,
|
|
136
|
-
getLockPath,
|
|
137
|
-
readLock,
|
|
138
|
-
readLockAsync,
|
|
139
|
-
writeLock,
|
|
140
|
-
removeLock,
|
|
141
|
-
isPidAlive,
|
|
142
|
-
isSessionActive,
|
|
143
|
-
isSessionActiveAsync,
|
|
144
|
-
};
|
package/lib/logger.js
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* logger.js - Centralized logger with level control
|
|
3
|
-
*
|
|
4
|
-
* Provides structured logging with configurable levels, colored output,
|
|
5
|
-
* and automatic secret redaction on debug messages.
|
|
6
|
-
*
|
|
7
|
-
* Log Levels (ordered): debug < info < warn < error < silent
|
|
8
|
-
*
|
|
9
|
-
* Environment Variables:
|
|
10
|
-
* AGILEFLOW_LOG_LEVEL - Set minimum level (debug/info/warn/error/silent). Default: info
|
|
11
|
-
* AGILEFLOW_VERBOSE - When 1/true, sets level to debug (shorthand)
|
|
12
|
-
* AGILEFLOW_DEBUG - When 1, sets level to debug (backward compat with errors.js)
|
|
13
|
-
*
|
|
14
|
-
* Usage:
|
|
15
|
-
* const { createLogger } = require('../lib/logger');
|
|
16
|
-
* const log = createLogger('welcome');
|
|
17
|
-
*
|
|
18
|
-
* log.debug('Loading model...'); // [DEBUG] [welcome] Loading model...
|
|
19
|
-
* log.info('Server started'); // [INFO] [welcome] Server started
|
|
20
|
-
* log.warn('Deprecated API'); // [WARN] [welcome] Deprecated API
|
|
21
|
-
* log.error('Connection failed'); // [ERROR] [welcome] Connection failed
|
|
22
|
-
*/
|
|
23
|
-
|
|
24
|
-
const { c } = require('./colors');
|
|
25
|
-
const { sanitizeDebugOutput } = require('./errors');
|
|
26
|
-
|
|
27
|
-
const LEVELS = {
|
|
28
|
-
debug: 0,
|
|
29
|
-
info: 1,
|
|
30
|
-
warn: 2,
|
|
31
|
-
error: 3,
|
|
32
|
-
silent: 4,
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Resolve the effective log level from environment variables.
|
|
37
|
-
* Priority: AGILEFLOW_LOG_LEVEL > AGILEFLOW_VERBOSE > AGILEFLOW_DEBUG > default (info)
|
|
38
|
-
*/
|
|
39
|
-
function resolveLevel() {
|
|
40
|
-
const explicit = process.env.AGILEFLOW_LOG_LEVEL;
|
|
41
|
-
if (explicit && LEVELS[explicit] !== undefined) {
|
|
42
|
-
return explicit;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
const verbose = process.env.AGILEFLOW_VERBOSE;
|
|
46
|
-
if (verbose === '1' || verbose === 'true') {
|
|
47
|
-
return 'debug';
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (process.env.AGILEFLOW_DEBUG === '1') {
|
|
51
|
-
return 'debug';
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return 'info';
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Create a logger instance with an optional module name.
|
|
59
|
-
*
|
|
60
|
-
* @param {string} [moduleName] - Module name for log prefix (e.g. 'welcome', 'context-loader')
|
|
61
|
-
* @param {object} [options] - Logger options
|
|
62
|
-
* @param {string} [options.level] - Override log level (ignores env vars)
|
|
63
|
-
* @param {boolean} [options.timestamps] - Include ISO timestamps in output (default: false)
|
|
64
|
-
* @returns {{ debug: Function, info: Function, warn: Function, error: Function }}
|
|
65
|
-
*/
|
|
66
|
-
function createLogger(moduleName, options = {}) {
|
|
67
|
-
const levelName = options.level || resolveLevel();
|
|
68
|
-
const minLevel = LEVELS[levelName] !== undefined ? LEVELS[levelName] : LEVELS.info;
|
|
69
|
-
const timestamps = options.timestamps || false;
|
|
70
|
-
|
|
71
|
-
function formatPrefix(label, color) {
|
|
72
|
-
const ts = timestamps ? `${new Date().toISOString()} ` : '';
|
|
73
|
-
const mod = moduleName ? ` ${c.dim}[${moduleName}]${c.reset}` : '';
|
|
74
|
-
return `${ts}${color}[${label}]${c.reset}${mod}`;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return {
|
|
78
|
-
debug(...args) {
|
|
79
|
-
if (minLevel > LEVELS.debug) return;
|
|
80
|
-
const prefix = formatPrefix('DEBUG', c.dim);
|
|
81
|
-
// Sanitize all args to prevent secret leakage in debug output
|
|
82
|
-
const sanitized = args.map(arg => sanitizeDebugOutput(arg).sanitized);
|
|
83
|
-
process.stderr.write(`${prefix} ${sanitized.join(' ')}\n`);
|
|
84
|
-
},
|
|
85
|
-
|
|
86
|
-
info(...args) {
|
|
87
|
-
if (minLevel > LEVELS.info) return;
|
|
88
|
-
const prefix = formatPrefix('INFO', c.cyan);
|
|
89
|
-
process.stderr.write(`${prefix} ${args.join(' ')}\n`);
|
|
90
|
-
},
|
|
91
|
-
|
|
92
|
-
warn(...args) {
|
|
93
|
-
if (minLevel > LEVELS.warn) return;
|
|
94
|
-
const prefix = formatPrefix('WARN', c.yellow);
|
|
95
|
-
process.stderr.write(`${prefix} ${args.join(' ')}\n`);
|
|
96
|
-
},
|
|
97
|
-
|
|
98
|
-
error(...args) {
|
|
99
|
-
if (minLevel > LEVELS.error) return;
|
|
100
|
-
const prefix = formatPrefix('ERROR', c.red);
|
|
101
|
-
process.stderr.write(`${prefix} ${args.join(' ')}\n`);
|
|
102
|
-
},
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
module.exports = { createLogger, LEVELS };
|