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.
- package/README.md +71 -692
- package/dist/cli-config.js.map +1 -0
- package/dist/cli-format.js.map +1 -0
- package/dist/{cli/cli-server.d.ts → cli-server.d.ts} +26 -1
- package/dist/{cli/cli-server.js → cli-server.js} +40 -5
- package/dist/cli-server.js.map +1 -0
- package/dist/cli-timeline.js.map +1 -0
- package/dist/{cli/cli.js → cli.js} +4 -3
- package/dist/cli.js.map +1 -0
- package/dist/{cli/fork-cli.d.ts → fork-cli.d.ts} +3 -3
- package/dist/{cli/fork-cli.js → fork-cli.js} +28 -27
- package/dist/fork-cli.js.map +1 -0
- package/dist/{cli/oauth-cli.js → oauth-cli.js} +1 -1
- package/dist/oauth-cli.js.map +1 -0
- package/dist/{cli/setup.js → setup.js} +10 -4
- package/dist/setup.js.map +1 -0
- package/dist/{cli/skills-install.d.ts → skills-install.d.ts} +6 -0
- package/dist/{cli/skills-install.js → skills-install.js} +6 -2
- package/dist/skills-install.js.map +1 -0
- package/package.json +20 -65
- package/plugins/lastlight/.claude-plugin/plugin.json +1 -1
- package/agent-context/rules.md +0 -80
- package/agent-context/security.md +0 -69
- package/agent-context/soul.md +0 -21
- package/config/default.yaml +0 -119
- package/deploy/.env.production.example +0 -100
- package/deploy/entrypoint.sh +0 -82
- package/deploy/native/README.md +0 -160
- package/deploy/native/install.sh +0 -110
- package/deploy/native/lastlight.env.example +0 -95
- package/deploy/native/lastlight.service +0 -50
- package/deploy/sandbox-entrypoint.sh +0 -93
- package/dist/admin/auth.d.ts +0 -51
- package/dist/admin/auth.js +0 -121
- package/dist/admin/auth.js.map +0 -1
- package/dist/admin/chat-session-reader.d.ts +0 -39
- package/dist/admin/chat-session-reader.js +0 -84
- package/dist/admin/chat-session-reader.js.map +0 -1
- package/dist/admin/docker.d.ts +0 -61
- package/dist/admin/docker.js +0 -187
- package/dist/admin/docker.js.map +0 -1
- package/dist/admin/index.d.ts +0 -9
- package/dist/admin/index.js +0 -59
- package/dist/admin/index.js.map +0 -1
- package/dist/admin/routes.d.ts +0 -81
- package/dist/admin/routes.js +0 -1381
- package/dist/admin/routes.js.map +0 -1
- package/dist/admin/sessions.d.ts +0 -89
- package/dist/admin/sessions.js +0 -204
- package/dist/admin/sessions.js.map +0 -1
- package/dist/admin/tail.d.ts +0 -12
- package/dist/admin/tail.js +0 -145
- package/dist/admin/tail.js.map +0 -1
- package/dist/admin/version.d.ts +0 -22
- package/dist/admin/version.js +0 -92
- package/dist/admin/version.js.map +0 -1
- package/dist/cli/cli-config.js.map +0 -1
- package/dist/cli/cli-format.js.map +0 -1
- package/dist/cli/cli-server.js.map +0 -1
- package/dist/cli/cli-timeline.js.map +0 -1
- package/dist/cli/cli.js.map +0 -1
- package/dist/cli/fork-cli.js.map +0 -1
- package/dist/cli/oauth-cli.js.map +0 -1
- package/dist/cli/setup.js.map +0 -1
- package/dist/cli/skills-install.js.map +0 -1
- package/dist/config/config-resolve.d.ts +0 -28
- package/dist/config/config-resolve.js +0 -47
- package/dist/config/config-resolve.js.map +0 -1
- package/dist/config/config.d.ts +0 -157
- package/dist/config/config.js +0 -581
- package/dist/config/config.js.map +0 -1
- package/dist/config/core-pin.d.ts +0 -16
- package/dist/config/core-pin.js +0 -85
- package/dist/config/core-pin.js.map +0 -1
- package/dist/config/overlay-assets.d.ts +0 -20
- package/dist/config/overlay-assets.js +0 -114
- package/dist/config/overlay-assets.js.map +0 -1
- package/dist/config/overlay-bootstrap.d.ts +0 -44
- package/dist/config/overlay-bootstrap.js +0 -304
- package/dist/config/overlay-bootstrap.js.map +0 -1
- package/dist/connectors/github-webhook.d.ts +0 -45
- package/dist/connectors/github-webhook.js +0 -321
- package/dist/connectors/github-webhook.js.map +0 -1
- package/dist/connectors/index.d.ts +0 -18
- package/dist/connectors/index.js +0 -41
- package/dist/connectors/index.js.map +0 -1
- package/dist/connectors/messaging/base.d.ts +0 -42
- package/dist/connectors/messaging/base.js +0 -139
- package/dist/connectors/messaging/base.js.map +0 -1
- package/dist/connectors/messaging/delivery.d.ts +0 -14
- package/dist/connectors/messaging/delivery.js +0 -38
- package/dist/connectors/messaging/delivery.js.map +0 -1
- package/dist/connectors/messaging/index.d.ts +0 -4
- package/dist/connectors/messaging/index.js +0 -4
- package/dist/connectors/messaging/index.js.map +0 -1
- package/dist/connectors/messaging/session-manager.d.ts +0 -53
- package/dist/connectors/messaging/session-manager.js +0 -255
- package/dist/connectors/messaging/session-manager.js.map +0 -1
- package/dist/connectors/messaging/types.d.ts +0 -58
- package/dist/connectors/messaging/types.js +0 -7
- package/dist/connectors/messaging/types.js.map +0 -1
- package/dist/connectors/slack/connector.d.ts +0 -100
- package/dist/connectors/slack/connector.js +0 -341
- package/dist/connectors/slack/connector.js.map +0 -1
- package/dist/connectors/slack/index.d.ts +0 -2
- package/dist/connectors/slack/index.js +0 -3
- package/dist/connectors/slack/index.js.map +0 -1
- package/dist/connectors/slack/mrkdwn.d.ts +0 -8
- package/dist/connectors/slack/mrkdwn.js +0 -123
- package/dist/connectors/slack/mrkdwn.js.map +0 -1
- package/dist/connectors/types.d.ts +0 -61
- package/dist/connectors/types.js +0 -2
- package/dist/connectors/types.js.map +0 -1
- package/dist/cron/fanout.d.ts +0 -33
- package/dist/cron/fanout.js +0 -55
- package/dist/cron/fanout.js.map +0 -1
- package/dist/cron/jobs.d.ts +0 -18
- package/dist/cron/jobs.js +0 -37
- package/dist/cron/jobs.js.map +0 -1
- package/dist/cron/scheduler.d.ts +0 -45
- package/dist/cron/scheduler.js +0 -105
- package/dist/cron/scheduler.js.map +0 -1
- package/dist/engine/agent-executor.d.ts +0 -34
- package/dist/engine/agent-executor.js +0 -246
- package/dist/engine/agent-executor.js.map +0 -1
- package/dist/engine/chat/chat-runner.d.ts +0 -132
- package/dist/engine/chat/chat-runner.js +0 -424
- package/dist/engine/chat/chat-runner.js.map +0 -1
- package/dist/engine/chat/chat-skills.d.ts +0 -45
- package/dist/engine/chat/chat-skills.js +0 -184
- package/dist/engine/chat/chat-skills.js.map +0 -1
- package/dist/engine/chat/chat.d.ts +0 -54
- package/dist/engine/chat/chat.js +0 -316
- package/dist/engine/chat/chat.js.map +0 -1
- package/dist/engine/chat/message-batcher.d.ts +0 -32
- package/dist/engine/chat/message-batcher.js +0 -109
- package/dist/engine/chat/message-batcher.js.map +0 -1
- package/dist/engine/dispatcher.d.ts +0 -73
- package/dist/engine/dispatcher.js +0 -663
- package/dist/engine/dispatcher.js.map +0 -1
- package/dist/engine/event-shim.d.ts +0 -117
- package/dist/engine/event-shim.js +0 -435
- package/dist/engine/event-shim.js.map +0 -1
- package/dist/engine/executors/orchestrator.d.ts +0 -81
- package/dist/engine/executors/orchestrator.js +0 -365
- package/dist/engine/executors/orchestrator.js.map +0 -1
- package/dist/engine/executors/shared.d.ts +0 -189
- package/dist/engine/executors/shared.js +0 -616
- package/dist/engine/executors/shared.js.map +0 -1
- package/dist/engine/github/git-auth.d.ts +0 -62
- package/dist/engine/github/git-auth.js +0 -161
- package/dist/engine/github/git-auth.js.map +0 -1
- package/dist/engine/github/github-app-client.d.ts +0 -23
- package/dist/engine/github/github-app-client.js +0 -33
- package/dist/engine/github/github-app-client.js.map +0 -1
- package/dist/engine/github/github-tools.d.ts +0 -18
- package/dist/engine/github/github-tools.js +0 -263
- package/dist/engine/github/github-tools.js.map +0 -1
- package/dist/engine/github/github.d.ts +0 -1193
- package/dist/engine/github/github.js +0 -357
- package/dist/engine/github/github.js.map +0 -1
- package/dist/engine/github/profiles.d.ts +0 -279
- package/dist/engine/github/profiles.js +0 -42
- package/dist/engine/github/profiles.js.map +0 -1
- package/dist/engine/github/review-poster.d.ts +0 -98
- package/dist/engine/github/review-poster.js +0 -177
- package/dist/engine/github/review-poster.js.map +0 -1
- package/dist/engine/llm.d.ts +0 -79
- package/dist/engine/llm.js +0 -269
- package/dist/engine/llm.js.map +0 -1
- package/dist/engine/oauth.d.ts +0 -43
- package/dist/engine/oauth.js +0 -103
- package/dist/engine/oauth.js.map +0 -1
- package/dist/engine/router.d.ts +0 -29
- package/dist/engine/router.js +0 -680
- package/dist/engine/router.js.map +0 -1
- package/dist/engine/screen/classifier.d.ts +0 -93
- package/dist/engine/screen/classifier.js +0 -215
- package/dist/engine/screen/classifier.js.map +0 -1
- package/dist/engine/screen/screen.d.ts +0 -41
- package/dist/engine/screen/screen.js +0 -93
- package/dist/engine/screen/screen.js.map +0 -1
- package/dist/evals-api.d.ts +0 -24
- package/dist/evals-api.js +0 -22
- package/dist/evals-api.js.map +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -923
- package/dist/index.js.map +0 -1
- package/dist/managed-repos.d.ts +0 -30
- package/dist/managed-repos.js +0 -72
- package/dist/managed-repos.js.map +0 -1
- package/dist/notify/index.d.ts +0 -15
- package/dist/notify/index.js +0 -6
- package/dist/notify/index.js.map +0 -1
- package/dist/notify/model.d.ts +0 -57
- package/dist/notify/model.js +0 -89
- package/dist/notify/model.js.map +0 -1
- package/dist/notify/notifier.d.ts +0 -17
- package/dist/notify/notifier.js +0 -87
- package/dist/notify/notifier.js.map +0 -1
- package/dist/notify/render.d.ts +0 -21
- package/dist/notify/render.js +0 -59
- package/dist/notify/render.js.map +0 -1
- package/dist/notify/transports/github.d.ts +0 -26
- package/dist/notify/transports/github.js +0 -26
- package/dist/notify/transports/github.js.map +0 -1
- package/dist/notify/transports/slack.d.ts +0 -26
- package/dist/notify/transports/slack.js +0 -28
- package/dist/notify/transports/slack.js.map +0 -1
- package/dist/notify/types.d.ts +0 -95
- package/dist/notify/types.js +0 -16
- package/dist/notify/types.js.map +0 -1
- package/dist/providers.d.ts +0 -125
- package/dist/providers.js +0 -279
- package/dist/providers.js.map +0 -1
- package/dist/sandbox/docker.d.ts +0 -180
- package/dist/sandbox/docker.js +0 -517
- package/dist/sandbox/docker.js.map +0 -1
- package/dist/sandbox/egress-allowlist.d.ts +0 -74
- package/dist/sandbox/egress-allowlist.js +0 -164
- package/dist/sandbox/egress-allowlist.js.map +0 -1
- package/dist/sandbox/egress-firewall-config.d.ts +0 -127
- package/dist/sandbox/egress-firewall-config.js +0 -434
- package/dist/sandbox/egress-firewall-config.js.map +0 -1
- package/dist/sandbox/images.d.ts +0 -23
- package/dist/sandbox/images.js +0 -55
- package/dist/sandbox/images.js.map +0 -1
- package/dist/sandbox/index.d.ts +0 -112
- package/dist/sandbox/index.js +0 -332
- package/dist/sandbox/index.js.map +0 -1
- package/dist/sandbox/sandbox.d.ts +0 -214
- package/dist/sandbox/sandbox.js +0 -453
- package/dist/sandbox/sandbox.js.map +0 -1
- package/dist/sandbox/smol.d.ts +0 -162
- package/dist/sandbox/smol.js +0 -485
- package/dist/sandbox/smol.js.map +0 -1
- package/dist/session-log.d.ts +0 -63
- package/dist/session-log.js +0 -290
- package/dist/session-log.js.map +0 -1
- package/dist/state/approval-store.d.ts +0 -88
- package/dist/state/approval-store.js +0 -149
- package/dist/state/approval-store.js.map +0 -1
- package/dist/state/build-assets.d.ts +0 -50
- package/dist/state/build-assets.js +0 -154
- package/dist/state/build-assets.js.map +0 -1
- package/dist/state/db.d.ts +0 -81
- package/dist/state/db.js +0 -155
- package/dist/state/db.js.map +0 -1
- package/dist/state/execution-store.d.ts +0 -257
- package/dist/state/execution-store.js +0 -527
- package/dist/state/execution-store.js.map +0 -1
- package/dist/state/migrate.d.ts +0 -15
- package/dist/state/migrate.js +0 -175
- package/dist/state/migrate.js.map +0 -1
- package/dist/state/workflow-run-store.d.ts +0 -216
- package/dist/state/workflow-run-store.js +0 -403
- package/dist/state/workflow-run-store.js.map +0 -1
- package/dist/telemetry/index.d.ts +0 -38
- package/dist/telemetry/index.js +0 -253
- package/dist/telemetry/index.js.map +0 -1
- package/dist/telemetry/pi-events.d.ts +0 -12
- package/dist/telemetry/pi-events.js +0 -134
- package/dist/telemetry/pi-events.js.map +0 -1
- package/dist/workflows/dag.d.ts +0 -37
- package/dist/workflows/dag.js +0 -118
- package/dist/workflows/dag.js.map +0 -1
- package/dist/workflows/loader.d.ts +0 -53
- package/dist/workflows/loader.js +0 -421
- package/dist/workflows/loader.js.map +0 -1
- package/dist/workflows/loop-eval.d.ts +0 -28
- package/dist/workflows/loop-eval.js +0 -74
- package/dist/workflows/loop-eval.js.map +0 -1
- package/dist/workflows/phase-executor.d.ts +0 -215
- package/dist/workflows/phase-executor.js +0 -1144
- package/dist/workflows/phase-executor.js.map +0 -1
- package/dist/workflows/phase-ref.d.ts +0 -50
- package/dist/workflows/phase-ref.js +0 -91
- package/dist/workflows/phase-ref.js.map +0 -1
- package/dist/workflows/resume.d.ts +0 -58
- package/dist/workflows/resume.js +0 -313
- package/dist/workflows/resume.js.map +0 -1
- package/dist/workflows/runner.d.ts +0 -63
- package/dist/workflows/runner.js +0 -364
- package/dist/workflows/runner.js.map +0 -1
- package/dist/workflows/schema.d.ts +0 -344
- package/dist/workflows/schema.js +0 -460
- package/dist/workflows/schema.js.map +0 -1
- package/dist/workflows/simple.d.ts +0 -90
- package/dist/workflows/simple.js +0 -393
- package/dist/workflows/simple.js.map +0 -1
- package/dist/workflows/target-policy.d.ts +0 -74
- package/dist/workflows/target-policy.js +0 -80
- package/dist/workflows/target-policy.js.map +0 -1
- package/dist/workflows/templates.d.ts +0 -88
- package/dist/workflows/templates.js +0 -127
- package/dist/workflows/templates.js.map +0 -1
- package/dist/workflows/triggers.d.ts +0 -21
- package/dist/workflows/triggers.js +0 -45
- package/dist/workflows/triggers.js.map +0 -1
- package/dist/workflows/verdict.d.ts +0 -19
- package/dist/workflows/verdict.js +0 -30
- package/dist/workflows/verdict.js.map +0 -1
- package/dist/worktree/manager.d.ts +0 -43
- package/dist/worktree/manager.js +0 -127
- package/dist/worktree/manager.js.map +0 -1
- package/docker-compose.yml +0 -274
- package/sandbox.Dockerfile +0 -68
- package/skills/README.md +0 -42
- package/skills/browser-qa/SKILL.md +0 -208
- package/skills/browser-qa/scripts/agent-browser.mjs +0 -531
- package/skills/building/SKILL.md +0 -95
- package/skills/chat/SKILL.md +0 -36
- package/skills/code-review/SKILL.md +0 -82
- package/skills/debug-production/SKILL.md +0 -108
- package/skills/demo/SKILL.md +0 -228
- package/skills/demo/scripts/compose-demo.sh +0 -243
- package/skills/issue-answer/SKILL.md +0 -91
- package/skills/issue-comment/SKILL.md +0 -49
- package/skills/issue-triage/SKILL.md +0 -149
- package/skills/issue-triage/references/AGENT-BRIEF.md +0 -65
- package/skills/pr-comment/SKILL.md +0 -64
- package/skills/pr-review/SKILL.md +0 -148
- package/skills/pr-review/references/findings-schema.md +0 -89
- package/skills/qa-test/SKILL.md +0 -97
- package/skills/repo-health/SKILL.md +0 -67
- package/skills/security-feedback/SKILL.md +0 -173
- package/skills/security-feedback/references/templates.md +0 -77
- package/skills/security-review/SKILL.md +0 -215
- package/skills/security-review/references/issue-format.md +0 -302
- package/skills/verify/SKILL.md +0 -118
- package/workflows/answer.yaml +0 -44
- package/workflows/build.yaml +0 -129
- package/workflows/cron-health.yaml +0 -6
- package/workflows/cron-review.yaml +0 -8
- package/workflows/cron-security.yaml +0 -6
- package/workflows/cron-triage.yaml +0 -8
- package/workflows/demo.yaml +0 -62
- package/workflows/examples/bash-smoke.yaml +0 -41
- package/workflows/examples/parallel-review.yaml +0 -36
- package/workflows/examples/tdd-loop.yaml +0 -17
- package/workflows/explore.yaml +0 -80
- package/workflows/issue-comment.yaml +0 -15
- package/workflows/issue-triage.yaml +0 -22
- package/workflows/pr-comment.yaml +0 -16
- package/workflows/pr-fix.yaml +0 -17
- package/workflows/pr-review.yaml +0 -50
- package/workflows/prompts/answer.md +0 -68
- package/workflows/prompts/architect.md +0 -44
- package/workflows/prompts/classifier.md +0 -60
- package/workflows/prompts/classify-adds-info.md +0 -17
- package/workflows/prompts/demo.md +0 -125
- package/workflows/prompts/executor.md +0 -42
- package/workflows/prompts/explore-ask.md +0 -99
- package/workflows/prompts/explore-publish.md +0 -31
- package/workflows/prompts/explore-read.md +0 -120
- package/workflows/prompts/explore-synthesize.md +0 -88
- package/workflows/prompts/fix.md +0 -18
- package/workflows/prompts/guardrails.md +0 -96
- package/workflows/prompts/pr-fix.md +0 -26
- package/workflows/prompts/pr.md +0 -39
- package/workflows/prompts/qa-browser.md +0 -95
- package/workflows/prompts/qa-synth.md +0 -44
- package/workflows/prompts/qa-test.md +0 -60
- package/workflows/prompts/re-reviewer.md +0 -33
- package/workflows/prompts/reviewer.md +0 -60
- package/workflows/prompts/verify-browser.md +0 -93
- package/workflows/prompts/verify-synth.md +0 -44
- package/workflows/prompts/verify.md +0 -63
- package/workflows/qa-test.yaml +0 -94
- package/workflows/repo-health.yaml +0 -15
- package/workflows/security-feedback.yaml +0 -25
- package/workflows/security-review.yaml +0 -37
- package/workflows/verify.yaml +0 -93
- /package/dist/{cli/cli-config.d.ts → cli-config.d.ts} +0 -0
- /package/dist/{cli/cli-config.js → cli-config.js} +0 -0
- /package/dist/{cli/cli-format.d.ts → cli-format.d.ts} +0 -0
- /package/dist/{cli/cli-format.js → cli-format.js} +0 -0
- /package/dist/{cli/cli-timeline.d.ts → cli-timeline.d.ts} +0 -0
- /package/dist/{cli/cli-timeline.js → cli-timeline.js} +0 -0
- /package/dist/{cli/cli.d.ts → cli.d.ts} +0 -0
- /package/dist/{cli/oauth-cli.d.ts → oauth-cli.d.ts} +0 -0
- /package/dist/{cli/setup.d.ts → setup.d.ts} +0 -0
package/dist/config/config.js
DELETED
|
@@ -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;
|