feat(plugin): add session request hook (#35794)

This commit is contained in:
Dax
2026-07-07 19:56:47 -04:00
committed by GitHub
parent e25a724bc2
commit 4f976bcf1a
124 changed files with 7038 additions and 4915 deletions
+1 -1
View File
@@ -134,7 +134,7 @@ if (sessionListTypesPatched === logTypesPatched) {
throw new Error("Session list numeric query patch did not apply")
}
const sessionMessagesTypesPatched = sessionListTypesPatched.replace(
/(export type V2SessionMessagesData = \{[\s\S]*?query\?: \{[\s\S]*?limit\?: )string( \| null)/,
/(export type V2MessageListData = \{[\s\S]*?query\?: \{[\s\S]*?limit\?: )string( \| null)/,
"$1number$2",
)
if (sessionMessagesTypesPatched === sessionListTypesPatched) {
+251 -152
View File
@@ -276,10 +276,10 @@ import type {
V2CredentialRemoveResponses,
V2CredentialUpdateErrors,
V2CredentialUpdateResponses,
V2DebugLocationErrors,
V2DebugLocationEvictErrors,
V2DebugLocationEvictResponses,
V2DebugLocationResponses,
V2DebugLocationListErrors,
V2DebugLocationListResponses,
V2EventSubscribeErrors,
V2EventSubscribeResponses,
V2FormRequestListErrors,
@@ -312,6 +312,10 @@ import type {
V2LocationGetResponses,
V2McpListErrors,
V2McpListResponses,
V2McpResourceCatalogErrors,
V2McpResourceCatalogResponses,
V2MessageListErrors,
V2MessageListResponses,
V2ModelDefaultErrors,
V2ModelDefaultResponses,
V2ModelListErrors,
@@ -400,8 +404,8 @@ import type {
V2SessionLogResponses,
V2SessionMessageErrors,
V2SessionMessageResponses,
V2SessionMessagesErrors,
V2SessionMessagesResponses,
V2SessionMoveErrors,
V2SessionMoveResponses,
V2SessionPermissionCreateErrors,
V2SessionPermissionCreateResponses,
V2SessionPermissionGetErrors,
@@ -5181,6 +5185,86 @@ export class Plugin extends HeyApiClient {
}
}
export class Switch extends HeyApiClient {
/**
* Switch session agent
*
* Switch the agent used by subsequent provider turns.
*/
public agent<ThrowOnError extends boolean = false>(
parameters: {
sessionID: string
agent?: string
},
options?: Options<never, ThrowOnError>,
) {
const params = buildClientParams(
[parameters],
[
{
args: [
{ in: "path", key: "sessionID" },
{ in: "body", key: "agent" },
],
},
],
)
return (options?.client ?? this.client).post<
V2SessionSwitchAgentResponses,
V2SessionSwitchAgentErrors,
ThrowOnError
>({
url: "/api/session/{sessionID}/agent",
...options,
...params,
headers: {
"Content-Type": "application/json",
...options?.headers,
...params.headers,
},
})
}
/**
* Switch session model
*
* Switch the model used by subsequent provider turns.
*/
public model<ThrowOnError extends boolean = false>(
parameters: {
sessionID: string
model?: ModelRef
},
options?: Options<never, ThrowOnError>,
) {
const params = buildClientParams(
[parameters],
[
{
args: [
{ in: "path", key: "sessionID" },
{ in: "body", key: "model" },
],
},
],
)
return (options?.client ?? this.client).post<
V2SessionSwitchModelResponses,
V2SessionSwitchModelErrors,
ThrowOnError
>({
url: "/api/session/{sessionID}/model",
...options,
...params,
headers: {
"Content-Type": "application/json",
...options?.headers,
...params.headers,
},
})
}
}
export class Revert extends HeyApiClient {
/**
* Stage session revert
@@ -5984,84 +6068,6 @@ export class Session3 extends HeyApiClient {
})
}
/**
* Switch session agent
*
* Switch the agent used by subsequent provider turns.
*/
public switchAgent<ThrowOnError extends boolean = false>(
parameters: {
sessionID: string
agent?: string
},
options?: Options<never, ThrowOnError>,
) {
const params = buildClientParams(
[parameters],
[
{
args: [
{ in: "path", key: "sessionID" },
{ in: "body", key: "agent" },
],
},
],
)
return (options?.client ?? this.client).post<
V2SessionSwitchAgentResponses,
V2SessionSwitchAgentErrors,
ThrowOnError
>({
url: "/api/session/{sessionID}/agent",
...options,
...params,
headers: {
"Content-Type": "application/json",
...options?.headers,
...params.headers,
},
})
}
/**
* Switch session model
*
* Switch the model used by subsequent provider turns.
*/
public switchModel<ThrowOnError extends boolean = false>(
parameters: {
sessionID: string
model?: ModelRef
},
options?: Options<never, ThrowOnError>,
) {
const params = buildClientParams(
[parameters],
[
{
args: [
{ in: "path", key: "sessionID" },
{ in: "body", key: "model" },
],
},
],
)
return (options?.client ?? this.client).post<
V2SessionSwitchModelResponses,
V2SessionSwitchModelErrors,
ThrowOnError
>({
url: "/api/session/{sessionID}/model",
...options,
...params,
headers: {
"Content-Type": "application/json",
...options?.headers,
...params.headers,
},
})
}
/**
* Rename session
*
@@ -6097,6 +6103,45 @@ export class Session3 extends HeyApiClient {
})
}
/**
* Move session
*
* Move a session to another project directory, optionally transferring local changes.
*/
public move<ThrowOnError extends boolean = false>(
parameters: {
sessionID: string
destination?: {
directory: string
}
moveChanges?: boolean | null
},
options?: Options<never, ThrowOnError>,
) {
const params = buildClientParams(
[parameters],
[
{
args: [
{ in: "path", key: "sessionID" },
{ in: "body", key: "destination" },
{ in: "body", key: "moveChanges" },
],
},
],
)
return (options?.client ?? this.client).post<V2SessionMoveResponses, V2SessionMoveErrors, ThrowOnError>({
url: "/api/session/{sessionID}/move",
...options,
...params,
headers: {
"Content-Type": "application/json",
...options?.headers,
...params.headers,
},
})
}
/**
* Send message
*
@@ -6241,6 +6286,7 @@ export class Session3 extends HeyApiClient {
metadata?: {
[key: string]: unknown
}
resume?: boolean | null
},
options?: Options<never, ThrowOnError>,
) {
@@ -6253,6 +6299,7 @@ export class Session3 extends HeyApiClient {
{ in: "body", key: "text" },
{ in: "body", key: "description" },
{ in: "body", key: "metadata" },
{ in: "body", key: "resume" },
],
},
],
@@ -6481,38 +6528,9 @@ export class Session3 extends HeyApiClient {
})
}
/**
* Get session messages
*
* Retrieve projected messages for a session. Items keep the requested order across pages; use cursor.next or cursor.previous to move through the ordered timeline.
*/
public messages<ThrowOnError extends boolean = false>(
parameters: {
sessionID: string
limit?: number | null
order?: "asc" | "desc" | null
cursor?: string | null
},
options?: Options<never, ThrowOnError>,
) {
const params = buildClientParams(
[parameters],
[
{
args: [
{ in: "path", key: "sessionID" },
{ in: "query", key: "limit" },
{ in: "query", key: "order" },
{ in: "query", key: "cursor" },
],
},
],
)
return (options?.client ?? this.client).get<V2SessionMessagesResponses, V2SessionMessagesErrors, ThrowOnError>({
url: "/api/session/{sessionID}/message",
...options,
...params,
})
private _switch?: Switch
get switch(): Switch {
return (this._switch ??= new Switch({ client: this.client }))
}
private _revert?: Revert
@@ -6541,6 +6559,42 @@ export class Session3 extends HeyApiClient {
}
}
export class Message extends HeyApiClient {
/**
* Get session messages
*
* Retrieve projected messages for a session. Items keep the requested order across pages; use cursor.next or cursor.previous to move through the ordered timeline.
*/
public list<ThrowOnError extends boolean = false>(
parameters: {
sessionID: string
limit?: number | null
order?: "asc" | "desc" | null
cursor?: string | null
},
options?: Options<never, ThrowOnError>,
) {
const params = buildClientParams(
[parameters],
[
{
args: [
{ in: "path", key: "sessionID" },
{ in: "query", key: "limit" },
{ in: "query", key: "order" },
{ in: "query", key: "cursor" },
],
},
],
)
return (options?.client ?? this.client).get<V2MessageListResponses, V2MessageListErrors, ThrowOnError>({
url: "/api/session/{sessionID}/message",
...options,
...params,
})
}
}
export class Model extends HeyApiClient {
/**
* List models
@@ -6971,6 +7025,34 @@ export class Integration extends HeyApiClient {
}
}
export class Resource2 extends HeyApiClient {
/**
* List MCP resources
*
* Retrieve resources and resource templates from connected MCP servers.
*/
public catalog<ThrowOnError extends boolean = false>(
parameters?: {
location?: {
directory?: string | null
workspace?: string | null
} | null
},
options?: Options<never, ThrowOnError>,
) {
const params = buildClientParams([parameters], [{ args: [{ in: "query", key: "location" }] }])
return (options?.client ?? this.client).get<
V2McpResourceCatalogResponses,
V2McpResourceCatalogErrors,
ThrowOnError
>({
url: "/api/mcp/resource",
...options,
...params,
})
}
}
export class Mcp2 extends HeyApiClient {
/**
* List MCP servers
@@ -6993,6 +7075,11 @@ export class Mcp2 extends HeyApiClient {
...params,
})
}
private _resource?: Resource2
get resource(): Resource2 {
return (this._resource ??= new Resource2({ client: this.client }))
}
}
export class Credential extends HeyApiClient {
@@ -7420,6 +7507,41 @@ export class Event2 extends HeyApiClient {
}
}
export class Connect2 extends HeyApiClient {
/**
* Create PTY WebSocket token
*
* Create a short-lived single-use ticket for opening a PTY WebSocket connection.
*/
public token<ThrowOnError extends boolean = false>(
parameters: {
ptyID: string
location?: {
directory?: string | null
workspace?: string | null
} | null
},
options?: Options<never, ThrowOnError>,
) {
const params = buildClientParams(
[parameters],
[
{
args: [
{ in: "path", key: "ptyID" },
{ in: "query", key: "location" },
],
},
],
)
return (options?.client ?? this.client).post<V2PtyConnectTokenResponses, V2PtyConnectTokenErrors, ThrowOnError>({
url: "/api/pty/{ptyID}/connect-token",
...options,
...params,
})
}
}
export class Pty2 extends HeyApiClient {
/**
* List PTY sessions
@@ -7602,39 +7724,6 @@ export class Pty2 extends HeyApiClient {
})
}
/**
* Create PTY WebSocket token
*
* Create a short-lived single-use ticket for opening a PTY WebSocket connection.
*/
public connectToken<ThrowOnError extends boolean = false>(
parameters: {
ptyID: string
location?: {
directory?: string | null
workspace?: string | null
} | null
},
options?: Options<never, ThrowOnError>,
) {
const params = buildClientParams(
[parameters],
[
{
args: [
{ in: "path", key: "ptyID" },
{ in: "query", key: "location" },
],
},
],
)
return (options?.client ?? this.client).post<V2PtyConnectTokenResponses, V2PtyConnectTokenErrors, ThrowOnError>({
url: "/api/pty/{ptyID}/connect-token",
...options,
...params,
})
}
/**
* Connect to PTY session
*
@@ -7670,6 +7759,11 @@ export class Pty2 extends HeyApiClient {
...params,
})
}
private _connect?: Connect2
get connect2(): Connect2 {
return (this._connect ??= new Connect2({ client: this.client }))
}
}
export class Shell extends HeyApiClient {
@@ -8145,23 +8239,23 @@ export class Location2 extends HeyApiClient {
...params,
})
}
}
export class Debug extends HeyApiClient {
/**
* List loaded locations
*
* List locations currently loaded by the server.
*/
public location<ThrowOnError extends boolean = false>(options?: Options<never, ThrowOnError>) {
return (options?.client ?? this.client).get<V2DebugLocationResponses, V2DebugLocationErrors, ThrowOnError>({
public list<ThrowOnError extends boolean = false>(options?: Options<never, ThrowOnError>) {
return (options?.client ?? this.client).get<V2DebugLocationListResponses, V2DebugLocationListErrors, ThrowOnError>({
url: "/api/debug/location",
...options,
})
}
}
export class Debug extends HeyApiClient {
private _location?: Location2
get location2(): Location2 {
get location(): Location2 {
return (this._location ??= new Location2({ client: this.client }))
}
}
@@ -8192,6 +8286,11 @@ export class V2 extends HeyApiClient {
return (this._session ??= new Session3({ client: this.client }))
}
private _message?: Message
get message(): Message {
return (this._message ??= new Message({ client: this.client }))
}
private _model?: Model
get model(): Model {
return (this._model ??= new Model({ client: this.client }))
+166 -10
View File
@@ -96,6 +96,7 @@ export type Event =
| EventTuiToastShow2
| EventTuiSessionSelect2
| EventMcpToolsChanged
| EventMcpResourcesChanged
| EventMcpStatusChanged
| EventCommandExecuted
| EventFileEdited
@@ -1631,6 +1632,13 @@ export type GlobalEvent = {
server: string
}
}
| {
id: string
type: "mcp.resources.changed"
properties: {
server: string
}
}
| {
id: string
type: "mcp.status.changed"
@@ -3019,6 +3027,14 @@ export type ProviderNotFoundError = {
message: string
}
export type McpResource2 = {
server: string
name: string
uri: string
description?: string
mimeType?: string
}
export type FormNotFoundError = {
_tag: "FormNotFoundError"
id: string
@@ -3182,6 +3198,7 @@ export type V2Event =
| TuiToastShow
| TuiSessionSelect
| McpToolsChanged
| McpResourcesChanged
| McpStatusChanged
| CommandExecuted
| FileEdited
@@ -5751,6 +5768,19 @@ export type McpServer = {
integrationID?: string
}
export type McpResourceTemplate = {
server: string
name: string
uriTemplate: string
description?: string
mimeType?: string
}
export type McpResourceCatalog = {
resources: Array<McpResource2>
templates: Array<McpResourceTemplate>
}
export type ProjectCurrent = {
id: string
directory: string
@@ -6680,6 +6710,19 @@ export type McpToolsChanged = {
}
}
export type McpResourcesChanged = {
id: string
created: number
metadata?: {
[key: string]: unknown
}
type: "mcp.resources.changed"
location?: LocationRef
data: {
server: string
}
}
export type McpStatusChanged = {
id: string
created: number
@@ -7860,6 +7903,14 @@ export type EventMcpToolsChanged = {
}
}
export type EventMcpResourcesChanged = {
id: string
type: "mcp.resources.changed"
properties: {
server: string
}
}
export type EventMcpStatusChanged = {
id: string
type: "mcp.status.changed"
@@ -8698,6 +8749,7 @@ export type V2EventV2 =
| InstallationUpdateAvailableV2
| VcsBranchUpdatedV2
| McpStatusChangedV2
| McpResourcesChangedV2
| PermissionAskedV2
| PermissionRepliedV2
| QuestionAskedV2
@@ -9797,6 +9849,19 @@ export type EventLogSyncedV2 = {
seq?: number
}
export type McpResourceV2 = {
server: string
name: string
uri: string
description?: string
mimeType?: string
}
export type McpResourceCatalogV2 = {
resources: Array<McpResourceV2>
templates: Array<McpResourceTemplate>
}
export type ProjectTimeV2 = {
created: number
updated: number
@@ -10749,6 +10814,19 @@ export type McpStatusChangedV2 = {
}
}
export type McpResourcesChangedV2 = {
id: string
created: number
metadata?: {
[key: string]: unknown
}
type: "mcp.resources.changed"
location?: LocationRefV2
data: {
server: string
}
}
export type PermissionAskedV2 = {
id: string
created: number
@@ -15505,6 +15583,46 @@ export type V2SessionRenameResponses = {
export type V2SessionRenameResponse = V2SessionRenameResponses[keyof V2SessionRenameResponses]
export type V2SessionMoveData = {
body: {
destination: {
directory: string
}
moveChanges?: boolean | null
}
path: {
sessionID: string
}
query?: never
url: "/api/session/{sessionID}/move"
}
export type V2SessionMoveErrors = {
/**
* InvalidRequestError
*/
400: InvalidRequestError1 | InvalidRequestErrorV2
/**
* UnauthorizedError
*/
401: UnauthorizedError
/**
* SessionNotFoundError
*/
404: SessionNotFoundError
}
export type V2SessionMoveError = V2SessionMoveErrors[keyof V2SessionMoveErrors]
export type V2SessionMoveResponses = {
/**
* <No Content>
*/
204: void
}
export type V2SessionMoveResponse = V2SessionMoveResponses[keyof V2SessionMoveResponses]
export type V2SessionPromptData = {
body: {
id?: string | null
@@ -15652,6 +15770,7 @@ export type V2SessionSyntheticData = {
metadata?: {
[key: string]: unknown
}
resume?: boolean | null
}
path: {
sessionID: string
@@ -16244,7 +16363,7 @@ export type V2SessionMessageResponses = {
export type V2SessionMessageResponse = V2SessionMessageResponses[keyof V2SessionMessageResponses]
export type V2SessionMessagesData = {
export type V2MessageListData = {
body?: never
path: {
sessionID: string
@@ -16263,7 +16382,7 @@ export type V2SessionMessagesData = {
url: "/api/session/{sessionID}/message"
}
export type V2SessionMessagesErrors = {
export type V2MessageListErrors = {
/**
* InvalidCursorError | InvalidRequestError
*/
@@ -16282,16 +16401,16 @@ export type V2SessionMessagesErrors = {
500: UnknownErrorV2
}
export type V2SessionMessagesError = V2SessionMessagesErrors[keyof V2SessionMessagesErrors]
export type V2MessageListError = V2MessageListErrors[keyof V2MessageListErrors]
export type V2SessionMessagesResponses = {
export type V2MessageListResponses = {
/**
* SessionMessagesResponse
*/
200: SessionMessagesResponseV2
}
export type V2SessionMessagesResponse = V2SessionMessagesResponses[keyof V2SessionMessagesResponses]
export type V2MessageListResponse = V2MessageListResponses[keyof V2MessageListResponses]
export type V2ModelListData = {
body?: never
@@ -16819,6 +16938,43 @@ export type V2McpListResponses = {
export type V2McpListResponse = V2McpListResponses[keyof V2McpListResponses]
export type V2McpResourceCatalogData = {
body?: never
path?: never
query?: {
location?: {
directory?: string | null
workspace?: string | null
} | null
}
url: "/api/mcp/resource"
}
export type V2McpResourceCatalogErrors = {
/**
* InvalidRequestError
*/
400: InvalidRequestErrorV2
/**
* UnauthorizedError
*/
401: UnauthorizedError
}
export type V2McpResourceCatalogError = V2McpResourceCatalogErrors[keyof V2McpResourceCatalogErrors]
export type V2McpResourceCatalogResponses = {
/**
* Success
*/
200: {
location: LocationInfoV2
data: McpResourceCatalogV2
}
}
export type V2McpResourceCatalogResponse = V2McpResourceCatalogResponses[keyof V2McpResourceCatalogResponses]
export type V2CredentialRemoveData = {
body?: never
path: {
@@ -18717,14 +18873,14 @@ export type V2DebugLocationEvictResponses = {
export type V2DebugLocationEvictResponse = V2DebugLocationEvictResponses[keyof V2DebugLocationEvictResponses]
export type V2DebugLocationData = {
export type V2DebugLocationListData = {
body?: never
path?: never
query?: never
url: "/api/debug/location"
}
export type V2DebugLocationErrors = {
export type V2DebugLocationListErrors = {
/**
* InvalidRequestError
*/
@@ -18735,16 +18891,16 @@ export type V2DebugLocationErrors = {
401: UnauthorizedError
}
export type V2DebugLocationError = V2DebugLocationErrors[keyof V2DebugLocationErrors]
export type V2DebugLocationListError = V2DebugLocationListErrors[keyof V2DebugLocationListErrors]
export type V2DebugLocationResponses = {
export type V2DebugLocationListResponses = {
/**
* Success
*/
200: Array<LocationRefV2>
}
export type V2DebugLocationResponse = V2DebugLocationResponses[keyof V2DebugLocationResponses]
export type V2DebugLocationListResponse = V2DebugLocationListResponses[keyof V2DebugLocationListResponses]
export type PtyConnectData = {
body?: never