Refresh docs and examples for workspaces
Rewrite the user-facing persistent sandbox story around pyro workspace ..., including the install guide, first-run transcript, integrations notes, and public contract reference. Rename the Python example to examples/python_workspace.py and update the docs to use the new workspace create, sync, exec, status, logs, and delete flows with seed_path/workspace_id terminology. Mark the 2.4.0 workspace-contract pivot as done in the roadmap now that the shipped CLI, SDK, MCP, docs, and tests all use the workspace-first surface.
This commit is contained in:
parent
48b82d8386
commit
2de31306b6
9 changed files with 148 additions and 150 deletions
|
|
@ -19,12 +19,12 @@ Top-level commands:
|
|||
- `pyro env prune`
|
||||
- `pyro mcp serve`
|
||||
- `pyro run`
|
||||
- `pyro task create`
|
||||
- `pyro task sync push`
|
||||
- `pyro task exec`
|
||||
- `pyro task status`
|
||||
- `pyro task logs`
|
||||
- `pyro task delete`
|
||||
- `pyro workspace create`
|
||||
- `pyro workspace sync push`
|
||||
- `pyro workspace exec`
|
||||
- `pyro workspace status`
|
||||
- `pyro workspace logs`
|
||||
- `pyro workspace delete`
|
||||
- `pyro doctor`
|
||||
- `pyro demo`
|
||||
- `pyro demo ollama`
|
||||
|
|
@ -46,15 +46,12 @@ Behavioral guarantees:
|
|||
- `pyro run` fails if guest boot or guest exec is unavailable unless `--allow-host-compat` is set.
|
||||
- `pyro run`, `pyro env list`, `pyro env pull`, `pyro env inspect`, `pyro env prune`, and `pyro doctor` are human-readable by default and return structured JSON with `--json`.
|
||||
- `pyro demo ollama` prints log lines plus a final summary line.
|
||||
- `pyro task create` auto-starts a persistent workspace.
|
||||
- `pyro task create --source-path PATH` seeds `/workspace` from a host directory or a local
|
||||
`.tar` / `.tar.gz` / `.tgz` archive before the task is returned.
|
||||
- `pyro task sync push TASK_ID SOURCE_PATH [--dest WORKSPACE_PATH]` imports later host-side
|
||||
directory or archive content into a started task workspace.
|
||||
- `pyro task exec` runs in the persistent `/workspace` for that task and does not auto-clean.
|
||||
- `pyro task logs` returns persisted command history for that task until `pyro task delete`.
|
||||
- Task create/status results expose `workspace_seed` metadata describing how `/workspace` was
|
||||
initialized.
|
||||
- `pyro workspace create` auto-starts a persistent workspace.
|
||||
- `pyro workspace create --seed-path PATH` seeds `/workspace` from a host directory or a local `.tar` / `.tar.gz` / `.tgz` archive before the workspace is returned.
|
||||
- `pyro workspace sync push WORKSPACE_ID SOURCE_PATH [--dest WORKSPACE_PATH]` imports later host-side directory or archive content into a started workspace.
|
||||
- `pyro workspace exec` runs in the persistent `/workspace` for that workspace and does not auto-clean.
|
||||
- `pyro workspace logs` returns persisted command history for that workspace until `pyro workspace delete`.
|
||||
- Workspace create/status results expose `workspace_seed` metadata describing how `/workspace` was initialized.
|
||||
|
||||
## Python SDK Contract
|
||||
|
||||
|
|
@ -71,17 +68,17 @@ Supported public entrypoints:
|
|||
- `Pyro.inspect_environment(environment)`
|
||||
- `Pyro.prune_environments()`
|
||||
- `Pyro.create_vm(...)`
|
||||
- `Pyro.create_task(...)`
|
||||
- `Pyro.push_task_sync(task_id, source_path, *, dest="/workspace")`
|
||||
- `Pyro.create_workspace(...)`
|
||||
- `Pyro.push_workspace_sync(workspace_id, source_path, *, dest="/workspace")`
|
||||
- `Pyro.start_vm(vm_id)`
|
||||
- `Pyro.exec_vm(vm_id, *, command, timeout_seconds=30)`
|
||||
- `Pyro.exec_task(task_id, *, command, timeout_seconds=30)`
|
||||
- `Pyro.exec_workspace(workspace_id, *, command, timeout_seconds=30)`
|
||||
- `Pyro.stop_vm(vm_id)`
|
||||
- `Pyro.delete_vm(vm_id)`
|
||||
- `Pyro.delete_task(task_id)`
|
||||
- `Pyro.delete_workspace(workspace_id)`
|
||||
- `Pyro.status_vm(vm_id)`
|
||||
- `Pyro.status_task(task_id)`
|
||||
- `Pyro.logs_task(task_id)`
|
||||
- `Pyro.status_workspace(workspace_id)`
|
||||
- `Pyro.logs_workspace(workspace_id)`
|
||||
- `Pyro.network_info_vm(vm_id)`
|
||||
- `Pyro.reap_expired()`
|
||||
- `Pyro.run_in_vm(...)`
|
||||
|
|
@ -94,17 +91,17 @@ Stable public method names:
|
|||
- `inspect_environment(environment)`
|
||||
- `prune_environments()`
|
||||
- `create_vm(...)`
|
||||
- `create_task(...)`
|
||||
- `push_task_sync(task_id, source_path, *, dest="/workspace")`
|
||||
- `create_workspace(...)`
|
||||
- `push_workspace_sync(workspace_id, source_path, *, dest="/workspace")`
|
||||
- `start_vm(vm_id)`
|
||||
- `exec_vm(vm_id, *, command, timeout_seconds=30)`
|
||||
- `exec_task(task_id, *, command, timeout_seconds=30)`
|
||||
- `exec_workspace(workspace_id, *, command, timeout_seconds=30)`
|
||||
- `stop_vm(vm_id)`
|
||||
- `delete_vm(vm_id)`
|
||||
- `delete_task(task_id)`
|
||||
- `delete_workspace(workspace_id)`
|
||||
- `status_vm(vm_id)`
|
||||
- `status_task(task_id)`
|
||||
- `logs_task(task_id)`
|
||||
- `status_workspace(workspace_id)`
|
||||
- `logs_workspace(workspace_id)`
|
||||
- `network_info_vm(vm_id)`
|
||||
- `reap_expired()`
|
||||
- `run_in_vm(...)`
|
||||
|
|
@ -112,15 +109,13 @@ Stable public method names:
|
|||
Behavioral defaults:
|
||||
|
||||
- `Pyro.create_vm(...)` and `Pyro.run_in_vm(...)` default to `vcpu_count=1` and `mem_mib=1024`.
|
||||
- `Pyro.create_task(...)` defaults to `vcpu_count=1` and `mem_mib=1024`.
|
||||
- `Pyro.create_workspace(...)` defaults to `vcpu_count=1` and `mem_mib=1024`.
|
||||
- `allow_host_compat` defaults to `False` on `create_vm(...)` and `run_in_vm(...)`.
|
||||
- `allow_host_compat` defaults to `False` on `create_task(...)`.
|
||||
- `Pyro.create_task(..., source_path=...)` seeds `/workspace` from a host directory or a local
|
||||
`.tar` / `.tar.gz` / `.tgz` archive before the task is returned.
|
||||
- `Pyro.push_task_sync(...)` imports later host-side directory or archive content into a started
|
||||
task workspace.
|
||||
- `allow_host_compat` defaults to `False` on `create_workspace(...)`.
|
||||
- `Pyro.create_workspace(..., seed_path=...)` seeds `/workspace` from a host directory or a local `.tar` / `.tar.gz` / `.tgz` archive before the workspace is returned.
|
||||
- `Pyro.push_workspace_sync(...)` imports later host-side directory or archive content into a started workspace.
|
||||
- `Pyro.exec_vm(...)` runs one command and auto-cleans that VM after the exec completes.
|
||||
- `Pyro.exec_task(...)` runs one command in the persistent task workspace and leaves the task alive.
|
||||
- `Pyro.exec_workspace(...)` runs one command in the persistent workspace and leaves it alive.
|
||||
|
||||
## MCP Contract
|
||||
|
||||
|
|
@ -140,27 +135,25 @@ Advanced lifecycle tools:
|
|||
- `vm_network_info`
|
||||
- `vm_reap_expired`
|
||||
|
||||
Task workspace tools:
|
||||
Persistent workspace tools:
|
||||
|
||||
- `task_create`
|
||||
- `task_sync_push`
|
||||
- `task_exec`
|
||||
- `task_status`
|
||||
- `task_logs`
|
||||
- `task_delete`
|
||||
- `workspace_create`
|
||||
- `workspace_sync_push`
|
||||
- `workspace_exec`
|
||||
- `workspace_status`
|
||||
- `workspace_logs`
|
||||
- `workspace_delete`
|
||||
|
||||
Behavioral defaults:
|
||||
|
||||
- `vm_run` and `vm_create` default to `vcpu_count=1` and `mem_mib=1024`.
|
||||
- `task_create` defaults to `vcpu_count=1` and `mem_mib=1024`.
|
||||
- `workspace_create` defaults to `vcpu_count=1` and `mem_mib=1024`.
|
||||
- `vm_run` and `vm_create` expose `allow_host_compat`, which defaults to `false`.
|
||||
- `task_create` exposes `allow_host_compat`, which defaults to `false`.
|
||||
- `task_create` accepts optional `source_path` and seeds `/workspace` from a host directory or a
|
||||
local `.tar` / `.tar.gz` / `.tgz` archive before the task is returned.
|
||||
- `task_sync_push` imports later host-side directory or archive content into a started task
|
||||
workspace, with an optional `dest` under `/workspace`.
|
||||
- `workspace_create` exposes `allow_host_compat`, which defaults to `false`.
|
||||
- `workspace_create` accepts optional `seed_path` and seeds `/workspace` from a host directory or a local `.tar` / `.tar.gz` / `.tgz` archive before the workspace is returned.
|
||||
- `workspace_sync_push` imports later host-side directory or archive content into a started workspace, with an optional `dest` under `/workspace`.
|
||||
- `vm_exec` runs one command and auto-cleans that VM after the exec completes.
|
||||
- `task_exec` runs one command in a persistent `/workspace` and leaves the task alive.
|
||||
- `workspace_exec` runs one command in a persistent `/workspace` and leaves the workspace alive.
|
||||
|
||||
## Versioning Rule
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue