1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*
* Hanzo Cloud API
*
* The Hanzo Cloud API as a customer calls it: every operation under /v1/ except the operator's admin product, relay routes, legacy spellings and capabilities still reached by flag. Tagged by product: the first path segment after /v1/.
*
* The version of the OpenAPI document: v1
*
* Generated by: https://openapi-generator.tech
*/
use crate::models;
use serde::{Deserialize, Serialize};
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
pub struct RegisterReq {
/// Account is which subscription or API account under that provider served the run, up to 256 characters. It is what lets a revoke of that login stop exactly the sessions it was paying for.
#[serde(rename = "account", skip_serializing_if = "Option::is_none")]
pub account: Option<String>,
/// Actor is the \"org/sub\" identity to record the session under, up to 256 characters. Omit it and the calling principal is used, which is almost always what you want: it is what a login revoke matches on to stop this session.
#[serde(rename = "actor", skip_serializing_if = "Option::is_none")]
pub actor: Option<String>,
/// Agent is the label the surface opening this session calls itself by (\"hanzo-dev\"). REQUIRED, up to 128 characters, and free text — nothing resolves it against a defined agent.
#[serde(rename = "agent", skip_serializing_if = "Option::is_none")]
pub agent: Option<String>,
/// Cwd is the directory the session starts in, up to 1024 characters. It can be moved later, because a linked shell walks around.
#[serde(rename = "cwd", skip_serializing_if = "Option::is_none")]
pub cwd: Option<String>,
/// Execution context — where this session runs (all optional).
#[serde(rename = "host", skip_serializing_if = "Option::is_none")]
pub host: Option<String>,
/// ParentSessionID makes this a subagent of that session: it inherits the parent's root, so one flow stays one tree. The parent must exist IN THE SAME ORG — a foreign or unknown id is a 400, never a tree across tenants. Empty opens a root session.
#[serde(rename = "parentSessionId", skip_serializing_if = "Option::is_none")]
pub parent_session_id: Option<String>,
/// The readable build (provenance.go): which product this session builds, and whether its story may be read by the world.
#[serde(rename = "project", skip_serializing_if = "Option::is_none")]
pub project: Option<String>,
/// Account tag — the linked AI account this session ran under (login manager).
#[serde(rename = "provider", skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
/// Published opens this session's story to the public build route. It is refused without a Project, because that route is keyed on (org, project) — a build with no product is not a story anyone can open. False keeps it org-only.
#[serde(rename = "published", skip_serializing_if = "Option::is_none")]
pub published: Option<bool>,
/// Repo is the code being worked on, up to 512 characters. A label the surface states; nothing resolves it against the forge.
#[serde(rename = "repo", skip_serializing_if = "Option::is_none")]
pub repo: Option<String>,
/// Room is the collaborative room this run was started in (HIP-0523), so a workspace view can list the sessions of one room. It is PROVENANCE and is set only here: there is deliberately no way to move a session to another room, so it is absent from the patch input and from UpdateSession's SET list.
#[serde(rename = "room", skip_serializing_if = "Option::is_none")]
pub room: Option<String>,
/// Status opens the session in one of running, paused, done or error. Empty means running. A TERMINAL status here (done, error) records a session that has already finished — its end time is stamped now — and nothing can move it afterwards.
#[serde(rename = "status", skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
/// Target names a run-target the org has registered. Unlike Host and Repo it IS resolved: a target that does not exist in this org is a 400, so a session can never claim to run on another tenant's machine. Empty names no machine.
#[serde(rename = "target", skip_serializing_if = "Option::is_none")]
pub target: Option<String>,
/// TaskRunID is that workflow's particular run, same bound. Recorded, not resolved: this surface does not check the workflow exists.
#[serde(rename = "taskRunId", skip_serializing_if = "Option::is_none")]
pub task_run_id: Option<String>,
/// TaskWorkflowID links this session to the hanzoai/tasks workflow that executes it, up to 256 characters. Set it and control commands are forwarded to that engine; leave it and the running surface polls for them instead.
#[serde(rename = "taskWorkflowId", skip_serializing_if = "Option::is_none")]
pub task_workflow_id: Option<String>,
/// Terminal is the URL this session's live terminal is published at, so the console can watch it. Optional — a session that publishes nothing is still a session.
#[serde(rename = "terminal", skip_serializing_if = "Option::is_none")]
pub terminal: Option<String>,
/// Title is the human line a card shows, up to 512 characters. Optional, and changeable later.
#[serde(rename = "title", skip_serializing_if = "Option::is_none")]
pub title: Option<String>,
}
impl RegisterReq {
pub fn new() -> RegisterReq {
RegisterReq {
account: None,
actor: None,
agent: None,
cwd: None,
host: None,
parent_session_id: None,
project: None,
provider: None,
published: None,
repo: None,
room: None,
status: None,
target: None,
task_run_id: None,
task_workflow_id: None,
terminal: None,
title: None,
}
}
}