@agentclientprotocol/codex-acp 2.5.1-preview.17 → 2.5.1-preview.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/index.js +158 -54
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Use [OpenAI Codex](https://github.com/openai/codex) from [Agent Client Protocol]
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
11
11
|
- ChatGPT, API key, and client-provided custom gateway authentication.
|
|
12
|
-
- Model, reasoning effort, fast mode, approval,
|
|
12
|
+
- Model, reasoning effort, fast mode, approval, sandbox mode, and configured [Codex permission profile](docs/permission-profiles.md) selection.
|
|
13
13
|
- Concrete recommended model and reasoning-effort values through the opt-in [AIR recommended config values](docs/air-extensions.md#recommended-config-values) capability.
|
|
14
14
|
- Text prompts, embedded context, images, resource links, and additional workspace directories.
|
|
15
15
|
- Shell command, file change, [permission request](docs/air-extensions.md#permission-presentation), MCP tool call, terminal output, reasoning, plan, web search, image generation, image view, token usage, and review events.
|
|
@@ -73,7 +73,7 @@ The adapter advertises ACP auth methods during initialization. Clients can authe
|
|
|
73
73
|
- `CODEX_CONFIG` - JSON object merged into the Codex session config.
|
|
74
74
|
- `MODEL_PROVIDER` - model provider to pass to Codex for new sessions.
|
|
75
75
|
- `DEFAULT_AUTH_REQUEST` - ACP auth request JSON used when Codex requires authentication.
|
|
76
|
-
- `INITIAL_AGENT_MODE` - initial mode id: `read-only`, `workspace-write`, `agent`,
|
|
76
|
+
- `INITIAL_AGENT_MODE` - initial mode id: `read-only`, `workspace-write`, `agent`, `agent-full-access`, or `permission-profile:<profile-id>`.
|
|
77
77
|
- `NO_BROWSER` - hide browser-based ChatGPT auth when set.
|
|
78
78
|
- `APP_SERVER_LOGS` - directory for adapter logs.
|
|
79
79
|
|
package/dist/index.js
CHANGED
|
@@ -41772,6 +41772,7 @@ var ModelId = class _ModelId {
|
|
|
41772
41772
|
|
|
41773
41773
|
// src/AgentMode.ts
|
|
41774
41774
|
var MODE_CONFIG_ID = "mode";
|
|
41775
|
+
var PERMISSION_PROFILE_MODE_PREFIX = "permission-profile:";
|
|
41775
41776
|
var AgentMode = class _AgentMode {
|
|
41776
41777
|
id;
|
|
41777
41778
|
name;
|
|
@@ -41781,7 +41782,8 @@ var AgentMode = class _AgentMode {
|
|
|
41781
41782
|
approvalsReviewer;
|
|
41782
41783
|
sandboxPolicy;
|
|
41783
41784
|
sandboxMode;
|
|
41784
|
-
|
|
41785
|
+
permissionProfileId;
|
|
41786
|
+
constructor(id, name, description, kind, approvalPolicy, approvalsReviewer, sandboxPolicy, sandboxMode, permissionProfileId = null) {
|
|
41785
41787
|
this.id = id;
|
|
41786
41788
|
this.name = name;
|
|
41787
41789
|
this.description = description;
|
|
@@ -41790,6 +41792,7 @@ var AgentMode = class _AgentMode {
|
|
|
41790
41792
|
this.approvalsReviewer = approvalsReviewer;
|
|
41791
41793
|
this.sandboxPolicy = sandboxPolicy;
|
|
41792
41794
|
this.sandboxMode = sandboxMode;
|
|
41795
|
+
this.permissionProfileId = permissionProfileId;
|
|
41793
41796
|
}
|
|
41794
41797
|
static ReadOnly = new _AgentMode(
|
|
41795
41798
|
"read-only",
|
|
@@ -41849,7 +41852,7 @@ var AgentMode = class _AgentMode {
|
|
|
41849
41852
|
static DEFAULT_AGENT_MODE = _AgentMode.Agent;
|
|
41850
41853
|
/** Only AIR gets the mode kind, in `_meta.jetbrains.air.kind`. */
|
|
41851
41854
|
toSessionMode(airClient) {
|
|
41852
|
-
const meta3 = airOnlyMeta(airClient, AIR_KIND_KEY, this.kind);
|
|
41855
|
+
const meta3 = this.kind === null ? void 0 : airOnlyMeta(airClient, AIR_KIND_KEY, this.kind);
|
|
41853
41856
|
return {
|
|
41854
41857
|
id: this.id,
|
|
41855
41858
|
name: this.name,
|
|
@@ -41857,13 +41860,35 @@ var AgentMode = class _AgentMode {
|
|
|
41857
41860
|
...meta3 ? { _meta: meta3 } : {}
|
|
41858
41861
|
};
|
|
41859
41862
|
}
|
|
41860
|
-
toSessionModeState(airClient) {
|
|
41863
|
+
toSessionModeState(airClient, availableModes = _AgentMode.all()) {
|
|
41861
41864
|
return {
|
|
41862
|
-
availableModes:
|
|
41865
|
+
availableModes: availableModes.map((mode) => mode.toSessionMode(airClient)),
|
|
41863
41866
|
currentModeId: this.id
|
|
41864
41867
|
};
|
|
41865
41868
|
}
|
|
41866
|
-
toConfigOption(airClient) {
|
|
41869
|
+
toConfigOption(airClient, availableModes = _AgentMode.all()) {
|
|
41870
|
+
const toOptions = (modes) => modes.map((mode) => {
|
|
41871
|
+
const meta3 = mode.kind === null ? void 0 : airOnlyMeta(airClient, AIR_KIND_KEY, mode.kind);
|
|
41872
|
+
return {
|
|
41873
|
+
value: mode.id,
|
|
41874
|
+
name: mode.name,
|
|
41875
|
+
description: mode.description,
|
|
41876
|
+
...meta3 ? { _meta: meta3 } : {}
|
|
41877
|
+
};
|
|
41878
|
+
});
|
|
41879
|
+
const permissionProfileModes = availableModes.filter((mode) => mode.permissionProfileId !== null);
|
|
41880
|
+
const options = permissionProfileModes.length === 0 ? toOptions(availableModes) : [
|
|
41881
|
+
{
|
|
41882
|
+
group: "sandbox-modes",
|
|
41883
|
+
name: "Sandbox Modes",
|
|
41884
|
+
options: toOptions(availableModes.filter((mode) => mode.permissionProfileId === null))
|
|
41885
|
+
},
|
|
41886
|
+
{
|
|
41887
|
+
group: "permission-profiles",
|
|
41888
|
+
name: "Permission Profiles",
|
|
41889
|
+
options: toOptions(permissionProfileModes)
|
|
41890
|
+
}
|
|
41891
|
+
];
|
|
41867
41892
|
return {
|
|
41868
41893
|
id: MODE_CONFIG_ID,
|
|
41869
41894
|
name: "Mode",
|
|
@@ -41871,31 +41896,45 @@ var AgentMode = class _AgentMode {
|
|
|
41871
41896
|
category: "mode",
|
|
41872
41897
|
type: "select",
|
|
41873
41898
|
currentValue: this.id,
|
|
41874
|
-
options
|
|
41875
|
-
|
|
41876
|
-
|
|
41877
|
-
|
|
41878
|
-
|
|
41879
|
-
|
|
41880
|
-
|
|
41881
|
-
|
|
41882
|
-
|
|
41883
|
-
|
|
41884
|
-
|
|
41885
|
-
|
|
41886
|
-
|
|
41899
|
+
options
|
|
41900
|
+
};
|
|
41901
|
+
}
|
|
41902
|
+
static all(permissionProfiles = [], permissionProfileApprovalPolicy = "on-request", permissionProfileApprovalsReviewer = "user") {
|
|
41903
|
+
const profileModes = permissionProfiles.filter((profile) => profile.allowed && !profile.id.startsWith(":")).map((profile) => new _AgentMode(
|
|
41904
|
+
`${PERMISSION_PROFILE_MODE_PREFIX}${profile.id}`,
|
|
41905
|
+
profile.id,
|
|
41906
|
+
profile.description ?? `Use the ${profile.id} Codex permission profile.`,
|
|
41907
|
+
null,
|
|
41908
|
+
permissionProfileApprovalPolicy,
|
|
41909
|
+
permissionProfileApprovalsReviewer,
|
|
41910
|
+
null,
|
|
41911
|
+
null,
|
|
41912
|
+
profile.id
|
|
41913
|
+
));
|
|
41914
|
+
return [
|
|
41915
|
+
_AgentMode.ReadOnly,
|
|
41916
|
+
_AgentMode.WorkspaceWrite,
|
|
41917
|
+
_AgentMode.Agent,
|
|
41918
|
+
_AgentMode.AgentFullAccess,
|
|
41919
|
+
...profileModes
|
|
41920
|
+
];
|
|
41887
41921
|
}
|
|
41888
|
-
static find(modeId) {
|
|
41889
|
-
const match =
|
|
41922
|
+
static find(modeId, availableModes = _AgentMode.all()) {
|
|
41923
|
+
const match = availableModes.find((m) => m.id === modeId);
|
|
41890
41924
|
return match ?? null;
|
|
41891
41925
|
}
|
|
41892
|
-
static getInitialAgentMode() {
|
|
41926
|
+
static getInitialAgentMode(availableModes = _AgentMode.all(), activePermissionProfileId = null) {
|
|
41893
41927
|
const predefinedAgentMode = process.env["INITIAL_AGENT_MODE"];
|
|
41894
41928
|
if (predefinedAgentMode) {
|
|
41895
|
-
return _AgentMode.find(predefinedAgentMode) ?? _AgentMode.DEFAULT_AGENT_MODE;
|
|
41896
|
-
}
|
|
41897
|
-
|
|
41929
|
+
return _AgentMode.find(predefinedAgentMode, availableModes) ?? _AgentMode.DEFAULT_AGENT_MODE;
|
|
41930
|
+
}
|
|
41931
|
+
if (activePermissionProfileId !== null) {
|
|
41932
|
+
const profileMode = availableModes.find((mode) => mode.permissionProfileId === activePermissionProfileId);
|
|
41933
|
+
if (profileMode) {
|
|
41934
|
+
return profileMode;
|
|
41935
|
+
}
|
|
41898
41936
|
}
|
|
41937
|
+
return _AgentMode.DEFAULT_AGENT_MODE;
|
|
41899
41938
|
}
|
|
41900
41939
|
};
|
|
41901
41940
|
|
|
@@ -41909,7 +41948,7 @@ var package_default = {
|
|
|
41909
41948
|
publishConfig: {
|
|
41910
41949
|
access: "public"
|
|
41911
41950
|
},
|
|
41912
|
-
version: "2.5.1-preview.
|
|
41951
|
+
version: "2.5.1-preview.18",
|
|
41913
41952
|
description: "",
|
|
41914
41953
|
main: "dist/index.js",
|
|
41915
41954
|
bin: {
|
|
@@ -42202,14 +42241,14 @@ import { createHash } from "node:crypto";
|
|
|
42202
42241
|
async function forkSession(request, additionalDirectories, dependencies, instructions) {
|
|
42203
42242
|
await dependencies.refreshSkills(request.cwd, additionalDirectories);
|
|
42204
42243
|
const lastTurnId = await resolveForkTurnId(request, dependencies.codexClient);
|
|
42205
|
-
const
|
|
42244
|
+
const { config: config2, skippedMcpServers, defaultPermissionProfileId: _defaultPermissionProfileId, ...permissionProfileMetadata } = await dependencies.createSessionConfig(
|
|
42206
42245
|
request.cwd,
|
|
42207
42246
|
additionalDirectories,
|
|
42208
42247
|
request.mcpServers ?? []
|
|
42209
42248
|
);
|
|
42210
42249
|
const response = await dependencies.codexClient.threadFork({
|
|
42211
42250
|
excludeTurns: true,
|
|
42212
|
-
config:
|
|
42251
|
+
config: config2,
|
|
42213
42252
|
cwd: request.cwd,
|
|
42214
42253
|
...lastTurnId !== void 0 && { lastTurnId },
|
|
42215
42254
|
modelProvider: await dependencies.getResumeModelProvider(),
|
|
@@ -42232,7 +42271,9 @@ async function forkSession(request, additionalDirectories, dependencies, instruc
|
|
|
42232
42271
|
modelProvider: response.modelProvider,
|
|
42233
42272
|
currentServiceTier: response.serviceTier ?? null,
|
|
42234
42273
|
additionalDirectories,
|
|
42235
|
-
skippedMcpServers
|
|
42274
|
+
skippedMcpServers,
|
|
42275
|
+
activePermissionProfileId: response.activePermissionProfile?.id ?? null,
|
|
42276
|
+
...permissionProfileMetadata,
|
|
42236
42277
|
...instructions ? { instructions } : {}
|
|
42237
42278
|
};
|
|
42238
42279
|
}
|
|
@@ -42942,6 +42983,7 @@ var CodexAcpClient = class _CodexAcpClient {
|
|
|
42942
42983
|
modelProvider: response.modelProvider,
|
|
42943
42984
|
reasoningEffort: response.reasoningEffort,
|
|
42944
42985
|
serviceTier: response.serviceTier,
|
|
42986
|
+
activePermissionProfileId: response.activePermissionProfile?.id ?? null,
|
|
42945
42987
|
itemsBackwardsCursor: response.itemsBackwardsCursor ?? null,
|
|
42946
42988
|
materialized: true,
|
|
42947
42989
|
collaborationMode: response.collaborationMode?.mode ?? null
|
|
@@ -42964,6 +43006,8 @@ var CodexAcpClient = class _CodexAcpClient {
|
|
|
42964
43006
|
modelProvider: response.thread.modelProvider,
|
|
42965
43007
|
reasoningEffort: response.thread.reasoningEffort,
|
|
42966
43008
|
serviceTier: null,
|
|
43009
|
+
// thread/read omits permissions; callers restore the config default before the first prompt.
|
|
43010
|
+
activePermissionProfileId: null,
|
|
42967
43011
|
// An unmaterialized thread has no persisted history to hydrate:
|
|
42968
43012
|
// `thread/turns/list` rejects it outright ("not materialized
|
|
42969
43013
|
// yet"), and there is nothing to list either way.
|
|
@@ -42977,10 +43021,10 @@ var CodexAcpClient = class _CodexAcpClient {
|
|
|
42977
43021
|
const instructions = await this.resolveSessionInstructions(request, previousInstructions);
|
|
42978
43022
|
const additionalDirectories = readAdditionalDirectories(request.cwd, request.additionalDirectories, request._meta);
|
|
42979
43023
|
await this.refreshSkills(request.cwd, additionalDirectories);
|
|
42980
|
-
const
|
|
43024
|
+
const { config: config2, skippedMcpServers, defaultPermissionProfileId, ...permissionProfileMetadata } = await this.createSessionConfig(request.cwd, additionalDirectories, request.mcpServers ?? []);
|
|
42981
43025
|
const response = await this.resumeThreadWithInstructions({
|
|
42982
43026
|
excludeTurns: true,
|
|
42983
|
-
config:
|
|
43027
|
+
config: config2,
|
|
42984
43028
|
cwd: request.cwd,
|
|
42985
43029
|
modelProvider: await this.getResumeModelProvider(),
|
|
42986
43030
|
threadId: request.sessionId,
|
|
@@ -43000,8 +43044,10 @@ var CodexAcpClient = class _CodexAcpClient {
|
|
|
43000
43044
|
modelProvider: response.modelProvider,
|
|
43001
43045
|
currentServiceTier: response.serviceTier ?? null,
|
|
43002
43046
|
additionalDirectories,
|
|
43003
|
-
skippedMcpServers
|
|
43004
|
-
...instructions ? { instructions } : {}
|
|
43047
|
+
skippedMcpServers,
|
|
43048
|
+
...instructions ? { instructions } : {},
|
|
43049
|
+
activePermissionProfileId: response.materialized ? response.activePermissionProfileId : defaultPermissionProfileId ?? null,
|
|
43050
|
+
...permissionProfileMetadata
|
|
43005
43051
|
};
|
|
43006
43052
|
}
|
|
43007
43053
|
async forkSession(request, releaseFailedFork = (threadId) => this.closeSession(threadId), forkCreated = () => {
|
|
@@ -43024,10 +43070,10 @@ var CodexAcpClient = class _CodexAcpClient {
|
|
|
43024
43070
|
const instructions = await this.resolveSessionInstructions(request, previousInstructions);
|
|
43025
43071
|
const additionalDirectories = readAdditionalDirectories(request.cwd, request.additionalDirectories, request._meta);
|
|
43026
43072
|
await this.refreshSkills(request.cwd, additionalDirectories);
|
|
43027
|
-
const
|
|
43073
|
+
const { config: config2, skippedMcpServers, defaultPermissionProfileId, ...permissionProfileMetadata } = await this.createSessionConfig(request.cwd, additionalDirectories, request.mcpServers ?? []);
|
|
43028
43074
|
const response = await this.resumeThreadWithInstructions({
|
|
43029
43075
|
excludeTurns: true,
|
|
43030
|
-
config:
|
|
43076
|
+
config: config2,
|
|
43031
43077
|
cwd: request.cwd,
|
|
43032
43078
|
modelProvider: await this.getResumeModelProvider(),
|
|
43033
43079
|
threadId: request.sessionId,
|
|
@@ -43066,8 +43112,10 @@ var CodexAcpClient = class _CodexAcpClient {
|
|
|
43066
43112
|
thread,
|
|
43067
43113
|
history,
|
|
43068
43114
|
additionalDirectories,
|
|
43069
|
-
skippedMcpServers
|
|
43070
|
-
...instructions ? { instructions } : {}
|
|
43115
|
+
skippedMcpServers,
|
|
43116
|
+
...instructions ? { instructions } : {},
|
|
43117
|
+
activePermissionProfileId: response.materialized ? response.activePermissionProfileId : defaultPermissionProfileId ?? null,
|
|
43118
|
+
...permissionProfileMetadata
|
|
43071
43119
|
};
|
|
43072
43120
|
}
|
|
43073
43121
|
/**
|
|
@@ -43121,9 +43169,9 @@ var CodexAcpClient = class _CodexAcpClient {
|
|
|
43121
43169
|
const additionalDirectories = readAdditionalDirectories(request.cwd, request.additionalDirectories, request._meta);
|
|
43122
43170
|
const developerInstructions = instructions?.developerInstructions;
|
|
43123
43171
|
await this.refreshSkills(request.cwd, additionalDirectories);
|
|
43124
|
-
const
|
|
43172
|
+
const { config: config2, skippedMcpServers, defaultPermissionProfileId: _defaultPermissionProfileId, ...permissionProfileMetadata } = await this.createSessionConfig(request.cwd, additionalDirectories, request.mcpServers ?? []);
|
|
43125
43173
|
const response = await this.codexClient.threadStart({
|
|
43126
|
-
config:
|
|
43174
|
+
config: config2,
|
|
43127
43175
|
modelProvider: this.getModelProvider(),
|
|
43128
43176
|
cwd: request.cwd,
|
|
43129
43177
|
...developerInstructions !== void 0 && { developerInstructions }
|
|
@@ -43141,8 +43189,10 @@ var CodexAcpClient = class _CodexAcpClient {
|
|
|
43141
43189
|
modelProvider: response.modelProvider,
|
|
43142
43190
|
currentServiceTier: response.serviceTier ?? null,
|
|
43143
43191
|
additionalDirectories,
|
|
43144
|
-
skippedMcpServers
|
|
43145
|
-
...instructions ? { instructions } : {}
|
|
43192
|
+
skippedMcpServers,
|
|
43193
|
+
...instructions ? { instructions } : {},
|
|
43194
|
+
activePermissionProfileId: response.activePermissionProfile?.id ?? null,
|
|
43195
|
+
...permissionProfileMetadata
|
|
43146
43196
|
};
|
|
43147
43197
|
}
|
|
43148
43198
|
async resolveSessionInstructions(request, previous, creating = false) {
|
|
@@ -43344,13 +43394,22 @@ var CodexAcpClient = class _CodexAcpClient {
|
|
|
43344
43394
|
}]))
|
|
43345
43395
|
};
|
|
43346
43396
|
const configWithWorkspaceRoots = mergeSandboxWorkspaceWriteRoots(mergedConfig, additionalDirectories);
|
|
43397
|
+
const permissionProfiles = await this.fetchPermissionProfiles(projectPath);
|
|
43398
|
+
const effectiveConfig = await this.codexClient.configRead({ includeLayers: true, cwd: projectPath });
|
|
43399
|
+
const defaultPermissionProfileId = effectiveConfig?.config?.["default_permissions"];
|
|
43400
|
+
const permissionProfileMetadata = {
|
|
43401
|
+
permissionProfiles,
|
|
43402
|
+
defaultPermissionProfileId: typeof defaultPermissionProfileId === "string" ? defaultPermissionProfileId : null,
|
|
43403
|
+
...effectiveConfig?.config?.approval_policy != null && { approvalPolicy: effectiveConfig.config.approval_policy },
|
|
43404
|
+
...effectiveConfig?.config?.approvals_reviewer != null && { approvalsReviewer: effectiveConfig.config.approvals_reviewer }
|
|
43405
|
+
};
|
|
43347
43406
|
if (mcpServers.length === 0) {
|
|
43348
|
-
return { config: configWithWorkspaceRoots, skippedMcpServers: [] };
|
|
43407
|
+
return { config: configWithWorkspaceRoots, skippedMcpServers: [], ...permissionProfileMetadata };
|
|
43349
43408
|
}
|
|
43350
43409
|
const requestedServers = normalizeMcpServers(mcpServers).map((server) => ({ name: server.name, server }));
|
|
43351
43410
|
let serversToConfigure = requestedServers;
|
|
43352
43411
|
if (shouldDeduplicateMcpConflicts()) {
|
|
43353
|
-
const existingNames =
|
|
43412
|
+
const existingNames = this.getConfigMcpServerNames(effectiveConfig);
|
|
43354
43413
|
serversToConfigure = requestedServers.filter((mcp) => !existingNames.has(mcp.name));
|
|
43355
43414
|
}
|
|
43356
43415
|
const skippedMcpServers = requestedServers.filter((mcp) => !serversToConfigure.includes(mcp)).map((mcp) => mcp.name);
|
|
@@ -43361,18 +43420,18 @@ var CodexAcpClient = class _CodexAcpClient {
|
|
|
43361
43420
|
});
|
|
43362
43421
|
}
|
|
43363
43422
|
if (serversToConfigure.length === 0) {
|
|
43364
|
-
return { config: configWithWorkspaceRoots, skippedMcpServers };
|
|
43423
|
+
return { config: configWithWorkspaceRoots, skippedMcpServers, ...permissionProfileMetadata };
|
|
43365
43424
|
}
|
|
43366
43425
|
return {
|
|
43367
43426
|
config: {
|
|
43368
43427
|
...configWithWorkspaceRoots,
|
|
43369
43428
|
"mcp_servers": Object.fromEntries(serversToConfigure.map((mcp) => [mcp.name, toCodexMcpServerConfig(mcp.server)]))
|
|
43370
43429
|
},
|
|
43371
|
-
skippedMcpServers
|
|
43430
|
+
skippedMcpServers,
|
|
43431
|
+
...permissionProfileMetadata
|
|
43372
43432
|
};
|
|
43373
43433
|
}
|
|
43374
|
-
|
|
43375
|
-
const response = await this.codexClient.configRead({ includeLayers: true, cwd: projectPath });
|
|
43434
|
+
getConfigMcpServerNames(response) {
|
|
43376
43435
|
const effectiveMcpServers = response?.config?.["mcp_servers"];
|
|
43377
43436
|
const configLayers = response?.layers ?? [];
|
|
43378
43437
|
const layerMcpServers = configLayers.map((layer) => {
|
|
@@ -43384,6 +43443,16 @@ var CodexAcpClient = class _CodexAcpClient {
|
|
|
43384
43443
|
}
|
|
43385
43444
|
return new Set(configuredMcpServers.flatMap((server) => Object.keys(server)));
|
|
43386
43445
|
}
|
|
43446
|
+
async fetchPermissionProfiles(projectPath) {
|
|
43447
|
+
const profiles = [];
|
|
43448
|
+
let cursor = null;
|
|
43449
|
+
do {
|
|
43450
|
+
const response = await this.codexClient.listPermissionProfiles({ cwd: projectPath, cursor });
|
|
43451
|
+
profiles.push(...response?.data ?? []);
|
|
43452
|
+
cursor = response?.nextCursor ?? null;
|
|
43453
|
+
} while (cursor !== null);
|
|
43454
|
+
return profiles;
|
|
43455
|
+
}
|
|
43387
43456
|
getModelProvider() {
|
|
43388
43457
|
return this.gatewayConfig?.modelProvider ?? this.modelProvider;
|
|
43389
43458
|
}
|
|
@@ -43496,12 +43565,16 @@ var CodexAcpClient = class _CodexAcpClient {
|
|
|
43496
43565
|
if (shouldCancel?.()) {
|
|
43497
43566
|
return null;
|
|
43498
43567
|
}
|
|
43568
|
+
const permissionProfileId = agentMode.permissionProfileId;
|
|
43499
43569
|
return await this.codexClient.runTurn({
|
|
43500
43570
|
threadId: request.sessionId,
|
|
43501
43571
|
input: input2,
|
|
43502
43572
|
approvalPolicy: agentMode.approvalPolicy,
|
|
43503
43573
|
approvalsReviewer: agentMode.approvalsReviewer,
|
|
43504
|
-
|
|
43574
|
+
...permissionProfileId ? {
|
|
43575
|
+
permissions: permissionProfileId,
|
|
43576
|
+
runtimeWorkspaceRoots: [cwd, ...additionalDirectories]
|
|
43577
|
+
} : { sandboxPolicy: addAdditionalDirectoriesToSandboxPolicy(agentMode.sandboxPolicy, additionalDirectories) },
|
|
43505
43578
|
summary: disableSummary ? "none" : "auto",
|
|
43506
43579
|
effort,
|
|
43507
43580
|
model: modelId.model,
|
|
@@ -44894,6 +44967,9 @@ var CodexAppServerClient = class {
|
|
|
44894
44967
|
async listModels(params) {
|
|
44895
44968
|
return await this.sendRequest({ method: "model/list", params });
|
|
44896
44969
|
}
|
|
44970
|
+
async listPermissionProfiles(params) {
|
|
44971
|
+
return await this.sendRequest({ method: "permissionProfile/list", params });
|
|
44972
|
+
}
|
|
44897
44973
|
async skillsExtraRootsSet(params) {
|
|
44898
44974
|
return await this.sendRequest({ method: "skills/extraRoots/set", params });
|
|
44899
44975
|
}
|
|
@@ -47127,11 +47203,12 @@ var CodexCommands = class {
|
|
|
47127
47203
|
sessionState.lastTokenUsage,
|
|
47128
47204
|
sessionState.modelContextWindow
|
|
47129
47205
|
);
|
|
47206
|
+
const permissionLine = agentMode.permissionProfileId ? `**Permission profile:** ${agentMode.permissionProfileId}` : `**Sandbox:** ${agentMode.sandboxMode}`;
|
|
47130
47207
|
const lines = [
|
|
47131
47208
|
`**Model:** ${sessionState.currentModelId}`,
|
|
47132
47209
|
`**Directory:** ${sessionState.cwd}`,
|
|
47133
47210
|
`**Approval:** ${agentMode.approvalPolicy}`,
|
|
47134
|
-
|
|
47211
|
+
permissionLine,
|
|
47135
47212
|
`**Account:** ${accountText}`,
|
|
47136
47213
|
`**Session:** \`${sessionState.sessionId}\``,
|
|
47137
47214
|
``,
|
|
@@ -51468,13 +51545,22 @@ You have been logged out. Please try again.`);
|
|
|
51468
51545
|
const currentModel = this.findCurrentModel(models, currentModelId);
|
|
51469
51546
|
const currentModelSupportsFast = modelSupportsFast(currentModel);
|
|
51470
51547
|
if (this.setupResponseOrdering && operation !== "resume") this.clientDelivery.beginSessionSetup(sessionId);
|
|
51548
|
+
const availableAgentModes = AgentMode.all(
|
|
51549
|
+
sessionMetadata.permissionProfiles,
|
|
51550
|
+
sessionMetadata.approvalPolicy,
|
|
51551
|
+
sessionMetadata.approvalsReviewer
|
|
51552
|
+
);
|
|
51471
51553
|
const sessionState = {
|
|
51472
51554
|
sessionId,
|
|
51473
51555
|
currentModelId,
|
|
51474
51556
|
availableModels: models,
|
|
51475
51557
|
supportedReasoningEfforts: currentModel?.supportedReasoningEfforts ?? [],
|
|
51476
51558
|
supportedInputModalities: currentModel?.inputModalities ?? ["text", "image"],
|
|
51477
|
-
agentMode: AgentMode.getInitialAgentMode(
|
|
51559
|
+
agentMode: AgentMode.getInitialAgentMode(
|
|
51560
|
+
availableAgentModes,
|
|
51561
|
+
sessionMetadata.activePermissionProfileId
|
|
51562
|
+
),
|
|
51563
|
+
availableAgentModes,
|
|
51478
51564
|
collaborationMode: sessionMetadata.collaborationMode,
|
|
51479
51565
|
currentTurnId: null,
|
|
51480
51566
|
interruptTurnId: null,
|
|
@@ -51550,7 +51636,10 @@ You have been logged out. Please try again.`);
|
|
|
51550
51636
|
this.publishAsyncTasksAsync(sessionState, sessionGeneration);
|
|
51551
51637
|
}
|
|
51552
51638
|
const sessionModelState = this.createModelState(models, currentModelId);
|
|
51553
|
-
const sessionModeState = sessionState.agentMode.toSessionModeState(
|
|
51639
|
+
const sessionModeState = sessionState.agentMode.toSessionModeState(
|
|
51640
|
+
sessionState.clientCapabilities.airClient,
|
|
51641
|
+
sessionState.availableAgentModes
|
|
51642
|
+
);
|
|
51554
51643
|
return [sessionId, sessionModelState, sessionModeState];
|
|
51555
51644
|
}
|
|
51556
51645
|
/**
|
|
@@ -52747,7 +52836,7 @@ You have been logged out. Please try again.`);
|
|
|
52747
52836
|
return params.value;
|
|
52748
52837
|
}
|
|
52749
52838
|
applyModeChange(sessionState, value) {
|
|
52750
|
-
const newMode = AgentMode.find(value);
|
|
52839
|
+
const newMode = AgentMode.find(value, sessionState.availableAgentModes);
|
|
52751
52840
|
if (!newMode) {
|
|
52752
52841
|
throw RequestError.invalidParams();
|
|
52753
52842
|
}
|
|
@@ -53095,7 +53184,10 @@ You have been logged out. Please try again.`);
|
|
|
53095
53184
|
const currentModel = this.findCurrentModel(sessionState.availableModels, sessionState.currentModelId);
|
|
53096
53185
|
const recommendedModelId = useRecommendedValue ? sessionState.availableModels.find((model) => model.isDefault)?.id : void 0;
|
|
53097
53186
|
const configOptions = [
|
|
53098
|
-
sessionState.agentMode.toConfigOption(
|
|
53187
|
+
sessionState.agentMode.toConfigOption(
|
|
53188
|
+
sessionState.clientCapabilities.airClient,
|
|
53189
|
+
sessionState.availableAgentModes
|
|
53190
|
+
),
|
|
53099
53191
|
createCollaborationModeConfigOption(sessionState.collaborationMode)
|
|
53100
53192
|
];
|
|
53101
53193
|
if (sessionState.availableModels.length > 0) {
|
|
@@ -53305,13 +53397,22 @@ You have been logged out. Please try again.`);
|
|
|
53305
53397
|
const sessionMcpServers = this.resolveSessionMcpServers(requestedMcpServers, true);
|
|
53306
53398
|
const currentModel = this.findCurrentModel(models, currentModelId);
|
|
53307
53399
|
const currentModelSupportsFast = modelSupportsFast(currentModel);
|
|
53400
|
+
const availableAgentModes = AgentMode.all(
|
|
53401
|
+
sessionMetadata.permissionProfiles,
|
|
53402
|
+
sessionMetadata.approvalPolicy,
|
|
53403
|
+
sessionMetadata.approvalsReviewer
|
|
53404
|
+
);
|
|
53308
53405
|
const sessionState = {
|
|
53309
53406
|
sessionId,
|
|
53310
53407
|
currentModelId,
|
|
53311
53408
|
availableModels: models,
|
|
53312
53409
|
supportedReasoningEfforts: currentModel?.supportedReasoningEfforts ?? [],
|
|
53313
53410
|
supportedInputModalities: currentModel?.inputModalities ?? ["text", "image"],
|
|
53314
|
-
agentMode: AgentMode.getInitialAgentMode(
|
|
53411
|
+
agentMode: AgentMode.getInitialAgentMode(
|
|
53412
|
+
availableAgentModes,
|
|
53413
|
+
sessionMetadata.activePermissionProfileId
|
|
53414
|
+
),
|
|
53415
|
+
availableAgentModes,
|
|
53315
53416
|
collaborationMode: sessionMetadata.collaborationMode,
|
|
53316
53417
|
currentTurnId: null,
|
|
53317
53418
|
interruptTurnId: null,
|
|
@@ -53370,7 +53471,10 @@ You have been logged out. Please try again.`);
|
|
|
53370
53471
|
}
|
|
53371
53472
|
await this.publishCurrentGoalBestEffort(sessionState, requestedSessionGeneration, true);
|
|
53372
53473
|
const sessionModelState = this.createModelState(models, currentModelId);
|
|
53373
|
-
const sessionModeState = sessionState.agentMode.toSessionModeState(
|
|
53474
|
+
const sessionModeState = sessionState.agentMode.toSessionModeState(
|
|
53475
|
+
sessionState.clientCapabilities.airClient,
|
|
53476
|
+
sessionState.availableAgentModes
|
|
53477
|
+
);
|
|
53374
53478
|
return {
|
|
53375
53479
|
sessionId,
|
|
53376
53480
|
modelState: sessionModelState,
|