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.
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 +423 -437
  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 +31 -12
  272. package/dist/setup.js +516 -174
  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 -7
  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,78 @@
1
+ /**
2
+ * The single authority for building and resolving the phase labels the runner
3
+ * generates for loop iterations.
4
+ *
5
+ * A workflow phase named in the YAML (e.g. `reviewer`) keeps that bare name for
6
+ * its initial run. When a reviewer loop fixes-and-rechecks, or a generic loop
7
+ * iterates, the runner mints a derived label. `PhaseRef.format()` is the ONLY
8
+ * place those derived strings are constructed, and `PhaseRef.parse()` resolves
9
+ * them back to their base phase + kind.
10
+ *
11
+ * Scheme (post-#93):
12
+ *
13
+ * initial review → reviewer
14
+ * cycle n fix → reviewer_fix_n
15
+ * cycle n re-review → reviewer_recheck_n
16
+ * generic-loop iteration n → reviewer_iter_n
17
+ *
18
+ * `n` is the 1-based cycle; `fix_k` and `recheck_k` pair within a cycle. The
19
+ * legacy bare-numeric re-review form (`reviewer_2`) is dropped entirely — it is
20
+ * neither produced nor recognized.
21
+ */
22
+ export class PhaseRef {
23
+ base;
24
+ kind;
25
+ index;
26
+ constructor(base, kind = "phase", index) {
27
+ this.base = base;
28
+ this.kind = kind;
29
+ this.index = index;
30
+ }
31
+ /** The declared phase, run as-is (no derived suffix). */
32
+ static review(base) {
33
+ return new PhaseRef(base, "phase");
34
+ }
35
+ /** The executor fix run for cycle `n`. */
36
+ static fix(base, n) {
37
+ return new PhaseRef(base, "fix", n);
38
+ }
39
+ /** The reviewer re-review run for cycle `n`. */
40
+ static recheck(base, n) {
41
+ return new PhaseRef(base, "recheck", n);
42
+ }
43
+ /** The generic-loop iteration `n`. */
44
+ static iter(base, n) {
45
+ return new PhaseRef(base, "iter", n);
46
+ }
47
+ format() {
48
+ switch (this.kind) {
49
+ case "phase":
50
+ return this.base;
51
+ case "fix":
52
+ return `${this.base}_fix_${this.index}`;
53
+ case "recheck":
54
+ return `${this.base}_recheck_${this.index}`;
55
+ case "iter":
56
+ return `${this.base}_iter_${this.index}`;
57
+ }
58
+ }
59
+ /**
60
+ * Parse a label back into a PhaseRef. Recognizes only the generated
61
+ * `_fix_N` / `_recheck_N` / `_iter_N` suffixes; anything else (including a
62
+ * bare declared name or the dropped legacy `_N` form) parses as a plain
63
+ * `phase` whose base is the whole string.
64
+ */
65
+ static parse(label) {
66
+ let m = label.match(/^(.*)_fix_(\d+)$/);
67
+ if (m)
68
+ return new PhaseRef(m[1], "fix", Number(m[2]));
69
+ m = label.match(/^(.*)_recheck_(\d+)$/);
70
+ if (m)
71
+ return new PhaseRef(m[1], "recheck", Number(m[2]));
72
+ m = label.match(/^(.*)_iter_(\d+)$/);
73
+ if (m)
74
+ return new PhaseRef(m[1], "iter", Number(m[2]));
75
+ return new PhaseRef(label, "phase");
76
+ }
77
+ }
78
+ //# sourceMappingURL=phase-ref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-ref.js","sourceRoot":"","sources":["../../src/workflows/phase-ref.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,MAAM,OAAO,QAAQ;IAER;IACA;IACA;IAHX,YACW,IAAY,EACZ,OAAkB,OAAO,EACzB,KAAc;QAFd,SAAI,GAAJ,IAAI,CAAQ;QACZ,SAAI,GAAJ,IAAI,CAAqB;QACzB,UAAK,GAAL,KAAK,CAAS;IACtB,CAAC;IAEJ,yDAAyD;IACzD,MAAM,CAAC,MAAM,CAAC,IAAY;QACxB,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAED,0CAA0C;IAC1C,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,CAAS;QAChC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,gDAAgD;IAChD,MAAM,CAAC,OAAO,CAAC,IAAY,EAAE,CAAS;QACpC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,sCAAsC;IACtC,MAAM,CAAC,IAAI,CAAC,IAAY,EAAE,CAAS;QACjC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,MAAM;QACJ,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,OAAO;gBACV,OAAO,IAAI,CAAC,IAAI,CAAC;YACnB,KAAK,KAAK;gBACR,OAAO,GAAG,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1C,KAAK,SAAS;gBACZ,OAAO,GAAG,IAAI,CAAC,IAAI,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9C,KAAK,MAAM;gBACT,OAAO,GAAG,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,KAAK,CAAC,KAAa;QACxB,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,IAAI,CAAC;YAAE,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACxC,IAAI,CAAC;YAAE,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1D,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACrC,IAAI,CAAC;YAAE,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,24 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { PhaseRef } from "./phase-ref.js";
3
+ describe("PhaseRef.format — the single label authority", () => {
4
+ it("pins the literal generated label strings", () => {
5
+ expect(PhaseRef.review("reviewer").format()).toBe("reviewer");
6
+ expect(PhaseRef.fix("reviewer", 1).format()).toBe("reviewer_fix_1");
7
+ expect(PhaseRef.recheck("reviewer", 1).format()).toBe("reviewer_recheck_1");
8
+ expect(PhaseRef.iter("reviewer", 1).format()).toBe("reviewer_iter_1");
9
+ });
10
+ });
11
+ describe("PhaseRef.parse — round-trips generated labels back to base + kind", () => {
12
+ it("parses each generated suffix", () => {
13
+ expect(PhaseRef.parse("reviewer_fix_2")).toMatchObject({ base: "reviewer", kind: "fix", index: 2 });
14
+ expect(PhaseRef.parse("reviewer_recheck_2")).toMatchObject({ base: "reviewer", kind: "recheck", index: 2 });
15
+ expect(PhaseRef.parse("reviewer_iter_3")).toMatchObject({ base: "reviewer", kind: "iter", index: 3 });
16
+ });
17
+ it("parses a bare declared name as a plain phase", () => {
18
+ expect(PhaseRef.parse("reviewer")).toMatchObject({ base: "reviewer", kind: "phase" });
19
+ });
20
+ it("parses the dropped legacy reviewer_2 form as a plain phase (not a recheck)", () => {
21
+ expect(PhaseRef.parse("reviewer_2")).toMatchObject({ base: "reviewer_2", kind: "phase" });
22
+ });
23
+ });
24
+ //# sourceMappingURL=phase-ref.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-ref.test.js","sourceRoot":"","sources":["../../src/workflows/phase-ref.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;IAC5D,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9D,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC5E,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mEAAmE,EAAE,GAAG,EAAE;IACjF,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5G,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,17 +1,20 @@
1
1
  import type { StateDb } from "../state/db.js";
