Lifei/acp session setup refactor (#9488)
This commit is contained in:
@@ -7,6 +7,7 @@ export interface ExtMethodProvider {
|
||||
): Promise<Record<string, unknown>>;
|
||||
}
|
||||
|
||||
import type { Client } from "@agentclientprotocol/sdk";
|
||||
import type {
|
||||
AddConfigExtensionRequest_unstable,
|
||||
AddExtensionRequest_unstable,
|
||||
@@ -40,6 +41,7 @@ import type {
|
||||
DictationSecretSaveRequest_unstable,
|
||||
DictationTranscribeRequest_unstable,
|
||||
DictationTranscribeResponse_unstable,
|
||||
ElicitationRespondRequest_unstable,
|
||||
ExportSessionRequest_unstable,
|
||||
ExportSessionResponse_unstable,
|
||||
ExportSourceRequest_unstable,
|
||||
@@ -50,6 +52,7 @@ import type {
|
||||
GetSessionExtensionsResponse_unstable,
|
||||
GetToolsRequest_unstable,
|
||||
GetToolsResponse_unstable,
|
||||
GooseSessionNotification_unstable,
|
||||
GooseToolCallRequest_unstable,
|
||||
GooseToolCallResponse_unstable,
|
||||
ImportSessionRequest_unstable,
|
||||
@@ -115,6 +118,7 @@ import {
|
||||
zGetExtensionsResponse_unstable,
|
||||
zGetSessionExtensionsResponse_unstable,
|
||||
zGetToolsResponse_unstable,
|
||||
zGooseSessionNotification_unstable,
|
||||
zGooseToolCallResponse_unstable,
|
||||
zImportSessionResponse_unstable,
|
||||
zImportSourcesResponse_unstable,
|
||||
@@ -527,6 +531,12 @@ export class GooseExtClient {
|
||||
) as ImportSessionResponse_unstable;
|
||||
}
|
||||
|
||||
async elicitationRespond_unstable(
|
||||
params: ElicitationRespondRequest_unstable,
|
||||
): Promise<void> {
|
||||
await this.conn.extMethod("_goose/unstable/elicitation/respond", params);
|
||||
}
|
||||
|
||||
async sessionProjectUpdate_unstable(
|
||||
params: UpdateSessionProjectRequest_unstable,
|
||||
): Promise<void> {
|
||||
@@ -716,3 +726,35 @@ export class GooseExtClient {
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export interface GooseExtNotifications {
|
||||
unstable_sessionUpdate?: (
|
||||
notification: GooseSessionNotification_unstable,
|
||||
) => Promise<void>;
|
||||
}
|
||||
|
||||
export type GooseClientCallbacks = Client & GooseExtNotifications;
|
||||
|
||||
export function installGooseExtNotificationDispatcher(
|
||||
callbacks: GooseClientCallbacks,
|
||||
): Client {
|
||||
const { unstable_sessionUpdate, ...rest } = callbacks;
|
||||
const userExtNotification = rest.extNotification;
|
||||
return {
|
||||
...rest,
|
||||
extNotification: async (method, params) => {
|
||||
switch (method) {
|
||||
case "_goose/unstable/session/update": {
|
||||
const parsed = zGooseSessionNotification_unstable.parse(
|
||||
params,
|
||||
) as GooseSessionNotification_unstable;
|
||||
await unstable_sessionUpdate?.(parsed);
|
||||
return;
|
||||
}
|
||||
default:
|
||||
await userExtNotification?.(method, params);
|
||||
return;
|
||||
}
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// This file is auto-generated by @hey-api/openapi-ts
|
||||
|
||||
export type { AddConfigExtensionRequest_unstable, AddExtensionRequest_unstable, ArchiveSessionRequest_unstable, CreateSourceRequest_unstable, CreateSourceResponse_unstable, CustomProviderConfigDto, CustomProviderCreateRequest_unstable, CustomProviderCreateResponse_unstable, CustomProviderDeleteRequest_unstable, CustomProviderDeleteResponse_unstable, CustomProviderReadRequest_unstable, CustomProviderReadResponse_unstable, CustomProviderUpdateRequest_unstable, CustomProviderUpdateResponse_unstable, DefaultsReadRequest_unstable, DefaultsReadResponse_unstable, DefaultsSaveRequest_unstable, DeleteSessionRequest, DeleteSourceRequest_unstable, DictationConfigRequest_unstable, DictationConfigResponse_unstable, DictationDownloadProgress, DictationLocalModelStatus, DictationModelCancelRequest_unstable, DictationModelDeleteRequest_unstable, DictationModelDownloadProgressRequest_unstable, DictationModelDownloadProgressResponse_unstable, DictationModelDownloadRequest_unstable, DictationModelOption, DictationModelSelectRequest_unstable, DictationModelsListRequest_unstable, DictationModelsListResponse_unstable, DictationProviderStatusEntry, DictationSecretDeleteRequest_unstable, DictationSecretSaveRequest_unstable, DictationTranscribeRequest_unstable, DictationTranscribeResponse_unstable, EmptyResponse, ExportSessionRequest_unstable, ExportSessionResponse_unstable, ExportSourceRequest_unstable, ExportSourceResponse_unstable, ExtRequest, ExtResponse, GetExtensionsRequest_unstable, GetExtensionsResponse_unstable, GetSessionExtensionsRequest_unstable, GetSessionExtensionsResponse_unstable, GetToolsRequest_unstable, GetToolsResponse_unstable, GooseToolCallRequest_unstable, GooseToolCallResponse_unstable, ImportSessionRequest_unstable, ImportSessionResponse_unstable, ImportSourcesRequest_unstable, ImportSourcesResponse_unstable, ListProvidersRequest_unstable, ListProvidersResponse_unstable, ListSourcesRequest_unstable, ListSourcesResponse_unstable, OnboardingImportApplyRequest_unstable, OnboardingImportApplyResponse_unstable, OnboardingImportCandidate, OnboardingImportCounts, OnboardingImportScanRequest_unstable, OnboardingImportScanResponse_unstable, OnboardingImportSourceKind, PreferenceKey, PreferencesReadRequest_unstable, PreferencesReadResponse_unstable, PreferencesRemoveRequest_unstable, PreferencesSaveRequest_unstable, PreferenceValue, ProviderCatalogListRequest_unstable, ProviderCatalogListResponse_unstable, ProviderCatalogTemplateRequest_unstable, ProviderCatalogTemplateResponse_unstable, ProviderConfigAuthenticateRequest_unstable, ProviderConfigChangeResponse_unstable, ProviderConfigDeleteRequest_unstable, ProviderConfigFieldUpdate, ProviderConfigFieldValueDto, ProviderConfigKey, ProviderConfigReadRequest_unstable, ProviderConfigReadResponse_unstable, ProviderConfigSaveRequest_unstable, ProviderConfigStatusDto, ProviderConfigStatusRequest_unstable, ProviderConfigStatusResponse_unstable, ProviderInventoryEntryDto, ProviderInventoryModelDto, ProviderSetupCatalogEntryDto, ProviderSetupCatalogListRequest_unstable, ProviderSetupCatalogListResponse_unstable, ProviderSetupCategoryDto, ProviderSetupFieldDto, ProviderSetupGroupDto, ProviderSetupMethodDto, ProviderSupportedModelsListRequest_unstable, ProviderSupportedModelsListResponse_unstable, ProviderTemplateCapabilitiesDto, ProviderTemplateCatalogEntryDto, ProviderTemplateDto, ProviderTemplateModelDto, ReadResourceRequest_unstable, ReadResourceResponse_unstable, RefreshProviderInventoryRequest_unstable, RefreshProviderInventoryResponse_unstable, RefreshProviderInventorySkipDto, RefreshProviderInventorySkipReasonDto, RemoveConfigExtensionRequest_unstable, RemoveExtensionRequest_unstable, RenameSessionRequest_unstable, SessionSystemPromptMode, SetSessionSystemPromptRequest_unstable, SourceEntry, SourceScope, SourceType, ToggleConfigExtensionRequest_unstable, UnarchiveSessionRequest_unstable, UpdateSessionProjectRequest_unstable, UpdateSourceRequest_unstable, UpdateSourceResponse_unstable, UpdateWorkingDirRequest_unstable } from './types.gen.js';
|
||||
export type { AddConfigExtensionRequest_unstable, AddExtensionRequest_unstable, ArchiveSessionRequest_unstable, CreateSourceRequest_unstable, CreateSourceResponse_unstable, CustomProviderConfigDto, CustomProviderCreateRequest_unstable, CustomProviderCreateResponse_unstable, CustomProviderDeleteRequest_unstable, CustomProviderDeleteResponse_unstable, CustomProviderReadRequest_unstable, CustomProviderReadResponse_unstable, CustomProviderUpdateRequest_unstable, CustomProviderUpdateResponse_unstable, DefaultsReadRequest_unstable, DefaultsReadResponse_unstable, DefaultsSaveRequest_unstable, DeleteSessionRequest, DeleteSourceRequest_unstable, DictationConfigRequest_unstable, DictationConfigResponse_unstable, DictationDownloadProgress, DictationLocalModelStatus, DictationModelCancelRequest_unstable, DictationModelDeleteRequest_unstable, DictationModelDownloadProgressRequest_unstable, DictationModelDownloadProgressResponse_unstable, DictationModelDownloadRequest_unstable, DictationModelOption, DictationModelSelectRequest_unstable, DictationModelsListRequest_unstable, DictationModelsListResponse_unstable, DictationProviderStatusEntry, DictationSecretDeleteRequest_unstable, DictationSecretSaveRequest_unstable, DictationTranscribeRequest_unstable, DictationTranscribeResponse_unstable, ElicitationRespondRequest_unstable, EmptyResponse, ExportSessionRequest_unstable, ExportSessionResponse_unstable, ExportSourceRequest_unstable, ExportSourceResponse_unstable, ExtNotification, ExtRequest, ExtResponse, GetExtensionsRequest_unstable, GetExtensionsResponse_unstable, GetSessionExtensionsRequest_unstable, GetSessionExtensionsResponse_unstable, GetToolsRequest_unstable, GetToolsResponse_unstable, GooseSessionNotification_unstable, GooseSessionUpdate, GooseToolCallRequest_unstable, GooseToolCallResponse_unstable, ImportSessionRequest_unstable, ImportSessionResponse_unstable, ImportSourcesRequest_unstable, ImportSourcesResponse_unstable, Interaction, InteractionState, InteractionUpdate, ListProvidersRequest_unstable, ListProvidersResponse_unstable, ListSourcesRequest_unstable, ListSourcesResponse_unstable, OnboardingImportApplyRequest_unstable, OnboardingImportApplyResponse_unstable, OnboardingImportCandidate, OnboardingImportCounts, OnboardingImportScanRequest_unstable, OnboardingImportScanResponse_unstable, OnboardingImportSourceKind, PreferenceKey, PreferencesReadRequest_unstable, PreferencesReadResponse_unstable, PreferencesRemoveRequest_unstable, PreferencesSaveRequest_unstable, PreferenceValue, ProviderCatalogListRequest_unstable, ProviderCatalogListResponse_unstable, ProviderCatalogTemplateRequest_unstable, ProviderCatalogTemplateResponse_unstable, ProviderConfigAuthenticateRequest_unstable, ProviderConfigChangeResponse_unstable, ProviderConfigDeleteRequest_unstable, ProviderConfigFieldUpdate, ProviderConfigFieldValueDto, ProviderConfigKey, ProviderConfigReadRequest_unstable, ProviderConfigReadResponse_unstable, ProviderConfigSaveRequest_unstable, ProviderConfigStatusDto, ProviderConfigStatusRequest_unstable, ProviderConfigStatusResponse_unstable, ProviderInventoryEntryDto, ProviderInventoryModelDto, ProviderSetupCatalogEntryDto, ProviderSetupCatalogListRequest_unstable, ProviderSetupCatalogListResponse_unstable, ProviderSetupCategoryDto, ProviderSetupFieldDto, ProviderSetupGroupDto, ProviderSetupMethodDto, ProviderSupportedModelsListRequest_unstable, ProviderSupportedModelsListResponse_unstable, ProviderTemplateCapabilitiesDto, ProviderTemplateCatalogEntryDto, ProviderTemplateDto, ProviderTemplateModelDto, ReadResourceRequest_unstable, ReadResourceResponse_unstable, RefreshProviderInventoryRequest_unstable, RefreshProviderInventoryResponse_unstable, RefreshProviderInventorySkipDto, RefreshProviderInventorySkipReasonDto, RemoveConfigExtensionRequest_unstable, RemoveExtensionRequest_unstable, RenameSessionRequest_unstable, SessionSystemPromptMode, SessionUsageUpdate, SetSessionSystemPromptRequest_unstable, SourceEntry, SourceScope, SourceType, StatusMessage, StatusMessageUpdate, ToggleConfigExtensionRequest_unstable, UnarchiveSessionRequest_unstable, UpdateSessionProjectRequest_unstable, UpdateSourceRequest_unstable, UpdateSourceResponse_unstable, UpdateWorkingDirRequest_unstable } from './types.gen.js';
|
||||
|
||||
export const GOOSE_EXT_METHODS = [
|
||||
{
|
||||
@@ -188,6 +188,11 @@ export const GOOSE_EXT_METHODS = [
|
||||
requestType: "ImportSessionRequest_unstable",
|
||||
responseType: "ImportSessionResponse_unstable",
|
||||
},
|
||||
{
|
||||
method: "_goose/unstable/elicitation/respond",
|
||||
requestType: "ElicitationRespondRequest_unstable",
|
||||
responseType: "EmptyResponse",
|
||||
},
|
||||
{
|
||||
method: "_goose/unstable/session/project/update",
|
||||
requestType: "UpdateSessionProjectRequest_unstable",
|
||||
@@ -291,3 +296,12 @@ export const GOOSE_EXT_METHODS = [
|
||||
] as const;
|
||||
|
||||
export type GooseExtMethod = (typeof GOOSE_EXT_METHODS)[number];
|
||||
|
||||
export const GOOSE_EXT_NOTIFICATIONS = [
|
||||
{
|
||||
method: "_goose/unstable/session/update",
|
||||
paramsType: "GooseSessionNotification_unstable",
|
||||
},
|
||||
] as const;
|
||||
|
||||
export type GooseExtNotification = (typeof GOOSE_EXT_NOTIFICATIONS)[number];
|
||||
|
||||
@@ -743,6 +743,15 @@ export type ImportSessionResponse_unstable = {
|
||||
messageCount: number;
|
||||
};
|
||||
|
||||
/**
|
||||
* Submit a response for a pending MCP elicitation in an active session.
|
||||
*/
|
||||
export type ElicitationRespondRequest_unstable = {
|
||||
sessionId: string;
|
||||
elicitationId: string;
|
||||
userData?: unknown;
|
||||
};
|
||||
|
||||
/**
|
||||
* Update the project association for a session.
|
||||
*/
|
||||
@@ -1087,10 +1096,77 @@ export type DictationModelSelectRequest_unstable = {
|
||||
modelId: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* Goose-custom session update notification — a parallel to ACP's
|
||||
* `session/update` carrying goose-specific update variants.
|
||||
*/
|
||||
export type GooseSessionNotification_unstable = {
|
||||
sessionId: string;
|
||||
update: GooseSessionUpdate;
|
||||
};
|
||||
|
||||
/**
|
||||
* Discriminated union of goose-specific session update payloads.
|
||||
* Variant tag matches ACP's convention (`sessionUpdate: "<snake_case>"`).
|
||||
*
|
||||
* `discriminator.mapping` is what makes TS codegen (`@hey-api/openapi-ts`)
|
||||
* emit the correct snake_case tag value even when this enum has a single
|
||||
* variant. Add a mapping entry per variant.
|
||||
*/
|
||||
export type GooseSessionUpdate = ({
|
||||
sessionUpdate: 'usage_update';
|
||||
} & SessionUsageUpdate) | ({
|
||||
sessionUpdate: 'status_message';
|
||||
} & StatusMessageUpdate) | ({
|
||||
sessionUpdate: 'interaction_update';
|
||||
} & InteractionUpdate);
|
||||
|
||||
/**
|
||||
* Streaming context-window usage update for a session.
|
||||
*/
|
||||
export type SessionUsageUpdate = {
|
||||
used: number;
|
||||
contextLimit: number;
|
||||
accumulatedInputTokens: number;
|
||||
accumulatedOutputTokens: number;
|
||||
accumulatedCost?: number | null;
|
||||
};
|
||||
|
||||
export type StatusMessage = {
|
||||
message: string;
|
||||
type: 'notice';
|
||||
} | {
|
||||
message: string;
|
||||
type: 'progress';
|
||||
};
|
||||
|
||||
/**
|
||||
* Live UI/session status. This is not conversation transcript content, and
|
||||
* should not be persisted or replayed as history.
|
||||
*/
|
||||
export type StatusMessageUpdate = {
|
||||
status: StatusMessage;
|
||||
};
|
||||
|
||||
export type Interaction = {
|
||||
id: string;
|
||||
state: InteractionState;
|
||||
message?: string | null;
|
||||
requestedSchema?: unknown;
|
||||
type: 'elicitation';
|
||||
};
|
||||
|
||||
export type InteractionState = 'pending' | 'submitted';
|
||||
|
||||
export type InteractionUpdate = {
|
||||
interaction: Interaction;
|
||||
_meta?: unknown;
|
||||
};
|
||||
|
||||
export type ExtRequest = {
|
||||
id: string;
|
||||
method: string;
|
||||
params?: AddExtensionRequest_unstable | RemoveExtensionRequest_unstable | GetToolsRequest_unstable | GooseToolCallRequest_unstable | ReadResourceRequest_unstable | UpdateWorkingDirRequest_unstable | SetSessionSystemPromptRequest_unstable | DeleteSessionRequest | GetExtensionsRequest_unstable | AddConfigExtensionRequest_unstable | RemoveConfigExtensionRequest_unstable | ToggleConfigExtensionRequest_unstable | GetSessionExtensionsRequest_unstable | ListProvidersRequest_unstable | ProviderSupportedModelsListRequest_unstable | ProviderCatalogListRequest_unstable | ProviderSetupCatalogListRequest_unstable | ProviderCatalogTemplateRequest_unstable | CustomProviderCreateRequest_unstable | CustomProviderReadRequest_unstable | CustomProviderUpdateRequest_unstable | CustomProviderDeleteRequest_unstable | RefreshProviderInventoryRequest_unstable | ProviderConfigReadRequest_unstable | ProviderConfigStatusRequest_unstable | ProviderConfigSaveRequest_unstable | ProviderConfigDeleteRequest_unstable | ProviderConfigAuthenticateRequest_unstable | PreferencesReadRequest_unstable | PreferencesSaveRequest_unstable | PreferencesRemoveRequest_unstable | DefaultsReadRequest_unstable | DefaultsSaveRequest_unstable | OnboardingImportScanRequest_unstable | OnboardingImportApplyRequest_unstable | ExportSessionRequest_unstable | ImportSessionRequest_unstable | UpdateSessionProjectRequest_unstable | RenameSessionRequest_unstable | ArchiveSessionRequest_unstable | UnarchiveSessionRequest_unstable | CreateSourceRequest_unstable | ListSourcesRequest_unstable | UpdateSourceRequest_unstable | DeleteSourceRequest_unstable | ExportSourceRequest_unstable | ImportSourcesRequest_unstable | DictationTranscribeRequest_unstable | DictationConfigRequest_unstable | DictationSecretSaveRequest_unstable | DictationSecretDeleteRequest_unstable | DictationModelsListRequest_unstable | DictationModelDownloadRequest_unstable | DictationModelDownloadProgressRequest_unstable | DictationModelCancelRequest_unstable | DictationModelDeleteRequest_unstable | DictationModelSelectRequest_unstable | {
|
||||
params?: AddExtensionRequest_unstable | RemoveExtensionRequest_unstable | GetToolsRequest_unstable | GooseToolCallRequest_unstable | ReadResourceRequest_unstable | UpdateWorkingDirRequest_unstable | SetSessionSystemPromptRequest_unstable | DeleteSessionRequest | GetExtensionsRequest_unstable | AddConfigExtensionRequest_unstable | RemoveConfigExtensionRequest_unstable | ToggleConfigExtensionRequest_unstable | GetSessionExtensionsRequest_unstable | ListProvidersRequest_unstable | ProviderSupportedModelsListRequest_unstable | ProviderCatalogListRequest_unstable | ProviderSetupCatalogListRequest_unstable | ProviderCatalogTemplateRequest_unstable | CustomProviderCreateRequest_unstable | CustomProviderReadRequest_unstable | CustomProviderUpdateRequest_unstable | CustomProviderDeleteRequest_unstable | RefreshProviderInventoryRequest_unstable | ProviderConfigReadRequest_unstable | ProviderConfigStatusRequest_unstable | ProviderConfigSaveRequest_unstable | ProviderConfigDeleteRequest_unstable | ProviderConfigAuthenticateRequest_unstable | PreferencesReadRequest_unstable | PreferencesSaveRequest_unstable | PreferencesRemoveRequest_unstable | DefaultsReadRequest_unstable | DefaultsSaveRequest_unstable | OnboardingImportScanRequest_unstable | OnboardingImportApplyRequest_unstable | ExportSessionRequest_unstable | ImportSessionRequest_unstable | ElicitationRespondRequest_unstable | UpdateSessionProjectRequest_unstable | RenameSessionRequest_unstable | ArchiveSessionRequest_unstable | UnarchiveSessionRequest_unstable | CreateSourceRequest_unstable | ListSourcesRequest_unstable | UpdateSourceRequest_unstable | DeleteSourceRequest_unstable | ExportSourceRequest_unstable | ImportSourcesRequest_unstable | DictationTranscribeRequest_unstable | DictationConfigRequest_unstable | DictationSecretSaveRequest_unstable | DictationSecretDeleteRequest_unstable | DictationModelsListRequest_unstable | DictationModelDownloadRequest_unstable | DictationModelDownloadProgressRequest_unstable | DictationModelCancelRequest_unstable | DictationModelDeleteRequest_unstable | DictationModelSelectRequest_unstable | {
|
||||
[key: string]: unknown;
|
||||
} | null;
|
||||
};
|
||||
@@ -1106,3 +1182,10 @@ export type ExtResponse = {
|
||||
};
|
||||
id: string;
|
||||
};
|
||||
|
||||
export type ExtNotification = {
|
||||
method: string;
|
||||
params?: GooseSessionNotification_unstable | {
|
||||
[key: string]: unknown;
|
||||
} | null;
|
||||
};
|
||||
|
||||
@@ -760,6 +760,15 @@ export const zImportSessionResponse_unstable = z.object({
|
||||
messageCount: z.number().int().gte(0)
|
||||
});
|
||||
|
||||
/**
|
||||
* Submit a response for a pending MCP elicitation in an active session.
|
||||
*/
|
||||
export const zElicitationRespondRequest_unstable = z.object({
|
||||
sessionId: z.string(),
|
||||
elicitationId: z.string(),
|
||||
userData: z.unknown().optional().default(null)
|
||||
});
|
||||
|
||||
/**
|
||||
* Update the project association for a session.
|
||||
*/
|
||||
@@ -1088,6 +1097,86 @@ export const zDictationModelSelectRequest_unstable = z.object({
|
||||
modelId: z.string()
|
||||
});
|
||||
|
||||
/**
|
||||
* Streaming context-window usage update for a session.
|
||||
*/
|
||||
export const zSessionUsageUpdate = z.object({
|
||||
used: z.number().int().gte(0),
|
||||
contextLimit: z.number().int().gte(0),
|
||||
accumulatedInputTokens: z.number().int().gte(0),
|
||||
accumulatedOutputTokens: z.number().int().gte(0),
|
||||
accumulatedCost: z.union([
|
||||
z.number(),
|
||||
z.null()
|
||||
]).optional()
|
||||
});
|
||||
|
||||
export const zStatusMessage = z.union([
|
||||
z.object({
|
||||
message: z.string(),
|
||||
type: z.literal('notice')
|
||||
}),
|
||||
z.object({
|
||||
message: z.string(),
|
||||
type: z.literal('progress')
|
||||
})
|
||||
]);
|
||||
|
||||
/**
|
||||
* Live UI/session status. This is not conversation transcript content, and
|
||||
* should not be persisted or replayed as history.
|
||||
*/
|
||||
export const zStatusMessageUpdate = z.object({
|
||||
status: zStatusMessage
|
||||
});
|
||||
|
||||
export const zInteractionState = z.enum(['pending', 'submitted']);
|
||||
|
||||
export const zInteraction = z.object({
|
||||
id: z.string(),
|
||||
state: zInteractionState,
|
||||
message: z.union([
|
||||
z.string(),
|
||||
z.null()
|
||||
]).optional(),
|
||||
requestedSchema: z.unknown().optional(),
|
||||
type: z.literal('elicitation')
|
||||
});
|
||||
|
||||
export const zInteractionUpdate = z.object({
|
||||
interaction: zInteraction,
|
||||
_meta: z.unknown().optional()
|
||||
});
|
||||
|
||||
/**
|
||||
* Discriminated union of goose-specific session update payloads.
|
||||
* Variant tag matches ACP's convention (`sessionUpdate: "<snake_case>"`).
|
||||
*
|
||||
* `discriminator.mapping` is what makes TS codegen (`@hey-api/openapi-ts`)
|
||||
* emit the correct snake_case tag value even when this enum has a single
|
||||
* variant. Add a mapping entry per variant.
|
||||
*/
|
||||
export const zGooseSessionUpdate = z.union([
|
||||
z.object({
|
||||
sessionUpdate: z.literal('usage_update')
|
||||
}).and(zSessionUsageUpdate),
|
||||
z.object({
|
||||
sessionUpdate: z.literal('status_message')
|
||||
}).and(zStatusMessageUpdate),
|
||||
z.object({
|
||||
sessionUpdate: z.literal('interaction_update')
|
||||
}).and(zInteractionUpdate)
|
||||
]);
|
||||
|
||||
/**
|
||||
* Goose-custom session update notification — a parallel to ACP's
|
||||
* `session/update` carrying goose-specific update variants.
|
||||
*/
|
||||
export const zGooseSessionNotification_unstable = z.object({
|
||||
sessionId: z.string(),
|
||||
update: zGooseSessionUpdate
|
||||
});
|
||||
|
||||
export const zExtRequest = z.object({
|
||||
id: z.string(),
|
||||
method: z.string(),
|
||||
@@ -1130,6 +1219,7 @@ export const zExtRequest = z.object({
|
||||
zOnboardingImportApplyRequest_unstable,
|
||||
zExportSessionRequest_unstable,
|
||||
zImportSessionRequest_unstable,
|
||||
zElicitationRespondRequest_unstable,
|
||||
zUpdateSessionProjectRequest_unstable,
|
||||
zRenameSessionRequest_unstable,
|
||||
zArchiveSessionRequest_unstable,
|
||||
@@ -1210,3 +1300,14 @@ export const zExtResponse = z.union([
|
||||
id: z.string()
|
||||
})
|
||||
]);
|
||||
|
||||
export const zExtNotification = z.object({
|
||||
method: z.string(),
|
||||
params: z.union([
|
||||
zGooseSessionNotification_unstable,
|
||||
z.union([
|
||||
z.record(z.unknown()),
|
||||
z.null()
|
||||
])
|
||||
]).optional()
|
||||
});
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import {
|
||||
ClientSideConnection,
|
||||
type Client,
|
||||
type Stream,
|
||||
type InitializeRequest,
|
||||
type InitializeResponse,
|
||||
@@ -26,19 +25,28 @@ import {
|
||||
type SetSessionModelRequest,
|
||||
type SetSessionModelResponse,
|
||||
} from "@agentclientprotocol/sdk";
|
||||
import { GooseExtClient } from "./generated/client.gen.js";
|
||||
import {
|
||||
GooseExtClient,
|
||||
installGooseExtNotificationDispatcher,
|
||||
type GooseClientCallbacks,
|
||||
} from "./generated/client.gen.js";
|
||||
import { createHttpStream } from "./http-stream.js";
|
||||
|
||||
export class GooseClient {
|
||||
private conn: ClientSideConnection;
|
||||
private ext: GooseExtClient;
|
||||
|
||||
constructor(toClient: () => Client, streamOrUrl: Stream | string) {
|
||||
constructor(
|
||||
toClient: () => GooseClientCallbacks,
|
||||
streamOrUrl: Stream | string,
|
||||
) {
|
||||
const stream =
|
||||
typeof streamOrUrl === "string"
|
||||
? createHttpStream(streamOrUrl)
|
||||
: streamOrUrl;
|
||||
this.conn = new ClientSideConnection(toClient, stream);
|
||||
const toAcpClient = () =>
|
||||
installGooseExtNotificationDispatcher(toClient());
|
||||
this.conn = new ClientSideConnection(toAcpClient, stream);
|
||||
this.ext = new GooseExtClient(this.conn);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
export * from "./generated/types.gen.js";
|
||||
export * from "./generated/zod.gen.js";
|
||||
export {
|
||||
type GooseClientCallbacks,
|
||||
type GooseExtNotifications,
|
||||
} from "./generated/client.gen.js";
|
||||
export { GooseClient } from "./goose-client.js";
|
||||
export { createHttpStream } from "./http-stream.js";
|
||||
export * from "./mcp-apps.js";
|
||||
|
||||
Reference in New Issue
Block a user