@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,168 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Crontab utility functions for Night Watch CLI
|
|
3
|
-
* Provides safe read/write operations for user crontab
|
|
4
|
-
*/
|
|
5
|
-
import { execSync } from "child_process";
|
|
6
|
-
import * as fs from "fs";
|
|
7
|
-
import * as os from "os";
|
|
8
|
-
import * as path from "path";
|
|
9
|
-
/**
|
|
10
|
-
* Marker prefix used to identify Night Watch entries
|
|
11
|
-
*/
|
|
12
|
-
export const CRONTAB_MARKER_PREFIX = "# night-watch-cli:";
|
|
13
|
-
/**
|
|
14
|
-
* Check whether a crontab line belongs to the given project directory.
|
|
15
|
-
* Supports unquoted, single-quoted, and double-quoted cd paths.
|
|
16
|
-
*/
|
|
17
|
-
function isEntryForProject(line, projectDir) {
|
|
18
|
-
if (!line.includes(CRONTAB_MARKER_PREFIX)) {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
const normalized = projectDir.replace(/\/+$/, "");
|
|
22
|
-
const candidates = [
|
|
23
|
-
`cd ${normalized}`,
|
|
24
|
-
`cd '${normalized}'`,
|
|
25
|
-
`cd "${normalized}"`,
|
|
26
|
-
];
|
|
27
|
-
return candidates.some((candidate) => line.includes(candidate));
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Read current crontab entries
|
|
31
|
-
* Returns empty array if user has no crontab
|
|
32
|
-
*/
|
|
33
|
-
export function readCrontab() {
|
|
34
|
-
try {
|
|
35
|
-
const output = execSync("crontab -l 2>/dev/null", {
|
|
36
|
-
encoding: "utf-8",
|
|
37
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
38
|
-
});
|
|
39
|
-
return output.trim().split("\n").filter((line) => line.length > 0);
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
// crontab -l returns error if no crontab exists
|
|
43
|
-
// This is expected and should return empty array
|
|
44
|
-
return [];
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Write crontab entries
|
|
49
|
-
* @param lines - Array of crontab lines to write
|
|
50
|
-
* @throws Error if crontab write fails
|
|
51
|
-
*/
|
|
52
|
-
export function writeCrontab(lines) {
|
|
53
|
-
if (process.env.NW_EXECUTION_CONTEXT === "agent") {
|
|
54
|
-
throw new Error("Crontab writes are blocked during agent execution (NW_EXECUTION_CONTEXT=agent). " +
|
|
55
|
-
"This prevents the running agent from accidentally modifying its own scheduling.");
|
|
56
|
-
}
|
|
57
|
-
const content = lines.join("\n");
|
|
58
|
-
// Create a backup first
|
|
59
|
-
try {
|
|
60
|
-
const currentCrontab = readCrontab();
|
|
61
|
-
if (currentCrontab.length > 0) {
|
|
62
|
-
execSync(`crontab -l > /tmp/night-watch-crontab-backup-$(date +%s).txt`, {
|
|
63
|
-
encoding: "utf-8",
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
// Ignore backup errors
|
|
69
|
-
}
|
|
70
|
-
// Write new crontab via temp file to avoid shell line length limits
|
|
71
|
-
const tmpFile = path.join(os.tmpdir(), `night-watch-crontab-${Date.now()}.txt`);
|
|
72
|
-
try {
|
|
73
|
-
fs.writeFileSync(tmpFile, content + "\n");
|
|
74
|
-
execSync(`crontab ${tmpFile}`, { encoding: "utf-8" });
|
|
75
|
-
}
|
|
76
|
-
catch (error) {
|
|
77
|
-
throw new Error(`Failed to write crontab: ${error instanceof Error ? error.message : String(error)}`);
|
|
78
|
-
}
|
|
79
|
-
finally {
|
|
80
|
-
try {
|
|
81
|
-
fs.unlinkSync(tmpFile);
|
|
82
|
-
}
|
|
83
|
-
catch { /* ignore cleanup errors */ }
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Generate a marker comment for identifying entries
|
|
88
|
-
* @param projectName - Name of the project
|
|
89
|
-
*/
|
|
90
|
-
export function generateMarker(projectName) {
|
|
91
|
-
return `${CRONTAB_MARKER_PREFIX} ${projectName}`;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Add a crontab entry if it doesn't already exist
|
|
95
|
-
* @param entry - The crontab entry to add
|
|
96
|
-
* @param marker - The marker to use for deduplication
|
|
97
|
-
* @returns true if entry was added, false if it already existed
|
|
98
|
-
*/
|
|
99
|
-
export function addEntry(entry, marker) {
|
|
100
|
-
// Check if entry already exists
|
|
101
|
-
if (hasEntry(marker)) {
|
|
102
|
-
return false;
|
|
103
|
-
}
|
|
104
|
-
const lines = readCrontab();
|
|
105
|
-
// Add the entry with marker comment on the same line
|
|
106
|
-
const entryWithMarker = entry.endsWith(marker)
|
|
107
|
-
? entry
|
|
108
|
-
: `${entry} ${marker}`;
|
|
109
|
-
lines.push(entryWithMarker);
|
|
110
|
-
writeCrontab(lines);
|
|
111
|
-
return true;
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Remove all crontab entries containing the marker
|
|
115
|
-
* @param marker - The marker to search for
|
|
116
|
-
* @returns Number of entries removed
|
|
117
|
-
*/
|
|
118
|
-
export function removeEntries(marker) {
|
|
119
|
-
const lines = readCrontab();
|
|
120
|
-
const filtered = lines.filter((line) => !line.includes(marker));
|
|
121
|
-
const removedCount = lines.length - filtered.length;
|
|
122
|
-
if (removedCount > 0) {
|
|
123
|
-
writeCrontab(filtered);
|
|
124
|
-
}
|
|
125
|
-
return removedCount;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Check if an entry with the marker exists
|
|
129
|
-
* @param marker - The marker to search for
|
|
130
|
-
* @returns true if entry exists
|
|
131
|
-
*/
|
|
132
|
-
export function hasEntry(marker) {
|
|
133
|
-
const lines = readCrontab();
|
|
134
|
-
return lines.some((line) => line.includes(marker));
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Get all entries containing the marker
|
|
138
|
-
* @param marker - The marker to search for
|
|
139
|
-
* @returns Array of matching entries
|
|
140
|
-
*/
|
|
141
|
-
export function getEntries(marker) {
|
|
142
|
-
const lines = readCrontab();
|
|
143
|
-
return lines.filter((line) => line.includes(marker));
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Get all Night Watch entries for a project directory (independent of marker text)
|
|
147
|
-
* @param projectDir - Absolute project directory
|
|
148
|
-
*/
|
|
149
|
-
export function getProjectEntries(projectDir) {
|
|
150
|
-
const lines = readCrontab();
|
|
151
|
-
return lines.filter((line) => isEntryForProject(line, projectDir));
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Remove Night Watch entries for a project directory and/or marker
|
|
155
|
-
* @param projectDir - Absolute project directory
|
|
156
|
-
* @param marker - Optional marker for backward compatibility
|
|
157
|
-
* @returns Number of entries removed
|
|
158
|
-
*/
|
|
159
|
-
export function removeEntriesForProject(projectDir, marker) {
|
|
160
|
-
const lines = readCrontab();
|
|
161
|
-
const filtered = lines.filter((line) => !isEntryForProject(line, projectDir) && !(marker && line.includes(marker)));
|
|
162
|
-
const removedCount = lines.length - filtered.length;
|
|
163
|
-
if (removedCount > 0) {
|
|
164
|
-
writeCrontab(filtered);
|
|
165
|
-
}
|
|
166
|
-
return removedCount;
|
|
167
|
-
}
|
|
168
|
-
//# sourceMappingURL=crontab.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"crontab.js","sourceRoot":"","sources":["../../../src/utils/crontab.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Execution history ledger for Night Watch CLI
|
|
3
|
-
* Stores PRD execution records in the SQLite repository layer.
|
|
4
|
-
* Decoupled from PRD file paths — keyed by project directory + PRD filename.
|
|
5
|
-
*/
|
|
6
|
-
import { resetRepositories } from "../storage/repositories/index.js";
|
|
7
|
-
import { closeDb } from "../storage/sqlite/client.js";
|
|
8
|
-
export type ExecutionOutcome = "success" | "failure" | "timeout" | "rate_limited";
|
|
9
|
-
export interface IExecutionRecord {
|
|
10
|
-
timestamp: number;
|
|
11
|
-
outcome: ExecutionOutcome;
|
|
12
|
-
exitCode: number;
|
|
13
|
-
attempt: number;
|
|
14
|
-
}
|
|
15
|
-
interface IPrdHistory {
|
|
16
|
-
records: IExecutionRecord[];
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Full history structure: projectDir -> prdFile -> records
|
|
20
|
-
*/
|
|
21
|
-
export type IExecutionHistory = Record<string, Record<string, IPrdHistory>>;
|
|
22
|
-
/**
|
|
23
|
-
* Get the path to the history file.
|
|
24
|
-
* Kept for backward compatibility.
|
|
25
|
-
*/
|
|
26
|
-
export declare function getHistoryPath(): string;
|
|
27
|
-
/**
|
|
28
|
-
* Load execution history from the SQLite repository.
|
|
29
|
-
* Returns the full IExecutionHistory structure reconstructed from the DB.
|
|
30
|
-
*/
|
|
31
|
-
export declare function loadHistory(): IExecutionHistory;
|
|
32
|
-
/**
|
|
33
|
-
* Save execution history to the repository.
|
|
34
|
-
* Full replace: clears all existing records then inserts all records from the
|
|
35
|
-
* provided IExecutionHistory structure in a single transaction.
|
|
36
|
-
*/
|
|
37
|
-
export declare function saveHistory(history: IExecutionHistory): void;
|
|
38
|
-
/**
|
|
39
|
-
* Record a PRD execution result.
|
|
40
|
-
* Appends a record and trims to MAX_HISTORY_RECORDS_PER_PRD.
|
|
41
|
-
*/
|
|
42
|
-
export declare function recordExecution(projectDir: string, prdFile: string, outcome: ExecutionOutcome, exitCode: number, attempt?: number): void;
|
|
43
|
-
/**
|
|
44
|
-
* Get the most recent execution record for a PRD.
|
|
45
|
-
* Returns null if no history exists.
|
|
46
|
-
*/
|
|
47
|
-
export declare function getLastExecution(projectDir: string, prdFile: string): IExecutionRecord | null;
|
|
48
|
-
/**
|
|
49
|
-
* Check if a PRD is in cooldown after a recent non-success execution.
|
|
50
|
-
* Returns true if the PRD should be skipped.
|
|
51
|
-
*/
|
|
52
|
-
export declare function isInCooldown(projectDir: string, prdFile: string, cooldownPeriod: number): boolean;
|
|
53
|
-
export { closeDb, resetRepositories };
|
|
54
|
-
//# sourceMappingURL=execution-history.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"execution-history.d.ts","sourceRoot":"","sources":["../../../src/utils/execution-history.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,EAAmB,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,cAAc,CAAC;AAElF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,WAAW;IACnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AAE5E;;;GAGG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAIvC;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,iBAAiB,CAG/C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAG5D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,MAAU,GAClB,IAAI,CAaN;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,gBAAgB,GAAG,IAAI,CAKzB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,GACrB,OAAO,CAYT;AAED,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Execution history ledger for Night Watch CLI
|
|
3
|
-
* Stores PRD execution records in the SQLite repository layer.
|
|
4
|
-
* Decoupled from PRD file paths — keyed by project directory + PRD filename.
|
|
5
|
-
*/
|
|
6
|
-
import * as os from "os";
|
|
7
|
-
import * as path from "path";
|
|
8
|
-
import { GLOBAL_CONFIG_DIR, HISTORY_FILE_NAME, MAX_HISTORY_RECORDS_PER_PRD, } from "../constants.js";
|
|
9
|
-
import { getRepositories, resetRepositories } from "../storage/repositories/index.js";
|
|
10
|
-
import { closeDb } from "../storage/sqlite/client.js";
|
|
11
|
-
/**
|
|
12
|
-
* Get the path to the history file.
|
|
13
|
-
* Kept for backward compatibility.
|
|
14
|
-
*/
|
|
15
|
-
export function getHistoryPath() {
|
|
16
|
-
const base = process.env.NIGHT_WATCH_HOME || path.join(os.homedir(), GLOBAL_CONFIG_DIR);
|
|
17
|
-
return path.join(base, HISTORY_FILE_NAME);
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Load execution history from the SQLite repository.
|
|
21
|
-
* Returns the full IExecutionHistory structure reconstructed from the DB.
|
|
22
|
-
*/
|
|
23
|
-
export function loadHistory() {
|
|
24
|
-
const { executionHistory } = getRepositories();
|
|
25
|
-
return executionHistory.getAllHistory();
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Save execution history to the repository.
|
|
29
|
-
* Full replace: clears all existing records then inserts all records from the
|
|
30
|
-
* provided IExecutionHistory structure in a single transaction.
|
|
31
|
-
*/
|
|
32
|
-
export function saveHistory(history) {
|
|
33
|
-
const { executionHistory } = getRepositories();
|
|
34
|
-
executionHistory.replaceAll(history);
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Record a PRD execution result.
|
|
38
|
-
* Appends a record and trims to MAX_HISTORY_RECORDS_PER_PRD.
|
|
39
|
-
*/
|
|
40
|
-
export function recordExecution(projectDir, prdFile, outcome, exitCode, attempt = 1) {
|
|
41
|
-
const resolved = path.resolve(projectDir);
|
|
42
|
-
const { executionHistory } = getRepositories();
|
|
43
|
-
const record = {
|
|
44
|
-
timestamp: Math.floor(Date.now() / 1000),
|
|
45
|
-
outcome,
|
|
46
|
-
exitCode,
|
|
47
|
-
attempt,
|
|
48
|
-
};
|
|
49
|
-
executionHistory.addRecord(resolved, prdFile, record);
|
|
50
|
-
executionHistory.trimRecords(resolved, prdFile, MAX_HISTORY_RECORDS_PER_PRD);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Get the most recent execution record for a PRD.
|
|
54
|
-
* Returns null if no history exists.
|
|
55
|
-
*/
|
|
56
|
-
export function getLastExecution(projectDir, prdFile) {
|
|
57
|
-
const resolved = path.resolve(projectDir);
|
|
58
|
-
const { executionHistory } = getRepositories();
|
|
59
|
-
const records = executionHistory.getRecords(resolved, prdFile);
|
|
60
|
-
return records.length > 0 ? records[0] : null;
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Check if a PRD is in cooldown after a recent non-success execution.
|
|
64
|
-
* Returns true if the PRD should be skipped.
|
|
65
|
-
*/
|
|
66
|
-
export function isInCooldown(projectDir, prdFile, cooldownPeriod) {
|
|
67
|
-
const last = getLastExecution(projectDir, prdFile);
|
|
68
|
-
if (!last) {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
// Success records don't trigger cooldown
|
|
72
|
-
if (last.outcome === "success") {
|
|
73
|
-
return false;
|
|
74
|
-
}
|
|
75
|
-
const now = Math.floor(Date.now() / 1000);
|
|
76
|
-
const age = now - last.timestamp;
|
|
77
|
-
return age < cooldownPeriod;
|
|
78
|
-
}
|
|
79
|
-
export { closeDb, resetRepositories };
|
|
80
|
-
//# sourceMappingURL=execution-history.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"execution-history.js","sourceRoot":"","sources":["../../../src/utils/execution-history.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GitHub utilities for Night Watch CLI
|
|
3
|
-
* Fetches PR details using the gh CLI
|
|
4
|
-
*/
|
|
5
|
-
export interface IPrDetails {
|
|
6
|
-
number: number;
|
|
7
|
-
title: string;
|
|
8
|
-
url: string;
|
|
9
|
-
body: string;
|
|
10
|
-
additions: number;
|
|
11
|
-
deletions: number;
|
|
12
|
-
changedFiles: number;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Fetch PR details by exact branch name selector.
|
|
16
|
-
* Returns null on any failure.
|
|
17
|
-
*/
|
|
18
|
-
export declare function fetchPrDetailsForBranch(branchName: string, cwd: string): IPrDetails | null;
|
|
19
|
-
/**
|
|
20
|
-
* Fetch PR details by PR number selector.
|
|
21
|
-
* Returns null on any failure.
|
|
22
|
-
*/
|
|
23
|
-
export declare function fetchPrDetailsByNumber(prNumber: number, cwd: string): IPrDetails | null;
|
|
24
|
-
/**
|
|
25
|
-
* Fetch PR details for the most recently created PR matching a branch prefix.
|
|
26
|
-
* Returns null if gh is unavailable, not authenticated, or no PR found.
|
|
27
|
-
*/
|
|
28
|
-
export declare function fetchPrDetails(branchPrefix: string, cwd: string): IPrDetails | null;
|
|
29
|
-
/**
|
|
30
|
-
* Fetch PR details for the most recently updated PR matching any of the given branch patterns.
|
|
31
|
-
* Used by the review command to find the PR that was just reviewed.
|
|
32
|
-
* Returns null on any failure.
|
|
33
|
-
*/
|
|
34
|
-
export declare function fetchReviewedPrDetails(branchPatterns: string[], cwd: string): IPrDetails | null;
|
|
35
|
-
/**
|
|
36
|
-
* Extract a summary from a PR body.
|
|
37
|
-
* Takes the first meaningful paragraph, strips markdown headers, truncates to maxLength.
|
|
38
|
-
*/
|
|
39
|
-
export declare function extractSummary(body: string, maxLength?: number): string;
|
|
40
|
-
//# sourceMappingURL=github.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/utils/github.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAmCD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAE1F;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAEvF;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAyBnF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAyB/F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAgC5E"}
|
package/dist/src/utils/github.js
DELETED
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GitHub utilities for Night Watch CLI
|
|
3
|
-
* Fetches PR details using the gh CLI
|
|
4
|
-
*/
|
|
5
|
-
import { execFileSync } from "child_process";
|
|
6
|
-
function parsePrDetails(raw) {
|
|
7
|
-
try {
|
|
8
|
-
const details = JSON.parse(raw);
|
|
9
|
-
if (typeof details.number !== "number") {
|
|
10
|
-
return null;
|
|
11
|
-
}
|
|
12
|
-
return {
|
|
13
|
-
number: details.number,
|
|
14
|
-
title: details.title ?? "",
|
|
15
|
-
url: details.url ?? "",
|
|
16
|
-
body: details.body ?? "",
|
|
17
|
-
additions: details.additions ?? 0,
|
|
18
|
-
deletions: details.deletions ?? 0,
|
|
19
|
-
changedFiles: details.changedFiles ?? 0,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
catch {
|
|
23
|
-
return null;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
function fetchPrBySelector(selector, cwd) {
|
|
27
|
-
try {
|
|
28
|
-
const output = execFileSync("gh", ["pr", "view", selector, "--json", "number,title,url,body,additions,deletions,changedFiles"], { cwd, encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
29
|
-
return parsePrDetails(output);
|
|
30
|
-
}
|
|
31
|
-
catch {
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Fetch PR details by exact branch name selector.
|
|
37
|
-
* Returns null on any failure.
|
|
38
|
-
*/
|
|
39
|
-
export function fetchPrDetailsForBranch(branchName, cwd) {
|
|
40
|
-
return fetchPrBySelector(branchName, cwd);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Fetch PR details by PR number selector.
|
|
44
|
-
* Returns null on any failure.
|
|
45
|
-
*/
|
|
46
|
-
export function fetchPrDetailsByNumber(prNumber, cwd) {
|
|
47
|
-
return fetchPrBySelector(String(prNumber), cwd);
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Fetch PR details for the most recently created PR matching a branch prefix.
|
|
51
|
-
* Returns null if gh is unavailable, not authenticated, or no PR found.
|
|
52
|
-
*/
|
|
53
|
-
export function fetchPrDetails(branchPrefix, cwd) {
|
|
54
|
-
try {
|
|
55
|
-
// Find the most recently created open PR on a matching branch
|
|
56
|
-
const listOutput = execFileSync("gh", ["pr", "list", "--state", "open", "--json", "number,headRefName", "--limit", "20"], { cwd, encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
57
|
-
const prs = JSON.parse(listOutput);
|
|
58
|
-
// Filter PRs matching the branch prefix
|
|
59
|
-
const matching = prs.filter((pr) => pr.headRefName.startsWith(branchPrefix + "/"));
|
|
60
|
-
if (matching.length === 0) {
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
// Use the first match (most recent)
|
|
64
|
-
const prNumber = matching[0].number;
|
|
65
|
-
return fetchPrDetailsByNumber(prNumber, cwd);
|
|
66
|
-
}
|
|
67
|
-
catch {
|
|
68
|
-
// gh CLI not available, not authenticated, or command failed
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Fetch PR details for the most recently updated PR matching any of the given branch patterns.
|
|
74
|
-
* Used by the review command to find the PR that was just reviewed.
|
|
75
|
-
* Returns null on any failure.
|
|
76
|
-
*/
|
|
77
|
-
export function fetchReviewedPrDetails(branchPatterns, cwd) {
|
|
78
|
-
try {
|
|
79
|
-
const listOutput = execFileSync("gh", ["pr", "list", "--state", "open", "--json", "number,headRefName", "--limit", "20"], { cwd, encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] });
|
|
80
|
-
const prs = JSON.parse(listOutput);
|
|
81
|
-
// Filter PRs matching any branch pattern
|
|
82
|
-
const matching = prs.filter((pr) => branchPatterns.some((pattern) => pr.headRefName.startsWith(pattern)));
|
|
83
|
-
if (matching.length === 0) {
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
// Use the first match
|
|
87
|
-
const prNumber = matching[0].number;
|
|
88
|
-
return fetchPrDetailsByNumber(prNumber, cwd);
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
return null;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Extract a summary from a PR body.
|
|
96
|
-
* Takes the first meaningful paragraph, strips markdown headers, truncates to maxLength.
|
|
97
|
-
*/
|
|
98
|
-
export function extractSummary(body, maxLength = 500) {
|
|
99
|
-
if (!body || body.trim().length === 0) {
|
|
100
|
-
return "";
|
|
101
|
-
}
|
|
102
|
-
// Split into lines and filter out markdown headers and empty lines
|
|
103
|
-
const lines = body.split("\n");
|
|
104
|
-
const contentLines = [];
|
|
105
|
-
for (const line of lines) {
|
|
106
|
-
const trimmed = line.trim();
|
|
107
|
-
// Skip empty lines, markdown headers, and horizontal rules
|
|
108
|
-
if (trimmed === "" || trimmed.startsWith("#") || trimmed === "---" || trimmed === "***") {
|
|
109
|
-
// If we already have content, a blank line means end of first paragraph
|
|
110
|
-
if (contentLines.length > 0 && trimmed === "") {
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
continue;
|
|
114
|
-
}
|
|
115
|
-
contentLines.push(trimmed);
|
|
116
|
-
}
|
|
117
|
-
const summary = contentLines.join("\n");
|
|
118
|
-
if (summary.length <= maxLength) {
|
|
119
|
-
return summary;
|
|
120
|
-
}
|
|
121
|
-
// Truncate at word boundary
|
|
122
|
-
const truncated = summary.slice(0, maxLength);
|
|
123
|
-
const lastSpace = truncated.lastIndexOf(" ");
|
|
124
|
-
return (lastSpace > 0 ? truncated.slice(0, lastSpace) : truncated) + "...";
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=github.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/utils/github.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Notification utilities for Night Watch CLI
|
|
3
|
-
* Sends webhook notifications to Slack, Discord, and Telegram
|
|
4
|
-
*/
|
|
5
|
-
import { INightWatchConfig, IWebhookConfig, NotificationEvent } from "../types.js";
|
|
6
|
-
export interface INotificationContext {
|
|
7
|
-
event: NotificationEvent;
|
|
8
|
-
projectName: string;
|
|
9
|
-
prdName?: string;
|
|
10
|
-
branchName?: string;
|
|
11
|
-
prNumber?: number;
|
|
12
|
-
exitCode: number;
|
|
13
|
-
duration?: number;
|
|
14
|
-
provider: string;
|
|
15
|
-
prUrl?: string;
|
|
16
|
-
prTitle?: string;
|
|
17
|
-
prBody?: string;
|
|
18
|
-
filesChanged?: number;
|
|
19
|
-
additions?: number;
|
|
20
|
-
deletions?: number;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Get the emoji for a notification event
|
|
24
|
-
*/
|
|
25
|
-
export declare function getEventEmoji(event: NotificationEvent): string;
|
|
26
|
-
/**
|
|
27
|
-
* Get a human-readable title for a notification event
|
|
28
|
-
*/
|
|
29
|
-
export declare function getEventTitle(event: NotificationEvent): string;
|
|
30
|
-
/**
|
|
31
|
-
* Get the Discord embed color for a notification event
|
|
32
|
-
*/
|
|
33
|
-
export declare function getEventColor(event: NotificationEvent): number;
|
|
34
|
-
/**
|
|
35
|
-
* Build a description string from notification context
|
|
36
|
-
*/
|
|
37
|
-
export declare function buildDescription(ctx: INotificationContext): string;
|
|
38
|
-
/**
|
|
39
|
-
* Format a notification payload for Slack incoming webhooks
|
|
40
|
-
*/
|
|
41
|
-
export declare function formatSlackPayload(ctx: INotificationContext): object;
|
|
42
|
-
/**
|
|
43
|
-
* Format a notification payload for Discord webhooks
|
|
44
|
-
*/
|
|
45
|
-
export declare function formatDiscordPayload(ctx: INotificationContext): object;
|
|
46
|
-
/**
|
|
47
|
-
* Build a structured Telegram message when PR details are available.
|
|
48
|
-
* Falls back to the basic format when they are not.
|
|
49
|
-
*/
|
|
50
|
-
export declare function formatTelegramPayload(ctx: INotificationContext): {
|
|
51
|
-
text: string;
|
|
52
|
-
parse_mode: string;
|
|
53
|
-
};
|
|
54
|
-
export declare function buildNotificationText(ctx: INotificationContext): string;
|
|
55
|
-
/**
|
|
56
|
-
* Send a notification to a single webhook endpoint
|
|
57
|
-
* Silently catches errors — never throws
|
|
58
|
-
*/
|
|
59
|
-
export declare function sendWebhook(webhook: IWebhookConfig, ctx: INotificationContext): Promise<void>;
|
|
60
|
-
/**
|
|
61
|
-
* Send notifications to all configured webhooks and (if configured) to Slack via Bot API.
|
|
62
|
-
*/
|
|
63
|
-
export declare function sendNotifications(config: INightWatchConfig, ctx: INotificationContext): Promise<void>;
|
|
64
|
-
//# sourceMappingURL=notify.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../../src/utils/notify.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAmB,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAQpG,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,iBAAiB,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IAEjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAmB9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAmB9D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAmB9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,CAkBlE;AASD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,CAgCpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,CAetE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,oBAAoB,GAAG;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAqDA;AAiBD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,oBAAoB,GAAG,MAAM,CAcvE;AA2CD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2CnG;AAqBD;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,iBAAiB,EACzB,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,IAAI,CAAC,CAgEf"}
|