Pointy Backend API
v1.0.0/backendHTTP API served by the Pointy backend. All routes are mounted under the /backend prefix by the reverse proxy.
autocomplete
/autocomplete
Returns autocomplete suggestions for a field, evaluated against the user repository.
Body
autocompletestringrequiredcontextobjectrequiredlimitinteger[-9223372036854776000, 9223372036854776000]querystringrequiredtemplatestringrequiredParameters
commitstringqueryResponse
Invalid body or commit
curl -X POST '/backend/autocomplete' \
-H 'Content-Type: application/json;charset=utf-8' \
-d '{
"autocomplete": "string",
"context": {},
"limit": -9223372036854776000,
"query": "string",
"template": "string"
}'const response = await fetch('/backend/autocomplete', {
method: 'POST',
headers: {
'Content-Type': 'application/json;charset=utf-8',
},
body: JSON.stringify({
"autocomplete": "string",
"context": {},
"limit": -9223372036854776000,
"query": "string",
"template": "string"
}),
});
const data = await response.json();import requests
payload = {
"autocomplete": "string",
"context": {},
"limit": -9223372036854776000,
"query": "string",
"template": "string"
}
response = requests.post('/backend/autocomplete', json=payload)
data = response.json(){
"autocomplete": "string",
"context": {},
"limit": -9223372036854776000,
"query": "string",
"template": "string"
}[
"string"
]cluster-status-stream
/cluster-status-stream
Streams the current SLURM cluster availability, the reason for any degradation, and subsequent status changes.
Response
curl -X GET '/backend/cluster-status-stream'const response = await fetch('/backend/cluster-status-stream', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/cluster-status-stream')
data = response.json()<binary>commit-hash
/commit-hash
Returns the commit hash the user repository is currently checked out at.
Response
curl -X GET '/backend/commit-hash'const response = await fetch('/backend/commit-hash', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/commit-hash')
data = response.json()stringingest-stream
/ingest-stream
Streams ingest job snapshots and progress updates as server-sent events.
Response
curl -X GET '/backend/ingest-stream'const response = await fetch('/backend/ingest-stream', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/ingest-stream')
data = response.json()<binary>job-ended
/job-ended
Called by the Slurm job-completion hook when a job ends; wakes the build watchers waiting on that job name.
Parameters
namestringrequiredqueryResponse
Invalid name
curl -X POST '/backend/job-ended'const response = await fetch('/backend/job-ended', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('/backend/job-ended')
data = response.json()notices
/notices
Returns evaluation notices (warnings and errors) for a step.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringqueryResponse
Invalid commit or id
curl -X GET '/backend/notices'const response = await fetch('/backend/notices', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/notices')
data = response.json(){}presets
/presets
Returns the field presets defined in the user repository.
Parameters
commitstringqueryResponse
Invalid commit
curl -X GET '/backend/presets'const response = await fetch('/backend/presets', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/presets')
data = response.json(){}project-review
/project-review
Reports how every step in a project at one revision compares with its reviewed revision, together with that reviewed revision.
Parameters
project_idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringqueryResponse
Invalid commit or project_id
curl -X GET '/backend/project-review'const response = await fetch('/backend/project-review', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/project-review')
data = response.json(){}project-rollup
/project-rollup
Returns, for every direct child project of a project in its effective order, the number of steps reachable below it and the counts of their statuses, recursively and counting each step once per child project, optionally at a specific user-repo commit.
Parameters
project_idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringqueryResponse
Invalid commit or project_id
curl -X GET '/backend/project-rollup'const response = await fetch('/backend/project-rollup', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/project-rollup')
data = response.json(){}project-status
/project-status
Re-evaluates a project's step statuses and broadcasts them on the step status stream.
Parameters
project_idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringqueryResponse
Invalid commit or project_id
curl -X POST '/backend/project-status'const response = await fetch('/backend/project-status', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('/backend/project-status')
data = response.json()projects
/projects
Returns every project keyed by id, including the root project 0, optionally at a specific user-repo commit. Each project lists its steps and subprojects in children; revisions written in the former steps format are converted to this shape.
Parameters
commitstringqueryResponse
Invalid commit
curl -X GET '/backend/projects'const response = await fetch('/backend/projects', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/projects')
data = response.json(){}/projects
Creates a project from its name and preset or templates, and appends it to the children of the parent project (the root project 0 by default) in one commit. Returns the evaluated project.
Body
A project's name and exactly one of preset or templates.
namestringrequiredpresetstringtemplatesArray<string>Parameters
parent_idinteger[-9223372036854776000, 9223372036854776000]queryResponse
Invalid body or parent_id
curl -X POST '/backend/projects' \
-H 'Content-Type: application/json;charset=utf-8' \
-d '{
"name": "string",
"preset": "string",
"templates": [
"string"
]
}'const response = await fetch('/backend/projects', {
method: 'POST',
headers: {
'Content-Type': 'application/json;charset=utf-8',
},
body: JSON.stringify({
"name": "string",
"preset": "string",
"templates": [
"string"
]
}),
});
const data = await response.json();import requests
payload = {
"name": "string",
"preset": "string",
"templates": [
"string"
]
}
response = requests.post('/backend/projects', json=payload)
data = response.json(){
"name": "string",
"preset": "string",
"templates": [
"string"
]
}{}/projects
Replaces a project's name and preset or templates; its children are left unchanged.
Body
A project's name and exactly one of preset or templates.
namestringrequiredpresetstringtemplatesArray<string>Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredqueryResponse
Invalid body or id
curl -X PATCH '/backend/projects' \
-H 'Content-Type: application/json;charset=utf-8' \
-d '{
"name": "string",
"preset": "string",
"templates": [
"string"
]
}'const response = await fetch('/backend/projects', {
method: 'PATCH',
headers: {
'Content-Type': 'application/json;charset=utf-8',
},
body: JSON.stringify({
"name": "string",
"preset": "string",
"templates": [
"string"
]
}),
});
const data = await response.json();import requests
payload = {
"name": "string",
"preset": "string",
"templates": [
"string"
]
}
response = requests.patch('/backend/projects', json=payload)
data = response.json(){
"name": "string",
"preset": "string",
"templates": [
"string"
]
}/projects/batch
Applies an ordered list of project tree operations (update, link, unlink, order, hide, delete) validated as a whole and written in one commit. Refuses to delete the root project 0, reviewed steps, or steps that remaining steps depend on. Validation failures return 409 with a human message; an empty list returns 400.
Body
Response
Invalid body
curl -X POST '/backend/projects/batch' \
-H 'Content-Type: application/json;charset=utf-8' \
-d '[
{
"child": {
"step": {
"id": 0
}
},
"children": [
{
"step": {
"id": 0
}
}
],
"fields": {
"name": "string",
"preset": "string",
"templates": [
"string"
]
},
"hidden": true,
"op": "string",
"parent": 0,
"project": 0
}
]'const response = await fetch('/backend/projects/batch', {
method: 'POST',
headers: {
'Content-Type': 'application/json;charset=utf-8',
},
body: JSON.stringify([
{
"child": {
"step": {
"id": 0
}
},
"children": [
{
"step": {
"id": 0
}
}
],
"fields": {
"name": "string",
"preset": "string",
"templates": [
"string"
]
},
"hidden": true,
"op": "string",
"parent": 0,
"project": 0
}
]),
});
const data = await response.json();import requests
payload = [
{
"child": {
"step": {
"id": 0
}
},
"children": [
{
"step": {
"id": 0
}
}
],
"fields": {
"name": "string",
"preset": "string",
"templates": [
"string"
]
},
"hidden": True,
"op": "string",
"parent": 0,
"project": 0
}
]
response = requests.post('/backend/projects/batch', json=payload)
data = response.json()[
{
"child": {
"step": {
"id": 0
}
},
"children": [
{
"step": {
"id": 0
}
}
],
"fields": {
"name": "string",
"preset": "string",
"templates": [
"string"
]
},
"hidden": true,
"op": "string",
"parent": 0,
"project": 0
}
]run-step
/run-step
Triggers a build of a step.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringqueryResponse
Invalid commit or id
curl -X POST '/backend/run-step'const response = await fetch('/backend/run-step', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('/backend/run-step')
data = response.json()scratch
/scratch
Returns the configured scratch directory root, or null when scratch is not configured.
Response
curl -X GET '/backend/scratch'const response = await fetch('/backend/scratch', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/scratch')
data = response.json(){
"root": "string"
}/scratch/list
Lists the entries of a directory inside the scratch root, directories first.
Parameters
pathstringqueryResponse
Invalid path
curl -X GET '/backend/scratch/list'const response = await fetch('/backend/scratch/list', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/scratch/list')
data = response.json(){
"entries": [
{
"directory": true,
"name": "string",
"size": 0
}
],
"path": "string"
}/scratch/wrap
Starts an ingest job that wraps a directory inside the scratch root into a step.
Body
pathstringrequiredParameters
idinteger[-9223372036854776000, 9223372036854776000]requiredqueryResponse
Invalid body or id
curl -X POST '/backend/scratch/wrap' \
-H 'Content-Type: application/json;charset=utf-8' \
-d '{
"path": "string"
}'const response = await fetch('/backend/scratch/wrap', {
method: 'POST',
headers: {
'Content-Type': 'application/json;charset=utf-8',
},
body: JSON.stringify({
"path": "string"
}),
});
const data = await response.json();import requests
payload = {
"path": "string"
}
response = requests.post('/backend/scratch/wrap', json=payload)
data = response.json(){
"path": "string"
}stringsrc-files
/src-files
Lists source files available to a step, optionally at a specific user-repo commit.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringquerypathstringqueryResponse
Invalid path or commit or id
curl -X GET '/backend/src-files'const response = await fetch('/backend/src-files', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/src-files')
data = response.json()[
{
"isDir": true,
"mimeType": "string",
"name": "string",
"seekable": true,
"size": 0,
"viewable": true
}
]/src-files
Creates a source file and commits it to the user repository.
Body
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerypathstringrequiredqueryResponse
Invalid body or path or id
curl -X POST '/backend/src-files' \
-H 'Content-Type: text/plain;charset=utf-8' \
-d '"string"'const response = await fetch('/backend/src-files', {
method: 'POST',
headers: {
'Content-Type': 'text/plain;charset=utf-8',
},
body: JSON.stringify("string"),
});
const data = await response.json();import requests
payload = "string"
response = requests.post('/backend/src-files', json=payload)
data = response.json()string/src-files
Updates a source file and commits it to the user repository.
Body
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerypathstringrequiredqueryResponse
Invalid body or path or id
curl -X PUT '/backend/src-files' \
-H 'Content-Type: text/plain;charset=utf-8' \
-d '"string"'const response = await fetch('/backend/src-files', {
method: 'PUT',
headers: {
'Content-Type': 'text/plain;charset=utf-8',
},
body: JSON.stringify("string"),
});
const data = await response.json();import requests
payload = "string"
response = requests.put('/backend/src-files', json=payload)
data = response.json()string/src-files
Deletes a source file and commits it to the user repository.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerypathstringrequiredqueryResponse
Invalid path or id
curl -X DELETE '/backend/src-files'const response = await fetch('/backend/src-files', {
method: 'DELETE',
});
const data = await response.json();import requests
response = requests.delete('/backend/src-files')
data = response.json()/src-files/download
Downloads a single source file.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringquerypathstringrequiredqueryResponse
Invalid path or commit or id
curl -X GET '/backend/src-files/download'const response = await fetch('/backend/src-files/download', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/src-files/download')
data = response.json()"<binary>"/src-files/seek
Returns a bounded source-file chunk. Specify exactly one of line or offset and a nonzero signed byte count: positive bytes read forward from the anchor; negative bytes read backward and end at the anchor.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringquerypathstringrequiredquerylineinteger[-9223372036854776000, 9223372036854776000]queryoffsetinteger[-9223372036854776000, 9223372036854776000]querybytesinteger[-9223372036854776000, 9223372036854776000]requiredqueryResponse
Invalid bytes or offset or line or path or commit or id
curl -X GET '/backend/src-files/seek'const response = await fetch('/backend/src-files/seek', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/src-files/seek')
data = response.json(){
"content": "string",
"endLine": -9223372036854776000,
"endOffset": -9223372036854776000,
"eof": true,
"startLine": -9223372036854776000,
"startOffset": -9223372036854776000
}step
/step
Creates a step, optionally seeded from a source step.
Body
Parameters
project_idinteger[-9223372036854776000, 9223372036854776000]querysource_idinteger[-9223372036854776000, 9223372036854776000]queryResponse
Invalid body or source_id or project_id
curl -X POST '/backend/step' \
-H 'Content-Type: application/json' \
-d '{}'const response = await fetch('/backend/step', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
});
const data = await response.json();import requests
payload = {}
response = requests.post('/backend/step', json=payload)
data = response.json(){}{}/step
Updates an existing step record.
Body
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredqueryResponse
Invalid body or id
curl -X PATCH '/backend/step' \
-H 'Content-Type: application/json' \
-d '{}'const response = await fetch('/backend/step', {
method: 'PATCH',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
});
const data = await response.json();import requests
payload = {}
response = requests.patch('/backend/step', json=payload)
data = response.json(){}step-config
/step-config
Returns the step configuration defined in the user repository.
Parameters
commitstringqueryResponse
Invalid commit
curl -X GET '/backend/step-config'const response = await fetch('/backend/step-config', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/step-config')
data = response.json(){}step-files
/step-files
Lists files in a step's output directory.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringquerypathstringqueryResponse
Invalid path or commit or id
curl -X GET '/backend/step-files'const response = await fetch('/backend/step-files', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/step-files')
data = response.json()[
{
"isDir": true,
"mimeType": "string",
"name": "string",
"seekable": true,
"size": 0,
"viewable": true
}
]/step-files/bundle/{step-id}/{commit}/{segments}
Serves a raw file within an immutable step-output bundle.
Parameters
step-idinteger[-9223372036854776000, 9223372036854776000]requiredpathcommitstringrequiredpathsegmentsstringrequiredpathResponse
step-id or commit or segments not found
curl -X GET '/backend/step-files/bundle/{step-id}/{commit}/{segments}'const response = await fetch('/backend/step-files/bundle/{step-id}/{commit}/{segments}', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/step-files/bundle/{step-id}/{commit}/{segments}')
data = response.json()"<binary>"/step-files/download
Downloads a single file from a step's output directory.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringquerypathstringrequiredqueryResponse
Invalid path or commit or id
curl -X GET '/backend/step-files/download'const response = await fetch('/backend/step-files/download', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/step-files/download')
data = response.json()"<binary>"/step-files/extras
Returns a step's JSON extras payload.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringquerypathstringqueryResponse
Invalid path or commit or id
curl -X GET '/backend/step-files/extras'const response = await fetch('/backend/step-files/extras', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/step-files/extras')
data = response.json(){}/step-files/raw/{segments}
Serves the raw bytes of a file from a step's output directory.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringquerysegmentsstringrequiredpathResponse
Invalid commit or id
segments not found
curl -X GET '/backend/step-files/raw/{segments}'const response = await fetch('/backend/step-files/raw/{segments}', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/step-files/raw/{segments}')
data = response.json()"<binary>"/step-files/seek
Returns a bounded file chunk. Specify exactly one of line or offset and a nonzero signed byte count: positive bytes read forward from the anchor; negative bytes read backward and end at the anchor.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringquerypathstringrequiredquerylineinteger[-9223372036854776000, 9223372036854776000]queryoffsetinteger[-9223372036854776000, 9223372036854776000]querybytesinteger[-9223372036854776000, 9223372036854776000]requiredqueryResponse
Invalid bytes or offset or line or path or commit or id
curl -X GET '/backend/step-files/seek'const response = await fetch('/backend/step-files/seek', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/step-files/seek')
data = response.json(){
"content": "string",
"endLine": -9223372036854776000,
"endOffset": -9223372036854776000,
"eof": true,
"startLine": -9223372036854776000,
"startOffset": -9223372036854776000
}step-log
/step-log
Returns the build log of a step.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringqueryResponse
Invalid commit or id
curl -X GET '/backend/step-log'const response = await fetch('/backend/step-log', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/step-log')
data = response.json()stringstep-review
/step-review
Records the viewed revision as a step's reviewed revision, together with who reviewed it and their comments, when there is no review or its output is unchanged. Returns whether the viewed output differs from the reviewed one.
Body
reviewCommentsstringrequiredreviewedBystringrequiredParameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringqueryResponse
Invalid body or commit or id
curl -X POST '/backend/step-review' \
-H 'Content-Type: application/json;charset=utf-8' \
-d '{
"reviewComments": "string",
"reviewedBy": "string"
}'const response = await fetch('/backend/step-review', {
method: 'POST',
headers: {
'Content-Type': 'application/json;charset=utf-8',
},
body: JSON.stringify({
"reviewComments": "string",
"reviewedBy": "string"
}),
});
const data = await response.json();import requests
payload = {
"reviewComments": "string",
"reviewedBy": "string"
}
response = requests.post('/backend/step-review', json=payload)
data = response.json(){
"reviewComments": "string",
"reviewedBy": "string"
}true/step-review
Removes a step's review.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredqueryResponse
Invalid id
curl -X DELETE '/backend/step-review'const response = await fetch('/backend/step-review', {
method: 'DELETE',
});
const data = await response.json();import requests
response = requests.delete('/backend/step-review')
data = response.json()step-status-stream
/step-status-stream
Streams snapshot and heartbeat SSE events for every project's steps.
Response
curl -X GET '/backend/step-status-stream'const response = await fetch('/backend/step-status-stream', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/step-status-stream')
data = response.json()<binary>stop-step
/stop-step
Stops a running step build.
Parameters
idinteger[-9223372036854776000, 9223372036854776000]requiredquerycommitstringqueryResponse
Invalid commit or id
curl -X POST '/backend/stop-step'const response = await fetch('/backend/stop-step', {
method: 'POST',
});
const data = await response.json();import requests
response = requests.post('/backend/stop-step')
data = response.json()unfiled
/unfiled
Returns steps not linked from any project, with evaluated definitions, optionally at a specific user-repo commit. Unreadable raw project links fail the request. Step definitions carry lastModifiedAt and createdAt.
Parameters
commitstringqueryResponse
Invalid commit
curl -X GET '/backend/unfiled'const response = await fetch('/backend/unfiled', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/unfiled')
data = response.json(){}upload
/upload
Stages files uploaded into a step's source directory and starts an ingest job.
Body
filesArray<string>requiredParameters
idinteger[-9223372036854776000, 9223372036854776000]requiredqueryResponse
Invalid id
curl -X POST '/backend/upload' \
-H 'Content-Type: multipart/form-data' \
-d '{
"files": [
"<binary>"
]
}'const response = await fetch('/backend/upload', {
method: 'POST',
headers: {
'Content-Type': 'multipart/form-data',
},
body: JSON.stringify({
"files": [
"<binary>"
]
}),
});
const data = await response.json();import requests
payload = {
"files": [
"<binary>"
]
}
response = requests.post('/backend/upload', json=payload)
data = response.json(){
"files": [
"<binary>"
]
}stringuser-repo-info
/user-repo-info
Returns the configured user repository URL and branch.
Response
curl -X GET '/backend/user-repo-info'const response = await fetch('/backend/user-repo-info', {
method: 'GET',
});
const data = await response.json();import requests
response = requests.get('/backend/user-repo-info')
data = response.json(){
"branch": "string",
"url": "string"
}Models
AgentApplyView
objectinvalidatedProjectIdsArray<integer>requiredinvalidatedStepIdsArray<integer>requiredsessionViewAgentSessionViewrequired{
"invalidatedProjectIds": [
-9223372036854776000
],
"invalidatedStepIds": [
-9223372036854776000
],
"sessionView": {
"gitState": {
"branchDiff": "string",
"commitLog": "string",
"hasAgentCommits": true,
"headCommit": "string"
},
"session": {
"activeTurnId": "string",
"agentBranch": "string",
"agentCurrentProjectId": -9223372036854776000,
"baseCommit": "string",
"createdAt": "2016-07-22T00:00:00Z",
"lastError": "string",
"preparedApply": {
"agentHead": "string",
"candidateHead": "string",
"candidateWorktree": "string",
"targetHead": "string"
},
"sessionId": "string",
"sessionName": "string",
"status": "string",
"targetBranch": "string",
"updatedAt": "2016-07-22T00:00:00Z",
"worktreePath": "string"
},
"turns": [
{
"turnExitCode": -9223372036854776000,
"turnFinishedAt": "2016-07-22T00:00:00Z",
"turnId": "string",
"turnLog": "string",
"turnLogPath": "string",
"turnPrompt": "string",
"turnSessionId": "string",
"turnStartedAt": "2016-07-22T00:00:00Z",
"turnStatus": "string"
}
]
}
}AgentGitState
objectbranchDiffstringrequiredcommitLogstringrequiredhasAgentCommitsbooleanrequiredheadCommitstringrequired{
"branchDiff": "string",
"commitLog": "string",
"hasAgentCommits": true,
"headCommit": "string"
}AgentSession
objectactiveTurnIdstringagentBranchstringrequiredagentCurrentProjectIdinteger[-9223372036854776000, 9223372036854776000]baseCommitstringrequiredcreatedAtUTCTime<yyyy-mm-ddThh:MM:ssZ>requiredlastErrorstringpreparedApplyPreparedApplysessionIdstringrequiredsessionNamestringstatusstringrequiredtargetBranchstringrequiredupdatedAtUTCTime<yyyy-mm-ddThh:MM:ssZ>requiredworktreePathstringrequired{
"activeTurnId": "string",
"agentBranch": "string",
"agentCurrentProjectId": -9223372036854776000,
"baseCommit": "string",
"createdAt": "2016-07-22T00:00:00Z",
"lastError": "string",
"preparedApply": {
"agentHead": "string",
"candidateHead": "string",
"candidateWorktree": "string",
"targetHead": "string"
},
"sessionId": "string",
"sessionName": "string",
"status": "string",
"targetBranch": "string",
"updatedAt": "2016-07-22T00:00:00Z",
"worktreePath": "string"
}AgentSessionSummary
objecthasCommitsbooleanrequiredsessionAgentSessionrequiredtitlestringrequiredturnCountinteger[-9223372036854776000, 9223372036854776000]required{
"hasCommits": true,
"session": {
"activeTurnId": "string",
"agentBranch": "string",
"agentCurrentProjectId": -9223372036854776000,
"baseCommit": "string",
"createdAt": "2016-07-22T00:00:00Z",
"lastError": "string",
"preparedApply": {
"agentHead": "string",
"candidateHead": "string",
"candidateWorktree": "string",
"targetHead": "string"
},
"sessionId": "string",
"sessionName": "string",
"status": "string",
"targetBranch": "string",
"updatedAt": "2016-07-22T00:00:00Z",
"worktreePath": "string"
},
"title": "string",
"turnCount": -9223372036854776000
}AgentSessionView
objectgitStateAgentGitStaterequiredsessionAgentSessionrequiredturnsArray<AgentTurn>required{
"gitState": {
"branchDiff": "string",
"commitLog": "string",
"hasAgentCommits": true,
"headCommit": "string"
},
"session": {
"activeTurnId": "string",
"agentBranch": "string",
"agentCurrentProjectId": -9223372036854776000,
"baseCommit": "string",
"createdAt": "2016-07-22T00:00:00Z",
"lastError": "string",
"preparedApply": {
"agentHead": "string",
"candidateHead": "string",
"candidateWorktree": "string",
"targetHead": "string"
},
"sessionId": "string",
"sessionName": "string",
"status": "string",
"targetBranch": "string",
"updatedAt": "2016-07-22T00:00:00Z",
"worktreePath": "string"
},
"turns": [
{
"turnExitCode": -9223372036854776000,
"turnFinishedAt": "2016-07-22T00:00:00Z",
"turnId": "string",
"turnLog": "string",
"turnLogPath": "string",
"turnPrompt": "string",
"turnSessionId": "string",
"turnStartedAt": "2016-07-22T00:00:00Z",
"turnStatus": "string"
}
]
}AgentTurn
objectturnExitCodeinteger[-9223372036854776000, 9223372036854776000]turnFinishedAtUTCTime<yyyy-mm-ddThh:MM:ssZ>turnIdstringrequiredturnLogstringrequiredturnLogPathstringrequiredturnPromptstringrequiredturnSessionIdstringrequiredturnStartedAtUTCTime<yyyy-mm-ddThh:MM:ssZ>requiredturnStatusstringrequired{
"turnExitCode": -9223372036854776000,
"turnFinishedAt": "2016-07-22T00:00:00Z",
"turnId": "string",
"turnLog": "string",
"turnLogPath": "string",
"turnPrompt": "string",
"turnSessionId": "string",
"turnStartedAt": "2016-07-22T00:00:00Z",
"turnStatus": "string"
}AgentUsage
objectappliedSessionsinteger[-9223372036854776000, 9223372036854776000]requireddiscardedSessionsinteger[-9223372036854776000, 9223372036854776000]requiredopenSessionsinteger[-9223372036854776000, 9223372036854776000]requiredrunningSessionsinteger[-9223372036854776000, 9223372036854776000]requiredtotalSessionsinteger[-9223372036854776000, 9223372036854776000]required{
"appliedSessions": -9223372036854776000,
"discardedSessions": -9223372036854776000,
"openSessions": -9223372036854776000,
"runningSessions": -9223372036854776000,
"totalSessions": -9223372036854776000
}AutocompleteRequest
objectautocompletestringrequiredcontextobjectrequiredlimitinteger[-9223372036854776000, 9223372036854776000]querystringrequiredtemplatestringrequired{
"autocomplete": "string",
"context": {},
"limit": -9223372036854776000,
"query": "string",
"template": "string"
}ChildRef
objectA step or project child of a project.
stepobjectrequiredprojectobjectrequired{
"step": {
"id": 0
}
}ConfirmApplyRequest
objectcandidateHeadstringrequiredsessionIdstringrequiredtargetHeadstringrequired{
"candidateHead": "string",
"sessionId": "string",
"targetHead": "string"
}DirEntry
objectisDirbooleanrequiredmimeTypestringnamestringrequiredseekablebooleanrequiredsizeintegerrequiredviewablebooleanrequired{
"isDir": true,
"mimeType": "string",
"name": "string",
"seekable": true,
"size": 0,
"viewable": true
}FileChunk
objectcontentstringrequiredendLineinteger[-9223372036854776000, 9223372036854776000]requiredendOffsetinteger[-9223372036854776000, 9223372036854776000]requiredeofbooleanrequiredstartLineinteger[-9223372036854776000, 9223372036854776000]requiredstartOffsetinteger[-9223372036854776000, 9223372036854776000]required{
"content": "string",
"endLine": -9223372036854776000,
"endOffset": -9223372036854776000,
"eof": true,
"startLine": -9223372036854776000,
"startOffset": -9223372036854776000
}PreparedApply
objectagentHeadstringrequiredcandidateHeadstringrequiredcandidateWorktreestringrequiredtargetHeadstringrequired{
"agentHead": "string",
"candidateHead": "string",
"candidateWorktree": "string",
"targetHead": "string"
}ProjectFields
objectA project's name and exactly one of preset or templates.
namestringrequiredpresetstringtemplatesArray<string>{
"name": "string",
"preset": "string",
"templates": [
"string"
]
}RenameSessionRequest
objectnamestringrequiredsessionIdstringrequired{
"name": "string",
"sessionId": "string"
}ReviewRequest
objectreviewCommentsstringrequiredreviewedBystringrequired{
"reviewComments": "string",
"reviewedBy": "string"
}ScratchEntry
objectdirectorybooleanrequirednamestringrequiredsizeinteger | nullrequired{
"directory": true,
"name": "string",
"size": 0
}ScratchListing
objectentriesArray<ScratchEntry>requiredpathstringrequired{
"entries": [
{
"directory": true,
"name": "string",
"size": 0
}
],
"path": "string"
}StepReviewReport
objectcomparisonstringrequiredcomparisonDetailstringrequiredreviewCommentsstringrequiredreviewedBystringrequiredreviewedRevisionstringrequiredreviewedStatusstringrequiredreviewedStatusErrorstringrequired{
"comparison": "string",
"comparisonDetail": "string",
"reviewComments": "string",
"reviewedBy": "string",
"reviewedRevision": "string",
"reviewedStatus": "string",
"reviewedStatusError": "string"
}TreeOp
objectOne project tree operation: update {project,fields}; link or unlink {parent,child}; order {parent,children}; hide {parent,child,hidden}; delete {child}.
childobject | objectA step or project child of a project.
childrenArray<ChildRef>fieldsProjectFieldsA project's name and exactly one of preset or templates.
hiddenbooleanopstringrequiredOne of update, link, unlink, order, hide, delete.
parentintegerprojectinteger{
"child": {
"step": {
"id": 0
}
},
"children": [
{
"step": {
"id": 0
}
}
],
"fields": {
"name": "string",
"preset": "string",
"templates": [
"string"
]
},
"hidden": true,
"op": "string",
"parent": 0,
"project": 0
}