lastlight 0.5.1 → 0.6.2
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/.claude-plugin/marketplace.json +14 -0
- package/README.md +39 -0
- package/agent-context/rules.md +0 -38
- package/agent-context/soul.md +0 -11
- package/dist/cli.js +24 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.js +3 -3
- package/dist/config.js.map +1 -1
- package/dist/engine/agent-executor.d.ts +2 -139
- package/dist/engine/agent-executor.js +76 -996
- package/dist/engine/agent-executor.js.map +1 -1
- package/dist/engine/executors/backends.d.ts +41 -0
- package/dist/engine/executors/backends.js +541 -0
- package/dist/engine/executors/backends.js.map +1 -0
- package/dist/engine/executors/shared.d.ts +189 -0
- package/dist/engine/executors/shared.js +612 -0
- package/dist/engine/executors/shared.js.map +1 -0
- package/dist/sandbox/index.d.ts +1 -1
- package/dist/sandbox/index.js +1 -1
- package/dist/sandbox/index.js.map +1 -1
- package/dist/sandbox/smol.d.ts +162 -0
- package/dist/sandbox/smol.integration.test.d.ts +1 -0
- package/dist/sandbox/smol.integration.test.js +130 -0
- package/dist/sandbox/smol.integration.test.js.map +1 -0
- package/dist/sandbox/smol.js +485 -0
- package/dist/sandbox/smol.js.map +1 -0
- package/dist/skills-install.d.ts +12 -0
- package/dist/skills-install.js +179 -0
- package/dist/skills-install.js.map +1 -0
- package/package.json +4 -2
- package/plugins/lastlight/.claude-plugin/plugin.json +12 -0
- package/plugins/lastlight/README.md +44 -0
- package/plugins/lastlight/skills/lastlight-client/SKILL.md +82 -0
- package/plugins/lastlight/skills/lastlight-evals/SKILL.md +130 -0
- package/plugins/lastlight/skills/lastlight-evals/references/instance-schema.md +84 -0
- package/plugins/lastlight/skills/lastlight-evals/references/models-json.md +42 -0
- package/plugins/lastlight/skills/lastlight-overlay/SKILL.md +72 -0
- package/plugins/lastlight/skills/lastlight-overlay/references/forking.md +55 -0
- package/plugins/lastlight/skills/lastlight-overlay/references/overlay-layout.md +52 -0
- package/plugins/lastlight/skills/lastlight-server/SKILL.md +124 -0
- package/plugins/lastlight/skills/lastlight-server/references/env-schema.md +103 -0
- package/plugins/lastlight/skills/lastlight-server/references/operations.md +60 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sandbox/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* smolvm sandbox manager — runs agent tasks inside local micro-VMs.
|
|
3
|
+
*
|
|
4
|
+
* Structural peer of {@link DockerSandbox}: Last Light owns the isolation
|
|
5
|
+
* boundary, bind-mounts the per-task workspace, runs `agentic-pi run --sandbox
|
|
6
|
+
* none` *inside* the machine, and parses the JSONL event stream exactly as the
|
|
7
|
+
* docker path does. Differences from docker:
|
|
8
|
+
*
|
|
9
|
+
* - **Isolation** is a real micro-VM (own kernel) via smolvm's host
|
|
10
|
+
* hypervisor (Apple Silicon Hypervisor.framework / Linux KVM), not a
|
|
11
|
+
* sibling container. No daemon, no Docker (smolvm drives the hypervisor
|
|
12
|
+
* directly).
|
|
13
|
+
* - **Egress** is enforced natively per-machine via `--allow-host` (sourced
|
|
14
|
+
* from `egress-allowlist.ts`), so this backend needs none of the coredns +
|
|
15
|
+
* nginx-egress sidecar stack. `--allow-host` implies `--net`; we always
|
|
16
|
+
* enable networking (the agent must reach the LLM provider).
|
|
17
|
+
* - **Secrets** (provider keys, GITHUB_TOKEN) are injected via smolvm's
|
|
18
|
+
* `--secret-env GUEST=HOST` so values never appear on the argv — the host
|
|
19
|
+
* env of the spawned `smolvm` process carries them; smolvm resolves them
|
|
20
|
+
* into the guest at start.
|
|
21
|
+
* - **Image** is whatever `SMOLVM_IMAGE` names. smolvm's `-I` accepts a
|
|
22
|
+
* registry ref OR a local `docker save` archive (`./img.tar`) / unpacked
|
|
23
|
+
* rootfs dir — the latter needs NO registry, so it works under the strict
|
|
24
|
+
* egress allowlist. The lastlight sandbox image (built locally by docker)
|
|
25
|
+
* is consumed offline via `docker save lastlight-sandbox:latest -o img.tar`
|
|
26
|
+
* then `SMOLVM_IMAGE=img.tar`. Archives are cached by hash; `start` resolves
|
|
27
|
+
* from cache, not the network.
|
|
28
|
+
*
|
|
29
|
+
* Driven via the **smolvm CLI** (`execFile`), verified against smolvm 1.2.5.
|
|
30
|
+
*
|
|
31
|
+
* Feasibility-spike scope (documented gaps vs docker):
|
|
32
|
+
* - We exec `agentic-pi` directly rather than running the sandbox image's
|
|
33
|
+
* entrypoint, so the entrypoint's git-credential-helper setup is skipped.
|
|
34
|
+
* Read-only profiles (agentic-pi's built-in github tools + minted
|
|
35
|
+
* GITHUB_TOKEN) work; repo-write `git push` from the workspace is out of
|
|
36
|
+
* scope here.
|
|
37
|
+
* - The workload runs VM-grade (root) by default; workspace writes land as
|
|
38
|
+
* root on the host bind mount. No shared package-manager cache, no SSRF
|
|
39
|
+
* metadata floor in unrestricted mode, no in-network OTEL collector.
|
|
40
|
+
* - The image (`SMOLVM_IMAGE`) must be resolvable by smolvm (a registry ref,
|
|
41
|
+
* or a local image it can load) — see the spike plan's verification steps.
|
|
42
|
+
*/
|
|
43
|
+
/**
|
|
44
|
+
* Where the per-task workspace is bind-mounted inside the guest. smolvm treats
|
|
45
|
+
* `/workspace` specially — a `-v <host>:/workspace` mount "takes priority" and
|
|
46
|
+
* the host share is used directly (instead of the VM's storage-disk workspace),
|
|
47
|
+
* which avoids the `virtiofs` carve-out other mount targets get. The probe in
|
|
48
|
+
* {@link SmolSandbox.resolveHostWorkspace} still confirms the actual host path.
|
|
49
|
+
*/
|
|
50
|
+
export declare const SMOL_WORKSPACE_DIR = "/workspace";
|
|
51
|
+
/** True when the smolvm CLI is invocable on this host. */
|
|
52
|
+
export declare function smolAvailable(): boolean;
|
|
53
|
+
export interface SmolSandboxConfig {
|
|
54
|
+
/** OCI image to boot (default: SMOLVM_IMAGE / lastlight-sandbox:latest). */
|
|
55
|
+
imageName?: string;
|
|
56
|
+
/**
|
|
57
|
+
* Env vars injected into in-guest commands (provider keys, GITHUB_TOKEN,
|
|
58
|
+
* OTEL…). Forwarded via `--secret-env` so values stay off the argv.
|
|
59
|
+
*/
|
|
60
|
+
env: Record<string, string>;
|
|
61
|
+
/** Timeout in seconds for an agent run (default 1800 = 30 min). */
|
|
62
|
+
timeoutSeconds?: number;
|
|
63
|
+
/**
|
|
64
|
+
* Egress allowlist (apex hostnames). Each becomes a repeated `--allow-host`.
|
|
65
|
+
* `null` → no allowlist (open egress, still `--net`); used for
|
|
66
|
+
* `unrestricted_egress` phases.
|
|
67
|
+
*/
|
|
68
|
+
allowHosts: string[] | null;
|
|
69
|
+
}
|
|
70
|
+
export interface SmolMachineInfo {
|
|
71
|
+
machineName: string;
|
|
72
|
+
/** Host dir passed to `-v` (the mount source). */
|
|
73
|
+
worktreePath: string;
|
|
74
|
+
/**
|
|
75
|
+
* Host dir that actually backs the guest workspace. smolvm's `-v` does not
|
|
76
|
+
* always share the source root directly — depending on version it carves a
|
|
77
|
+
* `<source>/virtiofs/<tag>` subdir and shares THAT. We probe for it after
|
|
78
|
+
* boot (see {@link SmolSandbox.resolveHostWorkspace}) so host-side staging
|
|
79
|
+
* (clone / AGENTS.md / skills) lands where the guest can see it, regardless
|
|
80
|
+
* of which mount semantics the installed smolvm uses.
|
|
81
|
+
*/
|
|
82
|
+
hostWorkspace: string;
|
|
83
|
+
}
|
|
84
|
+
export declare class SmolSandbox {
|
|
85
|
+
private config;
|
|
86
|
+
private machines;
|
|
87
|
+
constructor(config: SmolSandboxConfig);
|
|
88
|
+
/** Create + start a micro-VM with the workspace bind-mounted and egress locked. */
|
|
89
|
+
create(opts: {
|
|
90
|
+
taskId: string;
|
|
91
|
+
worktreePath: string;
|
|
92
|
+
}): Promise<SmolMachineInfo>;
|
|
93
|
+
/**
|
|
94
|
+
* Discover the host directory that backs the guest workspace mount. Writes a
|
|
95
|
+
* sentinel file from inside the guest at {@link SMOL_WORKSPACE_DIR}, then
|
|
96
|
+
* locates it under the mount source on the host — its parent dir is the
|
|
97
|
+
* host-side workspace root. Falls back to the source root if not found
|
|
98
|
+
* (e.g. a future smolvm that shares the source directly and the scan misses).
|
|
99
|
+
*/
|
|
100
|
+
private resolveHostWorkspace;
|
|
101
|
+
/** Wait until the machine can run a trivial command (boot completion). */
|
|
102
|
+
private waitForReady;
|
|
103
|
+
/**
|
|
104
|
+
* Run `agentic-pi run --sandbox none …` inside the machine. Mirrors
|
|
105
|
+
* {@link DockerSandbox.runAgent}: streams stdout line-by-line for the live
|
|
106
|
+
* shim and writes the prompt to the child's stdin (`-i`). The agentic-pi
|
|
107
|
+
* argv is passed directly after `--` (no `sh -c`), so no shell quoting.
|
|
108
|
+
*/
|
|
109
|
+
runAgent(taskId: string, prompt: string, opts?: {
|
|
110
|
+
model?: string;
|
|
111
|
+
thinking?: string;
|
|
112
|
+
profile?: string;
|
|
113
|
+
/** Forwarded to the inner agentic-pi run via its own `--sandbox-env`. */
|
|
114
|
+
sandboxEnv?: Record<string, string>;
|
|
115
|
+
agentCwd?: string;
|
|
116
|
+
webSearch?: boolean;
|
|
117
|
+
webSearchProvider?: "tavily" | "brave" | "exa";
|
|
118
|
+
skillDirs?: string[];
|
|
119
|
+
onLine?: (line: string) => void;
|
|
120
|
+
}): Promise<void>;
|
|
121
|
+
/**
|
|
122
|
+
* Run a deterministic shell command in the machine and resolve with its exit
|
|
123
|
+
* code + bounded output. Non-agent sibling of {@link runAgent}; powers
|
|
124
|
+
* `type: bash` / `type: script` phases. The command is a shell string, so it
|
|
125
|
+
* runs under `sh -c`.
|
|
126
|
+
*/
|
|
127
|
+
runCommand(taskId: string, command: string, opts?: {
|
|
128
|
+
cwd?: string;
|
|
129
|
+
/** Non-secret env forwarded via `-e KEY=VALUE` (e.g. LL_OUT_*, git identity). */
|
|
130
|
+
sandboxEnv?: Record<string, string>;
|
|
131
|
+
timeoutSeconds?: number;
|
|
132
|
+
onLine?: (line: string) => void;
|
|
133
|
+
}): Promise<{
|
|
134
|
+
exitCode: number;
|
|
135
|
+
stdout: string;
|
|
136
|
+
stderr: string;
|
|
137
|
+
timedOut: boolean;
|
|
138
|
+
}>;
|
|
139
|
+
/** Stop + delete the machine. */
|
|
140
|
+
destroy(taskId: string): Promise<void>;
|
|
141
|
+
/**
|
|
142
|
+
* The allowlist hosts that smolvm can actually use, in original order.
|
|
143
|
+
*
|
|
144
|
+
* smolvm resolves every `--allow-host` to its IP(s) AT VM START and aborts
|
|
145
|
+
* `create` if ANY entry fails to resolve. Our `egress-allowlist.ts` follows an
|
|
146
|
+
* apex+subdomain convention (e.g. `githubusercontent.com`), and some of those
|
|
147
|
+
* bare apexes have no A record — they'd abort the whole VM. So we pre-resolve
|
|
148
|
+
* here and drop the unresolvable ones.
|
|
149
|
+
*
|
|
150
|
+
* CAVEAT: unlike docker (SNI) / gondolin (hostname), smolvm's filter is
|
|
151
|
+
* IP-pinned at start — `--allow-host github.com` allows github.com's IPs only,
|
|
152
|
+
* NOT api.github.com or rotating CDN IPs. A faithful apex+subdomain policy
|
|
153
|
+
* would need each concrete subdomain enumerated; that's a spike gap.
|
|
154
|
+
*/
|
|
155
|
+
private resolvableAllowHosts;
|
|
156
|
+
/**
|
|
157
|
+
* Build `--secret-env GUEST=GUEST` flags for every machine-env var plus the
|
|
158
|
+
* child-process env that carries their values, so secrets (tokens, provider
|
|
159
|
+
* keys) reach the guest via smolvm's secret channel rather than the argv.
|
|
160
|
+
*/
|
|
161
|
+
private secretEnv;
|
|
162
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll, afterAll } from "vitest";
|
|
2
|
+
import { mkdtempSync, mkdirSync, rmSync, readdirSync, existsSync } from "fs";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { runWorkflow } from "./../workflows/runner.js";
|
|
5
|
+
import { smolAvailable } from "./smol.js";
|
|
6
|
+
/**
|
|
7
|
+
* Integration tests that ACTUALLY boot a smolvm micro-VM and execute
|
|
8
|
+
* deterministic `type: bash` / `type: script` phases end-to-end through the
|
|
9
|
+
* real workflow runner — no AI, no mocks. The smol-backend analogue of
|
|
10
|
+
* command-exec.integration.test.ts.
|
|
11
|
+
*
|
|
12
|
+
* Opt-in + self-gating: runs only when `RUN_SMOL_IT=1` AND the smolvm CLI is
|
|
13
|
+
* installed, so the default `npx vitest run` (and CI without smolvm) skip it
|
|
14
|
+
* instantly. To run (Apple Silicon / Linux KVM host):
|
|
15
|
+
*
|
|
16
|
+
* curl -sSL https://smolmachines.com/install.sh | sh # install smolvm
|
|
17
|
+
* smolvm serve & # start the daemon
|
|
18
|
+
* docker compose --profile build-only build sandbox # build the image…
|
|
19
|
+
* # …then make lastlight-sandbox:latest available to smolvm's store
|
|
20
|
+
* # (see the spike plan — OCI import), or point SMOLVM_IMAGE at one that
|
|
21
|
+
* # has agentic-pi + node + git baked in.
|
|
22
|
+
* RUN_SMOL_IT=1 npx vitest run src/sandbox/smol.integration.test.ts
|
|
23
|
+
*
|
|
24
|
+
* Each command phase boots + tears down its own micro-VM, so these are slow —
|
|
25
|
+
* hence the long per-test timeout.
|
|
26
|
+
*/
|
|
27
|
+
const RUN = process.env.RUN_SMOL_IT === "1" && smolAvailable();
|
|
28
|
+
const TIMEOUT = 180_000;
|
|
29
|
+
let stateDir;
|
|
30
|
+
function baseCtx(taskId) {
|
|
31
|
+
return {
|
|
32
|
+
owner: "acme",
|
|
33
|
+
repo: "widget",
|
|
34
|
+
issueNumber: 1,
|
|
35
|
+
issueTitle: "integration",
|
|
36
|
+
issueBody: "",
|
|
37
|
+
issueLabels: [],
|
|
38
|
+
commentBody: "",
|
|
39
|
+
sender: "tester",
|
|
40
|
+
branch: "main",
|
|
41
|
+
taskId,
|
|
42
|
+
issueDir: ".lastlight/issue-1",
|
|
43
|
+
bootstrapLabel: "lastlight:bootstrap",
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function smolConfig() {
|
|
47
|
+
return {
|
|
48
|
+
sandbox: "smol",
|
|
49
|
+
stateDir,
|
|
50
|
+
sessionsDir: join(stateDir, "agent-sessions"),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
describe.skipIf(!RUN)("smol micro-VM command execution (integration)", () => {
|
|
54
|
+
beforeAll(() => {
|
|
55
|
+
const base = join(process.cwd(), "data", "smol-it");
|
|
56
|
+
mkdirSync(base, { recursive: true });
|
|
57
|
+
stateDir = mkdtempSync(join(base, "run-"));
|
|
58
|
+
});
|
|
59
|
+
afterAll(() => {
|
|
60
|
+
if (stateDir)
|
|
61
|
+
rmSync(stateDir, { recursive: true, force: true });
|
|
62
|
+
});
|
|
63
|
+
it("runs a no-AI bash workflow in the VM and threads output downstream", async () => {
|
|
64
|
+
const wf = {
|
|
65
|
+
kind: "agent",
|
|
66
|
+
name: "smol-it-bash",
|
|
67
|
+
phases: [
|
|
68
|
+
{ name: "phase_0", type: "context" },
|
|
69
|
+
// Write + read back a file in the mounted workspace, then emit a single
|
|
70
|
+
// line (so it's forwarded as LL_OUT_EMIT, which is single-line only).
|
|
71
|
+
{ name: "emit", type: "bash", command: "echo hi > marker && [ \"$(cat marker)\" = hi ] && echo hello-from-smol", output_var: "greeting" },
|
|
72
|
+
{ name: "consume", type: "bash", command: "echo template={{phaseOutputs.emit}} env=$LL_OUT_EMIT" },
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
const result = await runWorkflow(wf, baseCtx("smol-it-bash-1"), smolConfig(), {});
|
|
76
|
+
expect(result.success).toBe(true);
|
|
77
|
+
const emit = result.phases.find((p) => p.phase === "emit");
|
|
78
|
+
expect(emit?.success).toBe(true);
|
|
79
|
+
expect(emit?.output).toContain("hello-from-smol");
|
|
80
|
+
const consume = result.phases.find((p) => p.phase === "consume");
|
|
81
|
+
expect(consume?.success).toBe(true);
|
|
82
|
+
expect(consume?.output).toContain("env=hello-from-smol");
|
|
83
|
+
// The command run is mirrored to a session jsonl, exactly like an agent turn.
|
|
84
|
+
const projects = join(stateDir, "agent-sessions", "projects");
|
|
85
|
+
expect(existsSync(projects)).toBe(true);
|
|
86
|
+
const jsonls = readdirSync(projects, { recursive: true }).filter((f) => String(f).endsWith(".jsonl"));
|
|
87
|
+
expect(jsonls.length).toBeGreaterThan(0);
|
|
88
|
+
}, TIMEOUT);
|
|
89
|
+
it("fails the workflow when a bash phase exits non-zero", async () => {
|
|
90
|
+
const wf = {
|
|
91
|
+
kind: "agent",
|
|
92
|
+
name: "smol-it-fail",
|
|
93
|
+
phases: [
|
|
94
|
+
{ name: "phase_0", type: "context" },
|
|
95
|
+
{ name: "boom", type: "bash", command: "echo nope >&2; exit 3" },
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
const result = await runWorkflow(wf, baseCtx("smol-it-fail-1"), smolConfig(), {});
|
|
99
|
+
expect(result.success).toBe(false);
|
|
100
|
+
expect(result.phases.find((p) => p.phase === "boom")?.success).toBe(false);
|
|
101
|
+
}, TIMEOUT);
|
|
102
|
+
it("enforces the native egress allowlist (on-list ok, off-list blocked)", async () => {
|
|
103
|
+
// github.com is in DEFAULT_ALLOWLIST → reachable; example.com is not →
|
|
104
|
+
// smolvm's --allow-host blocks it (DNS sinkhole), so the fetch exits
|
|
105
|
+
// non-zero and the phase fails. curl-or-wget keeps this image-portable
|
|
106
|
+
// (the lastlight-sandbox image has curl; a bare alpine archive has wget).
|
|
107
|
+
const fetch = (url) => `curl -fsS --max-time 15 ${url} >/dev/null 2>&1 || wget -q -T 15 -O /dev/null ${url}`;
|
|
108
|
+
const onList = {
|
|
109
|
+
kind: "agent",
|
|
110
|
+
name: "smol-it-egress-ok",
|
|
111
|
+
phases: [
|
|
112
|
+
{ name: "phase_0", type: "context" },
|
|
113
|
+
{ name: "fetch", type: "bash", command: fetch("https://github.com") },
|
|
114
|
+
],
|
|
115
|
+
};
|
|
116
|
+
const okResult = await runWorkflow(onList, baseCtx("smol-it-egress-ok-1"), smolConfig(), {});
|
|
117
|
+
expect(okResult.success).toBe(true);
|
|
118
|
+
const offList = {
|
|
119
|
+
kind: "agent",
|
|
120
|
+
name: "smol-it-egress-block",
|
|
121
|
+
phases: [
|
|
122
|
+
{ name: "phase_0", type: "context" },
|
|
123
|
+
{ name: "fetch", type: "bash", command: fetch("https://example.com") },
|
|
124
|
+
],
|
|
125
|
+
};
|
|
126
|
+
const blockResult = await runWorkflow(offList, baseCtx("smol-it-egress-block-1"), smolConfig(), {});
|
|
127
|
+
expect(blockResult.success).toBe(false);
|
|
128
|
+
}, TIMEOUT);
|
|
129
|
+
});
|
|
130
|
+
//# sourceMappingURL=smol.integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smol.integration.test.js","sourceRoot":"","sources":["../../src/sandbox/smol.integration.test.ts"],"names":[],"mappings":"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"}
|