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,581 +0,0 @@
1
- import { readFileSync, existsSync, statSync } from "fs";
2
- import { dirname, join, resolve } from "path";
3
- import { fileURLToPath } from "url";
4
- import { parse as parseYaml } from "yaml";
5
- import { normalizeAllowlistHost } from "../sandbox/egress-allowlist.js";
6
- import { resolveConfigLayers } from "./config-resolve.js";
7
- /**
8
- * Load .env file into process.env (simple, no dependency).
9
- * Does not overwrite existing env vars.
10
- */
11
- function loadDotEnv(path) {
12
- if (!existsSync(path))
13
- return;
14
- const content = readFileSync(path, "utf-8");
15
- for (const line of content.split("\n")) {
16
- const trimmed = line.trim();
17
- if (!trimmed || trimmed.startsWith("#"))
18
- continue;
19
- const eqIdx = trimmed.indexOf("=");
20
- if (eqIdx === -1)
21
- continue;
22
- const key = trimmed.slice(0, eqIdx).trim();
23
- let value = trimmed.slice(eqIdx + 1).trim();
24
- if ((value.startsWith('"') && value.endsWith('"')) ||
25
- (value.startsWith("'") && value.endsWith("'"))) {
26
- value = value.slice(1, -1);
27
- }
28
- if (!(key in process.env)) {
29
- process.env[key] = value;
30
- }
31
- }
32
- }
33
- let currentConfig;
34
- let currentPublicConfig;
35
- export function setRuntimeConfig(config) {
36
- currentConfig = config;
37
- currentPublicConfig = config.publicConfig;
38
- }
39
- export function getRuntimeConfig() {
40
- return currentConfig;
41
- }
42
- export function resetRuntimeConfigForTests() {
43
- currentConfig = undefined;
44
- currentPublicConfig = undefined;
45
- }
46
- export function getPublicConfig() {
47
- if (!currentPublicConfig) {
48
- loadConfig();
49
- }
50
- return currentPublicConfig;
51
- }
52
- export function getRoutes() {
53
- return currentConfig?.routes || defaultRouteConfig();
54
- }
55
- /**
56
- * The configured bot slug (no `[bot]` suffix), e.g. `last-light` or
57
- * `nearform-lastlight`. Returns the `last-light` default when config isn't
58
- * loaded yet (unit tests). Drives the router's `@mention` handle plus the
59
- * derived `botLogin` and git commit author.
60
- */
61
- export function getBotName() {
62
- return currentConfig?.botName || "last-light";
63
- }
64
- const DEFAULT_MODEL = "anthropic/claude-sonnet-4-6";
65
- function defaultConfigPath() {
66
- const cwdPath = resolve("config/default.yaml");
67
- if (existsSync(cwdPath))
68
- return cwdPath;
69
- const here = dirname(fileURLToPath(import.meta.url));
70
- return resolve(here, "../../config/default.yaml");
71
- }
72
- function readYamlFile(path, required) {
73
- if (!existsSync(path)) {
74
- if (required)
75
- throw new Error(`Config file not found: ${path}`);
76
- return null;
77
- }
78
- try {
79
- const parsed = parseYaml(readFileSync(path, "utf-8"));
80
- if (!isPlainObject(parsed))
81
- throw new Error("top-level config must be a mapping");
82
- return parsed;
83
- }
84
- catch (err) {
85
- const msg = err instanceof Error ? err.message : String(err);
86
- throw new Error(`Invalid config file ${path}: ${msg}`);
87
- }
88
- }
89
- function isPlainObject(value) {
90
- return typeof value === "object" && value !== null && !Array.isArray(value);
91
- }
92
- function clonePublic(obj) {
93
- return obj ? JSON.parse(JSON.stringify(obj)) : null;
94
- }
95
- /**
96
- * Keys whose name looks secret-bearing. Real secrets are env-only and never
97
- * read from YAML, so the public config bundle should never legitimately
98
- * contain these — but an operator could paste one into config.yaml by mistake.
99
- * Redact defensively so the dashboard /config view can't echo it back.
100
- */
101
- const SENSITIVE_KEY_RE = /secret|token|password|passwd|credential|private[-_]?key|signing[-_]?key|api[-_]?key|key[-_]?path|\bpem\b/i;
102
- /** Recursively redact secret-looking keys from a public (non-secret) config tree. */
103
- function redactPublic(value) {
104
- if (Array.isArray(value))
105
- return value.map((v) => redactPublic(v));
106
- if (isPlainObject(value)) {
107
- const out = {};
108
- for (const [k, v] of Object.entries(value)) {
109
- out[k] = SENSITIVE_KEY_RE.test(k) ? "[redacted]" : redactPublic(v);
110
- }
111
- return out;
112
- }
113
- return value;
114
- }
115
- /**
116
- * Load configuration from config/default.yaml, optional LASTLIGHT_OVERLAY_DIR/config.yaml,
117
- * then legacy environment variables. Secrets remain env-only.
118
- */
119
- export function loadConfig() {
120
- loadDotEnv(resolve(".env"));
121
- const builtInConfigPath = defaultConfigPath();
122
- const builtInRoot = resolve(dirname(builtInConfigPath), "..");
123
- const defaultRaw = readYamlFile(builtInConfigPath, true);
124
- const overlayDirRaw = process.env.LASTLIGHT_OVERLAY_DIR?.trim();
125
- const overlayDir = overlayDirRaw ? resolve(overlayDirRaw) : undefined;
126
- let overlayRaw = null;
127
- if (overlayDir) {
128
- if (!existsSync(overlayDir) || !statSync(overlayDir).isDirectory()) {
129
- throw new Error(`LASTLIGHT_OVERLAY_DIR overlay directory does not exist or is not a directory: ${overlayDir}. ` +
130
- `Create or clone your deployment overlay there (e.g. the instance/ folder), or unset LASTLIGHT_OVERLAY_DIR.`);
131
- }
132
- // Fast-exit on an unpopulated overlay. The common docker footgun is a bind
133
- // mount auto-creating an empty instance/ when the operator forgot to clone
134
- // or populate it — better to fail loudly at startup than silently boot a
135
- // no-op instance with no managed repos and no secrets.
136
- const OVERLAY_MARKERS = ["config.yaml", "secrets", "workflows", "skills", "agent-context"];
137
- if (!OVERLAY_MARKERS.some((m) => existsSync(join(overlayDir, m)))) {
138
- throw new Error(`LASTLIGHT_OVERLAY_DIR is set to ${overlayDir} but the overlay is empty — ` +
139
- `expected at least one of: ${OVERLAY_MARKERS.join(", ")}. ` +
140
- `Clone or create your deployment overlay (instance/), or unset LASTLIGHT_OVERLAY_DIR.`);
141
- }
142
- overlayRaw = readYamlFile(join(overlayDir, "config.yaml"), false);
143
- }
144
- // Build the env layer once: a partial config tree in the same shape as the
145
- // YAML layers. This is the single place that maps env vars onto config paths
146
- // (LASTLIGHT_MODELS → models.*, legacy OPENCODE_* aliases, …). Once built,
147
- // one uniform precedence pass (env > overlay > default) produces the merged
148
- // tree and its provenance — no field re-parses an env var after the merge.
149
- const envLayer = buildEnvConfigLayer(process.env);
150
- const { value: mergedRaw, sources: mergedSources } = resolveConfigLayers({
151
- default: defaultRaw,
152
- overlay: overlayRaw,
153
- env: envLayer,
154
- });
155
- const fileCfg = normalizeFileConfig(mergedRaw);
156
- const stateDir = resolve(stringEnv("STATE_DIR", "./data"));
157
- const models = fileCfg.models;
158
- const model = models.default;
159
- const variants = fileCfg.variants;
160
- const sandbox = fileCfg.sandbox.backend;
161
- const maxTurns = fileCfg.sandbox.maxTurns;
162
- const buildAssets = fileCfg.buildAssets;
163
- const buildAssetsDir = resolve(stringEnv("BUILD_ASSETS_DIR", join(stateDir, "build-assets")));
164
- // Two documented exceptions to plain key-by-key precedence, preserved for
165
- // backward compatibility (and kept out of the generic env layer so the file
166
- // layers survive):
167
- // - approval: APPROVAL_GATES replaces the file map wholesale (not a merge).
168
- // - otel.collectorHosts: env hosts are unioned with file hosts (not replaced),
169
- // so an OTEL endpoint env var adds to, rather than drops, overlay hosts.
170
- const approval = process.env.APPROVAL_GATES !== undefined
171
- ? parseApprovalGates()
172
- : fileCfg.approval;
173
- const envCollectorHosts = [
174
- ...parseCollectorHosts(process.env.LASTLIGHT_OTEL_COLLECTOR_HOSTS, "LASTLIGHT_OTEL_COLLECTOR_HOSTS"),
175
- ...parseOtelCollectorHostsFromEnv(process.env),
176
- ];
177
- const otel = {
178
- ...fileCfg.otel,
179
- collectorHosts: Array.from(new Set([...fileCfg.otel.collectorHosts, ...envCollectorHosts])),
180
- };
181
- // Derive the merged public surface from the single resolution, folding the
182
- // two exceptions above back in so it reflects effective values. The
183
- // provenance tree is patched to attribute env-driven exceptions to env.
184
- const mergedPublic = { ...mergedRaw, approval, otel };
185
- if (process.env.APPROVAL_GATES !== undefined) {
186
- mergedSources.approval = "env";
187
- }
188
- if (envCollectorHosts.length) {
189
- const otelSources = isPlainObject(mergedSources.otel)
190
- ? mergedSources.otel
191
- : (mergedSources.otel = {});
192
- otelSources.collectorHosts = "env";
193
- }
194
- const githubApp = process.env.GITHUB_APP_ID
195
- ? {
196
- appId: process.env.GITHUB_APP_ID,
197
- privateKeyPath: requireEnv("GITHUB_APP_PRIVATE_KEY_PATH"),
198
- installationId: requireEnv("GITHUB_APP_INSTALLATION_ID"),
199
- }
200
- : undefined;
201
- // PAT fallback: only when no App is configured. App always wins.
202
- const githubToken = !githubApp && process.env.GITHUB_TOKEN
203
- ? process.env.GITHUB_TOKEN
204
- : undefined;
205
- const slack = process.env.SLACK_BOT_TOKEN
206
- ? (() => {
207
- // Mode resolution: an explicit SLACK_MODE always wins. Otherwise
208
- // auto-detect — prefer webhook (the reliable path) the moment a signing
209
- // secret is configured, else fall back to socket. This keeps a plain
210
- // SLACK_APP_TOKEN deployment on Socket Mode until the operator opts into
211
- // webhooks by adding SLACK_SIGNING_SECRET, so simply shipping this code
212
- // never breaks an existing Socket-Mode instance.
213
- const explicit = (process.env.SLACK_MODE || "").trim().toLowerCase();
214
- const mode = explicit === "socket" ? "socket"
215
- : explicit === "webhook" ? "webhook"
216
- : process.env.SLACK_SIGNING_SECRET ? "webhook" : "socket";
217
- if (mode === "webhook" && !process.env.SLACK_SIGNING_SECRET) {
218
- throw new Error("SLACK_MODE=webhook requires SLACK_SIGNING_SECRET");
219
- }
220
- if (mode === "socket" && !process.env.SLACK_APP_TOKEN) {
221
- throw new Error("SLACK_MODE=socket requires SLACK_APP_TOKEN (or set SLACK_SIGNING_SECRET to use webhook mode)");
222
- }
223
- return {
224
- botToken: process.env.SLACK_BOT_TOKEN,
225
- mode,
226
- appToken: process.env.SLACK_APP_TOKEN || undefined,
227
- signingSecret: process.env.SLACK_SIGNING_SECRET || undefined,
228
- allowedUsers: (process.env.SLACK_ALLOWED_USERS || "").split(",").filter(Boolean),
229
- deliveryChannel: process.env.SLACK_DELIVERY_CHANNEL || process.env.SLACK_HOME_CHANNEL || undefined,
230
- };
231
- })()
232
- : undefined;
233
- const config = {
234
- port: parseInt(process.env.WEBHOOK_PORT || process.env.PORT || "8644", 10),
235
- webhookSecret: process.env.WEBHOOK_SECRET || "",
236
- botName: fileCfg.botName,
237
- botLogin: process.env.BOT_LOGIN || `${fileCfg.botName}[bot]`,
238
- stateDir,
239
- sandboxDir: join(stateDir, "sandboxes"),
240
- sessionsDir: resolve(process.env.LASTLIGHT_SESSIONS_DIR || join(stateDir, "agent-sessions")),
241
- dbPath: process.env.DB_PATH || join(stateDir, "lastlight.db"),
242
- builtInRoot,
243
- overlayDir,
244
- model,
245
- models,
246
- variants,
247
- maxTurns,
248
- sandbox,
249
- buildAssets,
250
- buildAssetsDir,
251
- deploy: fileCfg.deploy,
252
- managedRepos: fileCfg.managedRepos,
253
- routes: fileCfg.routes,
254
- disabled: fileCfg.disabled,
255
- otel,
256
- publicConfig: {
257
- default: redactPublic(clonePublic(defaultRaw)),
258
- overlay: redactPublic(clonePublic(overlayRaw)),
259
- merged: redactPublic(clonePublic(mergedPublic)),
260
- sources: redactPublic(clonePublic(mergedSources)),
261
- },
262
- githubApp,
263
- githubToken,
264
- slack,
265
- approval,
266
- bootstrapLabel: fileCfg.bootstrapLabel,
267
- exploreDefaultRepo: fileCfg.exploreDefaultRepo,
268
- publicUrl: resolvePublicUrl(),
269
- reviewPostsCheck: fileCfg.reviewPostsCheck,
270
- };
271
- setRuntimeConfig(config);
272
- return config;
273
- }
274
- function stringEnv(name, fallback) {
275
- const v = process.env[name];
276
- return v && v.length > 0 ? v : fallback;
277
- }
278
- function normalizeFileConfig(raw) {
279
- const managedRepos = stringArray(raw.managedRepos, "managedRepos");
280
- const botName = typeof raw.botName === "string" && raw.botName.trim() ? raw.botName.trim() : "last-light";
281
- const routes = normalizeRoutes(raw.routes);
282
- const disabledRaw = isPlainObject(raw.disabled) ? raw.disabled : {};
283
- const modelsRaw = isPlainObject(raw.models) ? raw.models : {};
284
- const variantsRaw = isPlainObject(raw.variants) ? raw.variants : {};
285
- const sandboxRaw = isPlainObject(raw.sandbox) ? raw.sandbox : {};
286
- const buildAssetsRaw = isPlainObject(raw.buildAssets) ? raw.buildAssets : {};
287
- const deployRaw = isPlainObject(raw.deploy) ? raw.deploy : {};
288
- const bootstrapRaw = isPlainObject(raw.bootstrap) ? raw.bootstrap : {};
289
- const exploreRaw = isPlainObject(raw.explore) ? raw.explore : {};
290
- const reviewRaw = isPlainObject(raw.review) ? raw.review : {};
291
- const approvalRaw = isPlainObject(raw.approval) ? raw.approval : {};
292
- const otelRaw = isPlainObject(raw.otel) ? raw.otel : {};
293
- const models = { default: typeof modelsRaw.default === "string" ? modelsRaw.default : DEFAULT_MODEL };
294
- for (const [k, v] of Object.entries(modelsRaw))
295
- if (typeof v === "string")
296
- models[k] = v;
297
- const variants = {};
298
- for (const [k, v] of Object.entries(variantsRaw))
299
- if (typeof v === "string")
300
- variants[k] = v;
301
- const approval = {};
302
- for (const [k, v] of Object.entries(approvalRaw))
303
- approval[k] = v === true;
304
- const backend = sandboxBackend(sandboxRaw.backend, "sandbox.backend");
305
- const maxTurns = typeof sandboxRaw.maxTurns === "number" ? sandboxRaw.maxTurns : 200;
306
- const buildAssets = buildAssetsLocation(buildAssetsRaw.location, "buildAssets.location");
307
- const deployVersion = typeof deployRaw.version === "string" && deployRaw.version.trim() ? deployRaw.version.trim() : null;
308
- const bootstrapLabel = typeof bootstrapRaw.label === "string" ? bootstrapRaw.label : "lastlight:bootstrap";
309
- const exploreDefaultRepo = typeof exploreRaw.defaultRepo === "string" ? exploreRaw.defaultRepo : undefined;
310
- const reviewPostsCheck = reviewRaw.postsCheck === true;
311
- return {
312
- managedRepos,
313
- botName,
314
- routes,
315
- disabled: {
316
- workflows: optionalStringArray(disabledRaw.workflows, "disabled.workflows"),
317
- crons: optionalStringArray(disabledRaw.crons, "disabled.crons"),
318
- prompts: optionalStringArray(disabledRaw.prompts, "disabled.prompts"),
319
- skills: optionalStringArray(disabledRaw.skills, "disabled.skills"),
320
- agentContext: optionalStringArray(disabledRaw.agentContext, "disabled.agentContext"),
321
- },
322
- models,
323
- variants,
324
- sandbox: { backend, maxTurns },
325
- buildAssets,
326
- deploy: { version: deployVersion },
327
- approval,
328
- bootstrapLabel,
329
- exploreDefaultRepo,
330
- reviewPostsCheck,
331
- otel: normalizeOtelFileConfig(otelRaw),
332
- };
333
- }
334
- function normalizeRoutes(raw) {
335
- const defaults = defaultRouteConfig();
336
- if (!isPlainObject(raw))
337
- return defaults;
338
- return {
339
- github: { ...defaults.github, ...(isPlainObject(raw.github) ? stringRecord(raw.github, "routes.github") : {}) },
340
- slack: { ...defaults.slack, ...(isPlainObject(raw.slack) ? stringRecord(raw.slack, "routes.slack") : {}) },
341
- };
342
- }
343
- function defaultRouteConfig() {
344
- return {
345
- github: {
346
- issue_opened: "issue-triage",
347
- issue_answer: "answer",
348
- issue_reopened: "issue-triage",
349
- pr_opened: "pr-review",
350
- pr_synchronize: "pr-review",
351
- pr_reopened: "pr-review",
352
- approval_response: "approval-response",
353
- security_review: "security-review",
354
- pr_fix: "pr-fix",
355
- pr_review: "pr-review",
356
- pr_comment: "pr-comment",
357
- issue_build: "github-orchestrator",
358
- issue_explore: "explore",
359
- issue_comment: "issue-comment",
360
- security_feedback: "security-feedback",
361
- explore_reply: "explore-reply",
362
- },
363
- slack: {
364
- reset: "chat-reset",
365
- status: "status-report",
366
- approve: "approval-response",
367
- reject: "approval-response",
368
- build: "github-orchestrator",
369
- triage: "issue-triage",
370
- review: "pr-review",
371
- security: "security-review",
372
- explore: "explore",
373
- answer: "answer",
374
- chat: "chat",
375
- explore_reply: "explore-reply",
376
- },
377
- };
378
- }
379
- function stringRecord(raw, path) {
380
- const out = {};
381
- for (const [k, v] of Object.entries(raw)) {
382
- if (typeof v !== "string" || !v)
383
- throw new Error(`${path}.${k} must be a non-empty string`);
384
- out[k] = v;
385
- }
386
- return out;
387
- }
388
- function stringArray(raw, path) {
389
- if (!Array.isArray(raw) || raw.some((v) => typeof v !== "string" || !v)) {
390
- throw new Error(`${path} must be an array of non-empty strings`);
391
- }
392
- return raw;
393
- }
394
- function optionalStringArray(raw, path) {
395
- if (raw === undefined || raw === null)
396
- return [];
397
- return stringArray(raw, path);
398
- }
399
- function sandboxBackend(raw, path) {
400
- if (raw === "gondolin" || raw === "docker" || raw === "smol" || raw === "none")
401
- return raw;
402
- throw new Error(`${path} must be one of gondolin, docker, smol, none`);
403
- }
404
- function buildAssetsLocation(raw, path) {
405
- // Absent → default to repo mode (current behaviour). An explicit bad value
406
- // is a config error worth surfacing loudly.
407
- if (raw === undefined || raw === null)
408
- return "repo";
409
- if (raw === "repo" || raw === "server")
410
- return raw;
411
- throw new Error(`${path} must be one of repo, server`);
412
- }
413
- function parseBool(raw) {
414
- if (!raw)
415
- return false;
416
- const v = raw.trim().toLowerCase();
417
- return v === "1" || v === "true" || v === "yes" || v === "on";
418
- }
419
- /**
420
- * Materialize all env-var config overrides into one partial tree shaped like
421
- * the YAML layers, so the precedence resolver can apply them uniformly. This is
422
- * the single home for env→path knowledge (legacy OPENCODE_* aliases included).
423
- * `otel.collectorHosts` (union) and `approval` (wholesale replace) are handled
424
- * separately in loadConfig because their merge semantics differ from the
425
- * resolver's key-by-key precedence.
426
- */
427
- function buildEnvConfigLayer(env) {
428
- const layer = {};
429
- // models: scalar default first, then the JSON map applied on top — so an
430
- // explicit `default` key in LASTLIGHT_MODELS wins over LASTLIGHT_MODEL, with
431
- // no post-merge re-parse.
432
- const models = {};
433
- const modelDefault = env.LASTLIGHT_MODEL || env.OPENCODE_MODEL;
434
- if (modelDefault)
435
- models.default = modelDefault;
436
- applyJsonStringMap(models, env.LASTLIGHT_MODELS || env.OPENCODE_MODELS, "LASTLIGHT_MODELS");
437
- if (Object.keys(models).length)
438
- layer.models = models;
439
- // variants: catch-all default, then per-task JSON map (non-empty values only).
440
- const variants = {};
441
- const variantDefault = (env.LASTLIGHT_THINKING || env.OPENCODE_VARIANT || "").trim();
442
- if (variantDefault)
443
- variants.default = variantDefault;
444
- applyJsonStringMap(variants, env.LASTLIGHT_THINKINGS || env.OPENCODE_VARIANTS, "LASTLIGHT_THINKINGS", true);
445
- if (Object.keys(variants).length)
446
- layer.variants = variants;
447
- const sandbox = {};
448
- const backend = (env.LASTLIGHT_SANDBOX || "").trim().toLowerCase();
449
- if (backend === "gondolin" || backend === "docker" || backend === "smol" || backend === "none") {
450
- sandbox.backend = backend;
451
- }
452
- else if (backend) {
453
- console.warn(`[config] Unknown LASTLIGHT_SANDBOX value "${backend}" — using the file/default backend`);
454
- }
455
- if (env.MAX_TURNS)
456
- sandbox.maxTurns = parseInt(env.MAX_TURNS, 10);
457
- if (Object.keys(sandbox).length)
458
- layer.sandbox = sandbox;
459
- const buildAssetsLoc = (env.LASTLIGHT_BUILD_ASSETS || "").trim().toLowerCase();
460
- if (buildAssetsLoc === "repo" || buildAssetsLoc === "server") {
461
- layer.buildAssets = { location: buildAssetsLoc };
462
- }
463
- else if (buildAssetsLoc) {
464
- console.warn(`[config] Unknown LASTLIGHT_BUILD_ASSETS value "${buildAssetsLoc}" — using the file/default location`);
465
- }
466
- // Core-version pin override (CI can set this instead of editing config.yaml).
467
- const coreVersion = (env.LASTLIGHT_CORE_VERSION || "").trim();
468
- if (coreVersion)
469
- layer.deploy = { version: coreVersion };
470
- const otel = {};
471
- setBoolEnv(otel, "enabled", env.LASTLIGHT_OTEL_ENABLED);
472
- const serviceName = env.LASTLIGHT_OTEL_SERVICE_NAME?.trim() || env.OTEL_SERVICE_NAME?.trim();
473
- if (serviceName)
474
- otel.serviceName = serviceName;
475
- setBoolEnv(otel, "includeContent", env.LASTLIGHT_OTEL_INCLUDE_CONTENT);
476
- setBoolEnv(otel, "forwardToSandbox", env.LASTLIGHT_OTEL_FORWARD_TO_SANDBOX);
477
- setBoolEnv(otel, "strict", env.LASTLIGHT_OTEL_STRICT);
478
- if (Object.keys(otel).length)
479
- layer.otel = otel;
480
- if (env.GITHUB_APP_BOT_NAME)
481
- layer.botName = env.GITHUB_APP_BOT_NAME;
482
- if (env.BOOTSTRAP_LABEL)
483
- layer.bootstrap = { label: env.BOOTSTRAP_LABEL };
484
- if (env.EXPLORE_DEFAULT_REPO)
485
- layer.explore = { defaultRepo: env.EXPLORE_DEFAULT_REPO };
486
- if (env.REVIEW_POSTS_CHECK !== undefined && env.REVIEW_POSTS_CHECK !== "") {
487
- layer.review = { postsCheck: parseBool(env.REVIEW_POSTS_CHECK) };
488
- }
489
- return layer;
490
- }
491
- /** Set a boolean key only when the env var is present and non-empty. */
492
- function setBoolEnv(target, key, raw) {
493
- if (raw !== undefined && raw !== "")
494
- target[key] = parseBool(raw);
495
- }
496
- /** Merge a JSON object env var's string entries into a target map. */
497
- function applyJsonStringMap(target, raw, label, requireNonEmpty = false) {
498
- if (!raw)
499
- return;
500
- try {
501
- const parsed = JSON.parse(raw);
502
- if (parsed && typeof parsed === "object") {
503
- for (const [key, value] of Object.entries(parsed)) {
504
- if (typeof value === "string" && (!requireNonEmpty || value.length > 0))
505
- target[key] = value;
506
- }
507
- }
508
- }
509
- catch (err) {
510
- console.warn(`[config] Invalid ${label} JSON: ${err.message}`);
511
- }
512
- }
513
- function normalizeOtelFileConfig(raw) {
514
- return {
515
- enabled: raw.enabled === true,
516
- serviceName: typeof raw.serviceName === "string" && raw.serviceName.trim() ? raw.serviceName.trim() : "lastlight",
517
- includeContent: raw.includeContent === true,
518
- forwardToSandbox: raw.forwardToSandbox === false ? false : true,
519
- strict: raw.strict === true,
520
- collectorHosts: parseCollectorHosts(raw.collectorHosts, "otel.collectorHosts"),
521
- };
522
- }
523
- function parseCollectorHosts(raw, path) {
524
- if (raw === undefined || raw === null || raw === "")
525
- return [];
526
- const values = Array.isArray(raw) ? raw : String(raw).split(",");
527
- const out = [];
528
- for (const value of values) {
529
- if (typeof value !== "string")
530
- throw new Error(`${path} must contain only strings`);
531
- const host = normalizeAllowlistHost(value);
532
- if (host)
533
- out.push(host);
534
- }
535
- return Array.from(new Set(out));
536
- }
537
- export function parseOtelCollectorHostsFromEnv(env = process.env) {
538
- return parseCollectorHosts([
539
- env.OTEL_EXPORTER_OTLP_ENDPOINT,
540
- env.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,
541
- env.OTEL_EXPORTER_OTLP_METRICS_ENDPOINT,
542
- env.OTEL_EXPORTER_OTLP_LOGS_ENDPOINT,
543
- ].filter(Boolean), "OTEL_EXPORTER_OTLP_*_ENDPOINT");
544
- }
545
- function resolvePublicUrl() {
546
- const explicit = process.env.PUBLIC_URL?.trim();
547
- if (explicit)
548
- return explicit.replace(/\/+$/, "");
549
- const domain = process.env.DOMAIN?.trim();
550
- if (domain)
551
- return `https://${domain.replace(/\/+$/, "")}`;
552
- return undefined;
553
- }
554
- function parseApprovalGates() {
555
- const raw = process.env.APPROVAL_GATES || "";
556
- const map = {};
557
- for (const name of raw.split(",").map((s) => s.trim()).filter(Boolean)) {
558
- map[name] = true;
559
- }
560
- return map;
561
- }
562
- function requireEnv(name) {
563
- const value = process.env[name];
564
- if (!value)
565
- throw new Error(`Required environment variable not set: ${name}`);
566
- return value;
567
- }
568
- export function resolveModel(models, taskType) {
569
- return models[taskType] || models.default;
570
- }
571
- export function resolveVariant(variants, taskType) {
572
- return variants[taskType] || variants.default;
573
- }
574
- export function resolveGithubAuth(config) {
575
- if (config.githubApp)
576
- return { kind: "app", ...config.githubApp };
577
- if (config.githubToken)
578
- return { kind: "token", token: config.githubToken };
579
- return undefined;
580
- }
581
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Pick the *commit* SHA for tag `pin` from `git ls-remote … 'refs/tags/<pin>*'`
3
- * output. Annotated tags emit two rows — the tag object (`refs/tags/<pin>`) and
4
- * the peeled commit (`refs/tags/<pin>^{}`); only the glob pattern surfaces the
5
- * peeled row (an exact `refs/tags/<pin>` hides it). We want the commit, since
6
- * that's what `git checkout <pin>` lands HEAD on and what an image built at the
7
- * tag is stamped with. Preference: peeled commit → exact tag ref (lightweight
8
- * tag / branch) → first row. Null when nothing looks like a SHA.
9
- */
10
- export declare function pickTagCommit(lsRemoteOut: string | null, pin: string): string | null;
11
- /**
12
- * The core-version pin for the overlay at `overlayDir`, or `null` to track main.
13
- * `LASTLIGHT_CORE_VERSION` wins over the file. Missing / unreadable / malformed
14
- * config.yaml is treated as unpinned (never throws).
15
- */
16
- export declare function readCorePin(overlayDir: string): string | null;