lastlight 0.16.0 → 0.16.2

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 (385) hide show
  1. package/README.md +71 -692
  2. package/dist/cli-config.js.map +1 -0
  3. package/dist/cli-format.js.map +1 -0
  4. package/dist/{cli/cli-server.d.ts → cli-server.d.ts} +39 -1
  5. package/dist/{cli/cli-server.js → cli-server.js} +105 -5
  6. package/dist/cli-server.js.map +1 -0
  7. package/dist/cli-timeline.js.map +1 -0
  8. package/dist/{cli/cli.js → cli.js} +9 -7
  9. package/dist/cli.js.map +1 -0
  10. package/dist/{cli/fork-cli.d.ts → fork-cli.d.ts} +3 -3
  11. package/dist/{cli/fork-cli.js → fork-cli.js} +28 -27
  12. package/dist/fork-cli.js.map +1 -0
  13. package/dist/{cli/oauth-cli.js → oauth-cli.js} +1 -1
  14. package/dist/oauth-cli.js.map +1 -0
  15. package/dist/{cli/setup.js → setup.js} +10 -4
  16. package/dist/setup.js.map +1 -0
  17. package/dist/{cli/skills-install.d.ts → skills-install.d.ts} +6 -0
  18. package/dist/{cli/skills-install.js → skills-install.js} +6 -2
  19. package/dist/skills-install.js.map +1 -0
  20. package/package.json +20 -65
  21. package/plugins/lastlight/.claude-plugin/plugin.json +1 -1
  22. package/agent-context/rules.md +0 -80
  23. package/agent-context/security.md +0 -69
  24. package/agent-context/soul.md +0 -21
  25. package/config/default.yaml +0 -119
  26. package/deploy/.env.production.example +0 -100
  27. package/deploy/entrypoint.sh +0 -82
  28. package/deploy/native/README.md +0 -160
  29. package/deploy/native/install.sh +0 -110
  30. package/deploy/native/lastlight.env.example +0 -95
  31. package/deploy/native/lastlight.service +0 -50
  32. package/deploy/sandbox-entrypoint.sh +0 -93
  33. package/dist/admin/auth.d.ts +0 -51
  34. package/dist/admin/auth.js +0 -121
  35. package/dist/admin/auth.js.map +0 -1
  36. package/dist/admin/chat-session-reader.d.ts +0 -39
  37. package/dist/admin/chat-session-reader.js +0 -84
  38. package/dist/admin/chat-session-reader.js.map +0 -1
  39. package/dist/admin/docker.d.ts +0 -61
  40. package/dist/admin/docker.js +0 -187
  41. package/dist/admin/docker.js.map +0 -1
  42. package/dist/admin/index.d.ts +0 -9
  43. package/dist/admin/index.js +0 -59
  44. package/dist/admin/index.js.map +0 -1
  45. package/dist/admin/routes.d.ts +0 -81
  46. package/dist/admin/routes.js +0 -1381
  47. package/dist/admin/routes.js.map +0 -1
  48. package/dist/admin/sessions.d.ts +0 -89
  49. package/dist/admin/sessions.js +0 -204
  50. package/dist/admin/sessions.js.map +0 -1
  51. package/dist/admin/tail.d.ts +0 -12
  52. package/dist/admin/tail.js +0 -145
  53. package/dist/admin/tail.js.map +0 -1
  54. package/dist/admin/version.d.ts +0 -22
  55. package/dist/admin/version.js +0 -92
  56. package/dist/admin/version.js.map +0 -1
  57. package/dist/cli/cli-config.js.map +0 -1
  58. package/dist/cli/cli-format.js.map +0 -1
  59. package/dist/cli/cli-server.js.map +0 -1
  60. package/dist/cli/cli-timeline.js.map +0 -1
  61. package/dist/cli/cli.js.map +0 -1
  62. package/dist/cli/fork-cli.js.map +0 -1
  63. package/dist/cli/oauth-cli.js.map +0 -1
  64. package/dist/cli/setup.js.map +0 -1
  65. package/dist/cli/skills-install.js.map +0 -1
  66. package/dist/config/config-resolve.d.ts +0 -28
  67. package/dist/config/config-resolve.js +0 -47
  68. package/dist/config/config-resolve.js.map +0 -1
  69. package/dist/config/config.d.ts +0 -157
  70. package/dist/config/config.js +0 -581
  71. package/dist/config/config.js.map +0 -1
  72. package/dist/config/core-pin.d.ts +0 -16
  73. package/dist/config/core-pin.js +0 -85
  74. package/dist/config/core-pin.js.map +0 -1
  75. package/dist/config/overlay-assets.d.ts +0 -20
  76. package/dist/config/overlay-assets.js +0 -114
  77. package/dist/config/overlay-assets.js.map +0 -1
  78. package/dist/config/overlay-bootstrap.d.ts +0 -44
  79. package/dist/config/overlay-bootstrap.js +0 -304
  80. package/dist/config/overlay-bootstrap.js.map +0 -1
  81. package/dist/connectors/github-webhook.d.ts +0 -45
  82. package/dist/connectors/github-webhook.js +0 -321
  83. package/dist/connectors/github-webhook.js.map +0 -1
  84. package/dist/connectors/index.d.ts +0 -18
  85. package/dist/connectors/index.js +0 -41
  86. package/dist/connectors/index.js.map +0 -1
  87. package/dist/connectors/messaging/base.d.ts +0 -42
  88. package/dist/connectors/messaging/base.js +0 -139
  89. package/dist/connectors/messaging/base.js.map +0 -1
  90. package/dist/connectors/messaging/delivery.d.ts +0 -14
  91. package/dist/connectors/messaging/delivery.js +0 -38
  92. package/dist/connectors/messaging/delivery.js.map +0 -1
  93. package/dist/connectors/messaging/index.d.ts +0 -4
  94. package/dist/connectors/messaging/index.js +0 -4
  95. package/dist/connectors/messaging/index.js.map +0 -1
  96. package/dist/connectors/messaging/session-manager.d.ts +0 -53
  97. package/dist/connectors/messaging/session-manager.js +0 -255
  98. package/dist/connectors/messaging/session-manager.js.map +0 -1
  99. package/dist/connectors/messaging/types.d.ts +0 -58
  100. package/dist/connectors/messaging/types.js +0 -7
  101. package/dist/connectors/messaging/types.js.map +0 -1
  102. package/dist/connectors/slack/connector.d.ts +0 -142
  103. package/dist/connectors/slack/connector.js +0 -494
  104. package/dist/connectors/slack/connector.js.map +0 -1
  105. package/dist/connectors/slack/index.d.ts +0 -2
  106. package/dist/connectors/slack/index.js +0 -3
  107. package/dist/connectors/slack/index.js.map +0 -1
  108. package/dist/connectors/slack/mrkdwn.d.ts +0 -19
  109. package/dist/connectors/slack/mrkdwn.js +0 -240
  110. package/dist/connectors/slack/mrkdwn.js.map +0 -1
  111. package/dist/connectors/types.d.ts +0 -61
  112. package/dist/connectors/types.js +0 -2
  113. package/dist/connectors/types.js.map +0 -1
  114. package/dist/cron/fanout.d.ts +0 -33
  115. package/dist/cron/fanout.js +0 -55
  116. package/dist/cron/fanout.js.map +0 -1
  117. package/dist/cron/jobs.d.ts +0 -18
  118. package/dist/cron/jobs.js +0 -37
  119. package/dist/cron/jobs.js.map +0 -1
  120. package/dist/cron/scheduler.d.ts +0 -45
  121. package/dist/cron/scheduler.js +0 -105
  122. package/dist/cron/scheduler.js.map +0 -1
  123. package/dist/engine/agent-executor.d.ts +0 -34
  124. package/dist/engine/agent-executor.js +0 -246
  125. package/dist/engine/agent-executor.js.map +0 -1
  126. package/dist/engine/chat/chat-runner.d.ts +0 -132
  127. package/dist/engine/chat/chat-runner.js +0 -424
  128. package/dist/engine/chat/chat-runner.js.map +0 -1
  129. package/dist/engine/chat/chat-skills.d.ts +0 -45
  130. package/dist/engine/chat/chat-skills.js +0 -184
  131. package/dist/engine/chat/chat-skills.js.map +0 -1
  132. package/dist/engine/chat/chat.d.ts +0 -54
  133. package/dist/engine/chat/chat.js +0 -316
  134. package/dist/engine/chat/chat.js.map +0 -1
  135. package/dist/engine/chat/message-batcher.d.ts +0 -32
  136. package/dist/engine/chat/message-batcher.js +0 -109
  137. package/dist/engine/chat/message-batcher.js.map +0 -1
  138. package/dist/engine/dispatcher.d.ts +0 -73
  139. package/dist/engine/dispatcher.js +0 -663
  140. package/dist/engine/dispatcher.js.map +0 -1
  141. package/dist/engine/event-shim.d.ts +0 -117
  142. package/dist/engine/event-shim.js +0 -435
  143. package/dist/engine/event-shim.js.map +0 -1
  144. package/dist/engine/executors/orchestrator.d.ts +0 -81
  145. package/dist/engine/executors/orchestrator.js +0 -365
  146. package/dist/engine/executors/orchestrator.js.map +0 -1
  147. package/dist/engine/executors/shared.d.ts +0 -189
  148. package/dist/engine/executors/shared.js +0 -616
  149. package/dist/engine/executors/shared.js.map +0 -1
  150. package/dist/engine/github/git-auth.d.ts +0 -62
  151. package/dist/engine/github/git-auth.js +0 -161
  152. package/dist/engine/github/git-auth.js.map +0 -1
  153. package/dist/engine/github/github-app-client.d.ts +0 -23
  154. package/dist/engine/github/github-app-client.js +0 -33
  155. package/dist/engine/github/github-app-client.js.map +0 -1
  156. package/dist/engine/github/github-tools.d.ts +0 -18
  157. package/dist/engine/github/github-tools.js +0 -263
  158. package/dist/engine/github/github-tools.js.map +0 -1
  159. package/dist/engine/github/github.d.ts +0 -1193
  160. package/dist/engine/github/github.js +0 -357
  161. package/dist/engine/github/github.js.map +0 -1
  162. package/dist/engine/github/profiles.d.ts +0 -279
  163. package/dist/engine/github/profiles.js +0 -42
  164. package/dist/engine/github/profiles.js.map +0 -1
  165. package/dist/engine/github/review-poster.d.ts +0 -98
  166. package/dist/engine/github/review-poster.js +0 -177
  167. package/dist/engine/github/review-poster.js.map +0 -1
  168. package/dist/engine/llm.d.ts +0 -79
  169. package/dist/engine/llm.js +0 -269
  170. package/dist/engine/llm.js.map +0 -1
  171. package/dist/engine/oauth.d.ts +0 -43
  172. package/dist/engine/oauth.js +0 -103
  173. package/dist/engine/oauth.js.map +0 -1
  174. package/dist/engine/router.d.ts +0 -29
  175. package/dist/engine/router.js +0 -680
  176. package/dist/engine/router.js.map +0 -1
  177. package/dist/engine/screen/classifier.d.ts +0 -93
  178. package/dist/engine/screen/classifier.js +0 -215
  179. package/dist/engine/screen/classifier.js.map +0 -1
  180. package/dist/engine/screen/screen.d.ts +0 -41
  181. package/dist/engine/screen/screen.js +0 -93
  182. package/dist/engine/screen/screen.js.map +0 -1
  183. package/dist/evals-api.d.ts +0 -24
  184. package/dist/evals-api.js +0 -22
  185. package/dist/evals-api.js.map +0 -1
  186. package/dist/index.d.ts +0 -1
  187. package/dist/index.js +0 -940
  188. package/dist/index.js.map +0 -1
  189. package/dist/managed-repos.d.ts +0 -30
  190. package/dist/managed-repos.js +0 -72
  191. package/dist/managed-repos.js.map +0 -1
  192. package/dist/notify/blocks.d.ts +0 -23
  193. package/dist/notify/blocks.js +0 -118
  194. package/dist/notify/blocks.js.map +0 -1
  195. package/dist/notify/index.d.ts +0 -17
  196. package/dist/notify/index.js +0 -7
  197. package/dist/notify/index.js.map +0 -1
  198. package/dist/notify/model.d.ts +0 -57
  199. package/dist/notify/model.js +0 -89
  200. package/dist/notify/model.js.map +0 -1
  201. package/dist/notify/notifier.d.ts +0 -18
  202. package/dist/notify/notifier.js +0 -100
  203. package/dist/notify/notifier.js.map +0 -1
  204. package/dist/notify/render.d.ts +0 -21
  205. package/dist/notify/render.js +0 -59
  206. package/dist/notify/render.js.map +0 -1
  207. package/dist/notify/transports/github.d.ts +0 -26
  208. package/dist/notify/transports/github.js +0 -27
  209. package/dist/notify/transports/github.js.map +0 -1
  210. package/dist/notify/transports/slack.d.ts +0 -27
  211. package/dist/notify/transports/slack.js +0 -37
  212. package/dist/notify/transports/slack.js.map +0 -1
  213. package/dist/notify/types.d.ts +0 -119
  214. package/dist/notify/types.js +0 -16
  215. package/dist/notify/types.js.map +0 -1
  216. package/dist/providers.d.ts +0 -125
  217. package/dist/providers.js +0 -279
  218. package/dist/providers.js.map +0 -1
  219. package/dist/sandbox/docker.d.ts +0 -180
  220. package/dist/sandbox/docker.js +0 -517
  221. package/dist/sandbox/docker.js.map +0 -1
  222. package/dist/sandbox/egress-allowlist.d.ts +0 -74
  223. package/dist/sandbox/egress-allowlist.js +0 -164
  224. package/dist/sandbox/egress-allowlist.js.map +0 -1
  225. package/dist/sandbox/egress-firewall-config.d.ts +0 -127
  226. package/dist/sandbox/egress-firewall-config.js +0 -434
  227. package/dist/sandbox/egress-firewall-config.js.map +0 -1
  228. package/dist/sandbox/images.d.ts +0 -23
  229. package/dist/sandbox/images.js +0 -55
  230. package/dist/sandbox/images.js.map +0 -1
  231. package/dist/sandbox/index.d.ts +0 -112
  232. package/dist/sandbox/index.js +0 -332
  233. package/dist/sandbox/index.js.map +0 -1
  234. package/dist/sandbox/sandbox.d.ts +0 -214
  235. package/dist/sandbox/sandbox.js +0 -453
  236. package/dist/sandbox/sandbox.js.map +0 -1
  237. package/dist/sandbox/smol.d.ts +0 -162
  238. package/dist/sandbox/smol.js +0 -485
  239. package/dist/sandbox/smol.js.map +0 -1
  240. package/dist/session-log.d.ts +0 -63
  241. package/dist/session-log.js +0 -290
  242. package/dist/session-log.js.map +0 -1
  243. package/dist/state/approval-store.d.ts +0 -88
  244. package/dist/state/approval-store.js +0 -149
  245. package/dist/state/approval-store.js.map +0 -1
  246. package/dist/state/build-assets.d.ts +0 -50
  247. package/dist/state/build-assets.js +0 -154
  248. package/dist/state/build-assets.js.map +0 -1
  249. package/dist/state/db.d.ts +0 -81
  250. package/dist/state/db.js +0 -155
  251. package/dist/state/db.js.map +0 -1
  252. package/dist/state/execution-store.d.ts +0 -257
  253. package/dist/state/execution-store.js +0 -527
  254. package/dist/state/execution-store.js.map +0 -1
  255. package/dist/state/migrate.d.ts +0 -15
  256. package/dist/state/migrate.js +0 -175
  257. package/dist/state/migrate.js.map +0 -1
  258. package/dist/state/workflow-run-store.d.ts +0 -216
  259. package/dist/state/workflow-run-store.js +0 -403
  260. package/dist/state/workflow-run-store.js.map +0 -1
  261. package/dist/telemetry/index.d.ts +0 -38
  262. package/dist/telemetry/index.js +0 -253
  263. package/dist/telemetry/index.js.map +0 -1
  264. package/dist/telemetry/pi-events.d.ts +0 -12
  265. package/dist/telemetry/pi-events.js +0 -134
  266. package/dist/telemetry/pi-events.js.map +0 -1
  267. package/dist/workflows/dag.d.ts +0 -37
  268. package/dist/workflows/dag.js +0 -118
  269. package/dist/workflows/dag.js.map +0 -1
  270. package/dist/workflows/loader.d.ts +0 -53
  271. package/dist/workflows/loader.js +0 -421
  272. package/dist/workflows/loader.js.map +0 -1
  273. package/dist/workflows/loop-eval.d.ts +0 -28
  274. package/dist/workflows/loop-eval.js +0 -74
  275. package/dist/workflows/loop-eval.js.map +0 -1
  276. package/dist/workflows/phase-executor.d.ts +0 -222
  277. package/dist/workflows/phase-executor.js +0 -1153
  278. package/dist/workflows/phase-executor.js.map +0 -1
  279. package/dist/workflows/phase-ref.d.ts +0 -50
  280. package/dist/workflows/phase-ref.js +0 -91
  281. package/dist/workflows/phase-ref.js.map +0 -1
  282. package/dist/workflows/resume.d.ts +0 -58
  283. package/dist/workflows/resume.js +0 -313
  284. package/dist/workflows/resume.js.map +0 -1
  285. package/dist/workflows/runner.d.ts +0 -63
  286. package/dist/workflows/runner.js +0 -381
  287. package/dist/workflows/runner.js.map +0 -1
  288. package/dist/workflows/schema.d.ts +0 -344
  289. package/dist/workflows/schema.js +0 -460
  290. package/dist/workflows/schema.js.map +0 -1
  291. package/dist/workflows/simple.d.ts +0 -90
  292. package/dist/workflows/simple.js +0 -393
  293. package/dist/workflows/simple.js.map +0 -1
  294. package/dist/workflows/target-policy.d.ts +0 -74
  295. package/dist/workflows/target-policy.js +0 -80
  296. package/dist/workflows/target-policy.js.map +0 -1
  297. package/dist/workflows/templates.d.ts +0 -88
  298. package/dist/workflows/templates.js +0 -127
  299. package/dist/workflows/templates.js.map +0 -1
  300. package/dist/workflows/triggers.d.ts +0 -21
  301. package/dist/workflows/triggers.js +0 -45
  302. package/dist/workflows/triggers.js.map +0 -1
  303. package/dist/workflows/verdict.d.ts +0 -19
  304. package/dist/workflows/verdict.js +0 -30
  305. package/dist/workflows/verdict.js.map +0 -1
  306. package/dist/worktree/manager.d.ts +0 -43
  307. package/dist/worktree/manager.js +0 -127
  308. package/dist/worktree/manager.js.map +0 -1
  309. package/docker-compose.yml +0 -274
  310. package/sandbox.Dockerfile +0 -68
  311. package/skills/README.md +0 -42
  312. package/skills/browser-qa/SKILL.md +0 -208
  313. package/skills/browser-qa/scripts/agent-browser.mjs +0 -531
  314. package/skills/building/SKILL.md +0 -95
  315. package/skills/chat/SKILL.md +0 -36
  316. package/skills/code-review/SKILL.md +0 -82
  317. package/skills/debug-production/SKILL.md +0 -108
  318. package/skills/demo/SKILL.md +0 -228
  319. package/skills/demo/scripts/compose-demo.sh +0 -243
  320. package/skills/issue-answer/SKILL.md +0 -91
  321. package/skills/issue-comment/SKILL.md +0 -49
  322. package/skills/issue-triage/SKILL.md +0 -149
  323. package/skills/issue-triage/references/AGENT-BRIEF.md +0 -65
  324. package/skills/pr-comment/SKILL.md +0 -64
  325. package/skills/pr-review/SKILL.md +0 -148
  326. package/skills/pr-review/references/findings-schema.md +0 -89
  327. package/skills/qa-test/SKILL.md +0 -97
  328. package/skills/repo-health/SKILL.md +0 -67
  329. package/skills/security-feedback/SKILL.md +0 -173
  330. package/skills/security-feedback/references/templates.md +0 -77
  331. package/skills/security-review/SKILL.md +0 -215
  332. package/skills/security-review/references/issue-format.md +0 -302
  333. package/skills/verify/SKILL.md +0 -118
  334. package/workflows/answer.yaml +0 -44
  335. package/workflows/build.yaml +0 -129
  336. package/workflows/cron-health.yaml +0 -6
  337. package/workflows/cron-review.yaml +0 -8
  338. package/workflows/cron-security.yaml +0 -6
  339. package/workflows/cron-triage.yaml +0 -8
  340. package/workflows/demo.yaml +0 -62
  341. package/workflows/examples/bash-smoke.yaml +0 -41
  342. package/workflows/examples/parallel-review.yaml +0 -36
  343. package/workflows/examples/tdd-loop.yaml +0 -17
  344. package/workflows/explore.yaml +0 -80
  345. package/workflows/issue-comment.yaml +0 -15
  346. package/workflows/issue-triage.yaml +0 -22
  347. package/workflows/pr-comment.yaml +0 -16
  348. package/workflows/pr-fix.yaml +0 -17
  349. package/workflows/pr-review.yaml +0 -50
  350. package/workflows/prompts/answer.md +0 -68
  351. package/workflows/prompts/architect.md +0 -44
  352. package/workflows/prompts/classifier.md +0 -60
  353. package/workflows/prompts/classify-adds-info.md +0 -17
  354. package/workflows/prompts/demo.md +0 -125
  355. package/workflows/prompts/executor.md +0 -42
  356. package/workflows/prompts/explore-ask.md +0 -99
  357. package/workflows/prompts/explore-publish.md +0 -31
  358. package/workflows/prompts/explore-read.md +0 -120
  359. package/workflows/prompts/explore-synthesize.md +0 -88
  360. package/workflows/prompts/fix.md +0 -18
  361. package/workflows/prompts/guardrails.md +0 -96
  362. package/workflows/prompts/pr-fix.md +0 -26
  363. package/workflows/prompts/pr.md +0 -39
  364. package/workflows/prompts/qa-browser.md +0 -95
  365. package/workflows/prompts/qa-synth.md +0 -44
  366. package/workflows/prompts/qa-test.md +0 -60
  367. package/workflows/prompts/re-reviewer.md +0 -33
  368. package/workflows/prompts/reviewer.md +0 -60
  369. package/workflows/prompts/verify-browser.md +0 -93
  370. package/workflows/prompts/verify-synth.md +0 -44
  371. package/workflows/prompts/verify.md +0 -63
  372. package/workflows/qa-test.yaml +0 -94
  373. package/workflows/repo-health.yaml +0 -15
  374. package/workflows/security-feedback.yaml +0 -25
  375. package/workflows/security-review.yaml +0 -37
  376. package/workflows/verify.yaml +0 -93
  377. /package/dist/{cli/cli-config.d.ts → cli-config.d.ts} +0 -0
  378. /package/dist/{cli/cli-config.js → cli-config.js} +0 -0
  379. /package/dist/{cli/cli-format.d.ts → cli-format.d.ts} +0 -0
  380. /package/dist/{cli/cli-format.js → cli-format.js} +0 -0
  381. /package/dist/{cli/cli-timeline.d.ts → cli-timeline.d.ts} +0 -0
  382. /package/dist/{cli/cli-timeline.js → cli-timeline.js} +0 -0
  383. /package/dist/{cli/cli.d.ts → cli.d.ts} +0 -0
  384. /package/dist/{cli/oauth-cli.d.ts → oauth-cli.d.ts} +0 -0
  385. /package/dist/{cli/setup.d.ts → setup.d.ts} +0 -0
