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