pi-mono/apps/p2/test/p2
Mario Zechner 2a32a605a9
Some checks are pending
CI / build-check (push) Waiting to run
CI / test (coding-agent) (push) Waiting to run
CI / test (durable) (push) Waiting to run
CI / test (other) (push) Waiting to run
CI / mcp-conformance (push) Waiting to run
feat(p2): Gondolin sandbox environments
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.
2026-11-05 23:35:09 +00:00
..
agent.test.ts feat(p2): subagent messages start with a <sender kind="subagent"> block instead of a [subagent …] line 2026-11-05 07:23:22 +00:00
archive.test.ts fix(p2): archiving a viewed session shows no error and starts no refused worker 2026-11-04 13:19:01 +01:00
artifacts.test.ts feat(p2): render artifacts inline at the tool call site 2026-11-04 21:13:26 +01:00
browser.ts feat(p2): render artifacts inline at the tool call site 2026-11-04 21:13:26 +01:00
bundles.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
chat-contracts.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
chat-mode-fixture.test.ts feat(p2): <sender> block for the model, peer messages as p2.peer-message entries, legacy speaker reader removed 2026-11-04 22:07:38 +00:00
chat-mode-host.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
chat-mode-reload.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
chat-mode-ui.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
chat-mode.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
codemode-card.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
codemode-plugin.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
codemode-setting.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
codemode.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
completion.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
context-files.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
contract-versions.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
conversation-stats.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
conversations-restart.test.ts feat(p2): <sender> block for the model, peer messages as p2.peer-message entries, legacy speaker reader removed 2026-11-04 22:07:38 +00:00
conversations.test.ts feat(p2): tools declare who may call them and where, turn origin from the run's inputs, agents give their own tools 2026-11-04 23:28:14 +00:00
dequeue.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
dev-modules.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
dev-tools.test.ts feat(p2): tools declare who may call them and where, turn origin from the run's inputs, agents give their own tools 2026-11-04 23:28:14 +00:00
dev.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
devices.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
drafts.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
durable-registry.test.ts feat(p2): terminal tool for the agent, tmux-style argv, code mode only 2026-11-04 21:56:56 +01:00
envs.test.ts feat(p2): Gondolin sandbox environments 2026-11-05 23:35:09 +00:00
failed-turns.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
fetch.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
file-index-listing.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
files.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
foreign-requests.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
fork-clone.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
ghostty.test.ts fix(p2): touch selection, Copy and Paste in the web terminal 2026-11-05 19:11:58 +01:00
harness-cwd.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
health.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
helpers.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
history-tools.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
history.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
image-size.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
inputs.test.ts fix(p2): a report's origin scans past mid-run error answers and compaction markers 2026-11-05 07:38:16 +00:00
lifecycle.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
locations.test.ts feat(p2): tools declare who may call them and where, turn origin from the run's inputs, agents give their own tools 2026-11-04 23:28:14 +00:00
login-owners.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
login.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
logs.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
loopback-join.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
m1.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
mcp-environments.test.ts feat(p2): Gondolin sandbox environments 2026-11-05 23:35:09 +00:00
mcp-instances.test.ts feat(p2): MCP OAuth sign-in, MCP sheet and TUI command, footer menu 2026-11-04 18:34:13 +01:00
mcp-leases.test.ts feat(p2): MCP servers on the host, on environments and from projects 2026-11-03 16:48:38 +01:00
mcp-project.test.ts feat(p2): MCP servers on the host, on environments and from projects 2026-11-03 16:48:38 +01:00
mcp-sign-in.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
mcp-tools.test.ts feat(p2): MCP OAuth sign-in, MCP sheet and TUI command, footer menu 2026-11-04 18:34:13 +01:00
mcp-windows-command.test.ts feat(p2): MCP servers on the host, on environments and from projects 2026-11-03 16:48:38 +01:00
mcp-worker.test.ts feat(p2): expose MCP tools to code mode only, as pi does 2026-11-03 18:29:00 +01:00
mcp.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
nested-calls.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
outbox.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
plugin-layout.test.ts feat(p2): MCP servers on the host, on environments and from projects 2026-11-03 16:48:38 +01:00
plugins.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
ports.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
powershell.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
prompt-templates.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
prompt.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
proxy-marker.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
radius-fixture.ts feat: p2 TUI through Radius (npm run tui -- --radius) 2026-11-05 20:26:49 +01:00
radius.test.ts feat: p2 TUI through Radius (npm run tui -- --radius) 2026-11-05 20:26:49 +01:00
rebuild-index.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
relocate-worker.test.ts feat(p2): Gondolin sandbox environments 2026-11-05 23:35:09 +00:00
relocate.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
remote-env-keys.test.ts feat(p2): Gondolin sandbox environments 2026-11-05 23:35:09 +00:00
remote-login.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
sandboxes.test.ts feat(p2): Gondolin sandbox environments 2026-11-05 23:35:09 +00:00
search.test.ts feat(p2): <sender> block for the model, peer messages as p2.peer-message entries, legacy speaker reader removed 2026-11-04 22:07:38 +00:00
send-file.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
session-operations.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
session-start.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
sharing-db.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
sharing.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
shell.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
smoke.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
socket-limits.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
subagent-cwd.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
subagent-reporter.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
subagent-team.test.ts feat(p2): subagent messages start with a <sender kind="subagent"> block instead of a [subagent …] line 2026-11-05 07:23:22 +00:00
subagents.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
terminal-agent-host.test.ts feat(p2): terminal tool for the agent, tmux-style argv, code mode only 2026-11-04 21:56:56 +01:00
terminal-clipboard.test.ts fix(p2): touch selection, Copy and Paste in the web terminal 2026-11-05 19:11:58 +01:00
terminal-commands.test.ts feat(p2): terminal tool for the agent, tmux-style argv, code mode only 2026-11-04 21:56:56 +01:00
terminal-daemon.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
terminal-input.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
terminal-keys.test.ts feat(p2): terminal tool for the agent, tmux-style argv, code mode only 2026-11-04 21:56:56 +01:00
terminal-ping.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
terminal-plain.test.ts feat(p2): terminal tool for the agent, tmux-style argv, code mode only 2026-11-04 21:56:56 +01:00
terminal-reconnect.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
terminal-service.test.ts fix(p2): archiving closes an outdated terminal host's terminals through the viewer protocol 2026-11-04 21:56:56 +01:00
terminal-tool-unit.test.ts feat(p2): Gondolin sandbox environments 2026-11-05 23:35:09 +00:00
terminal-tool.test.ts feat(p2): subagent messages start with a <sender kind="subagent"> block instead of a [subagent …] line 2026-11-05 07:23:22 +00:00
terminals-host.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
terminals.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
test-host.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
titles.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
tool-access.test.ts feat(p2): tools declare who may call them and where, turn origin from the run's inputs, agents give their own tools 2026-11-04 23:28:14 +00:00
tree.test.ts feat(p2): subagent messages start with a <sender kind="subagent"> block instead of a [subagent …] line 2026-11-05 07:23:22 +00:00
tui-actions.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
tui-attach.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
tui-commands.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
tui-fixture.ts feat(p2): /tree, branches of the main conversation as Durable forks 2026-11-04 13:40:36 +01:00
tui-fork.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
tui-grants.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
tui-guest.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
tui-isolation.test.ts fix(p2): report TUI sandbox crashes with their stack 2026-11-05 00:35:13 +01:00
tui-launcher.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
tui-location.test.ts feat(p2): Gondolin sandbox environments 2026-11-05 23:35:09 +00:00
tui-login.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
tui-mermaid.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
tui-mouse.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
tui-optimistic.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
tui-p4.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
tui-p11.test.ts feat(p2): Gondolin sandbox environments 2026-11-05 23:35:09 +00:00
tui-quiet-tools.test.ts feat(p2): quiet-tools plugin and plugin settings in the TUI 2026-11-04 14:55:06 +01:00
tui-radius.test.ts feat: p2 TUI through Radius (npm run tui -- --radius) 2026-11-05 20:26:49 +01:00
tui-render.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
tui-settings.test.ts feat(p2): quiet-tools plugin and plugin settings in the TUI 2026-11-04 14:55:06 +01:00
tui-shell.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
tui-theme.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
tui-transcript.test.ts fix(p2): TUI transcript render survives a sync from its own callbacks 2026-11-05 00:35:13 +01:00
tui-tree.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
tui.test.ts feat: p2 TUI through Radius (npm run tui -- --radius) 2026-11-05 20:26:49 +01:00
ui-agents.test.ts feat(p2): subagent messages start with a <sender kind="subagent"> block instead of a [subagent …] line 2026-11-05 07:23:22 +00:00
ui-chat-controls.test.ts feat(p2): a new session's first message sends at once; one composer for every screen 2026-11-05 12:52:52 +00:00
ui-dev-network.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
ui-drawer.test.ts feat(p2): add a + button to sidebar folders to start a new session there 2026-11-05 18:21:02 +01:00
ui-file-completion.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
ui-inline-artifacts.test.ts feat(p2): render artifacts inline at the tool call site 2026-11-04 21:13:26 +01:00
ui-logs.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
ui-mobile-fixes.test.ts fix(p2): the composer renders its draft at once again 2026-11-05 20:03:08 +01:00
ui-optimistic.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
ui-outbox.test.ts feat(p2): a new session's first message sends at once; one composer for every screen 2026-11-05 12:52:52 +00:00
ui-owner-notices.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
ui-parity.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
ui-reconnect.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
ui-resume.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
ui-sandboxes.test.ts feat(p2): Gondolin sandbox environments 2026-11-05 23:35:09 +00:00
ui-service-worker.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
ui-sheet-swipe.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
ui-sheets.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
ui-tree.test.ts feat(p2): sidebar branch rows behind the session's expand control 2026-11-04 16:15:33 +01:00
ui-view-window.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
ui-viewers-search.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
ui-virtual-scroll.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
ui-workspace.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
unread.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
v1-data.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
validation.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
view-window.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
virtual-list.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
voice-service.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
voice-ui.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
voice.test.ts feat(p2): Chord v2 cleanup pass 2026-11-05 18:22:13 +00:00
web-protocol-mismatch.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
web-reconnect.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
web.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
worker-base.test.ts fix(p2): session workers load OAuth flows and Bedrock from the worker base 2026-11-05 08:49:18 +01:00
worker-oauth.test.ts fix(p2): session workers load OAuth flows and Bedrock from the worker base 2026-11-05 08:49:18 +01:00
workflows.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
workspace-environment.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00
workspace.test.ts feat: add apps/p2 (imported from pi-private at 7dadff697) 2026-11-03 13:39:06 +00:00