mirror of
https://github.com/badlogic/pi-mono.git
synced 2026-11-05 23:37:25 +00:00
A sandbox is a new env type (`type: "gondolin"`): a long-lived Gondolin micro-VM on an SSH environment, with listed host folders and an HTTP(S) host allowlist. The worker reaches it over SSH to the host, where p2's launcher (plugins/envs/sandbox: native, or Docker when the host's Node/QEMU are too old) runs pi-env's daemon inside the VM, so tools, workspace, terminals, uploads and MCP work unchanged. Names outside the allowlist are refused before the host resolves them. Conversations working in a sandbox cannot leave it: location tools, subagent spawn/configure, AgentLocations.move, the terminal tool, and one-shot agents (which now inherit their caller's own location) all keep them there; only the owner's Relocate moves a session out, after a confirmation. conversationConfinement() exposes it to plugins. Owner-only management in the Envs sheet: sandboxes listed under their host, host test reports sandbox support, create/edit/start/stop/restart/test, lock icons in the top bar and sidebar. Tests in test/p2/sandboxes.test.ts (real VM cases with P2_TEST_GONDOLIN=1) and ui-sandboxes.test.ts; docs in docs/remote-envs.md.
42 lines
770 B
CSS
42 lines
770 B
CSS
/* Sandboxes (Gondolin VMs on an SSH environment): list rows, VM state, folders. */
|
|
.env-sandbox {
|
|
padding-left: calc(var(--x) + var(--s5));
|
|
}
|
|
.vm-dot {
|
|
display: inline-block;
|
|
width: 7px;
|
|
height: 7px;
|
|
margin-right: var(--s1);
|
|
border-radius: 50%;
|
|
background: var(--faint);
|
|
vertical-align: middle;
|
|
}
|
|
.vm-dot.running {
|
|
background: var(--ok);
|
|
}
|
|
.vm-dot.unknown {
|
|
border: 1px solid var(--faint);
|
|
background: transparent;
|
|
}
|
|
.sandbox-intro {
|
|
margin-bottom: var(--s3);
|
|
}
|
|
.sandbox-status {
|
|
margin-bottom: var(--s3);
|
|
}
|
|
.sandbox-folders {
|
|
gap: var(--s2);
|
|
}
|
|
.sandbox-folder {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--s3);
|
|
}
|
|
.sandbox-folder > span:first-child {
|
|
flex: 1;
|
|
min-width: 0;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
.directory-leave {
|
|
margin-top: var(--s3);
|
|
}
|