lastlight 0.1.8 → 0.2.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 +265 -118
- package/agent-context/rules.md +62 -9
- package/agent-context/security.md +69 -0
- package/config/default.yaml +89 -0
- package/deploy/.env.production.example +20 -2
- package/deploy/entrypoint.sh +16 -17
- package/deploy/native/README.md +160 -0
- package/deploy/native/install.sh +110 -0
- package/deploy/native/lastlight.env.example +95 -0
- package/deploy/native/lastlight.service +50 -0
- package/deploy/sandbox-entrypoint.sh +59 -42
- package/dist/admin/auth.d.ts +1 -1
- package/dist/admin/auth.js +3 -1
- package/dist/admin/auth.js.map +1 -1
- package/dist/admin/chat-session-reader.d.ts +11 -14
- package/dist/admin/chat-session-reader.js +27 -51
- package/dist/admin/chat-session-reader.js.map +1 -1
- package/dist/admin/docker.d.ts +37 -0
- package/dist/admin/docker.js +86 -1
- package/dist/admin/docker.js.map +1 -1
- package/dist/admin/index.js +38 -3
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/log-search.test.d.ts +1 -0
- package/dist/admin/log-search.test.js +78 -0
- package/dist/admin/log-search.test.js.map +1 -0
- package/dist/admin/routes.d.ts +52 -3
- package/dist/admin/routes.js +780 -63
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/routes.test.js +680 -14
- package/dist/admin/routes.test.js.map +1 -1
- package/dist/admin/server-logs.test.d.ts +1 -0
- package/dist/admin/server-logs.test.js +58 -0
- package/dist/admin/server-logs.test.js.map +1 -0
- package/dist/admin/sessions.d.ts +26 -39
- package/dist/admin/sessions.js +86 -310
- package/dist/admin/sessions.js.map +1 -1
- package/dist/admin/sessions.test.d.ts +1 -0
- package/dist/admin/sessions.test.js +78 -0
- package/dist/admin/sessions.test.js.map +1 -0
- package/dist/admin/version.d.ts +15 -0
- package/dist/admin/version.js +73 -0
- package/dist/admin/version.js.map +1 -0
- package/dist/admin/version.test.d.ts +1 -0
- package/dist/admin/version.test.js +71 -0
- package/dist/admin/version.test.js.map +1 -0
- package/dist/cli-config.d.ts +55 -0
- package/dist/cli-config.js +119 -0
- package/dist/cli-config.js.map +1 -0
- package/dist/cli-config.test.d.ts +1 -0
- package/dist/cli-config.test.js +92 -0
- package/dist/cli-config.test.js.map +1 -0
- package/dist/cli-format.d.ts +19 -0
- package/dist/cli-format.js +107 -0
- package/dist/cli-format.js.map +1 -0
- package/dist/cli-server.d.ts +73 -0
- package/dist/cli-server.js +347 -0
- package/dist/cli-server.js.map +1 -0
- package/dist/cli-server.test.d.ts +1 -0
- package/dist/cli-server.test.js +38 -0
- package/dist/cli-server.test.js.map +1 -0
- package/dist/cli-timeline.d.ts +35 -0
- package/dist/cli-timeline.js +373 -0
- package/dist/cli-timeline.js.map +1 -0
- package/dist/cli-timeline.test.d.ts +1 -0
- package/dist/cli-timeline.test.js +104 -0
- package/dist/cli-timeline.test.js.map +1 -0
- package/dist/cli.d.ts +0 -19
- package/dist/cli.js +910 -194
- package/dist/cli.js.map +1 -1
- package/dist/config-overlay.test.d.ts +1 -0
- package/dist/config-overlay.test.js +112 -0
- package/dist/config-overlay.test.js.map +1 -0
- package/dist/config-resolve.d.ts +28 -0
- package/dist/config-resolve.js +47 -0
- package/dist/config-resolve.js.map +1 -0
- package/dist/config-resolve.test.d.ts +1 -0
- package/dist/config-resolve.test.js +68 -0
- package/dist/config-resolve.test.js.map +1 -0
- package/dist/config.d.ts +62 -49
- package/dist/config.js +452 -76
- package/dist/config.js.map +1 -1
- package/dist/config.test.js +201 -32
- package/dist/config.test.js.map +1 -1
- package/dist/connectors/github-webhook.js +83 -5
- package/dist/connectors/github-webhook.js.map +1 -1
- package/dist/connectors/github-webhook.test.d.ts +1 -0
- package/dist/connectors/github-webhook.test.js +156 -0
- package/dist/connectors/github-webhook.test.js.map +1 -0
- package/dist/connectors/messaging/session-manager.d.ts +18 -0
- package/dist/connectors/messaging/session-manager.js +83 -2
- package/dist/connectors/messaging/session-manager.js.map +1 -1
- package/dist/connectors/messaging/session-manager.test.d.ts +1 -0
- package/dist/connectors/messaging/session-manager.test.js +144 -0
- package/dist/connectors/messaging/session-manager.test.js.map +1 -0
- package/dist/connectors/slack/connector.d.ts +9 -0
- package/dist/connectors/slack/connector.js +15 -0
- package/dist/connectors/slack/connector.js.map +1 -1
- package/dist/connectors/slack/mrkdwn.js +81 -0
- package/dist/connectors/slack/mrkdwn.js.map +1 -1
- package/dist/connectors/slack/mrkdwn.test.js +49 -0
- package/dist/connectors/slack/mrkdwn.test.js.map +1 -1
- package/dist/connectors/types.d.ts +1 -1
- package/dist/cron/fanout.d.ts +33 -0
- package/dist/cron/fanout.js +55 -0
- package/dist/cron/fanout.js.map +1 -0
- package/dist/cron/fanout.test.d.ts +1 -0
- package/dist/cron/fanout.test.js +73 -0
- package/dist/cron/fanout.test.js.map +1 -0
- package/dist/cron/jobs.d.ts +5 -0
- package/dist/cron/jobs.js +10 -3
- package/dist/cron/jobs.js.map +1 -1
- package/dist/cron/scheduler.d.ts +12 -0
- package/dist/cron/scheduler.js +27 -1
- package/dist/cron/scheduler.js.map +1 -1
- package/dist/engine/agent-executor.d.ts +158 -0
- package/dist/engine/agent-executor.js +1140 -0
- package/dist/engine/agent-executor.js.map +1 -0
- package/dist/engine/agent-executor.test.d.ts +1 -0
- package/dist/engine/agent-executor.test.js +395 -0
- package/dist/engine/agent-executor.test.js.map +1 -0
- package/dist/engine/chat-runner.d.ts +123 -0
- package/dist/engine/chat-runner.js +379 -0
- package/dist/engine/chat-runner.js.map +1 -0
- package/dist/engine/chat-runner.test.d.ts +1 -0
- package/dist/engine/chat-runner.test.js +104 -0
- package/dist/engine/chat-runner.test.js.map +1 -0
- package/dist/engine/chat-skills.d.ts +45 -0
- package/dist/engine/chat-skills.js +184 -0
- package/dist/engine/chat-skills.js.map +1 -0
- package/dist/engine/chat-skills.test.d.ts +1 -0
- package/dist/engine/chat-skills.test.js +20 -0
- package/dist/engine/chat-skills.test.js.map +1 -0
- package/dist/engine/chat.d.ts +20 -23
- package/dist/engine/chat.js +251 -155
- package/dist/engine/chat.js.map +1 -1
- package/dist/engine/chat.test.d.ts +1 -0
- package/dist/engine/chat.test.js +42 -0
- package/dist/engine/chat.test.js.map +1 -0
- package/dist/engine/classifier.d.ts +35 -2
- package/dist/engine/classifier.js +170 -31
- package/dist/engine/classifier.js.map +1 -1
- package/dist/engine/classifier.test.d.ts +1 -0
- package/dist/engine/classifier.test.js +115 -0
- package/dist/engine/classifier.test.js.map +1 -0
- package/dist/engine/dispatcher.d.ts +60 -0
- package/dist/engine/dispatcher.js +601 -0
- package/dist/engine/dispatcher.js.map +1 -0
- package/dist/engine/dispatcher.test.d.ts +1 -0
- package/dist/engine/dispatcher.test.js +511 -0
- package/dist/engine/dispatcher.test.js.map +1 -0
- package/dist/engine/event-shim.d.ts +117 -0
- package/dist/engine/event-shim.js +435 -0
- package/dist/engine/event-shim.js.map +1 -0
- package/dist/engine/event-shim.test.d.ts +1 -0
- package/dist/engine/event-shim.test.js +194 -0
- package/dist/engine/event-shim.test.js.map +1 -0
- package/dist/engine/git-auth.d.ts +13 -17
- package/dist/engine/git-auth.js +99 -42
- package/dist/engine/git-auth.js.map +1 -1
- package/dist/engine/git-auth.test.d.ts +1 -0
- package/dist/engine/git-auth.test.js +117 -0
- package/dist/engine/git-auth.test.js.map +1 -0
- package/dist/engine/github-app-client.d.ts +7 -0
- package/dist/engine/github-app-client.js +16 -0
- package/dist/engine/github-app-client.js.map +1 -0
- package/dist/engine/github-app-client.test.d.ts +1 -0
- package/dist/engine/github-app-client.test.js +44 -0
- package/dist/engine/github-app-client.test.js.map +1 -0
- package/dist/engine/github-tools.d.ts +12 -0
- package/dist/engine/github-tools.js +261 -0
- package/dist/engine/github-tools.js.map +1 -0
- package/dist/engine/github.d.ts +1027 -43
- package/dist/engine/github.js +153 -14
- package/dist/engine/github.js.map +1 -1
- package/dist/engine/llm.d.ts +47 -0
- package/dist/engine/llm.js +221 -0
- package/dist/engine/llm.js.map +1 -0
- package/dist/engine/llm.test.d.ts +1 -0
- package/dist/engine/llm.test.js +189 -0
- package/dist/engine/llm.test.js.map +1 -0
- package/dist/engine/profiles.d.ts +249 -0
- package/dist/engine/profiles.js +42 -0
- package/dist/engine/profiles.js.map +1 -0
- package/dist/engine/router.d.ts +12 -6
- package/dist/engine/router.js +339 -81
- package/dist/engine/router.js.map +1 -1
- package/dist/engine/router.test.js +428 -78
- package/dist/engine/router.test.js.map +1 -1
- package/dist/engine/screen.d.ts +41 -0
- package/dist/engine/screen.js +93 -0
- package/dist/engine/screen.js.map +1 -0
- package/dist/engine/screen.test.d.ts +1 -0
- package/dist/engine/screen.test.js +82 -0
- package/dist/engine/screen.test.js.map +1 -0
- package/dist/index.js +423 -437
- package/dist/index.js.map +1 -1
- package/dist/managed-repos.d.ts +7 -9
- package/dist/managed-repos.js +12 -15
- package/dist/managed-repos.js.map +1 -1
- package/dist/managed-repos.test.js +24 -19
- package/dist/managed-repos.test.js.map +1 -1
- package/dist/notify/index.d.ts +15 -0
- package/dist/notify/index.js +6 -0
- package/dist/notify/index.js.map +1 -0
- package/dist/notify/model.d.ts +57 -0
- package/dist/notify/model.js +89 -0
- package/dist/notify/model.js.map +1 -0
- package/dist/notify/model.test.d.ts +1 -0
- package/dist/notify/model.test.js +109 -0
- package/dist/notify/model.test.js.map +1 -0
- package/dist/notify/notifier.d.ts +17 -0
- package/dist/notify/notifier.js +87 -0
- package/dist/notify/notifier.js.map +1 -0
- package/dist/notify/notifier.test.d.ts +1 -0
- package/dist/notify/notifier.test.js +100 -0
- package/dist/notify/notifier.test.js.map +1 -0
- package/dist/notify/render.d.ts +21 -0
- package/dist/notify/render.js +59 -0
- package/dist/notify/render.js.map +1 -0
- package/dist/notify/render.test.d.ts +1 -0
- package/dist/notify/render.test.js +65 -0
- package/dist/notify/render.test.js.map +1 -0
- package/dist/notify/transports/github.d.ts +26 -0
- package/dist/notify/transports/github.js +26 -0
- package/dist/notify/transports/github.js.map +1 -0
- package/dist/notify/transports/slack.d.ts +26 -0
- package/dist/notify/transports/slack.js +28 -0
- package/dist/notify/transports/slack.js.map +1 -0
- package/dist/notify/transports.test.d.ts +1 -0
- package/dist/notify/transports.test.js +71 -0
- package/dist/notify/transports.test.js.map +1 -0
- package/dist/notify/types.d.ts +95 -0
- package/dist/notify/types.js +16 -0
- package/dist/notify/types.js.map +1 -0
- package/dist/sandbox/docker-compose.test.d.ts +1 -0
- package/dist/sandbox/docker-compose.test.js +128 -0
- package/dist/sandbox/docker-compose.test.js.map +1 -0
- package/dist/sandbox/docker.d.ts +97 -9
- package/dist/sandbox/docker.js +192 -41
- package/dist/sandbox/docker.js.map +1 -1
- package/dist/sandbox/docker.test.d.ts +1 -0
- package/dist/sandbox/docker.test.js +137 -0
- package/dist/sandbox/docker.test.js.map +1 -0
- package/dist/sandbox/egress-allowlist.d.ts +69 -0
- package/dist/sandbox/egress-allowlist.js +164 -0
- package/dist/sandbox/egress-allowlist.js.map +1 -0
- package/dist/sandbox/egress-allowlist.test.d.ts +1 -0
- package/dist/sandbox/egress-allowlist.test.js +65 -0
- package/dist/sandbox/egress-allowlist.test.js.map +1 -0
- package/dist/sandbox/egress-firewall-config.d.ts +127 -0
- package/dist/sandbox/egress-firewall-config.js +434 -0
- package/dist/sandbox/egress-firewall-config.js.map +1 -0
- package/dist/sandbox/egress-firewall-config.test.d.ts +1 -0
- package/dist/sandbox/egress-firewall-config.test.js +244 -0
- package/dist/sandbox/egress-firewall-config.test.js.map +1 -0
- package/dist/sandbox/images.d.ts +23 -0
- package/dist/sandbox/images.js +55 -0
- package/dist/sandbox/images.js.map +1 -0
- package/dist/sandbox/index.d.ts +82 -3
- package/dist/sandbox/index.js +223 -93
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/index.test.d.ts +1 -0
- package/dist/sandbox/index.test.js +157 -0
- package/dist/sandbox/index.test.js.map +1 -0
- package/dist/session-log.d.ts +63 -0
- package/dist/session-log.js +290 -0
- package/dist/session-log.js.map +1 -0
- package/dist/session-log.test.d.ts +1 -0
- package/dist/session-log.test.js +85 -0
- package/dist/session-log.test.js.map +1 -0
- package/dist/setup.d.ts +31 -12
- package/dist/setup.js +516 -174
- package/dist/setup.js.map +1 -1
- package/dist/setup.test.js +138 -6
- package/dist/setup.test.js.map +1 -1
- package/dist/state/approval-store.d.ts +86 -0
- package/dist/state/approval-store.js +140 -0
- package/dist/state/approval-store.js.map +1 -0
- package/dist/state/build-assets.d.ts +50 -0
- package/dist/state/build-assets.js +154 -0
- package/dist/state/build-assets.js.map +1 -0
- package/dist/state/build-assets.test.d.ts +1 -0
- package/dist/state/build-assets.test.js +106 -0
- package/dist/state/build-assets.test.js.map +1 -0
- package/dist/state/db.d.ts +65 -333
- package/dist/state/db.js +112 -835
- package/dist/state/db.js.map +1 -1
- package/dist/state/db.test.js +127 -91
- package/dist/state/db.test.js.map +1 -1
- package/dist/state/execution-store.d.ts +257 -0
- package/dist/state/execution-store.js +527 -0
- package/dist/state/execution-store.js.map +1 -0
- package/dist/state/migrate.d.ts +15 -0
- package/dist/state/migrate.js +175 -0
- package/dist/state/migrate.js.map +1 -0
- package/dist/state/workflow-run-store.d.ts +195 -0
- package/dist/state/workflow-run-store.js +363 -0
- package/dist/state/workflow-run-store.js.map +1 -0
- package/dist/state/workflow-run-store.test.d.ts +1 -0
- package/dist/state/workflow-run-store.test.js +264 -0
- package/dist/state/workflow-run-store.test.js.map +1 -0
- package/dist/telemetry/index.d.ts +38 -0
- package/dist/telemetry/index.js +253 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/index.test.d.ts +1 -0
- package/dist/telemetry/index.test.js +73 -0
- package/dist/telemetry/index.test.js.map +1 -0
- package/dist/telemetry/pi-events.d.ts +12 -0
- package/dist/telemetry/pi-events.js +134 -0
- package/dist/telemetry/pi-events.js.map +1 -0
- package/dist/telemetry/pi-events.test.d.ts +1 -0
- package/dist/telemetry/pi-events.test.js +69 -0
- package/dist/telemetry/pi-events.test.js.map +1 -0
- package/dist/workflows/dag.d.ts +13 -1
- package/dist/workflows/dag.js +7 -3
- package/dist/workflows/dag.js.map +1 -1
- package/dist/workflows/dag.test.js +22 -0
- package/dist/workflows/dag.test.js.map +1 -1
- package/dist/workflows/golden-build.test.d.ts +1 -0
- package/dist/workflows/golden-build.test.js +45 -0
- package/dist/workflows/golden-build.test.js.map +1 -0
- package/dist/workflows/loader-overlay.test.d.ts +1 -0
- package/dist/workflows/loader-overlay.test.js +101 -0
- package/dist/workflows/loader-overlay.test.js.map +1 -0
- package/dist/workflows/loader.d.ts +36 -11
- package/dist/workflows/loader.js +311 -87
- package/dist/workflows/loader.js.map +1 -1
- package/dist/workflows/loader.test.js +114 -10
- package/dist/workflows/loader.test.js.map +1 -1
- package/dist/workflows/loop-eval.js +2 -0
- package/dist/workflows/loop-eval.js.map +1 -1
- package/dist/workflows/loop-eval.test.js +14 -0
- package/dist/workflows/loop-eval.test.js.map +1 -1
- package/dist/workflows/phase-executor.d.ts +145 -0
- package/dist/workflows/phase-executor.js +691 -0
- package/dist/workflows/phase-executor.js.map +1 -0
- package/dist/workflows/phase-executor.test.d.ts +1 -0
- package/dist/workflows/phase-executor.test.js +434 -0
- package/dist/workflows/phase-executor.test.js.map +1 -0
- package/dist/workflows/phase-ref.d.ts +44 -0
- package/dist/workflows/phase-ref.js +78 -0
- package/dist/workflows/phase-ref.js.map +1 -0
- package/dist/workflows/phase-ref.test.d.ts +1 -0
- package/dist/workflows/phase-ref.test.js +24 -0
- package/dist/workflows/phase-ref.test.js.map +1 -0
- package/dist/workflows/resume.d.ts +5 -11
- package/dist/workflows/resume.js +88 -7
- package/dist/workflows/resume.js.map +1 -1
- package/dist/workflows/runner.d.ts +34 -27
- package/dist/workflows/runner.js +252 -930
- package/dist/workflows/runner.js.map +1 -1
- package/dist/workflows/runner.test.js +346 -35
- package/dist/workflows/runner.test.js.map +1 -1
- package/dist/workflows/schema.d.ts +52 -10
- package/dist/workflows/schema.js +147 -7
- package/dist/workflows/schema.js.map +1 -1
- package/dist/workflows/simple.d.ts +67 -3
- package/dist/workflows/simple.js +248 -87
- package/dist/workflows/simple.js.map +1 -1
- package/dist/workflows/simple.test.d.ts +1 -0
- package/dist/workflows/simple.test.js +107 -0
- package/dist/workflows/simple.test.js.map +1 -0
- package/dist/workflows/templates.d.ts +29 -0
- package/dist/workflows/templates.js +42 -4
- package/dist/workflows/templates.js.map +1 -1
- package/dist/workflows/templates.test.js +103 -0
- package/dist/workflows/templates.test.js.map +1 -1
- package/dist/workflows/triggers.d.ts +21 -0
- package/dist/workflows/triggers.js +44 -0
- package/dist/workflows/triggers.js.map +1 -0
- package/dist/workflows/verdict.d.ts +19 -0
- package/dist/workflows/verdict.js +30 -0
- package/dist/workflows/verdict.js.map +1 -0
- package/dist/workflows/verdict.test.d.ts +1 -0
- package/dist/workflows/verdict.test.js +44 -0
- package/dist/workflows/verdict.test.js.map +1 -0
- package/dist/worktree/manager.d.ts +1 -1
- package/dist/worktree/manager.js +14 -14
- package/dist/worktree/manager.js.map +1 -1
- package/dist/worktree/manager.test.d.ts +1 -0
- package/dist/worktree/manager.test.js +87 -0
- package/dist/worktree/manager.test.js.map +1 -0
- package/docker-compose.yml +206 -5
- package/package.json +19 -7
- package/sandbox.Dockerfile +97 -18
- package/skills/README.md +40 -0
- package/skills/browser-qa/SKILL.md +193 -0
- package/skills/browser-qa/scripts/agent-browser.mjs +380 -0
- package/skills/building/SKILL.md +95 -0
- package/skills/chat/SKILL.md +30 -11
- package/skills/code-review/SKILL.md +59 -0
- package/skills/debug-production/SKILL.md +108 -0
- package/skills/demo/SKILL.md +194 -0
- package/skills/demo/scripts/compose-demo.sh +205 -0
- package/skills/issue-answer/SKILL.md +90 -0
- package/skills/issue-comment/SKILL.md +38 -24
- package/skills/issue-triage/SKILL.md +103 -37
- package/skills/issue-triage/references/AGENT-BRIEF.md +61 -0
- package/skills/pr-comment/SKILL.md +64 -0
- package/skills/pr-review/SKILL.md +65 -49
- package/skills/qa-test/SKILL.md +97 -0
- package/skills/repo-health/SKILL.md +48 -45
- package/skills/security-feedback/SKILL.md +173 -0
- package/skills/security-feedback/references/templates.md +77 -0
- package/skills/security-review/SKILL.md +213 -0
- package/skills/security-review/references/issue-format.md +302 -0
- package/skills/verify/SKILL.md +118 -0
- package/workflows/answer.yaml +37 -0
- package/workflows/build.yaml +32 -22
- package/workflows/cron-security.yaml +6 -0
- package/workflows/demo.yaml +55 -0
- package/workflows/explore.yaml +9 -0
- package/workflows/pr-comment.yaml +16 -0
- package/workflows/pr-fix.yaml +3 -0
- package/workflows/pr-review.yaml +4 -1
- package/workflows/prompts/answer.md +67 -0
- package/workflows/prompts/architect.md +24 -7
- package/workflows/prompts/demo.md +100 -0
- package/workflows/prompts/executor.md +29 -20
- package/workflows/prompts/explore-ask.md +51 -22
- package/workflows/prompts/explore-publish.md +2 -2
- package/workflows/prompts/explore-read.md +24 -10
- package/workflows/prompts/explore-synthesize.md +15 -8
- package/workflows/prompts/fix.md +9 -10
- package/workflows/prompts/guardrails.md +26 -8
- package/workflows/prompts/pr-fix.md +6 -7
- package/workflows/prompts/pr.md +11 -10
- package/workflows/prompts/qa-browser.md +95 -0
- package/workflows/prompts/qa-synth.md +44 -0
- package/workflows/prompts/qa-test.md +60 -0
- package/workflows/prompts/re-reviewer.md +8 -9
- package/workflows/prompts/reviewer.md +10 -9
- package/workflows/prompts/verify-browser.md +93 -0
- package/workflows/prompts/verify-synth.md +44 -0
- package/workflows/prompts/verify.md +63 -0
- package/workflows/qa-test.yaml +87 -0
- package/workflows/security-feedback.yaml +25 -0
- package/workflows/security-review.yaml +29 -0
- package/workflows/verify.yaml +85 -0
- package/deploy/mcp-config.tmpl.json +0 -14
- package/dist/cron/rate-limits.d.ts +0 -26
- package/dist/cron/rate-limits.js +0 -193
- package/dist/cron/rate-limits.js.map +0 -1
- package/dist/engine/executor.d.ts +0 -75
- package/dist/engine/executor.js +0 -292
- package/dist/engine/executor.js.map +0 -1
- package/mcp-github-app/package.json +0 -18
- package/mcp-github-app/src/auth.js +0 -66
- package/mcp-github-app/src/github.js +0 -371
- package/mcp-github-app/src/index.js +0 -534
- package/skills/devops/webhook-subscriptions/SKILL.md +0 -180
- package/skills/github/DESCRIPTION.md +0 -3
- package/skills/github/codebase-inspection/SKILL.md +0 -115
- package/skills/github/github-auth/SKILL.md +0 -54
- package/skills/github/github-auth/scripts/gh-env.sh +0 -66
- package/skills/github/github-code-review/SKILL.md +0 -480
- package/skills/github/github-code-review/references/review-output-template.md +0 -74
- package/skills/github/github-issues/SKILL.md +0 -369
- package/skills/github/github-issues/templates/bug-report.md +0 -35
- package/skills/github/github-issues/templates/feature-request.md +0 -31
- package/skills/github/github-pr-workflow/SKILL.md +0 -395
- package/skills/github/github-pr-workflow/references/ci-troubleshooting.md +0 -183
- package/skills/github/github-pr-workflow/references/conventional-commits.md +0 -71
- package/skills/github/github-pr-workflow/templates/pr-body-bugfix.md +0 -35
- package/skills/github/github-pr-workflow/templates/pr-body-feature.md +0 -33
- package/skills/github/github-repo-management/SKILL.md +0 -515
- package/skills/github/github-repo-management/references/github-api-cheatsheet.md +0 -161
- package/skills/github-orchestrator/SKILL.md +0 -103
- package/skills/mcp/DESCRIPTION.md +0 -3
- package/skills/mcp/mcporter/SKILL.md +0 -122
- package/skills/mcp/native-mcp/SKILL.md +0 -356
- package/skills/software-development/architect/SKILL.md +0 -154
- package/skills/software-development/assure-guardrails/SKILL.md +0 -239
- package/skills/software-development/plan/SKILL.md +0 -64
- package/skills/software-development/requesting-code-review/SKILL.md +0 -291
- package/skills/software-development/subagent-driven-development/SKILL.md +0 -433
- package/skills/software-development/systematic-debugging/SKILL.md +0 -366
- package/skills/software-development/test-driven-development/SKILL.md +0 -342
|
@@ -0,0 +1,601 @@
|
|
|
1
|
+
import { randomUUID } from "crypto";
|
|
2
|
+
import { routeEvent } from "./router.js";
|
|
3
|
+
import { runDashboardUrl } from "../notify/model.js";
|
|
4
|
+
/**
|
|
5
|
+
* Turn an EventEnvelope into a workflow dispatch (or an in-process handler
|
|
6
|
+
* run). Classifies via `route`, then acts on the decision. Extracted from the
|
|
7
|
+
* former `registry.onEvent` closure so every event branch is testable.
|
|
8
|
+
*/
|
|
9
|
+
export async function dispatch(envelope, deps) {
|
|
10
|
+
const route = await (deps.route ?? routeEvent)(envelope, { db: deps.db });
|
|
11
|
+
if (route.action === "ignore") {
|
|
12
|
+
return { kind: "ignored", reason: route.reason };
|
|
13
|
+
}
|
|
14
|
+
if (route.action === "reply") {
|
|
15
|
+
await envelope.reply(route.message);
|
|
16
|
+
return { kind: "replied", message: route.message };
|
|
17
|
+
}
|
|
18
|
+
// route.action === "handler"
|
|
19
|
+
const { handler, context } = route;
|
|
20
|
+
const routeKey = typeof context._routeKey === "string" ? context._routeKey : undefined;
|
|
21
|
+
// Instant ack: the moment we've classified a GitHub event as something we'll
|
|
22
|
+
// act on, react 👀 on the triggering comment/issue so the user sees feedback
|
|
23
|
+
// before any (slower) workflow output lands. Covers every github-based path —
|
|
24
|
+
// issue/PR comments, review comments, opened issues/PRs — and every explore
|
|
25
|
+
// socratic reply (each arrives here as its own comment.created → explore-reply).
|
|
26
|
+
// Fire-and-forget; the build path additionally reacts 🚀 when it starts.
|
|
27
|
+
ackGithubEvent(envelope, deps.github);
|
|
28
|
+
// Chat messages: handle in-process (no sandbox, low latency).
|
|
29
|
+
if (handler === "chat") {
|
|
30
|
+
return handleChat(envelope, context, deps);
|
|
31
|
+
}
|
|
32
|
+
// Chat reset: deactivate the session and confirm.
|
|
33
|
+
if (handler === "chat-reset") {
|
|
34
|
+
const sessionId = context.sessionId;
|
|
35
|
+
if (sessionId) {
|
|
36
|
+
deps.sessionManager.deactivateSession(sessionId);
|
|
37
|
+
}
|
|
38
|
+
await envelope.reply("Session reset. Starting fresh.");
|
|
39
|
+
return { kind: "handled", handler };
|
|
40
|
+
}
|
|
41
|
+
// Status report: list running executions.
|
|
42
|
+
if (handler === "status-report") {
|
|
43
|
+
const running = deps.db.executions.runningExecutions();
|
|
44
|
+
if (running.length === 0) {
|
|
45
|
+
await envelope.reply("No tasks currently running.");
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const lines = running.map((r) => `• *${r.skill}*${r.repo ? ` on ${r.repo}` : ""}${r.issueNumber ? ` #${r.issueNumber}` : ""} (started ${r.startedAt})`);
|
|
49
|
+
await envelope.reply(`Running tasks:\n${lines.join("\n")}`);
|
|
50
|
+
}
|
|
51
|
+
return { kind: "handled", handler };
|
|
52
|
+
}
|
|
53
|
+
// Guard against double-dispatching the same work. Everything past this
|
|
54
|
+
// point is a workflow dispatch (or a resume of one), so a run already in
|
|
55
|
+
// flight for this trigger is a no-op.
|
|
56
|
+
const triggerId = String(envelope.issueNumber || envelope.id);
|
|
57
|
+
if (deps.db.executions.isRunning(handler, triggerId)) {
|
|
58
|
+
console.log(`[event] Skipping: ${handler} already running for ${triggerId}`);
|
|
59
|
+
if (envelope.type === "message") {
|
|
60
|
+
await envelope.reply(`That task is already running. Use /status to check progress.`);
|
|
61
|
+
}
|
|
62
|
+
return { kind: "skipped", reason: `${handler} already running for ${triggerId}` };
|
|
63
|
+
}
|
|
64
|
+
// PR fix: lightweight fix-and-push driven by CI failures / a comment.
|
|
65
|
+
if ((routeKey === "github.pr_fix" || handler === "pr-fix") && context.prNumber && context.repo) {
|
|
66
|
+
return handlePrFix(context, handler, deps);
|
|
67
|
+
}
|
|
68
|
+
if (handler === "explore-reply") {
|
|
69
|
+
return handleExploreReply(envelope, context, deps);
|
|
70
|
+
}
|
|
71
|
+
if (handler === "approval-response") {
|
|
72
|
+
return handleApprovalResponse(envelope, context, deps);
|
|
73
|
+
}
|
|
74
|
+
// Build requests → the programmatic orchestrator (the `build` workflow).
|
|
75
|
+
if ((routeKey === "github.issue_build" || routeKey === "slack.build" || handler === "github-orchestrator") &&
|
|
76
|
+
context.issueNumber &&
|
|
77
|
+
context.repo) {
|
|
78
|
+
return handleBuild(envelope, context, handler, deps);
|
|
79
|
+
}
|
|
80
|
+
// The workflow context is the route context minus the internal _routeKey.
|
|
81
|
+
const { _routeKey: _ignored, ...workflowContext } = context;
|
|
82
|
+
// Messaging-triggered workflows: ack on start, report on completion.
|
|
83
|
+
if (envelope.type === "message") {
|
|
84
|
+
return handleMessageDispatch(envelope, handler, workflowContext, deps);
|
|
85
|
+
}
|
|
86
|
+
// Webhook-triggered workflows (the remaining default path).
|
|
87
|
+
return handleWebhookDispatch(envelope, handler, routeKey, workflowContext, deps);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* React 👀 on the GitHub subject that triggered this event, as an immediate
|
|
91
|
+
* "I've seen it and I'm acting on it" ack. Picks the right reactions endpoint
|
|
92
|
+
* by event type: issue/PR comments and explore replies → the comment; PR review
|
|
93
|
+
* comments → the review comment; freshly opened/reopened issues & PRs → the
|
|
94
|
+
* issue/PR itself. Non-GitHub events (Slack) and events with no clear subject
|
|
95
|
+
* (e.g. pr.synchronize) are skipped. Fire-and-forget — a failed reaction never
|
|
96
|
+
* blocks dispatch.
|
|
97
|
+
*/
|
|
98
|
+
function ackGithubEvent(envelope, github) {
|
|
99
|
+
if (!github || envelope.source !== "github" || !envelope.repo)
|
|
100
|
+
return;
|
|
101
|
+
const [owner, repo] = envelope.repo.split("/");
|
|
102
|
+
if (!owner || !repo)
|
|
103
|
+
return;
|
|
104
|
+
const raw = envelope.raw;
|
|
105
|
+
const commentId = raw?.comment?.id;
|
|
106
|
+
const fail = (err) => {
|
|
107
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
108
|
+
console.warn(`[event] Could not react 👀 to ${envelope.type}: ${msg}`);
|
|
109
|
+
};
|
|
110
|
+
switch (envelope.type) {
|
|
111
|
+
case "comment.created":
|
|
112
|
+
if (commentId)
|
|
113
|
+
github.reactToComment(owner, repo, commentId, "eyes").catch(fail);
|
|
114
|
+
break;
|
|
115
|
+
case "pr_review_comment.created":
|
|
116
|
+
if (commentId)
|
|
117
|
+
github.reactToReviewComment(owner, repo, commentId, "eyes").catch(fail);
|
|
118
|
+
break;
|
|
119
|
+
case "issue.opened":
|
|
120
|
+
case "issue.reopened":
|
|
121
|
+
case "pr.opened":
|
|
122
|
+
case "pr.reopened":
|
|
123
|
+
if (envelope.issueNumber)
|
|
124
|
+
github.reactToIssue(owner, repo, envelope.issueNumber, "eyes").catch(fail);
|
|
125
|
+
break;
|
|
126
|
+
default:
|
|
127
|
+
// pr.synchronize, pr.merged, pr_review.submitted, etc. — no single
|
|
128
|
+
// user-authored subject to ack, so stay quiet.
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Messaging-triggered workflow dispatch. Posts a "Starting *<handler>*" ack
|
|
134
|
+
* once the run row exists (with a dashboard deep link when `publicUrl` is set),
|
|
135
|
+
* then reports completion / failure back to the thread. Paused runs stay quiet
|
|
136
|
+
* — the workflow already posted gate instructions.
|
|
137
|
+
*/
|
|
138
|
+
async function handleMessageDispatch(envelope, handler, workflowContext, deps) {
|
|
139
|
+
const onRunStart = async (runId) => {
|
|
140
|
+
// The run detail lives on the `runs` tab (WorkflowList reads ?run=…&phase=…);
|
|
141
|
+
// `workflows` is the definition browser and ignores ?run=, so the deep link
|
|
142
|
+
// must target `runs`. Shared by every messaging-dispatched workflow
|
|
143
|
+
// (build / explore / triage / answer / …).
|
|
144
|
+
const link = runDashboardUrl(deps.publicUrl, runId, handler);
|
|
145
|
+
const body = link
|
|
146
|
+
? `Starting *${handler}*... I'll report back when it's done.\n<${link}|Live progress>`
|
|
147
|
+
: `Starting *${handler}*... I'll report back when it's done.`;
|
|
148
|
+
try {
|
|
149
|
+
await envelope.reply(body);
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
const m = err instanceof Error ? err.message : String(err);
|
|
153
|
+
console.warn(`[event] failed to post run-start ack: ${m}`);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
deps.dispatchWorkflow(handler, { ...workflowContext, _triggerType: "chat" }, onRunStart)
|
|
157
|
+
.then(async (result) => {
|
|
158
|
+
if (result.paused) {
|
|
159
|
+
// Paused at a gate — the workflow already posted instructions.
|
|
160
|
+
}
|
|
161
|
+
else if (result.success) {
|
|
162
|
+
await envelope.reply(`*${handler}* completed.`);
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
await envelope.reply(`*${handler}* failed${result.error ? `: ${result.error}` : ""}.`);
|
|
166
|
+
}
|
|
167
|
+
})
|
|
168
|
+
.catch(async (err) => {
|
|
169
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
170
|
+
console.error(`[event] workflow ${handler} threw: ${msg}`);
|
|
171
|
+
await envelope.reply(`*${handler}* failed: ${msg}`);
|
|
172
|
+
});
|
|
173
|
+
return { kind: "dispatched", workflow: handler };
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Webhook-triggered workflow dispatch. When `reviewPostsCheck` is on and this
|
|
177
|
+
* is a PR-attention event routed to pr-review, posts an in-progress
|
|
178
|
+
* `last-light/review` Check Run on the PR head SHA so branch protection can
|
|
179
|
+
* gate the merge, then completes it from the workflow's terminal result.
|
|
180
|
+
*/
|
|
181
|
+
async function handleWebhookDispatch(envelope, handler, routeKey, workflowContext, deps) {
|
|
182
|
+
const { github } = deps;
|
|
183
|
+
const isPrReviewEvent = envelope.type === "pr.opened" ||
|
|
184
|
+
envelope.type === "pr.synchronize" ||
|
|
185
|
+
envelope.type === "pr.reopened";
|
|
186
|
+
const wantReviewCheck = deps.reviewPostsCheck &&
|
|
187
|
+
isPrReviewEvent &&
|
|
188
|
+
(routeKey === "github.pr_opened" ||
|
|
189
|
+
routeKey === "github.pr_synchronize" ||
|
|
190
|
+
routeKey === "github.pr_reopened" ||
|
|
191
|
+
handler === "pr-review") &&
|
|
192
|
+
!!github &&
|
|
193
|
+
!!envelope.repo &&
|
|
194
|
+
typeof envelope.prNumber === "number";
|
|
195
|
+
let prCheckRunId;
|
|
196
|
+
let prOwner = "";
|
|
197
|
+
let prRepoName = "";
|
|
198
|
+
let prNumberForCheck = 0;
|
|
199
|
+
if (wantReviewCheck && github) {
|
|
200
|
+
[prOwner, prRepoName] = envelope.repo.split("/");
|
|
201
|
+
prNumberForCheck = envelope.prNumber;
|
|
202
|
+
try {
|
|
203
|
+
const prHeadSha = await github.getPullRequestHeadSha(prOwner, prRepoName, prNumberForCheck);
|
|
204
|
+
prCheckRunId = await github.createCheckRun(prOwner, prRepoName, prHeadSha, "last-light/review", {
|
|
205
|
+
output: {
|
|
206
|
+
title: "Review in progress",
|
|
207
|
+
summary: "Last Light is reviewing this PR. The conclusion will land here when the review completes.",
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
console.log(`[check] Posted in-progress check ${prCheckRunId} for ${prOwner}/${prRepoName}#${prNumberForCheck} on ${prHeadSha.slice(0, 7)}`);
|
|
211
|
+
}
|
|
212
|
+
catch (err) {
|
|
213
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
214
|
+
console.warn(`[check] failed to create in-progress check: ${msg}`);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const workflowPromise = deps.dispatchWorkflow(handler, { ...workflowContext, _triggerType: "webhook" });
|
|
218
|
+
if (prCheckRunId !== undefined && github) {
|
|
219
|
+
const checkId = prCheckRunId;
|
|
220
|
+
const owner = prOwner;
|
|
221
|
+
const repo = prRepoName;
|
|
222
|
+
const prNumber = prNumberForCheck;
|
|
223
|
+
workflowPromise
|
|
224
|
+
.then(async (result) => {
|
|
225
|
+
try {
|
|
226
|
+
// Re-fetch head SHA in case the PR was rebased mid-review.
|
|
227
|
+
const headSha = await github.getPullRequestHeadSha(owner, repo, prNumber);
|
|
228
|
+
const review = await github.getLatestBotReview(owner, repo, prNumber, headSha);
|
|
229
|
+
const conclusion = !result.success
|
|
230
|
+
? "neutral"
|
|
231
|
+
: review?.state === "APPROVED"
|
|
232
|
+
? "success"
|
|
233
|
+
: review?.state === "CHANGES_REQUESTED"
|
|
234
|
+
? "failure"
|
|
235
|
+
: "neutral";
|
|
236
|
+
await github.updateCheckRun(owner, repo, checkId, {
|
|
237
|
+
status: "completed",
|
|
238
|
+
conclusion,
|
|
239
|
+
output: {
|
|
240
|
+
title: `Review ${conclusion === "success" ? "approved" : conclusion === "failure" ? "requested changes" : "completed"}`,
|
|
241
|
+
summary: review?.body?.slice(0, 65000) || "Review complete.",
|
|
242
|
+
},
|
|
243
|
+
});
|
|
244
|
+
console.log(`[check] Completed check ${checkId} → ${conclusion}`);
|
|
245
|
+
}
|
|
246
|
+
catch (err) {
|
|
247
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
248
|
+
console.warn(`[check] failed to complete check ${checkId}: ${msg}`);
|
|
249
|
+
}
|
|
250
|
+
})
|
|
251
|
+
.catch(async (err) => {
|
|
252
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
253
|
+
try {
|
|
254
|
+
await github.updateCheckRun(owner, repo, checkId, {
|
|
255
|
+
status: "completed",
|
|
256
|
+
conclusion: "neutral",
|
|
257
|
+
output: { title: "Review errored", summary: `Workflow threw: ${msg.slice(0, 1000)}` },
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
/* ignore — best effort */
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
workflowPromise.catch((err) => {
|
|
266
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
267
|
+
console.error(`[event] Unhandled error in workflow ${handler}: ${msg}`);
|
|
268
|
+
});
|
|
269
|
+
return { kind: "dispatched", workflow: handler };
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Kick off the full build cycle for an issue. Fills in missing issue details
|
|
273
|
+
* from the API, records a `build-cycle` execution row, acks the requester
|
|
274
|
+
* (Slack reply or a 🚀 reaction on the trigger comment), then dispatches the
|
|
275
|
+
* `build` workflow asynchronously.
|
|
276
|
+
*/
|
|
277
|
+
async function handleBuild(envelope, context, handler, deps) {
|
|
278
|
+
const repoStr = context.repo;
|
|
279
|
+
const [owner, repo] = repoStr.includes("/") ? repoStr.split("/") : ["", repoStr];
|
|
280
|
+
const issueNumber = context.issueNumber;
|
|
281
|
+
if (!owner || !repo) {
|
|
282
|
+
console.error(`[event] Invalid repo format: ${repoStr}`);
|
|
283
|
+
return { kind: "ignored", reason: `invalid repo format: ${repoStr}` };
|
|
284
|
+
}
|
|
285
|
+
// Fetch full issue details if we don't have them.
|
|
286
|
+
let issueTitle = context.title || "";
|
|
287
|
+
let issueBody = context.body || "";
|
|
288
|
+
let issueLabels = context.labels || [];
|
|
289
|
+
if (deps.github && (!issueTitle || !issueBody || issueLabels.length === 0)) {
|
|
290
|
+
try {
|
|
291
|
+
const issue = await deps.github.getIssue(owner, repo, issueNumber);
|
|
292
|
+
issueTitle = issueTitle || issue.title;
|
|
293
|
+
issueBody = issueBody || issue.body || "";
|
|
294
|
+
if (issueLabels.length === 0) {
|
|
295
|
+
issueLabels = (issue.labels || [])
|
|
296
|
+
.map((l) => (typeof l === "string" ? l : l.name))
|
|
297
|
+
.filter(Boolean);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
catch (err) {
|
|
301
|
+
console.warn(`[event] Could not fetch issue: ${err.message}`);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
const executionId = randomUUID();
|
|
305
|
+
deps.db.executions.recordStart({
|
|
306
|
+
id: executionId,
|
|
307
|
+
triggerType: envelope.type === "message" ? "chat" : "webhook",
|
|
308
|
+
triggerId: String(issueNumber),
|
|
309
|
+
skill: "build-cycle",
|
|
310
|
+
repo: repoStr,
|
|
311
|
+
issueNumber,
|
|
312
|
+
startedAt: new Date().toISOString(),
|
|
313
|
+
});
|
|
314
|
+
if (envelope.type === "message") {
|
|
315
|
+
await envelope.reply(`Starting build cycle for ${repoStr}#${issueNumber}...`);
|
|
316
|
+
}
|
|
317
|
+
else if (deps.github) {
|
|
318
|
+
// GitHub-triggered builds: react with 🚀 on the triggering comment so the
|
|
319
|
+
// user sees an instant ack. Non-fatal if it fails.
|
|
320
|
+
const commentId = envelope.raw?.comment?.id;
|
|
321
|
+
if (commentId) {
|
|
322
|
+
deps.github.reactToComment(owner, repo, commentId, "rocket").catch((err) => {
|
|
323
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
324
|
+
console.warn(`[event] Could not react to trigger comment: ${msg}`);
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
const buildWorkflow = handler === "github-orchestrator" ? "build" : handler;
|
|
329
|
+
deps.dispatchWorkflow(buildWorkflow, {
|
|
330
|
+
repo: repoStr,
|
|
331
|
+
issueNumber,
|
|
332
|
+
title: issueTitle || `Issue #${issueNumber}`,
|
|
333
|
+
body: issueBody,
|
|
334
|
+
labels: issueLabels,
|
|
335
|
+
commentBody: context.commentBody,
|
|
336
|
+
sender: context.sender || "unknown",
|
|
337
|
+
_triggerType: envelope.type === "message" ? "chat" : "webhook",
|
|
338
|
+
}).then((result) => {
|
|
339
|
+
deps.db.executions.recordFinish(executionId, {
|
|
340
|
+
success: result.success,
|
|
341
|
+
error: result.success ? undefined : "Build cycle failed",
|
|
342
|
+
durationMs: 0,
|
|
343
|
+
});
|
|
344
|
+
if (envelope.type === "message") {
|
|
345
|
+
envelope.reply(result.success ? `Build cycle complete.` : `Build cycle failed.`);
|
|
346
|
+
}
|
|
347
|
+
}).catch((err) => {
|
|
348
|
+
console.error(`[event] Build cycle failed:`, err);
|
|
349
|
+
deps.db.executions.recordFinish(executionId, { success: false, error: err.message, durationMs: 0 });
|
|
350
|
+
});
|
|
351
|
+
return { kind: "dispatched", workflow: buildWorkflow };
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Lightweight PR fix — fix-and-push, no full build cycle. Resolves the PR's
|
|
355
|
+
* head branch and CI failures (needed by the architect/executor), then
|
|
356
|
+
* dispatches the `pr-fix` workflow. Bails if the branch can't be determined.
|
|
357
|
+
*/
|
|
358
|
+
async function handlePrFix(context, handler, deps) {
|
|
359
|
+
const repoStr = context.repo;
|
|
360
|
+
const [owner, repo] = repoStr.includes("/") ? repoStr.split("/") : ["", repoStr];
|
|
361
|
+
const prNumber = context.prNumber;
|
|
362
|
+
if (!owner || !repo) {
|
|
363
|
+
console.error(`[event] Invalid repo format: ${repoStr}`);
|
|
364
|
+
return { kind: "ignored", reason: `invalid repo format: ${repoStr}` };
|
|
365
|
+
}
|
|
366
|
+
let prTitle = context.title || "";
|
|
367
|
+
let prBody = context.body || "";
|
|
368
|
+
let branch = "";
|
|
369
|
+
let failedChecks = "";
|
|
370
|
+
if (deps.github) {
|
|
371
|
+
try {
|
|
372
|
+
const pr = await deps.github.getPullRequest(owner, repo, prNumber);
|
|
373
|
+
prTitle = prTitle || pr.title;
|
|
374
|
+
prBody = prBody || pr.body || "";
|
|
375
|
+
branch = pr.head.ref;
|
|
376
|
+
failedChecks = await deps.github.getFailedChecks(owner, repo, pr.head.sha);
|
|
377
|
+
}
|
|
378
|
+
catch (err) {
|
|
379
|
+
console.warn(`[event] Could not fetch PR: ${err.message}`);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
if (!branch) {
|
|
383
|
+
console.error(`[event] Could not determine branch for PR #${prNumber}`);
|
|
384
|
+
return { kind: "ignored", reason: `could not determine branch for PR #${prNumber}` };
|
|
385
|
+
}
|
|
386
|
+
console.log(`[event] PR fix for ${repoStr}#${prNumber} on branch ${branch}`);
|
|
387
|
+
const ciSection = failedChecks && !failedChecks.includes("No failed checks")
|
|
388
|
+
? `CI FAILURES (from GitHub Actions — fix these first):\n${failedChecks}`
|
|
389
|
+
: "";
|
|
390
|
+
deps.dispatchWorkflow(handler, {
|
|
391
|
+
repo: repoStr,
|
|
392
|
+
prNumber,
|
|
393
|
+
title: prTitle,
|
|
394
|
+
body: prBody,
|
|
395
|
+
commentBody: context.commentBody || "",
|
|
396
|
+
sender: context.sender || "unknown",
|
|
397
|
+
branch,
|
|
398
|
+
failedChecks,
|
|
399
|
+
ciSection,
|
|
400
|
+
_triggerType: "webhook",
|
|
401
|
+
}).catch((err) => {
|
|
402
|
+
console.error(`[event] PR fix failed:`, err);
|
|
403
|
+
});
|
|
404
|
+
return { kind: "dispatched", workflow: handler };
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Free-form user reply on a paused socratic explore run. Resolve the reply
|
|
408
|
+
* gate with the message body, merge the Q&A into `scratch.socratic.qa` so the
|
|
409
|
+
* next iteration sees the answer, and re-dispatch the explore workflow to
|
|
410
|
+
* continue the loop.
|
|
411
|
+
*/
|
|
412
|
+
async function handleExploreReply(envelope, context, deps) {
|
|
413
|
+
const handled = { kind: "handled", handler: "explore-reply" };
|
|
414
|
+
const workflowRunId = context.workflowRunId;
|
|
415
|
+
const replyText = context.reply || "";
|
|
416
|
+
const sender = context.sender || "unknown";
|
|
417
|
+
const run = deps.db.runs.getRun(workflowRunId);
|
|
418
|
+
if (!run) {
|
|
419
|
+
console.warn(`[event] explore-reply: run ${workflowRunId} not found`);
|
|
420
|
+
return handled;
|
|
421
|
+
}
|
|
422
|
+
const pending = deps.db.approvals.getPendingForWorkflow(workflowRunId);
|
|
423
|
+
if (!pending || pending.kind !== "reply") {
|
|
424
|
+
console.warn(`[event] explore-reply: no pending reply gate on ${workflowRunId}`);
|
|
425
|
+
return handled;
|
|
426
|
+
}
|
|
427
|
+
// Append the QA entry to scratch.socratic.qa. The runner reads this via
|
|
428
|
+
// {{scratch.socratic.qa}} on the next iteration. The bot's last question
|
|
429
|
+
// lives on the execution row that produced it — resolve
|
|
430
|
+
// `lastOutputExecutionId` through the DB; legacy rows that inline
|
|
431
|
+
// `lastOutput` work too.
|
|
432
|
+
const prevScratch = (run.scratch || {});
|
|
433
|
+
const prevSocratic = (prevScratch.socratic || {});
|
|
434
|
+
const qaList = Array.isArray(prevSocratic.qa) ? [...prevSocratic.qa] : [];
|
|
435
|
+
const lastQuestion = (prevSocratic.lastOutputExecutionId
|
|
436
|
+
? deps.db.executions.getExecutionOutput(prevSocratic.lastOutputExecutionId) ?? ""
|
|
437
|
+
: prevSocratic.lastOutput ?? "");
|
|
438
|
+
qaList.push({
|
|
439
|
+
question: lastQuestion,
|
|
440
|
+
answer: replyText,
|
|
441
|
+
sender,
|
|
442
|
+
at: new Date().toISOString(),
|
|
443
|
+
});
|
|
444
|
+
// One transaction: resolve the reply gate (recording the reply text), merge
|
|
445
|
+
// the QA into scratch, and flip the run back to running. Resume is then
|
|
446
|
+
// ledger-driven: the runner re-runs from the top, completed phases skip via
|
|
447
|
+
// shouldRunPhase, and the generic-loop node picks up from `scratch.iteration`
|
|
448
|
+
// (persisted when it paused). The atomic op's double-reply guard throws on a
|
|
449
|
+
// racing second reply — bail without a duplicate dispatch.
|
|
450
|
+
try {
|
|
451
|
+
deps.db.runs.resolveReplyGateAndResume(workflowRunId, pending.id, replyText, sender, {
|
|
452
|
+
socratic: { ...prevSocratic, qa: qaList },
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
catch (err) {
|
|
456
|
+
console.warn(`[event] explore-reply: reply gate ${pending.id} already resolved — skipping duplicate resume:`, err);
|
|
457
|
+
return handled;
|
|
458
|
+
}
|
|
459
|
+
// Re-dispatch. Use channelId/threadId from the current event context (the
|
|
460
|
+
// router captured them from the reply envelope), not stored workflow
|
|
461
|
+
// context — they were never persisted there.
|
|
462
|
+
const isSlack = run.triggerId.startsWith("slack:");
|
|
463
|
+
const replyChannelId = context.channelId;
|
|
464
|
+
const replyThreadId = context.threadId;
|
|
465
|
+
// Reconstruct owner/repo from the stored workflow context.
|
|
466
|
+
const storedCtx = (run.context || {});
|
|
467
|
+
const storedOwner = storedCtx.owner;
|
|
468
|
+
const resumeRepo = storedOwner && run.repo ? `${storedOwner}/${run.repo}` : run.repo || undefined;
|
|
469
|
+
console.log(`[event] explore-reply: resuming ${workflowRunId} after reply from ${sender}`);
|
|
470
|
+
deps.dispatchWorkflow("explore", {
|
|
471
|
+
repo: resumeRepo || (isSlack ? undefined : run.triggerId.split("#")[0]),
|
|
472
|
+
issueNumber: run.issueNumber,
|
|
473
|
+
sender,
|
|
474
|
+
_triggerType: envelope.type === "message" ? "chat" : "webhook",
|
|
475
|
+
triggerId: isSlack ? run.triggerId : undefined,
|
|
476
|
+
channelId: replyChannelId,
|
|
477
|
+
threadId: replyThreadId,
|
|
478
|
+
}).catch((err) => console.error(`[event] explore-reply resume failed:`, err));
|
|
479
|
+
return handled;
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Resolve a pending approval gate. On approval, resume the paused workflow run
|
|
483
|
+
* (re-dispatching from the last completed phase via the ledger); on rejection,
|
|
484
|
+
* mark the run failed. Replies on every path so the requester gets feedback.
|
|
485
|
+
*/
|
|
486
|
+
async function handleApprovalResponse(envelope, context, deps) {
|
|
487
|
+
const handled = { kind: "handled", handler: "approval-response" };
|
|
488
|
+
const decision = context.decision;
|
|
489
|
+
const sender = context.sender || "unknown";
|
|
490
|
+
const reason = context.reason;
|
|
491
|
+
const triggerId = context.repo && context.issueNumber
|
|
492
|
+
? `${context.repo}#${context.issueNumber}`
|
|
493
|
+
: undefined;
|
|
494
|
+
const approval = context.workflowRunId
|
|
495
|
+
? deps.db.approvals.getPendingForWorkflow(context.workflowRunId)
|
|
496
|
+
: triggerId
|
|
497
|
+
? deps.db.approvals.getPendingByTrigger(triggerId)
|
|
498
|
+
: null;
|
|
499
|
+
if (!approval) {
|
|
500
|
+
await envelope.reply("No pending approval found.");
|
|
501
|
+
return handled;
|
|
502
|
+
}
|
|
503
|
+
if (decision === "approved") {
|
|
504
|
+
// Re-trigger the workflow — resume logic picks up from DB state.
|
|
505
|
+
const workflowRun = deps.db.runs.getRun(approval.workflowRunId);
|
|
506
|
+
if (workflowRun && !deps.github) {
|
|
507
|
+
// Record the approval, but we can't resume without the GitHub App.
|
|
508
|
+
deps.db.approvals.respond(approval.id, "approved", sender, reason);
|
|
509
|
+
await envelope.reply("Approval recorded, but cannot resume: GitHub App is not configured. Configure GITHUB_APP_ID and related env vars to enable build resumption.");
|
|
510
|
+
return handled;
|
|
511
|
+
}
|
|
512
|
+
if (workflowRun && deps.github) {
|
|
513
|
+
await envelope.reply(`Approved by ${sender}. Resuming \`${workflowRun.workflowName}\`...`);
|
|
514
|
+
const [owner, repo] = workflowRun.triggerId.includes("/")
|
|
515
|
+
? workflowRun.triggerId.replace(/#\d+$/, "").split("/")
|
|
516
|
+
: ["", ""];
|
|
517
|
+
const issueNumber = workflowRun.issueNumber;
|
|
518
|
+
if (owner && repo && issueNumber) {
|
|
519
|
+
// One transaction: respond 'approved' + flip the run to running. The
|
|
520
|
+
// long-running re-dispatch happens after the commit.
|
|
521
|
+
deps.db.runs.resolveGateAndResume(approval.id, sender);
|
|
522
|
+
deps.dispatchWorkflow(workflowRun.workflowName, {
|
|
523
|
+
repo: `${owner}/${repo}`,
|
|
524
|
+
issueNumber,
|
|
525
|
+
title: `Issue #${issueNumber}`,
|
|
526
|
+
body: "",
|
|
527
|
+
sender,
|
|
528
|
+
_triggerType: "approval",
|
|
529
|
+
}).catch((err) => console.error(`[approval] Resume failed:`, err));
|
|
530
|
+
}
|
|
531
|
+
else {
|
|
532
|
+
// Can't reconstruct the dispatch target — record without resuming.
|
|
533
|
+
deps.db.approvals.respond(approval.id, "approved", sender, reason);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
else {
|
|
537
|
+
// No workflow run for this approval — just record the response.
|
|
538
|
+
deps.db.approvals.respond(approval.id, "approved", sender, reason);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
else {
|
|
542
|
+
// One transaction: respond 'rejected' + fail the run (a no-op if the run
|
|
543
|
+
// is already gone).
|
|
544
|
+
deps.db.runs.resolveGateAndFail(approval.id, sender, reason);
|
|
545
|
+
await envelope.reply(`Rejected by ${sender}. Build cycle aborted.${reason ? ` Reason: ${reason}` : ""}`);
|
|
546
|
+
}
|
|
547
|
+
return handled;
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* Conversational chat turn. Records an `executions` row so chat usage shows up
|
|
551
|
+
* in dashboard stats, runs the in-process turn, persists the minted agent
|
|
552
|
+
* session id for resume on the next turn, and replies. Failures still record a
|
|
553
|
+
* finish row and apologize rather than going silent.
|
|
554
|
+
*/
|
|
555
|
+
async function handleChat(envelope, context, deps) {
|
|
556
|
+
const messagingSessionId = context.sessionId;
|
|
557
|
+
const message = context.message;
|
|
558
|
+
const sender = context.sender;
|
|
559
|
+
// First message has no agent session → fresh; later messages resume.
|
|
560
|
+
const resumeAgentSessionId = deps.sessionManager.getSession(messagingSessionId)?.agentSessionId ?? undefined;
|
|
561
|
+
// triggerId is the messaging-session id, so a whole Slack thread groups
|
|
562
|
+
// together with `GROUP BY trigger_id`.
|
|
563
|
+
const executionId = randomUUID();
|
|
564
|
+
deps.db.executions.recordStart({
|
|
565
|
+
id: executionId,
|
|
566
|
+
triggerType: "chat",
|
|
567
|
+
triggerId: messagingSessionId,
|
|
568
|
+
skill: "chat",
|
|
569
|
+
startedAt: new Date().toISOString(),
|
|
570
|
+
});
|
|
571
|
+
try {
|
|
572
|
+
const result = await deps.runChat(message, messagingSessionId, sender, resumeAgentSessionId);
|
|
573
|
+
if (result.agentSessionId && result.agentSessionId !== resumeAgentSessionId) {
|
|
574
|
+
deps.sessionManager.setAgentSessionId(messagingSessionId, result.agentSessionId);
|
|
575
|
+
}
|
|
576
|
+
deps.db.executions.recordFinish(executionId, {
|
|
577
|
+
success: result.success,
|
|
578
|
+
error: result.error,
|
|
579
|
+
turns: result.turns,
|
|
580
|
+
durationMs: result.durationMs,
|
|
581
|
+
// dashboardSessionId so error rows still link to a (stub) jsonl envelope.
|
|
582
|
+
sessionId: result.dashboardSessionId ?? result.agentSessionId,
|
|
583
|
+
costUsd: result.costUsd,
|
|
584
|
+
inputTokens: result.inputTokens,
|
|
585
|
+
cacheCreationInputTokens: result.cacheCreationInputTokens,
|
|
586
|
+
cacheReadInputTokens: result.cacheReadInputTokens,
|
|
587
|
+
outputTokens: result.outputTokens,
|
|
588
|
+
apiDurationMs: result.apiDurationMs,
|
|
589
|
+
stopReason: result.stopReason,
|
|
590
|
+
});
|
|
591
|
+
await envelope.reply(result.text);
|
|
592
|
+
}
|
|
593
|
+
catch (err) {
|
|
594
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
595
|
+
console.error(`[dispatch] Chat error:`, msg);
|
|
596
|
+
deps.db.executions.recordFinish(executionId, { success: false, error: msg, durationMs: 0 });
|
|
597
|
+
await envelope.reply("Sorry, I encountered an error. Please try again.");
|
|
598
|
+
}
|
|
599
|
+
return { kind: "handled", handler: "chat" };
|
|
600
|
+
}
|
|
601
|
+
//# sourceMappingURL=dispatcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher.js","sourceRoot":"","sources":["../../src/engine/dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|