2
- import type { ExecutorConfig } from "../engine/executor.js";
2
+ import type { ExecutorConfig } from "../engine/profiles.js";
3
3
  import type { GitHubClient } from "../engine/github.js";
4
- import type { ModelConfig } from "../config.js";
4
+ import type { ModelConfig, VariantConfig } from "../config.js";
5
5
  import { type ApprovalGateConfig } from "./runner.js";
6
6
  export interface ResumeOptions {
7
7
  db: StateDb;
8
8
  github: GitHubClient | null;
9
9
  config: ExecutorConfig;
10
10
  models?: ModelConfig;
11
+ variants?: VariantConfig;
11
12
  approvalConfig?: ApprovalGateConfig;
12
13
  bootstrapLabel?: string;
13
14
  /** Post a message to a Slack channel/thread. Used to resume Slack-originated workflows. */
14
15
  slackPoster?: (channelId: string, threadId: string, msg: string) => Promise<void>;
16
+ /** Public base URL of the admin dashboard — for the checklist's live-run link. */
17
+ publicUrl?: string;
15
18
  }
16
19
  /**
17
20
  * Parse `cliftonc/drizby#18` (or `cliftonc/drizby::workflow-name`) into
@@ -32,13 +35,4 @@ export declare function parseSlackTriggerId(triggerId: string): {
32
35
  channelId: string;
33
36
  threadTs: string;
34
37
  } | null;
35
- /**
36
- * Boot-time sweep: find every workflow run that was 'running' when the
37
- * harness last shut down, mark its in-flight execution rows as stale (the
38
- * Docker containers were already killed by cleanupOrphanedSandboxes), then
39
- * re-dispatch each run so the runner can pick up where it left off.
40
- *
41
- * 'paused' runs are intentionally left alone — they're waiting for human
42
- * approval and the dashboard / GitHub comment flow will resume them.
43
- */
44
38
  export declare function resumeOrphanedWorkflows(opts: ResumeOptions): Promise<void>;
