@jonit-dev/night-watch-cli 1.7.29 → 1.7.31
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/bin/night-watch.mjs +1 -1
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/{src/cli.js → cli.js} +1 -0
- package/dist/cli.js.map +1 -0
- package/dist/{src/commands → commands}/audit.d.ts +2 -2
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +105 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/{src/commands → commands}/board.d.ts +1 -1
- package/dist/commands/board.d.ts.map +1 -0
- package/dist/commands/board.js +664 -0
- package/dist/commands/board.js.map +1 -0
- package/dist/{src/commands → commands}/cancel.d.ts +3 -3
- package/dist/commands/cancel.d.ts.map +1 -0
- package/dist/{src/commands → commands}/cancel.js +18 -20
- package/dist/commands/cancel.js.map +1 -0
- package/dist/commands/dashboard/tab-actions.d.ts.map +1 -0
- package/dist/commands/dashboard/tab-actions.js.map +1 -0
- package/dist/{src/commands → commands}/dashboard/tab-config.d.ts +3 -3
- package/dist/commands/dashboard/tab-config.d.ts.map +1 -0
- package/dist/{src/commands → commands}/dashboard/tab-config.js +250 -187
- package/dist/commands/dashboard/tab-config.js.map +1 -0
- package/dist/{src/commands → commands}/dashboard/tab-logs.d.ts +1 -1
- package/dist/commands/dashboard/tab-logs.d.ts.map +1 -0
- package/dist/{src/commands → commands}/dashboard/tab-logs.js +62 -38
- package/dist/commands/dashboard/tab-logs.js.map +1 -0
- package/dist/{src/commands → commands}/dashboard/tab-schedules.d.ts +1 -1
- package/dist/commands/dashboard/tab-schedules.d.ts.map +1 -0
- package/dist/{src/commands → commands}/dashboard/tab-schedules.js +85 -76
- package/dist/commands/dashboard/tab-schedules.js.map +1 -0
- package/dist/{src/commands → commands}/dashboard/tab-status.d.ts +7 -7
- package/dist/commands/dashboard/tab-status.d.ts.map +1 -0
- package/dist/{src/commands → commands}/dashboard/tab-status.js +98 -95
- package/dist/commands/dashboard/tab-status.js.map +1 -0
- package/dist/{src/commands → commands}/dashboard/types.d.ts +3 -4
- package/dist/commands/dashboard/types.d.ts.map +1 -0
- package/dist/commands/dashboard/types.js.map +1 -0
- package/dist/{src/commands → commands}/dashboard.d.ts +2 -2
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/{src/commands → commands}/dashboard.js +32 -33
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/{src/commands → commands}/doctor.d.ts +2 -2
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/{src/commands → commands}/doctor.js +40 -43
- package/dist/commands/doctor.js.map +1 -0
- package/dist/{src/commands → commands}/history.d.ts +1 -1
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/{src/commands → commands}/history.js +11 -18
- package/dist/commands/history.js.map +1 -0
- package/dist/{src/commands → commands}/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/{src/commands → commands}/init.js +62 -36
- package/dist/commands/init.js.map +1 -0
- package/dist/{src/commands → commands}/install.d.ts +2 -2
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/{src/commands → commands}/install.js +48 -50
- package/dist/commands/install.js.map +1 -0
- package/dist/{src/commands → commands}/logs.d.ts +1 -1
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/{src/commands → commands}/logs.js +29 -30
- package/dist/commands/logs.js.map +1 -0
- package/dist/{src/commands → commands}/prd-state.d.ts +1 -1
- package/dist/commands/prd-state.d.ts.map +1 -0
- package/dist/{src/commands → commands}/prd-state.js +14 -14
- package/dist/commands/prd-state.js.map +1 -0
- package/dist/{src/commands → commands}/prd.d.ts +1 -1
- package/dist/commands/prd.d.ts.map +1 -0
- package/dist/{src/commands → commands}/prd.js +57 -66
- package/dist/commands/prd.js.map +1 -0
- package/dist/{src/commands → commands}/prds.d.ts +1 -1
- package/dist/commands/prds.d.ts.map +1 -0
- package/dist/{src/commands → commands}/prds.js +51 -53
- package/dist/commands/prds.js.map +1 -0
- package/dist/{src/commands → commands}/prs.d.ts +1 -1
- package/dist/commands/prs.d.ts.map +1 -0
- package/dist/{src/commands → commands}/prs.js +22 -24
- package/dist/commands/prs.js.map +1 -0
- package/dist/{src/commands → commands}/qa.d.ts +2 -2
- package/dist/commands/qa.d.ts.map +1 -0
- package/dist/{src/commands → commands}/qa.js +50 -51
- package/dist/commands/qa.js.map +1 -0
- package/dist/{src/commands → commands}/retry.d.ts +1 -1
- package/dist/commands/retry.d.ts.map +1 -0
- package/dist/{src/commands → commands}/retry.js +9 -10
- package/dist/commands/retry.js.map +1 -0
- package/dist/{src/commands → commands}/review.d.ts +2 -2
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/{src/commands → commands}/review.js +68 -59
- package/dist/commands/review.js.map +1 -0
- package/dist/{src/commands → commands}/run.d.ts +2 -2
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/{src/commands → commands}/run.js +87 -83
- package/dist/commands/run.js.map +1 -0
- package/dist/{src/commands → commands}/serve.d.ts +2 -2
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/{src/commands → commands}/serve.js +18 -18
- package/dist/commands/serve.js.map +1 -0
- package/dist/{src/commands → commands}/slice.d.ts +2 -2
- package/dist/commands/slice.d.ts.map +1 -0
- package/dist/{src/commands → commands}/slice.js +50 -46
- package/dist/commands/slice.js.map +1 -0
- package/dist/{src/commands → commands}/state.d.ts +1 -1
- package/dist/commands/state.d.ts.map +1 -0
- package/dist/{src/commands → commands}/state.js +20 -22
- package/dist/commands/state.js.map +1 -0
- package/dist/{src/commands → commands}/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/{src/commands → commands}/status.js +75 -54
- package/dist/commands/status.js.map +1 -0
- package/dist/{src/commands → commands}/uninstall.d.ts +1 -1
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/{src/commands → commands}/uninstall.js +12 -14
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/{src/commands → commands}/update.d.ts +1 -1
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/{src/commands → commands}/update.js +23 -23
- package/dist/commands/update.js.map +1 -0
- package/package.json +18 -42
- package/LICENSE +0 -21
- package/README.md +0 -132
- package/dist/shared/types.d.ts +0 -226
- package/dist/shared/types.d.ts.map +0 -1
- package/dist/shared/types.js +0 -7
- package/dist/shared/types.js.map +0 -1
- package/dist/src/agents/soul-compiler.d.ts +0 -11
- package/dist/src/agents/soul-compiler.d.ts.map +0 -1
- package/dist/src/agents/soul-compiler.js +0 -157
- package/dist/src/agents/soul-compiler.js.map +0 -1
- package/dist/src/board/factory.d.ts +0 -3
- package/dist/src/board/factory.d.ts.map +0 -1
- package/dist/src/board/factory.js +0 -10
- package/dist/src/board/factory.js.map +0 -1
- package/dist/src/board/providers/github-graphql.d.ts +0 -16
- package/dist/src/board/providers/github-graphql.d.ts.map +0 -1
- package/dist/src/board/providers/github-graphql.js +0 -43
- package/dist/src/board/providers/github-graphql.js.map +0 -1
- package/dist/src/board/providers/github-projects.d.ts +0 -51
- package/dist/src/board/providers/github-projects.d.ts.map +0 -1
- package/dist/src/board/providers/github-projects.js +0 -672
- package/dist/src/board/providers/github-projects.js.map +0 -1
- package/dist/src/board/types.d.ts +0 -60
- package/dist/src/board/types.d.ts.map +0 -1
- package/dist/src/board/types.js +0 -4
- package/dist/src/board/types.js.map +0 -1
- package/dist/src/cli.d.ts +0 -3
- package/dist/src/cli.d.ts.map +0 -1
- package/dist/src/cli.js.map +0 -1
- package/dist/src/commands/audit.d.ts.map +0 -1
- package/dist/src/commands/audit.js +0 -98
- package/dist/src/commands/audit.js.map +0 -1
- package/dist/src/commands/board.d.ts.map +0 -1
- package/dist/src/commands/board.js +0 -294
- package/dist/src/commands/board.js.map +0 -1
- package/dist/src/commands/cancel.d.ts.map +0 -1
- package/dist/src/commands/cancel.js.map +0 -1
- package/dist/src/commands/dashboard/tab-actions.d.ts.map +0 -1
- package/dist/src/commands/dashboard/tab-actions.js.map +0 -1
- package/dist/src/commands/dashboard/tab-config.d.ts.map +0 -1
- package/dist/src/commands/dashboard/tab-config.js.map +0 -1
- package/dist/src/commands/dashboard/tab-logs.d.ts.map +0 -1
- package/dist/src/commands/dashboard/tab-logs.js.map +0 -1
- package/dist/src/commands/dashboard/tab-schedules.d.ts.map +0 -1
- package/dist/src/commands/dashboard/tab-schedules.js.map +0 -1
- package/dist/src/commands/dashboard/tab-status.d.ts.map +0 -1
- package/dist/src/commands/dashboard/tab-status.js.map +0 -1
- package/dist/src/commands/dashboard/types.d.ts.map +0 -1
- package/dist/src/commands/dashboard/types.js.map +0 -1
- package/dist/src/commands/dashboard.d.ts.map +0 -1
- package/dist/src/commands/dashboard.js.map +0 -1
- package/dist/src/commands/doctor.d.ts.map +0 -1
- package/dist/src/commands/doctor.js.map +0 -1
- package/dist/src/commands/history.d.ts.map +0 -1
- package/dist/src/commands/history.js.map +0 -1
- package/dist/src/commands/init.d.ts.map +0 -1
- package/dist/src/commands/init.js.map +0 -1
- package/dist/src/commands/install.d.ts.map +0 -1
- package/dist/src/commands/install.js.map +0 -1
- package/dist/src/commands/logs.d.ts.map +0 -1
- package/dist/src/commands/logs.js.map +0 -1
- package/dist/src/commands/prd-state.d.ts.map +0 -1
- package/dist/src/commands/prd-state.js.map +0 -1
- package/dist/src/commands/prd.d.ts.map +0 -1
- package/dist/src/commands/prd.js.map +0 -1
- package/dist/src/commands/prds.d.ts.map +0 -1
- package/dist/src/commands/prds.js.map +0 -1
- package/dist/src/commands/prs.d.ts.map +0 -1
- package/dist/src/commands/prs.js.map +0 -1
- package/dist/src/commands/qa.d.ts.map +0 -1
- package/dist/src/commands/qa.js.map +0 -1
- package/dist/src/commands/retry.d.ts.map +0 -1
- package/dist/src/commands/retry.js.map +0 -1
- package/dist/src/commands/review.d.ts.map +0 -1
- package/dist/src/commands/review.js.map +0 -1
- package/dist/src/commands/run.d.ts.map +0 -1
- package/dist/src/commands/run.js.map +0 -1
- package/dist/src/commands/serve.d.ts.map +0 -1
- package/dist/src/commands/serve.js.map +0 -1
- package/dist/src/commands/slice.d.ts.map +0 -1
- package/dist/src/commands/slice.js.map +0 -1
- package/dist/src/commands/state.d.ts.map +0 -1
- package/dist/src/commands/state.js.map +0 -1
- package/dist/src/commands/status.d.ts.map +0 -1
- package/dist/src/commands/status.js.map +0 -1
- package/dist/src/commands/uninstall.d.ts.map +0 -1
- package/dist/src/commands/uninstall.js.map +0 -1
- package/dist/src/commands/update.d.ts.map +0 -1
- package/dist/src/commands/update.js.map +0 -1
- package/dist/src/config.d.ts +0 -23
- package/dist/src/config.d.ts.map +0 -1
- package/dist/src/config.js +0 -671
- package/dist/src/config.js.map +0 -1
- package/dist/src/constants.d.ts +0 -67
- package/dist/src/constants.d.ts.map +0 -1
- package/dist/src/constants.js +0 -131
- package/dist/src/constants.js.map +0 -1
- package/dist/src/server/index.d.ts +0 -23
- package/dist/src/server/index.d.ts.map +0 -1
- package/dist/src/server/index.js +0 -1704
- package/dist/src/server/index.js.map +0 -1
- package/dist/src/slack/channel-manager.d.ts +0 -32
- package/dist/src/slack/channel-manager.d.ts.map +0 -1
- package/dist/src/slack/channel-manager.js +0 -128
- package/dist/src/slack/channel-manager.js.map +0 -1
- package/dist/src/slack/client.d.ts +0 -76
- package/dist/src/slack/client.d.ts.map +0 -1
- package/dist/src/slack/client.js +0 -193
- package/dist/src/slack/client.js.map +0 -1
- package/dist/src/slack/deliberation.d.ts +0 -87
- package/dist/src/slack/deliberation.d.ts.map +0 -1
- package/dist/src/slack/deliberation.js +0 -1354
- package/dist/src/slack/deliberation.js.map +0 -1
- package/dist/src/slack/index.d.ts +0 -6
- package/dist/src/slack/index.d.ts.map +0 -1
- package/dist/src/slack/index.js +0 -5
- package/dist/src/slack/index.js.map +0 -1
- package/dist/src/slack/interaction-listener.d.ts +0 -130
- package/dist/src/slack/interaction-listener.d.ts.map +0 -1
- package/dist/src/slack/interaction-listener.js +0 -1329
- package/dist/src/slack/interaction-listener.js.map +0 -1
- package/dist/src/storage/json-state-migrator.d.ts +0 -24
- package/dist/src/storage/json-state-migrator.d.ts.map +0 -1
- package/dist/src/storage/json-state-migrator.js +0 -197
- package/dist/src/storage/json-state-migrator.js.map +0 -1
- package/dist/src/storage/repositories/index.d.ts +0 -25
- package/dist/src/storage/repositories/index.d.ts.map +0 -1
- package/dist/src/storage/repositories/index.js +0 -45
- package/dist/src/storage/repositories/index.js.map +0 -1
- package/dist/src/storage/repositories/interfaces.d.ts +0 -60
- package/dist/src/storage/repositories/interfaces.d.ts.map +0 -1
- package/dist/src/storage/repositories/interfaces.js +0 -6
- package/dist/src/storage/repositories/interfaces.js.map +0 -1
- package/dist/src/storage/repositories/sqlite/agent-persona-repository.d.ts +0 -33
- package/dist/src/storage/repositories/sqlite/agent-persona-repository.d.ts.map +0 -1
- package/dist/src/storage/repositories/sqlite/agent-persona-repository.js +0 -715
- package/dist/src/storage/repositories/sqlite/agent-persona-repository.js.map +0 -1
- package/dist/src/storage/repositories/sqlite/execution-history-repository.d.ts +0 -21
- package/dist/src/storage/repositories/sqlite/execution-history-repository.d.ts.map +0 -1
- package/dist/src/storage/repositories/sqlite/execution-history-repository.js +0 -94
- package/dist/src/storage/repositories/sqlite/execution-history-repository.js.map +0 -1
- package/dist/src/storage/repositories/sqlite/prd-state-repository.d.ts +0 -17
- package/dist/src/storage/repositories/sqlite/prd-state-repository.d.ts.map +0 -1
- package/dist/src/storage/repositories/sqlite/prd-state-repository.js +0 -74
- package/dist/src/storage/repositories/sqlite/prd-state-repository.js.map +0 -1
- package/dist/src/storage/repositories/sqlite/project-registry-repository.d.ts +0 -17
- package/dist/src/storage/repositories/sqlite/project-registry-repository.d.ts.map +0 -1
- package/dist/src/storage/repositories/sqlite/project-registry-repository.js +0 -43
- package/dist/src/storage/repositories/sqlite/project-registry-repository.js.map +0 -1
- package/dist/src/storage/repositories/sqlite/roadmap-state-repository.d.ts +0 -14
- package/dist/src/storage/repositories/sqlite/roadmap-state-repository.d.ts.map +0 -1
- package/dist/src/storage/repositories/sqlite/roadmap-state-repository.js +0 -47
- package/dist/src/storage/repositories/sqlite/roadmap-state-repository.js.map +0 -1
- package/dist/src/storage/repositories/sqlite/slack-discussion-repository.d.ts +0 -20
- package/dist/src/storage/repositories/sqlite/slack-discussion-repository.d.ts.map +0 -1
- package/dist/src/storage/repositories/sqlite/slack-discussion-repository.js +0 -88
- package/dist/src/storage/repositories/sqlite/slack-discussion-repository.js.map +0 -1
- package/dist/src/storage/sqlite/client.d.ts +0 -23
- package/dist/src/storage/sqlite/client.d.ts.map +0 -1
- package/dist/src/storage/sqlite/client.js +0 -47
- package/dist/src/storage/sqlite/client.js.map +0 -1
- package/dist/src/storage/sqlite/migrations.d.ts +0 -11
- package/dist/src/storage/sqlite/migrations.d.ts.map +0 -1
- package/dist/src/storage/sqlite/migrations.js +0 -94
- package/dist/src/storage/sqlite/migrations.js.map +0 -1
- package/dist/src/templates/prd-template.d.ts +0 -11
- package/dist/src/templates/prd-template.d.ts.map +0 -1
- package/dist/src/templates/prd-template.js +0 -166
- package/dist/src/templates/prd-template.js.map +0 -1
- package/dist/src/templates/slicer-prompt.d.ts +0 -54
- package/dist/src/templates/slicer-prompt.d.ts.map +0 -1
- package/dist/src/templates/slicer-prompt.js +0 -163
- package/dist/src/templates/slicer-prompt.js.map +0 -1
- package/dist/src/types.d.ts +0 -140
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js +0 -5
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils/avatar-generator.d.ts +0 -6
- package/dist/src/utils/avatar-generator.d.ts.map +0 -1
- package/dist/src/utils/avatar-generator.js +0 -133
- package/dist/src/utils/avatar-generator.js.map +0 -1
- package/dist/src/utils/checks.d.ts +0 -55
- package/dist/src/utils/checks.d.ts.map +0 -1
- package/dist/src/utils/checks.js +0 -246
- package/dist/src/utils/checks.js.map +0 -1
- package/dist/src/utils/config-writer.d.ts +0 -16
- package/dist/src/utils/config-writer.d.ts.map +0 -1
- package/dist/src/utils/config-writer.js +0 -45
- package/dist/src/utils/config-writer.js.map +0 -1
- package/dist/src/utils/crontab.d.ts +0 -62
- package/dist/src/utils/crontab.d.ts.map +0 -1
- package/dist/src/utils/crontab.js +0 -168
- package/dist/src/utils/crontab.js.map +0 -1
- package/dist/src/utils/execution-history.d.ts +0 -54
- package/dist/src/utils/execution-history.d.ts.map +0 -1
- package/dist/src/utils/execution-history.js +0 -80
- package/dist/src/utils/execution-history.js.map +0 -1
- package/dist/src/utils/github.d.ts +0 -40
- package/dist/src/utils/github.d.ts.map +0 -1
- package/dist/src/utils/github.js +0 -126
- package/dist/src/utils/github.js.map +0 -1
- package/dist/src/utils/notify.d.ts +0 -64
- package/dist/src/utils/notify.d.ts.map +0 -1
- package/dist/src/utils/notify.js +0 -405
- package/dist/src/utils/notify.js.map +0 -1
- package/dist/src/utils/prd-states.d.ts +0 -16
- package/dist/src/utils/prd-states.d.ts.map +0 -1
- package/dist/src/utils/prd-states.js +0 -28
- package/dist/src/utils/prd-states.js.map +0 -1
- package/dist/src/utils/registry.d.ts +0 -45
- package/dist/src/utils/registry.d.ts.map +0 -1
- package/dist/src/utils/registry.js +0 -86
- package/dist/src/utils/registry.js.map +0 -1
- package/dist/src/utils/roadmap-parser.d.ts +0 -45
- package/dist/src/utils/roadmap-parser.d.ts.map +0 -1
- package/dist/src/utils/roadmap-parser.js +0 -136
- package/dist/src/utils/roadmap-parser.js.map +0 -1
- package/dist/src/utils/roadmap-scanner.d.ts +0 -92
- package/dist/src/utils/roadmap-scanner.d.ts.map +0 -1
- package/dist/src/utils/roadmap-scanner.js +0 -349
- package/dist/src/utils/roadmap-scanner.js.map +0 -1
- package/dist/src/utils/roadmap-state.d.ts +0 -90
- package/dist/src/utils/roadmap-state.d.ts.map +0 -1
- package/dist/src/utils/roadmap-state.js +0 -154
- package/dist/src/utils/roadmap-state.js.map +0 -1
- package/dist/src/utils/script-result.d.ts +0 -12
- package/dist/src/utils/script-result.d.ts.map +0 -1
- package/dist/src/utils/script-result.js +0 -46
- package/dist/src/utils/script-result.js.map +0 -1
- package/dist/src/utils/shell.d.ts +0 -27
- package/dist/src/utils/shell.d.ts.map +0 -1
- package/dist/src/utils/shell.js +0 -64
- package/dist/src/utils/shell.js.map +0 -1
- package/dist/src/utils/status-data.d.ts +0 -148
- package/dist/src/utils/status-data.d.ts.map +0 -1
- package/dist/src/utils/status-data.js +0 -548
- package/dist/src/utils/status-data.js.map +0 -1
- package/dist/src/utils/ui.d.ts +0 -55
- package/dist/src/utils/ui.d.ts.map +0 -1
- package/dist/src/utils/ui.js +0 -121
- package/dist/src/utils/ui.js.map +0 -1
- package/scripts/night-watch-audit-cron.sh +0 -149
- package/scripts/night-watch-cron.sh +0 -484
- package/scripts/night-watch-helpers.sh +0 -499
- package/scripts/night-watch-pr-reviewer-cron.sh +0 -528
- package/scripts/night-watch-qa-cron.sh +0 -281
- package/scripts/night-watch-slicer-cron.sh +0 -90
- package/scripts/test-helpers.bats +0 -77
- package/templates/night-watch-pr-reviewer.md +0 -174
- package/templates/night-watch-qa.md +0 -157
- package/templates/night-watch-slicer.md +0 -219
- package/templates/night-watch.config.json +0 -30
- package/templates/night-watch.md +0 -94
- package/templates/prd-executor.md +0 -235
- package/templates/prd.md +0 -26
- package/web/dist/assets/index-BiJf9LFT.js +0 -458
- package/web/dist/assets/index-OpSgvsYu.css +0 -1
- package/web/dist/avatars/carlos.webp +0 -0
- package/web/dist/avatars/dev.webp +0 -0
- package/web/dist/avatars/maya.webp +0 -0
- package/web/dist/avatars/priya.webp +0 -0
- package/web/dist/index.html +0 -82
- /package/dist/{src/commands → commands}/dashboard/tab-actions.d.ts +0 -0
- /package/dist/{src/commands → commands}/dashboard/tab-actions.js +0 -0
- /package/dist/{src/commands → commands}/dashboard/types.js +0 -0
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Roadmap Parser for Night Watch CLI
|
|
3
|
-
* Parses ROADMAP.md files into structured items
|
|
4
|
-
*/
|
|
5
|
-
import * as crypto from "crypto";
|
|
6
|
-
/**
|
|
7
|
-
* Generate a hash for an item based on its title
|
|
8
|
-
* Uses first 8 characters of SHA-256 hash of lowercase trimmed title
|
|
9
|
-
*/
|
|
10
|
-
export function generateItemHash(title) {
|
|
11
|
-
const normalizedTitle = title.toLowerCase().trim();
|
|
12
|
-
return crypto.createHash("sha256").update(normalizedTitle).digest("hex").slice(0, 8);
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Parse ROADMAP.md content into structured items
|
|
16
|
-
*
|
|
17
|
-
* Supports two formats:
|
|
18
|
-
* 1. Checklist format: Lines matching `- [ ] Title` or `- [x] Title`
|
|
19
|
-
* with optional description on following indented lines
|
|
20
|
-
* 2. Heading format: `### Title` followed by body text (until next heading)
|
|
21
|
-
*
|
|
22
|
-
* @param content - The raw ROADMAP.md content
|
|
23
|
-
* @returns Array of parsed roadmap items
|
|
24
|
-
*/
|
|
25
|
-
export function parseRoadmap(content) {
|
|
26
|
-
const items = [];
|
|
27
|
-
const lines = content.split("\n");
|
|
28
|
-
let currentSection = "General";
|
|
29
|
-
for (let i = 0; i < lines.length; i++) {
|
|
30
|
-
const line = lines[i];
|
|
31
|
-
// Track section headers (## headings)
|
|
32
|
-
const sectionMatch = line.match(/^##\s+(.+)$/);
|
|
33
|
-
if (sectionMatch) {
|
|
34
|
-
currentSection = sectionMatch[1].trim();
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
// Parse checklist items: - [ ] Title or - [x] Title
|
|
38
|
-
const checklistMatch = line.match(/^-\s+\[([ xX])\]\s+(.+)$/);
|
|
39
|
-
if (checklistMatch) {
|
|
40
|
-
const checked = checklistMatch[1].toLowerCase() === "x";
|
|
41
|
-
const title = checklistMatch[2].trim();
|
|
42
|
-
// Collect description from following indented lines
|
|
43
|
-
const description = collectDescription(lines, i + 1);
|
|
44
|
-
items.push({
|
|
45
|
-
hash: generateItemHash(title),
|
|
46
|
-
title,
|
|
47
|
-
description,
|
|
48
|
-
checked,
|
|
49
|
-
section: currentSection,
|
|
50
|
-
});
|
|
51
|
-
continue;
|
|
52
|
-
}
|
|
53
|
-
// Parse heading-based items: ### Title followed by body
|
|
54
|
-
const headingMatch = line.match(/^###\s+(.+)$/);
|
|
55
|
-
if (headingMatch) {
|
|
56
|
-
const title = headingMatch[1].trim();
|
|
57
|
-
// Collect description from following lines until next heading
|
|
58
|
-
const description = collectDescriptionUntilNextHeading(lines, i + 1);
|
|
59
|
-
items.push({
|
|
60
|
-
hash: generateItemHash(title),
|
|
61
|
-
title,
|
|
62
|
-
description,
|
|
63
|
-
checked: false, // Heading-based items are never checked
|
|
64
|
-
section: currentSection,
|
|
65
|
-
});
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return items;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Collect description from indented lines following a checklist item
|
|
73
|
-
* Stops when reaching a non-indented line, another list item, or a heading
|
|
74
|
-
*/
|
|
75
|
-
function collectDescription(lines, startIndex) {
|
|
76
|
-
const descriptionLines = [];
|
|
77
|
-
for (let i = startIndex; i < lines.length; i++) {
|
|
78
|
-
const line = lines[i];
|
|
79
|
-
// Stop at empty line
|
|
80
|
-
if (line.trim() === "") {
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
// Stop at non-indented line (including headings, other list items)
|
|
84
|
-
if (!line.startsWith(" ") && !line.startsWith("\t")) {
|
|
85
|
-
break;
|
|
86
|
-
}
|
|
87
|
-
// Add the line, stripping leading indentation
|
|
88
|
-
descriptionLines.push(line.trim());
|
|
89
|
-
}
|
|
90
|
-
return descriptionLines.join("\n");
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Collect description from lines following a ### heading
|
|
94
|
-
* Stops when reaching another heading (## or ###)
|
|
95
|
-
*/
|
|
96
|
-
function collectDescriptionUntilNextHeading(lines, startIndex) {
|
|
97
|
-
const descriptionLines = [];
|
|
98
|
-
for (let i = startIndex; i < lines.length; i++) {
|
|
99
|
-
const line = lines[i];
|
|
100
|
-
// Stop at any heading
|
|
101
|
-
if (line.match(/^#{1,3}\s+/)) {
|
|
102
|
-
break;
|
|
103
|
-
}
|
|
104
|
-
// Stop at empty line followed by another heading
|
|
105
|
-
if (line.trim() === "") {
|
|
106
|
-
// Look ahead for heading
|
|
107
|
-
if (i + 1 < lines.length && lines[i + 1].match(/^#{1,3}\s+/)) {
|
|
108
|
-
break;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
descriptionLines.push(line);
|
|
112
|
-
}
|
|
113
|
-
// Trim trailing empty lines and join
|
|
114
|
-
const result = descriptionLines.join("\n").trim();
|
|
115
|
-
return result;
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* Filter roadmap items to only unchecked items (pending work)
|
|
119
|
-
*/
|
|
120
|
-
export function getUncheckedItems(items) {
|
|
121
|
-
return items.filter((item) => !item.checked);
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Group roadmap items by section
|
|
125
|
-
*/
|
|
126
|
-
export function groupBySection(items) {
|
|
127
|
-
const groups = {};
|
|
128
|
-
for (const item of items) {
|
|
129
|
-
if (!groups[item.section]) {
|
|
130
|
-
groups[item.section] = [];
|
|
131
|
-
}
|
|
132
|
-
groups[item.section].push(item);
|
|
133
|
-
}
|
|
134
|
-
return groups;
|
|
135
|
-
}
|
|
136
|
-
//# sourceMappingURL=roadmap-parser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roadmap-parser.js","sourceRoot":"","sources":["../../../src/utils/roadmap-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Roadmap Scanner for Night Watch CLI
|
|
3
|
-
* Scans ROADMAP.md files and generates PRD skeleton files
|
|
4
|
-
*/
|
|
5
|
-
import { INightWatchConfig } from "../types.js";
|
|
6
|
-
import { IRoadmapItem } from "./roadmap-parser.js";
|
|
7
|
-
/**
|
|
8
|
-
* Status of the roadmap scanner
|
|
9
|
-
*/
|
|
10
|
-
export interface IRoadmapStatus {
|
|
11
|
-
/** Whether ROADMAP.md file was found */
|
|
12
|
-
found: boolean;
|
|
13
|
-
/** Whether the scanner is enabled in config */
|
|
14
|
-
enabled: boolean;
|
|
15
|
-
/** Total number of items in roadmap */
|
|
16
|
-
totalItems: number;
|
|
17
|
-
/** Number of items that have been processed */
|
|
18
|
-
processedItems: number;
|
|
19
|
-
/** Number of items pending processing */
|
|
20
|
-
pendingItems: number;
|
|
21
|
-
/** Current status of the scanner */
|
|
22
|
-
status: "idle" | "scanning" | "complete" | "disabled" | "no-roadmap";
|
|
23
|
-
/** All roadmap items with processing status */
|
|
24
|
-
items: Array<IRoadmapItem & {
|
|
25
|
-
processed: boolean;
|
|
26
|
-
prdFile?: string;
|
|
27
|
-
}>;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Result of a roadmap scan operation
|
|
31
|
-
*/
|
|
32
|
-
export interface IScanResult {
|
|
33
|
-
/** List of PRD files created */
|
|
34
|
-
created: string[];
|
|
35
|
-
/** List of items skipped (already processed or checked) */
|
|
36
|
-
skipped: string[];
|
|
37
|
-
/** List of errors encountered */
|
|
38
|
-
errors: string[];
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Result of slicing a single roadmap item
|
|
42
|
-
*/
|
|
43
|
-
export interface ISliceResult {
|
|
44
|
-
/** Whether slicing was successful */
|
|
45
|
-
sliced: boolean;
|
|
46
|
-
/** The created PRD file path (relative to PRD dir) */
|
|
47
|
-
file?: string;
|
|
48
|
-
/** Error message if slicing failed */
|
|
49
|
-
error?: string;
|
|
50
|
-
/** The roadmap item that was processed */
|
|
51
|
-
item?: IRoadmapItem;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Get the current status of the roadmap scanner
|
|
55
|
-
*
|
|
56
|
-
* @param projectDir - The project directory
|
|
57
|
-
* @param config - The Night Watch configuration
|
|
58
|
-
* @returns The roadmap scanner status
|
|
59
|
-
*/
|
|
60
|
-
export declare function getRoadmapStatus(projectDir: string, config: INightWatchConfig): IRoadmapStatus;
|
|
61
|
-
/**
|
|
62
|
-
* Slice a single roadmap item into a PRD using the AI provider
|
|
63
|
-
*
|
|
64
|
-
* @param projectDir - The project directory
|
|
65
|
-
* @param prdDir - The PRD directory
|
|
66
|
-
* @param item - The roadmap item to slice
|
|
67
|
-
* @param config - The Night Watch configuration
|
|
68
|
-
* @returns The slice result
|
|
69
|
-
*/
|
|
70
|
-
export declare function sliceRoadmapItem(projectDir: string, prdDir: string, item: IRoadmapItem, config: INightWatchConfig): Promise<ISliceResult>;
|
|
71
|
-
/**
|
|
72
|
-
* Slice the next unprocessed roadmap item
|
|
73
|
-
*
|
|
74
|
-
* @param projectDir - The project directory
|
|
75
|
-
* @param config - The Night Watch configuration
|
|
76
|
-
* @returns The slice result
|
|
77
|
-
*/
|
|
78
|
-
export declare function sliceNextItem(projectDir: string, config: INightWatchConfig): Promise<ISliceResult>;
|
|
79
|
-
/**
|
|
80
|
-
* Scan the roadmap and slice ONE item
|
|
81
|
-
* This is now async and processes only a single item per call
|
|
82
|
-
*
|
|
83
|
-
* @param projectDir - The project directory
|
|
84
|
-
* @param config - The Night Watch configuration
|
|
85
|
-
* @returns The scan result with created, skipped, and error lists
|
|
86
|
-
*/
|
|
87
|
-
export declare function scanRoadmap(projectDir: string, config: INightWatchConfig): Promise<IScanResult>;
|
|
88
|
-
/**
|
|
89
|
-
* Check if there are new (unprocessed) items in the roadmap
|
|
90
|
-
*/
|
|
91
|
-
export declare function hasNewItems(projectDir: string, config: INightWatchConfig): boolean;
|
|
92
|
-
//# sourceMappingURL=roadmap-scanner.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roadmap-scanner.d.ts","sourceRoot":"","sources":["../../../src/utils/roadmap-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,iBAAiB,EAAY,MAAM,aAAa,CAAC;AAE1D,OAAO,EAAE,YAAY,EAAgB,MAAM,qBAAqB,CAAC;AAajE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,CAAC;IACrE,+CAA+C;IAC/C,KAAK,EAAE,KAAK,CAAC,YAAY,GAAG;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvE;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iCAAiC;IACjC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,cAAc,CA+EhB;AA8CD;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,YAAY,CAAC,CAiHvB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,YAAY,CAAC,CAqFvB;AAED;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,WAAW,CAAC,CA2BtB;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAGT"}
|
|
@@ -1,349 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Roadmap Scanner for Night Watch CLI
|
|
3
|
-
* Scans ROADMAP.md files and generates PRD skeleton files
|
|
4
|
-
*/
|
|
5
|
-
import * as fs from "fs";
|
|
6
|
-
import * as path from "path";
|
|
7
|
-
import { spawn } from "child_process";
|
|
8
|
-
import { getNextPrdNumber, slugify } from "../commands/prd.js";
|
|
9
|
-
import { parseRoadmap } from "./roadmap-parser.js";
|
|
10
|
-
import { isItemProcessed, loadRoadmapState, markItemProcessed, saveRoadmapState, } from "./roadmap-state.js";
|
|
11
|
-
import { createSlicerPromptVars, renderSlicerPrompt, } from "../templates/slicer-prompt.js";
|
|
12
|
-
/**
|
|
13
|
-
* Get the current status of the roadmap scanner
|
|
14
|
-
*
|
|
15
|
-
* @param projectDir - The project directory
|
|
16
|
-
* @param config - The Night Watch configuration
|
|
17
|
-
* @returns The roadmap scanner status
|
|
18
|
-
*/
|
|
19
|
-
export function getRoadmapStatus(projectDir, config) {
|
|
20
|
-
const roadmapPath = path.join(projectDir, config.roadmapScanner.roadmapPath);
|
|
21
|
-
// Check if enabled
|
|
22
|
-
if (!config.roadmapScanner.enabled) {
|
|
23
|
-
return {
|
|
24
|
-
found: false,
|
|
25
|
-
enabled: false,
|
|
26
|
-
totalItems: 0,
|
|
27
|
-
processedItems: 0,
|
|
28
|
-
pendingItems: 0,
|
|
29
|
-
status: "disabled",
|
|
30
|
-
items: [],
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
// Check if roadmap file exists
|
|
34
|
-
if (!fs.existsSync(roadmapPath)) {
|
|
35
|
-
return {
|
|
36
|
-
found: false,
|
|
37
|
-
enabled: true,
|
|
38
|
-
totalItems: 0,
|
|
39
|
-
processedItems: 0,
|
|
40
|
-
pendingItems: 0,
|
|
41
|
-
status: "no-roadmap",
|
|
42
|
-
items: [],
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
// Parse roadmap
|
|
46
|
-
const content = fs.readFileSync(roadmapPath, "utf-8");
|
|
47
|
-
const items = parseRoadmap(content);
|
|
48
|
-
// Load state
|
|
49
|
-
const prdDir = path.join(projectDir, config.prdDir);
|
|
50
|
-
const state = loadRoadmapState(prdDir);
|
|
51
|
-
// Scan existing PRD files for title-based duplicate detection
|
|
52
|
-
const existingPrdSlugs = scanExistingPrdSlugs(prdDir);
|
|
53
|
-
// Build status items
|
|
54
|
-
const statusItems = items.map((item) => {
|
|
55
|
-
const processed = isItemProcessed(state, item.hash);
|
|
56
|
-
const stateItem = state.items[item.hash];
|
|
57
|
-
// Also check for duplicates by title match
|
|
58
|
-
const itemSlug = slugify(item.title);
|
|
59
|
-
const isDuplicateByTitle = existingPrdSlugs.has(itemSlug) && !processed;
|
|
60
|
-
return {
|
|
61
|
-
...item,
|
|
62
|
-
processed: processed || isDuplicateByTitle,
|
|
63
|
-
prdFile: stateItem?.prdFile,
|
|
64
|
-
};
|
|
65
|
-
});
|
|
66
|
-
// Count processed and pending
|
|
67
|
-
const processedItems = statusItems.filter((item) => item.processed).length;
|
|
68
|
-
const pendingItems = statusItems.filter((item) => !item.processed && !item.checked).length;
|
|
69
|
-
// Determine status
|
|
70
|
-
let status;
|
|
71
|
-
if (pendingItems === 0 && statusItems.length > 0) {
|
|
72
|
-
status = "complete";
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
status = "idle";
|
|
76
|
-
}
|
|
77
|
-
return {
|
|
78
|
-
found: true,
|
|
79
|
-
enabled: true,
|
|
80
|
-
totalItems: items.length,
|
|
81
|
-
processedItems,
|
|
82
|
-
pendingItems,
|
|
83
|
-
status,
|
|
84
|
-
items: statusItems,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Scan existing PRD files and extract their slugs for duplicate detection
|
|
89
|
-
*/
|
|
90
|
-
function scanExistingPrdSlugs(prdDir) {
|
|
91
|
-
const slugs = new Set();
|
|
92
|
-
if (!fs.existsSync(prdDir)) {
|
|
93
|
-
return slugs;
|
|
94
|
-
}
|
|
95
|
-
const files = fs.readdirSync(prdDir);
|
|
96
|
-
for (const file of files) {
|
|
97
|
-
// Skip non-markdown files and special files
|
|
98
|
-
if (!file.endsWith(".md") || file === "NIGHT-WATCH-SUMMARY.md") {
|
|
99
|
-
continue;
|
|
100
|
-
}
|
|
101
|
-
// Extract slug from filename (e.g., "01-feature-name.md" -> "feature-name")
|
|
102
|
-
const match = file.match(/^\d+-(.+)\.md$/);
|
|
103
|
-
if (match) {
|
|
104
|
-
slugs.add(match[1]);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
// Handle files without number prefix
|
|
108
|
-
const slugMatch = file.match(/^(.+)\.md$/);
|
|
109
|
-
if (slugMatch) {
|
|
110
|
-
slugs.add(slugMatch[1]);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return slugs;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Build provider CLI arguments based on provider type
|
|
118
|
-
*/
|
|
119
|
-
function buildProviderArgs(provider, prompt) {
|
|
120
|
-
if (provider === "codex") {
|
|
121
|
-
return ["--quiet", "--yolo", "--prompt", prompt];
|
|
122
|
-
}
|
|
123
|
-
// Default: claude
|
|
124
|
-
return ["-p", prompt, "--dangerously-skip-permissions"];
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Slice a single roadmap item into a PRD using the AI provider
|
|
128
|
-
*
|
|
129
|
-
* @param projectDir - The project directory
|
|
130
|
-
* @param prdDir - The PRD directory
|
|
131
|
-
* @param item - The roadmap item to slice
|
|
132
|
-
* @param config - The Night Watch configuration
|
|
133
|
-
* @returns The slice result
|
|
134
|
-
*/
|
|
135
|
-
export async function sliceRoadmapItem(projectDir, prdDir, item, config) {
|
|
136
|
-
// Check for duplicate by slug
|
|
137
|
-
const itemSlug = slugify(item.title);
|
|
138
|
-
const existingPrdSlugs = scanExistingPrdSlugs(prdDir);
|
|
139
|
-
if (existingPrdSlugs.has(itemSlug)) {
|
|
140
|
-
return {
|
|
141
|
-
sliced: false,
|
|
142
|
-
error: `Duplicate detected: PRD with slug "${itemSlug}" already exists`,
|
|
143
|
-
item,
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
// Compute next PRD number and filename
|
|
147
|
-
const nextNum = getNextPrdNumber(prdDir);
|
|
148
|
-
const padded = String(nextNum).padStart(2, "0");
|
|
149
|
-
const filename = `${padded}-${itemSlug}.md`;
|
|
150
|
-
const filePath = path.join(prdDir, filename);
|
|
151
|
-
// Ensure PRD directory exists
|
|
152
|
-
if (!fs.existsSync(prdDir)) {
|
|
153
|
-
fs.mkdirSync(prdDir, { recursive: true });
|
|
154
|
-
}
|
|
155
|
-
// Build slicer prompt
|
|
156
|
-
const promptVars = createSlicerPromptVars(item.title, item.section, item.description, prdDir, filename);
|
|
157
|
-
const prompt = renderSlicerPrompt(promptVars);
|
|
158
|
-
// Spawn the AI provider
|
|
159
|
-
const providerArgs = buildProviderArgs(config.provider, prompt);
|
|
160
|
-
// Create log file for stdout/stderr
|
|
161
|
-
const logDir = path.join(projectDir, "logs");
|
|
162
|
-
if (!fs.existsSync(logDir)) {
|
|
163
|
-
fs.mkdirSync(logDir, { recursive: true });
|
|
164
|
-
}
|
|
165
|
-
const logFile = path.join(logDir, `slicer-${itemSlug}.log`);
|
|
166
|
-
const logStream = fs.createWriteStream(logFile, { flags: "w" });
|
|
167
|
-
// Handle log stream errors silently (don't fail the slice on logging errors)
|
|
168
|
-
logStream.on("error", () => {
|
|
169
|
-
// Silently ignore log file errors - the main operation is more important
|
|
170
|
-
});
|
|
171
|
-
return new Promise((resolve) => {
|
|
172
|
-
// Merge providerEnv with process.env
|
|
173
|
-
const childEnv = {
|
|
174
|
-
...process.env,
|
|
175
|
-
...config.providerEnv,
|
|
176
|
-
};
|
|
177
|
-
const child = spawn(config.provider, providerArgs, {
|
|
178
|
-
env: childEnv,
|
|
179
|
-
cwd: projectDir,
|
|
180
|
-
stdio: ["inherit", "pipe", "pipe"],
|
|
181
|
-
});
|
|
182
|
-
// Pipe stdout to log file
|
|
183
|
-
child.stdout?.on("data", (data) => {
|
|
184
|
-
logStream.write(data);
|
|
185
|
-
});
|
|
186
|
-
// Pipe stderr to log file
|
|
187
|
-
child.stderr?.on("data", (data) => {
|
|
188
|
-
logStream.write(data);
|
|
189
|
-
});
|
|
190
|
-
// Handle process errors
|
|
191
|
-
child.on("error", (error) => {
|
|
192
|
-
logStream.end();
|
|
193
|
-
resolve({
|
|
194
|
-
sliced: false,
|
|
195
|
-
error: `Failed to spawn provider: ${error.message}`,
|
|
196
|
-
item,
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
// Handle process completion
|
|
200
|
-
child.on("close", (code) => {
|
|
201
|
-
logStream.end();
|
|
202
|
-
if (code !== 0) {
|
|
203
|
-
resolve({
|
|
204
|
-
sliced: false,
|
|
205
|
-
error: `Provider exited with code ${code ?? 1}`,
|
|
206
|
-
item,
|
|
207
|
-
});
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
// Verify output file was created
|
|
211
|
-
if (!fs.existsSync(filePath)) {
|
|
212
|
-
resolve({
|
|
213
|
-
sliced: false,
|
|
214
|
-
error: `Provider did not create expected file: ${filePath}`,
|
|
215
|
-
item,
|
|
216
|
-
});
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
resolve({
|
|
220
|
-
sliced: true,
|
|
221
|
-
file: filename,
|
|
222
|
-
item,
|
|
223
|
-
});
|
|
224
|
-
});
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Slice the next unprocessed roadmap item
|
|
229
|
-
*
|
|
230
|
-
* @param projectDir - The project directory
|
|
231
|
-
* @param config - The Night Watch configuration
|
|
232
|
-
* @returns The slice result
|
|
233
|
-
*/
|
|
234
|
-
export async function sliceNextItem(projectDir, config) {
|
|
235
|
-
// Check if scanner is enabled
|
|
236
|
-
if (!config.roadmapScanner.enabled) {
|
|
237
|
-
return {
|
|
238
|
-
sliced: false,
|
|
239
|
-
error: "Roadmap scanner is disabled",
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
const roadmapPath = path.join(projectDir, config.roadmapScanner.roadmapPath);
|
|
243
|
-
// Check if roadmap file exists
|
|
244
|
-
if (!fs.existsSync(roadmapPath)) {
|
|
245
|
-
return {
|
|
246
|
-
sliced: false,
|
|
247
|
-
error: "ROADMAP.md not found",
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
// Parse roadmap
|
|
251
|
-
const content = fs.readFileSync(roadmapPath, "utf-8");
|
|
252
|
-
const items = parseRoadmap(content);
|
|
253
|
-
if (items.length === 0) {
|
|
254
|
-
return {
|
|
255
|
-
sliced: false,
|
|
256
|
-
error: "No items in roadmap",
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
// Setup PRD directory
|
|
260
|
-
const prdDir = path.join(projectDir, config.prdDir);
|
|
261
|
-
// Load state
|
|
262
|
-
const state = loadRoadmapState(prdDir);
|
|
263
|
-
// Scan existing PRD files for duplicate detection
|
|
264
|
-
const existingPrdSlugs = scanExistingPrdSlugs(prdDir);
|
|
265
|
-
// Find first unprocessed, unchecked, non-duplicate item
|
|
266
|
-
let targetItem;
|
|
267
|
-
for (const item of items) {
|
|
268
|
-
// Skip checked items
|
|
269
|
-
if (item.checked) {
|
|
270
|
-
continue;
|
|
271
|
-
}
|
|
272
|
-
// Skip already processed items
|
|
273
|
-
if (isItemProcessed(state, item.hash)) {
|
|
274
|
-
continue;
|
|
275
|
-
}
|
|
276
|
-
// Skip duplicates by title
|
|
277
|
-
const itemSlug = slugify(item.title);
|
|
278
|
-
if (existingPrdSlugs.has(itemSlug)) {
|
|
279
|
-
continue;
|
|
280
|
-
}
|
|
281
|
-
targetItem = item;
|
|
282
|
-
break;
|
|
283
|
-
}
|
|
284
|
-
if (!targetItem) {
|
|
285
|
-
return {
|
|
286
|
-
sliced: false,
|
|
287
|
-
error: "No pending items to process",
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
// Slice the item
|
|
291
|
-
const result = await sliceRoadmapItem(projectDir, prdDir, targetItem, config);
|
|
292
|
-
// On success, update state
|
|
293
|
-
if (result.sliced && result.file) {
|
|
294
|
-
let updatedState = loadRoadmapState(prdDir);
|
|
295
|
-
const stateItem = {
|
|
296
|
-
title: targetItem.title,
|
|
297
|
-
prdFile: result.file,
|
|
298
|
-
createdAt: new Date().toISOString(),
|
|
299
|
-
};
|
|
300
|
-
updatedState = markItemProcessed(updatedState, targetItem.hash, stateItem);
|
|
301
|
-
saveRoadmapState(prdDir, updatedState);
|
|
302
|
-
}
|
|
303
|
-
return result;
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Scan the roadmap and slice ONE item
|
|
307
|
-
* This is now async and processes only a single item per call
|
|
308
|
-
*
|
|
309
|
-
* @param projectDir - The project directory
|
|
310
|
-
* @param config - The Night Watch configuration
|
|
311
|
-
* @returns The scan result with created, skipped, and error lists
|
|
312
|
-
*/
|
|
313
|
-
export async function scanRoadmap(projectDir, config) {
|
|
314
|
-
const result = {
|
|
315
|
-
created: [],
|
|
316
|
-
skipped: [],
|
|
317
|
-
errors: [],
|
|
318
|
-
};
|
|
319
|
-
// Slice just one item
|
|
320
|
-
const sliceResult = await sliceNextItem(projectDir, config);
|
|
321
|
-
if (sliceResult.sliced && sliceResult.file) {
|
|
322
|
-
result.created.push(sliceResult.file);
|
|
323
|
-
}
|
|
324
|
-
else if (sliceResult.item) {
|
|
325
|
-
// Item was found but not sliced
|
|
326
|
-
if (sliceResult.error?.includes("checked")) {
|
|
327
|
-
result.skipped.push(`${sliceResult.item.title} (checked)`);
|
|
328
|
-
}
|
|
329
|
-
else if (sliceResult.error?.includes("processed")) {
|
|
330
|
-
result.skipped.push(`${sliceResult.item.title} (processed)`);
|
|
331
|
-
}
|
|
332
|
-
else if (sliceResult.error?.includes("duplicate")) {
|
|
333
|
-
result.skipped.push(`${sliceResult.item.title} (duplicate)`);
|
|
334
|
-
}
|
|
335
|
-
else if (sliceResult.error) {
|
|
336
|
-
result.errors.push(`${sliceResult.item.title}: ${sliceResult.error}`);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
// If no item was found (all done or no items), return empty result
|
|
340
|
-
return result;
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Check if there are new (unprocessed) items in the roadmap
|
|
344
|
-
*/
|
|
345
|
-
export function hasNewItems(projectDir, config) {
|
|
346
|
-
const status = getRoadmapStatus(projectDir, config);
|
|
347
|
-
return status.pendingItems > 0;
|
|
348
|
-
}
|
|
349
|
-
//# sourceMappingURL=roadmap-scanner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"roadmap-scanner.js","sourceRoot":"","sources":["../../../src/utils/roadmap-scanner.ts"],"names":[],"mappings":"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"}
|