Run a command in the IDE pod
`bash -c <command>` in `/data/app` in the IDE pod with the workspace env vars and the caller's Git identity (`GIT_AUTHOR_*`, `GIT_COMMITTER_*`, as in a terminal: the name, and the email only when the identity provider verified it; an env var of the same name wins); `hart exec` uses it. 5 s unless `timeout_seconds` asks for up to 300 (since 0.8.1), and 1 MiB of output per stream; on timeout the process group is killed and `timed_out` is set. Needs `workspace.exec`; 409 when the IDE does not run, or when its agent predates 0.8.1 and allows at most 5 s (a restart of the workspace updates it).
openapi/harthelm.yaml at v1.5.0__Host-harthelm_session<token>Browser session of the UI (12 h idle, 7 days absolute). State-changing requests also need the header
Harthelm-CSRF: 1 and a matching Origin.
ws*integerNumeric resource id.
int641 <= valueapplication/json- body
command*stringRun with bash -c in /data/app.
1 <= length <= 8192timeout_seconds?integer1 <= value <= 3005The command ended (whatever its exit code).
application/json- response
exit_code*integer-1 when the process was killed.
stdout*stringUTF-8; invalid bytes are replaced.
stderr*stringtruncated*booleanAn output stream hit 1 MiB.
timed_out*booleanduration_ms*integercurl -X POST 'https://console.example.com/api/v1/workspaces/1/exec' \ -H 'Content-Type: application/json' \ -d '{ "command": "string"}'{ "exit_code": 0, "stdout": "string", "stderr": "string", "truncated": true, "timed_out": true, "duration_ms": 0}Delete a workspace
Soft-deletes the workspace: it stops, leaves the git proxy and its routes, and keeps its volume and rows until `purge_after` (7 days). `POST /workspaces/{ws}/restore` brings it back until then; its volume keeps counting against the team's storage quota unless a team admin purges it now (`POST /workspaces/{ws}/purge`).
The Overview tab's data
One read for the Overview cockpit: the landscape's services with their status and URLs, the latest run of each stage, the synced and the selected profile. Everything comes from core's database, so it answers while the workspace sleeps and wakes nothing. The UI refetches it on `landscape.updated`, `stage.updated` and `workspace.updated`. Needs `workspace.view`.