@@ -1,6 +1,7 @@
1
1
  import { runWorkflow } from "./runner.js";
2
2
  import { getWorkflow } from "./loader.js";
3
3
  import { slugify } from "./templates.js";
4
+ import { ProgressNotifier, GitHubTransport, buildProgressModel, runDashboardUrl, } from "../notify/index.js";
4
5
  /**
5
6
  * Parse `cliftonc/drizby#18` (or `cliftonc/drizby::workflow-name`) into
6
7
  * its components. Returns null for Slack/chat-originated trigger ids —
@@ -119,7 +120,7 @@ async function resumeSimpleRun(run, opts) {
119
120
  catch (err) {
120
121
  const msg = err instanceof Error ? err.message : String(err);
121
122
  console.warn(`[resume] Skipping ${run.id}: workflow definition "${run.workflowName}" not found: ${msg}`);
122
- opts.db.finishWorkflowRun(run.id, "failed", `harness restarted; workflow definition not found`);
123
+ opts.db.runs.finishRun(run.id, "failed", { error: `harness restarted; workflow definition not found` });
123
124
  return;
124
125
  }
125
126
  const issue = issueNumber && owner && repo
@@ -148,8 +149,19 @@ async function resumeSimpleRun(run, opts) {
148
149
  branch,
149
150
  taskId,
150
151
  issueDir,
152
+ // Mirror the fresh-dispatch context so a resumed server-mode run keeps
153
+ // externalizing (and linking docs to the dashboard) instead of silently
154
+ // reverting to committing them on the branch.
155
+ externalizeArtifacts: opts.config.buildAssets === "server",
156
+ publicUrl: opts.publicUrl,
151
157
  bootstrapLabel: opts.bootstrapLabel || "lastlight:bootstrap",
152
158
  contextSnapshot: "",
159
+ // Preserve the original prePopulateBranch so a resumed run still
160
+ // gets its workspace pre-cloned (matters for pr-fix re-entry after
161
+ // an approval gate, where the branch was resolved at first dispatch).
162
+ prePopulateBranch: typeof stored.prePopulateBranch === "string"
163
+ ? stored.prePopulateBranch
164
+ : undefined,
153
165
  models: opts.models,
154
166
  triggerIdOverride: isSlack ? run.triggerId : undefined,
155
167
  };
@@ -178,19 +190,70 @@ async function resumeSimpleRun(run, opts) {
178
190
  };
179
191
  }
180
192
  }
193
+ let callbacks = slackCallbacks || makeCallbacks(opts.github, owner, repo, issueNumber, run.workflowName);
194
+ // Re-attach the in-place checklist on GitHub boot-recovery so a run that was
195
+ // mid-flight when the harness died keeps editing its original status comment
196
+ // instead of posting a fresh one. The stored comment id lives in
197
+ // scratch.notifier; completed phases are re-seeded from phase_history.
198
+ // (The Slack boot-recovery path only has a post function here — no
199
+ // chat.update — so it stays on legacy comments.)
200
+ if (!slackCallbacks && definition.status_checklist && opts.github && issueNumber) {
201
+ try {
202
+ const saved = ((run.scratch?.notifier) ?? {});
203
+ const github = opts.github;
204
+ const persist = (patch) => {
205
+ const cur = ((opts.db.runs.getRun(run.id)?.scratch?.notifier) ?? {});
206
+ opts.db.runs.mergeScratch(run.id, { notifier: { ...cur, ...patch } });
207
+ };
208
+ const transport = new GitHubTransport({
209
+ github,
210
+ owner,
211
+ repo,
212
+ issueNumber,
213
+ commentId: saved.githubCommentId,
214
+ save: (id) => persist({ githubCommentId: id }),
215
+ });
216
+ const notifier = new ProgressNotifier([transport]);
217
+ const completed = new Set(run.phaseHistory.map((h) => h.phase));
218
+ await notifier.start(buildProgressModel(definition, {
219
+ workflowName: run.workflowName,
220
+ number: issueNumber,
221
+ issueTitle: issue.title,
222
+ owner,
223
+ repo,
224
+ branch,
225
+ completed,
226
+ runUrl: runDashboardUrl(opts.publicUrl, run.id, run.workflowName),
227
+ }));
228
+ callbacks = { ...callbacks, reporter: notifier };
229
+ }
230
+ catch (err) {
231
+ const m = err instanceof Error ? err.message : String(err);
232
+ console.warn(`[resume] notifier setup failed: ${m}`);
233
+ }
234
+ }
235
+ // Server mode: tag the config with this run's artifact identity so the
236
+ // executor's stage-in/harvest seam targets the same store path the original
237
+ // dispatch used (issueKey = issueDir minus the `.lastlight/` prefix).
238
+ const runConfig = opts.config.buildAssets === "server"
239
+ ? { ...opts.config, buildAssetsKey: { owner, repo, issueKey: issueDir.replace(/^\.lastlight\//, "") } }
240
+ : opts.config;
181
241
  try {
182
- const result = await runWorkflow(definition, ctx, opts.config, slackCallbacks || makeCallbacks(opts.github, owner, repo, issueNumber, run.workflowName), opts.db, opts.models, opts.approvalConfig, run.id);
242
+ const result = await runWorkflow(definition, ctx, runConfig, callbacks, opts.db, opts.models, opts.approvalConfig, run.id, // <-- key bit: reuse the existing workflow run id
243
+ opts.variants);
183
244
  if (result.success) {
184
- opts.db.finishWorkflowRun(run.id, "succeeded");
245
+ opts.db.runs.finishRun(run.id, "succeeded");
185
246
  }
186
247
  else if (!result.paused) {
187
- opts.db.finishWorkflowRun(run.id, "failed", result.phases.find((p) => !p.success)?.error || "workflow failed during resume");
248
+ opts.db.runs.finishRun(run.id, "failed", {
249
+ error: result.phases.find((p) => !p.success)?.error || "workflow failed during resume",
250
+ });
188
251
  }
189
252
  }
190
253
  catch (err) {
191
254
  const msg = err instanceof Error ? err.message : String(err);
192
255
  console.error(`[resume] ${run.workflowName} resume for ${run.id} threw: ${msg}`);
193
- opts.db.finishWorkflowRun(run.id, "failed", `resume threw: ${msg}`);
256
+ opts.db.runs.finishRun(run.id, "failed", { error: `resume threw: ${msg}` });
194
257
  }
195
258
  }
196
259
  /**
@@ -202,8 +265,15 @@ async function resumeSimpleRun(run, opts) {
202
265
  * 'paused' runs are intentionally left alone — they're waiting for human
203
266
  * approval and the dashboard / GitHub comment flow will resume them.
204
267
  */
