Skip to content
nikcli
Docs
Documentation

Mobile · Sessions

Session endpoints shaped for the mobile app: list and create, send a message, stream updates, answer permissions and questions, read diffs and todos, and teleport a session between hosts.

Playground

Send these requests to your own running server. Values stay in this browser.

Not connected
How this works

Start a server with nikcli serve --hostname 127.0.0.1 --port 4096. Requests go straight from this page to that address — the browser allows it because loopback counts as a secure origin, and the server allows it because nikcli-ai.dev is in its CORS allowlist.

To try things without touching your real sessions or config, start the server with NIKCLI_TEST_HOME pointed at a throwaway directory — see the guided tour.

Operations

21 endpoints, generated from the server's own OpenAPI document. Every path also accepts the directory and workspace query parameters that select which instance handles the request.

get /mobile/session mobile.session.list
post /mobile/session mobile.session.create
get /mobile/session/{sessionID} mobile.session.detail
delete /mobile/session/{sessionID} mobile.session.delete
get /mobile/session/{sessionID}/diff/{messageID} mobile.session.diff
get /mobile/session/{sessionID}/command mobile.session.command.list
post /mobile/session/{sessionID}/command mobile.session.command
post /mobile/session/{sessionID}/message mobile.session.message
post /mobile/session/{sessionID}/abort mobile.session.abort
post /mobile/session/{sessionID}/permissions/{permissionID} mobile.permission.respond
post /mobile/session/{sessionID}/question/{requestID} mobile.question.respond
delete /mobile/session/{sessionID}/question/{requestID} mobile.question.reject
post /mobile/session/{sessionID}/publish mobile.github.session.publish
post /mobile/session/{sessionID}/cleanup mobile.github.session.cleanup
get /mobile/session/{sessionID}/stream mobile.session.stream
post /mobile/session/{sessionID}/rename mobile.session.rename
get /mobile/session/{sessionID}/todo mobile.session.todo
post /mobile/teleport/upload mobile.session.teleport.upload.begin
post /mobile/teleport/upload/{uploadID} mobile.session.teleport.upload.chunk
post /mobile/teleport mobile.session.teleport
post /mobile/session/{sessionID}/teleport mobile.session.teleport.out

Session

