From 1a9555eda98cc561b4beec51fd1c577b0b068e2a Mon Sep 17 00:00:00 2001 From: xl-openai Date: Tue, 17 Mar 2026 15:22:36 -0700 Subject: [PATCH] Cleanup skills/remote/xxx endpoints. (#14977) Remote skills/remote/xxx as they are not in used for now. --- .../schema/json/ClientRequest.json | 102 ----------- .../codex_app_server_protocol.schemas.json | 158 ------------------ .../codex_app_server_protocol.v2.schemas.json | 158 ------------------ .../json/v2/SkillsRemoteReadParams.json | 47 ------ .../json/v2/SkillsRemoteReadResponse.json | 37 ---- .../json/v2/SkillsRemoteWriteParams.json | 13 -- .../json/v2/SkillsRemoteWriteResponse.json | 17 -- .../schema/typescript/ClientRequest.ts | 4 +- .../schema/typescript/v2/HazelnutScope.ts | 5 - .../schema/typescript/v2/ProductSurface.ts | 5 - .../typescript/v2/RemoteSkillSummary.ts | 5 - .../typescript/v2/SkillsRemoteReadParams.ts | 7 - .../typescript/v2/SkillsRemoteReadResponse.ts | 6 - .../typescript/v2/SkillsRemoteWriteParams.ts | 5 - .../v2/SkillsRemoteWriteResponse.ts | 5 - .../schema/typescript/v2/index.ts | 7 - .../src/protocol/common.rs | 8 - .../app-server-protocol/src/protocol/v2.rs | 67 -------- codex-rs/app-server/README.md | 2 - .../app-server/src/codex_message_processor.rs | 109 ------------ codex-rs/core/src/codex.rs | 118 ------------- codex-rs/core/src/rollout/policy.rs | 2 - codex-rs/core/src/skills/remote.rs | 54 ++++-- .../src/event_processor_with_human_output.rs | 4 - codex-rs/mcp-server/src/codex_tool_runner.rs | 2 - codex-rs/protocol/src/protocol.rs | 59 ------- codex-rs/tui/src/chatwidget.rs | 1 - codex-rs/tui_app_server/src/chatwidget.rs | 1 - .../src/codex_app_server/generated/v2_all.py | 107 ++---------- 29 files changed, 48 insertions(+), 1067 deletions(-) delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteReadParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteReadResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteWriteParams.json delete mode 100644 codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteWriteResponse.json delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/HazelnutScope.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/ProductSurface.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/RemoteSkillSummary.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteReadParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteReadResponse.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteWriteParams.ts delete mode 100644 codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteWriteResponse.ts diff --git a/codex-rs/app-server-protocol/schema/json/ClientRequest.json b/codex-rs/app-server-protocol/schema/json/ClientRequest.json index 9c2004f05..5472a70a3 100644 --- a/codex-rs/app-server-protocol/schema/json/ClientRequest.json +++ b/codex-rs/app-server-protocol/schema/json/ClientRequest.json @@ -937,15 +937,6 @@ ], "type": "object" }, - "HazelnutScope": { - "enum": [ - "example", - "workspace-shared", - "all-shared", - "personal" - ], - "type": "string" - }, "ImageDetail": { "enum": [ "auto", @@ -1328,15 +1319,6 @@ ], "type": "object" }, - "ProductSurface": { - "enum": [ - "chatgpt", - "codex", - "api", - "atlas" - ], - "type": "string" - }, "ReadOnlyAccess": { "oneOf": [ { @@ -2410,42 +2392,6 @@ }, "type": "object" }, - "SkillsRemoteReadParams": { - "properties": { - "enabled": { - "default": false, - "type": "boolean" - }, - "hazelnutScope": { - "allOf": [ - { - "$ref": "#/definitions/HazelnutScope" - } - ], - "default": "example" - }, - "productSurface": { - "allOf": [ - { - "$ref": "#/definitions/ProductSurface" - } - ], - "default": "codex" - } - }, - "type": "object" - }, - "SkillsRemoteWriteParams": { - "properties": { - "hazelnutId": { - "type": "string" - } - }, - "required": [ - "hazelnutId" - ], - "type": "object" - }, "TextElement": { "properties": { "byteRange": { @@ -3802,54 +3748,6 @@ "title": "Plugin/readRequest", "type": "object" }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "skills/remote/list" - ], - "title": "Skills/remote/listRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/SkillsRemoteReadParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Skills/remote/listRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "skills/remote/export" - ], - "title": "Skills/remote/exportRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/SkillsRemoteWriteParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Skills/remote/exportRequest", - "type": "object" - }, { "properties": { "id": { diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json index e370546dc..5697ca098 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json @@ -667,54 +667,6 @@ "title": "Plugin/readRequest", "type": "object" }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "skills/remote/list" - ], - "title": "Skills/remote/listRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/SkillsRemoteReadParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Skills/remote/listRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/v2/RequestId" - }, - "method": { - "enum": [ - "skills/remote/export" - ], - "title": "Skills/remote/exportRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/v2/SkillsRemoteWriteParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Skills/remote/exportRequest", - "type": "object" - }, { "properties": { "id": { @@ -7904,15 +7856,6 @@ ], "type": "string" }, - "HazelnutScope": { - "enum": [ - "example", - "workspace-shared", - "all-shared", - "personal" - ], - "type": "string" - }, "HookCompletedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -9520,15 +9463,6 @@ "title": "PluginUninstallResponse", "type": "object" }, - "ProductSurface": { - "enum": [ - "chatgpt", - "codex", - "api", - "atlas" - ], - "type": "string" - }, "ProfileV2": { "additionalProperties": true, "properties": { @@ -9986,25 +9920,6 @@ "title": "ReasoningTextDeltaNotification", "type": "object" }, - "RemoteSkillSummary": { - "properties": { - "description": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "description", - "id", - "name" - ], - "type": "object" - }, "RequestId": { "anyOf": [ { @@ -11381,79 +11296,6 @@ "title": "SkillsListResponse", "type": "object" }, - "SkillsRemoteReadParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "enabled": { - "default": false, - "type": "boolean" - }, - "hazelnutScope": { - "allOf": [ - { - "$ref": "#/definitions/v2/HazelnutScope" - } - ], - "default": "example" - }, - "productSurface": { - "allOf": [ - { - "$ref": "#/definitions/v2/ProductSurface" - } - ], - "default": "codex" - } - }, - "title": "SkillsRemoteReadParams", - "type": "object" - }, - "SkillsRemoteReadResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "data": { - "items": { - "$ref": "#/definitions/v2/RemoteSkillSummary" - }, - "type": "array" - } - }, - "required": [ - "data" - ], - "title": "SkillsRemoteReadResponse", - "type": "object" - }, - "SkillsRemoteWriteParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "hazelnutId": { - "type": "string" - } - }, - "required": [ - "hazelnutId" - ], - "title": "SkillsRemoteWriteParams", - "type": "object" - }, - "SkillsRemoteWriteResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "id": { - "type": "string" - }, - "path": { - "type": "string" - } - }, - "required": [ - "id", - "path" - ], - "title": "SkillsRemoteWriteResponse", - "type": "object" - }, "SubAgentSource": { "oneOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json index b069d3e5e..91fa980a6 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json @@ -1194,54 +1194,6 @@ "title": "Plugin/readRequest", "type": "object" }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "skills/remote/list" - ], - "title": "Skills/remote/listRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/SkillsRemoteReadParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Skills/remote/listRequest", - "type": "object" - }, - { - "properties": { - "id": { - "$ref": "#/definitions/RequestId" - }, - "method": { - "enum": [ - "skills/remote/export" - ], - "title": "Skills/remote/exportRequestMethod", - "type": "string" - }, - "params": { - "$ref": "#/definitions/SkillsRemoteWriteParams" - } - }, - "required": [ - "id", - "method", - "params" - ], - "title": "Skills/remote/exportRequest", - "type": "object" - }, { "properties": { "id": { @@ -4648,15 +4600,6 @@ ], "type": "string" }, - "HazelnutScope": { - "enum": [ - "example", - "workspace-shared", - "all-shared", - "personal" - ], - "type": "string" - }, "HookCompletedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { @@ -6308,15 +6251,6 @@ "title": "PluginUninstallResponse", "type": "object" }, - "ProductSurface": { - "enum": [ - "chatgpt", - "codex", - "api", - "atlas" - ], - "type": "string" - }, "ProfileV2": { "additionalProperties": true, "properties": { @@ -6774,25 +6708,6 @@ "title": "ReasoningTextDeltaNotification", "type": "object" }, - "RemoteSkillSummary": { - "properties": { - "description": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "description", - "id", - "name" - ], - "type": "object" - }, "RequestId": { "anyOf": [ { @@ -9141,79 +9056,6 @@ "title": "SkillsListResponse", "type": "object" }, - "SkillsRemoteReadParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "enabled": { - "default": false, - "type": "boolean" - }, - "hazelnutScope": { - "allOf": [ - { - "$ref": "#/definitions/HazelnutScope" - } - ], - "default": "example" - }, - "productSurface": { - "allOf": [ - { - "$ref": "#/definitions/ProductSurface" - } - ], - "default": "codex" - } - }, - "title": "SkillsRemoteReadParams", - "type": "object" - }, - "SkillsRemoteReadResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "data": { - "items": { - "$ref": "#/definitions/RemoteSkillSummary" - }, - "type": "array" - } - }, - "required": [ - "data" - ], - "title": "SkillsRemoteReadResponse", - "type": "object" - }, - "SkillsRemoteWriteParams": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "hazelnutId": { - "type": "string" - } - }, - "required": [ - "hazelnutId" - ], - "title": "SkillsRemoteWriteParams", - "type": "object" - }, - "SkillsRemoteWriteResponse": { - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "id": { - "type": "string" - }, - "path": { - "type": "string" - } - }, - "required": [ - "id", - "path" - ], - "title": "SkillsRemoteWriteResponse", - "type": "object" - }, "SubAgentSource": { "oneOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteReadParams.json b/codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteReadParams.json deleted file mode 100644 index f99e53d89..000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteReadParams.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "HazelnutScope": { - "enum": [ - "example", - "workspace-shared", - "all-shared", - "personal" - ], - "type": "string" - }, - "ProductSurface": { - "enum": [ - "chatgpt", - "codex", - "api", - "atlas" - ], - "type": "string" - } - }, - "properties": { - "enabled": { - "default": false, - "type": "boolean" - }, - "hazelnutScope": { - "allOf": [ - { - "$ref": "#/definitions/HazelnutScope" - } - ], - "default": "example" - }, - "productSurface": { - "allOf": [ - { - "$ref": "#/definitions/ProductSurface" - } - ], - "default": "codex" - } - }, - "title": "SkillsRemoteReadParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteReadResponse.json b/codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteReadResponse.json deleted file mode 100644 index a8e19c65b..000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteReadResponse.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "definitions": { - "RemoteSkillSummary": { - "properties": { - "description": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - }, - "required": [ - "description", - "id", - "name" - ], - "type": "object" - } - }, - "properties": { - "data": { - "items": { - "$ref": "#/definitions/RemoteSkillSummary" - }, - "type": "array" - } - }, - "required": [ - "data" - ], - "title": "SkillsRemoteReadResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteWriteParams.json b/codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteWriteParams.json deleted file mode 100644 index f1a70eeeb..000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteWriteParams.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "hazelnutId": { - "type": "string" - } - }, - "required": [ - "hazelnutId" - ], - "title": "SkillsRemoteWriteParams", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteWriteResponse.json b/codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteWriteResponse.json deleted file mode 100644 index b732732bd..000000000 --- a/codex-rs/app-server-protocol/schema/json/v2/SkillsRemoteWriteResponse.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "id": { - "type": "string" - }, - "path": { - "type": "string" - } - }, - "required": [ - "id", - "path" - ], - "title": "SkillsRemoteWriteResponse", - "type": "object" -} \ No newline at end of file diff --git a/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts b/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts index fd523c889..b854afd66 100644 --- a/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts +++ b/codex-rs/app-server-protocol/schema/typescript/ClientRequest.ts @@ -39,8 +39,6 @@ import type { PluginUninstallParams } from "./v2/PluginUninstallParams"; import type { ReviewStartParams } from "./v2/ReviewStartParams"; import type { SkillsConfigWriteParams } from "./v2/SkillsConfigWriteParams"; import type { SkillsListParams } from "./v2/SkillsListParams"; -import type { SkillsRemoteReadParams } from "./v2/SkillsRemoteReadParams"; -import type { SkillsRemoteWriteParams } from "./v2/SkillsRemoteWriteParams"; import type { ThreadArchiveParams } from "./v2/ThreadArchiveParams"; import type { ThreadCompactStartParams } from "./v2/ThreadCompactStartParams"; import type { ThreadForkParams } from "./v2/ThreadForkParams"; @@ -62,4 +60,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/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": "skills/list", id: RequestId, params: SkillsListParams, } | { "method": "plugin/list", id: RequestId, params: PluginListParams, } | { "method": "plugin/read", id: RequestId, params: PluginReadParams, } | { "method": "skills/remote/list", id: RequestId, params: SkillsRemoteReadParams, } | { "method": "skills/remote/export", id: RequestId, params: SkillsRemoteWriteParams, } | { "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": "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": "experimentalFeature/list", id: RequestId, params: ExperimentalFeatureListParams, } | { "method": "mcpServer/oauth/login", id: RequestId, params: McpServerOauthLoginParams, } | { "method": "config/mcpServer/reload", id: RequestId, params: undefined, } | { "method": "mcpServerStatus/list", id: RequestId, params: ListMcpServerStatusParams, } | { "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": "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/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": "skills/list", id: RequestId, params: SkillsListParams, } | { "method": "plugin/list", id: RequestId, params: PluginListParams, } | { "method": "plugin/read", id: RequestId, params: PluginReadParams, } | { "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": "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": "experimentalFeature/list", id: RequestId, params: ExperimentalFeatureListParams, } | { "method": "mcpServer/oauth/login", id: RequestId, params: McpServerOauthLoginParams, } | { "method": "config/mcpServer/reload", id: RequestId, params: undefined, } | { "method": "mcpServerStatus/list", id: RequestId, params: ListMcpServerStatusParams, } | { "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": "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/codex-rs/app-server-protocol/schema/typescript/v2/HazelnutScope.ts b/codex-rs/app-server-protocol/schema/typescript/v2/HazelnutScope.ts deleted file mode 100644 index e623f1860..000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/HazelnutScope.ts +++ /dev/null @@ -1,5 +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. - -export type HazelnutScope = "example" | "workspace-shared" | "all-shared" | "personal"; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/ProductSurface.ts b/codex-rs/app-server-protocol/schema/typescript/v2/ProductSurface.ts deleted file mode 100644 index 9998c727a..000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/ProductSurface.ts +++ /dev/null @@ -1,5 +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. - -export type ProductSurface = "chatgpt" | "codex" | "api" | "atlas"; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/RemoteSkillSummary.ts b/codex-rs/app-server-protocol/schema/typescript/v2/RemoteSkillSummary.ts deleted file mode 100644 index 7bf57b3b0..000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/RemoteSkillSummary.ts +++ /dev/null @@ -1,5 +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. - -export type RemoteSkillSummary = { id: string, name: string, description: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteReadParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteReadParams.ts deleted file mode 100644 index 1257f0d79..000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteReadParams.ts +++ /dev/null @@ -1,7 +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 { HazelnutScope } from "./HazelnutScope"; -import type { ProductSurface } from "./ProductSurface"; - -export type SkillsRemoteReadParams = { hazelnutScope: HazelnutScope, productSurface: ProductSurface, enabled: boolean, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteReadResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteReadResponse.ts deleted file mode 100644 index c1c7b1cc7..000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteReadResponse.ts +++ /dev/null @@ -1,6 +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 { RemoteSkillSummary } from "./RemoteSkillSummary"; - -export type SkillsRemoteReadResponse = { data: Array, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteWriteParams.ts b/codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteWriteParams.ts deleted file mode 100644 index ea42595bf..000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteWriteParams.ts +++ /dev/null @@ -1,5 +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. - -export type SkillsRemoteWriteParams = { hazelnutId: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteWriteResponse.ts b/codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteWriteResponse.ts deleted file mode 100644 index 228b723b1..000000000 --- a/codex-rs/app-server-protocol/schema/typescript/v2/SkillsRemoteWriteResponse.ts +++ /dev/null @@ -1,5 +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. - -export type SkillsRemoteWriteResponse = { id: string, path: string, }; diff --git a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts index 1529bbea8..63514ed9b 100644 --- a/codex-rs/app-server-protocol/schema/typescript/v2/index.ts +++ b/codex-rs/app-server-protocol/schema/typescript/v2/index.ts @@ -119,7 +119,6 @@ export type { GrantedPermissionProfile } from "./GrantedPermissionProfile"; export type { GuardianApprovalReview } from "./GuardianApprovalReview"; export type { GuardianApprovalReviewStatus } from "./GuardianApprovalReviewStatus"; export type { GuardianRiskLevel } from "./GuardianRiskLevel"; -export type { HazelnutScope } from "./HazelnutScope"; export type { HookCompletedNotification } from "./HookCompletedNotification"; export type { HookEventName } from "./HookEventName"; export type { HookExecutionMode } from "./HookExecutionMode"; @@ -211,7 +210,6 @@ export type { PluginSource } from "./PluginSource"; export type { PluginSummary } from "./PluginSummary"; export type { PluginUninstallParams } from "./PluginUninstallParams"; export type { PluginUninstallResponse } from "./PluginUninstallResponse"; -export type { ProductSurface } from "./ProductSurface"; export type { ProfileV2 } from "./ProfileV2"; export type { RateLimitSnapshot } from "./RateLimitSnapshot"; export type { RateLimitWindow } from "./RateLimitWindow"; @@ -221,7 +219,6 @@ export type { ReasoningEffortOption } from "./ReasoningEffortOption"; export type { ReasoningSummaryPartAddedNotification } from "./ReasoningSummaryPartAddedNotification"; export type { ReasoningSummaryTextDeltaNotification } from "./ReasoningSummaryTextDeltaNotification"; export type { ReasoningTextDeltaNotification } from "./ReasoningTextDeltaNotification"; -export type { RemoteSkillSummary } from "./RemoteSkillSummary"; export type { RequestPermissionProfile } from "./RequestPermissionProfile"; export type { ResidencyRequirement } from "./ResidencyRequirement"; export type { ReviewDelivery } from "./ReviewDelivery"; @@ -247,10 +244,6 @@ export type { SkillsListEntry } from "./SkillsListEntry"; export type { SkillsListExtraRootsForCwd } from "./SkillsListExtraRootsForCwd"; export type { SkillsListParams } from "./SkillsListParams"; export type { SkillsListResponse } from "./SkillsListResponse"; -export type { SkillsRemoteReadParams } from "./SkillsRemoteReadParams"; -export type { SkillsRemoteReadResponse } from "./SkillsRemoteReadResponse"; -export type { SkillsRemoteWriteParams } from "./SkillsRemoteWriteParams"; -export type { SkillsRemoteWriteResponse } from "./SkillsRemoteWriteResponse"; export type { TerminalInteractionNotification } from "./TerminalInteractionNotification"; export type { TextElement } from "./TextElement"; export type { TextPosition } from "./TextPosition"; diff --git a/codex-rs/app-server-protocol/src/protocol/common.rs b/codex-rs/app-server-protocol/src/protocol/common.rs index 73139a2e0..46020b2c8 100644 --- a/codex-rs/app-server-protocol/src/protocol/common.rs +++ b/codex-rs/app-server-protocol/src/protocol/common.rs @@ -300,14 +300,6 @@ client_request_definitions! { params: v2::PluginReadParams, response: v2::PluginReadResponse, }, - SkillsRemoteList => "skills/remote/list" { - params: v2::SkillsRemoteReadParams, - response: v2::SkillsRemoteReadResponse, - }, - SkillsRemoteExport => "skills/remote/export" { - params: v2::SkillsRemoteWriteParams, - response: v2::SkillsRemoteWriteResponse, - }, AppsList => "app/list" { params: v2::AppsListParams, response: v2::AppsListResponse, diff --git a/codex-rs/app-server-protocol/src/protocol/v2.rs b/codex-rs/app-server-protocol/src/protocol/v2.rs index e2316d8e7..c653ed049 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2.rs @@ -3107,73 +3107,6 @@ pub struct PluginReadResponse { pub plugin: PluginDetail, } -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] -#[serde(rename_all = "camelCase")] -#[ts(export_to = "v2/")] -pub struct SkillsRemoteReadParams { - #[serde(default)] - pub hazelnut_scope: HazelnutScope, - #[serde(default)] - pub product_surface: ProductSurface, - #[serde(default)] - pub enabled: bool, -} - -#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, JsonSchema, TS, Default)] -#[serde(rename_all = "kebab-case")] -#[ts(rename_all = "kebab-case")] -#[ts(export_to = "v2/")] -pub enum HazelnutScope { - #[default] - Example, - WorkspaceShared, - AllShared, - Personal, -} - -#[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, JsonSchema, TS, Default)] -#[serde(rename_all = "camelCase")] -#[ts(rename_all = "camelCase")] -#[ts(export_to = "v2/")] -pub enum ProductSurface { - Chatgpt, - #[default] - Codex, - Api, - Atlas, -} - -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] -#[serde(rename_all = "camelCase")] -#[ts(export_to = "v2/")] -pub struct RemoteSkillSummary { - pub id: String, - pub name: String, - pub description: String, -} - -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] -#[serde(rename_all = "camelCase")] -#[ts(export_to = "v2/")] -pub struct SkillsRemoteReadResponse { - pub data: Vec, -} - -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] -#[serde(rename_all = "camelCase")] -#[ts(export_to = "v2/")] -pub struct SkillsRemoteWriteParams { - pub hazelnut_id: String, -} - -#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] -#[serde(rename_all = "camelCase")] -#[ts(export_to = "v2/")] -pub struct SkillsRemoteWriteResponse { - pub id: String, - pub path: PathBuf, -} - #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "snake_case")] #[ts(rename_all = "snake_case")] diff --git a/codex-rs/app-server/README.md b/codex-rs/app-server/README.md index 67bc310da..55adb794a 100644 --- a/codex-rs/app-server/README.md +++ b/codex-rs/app-server/README.md @@ -167,8 +167,6 @@ Example with notification opt-out: - `plugin/list` — list discovered plugin marketplaces and plugin state, including effective marketplace install/auth policy metadata. `interface.category` uses the marketplace category when present; otherwise it falls back to the plugin manifest category. Pass `forceRemoteSync: true` to refresh curated plugin state before listing (**under development; do not call from production clients yet**). - `plugin/read` — read one plugin by `marketplacePath` plus `pluginName`, returning marketplace info, a list-style `summary`, manifest descriptions/interface metadata, and bundled skills/apps/MCP server names (**under development; do not call from production clients yet**). - `skills/changed` — notification emitted when watched local skill files change. -- `skills/remote/list` — list public remote skills (**under development; do not call from production clients yet**). -- `skills/remote/export` — download a remote skill by `hazelnutId` into `skills` under `codex_home` (**under development; do not call from production clients yet**). - `app/list` — list available apps. - `skills/config/write` — write user-level skill config by path. - `plugin/install` — install a plugin from a discovered marketplace entry, rejecting marketplace entries marked unavailable for install, and return the effective plugin auth policy plus any apps that still need auth (**under development; do not call from production clients yet**). diff --git a/codex-rs/app-server/src/codex_message_processor.rs b/codex-rs/app-server/src/codex_message_processor.rs index eb4e432c5..e8e98f9ab 100644 --- a/codex-rs/app-server/src/codex_message_processor.rs +++ b/codex-rs/app-server/src/codex_message_processor.rs @@ -64,7 +64,6 @@ use codex_app_server_protocol::GetConversationSummaryParams; use codex_app_server_protocol::GetConversationSummaryResponse; use codex_app_server_protocol::GitDiffToRemoteResponse; use codex_app_server_protocol::GitInfo as ApiGitInfo; -use codex_app_server_protocol::HazelnutScope as ApiHazelnutScope; use codex_app_server_protocol::JSONRPCErrorError; use codex_app_server_protocol::ListMcpServerStatusParams; use codex_app_server_protocol::ListMcpServerStatusResponse; @@ -95,7 +94,6 @@ use codex_app_server_protocol::PluginSource; use codex_app_server_protocol::PluginSummary; use codex_app_server_protocol::PluginUninstallParams; use codex_app_server_protocol::PluginUninstallResponse; -use codex_app_server_protocol::ProductSurface as ApiProductSurface; use codex_app_server_protocol::RequestId; use codex_app_server_protocol::ReviewDelivery as ApiReviewDelivery; use codex_app_server_protocol::ReviewStartParams; @@ -109,10 +107,6 @@ use codex_app_server_protocol::SkillsConfigWriteParams; use codex_app_server_protocol::SkillsConfigWriteResponse; use codex_app_server_protocol::SkillsListParams; use codex_app_server_protocol::SkillsListResponse; -use codex_app_server_protocol::SkillsRemoteReadParams; -use codex_app_server_protocol::SkillsRemoteReadResponse; -use codex_app_server_protocol::SkillsRemoteWriteParams; -use codex_app_server_protocol::SkillsRemoteWriteResponse; use codex_app_server_protocol::Thread; use codex_app_server_protocol::ThreadArchiveParams; use codex_app_server_protocol::ThreadArchiveResponse; @@ -236,8 +230,6 @@ use codex_core::read_head_for_summary; use codex_core::read_session_meta_line; use codex_core::rollout_date_parts; use codex_core::sandboxing::SandboxPermissions; -use codex_core::skills::remote::export_remote_skill; -use codex_core::skills::remote::list_remote_skills; use codex_core::state_db::StateDbHandle; use codex_core::state_db::get_state_db; use codex_core::state_db::reconcile_rollout; @@ -267,8 +259,6 @@ use codex_protocol::protocol::McpAuthStatus as CoreMcpAuthStatus; use codex_protocol::protocol::McpServerRefreshConfig; use codex_protocol::protocol::Op; use codex_protocol::protocol::RateLimitSnapshot as CoreRateLimitSnapshot; -use codex_protocol::protocol::RemoteSkillHazelnutScope; -use codex_protocol::protocol::RemoteSkillProductSurface; use codex_protocol::protocol::ReviewDelivery as CoreReviewDelivery; use codex_protocol::protocol::ReviewRequest; use codex_protocol::protocol::ReviewTarget as CoreReviewTarget; @@ -359,24 +349,6 @@ enum ThreadShutdownResult { TimedOut, } -fn convert_remote_scope(scope: ApiHazelnutScope) -> RemoteSkillHazelnutScope { - match scope { - ApiHazelnutScope::WorkspaceShared => RemoteSkillHazelnutScope::WorkspaceShared, - ApiHazelnutScope::AllShared => RemoteSkillHazelnutScope::AllShared, - ApiHazelnutScope::Personal => RemoteSkillHazelnutScope::Personal, - ApiHazelnutScope::Example => RemoteSkillHazelnutScope::Example, - } -} - -fn convert_remote_product_surface(product_surface: ApiProductSurface) -> RemoteSkillProductSurface { - match product_surface { - ApiProductSurface::Chatgpt => RemoteSkillProductSurface::Chatgpt, - ApiProductSurface::Codex => RemoteSkillProductSurface::Codex, - ApiProductSurface::Api => RemoteSkillProductSurface::Api, - ApiProductSurface::Atlas => RemoteSkillProductSurface::Atlas, - } -} - impl Drop for ActiveLogin { fn drop(&mut self) { self.shutdown_handle.shutdown(); @@ -730,14 +702,6 @@ impl CodexMessageProcessor { self.plugin_read(to_connection_request_id(request_id), params) .await; } - ClientRequest::SkillsRemoteList { request_id, params } => { - self.skills_remote_list(to_connection_request_id(request_id), params) - .await; - } - ClientRequest::SkillsRemoteExport { request_id, params } => { - self.skills_remote_export(to_connection_request_id(request_id), params) - .await; - } ClientRequest::AppsList { request_id, params } => { self.apps_list(to_connection_request_id(request_id), params) .await; @@ -5570,79 +5534,6 @@ impl CodexMessageProcessor { .await; } - async fn skills_remote_list( - &self, - request_id: ConnectionRequestId, - params: SkillsRemoteReadParams, - ) { - let hazelnut_scope = convert_remote_scope(params.hazelnut_scope); - let product_surface = convert_remote_product_surface(params.product_surface); - let enabled = if params.enabled { Some(true) } else { None }; - - let auth = self.auth_manager.auth().await; - match list_remote_skills( - &self.config, - auth.as_ref(), - hazelnut_scope, - product_surface, - enabled, - ) - .await - { - Ok(skills) => { - let data = skills - .into_iter() - .map(|skill| codex_app_server_protocol::RemoteSkillSummary { - id: skill.id, - name: skill.name, - description: skill.description, - }) - .collect(); - self.outgoing - .send_response(request_id, SkillsRemoteReadResponse { data }) - .await; - } - Err(err) => { - self.send_internal_error( - request_id, - format!("failed to list remote skills: {err}"), - ) - .await; - } - } - } - - async fn skills_remote_export( - &self, - request_id: ConnectionRequestId, - params: SkillsRemoteWriteParams, - ) { - let SkillsRemoteWriteParams { hazelnut_id } = params; - let auth = self.auth_manager.auth().await; - let response = export_remote_skill(&self.config, auth.as_ref(), hazelnut_id.as_str()).await; - - match response { - Ok(downloaded) => { - self.outgoing - .send_response( - request_id, - SkillsRemoteWriteResponse { - id: downloaded.id, - path: downloaded.path, - }, - ) - .await; - } - Err(err) => { - self.send_internal_error( - request_id, - format!("failed to download remote skill: {err}"), - ) - .await; - } - } - } - async fn skills_config_write( &self, request_id: ConnectionRequestId, diff --git a/codex-rs/core/src/codex.rs b/codex-rs/core/src/codex.rs index 9382401ba..d36747918 100644 --- a/codex-rs/core/src/codex.rs +++ b/codex-rs/core/src/codex.rs @@ -4242,27 +4242,6 @@ async fn submission_loop(sess: Arc, config: Arc, rx_sub: Receiv handlers::list_skills(&sess, sub.id.clone(), cwds, force_reload).await; false } - Op::ListRemoteSkills { - hazelnut_scope, - product_surface, - enabled, - } => { - handlers::list_remote_skills( - &sess, - &config, - sub.id.clone(), - hazelnut_scope, - product_surface, - enabled, - ) - .await; - false - } - Op::DownloadRemoteSkill { hazelnut_id } => { - handlers::export_remote_skill(&sess, &config, sub.id.clone(), hazelnut_id) - .await; - false - } Op::Undo => { handlers::undo(&sess, sub.id.clone()).await; false @@ -4384,14 +4363,9 @@ mod handlers { use codex_protocol::protocol::Event; use codex_protocol::protocol::EventMsg; use codex_protocol::protocol::ListCustomPromptsResponseEvent; - use codex_protocol::protocol::ListRemoteSkillsResponseEvent; use codex_protocol::protocol::ListSkillsResponseEvent; use codex_protocol::protocol::McpServerRefreshConfig; use codex_protocol::protocol::Op; - use codex_protocol::protocol::RemoteSkillDownloadedEvent; - use codex_protocol::protocol::RemoteSkillHazelnutScope; - use codex_protocol::protocol::RemoteSkillProductSurface; - use codex_protocol::protocol::RemoteSkillSummary; use codex_protocol::protocol::ReviewDecision; use codex_protocol::protocol::ReviewRequest; use codex_protocol::protocol::RolloutItem; @@ -4792,96 +4766,6 @@ mod handlers { sess.send_event_raw(event).await; } - pub async fn list_remote_skills( - sess: &Session, - config: &Arc, - sub_id: String, - hazelnut_scope: RemoteSkillHazelnutScope, - product_surface: RemoteSkillProductSurface, - enabled: Option, - ) { - let auth = sess.services.auth_manager.auth().await; - let response = crate::skills::remote::list_remote_skills( - config, - auth.as_ref(), - hazelnut_scope, - product_surface, - enabled, - ) - .await - .map(|skills| { - skills - .into_iter() - .map(|skill| RemoteSkillSummary { - id: skill.id, - name: skill.name, - description: skill.description, - }) - .collect::>() - }); - - match response { - Ok(skills) => { - let event = Event { - id: sub_id, - msg: EventMsg::ListRemoteSkillsResponse(ListRemoteSkillsResponseEvent { - skills, - }), - }; - sess.send_event_raw(event).await; - } - Err(err) => { - let event = Event { - id: sub_id, - msg: EventMsg::Error(ErrorEvent { - message: format!("failed to list remote skills: {err}"), - codex_error_info: Some(CodexErrorInfo::Other), - }), - }; - sess.send_event_raw(event).await; - } - } - } - - pub async fn export_remote_skill( - sess: &Session, - config: &Arc, - sub_id: String, - hazelnut_id: String, - ) { - let auth = sess.services.auth_manager.auth().await; - match crate::skills::remote::export_remote_skill( - config, - auth.as_ref(), - hazelnut_id.as_str(), - ) - .await - { - Ok(result) => { - let id = result.id; - let event = Event { - id: sub_id, - msg: EventMsg::RemoteSkillDownloaded(RemoteSkillDownloadedEvent { - id: id.clone(), - name: id, - path: result.path, - }), - }; - sess.send_event_raw(event).await; - } - Err(err) => { - let event = Event { - id: sub_id, - msg: EventMsg::Error(ErrorEvent { - message: format!("failed to export remote skill {hazelnut_id}: {err}"), - codex_error_info: Some(CodexErrorInfo::Other), - }), - }; - sess.send_event_raw(event).await; - } - } - } - pub async fn undo(sess: &Arc, sub_id: String) { let turn_context = sess.new_default_turn_with_sub_id(sub_id).await; sess.spawn_task(turn_context, Vec::new(), UndoTask::new()) @@ -6737,8 +6621,6 @@ fn realtime_text_for_event(msg: &EventMsg) -> Option { | EventMsg::McpListToolsResponse(_) | EventMsg::ListCustomPromptsResponse(_) | EventMsg::ListSkillsResponse(_) - | EventMsg::ListRemoteSkillsResponse(_) - | EventMsg::RemoteSkillDownloaded(_) | EventMsg::SkillsUpdateAvailable | EventMsg::PlanUpdate(_) | EventMsg::TurnAborted(_) diff --git a/codex-rs/core/src/rollout/policy.rs b/codex-rs/core/src/rollout/policy.rs index ca1b01b27..4600431c6 100644 --- a/codex-rs/core/src/rollout/policy.rs +++ b/codex-rs/core/src/rollout/policy.rs @@ -164,8 +164,6 @@ fn event_msg_persistence_mode(ev: &EventMsg) -> Option { | EventMsg::McpStartupComplete(_) | EventMsg::ListCustomPromptsResponse(_) | EventMsg::ListSkillsResponse(_) - | EventMsg::ListRemoteSkillsResponse(_) - | EventMsg::RemoteSkillDownloaded(_) | EventMsg::PlanUpdate(_) | EventMsg::ShutdownComplete | EventMsg::DeprecationNotice(_) diff --git a/codex-rs/core/src/skills/remote.rs b/codex-rs/core/src/skills/remote.rs index 6abd40258..165c45063 100644 --- a/codex-rs/core/src/skills/remote.rs +++ b/codex-rs/core/src/skills/remote.rs @@ -9,17 +9,34 @@ use std::time::Duration; use crate::auth::CodexAuth; use crate::config::Config; use crate::default_client::build_reqwest_client; -use codex_protocol::protocol::RemoteSkillHazelnutScope; -use codex_protocol::protocol::RemoteSkillProductSurface; const REMOTE_SKILLS_API_TIMEOUT: Duration = Duration::from_secs(30); -fn as_query_hazelnut_scope(scope: RemoteSkillHazelnutScope) -> Option<&'static str> { +// Low-level client for the remote skill API. This is intentionally kept around for +// future wiring, but it is not used yet by any active product surface. + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum RemoteSkillScope { + WorkspaceShared, + AllShared, + Personal, + Example, +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum RemoteSkillProductSurface { + Chatgpt, + Codex, + Api, + Atlas, +} + +fn as_query_scope(scope: RemoteSkillScope) -> Option<&'static str> { match scope { - RemoteSkillHazelnutScope::WorkspaceShared => Some("workspace-shared"), - RemoteSkillHazelnutScope::AllShared => Some("all-shared"), - RemoteSkillHazelnutScope::Personal => Some("personal"), - RemoteSkillHazelnutScope::Example => Some("example"), + RemoteSkillScope::WorkspaceShared => Some("workspace-shared"), + RemoteSkillScope::AllShared => Some("all-shared"), + RemoteSkillScope::Personal => Some("personal"), + RemoteSkillScope::Example => Some("example"), } } @@ -34,11 +51,11 @@ fn as_query_product_surface(product_surface: RemoteSkillProductSurface) -> &'sta fn ensure_chatgpt_auth(auth: Option<&CodexAuth>) -> Result<&CodexAuth> { let Some(auth) = auth else { - anyhow::bail!("chatgpt authentication required for hazelnut scopes"); + anyhow::bail!("chatgpt authentication required for remote skill scopes"); }; if !auth.is_chatgpt_auth() { anyhow::bail!( - "chatgpt authentication required for hazelnut scopes; api key auth is not supported" + "chatgpt authentication required for remote skill scopes; api key auth is not supported" ); } Ok(auth) @@ -59,7 +76,8 @@ pub struct RemoteSkillDownloadResult { #[derive(Debug, Deserialize)] struct RemoteSkillsResponse { - hazelnuts: Vec, + #[serde(rename = "hazelnuts")] + skills: Vec, } #[derive(Debug, Deserialize)] @@ -72,7 +90,7 @@ struct RemoteSkill { pub async fn list_remote_skills( config: &Config, auth: Option<&CodexAuth>, - hazelnut_scope: RemoteSkillHazelnutScope, + scope: RemoteSkillScope, product_surface: RemoteSkillProductSurface, enabled: Option, ) -> Result> { @@ -82,7 +100,7 @@ pub async fn list_remote_skills( let url = format!("{base_url}/hazelnuts"); let product_surface = as_query_product_surface(product_surface); let mut query_params = vec![("product_surface", product_surface)]; - if let Some(scope) = as_query_hazelnut_scope(hazelnut_scope) { + if let Some(scope) = as_query_scope(scope) { query_params.push(("scope", scope)); } if let Some(enabled) = enabled { @@ -117,7 +135,7 @@ pub async fn list_remote_skills( serde_json::from_str(&body).context("Failed to parse skills response")?; Ok(parsed - .hazelnuts + .skills .into_iter() .map(|skill| RemoteSkillSummary { id: skill.id, @@ -130,13 +148,13 @@ pub async fn list_remote_skills( pub async fn export_remote_skill( config: &Config, auth: Option<&CodexAuth>, - hazelnut_id: &str, + skill_id: &str, ) -> Result { let auth = ensure_chatgpt_auth(auth)?; let client = build_reqwest_client(); let base_url = config.chatgpt_base_url.trim_end_matches('/'); - let url = format!("{base_url}/hazelnuts/{hazelnut_id}/export"); + let url = format!("{base_url}/hazelnuts/{skill_id}/export"); let mut request = client.get(&url).timeout(REMOTE_SKILLS_API_TIMEOUT); let token = auth @@ -163,14 +181,14 @@ pub async fn export_remote_skill( anyhow::bail!("Downloaded remote skill payload is not a zip archive"); } - let output_dir = config.codex_home.join("skills").join(hazelnut_id); + let output_dir = config.codex_home.join("skills").join(skill_id); tokio::fs::create_dir_all(&output_dir) .await .context("Failed to create downloaded skills directory")?; let zip_bytes = body.to_vec(); let output_dir_clone = output_dir.clone(); - let prefix_candidates = vec![hazelnut_id.to_string()]; + let prefix_candidates = vec![skill_id.to_string()]; tokio::task::spawn_blocking(move || { extract_zip_to_dir(zip_bytes, &output_dir_clone, &prefix_candidates) }) @@ -178,7 +196,7 @@ pub async fn export_remote_skill( .context("Zip extraction task failed")??; Ok(RemoteSkillDownloadResult { - id: hazelnut_id.to_string(), + id: skill_id.to_string(), path: output_dir, }) } diff --git a/codex-rs/exec/src/event_processor_with_human_output.rs b/codex-rs/exec/src/event_processor_with_human_output.rs index 5dfcb8247..092e5d999 100644 --- a/codex-rs/exec/src/event_processor_with_human_output.rs +++ b/codex-rs/exec/src/event_processor_with_human_output.rs @@ -870,8 +870,6 @@ impl EventProcessor for EventProcessorWithHumanOutput { | EventMsg::McpListToolsResponse(_) | EventMsg::ListCustomPromptsResponse(_) | EventMsg::ListSkillsResponse(_) - | EventMsg::ListRemoteSkillsResponse(_) - | EventMsg::RemoteSkillDownloaded(_) | EventMsg::RawResponseItem(_) | EventMsg::UserMessage(_) | EventMsg::EnteredReviewMode(_) @@ -1032,8 +1030,6 @@ impl EventProcessorWithHumanOutput { | EventMsg::McpListToolsResponse(_) | EventMsg::ListCustomPromptsResponse(_) | EventMsg::ListSkillsResponse(_) - | EventMsg::ListRemoteSkillsResponse(_) - | EventMsg::RemoteSkillDownloaded(_) | EventMsg::RawResponseItem(_) | EventMsg::UserMessage(_) | EventMsg::EnteredReviewMode(_) diff --git a/codex-rs/mcp-server/src/codex_tool_runner.rs b/codex-rs/mcp-server/src/codex_tool_runner.rs index 1585b7662..780a80803 100644 --- a/codex-rs/mcp-server/src/codex_tool_runner.rs +++ b/codex-rs/mcp-server/src/codex_tool_runner.rs @@ -339,8 +339,6 @@ async fn run_codex_tool_session_inner( | EventMsg::McpListToolsResponse(_) | EventMsg::ListCustomPromptsResponse(_) | EventMsg::ListSkillsResponse(_) - | EventMsg::ListRemoteSkillsResponse(_) - | EventMsg::RemoteSkillDownloaded(_) | EventMsg::ExecCommandBegin(_) | EventMsg::TerminalInteraction(_) | EventMsg::ExecCommandOutputDelta(_) diff --git a/codex-rs/protocol/src/protocol.rs b/codex-rs/protocol/src/protocol.rs index daf3b7d74..69f71d4b0 100644 --- a/codex-rs/protocol/src/protocol.rs +++ b/codex-rs/protocol/src/protocol.rs @@ -452,16 +452,6 @@ pub enum Op { force_reload: bool, }, - /// Request the list of remote skills available via ChatGPT sharing. - ListRemoteSkills { - hazelnut_scope: RemoteSkillHazelnutScope, - product_surface: RemoteSkillProductSurface, - enabled: Option, - }, - - /// Download a remote skill by id into the local skills cache. - DownloadRemoteSkill { hazelnut_id: String }, - /// Request the agent to summarize the current conversation context. /// The agent will use its existing context (either conversation history or previous response id) /// to generate a summary which will be returned as an AgentMessage event. @@ -532,8 +522,6 @@ impl Op { Self::ReloadUserConfig => "reload_user_config", Self::ListCustomPrompts => "list_custom_prompts", Self::ListSkills { .. } => "list_skills", - Self::ListRemoteSkills { .. } => "list_remote_skills", - Self::DownloadRemoteSkill { .. } => "download_remote_skill", Self::Compact => "compact", Self::DropMemories => "drop_memories", Self::UpdateMemories => "update_memories", @@ -1299,12 +1287,6 @@ pub enum EventMsg { /// List of skills available to the agent. ListSkillsResponse(ListSkillsResponseEvent), - /// List of remote skills available to the agent. - ListRemoteSkillsResponse(ListRemoteSkillsResponseEvent), - - /// Remote skill downloaded to local cache. - RemoteSkillDownloaded(RemoteSkillDownloadedEvent), - /// Notification that skill data may have been updated and clients may want to reload. SkillsUpdateAvailable, @@ -2917,47 +2899,6 @@ pub struct ListSkillsResponseEvent { pub skills: Vec, } -#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema, TS)] -pub struct RemoteSkillSummary { - pub id: String, - pub name: String, - pub description: String, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)] -#[serde(rename_all = "kebab-case")] -#[ts(rename_all = "kebab-case")] -pub enum RemoteSkillHazelnutScope { - WorkspaceShared, - AllShared, - Personal, - Example, -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)] -#[serde(rename_all = "lowercase")] -#[ts(rename_all = "lowercase")] -pub enum RemoteSkillProductSurface { - Chatgpt, - Codex, - Api, - Atlas, -} - -/// Response payload for `Op::ListRemoteSkills`. -#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema, TS)] -pub struct ListRemoteSkillsResponseEvent { - pub skills: Vec, -} - -/// Response payload for `Op::DownloadRemoteSkill`. -#[derive(Debug, Clone, Deserialize, Serialize, JsonSchema, TS)] -pub struct RemoteSkillDownloadedEvent { - pub id: String, - pub name: String, - pub path: PathBuf, -} - #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema, TS)] #[serde(rename_all = "snake_case")] #[ts(rename_all = "snake_case")] diff --git a/codex-rs/tui/src/chatwidget.rs b/codex-rs/tui/src/chatwidget.rs index dbf318c61..b32fbf8f1 100644 --- a/codex-rs/tui/src/chatwidget.rs +++ b/codex-rs/tui/src/chatwidget.rs @@ -5354,7 +5354,6 @@ impl ChatWidget { EventMsg::McpListToolsResponse(ev) => self.on_list_mcp_tools(ev), EventMsg::ListCustomPromptsResponse(ev) => self.on_list_custom_prompts(ev), EventMsg::ListSkillsResponse(ev) => self.on_list_skills(ev), - EventMsg::ListRemoteSkillsResponse(_) | EventMsg::RemoteSkillDownloaded(_) => {} EventMsg::SkillsUpdateAvailable => { self.submit_op(Op::ListSkills { cwds: Vec::new(), diff --git a/codex-rs/tui_app_server/src/chatwidget.rs b/codex-rs/tui_app_server/src/chatwidget.rs index f7d7c6ee7..922279657 100644 --- a/codex-rs/tui_app_server/src/chatwidget.rs +++ b/codex-rs/tui_app_server/src/chatwidget.rs @@ -5189,7 +5189,6 @@ impl ChatWidget { ); } EventMsg::ListSkillsResponse(ev) => self.on_list_skills(ev), - EventMsg::ListRemoteSkillsResponse(_) | EventMsg::RemoteSkillDownloaded(_) => {} EventMsg::SkillsUpdateAvailable => { self.submit_op(AppCommand::list_skills( Vec::new(), diff --git a/sdk/python/src/codex_app_server/generated/v2_all.py b/sdk/python/src/codex_app_server/generated/v2_all.py index 2c000cc22..0ff2c5897 100644 --- a/sdk/python/src/codex_app_server/generated/v2_all.py +++ b/sdk/python/src/codex_app_server/generated/v2_all.py @@ -1133,13 +1133,6 @@ class GuardianRiskLevel(Enum): high = "high" -class HazelnutScope(Enum): - example = "example" - workspace_shared = "workspace-shared" - all_shared = "all-shared" - personal = "personal" - - class HookEventName(Enum): session_start = "sessionStart" stop = "stop" @@ -1385,6 +1378,13 @@ class LogoutAccountResponse(BaseModel): ) +class MarketplaceInterface(BaseModel): + model_config = ConfigDict( + populate_by_name=True, + ) + display_name: Annotated[str | None, Field(alias="displayName")] = None + + class McpAuthStatus(Enum): unsupported = "unsupported" not_logged_in = "notLoggedIn" @@ -1761,13 +1761,6 @@ class PluginUninstallResponse(BaseModel): ) -class ProductSurface(Enum): - chatgpt = "chatgpt" - codex = "codex" - api = "api" - atlas = "atlas" - - class RateLimitWindow(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -1920,15 +1913,6 @@ class ReasoningTextDeltaNotification(BaseModel): turn_id: Annotated[str, Field(alias="turnId")] -class RemoteSkillSummary(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - description: str - id: str - name: str - - class RequestId(RootModel[str | int]): model_config = ConfigDict( populate_by_name=True, @@ -1988,7 +1972,6 @@ class ReasoningResponseItem(BaseModel): ) content: list[ReasoningItemContent] | None = None encrypted_content: str | None = None - id: str summary: list[ReasoningItemReasoningSummary] type: Annotated[Literal["reasoning"], Field(title="ReasoningResponseItemType")] @@ -2613,41 +2596,6 @@ class SkillsListParams(BaseModel): ] = None -class SkillsRemoteReadParams(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - enabled: bool | None = False - hazelnut_scope: Annotated[HazelnutScope | None, Field(alias="hazelnutScope")] = ( - "example" - ) - product_surface: Annotated[ProductSurface | None, Field(alias="productSurface")] = ( - "codex" - ) - - -class SkillsRemoteReadResponse(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - data: list[RemoteSkillSummary] - - -class SkillsRemoteWriteParams(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - hazelnut_id: Annotated[str, Field(alias="hazelnutId")] - - -class SkillsRemoteWriteResponse(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - id: str - path: str - - class SubAgentSourceValue(Enum): review = "review" compact = "compact" @@ -3064,6 +3012,7 @@ class ThreadRealtimeAudioChunk(BaseModel): populate_by_name=True, ) data: str + item_id: Annotated[str | None, Field(alias="itemId")] = None num_channels: Annotated[int, Field(alias="numChannels", ge=0)] sample_rate: Annotated[int, Field(alias="sampleRate", ge=0)] samples_per_channel: Annotated[ @@ -3812,29 +3761,6 @@ class PluginReadRequest(BaseModel): params: PluginReadParams -class SkillsRemoteListRequest(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - id: RequestId - method: Annotated[ - Literal["skills/remote/list"], Field(title="Skills/remote/listRequestMethod") - ] - params: SkillsRemoteReadParams - - -class SkillsRemoteExportRequest(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - id: RequestId - method: Annotated[ - Literal["skills/remote/export"], - Field(title="Skills/remote/exportRequestMethod"), - ] - params: SkillsRemoteWriteParams - - class AppListRequest(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -4693,6 +4619,7 @@ class PluginMarketplaceEntry(BaseModel): model_config = ConfigDict( populate_by_name=True, ) + interface: MarketplaceInterface | None = None name: str path: AbsolutePathBuf plugins: list[PluginSummary] @@ -5603,14 +5530,6 @@ class FunctionCallOutputBody(RootModel[str | list[FunctionCallOutputContentItem] root: str | list[FunctionCallOutputContentItem] -class FunctionCallOutputPayload(BaseModel): - model_config = ConfigDict( - populate_by_name=True, - ) - body: FunctionCallOutputBody - success: bool | None = None - - class GetAccountRateLimitsResponse(BaseModel): model_config = ConfigDict( populate_by_name=True, @@ -5708,7 +5627,7 @@ class FunctionCallOutputResponseItem(BaseModel): populate_by_name=True, ) call_id: str - output: FunctionCallOutputPayload + output: FunctionCallOutputBody type: Annotated[ Literal["function_call_output"], Field(title="FunctionCallOutputResponseItemType"), @@ -5720,7 +5639,7 @@ class CustomToolCallOutputResponseItem(BaseModel): populate_by_name=True, ) call_id: str - output: FunctionCallOutputPayload + output: FunctionCallOutputBody type: Annotated[ Literal["custom_tool_call_output"], Field(title="CustomToolCallOutputResponseItemType"), @@ -6153,8 +6072,6 @@ class ClientRequest( | SkillsListRequest | PluginListRequest | PluginReadRequest - | SkillsRemoteListRequest - | SkillsRemoteExportRequest | AppListRequest | FsReadFileRequest | FsWriteFileRequest @@ -6216,8 +6133,6 @@ class ClientRequest( | SkillsListRequest | PluginListRequest | PluginReadRequest - | SkillsRemoteListRequest - | SkillsRemoteExportRequest | AppListRequest | FsReadFileRequest | FsWriteFileRequest