268
+ /**
269
+ * Maximum number of times a single workflow run can be resumed after a
270
+ * harness restart. Past this we mark the run failed and stop re-dispatching
271
+ * it, on the theory that a run that crashes the host three times in a row
272
+ * (agent OOM, infinite loop, etc.) needs a human, not another attempt.
273
+ */
274
+ const MAX_RESTART_RESUMES = 3;
205
275
  export async function resumeOrphanedWorkflows(opts) {
206
- const active = opts.db.activeWorkflowRuns();
276
+ const active = opts.db.runs.listActive();
207
277
  const orphans = active.filter((r) => r.status === "running");
208
278
  if (orphans.length === 0) {
209
279
  console.log("[resume] No orphaned workflow runs to recover");
@@ -212,10 +282,21 @@ export async function resumeOrphanedWorkflows(opts) {
212
282
  console.log(`[resume] Found ${orphans.length} orphaned workflow run(s) — recovering`);
213
283
  for (const run of orphans) {
214
284
  // Clear any "still running" execution rows so dedup works on resume.
215
- const cleared = opts.db.markAllStaleForTrigger(run.triggerId, "stale: harness restarted");
285
+ const cleared = opts.db.executions.markAllStaleForTrigger(run.triggerId, "stale: harness restarted");
216
286
  if (cleared > 0) {
217
287
  console.log(`[resume] Cleared ${cleared} stale execution(s) for ${run.triggerId}`);
218
288
  }
289
+ // Circuit breaker: bump the per-run restart counter, and if we've now
290
+ // resumed it more than MAX_RESTART_RESUMES times, mark it failed and
291
+ // move on. This is what stops an OOM-on-restart loop from churning
292
+ // forever.
293
+ const attempts = opts.db.runs.incrementRestartCount(run.id);
294
+ if (attempts > MAX_RESTART_RESUMES) {
295
+ const msg = `harness restarted ${attempts - 1}x while this run was active — giving up after ${MAX_RESTART_RESUMES} resume attempts`;
296
+ console.warn(`[resume] ${run.workflowName} run ${run.id}: ${msg}`);
297
+ opts.db.runs.finishRun(run.id, "failed", { error: msg });
298
+ continue;
299
+ }
219
300
  // Dispatch in the background — we don't want one slow resume to block
220
301
  // the others (or the rest of the boot sequence).
221
302
  resumeSimpleRun(run, opts).catch((err) => console.error(`[resume] ${run.workflowName} run ${run.id} crashed:`, err));
@@ -1 +1 @@
1
- {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/workflows/resume.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/workflows/resume.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
- import type { ExecutorConfig } from "../engine/executor.js";
1
+ import type { ExecutorConfig, GitAccessProfile, GitSandboxAccess } from "../engine/profiles.js";
2
2
  import type { StateDb } from "../state/db.js";
3
- import type { ModelConfig } from "../config.js";
3
+ import type { ModelConfig, VariantConfig } from "../config.js";
4
4
  import type { AgentWorkflowDefinition } from "./schema.js";
5
5
  import { type TemplateContext } from "./templates.js";
6
+ import { isTerminated } from "./phase-executor.js";
7
+ import type { ProgressReporter } from "../notify/types.js";
8
+ export { isTerminated };
6
9
  /**
7
10
  * Map of approval gate name → enabled. Gate names are arbitrary strings
8
11
  * declared in YAML (`phase.approval_gate`, `phase.loop.approval_gate`); a
@@ -19,6 +22,23 @@ export interface RunnerCallbacks {
19
22
  onPhaseStart?: (phase: string) => Promise<void>;
20
23
  onPhaseEnd?: (phase: string, result: PhaseResult) => Promise<void>;
21
24
  postComment?: (body: string) => Promise<void>;
25
+ /**
26
+ * In-place "task list" progress surface. When set (workflows that opt in via
27
+ * `status_checklist: true`), the runner drives this instead of posting a new
28
+ * comment per phase. When unset, the runner falls back to `postComment`.
29
+ */
30
+ reporter?: ProgressReporter;
31
+ /**
32
+ * Fires once the workflow_runs row is known. Used by the Slack dispatch path
33
+ * to post the "Starting <skill>" reply with a deep link to the run.
34
+ */
35
+ onRunStart?: (runId: string) => Promise<void>;
36
+ /**
37
+ * Public base URL of the admin dashboard (`config.publicUrl`). When set, the
38
+ * progress checklist embeds a live-run deep link in its meta. Undefined when
39
+ * no public URL is configured (the link is simply omitted).
40
+ */
41
+ publicUrl?: string;
22
42
  }
23
43
  export interface WorkflowResult {
24
44
  success: boolean;
@@ -26,31 +46,18 @@ export interface WorkflowResult {
26
46
  prNumber?: number;
27
47
  paused?: boolean;
28
48
  }
29
- /**
30
- * Check if an error was caused by manual termination.
31
- */
32
- export declare function isTerminated(error?: string): boolean;
33
- /**
34
- * Resolve a recorded phase name to its index in `definition.phases`.
35
- * Handles the generated iteration labels the runner writes for looping phases:
36
- *
37
- * `${phase}_iter_${n}` — generic_loop iteration
38
- * `${phase}_fix_${n}` — reviewer-style loop fix cycle
39
- * `${phase}_${n}` — reviewer-style loop re-review cycle
40
- *
41
- * Returns -1 when the name doesn't match any phase (unknown/untracked labels
42
- * like `waiting_approval` or user set_phase values such as `complete`).
43
- */
44
- export declare function phaseIndexInDefinition(definition: AgentWorkflowDefinition, name: string): number;
45
- /**
46
- * Given the phase the runner last completed, return the name of the phase the
47
- * runner should run next. Returns `null` when there is no next phase (i.e. the
48
- * workflow is done).
49
- */
50
- export declare function nextPhaseAfter(definition: AgentWorkflowDefinition, completedPhase: string): string | null;
49
+ export declare function gitAccessProfileForWorkflow(workflowName: string): GitAccessProfile;
50
+ export declare function gitSandboxAccessForWorkflow(workflowName: string, owner: string, repo: string, prePopulateBranch?: string, runId?: string): GitSandboxAccess;
51
51
  /**
52
52
  * Run an agent workflow defined by a YAML definition.
53
- * Interprets phases, approval gates, and loops generically — the runner has
54
- * no knowledge of specific phase names.
53
+ *
54
+ * Every workflow executes as a DAG: workflows that declare no `depends_on`
55
+ * are run as a synthesized chain (each phase depends on the one before it),
56
+ * reproducing the old linear semantics including the failure cascade. Ready
57
+ * nodes are executed **one at a time in declaration order** (sequential).
58
+ * Each node's body — context / standard agent / reviewer-loop / generic-loop,
59
+ * plus approval and reply gates — lives in {@link PhaseExecutor}; the
60
+ * scheduler here owns the DAG, the `phases[]`/`outputs{}` accumulation, and
61
+ * the in-memory node status.
55
62
  */
56
- export declare function runWorkflow(definition: AgentWorkflowDefinition, ctx: TemplateContext, config: ExecutorConfig, callbacks: RunnerCallbacks, db?: StateDb, models?: ModelConfig, approvalConfig?: ApprovalGateConfig, workflowId?: string): Promise<WorkflowResult>;
63
+ export declare function runWorkflow(definition: AgentWorkflowDefinition, ctx: TemplateContext, config: ExecutorConfig, callbacks: RunnerCallbacks, db?: StateDb, models?: ModelConfig, approvalConfig?: ApprovalGateConfig, workflowId?: string, variants?: VariantConfig): Promise<WorkflowResult>;