lastlight 0.16.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 (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} +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 -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,81 +0,0 @@
1
- import { type SandboxBackend } from "../../config/config.js";
2
- import { type EgressPolicy, type PrePopulateSpec, type ProvisionResult, type Sandbox, type SandboxFactory } from "../../sandbox/sandbox.js";
3
- import { type ExecutorConfig, type ExecutionResult, type GitSandboxAccess } from "../github/profiles.js";
4
- /**
5
- * The **Sandbox orchestrator** — the deep module that owns one agent/command
6
- * run end-to-end behind the {@link Sandbox} port. It is written ONCE and is
7
- * identical for every backend; the per-backend `executeDocker` / `executeSmol`
8
- * / `executeInProcess` twins it replaced are gone.
9
- *
10
- * - {@link withSandbox} is the bracket: build the adapter → provision →
11
- * (work) → dispose. Errors from provision (e.g. docker unavailable)
12
- * propagate; dispose always runs once provisioned.
13
- * - {@link runSandboxedAgent} runs one agent turn: skill staging,
14
- * build-artifact stage/harvest, the `RunResultAccumulator` + shim +
15
- * `recordPiEvent` event loop, session-id notify, and the single converged
16
- * fallback path.
17
- * - {@link runSandboxedCommand} runs a deterministic command/script and
18
- * mirrors it to a session jsonl.
19
- *
20
- * Egress is computed once here as an intent-only {@link EgressPolicy} and
21
- * handed to the adapter at construction.
22
- */
23
- /** Shared run context threaded into the orchestrator by the executors. */
24
- export interface SandboxRunContext {
25
- config: ExecutorConfig;
26
- taskId: string;
27
- stateDir: string;
28
- backend: SandboxBackend;
29
- /** Env forwarded into the sandbox (provider keys, minted GITHUB_TOKEN, …). */
30
- env: Record<string, string>;
31
- prePopulate?: PrePopulateSpec;
32
- access?: GitSandboxAccess;
33
- onSessionId?: (sessionId: string) => void;
34
- /** Test seam — substitute a FakeSandbox. Defaults to {@link sandboxFor}. */
35
- sandboxFactory?: SandboxFactory;
36
- }
37
- /**
38
- * Compute the run's intent-only egress policy once: `unrestricted` for a phase
39
- * that opted out, otherwise the default allowlist merged with any OTEL
40
- * collector hosts. Each adapter translates this to its own mechanism.
41
- */
42
- export declare function egressPolicyFor(config: ExecutorConfig): EgressPolicy;
43
- /**
44
- * The provision → work → dispose bracket. Builds the adapter via the factory
45
- * (or the injected one), provisions the workspace, runs `fn`, and disposes in a
46
- * `finally` once provisioned. A provision failure propagates to the caller (it
47
- * is not a workspace we ever provisioned, so there is nothing to dispose).
48
- */
49
- export declare function withSandbox<T>(ctx: SandboxRunContext, fn: (sandbox: Sandbox, provisioned: ProvisionResult) => Promise<T>): Promise<T>;
50
- /**
51
- * Run one agent turn through any backend. Replaces `executeDocker` /
52
- * `executeSmol` / `executeInProcess` — the three slightly-different fallback
53
- * paths are converged into the single catch below.
54
- */
55
- export declare function runSandboxedAgent(prompt: string, ctx: SandboxRunContext): Promise<ExecutionResult>;
56
- /** What a command phase runs. */
57
- export type CommandSpec = {
58
- kind: "bash";
59
- command: string;
60
- } | {
61
- kind: "script";
62
- script: string;
63
- runtime: "js" | "ts" | "python";
64
- name: string;
65
- };
66
- /** Options for {@link runSandboxedCommand}. */
67
- export interface CommandRunOpts {
68
- /** Per-step timeout in seconds (default 300). */
69
- timeoutSeconds?: number;
70
- /** Extra env forwarded into the command (e.g. upstream phase outputs). */
71
- sandboxEnv?: Record<string, string>;
72
- /** Mirror output to a session jsonl (default true; false for internal checks). */
73
- writeSession?: boolean;
74
- }
75
- /**
76
- * Execute a deterministic command/script in the same workspace an agent phase
77
- * would use — no LLM. Replaces the three-way fork that lived in
78
- * `executeCommand`. Writes a session jsonl so the output is visible in the
79
- * dashboard + CLI.
80
- */
81
- export declare function runSandboxedCommand(spec: CommandSpec, ctx: SandboxRunContext, cmdOpts: CommandRunOpts): Promise<ExecutionResult>;
@@ -1,365 +0,0 @@
1
- import { basename, join } from "path";
2
- import { existsSync, mkdirSync, writeFileSync } from "fs";
3
- import { resolveAuthFile } from "../oauth.js";
4
- import { randomUUID } from "crypto";
5
- import { getBotName, getRuntimeConfig } from "../../config/config.js";
6
- import { agentGitIdentityEnv, sandboxFor, } from "../../sandbox/sandbox.js";
7
- import { SANDBOX_IMAGE_QA } from "../../sandbox/index.js";
8
- import { DEFAULT_ALLOWLIST, mergeAllowlist } from "../../sandbox/egress-allowlist.js";
9
- import { AGENTIC_PROFILE_FOR, loadAgentContext, } from "../github/profiles.js";
10
- import { AgenticShim } from "../event-shim.js";
11
- import { projectSlugForCwd } from "../../session-log.js";
12
- import { recordError, recordExecutionMetrics } from "../../telemetry/index.js";
13
- import { recordPiEvent } from "../../telemetry/pi-events.js";
14
- import { DEFAULT_MODEL, RunResultAccumulator, coerceThinking, emptyResult, finalizeFromRunResult, harvestArtifactsOut, resolveSessionsDir, serverArtifacts, skillBundleKey, stageArtifactsIn, } from "./shared.js";
15
- /**
16
- * Compute the run's intent-only egress policy once: `unrestricted` for a phase
17
- * that opted out, otherwise the default allowlist merged with any OTEL
18
- * collector hosts. Each adapter translates this to its own mechanism.
19
- */
20
- export function egressPolicyFor(config) {
21
- if (config.unrestrictedEgress)
22
- return { unrestricted: true, hosts: [] };
23
- const extraHosts = config.otel?.enabled && config.otel.forwardToSandbox ? config.otel.collectorHosts : [];
24
- return { unrestricted: false, hosts: mergeAllowlist(DEFAULT_ALLOWLIST, extraHosts) };
25
- }
26
- /**
27
- * The provision → work → dispose bracket. Builds the adapter via the factory
28
- * (or the injected one), provisions the workspace, runs `fn`, and disposes in a
29
- * `finally` once provisioned. A provision failure propagates to the caller (it
30
- * is not a workspace we ever provisioned, so there is nothing to dispose).
31
- */
32
- export async function withSandbox(ctx, fn) {
33
- const factory = ctx.sandboxFactory ?? sandboxFor;
34
- const sandbox = factory(ctx.backend, {
35
- taskId: ctx.taskId,
36
- egress: egressPolicyFor(ctx.config),
37
- env: ctx.env,
38
- stateDir: ctx.stateDir,
39
- sandboxDir: ctx.config.sandboxDir,
40
- repoSubdir: ctx.config.repoSubdir,
41
- imageName: ctx.config.sandboxImage === "qa" ? SANDBOX_IMAGE_QA : undefined,
42
- otel: ctx.config.otel,
43
- });
44
- let provisioned;
45
- try {
46
- provisioned = await sandbox.provision(ctx.prePopulate);
47
- return await fn(sandbox, provisioned);
48
- }
49
- finally {
50
- if (provisioned)
51
- await sandbox.dispose();
52
- }
53
- }
54
- /** Drop AGENTS.md into the workspace — agentic-pi reads it as system context. */
55
- function writeAgentsMd(hostWorkspaceDir, config) {
56
- try {
57
- const md = loadAgentContext(config.agentContextDir);
58
- if (md)
59
- writeFileSync(join(hostWorkspaceDir, "AGENTS.md"), md);
60
- }
61
- catch (err) {
62
- const msg = err instanceof Error ? err.message : String(err);
63
- console.warn(`[executor] Could not write AGENTS.md: ${msg}`);
64
- }
65
- }
66
- /** Host path of the repo checkout (for build-artifact stage/harvest). */
67
- function hostRepoDirFor(prov, prePopulate) {
68
- return prePopulate ? join(prov.hostWorkspaceDir, prePopulate.repo) : prov.hostWorkspaceDir;
69
- }
70
- /**
71
- * Run one agent turn through any backend. Replaces `executeDocker` /
72
- * `executeSmol` / `executeInProcess` — the three slightly-different fallback
73
- * paths are converged into the single catch below.
74
- */
75
- export async function runSandboxedAgent(prompt, ctx) {
76
- const { config, access } = ctx;
77
- const startTime = Date.now();
78
- const model = config.model || DEFAULT_MODEL;
79
- const thinking = coerceThinking(config.variant);
80
- const profile = access ? AGENTIC_PROFILE_FOR[access.profile] : undefined;
81
- const sessionsDir = resolveSessionsDir(config);
82
- return withSandbox(ctx, async (sandbox, prov) => {
83
- console.log(` [executor] Running agent (task: ${ctx.taskId}, sandbox: ${ctx.backend})`);
84
- writeAgentsMd(prov.hostWorkspaceDir, config);
85
- // Stage this phase's skills (adapter decides symlink/copy + path mapping).
86
- let skillDirs;
87
- try {
88
- skillDirs = sandbox.stageSkills(skillBundleKey(config), config.skillPaths);
89
- }
90
- catch (err) {
91
- const msg = err instanceof Error ? err.message : String(err);
92
- console.warn(`[executor] Could not stage skills: ${msg}`);
93
- }
94
- // Server-mode build assets: stage in before, harvest after (even on error).
95
- const artifacts = serverArtifacts(config, hostRepoDirFor(prov, ctx.prePopulate));
96
- stageArtifactsIn(artifacts);
97
- const shim = new AgenticShim({
98
- homeDir: sessionsDir,
99
- projectSlug: projectSlugForCwd(prov.agentCwd),
100
- model,
101
- initialPrompt: prompt,
102
- });
103
- const acc = new RunResultAccumulator();
104
- let notifiedSessionId = false;
105
- const onEvent = (record) => {
106
- acc.feed(record);
107
- shim.feed(record);
108
- recordPiEvent(record, {
109
- includeContent: config.otel?.includeContent === true,
110
- surface: "agent",
111
- workflowName: config.telemetry?.workflowName,
112
- phaseName: config.telemetry?.phaseName,
113
- model,
114
- });
115
- if (!notifiedSessionId && ctx.onSessionId && record.type === "session" && typeof record.id === "string") {
116
- notifiedSessionId = true;
117
- ctx.onSessionId(record.id);
118
- }
119
- };
120
- // OAuth credential store for model auth. Only the in-process adapters
121
- // (none/gondolin) run the model call host-side, so a host path resolves
122
- // there; the docker adapter ignores authFile (its model call is
123
- // in-container) and relies on the OAuth env tokens spliced in by the
124
- // executor. Pass the path only when the store actually exists so pure
125
- // API-key deployments never point agentic-pi at a phantom file.
126
- let authFile;
127
- if (ctx.backend === "none" || ctx.backend === "gondolin") {
128
- const candidate = resolveAuthFile(undefined, ctx.stateDir);
129
- if (existsSync(candidate))
130
- authFile = candidate;
131
- }
132
- let returned;
133
- try {
134
- returned = await sandbox.runAgent(ctx.taskId, prompt, {
135
- model,
136
- thinking,
137
- profile,
138
- authFile,
139
- sandboxEnv: agentGitIdentityEnv(getRuntimeConfig()?.botLogin ?? `${getBotName()}[bot]`),
140
- agentCwd: prov.agentCwd,
141
- skillDirs,
142
- webSearch: config.webSearch === true,
143
- webSearchProvider: config.webSearchProvider,
144
- githubApiBaseUrl: config.githubApiBaseUrl,
145
- }, onEvent);
146
- }
147
- catch (err) {
148
- // The single converged fallback path (was three near-identical catches).
149
- const msg = err instanceof Error ? err.message : String(err);
150
- const durationMs = Date.now() - startTime;
151
- const tags = {
152
- "sandbox.backend": ctx.backend,
153
- model,
154
- success: false,
155
- stop_reason: "error_sandbox",
156
- "workflow.name": config.telemetry?.workflowName,
157
- "phase.name": config.telemetry?.phaseName,
158
- };
159
- recordError("agent", err, tags);
160
- recordExecutionMetrics("agent", { ...tags, durationMs });
161
- const synthesizedId = await shim
162
- .finalizeWithFallback(emptyResult("error_sandbox", durationMs), `exec-${basename(ctx.taskId)}`, msg)
163
- .catch(() => null);
164
- harvestArtifactsOut(artifacts);
165
- return {
166
- success: false,
167
- output: "",
168
- turns: 0,
169
- error: msg,
170
- durationMs,
171
- sessionId: synthesizedId ?? undefined,
172
- stopReason: "error_sandbox",
173
- };
174
- }
175
- harvestArtifactsOut(artifacts);
176
- // Reconstruct the RunResult: the in-process adapter returns its
177
- // authoritative one; docker/smol return undefined → build from the
178
- // accumulated events. Either way prefer our compaction-proof per-message
179
- // accumulation when it carries token data.
180
- const result = returned ?? acc.build(0);
181
- const better = acc.bestStats();
182
- if (better && (better.tokens?.total ?? 0) > 0)
183
- result.stats = better;
184
- const finalResult = finalizeFromRunResult(result, prompt, shim, startTime, acc.extensions(), acc.skills(), acc.toolError(), acc.endedOnToolCall());
185
- recordExecutionMetrics("agent", {
186
- "sandbox.backend": ctx.backend,
187
- model,
188
- success: finalResult.success,
189
- stop_reason: finalResult.stopReason,
190
- durationMs: finalResult.durationMs,
191
- costUsd: finalResult.costUsd,
192
- inputTokens: finalResult.inputTokens,
193
- outputTokens: finalResult.outputTokens,
194
- "workflow.name": config.telemetry?.workflowName,
195
- "phase.name": config.telemetry?.phaseName,
196
- });
197
- return finalResult;
198
- });
199
- }
200
- const SCRIPT_EXT = { js: "mjs", ts: "mts", python: "py" };
201
- /**
202
- * Where a `type: script` source file is staged. A workspace-root sibling of the
203
- * skill bundle, keyed per phase (`<root>/<phase>/script.<ext>`) — so it sits
204
- * beside the skills and is never written inside any checked-out repo's git tree.
205
- */
206
- const SCRIPT_BUNDLE_ROOT = ".lastlight-scripts";
207
- /** Build the shell invocation + on-disk filename for a script spec. */
208
- function scriptInvocation(spec) {
209
- const fileName = `script.${SCRIPT_EXT[spec.runtime]}`;
210
- const run = (path) => {
211
- switch (spec.runtime) {
212
- case "js":
213
- return `node ${path}`;
214
- case "ts":
215
- return `node --experimental-strip-types ${path}`;
216
- case "python":
217
- return `uv run ${path}`;
218
- }
219
- };
220
- return { fileName, run };
221
- }
222
- /**
223
- * Execute a deterministic command/script in the same workspace an agent phase
224
- * would use — no LLM. Replaces the three-way fork that lived in
225
- * `executeCommand`. Writes a session jsonl so the output is visible in the
226
- * dashboard + CLI.
227
- */
228
- export async function runSandboxedCommand(spec, ctx, cmdOpts) {
229
- const { config } = ctx;
230
- const model = config.model || DEFAULT_MODEL;
231
- const sessionsDir = resolveSessionsDir(config);
232
- const timeoutSeconds = cmdOpts.timeoutSeconds ?? 300;
233
- const startTime = Date.now();
234
- const displayPrompt = spec.kind === "bash" ? `$ ${spec.command}` : `${spec.runtime} script: ${spec.name}\n\n${spec.script}`;
235
- return withSandbox(ctx, async (sandbox, prov) => {
236
- // Per-phase script-bundle dir, a workspace-root sibling of the skill bundle.
237
- const scriptDir = spec.kind === "script" ? `${SCRIPT_BUNDLE_ROOT}/${spec.name}` : SCRIPT_BUNDLE_ROOT;
238
- let command;
239
- let toolInput;
240
- if (spec.kind === "bash") {
241
- command = spec.command;
242
- toolInput = { command: spec.command };
243
- }
244
- else {
245
- const { fileName, run } = scriptInvocation(spec);
246
- mkdirSync(join(prov.hostWorkspaceDir, scriptDir), { recursive: true });
247
- writeFileSync(join(prov.hostWorkspaceDir, scriptDir, fileName), spec.script);
248
- command = run(sandbox.sandboxPathFor(`${scriptDir}/${fileName}`));
249
- toolInput = { command, runtime: spec.runtime };
250
- }
251
- // Forward the GitHub API base-url override (evals fake) into the command env.
252
- // The agent path already threads `githubApiBaseUrl` (see runSandboxedAgent);
253
- // command/script phases need the same so a GitHub-mutating script (e.g.
254
- // pr-review's post-review step) hits the fake in evals. Prod-inert:
255
- // `githubApiBaseUrl` is undefined outside the eval harness, so nothing is
256
- // injected and the script falls back to api.github.com with its minted token.
257
- const sandboxEnv = config.githubApiBaseUrl
258
- ? { ...(cmdOpts.sandboxEnv ?? {}), GITHUB_API_URL: config.githubApiBaseUrl }
259
- : cmdOpts.sandboxEnv;
260
- const res = await sandbox.runCommand(ctx.taskId, command, {
261
- cwd: prov.agentCwd,
262
- sandboxEnv,
263
- timeoutSeconds,
264
- });
265
- const durationMs = Date.now() - startTime;
266
- const sessionId = cmdOpts.writeSession === false
267
- ? null
268
- : await writeCommandSession({
269
- sessionsDir,
270
- projectSlug: projectSlugForCwd(prov.agentCwd),
271
- model,
272
- displayPrompt,
273
- toolName: "bash",
274
- toolInput,
275
- stdout: res.stdout,
276
- stderr: res.stderr,
277
- exitCode: res.exitCode,
278
- durationMs,
279
- });
280
- if (sessionId && ctx.onSessionId)
281
- ctx.onSessionId(sessionId);
282
- return buildCommandResult(res, durationMs, sessionId);
283
- });
284
- }
285
- /**
286
- * Mirror a finished command into a session jsonl via the shim. Synthesizes a
287
- * minimal agentic-pi event stream: session → assistant(tool_use bash) →
288
- * user(tool_result) → assistant(text summary) → result. Returns the session id
289
- * the shim wrote under (so the executions row can link to it).
290
- */
291
- async function writeCommandSession(opts) {
292
- const shim = new AgenticShim({
293
- homeDir: opts.sessionsDir,
294
- projectSlug: opts.projectSlug,
295
- model: opts.model,
296
- initialPrompt: opts.displayPrompt,
297
- });
298
- const sessionId = randomUUID();
299
- const ts = Date.now();
300
- const toolCallId = `cmd_${randomUUID().slice(0, 8)}`;
301
- const feed = (record) => shim.feed(record);
302
- feed({ type: "session", id: sessionId, timestamp: ts });
303
- feed({
304
- type: "message_end",
305
- sessionId,
306
- timestamp: ts,
307
- message: { role: "assistant", content: [{ type: "toolCall", id: toolCallId, name: opts.toolName, arguments: opts.toolInput }] },
308
- });
309
- const combined = opts.stderr
310
- ? `${opts.stdout}${opts.stdout && !opts.stdout.endsWith("\n") ? "\n" : ""}${opts.stderr}`
311
- : opts.stdout;
312
- feed({
313
- type: "tool_execution_end",
314
- sessionId,
315
- timestamp: ts,
316
- toolCallId,
317
- result: combined || `(no output, exit ${opts.exitCode})`,
318
- isError: opts.exitCode !== 0,
319
- });
320
- const summary = opts.exitCode === 0 ? "Command succeeded (exit 0)." : `Command failed (exit ${opts.exitCode}).`;
321
- feed({
322
- type: "message_end",
323
- sessionId,
324
- timestamp: ts,
325
- message: { role: "assistant", content: [{ type: "text", text: summary }] },
326
- });
327
- shim.finalize({
328
- finalText: summary,
329
- turns: 1,
330
- costUsd: 0,
331
- inputTokens: 0,
332
- outputTokens: 0,
333
- cacheReadInputTokens: 0,
334
- cacheCreationInputTokens: 0,
335
- stopReason: opts.exitCode === 0 ? "success" : "error_bash",
336
- durationMs: opts.durationMs,
337
- });
338
- await shim.flush();
339
- return shim.isInitialized ? sessionId : null;
340
- }
341
- /** Map a raw command result onto the ExecutionResult contract (turns 0, no cost). */
342
- function buildCommandResult(res, durationMs, sessionId) {
343
- const success = res.exitCode === 0;
344
- const combined = res.stderr
345
- ? `${res.stdout}${res.stdout && !res.stdout.endsWith("\n") ? "\n" : ""}${res.stderr}`
346
- : res.stdout;
347
- // Strip the trailing newline so the value substitutes cleanly into a
348
- // downstream command / `{{phaseOutputs.<name>}}` and can be forwarded as an
349
- // `LL_OUT_<PHASE>` env var. The raw stdout/stderr is preserved in the jsonl.
350
- const output = combined.replace(/\n+$/, "");
351
- return {
352
- success,
353
- output,
354
- turns: 0,
355
- durationMs,
356
- sessionId: sessionId ?? undefined,
357
- error: success
358
- ? undefined
359
- : res.timedOut
360
- ? `command timed out after ${Math.round(durationMs / 1000)}s`
361
- : `command exited ${res.exitCode}`,
362
- stopReason: success ? "success" : res.timedOut ? "error_timeout" : "error_bash",
363
- };
364
- }
365
- //# sourceMappingURL=orchestrator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../../src/engine/executors/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -1,189 +0,0 @@
1
- import type { RunResult, ThinkingLevel } from "agentic-pi";
2
- import { type ExecutorConfig, type ExecutionResult, type ExtensionStatusMap, type SkillsStatus } from "../github/profiles.js";
3
- import { AgenticShim } from "../event-shim.js";
4
- import { BuildAssetStore, type BuildAssetRef } from "../../state/build-assets.js";
5
- /**
6
- * Shared building blocks for the per-backend executors
7
- * ({@link ../executors/backends.ts}). These have NO dependency on the
8
- * executors or the dispatcher, so the import DAG stays acyclic:
9
- * shared → backends → agent-executor.
10
- */
11
- export declare const DEFAULT_MODEL = "anthropic/claude-sonnet-4-6";
12
- export declare const DOCKER_WORKSPACE_DIR = "/home/agent/workspace";
13
- export declare const SKILL_BUNDLE_ROOT = ".lastlight-skills";
14
- export declare const THINKING_LEVELS: ReadonlySet<string>;
15
- /**
16
- * Stage this phase's declared skills into a per-phase bundle directory at
17
- * `<workspaceRoot>/.lastlight-skills/<phaseKey>/<basename>/` and return the
18
- * staged skill dirs, so the caller can point pi at them explicitly (via
19
- * `--skill` for docker or `skillPaths` for the in-process backends). Each
20
- * skill is a directory containing SKILL.md plus any `scripts/` / `references/`
21
- * / `assets/` — the whole tree comes along.
22
- *
23
- * Keyed by phase so concurrent phases in one workspace never touch each
24
- * other's bundle: only the phase's own `<phaseKey>` subtree is cleared, so a
25
- * clean slate per phase doesn't disturb a sibling phase mid-run.
26
- *
27
- * `mode` controls how each skill lands:
28
- * - "symlink": one symlink per skill → host source. gondolin/none, where pi
29
- * reads skill files host-side / through the cwd mount. Zero-copy.
30
- * - "copy": recursive copy. docker, where the agent's tools run inside the
31
- * container and host symlink targets wouldn't resolve; the copy lands
32
- * under the bind-mounted workspace.
33
- *
34
- * Returns `undefined` when the phase declares no skills (after clearing its
35
- * bundle), so a phase with no `skills:` gets no catalogue at all.
36
- */
37
- export declare function stageSkillBundle(workspaceRoot: string, phaseKey: string, skillPaths: string[] | undefined, mode: "symlink" | "copy"): string[] | undefined;
38
- /**
39
- * Sanitized per-phase key for the skill bundle directory. Phase name first
40
- * (unique even for loop iterations like `reviewer_fix_1`), then workflow name,
41
- * then a constant fallback — so the bundle is always isolated per phase.
42
- */
43
- export declare function skillBundleKey(config: ExecutorConfig): string;
44
- /**
45
- * Add `entry` to a checkout's local `.git/info/exclude` (idempotent) so the
46
- * agent's own `git add`/`commit` can never pick it up. This file lives inside
47
- * `.git/` — it is never tracked, committed, or pushed, and it leaves the repo's
48
- * real `.gitignore` untouched; the exclusion applies only to this ephemeral
49
- * sandbox checkout. Used for the gondolin backend, where the skill bundle must
50
- * be staged under cwd (the only mounted dir) rather than as an out-of-repo
51
- * sibling. No-op when `repoDir` isn't a git checkout (e.g. the workspace root).
52
- */
53
- export declare function excludeFromGit(repoDir: string, entry: string): void;
54
- export interface ServerArtifacts {
55
- store: BuildAssetStore;
56
- ref: BuildAssetRef;
57
- /** Host path to `<repo>/.lastlight/<issueKey>` (the staged doc dir). */
58
- dir: string;
59
- /** Host path to the repo checkout root. */
60
- repoDir: string;
61
- }
62
- /**
63
- * Resolve the server-mode artifact context for a run, or undefined when not in
64
- * server mode (the default — the whole seam is then skipped and behaviour is
65
- * byte-for-byte repo mode). `hostRepoDir` is the host-visible repo checkout
66
- * (for docker that's the bind-mounted workspace path, not the in-container one).
67
- */
68
- export declare function serverArtifacts(config: ExecutorConfig, hostRepoDir: string): ServerArtifacts | undefined;
69
- /** Stage stored docs into the workspace + exclude the dir from git (server mode). */
70
- export declare function stageArtifactsIn(art: ServerArtifacts | undefined): void;
71
- /** Persist docs the phase wrote back to the store (server mode). */
72
- export declare function harvestArtifactsOut(art: ServerArtifacts | undefined): void;
73
- export declare class RunResultAccumulator {
74
- private sessionId?;
75
- private finalText;
76
- private agentEnded;
77
- private toolErrors;
78
- private maxStepsReached;
79
- private lastToolError?;
80
- private lastAssistantHadToolCall;
81
- private fatalError?;
82
- private snapshotStats?;
83
- private messages;
84
- private assistantMessages;
85
- private userMessages;
86
- private toolCalls;
87
- private toolResults;
88
- private msgInput;
89
- private msgOutput;
90
- private msgCacheRead;
91
- private msgCacheWrite;
92
- private msgCost;
93
- private ext;
94
- private skillsRaw?;
95
- feed(r: Record<string, unknown>): void;
96
- private accumulateUsage;
97
- /** Stats summed from per-message usage, or undefined if none was seen. */
98
- private accumulatedStats;
99
- /**
100
- * Prefer the per-message accumulation (compaction-proof) over pi's
101
- * terminal `usage_snapshot`. Fall back to the snapshot only when the
102
- * accumulation carries no token data — e.g. a provider that doesn't
103
- * report per-message usage — so a non-compacted snapshot still wins.
104
- */
105
- bestStats(): RunResult["stats"] | undefined;
106
- build(exitCode: 0 | 1 | 2): RunResult;
107
- /**
108
- * Normalized extension status captured from `extension_status` events
109
- * (file-search / github / web-search), or undefined if none reported.
110
- * Decoupled from agentic-pi's `RunResult` type, which lags the runtime —
111
- * the docker sandbox's agentic-pi emits file-search even when the harness's
112
- * pinned `RunResult` type doesn't yet declare it.
113
- */
114
- extensions(): ExtensionStatusMap | undefined;
115
- /**
116
- * Normalized skill-loading status from the gated `skills_status` event, or
117
- * undefined if none was reported (agentic-pi suppresses it on a run that
118
- * configured no skills and discovered none). The skill-loading counterpart
119
- * to {@link extensions}.
120
- */
121
- skills(): SkillsStatus | undefined;
122
- /**
123
- * The last tool result that came back with `isError: true`, including the
124
- * failure text — or undefined if no tool errored. This is what turns a
125
- * bare `error_tool` stop reason into a human-readable cause.
126
- */
127
- toolError(): {
128
- tool?: string;
129
- message: string;
130
- } | undefined;
131
- /**
132
- * True iff the run's final assistant turn ended on a tool call — meaning
133
- * the agent intended to keep going but the loop stopped before it could
134
- * respond to the tool result and write its answer. The signal a run was
135
- * truncated (step-limit) rather than genuinely finished.
136
- */
137
- endedOnToolCall(): boolean;
138
- }
139
- /**
140
- * Detect a provider account error (out of credit, quota, rate-limited, bad key)
141
- * that pi may have surfaced as plain text rather than a hard failure.
142
- *
143
- * Critically, on a **successful** run we scan ONLY the genuine provider-error
144
- * channel (`agentErrorMessage`, which `extractAgentError` already turns into a
145
- * non-success stopReason when set — so it's empty here). The agent's own output
146
- * (`finalText`) and tool results (`fatalError`, `toolError`) are NOT scanned on
147
- * success: a legitimate `verify`/`qa-test` report or a `curl` probing a 401
148
- * endpoint routinely contains "unauthorized" / "rate limit" as part of the task
149
- * itself, and folding that in would wrongly fail a genuinely successful run
150
- * (and drop its report). Only on a failed run do we fold those in to label why.
151
- */
152
- export declare function detectAccountError(opts: {
153
- success: boolean;
154
- fatalErrorMessage?: string;
155
- agentErrorMessage?: string;
156
- finalText?: string;
157
- toolErrorText?: string;
158
- }): boolean;
159
- export declare function finalizeFromRunResult(result: RunResult, _prompt: string, shim: AgenticShim, startTime: number, extensions?: ExtensionStatusMap, skills?: SkillsStatus, toolError?: {
160
- tool?: string;
161
- message: string;
162
- }, endedOnToolCall?: boolean): ExecutionResult;
163
- export declare function mapStopReason(result: RunResult): string;
164
- /**
165
- * Scan agent_end's messages for a failed assistant turn. pi-agent-core's
166
- * `handleRunFailure` catches provider errors, synthesizes an assistant
167
- * message with stopReason "error"/"aborted" + errorMessage, and emits a
168
- * normal agent_end — so the only signal that the run actually failed
169
- * lives on the last assistant message.
170
- */
171
- export declare function extractAgentError(result: RunResult): {
172
- stopReason: string;
173
- errorMessage: string;
174
- } | undefined;
175
- export declare function coerceThinking(raw: string | undefined): ThinkingLevel | undefined;
176
- export declare function resolveSessionsDir(config: ExecutorConfig): string;
177
- export declare function emptyResult(stopReason: string, durationMs: number): {
178
- finalText: string;
179
- turns: number;
180
- costUsd: number;
181
- inputTokens: number;
182
- outputTokens: number;
183
- cacheReadInputTokens: number;
184
- cacheCreationInputTokens: number;
185
- stopReason: string;
186
- durationMs: number;
187
- };
188
- /** Splice values into process.env for the duration of a sync block. */
189
- export declare function applyEnv(env: Record<string, string>): () => void;