@@ -1,222 +0,0 @@
1
- import type { ExecutorConfig, ExecutionResult, GitSandboxAccess } from "../engine/github/profiles.js";
2
- import { type CommandSpec } from "../engine/agent-executor.js";
3
- import type { StateDb } from "../state/db.js";
4
- import type { AgentWorkflowDefinition, PhaseDefinition } from "./schema.js";
5
- import { type TemplateContext } from "./templates.js";
6
- import type { DagNode } from "./dag.js";
7
- import type { PhaseResult } from "./runner.js";
8
- import type { StepStatus, ProgressStep } from "../notify/types.js";
9
- /**
10
- * The single per-phase executor. Constructed once per workflow run, it owns
11
- * every per-phase body — context / standard agent / reviewer-loop /
12
- * generic-loop — behind one `execute(node, outputs)` entry point. The
13
- * scheduler (`runner.ts`) owns the DAG, the `phases[]`/`outputs{}`
14
- * accumulation, and the in-memory node status; `execute` reads the current
15
- * outputs and returns its delta.
16
- *
17
- * Dependencies are grouped into three cohesive collaborators:
18
- * - {@link PhaseRunContext} run-scoped immutable data
19
- * - {@link PhaseReporter} progress / notification surface
20
- * - {@link PhaseResolver} model / variant / prompt / gate resolution
21
- *
22
- * This makes the executor unit-testable with fakes (see
23
- * `phase-executor.test.ts`), and — because both chain and explicit-DAG nodes
24
- * now route through the same code — loop nodes finally support the approval /
25
- * reply gates that the old DAG fork dropped.
26
- */
27
- /** Run-scoped immutable data shared by every phase execution. */
28
- export interface PhaseRunContext {
29
- definition: AgentWorkflowDefinition;
30
- ctx: TemplateContext;
31
- config: ExecutorConfig;
32
- /** Single workspace shared by every phase + loop iteration of the run. */
33
- taskId: string;
34
- triggerId: string;
35
- githubAccess: GitSandboxAccess;
36
- /** Mutable scratch bag (generic-loop resume state). */
37
- scratch: Record<string, unknown>;
38
- db?: StateDb;
39
- workflowId?: string;
40
- }
41
- export interface ReportStepOpts {
42
- label?: string;
43
- insertBefore?: string;
44
- insert?: boolean;
45
- alsoNote?: boolean;
46
- }
47
- /** Progress / notification surface — the reporting collaborator. */
48
- export interface PhaseReporter {
49
- onStart(phase: string): Promise<void>;
50
- onEnd(phase: string, result: PhaseResult): Promise<void>;
51
- /** Transition a checklist step (and optionally render a YAML message detail). */
52
- step(key: string, status: StepStatus, template?: string, extraCtx?: Partial<TemplateContext>, opts?: ReportStepOpts): Promise<void>;
53
- /** Render a YAML message template and post it as a standalone note. */
54
- message(template: string | undefined, extraCtx?: Partial<TemplateContext>): Promise<void>;
55
- /**
56
- * Render a YAML message template and post it as an *interactive approval
57
- * prompt* (Approve/Reject buttons on rich surfaces, plain text elsewhere).
58
- */
59
- approvalNote(template: string | undefined, extraCtx: Partial<TemplateContext>, meta: {
60
- workflowRunId: string;
61
- }): Promise<void>;
62
- /** Post a pre-rendered standalone message. */
63
- postNote(text: string): Promise<void>;
64
- /** Persist a phase-history entry on the workflow run. */
65
- persistPhase(phase: string, summary?: string): void;
66
- /** Mark the workflow run failed. */
67
- failWorkflow(errorMsg?: string): void;
68
- }
69
- /** Model / variant / prompt / gate resolution — the resolution collaborator. */
70
- export interface PhaseResolver {
71
- modelFor(taskType: string): string | undefined;
72
- variantFor(taskType: string): string | undefined;
73
- renderPrompt(promptPath: string, extraCtx?: Partial<TemplateContext>): string;
74
- gateEnabled(gateName: string | undefined): boolean;
75
- }
76
- /** The delta a single `execute(node, outputs)` returns to the scheduler. */
77
- export interface PhaseOutcome {
78
- results: PhaseResult[];
79
- status: "succeeded" | "failed" | "skipped";
80
- /** Approval / reply gate hit — scheduler returns `{ success: true, paused: true }`. */
81
- paused?: boolean;
82
- /**
83
- * Dedup running-skip — another instance is mid-flight on this exact phase.
84
- * Scheduler stops the whole run immediately with `success: false` and does
85
- * NOT cascade skips (it isn't a phase failure).
86
- */
87
- aborted?: boolean;
88
- /** Output map additions to merge into the scheduler's accumulated outputs. */
89
- outputVars?: Record<string, unknown>;
90
- }
91
- /**
92
- * Build the agent prompt for a phase, handling both `prompt:` (template file)
93
- * and `skill:`/`skills:` (skill references) phase definitions.
94
- */
95
- export declare function buildPhasePrompt(phase: PhaseDefinition, ctx: TemplateContext, extraCtx?: Partial<TemplateContext>): string;
96
- /**
97
- * Overlay per-phase executor config fields (`unrestricted_egress`,
98
- * `web_search`, `sandbox_image`, resolved skill paths) onto the run-level
99
- * config.
100
- */
101
- export declare function phaseConfigFor(config: ExecutorConfig, phase: PhaseDefinition): ExecutorConfig;
102
- /** Check if an error was caused by manual termination (OOM/cancel/kill). */
103
- export declare function isTerminated(error?: string): boolean;
104
- /**
105
- * Classify an execution outcome as *soft* — a clean exit that produced no
106
- * usable output — versus *hard* (a real crash). Generic and phase-agnostic:
107
- * it reads only the result fields, with no notion of reviewer/socratic. Both
108
- * the reviewer loop and the generic loop consume it so their recovery logic
109
- * stays in lockstep. A soft outcome is recoverable (retry / trust an on-disk
110
- * artifact / advance); a hard one — terminated, fatal, tool error, non-zero
111
- * exit — is not. See `mapStopReason` in the executors for the stop-reason
112
- * vocabulary this keys off (`unknown` / `error_truncated` are the soft ones).
113
- */
114
- export declare function isSoftOutcome(r: Pick<ExecutionResult, "success" | "error" | "stopReason">): boolean;
115
- type RunPhaseResult = {
116
- result: ExecutionResult;
117
- executionId: string;
118
- skipped: false;
119
- } | {
120
- result: ExecutionResult;
121
- skipped: false;
122
- } | {
123
- skipped: true;
124
- reason: "running" | "done";
125
- };
126
- /**
127
- * Run a single agent phase with DB-tracked deduplication. The dedup ledger
128
- * (`shouldRunPhase`) is the single source of truth for resume, so re-running
129
- * from the top skips completed phases here.
130
- */
131
- export declare function runPhase(workflowName: string, phaseName: string, taskId: string, triggerId: string, prompt: string, config: ExecutorConfig, db?: StateDb, modelOverride?: string, workflowRunId?: string, githubAccess?: GitSandboxAccess, variantOverride?: string): Promise<RunPhaseResult>;
132
- /**
133
- * Run a single deterministic `bash`/`script` phase, sharing the agent phase's
134
- * dedup ledger + executions row so it appears (and dedups on resume) exactly
135
- * like an agent phase — just with `turns: 0` and no model cost.
136
- */
137
- export declare function runCommandPhase(workflowName: string, phaseName: string, taskId: string, triggerId: string, spec: CommandSpec, config: ExecutorConfig, db?: StateDb, workflowRunId?: string, githubAccess?: GitSandboxAccess, timeoutSeconds?: number, sandboxEnv?: Record<string, string>): Promise<RunPhaseResult>;
138
- export declare class PhaseExecutor {
139
- private readonly run;
140
- private readonly reporter;
141
- private readonly resolver;
142
- constructor(run: PhaseRunContext, reporter: PhaseReporter, resolver: PhaseResolver);
143
- /**
144
- * Execute one DAG node and return its delta. The scheduler accumulates
145
- * `results` into `phases[]`, merges `outputVars` into the shared outputs
146
- * map, and maps `status`/`paused`/`aborted` onto node state + run control.
147
- */
148
- execute(node: DagNode, outputs: Readonly<Record<string, unknown>>): Promise<PhaseOutcome>;
149
- private runContext;
150
- /**
151
- * First-class, in-process PR-review submission (`type: post-review`). The
152
- * reviewer agent writes only *content* to `.lastlight/pr-review/findings.json`
153
- * (`{ skip?, summary, event, findings[] }`); THIS action supplies every fact
154
- * the harness already knows — the PR number (from the run context), the base
155
- * ref, the head SHA and the diff (from the pre-cloned checkout) — anchors each
156
- * finding to a changed line, and posts one formal review via `GitHubClient`.
157
- *
158
- * This replaces the ~150-line in-sandbox `type: script` blob that depended on
159
- * the AI hand-copying `pr_number`/`base_ref`/`head_sha` into the JSON and
160
- * silently `exit 0`'d on any mismatch (the "ran but posted nothing" bug).
161
- * Here a genuine failure — missing findings after a real review, or a GitHub
162
- * error that survives the body-only retry — FAILS the phase visibly; only a
163
- * legitimate `skip` succeeds without posting. Idempotent on resume: it no-ops
164
- * when a bot review already exists on the current head SHA.
165
- */
166
- private runPostReview;
167
- /** Host path of the run's repo checkout — mirrors sandbox/index.ts layout. */
168
- /**
169
- * The reviewer's authoritative verdict lives in reviewer-verdict.md (its
170
- * OUTPUT CONTRACT), so recover it when the stdout marker is missing. Server
171
- * mode reads the harvested doc from the build-asset store; repo mode reads the
172
- * committed doc from the host checkout under issueDir. Returns the parsed
173
- * verdict only when the file actually carries a `VERDICT:` marker (else
174
- * undefined — we don't want to launder the same fragile fallback through a
175
- * different source).
176
- */
177
- private readReviewerVerdictFromFile;
178
- private resolveHostRepoDir;
179
- /** Build the GitHub client for the post: token+baseUrl in evals, App auth in prod. */
180
- private buildReviewClient;
181
- private gitHeadSha;
182
- /** Compute the base…head diff locally and parse it into a commentable set. */
183
- private gitCommentableDiff;
184
- /** Resolve model + variant for a phase/task, honouring YAML templates first. */
185
- private resolveModelVariant;
186
- private runPhaseCall;
187
- private runStandard;
188
- /**
189
- * Body for `type: bash` / `type: script` phases. Runs a deterministic command
190
- * in the sandbox (no LLM), then mirrors the agent-phase lifecycle: report
191
- * progress, expose stdout downstream via `output_var` →
192
- * `{{phaseOutputs.<name>.output}}`, fail the workflow on a non-zero exit, and
193
- * honour an optional `approval_gate`.
194
- */
195
- private runCommandBody;
196
- /** Render a command/script phase's template fields into a {@link CommandSpec}. */
197
- private buildCommandSpec;
198
- private runCommandPhaseCall;
199
- /**
200
- * Evaluate a `generic_loop.until_bash` condition INSIDE the sandbox (against
201
- * the persisted workspace), replacing the old harness-host `execSync`. Exit 0
202
- * ⇒ loop complete. The check inherits the phase's egress; no session log is
203
- * written (it's an internal loop condition, not a user-facing phase).
204
- */
205
- private runUntilBash;
206
- /**
207
- * Evaluate the `contains_BLOCKED` rule. Returns "fail" when the workflow
208
- * should fail, or "continue" when the marker is absent or bypassed.
209
- */
210
- private evaluateBlocked;
211
- /**
212
- * Persist + pause for an approval/reply gate, atomically. The approval
213
- * insert, the `waiting_approval` phase marker, the optional scratch persist
214
- * (loops record their iteration/cycle state here), and the run pause all
215
- * happen in one transaction via `db.runs.pauseForApproval` — a partial
216
- * failure can't leave the run paused without its gate, or vice versa.
217
- */
218
- private pauseForApproval;
219
- private runReviewerLoop;
220
- private runGenericLoop;
221
- }
222
- export type { ProgressStep };