night-orch 0.1.0
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/README.md +138 -0
- package/dist/cli/commands/cleanup.d.ts +14 -0
- package/dist/cli/commands/cleanup.d.ts.map +1 -0
- package/dist/cli/commands/cleanup.js +62 -0
- package/dist/cli/commands/cleanup.js.map +1 -0
- package/dist/cli/commands/continue.d.ts +9 -0
- package/dist/cli/commands/continue.d.ts.map +1 -0
- package/dist/cli/commands/continue.js +70 -0
- package/dist/cli/commands/continue.js.map +1 -0
- package/dist/cli/commands/cost-override.d.ts +11 -0
- package/dist/cli/commands/cost-override.d.ts.map +1 -0
- package/dist/cli/commands/cost-override.js +76 -0
- package/dist/cli/commands/cost-override.js.map +1 -0
- package/dist/cli/commands/daily-cost-override.d.ts +11 -0
- package/dist/cli/commands/daily-cost-override.d.ts.map +1 -0
- package/dist/cli/commands/daily-cost-override.js +71 -0
- package/dist/cli/commands/daily-cost-override.js.map +1 -0
- package/dist/cli/commands/delete-entry.d.ts +12 -0
- package/dist/cli/commands/delete-entry.d.ts.map +1 -0
- package/dist/cli/commands/delete-entry.js +68 -0
- package/dist/cli/commands/delete-entry.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +9 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +227 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +73 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/labels-init.d.ts +9 -0
- package/dist/cli/commands/labels-init.d.ts.map +1 -0
- package/dist/cli/commands/labels-init.js +52 -0
- package/dist/cli/commands/labels-init.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +9 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +52 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/monitoring-init.d.ts +2 -0
- package/dist/cli/commands/monitoring-init.d.ts.map +1 -0
- package/dist/cli/commands/monitoring-init.js +43 -0
- package/dist/cli/commands/monitoring-init.js.map +1 -0
- package/dist/cli/commands/notify-test.d.ts +9 -0
- package/dist/cli/commands/notify-test.d.ts.map +1 -0
- package/dist/cli/commands/notify-test.js +41 -0
- package/dist/cli/commands/notify-test.js.map +1 -0
- package/dist/cli/commands/rebase.d.ts +9 -0
- package/dist/cli/commands/rebase.d.ts.map +1 -0
- package/dist/cli/commands/rebase.js +63 -0
- package/dist/cli/commands/rebase.js.map +1 -0
- package/dist/cli/commands/retry.d.ts +14 -0
- package/dist/cli/commands/retry.d.ts.map +1 -0
- package/dist/cli/commands/retry.js +52 -0
- package/dist/cli/commands/retry.js.map +1 -0
- package/dist/cli/commands/run-once.d.ts +9 -0
- package/dist/cli/commands/run-once.d.ts.map +1 -0
- package/dist/cli/commands/run-once.js +62 -0
- package/dist/cli/commands/run-once.js.map +1 -0
- package/dist/cli/commands/run.d.ts +9 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +142 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +14 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +51 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/settings.d.ts +10 -0
- package/dist/cli/commands/settings.d.ts.map +1 -0
- package/dist/cli/commands/settings.js +100 -0
- package/dist/cli/commands/settings.js.map +1 -0
- package/dist/cli/commands/status.d.ts +8 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +153 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +9 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +60 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/update.d.ts +4 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +29 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +9 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +56 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/commands/web.d.ts +16 -0
- package/dist/cli/commands/web.d.ts.map +1 -0
- package/dist/cli/commands/web.js +206 -0
- package/dist/cli/commands/web.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +213 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init/detector.d.ts +7 -0
- package/dist/cli/init/detector.d.ts.map +1 -0
- package/dist/cli/init/detector.js +40 -0
- package/dist/cli/init/detector.js.map +1 -0
- package/dist/cli/init/templates.d.ts +10 -0
- package/dist/cli/init/templates.d.ts.map +1 -0
- package/dist/cli/init/templates.js +30 -0
- package/dist/cli/init/templates.js.map +1 -0
- package/dist/cli/tui/actions-bar.d.ts +21 -0
- package/dist/cli/tui/actions-bar.d.ts.map +1 -0
- package/dist/cli/tui/actions-bar.js +91 -0
- package/dist/cli/tui/actions-bar.js.map +1 -0
- package/dist/cli/tui/active-runs.d.ts +9 -0
- package/dist/cli/tui/active-runs.d.ts.map +1 -0
- package/dist/cli/tui/active-runs.js +23 -0
- package/dist/cli/tui/active-runs.js.map +1 -0
- package/dist/cli/tui/agent-stream.d.ts +10 -0
- package/dist/cli/tui/agent-stream.d.ts.map +1 -0
- package/dist/cli/tui/agent-stream.js +83 -0
- package/dist/cli/tui/agent-stream.js.map +1 -0
- package/dist/cli/tui/app.d.ts +40 -0
- package/dist/cli/tui/app.d.ts.map +1 -0
- package/dist/cli/tui/app.js +995 -0
- package/dist/cli/tui/app.js.map +1 -0
- package/dist/cli/tui/constants.d.ts +15 -0
- package/dist/cli/tui/constants.d.ts.map +1 -0
- package/dist/cli/tui/constants.js +102 -0
- package/dist/cli/tui/constants.js.map +1 -0
- package/dist/cli/tui/cost-bar.d.ts +10 -0
- package/dist/cli/tui/cost-bar.d.ts.map +1 -0
- package/dist/cli/tui/cost-bar.js +17 -0
- package/dist/cli/tui/cost-bar.js.map +1 -0
- package/dist/cli/tui/data.d.ts +56 -0
- package/dist/cli/tui/data.d.ts.map +1 -0
- package/dist/cli/tui/data.js +296 -0
- package/dist/cli/tui/data.js.map +1 -0
- package/dist/cli/tui/format.d.ts +11 -0
- package/dist/cli/tui/format.d.ts.map +1 -0
- package/dist/cli/tui/format.js +83 -0
- package/dist/cli/tui/format.js.map +1 -0
- package/dist/cli/tui/header.d.ts +16 -0
- package/dist/cli/tui/header.d.ts.map +1 -0
- package/dist/cli/tui/header.js +22 -0
- package/dist/cli/tui/header.js.map +1 -0
- package/dist/cli/tui/logs-view.d.ts +19 -0
- package/dist/cli/tui/logs-view.d.ts.map +1 -0
- package/dist/cli/tui/logs-view.js +63 -0
- package/dist/cli/tui/logs-view.js.map +1 -0
- package/dist/cli/tui/merge-queue-panel.d.ts +9 -0
- package/dist/cli/tui/merge-queue-panel.d.ts.map +1 -0
- package/dist/cli/tui/merge-queue-panel.js +14 -0
- package/dist/cli/tui/merge-queue-panel.js.map +1 -0
- package/dist/cli/tui/projects-view.d.ts +25 -0
- package/dist/cli/tui/projects-view.d.ts.map +1 -0
- package/dist/cli/tui/projects-view.js +145 -0
- package/dist/cli/tui/projects-view.js.map +1 -0
- package/dist/cli/tui/recent-runs.d.ts +9 -0
- package/dist/cli/tui/recent-runs.d.ts.map +1 -0
- package/dist/cli/tui/recent-runs.js +20 -0
- package/dist/cli/tui/recent-runs.js.map +1 -0
- package/dist/cli/tui/runs-view.d.ts +22 -0
- package/dist/cli/tui/runs-view.d.ts.map +1 -0
- package/dist/cli/tui/runs-view.js +48 -0
- package/dist/cli/tui/runs-view.js.map +1 -0
- package/dist/cli/tui/settings-view.d.ts +9 -0
- package/dist/cli/tui/settings-view.d.ts.map +1 -0
- package/dist/cli/tui/settings-view.js +21 -0
- package/dist/cli/tui/settings-view.js.map +1 -0
- package/dist/cli/tui/stats-view.d.ts +11 -0
- package/dist/cli/tui/stats-view.d.ts.map +1 -0
- package/dist/cli/tui/stats-view.js +48 -0
- package/dist/cli/tui/stats-view.js.map +1 -0
- package/dist/cli/tui/titles.d.ts +36 -0
- package/dist/cli/tui/titles.d.ts.map +1 -0
- package/dist/cli/tui/titles.js +50 -0
- package/dist/cli/tui/titles.js.map +1 -0
- package/dist/cli/tui/types.d.ts +10 -0
- package/dist/cli/tui/types.d.ts.map +1 -0
- package/dist/cli/tui/types.js +2 -0
- package/dist/cli/tui/types.js.map +1 -0
- package/dist/cli/tui/view-model.d.ts +20 -0
- package/dist/cli/tui/view-model.d.ts.map +1 -0
- package/dist/cli/tui/view-model.js +80 -0
- package/dist/cli/tui/view-model.js.map +1 -0
- package/dist/components/button/button.tui.d.ts +4 -0
- package/dist/components/button/button.tui.d.ts.map +1 -0
- package/dist/components/button/button.tui.js +16 -0
- package/dist/components/button/button.tui.js.map +1 -0
- package/dist/components/button/button.web.d.ts +4 -0
- package/dist/components/button/button.web.d.ts.map +1 -0
- package/dist/components/button/button.web.js +7 -0
- package/dist/components/button/button.web.js.map +1 -0
- package/dist/components/button/index.d.ts +5 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/index.js +4 -0
- package/dist/components/button/index.js.map +1 -0
- package/dist/components/button/types.d.ts +28 -0
- package/dist/components/button/types.d.ts.map +1 -0
- package/dist/components/button/types.js +2 -0
- package/dist/components/button/types.js.map +1 -0
- package/dist/components/button/view-model.d.ts +3 -0
- package/dist/components/button/view-model.d.ts.map +1 -0
- package/dist/components/button/view-model.js +53 -0
- package/dist/components/button/view-model.js.map +1 -0
- package/dist/components/card/card.tui.d.ts +4 -0
- package/dist/components/card/card.tui.d.ts.map +1 -0
- package/dist/components/card/card.tui.js +41 -0
- package/dist/components/card/card.tui.js.map +1 -0
- package/dist/components/card/card.web.d.ts +4 -0
- package/dist/components/card/card.web.d.ts.map +1 -0
- package/dist/components/card/card.web.js +12 -0
- package/dist/components/card/card.web.js.map +1 -0
- package/dist/components/card/index.d.ts +5 -0
- package/dist/components/card/index.d.ts.map +1 -0
- package/dist/components/card/index.js +4 -0
- package/dist/components/card/index.js.map +1 -0
- package/dist/components/card/types.d.ts +22 -0
- package/dist/components/card/types.d.ts.map +1 -0
- package/dist/components/card/types.js +2 -0
- package/dist/components/card/types.js.map +1 -0
- package/dist/components/card/view-model.d.ts +3 -0
- package/dist/components/card/view-model.d.ts.map +1 -0
- package/dist/components/card/view-model.js +35 -0
- package/dist/components/card/view-model.js.map +1 -0
- package/dist/components/index.d.ts +5 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +5 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/issue-row/index.d.ts +5 -0
- package/dist/components/issue-row/index.d.ts.map +1 -0
- package/dist/components/issue-row/index.js +4 -0
- package/dist/components/issue-row/index.js.map +1 -0
- package/dist/components/issue-row/issue-row.tui.d.ts +4 -0
- package/dist/components/issue-row/issue-row.tui.d.ts.map +1 -0
- package/dist/components/issue-row/issue-row.tui.js +15 -0
- package/dist/components/issue-row/issue-row.tui.js.map +1 -0
- package/dist/components/issue-row/issue-row.web.d.ts +4 -0
- package/dist/components/issue-row/issue-row.web.d.ts.map +1 -0
- package/dist/components/issue-row/issue-row.web.js +14 -0
- package/dist/components/issue-row/issue-row.web.js.map +1 -0
- package/dist/components/issue-row/types.d.ts +18 -0
- package/dist/components/issue-row/types.d.ts.map +1 -0
- package/dist/components/issue-row/types.js +2 -0
- package/dist/components/issue-row/types.js.map +1 -0
- package/dist/components/issue-row/view-model.d.ts +3 -0
- package/dist/components/issue-row/view-model.d.ts.map +1 -0
- package/dist/components/issue-row/view-model.js +31 -0
- package/dist/components/issue-row/view-model.js.map +1 -0
- package/dist/components/modal/index.d.ts +3 -0
- package/dist/components/modal/index.d.ts.map +1 -0
- package/dist/components/modal/index.js +2 -0
- package/dist/components/modal/index.js.map +1 -0
- package/dist/components/modal/modal.web.d.ts +16 -0
- package/dist/components/modal/modal.web.d.ts.map +1 -0
- package/dist/components/modal/modal.web.js +92 -0
- package/dist/components/modal/modal.web.js.map +1 -0
- package/dist/components/modal/types.d.ts +15 -0
- package/dist/components/modal/types.d.ts.map +1 -0
- package/dist/components/modal/types.js +2 -0
- package/dist/components/modal/types.js.map +1 -0
- package/dist/config/loader.d.ts +23 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +136 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/paths.d.ts +6 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +24 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +3088 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +328 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/discovery/commands.d.ts +33 -0
- package/dist/discovery/commands.d.ts.map +1 -0
- package/dist/discovery/commands.js +82 -0
- package/dist/discovery/commands.js.map +1 -0
- package/dist/discovery/decomposer.d.ts +6 -0
- package/dist/discovery/decomposer.d.ts.map +1 -0
- package/dist/discovery/decomposer.js +102 -0
- package/dist/discovery/decomposer.js.map +1 -0
- package/dist/discovery/discover.d.ts +21 -0
- package/dist/discovery/discover.d.ts.map +1 -0
- package/dist/discovery/discover.js +98 -0
- package/dist/discovery/discover.js.map +1 -0
- package/dist/discovery/followup.d.ts +14 -0
- package/dist/discovery/followup.d.ts.map +1 -0
- package/dist/discovery/followup.js +27 -0
- package/dist/discovery/followup.js.map +1 -0
- package/dist/discovery/roles.d.ts +15 -0
- package/dist/discovery/roles.d.ts.map +1 -0
- package/dist/discovery/roles.js +36 -0
- package/dist/discovery/roles.js.map +1 -0
- package/dist/discovery/selector.d.ts +13 -0
- package/dist/discovery/selector.d.ts.map +1 -0
- package/dist/discovery/selector.js +27 -0
- package/dist/discovery/selector.js.map +1 -0
- package/dist/discovery/triage.d.ts +29 -0
- package/dist/discovery/triage.d.ts.map +1 -0
- package/dist/discovery/triage.js +61 -0
- package/dist/discovery/triage.js.map +1 -0
- package/dist/environment/bootstrap.d.ts +19 -0
- package/dist/environment/bootstrap.d.ts.map +1 -0
- package/dist/environment/bootstrap.js +89 -0
- package/dist/environment/bootstrap.js.map +1 -0
- package/dist/environment/dedicated.d.ts +17 -0
- package/dist/environment/dedicated.d.ts.map +1 -0
- package/dist/environment/dedicated.js +68 -0
- package/dist/environment/dedicated.js.map +1 -0
- package/dist/environment/env-file.d.ts +16 -0
- package/dist/environment/env-file.d.ts.map +1 -0
- package/dist/environment/env-file.js +74 -0
- package/dist/environment/env-file.js.map +1 -0
- package/dist/environment/manager.d.ts +33 -0
- package/dist/environment/manager.d.ts.map +1 -0
- package/dist/environment/manager.js +113 -0
- package/dist/environment/manager.js.map +1 -0
- package/dist/environment/port.d.ts +15 -0
- package/dist/environment/port.d.ts.map +1 -0
- package/dist/environment/port.js +21 -0
- package/dist/environment/port.js.map +1 -0
- package/dist/environment/shared.d.ts +6 -0
- package/dist/environment/shared.d.ts.map +1 -0
- package/dist/environment/shared.js +30 -0
- package/dist/environment/shared.js.map +1 -0
- package/dist/events/bus.d.ts +18 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +70 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/events/observability.d.ts +32 -0
- package/dist/events/observability.d.ts.map +1 -0
- package/dist/events/observability.js +155 -0
- package/dist/events/observability.js.map +1 -0
- package/dist/events/types.d.ts +18 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +2 -0
- package/dist/events/types.js.map +1 -0
- package/dist/forge/bot-comment.d.ts +17 -0
- package/dist/forge/bot-comment.d.ts.map +1 -0
- package/dist/forge/bot-comment.js +30 -0
- package/dist/forge/bot-comment.js.map +1 -0
- package/dist/forge/factory.d.ts +4 -0
- package/dist/forge/factory.d.ts.map +1 -0
- package/dist/forge/factory.js +31 -0
- package/dist/forge/factory.js.map +1 -0
- package/dist/forge/forgejo-client.d.ts +20 -0
- package/dist/forge/forgejo-client.d.ts.map +1 -0
- package/dist/forge/forgejo-client.js +114 -0
- package/dist/forge/forgejo-client.js.map +1 -0
- package/dist/forge/forgejo-labels.d.ts +13 -0
- package/dist/forge/forgejo-labels.d.ts.map +1 -0
- package/dist/forge/forgejo-labels.js +51 -0
- package/dist/forge/forgejo-labels.js.map +1 -0
- package/dist/forge/forgejo.d.ts +31 -0
- package/dist/forge/forgejo.d.ts.map +1 -0
- package/dist/forge/forgejo.js +264 -0
- package/dist/forge/forgejo.js.map +1 -0
- package/dist/forge/github.d.ts +31 -0
- package/dist/forge/github.d.ts.map +1 -0
- package/dist/forge/github.js +438 -0
- package/dist/forge/github.js.map +1 -0
- package/dist/forge/status-comment.d.ts +19 -0
- package/dist/forge/status-comment.d.ts.map +1 -0
- package/dist/forge/status-comment.js +44 -0
- package/dist/forge/status-comment.js.map +1 -0
- package/dist/forge/types.d.ts +118 -0
- package/dist/forge/types.d.ts.map +1 -0
- package/dist/forge/types.js +2 -0
- package/dist/forge/types.js.map +1 -0
- package/dist/git/process.d.ts +15 -0
- package/dist/git/process.d.ts.map +1 -0
- package/dist/git/process.js +38 -0
- package/dist/git/process.js.map +1 -0
- package/dist/git/repo.d.ts +64 -0
- package/dist/git/repo.d.ts.map +1 -0
- package/dist/git/repo.js +158 -0
- package/dist/git/repo.js.map +1 -0
- package/dist/git/slug.d.ts +13 -0
- package/dist/git/slug.d.ts.map +1 -0
- package/dist/git/slug.js +28 -0
- package/dist/git/slug.js.map +1 -0
- package/dist/git/worktree.d.ts +23 -0
- package/dist/git/worktree.d.ts.map +1 -0
- package/dist/git/worktree.js +200 -0
- package/dist/git/worktree.js.map +1 -0
- package/dist/labels/bootstrap.d.ts +12 -0
- package/dist/labels/bootstrap.d.ts.map +1 -0
- package/dist/labels/bootstrap.js +101 -0
- package/dist/labels/bootstrap.js.map +1 -0
- package/dist/labels/config.d.ts +6 -0
- package/dist/labels/config.d.ts.map +1 -0
- package/dist/labels/config.js +56 -0
- package/dist/labels/config.js.map +1 -0
- package/dist/labels/manager.d.ts +10 -0
- package/dist/labels/manager.d.ts.map +1 -0
- package/dist/labels/manager.js +30 -0
- package/dist/labels/manager.js.map +1 -0
- package/dist/labels/transitions.d.ts +33 -0
- package/dist/labels/transitions.d.ts.map +1 -0
- package/dist/labels/transitions.js +81 -0
- package/dist/labels/transitions.js.map +1 -0
- package/dist/loop/checkpoint.d.ts +60 -0
- package/dist/loop/checkpoint.d.ts.map +1 -0
- package/dist/loop/checkpoint.js +226 -0
- package/dist/loop/checkpoint.js.map +1 -0
- package/dist/loop/commit.d.ts +17 -0
- package/dist/loop/commit.d.ts.map +1 -0
- package/dist/loop/commit.js +65 -0
- package/dist/loop/commit.js.map +1 -0
- package/dist/loop/context.d.ts +11 -0
- package/dist/loop/context.d.ts.map +1 -0
- package/dist/loop/context.js +26 -0
- package/dist/loop/context.js.map +1 -0
- package/dist/loop/cost.d.ts +79 -0
- package/dist/loop/cost.d.ts.map +1 -0
- package/dist/loop/cost.js +223 -0
- package/dist/loop/cost.js.map +1 -0
- package/dist/loop/decision.d.ts +22 -0
- package/dist/loop/decision.d.ts.map +1 -0
- package/dist/loop/decision.js +118 -0
- package/dist/loop/decision.js.map +1 -0
- package/dist/loop/diff-guard.d.ts +21 -0
- package/dist/loop/diff-guard.d.ts.map +1 -0
- package/dist/loop/diff-guard.js +52 -0
- package/dist/loop/diff-guard.js.map +1 -0
- package/dist/loop/engine.d.ts +32 -0
- package/dist/loop/engine.d.ts.map +1 -0
- package/dist/loop/engine.js +376 -0
- package/dist/loop/engine.js.map +1 -0
- package/dist/loop/parallel.d.ts +20 -0
- package/dist/loop/parallel.d.ts.map +1 -0
- package/dist/loop/parallel.js +144 -0
- package/dist/loop/parallel.js.map +1 -0
- package/dist/loop/plan-summary-comment.d.ts +5 -0
- package/dist/loop/plan-summary-comment.d.ts.map +1 -0
- package/dist/loop/plan-summary-comment.js +89 -0
- package/dist/loop/plan-summary-comment.js.map +1 -0
- package/dist/loop/pricing.d.ts +23 -0
- package/dist/loop/pricing.d.ts.map +1 -0
- package/dist/loop/pricing.js +64 -0
- package/dist/loop/pricing.js.map +1 -0
- package/dist/loop/review-feedback.d.ts +12 -0
- package/dist/loop/review-feedback.d.ts.map +1 -0
- package/dist/loop/review-feedback.js +55 -0
- package/dist/loop/review-feedback.js.map +1 -0
- package/dist/loop/step-executor.d.ts +70 -0
- package/dist/loop/step-executor.d.ts.map +1 -0
- package/dist/loop/step-executor.js +328 -0
- package/dist/loop/step-executor.js.map +1 -0
- package/dist/loop/supervisor.d.ts +9 -0
- package/dist/loop/supervisor.d.ts.map +1 -0
- package/dist/loop/supervisor.js +22 -0
- package/dist/loop/supervisor.js.map +1 -0
- package/dist/loop/types.d.ts +66 -0
- package/dist/loop/types.d.ts.map +1 -0
- package/dist/loop/types.js +2 -0
- package/dist/loop/types.js.map +1 -0
- package/dist/loop/verifier.d.ts +9 -0
- package/dist/loop/verifier.d.ts.map +1 -0
- package/dist/loop/verifier.js +59 -0
- package/dist/loop/verifier.js.map +1 -0
- package/dist/loop/workflow.d.ts +38 -0
- package/dist/loop/workflow.d.ts.map +1 -0
- package/dist/loop/workflow.js +64 -0
- package/dist/loop/workflow.js.map +1 -0
- package/dist/mcp/http.d.ts +8 -0
- package/dist/mcp/http.d.ts.map +1 -0
- package/dist/mcp/http.js +76 -0
- package/dist/mcp/http.js.map +1 -0
- package/dist/mcp/resources/index.d.ts +11 -0
- package/dist/mcp/resources/index.d.ts.map +1 -0
- package/dist/mcp/resources/index.js +137 -0
- package/dist/mcp/resources/index.js.map +1 -0
- package/dist/mcp/server.d.ts +16 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +54 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +19 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +847 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mentions/manager.d.ts +12 -0
- package/dist/mentions/manager.d.ts.map +1 -0
- package/dist/mentions/manager.js +50 -0
- package/dist/mentions/manager.js.map +1 -0
- package/dist/mentions/resolver.d.ts +12 -0
- package/dist/mentions/resolver.d.ts.map +1 -0
- package/dist/mentions/resolver.js +26 -0
- package/dist/mentions/resolver.js.map +1 -0
- package/dist/mentions/tracker.d.ts +8 -0
- package/dist/mentions/tracker.d.ts.map +1 -0
- package/dist/mentions/tracker.js +18 -0
- package/dist/mentions/tracker.js.map +1 -0
- package/dist/merge-queue/batch.d.ts +19 -0
- package/dist/merge-queue/batch.d.ts.map +1 -0
- package/dist/merge-queue/batch.js +100 -0
- package/dist/merge-queue/batch.js.map +1 -0
- package/dist/merge-queue/bisect.d.ts +10 -0
- package/dist/merge-queue/bisect.d.ts.map +1 -0
- package/dist/merge-queue/bisect.js +18 -0
- package/dist/merge-queue/bisect.js.map +1 -0
- package/dist/merge-queue/eligibility.d.ts +25 -0
- package/dist/merge-queue/eligibility.d.ts.map +1 -0
- package/dist/merge-queue/eligibility.js +125 -0
- package/dist/merge-queue/eligibility.js.map +1 -0
- package/dist/merge-queue/finalize.d.ts +7 -0
- package/dist/merge-queue/finalize.d.ts.map +1 -0
- package/dist/merge-queue/finalize.js +36 -0
- package/dist/merge-queue/finalize.js.map +1 -0
- package/dist/merge-queue/runner.d.ts +13 -0
- package/dist/merge-queue/runner.d.ts.map +1 -0
- package/dist/merge-queue/runner.js +246 -0
- package/dist/merge-queue/runner.js.map +1 -0
- package/dist/merge-queue/staging.d.ts +13 -0
- package/dist/merge-queue/staging.d.ts.map +1 -0
- package/dist/merge-queue/staging.js +88 -0
- package/dist/merge-queue/staging.js.map +1 -0
- package/dist/merge-queue/types.d.ts +23 -0
- package/dist/merge-queue/types.d.ts.map +1 -0
- package/dist/merge-queue/types.js +2 -0
- package/dist/merge-queue/types.js.map +1 -0
- package/dist/metrics/collectors.d.ts +24 -0
- package/dist/metrics/collectors.d.ts.map +1 -0
- package/dist/metrics/collectors.js +132 -0
- package/dist/metrics/collectors.js.map +1 -0
- package/dist/metrics/server.d.ts +8 -0
- package/dist/metrics/server.d.ts.map +1 -0
- package/dist/metrics/server.js +41 -0
- package/dist/metrics/server.js.map +1 -0
- package/dist/metrics/service.d.ts +26 -0
- package/dist/metrics/service.d.ts.map +1 -0
- package/dist/metrics/service.js +161 -0
- package/dist/metrics/service.js.map +1 -0
- package/dist/notify/channels/console.d.ts +10 -0
- package/dist/notify/channels/console.d.ts.map +1 -0
- package/dist/notify/channels/console.js +17 -0
- package/dist/notify/channels/console.js.map +1 -0
- package/dist/notify/channels/discord.d.ts +13 -0
- package/dist/notify/channels/discord.d.ts.map +1 -0
- package/dist/notify/channels/discord.js +183 -0
- package/dist/notify/channels/discord.js.map +1 -0
- package/dist/notify/channels/github-comment.d.ts +13 -0
- package/dist/notify/channels/github-comment.d.ts.map +1 -0
- package/dist/notify/channels/github-comment.js +52 -0
- package/dist/notify/channels/github-comment.js.map +1 -0
- package/dist/notify/channels/smtp.d.ts +17 -0
- package/dist/notify/channels/smtp.d.ts.map +1 -0
- package/dist/notify/channels/smtp.js +65 -0
- package/dist/notify/channels/smtp.js.map +1 -0
- package/dist/notify/channels/webhook-common.d.ts +19 -0
- package/dist/notify/channels/webhook-common.d.ts.map +1 -0
- package/dist/notify/channels/webhook-common.js +111 -0
- package/dist/notify/channels/webhook-common.js.map +1 -0
- package/dist/notify/channels/webhook.d.ts +13 -0
- package/dist/notify/channels/webhook.d.ts.map +1 -0
- package/dist/notify/channels/webhook.js +72 -0
- package/dist/notify/channels/webhook.js.map +1 -0
- package/dist/notify/dispatcher.d.ts +11 -0
- package/dist/notify/dispatcher.d.ts.map +1 -0
- package/dist/notify/dispatcher.js +66 -0
- package/dist/notify/dispatcher.js.map +1 -0
- package/dist/notify/factory.d.ts +5 -0
- package/dist/notify/factory.d.ts.map +1 -0
- package/dist/notify/factory.js +46 -0
- package/dist/notify/factory.js.map +1 -0
- package/dist/notify/payload.d.ts +8 -0
- package/dist/notify/payload.d.ts.map +1 -0
- package/dist/notify/payload.js +37 -0
- package/dist/notify/payload.js.map +1 -0
- package/dist/notify/types.d.ts +34 -0
- package/dist/notify/types.d.ts.map +1 -0
- package/dist/notify/types.js +2 -0
- package/dist/notify/types.js.map +1 -0
- package/dist/ops/auto-cleanup.d.ts +14 -0
- package/dist/ops/auto-cleanup.d.ts.map +1 -0
- package/dist/ops/auto-cleanup.js +58 -0
- package/dist/ops/auto-cleanup.js.map +1 -0
- package/dist/ops/cleanup.d.ts +32 -0
- package/dist/ops/cleanup.d.ts.map +1 -0
- package/dist/ops/cleanup.js +208 -0
- package/dist/ops/cleanup.js.map +1 -0
- package/dist/ops/continue.d.ts +12 -0
- package/dist/ops/continue.d.ts.map +1 -0
- package/dist/ops/continue.js +240 -0
- package/dist/ops/continue.js.map +1 -0
- package/dist/ops/cost-override.d.ts +16 -0
- package/dist/ops/cost-override.d.ts.map +1 -0
- package/dist/ops/cost-override.js +28 -0
- package/dist/ops/cost-override.js.map +1 -0
- package/dist/ops/daily-cost-override.d.ts +15 -0
- package/dist/ops/daily-cost-override.d.ts.map +1 -0
- package/dist/ops/daily-cost-override.js +23 -0
- package/dist/ops/daily-cost-override.js.map +1 -0
- package/dist/ops/delete-entry.d.ts +44 -0
- package/dist/ops/delete-entry.d.ts.map +1 -0
- package/dist/ops/delete-entry.js +381 -0
- package/dist/ops/delete-entry.js.map +1 -0
- package/dist/ops/labels-init.d.ts +43 -0
- package/dist/ops/labels-init.d.ts.map +1 -0
- package/dist/ops/labels-init.js +149 -0
- package/dist/ops/labels-init.js.map +1 -0
- package/dist/ops/rebase-and-check.d.ts +34 -0
- package/dist/ops/rebase-and-check.d.ts.map +1 -0
- package/dist/ops/rebase-and-check.js +110 -0
- package/dist/ops/rebase-and-check.js.map +1 -0
- package/dist/ops/rebase.d.ts +18 -0
- package/dist/ops/rebase.d.ts.map +1 -0
- package/dist/ops/rebase.js +67 -0
- package/dist/ops/rebase.js.map +1 -0
- package/dist/ops/retention.d.ts +29 -0
- package/dist/ops/retention.d.ts.map +1 -0
- package/dist/ops/retention.js +120 -0
- package/dist/ops/retention.js.map +1 -0
- package/dist/ops/retry.d.ts +19 -0
- package/dist/ops/retry.d.ts.map +1 -0
- package/dist/ops/retry.js +106 -0
- package/dist/ops/retry.js.map +1 -0
- package/dist/ops/summary.d.ts +42 -0
- package/dist/ops/summary.d.ts.map +1 -0
- package/dist/ops/summary.js +86 -0
- package/dist/ops/summary.js.map +1 -0
- package/dist/ops/sync.d.ts +47 -0
- package/dist/ops/sync.d.ts.map +1 -0
- package/dist/ops/sync.js +445 -0
- package/dist/ops/sync.js.map +1 -0
- package/dist/planning/mode.d.ts +14 -0
- package/dist/planning/mode.d.ts.map +1 -0
- package/dist/planning/mode.js +33 -0
- package/dist/planning/mode.js.map +1 -0
- package/dist/poller/control.d.ts +21 -0
- package/dist/poller/control.d.ts.map +1 -0
- package/dist/poller/control.js +42 -0
- package/dist/poller/control.js.map +1 -0
- package/dist/poller/shutdown.d.ts +20 -0
- package/dist/poller/shutdown.d.ts.map +1 -0
- package/dist/poller/shutdown.js +94 -0
- package/dist/poller/shutdown.js.map +1 -0
- package/dist/publishing/pr-body.d.ts +25 -0
- package/dist/publishing/pr-body.d.ts.map +1 -0
- package/dist/publishing/pr-body.js +119 -0
- package/dist/publishing/pr-body.js.map +1 -0
- package/dist/publishing/publisher.d.ts +19 -0
- package/dist/publishing/publisher.d.ts.map +1 -0
- package/dist/publishing/publisher.js +116 -0
- package/dist/publishing/publisher.js.map +1 -0
- package/dist/publishing/push.d.ts +13 -0
- package/dist/publishing/push.d.ts.map +1 -0
- package/dist/publishing/push.js +56 -0
- package/dist/publishing/push.js.map +1 -0
- package/dist/reactions/handler.d.ts +20 -0
- package/dist/reactions/handler.d.ts.map +1 -0
- package/dist/reactions/handler.js +50 -0
- package/dist/reactions/handler.js.map +1 -0
- package/dist/reactions/scanner.d.ts +13 -0
- package/dist/reactions/scanner.d.ts.map +1 -0
- package/dist/reactions/scanner.js +141 -0
- package/dist/reactions/scanner.js.map +1 -0
- package/dist/reactions/types.d.ts +41 -0
- package/dist/reactions/types.d.ts.map +1 -0
- package/dist/reactions/types.js +2 -0
- package/dist/reactions/types.js.map +1 -0
- package/dist/runner/poller.d.ts +19 -0
- package/dist/runner/poller.d.ts.map +1 -0
- package/dist/runner/poller.js +1358 -0
- package/dist/runner/poller.js.map +1 -0
- package/dist/settings/registry.d.ts +37 -0
- package/dist/settings/registry.d.ts.map +1 -0
- package/dist/settings/registry.js +299 -0
- package/dist/settings/registry.js.map +1 -0
- package/dist/settings/runtime.d.ts +33 -0
- package/dist/settings/runtime.d.ts.map +1 -0
- package/dist/settings/runtime.js +148 -0
- package/dist/settings/runtime.js.map +1 -0
- package/dist/state/db.d.ts +3 -0
- package/dist/state/db.d.ts.map +1 -0
- package/dist/state/db.js +80 -0
- package/dist/state/db.js.map +1 -0
- package/dist/state/issues.d.ts +47 -0
- package/dist/state/issues.d.ts.map +1 -0
- package/dist/state/issues.js +188 -0
- package/dist/state/issues.js.map +1 -0
- package/dist/state/leases.d.ts +27 -0
- package/dist/state/leases.d.ts.map +1 -0
- package/dist/state/leases.js +75 -0
- package/dist/state/leases.js.map +1 -0
- package/dist/state/migrations/001-initial.d.ts +3 -0
- package/dist/state/migrations/001-initial.d.ts.map +1 -0
- package/dist/state/migrations/001-initial.js +70 -0
- package/dist/state/migrations/001-initial.js.map +1 -0
- package/dist/state/migrations/002-placeholder.d.ts +7 -0
- package/dist/state/migrations/002-placeholder.d.ts.map +1 -0
- package/dist/state/migrations/002-placeholder.js +8 -0
- package/dist/state/migrations/002-placeholder.js.map +1 -0
- package/dist/state/migrations/003-mention-tracking.d.ts +3 -0
- package/dist/state/migrations/003-mention-tracking.d.ts.map +1 -0
- package/dist/state/migrations/003-mention-tracking.js +13 -0
- package/dist/state/migrations/003-mention-tracking.js.map +1 -0
- package/dist/state/migrations/004-command-tracking.d.ts +3 -0
- package/dist/state/migrations/004-command-tracking.d.ts.map +1 -0
- package/dist/state/migrations/004-command-tracking.js +13 -0
- package/dist/state/migrations/004-command-tracking.js.map +1 -0
- package/dist/state/migrations/005-block-reason.d.ts +3 -0
- package/dist/state/migrations/005-block-reason.d.ts.map +1 -0
- package/dist/state/migrations/005-block-reason.js +4 -0
- package/dist/state/migrations/005-block-reason.js.map +1 -0
- package/dist/state/migrations/006-parent-run.d.ts +3 -0
- package/dist/state/migrations/006-parent-run.d.ts.map +1 -0
- package/dist/state/migrations/006-parent-run.js +4 -0
- package/dist/state/migrations/006-parent-run.js.map +1 -0
- package/dist/state/migrations/007-merge-queue.d.ts +3 -0
- package/dist/state/migrations/007-merge-queue.d.ts.map +1 -0
- package/dist/state/migrations/007-merge-queue.js +21 -0
- package/dist/state/migrations/007-merge-queue.js.map +1 -0
- package/dist/state/migrations/008-agent-events.d.ts +3 -0
- package/dist/state/migrations/008-agent-events.d.ts.map +1 -0
- package/dist/state/migrations/008-agent-events.js +15 -0
- package/dist/state/migrations/008-agent-events.js.map +1 -0
- package/dist/state/migrations/009-run-titles.d.ts +3 -0
- package/dist/state/migrations/009-run-titles.d.ts.map +1 -0
- package/dist/state/migrations/009-run-titles.js +11 -0
- package/dist/state/migrations/009-run-titles.js.map +1 -0
- package/dist/state/migrations/010-issues.d.ts +9 -0
- package/dist/state/migrations/010-issues.d.ts.map +1 -0
- package/dist/state/migrations/010-issues.js +193 -0
- package/dist/state/migrations/010-issues.js.map +1 -0
- package/dist/state/migrations/011-rebuild-issues-from-latest-run.d.ts +8 -0
- package/dist/state/migrations/011-rebuild-issues-from-latest-run.d.ts.map +1 -0
- package/dist/state/migrations/011-rebuild-issues-from-latest-run.js +125 -0
- package/dist/state/migrations/011-rebuild-issues-from-latest-run.js.map +1 -0
- package/dist/state/migrations/012-settings-overrides.d.ts +3 -0
- package/dist/state/migrations/012-settings-overrides.d.ts.map +1 -0
- package/dist/state/migrations/012-settings-overrides.js +14 -0
- package/dist/state/migrations/012-settings-overrides.js.map +1 -0
- package/dist/state/migrations/013-token-usage.d.ts +3 -0
- package/dist/state/migrations/013-token-usage.d.ts.map +1 -0
- package/dist/state/migrations/013-token-usage.js +21 -0
- package/dist/state/migrations/013-token-usage.js.map +1 -0
- package/dist/state/migrations/014-daily-run-usage.d.ts +3 -0
- package/dist/state/migrations/014-daily-run-usage.d.ts.map +1 -0
- package/dist/state/migrations/014-daily-run-usage.js +14 -0
- package/dist/state/migrations/014-daily-run-usage.js.map +1 -0
- package/dist/state/migrations/015-run-cost-override.d.ts +11 -0
- package/dist/state/migrations/015-run-cost-override.d.ts.map +1 -0
- package/dist/state/migrations/015-run-cost-override.js +20 -0
- package/dist/state/migrations/015-run-cost-override.js.map +1 -0
- package/dist/state/migrations/016-daily-cost-cap-override.d.ts +15 -0
- package/dist/state/migrations/016-daily-cost-cap-override.d.ts.map +1 -0
- package/dist/state/migrations/016-daily-cost-cap-override.js +24 -0
- package/dist/state/migrations/016-daily-cost-cap-override.js.map +1 -0
- package/dist/state/migrations/017-merge-batch-merged-prs.d.ts +13 -0
- package/dist/state/migrations/017-merge-batch-merged-prs.d.ts.map +1 -0
- package/dist/state/migrations/017-merge-batch-merged-prs.js +22 -0
- package/dist/state/migrations/017-merge-batch-merged-prs.js.map +1 -0
- package/dist/state/migrations/018-run-retry-count.d.ts +13 -0
- package/dist/state/migrations/018-run-retry-count.d.ts.map +1 -0
- package/dist/state/migrations/018-run-retry-count.js +22 -0
- package/dist/state/migrations/018-run-retry-count.js.map +1 -0
- package/dist/state/migrations/019-runs-active-index-top-level.d.ts +16 -0
- package/dist/state/migrations/019-runs-active-index-top-level.d.ts.map +1 -0
- package/dist/state/migrations/019-runs-active-index-top-level.js +23 -0
- package/dist/state/migrations/019-runs-active-index-top-level.js.map +1 -0
- package/dist/state/runs.d.ts +100 -0
- package/dist/state/runs.d.ts.map +1 -0
- package/dist/state/runs.js +321 -0
- package/dist/state/runs.js.map +1 -0
- package/dist/state/settings.d.ts +16 -0
- package/dist/state/settings.d.ts.map +1 -0
- package/dist/state/settings.js +55 -0
- package/dist/state/settings.js.map +1 -0
- package/dist/state/stats.d.ts +133 -0
- package/dist/state/stats.d.ts.map +1 -0
- package/dist/state/stats.js +419 -0
- package/dist/state/stats.js.map +1 -0
- package/dist/supervisor/health.d.ts +24 -0
- package/dist/supervisor/health.d.ts.map +1 -0
- package/dist/supervisor/health.js +186 -0
- package/dist/supervisor/health.js.map +1 -0
- package/dist/supervisor/index.d.ts +31 -0
- package/dist/supervisor/index.d.ts.map +1 -0
- package/dist/supervisor/index.js +387 -0
- package/dist/supervisor/index.js.map +1 -0
- package/dist/supervisor/status.d.ts +18 -0
- package/dist/supervisor/status.d.ts.map +1 -0
- package/dist/supervisor/status.js +30 -0
- package/dist/supervisor/status.js.map +1 -0
- package/dist/supervisor/updater.d.ts +18 -0
- package/dist/supervisor/updater.d.ts.map +1 -0
- package/dist/supervisor/updater.js +108 -0
- package/dist/supervisor/updater.js.map +1 -0
- package/dist/utils/build-info.d.ts +6 -0
- package/dist/utils/build-info.d.ts.map +1 -0
- package/dist/utils/build-info.js +56 -0
- package/dist/utils/build-info.js.map +1 -0
- package/dist/utils/command.d.ts +8 -0
- package/dist/utils/command.d.ts.map +1 -0
- package/dist/utils/command.js +71 -0
- package/dist/utils/command.js.map +1 -0
- package/dist/utils/ids.d.ts +4 -0
- package/dist/utils/ids.d.ts.map +1 -0
- package/dist/utils/ids.js +17 -0
- package/dist/utils/ids.js.map +1 -0
- package/dist/utils/install-method.d.ts +4 -0
- package/dist/utils/install-method.d.ts.map +1 -0
- package/dist/utils/install-method.js +13 -0
- package/dist/utils/install-method.js.map +1 -0
- package/dist/utils/issue-repo.d.ts +2 -0
- package/dist/utils/issue-repo.d.ts.map +1 -0
- package/dist/utils/issue-repo.js +7 -0
- package/dist/utils/issue-repo.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +63 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/project-root.d.ts +8 -0
- package/dist/utils/project-root.d.ts.map +1 -0
- package/dist/utils/project-root.js +22 -0
- package/dist/utils/project-root.js.map +1 -0
- package/dist/utils/sanitize-error.d.ts +36 -0
- package/dist/utils/sanitize-error.d.ts.map +1 -0
- package/dist/utils/sanitize-error.js +89 -0
- package/dist/utils/sanitize-error.js.map +1 -0
- package/dist/utils/time.d.ts +7 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +47 -0
- package/dist/utils/time.js.map +1 -0
- package/dist/web/server.d.ts +14 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +1185 -0
- package/dist/web/server.js.map +1 -0
- package/dist/workers/acp.d.ts +9 -0
- package/dist/workers/acp.d.ts.map +1 -0
- package/dist/workers/acp.js +190 -0
- package/dist/workers/acp.js.map +1 -0
- package/dist/workers/acpx-imports.d.ts +18 -0
- package/dist/workers/acpx-imports.d.ts.map +1 -0
- package/dist/workers/acpx-imports.js +43 -0
- package/dist/workers/acpx-imports.js.map +1 -0
- package/dist/workers/claude.d.ts +9 -0
- package/dist/workers/claude.d.ts.map +1 -0
- package/dist/workers/claude.js +341 -0
- package/dist/workers/claude.js.map +1 -0
- package/dist/workers/codex.d.ts +21 -0
- package/dist/workers/codex.d.ts.map +1 -0
- package/dist/workers/codex.js +337 -0
- package/dist/workers/codex.js.map +1 -0
- package/dist/workers/command.d.ts +6 -0
- package/dist/workers/command.d.ts.map +1 -0
- package/dist/workers/command.js +15 -0
- package/dist/workers/command.js.map +1 -0
- package/dist/workers/env.d.ts +18 -0
- package/dist/workers/env.d.ts.map +1 -0
- package/dist/workers/env.js +172 -0
- package/dist/workers/env.js.map +1 -0
- package/dist/workers/events.d.ts +7 -0
- package/dist/workers/events.d.ts.map +1 -0
- package/dist/workers/events.js +30 -0
- package/dist/workers/events.js.map +1 -0
- package/dist/workers/factory.d.ts +6 -0
- package/dist/workers/factory.d.ts.map +1 -0
- package/dist/workers/factory.js +13 -0
- package/dist/workers/factory.js.map +1 -0
- package/dist/workers/parsers/coder.d.ts +6 -0
- package/dist/workers/parsers/coder.d.ts.map +1 -0
- package/dist/workers/parsers/coder.js +59 -0
- package/dist/workers/parsers/coder.js.map +1 -0
- package/dist/workers/parsers/decomposer.d.ts +16 -0
- package/dist/workers/parsers/decomposer.d.ts.map +1 -0
- package/dist/workers/parsers/decomposer.js +35 -0
- package/dist/workers/parsers/decomposer.js.map +1 -0
- package/dist/workers/parsers/extract.d.ts +41 -0
- package/dist/workers/parsers/extract.d.ts.map +1 -0
- package/dist/workers/parsers/extract.js +231 -0
- package/dist/workers/parsers/extract.js.map +1 -0
- package/dist/workers/parsers/planner.d.ts +6 -0
- package/dist/workers/parsers/planner.d.ts.map +1 -0
- package/dist/workers/parsers/planner.js +77 -0
- package/dist/workers/parsers/planner.js.map +1 -0
- package/dist/workers/parsers/reviewer.d.ts +6 -0
- package/dist/workers/parsers/reviewer.d.ts.map +1 -0
- package/dist/workers/parsers/reviewer.js +105 -0
- package/dist/workers/parsers/reviewer.js.map +1 -0
- package/dist/workers/prompt/compiler.d.ts +11 -0
- package/dist/workers/prompt/compiler.d.ts.map +1 -0
- package/dist/workers/prompt/compiler.js +199 -0
- package/dist/workers/prompt/compiler.js.map +1 -0
- package/dist/workers/prompt/templates.d.ts +13 -0
- package/dist/workers/prompt/templates.d.ts.map +1 -0
- package/dist/workers/prompt/templates.js +110 -0
- package/dist/workers/prompt/templates.js.map +1 -0
- package/dist/workers/registry.d.ts +9 -0
- package/dist/workers/registry.d.ts.map +1 -0
- package/dist/workers/registry.js +21 -0
- package/dist/workers/registry.js.map +1 -0
- package/dist/workers/streaming-exec.d.ts +26 -0
- package/dist/workers/streaming-exec.d.ts.map +1 -0
- package/dist/workers/streaming-exec.js +166 -0
- package/dist/workers/streaming-exec.js.map +1 -0
- package/dist/workers/timeout.d.ts +17 -0
- package/dist/workers/timeout.d.ts.map +1 -0
- package/dist/workers/timeout.js +37 -0
- package/dist/workers/timeout.js.map +1 -0
- package/dist/workers/types.d.ts +120 -0
- package/dist/workers/types.d.ts.map +1 -0
- package/dist/workers/types.js +2 -0
- package/dist/workers/types.js.map +1 -0
- package/docker-compose.example.yaml +29 -0
- package/examples/config.example.yaml +256 -0
- package/examples/night-orch.service +40 -0
- package/monitoring/grafana/dashboards/night-orch.json +140 -0
- package/monitoring/grafana/provisioning/dashboards/dashboards.yml +10 -0
- package/monitoring/grafana/provisioning/datasources/prometheus.yml +9 -0
- package/monitoring/prometheus.yml +8 -0
- package/package.json +104 -0
- package/web/dist/assets/index-CBFNqVuV.js +9 -0
- package/web/dist/assets/index-RCNGmuI2.css +1 -0
- package/web/dist/icon.svg +10 -0
- package/web/dist/index.html +22 -0
- package/web/dist/manifest.webmanifest +16 -0
- package/web/dist/sw.js +58 -0
|
@@ -0,0 +1,847 @@
|
|
|
1
|
+
import { createHash, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { writeFileSync, mkdirSync } from 'node:fs';
|
|
5
|
+
import { RunManager } from '../../state/runs.js';
|
|
6
|
+
import { CostTracker } from '../../loop/cost.js';
|
|
7
|
+
import { SyncEngine } from '../../ops/sync.js';
|
|
8
|
+
import { CleanupEngine } from '../../ops/cleanup.js';
|
|
9
|
+
import { RetryEngine } from '../../ops/retry.js';
|
|
10
|
+
import { setIssueCostOverride } from '../../ops/cost-override.js';
|
|
11
|
+
import { setDailyCostCapOverride } from '../../ops/daily-cost-override.js';
|
|
12
|
+
import { LabelsInitEngine, formatLabelsInitSummary } from '../../ops/labels-init.js';
|
|
13
|
+
import { queueContinue } from '../../ops/continue.js';
|
|
14
|
+
import { DeleteIssueEntryEngine } from '../../ops/delete-entry.js';
|
|
15
|
+
import { isIssueEligibleForRepo } from '../../discovery/discover.js';
|
|
16
|
+
import { pollOnce } from '../../runner/poller.js';
|
|
17
|
+
import { flushActiveAgentObservability } from '../../events/observability.js';
|
|
18
|
+
import { createForgeAdapter } from '../../forge/factory.js';
|
|
19
|
+
import { nowUtcIso } from '../../utils/time.js';
|
|
20
|
+
import { loadRuns } from '../../cli/tui/data.js';
|
|
21
|
+
import { clearRuntimeSettingOverride, listRuntimeSettings, resolveConfigWithRuntimeSettings, setRuntimeSettingOverride, } from '../../settings/runtime.js';
|
|
22
|
+
export function registerTools() {
|
|
23
|
+
return [
|
|
24
|
+
{
|
|
25
|
+
name: 'night-orch-list-settings',
|
|
26
|
+
description: 'List runtime-configurable settings with base values, DB overrides, and effective values.',
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: {},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: 'night-orch-set-setting',
|
|
34
|
+
description: 'Set one runtime setting override in DB.',
|
|
35
|
+
inputSchema: {
|
|
36
|
+
type: 'object',
|
|
37
|
+
properties: {
|
|
38
|
+
key: { type: 'string', description: 'Setting key (for example github.pollIntervalSeconds)' },
|
|
39
|
+
value: { type: 'string', description: 'Setting value as text (for booleans use true/false)' },
|
|
40
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
41
|
+
},
|
|
42
|
+
required: ['key', 'value'],
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'night-orch-clear-setting',
|
|
47
|
+
description: 'Clear one runtime setting override (revert to YAML/default).',
|
|
48
|
+
inputSchema: {
|
|
49
|
+
type: 'object',
|
|
50
|
+
properties: {
|
|
51
|
+
key: { type: 'string', description: 'Setting key' },
|
|
52
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
53
|
+
},
|
|
54
|
+
required: ['key'],
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'night-orch-status',
|
|
59
|
+
description: 'Get current night-orch operational status including active runs, eligible issues, and recent activity.',
|
|
60
|
+
inputSchema: {
|
|
61
|
+
type: 'object',
|
|
62
|
+
properties: {
|
|
63
|
+
repo: { type: 'string', description: 'Optional: filter to a specific repo (owner/name)' },
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
name: 'night-orch-run-detail',
|
|
69
|
+
description: 'Get detailed information about a specific run including phase history and artifacts.',
|
|
70
|
+
inputSchema: {
|
|
71
|
+
type: 'object',
|
|
72
|
+
properties: {
|
|
73
|
+
runId: { type: 'string', description: 'Run ID (e.g., run-abc123)' },
|
|
74
|
+
},
|
|
75
|
+
required: ['runId'],
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: 'night-orch-list-runs',
|
|
80
|
+
description: 'List runs with optional filters by repo, status, and limit.',
|
|
81
|
+
inputSchema: {
|
|
82
|
+
type: 'object',
|
|
83
|
+
properties: {
|
|
84
|
+
repo: { type: 'string', description: 'Filter by repo (owner/name)' },
|
|
85
|
+
status: { type: 'string', description: 'Filter by status', enum: ['queued', 'running', 'blocked', 'review_ready', 'error', 'completed'] },
|
|
86
|
+
limit: { type: 'number', description: 'Max results (default: 20)', default: 20 },
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
name: 'night-orch-cost-report',
|
|
92
|
+
description: 'Get cost breakdown for recent days, including daily totals and budget utilization.',
|
|
93
|
+
inputSchema: {
|
|
94
|
+
type: 'object',
|
|
95
|
+
properties: {
|
|
96
|
+
days: { type: 'number', description: 'Number of days to include (default: 7)', default: 7 },
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'night-orch-retry',
|
|
102
|
+
description: 'Force a re-run of a blocked or errored issue. Resets state and re-queues for processing.',
|
|
103
|
+
inputSchema: {
|
|
104
|
+
type: 'object',
|
|
105
|
+
properties: {
|
|
106
|
+
repo: { type: 'string', description: 'Repository (owner/name)' },
|
|
107
|
+
issueNumber: { type: 'number', description: 'Issue number to retry' },
|
|
108
|
+
resetPlan: { type: 'boolean', description: 'Re-run planner instead of reusing existing plan', default: false },
|
|
109
|
+
fresh: { type: 'boolean', description: 'Reset branch to base and re-implement from scratch (use after merge conflicts)', default: false },
|
|
110
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
111
|
+
},
|
|
112
|
+
required: ['repo', 'issueNumber'],
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'night-orch-cost-override',
|
|
117
|
+
description: 'Grant a per-run cost budget override on the latest run for an issue. ' +
|
|
118
|
+
'When set, the override replaces the per-run cap and exempts the run from the daily cap. ' +
|
|
119
|
+
'Pass clear:true to remove an existing override.',
|
|
120
|
+
inputSchema: {
|
|
121
|
+
type: 'object',
|
|
122
|
+
properties: {
|
|
123
|
+
repo: { type: 'string', description: 'Repository (owner/name)' },
|
|
124
|
+
issueNumber: { type: 'number', description: 'Issue number' },
|
|
125
|
+
amountUsd: {
|
|
126
|
+
type: 'number',
|
|
127
|
+
description: 'Override budget in USD (positive number). Omit when clearing.',
|
|
128
|
+
},
|
|
129
|
+
clear: {
|
|
130
|
+
type: 'boolean',
|
|
131
|
+
description: 'Remove any existing cost override from the latest run for this issue.',
|
|
132
|
+
default: false,
|
|
133
|
+
},
|
|
134
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
135
|
+
},
|
|
136
|
+
required: ['repo', 'issueNumber'],
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
name: 'night-orch-daily-cost-override',
|
|
141
|
+
description: "Raise today's daily cost cap (UTC). Auto-expires at 00:00 UTC. " +
|
|
142
|
+
'Use when the whole day is blocked and granting per-run overrides to each queued issue would be impractical. ' +
|
|
143
|
+
'Pass clear:true to remove the override and fall back to the base cap.',
|
|
144
|
+
inputSchema: {
|
|
145
|
+
type: 'object',
|
|
146
|
+
properties: {
|
|
147
|
+
amountUsd: {
|
|
148
|
+
type: 'number',
|
|
149
|
+
description: "Override budget in USD (positive number) for today's daily cap. Omit when clearing.",
|
|
150
|
+
},
|
|
151
|
+
clear: {
|
|
152
|
+
type: 'boolean',
|
|
153
|
+
description: "Remove today's daily cost cap override.",
|
|
154
|
+
default: false,
|
|
155
|
+
},
|
|
156
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: 'night-orch-sync',
|
|
162
|
+
description: 'Reconcile local state with GitHub. Cleans stale runs, fixes label mismatches, detects orphaned worktrees.',
|
|
163
|
+
inputSchema: {
|
|
164
|
+
type: 'object',
|
|
165
|
+
properties: {
|
|
166
|
+
dryRun: { type: 'boolean', description: 'Preview changes without applying', default: false },
|
|
167
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: 'night-orch-cleanup',
|
|
173
|
+
description: 'Clean stale worktrees, expired leases, and old logs.',
|
|
174
|
+
inputSchema: {
|
|
175
|
+
type: 'object',
|
|
176
|
+
properties: {
|
|
177
|
+
dryRun: { type: 'boolean', description: 'Preview changes without applying', default: false },
|
|
178
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
179
|
+
},
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: 'night-orch-labels-init',
|
|
184
|
+
description: 'Create or update orchestration labels for a configured GitHub repository.',
|
|
185
|
+
inputSchema: {
|
|
186
|
+
type: 'object',
|
|
187
|
+
properties: {
|
|
188
|
+
repo: { type: 'string', description: 'Repository (owner/name)' },
|
|
189
|
+
dryRun: { type: 'boolean', description: 'Preview labels without creating/updating them', default: false },
|
|
190
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
191
|
+
},
|
|
192
|
+
required: ['repo'],
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
name: 'night-orch-delete-entry',
|
|
197
|
+
description: 'Delete local orchestrator state for an issue (runs, leases, worktree pointers) so it can be rediscovered fresh.',
|
|
198
|
+
inputSchema: {
|
|
199
|
+
type: 'object',
|
|
200
|
+
properties: {
|
|
201
|
+
repo: { type: 'string', description: 'Repository (owner/name)' },
|
|
202
|
+
issueNumber: { type: 'number', description: 'Issue number' },
|
|
203
|
+
force: { type: 'boolean', description: 'Delete even if a run is currently in running status', default: false },
|
|
204
|
+
dryRun: { type: 'boolean', description: 'Preview deletion counts without applying changes', default: false },
|
|
205
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
206
|
+
},
|
|
207
|
+
required: ['repo', 'issueNumber'],
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
name: 'night-orch-poll',
|
|
212
|
+
description: 'Manually trigger a single poll cycle — discovers eligible issues and processes them immediately.',
|
|
213
|
+
inputSchema: {
|
|
214
|
+
type: 'object',
|
|
215
|
+
properties: {
|
|
216
|
+
dryRun: { type: 'boolean', description: 'Preview what would be processed without doing it', default: false },
|
|
217
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
name: 'night-orch-list-issues',
|
|
223
|
+
description: 'List issues from a repo with their orchestrator state (eligible, running, blocked).',
|
|
224
|
+
inputSchema: {
|
|
225
|
+
type: 'object',
|
|
226
|
+
properties: {
|
|
227
|
+
repo: { type: 'string', description: 'Repository (owner/name)' },
|
|
228
|
+
filter: { type: 'string', description: 'Filter by state', enum: ['eligible', 'running', 'blocked', 'all'], default: 'all' },
|
|
229
|
+
},
|
|
230
|
+
required: ['repo'],
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
name: 'night-orch-stream-events',
|
|
235
|
+
description: 'Get recent in-flight agent events for a run.',
|
|
236
|
+
inputSchema: {
|
|
237
|
+
type: 'object',
|
|
238
|
+
properties: {
|
|
239
|
+
runId: { type: 'string', description: 'Run ID (e.g., run-abc123)' },
|
|
240
|
+
since: { type: 'number', description: 'Only return events with id > since' },
|
|
241
|
+
limit: { type: 'number', description: 'Max events (default: 50, max: 200)', default: 50 },
|
|
242
|
+
},
|
|
243
|
+
required: ['runId'],
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
name: 'night-orch-rebase',
|
|
248
|
+
description: 'Rebase a PR branch onto latest base and verify. Re-queues issue if verify fails post-rebase.',
|
|
249
|
+
inputSchema: {
|
|
250
|
+
type: 'object',
|
|
251
|
+
properties: {
|
|
252
|
+
repo: { type: 'string', description: 'Repository (owner/name)' },
|
|
253
|
+
issueNumber: { type: 'number', description: 'Issue number' },
|
|
254
|
+
check: { type: 'boolean', description: 'Run verify commands after rebase (default: true)', default: true },
|
|
255
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
256
|
+
},
|
|
257
|
+
required: ['repo', 'issueNumber'],
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
name: 'night-orch-continue',
|
|
262
|
+
description: 'Queue a second-pass continuation for a blocked/review_ready/error issue using fresh PR context (comments, CI, mergeability).',
|
|
263
|
+
inputSchema: {
|
|
264
|
+
type: 'object',
|
|
265
|
+
properties: {
|
|
266
|
+
repo: { type: 'string', description: 'Repository (owner/name)' },
|
|
267
|
+
issueNumber: { type: 'number', description: 'Issue number' },
|
|
268
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
269
|
+
},
|
|
270
|
+
required: ['repo', 'issueNumber'],
|
|
271
|
+
},
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: 'night-orch-update',
|
|
275
|
+
description: 'Trigger a self-update: pulls latest code, rebuilds, and restarts all services.',
|
|
276
|
+
inputSchema: {
|
|
277
|
+
type: 'object',
|
|
278
|
+
properties: {
|
|
279
|
+
authToken: { type: 'string', description: 'Required when mcp.authTokenEnv is configured' },
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
];
|
|
284
|
+
}
|
|
285
|
+
export async function handleToolCall(name, args, deps) {
|
|
286
|
+
const runtimeDeps = {
|
|
287
|
+
...deps,
|
|
288
|
+
config: resolveConfigWithRuntimeSettings(deps.config, deps.db),
|
|
289
|
+
};
|
|
290
|
+
switch (name) {
|
|
291
|
+
case 'night-orch-list-settings':
|
|
292
|
+
return handleListSettings(deps);
|
|
293
|
+
case 'night-orch-set-setting':
|
|
294
|
+
return handleSetSetting(args, deps);
|
|
295
|
+
case 'night-orch-clear-setting':
|
|
296
|
+
return handleClearSetting(args, deps);
|
|
297
|
+
case 'night-orch-status':
|
|
298
|
+
return handleStatus(args, runtimeDeps);
|
|
299
|
+
case 'night-orch-run-detail':
|
|
300
|
+
return handleRunDetail(args, runtimeDeps);
|
|
301
|
+
case 'night-orch-list-runs':
|
|
302
|
+
return handleListRuns(args, runtimeDeps);
|
|
303
|
+
case 'night-orch-cost-report':
|
|
304
|
+
return handleCostReport(args, runtimeDeps);
|
|
305
|
+
case 'night-orch-retry':
|
|
306
|
+
return handleRetry(args, runtimeDeps);
|
|
307
|
+
case 'night-orch-cost-override':
|
|
308
|
+
return handleCostOverride(args, runtimeDeps);
|
|
309
|
+
case 'night-orch-daily-cost-override':
|
|
310
|
+
return handleDailyCostOverride(args, runtimeDeps);
|
|
311
|
+
case 'night-orch-sync':
|
|
312
|
+
return handleSync(args, runtimeDeps);
|
|
313
|
+
case 'night-orch-cleanup':
|
|
314
|
+
return handleCleanup(args, runtimeDeps);
|
|
315
|
+
case 'night-orch-labels-init':
|
|
316
|
+
return handleLabelsInit(args, runtimeDeps);
|
|
317
|
+
case 'night-orch-delete-entry':
|
|
318
|
+
return handleDeleteEntry(args, runtimeDeps);
|
|
319
|
+
case 'night-orch-poll':
|
|
320
|
+
return handlePoll(args, runtimeDeps);
|
|
321
|
+
case 'night-orch-list-issues':
|
|
322
|
+
return handleListIssues(args, runtimeDeps);
|
|
323
|
+
case 'night-orch-stream-events':
|
|
324
|
+
return handleStreamEvents(args, runtimeDeps);
|
|
325
|
+
case 'night-orch-rebase':
|
|
326
|
+
return handleRebase(args, runtimeDeps);
|
|
327
|
+
case 'night-orch-continue':
|
|
328
|
+
return handleContinue(args, runtimeDeps);
|
|
329
|
+
case 'night-orch-update':
|
|
330
|
+
return handleUpdate(args, runtimeDeps);
|
|
331
|
+
default:
|
|
332
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
async function handleListSettings(deps) {
|
|
336
|
+
return {
|
|
337
|
+
settings: listRuntimeSettings(deps.config, deps.db),
|
|
338
|
+
};
|
|
339
|
+
}
|
|
340
|
+
async function handleSetSetting(args, deps) {
|
|
341
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
342
|
+
if (typeof args.key !== 'string' || args.key.trim().length === 0) {
|
|
343
|
+
throw new Error('key is required');
|
|
344
|
+
}
|
|
345
|
+
const result = setRuntimeSettingOverride(deps.config, deps.db, args.key.trim(), args.value, 'mcp');
|
|
346
|
+
return {
|
|
347
|
+
changed: result.changed,
|
|
348
|
+
setting: result.setting,
|
|
349
|
+
message: result.changed
|
|
350
|
+
? `Updated ${result.setting.key} to ${String(result.setting.effectiveValue)}`
|
|
351
|
+
: `${result.setting.key} unchanged`,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
async function handleClearSetting(args, deps) {
|
|
355
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
356
|
+
if (typeof args.key !== 'string' || args.key.trim().length === 0) {
|
|
357
|
+
throw new Error('key is required');
|
|
358
|
+
}
|
|
359
|
+
const result = clearRuntimeSettingOverride(deps.config, deps.db, args.key.trim());
|
|
360
|
+
return {
|
|
361
|
+
changed: result.changed,
|
|
362
|
+
setting: result.setting,
|
|
363
|
+
message: result.changed
|
|
364
|
+
? `Cleared override for ${result.setting.key}`
|
|
365
|
+
: `No override found for ${result.setting.key}`,
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
async function handleStatus(args, deps) {
|
|
369
|
+
const runManager = new RunManager(deps.db);
|
|
370
|
+
const costTracker = new CostTracker(deps.db);
|
|
371
|
+
const active = runManager.getActive();
|
|
372
|
+
const filtered = args.repo ? active.filter((r) => r.repo === args.repo) : active;
|
|
373
|
+
const dailyTokens = costTracker.getDailyTokenUsage();
|
|
374
|
+
// Recent completed runs
|
|
375
|
+
const recentSql = args.repo
|
|
376
|
+
? "SELECT * FROM runs WHERE status = 'completed' AND repo = ? ORDER BY updated_at DESC LIMIT 10"
|
|
377
|
+
: "SELECT * FROM runs WHERE status = 'completed' ORDER BY updated_at DESC LIMIT 10";
|
|
378
|
+
const recentRows = args.repo
|
|
379
|
+
? deps.db.prepare(recentSql).all(args.repo)
|
|
380
|
+
: deps.db.prepare(recentSql).all();
|
|
381
|
+
return {
|
|
382
|
+
activeRuns: filtered.length,
|
|
383
|
+
active: filtered.map((r) => ({
|
|
384
|
+
runId: r.id,
|
|
385
|
+
repo: r.repo,
|
|
386
|
+
issue: r.issueNumber,
|
|
387
|
+
status: r.status,
|
|
388
|
+
phase: r.currentPhase,
|
|
389
|
+
iteration: r.iterationCount,
|
|
390
|
+
})),
|
|
391
|
+
recentCompleted: recentRows.map((r) => ({
|
|
392
|
+
runId: r.id,
|
|
393
|
+
repo: r.repo,
|
|
394
|
+
issue: r.issue_number,
|
|
395
|
+
status: r.status,
|
|
396
|
+
endedAt: r.ended_at,
|
|
397
|
+
})),
|
|
398
|
+
dailyCostUsd: costTracker.getDailyCost(),
|
|
399
|
+
dailyPromptTokens: dailyTokens.promptTokens,
|
|
400
|
+
dailyCompletionTokens: dailyTokens.completionTokens,
|
|
401
|
+
dailyTotalTokens: dailyTokens.totalTokens,
|
|
402
|
+
configuredRepos: deps.config.repos.map((r) => r.repo),
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
async function handleRunDetail(args, deps) {
|
|
406
|
+
const runManager = new RunManager(deps.db);
|
|
407
|
+
const run = runManager.getById(args.runId);
|
|
408
|
+
if (!run)
|
|
409
|
+
throw new Error(`Run not found: ${args.runId}`);
|
|
410
|
+
// Get events for this run
|
|
411
|
+
const events = deps.db
|
|
412
|
+
.prepare('SELECT event_type, phase, data, created_at FROM events WHERE run_id = ? ORDER BY created_at DESC LIMIT 50')
|
|
413
|
+
.all(args.runId);
|
|
414
|
+
return {
|
|
415
|
+
...run,
|
|
416
|
+
events: events.map((e) => ({
|
|
417
|
+
type: e.event_type,
|
|
418
|
+
phase: e.phase,
|
|
419
|
+
data: parseEventData(e.data),
|
|
420
|
+
at: e.created_at,
|
|
421
|
+
})),
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
async function handleListRuns(args, deps) {
|
|
425
|
+
const limit = normalizeListRunsLimit(args.limit);
|
|
426
|
+
if (args.status === 'completed') {
|
|
427
|
+
const rows = queryCompletedRuns(deps, args.repo, limit);
|
|
428
|
+
return {
|
|
429
|
+
count: rows.length,
|
|
430
|
+
runs: rows.map((row) => ({
|
|
431
|
+
runId: row.id,
|
|
432
|
+
hasRun: true,
|
|
433
|
+
repo: row.repo,
|
|
434
|
+
issue: row.issue_number,
|
|
435
|
+
status: row.status,
|
|
436
|
+
issueTitle: row.issue_title,
|
|
437
|
+
prNumber: row.pr_number,
|
|
438
|
+
phase: row.current_phase,
|
|
439
|
+
iterations: row.iteration_count ?? 0,
|
|
440
|
+
costUsd: row.estimated_cost_usd ?? 0,
|
|
441
|
+
lastError: row.last_error,
|
|
442
|
+
startedAt: row.started_at,
|
|
443
|
+
endedAt: row.ended_at,
|
|
444
|
+
})),
|
|
445
|
+
};
|
|
446
|
+
}
|
|
447
|
+
const filteredRows = loadRuns(deps.db, {
|
|
448
|
+
limit,
|
|
449
|
+
repo: args.repo,
|
|
450
|
+
status: args.status,
|
|
451
|
+
});
|
|
452
|
+
const runTimings = loadRunTimingsByRunId(deps, filteredRows
|
|
453
|
+
.map((row) => row.id)
|
|
454
|
+
.filter((runId) => !runId.startsWith('issue:')));
|
|
455
|
+
return {
|
|
456
|
+
count: filteredRows.length,
|
|
457
|
+
runs: filteredRows.map((row) => {
|
|
458
|
+
const hasRun = !row.id.startsWith('issue:');
|
|
459
|
+
const timing = hasRun ? runTimings.get(row.id) : undefined;
|
|
460
|
+
return {
|
|
461
|
+
runId: row.id,
|
|
462
|
+
hasRun,
|
|
463
|
+
repo: row.repo,
|
|
464
|
+
issue: row.issue_number,
|
|
465
|
+
status: row.status,
|
|
466
|
+
issueTitle: row.issue_title,
|
|
467
|
+
prNumber: row.pr_number,
|
|
468
|
+
phase: row.current_phase,
|
|
469
|
+
iterations: row.iteration_count ?? 0,
|
|
470
|
+
costUsd: row.estimated_cost_usd ?? 0,
|
|
471
|
+
lastError: row.last_error,
|
|
472
|
+
startedAt: hasRun ? timing?.started_at ?? null : null,
|
|
473
|
+
endedAt: hasRun ? timing?.ended_at ?? null : null,
|
|
474
|
+
};
|
|
475
|
+
}),
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
function queryCompletedRuns(deps, repo, limit) {
|
|
479
|
+
const params = [];
|
|
480
|
+
const repoClause = repo ? 'AND repo = ?' : '';
|
|
481
|
+
if (repo) {
|
|
482
|
+
params.push(repo);
|
|
483
|
+
}
|
|
484
|
+
params.push(limit);
|
|
485
|
+
return deps.db
|
|
486
|
+
.prepare(`SELECT
|
|
487
|
+
id,
|
|
488
|
+
repo,
|
|
489
|
+
issue_number,
|
|
490
|
+
status,
|
|
491
|
+
issue_title,
|
|
492
|
+
pr_number,
|
|
493
|
+
current_phase,
|
|
494
|
+
iteration_count,
|
|
495
|
+
estimated_cost_usd,
|
|
496
|
+
last_error,
|
|
497
|
+
started_at,
|
|
498
|
+
ended_at
|
|
499
|
+
FROM runs
|
|
500
|
+
WHERE status = 'completed'
|
|
501
|
+
${repoClause}
|
|
502
|
+
ORDER BY
|
|
503
|
+
COALESCE(julianday(created_at), 0) DESC,
|
|
504
|
+
COALESCE(julianday(updated_at), 0) DESC,
|
|
505
|
+
id DESC
|
|
506
|
+
LIMIT ?`)
|
|
507
|
+
.all(...params);
|
|
508
|
+
}
|
|
509
|
+
function loadRunTimingsByRunId(deps, runIds) {
|
|
510
|
+
const uniqueRunIds = [...new Set(runIds)];
|
|
511
|
+
if (uniqueRunIds.length === 0) {
|
|
512
|
+
return new Map();
|
|
513
|
+
}
|
|
514
|
+
const placeholders = uniqueRunIds.map(() => '?').join(', ');
|
|
515
|
+
const rows = deps.db
|
|
516
|
+
.prepare(`SELECT id, started_at, ended_at FROM runs WHERE id IN (${placeholders})`)
|
|
517
|
+
.all(...uniqueRunIds);
|
|
518
|
+
return new Map(rows.map((row) => [row.id, row]));
|
|
519
|
+
}
|
|
520
|
+
function normalizeListRunsLimit(limit) {
|
|
521
|
+
if (typeof limit !== 'number' || !Number.isFinite(limit)) {
|
|
522
|
+
return 20;
|
|
523
|
+
}
|
|
524
|
+
return Math.min(500, Math.max(1, Math.floor(limit)));
|
|
525
|
+
}
|
|
526
|
+
async function handleCostReport(args, deps) {
|
|
527
|
+
const days = args.days ?? 7;
|
|
528
|
+
const costModel = deps.config.cost?.model ?? 'pay-per-use';
|
|
529
|
+
const costTracker = new CostTracker(deps.db);
|
|
530
|
+
const dailyBudgetOverrideUsd = costTracker.getDailyCapOverride();
|
|
531
|
+
const effectiveDailyBudgetUsd = dailyBudgetOverrideUsd ?? deps.config.security.maxDailyCostUsd;
|
|
532
|
+
const rows = deps.db
|
|
533
|
+
.prepare(`SELECT
|
|
534
|
+
date,
|
|
535
|
+
total_cost_usd,
|
|
536
|
+
run_count,
|
|
537
|
+
total_prompt_tokens,
|
|
538
|
+
total_completion_tokens
|
|
539
|
+
FROM daily_costs
|
|
540
|
+
ORDER BY date DESC
|
|
541
|
+
LIMIT ?`)
|
|
542
|
+
.all(days);
|
|
543
|
+
const totalCost = rows.reduce((sum, r) => sum + r.total_cost_usd, 0);
|
|
544
|
+
const totalRuns = rows.reduce((sum, r) => sum + r.run_count, 0);
|
|
545
|
+
const totalPromptTokens = rows.reduce((sum, r) => sum + r.total_prompt_tokens, 0);
|
|
546
|
+
const totalCompletionTokens = rows.reduce((sum, r) => sum + r.total_completion_tokens, 0);
|
|
547
|
+
return {
|
|
548
|
+
model: costModel,
|
|
549
|
+
period: `Last ${days} days`,
|
|
550
|
+
totalCostUsd: Math.round(totalCost * 100) / 100,
|
|
551
|
+
totalRuns,
|
|
552
|
+
totalPromptTokens,
|
|
553
|
+
totalCompletionTokens,
|
|
554
|
+
totalTokens: totalPromptTokens + totalCompletionTokens,
|
|
555
|
+
dailyBudgetUsd: deps.config.security.maxDailyCostUsd,
|
|
556
|
+
dailyBudgetOverrideUsd,
|
|
557
|
+
effectiveDailyBudgetUsd,
|
|
558
|
+
budgetUtilizationPct: rows.length > 0
|
|
559
|
+
? Math.round((rows[0].total_cost_usd / effectiveDailyBudgetUsd) * 100)
|
|
560
|
+
: 0,
|
|
561
|
+
daily: rows.map((row) => ({
|
|
562
|
+
date: row.date,
|
|
563
|
+
totalCostUsd: row.total_cost_usd,
|
|
564
|
+
runCount: row.run_count,
|
|
565
|
+
promptTokens: row.total_prompt_tokens,
|
|
566
|
+
completionTokens: row.total_completion_tokens,
|
|
567
|
+
totalTokens: row.total_prompt_tokens + row.total_completion_tokens,
|
|
568
|
+
})),
|
|
569
|
+
};
|
|
570
|
+
}
|
|
571
|
+
async function handleRetry(args, deps) {
|
|
572
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
573
|
+
const fresh = args.fresh ?? false;
|
|
574
|
+
const engine = new RetryEngine(deps.db, deps.config);
|
|
575
|
+
await engine.retry(args.repo, args.issueNumber, {
|
|
576
|
+
resetPlan: args.resetPlan ?? fresh,
|
|
577
|
+
resetBranch: fresh,
|
|
578
|
+
dryRun: false,
|
|
579
|
+
immediate: false,
|
|
580
|
+
});
|
|
581
|
+
const suffix = fresh ? ' (fresh start — branch will be reset)' : '';
|
|
582
|
+
return { success: true, message: `Retry queued for ${args.repo}#${args.issueNumber}${suffix}` };
|
|
583
|
+
}
|
|
584
|
+
async function handleCostOverride(args, deps) {
|
|
585
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
586
|
+
const clear = args.clear ?? false;
|
|
587
|
+
if (clear && args.amountUsd !== undefined) {
|
|
588
|
+
throw new Error('cost-override: cannot pass amountUsd together with clear:true');
|
|
589
|
+
}
|
|
590
|
+
if (!clear && (typeof args.amountUsd !== 'number' || !Number.isFinite(args.amountUsd) || args.amountUsd <= 0)) {
|
|
591
|
+
throw new Error('cost-override: amountUsd must be a positive finite number (or set clear:true to remove)');
|
|
592
|
+
}
|
|
593
|
+
const overrideUsd = clear ? null : args.amountUsd;
|
|
594
|
+
const result = setIssueCostOverride(deps.db, args.repo, args.issueNumber, overrideUsd);
|
|
595
|
+
return {
|
|
596
|
+
success: true,
|
|
597
|
+
runId: result.runId,
|
|
598
|
+
previousOverrideUsd: result.previousOverrideUsd,
|
|
599
|
+
overrideUsd: result.overrideUsd,
|
|
600
|
+
message: overrideUsd === null
|
|
601
|
+
? `Cleared cost override for ${args.repo}#${args.issueNumber} (run ${result.runId})`
|
|
602
|
+
: `Set cost override for ${args.repo}#${args.issueNumber} (run ${result.runId}) to $${overrideUsd.toFixed(2)}; daily cap bypassed for this run.`,
|
|
603
|
+
};
|
|
604
|
+
}
|
|
605
|
+
async function handleDailyCostOverride(args, deps) {
|
|
606
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
607
|
+
const clear = args.clear ?? false;
|
|
608
|
+
if (clear && args.amountUsd !== undefined) {
|
|
609
|
+
throw new Error('daily-cost-override: cannot pass amountUsd together with clear:true');
|
|
610
|
+
}
|
|
611
|
+
if (!clear && (typeof args.amountUsd !== 'number' || !Number.isFinite(args.amountUsd) || args.amountUsd <= 0)) {
|
|
612
|
+
throw new Error('daily-cost-override: amountUsd must be a positive finite number (or set clear:true to remove)');
|
|
613
|
+
}
|
|
614
|
+
const overrideUsd = clear ? null : args.amountUsd;
|
|
615
|
+
const result = setDailyCostCapOverride(deps.db, overrideUsd);
|
|
616
|
+
return {
|
|
617
|
+
success: true,
|
|
618
|
+
date: result.date,
|
|
619
|
+
previousUsd: result.previousUsd,
|
|
620
|
+
overrideUsd: result.overrideUsd,
|
|
621
|
+
message: overrideUsd === null
|
|
622
|
+
? `Cleared daily cost cap override for ${result.date}; base cap applies.`
|
|
623
|
+
: `Set daily cost cap override for ${result.date} to $${overrideUsd.toFixed(2)}; auto-expires at 00:00 UTC.`,
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
async function handleSync(args, deps) {
|
|
627
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
628
|
+
const engine = new SyncEngine(deps.db, deps.config);
|
|
629
|
+
return engine.reconcile(args.dryRun ?? false);
|
|
630
|
+
}
|
|
631
|
+
async function handleCleanup(args, deps) {
|
|
632
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
633
|
+
const engine = new CleanupEngine(deps.db, deps.config);
|
|
634
|
+
return engine.run({ dryRun: args.dryRun ?? false });
|
|
635
|
+
}
|
|
636
|
+
async function handleLabelsInit(args, deps) {
|
|
637
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
638
|
+
if (!args.repo) {
|
|
639
|
+
throw new Error('repo is required');
|
|
640
|
+
}
|
|
641
|
+
const engine = new LabelsInitEngine(deps.config);
|
|
642
|
+
const result = await engine.run({
|
|
643
|
+
targetRepo: args.repo,
|
|
644
|
+
dryRun: args.dryRun ?? false,
|
|
645
|
+
});
|
|
646
|
+
return {
|
|
647
|
+
...result,
|
|
648
|
+
message: formatLabelsInitSummary(result),
|
|
649
|
+
};
|
|
650
|
+
}
|
|
651
|
+
async function handleDeleteEntry(args, deps) {
|
|
652
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
653
|
+
const engine = new DeleteIssueEntryEngine(deps.db, deps.config);
|
|
654
|
+
return engine.deleteEntry(args.repo, args.issueNumber, {
|
|
655
|
+
dryRun: args.dryRun ?? false,
|
|
656
|
+
force: args.force ?? false,
|
|
657
|
+
});
|
|
658
|
+
}
|
|
659
|
+
async function handlePoll(args, deps) {
|
|
660
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
661
|
+
if (deps.poller && !(args.dryRun ?? false)) {
|
|
662
|
+
const trigger = deps.poller.triggerPollCycle();
|
|
663
|
+
return {
|
|
664
|
+
success: true,
|
|
665
|
+
queued: true,
|
|
666
|
+
state: trigger.state,
|
|
667
|
+
processed: null,
|
|
668
|
+
errors: null,
|
|
669
|
+
message: trigger.state === 'woke-sleeper'
|
|
670
|
+
? 'Triggered immediate poll cycle on running headless poller'
|
|
671
|
+
: trigger.state === 'queued-next-cycle'
|
|
672
|
+
? 'Queued immediate poll cycle after current run finishes'
|
|
673
|
+
: 'Manual poll already pending; no additional cycle queued',
|
|
674
|
+
};
|
|
675
|
+
}
|
|
676
|
+
const result = await pollOnce(deps.config, deps.db, args.dryRun ?? false);
|
|
677
|
+
return {
|
|
678
|
+
success: true,
|
|
679
|
+
processed: result.processed,
|
|
680
|
+
errors: result.errors,
|
|
681
|
+
message: result.processed === 0
|
|
682
|
+
? 'No eligible issues found'
|
|
683
|
+
: `Processed ${result.processed} issue(s), ${result.errors} error(s)`,
|
|
684
|
+
};
|
|
685
|
+
}
|
|
686
|
+
async function handleListIssues(args, deps) {
|
|
687
|
+
const adapter = deps.forgeAdapters.get(args.repo);
|
|
688
|
+
if (!adapter) {
|
|
689
|
+
throw new Error(`No forge adapter configured for repo: ${args.repo}`);
|
|
690
|
+
}
|
|
691
|
+
const repoConfig = deps.config.repos.find((r) => r.repo === args.repo);
|
|
692
|
+
if (!repoConfig) {
|
|
693
|
+
throw new Error(`Repo not found in config: ${args.repo}`);
|
|
694
|
+
}
|
|
695
|
+
const issues = (await adapter.listEligibleIssues(repoConfig))
|
|
696
|
+
.filter((issue) => isIssueEligibleForRepo(issue, repoConfig));
|
|
697
|
+
const runManager = new RunManager(deps.db);
|
|
698
|
+
const filter = args.filter ?? 'all';
|
|
699
|
+
const enriched = issues.map((issue) => {
|
|
700
|
+
const run = runManager.getByRepoAndIssue(args.repo, issue.number);
|
|
701
|
+
let orchState;
|
|
702
|
+
if (run && (run.status === 'queued' || run.status === 'running')) {
|
|
703
|
+
orchState = 'running';
|
|
704
|
+
}
|
|
705
|
+
else if (run && (run.status === 'blocked' || run.status === 'error')) {
|
|
706
|
+
orchState = 'blocked';
|
|
707
|
+
}
|
|
708
|
+
else {
|
|
709
|
+
orchState = 'eligible';
|
|
710
|
+
}
|
|
711
|
+
return {
|
|
712
|
+
number: issue.number,
|
|
713
|
+
title: issue.title,
|
|
714
|
+
labels: issue.labels,
|
|
715
|
+
state: orchState,
|
|
716
|
+
runId: run?.id ?? null,
|
|
717
|
+
runStatus: run?.status ?? null,
|
|
718
|
+
url: issue.url,
|
|
719
|
+
};
|
|
720
|
+
});
|
|
721
|
+
const filtered = filter === 'all'
|
|
722
|
+
? enriched
|
|
723
|
+
: enriched.filter((i) => i.state === filter);
|
|
724
|
+
return {
|
|
725
|
+
repo: args.repo,
|
|
726
|
+
count: filtered.length,
|
|
727
|
+
issues: filtered,
|
|
728
|
+
};
|
|
729
|
+
}
|
|
730
|
+
function parseEventData(data) {
|
|
731
|
+
if (!data)
|
|
732
|
+
return null;
|
|
733
|
+
try {
|
|
734
|
+
return JSON.parse(data);
|
|
735
|
+
}
|
|
736
|
+
catch {
|
|
737
|
+
return { raw: data, parseError: 'Invalid JSON in stored event payload' };
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
async function handleStreamEvents(args, deps) {
|
|
741
|
+
if (!args.runId) {
|
|
742
|
+
throw new Error('runId is required');
|
|
743
|
+
}
|
|
744
|
+
const since = Math.max(0, Math.floor(args.since ?? 0));
|
|
745
|
+
const requestedLimit = Math.floor(args.limit ?? 50);
|
|
746
|
+
const limit = Math.min(200, Math.max(1, requestedLimit));
|
|
747
|
+
// Flush buffered in-memory events to DB so callers can poll near-real-time.
|
|
748
|
+
flushActiveAgentObservability();
|
|
749
|
+
const rows = since > 0
|
|
750
|
+
? deps.db
|
|
751
|
+
.prepare(`SELECT id, run_id, phase, role, event_type, data, created_at
|
|
752
|
+
FROM agent_events
|
|
753
|
+
WHERE run_id = ? AND id > ?
|
|
754
|
+
ORDER BY id ASC
|
|
755
|
+
LIMIT ?`)
|
|
756
|
+
.all(args.runId, since, limit)
|
|
757
|
+
: deps.db
|
|
758
|
+
.prepare(`SELECT id, run_id, phase, role, event_type, data, created_at
|
|
759
|
+
FROM agent_events
|
|
760
|
+
WHERE run_id = ?
|
|
761
|
+
ORDER BY id ASC
|
|
762
|
+
LIMIT ?`)
|
|
763
|
+
.all(args.runId, limit);
|
|
764
|
+
const lastEventId = rows.length > 0 ? rows[rows.length - 1].id : since;
|
|
765
|
+
return {
|
|
766
|
+
runId: args.runId,
|
|
767
|
+
events: rows.map((row) => ({
|
|
768
|
+
id: row.id,
|
|
769
|
+
runId: row.run_id,
|
|
770
|
+
phase: row.phase,
|
|
771
|
+
role: row.role,
|
|
772
|
+
type: row.event_type,
|
|
773
|
+
data: parseEventData(row.data),
|
|
774
|
+
timestamp: row.created_at,
|
|
775
|
+
})),
|
|
776
|
+
lastEventId,
|
|
777
|
+
};
|
|
778
|
+
}
|
|
779
|
+
async function handleRebase(args, deps) {
|
|
780
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
781
|
+
const repoConfig = deps.config.repos.find((r) => r.repo === args.repo);
|
|
782
|
+
if (!repoConfig)
|
|
783
|
+
throw new Error(`Repository not found: ${args.repo}`);
|
|
784
|
+
const forge = createForgeAdapter(repoConfig, deps.config);
|
|
785
|
+
let botUser = '';
|
|
786
|
+
try {
|
|
787
|
+
const auth = await forge.validateAuth();
|
|
788
|
+
botUser = auth.user;
|
|
789
|
+
}
|
|
790
|
+
catch { /* best effort */ }
|
|
791
|
+
const { queueRebase } = await import('../../ops/rebase-and-check.js');
|
|
792
|
+
const result = await queueRebase(deps.db, forge, repoConfig, args.issueNumber, botUser);
|
|
793
|
+
return {
|
|
794
|
+
queued: result.queued,
|
|
795
|
+
reason: result.reason,
|
|
796
|
+
};
|
|
797
|
+
}
|
|
798
|
+
async function handleContinue(args, deps) {
|
|
799
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
800
|
+
const repoConfig = deps.config.repos.find((r) => r.repo === args.repo);
|
|
801
|
+
if (!repoConfig)
|
|
802
|
+
throw new Error(`Repository not found: ${args.repo}`);
|
|
803
|
+
const forge = createForgeAdapter(repoConfig, deps.config);
|
|
804
|
+
let botUser = '';
|
|
805
|
+
try {
|
|
806
|
+
const auth = await forge.validateAuth();
|
|
807
|
+
botUser = auth.user;
|
|
808
|
+
}
|
|
809
|
+
catch { /* best effort */ }
|
|
810
|
+
const result = await queueContinue(deps.db, forge, repoConfig, args.issueNumber, botUser);
|
|
811
|
+
return {
|
|
812
|
+
queued: result.queued,
|
|
813
|
+
reason: result.reason,
|
|
814
|
+
};
|
|
815
|
+
}
|
|
816
|
+
async function handleUpdate(args, deps) {
|
|
817
|
+
assertMcpMutationAuth(args.authToken, deps);
|
|
818
|
+
// Try IPC first (running under supervisor)
|
|
819
|
+
if (typeof process.send === 'function') {
|
|
820
|
+
process.send({ type: 'update-requested' });
|
|
821
|
+
return { accepted: true, method: 'ipc' };
|
|
822
|
+
}
|
|
823
|
+
// Fallback: trigger file
|
|
824
|
+
const dataDir = resolve(homedir(), '.config', 'night-orch');
|
|
825
|
+
const triggerPath = resolve(dataDir, 'update-requested');
|
|
826
|
+
mkdirSync(dataDir, { recursive: true });
|
|
827
|
+
writeFileSync(triggerPath, nowUtcIso());
|
|
828
|
+
return { accepted: true, method: 'trigger-file' };
|
|
829
|
+
}
|
|
830
|
+
function assertMcpMutationAuth(providedToken, deps) {
|
|
831
|
+
const tokenEnv = deps.config.mcp.authTokenEnv;
|
|
832
|
+
if (!tokenEnv)
|
|
833
|
+
return;
|
|
834
|
+
const expectedToken = process.env[tokenEnv];
|
|
835
|
+
if (!expectedToken) {
|
|
836
|
+
throw new Error(`MCP auth token env var ${tokenEnv} is configured but not set`);
|
|
837
|
+
}
|
|
838
|
+
if (!providedToken || !isMatchingMcpToken(providedToken, expectedToken)) {
|
|
839
|
+
throw new Error('Unauthorized: missing or invalid MCP auth token');
|
|
840
|
+
}
|
|
841
|
+
}
|
|
842
|
+
function isMatchingMcpToken(providedToken, expectedToken) {
|
|
843
|
+
const providedHash = createHash('sha256').update(providedToken).digest();
|
|
844
|
+
const expectedHash = createHash('sha256').update(expectedToken).digest();
|
|
845
|
+
return timingSafeEqual(providedHash, expectedHash);
|
|
846
|
+
}
|
|
847
|
+
//# sourceMappingURL=index.js.map
|