From cf21f77ee354421f843dadac37355bcb6d9e13fb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 9 May 2026 07:11:25 +0000 Subject: [PATCH 1/3] Update codex to 0.130.0 --- package-lock.json | 56 +++++++++---------- package.json | 2 +- src/app-server/ClientRequest.ts | 11 ++-- src/app-server/ResponseItem.ts | 2 +- src/app-server/ServerNotification.ts | 4 +- .../CommandExecutionRequestApprovalParams.ts | 3 + src/app-server/v2/Config.ts | 3 +- .../v2/FileChangeOutputDeltaNotification.ts | 5 ++ .../v2/FileChangeRequestApprovalParams.ts | 4 ++ src/app-server/v2/HookEventName.ts | 2 +- src/app-server/v2/HookMetadata.ts | 3 +- src/app-server/v2/HookTrustStatus.ts | 5 ++ .../v2/ItemCompletedNotification.ts | 6 +- ...dianApprovalReviewCompletedNotification.ts | 8 +++ ...ardianApprovalReviewStartedNotification.ts | 4 ++ src/app-server/v2/ItemStartedNotification.ts | 6 +- src/app-server/v2/ManagedHooksRequirements.ts | 2 +- src/app-server/v2/Model.ts | 7 ++- src/app-server/v2/ModelServiceTier.ts | 5 ++ .../v2/PermissionsRequestApprovalParams.ts | 6 +- src/app-server/v2/PluginAvailability.ts | 5 ++ src/app-server/v2/PluginDetail.ts | 3 +- src/app-server/v2/PluginHookSummary.ts | 6 ++ .../v2/PluginListMarketplaceKind.ts | 5 ++ src/app-server/v2/PluginListParams.ts | 8 ++- src/app-server/v2/PluginShareContext.ts | 6 ++ src/app-server/v2/PluginShareDeleteParams.ts | 5 ++ .../v2/PluginShareDeleteResponse.ts | 5 ++ .../v2/PluginShareDiscoverability.ts | 5 ++ src/app-server/v2/PluginShareListItem.ts | 7 +++ src/app-server/v2/PluginShareListParams.ts | 5 ++ src/app-server/v2/PluginShareListResponse.ts | 6 ++ src/app-server/v2/PluginSharePrincipal.ts | 6 ++ src/app-server/v2/PluginSharePrincipalType.ts | 5 ++ src/app-server/v2/PluginShareSaveParams.ts | 8 +++ src/app-server/v2/PluginShareSaveResponse.ts | 5 ++ src/app-server/v2/PluginShareTarget.ts | 6 ++ .../v2/PluginShareUpdateDiscoverability.ts | 5 ++ .../v2/PluginShareUpdateTargetsParams.ts | 7 +++ .../v2/PluginShareUpdateTargetsResponse.ts | 7 +++ src/app-server/v2/PluginSkillReadParams.ts | 5 ++ src/app-server/v2/PluginSkillReadResponse.ts | 5 ++ src/app-server/v2/PluginSummary.ts | 12 +++- .../v2/ProcessExitedNotification.ts | 42 ++++++++++++++ .../v2/ProcessOutputDeltaNotification.ts | 26 +++++++++ src/app-server/v2/ProcessOutputStream.ts | 8 +++ src/app-server/v2/ProcessTerminalSize.ts | 16 ++++++ src/app-server/v2/ProfileV2.ts | 3 +- src/app-server/v2/SkillsListParams.ts | 7 +-- src/app-server/v2/Thread.ts | 9 +++ src/app-server/v2/ThreadForkParams.ts | 10 ++-- src/app-server/v2/ThreadForkResponse.ts | 3 +- .../v2/ThreadRealtimeStartedNotification.ts | 2 +- src/app-server/v2/ThreadResumeParams.ts | 10 +--- src/app-server/v2/ThreadResumeResponse.ts | 3 +- src/app-server/v2/ThreadSource.ts | 5 ++ src/app-server/v2/ThreadStartParams.ts | 9 ++- src/app-server/v2/ThreadStartResponse.ts | 3 +- src/app-server/v2/ThreadTurnsListParams.ts | 18 ------ src/app-server/v2/ThreadTurnsListResponse.ts | 18 ------ src/app-server/v2/Turn.ts | 11 ++-- src/app-server/v2/TurnItemsView.ts | 5 ++ src/app-server/v2/TurnStartParams.ts | 3 +- src/app-server/v2/WindowsSandboxReadiness.ts | 5 ++ .../v2/WindowsSandboxReadinessResponse.ts | 6 ++ src/app-server/v2/index.ts | 32 ++++++++++- 66 files changed, 411 insertions(+), 124 deletions(-) create mode 100644 src/app-server/v2/HookTrustStatus.ts create mode 100644 src/app-server/v2/ModelServiceTier.ts create mode 100644 src/app-server/v2/PluginAvailability.ts create mode 100644 src/app-server/v2/PluginHookSummary.ts create mode 100644 src/app-server/v2/PluginListMarketplaceKind.ts create mode 100644 src/app-server/v2/PluginShareContext.ts create mode 100644 src/app-server/v2/PluginShareDeleteParams.ts create mode 100644 src/app-server/v2/PluginShareDeleteResponse.ts create mode 100644 src/app-server/v2/PluginShareDiscoverability.ts create mode 100644 src/app-server/v2/PluginShareListItem.ts create mode 100644 src/app-server/v2/PluginShareListParams.ts create mode 100644 src/app-server/v2/PluginShareListResponse.ts create mode 100644 src/app-server/v2/PluginSharePrincipal.ts create mode 100644 src/app-server/v2/PluginSharePrincipalType.ts create mode 100644 src/app-server/v2/PluginShareSaveParams.ts create mode 100644 src/app-server/v2/PluginShareSaveResponse.ts create mode 100644 src/app-server/v2/PluginShareTarget.ts create mode 100644 src/app-server/v2/PluginShareUpdateDiscoverability.ts create mode 100644 src/app-server/v2/PluginShareUpdateTargetsParams.ts create mode 100644 src/app-server/v2/PluginShareUpdateTargetsResponse.ts create mode 100644 src/app-server/v2/PluginSkillReadParams.ts create mode 100644 src/app-server/v2/PluginSkillReadResponse.ts create mode 100644 src/app-server/v2/ProcessExitedNotification.ts create mode 100644 src/app-server/v2/ProcessOutputDeltaNotification.ts create mode 100644 src/app-server/v2/ProcessOutputStream.ts create mode 100644 src/app-server/v2/ProcessTerminalSize.ts create mode 100644 src/app-server/v2/ThreadSource.ts delete mode 100644 src/app-server/v2/ThreadTurnsListParams.ts delete mode 100644 src/app-server/v2/ThreadTurnsListResponse.ts create mode 100644 src/app-server/v2/TurnItemsView.ts create mode 100644 src/app-server/v2/WindowsSandboxReadiness.ts create mode 100644 src/app-server/v2/WindowsSandboxReadinessResponse.ts diff --git a/package-lock.json b/package-lock.json index 8bfafead..89915163 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "Apache-2.0", "dependencies": { "@agentclientprotocol/sdk": "^0.21.0", - "@openai/codex": "^0.128.0", + "@openai/codex": "^0.130.0", "diff": "^8.0.3", "open": "^11.0.0", "vscode-jsonrpc": "^8.2.1" @@ -817,9 +817,9 @@ } }, "node_modules/@openai/codex": { - "version": "0.128.0", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.128.0.tgz", - "integrity": "sha512-+xp6ODmFfBNnexIWRHApEaPXot2j6gyM8A5we/5IS/uY4eYHj4arETct4hQ5M4eO+MK7JY3ZU4xhuobhlysr0A==", + "version": "0.130.0", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.130.0.tgz", + "integrity": "sha512-WGDj+RZ3TXWC/7MlwprgLWOqzpwatPIINPhP3IRzHA0ni+o3QZ4i4xrS2uWwGmHUJ395J5JHwoZAAZYyfJyz6w==", "license": "Apache-2.0", "bin": { "codex": "bin/codex.js" @@ -828,19 +828,19 @@ "node": ">=16" }, "optionalDependencies": { - "@openai/codex-darwin-arm64": "npm:@openai/codex@0.128.0-darwin-arm64", - "@openai/codex-darwin-x64": "npm:@openai/codex@0.128.0-darwin-x64", - "@openai/codex-linux-arm64": "npm:@openai/codex@0.128.0-linux-arm64", - "@openai/codex-linux-x64": "npm:@openai/codex@0.128.0-linux-x64", - "@openai/codex-win32-arm64": "npm:@openai/codex@0.128.0-win32-arm64", - "@openai/codex-win32-x64": "npm:@openai/codex@0.128.0-win32-x64" + "@openai/codex-darwin-arm64": "npm:@openai/codex@0.130.0-darwin-arm64", + "@openai/codex-darwin-x64": "npm:@openai/codex@0.130.0-darwin-x64", + "@openai/codex-linux-arm64": "npm:@openai/codex@0.130.0-linux-arm64", + "@openai/codex-linux-x64": "npm:@openai/codex@0.130.0-linux-x64", + "@openai/codex-win32-arm64": "npm:@openai/codex@0.130.0-win32-arm64", + "@openai/codex-win32-x64": "npm:@openai/codex@0.130.0-win32-x64" } }, "node_modules/@openai/codex-darwin-arm64": { "name": "@openai/codex", - "version": "0.128.0-darwin-arm64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.128.0-darwin-arm64.tgz", - "integrity": "sha512-w+6zohfHx/kHBdles/CyFKaY57u9I3nK8QI9+NrdwMliKA0b7xn13yblRNkMpe09j6vL1oAWoxYsMOQ/vjBGug==", + "version": "0.130.0-darwin-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.130.0-darwin-arm64.tgz", + "integrity": "sha512-R9pkGC7kwC8yQ8el5hvBlmugQlcsG/pHMEFgZluu03X9fD2TezGxdq3KqRDRCZuMYl07ILamVEoqknuJ0cq7MA==", "cpu": [ "arm64" ], @@ -855,9 +855,9 @@ }, "node_modules/@openai/codex-darwin-x64": { "name": "@openai/codex", - "version": "0.128.0-darwin-x64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.128.0-darwin-x64.tgz", - "integrity": "sha512-SDbn6fO22Puy8xmMIbZi4f2znMrUEPwABApke4mo+4ihaauwuVjeqzXvW5SPJz5ty/bG11/mSupQgReT7T8BBw==", + "version": "0.130.0-darwin-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.130.0-darwin-x64.tgz", + "integrity": "sha512-gJ+7J8djevgtdra+NgDAiQQPW+O3KTsgGfE3E5dpDfww3zS5OCeV0V2dhxqnJdlOjOSDw99o0P2LqBv19mhpRw==", "cpu": [ "x64" ], @@ -872,9 +872,9 @@ }, "node_modules/@openai/codex-linux-arm64": { "name": "@openai/codex", - "version": "0.128.0-linux-arm64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.128.0-linux-arm64.tgz", - "integrity": "sha512-+SvH73H60qvCXFuQGP/EsmR//s1hHMBR22PvJkXvM/hdnTIGucx+JqRUjAWdmmQ1IU6j3kgwVvdLW/6ICB+M6w==", + "version": "0.130.0-linux-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.130.0-linux-arm64.tgz", + "integrity": "sha512-tFtH0V9/hEI3d9y7zP92BXI9FM4Z3+STNQaOR52Czv18TRtCFUp7CbIUYaToopuq6UBfnE1VKr8RLhwT5FcbmA==", "cpu": [ "arm64" ], @@ -889,9 +889,9 @@ }, "node_modules/@openai/codex-linux-x64": { "name": "@openai/codex", - "version": "0.128.0-linux-x64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.128.0-linux-x64.tgz", - "integrity": "sha512-2lnSPA05CRRuKAzFW8BCmmNCSieDcToLwfC2ALLbBYilGLgzhRibjlDglK9F1BkEzfohSSWJu4PBbRu/aG60lQ==", + "version": "0.130.0-linux-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.130.0-linux-x64.tgz", + "integrity": "sha512-3VcNlez99xdnEf+kB1IOpWv9fICYV9PiGj4sLCO4TCcShLnyxe+YBGa3poknkvXLnMG0qiN9SMnYS2FGrMxQcA==", "cpu": [ "x64" ], @@ -906,9 +906,9 @@ }, "node_modules/@openai/codex-win32-arm64": { "name": "@openai/codex", - "version": "0.128.0-win32-arm64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.128.0-win32-arm64.tgz", - "integrity": "sha512-ECJvsqmYFdA9pn42xxK3Odp/G16AjmBW0BglX8L0PwPjqbstbmlew9bfHf7xvL+SNfNl4NmyotW0+RNo1phgaA==", + "version": "0.130.0-win32-arm64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.130.0-win32-arm64.tgz", + "integrity": "sha512-vdpmiNp57L/arZabltLXn8TyEtNa7W1meOEkr+3R6W/8ZyBt++wuqz1Orv134OT2grrcFJsIVCAIPiqUxCvBkA==", "cpu": [ "arm64" ], @@ -923,9 +923,9 @@ }, "node_modules/@openai/codex-win32-x64": { "name": "@openai/codex", - "version": "0.128.0-win32-x64", - "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.128.0-win32-x64.tgz", - "integrity": "sha512-k3jmUAFrzkUtvjGTXvSKjQqJLLlzjxp/VoHJDYedgmXUn6j70HxK38IwapzmnYfiBiTuzETvGwjXHzZgzKjhoQ==", + "version": "0.130.0-win32-x64", + "resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.130.0-win32-x64.tgz", + "integrity": "sha512-FzMznm7fr5/nbjZgOujZ9Y9AbdGm7ji1FOoWiY3U+srqauvZaTgn6o6aCheSL7kuymu7nTLOO/cAyWV6NuesqQ==", "cpu": [ "x64" ], diff --git a/package.json b/package.json index d36bf78d..67e7f230 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ }, "dependencies": { "@agentclientprotocol/sdk": "^0.21.0", - "@openai/codex": "^0.128.0", + "@openai/codex": "^0.130.0", "diff": "^8.0.3", "open": "^11.0.0", "vscode-jsonrpc": "^8.2.1" diff --git a/src/app-server/ClientRequest.ts b/src/app-server/ClientRequest.ts index a86297e3..a12185b5 100644 --- a/src/app-server/ClientRequest.ts +++ b/src/app-server/ClientRequest.ts @@ -16,9 +16,6 @@ import type { CommandExecWriteParams } from "./v2/CommandExecWriteParams"; import type { ConfigBatchWriteParams } from "./v2/ConfigBatchWriteParams"; import type { ConfigReadParams } from "./v2/ConfigReadParams"; import type { ConfigValueWriteParams } from "./v2/ConfigValueWriteParams"; -import type { DeviceKeyCreateParams } from "./v2/DeviceKeyCreateParams"; -import type { DeviceKeyPublicParams } from "./v2/DeviceKeyPublicParams"; -import type { DeviceKeySignParams } from "./v2/DeviceKeySignParams"; import type { ExperimentalFeatureEnablementSetParams } from "./v2/ExperimentalFeatureEnablementSetParams"; import type { ExperimentalFeatureListParams } from "./v2/ExperimentalFeatureListParams"; import type { ExternalAgentConfigDetectParams } from "./v2/ExternalAgentConfigDetectParams"; @@ -48,6 +45,11 @@ import type { ModelProviderCapabilitiesReadParams } from "./v2/ModelProviderCapa import type { PluginInstallParams } from "./v2/PluginInstallParams"; import type { PluginListParams } from "./v2/PluginListParams"; import type { PluginReadParams } from "./v2/PluginReadParams"; +import type { PluginShareDeleteParams } from "./v2/PluginShareDeleteParams"; +import type { PluginShareListParams } from "./v2/PluginShareListParams"; +import type { PluginShareSaveParams } from "./v2/PluginShareSaveParams"; +import type { PluginShareUpdateTargetsParams } from "./v2/PluginShareUpdateTargetsParams"; +import type { PluginSkillReadParams } from "./v2/PluginSkillReadParams"; import type { PluginUninstallParams } from "./v2/PluginUninstallParams"; import type { ReviewStartParams } from "./v2/ReviewStartParams"; import type { SendAddCreditsNudgeEmailParams } from "./v2/SendAddCreditsNudgeEmailParams"; @@ -67,7 +69,6 @@ import type { ThreadRollbackParams } from "./v2/ThreadRollbackParams"; import type { ThreadSetNameParams } from "./v2/ThreadSetNameParams"; import type { ThreadShellCommandParams } from "./v2/ThreadShellCommandParams"; import type { ThreadStartParams } from "./v2/ThreadStartParams"; -import type { ThreadTurnsListParams } from "./v2/ThreadTurnsListParams"; import type { ThreadUnarchiveParams } from "./v2/ThreadUnarchiveParams"; import type { ThreadUnsubscribeParams } from "./v2/ThreadUnsubscribeParams"; import type { TurnInterruptParams } from "./v2/TurnInterruptParams"; @@ -78,4 +79,4 @@ import type { WindowsSandboxSetupStartParams } from "./v2/WindowsSandboxSetupSta /** * Request from the client to the server. */ -export type ClientRequest ={ "method": "initialize", id: RequestId, params: InitializeParams, } | { "method": "thread/start", id: RequestId, params: ThreadStartParams, } | { "method": "thread/resume", id: RequestId, params: ThreadResumeParams, } | { "method": "thread/fork", id: RequestId, params: ThreadForkParams, } | { "method": "thread/archive", id: RequestId, params: ThreadArchiveParams, } | { "method": "thread/unsubscribe", id: RequestId, params: ThreadUnsubscribeParams, } | { "method": "thread/name/set", id: RequestId, params: ThreadSetNameParams, } | { "method": "thread/metadata/update", id: RequestId, params: ThreadMetadataUpdateParams, } | { "method": "thread/unarchive", id: RequestId, params: ThreadUnarchiveParams, } | { "method": "thread/compact/start", id: RequestId, params: ThreadCompactStartParams, } | { "method": "thread/shellCommand", id: RequestId, params: ThreadShellCommandParams, } | { "method": "thread/approveGuardianDeniedAction", id: RequestId, params: ThreadApproveGuardianDeniedActionParams, } | { "method": "thread/rollback", id: RequestId, params: ThreadRollbackParams, } | { "method": "thread/list", id: RequestId, params: ThreadListParams, } | { "method": "thread/loaded/list", id: RequestId, params: ThreadLoadedListParams, } | { "method": "thread/read", id: RequestId, params: ThreadReadParams, } | { "method": "thread/turns/list", id: RequestId, params: ThreadTurnsListParams, } | { "method": "thread/inject_items", id: RequestId, params: ThreadInjectItemsParams, } | { "method": "skills/list", id: RequestId, params: SkillsListParams, } | { "method": "hooks/list", id: RequestId, params: HooksListParams, } | { "method": "marketplace/add", id: RequestId, params: MarketplaceAddParams, } | { "method": "marketplace/remove", id: RequestId, params: MarketplaceRemoveParams, } | { "method": "marketplace/upgrade", id: RequestId, params: MarketplaceUpgradeParams, } | { "method": "plugin/list", id: RequestId, params: PluginListParams, } | { "method": "plugin/read", id: RequestId, params: PluginReadParams, } | { "method": "app/list", id: RequestId, params: AppsListParams, } | { "method": "device/key/create", id: RequestId, params: DeviceKeyCreateParams, } | { "method": "device/key/public", id: RequestId, params: DeviceKeyPublicParams, } | { "method": "device/key/sign", id: RequestId, params: DeviceKeySignParams, } | { "method": "fs/readFile", id: RequestId, params: FsReadFileParams, } | { "method": "fs/writeFile", id: RequestId, params: FsWriteFileParams, } | { "method": "fs/createDirectory", id: RequestId, params: FsCreateDirectoryParams, } | { "method": "fs/getMetadata", id: RequestId, params: FsGetMetadataParams, } | { "method": "fs/readDirectory", id: RequestId, params: FsReadDirectoryParams, } | { "method": "fs/remove", id: RequestId, params: FsRemoveParams, } | { "method": "fs/copy", id: RequestId, params: FsCopyParams, } | { "method": "fs/watch", id: RequestId, params: FsWatchParams, } | { "method": "fs/unwatch", id: RequestId, params: FsUnwatchParams, } | { "method": "skills/config/write", id: RequestId, params: SkillsConfigWriteParams, } | { "method": "plugin/install", id: RequestId, params: PluginInstallParams, } | { "method": "plugin/uninstall", id: RequestId, params: PluginUninstallParams, } | { "method": "turn/start", id: RequestId, params: TurnStartParams, } | { "method": "turn/steer", id: RequestId, params: TurnSteerParams, } | { "method": "turn/interrupt", id: RequestId, params: TurnInterruptParams, } | { "method": "review/start", id: RequestId, params: ReviewStartParams, } | { "method": "model/list", id: RequestId, params: ModelListParams, } | { "method": "modelProvider/capabilities/read", id: RequestId, params: ModelProviderCapabilitiesReadParams, } | { "method": "experimentalFeature/list", id: RequestId, params: ExperimentalFeatureListParams, } | { "method": "experimentalFeature/enablement/set", id: RequestId, params: ExperimentalFeatureEnablementSetParams, } | { "method": "mcpServer/oauth/login", id: RequestId, params: McpServerOauthLoginParams, } | { "method": "config/mcpServer/reload", id: RequestId, params: undefined, } | { "method": "mcpServerStatus/list", id: RequestId, params: ListMcpServerStatusParams, } | { "method": "mcpServer/resource/read", id: RequestId, params: McpResourceReadParams, } | { "method": "mcpServer/tool/call", id: RequestId, params: McpServerToolCallParams, } | { "method": "windowsSandbox/setupStart", id: RequestId, params: WindowsSandboxSetupStartParams, } | { "method": "account/login/start", id: RequestId, params: LoginAccountParams, } | { "method": "account/login/cancel", id: RequestId, params: CancelLoginAccountParams, } | { "method": "account/logout", id: RequestId, params: undefined, } | { "method": "account/rateLimits/read", id: RequestId, params: undefined, } | { "method": "account/sendAddCreditsNudgeEmail", id: RequestId, params: SendAddCreditsNudgeEmailParams, } | { "method": "feedback/upload", id: RequestId, params: FeedbackUploadParams, } | { "method": "command/exec", id: RequestId, params: CommandExecParams, } | { "method": "command/exec/write", id: RequestId, params: CommandExecWriteParams, } | { "method": "command/exec/terminate", id: RequestId, params: CommandExecTerminateParams, } | { "method": "command/exec/resize", id: RequestId, params: CommandExecResizeParams, } | { "method": "config/read", id: RequestId, params: ConfigReadParams, } | { "method": "externalAgentConfig/detect", id: RequestId, params: ExternalAgentConfigDetectParams, } | { "method": "externalAgentConfig/import", id: RequestId, params: ExternalAgentConfigImportParams, } | { "method": "config/value/write", id: RequestId, params: ConfigValueWriteParams, } | { "method": "config/batchWrite", id: RequestId, params: ConfigBatchWriteParams, } | { "method": "configRequirements/read", id: RequestId, params: undefined, } | { "method": "account/read", id: RequestId, params: GetAccountParams, } | { "method": "getConversationSummary", id: RequestId, params: GetConversationSummaryParams, } | { "method": "gitDiffToRemote", id: RequestId, params: GitDiffToRemoteParams, } | { "method": "getAuthStatus", id: RequestId, params: GetAuthStatusParams, } | { "method": "fuzzyFileSearch", id: RequestId, params: FuzzyFileSearchParams, }; +export type ClientRequest ={ "method": "initialize", id: RequestId, params: InitializeParams, } | { "method": "thread/start", id: RequestId, params: ThreadStartParams, } | { "method": "thread/resume", id: RequestId, params: ThreadResumeParams, } | { "method": "thread/fork", id: RequestId, params: ThreadForkParams, } | { "method": "thread/archive", id: RequestId, params: ThreadArchiveParams, } | { "method": "thread/unsubscribe", id: RequestId, params: ThreadUnsubscribeParams, } | { "method": "thread/name/set", id: RequestId, params: ThreadSetNameParams, } | { "method": "thread/metadata/update", id: RequestId, params: ThreadMetadataUpdateParams, } | { "method": "thread/unarchive", id: RequestId, params: ThreadUnarchiveParams, } | { "method": "thread/compact/start", id: RequestId, params: ThreadCompactStartParams, } | { "method": "thread/shellCommand", id: RequestId, params: ThreadShellCommandParams, } | { "method": "thread/approveGuardianDeniedAction", id: RequestId, params: ThreadApproveGuardianDeniedActionParams, } | { "method": "thread/rollback", id: RequestId, params: ThreadRollbackParams, } | { "method": "thread/list", id: RequestId, params: ThreadListParams, } | { "method": "thread/loaded/list", id: RequestId, params: ThreadLoadedListParams, } | { "method": "thread/read", id: RequestId, params: ThreadReadParams, } | { "method": "thread/inject_items", id: RequestId, params: ThreadInjectItemsParams, } | { "method": "skills/list", id: RequestId, params: SkillsListParams, } | { "method": "hooks/list", id: RequestId, params: HooksListParams, } | { "method": "marketplace/add", id: RequestId, params: MarketplaceAddParams, } | { "method": "marketplace/remove", id: RequestId, params: MarketplaceRemoveParams, } | { "method": "marketplace/upgrade", id: RequestId, params: MarketplaceUpgradeParams, } | { "method": "plugin/list", id: RequestId, params: PluginListParams, } | { "method": "plugin/read", id: RequestId, params: PluginReadParams, } | { "method": "plugin/skill/read", id: RequestId, params: PluginSkillReadParams, } | { "method": "plugin/share/save", id: RequestId, params: PluginShareSaveParams, } | { "method": "plugin/share/updateTargets", id: RequestId, params: PluginShareUpdateTargetsParams, } | { "method": "plugin/share/list", id: RequestId, params: PluginShareListParams, } | { "method": "plugin/share/delete", id: RequestId, params: PluginShareDeleteParams, } | { "method": "app/list", id: RequestId, params: AppsListParams, } | { "method": "fs/readFile", id: RequestId, params: FsReadFileParams, } | { "method": "fs/writeFile", id: RequestId, params: FsWriteFileParams, } | { "method": "fs/createDirectory", id: RequestId, params: FsCreateDirectoryParams, } | { "method": "fs/getMetadata", id: RequestId, params: FsGetMetadataParams, } | { "method": "fs/readDirectory", id: RequestId, params: FsReadDirectoryParams, } | { "method": "fs/remove", id: RequestId, params: FsRemoveParams, } | { "method": "fs/copy", id: RequestId, params: FsCopyParams, } | { "method": "fs/watch", id: RequestId, params: FsWatchParams, } | { "method": "fs/unwatch", id: RequestId, params: FsUnwatchParams, } | { "method": "skills/config/write", id: RequestId, params: SkillsConfigWriteParams, } | { "method": "plugin/install", id: RequestId, params: PluginInstallParams, } | { "method": "plugin/uninstall", id: RequestId, params: PluginUninstallParams, } | { "method": "turn/start", id: RequestId, params: TurnStartParams, } | { "method": "turn/steer", id: RequestId, params: TurnSteerParams, } | { "method": "turn/interrupt", id: RequestId, params: TurnInterruptParams, } | { "method": "review/start", id: RequestId, params: ReviewStartParams, } | { "method": "model/list", id: RequestId, params: ModelListParams, } | { "method": "modelProvider/capabilities/read", id: RequestId, params: ModelProviderCapabilitiesReadParams, } | { "method": "experimentalFeature/list", id: RequestId, params: ExperimentalFeatureListParams, } | { "method": "experimentalFeature/enablement/set", id: RequestId, params: ExperimentalFeatureEnablementSetParams, } | { "method": "mcpServer/oauth/login", id: RequestId, params: McpServerOauthLoginParams, } | { "method": "config/mcpServer/reload", id: RequestId, params: undefined, } | { "method": "mcpServerStatus/list", id: RequestId, params: ListMcpServerStatusParams, } | { "method": "mcpServer/resource/read", id: RequestId, params: McpResourceReadParams, } | { "method": "mcpServer/tool/call", id: RequestId, params: McpServerToolCallParams, } | { "method": "windowsSandbox/setupStart", id: RequestId, params: WindowsSandboxSetupStartParams, } | { "method": "windowsSandbox/readiness", id: RequestId, params: undefined, } | { "method": "account/login/start", id: RequestId, params: LoginAccountParams, } | { "method": "account/login/cancel", id: RequestId, params: CancelLoginAccountParams, } | { "method": "account/logout", id: RequestId, params: undefined, } | { "method": "account/rateLimits/read", id: RequestId, params: undefined, } | { "method": "account/sendAddCreditsNudgeEmail", id: RequestId, params: SendAddCreditsNudgeEmailParams, } | { "method": "feedback/upload", id: RequestId, params: FeedbackUploadParams, } | { "method": "command/exec", id: RequestId, params: CommandExecParams, } | { "method": "command/exec/write", id: RequestId, params: CommandExecWriteParams, } | { "method": "command/exec/terminate", id: RequestId, params: CommandExecTerminateParams, } | { "method": "command/exec/resize", id: RequestId, params: CommandExecResizeParams, } | { "method": "config/read", id: RequestId, params: ConfigReadParams, } | { "method": "externalAgentConfig/detect", id: RequestId, params: ExternalAgentConfigDetectParams, } | { "method": "externalAgentConfig/import", id: RequestId, params: ExternalAgentConfigImportParams, } | { "method": "config/value/write", id: RequestId, params: ConfigValueWriteParams, } | { "method": "config/batchWrite", id: RequestId, params: ConfigBatchWriteParams, } | { "method": "configRequirements/read", id: RequestId, params: undefined, } | { "method": "account/read", id: RequestId, params: GetAccountParams, } | { "method": "getConversationSummary", id: RequestId, params: GetConversationSummaryParams, } | { "method": "gitDiffToRemote", id: RequestId, params: GitDiffToRemoteParams, } | { "method": "getAuthStatus", id: RequestId, params: GetAuthStatusParams, } | { "method": "fuzzyFileSearch", id: RequestId, params: FuzzyFileSearchParams, }; diff --git a/src/app-server/ResponseItem.ts b/src/app-server/ResponseItem.ts index 382c89db..6fa9beee 100644 --- a/src/app-server/ResponseItem.ts +++ b/src/app-server/ResponseItem.ts @@ -14,4 +14,4 @@ export type ResponseItem = { "type": "message", role: string, content: Array | { [key in string]?: JsonValue } | null }); +approvals_reviewer: ApprovalsReviewer | null, sandbox_mode: SandboxMode | null, sandbox_workspace_write: SandboxWorkspaceWrite | null, forced_chatgpt_workspace_id: string | null, forced_login_method: ForcedLoginMethod | null, web_search: WebSearchMode | null, tools: ToolsV2 | null, profile: string | null, profiles: { [key in string]?: ProfileV2 }, instructions: string | null, developer_instructions: string | null, compact_prompt: string | null, model_reasoning_effort: ReasoningEffort | null, model_reasoning_summary: ReasoningSummary | null, model_verbosity: Verbosity | null, service_tier: string | null, analytics: AnalyticsConfig | null} & ({ [key in string]?: number | string | boolean | Array | { [key in string]?: JsonValue } | null }); diff --git a/src/app-server/v2/FileChangeOutputDeltaNotification.ts b/src/app-server/v2/FileChangeOutputDeltaNotification.ts index 1018bd8a..c11f626c 100644 --- a/src/app-server/v2/FileChangeOutputDeltaNotification.ts +++ b/src/app-server/v2/FileChangeOutputDeltaNotification.ts @@ -2,4 +2,9 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +/** + * Deprecated legacy notification for `apply_patch` textual output. + * + * The server no longer emits this notification. + */ export type FileChangeOutputDeltaNotification = { threadId: string, turnId: string, itemId: string, delta: string, }; diff --git a/src/app-server/v2/FileChangeRequestApprovalParams.ts b/src/app-server/v2/FileChangeRequestApprovalParams.ts index c514ed62..2db7be9e 100644 --- a/src/app-server/v2/FileChangeRequestApprovalParams.ts +++ b/src/app-server/v2/FileChangeRequestApprovalParams.ts @@ -3,6 +3,10 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. export type FileChangeRequestApprovalParams = { threadId: string, turnId: string, itemId: string, +/** + * Unix timestamp (in milliseconds) when this approval request started. + */ +startedAtMs: number, /** * Optional explanatory reason (e.g. request for extra write access). */ diff --git a/src/app-server/v2/HookEventName.ts b/src/app-server/v2/HookEventName.ts index 28657d22..91c2def7 100644 --- a/src/app-server/v2/HookEventName.ts +++ b/src/app-server/v2/HookEventName.ts @@ -2,4 +2,4 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -export type HookEventName = "preToolUse" | "permissionRequest" | "postToolUse" | "sessionStart" | "userPromptSubmit" | "stop"; +export type HookEventName = "preToolUse" | "permissionRequest" | "postToolUse" | "preCompact" | "postCompact" | "sessionStart" | "userPromptSubmit" | "stop"; diff --git a/src/app-server/v2/HookMetadata.ts b/src/app-server/v2/HookMetadata.ts index 8ccd2b18..94e3c30c 100644 --- a/src/app-server/v2/HookMetadata.ts +++ b/src/app-server/v2/HookMetadata.ts @@ -5,5 +5,6 @@ import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { HookEventName } from "./HookEventName"; import type { HookHandlerType } from "./HookHandlerType"; import type { HookSource } from "./HookSource"; +import type { HookTrustStatus } from "./HookTrustStatus"; -export type HookMetadata = { key: string, eventName: HookEventName, handlerType: HookHandlerType, matcher: string | null, command: string | null, timeoutSec: bigint, statusMessage: string | null, sourcePath: AbsolutePathBuf, source: HookSource, pluginId: string | null, displayOrder: bigint, enabled: boolean, isManaged: boolean, }; +export type HookMetadata = { key: string, eventName: HookEventName, handlerType: HookHandlerType, matcher: string | null, command: string | null, timeoutSec: bigint, statusMessage: string | null, sourcePath: AbsolutePathBuf, source: HookSource, pluginId: string | null, displayOrder: bigint, enabled: boolean, isManaged: boolean, currentHash: string, trustStatus: HookTrustStatus, }; diff --git a/src/app-server/v2/HookTrustStatus.ts b/src/app-server/v2/HookTrustStatus.ts new file mode 100644 index 00000000..692fdc4c --- /dev/null +++ b/src/app-server/v2/HookTrustStatus.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type HookTrustStatus = "managed" | "untrusted" | "trusted" | "modified"; diff --git a/src/app-server/v2/ItemCompletedNotification.ts b/src/app-server/v2/ItemCompletedNotification.ts index 96122204..25ced4a0 100644 --- a/src/app-server/v2/ItemCompletedNotification.ts +++ b/src/app-server/v2/ItemCompletedNotification.ts @@ -3,4 +3,8 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { ThreadItem } from "./ThreadItem"; -export type ItemCompletedNotification = { item: ThreadItem, threadId: string, turnId: string, }; +export type ItemCompletedNotification = { item: ThreadItem, threadId: string, turnId: string, +/** + * Unix timestamp (in milliseconds) when this item lifecycle completed. + */ +completedAtMs: number, }; diff --git a/src/app-server/v2/ItemGuardianApprovalReviewCompletedNotification.ts b/src/app-server/v2/ItemGuardianApprovalReviewCompletedNotification.ts index 5b162cf4..32d12be6 100644 --- a/src/app-server/v2/ItemGuardianApprovalReviewCompletedNotification.ts +++ b/src/app-server/v2/ItemGuardianApprovalReviewCompletedNotification.ts @@ -10,6 +10,14 @@ import type { GuardianApprovalReviewAction } from "./GuardianApprovalReviewActio * shape is expected to change soon. */ export type ItemGuardianApprovalReviewCompletedNotification = { threadId: string, turnId: string, +/** + * Unix timestamp (in milliseconds) when this review started. + */ +startedAtMs: number, +/** + * Unix timestamp (in milliseconds) when this review completed. + */ +completedAtMs: number, /** * Stable identifier for this review. */ diff --git a/src/app-server/v2/ItemGuardianApprovalReviewStartedNotification.ts b/src/app-server/v2/ItemGuardianApprovalReviewStartedNotification.ts index 81ba2cde..92d34fde 100644 --- a/src/app-server/v2/ItemGuardianApprovalReviewStartedNotification.ts +++ b/src/app-server/v2/ItemGuardianApprovalReviewStartedNotification.ts @@ -9,6 +9,10 @@ import type { GuardianApprovalReviewAction } from "./GuardianApprovalReviewActio * shape is expected to change soon. */ export type ItemGuardianApprovalReviewStartedNotification = { threadId: string, turnId: string, +/** + * Unix timestamp (in milliseconds) when this review started. + */ +startedAtMs: number, /** * Stable identifier for this review. */ diff --git a/src/app-server/v2/ItemStartedNotification.ts b/src/app-server/v2/ItemStartedNotification.ts index 5cf1e7b9..9ec8af09 100644 --- a/src/app-server/v2/ItemStartedNotification.ts +++ b/src/app-server/v2/ItemStartedNotification.ts @@ -3,4 +3,8 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { ThreadItem } from "./ThreadItem"; -export type ItemStartedNotification = { item: ThreadItem, threadId: string, turnId: string, }; +export type ItemStartedNotification = { item: ThreadItem, threadId: string, turnId: string, +/** + * Unix timestamp (in milliseconds) when this item lifecycle started. + */ +startedAtMs: number, }; diff --git a/src/app-server/v2/ManagedHooksRequirements.ts b/src/app-server/v2/ManagedHooksRequirements.ts index 3386d16e..cde0e4a5 100644 --- a/src/app-server/v2/ManagedHooksRequirements.ts +++ b/src/app-server/v2/ManagedHooksRequirements.ts @@ -3,4 +3,4 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { ConfiguredHookMatcherGroup } from "./ConfiguredHookMatcherGroup"; -export type ManagedHooksRequirements = { managedDir: string | null, windowsManagedDir: string | null, PreToolUse: Array, PermissionRequest: Array, PostToolUse: Array, SessionStart: Array, UserPromptSubmit: Array, Stop: Array, }; +export type ManagedHooksRequirements = { managedDir: string | null, windowsManagedDir: string | null, PreToolUse: Array, PermissionRequest: Array, PostToolUse: Array, PreCompact: Array, PostCompact: Array, SessionStart: Array, UserPromptSubmit: Array, Stop: Array, }; diff --git a/src/app-server/v2/Model.ts b/src/app-server/v2/Model.ts index f4cf5a94..2354ffbf 100644 --- a/src/app-server/v2/Model.ts +++ b/src/app-server/v2/Model.ts @@ -4,7 +4,12 @@ import type { InputModality } from "../InputModality"; import type { ReasoningEffort } from "../ReasoningEffort"; import type { ModelAvailabilityNux } from "./ModelAvailabilityNux"; +import type { ModelServiceTier } from "./ModelServiceTier"; import type { ModelUpgradeInfo } from "./ModelUpgradeInfo"; import type { ReasoningEffortOption } from "./ReasoningEffortOption"; -export type Model = { id: string, model: string, upgrade: string | null, upgradeInfo: ModelUpgradeInfo | null, availabilityNux: ModelAvailabilityNux | null, displayName: string, description: string, hidden: boolean, supportedReasoningEfforts: Array, defaultReasoningEffort: ReasoningEffort, inputModalities: Array, supportsPersonality: boolean, additionalSpeedTiers: Array, isDefault: boolean, }; +export type Model = { id: string, model: string, upgrade: string | null, upgradeInfo: ModelUpgradeInfo | null, availabilityNux: ModelAvailabilityNux | null, displayName: string, description: string, hidden: boolean, supportedReasoningEfforts: Array, defaultReasoningEffort: ReasoningEffort, inputModalities: Array, supportsPersonality: boolean, +/** + * Deprecated: use `serviceTiers` instead. + */ +additionalSpeedTiers: Array, serviceTiers: Array, isDefault: boolean, }; diff --git a/src/app-server/v2/ModelServiceTier.ts b/src/app-server/v2/ModelServiceTier.ts new file mode 100644 index 00000000..09693d07 --- /dev/null +++ b/src/app-server/v2/ModelServiceTier.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type ModelServiceTier = { id: string, name: string, description: string, }; diff --git a/src/app-server/v2/PermissionsRequestApprovalParams.ts b/src/app-server/v2/PermissionsRequestApprovalParams.ts index 308670a8..509f6092 100644 --- a/src/app-server/v2/PermissionsRequestApprovalParams.ts +++ b/src/app-server/v2/PermissionsRequestApprovalParams.ts @@ -4,4 +4,8 @@ import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { RequestPermissionProfile } from "./RequestPermissionProfile"; -export type PermissionsRequestApprovalParams = { threadId: string, turnId: string, itemId: string, cwd: AbsolutePathBuf, reason: string | null, permissions: RequestPermissionProfile, }; +export type PermissionsRequestApprovalParams = { threadId: string, turnId: string, itemId: string, +/** + * Unix timestamp (in milliseconds) when this approval request started. + */ +startedAtMs: number, cwd: AbsolutePathBuf, reason: string | null, permissions: RequestPermissionProfile, }; diff --git a/src/app-server/v2/PluginAvailability.ts b/src/app-server/v2/PluginAvailability.ts new file mode 100644 index 00000000..bec0b88c --- /dev/null +++ b/src/app-server/v2/PluginAvailability.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type PluginAvailability = "AVAILABLE" | "DISABLED_BY_ADMIN"; diff --git a/src/app-server/v2/PluginDetail.ts b/src/app-server/v2/PluginDetail.ts index eb0f38ca..64836c87 100644 --- a/src/app-server/v2/PluginDetail.ts +++ b/src/app-server/v2/PluginDetail.ts @@ -3,7 +3,8 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { AppSummary } from "./AppSummary"; +import type { PluginHookSummary } from "./PluginHookSummary"; import type { PluginSummary } from "./PluginSummary"; import type { SkillSummary } from "./SkillSummary"; -export type PluginDetail = { marketplaceName: string, marketplacePath: AbsolutePathBuf | null, summary: PluginSummary, description: string | null, skills: Array, apps: Array, mcpServers: Array, }; +export type PluginDetail = { marketplaceName: string, marketplacePath: AbsolutePathBuf | null, summary: PluginSummary, description: string | null, skills: Array, hooks: Array, apps: Array, mcpServers: Array, }; diff --git a/src/app-server/v2/PluginHookSummary.ts b/src/app-server/v2/PluginHookSummary.ts new file mode 100644 index 00000000..48046bbd --- /dev/null +++ b/src/app-server/v2/PluginHookSummary.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { HookEventName } from "./HookEventName"; + +export type PluginHookSummary = { key: string, eventName: HookEventName, }; diff --git a/src/app-server/v2/PluginListMarketplaceKind.ts b/src/app-server/v2/PluginListMarketplaceKind.ts new file mode 100644 index 00000000..6ff6161f --- /dev/null +++ b/src/app-server/v2/PluginListMarketplaceKind.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type PluginListMarketplaceKind = "local" | "workspace-directory" | "shared-with-me"; diff --git a/src/app-server/v2/PluginListParams.ts b/src/app-server/v2/PluginListParams.ts index dcf23796..6dd86b8a 100644 --- a/src/app-server/v2/PluginListParams.ts +++ b/src/app-server/v2/PluginListParams.ts @@ -2,10 +2,16 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; +import type { PluginListMarketplaceKind } from "./PluginListMarketplaceKind"; export type PluginListParams = { /** * Optional working directories used to discover repo marketplaces. When omitted, * only home-scoped marketplaces and the official curated marketplace are considered. */ -cwds?: Array | null, }; +cwds?: Array | null, +/** + * Optional marketplace kind filter. When omitted, only local marketplaces are queried, plus + * the default remote catalog when enabled by feature flag. + */ +marketplaceKinds?: Array | null, }; diff --git a/src/app-server/v2/PluginShareContext.ts b/src/app-server/v2/PluginShareContext.ts new file mode 100644 index 00000000..f1c5c958 --- /dev/null +++ b/src/app-server/v2/PluginShareContext.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { PluginSharePrincipal } from "./PluginSharePrincipal"; + +export type PluginShareContext = { remotePluginId: string, shareUrl: string | null, creatorAccountUserId: string | null, creatorName: string | null, shareTargets: Array | null, }; diff --git a/src/app-server/v2/PluginShareDeleteParams.ts b/src/app-server/v2/PluginShareDeleteParams.ts new file mode 100644 index 00000000..b0adaf2d --- /dev/null +++ b/src/app-server/v2/PluginShareDeleteParams.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type PluginShareDeleteParams = { remotePluginId: string, }; diff --git a/src/app-server/v2/PluginShareDeleteResponse.ts b/src/app-server/v2/PluginShareDeleteResponse.ts new file mode 100644 index 00000000..23102683 --- /dev/null +++ b/src/app-server/v2/PluginShareDeleteResponse.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type PluginShareDeleteResponse = Record; diff --git a/src/app-server/v2/PluginShareDiscoverability.ts b/src/app-server/v2/PluginShareDiscoverability.ts new file mode 100644 index 00000000..8c224216 --- /dev/null +++ b/src/app-server/v2/PluginShareDiscoverability.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type PluginShareDiscoverability = "LISTED" | "UNLISTED" | "PRIVATE"; diff --git a/src/app-server/v2/PluginShareListItem.ts b/src/app-server/v2/PluginShareListItem.ts new file mode 100644 index 00000000..b63738aa --- /dev/null +++ b/src/app-server/v2/PluginShareListItem.ts @@ -0,0 +1,7 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { AbsolutePathBuf } from "../AbsolutePathBuf"; +import type { PluginSummary } from "./PluginSummary"; + +export type PluginShareListItem = { plugin: PluginSummary, shareUrl: string, localPluginPath: AbsolutePathBuf | null, }; diff --git a/src/app-server/v2/PluginShareListParams.ts b/src/app-server/v2/PluginShareListParams.ts new file mode 100644 index 00000000..167ace7a --- /dev/null +++ b/src/app-server/v2/PluginShareListParams.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type PluginShareListParams = Record; diff --git a/src/app-server/v2/PluginShareListResponse.ts b/src/app-server/v2/PluginShareListResponse.ts new file mode 100644 index 00000000..50b324f5 --- /dev/null +++ b/src/app-server/v2/PluginShareListResponse.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { PluginShareListItem } from "./PluginShareListItem"; + +export type PluginShareListResponse = { data: Array, }; diff --git a/src/app-server/v2/PluginSharePrincipal.ts b/src/app-server/v2/PluginSharePrincipal.ts new file mode 100644 index 00000000..9e0ecc48 --- /dev/null +++ b/src/app-server/v2/PluginSharePrincipal.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { PluginSharePrincipalType } from "./PluginSharePrincipalType"; + +export type PluginSharePrincipal = { principalType: PluginSharePrincipalType, principalId: string, name: string, }; diff --git a/src/app-server/v2/PluginSharePrincipalType.ts b/src/app-server/v2/PluginSharePrincipalType.ts new file mode 100644 index 00000000..e54c129c --- /dev/null +++ b/src/app-server/v2/PluginSharePrincipalType.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type PluginSharePrincipalType = "user" | "group" | "workspace"; diff --git a/src/app-server/v2/PluginShareSaveParams.ts b/src/app-server/v2/PluginShareSaveParams.ts new file mode 100644 index 00000000..c8df0d6c --- /dev/null +++ b/src/app-server/v2/PluginShareSaveParams.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { AbsolutePathBuf } from "../AbsolutePathBuf"; +import type { PluginShareDiscoverability } from "./PluginShareDiscoverability"; +import type { PluginShareTarget } from "./PluginShareTarget"; + +export type PluginShareSaveParams = { pluginPath: AbsolutePathBuf, remotePluginId?: string | null, discoverability?: PluginShareDiscoverability | null, shareTargets?: Array | null, }; diff --git a/src/app-server/v2/PluginShareSaveResponse.ts b/src/app-server/v2/PluginShareSaveResponse.ts new file mode 100644 index 00000000..b53ace0e --- /dev/null +++ b/src/app-server/v2/PluginShareSaveResponse.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type PluginShareSaveResponse = { remotePluginId: string, shareUrl: string, }; diff --git a/src/app-server/v2/PluginShareTarget.ts b/src/app-server/v2/PluginShareTarget.ts new file mode 100644 index 00000000..fd196908 --- /dev/null +++ b/src/app-server/v2/PluginShareTarget.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { PluginSharePrincipalType } from "./PluginSharePrincipalType"; + +export type PluginShareTarget = { principalType: PluginSharePrincipalType, principalId: string, }; diff --git a/src/app-server/v2/PluginShareUpdateDiscoverability.ts b/src/app-server/v2/PluginShareUpdateDiscoverability.ts new file mode 100644 index 00000000..fd601987 --- /dev/null +++ b/src/app-server/v2/PluginShareUpdateDiscoverability.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type PluginShareUpdateDiscoverability = "UNLISTED" | "PRIVATE"; diff --git a/src/app-server/v2/PluginShareUpdateTargetsParams.ts b/src/app-server/v2/PluginShareUpdateTargetsParams.ts new file mode 100644 index 00000000..eecd4be8 --- /dev/null +++ b/src/app-server/v2/PluginShareUpdateTargetsParams.ts @@ -0,0 +1,7 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { PluginShareTarget } from "./PluginShareTarget"; +import type { PluginShareUpdateDiscoverability } from "./PluginShareUpdateDiscoverability"; + +export type PluginShareUpdateTargetsParams = { remotePluginId: string, discoverability: PluginShareUpdateDiscoverability, shareTargets: Array, }; diff --git a/src/app-server/v2/PluginShareUpdateTargetsResponse.ts b/src/app-server/v2/PluginShareUpdateTargetsResponse.ts new file mode 100644 index 00000000..0ce72246 --- /dev/null +++ b/src/app-server/v2/PluginShareUpdateTargetsResponse.ts @@ -0,0 +1,7 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { PluginShareDiscoverability } from "./PluginShareDiscoverability"; +import type { PluginSharePrincipal } from "./PluginSharePrincipal"; + +export type PluginShareUpdateTargetsResponse = { principals: Array, discoverability: PluginShareDiscoverability, }; diff --git a/src/app-server/v2/PluginSkillReadParams.ts b/src/app-server/v2/PluginSkillReadParams.ts new file mode 100644 index 00000000..54a63599 --- /dev/null +++ b/src/app-server/v2/PluginSkillReadParams.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type PluginSkillReadParams = { remoteMarketplaceName: string, remotePluginId: string, skillName: string, }; diff --git a/src/app-server/v2/PluginSkillReadResponse.ts b/src/app-server/v2/PluginSkillReadResponse.ts new file mode 100644 index 00000000..0ae37982 --- /dev/null +++ b/src/app-server/v2/PluginSkillReadResponse.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type PluginSkillReadResponse = { contents: string | null, }; diff --git a/src/app-server/v2/PluginSummary.ts b/src/app-server/v2/PluginSummary.ts index 1eb443c5..d855f3d3 100644 --- a/src/app-server/v2/PluginSummary.ts +++ b/src/app-server/v2/PluginSummary.ts @@ -2,8 +2,18 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { PluginAuthPolicy } from "./PluginAuthPolicy"; +import type { PluginAvailability } from "./PluginAvailability"; import type { PluginInstallPolicy } from "./PluginInstallPolicy"; import type { PluginInterface } from "./PluginInterface"; +import type { PluginShareContext } from "./PluginShareContext"; import type { PluginSource } from "./PluginSource"; -export type PluginSummary = { id: string, name: string, source: PluginSource, installed: boolean, enabled: boolean, installPolicy: PluginInstallPolicy, authPolicy: PluginAuthPolicy, interface: PluginInterface | null, }; +export type PluginSummary = { id: string, name: string, +/** + * Remote sharing context associated with this plugin when available. + */ +shareContext: PluginShareContext | null, source: PluginSource, installed: boolean, enabled: boolean, installPolicy: PluginInstallPolicy, authPolicy: PluginAuthPolicy, +/** + * Availability state for installing and using the plugin. + */ +availability: PluginAvailability, interface: PluginInterface | null, keywords: Array, }; diff --git a/src/app-server/v2/ProcessExitedNotification.ts b/src/app-server/v2/ProcessExitedNotification.ts new file mode 100644 index 00000000..0d826334 --- /dev/null +++ b/src/app-server/v2/ProcessExitedNotification.ts @@ -0,0 +1,42 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Final process exit notification for `process/spawn`. + */ +export type ProcessExitedNotification = { +/** + * Client-supplied, connection-scoped `processHandle` from `process/spawn`. + */ +processHandle: string, +/** + * Process exit code. + */ +exitCode: number, +/** + * Buffered stdout capture. + * + * Empty when stdout was streamed via `process/outputDelta`. + */ +stdout: string, +/** + * Whether stdout reached `outputBytesCap`. + * + * In streaming mode, stdout is empty and cap state is also reported on the + * final stdout `process/outputDelta` notification. + */ +stdoutCapReached: boolean, +/** + * Buffered stderr capture. + * + * Empty when stderr was streamed via `process/outputDelta`. + */ +stderr: string, +/** + * Whether stderr reached `outputBytesCap`. + * + * In streaming mode, stderr is empty and cap state is also reported on the + * final stderr `process/outputDelta` notification. + */ +stderrCapReached: boolean, }; diff --git a/src/app-server/v2/ProcessOutputDeltaNotification.ts b/src/app-server/v2/ProcessOutputDeltaNotification.ts new file mode 100644 index 00000000..46369e39 --- /dev/null +++ b/src/app-server/v2/ProcessOutputDeltaNotification.ts @@ -0,0 +1,26 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { ProcessOutputStream } from "./ProcessOutputStream"; + +/** + * Base64-encoded output chunk emitted for a streaming `process/spawn` request. + */ +export type ProcessOutputDeltaNotification = { +/** + * Client-supplied, connection-scoped `processHandle` from `process/spawn`. + */ +processHandle: string, +/** + * Output stream this chunk belongs to. + */ +stream: ProcessOutputStream, +/** + * Base64-encoded output bytes. + */ +deltaBase64: string, +/** + * True on the final streamed chunk for this stream when output was + * truncated by `outputBytesCap`. + */ +capReached: boolean, }; diff --git a/src/app-server/v2/ProcessOutputStream.ts b/src/app-server/v2/ProcessOutputStream.ts new file mode 100644 index 00000000..1bb550d9 --- /dev/null +++ b/src/app-server/v2/ProcessOutputStream.ts @@ -0,0 +1,8 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * Stream label for `process/outputDelta` notifications. + */ +export type ProcessOutputStream = "stdout" | "stderr"; diff --git a/src/app-server/v2/ProcessTerminalSize.ts b/src/app-server/v2/ProcessTerminalSize.ts new file mode 100644 index 00000000..1c4b4670 --- /dev/null +++ b/src/app-server/v2/ProcessTerminalSize.ts @@ -0,0 +1,16 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +/** + * PTY size in character cells for `process/spawn` PTY sessions. + */ +export type ProcessTerminalSize = { +/** + * Terminal height in character cells. + */ +rows: number, +/** + * Terminal width in character cells. + */ +cols: number, }; diff --git a/src/app-server/v2/ProfileV2.ts b/src/app-server/v2/ProfileV2.ts index 7afe3e0c..d0503870 100644 --- a/src/app-server/v2/ProfileV2.ts +++ b/src/app-server/v2/ProfileV2.ts @@ -3,7 +3,6 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { ReasoningEffort } from "../ReasoningEffort"; import type { ReasoningSummary } from "../ReasoningSummary"; -import type { ServiceTier } from "../ServiceTier"; import type { Verbosity } from "../Verbosity"; import type { WebSearchMode } from "../WebSearchMode"; import type { JsonValue } from "../serde_json/JsonValue"; @@ -16,4 +15,4 @@ export type ProfileV2 = {model: string | null, model_provider: string | null, ap * are routed for review. If omitted, the enclosing config default is * used. */ -approvals_reviewer: ApprovalsReviewer | null, service_tier: ServiceTier | null, model_reasoning_effort: ReasoningEffort | null, model_reasoning_summary: ReasoningSummary | null, model_verbosity: Verbosity | null, web_search: WebSearchMode | null, tools: ToolsV2 | null, chatgpt_base_url: string | null} & ({ [key in string]?: number | string | boolean | Array | { [key in string]?: JsonValue } | null }); +approvals_reviewer: ApprovalsReviewer | null, service_tier: string | null, model_reasoning_effort: ReasoningEffort | null, model_reasoning_summary: ReasoningSummary | null, model_verbosity: Verbosity | null, web_search: WebSearchMode | null, tools: ToolsV2 | null, chatgpt_base_url: string | null} & ({ [key in string]?: number | string | boolean | Array | { [key in string]?: JsonValue } | null }); diff --git a/src/app-server/v2/SkillsListParams.ts b/src/app-server/v2/SkillsListParams.ts index ad714a32..4adeb38b 100644 --- a/src/app-server/v2/SkillsListParams.ts +++ b/src/app-server/v2/SkillsListParams.ts @@ -1,7 +1,6 @@ // GENERATED CODE! DO NOT MODIFY BY HAND! // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { SkillsListExtraRootsForCwd } from "./SkillsListExtraRootsForCwd"; export type SkillsListParams = { /** @@ -11,8 +10,4 @@ cwds?: Array, /** * When true, bypass the skills cache and re-scan skills from disk. */ -forceReload?: boolean, -/** - * Optional per-cwd extra roots to scan as user-scoped skills. - */ -perCwdExtraUserRoots?: Array | null, }; +forceReload?: boolean, }; diff --git a/src/app-server/v2/Thread.ts b/src/app-server/v2/Thread.ts index 8c4c9394..d917094e 100644 --- a/src/app-server/v2/Thread.ts +++ b/src/app-server/v2/Thread.ts @@ -4,10 +4,15 @@ import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { GitInfo } from "./GitInfo"; import type { SessionSource } from "./SessionSource"; +import type { ThreadSource } from "./ThreadSource"; import type { ThreadStatus } from "./ThreadStatus"; import type { Turn } from "./Turn"; export type Thread = { id: string, +/** + * Session id shared by threads that belong to the same session tree. + */ +sessionId: string, /** * Source thread id when this thread was created by forking another thread. */ @@ -52,6 +57,10 @@ cliVersion: string, * Origin of the thread (CLI, VSCode, codex exec, codex app-server, etc.). */ source: SessionSource, +/** + * Optional analytics source classification for this thread. + */ +threadSource: ThreadSource | null, /** * Optional random unique nickname assigned to an AgentControl-spawned sub-agent. */ diff --git a/src/app-server/v2/ThreadForkParams.ts b/src/app-server/v2/ThreadForkParams.ts index a40e406d..6076a4bb 100644 --- a/src/app-server/v2/ThreadForkParams.ts +++ b/src/app-server/v2/ThreadForkParams.ts @@ -1,11 +1,11 @@ // GENERATED CODE! DO NOT MODIFY BY HAND! // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { ServiceTier } from "../ServiceTier"; import type { JsonValue } from "../serde_json/JsonValue"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxMode } from "./SandboxMode"; +import type { ThreadSource } from "./ThreadSource"; /** * There are two ways to fork a thread: @@ -19,13 +19,11 @@ import type { SandboxMode } from "./SandboxMode"; export type ThreadForkParams = {threadId: string, /** * Configuration overrides for the forked thread, if any. */ -model?: string | null, modelProvider?: string | null, serviceTier?: ServiceTier | null | null, cwd?: string | null, approvalPolicy?: AskForApproval | null, /** +model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, approvalPolicy?: AskForApproval | null, /** * Override where approval requests are routed for review on this thread * and subsequent turns. */ approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, ephemeral?: boolean, /** - * When true, return only thread metadata and live fork state without - * populating `thread.turns`. This is useful when the client plans to call - * `thread/turns/list` immediately after forking. + * Optional client-supplied analytics source classification for this forked thread. */ -excludeTurns?: boolean}; +threadSource?: ThreadSource | null}; diff --git a/src/app-server/v2/ThreadForkResponse.ts b/src/app-server/v2/ThreadForkResponse.ts index ddcef104..c44533ec 100644 --- a/src/app-server/v2/ThreadForkResponse.ts +++ b/src/app-server/v2/ThreadForkResponse.ts @@ -3,13 +3,12 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { ReasoningEffort } from "../ReasoningEffort"; -import type { ServiceTier } from "../ServiceTier"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxPolicy } from "./SandboxPolicy"; import type { Thread } from "./Thread"; -export type ThreadForkResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: ServiceTier | null, cwd: AbsolutePathBuf, /** +export type ThreadForkResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, /** * Instruction source files currently loaded for this thread. */ instructionSources: Array, approvalPolicy: AskForApproval, /** diff --git a/src/app-server/v2/ThreadRealtimeStartedNotification.ts b/src/app-server/v2/ThreadRealtimeStartedNotification.ts index d4941006..56763777 100644 --- a/src/app-server/v2/ThreadRealtimeStartedNotification.ts +++ b/src/app-server/v2/ThreadRealtimeStartedNotification.ts @@ -6,4 +6,4 @@ import type { RealtimeConversationVersion } from "../RealtimeConversationVersion /** * EXPERIMENTAL - emitted when thread realtime startup is accepted. */ -export type ThreadRealtimeStartedNotification = { threadId: string, sessionId: string | null, version: RealtimeConversationVersion, }; +export type ThreadRealtimeStartedNotification = { threadId: string, realtimeSessionId: string | null, version: RealtimeConversationVersion, }; diff --git a/src/app-server/v2/ThreadResumeParams.ts b/src/app-server/v2/ThreadResumeParams.ts index f9821585..6d1dbdca 100644 --- a/src/app-server/v2/ThreadResumeParams.ts +++ b/src/app-server/v2/ThreadResumeParams.ts @@ -2,7 +2,6 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { Personality } from "../Personality"; -import type { ServiceTier } from "../ServiceTier"; import type { JsonValue } from "../serde_json/JsonValue"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; @@ -22,13 +21,8 @@ import type { SandboxMode } from "./SandboxMode"; export type ThreadResumeParams = {threadId: string, /** * Configuration overrides for the resumed thread, if any. */ -model?: string | null, modelProvider?: string | null, serviceTier?: ServiceTier | null | null, cwd?: string | null, approvalPolicy?: AskForApproval | null, /** +model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, approvalPolicy?: AskForApproval | null, /** * Override where approval requests are routed for review on this thread * and subsequent turns. */ -approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null, /** - * When true, return only thread metadata and live-resume state without - * populating `thread.turns`. This is useful when the client plans to call - * `thread/turns/list` immediately after resuming. - */ -excludeTurns?: boolean}; +approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null}; diff --git a/src/app-server/v2/ThreadResumeResponse.ts b/src/app-server/v2/ThreadResumeResponse.ts index f7627c07..f91756c7 100644 --- a/src/app-server/v2/ThreadResumeResponse.ts +++ b/src/app-server/v2/ThreadResumeResponse.ts @@ -3,13 +3,12 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { ReasoningEffort } from "../ReasoningEffort"; -import type { ServiceTier } from "../ServiceTier"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxPolicy } from "./SandboxPolicy"; import type { Thread } from "./Thread"; -export type ThreadResumeResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: ServiceTier | null, cwd: AbsolutePathBuf, /** +export type ThreadResumeResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, /** * Instruction source files currently loaded for this thread. */ instructionSources: Array, approvalPolicy: AskForApproval, /** diff --git a/src/app-server/v2/ThreadSource.ts b/src/app-server/v2/ThreadSource.ts new file mode 100644 index 00000000..8f555248 --- /dev/null +++ b/src/app-server/v2/ThreadSource.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type ThreadSource = "user" | "subagent" | "memory_consolidation"; diff --git a/src/app-server/v2/ThreadStartParams.ts b/src/app-server/v2/ThreadStartParams.ts index 374ac2e6..30509ef6 100644 --- a/src/app-server/v2/ThreadStartParams.ts +++ b/src/app-server/v2/ThreadStartParams.ts @@ -2,15 +2,18 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { Personality } from "../Personality"; -import type { ServiceTier } from "../ServiceTier"; import type { JsonValue } from "../serde_json/JsonValue"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxMode } from "./SandboxMode"; +import type { ThreadSource } from "./ThreadSource"; import type { ThreadStartSource } from "./ThreadStartSource"; -export type ThreadStartParams = {model?: string | null, modelProvider?: string | null, serviceTier?: ServiceTier | null | null, cwd?: string | null, approvalPolicy?: AskForApproval | null, /** +export type ThreadStartParams = {model?: string | null, modelProvider?: string | null, serviceTier?: string | null | null, cwd?: string | null, approvalPolicy?: AskForApproval | null, /** * Override where approval requests are routed for review on this thread * and subsequent turns. */ -approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, serviceName?: string | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null, ephemeral?: boolean | null, sessionStartSource?: ThreadStartSource | null}; +approvalsReviewer?: ApprovalsReviewer | null, sandbox?: SandboxMode | null, config?: { [key in string]?: JsonValue } | null, serviceName?: string | null, baseInstructions?: string | null, developerInstructions?: string | null, personality?: Personality | null, ephemeral?: boolean | null, sessionStartSource?: ThreadStartSource | null, /** + * Optional client-supplied analytics source classification for this thread. + */ +threadSource?: ThreadSource | null}; diff --git a/src/app-server/v2/ThreadStartResponse.ts b/src/app-server/v2/ThreadStartResponse.ts index ce28a4a1..9573bd7d 100644 --- a/src/app-server/v2/ThreadStartResponse.ts +++ b/src/app-server/v2/ThreadStartResponse.ts @@ -3,13 +3,12 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { AbsolutePathBuf } from "../AbsolutePathBuf"; import type { ReasoningEffort } from "../ReasoningEffort"; -import type { ServiceTier } from "../ServiceTier"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; import type { SandboxPolicy } from "./SandboxPolicy"; import type { Thread } from "./Thread"; -export type ThreadStartResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: ServiceTier | null, cwd: AbsolutePathBuf, /** +export type ThreadStartResponse = {thread: Thread, model: string, modelProvider: string, serviceTier: string | null, cwd: AbsolutePathBuf, /** * Instruction source files currently loaded for this thread. */ instructionSources: Array, approvalPolicy: AskForApproval, /** diff --git a/src/app-server/v2/ThreadTurnsListParams.ts b/src/app-server/v2/ThreadTurnsListParams.ts deleted file mode 100644 index 2c507bc9..00000000 --- a/src/app-server/v2/ThreadTurnsListParams.ts +++ /dev/null @@ -1,18 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { SortDirection } from "./SortDirection"; - -export type ThreadTurnsListParams = { threadId: string, -/** - * Opaque cursor to pass to the next call to continue after the last turn. - */ -cursor?: string | null, -/** - * Optional turn page size. - */ -limit?: number | null, -/** - * Optional turn pagination direction; defaults to descending. - */ -sortDirection?: SortDirection | null, }; diff --git a/src/app-server/v2/ThreadTurnsListResponse.ts b/src/app-server/v2/ThreadTurnsListResponse.ts deleted file mode 100644 index 1dbed91a..00000000 --- a/src/app-server/v2/ThreadTurnsListResponse.ts +++ /dev/null @@ -1,18 +0,0 @@ -// GENERATED CODE! DO NOT MODIFY BY HAND! - -// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. -import type { Turn } from "./Turn"; - -export type ThreadTurnsListResponse = { data: Array, -/** - * Opaque cursor to pass to the next call to continue after the last turn. - * if None, there are no more turns to return. - */ -nextCursor: string | null, -/** - * Opaque cursor to pass as `cursor` when reversing `sortDirection`. - * This is only populated when the page contains at least one turn. - * Use it with the opposite `sortDirection` to include the anchor turn again - * and catch updates to that turn. - */ -backwardsCursor: string | null, }; diff --git a/src/app-server/v2/Turn.ts b/src/app-server/v2/Turn.ts index 844c09c4..6505ec34 100644 --- a/src/app-server/v2/Turn.ts +++ b/src/app-server/v2/Turn.ts @@ -3,15 +3,18 @@ // This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. import type { ThreadItem } from "./ThreadItem"; import type { TurnError } from "./TurnError"; +import type { TurnItemsView } from "./TurnItemsView"; import type { TurnStatus } from "./TurnStatus"; export type Turn = { id: string, /** - * Only populated on a `thread/resume` or `thread/fork` response. - * For all other responses and notifications returning a Turn, - * the items field will be an empty list. + * Thread items currently included in this turn payload. */ -items: Array, status: TurnStatus, +items: Array, +/** + * Describes how much of `items` has been loaded for this turn. + */ +itemsView: TurnItemsView, status: TurnStatus, /** * Only populated when the Turn's status is failed. */ diff --git a/src/app-server/v2/TurnItemsView.ts b/src/app-server/v2/TurnItemsView.ts new file mode 100644 index 00000000..90569230 --- /dev/null +++ b/src/app-server/v2/TurnItemsView.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type TurnItemsView = "notLoaded" | "summary" | "full"; diff --git a/src/app-server/v2/TurnStartParams.ts b/src/app-server/v2/TurnStartParams.ts index 4af17115..b04919d8 100644 --- a/src/app-server/v2/TurnStartParams.ts +++ b/src/app-server/v2/TurnStartParams.ts @@ -4,7 +4,6 @@ import type { Personality } from "../Personality"; import type { ReasoningEffort } from "../ReasoningEffort"; import type { ReasoningSummary } from "../ReasoningSummary"; -import type { ServiceTier } from "../ServiceTier"; import type { JsonValue } from "../serde_json/JsonValue"; import type { ApprovalsReviewer } from "./ApprovalsReviewer"; import type { AskForApproval } from "./AskForApproval"; @@ -30,7 +29,7 @@ sandboxPolicy?: SandboxPolicy | null, /** model?: string | null, /** * Override the service tier for this turn and subsequent turns. */ -serviceTier?: ServiceTier | null | null, /** +serviceTier?: string | null | null, /** * Override the reasoning effort for this turn and subsequent turns. */ effort?: ReasoningEffort | null, /** diff --git a/src/app-server/v2/WindowsSandboxReadiness.ts b/src/app-server/v2/WindowsSandboxReadiness.ts new file mode 100644 index 00000000..41b1161a --- /dev/null +++ b/src/app-server/v2/WindowsSandboxReadiness.ts @@ -0,0 +1,5 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. + +export type WindowsSandboxReadiness = "ready" | "notConfigured" | "updateRequired"; diff --git a/src/app-server/v2/WindowsSandboxReadinessResponse.ts b/src/app-server/v2/WindowsSandboxReadinessResponse.ts new file mode 100644 index 00000000..bc42a1d9 --- /dev/null +++ b/src/app-server/v2/WindowsSandboxReadinessResponse.ts @@ -0,0 +1,6 @@ +// GENERATED CODE! DO NOT MODIFY BY HAND! + +// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually. +import type { WindowsSandboxReadiness } from "./WindowsSandboxReadiness"; + +export type WindowsSandboxReadinessResponse = { status: WindowsSandboxReadiness, }; diff --git a/src/app-server/v2/index.ts b/src/app-server/v2/index.ts index f205e056..abde48b9 100644 --- a/src/app-server/v2/index.ts +++ b/src/app-server/v2/index.ts @@ -177,6 +177,7 @@ export type { HookRunSummary } from "./HookRunSummary"; export type { HookScope } from "./HookScope"; export type { HookSource } from "./HookSource"; export type { HookStartedNotification } from "./HookStartedNotification"; +export type { HookTrustStatus } from "./HookTrustStatus"; export type { HooksListEntry } from "./HooksListEntry"; export type { HooksListParams } from "./HooksListParams"; export type { HooksListResponse } from "./HooksListResponse"; @@ -257,6 +258,7 @@ export type { ModelProviderCapabilitiesReadParams } from "./ModelProviderCapabil export type { ModelProviderCapabilitiesReadResponse } from "./ModelProviderCapabilitiesReadResponse"; export type { ModelRerouteReason } from "./ModelRerouteReason"; export type { ModelReroutedNotification } from "./ModelReroutedNotification"; +export type { ModelServiceTier } from "./ModelServiceTier"; export type { ModelUpgradeInfo } from "./ModelUpgradeInfo"; export type { ModelVerification } from "./ModelVerification"; export type { ModelVerificationNotification } from "./ModelVerificationNotification"; @@ -282,21 +284,45 @@ export type { PermissionsRequestApprovalParams } from "./PermissionsRequestAppro export type { PermissionsRequestApprovalResponse } from "./PermissionsRequestApprovalResponse"; export type { PlanDeltaNotification } from "./PlanDeltaNotification"; export type { PluginAuthPolicy } from "./PluginAuthPolicy"; +export type { PluginAvailability } from "./PluginAvailability"; export type { PluginDetail } from "./PluginDetail"; +export type { PluginHookSummary } from "./PluginHookSummary"; export type { PluginInstallParams } from "./PluginInstallParams"; export type { PluginInstallPolicy } from "./PluginInstallPolicy"; export type { PluginInstallResponse } from "./PluginInstallResponse"; export type { PluginInterface } from "./PluginInterface"; +export type { PluginListMarketplaceKind } from "./PluginListMarketplaceKind"; export type { PluginListParams } from "./PluginListParams"; export type { PluginListResponse } from "./PluginListResponse"; export type { PluginMarketplaceEntry } from "./PluginMarketplaceEntry"; export type { PluginReadParams } from "./PluginReadParams"; export type { PluginReadResponse } from "./PluginReadResponse"; +export type { PluginShareContext } from "./PluginShareContext"; +export type { PluginShareDeleteParams } from "./PluginShareDeleteParams"; +export type { PluginShareDeleteResponse } from "./PluginShareDeleteResponse"; +export type { PluginShareDiscoverability } from "./PluginShareDiscoverability"; +export type { PluginShareListItem } from "./PluginShareListItem"; +export type { PluginShareListParams } from "./PluginShareListParams"; +export type { PluginShareListResponse } from "./PluginShareListResponse"; +export type { PluginSharePrincipal } from "./PluginSharePrincipal"; +export type { PluginSharePrincipalType } from "./PluginSharePrincipalType"; +export type { PluginShareSaveParams } from "./PluginShareSaveParams"; +export type { PluginShareSaveResponse } from "./PluginShareSaveResponse"; +export type { PluginShareTarget } from "./PluginShareTarget"; +export type { PluginShareUpdateDiscoverability } from "./PluginShareUpdateDiscoverability"; +export type { PluginShareUpdateTargetsParams } from "./PluginShareUpdateTargetsParams"; +export type { PluginShareUpdateTargetsResponse } from "./PluginShareUpdateTargetsResponse"; +export type { PluginSkillReadParams } from "./PluginSkillReadParams"; +export type { PluginSkillReadResponse } from "./PluginSkillReadResponse"; export type { PluginSource } from "./PluginSource"; export type { PluginSummary } from "./PluginSummary"; export type { PluginUninstallParams } from "./PluginUninstallParams"; export type { PluginUninstallResponse } from "./PluginUninstallResponse"; export type { PluginsMigration } from "./PluginsMigration"; +export type { ProcessExitedNotification } from "./ProcessExitedNotification"; +export type { ProcessOutputDeltaNotification } from "./ProcessOutputDeltaNotification"; +export type { ProcessOutputStream } from "./ProcessOutputStream"; +export type { ProcessTerminalSize } from "./ProcessTerminalSize"; export type { ProductSurface } from "./ProductSurface"; export type { ProfileV2 } from "./ProfileV2"; export type { RateLimitReachedType } from "./RateLimitReachedType"; @@ -406,6 +432,7 @@ export type { ThreadSetNameResponse } from "./ThreadSetNameResponse"; export type { ThreadShellCommandParams } from "./ThreadShellCommandParams"; export type { ThreadShellCommandResponse } from "./ThreadShellCommandResponse"; export type { ThreadSortKey } from "./ThreadSortKey"; +export type { ThreadSource } from "./ThreadSource"; export type { ThreadSourceKind } from "./ThreadSourceKind"; export type { ThreadStartParams } from "./ThreadStartParams"; export type { ThreadStartResponse } from "./ThreadStartResponse"; @@ -415,8 +442,6 @@ export type { ThreadStatus } from "./ThreadStatus"; export type { ThreadStatusChangedNotification } from "./ThreadStatusChangedNotification"; export type { ThreadTokenUsage } from "./ThreadTokenUsage"; export type { ThreadTokenUsageUpdatedNotification } from "./ThreadTokenUsageUpdatedNotification"; -export type { ThreadTurnsListParams } from "./ThreadTurnsListParams"; -export type { ThreadTurnsListResponse } from "./ThreadTurnsListResponse"; export type { ThreadUnarchiveParams } from "./ThreadUnarchiveParams"; export type { ThreadUnarchiveResponse } from "./ThreadUnarchiveResponse"; export type { ThreadUnarchivedNotification } from "./ThreadUnarchivedNotification"; @@ -437,6 +462,7 @@ export type { TurnEnvironmentParams } from "./TurnEnvironmentParams"; export type { TurnError } from "./TurnError"; export type { TurnInterruptParams } from "./TurnInterruptParams"; export type { TurnInterruptResponse } from "./TurnInterruptResponse"; +export type { TurnItemsView } from "./TurnItemsView"; export type { TurnPlanStep } from "./TurnPlanStep"; export type { TurnPlanStepStatus } from "./TurnPlanStepStatus"; export type { TurnPlanUpdatedNotification } from "./TurnPlanUpdatedNotification"; @@ -449,6 +475,8 @@ export type { TurnSteerResponse } from "./TurnSteerResponse"; export type { UserInput } from "./UserInput"; export type { WarningNotification } from "./WarningNotification"; export type { WebSearchAction } from "./WebSearchAction"; +export type { WindowsSandboxReadiness } from "./WindowsSandboxReadiness"; +export type { WindowsSandboxReadinessResponse } from "./WindowsSandboxReadinessResponse"; export type { WindowsSandboxSetupCompletedNotification } from "./WindowsSandboxSetupCompletedNotification"; export type { WindowsSandboxSetupMode } from "./WindowsSandboxSetupMode"; export type { WindowsSandboxSetupStartParams } from "./WindowsSandboxSetupStartParams"; From 335f9827d9f740d356793aa6fc2624c28c62ed82 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 9 May 2026 07:16:51 +0000 Subject: [PATCH 2/3] Fix types and tests after Codex update --- src/CodexAcpClient.ts | 25 +++---------------- src/CodexEventHandler.ts | 2 ++ .../CodexACPAgent/CodexAcpClient.test.ts | 25 +++++++------------ .../CodexACPAgent/approval-events.test.ts | 10 ++++++++ .../command-action-events.test.ts | 12 +++++++++ .../data/send-attachments-turn-start.json | 8 +----- .../CodexACPAgent/elicitation-events.test.ts | 3 +++ .../CodexACPAgent/file-change-events.test.ts | 7 ++++++ .../CodexACPAgent/list-sessions.test.ts | 4 +++ .../CodexACPAgent/load-session.test.ts | 10 ++++++++ .../CodexACPAgent/model-filtering.test.ts | 4 +++ .../terminal-output-events.test.ts | 7 ++++++ 12 files changed, 73 insertions(+), 44 deletions(-) diff --git a/src/CodexAcpClient.ts b/src/CodexAcpClient.ts index b4755130..bcd4a6fd 100644 --- a/src/CodexAcpClient.ts +++ b/src/CodexAcpClient.ts @@ -200,7 +200,7 @@ export class CodexAcpClient { } async resumeSession(request: acp.ResumeSessionRequest): Promise { - await this.refreshSkills(request.cwd, request._meta); + await this.refreshSkills(request.cwd); const response = await this.codexClient.threadResume({ approvalPolicy: null, @@ -247,7 +247,7 @@ export class CodexAcpClient { } async newSession(request: acp.NewSessionRequest): Promise { - await this.refreshSkills(request.cwd, request._meta); + await this.refreshSkills(request.cwd); const response = await this.codexClient.threadStart({ config: this.createSessionConfig(request.cwd, request.mcpServers), @@ -310,18 +310,13 @@ export class CodexAcpClient { return this.getModelProvider() ?? "openai"; } - private async refreshSkills(cwd: string, meta?: Record | null): Promise { + private async refreshSkills(cwd: string): Promise { if (!cwd) { return; } - const additionalRoots = readAdditionalRoots(meta); await this.codexClient.listSkills({ cwds: [cwd], forceReload: true, - perCwdExtraUserRoots: [{ - cwd: cwd, - extraUserRoots: additionalRoots - }] }); } @@ -382,7 +377,7 @@ export class CodexAcpClient { const input = buildPromptItems(request.prompt); const effort = modelId.effort as ReasoningEffort | null; //TODO remove unsafe conversion - await this.refreshSkills(cwd, request._meta); + await this.refreshSkills(cwd); return await this.codexClient.runTurn({ outputSchema: null, threadId: request.sessionId, @@ -641,18 +636,6 @@ interface GatewayConfig { } } -function readAdditionalRoots(meta: Record | null | undefined): string[] { - const rawRoots = meta?.["additionalRoots"]; - if (!Array.isArray(rawRoots)) { - return []; - } - - return Array.from(new Set(rawRoots - .filter((value): value is string => typeof value === "string") - .map(value => value.trim()) - .filter(value => value.length > 0))); -} - function mergeGatewayConfig(config: JsonObject, gatewayConfig: GatewayConfig | null): JsonObject { if (gatewayConfig !== null) { const newConfig = {...config}; diff --git a/src/CodexEventHandler.ts b/src/CodexEventHandler.ts index d752cfc0..7b925d1d 100644 --- a/src/CodexEventHandler.ts +++ b/src/CodexEventHandler.ts @@ -119,6 +119,8 @@ export class CodexEventHandler { return this.handleFuzzyFileSearchSessionCompleted(notification.params); // ignored events case "command/exec/outputDelta": + case "process/outputDelta": + case "process/exited": case "item/autoApprovalReview/started": case "item/autoApprovalReview/completed": case "hook/started": diff --git a/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts b/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts index 27ff179f..d280a818 100644 --- a/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts +++ b/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts @@ -210,7 +210,7 @@ describe('ACP server test', { timeout: 40_000 }, () => { expect(logoutSpy).toHaveBeenCalledWith({}); }); - it('prefetches session additional skill roots before thread start', async () => { + it('prefetches session skills before thread start', async () => { const mockFixture = createCodexMockTestFixture(); const codexAcpClient = mockFixture.getCodexAcpClient(); const codexAppServerClient = mockFixture.getCodexAppServerClient(); @@ -240,6 +240,7 @@ describe('ACP server test', { timeout: 40_000 }, () => { inputModalities: ["text"], supportsPersonality: false, additionalSpeedTiers: [], + serviceTiers: [], isDefault: true }], nextCursor: null @@ -248,18 +249,11 @@ describe('ACP server test', { timeout: 40_000 }, () => { await codexAcpClient.newSession({ cwd: "/workspace", mcpServers: [], - _meta: { - additionalRoots: ["/skills/one", " /skills/two ", 7] - } }); expect(listSkillsSpy).toHaveBeenCalledWith({ cwds: ["/workspace"], forceReload: true, - perCwdExtraUserRoots: [{ - cwd: "/workspace", - extraUserRoots: ["/skills/one", "/skills/two"] - }] }); expect(listSkillsSpy.mock.invocationCallOrder[0]!).toBeLessThan(threadStartSpy.mock.invocationCallOrder[0]!); }); @@ -353,7 +347,7 @@ describe('ACP server test', { timeout: 40_000 }, () => { expect(session.sessionId).toBe("thread-id"); }); - it('prefetches session additional skill roots before turn start', async () => { + it('prefetches session skills before turn start', async () => { const mockFixture = createCodexMockTestFixture(); const codexAcpAgent = mockFixture.getCodexAcpAgent(); const codexAppServerClient = mockFixture.getCodexAppServerClient(); @@ -375,19 +369,12 @@ describe('ACP server test', { timeout: 40_000 }, () => { const promptRequest: acp.PromptRequest = { sessionId: "session-id", prompt: [{ type: "text", text: "Hello" }], - _meta: { - additionalRoots: ["/skills/one", " /skills/two ", 7] - } }; await codexAcpAgent.prompt(promptRequest); expect(listSkillsSpy).toHaveBeenCalledWith({ cwds: ["/workspace"], forceReload: true, - perCwdExtraUserRoots: [{ - cwd: "/workspace", - extraUserRoots: ["/skills/one", "/skills/two"] - }] }); expect(listSkillsSpy.mock.invocationCallOrder[0]!).toBeLessThan(turnStartSpy.mock.invocationCallOrder[0]!); }); @@ -411,6 +398,7 @@ describe('ACP server test', { timeout: 40_000 }, () => { return { id, items: [], + itemsView: "full" as const, status, error: null, startedAt: null, @@ -652,6 +640,7 @@ describe('ACP server test', { timeout: 40_000 }, () => { turn: { id: "turn-id", items: [], + itemsView: "full", status: "completed", error: null, startedAt: null, @@ -829,6 +818,7 @@ describe('ACP server test', { timeout: 40_000 }, () => { defaultReasoningEffort: 'medium', supportsPersonality: false, additionalSpeedTiers: [], + serviceTiers: [], isDefault: false, inputModalities: [] }, @@ -847,6 +837,7 @@ describe('ACP server test', { timeout: 40_000 }, () => { defaultReasoningEffort: 'low', supportsPersonality: false, additionalSpeedTiers: [], + serviceTiers: [], isDefault: true, inputModalities: [] } @@ -873,6 +864,7 @@ describe('ACP server test', { timeout: 40_000 }, () => { turn: { id: "turn-id", items: [], + itemsView: "full", status: "inProgress", error: null, startedAt: null, @@ -885,6 +877,7 @@ describe('ACP server test', { timeout: 40_000 }, () => { turn: { id: "turn-id", items: [], + itemsView: "full", status: "completed", error: null, startedAt: null, diff --git a/src/__tests__/CodexACPAgent/approval-events.test.ts b/src/__tests__/CodexACPAgent/approval-events.test.ts index 7ee43746..71ab6b7a 100644 --- a/src/__tests__/CodexACPAgent/approval-events.test.ts +++ b/src/__tests__/CodexACPAgent/approval-events.test.ts @@ -66,6 +66,7 @@ describe('Approval Events', () => { threadId: sessionId, turnId: 'turn-1', itemId: `item-${optionId}`, + startedAtMs: 0, reason: 'Test command', proposedExecpolicyAmendment: null, }; @@ -92,6 +93,7 @@ describe('Approval Events', () => { threadId: sessionId, turnId: 'turn-1', itemId: 'item-cancelled', + startedAtMs: 0, reason: null, proposedExecpolicyAmendment: null, }; @@ -112,6 +114,7 @@ describe('Approval Events', () => { threadId: 'non-existent-session', turnId: 'turn-1', itemId: 'item-no-handler', + startedAtMs: 0, reason: null, proposedExecpolicyAmendment: null, }; @@ -134,6 +137,7 @@ describe('Approval Events', () => { threadId: sessionId, turnId: 'turn-1', itemId: 'item-snapshot', + startedAtMs: 0, reason: 'Running npm install', proposedExecpolicyAmendment: null, }; @@ -161,6 +165,7 @@ describe('Approval Events', () => { threadId: sessionId, turnId: 'turn-1', itemId: 'item-with-command', + startedAtMs: 0, reason: 'Installing dependencies', command: 'npm install', cwd: '/home/user/project', @@ -198,6 +203,7 @@ describe('Approval Events', () => { threadId: sessionId, turnId: 'turn-1', itemId: 'item-shell-prefix', + startedAtMs: 0, reason: 'Installing dependencies', command, cwd: '/home/user/project', @@ -237,6 +243,7 @@ describe('Approval Events', () => { threadId: sessionId, turnId: 'turn-1', itemId: `file-change-${optionId}`, + startedAtMs: 0, reason: 'Test file change', grantRoot: null, }; @@ -263,6 +270,7 @@ describe('Approval Events', () => { threadId: sessionId, turnId: 'turn-1', itemId: 'file-change-cancelled', + startedAtMs: 0, reason: null, grantRoot: null, }; @@ -283,6 +291,7 @@ describe('Approval Events', () => { threadId: 'non-existent-session', turnId: 'turn-1', itemId: 'file-change-no-handler', + startedAtMs: 0, reason: null, grantRoot: null, }; @@ -305,6 +314,7 @@ describe('Approval Events', () => { threadId: sessionId, turnId: 'turn-1', itemId: 'file-change-snapshot', + startedAtMs: 0, reason: 'Modifying config file', grantRoot: null, }; diff --git a/src/__tests__/CodexACPAgent/command-action-events.test.ts b/src/__tests__/CodexACPAgent/command-action-events.test.ts index bb92314d..31ceebd4 100644 --- a/src/__tests__/CodexACPAgent/command-action-events.test.ts +++ b/src/__tests__/CodexACPAgent/command-action-events.test.ts @@ -23,6 +23,7 @@ describe('CodexEventHandler - command action events', () => { const listFilesNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -58,6 +59,7 @@ describe('CodexEventHandler - command action events', () => { const listFilesNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -93,6 +95,7 @@ describe('CodexEventHandler - command action events', () => { const searchNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -129,6 +132,7 @@ describe('CodexEventHandler - command action events', () => { const searchNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -165,6 +169,7 @@ describe('CodexEventHandler - command action events', () => { const searchNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -201,6 +206,7 @@ describe('CodexEventHandler - command action events', () => { const searchNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -237,6 +243,7 @@ describe('CodexEventHandler - command action events', () => { const searchNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -265,6 +272,7 @@ describe('CodexEventHandler - command action events', () => { { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -292,6 +300,7 @@ describe('CodexEventHandler - command action events', () => { { method: 'item/completed', params: { + completedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -324,6 +333,7 @@ describe('CodexEventHandler - command action events', () => { { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -360,6 +370,7 @@ describe('CodexEventHandler - command action events', () => { { method: 'item/completed', params: { + completedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -390,6 +401,7 @@ describe('CodexEventHandler - command action events', () => { const dynamicToolNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { diff --git a/src/__tests__/CodexACPAgent/data/send-attachments-turn-start.json b/src/__tests__/CodexACPAgent/data/send-attachments-turn-start.json index 9c685ece..1ccea8f4 100644 --- a/src/__tests__/CodexACPAgent/data/send-attachments-turn-start.json +++ b/src/__tests__/CodexACPAgent/data/send-attachments-turn-start.json @@ -5,13 +5,7 @@ "cwds": [ "/test/cwd" ], - "forceReload": true, - "perCwdExtraUserRoots": [ - { - "cwd": "cwd", - "extraUserRoots": [] - } - ] + "forceReload": true } } { diff --git a/src/__tests__/CodexACPAgent/elicitation-events.test.ts b/src/__tests__/CodexACPAgent/elicitation-events.test.ts index 32548bee..e9b7d145 100644 --- a/src/__tests__/CodexACPAgent/elicitation-events.test.ts +++ b/src/__tests__/CodexACPAgent/elicitation-events.test.ts @@ -251,6 +251,7 @@ describe('Elicitation Events', () => { const startedNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -269,6 +270,7 @@ describe('Elicitation Events', () => { const completedNotification: ServerNotification = { method: 'item/completed', params: { + completedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -314,6 +316,7 @@ describe('Elicitation Events', () => { const startedNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { diff --git a/src/__tests__/CodexACPAgent/file-change-events.test.ts b/src/__tests__/CodexACPAgent/file-change-events.test.ts index ce00135a..0e61ac76 100644 --- a/src/__tests__/CodexACPAgent/file-change-events.test.ts +++ b/src/__tests__/CodexACPAgent/file-change-events.test.ts @@ -44,6 +44,7 @@ describe('CodexEventHandler - file change events', () => { const newFileNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -79,6 +80,7 @@ describe('CodexEventHandler - file change events', () => { const multiFileNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -119,6 +121,7 @@ describe('CodexEventHandler - file change events', () => { const newFileNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -147,6 +150,7 @@ describe('CodexEventHandler - file change events', () => { const deleteFileNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -183,6 +187,7 @@ describe('CodexEventHandler - file change events', () => { const deletedFileNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -213,6 +218,7 @@ describe('CodexEventHandler - file change events', () => { const deleteFileNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -248,6 +254,7 @@ describe('CodexEventHandler - file change events', () => { const deletedFileNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { diff --git a/src/__tests__/CodexACPAgent/list-sessions.test.ts b/src/__tests__/CodexACPAgent/list-sessions.test.ts index a08a6fc3..ecf2bf07 100644 --- a/src/__tests__/CodexACPAgent/list-sessions.test.ts +++ b/src/__tests__/CodexACPAgent/list-sessions.test.ts @@ -14,6 +14,7 @@ describe("CodexACPAgent - list sessions", () => { const threadA: Thread = { id: "sess-1", + sessionId: "sess-1", forkedFromId: null, preview: "First session", ephemeral: false, @@ -25,6 +26,7 @@ describe("CodexACPAgent - list sessions", () => { cwd: "/repo/project", cliVersion: "0.0.0", source: "cli", + threadSource: null, agentNickname: null, agentRole: null, gitInfo: null, @@ -33,6 +35,7 @@ describe("CodexACPAgent - list sessions", () => { }; const threadB: Thread = { id: "sess-2", + sessionId: "sess-2", forkedFromId: null, preview: "Other session", ephemeral: false, @@ -44,6 +47,7 @@ describe("CodexACPAgent - list sessions", () => { cwd: "/repo/other", cliVersion: "0.0.0", source: "cli", + threadSource: null, agentNickname: null, agentRole: null, gitInfo: null, diff --git a/src/__tests__/CodexACPAgent/load-session.test.ts b/src/__tests__/CodexACPAgent/load-session.test.ts index 43aaa09a..f63087e4 100644 --- a/src/__tests__/CodexACPAgent/load-session.test.ts +++ b/src/__tests__/CodexACPAgent/load-session.test.ts @@ -33,6 +33,7 @@ describe("CodexACPAgent - loadSession", () => { inputModalities: ["text", "image"], supportsPersonality: false, additionalSpeedTiers: [], + serviceTiers: [], isDefault: true, }; @@ -43,6 +44,7 @@ describe("CodexACPAgent - loadSession", () => { const thread: Thread = { id: "session-1", + sessionId: "session-1", forkedFromId: null, preview: "Hi", ephemeral: false, @@ -54,6 +56,7 @@ describe("CodexACPAgent - loadSession", () => { cwd: "/test/project", cliVersion: "0.0.0", source: "cli", + threadSource: null, agentNickname: null, agentRole: null, gitInfo: null, @@ -61,6 +64,7 @@ describe("CodexACPAgent - loadSession", () => { turns: [ { id: "turn-1", + itemsView: "full", status: "completed", error: null, startedAt: null, @@ -196,6 +200,7 @@ describe("CodexACPAgent - loadSession", () => { inputModalities: ["text"], supportsPersonality: false, additionalSpeedTiers: [], + serviceTiers: [], isDefault: true, }; @@ -206,6 +211,7 @@ describe("CodexACPAgent - loadSession", () => { codexAppServerClient.threadResume = vi.fn().mockResolvedValue({ thread: { id: "session-1", + sessionId: "session-1", forkedFromId: null, preview: "", ephemeral: false, @@ -217,6 +223,7 @@ describe("CodexACPAgent - loadSession", () => { cwd: "/test/project", cliVersion: "0.0.0", source: "cli", + threadSource: null, agentNickname: null, agentRole: null, gitInfo: null, @@ -268,6 +275,7 @@ describe("CodexACPAgent - loadSession", () => { inputModalities: ["text"], supportsPersonality: false, additionalSpeedTiers: [], + serviceTiers: [], isDefault: true, }; @@ -278,6 +286,7 @@ describe("CodexACPAgent - loadSession", () => { codexAppServerClient.threadResume = vi.fn().mockResolvedValue({ thread: { id: "session-1", + sessionId: "session-1", forkedFromId: null, preview: "", ephemeral: false, @@ -289,6 +298,7 @@ describe("CodexACPAgent - loadSession", () => { cwd: "/test/project", cliVersion: "0.0.0", source: "cli", + threadSource: null, agentNickname: null, agentRole: null, gitInfo: null, diff --git a/src/__tests__/CodexACPAgent/model-filtering.test.ts b/src/__tests__/CodexACPAgent/model-filtering.test.ts index 97b658a4..dc6cdf81 100644 --- a/src/__tests__/CodexACPAgent/model-filtering.test.ts +++ b/src/__tests__/CodexACPAgent/model-filtering.test.ts @@ -26,6 +26,7 @@ describe("Model filtering", () => { defaultReasoningEffort: "medium", supportsPersonality: false, additionalSpeedTiers: [], + serviceTiers: [], isDefault: false, inputModalities: [] }, @@ -42,6 +43,7 @@ describe("Model filtering", () => { defaultReasoningEffort: "medium", supportsPersonality: false, additionalSpeedTiers: [], + serviceTiers: [], isDefault: false, inputModalities: [] }, @@ -58,6 +60,7 @@ describe("Model filtering", () => { defaultReasoningEffort: "medium", supportsPersonality: false, additionalSpeedTiers: [], + serviceTiers: [], isDefault: false, inputModalities: [] }, @@ -74,6 +77,7 @@ describe("Model filtering", () => { defaultReasoningEffort: "medium", supportsPersonality: false, additionalSpeedTiers: [], + serviceTiers: [], isDefault: false, inputModalities: [] }, diff --git a/src/__tests__/CodexACPAgent/terminal-output-events.test.ts b/src/__tests__/CodexACPAgent/terminal-output-events.test.ts index de5ff938..f5bd99eb 100644 --- a/src/__tests__/CodexACPAgent/terminal-output-events.test.ts +++ b/src/__tests__/CodexACPAgent/terminal-output-events.test.ts @@ -23,6 +23,7 @@ describe('CodexEventHandler - terminal output events', () => { const commandStartNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -60,6 +61,7 @@ describe('CodexEventHandler - terminal output events', () => { const commandStartNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -108,6 +110,7 @@ describe('CodexEventHandler - terminal output events', () => { const commandCompletedNotification: ServerNotification = { method: 'item/completed', params: { + completedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -137,6 +140,7 @@ describe('CodexEventHandler - terminal output events', () => { const commandFailedNotification: ServerNotification = { method: 'item/completed', params: { + completedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -166,6 +170,7 @@ describe('CodexEventHandler - terminal output events', () => { const dynamicToolCompletedNotification: ServerNotification = { method: 'item/completed', params: { + completedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -193,6 +198,7 @@ describe('CodexEventHandler - terminal output events', () => { const commandStartNotification: ServerNotification = { method: 'item/started', params: { + startedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { @@ -224,6 +230,7 @@ describe('CodexEventHandler - terminal output events', () => { const commandCompletedNotification: ServerNotification = { method: 'item/completed', params: { + completedAtMs: 0, threadId: sessionId, turnId: 'turn-1', item: { From 9590da89d100dc0dba8a2b2376dcc9ec843906a7 Mon Sep 17 00:00:00 2001 From: "Nikolai.Sviridov" Date: Mon, 11 May 2026 14:59:57 +0200 Subject: [PATCH 3/3] feat: add skill acp handling --- package-lock.json | 9 +++- src/CodexAcpClient.ts | 54 +++++++++++++++++-- .../CodexACPAgent/CodexAcpClient.test.ts | 27 ++++++++++ 3 files changed, 85 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 89915163..307139e0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1284,6 +1284,7 @@ "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -1930,6 +1931,7 @@ "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -2632,6 +2634,7 @@ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -2923,8 +2926,7 @@ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/send": { "version": "0.19.2", @@ -3188,6 +3190,7 @@ "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "~0.25.0", "get-tsconfig": "^4.7.5" @@ -3273,6 +3276,7 @@ "integrity": "sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.5.0", @@ -3490,6 +3494,7 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", "license": "MIT", + "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/src/CodexAcpClient.ts b/src/CodexAcpClient.ts index bcd4a6fd..718b4435 100644 --- a/src/CodexAcpClient.ts +++ b/src/CodexAcpClient.ts @@ -19,6 +19,7 @@ import type {JsonValue} from "./app-server/serde_json/JsonValue"; import {ModelId} from "./ModelId"; import {AgentMode} from "./AgentMode"; import path from "node:path"; +import {fileURLToPath} from "node:url"; import {logger} from "./Logger"; import type { AccountLoginCompletedNotification, @@ -37,6 +38,11 @@ import type { import packageJson from "../package.json"; import type {AuthenticationStatusResponse} from "./AcpExtensions"; +const FILE_URI_PREFIX = "file://"; +// From the Codex Rust implementation, `codex-rs/core-skills/src/loader.rs` defines `SKILLS_FILENAME = "SKILL.md"` and only parses files whose discovered filename exactly matches that value. The app-server README and bundled skill-creator sample also document `SKILL.md` as the required file for a skill. There is +// some UI/mention handling that recognizes paths ending in `SKILL.md`, but the actual loader discovery path is hardcoded around this filename. +const SKILL_FILE_NAME = "SKILL.md"; + /** * API for accessing the Codex App Server using ACP requests. * Converts ACP requests into corresponding app-server operations. @@ -597,8 +603,13 @@ function buildPromptItems(prompt: acp.ContentBlock[]): UserInput[] { const url = block.uri ?? `data:${block.mimeType};base64,${block.data}`; return {type: "image", url}; } - case "resource_link": + case "resource_link": { + const skillInput = buildSkillInput(block); + if (skillInput !== null) { + return skillInput; + } return {type: "text", text: formatUriAsLink(block.name, block.uri), text_elements: []}; + } case "resource": { const resource = block.resource as EmbeddedResourceResource; if ("text" in resource) { @@ -618,14 +629,51 @@ function formatUriAsLink(name: string | null | undefined, uri: string): string { if (name && name.length > 0) { return `[@${name}](${uri})`; } - if (uri.startsWith("file://")) { - const path = uri.replace("file://", ""); + if (uri.startsWith(FILE_URI_PREFIX)) { + const path = uri.replace(FILE_URI_PREFIX, ""); const fileName = path.split("/").pop() ?? path; return `[@${fileName}](${uri})`; } return uri; } +function buildSkillInput(block: acp.ResourceLink): UserInput | null { + const skillPath = parseSkillPath(block.uri); + if (skillPath === null) { + return null; + } + + const name = readSkillName(block, skillPath); + if (name === null) { + return null; + } + + return {type: "skill", name, path: skillPath}; +} + +function parseSkillPath(uri: string): string | null { + if (!uri.startsWith(FILE_URI_PREFIX)) { + return null; + } + + let filePath: string; + try { + filePath = fileURLToPath(uri); + } catch { + return null; + } + + return path.basename(filePath) === SKILL_FILE_NAME ? filePath : null; +} + +function readSkillName(block: acp.ResourceLink, skillPath: string): string | null { + const rawName = block.name === SKILL_FILE_NAME + ? path.basename(path.dirname(skillPath)) + : block.name; + const name = rawName.trim().replace(/^\$/, ""); + return name.length > 0 ? name : null; +} + interface GatewayConfig { modelProvider: string; config: { diff --git a/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts b/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts index d280a818..2f271fe2 100644 --- a/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts +++ b/src/__tests__/CodexACPAgent/CodexAcpClient.test.ts @@ -379,6 +379,33 @@ describe('ACP server test', { timeout: 40_000 }, () => { expect(listSkillsSpy.mock.invocationCallOrder[0]!).toBeLessThan(turnStartSpy.mock.invocationCallOrder[0]!); }); + it('passes provided skill resource links as prompt skill items', async () => { + const mockFixture = createCodexMockTestFixture(); + const codexAcpClient = mockFixture.getCodexAcpClient(); + const codexAppServerClient = mockFixture.getCodexAppServerClient(); + + vi.spyOn(codexAppServerClient, "listSkills").mockResolvedValue({data: []}); + const runTurnSpy = vi.spyOn(codexAppServerClient, "runTurn").mockResolvedValue({ + threadId: "session-id", + turn: createTurn("turn-id", "completed"), + } as any); + + await codexAcpClient.sendPrompt({ + sessionId: "session-id", + prompt: [ + {type: "text", text: "$extra-skill do the work"}, + {type: "resource_link", name: "extra-skill", uri: "file:///skills/extra-skill/SKILL.md"}, + ], + }, AgentMode.DEFAULT_AGENT_MODE, ModelId.create("gpt-5", "medium"), false, "/workspace"); + + expect(runTurnSpy).toHaveBeenCalledWith(expect.objectContaining({ + input: [ + {type: "text", text: "$extra-skill do the work", text_elements: []}, + {type: "skill", name: "extra-skill", path: "/skills/extra-skill/SKILL.md"}, + ], + })); + }); + function loadNotifications(){ //TODO collect logs form dev run and then load them from file to speedup const serverNotifications: ServerNotification[] = [