agileflow 3.4.3 → 4.0.0-alpha.1
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 +235 -499
- 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/session-welcome.js +19 -0
- package/content/plugins/core/plugin.yaml +34 -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 +254 -0
- package/src/cli/commands/status.js +47 -0
- package/src/cli/commands/update.js +82 -0
- package/src/cli/index.js +73 -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 +45 -0
- package/src/runtime/config/loader.js +118 -0
- package/src/runtime/config/schema.json +76 -0
- package/src/runtime/config/writer.js +54 -0
- package/src/runtime/hooks/aggregator.js +133 -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 +306 -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,326 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* auto-self-improve.js - Automatic Agent Expertise Updates
|
|
5
|
-
*
|
|
6
|
-
* This script runs as a Stop hook and automatically updates agent
|
|
7
|
-
* expertise files based on work performed during the session.
|
|
8
|
-
*
|
|
9
|
-
* How it works:
|
|
10
|
-
* 1. Reads session-state.json to find which agent was active
|
|
11
|
-
* 2. Analyzes git diff to see what changed
|
|
12
|
-
* 3. Detects patterns, new files, significant changes
|
|
13
|
-
* 4. Generates a learning entry
|
|
14
|
-
* 5. Appends to the agent's expertise.yaml
|
|
15
|
-
*
|
|
16
|
-
* Usage (as Stop hook):
|
|
17
|
-
* node scripts/auto-self-improve.js
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
const fs = require('fs');
|
|
21
|
-
const path = require('path');
|
|
22
|
-
const { execFileSync } = require('child_process');
|
|
23
|
-
|
|
24
|
-
// Shared utilities
|
|
25
|
-
const { c } = require('../lib/colors');
|
|
26
|
-
const { getProjectRoot } = require('../lib/paths');
|
|
27
|
-
const { safeReadJSON, safeReadFile, safeWriteFile, tryOptional } = require('../lib/errors');
|
|
28
|
-
|
|
29
|
-
// Agents that have expertise files
|
|
30
|
-
const AGENTS_WITH_EXPERTISE = [
|
|
31
|
-
'accessibility',
|
|
32
|
-
'adr-writer',
|
|
33
|
-
'analytics',
|
|
34
|
-
'api',
|
|
35
|
-
'ci',
|
|
36
|
-
'compliance',
|
|
37
|
-
'database',
|
|
38
|
-
'datamigration',
|
|
39
|
-
'design',
|
|
40
|
-
'devops',
|
|
41
|
-
'documentation',
|
|
42
|
-
'epic-planner',
|
|
43
|
-
'integrations',
|
|
44
|
-
'mentor',
|
|
45
|
-
'mobile',
|
|
46
|
-
'monitoring',
|
|
47
|
-
'performance',
|
|
48
|
-
'product',
|
|
49
|
-
'qa',
|
|
50
|
-
'readme-updater',
|
|
51
|
-
'refactor',
|
|
52
|
-
'research',
|
|
53
|
-
'security',
|
|
54
|
-
'testing',
|
|
55
|
-
'ui',
|
|
56
|
-
];
|
|
57
|
-
|
|
58
|
-
// File patterns that suggest domain expertise
|
|
59
|
-
const DOMAIN_PATTERNS = {
|
|
60
|
-
database: [/schema/, /migration/, /\.sql$/, /prisma/, /drizzle/, /sequelize/],
|
|
61
|
-
api: [/\/api\//, /controller/, /route/, /endpoint/, /graphql/],
|
|
62
|
-
ui: [/component/, /\.tsx$/, /\.jsx$/, /styles/, /\.css$/, /\.scss$/],
|
|
63
|
-
testing: [/\.test\./, /\.spec\./, /__tests__/, /jest/, /vitest/],
|
|
64
|
-
security: [/auth/, /password/, /token/, /jwt/, /oauth/, /permission/],
|
|
65
|
-
ci: [/\.github\/workflows/, /\.gitlab-ci/, /dockerfile/i, /docker-compose/],
|
|
66
|
-
documentation: [/\.md$/, /readme/i, /docs\//, /jsdoc/],
|
|
67
|
-
performance: [/cache/, /optimize/, /performance/, /benchmark/],
|
|
68
|
-
devops: [/deploy/, /kubernetes/, /k8s/, /terraform/, /ansible/],
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
// Read session state
|
|
72
|
-
function getSessionState(rootDir) {
|
|
73
|
-
const statePath = path.join(rootDir, 'docs/09-agents/session-state.json');
|
|
74
|
-
const result = safeReadJSON(statePath, { defaultValue: {} });
|
|
75
|
-
return result.ok ? result.data : {};
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// Get git diff summary
|
|
79
|
-
function getGitDiff(rootDir) {
|
|
80
|
-
try {
|
|
81
|
-
// Get list of changed files (staged and unstaged)
|
|
82
|
-
const diffFiles = execFileSync('git', ['diff', '--name-only', 'HEAD'], {
|
|
83
|
-
cwd: rootDir,
|
|
84
|
-
encoding: 'utf8',
|
|
85
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
86
|
-
})
|
|
87
|
-
.trim()
|
|
88
|
-
.split('\n')
|
|
89
|
-
.filter(Boolean);
|
|
90
|
-
|
|
91
|
-
// Get staged files
|
|
92
|
-
const stagedFiles = execFileSync('git', ['diff', '--cached', '--name-only'], {
|
|
93
|
-
cwd: rootDir,
|
|
94
|
-
encoding: 'utf8',
|
|
95
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
96
|
-
})
|
|
97
|
-
.trim()
|
|
98
|
-
.split('\n')
|
|
99
|
-
.filter(Boolean);
|
|
100
|
-
|
|
101
|
-
// Get untracked files
|
|
102
|
-
const untrackedFiles = execFileSync('git', ['ls-files', '--others', '--exclude-standard'], {
|
|
103
|
-
cwd: rootDir,
|
|
104
|
-
encoding: 'utf8',
|
|
105
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
106
|
-
})
|
|
107
|
-
.trim()
|
|
108
|
-
.split('\n')
|
|
109
|
-
.filter(Boolean);
|
|
110
|
-
|
|
111
|
-
// Combine all
|
|
112
|
-
const allFiles = [...new Set([...diffFiles, ...stagedFiles, ...untrackedFiles])];
|
|
113
|
-
|
|
114
|
-
// Get diff stats
|
|
115
|
-
let additions = 0;
|
|
116
|
-
let deletions = 0;
|
|
117
|
-
tryOptional(() => {
|
|
118
|
-
const stats = execFileSync('git', ['diff', '--shortstat', 'HEAD'], {
|
|
119
|
-
cwd: rootDir,
|
|
120
|
-
encoding: 'utf8',
|
|
121
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
122
|
-
});
|
|
123
|
-
const addMatch = stats.match(/(\d+) insertion/);
|
|
124
|
-
const delMatch = stats.match(/(\d+) deletion/);
|
|
125
|
-
if (addMatch) additions = parseInt(addMatch[1]);
|
|
126
|
-
if (delMatch) deletions = parseInt(delMatch[1]);
|
|
127
|
-
}, 'git diff stats');
|
|
128
|
-
|
|
129
|
-
return {
|
|
130
|
-
files: allFiles,
|
|
131
|
-
additions,
|
|
132
|
-
deletions,
|
|
133
|
-
hasChanges: allFiles.length > 0,
|
|
134
|
-
};
|
|
135
|
-
} catch (e) {
|
|
136
|
-
return { files: [], additions: 0, deletions: 0, hasChanges: false };
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
// Detect which domain the changes relate to
|
|
141
|
-
function detectDomain(files) {
|
|
142
|
-
const domainScores = {};
|
|
143
|
-
|
|
144
|
-
for (const file of files) {
|
|
145
|
-
for (const [domain, patterns] of Object.entries(DOMAIN_PATTERNS)) {
|
|
146
|
-
for (const pattern of patterns) {
|
|
147
|
-
if (pattern.test(file.toLowerCase())) {
|
|
148
|
-
domainScores[domain] = (domainScores[domain] || 0) + 1;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
// Return domain with highest score
|
|
155
|
-
const sorted = Object.entries(domainScores).sort((a, b) => b[1] - a[1]);
|
|
156
|
-
return sorted.length > 0 ? sorted[0][0] : null;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// Generate learning summary from changes
|
|
160
|
-
function generateLearningSummary(diff, activeAgent) {
|
|
161
|
-
const { files, additions, deletions } = diff;
|
|
162
|
-
|
|
163
|
-
if (files.length === 0) return null;
|
|
164
|
-
|
|
165
|
-
// Categorize files
|
|
166
|
-
const newFiles = files.filter(f => !f.includes('/'));
|
|
167
|
-
const testFiles = files.filter(f => /\.(test|spec)\.[jt]sx?$/.test(f));
|
|
168
|
-
const configFiles = files.filter(f => /\.(json|yaml|yml|toml|config\.)/.test(f));
|
|
169
|
-
const codeFiles = files.filter(f => /\.[jt]sx?$/.test(f) && !testFiles.includes(f));
|
|
170
|
-
|
|
171
|
-
// Build summary
|
|
172
|
-
const parts = [];
|
|
173
|
-
|
|
174
|
-
if (codeFiles.length > 0) {
|
|
175
|
-
const dirs = [...new Set(codeFiles.map(f => path.dirname(f)))];
|
|
176
|
-
parts.push(`Modified ${codeFiles.length} code file(s) in: ${dirs.slice(0, 3).join(', ')}`);
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
if (testFiles.length > 0) {
|
|
180
|
-
parts.push(`Updated ${testFiles.length} test file(s)`);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
if (configFiles.length > 0) {
|
|
184
|
-
parts.push(`Changed config: ${configFiles.slice(0, 2).join(', ')}`);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
if (additions > 50 || deletions > 50) {
|
|
188
|
-
parts.push(`Significant changes: +${additions}/-${deletions} lines`);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
return parts.length > 0 ? parts.join('. ') : null;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
// Find expertise file for agent
|
|
195
|
-
function getExpertisePath(rootDir, agent) {
|
|
196
|
-
// Try installed location first
|
|
197
|
-
const installedPath = path.join(rootDir, '.agileflow', 'experts', agent, 'expertise.yaml');
|
|
198
|
-
if (fs.existsSync(installedPath)) return installedPath;
|
|
199
|
-
|
|
200
|
-
// Try source location
|
|
201
|
-
const sourcePath = path.join(
|
|
202
|
-
rootDir,
|
|
203
|
-
'packages',
|
|
204
|
-
'cli',
|
|
205
|
-
'src',
|
|
206
|
-
'core',
|
|
207
|
-
'experts',
|
|
208
|
-
agent,
|
|
209
|
-
'expertise.yaml'
|
|
210
|
-
);
|
|
211
|
-
if (fs.existsSync(sourcePath)) return sourcePath;
|
|
212
|
-
|
|
213
|
-
return null;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// Append learning to expertise file
|
|
217
|
-
function appendLearning(expertisePath, learning) {
|
|
218
|
-
const readResult = safeReadFile(expertisePath);
|
|
219
|
-
if (!readResult.ok) return false;
|
|
220
|
-
|
|
221
|
-
let content = readResult.data;
|
|
222
|
-
|
|
223
|
-
// Find the learnings section
|
|
224
|
-
const learningsMatch = content.match(/^learnings:\s*$/m);
|
|
225
|
-
|
|
226
|
-
if (!learningsMatch) {
|
|
227
|
-
// No learnings section, add it at the end
|
|
228
|
-
content += `\n\nlearnings:\n${learning}`;
|
|
229
|
-
} else {
|
|
230
|
-
// Find where to insert (after "learnings:" line)
|
|
231
|
-
const insertPos = learningsMatch.index + learningsMatch[0].length;
|
|
232
|
-
content = content.slice(0, insertPos) + '\n' + learning + content.slice(insertPos);
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
const writeResult = safeWriteFile(expertisePath, content);
|
|
236
|
-
return writeResult.ok;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
// Format learning as YAML
|
|
240
|
-
function formatLearning(summary, files, detectedDomain) {
|
|
241
|
-
const date = new Date().toISOString().split('T')[0];
|
|
242
|
-
const topFiles = files
|
|
243
|
-
.slice(0, 5)
|
|
244
|
-
.map(f => ` - ${f}`)
|
|
245
|
-
.join('\n');
|
|
246
|
-
|
|
247
|
-
return ` - date: "${date}"
|
|
248
|
-
auto_generated: true
|
|
249
|
-
context: "Session work - ${detectedDomain || 'general'} domain"
|
|
250
|
-
insight: "${summary.replace(/"/g, '\\"')}"
|
|
251
|
-
files_touched:
|
|
252
|
-
${topFiles}`;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
// Main function
|
|
256
|
-
function main() {
|
|
257
|
-
const rootDir = getProjectRoot();
|
|
258
|
-
const state = getSessionState(rootDir);
|
|
259
|
-
const diff = getGitDiff(rootDir);
|
|
260
|
-
|
|
261
|
-
// Check if there were any changes
|
|
262
|
-
if (!diff.hasChanges) {
|
|
263
|
-
return; // Silent exit - no changes to learn from
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
// Detect which agent was active
|
|
267
|
-
let activeAgent = null;
|
|
268
|
-
|
|
269
|
-
// Check session state for active command
|
|
270
|
-
if (state.active_command?.name) {
|
|
271
|
-
const name = state.active_command.name.replace('agileflow-', '');
|
|
272
|
-
if (AGENTS_WITH_EXPERTISE.includes(name)) {
|
|
273
|
-
activeAgent = name;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
// If no agent from session, detect from file changes
|
|
278
|
-
if (!activeAgent) {
|
|
279
|
-
activeAgent = detectDomain(diff.files);
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
// If still no agent, skip
|
|
283
|
-
if (!activeAgent || !AGENTS_WITH_EXPERTISE.includes(activeAgent)) {
|
|
284
|
-
return; // Silent exit - can't determine which agent to update
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
// Find expertise file
|
|
288
|
-
const expertisePath = getExpertisePath(rootDir, activeAgent);
|
|
289
|
-
if (!expertisePath) {
|
|
290
|
-
return; // Silent exit - no expertise file found
|
|
291
|
-
}
|
|
292
|
-
|
|
293
|
-
// Generate learning summary
|
|
294
|
-
const summary = generateLearningSummary(diff, activeAgent);
|
|
295
|
-
if (!summary) {
|
|
296
|
-
return; // Silent exit - no meaningful summary
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
// Format and append learning
|
|
300
|
-
const learningYaml = formatLearning(summary, diff.files, activeAgent);
|
|
301
|
-
const success = appendLearning(expertisePath, learningYaml);
|
|
302
|
-
|
|
303
|
-
if (success) {
|
|
304
|
-
console.log('');
|
|
305
|
-
console.log(`${c.green}✓ Auto-learned:${c.reset} ${c.dim}${activeAgent}${c.reset}`);
|
|
306
|
-
console.log(`${c.dim} ${summary}${c.reset}`);
|
|
307
|
-
console.log(
|
|
308
|
-
`${c.dim} → Updated ${path.basename(path.dirname(expertisePath))}/expertise.yaml${c.reset}`
|
|
309
|
-
);
|
|
310
|
-
console.log('');
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
|
|
314
|
-
// Run if executed directly
|
|
315
|
-
if (require.main === module) {
|
|
316
|
-
try {
|
|
317
|
-
main();
|
|
318
|
-
} catch (e) {
|
|
319
|
-
// Silent fail - don't break the workflow
|
|
320
|
-
if (process.env.DEBUG) {
|
|
321
|
-
console.error('auto-self-improve error:', e.message);
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
module.exports = { main, detectDomain, generateLearningSummary };
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* automation-run-due.js - Run all due automations
|
|
4
|
-
*
|
|
5
|
-
* This script is spawned by the SessionStart hook to run
|
|
6
|
-
* due automations in the background without blocking the welcome display.
|
|
7
|
-
*
|
|
8
|
-
* Usage:
|
|
9
|
-
* node automation-run-due.js [--verbose]
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
'use strict';
|
|
13
|
-
|
|
14
|
-
const fs = require('fs');
|
|
15
|
-
const path = require('path');
|
|
16
|
-
|
|
17
|
-
// Resolve paths for automation modules
|
|
18
|
-
let automationRunner;
|
|
19
|
-
try {
|
|
20
|
-
automationRunner = require('./lib/automation-runner.js');
|
|
21
|
-
} catch (e) {
|
|
22
|
-
console.error('Automation runner not available:', e.message);
|
|
23
|
-
process.exit(1);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const { getProjectRoot, getBusLogPath } = require('../lib/paths');
|
|
27
|
-
|
|
28
|
-
// Parse arguments
|
|
29
|
-
const verbose = process.argv.includes('--verbose') || process.argv.includes('-v');
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Log to bus/log.jsonl
|
|
33
|
-
*/
|
|
34
|
-
function logToBus(rootDir, message) {
|
|
35
|
-
try {
|
|
36
|
-
const busPath = getBusLogPath(rootDir);
|
|
37
|
-
const dir = path.dirname(busPath);
|
|
38
|
-
|
|
39
|
-
if (!fs.existsSync(dir)) {
|
|
40
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const entry = {
|
|
44
|
-
ts: new Date().toISOString(),
|
|
45
|
-
from: 'AUTOMATION',
|
|
46
|
-
type: 'automation',
|
|
47
|
-
...message,
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
fs.appendFileSync(busPath, JSON.stringify(entry) + '\n');
|
|
51
|
-
} catch (e) {
|
|
52
|
-
// Silently fail
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Main entry point
|
|
58
|
-
*/
|
|
59
|
-
async function main() {
|
|
60
|
-
const rootDir = getProjectRoot();
|
|
61
|
-
const runner = automationRunner.getAutomationRunner({ rootDir });
|
|
62
|
-
|
|
63
|
-
// Log start
|
|
64
|
-
logToBus(rootDir, {
|
|
65
|
-
action: 'run_due_started',
|
|
66
|
-
timestamp: new Date().toISOString(),
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
if (verbose) {
|
|
70
|
-
console.log('[Automation] Checking for due automations...');
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
try {
|
|
74
|
-
const { ran, results } = await runner.runDue();
|
|
75
|
-
|
|
76
|
-
if (ran === 0) {
|
|
77
|
-
if (verbose) {
|
|
78
|
-
console.log('[Automation] No automations due.');
|
|
79
|
-
}
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Log results
|
|
84
|
-
const successful = results.filter(r => r.success).length;
|
|
85
|
-
const failed = results.filter(r => !r.success).length;
|
|
86
|
-
|
|
87
|
-
logToBus(rootDir, {
|
|
88
|
-
action: 'run_due_completed',
|
|
89
|
-
ran,
|
|
90
|
-
successful,
|
|
91
|
-
failed,
|
|
92
|
-
results: results.map(r => ({
|
|
93
|
-
id: r.id,
|
|
94
|
-
success: r.success,
|
|
95
|
-
duration_ms: r.duration_ms,
|
|
96
|
-
error: r.error,
|
|
97
|
-
})),
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
if (verbose) {
|
|
101
|
-
console.log(
|
|
102
|
-
`[Automation] Ran ${ran} automation(s): ${successful} succeeded, ${failed} failed`
|
|
103
|
-
);
|
|
104
|
-
for (const result of results) {
|
|
105
|
-
const status = result.success ? '✓' : '✗';
|
|
106
|
-
console.log(` ${status} ${result.id} (${result.duration_ms}ms)`);
|
|
107
|
-
if (result.error) {
|
|
108
|
-
console.log(` Error: ${result.error}`);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
} catch (error) {
|
|
113
|
-
logToBus(rootDir, {
|
|
114
|
-
action: 'run_due_error',
|
|
115
|
-
error: error.message,
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
if (verbose) {
|
|
119
|
-
console.error('[Automation] Error:', error.message);
|
|
120
|
-
}
|
|
121
|
-
process.exit(1);
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
main().catch(error => {
|
|
126
|
-
console.error('Unexpected error:', error);
|
|
127
|
-
process.exit(1);
|
|
128
|
-
});
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* babysit-clear-restore.js - SessionStart hook for babysit context preservation
|
|
4
|
-
*
|
|
5
|
-
* When context is cleared (e.g., after plan approval), this hook:
|
|
6
|
-
* 1. Detects source="clear" from Claude Code's SessionStart event
|
|
7
|
-
* 2. Checks if /babysit is active in session-state.json
|
|
8
|
-
* 3. If both, outputs the COMPACT_SUMMARY from the babysit command file
|
|
9
|
-
* 4. Sets last_precompact_at so the welcome script preserves active_commands
|
|
10
|
-
*
|
|
11
|
-
* This eliminates the need to manually embed babysit rules in plan files (Rule #6).
|
|
12
|
-
* The hook automatically injects the rules into the fresh context after clear.
|
|
13
|
-
*
|
|
14
|
-
* Exit codes:
|
|
15
|
-
* 0 = Success (always - SessionStart hooks should never block)
|
|
16
|
-
*
|
|
17
|
-
* Input: JSON on stdin with { source: "startup"|"resume"|"clear"|"compact", ... }
|
|
18
|
-
* Output: Babysit compact summary to stdout (appears as system-reminder)
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
const fs = require('fs');
|
|
22
|
-
const path = require('path');
|
|
23
|
-
|
|
24
|
-
const STDIN_TIMEOUT_MS = 3000;
|
|
25
|
-
|
|
26
|
-
function findProjectRoot() {
|
|
27
|
-
let dir = process.cwd();
|
|
28
|
-
while (dir !== '/') {
|
|
29
|
-
if (fs.existsSync(path.join(dir, '.agileflow'))) return dir;
|
|
30
|
-
if (fs.existsSync(path.join(dir, 'docs', '09-agents'))) return dir;
|
|
31
|
-
dir = path.dirname(dir);
|
|
32
|
-
}
|
|
33
|
-
return process.cwd();
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const ROOT = findProjectRoot();
|
|
37
|
-
|
|
38
|
-
function getSessionState() {
|
|
39
|
-
const statePath = path.join(ROOT, 'docs', '09-agents', 'session-state.json');
|
|
40
|
-
try {
|
|
41
|
-
if (fs.existsSync(statePath)) {
|
|
42
|
-
return JSON.parse(fs.readFileSync(statePath, 'utf8'));
|
|
43
|
-
}
|
|
44
|
-
} catch (e) {
|
|
45
|
-
// Silently fail
|
|
46
|
-
}
|
|
47
|
-
return null;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function isBabysitActive(state) {
|
|
51
|
-
if (!state) return false;
|
|
52
|
-
const activeCommands = state.active_commands || [];
|
|
53
|
-
return activeCommands.some(cmd => cmd.name === 'babysit');
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function setPrecompactTimestamp(state) {
|
|
57
|
-
const statePath = path.join(ROOT, 'docs', '09-agents', 'session-state.json');
|
|
58
|
-
try {
|
|
59
|
-
state.last_precompact_at = new Date().toISOString();
|
|
60
|
-
fs.writeFileSync(statePath, JSON.stringify(state, null, 2) + '\n');
|
|
61
|
-
} catch (e) {
|
|
62
|
-
// Silently fail
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function getBabysitCompactSummary() {
|
|
67
|
-
// Search for the babysit command file in known locations
|
|
68
|
-
const locations = [
|
|
69
|
-
path.join(ROOT, 'packages', 'cli', 'src', 'core', 'commands', 'babysit.md'),
|
|
70
|
-
path.join(ROOT, '.agileflow', 'commands', 'babysit.md'),
|
|
71
|
-
path.join(ROOT, '.claude', 'commands', 'agileflow', 'babysit.md'),
|
|
72
|
-
];
|
|
73
|
-
|
|
74
|
-
for (const filePath of locations) {
|
|
75
|
-
try {
|
|
76
|
-
if (!fs.existsSync(filePath)) continue;
|
|
77
|
-
const content = fs.readFileSync(filePath, 'utf8');
|
|
78
|
-
const match = content.match(
|
|
79
|
-
/<!-- COMPACT_SUMMARY_START[\s\S]*?-->([\s\S]*?)<!-- COMPACT_SUMMARY_END -->/
|
|
80
|
-
);
|
|
81
|
-
if (match) {
|
|
82
|
-
return match[1].trim();
|
|
83
|
-
}
|
|
84
|
-
} catch (e) {
|
|
85
|
-
// Try next location
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return null;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Read stdin for hook event data
|
|
92
|
-
let inputData = '';
|
|
93
|
-
|
|
94
|
-
process.stdin.setEncoding('utf8');
|
|
95
|
-
|
|
96
|
-
process.stdin.on('data', chunk => {
|
|
97
|
-
inputData += chunk;
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
process.stdin.on('end', () => {
|
|
101
|
-
try {
|
|
102
|
-
const input = JSON.parse(inputData);
|
|
103
|
-
const source = input.source;
|
|
104
|
-
|
|
105
|
-
// Only act on "clear" events (context cleared after plan approval, /clear, etc.)
|
|
106
|
-
if (source !== 'clear') {
|
|
107
|
-
process.exit(0);
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
const state = getSessionState();
|
|
112
|
-
if (!isBabysitActive(state)) {
|
|
113
|
-
process.exit(0);
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// Set last_precompact_at so the welcome script preserves active_commands
|
|
118
|
-
// instead of clearing them (it checks this timestamp)
|
|
119
|
-
setPrecompactTimestamp(state);
|
|
120
|
-
|
|
121
|
-
// Output the babysit compact summary
|
|
122
|
-
const summary = getBabysitCompactSummary();
|
|
123
|
-
if (summary) {
|
|
124
|
-
console.log('## ACTIVE COMMAND: /agileflow:babysit (restored after context clear)');
|
|
125
|
-
console.log('');
|
|
126
|
-
console.log(summary);
|
|
127
|
-
} else {
|
|
128
|
-
// Fallback: output minimal babysit rules if command file not found
|
|
129
|
-
console.log('## /agileflow:babysit IS ACTIVE (restored after context clear)');
|
|
130
|
-
console.log('');
|
|
131
|
-
console.log('MANDATORY RULES:');
|
|
132
|
-
console.log('1. ALWAYS end responses with AskUserQuestion tool (specific options, not text)');
|
|
133
|
-
console.log('2. Use EnterPlanMode for non-trivial tasks');
|
|
134
|
-
console.log('3. Delegate complex work to domain experts via Task tool');
|
|
135
|
-
console.log('4. Track progress with TaskCreate/TaskUpdate for multi-step work');
|
|
136
|
-
console.log(
|
|
137
|
-
'5. ALWAYS suggest logic audit post-implementation (after tests pass, make Recommended)'
|
|
138
|
-
);
|
|
139
|
-
}
|
|
140
|
-
} catch (e) {
|
|
141
|
-
// Parse failed or other error - fail open
|
|
142
|
-
}
|
|
143
|
-
process.exit(0);
|
|
144
|
-
});
|
|
145
|
-
|
|
146
|
-
// Handle no stdin (direct invocation or timeout)
|
|
147
|
-
process.stdin.on('error', () => {
|
|
148
|
-
process.exit(0);
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
// Timeout safety - don't hang
|
|
152
|
-
setTimeout(() => {
|
|
153
|
-
process.exit(0);
|
|
154
|
-
}, STDIN_TIMEOUT_MS);
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* babysit-context-restore.js - UserPromptSubmit hook
|
|
4
|
-
*
|
|
5
|
-
* Backup mechanism to restore babysit context after plan mode clears context.
|
|
6
|
-
* When user selects "Clear context and bypass permissions" after ExitPlanMode,
|
|
7
|
-
* this hook fires on the next user prompt and reminds Claude of babysit rules.
|
|
8
|
-
*
|
|
9
|
-
* The primary mechanism is embedding rules in the plan file (Rule #6).
|
|
10
|
-
* This hook is a backup for edge cases where plan file approach might miss.
|
|
11
|
-
*
|
|
12
|
-
* Usage: Called automatically as UserPromptSubmit hook
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
const fs = require('fs');
|
|
16
|
-
const path = require('path');
|
|
17
|
-
|
|
18
|
-
// Find session-state.json - try multiple locations
|
|
19
|
-
function findSessionState() {
|
|
20
|
-
const locations = [
|
|
21
|
-
'docs/09-agents/session-state.json',
|
|
22
|
-
path.join(process.env.CLAUDE_PROJECT_DIR || '.', 'docs/09-agents/session-state.json'),
|
|
23
|
-
];
|
|
24
|
-
|
|
25
|
-
for (const loc of locations) {
|
|
26
|
-
if (fs.existsSync(loc)) {
|
|
27
|
-
return loc;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function main() {
|
|
34
|
-
const sessionStatePath = findSessionState();
|
|
35
|
-
if (!sessionStatePath) return;
|
|
36
|
-
|
|
37
|
-
try {
|
|
38
|
-
const state = JSON.parse(fs.readFileSync(sessionStatePath, 'utf8'));
|
|
39
|
-
|
|
40
|
-
// Check if restoration is pending
|
|
41
|
-
if (!state.babysit_pending_restore) return;
|
|
42
|
-
|
|
43
|
-
// Output restoration context
|
|
44
|
-
console.log('');
|
|
45
|
-
console.log('\x1b[36m╔══════════════════════════════════════════════════════════════╗\x1b[0m');
|
|
46
|
-
console.log(
|
|
47
|
-
'\x1b[36m║\x1b[0m \x1b[1m\x1b[33m/babysit CONTEXT RESTORED\x1b[0m \x1b[36m║\x1b[0m'
|
|
48
|
-
);
|
|
49
|
-
console.log('\x1b[36m╠══════════════════════════════════════════════════════════════╣\x1b[0m');
|
|
50
|
-
console.log(
|
|
51
|
-
'\x1b[36m║\x1b[0m /agileflow:babysit was active before context clear. \x1b[36m║\x1b[0m'
|
|
52
|
-
);
|
|
53
|
-
console.log(
|
|
54
|
-
'\x1b[36m║\x1b[0m These rules are MANDATORY: \x1b[36m║\x1b[0m'
|
|
55
|
-
);
|
|
56
|
-
console.log(
|
|
57
|
-
'\x1b[36m║\x1b[0m \x1b[36m║\x1b[0m'
|
|
58
|
-
);
|
|
59
|
-
console.log(
|
|
60
|
-
'\x1b[36m║\x1b[0m 1. ALWAYS end responses with AskUserQuestion tool \x1b[36m║\x1b[0m'
|
|
61
|
-
);
|
|
62
|
-
console.log(
|
|
63
|
-
'\x1b[36m║\x1b[0m 2. Use EnterPlanMode before non-trivial tasks \x1b[36m║\x1b[0m'
|
|
64
|
-
);
|
|
65
|
-
console.log(
|
|
66
|
-
'\x1b[36m║\x1b[0m 3. Delegate complex work to domain experts \x1b[36m║\x1b[0m'
|
|
67
|
-
);
|
|
68
|
-
console.log(
|
|
69
|
-
'\x1b[36m║\x1b[0m 4. Track progress with TaskCreate/TaskUpdate for 3+ step tasks \x1b[36m║\x1b[0m'
|
|
70
|
-
);
|
|
71
|
-
console.log(
|
|
72
|
-
'\x1b[36m║\x1b[0m \x1b[36m║\x1b[0m'
|
|
73
|
-
);
|
|
74
|
-
console.log(
|
|
75
|
-
'\x1b[36m║\x1b[0m For full context: /agileflow:babysit \x1b[36m║\x1b[0m'
|
|
76
|
-
);
|
|
77
|
-
console.log('\x1b[36m╚══════════════════════════════════════════════════════════════╝\x1b[0m');
|
|
78
|
-
console.log('');
|
|
79
|
-
|
|
80
|
-
// Clear the flag (one-time restoration)
|
|
81
|
-
state.babysit_pending_restore = false;
|
|
82
|
-
state.babysit_restored_at = new Date().toISOString();
|
|
83
|
-
fs.writeFileSync(sessionStatePath, JSON.stringify(state, null, 2) + '\n');
|
|
84
|
-
} catch (e) {
|
|
85
|
-
// Silently fail - don't break user's workflow
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
main();
|