lastlight 0.1.15 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (478) hide show
  1. package/README.md +265 -118
  2. package/agent-context/rules.md +62 -9
  3. package/agent-context/security.md +69 -0
  4. package/config/default.yaml +89 -0
  5. package/deploy/.env.production.example +20 -2
  6. package/deploy/entrypoint.sh +16 -17
  7. package/deploy/native/README.md +160 -0
  8. package/deploy/native/install.sh +110 -0
  9. package/deploy/native/lastlight.env.example +95 -0
  10. package/deploy/native/lastlight.service +50 -0
  11. package/deploy/sandbox-entrypoint.sh +59 -42
  12. package/dist/admin/auth.d.ts +1 -1
  13. package/dist/admin/auth.js +3 -1
  14. package/dist/admin/auth.js.map +1 -1
  15. package/dist/admin/chat-session-reader.d.ts +11 -14
  16. package/dist/admin/chat-session-reader.js +27 -51
  17. package/dist/admin/chat-session-reader.js.map +1 -1
  18. package/dist/admin/docker.d.ts +37 -0
  19. package/dist/admin/docker.js +86 -1
  20. package/dist/admin/docker.js.map +1 -1
  21. package/dist/admin/index.js +38 -3
  22. package/dist/admin/index.js.map +1 -1
  23. package/dist/admin/log-search.test.d.ts +1 -0
  24. package/dist/admin/log-search.test.js +78 -0
  25. package/dist/admin/log-search.test.js.map +1 -0
  26. package/dist/admin/routes.d.ts +52 -3
  27. package/dist/admin/routes.js +780 -63
  28. package/dist/admin/routes.js.map +1 -1
  29. package/dist/admin/routes.test.js +680 -14
  30. package/dist/admin/routes.test.js.map +1 -1
  31. package/dist/admin/server-logs.test.d.ts +1 -0
  32. package/dist/admin/server-logs.test.js +58 -0
  33. package/dist/admin/server-logs.test.js.map +1 -0
  34. package/dist/admin/sessions.d.ts +26 -39
  35. package/dist/admin/sessions.js +86 -310
  36. package/dist/admin/sessions.js.map +1 -1
  37. package/dist/admin/sessions.test.d.ts +1 -0
  38. package/dist/admin/sessions.test.js +78 -0
  39. package/dist/admin/sessions.test.js.map +1 -0
  40. package/dist/admin/version.d.ts +15 -0
  41. package/dist/admin/version.js +73 -0
  42. package/dist/admin/version.js.map +1 -0
  43. package/dist/admin/version.test.d.ts +1 -0
  44. package/dist/admin/version.test.js +71 -0
  45. package/dist/admin/version.test.js.map +1 -0
  46. package/dist/cli-config.d.ts +55 -0
  47. package/dist/cli-config.js +119 -0
  48. package/dist/cli-config.js.map +1 -0
  49. package/dist/cli-config.test.d.ts +1 -0
  50. package/dist/cli-config.test.js +92 -0
  51. package/dist/cli-config.test.js.map +1 -0
  52. package/dist/cli-format.d.ts +19 -0
  53. package/dist/cli-format.js +107 -0
  54. package/dist/cli-format.js.map +1 -0
  55. package/dist/cli-server.d.ts +73 -0
  56. package/dist/cli-server.js +347 -0
  57. package/dist/cli-server.js.map +1 -0
  58. package/dist/cli-server.test.d.ts +1 -0
  59. package/dist/cli-server.test.js +38 -0
  60. package/dist/cli-server.test.js.map +1 -0
  61. package/dist/cli-timeline.d.ts +35 -0
  62. package/dist/cli-timeline.js +373 -0
  63. package/dist/cli-timeline.js.map +1 -0
  64. package/dist/cli-timeline.test.d.ts +1 -0
  65. package/dist/cli-timeline.test.js +104 -0
  66. package/dist/cli-timeline.test.js.map +1 -0
  67. package/dist/cli.d.ts +0 -19
  68. package/dist/cli.js +910 -194
  69. package/dist/cli.js.map +1 -1
  70. package/dist/config-overlay.test.d.ts +1 -0
  71. package/dist/config-overlay.test.js +112 -0
  72. package/dist/config-overlay.test.js.map +1 -0
  73. package/dist/config-resolve.d.ts +28 -0
  74. package/dist/config-resolve.js +47 -0
  75. package/dist/config-resolve.js.map +1 -0
  76. package/dist/config-resolve.test.d.ts +1 -0
  77. package/dist/config-resolve.test.js +68 -0
  78. package/dist/config-resolve.test.js.map +1 -0
  79. package/dist/config.d.ts +62 -49
  80. package/dist/config.js +452 -76
  81. package/dist/config.js.map +1 -1
  82. package/dist/config.test.js +201 -32
  83. package/dist/config.test.js.map +1 -1
  84. package/dist/connectors/github-webhook.js +83 -5
  85. package/dist/connectors/github-webhook.js.map +1 -1
  86. package/dist/connectors/github-webhook.test.d.ts +1 -0
  87. package/dist/connectors/github-webhook.test.js +156 -0
  88. package/dist/connectors/github-webhook.test.js.map +1 -0
  89. package/dist/connectors/messaging/session-manager.d.ts +18 -0
  90. package/dist/connectors/messaging/session-manager.js +83 -2
  91. package/dist/connectors/messaging/session-manager.js.map +1 -1
  92. package/dist/connectors/messaging/session-manager.test.d.ts +1 -0
  93. package/dist/connectors/messaging/session-manager.test.js +144 -0
  94. package/dist/connectors/messaging/session-manager.test.js.map +1 -0
  95. package/dist/connectors/slack/connector.d.ts +9 -0
  96. package/dist/connectors/slack/connector.js +15 -0
  97. package/dist/connectors/slack/connector.js.map +1 -1
  98. package/dist/connectors/slack/mrkdwn.js +81 -0
  99. package/dist/connectors/slack/mrkdwn.js.map +1 -1
  100. package/dist/connectors/slack/mrkdwn.test.js +49 -0
  101. package/dist/connectors/slack/mrkdwn.test.js.map +1 -1
  102. package/dist/connectors/types.d.ts +1 -1
  103. package/dist/cron/fanout.d.ts +33 -0
  104. package/dist/cron/fanout.js +55 -0
  105. package/dist/cron/fanout.js.map +1 -0
  106. package/dist/cron/fanout.test.d.ts +1 -0
  107. package/dist/cron/fanout.test.js +73 -0
  108. package/dist/cron/fanout.test.js.map +1 -0
  109. package/dist/cron/jobs.d.ts +5 -0
  110. package/dist/cron/jobs.js +10 -3
  111. package/dist/cron/jobs.js.map +1 -1
  112. package/dist/cron/scheduler.d.ts +12 -0
  113. package/dist/cron/scheduler.js +27 -1
  114. package/dist/cron/scheduler.js.map +1 -1
  115. package/dist/engine/agent-executor.d.ts +158 -0
  116. package/dist/engine/agent-executor.js +1140 -0
  117. package/dist/engine/agent-executor.js.map +1 -0
  118. package/dist/engine/agent-executor.test.d.ts +1 -0
  119. package/dist/engine/agent-executor.test.js +395 -0
  120. package/dist/engine/agent-executor.test.js.map +1 -0
  121. package/dist/engine/chat-runner.d.ts +123 -0
  122. package/dist/engine/chat-runner.js +379 -0
  123. package/dist/engine/chat-runner.js.map +1 -0
  124. package/dist/engine/chat-runner.test.d.ts +1 -0
  125. package/dist/engine/chat-runner.test.js +104 -0
  126. package/dist/engine/chat-runner.test.js.map +1 -0
  127. package/dist/engine/chat-skills.d.ts +45 -0
  128. package/dist/engine/chat-skills.js +184 -0
  129. package/dist/engine/chat-skills.js.map +1 -0
  130. package/dist/engine/chat-skills.test.d.ts +1 -0
  131. package/dist/engine/chat-skills.test.js +20 -0
  132. package/dist/engine/chat-skills.test.js.map +1 -0
  133. package/dist/engine/chat.d.ts +20 -23
  134. package/dist/engine/chat.js +251 -155
  135. package/dist/engine/chat.js.map +1 -1
  136. package/dist/engine/chat.test.d.ts +1 -0
  137. package/dist/engine/chat.test.js +42 -0
  138. package/dist/engine/chat.test.js.map +1 -0
  139. package/dist/engine/classifier.d.ts +35 -2
  140. package/dist/engine/classifier.js +170 -31
  141. package/dist/engine/classifier.js.map +1 -1
  142. package/dist/engine/classifier.test.d.ts +1 -0
  143. package/dist/engine/classifier.test.js +115 -0
  144. package/dist/engine/classifier.test.js.map +1 -0
  145. package/dist/engine/dispatcher.d.ts +60 -0
  146. package/dist/engine/dispatcher.js +601 -0
  147. package/dist/engine/dispatcher.js.map +1 -0
  148. package/dist/engine/dispatcher.test.d.ts +1 -0
  149. package/dist/engine/dispatcher.test.js +511 -0
  150. package/dist/engine/dispatcher.test.js.map +1 -0
  151. package/dist/engine/event-shim.d.ts +117 -0
  152. package/dist/engine/event-shim.js +435 -0
  153. package/dist/engine/event-shim.js.map +1 -0
  154. package/dist/engine/event-shim.test.d.ts +1 -0
  155. package/dist/engine/event-shim.test.js +194 -0
  156. package/dist/engine/event-shim.test.js.map +1 -0
  157. package/dist/engine/git-auth.d.ts +13 -17
  158. package/dist/engine/git-auth.js +99 -42
  159. package/dist/engine/git-auth.js.map +1 -1
  160. package/dist/engine/git-auth.test.d.ts +1 -0
  161. package/dist/engine/git-auth.test.js +117 -0
  162. package/dist/engine/git-auth.test.js.map +1 -0
  163. package/dist/engine/github-app-client.d.ts +7 -0
  164. package/dist/engine/github-app-client.js +16 -0
  165. package/dist/engine/github-app-client.js.map +1 -0
  166. package/dist/engine/github-app-client.test.d.ts +1 -0
  167. package/dist/engine/github-app-client.test.js +44 -0
  168. package/dist/engine/github-app-client.test.js.map +1 -0
  169. package/dist/engine/github-tools.d.ts +12 -0
  170. package/dist/engine/github-tools.js +261 -0
  171. package/dist/engine/github-tools.js.map +1 -0
  172. package/dist/engine/github.d.ts +1027 -43
  173. package/dist/engine/github.js +153 -14
  174. package/dist/engine/github.js.map +1 -1
  175. package/dist/engine/llm.d.ts +47 -0
  176. package/dist/engine/llm.js +221 -0
  177. package/dist/engine/llm.js.map +1 -0
  178. package/dist/engine/llm.test.d.ts +1 -0
  179. package/dist/engine/llm.test.js +189 -0
  180. package/dist/engine/llm.test.js.map +1 -0
  181. package/dist/engine/profiles.d.ts +249 -0
  182. package/dist/engine/profiles.js +42 -0
  183. package/dist/engine/profiles.js.map +1 -0
  184. package/dist/engine/router.d.ts +12 -6
  185. package/dist/engine/router.js +339 -81
  186. package/dist/engine/router.js.map +1 -1
  187. package/dist/engine/router.test.js +428 -78
  188. package/dist/engine/router.test.js.map +1 -1
  189. package/dist/engine/screen.d.ts +41 -0
  190. package/dist/engine/screen.js +93 -0
  191. package/dist/engine/screen.js.map +1 -0
  192. package/dist/engine/screen.test.d.ts +1 -0
  193. package/dist/engine/screen.test.js +82 -0
  194. package/dist/engine/screen.test.js.map +1 -0
  195. package/dist/index.js +377 -432
  196. package/dist/index.js.map +1 -1
  197. package/dist/managed-repos.d.ts +7 -9
  198. package/dist/managed-repos.js +12 -15
  199. package/dist/managed-repos.js.map +1 -1
  200. package/dist/managed-repos.test.js +24 -19
  201. package/dist/managed-repos.test.js.map +1 -1
  202. package/dist/notify/index.d.ts +15 -0
  203. package/dist/notify/index.js +6 -0
  204. package/dist/notify/index.js.map +1 -0
  205. package/dist/notify/model.d.ts +57 -0
  206. package/dist/notify/model.js +89 -0
  207. package/dist/notify/model.js.map +1 -0
  208. package/dist/notify/model.test.d.ts +1 -0
  209. package/dist/notify/model.test.js +109 -0
  210. package/dist/notify/model.test.js.map +1 -0
  211. package/dist/notify/notifier.d.ts +17 -0
  212. package/dist/notify/notifier.js +87 -0
  213. package/dist/notify/notifier.js.map +1 -0
  214. package/dist/notify/notifier.test.d.ts +1 -0
  215. package/dist/notify/notifier.test.js +100 -0
  216. package/dist/notify/notifier.test.js.map +1 -0
  217. package/dist/notify/render.d.ts +21 -0
  218. package/dist/notify/render.js +59 -0
  219. package/dist/notify/render.js.map +1 -0
  220. package/dist/notify/render.test.d.ts +1 -0
  221. package/dist/notify/render.test.js +65 -0
  222. package/dist/notify/render.test.js.map +1 -0
  223. package/dist/notify/transports/github.d.ts +26 -0
  224. package/dist/notify/transports/github.js +26 -0
  225. package/dist/notify/transports/github.js.map +1 -0
  226. package/dist/notify/transports/slack.d.ts +26 -0
  227. package/dist/notify/transports/slack.js +28 -0
  228. package/dist/notify/transports/slack.js.map +1 -0
  229. package/dist/notify/transports.test.d.ts +1 -0
  230. package/dist/notify/transports.test.js +71 -0
  231. package/dist/notify/transports.test.js.map +1 -0
  232. package/dist/notify/types.d.ts +95 -0
  233. package/dist/notify/types.js +16 -0
  234. package/dist/notify/types.js.map +1 -0
  235. package/dist/sandbox/docker-compose.test.d.ts +1 -0
  236. package/dist/sandbox/docker-compose.test.js +128 -0
  237. package/dist/sandbox/docker-compose.test.js.map +1 -0
  238. package/dist/sandbox/docker.d.ts +97 -9
  239. package/dist/sandbox/docker.js +192 -41
  240. package/dist/sandbox/docker.js.map +1 -1
  241. package/dist/sandbox/docker.test.d.ts +1 -0
  242. package/dist/sandbox/docker.test.js +137 -0
  243. package/dist/sandbox/docker.test.js.map +1 -0
  244. package/dist/sandbox/egress-allowlist.d.ts +69 -0
  245. package/dist/sandbox/egress-allowlist.js +164 -0
  246. package/dist/sandbox/egress-allowlist.js.map +1 -0
  247. package/dist/sandbox/egress-allowlist.test.d.ts +1 -0
  248. package/dist/sandbox/egress-allowlist.test.js +65 -0
  249. package/dist/sandbox/egress-allowlist.test.js.map +1 -0
  250. package/dist/sandbox/egress-firewall-config.d.ts +127 -0
  251. package/dist/sandbox/egress-firewall-config.js +434 -0
  252. package/dist/sandbox/egress-firewall-config.js.map +1 -0
  253. package/dist/sandbox/egress-firewall-config.test.d.ts +1 -0
  254. package/dist/sandbox/egress-firewall-config.test.js +244 -0
  255. package/dist/sandbox/egress-firewall-config.test.js.map +1 -0
  256. package/dist/sandbox/images.d.ts +23 -0
  257. package/dist/sandbox/images.js +55 -0
  258. package/dist/sandbox/images.js.map +1 -0
  259. package/dist/sandbox/index.d.ts +82 -3
  260. package/dist/sandbox/index.js +223 -93
  261. package/dist/sandbox/index.js.map +1 -1
  262. package/dist/sandbox/index.test.d.ts +1 -0
  263. package/dist/sandbox/index.test.js +157 -0
  264. package/dist/sandbox/index.test.js.map +1 -0
  265. package/dist/session-log.d.ts +63 -0
  266. package/dist/session-log.js +290 -0
  267. package/dist/session-log.js.map +1 -0
  268. package/dist/session-log.test.d.ts +1 -0
  269. package/dist/session-log.test.js +85 -0
  270. package/dist/session-log.test.js.map +1 -0
  271. package/dist/setup.d.ts +30 -1
  272. package/dist/setup.js +241 -25
  273. package/dist/setup.js.map +1 -1
  274. package/dist/setup.test.js +138 -6
  275. package/dist/setup.test.js.map +1 -1
  276. package/dist/state/approval-store.d.ts +86 -0
  277. package/dist/state/approval-store.js +140 -0
  278. package/dist/state/approval-store.js.map +1 -0
  279. package/dist/state/build-assets.d.ts +50 -0
  280. package/dist/state/build-assets.js +154 -0
  281. package/dist/state/build-assets.js.map +1 -0
  282. package/dist/state/build-assets.test.d.ts +1 -0
  283. package/dist/state/build-assets.test.js +106 -0
  284. package/dist/state/build-assets.test.js.map +1 -0
  285. package/dist/state/db.d.ts +65 -333
  286. package/dist/state/db.js +112 -835
  287. package/dist/state/db.js.map +1 -1
  288. package/dist/state/db.test.js +127 -91
  289. package/dist/state/db.test.js.map +1 -1
  290. package/dist/state/execution-store.d.ts +257 -0
  291. package/dist/state/execution-store.js +527 -0
  292. package/dist/state/execution-store.js.map +1 -0
  293. package/dist/state/migrate.d.ts +15 -0
  294. package/dist/state/migrate.js +175 -0
  295. package/dist/state/migrate.js.map +1 -0
  296. package/dist/state/workflow-run-store.d.ts +195 -0
  297. package/dist/state/workflow-run-store.js +363 -0
  298. package/dist/state/workflow-run-store.js.map +1 -0
  299. package/dist/state/workflow-run-store.test.d.ts +1 -0
  300. package/dist/state/workflow-run-store.test.js +264 -0
  301. package/dist/state/workflow-run-store.test.js.map +1 -0
  302. package/dist/telemetry/index.d.ts +38 -0
  303. package/dist/telemetry/index.js +253 -0
  304. package/dist/telemetry/index.js.map +1 -0
  305. package/dist/telemetry/index.test.d.ts +1 -0
  306. package/dist/telemetry/index.test.js +73 -0
  307. package/dist/telemetry/index.test.js.map +1 -0
  308. package/dist/telemetry/pi-events.d.ts +12 -0
  309. package/dist/telemetry/pi-events.js +134 -0
  310. package/dist/telemetry/pi-events.js.map +1 -0
  311. package/dist/telemetry/pi-events.test.d.ts +1 -0
  312. package/dist/telemetry/pi-events.test.js +69 -0
  313. package/dist/telemetry/pi-events.test.js.map +1 -0
  314. package/dist/workflows/dag.d.ts +13 -1
  315. package/dist/workflows/dag.js +7 -3
  316. package/dist/workflows/dag.js.map +1 -1
  317. package/dist/workflows/dag.test.js +22 -0
  318. package/dist/workflows/dag.test.js.map +1 -1
  319. package/dist/workflows/golden-build.test.d.ts +1 -0
  320. package/dist/workflows/golden-build.test.js +45 -0
  321. package/dist/workflows/golden-build.test.js.map +1 -0
  322. package/dist/workflows/loader-overlay.test.d.ts +1 -0
  323. package/dist/workflows/loader-overlay.test.js +101 -0
  324. package/dist/workflows/loader-overlay.test.js.map +1 -0
  325. package/dist/workflows/loader.d.ts +36 -11
  326. package/dist/workflows/loader.js +311 -87
  327. package/dist/workflows/loader.js.map +1 -1
  328. package/dist/workflows/loader.test.js +114 -10
  329. package/dist/workflows/loader.test.js.map +1 -1
  330. package/dist/workflows/loop-eval.js +2 -0
  331. package/dist/workflows/loop-eval.js.map +1 -1
  332. package/dist/workflows/loop-eval.test.js +14 -0
  333. package/dist/workflows/loop-eval.test.js.map +1 -1
  334. package/dist/workflows/phase-executor.d.ts +145 -0
  335. package/dist/workflows/phase-executor.js +691 -0
  336. package/dist/workflows/phase-executor.js.map +1 -0
  337. package/dist/workflows/phase-executor.test.d.ts +1 -0
  338. package/dist/workflows/phase-executor.test.js +434 -0
  339. package/dist/workflows/phase-executor.test.js.map +1 -0
  340. package/dist/workflows/phase-ref.d.ts +44 -0
  341. package/dist/workflows/phase-ref.js +78 -0
  342. package/dist/workflows/phase-ref.js.map +1 -0
  343. package/dist/workflows/phase-ref.test.d.ts +1 -0
  344. package/dist/workflows/phase-ref.test.js +24 -0
  345. package/dist/workflows/phase-ref.test.js.map +1 -0
  346. package/dist/workflows/resume.d.ts +5 -11
  347. package/dist/workflows/resume.js +88 -7
  348. package/dist/workflows/resume.js.map +1 -1
  349. package/dist/workflows/runner.d.ts +34 -27
  350. package/dist/workflows/runner.js +252 -930
  351. package/dist/workflows/runner.js.map +1 -1
  352. package/dist/workflows/runner.test.js +346 -35
  353. package/dist/workflows/runner.test.js.map +1 -1
  354. package/dist/workflows/schema.d.ts +52 -10
  355. package/dist/workflows/schema.js +147 -7
  356. package/dist/workflows/schema.js.map +1 -1
  357. package/dist/workflows/simple.d.ts +67 -3
  358. package/dist/workflows/simple.js +248 -87
  359. package/dist/workflows/simple.js.map +1 -1
  360. package/dist/workflows/simple.test.d.ts +1 -0
  361. package/dist/workflows/simple.test.js +107 -0
  362. package/dist/workflows/simple.test.js.map +1 -0
  363. package/dist/workflows/templates.d.ts +29 -0
  364. package/dist/workflows/templates.js +42 -4
  365. package/dist/workflows/templates.js.map +1 -1
  366. package/dist/workflows/templates.test.js +103 -0
  367. package/dist/workflows/templates.test.js.map +1 -1
  368. package/dist/workflows/triggers.d.ts +21 -0
  369. package/dist/workflows/triggers.js +44 -0
  370. package/dist/workflows/triggers.js.map +1 -0
  371. package/dist/workflows/verdict.d.ts +19 -0
  372. package/dist/workflows/verdict.js +30 -0
  373. package/dist/workflows/verdict.js.map +1 -0
  374. package/dist/workflows/verdict.test.d.ts +1 -0
  375. package/dist/workflows/verdict.test.js +44 -0
  376. package/dist/workflows/verdict.test.js.map +1 -0
  377. package/dist/worktree/manager.d.ts +1 -1
  378. package/dist/worktree/manager.js +14 -14
  379. package/dist/worktree/manager.js.map +1 -1
  380. package/dist/worktree/manager.test.d.ts +1 -0
  381. package/dist/worktree/manager.test.js +87 -0
  382. package/dist/worktree/manager.test.js.map +1 -0
  383. package/docker-compose.yml +206 -5
  384. package/package.json +19 -9
  385. package/sandbox.Dockerfile +97 -18
  386. package/skills/README.md +40 -0
  387. package/skills/browser-qa/SKILL.md +193 -0
  388. package/skills/browser-qa/scripts/agent-browser.mjs +380 -0
  389. package/skills/building/SKILL.md +95 -0
  390. package/skills/chat/SKILL.md +30 -11
  391. package/skills/code-review/SKILL.md +59 -0
  392. package/skills/debug-production/SKILL.md +108 -0
  393. package/skills/demo/SKILL.md +194 -0
  394. package/skills/demo/scripts/compose-demo.sh +205 -0
  395. package/skills/issue-answer/SKILL.md +90 -0
  396. package/skills/issue-comment/SKILL.md +38 -24
  397. package/skills/issue-triage/SKILL.md +103 -37
  398. package/skills/issue-triage/references/AGENT-BRIEF.md +61 -0
  399. package/skills/pr-comment/SKILL.md +64 -0
  400. package/skills/pr-review/SKILL.md +65 -49
  401. package/skills/qa-test/SKILL.md +97 -0
  402. package/skills/repo-health/SKILL.md +48 -45
  403. package/skills/security-feedback/SKILL.md +173 -0
  404. package/skills/security-feedback/references/templates.md +77 -0
  405. package/skills/security-review/SKILL.md +213 -0
  406. package/skills/security-review/references/issue-format.md +302 -0
  407. package/skills/verify/SKILL.md +118 -0
  408. package/workflows/answer.yaml +37 -0
  409. package/workflows/build.yaml +32 -22
  410. package/workflows/cron-security.yaml +6 -0
  411. package/workflows/demo.yaml +55 -0
  412. package/workflows/explore.yaml +9 -0
  413. package/workflows/pr-comment.yaml +16 -0
  414. package/workflows/pr-fix.yaml +3 -0
  415. package/workflows/pr-review.yaml +4 -1
  416. package/workflows/prompts/answer.md +67 -0
  417. package/workflows/prompts/architect.md +24 -7
  418. package/workflows/prompts/demo.md +100 -0
  419. package/workflows/prompts/executor.md +29 -20
  420. package/workflows/prompts/explore-ask.md +51 -22
  421. package/workflows/prompts/explore-publish.md +2 -2
  422. package/workflows/prompts/explore-read.md +24 -10
  423. package/workflows/prompts/explore-synthesize.md +15 -8
  424. package/workflows/prompts/fix.md +9 -10
  425. package/workflows/prompts/guardrails.md +26 -8
  426. package/workflows/prompts/pr-fix.md +6 -7
  427. package/workflows/prompts/pr.md +11 -10
  428. package/workflows/prompts/qa-browser.md +95 -0
  429. package/workflows/prompts/qa-synth.md +44 -0
  430. package/workflows/prompts/qa-test.md +60 -0
  431. package/workflows/prompts/re-reviewer.md +8 -9
  432. package/workflows/prompts/reviewer.md +10 -9
  433. package/workflows/prompts/verify-browser.md +93 -0
  434. package/workflows/prompts/verify-synth.md +44 -0
  435. package/workflows/prompts/verify.md +63 -0
  436. package/workflows/qa-test.yaml +87 -0
  437. package/workflows/security-feedback.yaml +25 -0
  438. package/workflows/security-review.yaml +29 -0
  439. package/workflows/verify.yaml +85 -0
  440. package/deploy/mcp-config.tmpl.json +0 -14
  441. package/dist/cron/rate-limits.d.ts +0 -26
  442. package/dist/cron/rate-limits.js +0 -193
  443. package/dist/cron/rate-limits.js.map +0 -1
  444. package/dist/engine/executor.d.ts +0 -75
  445. package/dist/engine/executor.js +0 -292
  446. package/dist/engine/executor.js.map +0 -1
  447. package/mcp-github-app/package.json +0 -18
  448. package/mcp-github-app/src/auth.js +0 -66
  449. package/mcp-github-app/src/github.js +0 -371
  450. package/mcp-github-app/src/index.js +0 -534
  451. package/skills/devops/webhook-subscriptions/SKILL.md +0 -180
  452. package/skills/github/DESCRIPTION.md +0 -3
  453. package/skills/github/codebase-inspection/SKILL.md +0 -115
  454. package/skills/github/github-auth/SKILL.md +0 -54
  455. package/skills/github/github-auth/scripts/gh-env.sh +0 -66
  456. package/skills/github/github-code-review/SKILL.md +0 -480
  457. package/skills/github/github-code-review/references/review-output-template.md +0 -74
  458. package/skills/github/github-issues/SKILL.md +0 -369
  459. package/skills/github/github-issues/templates/bug-report.md +0 -35
  460. package/skills/github/github-issues/templates/feature-request.md +0 -31
  461. package/skills/github/github-pr-workflow/SKILL.md +0 -395
  462. package/skills/github/github-pr-workflow/references/ci-troubleshooting.md +0 -183
  463. package/skills/github/github-pr-workflow/references/conventional-commits.md +0 -71
  464. package/skills/github/github-pr-workflow/templates/pr-body-bugfix.md +0 -35
  465. package/skills/github/github-pr-workflow/templates/pr-body-feature.md +0 -33
  466. package/skills/github/github-repo-management/SKILL.md +0 -515
  467. package/skills/github/github-repo-management/references/github-api-cheatsheet.md +0 -161
  468. package/skills/github-orchestrator/SKILL.md +0 -103
  469. package/skills/mcp/DESCRIPTION.md +0 -3
  470. package/skills/mcp/mcporter/SKILL.md +0 -122
  471. package/skills/mcp/native-mcp/SKILL.md +0 -356
  472. package/skills/software-development/architect/SKILL.md +0 -154
  473. package/skills/software-development/assure-guardrails/SKILL.md +0 -239
  474. package/skills/software-development/plan/SKILL.md +0 -64
  475. package/skills/software-development/requesting-code-review/SKILL.md +0 -291
  476. package/skills/software-development/subagent-driven-development/SKILL.md +0 -433
  477. package/skills/software-development/systematic-debugging/SKILL.md +0 -366
  478. 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 {};