Open a takeover shell
Opens the takeover holder’s shell in the guest. This is the
environment attach stream (see attachEnvironment for the
handshake, the query string and the fuse-attach/1 frames) with
a recording on it. Only the Go SDK and the CLI
(fuse hitl takeover) speak it.
Unlike plain attach it does not need the master token: it needs
hitl:takeover, and the caller must be the takeover’s holder
(the master token skips the holder check). Start the takeover
first with POST /v1/environments/{vmId}?action=takeover.
Recorded. The first output frame is a banner saying the
session is recorded and that credentials belong in a secret
request, never typed into the shell. The guest’s output and
window resizes are kept as an asciinema v2 cast; what the human
types is not. When the stream closes the cast is sealed with
TOKEN_ENCRYPTION_KEY (stored unencrypted, with a warning, when
the orchestrator has none) and linked from a takeover_session
audit row by recording_id. A cast stops growing at 8 MiB and is
marked truncated; the shell keeps working.
/v1/interventions/{interventionId}/attachAuthorizationBearer token · headerrequiredfuse_sessionAPI key · cookierequiredinterventionIdstringrequiredttystringrequired1truerowsintegercolsintegercmdstring[]Fuse-ActorstringFuse-Actor-NamestringerrorobjectrequiredShow propertiesHide properties
codestringrequirednot_foundroute_not_foundconflictinvalid_argumentunauthorizedforbiddenunavailableinternalunimplementedlockedmessagestringrequireddetailsobjecterrorobjectrequiredShow propertiesHide properties
codestringrequirednot_foundroute_not_foundconflictinvalid_argumentunauthorizedforbiddenunavailableinternalunimplementedlockedmessagestringrequireddetailsobjecterrorobjectrequiredShow propertiesHide properties
codestringrequirednot_foundroute_not_foundconflictinvalid_argumentunauthorizedforbiddenunavailableinternalunimplementedlockedmessagestringrequireddetailsobjecterrorobjectrequiredShow propertiesHide properties
codestringrequirednot_foundroute_not_foundconflictinvalid_argumentunauthorizedforbiddenunavailableinternalunimplementedlockedmessagestringrequireddetailsobjecterrorobjectrequiredShow propertiesHide properties
codestringrequirednot_foundroute_not_foundconflictinvalid_argumentunauthorizedforbiddenunavailableinternalunimplementedlockedmessagestringrequireddetailsobjecterrorobjectrequiredShow propertiesHide properties
codestringrequirednot_foundroute_not_foundconflictinvalid_argumentunauthorizedforbiddenunavailableinternalunimplementedlockedmessagestringrequireddetailsobjectcurl -X GET "http://localhost:8080/v1/interventions/string/attach?tty=1" \
-H "Authorization: Bearer YOUR_TOKEN"const response = await fetch("http://localhost:8080/v1/interventions/string/attach?tty=1", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_TOKEN"
}
});import requests
response = requests.get(
"http://localhost:8080/v1/interventions/string/attach?tty=1",
headers={
"Authorization": "Bearer YOUR_TOKEN"
},
){
"error": {
"code": "not_found",
"message": "string",
"details": {}
}
}{
"error": {
"code": "not_found",
"message": "string",
"details": {}
}
}{
"error": {
"code": "not_found",
"message": "string",
"details": {}
}
}{
"error": {
"code": "not_found",
"message": "string",
"details": {}
}
}{
"error": {
"code": "not_found",
"message": "string",
"details": {}
}
}{
"error": {
"code": "not_found",
"message": "string",
"details": {}
}
}