lastlight 0.1.8 → 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 +423 -437
- 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 +31 -12
- package/dist/setup.js +516 -174
- 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 +19 -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
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/** SSH clone URL for the public core repo. */
|
|
2
|
+
export declare const CORE_REPO = "git@github.com:cliftonc/lastlight.git";
|
|
3
|
+
/** Default clone URL for the private deployment overlay (see CLAUDE.md). */
|
|
4
|
+
export declare const OVERLAY_REPO_DEFAULT = "git@github-instance:cliftonc/lastlight-instance.git";
|
|
5
|
+
/** Compose override the overlay ships; symlinked into the project root. */
|
|
6
|
+
export declare const OVERRIDE_FILE = "docker-compose.override.yml";
|
|
7
|
+
/** Egress firewall + collector sidecars force-restarted after an update so they
|
|
8
|
+
* re-read any regenerated nginx/coredns/collector configs (mirrors deploy.sh). */
|
|
9
|
+
export declare const SIDECARS: string[];
|
|
10
|
+
/** `docker compose` args for `server start [service]`. */
|
|
11
|
+
export declare function startArgv(service?: string): string[];
|
|
12
|
+
/** `docker compose` args for `server stop [service]` — `stop` one service, or
|
|
13
|
+
* bring the whole stack `down` when none is named. */
|
|
14
|
+
export declare function stopArgv(service?: string): string[];
|
|
15
|
+
/** `docker compose` args for `server restart [service]` (default `agent`). */
|
|
16
|
+
export declare function restartArgv(service?: string): string[];
|
|
17
|
+
/** `docker compose build` args for an update, stamping the core SHA. */
|
|
18
|
+
export declare function buildArgv(gitSha: string): string[];
|
|
19
|
+
/** `docker compose up -d --remove-orphans` for an update. */
|
|
20
|
+
export declare function upArgv(): string[];
|
|
21
|
+
/** `docker compose restart <sidecars…>` for an update. */
|
|
22
|
+
export declare function restartSidecarsArgv(): string[];
|
|
23
|
+
/** First column of `git ls-remote <url> <ref>` output — the SHA, or null. */
|
|
24
|
+
export declare function parseLsRemoteSha(stdout: string): string | null;
|
|
25
|
+
/**
|
|
26
|
+
* Ensure `<home>/docker-compose.override.yml` is a symlink to the overlay's
|
|
27
|
+
* `instance/docker-compose.override.yml`, so `docker compose` auto-loads it.
|
|
28
|
+
* No-op when the overlay ships no override, or when a real file already sits
|
|
29
|
+
* there (left untouched).
|
|
30
|
+
*/
|
|
31
|
+
export declare function ensureOverrideSymlink(home: string): void;
|
|
32
|
+
export interface RepoDrift {
|
|
33
|
+
current: string | null;
|
|
34
|
+
latest: string | null;
|
|
35
|
+
behind: boolean;
|
|
36
|
+
}
|
|
37
|
+
/** Compute core + overlay drift from the local checkouts under `home`. */
|
|
38
|
+
export declare function localDrift(home: string): Promise<{
|
|
39
|
+
core: RepoDrift;
|
|
40
|
+
overlay: RepoDrift;
|
|
41
|
+
}>;
|
|
42
|
+
export interface ServerOpts {
|
|
43
|
+
/** `--home <dir>` override for the working directory. */
|
|
44
|
+
home?: string;
|
|
45
|
+
/** Skip the interactive confirm in `--yes`-style flows. */
|
|
46
|
+
yes?: boolean;
|
|
47
|
+
}
|
|
48
|
+
export interface UpdateOpts extends ServerOpts {
|
|
49
|
+
/** `--no-core` → don't pull the core repo. */
|
|
50
|
+
core?: boolean;
|
|
51
|
+
/** `--no-overlay` → don't pull the instance overlay. */
|
|
52
|
+
overlay?: boolean;
|
|
53
|
+
/** `--no-build` → skip the docker build (just up + restart). */
|
|
54
|
+
build?: boolean;
|
|
55
|
+
}
|
|
56
|
+
/** `lastlight server setup` — scaffold (or adopt) the working directory. */
|
|
57
|
+
export declare function serverSetup(opts: ServerOpts): Promise<void>;
|
|
58
|
+
/** `lastlight server start [service]`. */
|
|
59
|
+
export declare function serverStart(service: string | undefined, opts: ServerOpts): Promise<void>;
|
|
60
|
+
/** `lastlight server stop [service]`. */
|
|
61
|
+
export declare function serverStop(service: string | undefined, opts: ServerOpts): Promise<void>;
|
|
62
|
+
/** `lastlight server restart [service]` (default `agent`). */
|
|
63
|
+
export declare function serverRestart(service: string | undefined, opts: ServerOpts): Promise<void>;
|
|
64
|
+
/** `lastlight server update` — the deploy.sh-equivalent flow. */
|
|
65
|
+
export declare function serverUpdate(opts: UpdateOpts): Promise<void>;
|
|
66
|
+
/** `lastlight server status` — compose state + local version drift. */
|
|
67
|
+
export declare function serverStatus(opts: ServerOpts): Promise<{
|
|
68
|
+
home: string;
|
|
69
|
+
drift: {
|
|
70
|
+
core: RepoDrift;
|
|
71
|
+
overlay: RepoDrift;
|
|
72
|
+
};
|
|
73
|
+
}>;
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Host-local server lifecycle for the `lastlight` CLI —
|
|
3
|
+
* `server setup | start | stop | restart | update | status`.
|
|
4
|
+
*
|
|
5
|
+
* Unlike the rest of the CLI (a thin HTTP client for a *remote* instance),
|
|
6
|
+
* these commands shell out to `git` and `docker compose` in a **working
|
|
7
|
+
* directory** on the host: a full git checkout of the lastlight repo plus the
|
|
8
|
+
* private `instance/` overlay and the `docker-compose.override.yml` symlink —
|
|
9
|
+
* i.e. the docker build context. The CLI is the control plane; the working dir
|
|
10
|
+
* is what `docker compose` builds and runs. `server update` reproduces the
|
|
11
|
+
* production `deploy.sh` flow (git pull core + overlay → build → up → restart
|
|
12
|
+
* the egress sidecars → health-check) with live progress.
|
|
13
|
+
*
|
|
14
|
+
* The working dir resolves via `resolveServerHome()` (`--home` → `LASTLIGHT_HOME`
|
|
15
|
+
* → saved `serverHome` → `~/lastlight`). All `docker compose` invocations run
|
|
16
|
+
* with `cwd = home` so the override and `instance/secrets/.env` resolve exactly
|
|
17
|
+
* as they do in production.
|
|
18
|
+
*/
|
|
19
|
+
import { spawn, execFile, execFileSync } from "node:child_process";
|
|
20
|
+
import { promisify } from "node:util";
|
|
21
|
+
import fs from "node:fs";
|
|
22
|
+
import path from "node:path";
|
|
23
|
+
import * as p from "@clack/prompts";
|
|
24
|
+
import chalk from "chalk";
|
|
25
|
+
import { resolveServerHome, saveServerHome } from "./cli-config.js";
|
|
26
|
+
const exec = promisify(execFile);
|
|
27
|
+
// ── constants ────────────────────────────────────────────────────────────────
|
|
28
|
+
/** SSH clone URL for the public core repo. */
|
|
29
|
+
export const CORE_REPO = "git@github.com:cliftonc/lastlight.git";
|
|
30
|
+
/** Default clone URL for the private deployment overlay (see CLAUDE.md). */
|
|
31
|
+
export const OVERLAY_REPO_DEFAULT = "git@github-instance:cliftonc/lastlight-instance.git";
|
|
32
|
+
/** Compose override the overlay ships; symlinked into the project root. */
|
|
33
|
+
export const OVERRIDE_FILE = "docker-compose.override.yml";
|
|
34
|
+
/** Egress firewall + collector sidecars force-restarted after an update so they
|
|
35
|
+
* re-read any regenerated nginx/coredns/collector configs (mirrors deploy.sh). */
|
|
36
|
+
export const SIDECARS = [
|
|
37
|
+
"coredns-strict",
|
|
38
|
+
"coredns-open",
|
|
39
|
+
"nginx-egress-strict",
|
|
40
|
+
"nginx-egress-open",
|
|
41
|
+
"otel-collector",
|
|
42
|
+
];
|
|
43
|
+
/** Loopback health endpoint the harness serves (admin/routes.ts `GET /health`). */
|
|
44
|
+
const HEALTH_URL = "http://127.0.0.1:8644/health";
|
|
45
|
+
// ── pure argv builders (unit-tested) ─────────────────────────────────────────
|
|
46
|
+
/** `docker compose` args for `server start [service]`. */
|
|
47
|
+
export function startArgv(service) {
|
|
48
|
+
return service ? ["up", "-d", service] : ["up", "-d"];
|
|
49
|
+
}
|
|
50
|
+
/** `docker compose` args for `server stop [service]` — `stop` one service, or
|
|
51
|
+
* bring the whole stack `down` when none is named. */
|
|
52
|
+
export function stopArgv(service) {
|
|
53
|
+
return service ? ["stop", service] : ["down"];
|
|
54
|
+
}
|
|
55
|
+
/** `docker compose` args for `server restart [service]` (default `agent`). */
|
|
56
|
+
export function restartArgv(service) {
|
|
57
|
+
return ["restart", service ?? "agent"];
|
|
58
|
+
}
|
|
59
|
+
/** `docker compose build` args for an update, stamping the core SHA. */
|
|
60
|
+
export function buildArgv(gitSha) {
|
|
61
|
+
const args = ["build", "agent", "sandbox"];
|
|
62
|
+
if (gitSha)
|
|
63
|
+
args.push("--build-arg", `GIT_SHA=${gitSha}`);
|
|
64
|
+
return args;
|
|
65
|
+
}
|
|
66
|
+
/** `docker compose up -d --remove-orphans` for an update. */
|
|
67
|
+
export function upArgv() {
|
|
68
|
+
return ["up", "-d", "--remove-orphans"];
|
|
69
|
+
}
|
|
70
|
+
/** `docker compose restart <sidecars…>` for an update. */
|
|
71
|
+
export function restartSidecarsArgv() {
|
|
72
|
+
return ["restart", ...SIDECARS];
|
|
73
|
+
}
|
|
74
|
+
/** First column of `git ls-remote <url> <ref>` output — the SHA, or null. */
|
|
75
|
+
export function parseLsRemoteSha(stdout) {
|
|
76
|
+
const first = stdout.trim().split(/\s+/)[0];
|
|
77
|
+
return /^[0-9a-f]{7,40}$/i.test(first) ? first : null;
|
|
78
|
+
}
|
|
79
|
+
// ── compose detection ────────────────────────────────────────────────────────
|
|
80
|
+
let _compose = null;
|
|
81
|
+
/** Resolve `docker compose` (v2) vs `docker-compose` (v1) once per process. */
|
|
82
|
+
function compose() {
|
|
83
|
+
if (_compose)
|
|
84
|
+
return _compose;
|
|
85
|
+
try {
|
|
86
|
+
execFileSync("docker", ["compose", "version"], { stdio: "ignore" });
|
|
87
|
+
_compose = { cmd: "docker", pre: ["compose"] };
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
try {
|
|
91
|
+
execFileSync("docker-compose", ["version"], { stdio: "ignore" });
|
|
92
|
+
_compose = { cmd: "docker-compose", pre: [] };
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
_compose = { cmd: "docker", pre: ["compose"] }; // fall through; errors clearly
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return _compose;
|
|
99
|
+
}
|
|
100
|
+
// ── process helpers ──────────────────────────────────────────────────────────
|
|
101
|
+
/**
|
|
102
|
+
* Run a command with inherited stdio so the user sees native progress (docker
|
|
103
|
+
* build layers, git transfer). Prints a labelled header + the exact argv first.
|
|
104
|
+
* Rejects with a clear message on non-zero exit.
|
|
105
|
+
*/
|
|
106
|
+
function runStep(label, cmd, args, cwd) {
|
|
107
|
+
p.log.step(chalk.bold(label));
|
|
108
|
+
console.log(chalk.dim(` $ ${cmd} ${args.join(" ")}`));
|
|
109
|
+
return new Promise((resolve, reject) => {
|
|
110
|
+
const child = spawn(cmd, args, { stdio: "inherit", cwd });
|
|
111
|
+
child.on("error", reject);
|
|
112
|
+
child.on("exit", (code) => code === 0 ? resolve() : reject(new Error(`${label} failed (exit ${code ?? "signal"})`)));
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/** Run a `docker compose` subcommand in `home` with inherited stdio. */
|
|
116
|
+
function composeRun(home, label, args) {
|
|
117
|
+
const c = compose();
|
|
118
|
+
return runStep(label, c.cmd, [...c.pre, ...args], home);
|
|
119
|
+
}
|
|
120
|
+
/** Capture a command's trimmed stdout (used for git SHAs); throws on failure. */
|
|
121
|
+
async function capture(cmd, args, cwd) {
|
|
122
|
+
const { stdout } = await exec(cmd, args, { cwd, timeout: 20_000 });
|
|
123
|
+
return stdout.trim();
|
|
124
|
+
}
|
|
125
|
+
/** Capture stdout, returning null instead of throwing (best-effort lookups). */
|
|
126
|
+
async function captureSoft(cmd, args, cwd) {
|
|
127
|
+
try {
|
|
128
|
+
return await capture(cmd, args, cwd);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// ── filesystem helpers ───────────────────────────────────────────────────────
|
|
135
|
+
function isGitRepo(dir) {
|
|
136
|
+
return fs.existsSync(path.join(dir, ".git"));
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Ensure `<home>/docker-compose.override.yml` is a symlink to the overlay's
|
|
140
|
+
* `instance/docker-compose.override.yml`, so `docker compose` auto-loads it.
|
|
141
|
+
* No-op when the overlay ships no override, or when a real file already sits
|
|
142
|
+
* there (left untouched).
|
|
143
|
+
*/
|
|
144
|
+
export function ensureOverrideSymlink(home) {
|
|
145
|
+
const overlayOverride = path.join("instance", OVERRIDE_FILE); // relative to home
|
|
146
|
+
const absOverlay = path.join(home, overlayOverride);
|
|
147
|
+
const link = path.join(home, OVERRIDE_FILE);
|
|
148
|
+
if (!fs.existsSync(absOverlay))
|
|
149
|
+
return;
|
|
150
|
+
let existing = null;
|
|
151
|
+
try {
|
|
152
|
+
existing = fs.lstatSync(link);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
/* missing — create below */
|
|
156
|
+
}
|
|
157
|
+
if (existing && !existing.isSymbolicLink()) {
|
|
158
|
+
p.log.warn(`${OVERRIDE_FILE} exists as a regular file — leaving it; not symlinking the overlay override.`);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (existing)
|
|
162
|
+
fs.unlinkSync(link);
|
|
163
|
+
fs.symlinkSync(overlayOverride, link); // relative target keeps the checkout portable
|
|
164
|
+
p.log.success(chalk.dim(`${OVERRIDE_FILE}`) + " → " + chalk.dim(overlayOverride));
|
|
165
|
+
}
|
|
166
|
+
/** Short SHA for display. */
|
|
167
|
+
function short(sha) {
|
|
168
|
+
return sha ? sha.slice(0, 8) : chalk.dim("unknown");
|
|
169
|
+
}
|
|
170
|
+
function compareDrift(current, latest) {
|
|
171
|
+
const behind = !!current && !!latest && current !== latest;
|
|
172
|
+
return { current, latest, behind };
|
|
173
|
+
}
|
|
174
|
+
/** Compute core + overlay drift from the local checkouts under `home`. */
|
|
175
|
+
export async function localDrift(home) {
|
|
176
|
+
const instance = path.join(home, "instance");
|
|
177
|
+
const [coreCur, coreRemote, ovCur, ovRemote] = await Promise.all([
|
|
178
|
+
captureSoft("git", ["rev-parse", "HEAD"], home),
|
|
179
|
+
captureSoft("git", ["ls-remote", "origin", "HEAD"], home),
|
|
180
|
+
isGitRepo(instance) ? captureSoft("git", ["rev-parse", "HEAD"], instance) : Promise.resolve(null),
|
|
181
|
+
isGitRepo(instance) ? captureSoft("git", ["ls-remote", "origin", "HEAD"], instance) : Promise.resolve(null),
|
|
182
|
+
]);
|
|
183
|
+
return {
|
|
184
|
+
core: compareDrift(coreCur, coreRemote ? parseLsRemoteSha(coreRemote) : null),
|
|
185
|
+
overlay: compareDrift(ovCur, ovRemote ? parseLsRemoteSha(ovRemote) : null),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// ── health check ─────────────────────────────────────────────────────────────
|
|
189
|
+
async function healthCheck(retries = 15, delayMs = 2000) {
|
|
190
|
+
for (let i = 0; i < retries; i++) {
|
|
191
|
+
try {
|
|
192
|
+
const res = await fetch(HEALTH_URL);
|
|
193
|
+
if (res.ok)
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
/* not up yet */
|
|
198
|
+
}
|
|
199
|
+
await new Promise((r) => setTimeout(r, delayMs));
|
|
200
|
+
}
|
|
201
|
+
return false;
|
|
202
|
+
}
|
|
203
|
+
/** Resolve the working dir and fail clearly if it isn't a checkout yet. */
|
|
204
|
+
function requireHome(opts) {
|
|
205
|
+
const home = resolveServerHome(opts.home);
|
|
206
|
+
if (!isGitRepo(home)) {
|
|
207
|
+
p.log.error(`No lastlight checkout at ${chalk.bold(home)}.\n` +
|
|
208
|
+
` Run ${chalk.cyan("lastlight server setup")} first, or pass ${chalk.cyan("--home <dir>")}.`);
|
|
209
|
+
process.exit(1);
|
|
210
|
+
}
|
|
211
|
+
return home;
|
|
212
|
+
}
|
|
213
|
+
// ── commands ─────────────────────────────────────────────────────────────────
|
|
214
|
+
/** `lastlight server setup` — scaffold (or adopt) the working directory. */
|
|
215
|
+
export async function serverSetup(opts) {
|
|
216
|
+
p.intro(chalk.bold("lastlight server setup"));
|
|
217
|
+
let home = resolveServerHome(opts.home);
|
|
218
|
+
if (!opts.yes) {
|
|
219
|
+
const answer = await p.text({
|
|
220
|
+
message: "Working directory for the server (checkout + overlay)",
|
|
221
|
+
initialValue: home,
|
|
222
|
+
});
|
|
223
|
+
if (p.isCancel(answer)) {
|
|
224
|
+
p.cancel("Cancelled.");
|
|
225
|
+
process.exit(1);
|
|
226
|
+
}
|
|
227
|
+
home = answer;
|
|
228
|
+
}
|
|
229
|
+
home = path.resolve(home);
|
|
230
|
+
// 1. Core checkout — adopt an existing one, else clone.
|
|
231
|
+
if (isGitRepo(home)) {
|
|
232
|
+
p.log.info(`Adopting existing checkout at ${chalk.bold(home)}.`);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
fs.mkdirSync(path.dirname(home), { recursive: true });
|
|
236
|
+
await runStep("Clone core repo", "git", ["clone", CORE_REPO, home]);
|
|
237
|
+
}
|
|
238
|
+
// 2. Overlay checkout under instance/.
|
|
239
|
+
const instance = path.join(home, "instance");
|
|
240
|
+
if (isGitRepo(instance)) {
|
|
241
|
+
p.log.info("Overlay already present at instance/.");
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
let overlayUrl = OVERLAY_REPO_DEFAULT;
|
|
245
|
+
if (!opts.yes) {
|
|
246
|
+
const answer = await p.text({
|
|
247
|
+
message: "Overlay (instance) git URL — blank to skip",
|
|
248
|
+
initialValue: OVERLAY_REPO_DEFAULT,
|
|
249
|
+
});
|
|
250
|
+
if (p.isCancel(answer)) {
|
|
251
|
+
p.cancel("Cancelled.");
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
overlayUrl = answer.trim();
|
|
255
|
+
}
|
|
256
|
+
if (overlayUrl) {
|
|
257
|
+
await runStep("Clone overlay", "git", ["clone", overlayUrl, instance]);
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
p.log.warn("Skipped overlay clone — drop config + secrets into instance/ before starting.");
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
// 3. Override symlink + persist the home.
|
|
264
|
+
ensureOverrideSymlink(home);
|
|
265
|
+
saveServerHome(home);
|
|
266
|
+
p.log.success(`Saved serverHome = ${chalk.bold(home)}`);
|
|
267
|
+
// 4. Offer an initial build + launch.
|
|
268
|
+
const build = opts.yes
|
|
269
|
+
? true
|
|
270
|
+
: await p.confirm({ message: "Build images and start the stack now?", initialValue: true });
|
|
271
|
+
if (!p.isCancel(build) && build) {
|
|
272
|
+
await serverUpdate({ ...opts, home, core: false, overlay: false, build: true });
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
p.outro(`Ready. Start it with: ${chalk.cyan("lastlight server start")}`);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/** `lastlight server start [service]`. */
|
|
279
|
+
export async function serverStart(service, opts) {
|
|
280
|
+
const home = requireHome(opts);
|
|
281
|
+
await composeRun(home, service ? `Start ${service}` : "Start stack", startArgv(service));
|
|
282
|
+
p.log.success("Started.");
|
|
283
|
+
}
|
|
284
|
+
/** `lastlight server stop [service]`. */
|
|
285
|
+
export async function serverStop(service, opts) {
|
|
286
|
+
const home = requireHome(opts);
|
|
287
|
+
await composeRun(home, service ? `Stop ${service}` : "Stop stack (down)", stopArgv(service));
|
|
288
|
+
p.log.success("Stopped.");
|
|
289
|
+
}
|
|
290
|
+
/** `lastlight server restart [service]` (default `agent`). */
|
|
291
|
+
export async function serverRestart(service, opts) {
|
|
292
|
+
const home = requireHome(opts);
|
|
293
|
+
const target = service ?? "agent";
|
|
294
|
+
await composeRun(home, `Restart ${target}`, restartArgv(service));
|
|
295
|
+
p.log.success(`Restarted ${target}.`);
|
|
296
|
+
}
|
|
297
|
+
/** `lastlight server update` — the deploy.sh-equivalent flow. */
|
|
298
|
+
export async function serverUpdate(opts) {
|
|
299
|
+
const home = requireHome(opts);
|
|
300
|
+
const pullCore = opts.core !== false;
|
|
301
|
+
const pullOverlay = opts.overlay !== false;
|
|
302
|
+
const doBuild = opts.build !== false;
|
|
303
|
+
const instance = path.join(home, "instance");
|
|
304
|
+
if (pullCore) {
|
|
305
|
+
await runStep("Pull core", "git", ["-C", home, "pull", "--ff-only", "origin", "main"]);
|
|
306
|
+
}
|
|
307
|
+
if (pullOverlay) {
|
|
308
|
+
if (isGitRepo(instance)) {
|
|
309
|
+
await runStep("Pull overlay", "git", ["-C", instance, "pull", "--ff-only"]);
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
p.log.warn("No overlay checkout at instance/ — skipping overlay pull.");
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
ensureOverrideSymlink(home);
|
|
316
|
+
if (doBuild) {
|
|
317
|
+
const sha = (await captureSoft("git", ["rev-parse", "HEAD"], home)) ?? "";
|
|
318
|
+
await composeRun(home, "Build images", buildArgv(sha));
|
|
319
|
+
}
|
|
320
|
+
await composeRun(home, "Recreate services", upArgv());
|
|
321
|
+
await composeRun(home, "Restart egress sidecars", restartSidecarsArgv());
|
|
322
|
+
p.log.step(chalk.bold("Health check"));
|
|
323
|
+
const healthy = await healthCheck();
|
|
324
|
+
if (!healthy) {
|
|
325
|
+
p.log.error(`Server did not become healthy at ${HEALTH_URL}. Check: lastlight server logs agent`);
|
|
326
|
+
process.exit(1);
|
|
327
|
+
}
|
|
328
|
+
p.log.success("Healthy.");
|
|
329
|
+
p.outro(chalk.green("Update complete."));
|
|
330
|
+
}
|
|
331
|
+
/** `lastlight server status` — compose state + local version drift. */
|
|
332
|
+
export async function serverStatus(opts) {
|
|
333
|
+
const home = requireHome(opts);
|
|
334
|
+
await composeRun(home, "Compose state", ["ps"]);
|
|
335
|
+
const drift = await localDrift(home);
|
|
336
|
+
const row = (label, d) => ` ${chalk.bold(label.padEnd(8))} ${short(d.current)} → ${short(d.latest)} ` +
|
|
337
|
+
(d.behind ? chalk.yellow("behind") : d.latest ? chalk.green("up to date") : chalk.dim("unknown"));
|
|
338
|
+
console.log();
|
|
339
|
+
console.log(chalk.bold("Version"));
|
|
340
|
+
console.log(row("core", drift.core));
|
|
341
|
+
console.log(row("overlay", drift.overlay));
|
|
342
|
+
if (drift.core.behind || drift.overlay.behind) {
|
|
343
|
+
console.log(chalk.yellow(`\nUpdate available — run: ${chalk.cyan("lastlight server update")}`));
|
|
344
|
+
}
|
|
345
|
+
return { home, drift };
|
|
346
|
+
}
|
|
347
|
+
//# sourceMappingURL=cli-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-server.js","sourceRoot":"","sources":["../src/cli-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { startArgv, stopArgv, restartArgv, buildArgv, upArgv, restartSidecarsArgv, parseLsRemoteSha, SIDECARS, } from "./cli-server.js";
|
|
3
|
+
describe("cli-server argv builders", () => {
|
|
4
|
+
it("start: whole stack vs one service", () => {
|
|
5
|
+
expect(startArgv()).toEqual(["up", "-d"]);
|
|
6
|
+
expect(startArgv("caddy")).toEqual(["up", "-d", "caddy"]);
|
|
7
|
+
});
|
|
8
|
+
it("stop: down for the stack, stop for a service", () => {
|
|
9
|
+
expect(stopArgv()).toEqual(["down"]);
|
|
10
|
+
expect(stopArgv("agent")).toEqual(["stop", "agent"]);
|
|
11
|
+
});
|
|
12
|
+
it("restart: defaults to agent", () => {
|
|
13
|
+
expect(restartArgv()).toEqual(["restart", "agent"]);
|
|
14
|
+
expect(restartArgv("caddy")).toEqual(["restart", "caddy"]);
|
|
15
|
+
});
|
|
16
|
+
it("build: stamps GIT_SHA when present, omits when empty", () => {
|
|
17
|
+
expect(buildArgv("abc123")).toEqual(["build", "agent", "sandbox", "--build-arg", "GIT_SHA=abc123"]);
|
|
18
|
+
expect(buildArgv("")).toEqual(["build", "agent", "sandbox"]);
|
|
19
|
+
});
|
|
20
|
+
it("up: recreates with --remove-orphans (matches deploy.sh)", () => {
|
|
21
|
+
expect(upArgv()).toEqual(["up", "-d", "--remove-orphans"]);
|
|
22
|
+
});
|
|
23
|
+
it("restart sidecars: all egress + collector services", () => {
|
|
24
|
+
expect(restartSidecarsArgv()).toEqual(["restart", ...SIDECARS]);
|
|
25
|
+
expect(SIDECARS).toContain("coredns-strict");
|
|
26
|
+
expect(SIDECARS).toContain("otel-collector");
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
describe("parseLsRemoteSha", () => {
|
|
30
|
+
it("extracts the leading SHA", () => {
|
|
31
|
+
expect(parseLsRemoteSha("9c2eabcde1234567890\tHEAD")).toBe("9c2eabcde1234567890");
|
|
32
|
+
});
|
|
33
|
+
it("returns null for junk / empty", () => {
|
|
34
|
+
expect(parseLsRemoteSha("")).toBeNull();
|
|
35
|
+
expect(parseLsRemoteSha("not-a-sha\tHEAD")).toBeNull();
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=cli-server.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-server.test.js","sourceRoot":"","sources":["../src/cli-server.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export type ToolFamily = "shell" | "fs" | "git" | "web" | "plan" | "mcp" | "other";
|
|
2
|
+
export declare function classifyTool(name: string): ToolFamily;
|
|
3
|
+
export declare function formatToolName(name: string): string;
|
|
4
|
+
export declare function renderArgs(name: string, input: any): string;
|
|
5
|
+
type Summary = {
|
|
6
|
+
kind: "text";
|
|
7
|
+
preview: string;
|
|
8
|
+
lines?: number;
|
|
9
|
+
bytes: number;
|
|
10
|
+
} | {
|
|
11
|
+
kind: "json";
|
|
12
|
+
preview: string;
|
|
13
|
+
bytes: number;
|
|
14
|
+
shape: string;
|
|
15
|
+
} | {
|
|
16
|
+
kind: "array";
|
|
17
|
+
preview: string;
|
|
18
|
+
length: number;
|
|
19
|
+
bytes: number;
|
|
20
|
+
} | {
|
|
21
|
+
kind: "empty";
|
|
22
|
+
};
|
|
23
|
+
export declare function summarizeResult(raw: unknown): Summary;
|
|
24
|
+
export declare function formatBytes(n: number): string;
|
|
25
|
+
/** Render the transcript: tool calls paired to results, summarized one-liners. */
|
|
26
|
+
export declare function renderTimeline(messages: any[]): string[];
|
|
27
|
+
/** Render a single message (no cross-message pairing) — used by `--follow`. */
|
|
28
|
+
export declare function renderMessage(msg: any): string[];
|
|
29
|
+
/**
|
|
30
|
+
* Raw, unformatted dump of the whole transcript (`--full`) — no table, no
|
|
31
|
+
* summarization, no truncation. A header line per message, then the full text
|
|
32
|
+
* content (tool results unwrapped from their MCP envelope to readable text).
|
|
33
|
+
*/
|
|
34
|
+
export declare function renderRaw(messages: any[]): string[];
|
|
35
|
+
export {};
|