lastlight 0.1.15 → 0.2.0
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 +265 -118
- package/agent-context/rules.md +62 -9
- package/agent-context/security.md +69 -0
- package/config/default.yaml +89 -0
- package/deploy/.env.production.example +20 -2
- package/deploy/entrypoint.sh +16 -17
- package/deploy/native/README.md +160 -0
- package/deploy/native/install.sh +110 -0
- package/deploy/native/lastlight.env.example +95 -0
- package/deploy/native/lastlight.service +50 -0
- package/deploy/sandbox-entrypoint.sh +59 -42
- package/dist/admin/auth.d.ts +1 -1
- package/dist/admin/auth.js +3 -1
- package/dist/admin/auth.js.map +1 -1
- package/dist/admin/chat-session-reader.d.ts +11 -14
- package/dist/admin/chat-session-reader.js +27 -51
- package/dist/admin/chat-session-reader.js.map +1 -1
- package/dist/admin/docker.d.ts +37 -0
- package/dist/admin/docker.js +86 -1
- package/dist/admin/docker.js.map +1 -1
- package/dist/admin/index.js +38 -3
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/log-search.test.d.ts +1 -0
- package/dist/admin/log-search.test.js +78 -0
- package/dist/admin/log-search.test.js.map +1 -0
- package/dist/admin/routes.d.ts +52 -3
- package/dist/admin/routes.js +780 -63
- package/dist/admin/routes.js.map +1 -1
- package/dist/admin/routes.test.js +680 -14
- package/dist/admin/routes.test.js.map +1 -1
- package/dist/admin/server-logs.test.d.ts +1 -0
- package/dist/admin/server-logs.test.js +58 -0
- package/dist/admin/server-logs.test.js.map +1 -0
- package/dist/admin/sessions.d.ts +26 -39
- package/dist/admin/sessions.js +86 -310
- package/dist/admin/sessions.js.map +1 -1
- package/dist/admin/sessions.test.d.ts +1 -0
- package/dist/admin/sessions.test.js +78 -0
- package/dist/admin/sessions.test.js.map +1 -0
- package/dist/admin/version.d.ts +15 -0
- package/dist/admin/version.js +73 -0
- package/dist/admin/version.js.map +1 -0
- package/dist/admin/version.test.d.ts +1 -0
- package/dist/admin/version.test.js +71 -0
- package/dist/admin/version.test.js.map +1 -0
- package/dist/cli-config.d.ts +55 -0
- package/dist/cli-config.js +119 -0
- package/dist/cli-config.js.map +1 -0
- package/dist/cli-config.test.d.ts +1 -0
- package/dist/cli-config.test.js +92 -0
- package/dist/cli-config.test.js.map +1 -0
- package/dist/cli-format.d.ts +19 -0
- package/dist/cli-format.js +107 -0
- package/dist/cli-format.js.map +1 -0
- package/dist/cli-server.d.ts +73 -0
- package/dist/cli-server.js +347 -0
- package/dist/cli-server.js.map +1 -0
- package/dist/cli-server.test.d.ts +1 -0
- package/dist/cli-server.test.js +38 -0
- package/dist/cli-server.test.js.map +1 -0
- package/dist/cli-timeline.d.ts +35 -0
- package/dist/cli-timeline.js +373 -0
- package/dist/cli-timeline.js.map +1 -0
- package/dist/cli-timeline.test.d.ts +1 -0
- package/dist/cli-timeline.test.js +104 -0
- package/dist/cli-timeline.test.js.map +1 -0
- package/dist/cli.d.ts +0 -19
- package/dist/cli.js +910 -194
- package/dist/cli.js.map +1 -1
- package/dist/config-overlay.test.d.ts +1 -0
- package/dist/config-overlay.test.js +112 -0
- package/dist/config-overlay.test.js.map +1 -0
- package/dist/config-resolve.d.ts +28 -0
- package/dist/config-resolve.js +47 -0
- package/dist/config-resolve.js.map +1 -0
- package/dist/config-resolve.test.d.ts +1 -0
- package/dist/config-resolve.test.js +68 -0
- package/dist/config-resolve.test.js.map +1 -0
- package/dist/config.d.ts +62 -49
- package/dist/config.js +452 -76
- package/dist/config.js.map +1 -1
- package/dist/config.test.js +201 -32
- package/dist/config.test.js.map +1 -1
- package/dist/connectors/github-webhook.js +83 -5
- package/dist/connectors/github-webhook.js.map +1 -1
- package/dist/connectors/github-webhook.test.d.ts +1 -0
- package/dist/connectors/github-webhook.test.js +156 -0
- package/dist/connectors/github-webhook.test.js.map +1 -0
- package/dist/connectors/messaging/session-manager.d.ts +18 -0
- package/dist/connectors/messaging/session-manager.js +83 -2
- package/dist/connectors/messaging/session-manager.js.map +1 -1
- package/dist/connectors/messaging/session-manager.test.d.ts +1 -0
- package/dist/connectors/messaging/session-manager.test.js +144 -0
- package/dist/connectors/messaging/session-manager.test.js.map +1 -0
- package/dist/connectors/slack/connector.d.ts +9 -0
- package/dist/connectors/slack/connector.js +15 -0
- package/dist/connectors/slack/connector.js.map +1 -1
- package/dist/connectors/slack/mrkdwn.js +81 -0
- package/dist/connectors/slack/mrkdwn.js.map +1 -1
- package/dist/connectors/slack/mrkdwn.test.js +49 -0
- package/dist/connectors/slack/mrkdwn.test.js.map +1 -1
- package/dist/connectors/types.d.ts +1 -1
- package/dist/cron/fanout.d.ts +33 -0
- package/dist/cron/fanout.js +55 -0
- package/dist/cron/fanout.js.map +1 -0
- package/dist/cron/fanout.test.d.ts +1 -0
- package/dist/cron/fanout.test.js +73 -0
- package/dist/cron/fanout.test.js.map +1 -0
- package/dist/cron/jobs.d.ts +5 -0
- package/dist/cron/jobs.js +10 -3
- package/dist/cron/jobs.js.map +1 -1
- package/dist/cron/scheduler.d.ts +12 -0
- package/dist/cron/scheduler.js +27 -1
- package/dist/cron/scheduler.js.map +1 -1
- package/dist/engine/agent-executor.d.ts +158 -0
- package/dist/engine/agent-executor.js +1140 -0
- package/dist/engine/agent-executor.js.map +1 -0
- package/dist/engine/agent-executor.test.d.ts +1 -0
- package/dist/engine/agent-executor.test.js +395 -0
- package/dist/engine/agent-executor.test.js.map +1 -0
- package/dist/engine/chat-runner.d.ts +123 -0
- package/dist/engine/chat-runner.js +379 -0
- package/dist/engine/chat-runner.js.map +1 -0
- package/dist/engine/chat-runner.test.d.ts +1 -0
- package/dist/engine/chat-runner.test.js +104 -0
- package/dist/engine/chat-runner.test.js.map +1 -0
- package/dist/engine/chat-skills.d.ts +45 -0
- package/dist/engine/chat-skills.js +184 -0
- package/dist/engine/chat-skills.js.map +1 -0
- package/dist/engine/chat-skills.test.d.ts +1 -0
- package/dist/engine/chat-skills.test.js +20 -0
- package/dist/engine/chat-skills.test.js.map +1 -0
- package/dist/engine/chat.d.ts +20 -23
- package/dist/engine/chat.js +251 -155
- package/dist/engine/chat.js.map +1 -1
- package/dist/engine/chat.test.d.ts +1 -0
- package/dist/engine/chat.test.js +42 -0
- package/dist/engine/chat.test.js.map +1 -0
- package/dist/engine/classifier.d.ts +35 -2
- package/dist/engine/classifier.js +170 -31
- package/dist/engine/classifier.js.map +1 -1
- package/dist/engine/classifier.test.d.ts +1 -0
- package/dist/engine/classifier.test.js +115 -0
- package/dist/engine/classifier.test.js.map +1 -0
- package/dist/engine/dispatcher.d.ts +60 -0
- package/dist/engine/dispatcher.js +601 -0
- package/dist/engine/dispatcher.js.map +1 -0
- package/dist/engine/dispatcher.test.d.ts +1 -0
- package/dist/engine/dispatcher.test.js +511 -0
- package/dist/engine/dispatcher.test.js.map +1 -0
- package/dist/engine/event-shim.d.ts +117 -0
- package/dist/engine/event-shim.js +435 -0
- package/dist/engine/event-shim.js.map +1 -0
- package/dist/engine/event-shim.test.d.ts +1 -0
- package/dist/engine/event-shim.test.js +194 -0
- package/dist/engine/event-shim.test.js.map +1 -0
- package/dist/engine/git-auth.d.ts +13 -17
- package/dist/engine/git-auth.js +99 -42
- package/dist/engine/git-auth.js.map +1 -1
- package/dist/engine/git-auth.test.d.ts +1 -0
- package/dist/engine/git-auth.test.js +117 -0
- package/dist/engine/git-auth.test.js.map +1 -0
- package/dist/engine/github-app-client.d.ts +7 -0
- package/dist/engine/github-app-client.js +16 -0
- package/dist/engine/github-app-client.js.map +1 -0
- package/dist/engine/github-app-client.test.d.ts +1 -0
- package/dist/engine/github-app-client.test.js +44 -0
- package/dist/engine/github-app-client.test.js.map +1 -0
- package/dist/engine/github-tools.d.ts +12 -0
- package/dist/engine/github-tools.js +261 -0
- package/dist/engine/github-tools.js.map +1 -0
- package/dist/engine/github.d.ts +1027 -43
- package/dist/engine/github.js +153 -14
- package/dist/engine/github.js.map +1 -1
- package/dist/engine/llm.d.ts +47 -0
- package/dist/engine/llm.js +221 -0
- package/dist/engine/llm.js.map +1 -0
- package/dist/engine/llm.test.d.ts +1 -0
- package/dist/engine/llm.test.js +189 -0
- package/dist/engine/llm.test.js.map +1 -0
- package/dist/engine/profiles.d.ts +249 -0
- package/dist/engine/profiles.js +42 -0
- package/dist/engine/profiles.js.map +1 -0
- package/dist/engine/router.d.ts +12 -6
- package/dist/engine/router.js +339 -81
- package/dist/engine/router.js.map +1 -1
- package/dist/engine/router.test.js +428 -78
- package/dist/engine/router.test.js.map +1 -1
- package/dist/engine/screen.d.ts +41 -0
- package/dist/engine/screen.js +93 -0
- package/dist/engine/screen.js.map +1 -0
- package/dist/engine/screen.test.d.ts +1 -0
- package/dist/engine/screen.test.js +82 -0
- package/dist/engine/screen.test.js.map +1 -0
- package/dist/index.js +377 -432
- package/dist/index.js.map +1 -1
- package/dist/managed-repos.d.ts +7 -9
- package/dist/managed-repos.js +12 -15
- package/dist/managed-repos.js.map +1 -1
- package/dist/managed-repos.test.js +24 -19
- package/dist/managed-repos.test.js.map +1 -1
- package/dist/notify/index.d.ts +15 -0
- package/dist/notify/index.js +6 -0
- package/dist/notify/index.js.map +1 -0
- package/dist/notify/model.d.ts +57 -0
- package/dist/notify/model.js +89 -0
- package/dist/notify/model.js.map +1 -0
- package/dist/notify/model.test.d.ts +1 -0
- package/dist/notify/model.test.js +109 -0
- package/dist/notify/model.test.js.map +1 -0
- package/dist/notify/notifier.d.ts +17 -0
- package/dist/notify/notifier.js +87 -0
- package/dist/notify/notifier.js.map +1 -0
- package/dist/notify/notifier.test.d.ts +1 -0
- package/dist/notify/notifier.test.js +100 -0
- package/dist/notify/notifier.test.js.map +1 -0
- package/dist/notify/render.d.ts +21 -0
- package/dist/notify/render.js +59 -0
- package/dist/notify/render.js.map +1 -0
- package/dist/notify/render.test.d.ts +1 -0
- package/dist/notify/render.test.js +65 -0
- package/dist/notify/render.test.js.map +1 -0
- package/dist/notify/transports/github.d.ts +26 -0
- package/dist/notify/transports/github.js +26 -0
- package/dist/notify/transports/github.js.map +1 -0
- package/dist/notify/transports/slack.d.ts +26 -0
- package/dist/notify/transports/slack.js +28 -0
- package/dist/notify/transports/slack.js.map +1 -0
- package/dist/notify/transports.test.d.ts +1 -0
- package/dist/notify/transports.test.js +71 -0
- package/dist/notify/transports.test.js.map +1 -0
- package/dist/notify/types.d.ts +95 -0
- package/dist/notify/types.js +16 -0
- package/dist/notify/types.js.map +1 -0
- package/dist/sandbox/docker-compose.test.d.ts +1 -0
- package/dist/sandbox/docker-compose.test.js +128 -0
- package/dist/sandbox/docker-compose.test.js.map +1 -0
- package/dist/sandbox/docker.d.ts +97 -9
- package/dist/sandbox/docker.js +192 -41
- package/dist/sandbox/docker.js.map +1 -1
- package/dist/sandbox/docker.test.d.ts +1 -0
- package/dist/sandbox/docker.test.js +137 -0
- package/dist/sandbox/docker.test.js.map +1 -0
- package/dist/sandbox/egress-allowlist.d.ts +69 -0
- package/dist/sandbox/egress-allowlist.js +164 -0
- package/dist/sandbox/egress-allowlist.js.map +1 -0
- package/dist/sandbox/egress-allowlist.test.d.ts +1 -0
- package/dist/sandbox/egress-allowlist.test.js +65 -0
- package/dist/sandbox/egress-allowlist.test.js.map +1 -0
- package/dist/sandbox/egress-firewall-config.d.ts +127 -0
- package/dist/sandbox/egress-firewall-config.js +434 -0
- package/dist/sandbox/egress-firewall-config.js.map +1 -0
- package/dist/sandbox/egress-firewall-config.test.d.ts +1 -0
- package/dist/sandbox/egress-firewall-config.test.js +244 -0
- package/dist/sandbox/egress-firewall-config.test.js.map +1 -0
- package/dist/sandbox/images.d.ts +23 -0
- package/dist/sandbox/images.js +55 -0
- package/dist/sandbox/images.js.map +1 -0
- package/dist/sandbox/index.d.ts +82 -3
- package/dist/sandbox/index.js +223 -93
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/index.test.d.ts +1 -0
- package/dist/sandbox/index.test.js +157 -0
- package/dist/sandbox/index.test.js.map +1 -0
- package/dist/session-log.d.ts +63 -0
- package/dist/session-log.js +290 -0
- package/dist/session-log.js.map +1 -0
- package/dist/session-log.test.d.ts +1 -0
- package/dist/session-log.test.js +85 -0
- package/dist/session-log.test.js.map +1 -0
- package/dist/setup.d.ts +30 -1
- package/dist/setup.js +241 -25
- package/dist/setup.js.map +1 -1
- package/dist/setup.test.js +138 -6
- package/dist/setup.test.js.map +1 -1
- package/dist/state/approval-store.d.ts +86 -0
- package/dist/state/approval-store.js +140 -0
- package/dist/state/approval-store.js.map +1 -0
- package/dist/state/build-assets.d.ts +50 -0
- package/dist/state/build-assets.js +154 -0
- package/dist/state/build-assets.js.map +1 -0
- package/dist/state/build-assets.test.d.ts +1 -0
- package/dist/state/build-assets.test.js +106 -0
- package/dist/state/build-assets.test.js.map +1 -0
- package/dist/state/db.d.ts +65 -333
- package/dist/state/db.js +112 -835
- package/dist/state/db.js.map +1 -1
- package/dist/state/db.test.js +127 -91
- package/dist/state/db.test.js.map +1 -1
- package/dist/state/execution-store.d.ts +257 -0
- package/dist/state/execution-store.js +527 -0
- package/dist/state/execution-store.js.map +1 -0
- package/dist/state/migrate.d.ts +15 -0
- package/dist/state/migrate.js +175 -0
- package/dist/state/migrate.js.map +1 -0
- package/dist/state/workflow-run-store.d.ts +195 -0
- package/dist/state/workflow-run-store.js +363 -0
- package/dist/state/workflow-run-store.js.map +1 -0
- package/dist/state/workflow-run-store.test.d.ts +1 -0
- package/dist/state/workflow-run-store.test.js +264 -0
- package/dist/state/workflow-run-store.test.js.map +1 -0
- package/dist/telemetry/index.d.ts +38 -0
- package/dist/telemetry/index.js +253 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/index.test.d.ts +1 -0
- package/dist/telemetry/index.test.js +73 -0
- package/dist/telemetry/index.test.js.map +1 -0
- package/dist/telemetry/pi-events.d.ts +12 -0
- package/dist/telemetry/pi-events.js +134 -0
- package/dist/telemetry/pi-events.js.map +1 -0
- package/dist/telemetry/pi-events.test.d.ts +1 -0
- package/dist/telemetry/pi-events.test.js +69 -0
- package/dist/telemetry/pi-events.test.js.map +1 -0
- package/dist/workflows/dag.d.ts +13 -1
- package/dist/workflows/dag.js +7 -3
- package/dist/workflows/dag.js.map +1 -1
- package/dist/workflows/dag.test.js +22 -0
- package/dist/workflows/dag.test.js.map +1 -1
- package/dist/workflows/golden-build.test.d.ts +1 -0
- package/dist/workflows/golden-build.test.js +45 -0
- package/dist/workflows/golden-build.test.js.map +1 -0
- package/dist/workflows/loader-overlay.test.d.ts +1 -0
- package/dist/workflows/loader-overlay.test.js +101 -0
- package/dist/workflows/loader-overlay.test.js.map +1 -0
- package/dist/workflows/loader.d.ts +36 -11
- package/dist/workflows/loader.js +311 -87
- package/dist/workflows/loader.js.map +1 -1
- package/dist/workflows/loader.test.js +114 -10
- package/dist/workflows/loader.test.js.map +1 -1
- package/dist/workflows/loop-eval.js +2 -0
- package/dist/workflows/loop-eval.js.map +1 -1
- package/dist/workflows/loop-eval.test.js +14 -0
- package/dist/workflows/loop-eval.test.js.map +1 -1
- package/dist/workflows/phase-executor.d.ts +145 -0
- package/dist/workflows/phase-executor.js +691 -0
- package/dist/workflows/phase-executor.js.map +1 -0
- package/dist/workflows/phase-executor.test.d.ts +1 -0
- package/dist/workflows/phase-executor.test.js +434 -0
- package/dist/workflows/phase-executor.test.js.map +1 -0
- package/dist/workflows/phase-ref.d.ts +44 -0
- package/dist/workflows/phase-ref.js +78 -0
- package/dist/workflows/phase-ref.js.map +1 -0
- package/dist/workflows/phase-ref.test.d.ts +1 -0
- package/dist/workflows/phase-ref.test.js +24 -0
- package/dist/workflows/phase-ref.test.js.map +1 -0
- package/dist/workflows/resume.d.ts +5 -11
- package/dist/workflows/resume.js +88 -7
- package/dist/workflows/resume.js.map +1 -1
- package/dist/workflows/runner.d.ts +34 -27
- package/dist/workflows/runner.js +252 -930
- package/dist/workflows/runner.js.map +1 -1
- package/dist/workflows/runner.test.js +346 -35
- package/dist/workflows/runner.test.js.map +1 -1
- package/dist/workflows/schema.d.ts +52 -10
- package/dist/workflows/schema.js +147 -7
- package/dist/workflows/schema.js.map +1 -1
- package/dist/workflows/simple.d.ts +67 -3
- package/dist/workflows/simple.js +248 -87
- package/dist/workflows/simple.js.map +1 -1
- package/dist/workflows/simple.test.d.ts +1 -0
- package/dist/workflows/simple.test.js +107 -0
- package/dist/workflows/simple.test.js.map +1 -0
- package/dist/workflows/templates.d.ts +29 -0
- package/dist/workflows/templates.js +42 -4
- package/dist/workflows/templates.js.map +1 -1
- package/dist/workflows/templates.test.js +103 -0
- package/dist/workflows/templates.test.js.map +1 -1
- package/dist/workflows/triggers.d.ts +21 -0
- package/dist/workflows/triggers.js +44 -0
- package/dist/workflows/triggers.js.map +1 -0
- package/dist/workflows/verdict.d.ts +19 -0
- package/dist/workflows/verdict.js +30 -0
- package/dist/workflows/verdict.js.map +1 -0
- package/dist/workflows/verdict.test.d.ts +1 -0
- package/dist/workflows/verdict.test.js +44 -0
- package/dist/workflows/verdict.test.js.map +1 -0
- package/dist/worktree/manager.d.ts +1 -1
- package/dist/worktree/manager.js +14 -14
- package/dist/worktree/manager.js.map +1 -1
- package/dist/worktree/manager.test.d.ts +1 -0
- package/dist/worktree/manager.test.js +87 -0
- package/dist/worktree/manager.test.js.map +1 -0
- package/docker-compose.yml +206 -5
- package/package.json +17 -7
- package/sandbox.Dockerfile +97 -18
- package/skills/README.md +40 -0
- package/skills/browser-qa/SKILL.md +193 -0
- package/skills/browser-qa/scripts/agent-browser.mjs +380 -0
- package/skills/building/SKILL.md +95 -0
- package/skills/chat/SKILL.md +30 -11
- package/skills/code-review/SKILL.md +59 -0
- package/skills/debug-production/SKILL.md +108 -0
- package/skills/demo/SKILL.md +194 -0
- package/skills/demo/scripts/compose-demo.sh +205 -0
- package/skills/issue-answer/SKILL.md +90 -0
- package/skills/issue-comment/SKILL.md +38 -24
- package/skills/issue-triage/SKILL.md +103 -37
- package/skills/issue-triage/references/AGENT-BRIEF.md +61 -0
- package/skills/pr-comment/SKILL.md +64 -0
- package/skills/pr-review/SKILL.md +65 -49
- package/skills/qa-test/SKILL.md +97 -0
- package/skills/repo-health/SKILL.md +48 -45
- package/skills/security-feedback/SKILL.md +173 -0
- package/skills/security-feedback/references/templates.md +77 -0
- package/skills/security-review/SKILL.md +213 -0
- package/skills/security-review/references/issue-format.md +302 -0
- package/skills/verify/SKILL.md +118 -0
- package/workflows/answer.yaml +37 -0
- package/workflows/build.yaml +32 -22
- package/workflows/cron-security.yaml +6 -0
- package/workflows/demo.yaml +55 -0
- package/workflows/explore.yaml +9 -0
- package/workflows/pr-comment.yaml +16 -0
- package/workflows/pr-fix.yaml +3 -0
- package/workflows/pr-review.yaml +4 -1
- package/workflows/prompts/answer.md +67 -0
- package/workflows/prompts/architect.md +24 -7
- package/workflows/prompts/demo.md +100 -0
- package/workflows/prompts/executor.md +29 -20
- package/workflows/prompts/explore-ask.md +51 -22
- package/workflows/prompts/explore-publish.md +2 -2
- package/workflows/prompts/explore-read.md +24 -10
- package/workflows/prompts/explore-synthesize.md +15 -8
- package/workflows/prompts/fix.md +9 -10
- package/workflows/prompts/guardrails.md +26 -8
- package/workflows/prompts/pr-fix.md +6 -7
- package/workflows/prompts/pr.md +11 -10
- package/workflows/prompts/qa-browser.md +95 -0
- package/workflows/prompts/qa-synth.md +44 -0
- package/workflows/prompts/qa-test.md +60 -0
- package/workflows/prompts/re-reviewer.md +8 -9
- package/workflows/prompts/reviewer.md +10 -9
- package/workflows/prompts/verify-browser.md +93 -0
- package/workflows/prompts/verify-synth.md +44 -0
- package/workflows/prompts/verify.md +63 -0
- package/workflows/qa-test.yaml +87 -0
- package/workflows/security-feedback.yaml +25 -0
- package/workflows/security-review.yaml +29 -0
- package/workflows/verify.yaml +85 -0
- package/deploy/mcp-config.tmpl.json +0 -14
- package/dist/cron/rate-limits.d.ts +0 -26
- package/dist/cron/rate-limits.js +0 -193
- package/dist/cron/rate-limits.js.map +0 -1
- package/dist/engine/executor.d.ts +0 -75
- package/dist/engine/executor.js +0 -292
- package/dist/engine/executor.js.map +0 -1
- package/mcp-github-app/package.json +0 -18
- package/mcp-github-app/src/auth.js +0 -66
- package/mcp-github-app/src/github.js +0 -371
- package/mcp-github-app/src/index.js +0 -534
- package/skills/devops/webhook-subscriptions/SKILL.md +0 -180
- package/skills/github/DESCRIPTION.md +0 -3
- package/skills/github/codebase-inspection/SKILL.md +0 -115
- package/skills/github/github-auth/SKILL.md +0 -54
- package/skills/github/github-auth/scripts/gh-env.sh +0 -66
- package/skills/github/github-code-review/SKILL.md +0 -480
- package/skills/github/github-code-review/references/review-output-template.md +0 -74
- package/skills/github/github-issues/SKILL.md +0 -369
- package/skills/github/github-issues/templates/bug-report.md +0 -35
- package/skills/github/github-issues/templates/feature-request.md +0 -31
- package/skills/github/github-pr-workflow/SKILL.md +0 -395
- package/skills/github/github-pr-workflow/references/ci-troubleshooting.md +0 -183
- package/skills/github/github-pr-workflow/references/conventional-commits.md +0 -71
- package/skills/github/github-pr-workflow/templates/pr-body-bugfix.md +0 -35
- package/skills/github/github-pr-workflow/templates/pr-body-feature.md +0 -33
- package/skills/github/github-repo-management/SKILL.md +0 -515
- package/skills/github/github-repo-management/references/github-api-cheatsheet.md +0 -161
- package/skills/github-orchestrator/SKILL.md +0 -103
- package/skills/mcp/DESCRIPTION.md +0 -3
- package/skills/mcp/mcporter/SKILL.md +0 -122
- package/skills/mcp/native-mcp/SKILL.md +0 -356
- package/skills/software-development/architect/SKILL.md +0 -154
- package/skills/software-development/assure-guardrails/SKILL.md +0 -239
- package/skills/software-development/plan/SKILL.md +0 -64
- package/skills/software-development/requesting-code-review/SKILL.md +0 -291
- package/skills/software-development/subagent-driven-development/SKILL.md +0 -433
- package/skills/software-development/systematic-debugging/SKILL.md +0 -366
- package/skills/software-development/test-driven-development/SKILL.md +0 -342
package/dist/sandbox/docker.js
CHANGED
|
@@ -5,6 +5,8 @@ import { dirname, isAbsolute, join, relative, resolve } from "path";
|
|
|
5
5
|
import { randomUUID } from "crypto";
|
|
6
6
|
const execFileAsync = promisify(execFileCb);
|
|
7
7
|
const WORKSPACE_DIR = "/home/agent/workspace";
|
|
8
|
+
/** Shared package-manager download cache mount (issue #107). */
|
|
9
|
+
const PKG_CACHE_DIR = "/cache";
|
|
8
10
|
export class DockerSandbox {
|
|
9
11
|
config;
|
|
10
12
|
activeContainers = new Map();
|
|
@@ -17,9 +19,9 @@ export class DockerSandbox {
|
|
|
17
19
|
async create(opts) {
|
|
18
20
|
const containerName = `lastlight-sandbox-${opts.taskId}-${randomUUID().slice(0, 8)}`;
|
|
19
21
|
const worktreePath = resolve(opts.worktreePath);
|
|
20
|
-
// Shared data — mounted at /data inside the sandbox. Contains
|
|
21
|
-
//
|
|
22
|
-
// expects).
|
|
22
|
+
// Shared data — mounted at /data inside the sandbox. Contains secrets
|
|
23
|
+
// (app.pem) and the opencode-home session-jsonl tree (see
|
|
24
|
+
// deploy/sandbox-entrypoint.sh for the layout it expects).
|
|
23
25
|
//
|
|
24
26
|
// SANDBOX_DATA_VOLUME accepts either:
|
|
25
27
|
// - a Docker named volume name (e.g. "lastlight_agent-data") — used in
|
|
@@ -33,28 +35,99 @@ export class DockerSandbox {
|
|
|
33
35
|
const dataMount = isPathLike(dataVolumeRaw)
|
|
34
36
|
? resolveHostPath(dataVolumeRaw) // bind mount → absolute host path
|
|
35
37
|
: dataVolumeRaw; // named volume → pass through
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
//
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
//
|
|
38
|
+
// /data is the same volume the workspace is carved out of (or the same
|
|
39
|
+
// host path), so the same -v form covers both — bind for path mode,
|
|
40
|
+
// named volume for volume mode. The workspace itself needs the more
|
|
41
|
+
// precise `--mount … volume-subpath=…` form in volume mode so the
|
|
42
|
+
// sandbox sees the harness's sandboxes/<taskId>/ dir rather than an
|
|
43
|
+
// empty docker-auto-created bind target on the host filesystem (the
|
|
44
|
+
// bug that made staged skills invisible — the two paths look identical
|
|
45
|
+
// but live in different physical locations).
|
|
46
|
+
const dockerArgs = ["-v", `${dataMount}:/data`];
|
|
47
|
+
if (opts.workspaceMount.type === "bind") {
|
|
48
|
+
dockerArgs.push("-v", `${opts.workspaceMount.hostPath}:${WORKSPACE_DIR}`);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const { volume, subpath } = opts.workspaceMount;
|
|
52
|
+
dockerArgs.push("--mount", `type=volume,source=${volume},target=${WORKSPACE_DIR},volume-subpath=${subpath}`);
|
|
53
|
+
}
|
|
54
|
+
// Shared package-manager cache, mounted at /cache and shared across every
|
|
55
|
+
// sandbox (issue #107). Each ecosystem's download cache is content-
|
|
56
|
+
// addressed, so sharing across repos is safe and avoids re-fetching the
|
|
57
|
+
// same tarballs on every run. We point npm / pnpm / yarn at subdirs of it
|
|
58
|
+
// via env below; the entrypoint chowns them to the agent user. This is the
|
|
59
|
+
// *download* cache only — per-workspace `node_modules` stays per-workspace
|
|
60
|
+
// (a shared store can't hardlink across separate container mounts anyway).
|
|
61
|
+
//
|
|
62
|
+
// A Docker named volume (auto-created on first use); override the name with
|
|
63
|
+
// LASTLIGHT_PKG_CACHE_VOLUME. In local path-mode this is still a named
|
|
64
|
+
// volume — it needs no host-path view, so the volume/bind split that the
|
|
65
|
+
// workspace mount needs doesn't apply here.
|
|
66
|
+
const pkgCacheVolume = process.env.LASTLIGHT_PKG_CACHE_VOLUME || "lastlight_pkg-cache";
|
|
67
|
+
dockerArgs.push("-v", `${pkgCacheVolume}:${PKG_CACHE_DIR}`);
|
|
68
|
+
// Point each package manager at its shared subdir. npm reads npm_config_cache;
|
|
69
|
+
// pnpm reads npm-style env config (npm_config_store_dir → store-dir); yarn
|
|
70
|
+
// (classic + berry) reads YARN_CACHE_FOLDER. The agent already picks the PM
|
|
71
|
+
// from the repo's lockfile (see skills/pr-review/SKILL.md), so all three are
|
|
72
|
+
// wired regardless of which one a given repo uses.
|
|
73
|
+
dockerArgs.push("-e", `npm_config_cache=${PKG_CACHE_DIR}/npm`, "-e", `npm_config_store_dir=${PKG_CACHE_DIR}/pnpm`, "-e", `YARN_CACHE_FOLDER=${PKG_CACHE_DIR}/yarn`);
|
|
74
|
+
// Resolve git mounts for worktrees (if .git is a file pointing elsewhere).
|
|
75
|
+
// In volume-subpath mode these are still emitted as bind mounts; the
|
|
76
|
+
// gitMounts path is only hit for git worktrees that live alongside the
|
|
77
|
+
// sandbox in the same data dir, so for the named-volume case the
|
|
78
|
+
// sources would also be invisible from the daemon's view. The codebase
|
|
79
|
+
// doesn't currently exercise that combination — pre-clones always
|
|
80
|
+
// produce a real .git directory inside worktreePath — so leaving the
|
|
81
|
+
// bind form here keeps the existing path mode working without adding
|
|
82
|
+
// dead complexity to the named-volume path. If we ever wire a real
|
|
83
|
+
// git worktree under volume mode this needs the same translation.
|
|
84
|
+
const gitMounts = this.resolveGitMounts(worktreePath).flatMap((m) => ["-v", m]);
|
|
85
|
+
dockerArgs.push(...gitMounts);
|
|
86
|
+
// Env flags — passed to entrypoint for MCP config template expansion.
|
|
87
|
+
// No proxy env (HTTPS_PROXY etc.) is injected: the sandbox-egress
|
|
88
|
+
// network has no route to the public internet, and the coredns
|
|
89
|
+
// sidecar referenced by --dns below sinkholes allowlisted hosts to
|
|
90
|
+
// the nginx-egress firewall IP. Clients dial real hostnames; the
|
|
91
|
+
// network routes them transparently. See egress-firewall-config.ts.
|
|
44
92
|
const envFlags = Object.entries(this.config.env).flatMap(([k, v]) => ["-e", `${k}=${v}`]);
|
|
93
|
+
// Per-sandbox memory cap. Without this, a runaway agent (or a hot
|
|
94
|
+
// `npm install` / vite build inside the workspace) can OOM the host
|
|
95
|
+
// and take every other container with it. We set --memory-swap to the
|
|
96
|
+
// same value so swap can't be used to silently exceed the cap.
|
|
97
|
+
const memoryLimit = this.config.memoryLimit || "2g";
|
|
98
|
+
// Network attachment. Default is the `internal: true` sandbox-egress
|
|
99
|
+
// network declared in docker-compose.yml, which has no host route —
|
|
100
|
+
// the only outbound path is through nginx-egress, reached via the
|
|
101
|
+
// DNS sinkhole. Override via LASTLIGHT_SANDBOX_NETWORK for setups
|
|
102
|
+
// (local dev, alt orchestration) where the harness was started
|
|
103
|
+
// outside docker-compose and the network hasn't been created.
|
|
104
|
+
const network = this.config.network ||
|
|
105
|
+
process.env.LASTLIGHT_SANDBOX_NETWORK ||
|
|
106
|
+
"lastlight_sandbox-egress";
|
|
107
|
+
const networkArgs = network === "default" ? [] : ["--network", network];
|
|
108
|
+
// DNS resolver. Points at coredns-strict or coredns-open depending on
|
|
109
|
+
// the phase's egress policy. The whole filtering scheme hinges on
|
|
110
|
+
// this — every name lookup happens against our sinkhole, and
|
|
111
|
+
// allowlisted hosts get answered with the nginx-egress IP rather
|
|
112
|
+
// than the real one.
|
|
113
|
+
const dnsArgs = this.config.dnsIp ? ["--dns", this.config.dnsIp] : [];
|
|
45
114
|
// The entrypoint runs as root to fix permissions, then drops to agent via gosu.
|
|
46
115
|
// No --user flag needed.
|
|
47
116
|
const args = [
|
|
48
117
|
"run", "-d",
|
|
49
118
|
"--name", containerName,
|
|
119
|
+
"--memory", memoryLimit,
|
|
120
|
+
"--memory-swap", memoryLimit,
|
|
121
|
+
...networkArgs,
|
|
122
|
+
...dnsArgs,
|
|
50
123
|
...envFlags,
|
|
51
|
-
...
|
|
124
|
+
...dockerArgs,
|
|
52
125
|
"-w", WORKSPACE_DIR,
|
|
53
126
|
this.config.imageName,
|
|
54
127
|
];
|
|
55
128
|
try {
|
|
56
|
-
// The entrypoint handles all setup:
|
|
57
|
-
//
|
|
129
|
+
// The entrypoint handles all setup: AGENTS.md, opencode.json, app.pem
|
|
130
|
+
// materialization, and git config. No docker exec calls needed.
|
|
58
131
|
const containerId = execCmd("docker", args).trim();
|
|
59
132
|
const info = { containerId, containerName, worktreePath };
|
|
60
133
|
this.activeContainers.set(opts.taskId, info);
|
|
@@ -70,57 +143,131 @@ export class DockerSandbox {
|
|
|
70
143
|
}
|
|
71
144
|
}
|
|
72
145
|
/**
|
|
73
|
-
* Wait for the sandbox entrypoint to finish setup.
|
|
74
|
-
*
|
|
146
|
+
* Wait for the sandbox entrypoint to finish setup. The entrypoint touches
|
|
147
|
+
* `$WORKSPACE/.ready` as its last step before exec'ing the agent shell.
|
|
75
148
|
*/
|
|
76
149
|
async waitForReady(containerName, timeoutMs = 15000) {
|
|
77
150
|
const start = Date.now();
|
|
78
151
|
const interval = 500;
|
|
79
152
|
while (Date.now() - start < timeoutMs) {
|
|
80
153
|
try {
|
|
81
|
-
|
|
154
|
+
await execFileAsync("docker", [
|
|
82
155
|
"exec", "--user", "agent", containerName,
|
|
83
|
-
"test", "-f",
|
|
156
|
+
"test", "-f", `${WORKSPACE_DIR}/.ready`,
|
|
84
157
|
], { timeout: 5000 });
|
|
85
|
-
// File exists — entrypoint is done
|
|
86
158
|
return;
|
|
87
159
|
}
|
|
88
160
|
catch {
|
|
89
|
-
// Not ready yet — wait and retry
|
|
90
161
|
await new Promise((r) => setTimeout(r, interval));
|
|
91
162
|
}
|
|
92
163
|
}
|
|
93
164
|
console.warn(`[sandbox] Timed out waiting for ${containerName} to be ready — proceeding anyway`);
|
|
94
165
|
}
|
|
95
166
|
/**
|
|
96
|
-
* Run the
|
|
167
|
+
* Run the agentic-pi CLI inside the sandbox with a prompt.
|
|
97
168
|
*
|
|
98
|
-
* Streams stdout line-by-line so the caller can react to
|
|
99
|
-
* (e.g. capture the
|
|
100
|
-
*
|
|
101
|
-
* post-run parsing of the
|
|
169
|
+
* Streams stdout line-by-line so the caller can react to JSON events
|
|
170
|
+
* (e.g. capture the top-level `session` record's id) before the agent
|
|
171
|
+
* has finished. The full stdout is also buffered and returned for
|
|
172
|
+
* post-run parsing of the usage_snapshot rollup.
|
|
102
173
|
*/
|
|
103
174
|
async runAgent(taskId, prompt, opts) {
|
|
104
175
|
const info = this.activeContainers.get(taskId);
|
|
105
176
|
if (!info)
|
|
106
177
|
throw new Error(`No sandbox for task ${taskId}`);
|
|
107
|
-
const model = opts?.model || "claude-sonnet-4-6";
|
|
178
|
+
const model = opts?.model || "anthropic/claude-sonnet-4-6";
|
|
108
179
|
const timeout = this.config.timeoutSeconds || 1800;
|
|
109
|
-
|
|
180
|
+
// `cmd` is interpolated into `sh -c <cmd>` below, so any value we
|
|
181
|
+
// append here is shell-parsed. Assert each opt-supplied flag against
|
|
182
|
+
// a tight allowlist before embedding — defense in depth in case any
|
|
183
|
+
// of these ever gets sourced from user input.
|
|
184
|
+
const THINKING = new Set(["off", "minimal", "low", "medium", "high", "xhigh"]);
|
|
185
|
+
const PROFILES = new Set(["read", "issues-write", "review-write", "repo-write"]);
|
|
186
|
+
const WEB_SEARCH_PROVIDERS = new Set(["tavily", "brave", "exa"]);
|
|
187
|
+
const extraArgs = [];
|
|
188
|
+
if (opts?.thinking) {
|
|
189
|
+
if (!THINKING.has(opts.thinking)) {
|
|
190
|
+
throw new Error(`Refusing to pass thinking "${opts.thinking}" — must be one of ${[...THINKING].join("|")}`);
|
|
191
|
+
}
|
|
192
|
+
extraArgs.push("--thinking", opts.thinking);
|
|
193
|
+
}
|
|
194
|
+
if (opts?.profile) {
|
|
195
|
+
if (!PROFILES.has(opts.profile)) {
|
|
196
|
+
throw new Error(`Refusing to pass profile "${opts.profile}" — must be one of ${[...PROFILES].join("|")}`);
|
|
197
|
+
}
|
|
198
|
+
extraArgs.push("--profile", opts.profile);
|
|
199
|
+
}
|
|
200
|
+
// Web search defaults off — agentic-pi's auto-enable triggers on any
|
|
201
|
+
// provider key env var, so silence it explicitly when the caller didn't
|
|
202
|
+
// opt in. When opted in, omit the flag and let agentic-pi pick up the
|
|
203
|
+
// forwarded TAVILY_API_KEY / BRAVE_SEARCH_API_KEY / EXA_API_KEY.
|
|
204
|
+
if (opts?.webSearch === true) {
|
|
205
|
+
if (opts.webSearchProvider) {
|
|
206
|
+
if (!WEB_SEARCH_PROVIDERS.has(opts.webSearchProvider)) {
|
|
207
|
+
throw new Error(`Refusing to pass web-search-provider "${opts.webSearchProvider}" — must be one of ${[...WEB_SEARCH_PROVIDERS].join("|")}`);
|
|
208
|
+
}
|
|
209
|
+
extraArgs.push("--web-search-provider", opts.webSearchProvider);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
extraArgs.push("--no-web-search");
|
|
214
|
+
}
|
|
215
|
+
// Per-phase skill bundles. Each must be an in-container path under the
|
|
216
|
+
// workspace root; assert the charset + prefix before it's embedded into
|
|
217
|
+
// the `sh -c` command, mirroring the agentCwd guard below.
|
|
218
|
+
for (const dir of opts?.skillDirs ?? []) {
|
|
219
|
+
if (!dir.startsWith(WORKSPACE_DIR) || !/^[A-Za-z0-9/_.-]+$/.test(dir)) {
|
|
220
|
+
throw new Error(`Refusing to pass skill dir "${dir}" — must live under ${WORKSPACE_DIR}`);
|
|
221
|
+
}
|
|
222
|
+
extraArgs.push("--skill", dir);
|
|
223
|
+
}
|
|
224
|
+
if (!/^[A-Za-z0-9/_.-]+$/.test(model)) {
|
|
225
|
+
throw new Error(`Refusing to pass model "${model}" — bad charset`);
|
|
226
|
+
}
|
|
227
|
+
for (const [k, v] of Object.entries(opts?.sandboxEnv ?? {})) {
|
|
228
|
+
if (!/^[A-Z_][A-Z0-9_]*$/.test(k)) {
|
|
229
|
+
throw new Error(`Refusing sandbox-env key "${k}" — must be UPPER_SNAKE`);
|
|
230
|
+
}
|
|
231
|
+
// Values are shell-quoted below. Reject newlines and the closing
|
|
232
|
+
// quote (single-quote) defensively — both would break the `'…'` wrap.
|
|
233
|
+
if (/[\n\r']/.test(v)) {
|
|
234
|
+
throw new Error(`Refusing sandbox-env value for "${k}" — contains newline or quote`);
|
|
235
|
+
}
|
|
236
|
+
extraArgs.push("--sandbox-env", `${k}='${v}'`);
|
|
237
|
+
}
|
|
110
238
|
const cmd = [
|
|
111
|
-
"
|
|
112
|
-
"--print", "--verbose",
|
|
113
|
-
"--dangerously-skip-permissions",
|
|
114
|
-
"--output-format", "stream-json",
|
|
239
|
+
"agentic-pi", "run",
|
|
115
240
|
"--model", model,
|
|
116
|
-
"
|
|
241
|
+
"--sandbox", "none",
|
|
242
|
+
...extraArgs,
|
|
117
243
|
].join(" ");
|
|
118
|
-
//
|
|
119
|
-
|
|
244
|
+
// Resolve the agent's cwd. Defaults to the workspace root; callers may
|
|
245
|
+
// pass a `<WORKSPACE_DIR>/<repo>` subdir when the harness pre-cloned the
|
|
246
|
+
// target repo. Asserted against an allowlist before going into
|
|
247
|
+
// `docker exec -w` (which is a separate argv slot, but defensive
|
|
248
|
+
// narrowing keeps surprise paths out).
|
|
249
|
+
const workdir = opts?.agentCwd ?? WORKSPACE_DIR;
|
|
250
|
+
if (!workdir.startsWith(WORKSPACE_DIR) || !/^[A-Za-z0-9/_.-]+$/.test(workdir)) {
|
|
251
|
+
throw new Error(`Refusing to pass agent cwd "${workdir}" — must live under ${WORKSPACE_DIR}`);
|
|
252
|
+
}
|
|
253
|
+
// -i connects stdin so the prompt can be written to the container process.
|
|
254
|
+
// Run as agent user so workspace writes land with the right ownership.
|
|
255
|
+
const args = ["exec", "-i", "--user", "agent", "-w", workdir, info.containerName, "sh", "-c", cmd];
|
|
256
|
+
// The structured event stream is consumed line-by-line via `onLine` and
|
|
257
|
+
// mirrored to the AgenticShim, which writes envelope jsonl to
|
|
258
|
+
// `<sessionsDir>/projects/.../` (read by the admin SessionReader).
|
|
259
|
+
// That is the on-disk log. We deliberately do NOT buffer the full stdout
|
|
260
|
+
// here — for a "read a large repo" run the stream is hundreds of MB and
|
|
261
|
+
// accumulating it in a single string is what OOM'd the harness.
|
|
262
|
+
//
|
|
263
|
+
// We keep only a small bounded tail of stderr so the error-path message
|
|
264
|
+
// is still useful.
|
|
265
|
+
const STDERR_TAIL_BYTES = 8 * 1024;
|
|
120
266
|
return await new Promise((resolvePromise, reject) => {
|
|
121
|
-
const child = spawn("docker", args, { stdio: ["
|
|
122
|
-
|
|
123
|
-
|
|
267
|
+
const child = spawn("docker", args, { stdio: ["pipe", "pipe", "pipe"] });
|
|
268
|
+
child.stdin.write(prompt);
|
|
269
|
+
child.stdin.end();
|
|
270
|
+
let stderrTail = "";
|
|
124
271
|
let buf = "";
|
|
125
272
|
const timer = setTimeout(() => {
|
|
126
273
|
child.kill("SIGKILL");
|
|
@@ -128,7 +275,6 @@ export class DockerSandbox {
|
|
|
128
275
|
}, timeout * 1000);
|
|
129
276
|
child.stdout.setEncoding("utf-8");
|
|
130
277
|
child.stdout.on("data", (chunk) => {
|
|
131
|
-
stdout += chunk;
|
|
132
278
|
if (!opts?.onLine)
|
|
133
279
|
return;
|
|
134
280
|
// Emit complete lines to the caller as they arrive — keeps a partial
|
|
@@ -147,7 +293,12 @@ export class DockerSandbox {
|
|
|
147
293
|
}
|
|
148
294
|
});
|
|
149
295
|
child.stderr.setEncoding("utf-8");
|
|
150
|
-
child.stderr.on("data", (chunk) => {
|
|
296
|
+
child.stderr.on("data", (chunk) => {
|
|
297
|
+
stderrTail += chunk;
|
|
298
|
+
if (stderrTail.length > STDERR_TAIL_BYTES) {
|
|
299
|
+
stderrTail = stderrTail.slice(-STDERR_TAIL_BYTES);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
151
302
|
child.on("error", (err) => {
|
|
152
303
|
clearTimeout(timer);
|
|
153
304
|
reject(new Error(`Sandbox agent spawn failed: ${err.message}`));
|
|
@@ -163,10 +314,10 @@ export class DockerSandbox {
|
|
|
163
314
|
buf = "";
|
|
164
315
|
}
|
|
165
316
|
if (code === 0) {
|
|
166
|
-
resolvePromise(
|
|
317
|
+
resolvePromise();
|
|
167
318
|
}
|
|
168
319
|
else {
|
|
169
|
-
reject(new Error(`Sandbox agent failed (exit ${code}): ${
|
|
320
|
+
reject(new Error(`Sandbox agent failed (exit ${code}): ${stderrTail || "no output"}`));
|
|
170
321
|
}
|
|
171
322
|
});
|
|
172
323
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/sandbox/docker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/sandbox/docker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
2
|
+
import { EventEmitter } from "events";
|
|
3
|
+
vi.mock("child_process", async (importOriginal) => {
|
|
4
|
+
const actual = await importOriginal();
|
|
5
|
+
return {
|
|
6
|
+
...actual,
|
|
7
|
+
spawn: vi.fn(),
|
|
8
|
+
// create() runs `docker run` via execFileSync and polls readiness via
|
|
9
|
+
// execFile (promisified). Stub both so create() can be exercised without a
|
|
10
|
+
// real docker daemon.
|
|
11
|
+
execFileSync: vi.fn().mockReturnValue("container-xyz\n"),
|
|
12
|
+
execFile: vi.fn((_cmd, _args, opts, cb) => {
|
|
13
|
+
const done = (typeof opts === "function" ? opts : cb);
|
|
14
|
+
done(null, { stdout: "", stderr: "" });
|
|
15
|
+
}),
|
|
16
|
+
};
|
|
17
|
+
});
|
|
18
|
+
vi.mock("fs", async (importOriginal) => {
|
|
19
|
+
const actual = await importOriginal();
|
|
20
|
+
return { ...actual, existsSync: vi.fn().mockReturnValue(true), readFileSync: vi.fn().mockReturnValue("{}") };
|
|
21
|
+
});
|
|
22
|
+
import { spawn, execFileSync } from "child_process";
|
|
23
|
+
import { DockerSandbox } from "./docker.js";
|
|
24
|
+
const mockSpawn = vi.mocked(spawn);
|
|
25
|
+
const mockExecFileSync = vi.mocked(execFileSync);
|
|
26
|
+
function makeFakeChild() {
|
|
27
|
+
const stdin = { write: vi.fn(), end: vi.fn() };
|
|
28
|
+
const stdout = Object.assign(new EventEmitter(), { setEncoding: vi.fn() });
|
|
29
|
+
const stderr = Object.assign(new EventEmitter(), { setEncoding: vi.fn() });
|
|
30
|
+
const child = Object.assign(new EventEmitter(), { stdin, stdout, stderr, kill: vi.fn() });
|
|
31
|
+
return child;
|
|
32
|
+
}
|
|
33
|
+
describe("DockerSandbox.runAgent — prompt via stdin, not shell arg", () => {
|
|
34
|
+
let manager;
|
|
35
|
+
let fakeChild;
|
|
36
|
+
beforeEach(() => {
|
|
37
|
+
vi.clearAllMocks();
|
|
38
|
+
fakeChild = makeFakeChild();
|
|
39
|
+
mockSpawn.mockReturnValue(fakeChild);
|
|
40
|
+
manager = new DockerSandbox({
|
|
41
|
+
imageName: "test-image",
|
|
42
|
+
env: {},
|
|
43
|
+
timeoutSeconds: 5,
|
|
44
|
+
});
|
|
45
|
+
manager
|
|
46
|
+
.activeContainers.set("task-001", {
|
|
47
|
+
containerId: "abc123",
|
|
48
|
+
containerName: "test-container",
|
|
49
|
+
worktreePath: "/tmp/work",
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
it("spawn is called with stdin: 'pipe'", async () => {
|
|
53
|
+
const runPromise = manager.runAgent("task-001", "hello world");
|
|
54
|
+
process.nextTick(() => fakeChild.emit("close", 0));
|
|
55
|
+
await runPromise;
|
|
56
|
+
const spawnOpts = mockSpawn.mock.calls[0][2];
|
|
57
|
+
expect(spawnOpts.stdio[0]).toBe("pipe");
|
|
58
|
+
});
|
|
59
|
+
it("prompt is written to child.stdin", async () => {
|
|
60
|
+
const prompt = "Do something dangerous'; rm -rf /; echo '";
|
|
61
|
+
const runPromise = manager.runAgent("task-001", prompt);
|
|
62
|
+
process.nextTick(() => fakeChild.emit("close", 0));
|
|
63
|
+
await runPromise;
|
|
64
|
+
expect(fakeChild.stdin.write).toHaveBeenCalledWith(prompt);
|
|
65
|
+
expect(fakeChild.stdin.end).toHaveBeenCalled();
|
|
66
|
+
});
|
|
67
|
+
it("prompt is not embedded in the docker exec args", async () => {
|
|
68
|
+
const prompt = "secret'; rm -rf /;'";
|
|
69
|
+
const runPromise = manager.runAgent("task-001", prompt);
|
|
70
|
+
process.nextTick(() => fakeChild.emit("close", 0));
|
|
71
|
+
await runPromise;
|
|
72
|
+
const dockerArgs = mockSpawn.mock.calls[0][1].join(" ");
|
|
73
|
+
expect(dockerArgs).not.toContain(prompt);
|
|
74
|
+
expect(dockerArgs).not.toContain("rm -rf");
|
|
75
|
+
});
|
|
76
|
+
it("docker exec args contain -i flag for stdin", async () => {
|
|
77
|
+
const runPromise = manager.runAgent("task-001", "test prompt");
|
|
78
|
+
process.nextTick(() => fakeChild.emit("close", 0));
|
|
79
|
+
await runPromise;
|
|
80
|
+
const dockerArgs = mockSpawn.mock.calls[0][1];
|
|
81
|
+
expect(dockerArgs).toContain("-i");
|
|
82
|
+
});
|
|
83
|
+
it("agentic-pi command runs in --sandbox none mode and does not embed the prompt", async () => {
|
|
84
|
+
const runPromise = manager.runAgent("task-001", "test prompt");
|
|
85
|
+
process.nextTick(() => fakeChild.emit("close", 0));
|
|
86
|
+
await runPromise;
|
|
87
|
+
const dockerArgs = mockSpawn.mock.calls[0][1];
|
|
88
|
+
const shCmd = dockerArgs[dockerArgs.length - 1];
|
|
89
|
+
expect(shCmd).toContain("agentic-pi run");
|
|
90
|
+
expect(shCmd).toContain("--sandbox none");
|
|
91
|
+
expect(shCmd).not.toContain("--no-file-search");
|
|
92
|
+
expect(shCmd).not.toContain("test prompt");
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
describe("DockerSandbox.create — shared package cache (issue #107)", () => {
|
|
96
|
+
beforeEach(() => {
|
|
97
|
+
vi.clearAllMocks();
|
|
98
|
+
mockExecFileSync.mockReturnValue("container-xyz\n");
|
|
99
|
+
});
|
|
100
|
+
function dockerRunArgv() {
|
|
101
|
+
const call = mockExecFileSync.mock.calls.find((c) => Array.isArray(c[1]) && c[1][0] === "run");
|
|
102
|
+
return call?.[1] ?? [];
|
|
103
|
+
}
|
|
104
|
+
it("mounts the shared cache volume and wires npm/pnpm/yarn env", async () => {
|
|
105
|
+
const manager = new DockerSandbox({ imageName: "img", env: {} });
|
|
106
|
+
await manager.create({
|
|
107
|
+
taskId: "repo-1-pr-review",
|
|
108
|
+
worktreePath: "/tmp/work",
|
|
109
|
+
workspaceMount: { type: "bind", hostPath: "/tmp/work" },
|
|
110
|
+
});
|
|
111
|
+
const argv = dockerRunArgv();
|
|
112
|
+
expect(argv).toContain("lastlight_pkg-cache:/cache");
|
|
113
|
+
expect(argv).toContain("npm_config_cache=/cache/npm");
|
|
114
|
+
expect(argv).toContain("npm_config_store_dir=/cache/pnpm");
|
|
115
|
+
expect(argv).toContain("YARN_CACHE_FOLDER=/cache/yarn");
|
|
116
|
+
});
|
|
117
|
+
it("honours LASTLIGHT_PKG_CACHE_VOLUME override", async () => {
|
|
118
|
+
const prev = process.env.LASTLIGHT_PKG_CACHE_VOLUME;
|
|
119
|
+
process.env.LASTLIGHT_PKG_CACHE_VOLUME = "my-cache";
|
|
120
|
+
try {
|
|
121
|
+
const manager = new DockerSandbox({ imageName: "img", env: {} });
|
|
122
|
+
await manager.create({
|
|
123
|
+
taskId: "t",
|
|
124
|
+
worktreePath: "/tmp/work",
|
|
125
|
+
workspaceMount: { type: "bind", hostPath: "/tmp/work" },
|
|
126
|
+
});
|
|
127
|
+
expect(dockerRunArgv()).toContain("my-cache:/cache");
|
|
128
|
+
}
|
|
129
|
+
finally {
|
|
130
|
+
if (prev === undefined)
|
|
131
|
+
delete process.env.LASTLIGHT_PKG_CACHE_VOLUME;
|
|
132
|
+
else
|
|
133
|
+
process.env.LASTLIGHT_PKG_CACHE_VOLUME = prev;
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=docker.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docker.test.js","sourceRoot":"","sources":["../../src/sandbox/docker.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for sandbox HTTP egress allowlists.
|
|
3
|
+
*
|
|
4
|
+
* Both sandbox backends consume this list:
|
|
5
|
+
* - gondolin: passed verbatim to `agenticRun({ allowedHttpHosts })` so the
|
|
6
|
+
* QEMU-layer HTTP interceptor 502s anything off-list.
|
|
7
|
+
* - docker: nginx-egress + coredns configs are generated from these hosts
|
|
8
|
+
* at harness boot. Sandbox containers spawn with `--dns <coredns-ip>`;
|
|
9
|
+
* coredns sinkholes allowlisted hostnames to the nginx firewall IP,
|
|
10
|
+
* which peeks SNI and tunnels to the real upstream. See
|
|
11
|
+
* `src/sandbox/egress-firewall-config.ts` for the full architecture.
|
|
12
|
+
*
|
|
13
|
+
* The lists are intentionally split so callers can compose tighter policies
|
|
14
|
+
* (e.g. a read-only profile that doesn't need package registries). The
|
|
15
|
+
* everyday default is `DEFAULT_ALLOWLIST`.
|
|
16
|
+
*
|
|
17
|
+
* ## Convention: every entry matches the apex AND all subdomains
|
|
18
|
+
*
|
|
19
|
+
* `openai.com` → matches openai.com, api.openai.com, platform.openai.com, …
|
|
20
|
+
* `npmjs.org` → matches npmjs.org, registry.npmjs.org, auth.npmjs.org, …
|
|
21
|
+
*
|
|
22
|
+
* Bare hostnames only — no leading dot, no `*.` prefix. The config
|
|
23
|
+
* generator emits the right syntax for each backend (nginx's
|
|
24
|
+
* `.example.com` map form, CoreDNS regex `(^|\.)example\.com\.$`).
|
|
25
|
+
*
|
|
26
|
+
* Exact-only matching isn't currently supported because we haven't
|
|
27
|
+
* needed it — every host in the list is one we want apex+subdomain
|
|
28
|
+
* access to. If we ever do, we'd add an explicit type (e.g. an `exact:`
|
|
29
|
+
* prefix) so the loose-by-default convention stays unambiguous.
|
|
30
|
+
*
|
|
31
|
+
* A workflow phase can declare `unrestricted_egress: true` to bypass the
|
|
32
|
+
* allowlist entirely — see `src/workflows` for the phase schema.
|
|
33
|
+
*/
|
|
34
|
+
/** GitHub HTTPS endpoints used by `git`, `gh`, and agentic-pi's github tools. */
|
|
35
|
+
export declare const GITHUB_HOSTS: readonly string[];
|
|
36
|
+
/**
|
|
37
|
+
* LLM provider hosts.
|
|
38
|
+
*
|
|
39
|
+
* Required for the docker backend because `agentic-pi run` executes inside
|
|
40
|
+
* the sandbox container there (`src/sandbox/docker.ts` runs `agentic-pi run
|
|
41
|
+
* --sandbox none`), so the LLM HTTP call originates from inside the
|
|
42
|
+
* container. The gondolin backend runs agentic-pi in the harness process,
|
|
43
|
+
* so the call originates from the host and these hosts aren't strictly
|
|
44
|
+
* required inside the VM — they're kept here so a single allowlist can
|
|
45
|
+
* cover both paths without surprises.
|
|
46
|
+
*/
|
|
47
|
+
export declare const PROVIDER_HOSTS: readonly string[];
|
|
48
|
+
/**
|
|
49
|
+
* Public package registries the executor may hit during `npm install`,
|
|
50
|
+
* etc. Apex-plus-subdomain matching covers auth / CDN / mirror
|
|
51
|
+
* subdomains without needing separate entries.
|
|
52
|
+
*/
|
|
53
|
+
export declare const PACKAGE_REGISTRY_HOSTS: readonly string[];
|
|
54
|
+
/**
|
|
55
|
+
* Combined allowlist used by both backends when a phase has not opted into
|
|
56
|
+
* unrestricted egress. Order is preserved across imports so generated
|
|
57
|
+
* configs are stable.
|
|
58
|
+
*/
|
|
59
|
+
export declare const DEFAULT_ALLOWLIST: readonly string[];
|
|
60
|
+
/**
|
|
61
|
+
* Sentinel value recognized by agentic-pi/gondolin (post the `"*"` patch)
|
|
62
|
+
* meaning "allow every host". Used when a phase sets `unrestricted_egress`.
|
|
63
|
+
*
|
|
64
|
+
* On the docker backend, unrestricted egress routes through the open
|
|
65
|
+
* nginx-egress + coredns-open pair — this sentinel is for gondolin only.
|
|
66
|
+
*/
|
|
67
|
+
export declare const ALLOW_ALL_SENTINEL = "*";
|
|
68
|
+
export declare function normalizeAllowlistHost(host: string): string | null;
|
|
69
|
+
export declare function mergeAllowlist(base: readonly string[], extra?: readonly string[]): string[];
|