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,26 +0,0 @@
1
- /**
2
- * Slack binding for the progress notifier. Owns a single message `ts` and
3
- * edits it in place via `chat.update` on every `publish()`; `note()` posts a
4
- * fresh threaded message for moments that deserve a real ping (approval
5
- * prompts, terminal summary) — `chat.update` itself is silent.
6
- */
7
- import type { SlackConnector } from "../../connectors/slack/connector.js";
8
- import type { NotifierTransport } from "../types.js";
9
- export interface SlackTransportDeps {
10
- slack: SlackConnector;
11
- channel: string;
12
- thread: string;
13
- /** Existing status-message ts from a resumed run, if any. */
14
- ts?: string;
15
- /** Persist the ts the first time it's created (so resume re-attaches). */
16
- save?: (ts: string) => void;
17
- }
18
- export declare class SlackTransport implements NotifierTransport {
19
- private readonly deps;
20
- /** Slack edits are silent and there's no other signal — so it wants the ping. */
21
- readonly terminalPing = true;
22
- private ts?;
23
- constructor(deps: SlackTransportDeps);
24
- publish(markdown: string): Promise<void>;
25
- note(markdown: string): Promise<void>;
26
- }
@@ -1,28 +0,0 @@
1
- export class SlackTransport {
2
- deps;
3
- /** Slack edits are silent and there's no other signal — so it wants the ping. */
4
- terminalPing = true;
5
- ts;
6
- constructor(deps) {
7
- this.deps = deps;
8
- this.ts = deps.ts;
9
- }
10
- async publish(markdown) {
11
- const { slack, channel, thread } = this.deps;
12
- if (this.ts !== undefined) {
13
- await slack.updateMessage(channel, this.ts, markdown);
14
- }
15
- else {
16
- const ts = await slack.sendMessage(channel, thread, markdown);
17
- if (typeof ts === "string") {
18
- this.ts = ts;
19
- this.deps.save?.(ts);
20
- }
21
- }
22
- }
23
- async note(markdown) {
24
- const { slack, channel, thread } = this.deps;
25
- await slack.sendMessage(channel, thread, markdown);
26
- }
27
- }
28
- //# sourceMappingURL=slack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../../src/notify/transports/slack.ts"],"names":[],"mappings":"AAmBA,MAAM,OAAO,cAAc;IAKI;IAJ7B,iFAAiF;IACxE,YAAY,GAAG,IAAI,CAAC;IACrB,EAAE,CAAU;IAEpB,YAA6B,IAAwB;QAAxB,SAAI,GAAJ,IAAI,CAAoB;QACnD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAgB;QAC5B,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAC7C,IAAI,IAAI,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACxD,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC9D,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB;QACzB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAC7C,MAAM,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;CACF"}
@@ -1,95 +0,0 @@
1
- /**
2
- * Shared, platform-agnostic notification model.
3
- *
4
- * The notifier renders workflow progress as a single "task list" surface that
5
- * is **edited in place** as phases run — one GitHub comment (via
6
- * `issues.updateComment`) and/or one Slack message (via `chat.update`) instead
7
- * of a fresh comment per phase. The model here is the canonical content; the
8
- * renderer (`render.ts`) turns it into markdown that both platforms consume
9
- * (Slack runs the markdown through `markdownToSlackMrkdwn` in its transport).
10
- *
11
- * Nothing in this module imports GitHub or Slack — platform code lives behind
12
- * the `NotifierTransport` interface so the content model stays decoupled and
13
- * shared.
14
- */
15
- /** Lifecycle state of a single checklist step. */
16
- export type StepStatus = "pending" | "running" | "done" | "blocked" | "awaiting" | "failed" | "skipped";
17
- /** One row in the task list. `key` is stable; `label` is what humans see. */
18
- export interface ProgressStep {
19
- key: string;
20
- label: string;
21
- status: StepStatus;
22
- /** Optional one-line context shown after the label (e.g. a link or status). */
23
- detail?: string;
24
- }
25
- /** The full content model rendered into the single status surface. */
26
- export interface ProgressModel {
27
- /** Heading line, e.g. "build for #18". */
28
- title: string;
29
- /** Optional bold sub-heading, e.g. the issue title. */
30
- subtitle?: string;
31
- /** Optional metadata lines under the heading (branch link, PR link, …). */
32
- meta?: string[];
33
- /** Ordered checklist. */
34
- steps: ProgressStep[];
35
- /** Optional trailing line (e.g. artifacts link). */
36
- footer?: string;
37
- }
38
- /**
39
- * A platform binding. Each transport owns its own in-place-update handle
40
- * (a GitHub comment id or a Slack message ts) internally.
41
- */
42
- export interface NotifierTransport {
43
- /** Create-or-update the single status surface with the rendered markdown. */
44
- publish(markdown: string): Promise<void>;
45
- /**
46
- * Post a *new, separate* message (not an edit). Used for approval prompts —
47
- * moments worth an actual notification, since an in-place edit is silent.
48
- */
49
- note(markdown: string): Promise<void>;
50
- /**
51
- * Whether this surface wants a separate *completion* ping at the end of a
52
- * run. Slack sets this (its in-place edits are silent and it has no other
53
- * signal); GitHub leaves it false — the edited checklist plus the
54
- * PR-opened event already notify watchers, so a terminal comment would just
55
- * be noise. Default false.
56
- */
57
- readonly terminalPing?: boolean;
58
- }
59
- /**
60
- * The runner-facing API. `runner.ts` only ever sees this interface — it never
61
- * touches a transport or the markdown directly.
62
- */
63
- export interface ProgressReporter {
64
- /** Seed the task list. Idempotent: a resumed run re-seeds the same surface. */
65
- start(model: ProgressModel): Promise<void>;
66
- /** Transition a step's status (and optionally set its one-line detail). */
67
- step(key: string, status: StepStatus, detail?: string): Promise<void>;
68
- /**
69
- * Insert (or update) a dynamic step before `beforeKey` — used for loop
70
- * iterations (re-review / fix cycles). Appends when `beforeKey` is omitted
71
- * or not found.
72
- */
73
- insertStep(step: ProgressStep, beforeKey?: string): Promise<void>;
74
- /** Post a standalone message to every surface (e.g. an approval prompt). */
75
- note(markdown: string): Promise<void>;
76
- /**
77
- * Set (or clear) the trailing footer of the single status surface and
78
- * re-publish in place. Used to fold a workflow's final synthesized result
79
- * into the same comment as the checklist rather than posting a new one.
80
- * Pass an empty string to clear.
81
- */
82
- footer(markdown: string): Promise<void>;
83
- /**
84
- * Post the run's completion message, but only to surfaces that want a
85
- * terminal ping (Slack) — GitHub is left with just the finished checklist.
86
- */
87
- noteTerminal(markdown: string): Promise<void>;
88
- }
89
- /** Persisted in-place-update handles, stored under `workflow_runs.scratch.notifier`. */
90
- export interface NotifierState {
91
- githubCommentId?: number;
92
- slackTs?: string;
93
- slackChannel?: string;
94
- slackThread?: string;
95
- }
@@ -1,16 +0,0 @@
1
- /**
2
- * Shared, platform-agnostic notification model.
3
- *
4
- * The notifier renders workflow progress as a single "task list" surface that
5
- * is **edited in place** as phases run — one GitHub comment (via
6
- * `issues.updateComment`) and/or one Slack message (via `chat.update`) instead
7
- * of a fresh comment per phase. The model here is the canonical content; the
8
- * renderer (`render.ts`) turns it into markdown that both platforms consume
9
- * (Slack runs the markdown through `markdownToSlackMrkdwn` in its transport).
10
- *
11
- * Nothing in this module imports GitHub or Slack — platform code lives behind
12
- * the `NotifierTransport` interface so the content model stays decoupled and
13
- * shared.
14
- */
15
- export {};
16
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/notify/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -1,125 +0,0 @@
1
- /**
2
- * Provider registry — single source of truth for the LLM providers Last Light
3
- * knows how to wire end-to-end.
4
- *
5
- * pi-ai (`@earendil-works/pi-ai`) is provider-agnostic and supports 15+
6
- * providers out of the box. Of those, only a subset is "wizard-able" here:
7
- * they authenticate with a single API-key env var and expose a stable
8
- * endpoint reachable from the sandbox egress firewall. Excluded are the
9
- * OAuth-only providers (`openai-codex`, `github-copilot`), the multi-env
10
- * Ambient-cred ones (`amazon-bedrock`, `google-vertex`, `azure-openai-*`,
11
- * `cloudflare-*`), and the regional-CN variants.
12
- *
13
- * This registry is consumed by:
14
- * - `src/engine/llm.ts` — the cheap one-shot helper used by the
15
- * prompt screener + intent classifier. It builds requests for the
16
- * `openai-completions` family (which is most wizard-able providers —
17
- * Google and Mistral are routed through their OpenAI-compatible
18
- * endpoints) and the `anthropic-messages` family (Kimi for Coding,
19
- * MiniMax, Anthropic itself).
20
- * - `src/engine/agent-executor.ts` — forwards each provider's env var
21
- * into the sandbox so agentic-pi can auth.
22
- * - `src/sandbox/egress-allowlist.ts` — the SNI/firewall allowlist is
23
- * seeded from each provider's `host`.
24
- * - `src/cli/setup.ts` — the install wizard's step-4 provider picker.
25
- *
26
- * Keep this list aligned with pi-ai's provider registry. When pi-ai adds a
27
- * new provider that we want to surface, add an entry here and everything
28
- * else (forwarding, egress, wizard UI) follows automatically.
29
- */
30
- /** API request/response family pi-ai uses to talk to a provider. */
31
- export type ApiType =
32
- /** Anthropic Messages API — `system` field, content-block response. */
33
- "anthropic-messages"
34
- /** OpenAI Chat Completions API — `messages`, `choices[0].message.content`. */
35
- | "openai-completions";
36
- /**
37
- * Metadata for one wizard-able provider. The request-building differences
38
- * between OpenAI-completions-family providers (maxTokensField name,
39
- * extra headers, nested-model-id quirk) are small, so they live as optional
40
- * fields here rather than separate adapter objects.
41
- */
42
- export interface ProviderSpec {
43
- /** pi-ai model-spec prefix — the part before `/` in `provider/model`. */
44
- readonly prefix: string;
45
- /** Display name (shown in the wizard). */
46
- readonly displayName: string;
47
- /** Env var that carries the API key (also the env var forwarded into the sandbox). */
48
- readonly envKey: string;
49
- /** API base URL — `chat/completions` or `messages` is appended per `api`. */
50
- readonly baseUrl: string;
51
- /** API request/response family. */
52
- readonly api: ApiType;
53
- /** Egress allowlist host — apex (matches all subdomains) or specific host. */
54
- readonly host: string;
55
- /** Small/fast model id used by the screener + classifier cheap helper. */
56
- readonly fastModel: string;
57
- /** Canonical primary model id (used as the wizard placeholder). */
58
- readonly sampleModel: string;
59
- /** OpenAI-completions only: body field for the token cap. Default `max_tokens`. */
60
- readonly maxTokensField?: "max_tokens" | "max_completion_tokens";
61
- /** OpenAI-completions only: keep the nested `vendor/model` tail verbatim (OpenRouter). */
62
- readonly preserveNestedModelId?: boolean;
63
- /** OpenAI-completions only: extra request headers (OpenRouter's referer/title). */
64
- readonly extraHeaders?: Readonly<Record<string, string>>;
65
- /** Optional wizard hint for the API-key prefix (used in placeholder + loose validation). */
66
- readonly keyPrefix?: string;
67
- }
68
- /**
69
- * The registry. Order matters — `defaultFastModel()` in `llm.ts` selects
70
- * a fast model by iterating this list and picking the first provider
71
- * whose env var is present. Always keep Anthropic first (best raw-latency
72
- * cheap helper) then OpenAI then OpenRouter, then the rest grouped by
73
- * families so the array is easy to scan.
74
- */
75
- export declare const PROVIDERS: readonly ProviderSpec[];
76
- export declare function providerByPrefix(prefix: string): ProviderSpec | undefined;
77
- export declare function providerByEnvKey(envKey: string): ProviderSpec | undefined;
78
- /** All the env var names a harness must forward to reach every registered provider. */
79
- export declare const PROVIDER_ENV_KEYS: readonly string[];
80
- /** All the hosts the sandbox egress firewall must allowlist to reach these providers. */
81
- export declare const PROVIDER_HOSTS: readonly string[];
82
- /**
83
- * Default model spec shipped with the harness. Keep aligned with the
84
- * `OPENCODE_MODEL` default in `config/default.yaml` and the wizard's
85
- * initial provider selection.
86
- */
87
- export declare const DEFAULT_PROVIDER = "anthropic";
88
- export declare const DEFAULT_MODEL = "anthropic/claude-sonnet-4-6";
89
- /**
90
- * OAuth (subscription-login) providers — the ones the API-key registry above
91
- * deliberately excludes. These don't authenticate with a static key env var;
92
- * a user logs in once (`lastlight oauth login <id>`) and pi-ai manages the
93
- * token. Two consumption seams with different reach:
94
- *
95
- * - **chat** (in-process pi-ai) supports ALL of these — the chat runner
96
- * passes the resolved token as the per-call `apiKey`.
97
- * - **sandbox** (agentic-pi) resolves creds from ENV only, so a provider is
98
- * sandbox-usable ONLY if `sandboxEnvVar` is set (the env var pi-ai reads
99
- * inside the sandbox). Codex has none → chat-only.
100
- *
101
- * Egress note: chat is in-process (not behind the sandbox firewall), and the
102
- * one sandbox-capable OAuth provider whose models we ship (`anthropic`) reuses
103
- * the `anthropic.com` host already in the API-key registry — so no OAuth host
104
- * is added to the sandbox allowlist here.
105
- */
106
- export interface OAuthProviderSpec {
107
- /** pi-ai OAuth provider id — also `lastlight oauth login <id>`. */
108
- readonly id: string;
109
- /** Display name (wizard + CLI). */
110
- readonly displayName: string;
111
- /** pi-ai model-spec prefix (`provider` in `provider/model`) for its models. */
112
- readonly modelPrefix: string;
113
- /** Representative model spec — wizard placeholder / docs hint. */
114
- readonly sampleModel: string;
115
- /**
116
- * Env var pi-ai reads for this provider's OAuth token inside a sandbox, or
117
- * `null` when there's no env route (⇒ chat-only; cannot run sandbox phases).
118
- */
119
- readonly sandboxEnvVar: string | null;
120
- /** True when login is mandatory (no API-key fallback). */
121
- readonly oauthOnly: boolean;
122
- }
123
- export declare const OAUTH_PROVIDERS: readonly OAuthProviderSpec[];
124
- export declare function oauthProviderByModelPrefix(prefix: string): OAuthProviderSpec | undefined;
125
- export declare function oauthProviderById(id: string): OAuthProviderSpec | undefined;
package/dist/providers.js DELETED
@@ -1,279 +0,0 @@
1
- /**
2
- * Provider registry — single source of truth for the LLM providers Last Light
3
- * knows how to wire end-to-end.
4
- *
5
- * pi-ai (`@earendil-works/pi-ai`) is provider-agnostic and supports 15+
6
- * providers out of the box. Of those, only a subset is "wizard-able" here:
7
- * they authenticate with a single API-key env var and expose a stable
8
- * endpoint reachable from the sandbox egress firewall. Excluded are the
9
- * OAuth-only providers (`openai-codex`, `github-copilot`), the multi-env
10
- * Ambient-cred ones (`amazon-bedrock`, `google-vertex`, `azure-openai-*`,
11
- * `cloudflare-*`), and the regional-CN variants.
12
- *
13
- * This registry is consumed by:
14
- * - `src/engine/llm.ts` — the cheap one-shot helper used by the
15
- * prompt screener + intent classifier. It builds requests for the
16
- * `openai-completions` family (which is most wizard-able providers —
17
- * Google and Mistral are routed through their OpenAI-compatible
18
- * endpoints) and the `anthropic-messages` family (Kimi for Coding,
19
- * MiniMax, Anthropic itself).
20
- * - `src/engine/agent-executor.ts` — forwards each provider's env var
21
- * into the sandbox so agentic-pi can auth.
22
- * - `src/sandbox/egress-allowlist.ts` — the SNI/firewall allowlist is
23
- * seeded from each provider's `host`.
24
- * - `src/cli/setup.ts` — the install wizard's step-4 provider picker.
25
- *
26
- * Keep this list aligned with pi-ai's provider registry. When pi-ai adds a
27
- * new provider that we want to surface, add an entry here and everything
28
- * else (forwarding, egress, wizard UI) follows automatically.
29
- */
30
- /**
31
- * The registry. Order matters — `defaultFastModel()` in `llm.ts` selects
32
- * a fast model by iterating this list and picking the first provider
33
- * whose env var is present. Always keep Anthropic first (best raw-latency
34
- * cheap helper) then OpenAI then OpenRouter, then the rest grouped by
35
- * families so the array is easy to scan.
36
- */
37
- export const PROVIDERS = [
38
- // ── Anthropic-messages family ───────────────────────────────────────
39
- {
40
- prefix: "anthropic",
41
- displayName: "Anthropic",
42
- envKey: "ANTHROPIC_API_KEY",
43
- baseUrl: "https://api.anthropic.com/v1",
44
- api: "anthropic-messages",
45
- host: "anthropic.com",
46
- fastModel: "claude-haiku-4-5-20251001",
47
- sampleModel: "claude-sonnet-4-6",
48
- keyPrefix: "sk-ant-",
49
- },
50
- {
51
- prefix: "kimi-coding",
52
- displayName: "Kimi for Coding (Moonshot)",
53
- envKey: "KIMI_API_KEY",
54
- baseUrl: "https://api.kimi.com/coding",
55
- api: "anthropic-messages",
56
- host: "kimi.com",
57
- fastModel: "kimi-latest",
58
- sampleModel: "kimi-latest",
59
- },
60
- {
61
- prefix: "minimax",
62
- displayName: "MiniMax",
63
- envKey: "MINIMAX_API_KEY",
64
- baseUrl: "https://api.minimax.io/anthropic",
65
- api: "anthropic-messages",
66
- host: "minimax.io",
67
- fastModel: "MiniMax-M1",
68
- sampleModel: "MiniMax-M2",
69
- },
70
- // ── OpenAI-completions family — first-party OpenAI ──────────────────
71
- {
72
- prefix: "openai",
73
- displayName: "OpenAI",
74
- envKey: "OPENAI_API_KEY",
75
- baseUrl: "https://api.openai.com/v1",
76
- api: "openai-completions",
77
- host: "openai.com",
78
- fastModel: "gpt-5.4-mini",
79
- sampleModel: "gpt-5.5",
80
- maxTokensField: "max_completion_tokens",
81
- keyPrefix: "sk-",
82
- },
83
- // ── Google Gemini — routed through Google's OpenAI-compatible endpoint ──
84
- {
85
- prefix: "google",
86
- displayName: "Google AI Studio (Gemini)",
87
- envKey: "GEMINI_API_KEY",
88
- baseUrl: "https://generativelanguage.googleapis.com/v1beta/openai",
89
- api: "openai-completions",
90
- host: "generativelanguage.googleapis.com",
91
- fastModel: "gemini-2.5-flash",
92
- sampleModel: "gemini-2.5-pro",
93
- keyPrefix: "AIza",
94
- },
95
- // ── Mistral — Mistral exposes an OpenAI-compatible path ──────────────
96
- {
97
- prefix: "mistral",
98
- displayName: "Mistral",
99
- envKey: "MISTRAL_API_KEY",
100
- baseUrl: "https://api.mistral.ai/v1",
101
- api: "openai-completions",
102
- host: "mistral.ai",
103
- fastModel: "mistral-small-latest",
104
- sampleModel: "mistral-large-latest",
105
- },
106
- // ── OpenAI-compatible inference specialists ──────────────────────────
107
- {
108
- prefix: "groq",
109
- displayName: "Groq",
110
- envKey: "GROQ_API_KEY",
111
- baseUrl: "https://api.groq.com/openai/v1",
112
- api: "openai-completions",
113
- host: "groq.com",
114
- fastModel: "llama-3.3-70b-versatile",
115
- sampleModel: "llama-3.3-70b-versatile",
116
- },
117
- {
118
- prefix: "cerebras",
119
- displayName: "Cerebras",
120
- envKey: "CEREBRAS_API_KEY",
121
- baseUrl: "https://api.cerebras.ai/v1",
122
- api: "openai-completions",
123
- host: "cerebras.ai",
124
- fastModel: "llama-3.3-70b",
125
- sampleModel: "llama-3.3-70b",
126
- },
127
- {
128
- prefix: "xai",
129
- displayName: "xAI (Grok)",
130
- envKey: "XAI_API_KEY",
131
- baseUrl: "https://api.x.ai/v1",
132
- api: "openai-completions",
133
- host: "x.ai",
134
- fastModel: "grok-3-mini",
135
- sampleModel: "grok-4",
136
- },
137
- {
138
- prefix: "huggingface",
139
- displayName: "Hugging Face",
140
- envKey: "HF_TOKEN",
141
- baseUrl: "https://router.huggingface.co/v1",
142
- api: "openai-completions",
143
- host: "huggingface.co",
144
- fastModel: "meta-llama/Llama-3.3-70B-Instruct",
145
- sampleModel: "meta-llama/Llama-3.3-70B-Instruct",
146
- keyPrefix: "hf_",
147
- },
148
- {
149
- prefix: "moonshotai",
150
- displayName: "Moonshot AI",
151
- envKey: "MOONSHOT_API_KEY",
152
- baseUrl: "https://api.moonshot.ai/v1",
153
- api: "openai-completions",
154
- host: "moonshot.ai",
155
- fastModel: "kimi-k2",
156
- sampleModel: "kimi-k2",
157
- },
158
- {
159
- prefix: "nvidia",
160
- displayName: "NVIDIA NIM",
161
- envKey: "NVIDIA_API_KEY",
162
- baseUrl: "https://integrate.api.nvidia.com/v1",
163
- api: "openai-completions",
164
- host: "integrate.api.nvidia.com",
165
- fastModel: "meta/llama-3.3-70b-instruct",
166
- sampleModel: "meta/llama-3.3-70b-instruct",
167
- },
168
- {
169
- prefix: "fireworks",
170
- displayName: "Fireworks",
171
- envKey: "FIREWORKS_API_KEY",
172
- baseUrl: "https://api.fireworks.ai/inference/v1",
173
- api: "openai-completions",
174
- host: "fireworks.ai",
175
- fastModel: "accounts/fireworks/models/llama-v3p3-70b-instruct",
176
- sampleModel: "accounts/fireworks/models/llama-v3p3-70b-instruct",
177
- },
178
- {
179
- prefix: "together",
180
- displayName: "Together",
181
- envKey: "TOGETHER_API_KEY",
182
- baseUrl: "https://api.together.ai/v1",
183
- api: "openai-completions",
184
- host: "together.ai",
185
- fastModel: "meta-llama/Llama-3.3-70B-Instruct-Turbo",
186
- sampleModel: "meta-llama/Llama-3.3-70B-Instruct-Turbo",
187
- },
188
- {
189
- prefix: "deepseek",
190
- displayName: "DeepSeek",
191
- envKey: "DEEPSEEK_API_KEY",
192
- baseUrl: "https://api.deepseek.com/v1",
193
- api: "openai-completions",
194
- host: "deepseek.com",
195
- fastModel: "deepseek-chat",
196
- sampleModel: "deepseek-chat",
197
- },
198
- {
199
- prefix: "zai",
200
- displayName: "Z.AI (GLM)",
201
- envKey: "ZAI_API_KEY",
202
- baseUrl: "https://api.z.ai/api/coding/paas/v4",
203
- api: "openai-completions",
204
- host: "z.ai",
205
- fastModel: "glm-4.6",
206
- sampleModel: "glm-4.6",
207
- },
208
- // ── OpenRouter — aggregator (take any pi.dev-listed model via one key) ──
209
- {
210
- prefix: "openrouter",
211
- displayName: "OpenRouter (aggregator — Anthropic, Google, xAI, …)",
212
- envKey: "OPENROUTER_API_KEY",
213
- baseUrl: "https://openrouter.ai/api/v1",
214
- api: "openai-completions",
215
- host: "openrouter.ai",
216
- fastModel: "google/gemini-2.5-flash",
217
- sampleModel: "anthropic/claude-sonnet-4.5",
218
- preserveNestedModelId: true,
219
- extraHeaders: {
220
- "HTTP-Referer": "https://github.com/nearform/lastlight",
221
- "X-Title": "Last Light",
222
- },
223
- keyPrefix: "sk-or-",
224
- },
225
- ];
226
- const PREFIX_INDEX = new Map(PROVIDERS.map((p) => [p.prefix, p]));
227
- const ENV_INDEX = new Map(PROVIDERS.map((p) => [p.envKey, p]));
228
- export function providerByPrefix(prefix) {
229
- return PREFIX_INDEX.get(prefix.toLowerCase());
230
- }
231
- export function providerByEnvKey(envKey) {
232
- return ENV_INDEX.get(envKey);
233
- }
234
- /** All the env var names a harness must forward to reach every registered provider. */
235
- export const PROVIDER_ENV_KEYS = PROVIDERS.map((p) => p.envKey);
236
- /** All the hosts the sandbox egress firewall must allowlist to reach these providers. */
237
- export const PROVIDER_HOSTS = PROVIDERS.map((p) => p.host);
238
- /**
239
- * Default model spec shipped with the harness. Keep aligned with the
240
- * `OPENCODE_MODEL` default in `config/default.yaml` and the wizard's
241
- * initial provider selection.
242
- */
243
- export const DEFAULT_PROVIDER = "anthropic";
244
- export const DEFAULT_MODEL = "anthropic/claude-sonnet-4-6";
245
- export const OAUTH_PROVIDERS = [
246
- {
247
- id: "openai-codex",
248
- displayName: "ChatGPT Plus/Pro (Codex)",
249
- modelPrefix: "openai-codex",
250
- sampleModel: "openai-codex/gpt-5.4",
251
- sandboxEnvVar: null, // chatgpt.com backend — no env route, chat-only
252
- oauthOnly: true,
253
- },
254
- {
255
- id: "anthropic",
256
- displayName: "Anthropic (Claude Pro/Max)",
257
- modelPrefix: "anthropic",
258
- sampleModel: "anthropic/claude-sonnet-4-6",
259
- sandboxEnvVar: "ANTHROPIC_OAUTH_TOKEN",
260
- oauthOnly: false, // falls back to ANTHROPIC_API_KEY
261
- },
262
- {
263
- id: "github-copilot",
264
- displayName: "GitHub Copilot",
265
- modelPrefix: "github-copilot",
266
- sampleModel: "github-copilot/gpt-4o",
267
- sandboxEnvVar: "COPILOT_GITHUB_TOKEN",
268
- oauthOnly: true,
269
- },
270
- ];
271
- const OAUTH_PREFIX_INDEX = new Map(OAUTH_PROVIDERS.map((p) => [p.modelPrefix, p]));
272
- const OAUTH_ID_INDEX = new Map(OAUTH_PROVIDERS.map((p) => [p.id, p]));
273
- export function oauthProviderByModelPrefix(prefix) {
274
- return OAUTH_PREFIX_INDEX.get(prefix);
275
- }
276
- export function oauthProviderById(id) {
277
- return OAUTH_ID_INDEX.get(id);
278
- }
279
- //# sourceMappingURL=providers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}