get /mobile/session # mobile.session.list
Parameters
Name In Type Required
limit query string | null optional
search query string | null optional
directory query string optional
workspace query string optional
Responses
200 Success application/json
({
  info: Session_1
  status?: SessionStatus | null
})[]
Example response from schema
[
  {
    "info": {
      "id": "",
      "slug": "",
      "projectID": "",
      "directory": "",
      "parentID": "",
      "workspaceID": "",
      "summary": {
        "additions": null,
        "deletions": null,
        "files": null,
        "diffs": null
      },
      "share": {
        "url": null
      },
      "github": {
        "owner": null,
        "repo": null,
        "fullName": null,
        "baseBranch": null,
        "headBranch": null,
        "repositoryDirectory": null,
        "cloneUrl": null,
        "htmlUrl": null,
        "private": null,
        "worktree": null,
        "pullRequest": null,
        "lastCommitSha": null,
        "publishedAt": null,
        "publishError": null
      },
      "worktree": {
        "name": null,
        "branch": null,
        "directory": null,
        "repositoryDirectory": null,
        "cleanedAt": null
      },
      "mobile": {
        "platforms": null,
        "primaryPlatform": null,
        "method": null,
        "detectedAt": null,
        "buildStatus": null,
        "lastBuildAt": null,
        "artifacts": null
      },
      "title": "",
      "activeCommand": "",
      "version": "",
      "time": {
        "created": null,
        "updated": null,
        "compacting": null,
        "archived": null
      },
      "permission": [],
      "skills": [],
      "disabledInstructions": [],
      "disabledTools": {},
      "revert": {
        "messageID": null,
        "partID": null,
        "snapshot": null,
        "diff": null
      },
      "lastModel": {
        "providerID": null,
        "modelID": null
      }
    },
    "status": {
      "type": "idle"
    }
  }
]

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.list
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.list({
  ...
})
Try it
post /mobile/session # mobile.session.create
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  parentID?: string | null
  title?: string | null
  permission?: PermissionRuleset_2 | null
  github?: SessionGithub_2 | null
  executionTarget?: MobileExecutionTarget_1 | null
}
Responses
200 Session application/json
{
  id: string
  slug: string
  projectID: string
  directory: string
  parentID?: string
  workspaceID?: string
  summary?: {
    additions: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    deletions: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    files: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    diffs?: FileDiff_2[]
  }
  share?: {
    url: string
  }
  github?: SessionGithub_3
  worktree?: SessionWorktree_6
  mobile?: SessionMobile_2
  title: string
  activeCommand?: string
  version: string
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    updated: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    compacting?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    archived?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  permission?: PermissionRuleset_3
  skills?: string[]
  disabledInstructions?: string[]
  disabledTools?: {
    [key: string]: boolean
  }
  revert?: {
    messageID: string
    partID?: string
    snapshot?: string
    diff?: string
  }
  lastModel?: {
    providerID: string
    modelID: string
  }
}
Example response from schema
{
  "id": "",
  "slug": "",
  "projectID": "",
  "directory": "",
  "parentID": "",
  "workspaceID": "",
  "summary": {
    "additions": 0,
    "deletions": 0,
    "files": 0,
    "diffs": [
      {
        "file": null,
        "patch": null,
        "additions": null,
        "deletions": null,
        "status": null,
        "before": null,
        "after": null
      }
    ]
  },
  "share": {
    "url": ""
  },
  "github": {
    "owner": "",
    "repo": "",
    "fullName": "",
    "baseBranch": "",
    "headBranch": "",
    "repositoryDirectory": "",
    "cloneUrl": "",
    "htmlUrl": "",
    "private": false,
    "worktree": {
      "name": "",
      "branch": "",
      "directory": "",
      "repositoryDirectory": "",
      "cleanedAt": 0
    },
    "pullRequest": {
      "number": 0,
      "url": "",
      "title": ""
    },
    "lastCommitSha": "",
    "publishedAt": 0,
    "publishError": ""
  },
  "worktree": {
    "name": "",
    "branch": "",
    "directory": "",
    "repositoryDirectory": "",
    "cleanedAt": 0
  },
  "mobile": {
    "platforms": [
      "ios"
    ],
    "primaryPlatform": "",
    "method": "",
    "detectedAt": 0,
    "buildStatus": "unknown",
    "lastBuildAt": 0,
    "artifacts": [
      {
        "platform": null,
        "path": null,
        "size": null,
        "createdAt": null
      }
    ]
  },
  "title": "",
  "activeCommand": "",
  "version": "",
  "time": {
    "created": 0,
    "updated": 0,
    "compacting": 0,
    "archived": 0
  },
  "permission": [
    {
      "permission": "",
      "pattern": "",
      "action": "allow"
    }
  ],
  "skills": [
    ""
  ],
  "disabledInstructions": [
    ""
  ],
  "disabledTools": {},
  "revert": {
    "messageID": "",
    "partID": "",
    "snapshot": "",
    "diff": ""
  },
  "lastModel": {
    "providerID": "",
    "modelID": ""
  }
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.create
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.create({
  ...
})
Try it

{SessionID}

get /mobile/session/{sessionID} # mobile.session.detail
Parameters
Name In Type Required
sessionID path string required
directory query string optional
workspace query string optional
Responses
200 MobileSessionDetail application/json
{
  info: Session_3
  status?: SessionStatus_1 | null
  messages: ({
    info: Message
    parts: Part[]
  })[]
  artifacts: MobileArtifact[]
  permissions: PermissionRequest[]
  questions: QuestionRequest[]
}
Example response from schema
{
  "info": {
    "id": "",
    "slug": "",
    "projectID": "",
    "directory": "",
    "parentID": "",
    "workspaceID": "",
    "summary": {
      "additions": 0,
      "deletions": 0,
      "files": 0,
      "diffs": []
    },
    "share": {
      "url": ""
    },
    "github": {
      "owner": "",
      "repo": "",
      "fullName": "",
      "baseBranch": "",
      "headBranch": "",
      "repositoryDirectory": "",
      "cloneUrl": "",
      "htmlUrl": "",
      "private": false,
      "worktree": {
        "name": null,
        "branch": null,
        "directory": null,
        "repositoryDirectory": null,
        "cleanedAt": null
      },
      "pullRequest": {
        "number": null,
        "url": null,
        "title": null
      },
      "lastCommitSha": "",
      "publishedAt": 0,
      "publishError": ""
    },
    "worktree": {
      "name": "",
      "branch": "",
      "directory": "",
      "repositoryDirectory": "",
      "cleanedAt": 0
    },
    "mobile": {
      "platforms": [],
      "primaryPlatform": "",
      "method": "",
      "detectedAt": 0,
      "buildStatus": "unknown",
      "lastBuildAt": 0,
      "artifacts": []
    },
    "title": "",
    "activeCommand": "",
    "version": "",
    "time": {
      "created": 0,
      "updated": 0,
      "compacting": 0,
      "archived": 0
    },
    "permission": [
      {
        "permission": null,
        "pattern": null,
        "action": null
      }
    ],
    "skills": [
      ""
    ],
    "disabledInstructions": [
      ""
    ],
    "disabledTools": {},
    "revert": {
      "messageID": "",
      "partID": "",
      "snapshot": "",
      "diff": ""
    },
    "lastModel": {
      "providerID": "",
      "modelID": ""
    }
  },
  "status": {
    "type": "idle"
  },
  "messages": [
    {
      "info": {
        "id": null,
        "sessionID": null,
        "role": null,
        "time": null,
        "format": null,
        "summary": null,
        "agent": null,
        "model": null,
        "system": null,
        "tools": null,
        "variant": null
      },
      "parts": []
    }
  ],
  "artifacts": [
    {
      "id": "",
      "title": "",
      "description": "",
      "filename": "",
      "contentType": "",
      "kind": "html",
      "url": "",
      "viewerUrl": "",
      "previewUrl": "",
      "version": 0,
      "sessionID": "",
      "size": 0,
      "time": {
        "created": null,
        "updated": null
      }
    }
  ],
  "permissions": [
    {
      "id": "",
      "sessionID": "",
      "permission": "",
      "patterns": [],
      "metadata": {},
      "always": [],
      "tool": {
        "messageID": null,
        "callID": null
      }
    }
  ],
  "questions": [
    {
      "id": "",
      "sessionID": "",
      "questions": [],
      "tool": {
        "messageID": null,
        "callID": null
      }
    }
  ]
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.detail
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.detail({
  ...
})
Try it
delete /mobile/session/{sessionID} # mobile.session.delete
Parameters
Name In Type Required
sessionID path string required
directory query string optional
workspace query string optional
Responses
200 MobileSuccess application/json
{
  success: true
}
Example response from schema
{
  "success": true
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.delete
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.delete({
  ...
})
Try it

This changes or removes server state, against whatever base URL is set above.

get /mobile/session/{sessionID}/diff/{messageID} # mobile.session.diff
Parameters
Name In Type Required
sessionID path string required
messageID path string required
directory query string optional
workspace query string optional
Responses
200 Success application/json
({
  file: string
  patch: string
  additions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  deletions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  status?: 
    | "added" | "deleted" | "modified"
    | null
  before: string
  after: string
})[]
Example response from schema
[
  {
    "file": "",
    "patch": "",
    "additions": 0,
    "deletions": 0,
    "status": "added",
    "before": "",
    "after": ""
  }
]

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.diff
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.diff({
  ...
})
Try it
get /mobile/session/{sessionID}/command # mobile.session.command.list
Parameters
Name In Type Required
sessionID path string required
directory query string optional
workspace query string optional
Responses
200 Success application/json
({
  name: string
  description?: string | null
  agent?: string | null
  model?: string | null
  mcp?: boolean | null
  skill?: boolean | null
  subtask?: boolean | null
  hints: string[]
})[]
Example response from schema
[
  {
    "name": "",
    "description": "",
    "agent": "",
    "model": "",
    "mcp": false,
    "skill": false,
    "subtask": false,
    "hints": [
      ""
    ]
  }
]

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.command.list
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.command.list({
  ...
})
Try it
post /mobile/session/{sessionID}/command # mobile.session.command
Parameters
Name In Type Required
sessionID path string required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  command: string
  arguments?: string | null
  agent?: string | null
  model?: 
    | {
    providerID: string
    modelID: string
  }
    | null
  variant?: string | null
}
Responses
400 MobileBadRequest application/json
{
  name: "BadRequest"
  error: string
}
Example response from schema
{
  "info": {
    "id": "",
    "sessionID": "",
    "role": "user",
    "time": {
      "created": 0
    },
    "format": {
      "type": "text"
    },
    "summary": {
      "title": "",
      "body": "",
      "diffs": []
    },
    "agent": "",
    "model": {
      "providerID": "",
      "modelID": ""
    },
    "system": "",
    "tools": {},
    "variant": ""
  },
  "parts": [
    {
      "id": "",
      "sessionID": "",
      "messageID": "",
      "type": "text",
      "text": "",
      "synthetic": false,
      "ignored": false,
      "time": {
        "start": null,
        "end": null
      },
      "metadata": {}
    }
  ]
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.command
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.command({
  ...
})
Try it
post /mobile/session/{sessionID}/message # mobile.session.message
Parameters
Name In Type Required
sessionID path string required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  messageID?: string | null
  delivery?: "steer" | "queue" | null
  model?: 
    | {
    providerID: string
    modelID: string
  }
    | null
  agent?: string | null
  noReply?: boolean | null
  tools?: 
    | {
    [key: string]: boolean
  }
    | null
  format?: OutputFormat_2 | null
  system?: string | null
  variant?: string | null
  parts: (TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput)[]
  parentSessionID?: string | null
}
Responses
202 MobileAccepted application/json
{
  accepted: true
}
400 MobileBadRequest application/json
{
  name: "BadRequest"
  error: string
}
Example response from schema
{
  "accepted": true
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.message
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.message({
  ...
})
Try it
post /mobile/session/{sessionID}/abort # mobile.session.abort
Parameters
Name In Type Required
sessionID path string required
directory query string optional
workspace query string optional
Responses
200 MobileSuccess application/json
{
  success: true
}
Example response from schema
{
  "success": true
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.abort
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.abort({
  ...
})
Try it
post /mobile/session/{sessionID}/permissions/{permissionID} # mobile.permission.respond
Parameters
Name In Type Required
sessionID path string required
permissionID path string required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  response: "once" | "always" | "reject"
}
Responses
200 MobileSuccess application/json
{
  success: true
}
Example response from schema
{
  "success": true
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.permission.respond
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.permission.respond({
  ...
})
Try it
post /mobile/session/{sessionID}/question/{requestID} # mobile.question.respond
Parameters
Name In Type Required
sessionID path string required
requestID path string required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  answers: string[][]
}
Responses
200 MobileSuccess application/json
{
  success: true
}
Example response from schema
{
  "success": true
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.question.respond
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.question.respond({
  ...
})
Try it
delete /mobile/session/{sessionID}/question/{requestID} # mobile.question.reject
Parameters
Name In Type Required
sessionID path string required
requestID path string required
directory query string optional
workspace query string optional
Responses
200 MobileSuccess application/json
{
  success: true
}
Example response from schema
{
  "success": true
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.question.reject
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.question.reject({
  ...
})
Try it

This changes or removes server state, against whatever base URL is set above.

post /mobile/session/{sessionID}/publish # mobile.github.session.publish
Parameters
Name In Type Required
sessionID path string required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  title?: string | null
  body?: string | null
  commitMessage?: string | null
}
Responses
200 MobileGithubPublishResult application/json
{
  commitSha: string
  branch: string
  pullRequest: {
    number: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    url: string
    title: string
  }
}
400 MobileBadRequest application/json
{
  name: "BadRequest"
  error: string
}
401 MobileUnauthorized application/json
{
  name: "Unauthorized"
  error: string
}
Example response from schema
{
  "commitSha": "",
  "branch": "",
  "pullRequest": {
    "number": 0,
    "url": "",
    "title": ""
  }
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.github.session.publish
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.github.session.publish({
  ...
})
Try it
post /mobile/session/{sessionID}/cleanup # mobile.github.session.cleanup
Parameters
Name In Type Required
sessionID path string required
directory query string optional
workspace query string optional
Responses
200 MobileSuccess application/json
{
  success: true
}
400 MobileBadRequest application/json
{
  name: "BadRequest"
  error: string
}
Example response from schema
{
  "success": true
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.github.session.cleanup
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.github.session.cleanup({
  ...
})
Try it
get /mobile/session/{sessionID}/stream # mobile.session.stream
Parameters
Name In Type Required
sessionID path string required
directory query string optional
workspace query string optional
Responses
200 Success text/event-stream
{
  id: string | null
  event: string
  data: string
}
Example response from schema
{
  "id": "",
  "event": "",
  "data": ""
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.stream
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.stream({
  ...
})
Try it
post /mobile/session/{sessionID}/rename # mobile.session.rename
Parameters
Name In Type Required
sessionID path string required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  title: string
}
Responses
200 MobileSuccess application/json
{
  success: true
}
404 MobileNotFound application/json
{
  name: "NotFoundError"
  error: string
}
Example response from schema
{
  "success": true
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.rename
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.rename({
  ...
})
Try it
get /mobile/session/{sessionID}/todo # mobile.session.todo
Parameters
Name In Type Required
sessionID path string required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  todos: ({
    // Brief description of the task
    content: string
    // Current status of the task: pending, in_progress, completed, cancelled
    status: string
    // Priority level of the task: high, medium, low
    priority: string
    // Unique identifier for the todo item
    id: string
  })[]
}
Example response from schema
{
  "todos": [
    {
      "content": "",
      "status": "",
      "priority": "",
      "id": ""
    }
  ]
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.todo
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.todo({
  ...
})
Try it
post /mobile/session/{sessionID}/teleport # mobile.session.teleport.out
Parameters
Name In Type Required
sessionID path string required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  url: string
  token: string
  content?: boolean | null
  includeGit?: boolean | null
}
Responses
200 MobileTeleportResult application/json
{
  sessionID: string
  title?: string | null
  messageCount: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  directory?: string | null
  workspace: boolean
}
400 MobileBadRequest application/json
{
  name: "BadRequest"
  error: string
}
404 MobileNotFound application/json
{
  name: "NotFoundError"
  error: string
}
Example response from schema
{
  "sessionID": "",
  "title": "",
  "messageCount": 0,
  "directory": "",
  "workspace": false
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.teleport.out
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.teleport.out({
  ...
})
Try it

Upload

post /mobile/teleport/upload # mobile.session.teleport.upload.begin
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  uploadID: string
}
Example response from schema
{
  "uploadID": ""
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.teleport.upload.begin
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.teleport.upload.begin({
  ...
})
Try it
post /mobile/teleport/upload/{uploadID} # mobile.session.teleport.upload.chunk
Parameters
Name In Type Required
uploadID path string required
directory query string optional
workspace query string optional
Responses
200 Success application/json
{
  ok: boolean
}
Example response from schema
{
  "ok": false
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.teleport.upload.chunk
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.teleport.upload.chunk({
  ...
})
Try it

Teleport

post /mobile/teleport # mobile.session.teleport
Parameters
Name In Type Required
directory query string optional
workspace query string optional
Request body · required · application/json
{
  title?: string | null
  name?: string | null
  origin?: string | null
  permission?: PermissionRuleset_5 | null
  messages: ({
    info: Message_2
    parts: Part_2[]
  })[]
  uploadID?: string | null
}
Responses
200 MobileTeleportResult application/json
{
  sessionID: string
  title?: string | null
  messageCount: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  directory?: string | null
  workspace: boolean
}
400 MobileBadRequest application/json
{
  name: "BadRequest"
  error: string
}
Example response from schema
{
  "sessionID": "",
  "title": "",
  "messageCount": 0,
  "directory": "",
  "workspace": false
}

Generated from the response schema — field values are placeholders, the shape is real.

SDK example
mobile.session.teleport
ts
import { createNikcliClient } from "@nikcli-ai/sdk/httpapi"

const client = createNikcliClient()
await client.mobile.session.teleport({
  ...
})
Try it

Schemas

The 217 schemas reachable from these endpoints. Each is shown one level deep; nested types link to their own entry below. Names ending in _2, _3 and so on are the OpenAPI emitter disambiguating same-named schemas declared by different HttpApi groups — they are distinct shapes, not duplicates.

AgentPart
{
  id: string
  sessionID: string
  messageID: string
  type: "agent"
  name: string
  source?: 
    | {
    value: string
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
    | null
}
AgentPart_1
{
  id: string
  sessionID: string
  messageID: string
  type: "agent"
  name: string
  source?: {
    value: string
    start: number
    end: number
  }
}
AgentPart_2
{
  id: string
  sessionID: string
  messageID: string
  type: "agent"
  name: string
  source?: 
    | {
    value: string
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
    | null
}
AgentPartInput
{
  id?: string | null
  type: "agent"
  name: string
  source?: 
    | {
    value: string
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
    | null
}
APIError
{
  name: "APIError"
  data: {
    message: string
    statusCode?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    isRetryable: boolean
    responseHeaders?: 
      | {
      [key: string]: string
    }
      | null
    responseBody?: string | null
    metadata?: 
      | {
      [key: string]: string
    }
      | null
    classification?: "payload-too-large" | null
  }
}
APIError_1
{
  name: "APIError"
  data: {
    message: string
    statusCode?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    isRetryable: boolean
    responseHeaders?: 
      | {
      [key: string]: string
    }
      | null
    responseBody?: string | null
    metadata?: 
      | {
      [key: string]: string
    }
      | null
    classification?: "payload-too-large" | null
  }
}
APIError_2
{
  name: "APIError"
  data: {
    message: string
    statusCode?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    isRetryable: boolean
    responseHeaders?: {
      [key: string]: string
    }
    responseBody?: string
    metadata?: {
      [key: string]: string
    }
    classification?: "payload-too-large"
  }
}
APIError_3
{
  name: "APIError"
  data: {
    message: string
    statusCode?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    isRetryable: boolean
    responseHeaders?: 
      | {
      [key: string]: string
    }
      | null
    responseBody?: string | null
    metadata?: 
      | {
      [key: string]: string
    }
      | null
    classification?: "payload-too-large" | null
  }
}
APIError_4
{
  name: "APIError"
  data: {
    message: string
    statusCode?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    isRetryable: boolean
    responseHeaders?: 
      | {
      [key: string]: string
    }
      | null
    responseBody?: string | null
    metadata?: 
      | {
      [key: string]: string
    }
      | null
    classification?: "payload-too-large" | null
  }
}
AssistantMessage
{
  id: string
  sessionID: string
  role: "assistant"
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    completed?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
  error?: 
    | 
    | ProviderAuthError
    | UnknownError
    | MessageOutputLengthError
    | MessageContextOverflowError
    | MessageAbortedError
    | StructuredOutputError
    | APIError
    | null
  parentID: string
  modelID: string
  providerID: string
  mode: string
  agent: string
  path: {
    cwd: string
    root: string
  }
  summary?: boolean | null
  cost: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  tokens: {
    total?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    input: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    output: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    reasoning: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    cache: {
      read: 
        | number
        | "Infinity" | "-Infinity" | "NaN"
      write: 
        | number
        | "Infinity" | "-Infinity" | "NaN"
    }
  }
  structured?: unknown | null
  finish?: string | null
}
AssistantMessage_1
{
  id: string
  sessionID: string
  role: "assistant"
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    completed?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  error?: 
    | ProviderAuthError_1
    | UnknownError_1
    | MessageOutputLengthError_1
    | MessageContextOverflowError_1
    | MessageAbortedError_1
    | StructuredOutputError_1
    | APIError_2
  parentID: string
  modelID: string
  providerID: string
  mode: string
  agent: string
  path: {
    cwd: string
    root: string
  }
  summary?: boolean
  cost: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  tokens: {
    total?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    input: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    output: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    reasoning: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    cache: {
      read: 
        | number
        | "Infinity" | "-Infinity" | "NaN"
      write: 
        | number
        | "Infinity" | "-Infinity" | "NaN"
    }
  }
  structured?: unknown
  finish?: string
}
AssistantMessage_2
{
  id: string
  sessionID: string
  role: "assistant"
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    completed?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
  error?: 
    | 
    | ProviderAuthError_2
    | UnknownError_2
    | MessageOutputLengthError_2
    | MessageContextOverflowError_2
    | MessageAbortedError_2
    | StructuredOutputError_2
    | APIError_3
    | null
  parentID: string
  modelID: string
  providerID: string
  mode: string
  agent: string
  path: {
    cwd: string
    root: string
  }
  summary?: boolean | null
  cost: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  tokens: {
    total?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    input: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    output: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    reasoning: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    cache: {
      read: 
        | number
        | "Infinity" | "-Infinity" | "NaN"
      write: 
        | number
        | "Infinity" | "-Infinity" | "NaN"
    }
  }
  structured?: unknown | null
  finish?: string | null
}
CompactionPart
{
  id: string
  sessionID: string
  messageID: string
  type: "compaction"
  auto: boolean
}
CompactionPart_1
{
  id: string
  sessionID: string
  messageID: string
  type: "compaction"
  auto: boolean
}
CompactionPart_2
{
  id: string
  sessionID: string
  messageID: string
  type: "compaction"
  auto: boolean
}
FileDiff_1
{
  file: string
  patch: string
  additions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  deletions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  status?: 
    | "added" | "deleted" | "modified"
    | null
  before: string
  after: string
}
FileDiff_2
{
  file: string
  patch: string
  additions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  deletions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  status?: 
    | "added" | "deleted" | "modified"
    | null
  before: string
  after: string
}
FileDiff_3
{
  file: string
  patch: string
  additions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  deletions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  status?: 
    | "added" | "deleted" | "modified"
    | null
  before: string
  after: string
}
FileDiff_4
{
  file: string
  patch: string
  additions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  deletions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  status?: 
    | "added" | "deleted" | "modified"
    | null
  before: string
  after: string
}
FileDiff_5
{
  file: string
  patch: string
  additions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  deletions: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  status?: 
    | "added" | "deleted" | "modified"
    | null
  before: string
  after: string
}
FilePart
{
  id: string
  sessionID: string
  messageID: string
  type: "file"
  mime: string
  filename?: string | null
  url: string
  source?: FilePartSource | null
}
FilePart_1
{
  id: string
  sessionID: string
  messageID: string
  type: "file"
  mime: string
  filename?: string | null
  url: string
  source?: FilePartSource_1 | null
}
FilePart_2
{
  id: string
  sessionID: string
  messageID: string
  type: "file"
  mime: string
  filename?: string
  url: string
  source?: FilePartSource_2
}
FilePart_3
{
  id: string
  sessionID: string
  messageID: string
  type: "file"
  mime: string
  filename?: string | null
  url: string
  source?: FilePartSource_4 | null
}
FilePart_4
{
  id: string
  sessionID: string
  messageID: string
  type: "file"
  mime: string
  filename?: string | null
  url: string
  source?: FilePartSource_5 | null
}
FilePartInput
{
  id?: string | null
  type: "file"
  mime: string
  filename?: string | null
  url: string
  source?: FilePartSource_3 | null
}
FilePartSource
FileSource | SymbolSource | ResourceSource
FilePartSource_1
FileSource_1 | SymbolSource_1 | ResourceSource_1
FilePartSource_2
FileSource_2 | SymbolSource_2 | ResourceSource_2
FilePartSource_3
FileSource_3 | SymbolSource_3 | ResourceSource_3
FilePartSource_4
FileSource_4 | SymbolSource_4 | ResourceSource_4
FilePartSource_5
FileSource_5 | SymbolSource_5 | ResourceSource_5
FilePartSourceText
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_1
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_10
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_11
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_12
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_13
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_14
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_15
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_2
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_3
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_4
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_5
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_6
{
  value: string
  start: number
  end: number
}
FilePartSourceText_7
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_8
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FilePartSourceText_9
{
  value: string
  start: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  end: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
FileSource
{
  text: FilePartSourceText
  type: "file"
  path: string
}
FileSource_1
{
  text: FilePartSourceText_3
  type: "file"
  path: string
}
FileSource_2
{
  text: FilePartSourceText_6
  type: "file"
  path: string
}
FileSource_3
{
  text: FilePartSourceText_7
  type: "file"
  path: string
}
FileSource_4
{
  text: FilePartSourceText_10
  type: "file"
  path: string
}
FileSource_5
{
  text: FilePartSourceText_13
  type: "file"
  path: string
}
JSONSchema
{ [key: string]: unknown }
JSONSchema_1
{ [key: string]: unknown }
JSONSchema_2
{ [key: string]: unknown }
JSONSchema_3
{ [key: string]: unknown }
Message
UserMessage | AssistantMessage
Message_1
UserMessage_1 | AssistantMessage_1
Message_2
UserMessage_2 | AssistantMessage_2
MessageAbortedError
{
  name: "MessageAbortedError"
  data: {
    message: string
  }
}
MessageAbortedError_1
{
  name: "MessageAbortedError"
  data: {
    message: string
  }
}
MessageAbortedError_2
{
  name: "MessageAbortedError"
  data: {
    message: string
  }
}
MessageContextOverflowError
{
  name: "MessageContextOverflowError"
  data: {
    message: string
    statusCode?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    responseBody?: string | null
  }
}
MessageContextOverflowError_1
{
  name: "MessageContextOverflowError"
  data: {
    message: string
    statusCode?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    responseBody?: string
  }
}
MessageContextOverflowError_2
{
  name: "MessageContextOverflowError"
  data: {
    message: string
    statusCode?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    responseBody?: string | null
  }
}
MessageOutputLengthError
{
  name: "MessageOutputLengthError"
  data: { [key: string]: unknown } | unknown[]
}
MessageOutputLengthError_1
{
  name: "MessageOutputLengthError"
  data: { [key: string]: unknown } | unknown[]
}
MessageOutputLengthError_2
{
  name: "MessageOutputLengthError"
  data: { [key: string]: unknown } | unknown[]
}
MobileAccepted
{
  accepted: true
}
MobileArtifact
{
  id: string
  title: string
  description?: string | null
  filename: string
  contentType: string
  kind: 
    | "html"
    | "markdown"
    | "image"
    | "video"
    | "text"
  url: string
  viewerUrl: string
  previewUrl: string
  version: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  sessionID: string
  size: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    updated: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
MobileBadRequest
{
  name: "BadRequest"
  error: string
}
MobileCommand
{
  name: string
  description?: string | null
  agent?: string | null
  model?: string | null
  mcp?: boolean | null
  skill?: boolean | null
  subtask?: boolean | null
  hints: string[]
}
MobileExecutionTarget_1
"local" | "container"
MobileGithubPublishInput
{
  title?: string | null
  body?: string | null
  commitMessage?: string | null
}
MobileGithubPublishResult
{
  commitSha: string
  branch: string
  pullRequest: {
    number: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    url: string
    title: string
  }
}
MobileNotFound
{
  name: "NotFoundError"
  error: string
}
MobilePermissionRespondInput
{
  response: "once" | "always" | "reject"
}
MobileSessionCommandInput
{
  command: string
  arguments?: string | null
  agent?: string | null
  model?: 
    | {
    providerID: string
    modelID: string
  }
    | null
  variant?: string | null
}
MobileSessionCreateInput
{
  parentID?: string | null
  title?: string | null
  permission?: PermissionRuleset_2 | null
  github?: SessionGithub_2 | null
  executionTarget?: MobileExecutionTarget_1 | null
}
MobileSessionDetail
{
  info: Session_3
  status?: SessionStatus_1 | null
  messages: ({
    info: Message
    parts: Part[]
  })[]
  artifacts: MobileArtifact[]
  permissions: PermissionRequest[]
  questions: QuestionRequest[]
}
MobileSessionMessageInput
{
  messageID?: string | null
  delivery?: "steer" | "queue" | null
  model?: 
    | {
    providerID: string
    modelID: string
  }
    | null
  agent?: string | null
  noReply?: boolean | null
  tools?: 
    | {
    [key: string]: boolean
  }
    | null
  format?: OutputFormat_2 | null
  system?: string | null
  variant?: string | null
  parts: (TextPartInput | FilePartInput | AgentPartInput | SubtaskPartInput)[]
  parentSessionID?: string | null
}
MobileSessionSummary
{
  info: Session_1
  status?: SessionStatus | null
}
MobileSuccess
{
  success: true
}
MobileTeleportInput
{
  title?: string | null
  name?: string | null
  origin?: string | null
  permission?: PermissionRuleset_5 | null
  messages: ({
    info: Message_2
    parts: Part_2[]
  })[]
  uploadID?: string | null
}
MobileTeleportOutInput
{
  url: string
  token: string
  content?: boolean | null
  includeGit?: boolean | null
}
MobileTeleportResult
{
  sessionID: string
  title?: string | null
  messageCount: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  directory?: string | null
  workspace: boolean
}
MobileUnauthorized
{
  name: "Unauthorized"
  error: string
}
OutputFormat
OutputFormatText | OutputFormatJsonSchema
OutputFormat_1
OutputFormatText_1 | OutputFormatJsonSchema_1
OutputFormat_2
OutputFormatText_2 | OutputFormatJsonSchema_2
OutputFormat_3
OutputFormatText_3 | OutputFormatJsonSchema_3
OutputFormatJsonSchema
{
  type: "json_schema"
  schema: JSONSchema
  retryCount?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
}
OutputFormatJsonSchema_1
{
  type: "json_schema"
  schema: JSONSchema_1
  retryCount: number
}
OutputFormatJsonSchema_2
{
  type: "json_schema"
  schema: JSONSchema_2
  retryCount?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
}
OutputFormatJsonSchema_3
{
  type: "json_schema"
  schema: JSONSchema_3
  retryCount?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
}
OutputFormatText
{
  type: "text"
}
OutputFormatText_1
{
  type: "text"
}
OutputFormatText_2
{
  type: "text"
}
OutputFormatText_3
{
  type: "text"
}
Part
  | TextPart
  | SubtaskPart
  | ReasoningPart
  | FilePart
  | ToolPart
  | StepStartPart
  | StepFinishPart
  | SnapshotPart
  | PatchPart
  | AgentPart
  | RetryPart
  | CompactionPart
Part_1
  | TextPart_1
  | SubtaskPart_1
  | ReasoningPart_1
  | FilePart_2
  | ToolPart_1
  | StepStartPart_1
  | StepFinishPart_1
  | SnapshotPart_1
  | PatchPart_1
  | AgentPart_1
  | RetryPart_1
  | CompactionPart_1
Part_2
  | TextPart_2
  | SubtaskPart_2
  | ReasoningPart_2
  | FilePart_3
  | ToolPart_2
  | StepStartPart_2
  | StepFinishPart_2
  | SnapshotPart_2
  | PatchPart_2
  | AgentPart_2
  | RetryPart_2
  | CompactionPart_2
PatchPart
{
  id: string
  sessionID: string
  messageID: string
  type: "patch"
  hash: string
  files: string[]
}
PatchPart_1
{
  id: string
  sessionID: string
  messageID: string
  type: "patch"
  hash: string
  files: string[]
}
PatchPart_2
{
  id: string
  sessionID: string
  messageID: string
  type: "patch"
  hash: string
  files: string[]
}
PermissionAction_1
"allow" | "deny" | "ask"
PermissionAction_2
"allow" | "deny" | "ask"
PermissionAction_3
"allow" | "deny" | "ask"
PermissionAction_4
"allow" | "deny" | "ask"
PermissionAction_5
"allow" | "deny" | "ask"
PermissionRequest
{
  id: string
  sessionID: string
  permission: string
  patterns: string[]
  metadata: { [key: string]: unknown }
  always: string[]
  tool?: 
    | {
    messageID: string
    callID: string
  }
    | null
}
PermissionRule_1
{
  permission: string
  pattern: string
  action: PermissionAction_1
}
PermissionRule_2
{
  permission: string
  pattern: string
  action: PermissionAction_2
}
PermissionRule_3
{
  permission: string
  pattern: string
  action: PermissionAction_3
}
PermissionRule_4
{
  permission: string
  pattern: string
  action: PermissionAction_4
}
PermissionRule_5
{
  permission: string
  pattern: string
  action: PermissionAction_5
}
PermissionRuleset_1
PermissionRule_1[]
PermissionRuleset_2
PermissionRule_2[]
PermissionRuleset_3
PermissionRule_3[]
PermissionRuleset_4
PermissionRule_4[]
PermissionRuleset_5
PermissionRule_5[]
ProviderAuthError
{
  name: "ProviderAuthError"
  data: {
    providerID: string
    message: string
  }
}
ProviderAuthError_1
{
  name: "ProviderAuthError"
  data: {
    providerID: string
    message: string
  }
}
ProviderAuthError_2
{
  name: "ProviderAuthError"
  data: {
    providerID: string
    message: string
  }
}
QuestionInfo
{
  question: string
  header: string
  options: QuestionOption[]
  multiple?: boolean | null
  custom?: boolean | null
}
QuestionOption
{
  label: string
  description: string
}
QuestionRequest
{
  id: string
  sessionID: string
  questions: QuestionInfo[]
  tool?: 
    | {
    messageID: string
    callID: string
  }
    | null
}
Range
{
  start: {
    line: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    character: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  end: {
    line: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    character: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
Range_1
{
  start: {
    line: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    character: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  end: {
    line: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    character: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
Range_2
{
  start: {
    line: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    character: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  end: {
    line: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    character: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
Range_3
{
  start: {
    line: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    character: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  end: {
    line: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    character: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
Range_4
{
  start: {
    line: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    character: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  end: {
    line: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    character: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
Range_5
{
  start: {
    line: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    character: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  end: {
    line: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    character: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
ReasoningPart
{
  id: string
  sessionID: string
  messageID: string
  type: "reasoning"
  text: string
  metadata?: { [key: string]: unknown } | null
  time: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
}
ReasoningPart_1
{
  id: string
  sessionID: string
  messageID: string
  type: "reasoning"
  text: string
  metadata?: { [key: string]: unknown }
  time: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
ReasoningPart_2
{
  id: string
  sessionID: string
  messageID: string
  type: "reasoning"
  text: string
  metadata?: { [key: string]: unknown } | null
  time: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
}
ResourceSource
{
  text: FilePartSourceText_2
  type: "resource"
  clientName: string
  uri: string
}
ResourceSource_1
{
  text: FilePartSourceText_5
  type: "resource"
  clientName: string
  uri: string
}
ResourceSource_2
{
  text: FilePartSourceText_6
  type: "resource"
  clientName: string
  uri: string
}
ResourceSource_3
{
  text: FilePartSourceText_9
  type: "resource"
  clientName: string
  uri: string
}
ResourceSource_4
{
  text: FilePartSourceText_12
  type: "resource"
  clientName: string
  uri: string
}
ResourceSource_5
{
  text: FilePartSourceText_15
  type: "resource"
  clientName: string
  uri: string
}
RetryPart
{
  id: string
  sessionID: string
  messageID: string
  type: "retry"
  attempt: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  error: APIError_1
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
RetryPart_1
{
  id: string
  sessionID: string
  messageID: string
  type: "retry"
  attempt: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  error: APIError_2
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
RetryPart_2
{
  id: string
  sessionID: string
  messageID: string
  type: "retry"
  attempt: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  error: APIError_4
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
Session_1
{
  id: string
  slug: string
  projectID: string
  directory: string
  parentID?: string | null
  workspaceID?: string | null
  summary?: 
    | {
    additions: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    deletions: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    files: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    diffs?: FileDiff_1[] | null
  }
    | null
  share?: 
    | {
    url: string
  }
    | null
  github?: SessionGithub_1 | null
  worktree?: SessionWorktree_3 | null
  mobile?: SessionMobile_1 | null
  title: string
  activeCommand?: string | null
  version: string
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    updated: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    compacting?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    archived?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
  permission?: PermissionRuleset_1 | null
  skills?: string[] | null
  disabledInstructions?: string[] | null
  disabledTools?: 
    | {
    [key: string]: boolean
  }
    | null
  revert?: 
    | {
    messageID: string
    partID?: string | null
    snapshot?: string | null
    diff?: string | null
  }
    | null
  lastModel?: 
    | {
    providerID: string
    modelID: string
  }
    | null
}
Session_2
{
  id: string
  slug: string
  projectID: string
  directory: string
  parentID?: string
  workspaceID?: string
  summary?: {
    additions: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    deletions: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    files: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    diffs?: FileDiff_2[]
  }
  share?: {
    url: string
  }
  github?: SessionGithub_3
  worktree?: SessionWorktree_6
  mobile?: SessionMobile_2
  title: string
  activeCommand?: string
  version: string
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    updated: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    compacting?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    archived?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  permission?: PermissionRuleset_3
  skills?: string[]
  disabledInstructions?: string[]
  disabledTools?: {
    [key: string]: boolean
  }
  revert?: {
    messageID: string
    partID?: string
    snapshot?: string
    diff?: string
  }
  lastModel?: {
    providerID: string
    modelID: string
  }
}
Session_3
{
  id: string
  slug: string
  projectID: string
  directory: string
  parentID?: string | null
  workspaceID?: string | null
  summary?: 
    | {
    additions: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    deletions: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    files: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    diffs?: FileDiff_3[] | null
  }
    | null
  share?: 
    | {
    url: string
  }
    | null
  github?: SessionGithub_4 | null
  worktree?: SessionWorktree_8 | null
  mobile?: SessionMobile_3 | null
  title: string
  activeCommand?: string | null
  version: string
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    updated: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    compacting?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    archived?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
  permission?: PermissionRuleset_4 | null
  skills?: string[] | null
  disabledInstructions?: string[] | null
  disabledTools?: 
    | {
    [key: string]: boolean
  }
    | null
  revert?: 
    | {
    messageID: string
    partID?: string | null
    snapshot?: string | null
    diff?: string | null
  }
    | null
  lastModel?: 
    | {
    providerID: string
    modelID: string
  }
    | null
}
SessionGithub_1
{
  owner: string
  repo: string
  fullName: string
  baseBranch: string
  headBranch: string
  repositoryDirectory?: string | null
  cloneUrl?: string | null
  htmlUrl?: string | null
  private?: boolean | null
  worktree: SessionWorktree_2
  pullRequest?: 
    | {
    number: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    url: string
    title: string
  }
    | null
  lastCommitSha?: string | null
  publishedAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  publishError?: string | null
}
SessionGithub_2
{
  owner: string
  repo: string
  fullName: string
  baseBranch: string
  headBranch: string
  repositoryDirectory?: string | null
  cloneUrl?: string | null
  htmlUrl?: string | null
  private?: boolean | null
  worktree: SessionWorktree_4
  pullRequest?: 
    | {
    number: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    url: string
    title: string
  }
    | null
  lastCommitSha?: string | null
  publishedAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  publishError?: string | null
}
SessionGithub_3
{
  owner: string
  repo: string
  fullName: string
  baseBranch: string
  headBranch: string
  repositoryDirectory?: string
  cloneUrl?: string
  htmlUrl?: string
  private?: boolean
  worktree: SessionWorktree_5
  pullRequest?: {
    number: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    url: string
    title: string
  }
  lastCommitSha?: string
  publishedAt?: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  publishError?: string
}
SessionGithub_4
{
  owner: string
  repo: string
  fullName: string
  baseBranch: string
  headBranch: string
  repositoryDirectory?: string | null
  cloneUrl?: string | null
  htmlUrl?: string | null
  private?: boolean | null
  worktree: SessionWorktree_7
  pullRequest?: 
    | {
    number: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    url: string
    title: string
  }
    | null
  lastCommitSha?: string | null
  publishedAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  publishError?: string | null
}
SessionMobile_1
{
  platforms: (
    | "ios"
    | "android"
    | "expo"
    | "flutter"
    | "react-native")[]
  primaryPlatform: string
  method: string
  detectedAt: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  buildStatus?: 
    | 
    | "unknown"
    | "building"
    | "succeeded"
    | "failed"
    | null
  lastBuildAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  artifacts?: 
    | ({
    platform: string
    path: string
    size?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    createdAt?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  })[]
    | null
}
SessionMobile_2
{
  platforms: (
    | "ios"
    | "android"
    | "expo"
    | "flutter"
    | "react-native")[]
  primaryPlatform: string
  method: string
  detectedAt: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  buildStatus?: 
    | "unknown"
    | "building"
    | "succeeded"
    | "failed"
  lastBuildAt?: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  artifacts?: ({
    platform: string
    path: string
    size?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    createdAt?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  })[]
}
SessionMobile_3
{
  platforms: (
    | "ios"
    | "android"
    | "expo"
    | "flutter"
    | "react-native")[]
  primaryPlatform: string
  method: string
  detectedAt: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  buildStatus?: 
    | 
    | "unknown"
    | "building"
    | "succeeded"
    | "failed"
    | null
  lastBuildAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
  artifacts?: 
    | ({
    platform: string
    path: string
    size?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    createdAt?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  })[]
    | null
}
SessionStatus
  | {
  type: "idle"
}
  | {
  type: "retry"
  attempt: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  message: string
  next: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
  | {
  type: "busy"
  since: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
  | {
  type: "busy"
}
SessionStatus_1
  | {
  type: "idle"
}
  | {
  type: "retry"
  attempt: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  message: string
  next: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
  | {
  type: "busy"
  since: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
  | {
  type: "busy"
}
SessionWorktree_2
{
  name: string
  branch: string
  directory: string
  repositoryDirectory?: string | null
  cleanedAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
}
SessionWorktree_3
{
  name: string
  branch: string
  directory: string
  repositoryDirectory?: string | null
  cleanedAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
}
SessionWorktree_4
{
  name: string
  branch: string
  directory: string
  repositoryDirectory?: string | null
  cleanedAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
}
SessionWorktree_5
{
  name: string
  branch: string
  directory: string
  repositoryDirectory?: string
  cleanedAt?: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
SessionWorktree_6
{
  name: string
  branch: string
  directory: string
  repositoryDirectory?: string
  cleanedAt?: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
SessionWorktree_7
{
  name: string
  branch: string
  directory: string
  repositoryDirectory?: string | null
  cleanedAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
}
SessionWorktree_8
{
  name: string
  branch: string
  directory: string
  repositoryDirectory?: string | null
  cleanedAt?: 
    | 
    | number
    | "Infinity" | "-Infinity" | "NaN"
    | null
}
SnapshotPart
{
  id: string
  sessionID: string
  messageID: string
  type: "snapshot"
  snapshot: string
}
SnapshotPart_1
{
  id: string
  sessionID: string
  messageID: string
  type: "snapshot"
  snapshot: string
}
SnapshotPart_2
{
  id: string
  sessionID: string
  messageID: string
  type: "snapshot"
  snapshot: string
}
StepFinishPart
{
  id: string
  sessionID: string
  messageID: string
  type: "step-finish"
  reason: string
  snapshot?: string | null
  cost: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  tokens: {
    total?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    input: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    output: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    reasoning: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    cache: {
      read: 
        | number
        | "Infinity" | "-Infinity" | "NaN"
      write: 
        | number
        | "Infinity" | "-Infinity" | "NaN"
    }
  }
}
StepFinishPart_1
{
  id: string
  sessionID: string
  messageID: string
  type: "step-finish"
  reason: string
  snapshot?: string
  cost: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  tokens: {
    total?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    input: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    output: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    reasoning: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    cache: {
      read: 
        | number
        | "Infinity" | "-Infinity" | "NaN"
      write: 
        | number
        | "Infinity" | "-Infinity" | "NaN"
    }
  }
}
StepFinishPart_2
{
  id: string
  sessionID: string
  messageID: string
  type: "step-finish"
  reason: string
  snapshot?: string | null
  cost: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
  tokens: {
    total?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
    input: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    output: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    reasoning: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    cache: {
      read: 
        | number
        | "Infinity" | "-Infinity" | "NaN"
      write: 
        | number
        | "Infinity" | "-Infinity" | "NaN"
    }
  }
}
StepStartPart
{
  id: string
  sessionID: string
  messageID: string
  type: "step-start"
  snapshot?: string | null
}
StepStartPart_1
{
  id: string
  sessionID: string
  messageID: string
  type: "step-start"
  snapshot?: string
}
StepStartPart_2
{
  id: string
  sessionID: string
  messageID: string
  type: "step-start"
  snapshot?: string | null
}
StructuredOutputError
{
  name: "StructuredOutputError"
  data: {
    message: string
    retries: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
StructuredOutputError_1
{
  name: "StructuredOutputError"
  data: {
    message: string
    retries: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
StructuredOutputError_2
{
  name: "StructuredOutputError"
  data: {
    message: string
    retries: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
SubtaskPart
{
  id: string
  sessionID: string
  messageID: string
  type: "subtask"
  prompt: string
  description: string
  agent: string
  model?: 
    | {
    providerID: string
    modelID: string
  }
    | null
  command?: string | null
  background?: boolean | null
}
SubtaskPart_1
{
  id: string
  sessionID: string
  messageID: string
  type: "subtask"
  prompt: string
  description: string
  agent: string
  model?: {
    providerID: string
    modelID: string
  }
  command?: string
  background?: boolean
}
SubtaskPart_2
{
  id: string
  sessionID: string
  messageID: string
  type: "subtask"
  prompt: string
  description: string
  agent: string
  model?: 
    | {
    providerID: string
    modelID: string
  }
    | null
  command?: string | null
  background?: boolean | null
}
SubtaskPartInput
{
  id?: string | null
  type: "subtask"
  prompt: string
  description: string
  agent: string
  model?: 
    | {
    providerID: string
    modelID: string
  }
    | null
  command?: string | null
  background?: boolean | null
}
SymbolSource
{
  text: FilePartSourceText_1
  type: "symbol"
  path: string
  range: Range
  name: string
  kind: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
SymbolSource_1
{
  text: FilePartSourceText_4
  type: "symbol"
  path: string
  range: Range_1
  name: string
  kind: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
SymbolSource_2
{
  text: FilePartSourceText_6
  type: "symbol"
  path: string
  range: Range_2
  name: string
  kind: number
}
SymbolSource_3
{
  text: FilePartSourceText_8
  type: "symbol"
  path: string
  range: Range_3
  name: string
  kind: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
SymbolSource_4
{
  text: FilePartSourceText_11
  type: "symbol"
  path: string
  range: Range_4
  name: string
  kind: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
SymbolSource_5
{
  text: FilePartSourceText_14
  type: "symbol"
  path: string
  range: Range_5
  name: string
  kind: 
    | number
    | "Infinity" | "-Infinity" | "NaN"
}
TextPart
{
  id: string
  sessionID: string
  messageID: string
  type: "text"
  text: string
  synthetic?: boolean | null
  ignored?: boolean | null
  time?: 
    | {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
    | null
  metadata?: { [key: string]: unknown } | null
}
TextPart_1
{
  id: string
  sessionID: string
  messageID: string
  type: "text"
  text: string
  synthetic?: boolean
  ignored?: boolean
  time?: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  metadata?: { [key: string]: unknown }
}
TextPart_2
{
  id: string
  sessionID: string
  messageID: string
  type: "text"
  text: string
  synthetic?: boolean | null
  ignored?: boolean | null
  time?: 
    | {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
    | null
  metadata?: { [key: string]: unknown } | null
}
TextPartInput
{
  id?: string | null
  type: "text"
  text: string
  synthetic?: boolean | null
  ignored?: boolean | null
  time?: 
    | {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
    | null
  metadata?: { [key: string]: unknown } | null
}
Todo
{
  // Brief description of the task
  content: string
  // Current status of the task: pending, in_progress, completed, cancelled
  status: string
  // Priority level of the task: high, medium, low
  priority: string
  // Unique identifier for the todo item
  id: string
}
ToolPart
{
  id: string
  sessionID: string
  messageID: string
  type: "tool"
  callID: string
  tool: string
  state: ToolState
  metadata?: { [key: string]: unknown } | null
}
ToolPart_1
{
  id: string
  sessionID: string
  messageID: string
  type: "tool"
  callID: string
  tool: string
  state: ToolState_1
  metadata?: { [key: string]: unknown }
}
ToolPart_2
{
  id: string
  sessionID: string
  messageID: string
  type: "tool"
  callID: string
  tool: string
  state: ToolState_2
  metadata?: { [key: string]: unknown } | null
}
ToolState
  | ToolStatePending
  | ToolStateRunning
  | ToolStateCompleted
  | ToolStateError
ToolState_1
  | ToolStatePending_1
  | ToolStateRunning_1
  | ToolStateCompleted_1
  | ToolStateError_1
ToolState_2
  | ToolStatePending_2
  | ToolStateRunning_2
  | ToolStateCompleted_2
  | ToolStateError_2
ToolStateCompleted
{
  status: "completed"
  input: { [key: string]: unknown }
  output: string
  title: string
  metadata: { [key: string]: unknown }
  time: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    compacted?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
  attachments?: FilePart_1[] | null
}
ToolStateCompleted_1
{
  status: "completed"
  input: { [key: string]: unknown }
  output: string
  title: string
  metadata: { [key: string]: unknown }
  time: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    compacted?: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  attachments?: FilePart_2[]
}
ToolStateCompleted_2
{
  status: "completed"
  input: { [key: string]: unknown }
  output: string
  title: string
  metadata: { [key: string]: unknown }
  time: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    compacted?: 
      | 
      | number
      | "Infinity" | "-Infinity" | "NaN"
      | null
  }
  attachments?: FilePart_4[] | null
}
ToolStateError
{
  status: "error"
  input: { [key: string]: unknown }
  error: string
  metadata?: { [key: string]: unknown } | null
  time: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
ToolStateError_1
{
  status: "error"
  input: { [key: string]: unknown }
  error: string
  metadata?: { [key: string]: unknown }
  time: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
ToolStateError_2
{
  status: "error"
  input: { [key: string]: unknown }
  error: string
  metadata?: { [key: string]: unknown } | null
  time: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
    end: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
ToolStatePending
{
  status: "pending"
  input: { [key: string]: unknown }
  raw: string
}
ToolStatePending_1
{
  status: "pending"
  input: { [key: string]: unknown }
  raw: string
}
ToolStatePending_2
{
  status: "pending"
  input: { [key: string]: unknown }
  raw: string
}
ToolStateRunning
{
  status: "running"
  input: { [key: string]: unknown }
  title?: string | null
  metadata?: { [key: string]: unknown } | null
  structured?: { [key: string]: unknown } | null
  content?: 
    | (
    | {
    type: "text"
    text: string
  }
    | {
    type: "file"
    data: string
    mime: string
    name?: string | null
  })[]
    | null
  time: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
ToolStateRunning_1
{
  status: "running"
  input: { [key: string]: unknown }
  title?: string
  metadata?: { [key: string]: unknown }
  structured?: { [key: string]: unknown }
  content?: (
    | {
    type: "text"
    text: string
  }
    | {
    type: "file"
    data: string
    mime: string
    name?: string
  })[]
  time: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
ToolStateRunning_2
{
  status: "running"
  input: { [key: string]: unknown }
  title?: string | null
  metadata?: { [key: string]: unknown } | null
  structured?: { [key: string]: unknown } | null
  content?: 
    | (
    | {
    type: "text"
    text: string
  }
    | {
    type: "file"
    data: string
    mime: string
    name?: string | null
  })[]
    | null
  time: {
    start: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
}
UnknownError
{
  name: "UnknownError"
  data: {
    message: string
  }
}
UnknownError_1
{
  name: "UnknownError"
  data: {
    message: string
  }
}
UnknownError_2
{
  name: "UnknownError"
  data: {
    message: string
  }
}
UserMessage
{
  id: string
  sessionID: string
  role: "user"
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  format?: OutputFormat | null
  summary?: 
    | {
    title?: string | null
    body?: string | null
    diffs: FileDiff_4[]
  }
    | null
  agent: string
  model: {
    providerID: string
    modelID: string
  }
  system?: string | null
  tools?: 
    | {
    [key: string]: boolean
  }
    | null
  variant?: string | null
}
UserMessage_1
{
  id: string
  sessionID: string
  role: "user"
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  format?: OutputFormat_1
  summary?: {
    title?: string
    body?: string
    diffs: FileDiff_2[]
  }
  agent: string
  model: {
    providerID: string
    modelID: string
  }
  system?: string
  tools?: {
    [key: string]: boolean
  }
  variant?: string
}
UserMessage_2
{
  id: string
  sessionID: string
  role: "user"
  time: {
    created: 
      | number
      | "Infinity" | "-Infinity" | "NaN"
  }
  format?: OutputFormat_3 | null
  summary?: 
    | {
    title?: string | null
    body?: string | null
    diffs: FileDiff_5[]
  }
    | null
  agent: string
  model: {
    providerID: string
    modelID: string
  }
  system?: string | null
  tools?: 
    | {
    [key: string]: boolean
  }
    | null
  variant?: string | null
}