@gakr-gakr/codex 0.1.0 → 0.1.1
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/dist/client-DNN2uyJW.js +642 -0
- package/dist/client-factory-Bu9OClHJ.js +9 -0
- package/dist/command-formatters-BpPOTePl.js +520 -0
- package/dist/command-handlers-BBs7Vws9.js +1533 -0
- package/dist/compact-CDboBy7o.js +329 -0
- package/dist/computer-use-DCZB46Sw.js +367 -0
- package/dist/config-CLMSw0p2.js +510 -0
- package/dist/doctor-contract-api.js +53 -0
- package/dist/harness.js +51 -0
- package/dist/index.js +1171 -0
- package/dist/media-understanding-provider.js +335 -0
- package/dist/models-jLA2SIvd.js +110 -0
- package/dist/node-cli-sessions-BLRDs_US.js +1216 -0
- package/dist/plugin-activation-CEy_oYpx.js +452 -0
- package/dist/prompt-overlay.js +12 -0
- package/dist/protocol-C9UWI98H.js +9 -0
- package/dist/protocol-validators-BGBspNmF.js +5988 -0
- package/dist/provider-catalog.js +84 -0
- package/dist/provider-discovery.js +33 -0
- package/dist/provider.js +150 -0
- package/dist/rate-limit-cache-9LxQdE0K.js +24 -0
- package/dist/request-DbSPeTcV.js +89 -0
- package/dist/rolldown-runtime-DUslC3ob.js +14 -0
- package/dist/run-attempt-BoEwzQCv.js +5463 -0
- package/dist/session-binding-e2GFp9VH.js +222 -0
- package/dist/shared-client-D7Vy0glq.js +631 -0
- package/dist/side-question-BDLuEzFP.js +668 -0
- package/dist/test-api.js +49 -0
- package/dist/thread-lifecycle-Clo0EHMk.js +1565 -0
- package/dist/vision-tools-Cofrv35p.js +1379 -0
- package/package.json +16 -1
- package/doctor-contract-api.ts +0 -68
- package/harness.ts +0 -72
- package/index.ts +0 -124
- package/media-understanding-provider.ts +0 -521
- package/prompt-overlay.ts +0 -21
- package/provider-catalog.ts +0 -83
- package/provider-discovery.ts +0 -45
- package/provider.ts +0 -243
- package/src/app-server/app-inventory-cache.ts +0 -324
- package/src/app-server/approval-bridge.ts +0 -1211
- package/src/app-server/auth-bridge.ts +0 -614
- package/src/app-server/capabilities.ts +0 -27
- package/src/app-server/client-factory.ts +0 -24
- package/src/app-server/client.ts +0 -715
- package/src/app-server/compact.ts +0 -512
- package/src/app-server/computer-use.ts +0 -683
- package/src/app-server/config.ts +0 -1038
- package/src/app-server/context-engine-projection.ts +0 -403
- package/src/app-server/dynamic-tool-diagnostics.ts +0 -73
- package/src/app-server/dynamic-tool-profile.ts +0 -70
- package/src/app-server/dynamic-tools.ts +0 -623
- package/src/app-server/elicitation-bridge.ts +0 -783
- package/src/app-server/event-projector.ts +0 -2065
- package/src/app-server/image-payload-sanitizer.ts +0 -167
- package/src/app-server/local-runtime-attribution.ts +0 -39
- package/src/app-server/managed-binary.ts +0 -193
- package/src/app-server/models.ts +0 -172
- package/src/app-server/native-hook-relay.ts +0 -150
- package/src/app-server/native-subagent-task-mirror.ts +0 -497
- package/src/app-server/plugin-activation.ts +0 -283
- package/src/app-server/plugin-app-cache-key.ts +0 -74
- package/src/app-server/plugin-approval-roundtrip.ts +0 -122
- package/src/app-server/plugin-inventory.ts +0 -357
- package/src/app-server/plugin-thread-config.ts +0 -455
- package/src/app-server/protocol-generated/json/DynamicToolCallParams.json +0 -33
- package/src/app-server/protocol-generated/json/v2/ErrorNotification.json +0 -199
- package/src/app-server/protocol-generated/json/v2/GetAccountResponse.json +0 -102
- package/src/app-server/protocol-generated/json/v2/ModelListResponse.json +0 -227
- package/src/app-server/protocol-generated/json/v2/ThreadResumeResponse.json +0 -2630
- package/src/app-server/protocol-generated/json/v2/ThreadStartResponse.json +0 -2630
- package/src/app-server/protocol-generated/json/v2/TurnCompletedNotification.json +0 -1659
- package/src/app-server/protocol-generated/json/v2/TurnStartResponse.json +0 -1655
- package/src/app-server/protocol-validators.ts +0 -203
- package/src/app-server/protocol.ts +0 -520
- package/src/app-server/rate-limit-cache.ts +0 -48
- package/src/app-server/rate-limits.ts +0 -583
- package/src/app-server/request.ts +0 -73
- package/src/app-server/run-attempt.ts +0 -4862
- package/src/app-server/session-binding.ts +0 -398
- package/src/app-server/session-history.ts +0 -44
- package/src/app-server/shared-client.ts +0 -289
- package/src/app-server/side-question.ts +0 -1009
- package/src/app-server/test-support.ts +0 -48
- package/src/app-server/thread-lifecycle.ts +0 -959
- package/src/app-server/timeout.ts +0 -9
- package/src/app-server/tool-progress-normalization.ts +0 -77
- package/src/app-server/trajectory.ts +0 -368
- package/src/app-server/transcript-mirror.ts +0 -208
- package/src/app-server/transport-stdio.ts +0 -107
- package/src/app-server/transport-websocket.ts +0 -90
- package/src/app-server/transport.ts +0 -117
- package/src/app-server/user-input-bridge.ts +0 -316
- package/src/app-server/version.ts +0 -4
- package/src/app-server/vision-tools.ts +0 -12
- package/src/command-account.ts +0 -544
- package/src/command-formatters.ts +0 -426
- package/src/command-handlers.ts +0 -2021
- package/src/command-plugins-management.ts +0 -137
- package/src/command-rpc.ts +0 -142
- package/src/commands.ts +0 -65
- package/src/conversation-binding-data.ts +0 -124
- package/src/conversation-binding.ts +0 -561
- package/src/conversation-control.ts +0 -303
- package/src/conversation-turn-collector.ts +0 -186
- package/src/conversation-turn-input.ts +0 -106
- package/src/migration/apply.ts +0 -501
- package/src/migration/helpers.ts +0 -55
- package/src/migration/plan.ts +0 -461
- package/src/migration/provider.ts +0 -41
- package/src/migration/source.ts +0 -643
- package/src/migration/targets.ts +0 -25
- package/src/node-cli-sessions.ts +0 -711
- package/test-api.ts +0 -95
- package/tsconfig.json +0 -16
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gakr-gakr/codex",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "AutoBot Codex harness and model provider plugin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -35,6 +35,21 @@
|
|
|
35
35
|
"release": {
|
|
36
36
|
"publishToClawHub": true,
|
|
37
37
|
"publishToNpm": true
|
|
38
|
+
},
|
|
39
|
+
"runtimeExtensions": [
|
|
40
|
+
"./dist/index.js"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"files": [
|
|
44
|
+
"dist/**",
|
|
45
|
+
"autobot.plugin.json"
|
|
46
|
+
],
|
|
47
|
+
"peerDependencies": {
|
|
48
|
+
"autobot": ">=2026.5.19"
|
|
49
|
+
},
|
|
50
|
+
"peerDependenciesMeta": {
|
|
51
|
+
"autobot": {
|
|
52
|
+
"optional": true
|
|
38
53
|
}
|
|
39
54
|
}
|
|
40
55
|
}
|
package/doctor-contract-api.ts
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import type { AutoBotConfig } from "autobot/plugin-sdk/config-contracts";
|
|
2
|
-
import type { DoctorSessionRouteStateOwner } from "autobot/plugin-sdk/runtime-doctor";
|
|
3
|
-
|
|
4
|
-
type LegacyConfigRule = {
|
|
5
|
-
path: string[];
|
|
6
|
-
message: string;
|
|
7
|
-
match: (value: unknown) => boolean;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
function asRecord(value: unknown): Record<string, unknown> | null {
|
|
11
|
-
return value && typeof value === "object" && !Array.isArray(value)
|
|
12
|
-
? (value as Record<string, unknown>)
|
|
13
|
-
: null;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function hasRetiredDynamicToolsProfile(value: unknown): boolean {
|
|
17
|
-
return Object.prototype.hasOwnProperty.call(asRecord(value) ?? {}, "codexDynamicToolsProfile");
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export const legacyConfigRules: LegacyConfigRule[] = [
|
|
21
|
-
{
|
|
22
|
-
path: ["plugins", "entries", "codex", "config"],
|
|
23
|
-
message:
|
|
24
|
-
'plugins.entries.codex.config.codexDynamicToolsProfile is retired; Codex app-server always keeps Codex-native workspace tools native. Run "autobot doctor --fix".',
|
|
25
|
-
match: hasRetiredDynamicToolsProfile,
|
|
26
|
-
},
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
export function normalizeCompatibilityConfig({ cfg }: { cfg: AutoBotConfig }): {
|
|
30
|
-
config: AutoBotConfig;
|
|
31
|
-
changes: string[];
|
|
32
|
-
} {
|
|
33
|
-
const rawEntry = asRecord(cfg.plugins?.entries?.codex);
|
|
34
|
-
const rawPluginConfig = asRecord(rawEntry?.config);
|
|
35
|
-
if (!rawPluginConfig || !hasRetiredDynamicToolsProfile(rawPluginConfig)) {
|
|
36
|
-
return { config: cfg, changes: [] };
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const nextConfig = structuredClone(cfg) as AutoBotConfig & {
|
|
40
|
-
plugins?: Record<string, unknown>;
|
|
41
|
-
};
|
|
42
|
-
const nextPlugins = asRecord(nextConfig.plugins);
|
|
43
|
-
const nextEntries = asRecord(nextPlugins?.entries);
|
|
44
|
-
const nextEntry = asRecord(nextEntries?.codex);
|
|
45
|
-
const nextPluginConfig = asRecord(nextEntry?.config);
|
|
46
|
-
if (!nextPluginConfig) {
|
|
47
|
-
return { config: cfg, changes: [] };
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
delete nextPluginConfig.codexDynamicToolsProfile;
|
|
51
|
-
return {
|
|
52
|
-
config: nextConfig,
|
|
53
|
-
changes: [
|
|
54
|
-
"Removed retired plugins.entries.codex.config.codexDynamicToolsProfile; Codex app-server always keeps Codex-native workspace tools native.",
|
|
55
|
-
],
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export const sessionRouteStateOwners: DoctorSessionRouteStateOwner[] = [
|
|
60
|
-
{
|
|
61
|
-
id: "codex",
|
|
62
|
-
label: "Codex",
|
|
63
|
-
providerIds: ["codex", "codex-cli", "openai-codex"],
|
|
64
|
-
runtimeIds: ["codex", "codex-cli"],
|
|
65
|
-
cliSessionKeys: ["codex-cli"],
|
|
66
|
-
authProfilePrefixes: ["codex:", "codex-cli:", "openai-codex:"],
|
|
67
|
-
},
|
|
68
|
-
];
|
package/harness.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import type { AgentHarness } from "autobot/plugin-sdk/agent-harness-runtime";
|
|
2
|
-
import type {
|
|
3
|
-
CodexAppServerListModelsOptions,
|
|
4
|
-
CodexAppServerModel,
|
|
5
|
-
CodexAppServerModelListResult,
|
|
6
|
-
} from "./src/app-server/models.js";
|
|
7
|
-
|
|
8
|
-
const DEFAULT_CODEX_HARNESS_PROVIDER_IDS = new Set(["codex"]);
|
|
9
|
-
|
|
10
|
-
export type { CodexAppServerListModelsOptions, CodexAppServerModel, CodexAppServerModelListResult };
|
|
11
|
-
|
|
12
|
-
export function createCodexAppServerAgentHarness(options?: {
|
|
13
|
-
id?: string;
|
|
14
|
-
label?: string;
|
|
15
|
-
providerIds?: Iterable<string>;
|
|
16
|
-
pluginConfig?: unknown;
|
|
17
|
-
resolvePluginConfig?: () => unknown;
|
|
18
|
-
}): AgentHarness {
|
|
19
|
-
const providerIds = new Set(
|
|
20
|
-
[...(options?.providerIds ?? DEFAULT_CODEX_HARNESS_PROVIDER_IDS)].map((id) =>
|
|
21
|
-
id.trim().toLowerCase(),
|
|
22
|
-
),
|
|
23
|
-
);
|
|
24
|
-
return {
|
|
25
|
-
id: options?.id ?? "codex",
|
|
26
|
-
label: options?.label ?? "Codex agent harness",
|
|
27
|
-
deliveryDefaults: {
|
|
28
|
-
sourceVisibleReplies: "message_tool",
|
|
29
|
-
},
|
|
30
|
-
supports: (ctx) => {
|
|
31
|
-
const provider = ctx.provider.trim().toLowerCase();
|
|
32
|
-
if (providerIds.has(provider)) {
|
|
33
|
-
return { supported: true, priority: 100 };
|
|
34
|
-
}
|
|
35
|
-
return {
|
|
36
|
-
supported: false,
|
|
37
|
-
reason: `provider is not one of: ${[...providerIds].toSorted().join(", ")}`,
|
|
38
|
-
};
|
|
39
|
-
},
|
|
40
|
-
runAttempt: async (params) => {
|
|
41
|
-
const { runCodexAppServerAttempt } = await import("./src/app-server/run-attempt.js");
|
|
42
|
-
return runCodexAppServerAttempt(params, {
|
|
43
|
-
pluginConfig: options?.resolvePluginConfig?.() ?? options?.pluginConfig,
|
|
44
|
-
nativeHookRelay: { enabled: true },
|
|
45
|
-
});
|
|
46
|
-
},
|
|
47
|
-
runSideQuestion: async (params) => {
|
|
48
|
-
const { runCodexAppServerSideQuestion } = await import("./src/app-server/side-question.js");
|
|
49
|
-
return runCodexAppServerSideQuestion(params, {
|
|
50
|
-
pluginConfig: options?.resolvePluginConfig?.() ?? options?.pluginConfig,
|
|
51
|
-
nativeHookRelay: { enabled: true },
|
|
52
|
-
});
|
|
53
|
-
},
|
|
54
|
-
compact: async (params) => {
|
|
55
|
-
const { maybeCompactCodexAppServerSession } = await import("./src/app-server/compact.js");
|
|
56
|
-
return maybeCompactCodexAppServerSession(params, {
|
|
57
|
-
pluginConfig: options?.resolvePluginConfig?.() ?? options?.pluginConfig,
|
|
58
|
-
});
|
|
59
|
-
},
|
|
60
|
-
reset: async (params) => {
|
|
61
|
-
if (params.sessionFile) {
|
|
62
|
-
const { clearCodexAppServerBinding } = await import("./src/app-server/session-binding.js");
|
|
63
|
-
await clearCodexAppServerBinding(params.sessionFile);
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
dispose: async () => {
|
|
67
|
-
const { clearSharedCodexAppServerClientAndWait } =
|
|
68
|
-
await import("./src/app-server/shared-client.js");
|
|
69
|
-
await clearSharedCodexAppServerClientAndWait();
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
|
-
}
|
package/index.ts
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import type { AutoBotConfig } from "autobot/plugin-sdk/config-contracts";
|
|
2
|
-
import { mutateConfigFile } from "autobot/plugin-sdk/config-mutation";
|
|
3
|
-
import { resolveLivePluginConfigObject } from "autobot/plugin-sdk/plugin-config-runtime";
|
|
4
|
-
import { definePluginEntry } from "autobot/plugin-sdk/plugin-entry";
|
|
5
|
-
import { createCodexAppServerAgentHarness } from "./harness.js";
|
|
6
|
-
import { buildCodexMediaUnderstandingProvider } from "./media-understanding-provider.js";
|
|
7
|
-
import { buildCodexProvider } from "./provider.js";
|
|
8
|
-
import type { CodexPluginsConfigBlock } from "./src/command-plugins-management.js";
|
|
9
|
-
import { createCodexCommand } from "./src/commands.js";
|
|
10
|
-
import {
|
|
11
|
-
handleCodexConversationBindingResolved,
|
|
12
|
-
handleCodexConversationInboundClaim,
|
|
13
|
-
} from "./src/conversation-binding.js";
|
|
14
|
-
import { buildCodexMigrationProvider } from "./src/migration/provider.js";
|
|
15
|
-
import {
|
|
16
|
-
createCodexCliSessionNodeHostCommands,
|
|
17
|
-
createCodexCliSessionNodeInvokePolicies,
|
|
18
|
-
listCodexCliSessionsOnNode,
|
|
19
|
-
resumeCodexCliSessionOnNode,
|
|
20
|
-
resolveCodexCliSessionForBindingOnNode,
|
|
21
|
-
} from "./src/node-cli-sessions.js";
|
|
22
|
-
|
|
23
|
-
export default definePluginEntry({
|
|
24
|
-
id: "codex",
|
|
25
|
-
name: "Codex",
|
|
26
|
-
description: "Codex app-server harness and Codex-managed GPT model catalog.",
|
|
27
|
-
register(api) {
|
|
28
|
-
const resolveCurrentPluginConfig = () =>
|
|
29
|
-
resolveLivePluginConfigObject(
|
|
30
|
-
api.runtime.config?.current
|
|
31
|
-
? () => api.runtime.config.current() as AutoBotConfig
|
|
32
|
-
: undefined,
|
|
33
|
-
"codex",
|
|
34
|
-
api.pluginConfig as Record<string, unknown>,
|
|
35
|
-
) ?? api.pluginConfig;
|
|
36
|
-
api.registerAgentHarness(
|
|
37
|
-
createCodexAppServerAgentHarness({ resolvePluginConfig: resolveCurrentPluginConfig }),
|
|
38
|
-
);
|
|
39
|
-
api.registerProvider(buildCodexProvider({ pluginConfig: api.pluginConfig }));
|
|
40
|
-
api.registerMediaUnderstandingProvider(
|
|
41
|
-
buildCodexMediaUnderstandingProvider({ pluginConfig: api.pluginConfig }),
|
|
42
|
-
);
|
|
43
|
-
api.registerMigrationProvider(buildCodexMigrationProvider({ runtime: api.runtime }));
|
|
44
|
-
for (const command of createCodexCliSessionNodeHostCommands()) {
|
|
45
|
-
api.registerNodeHostCommand(command);
|
|
46
|
-
}
|
|
47
|
-
for (const policy of createCodexCliSessionNodeInvokePolicies()) {
|
|
48
|
-
api.registerNodeInvokePolicy(policy);
|
|
49
|
-
}
|
|
50
|
-
api.registerCommand(
|
|
51
|
-
createCodexCommand({
|
|
52
|
-
pluginConfig: api.pluginConfig,
|
|
53
|
-
deps: {
|
|
54
|
-
listCodexCliSessionsOnNode: (params) =>
|
|
55
|
-
listCodexCliSessionsOnNode({ runtime: api.runtime, ...params }),
|
|
56
|
-
resolveCodexCliSessionForBindingOnNode: (params) =>
|
|
57
|
-
resolveCodexCliSessionForBindingOnNode({ runtime: api.runtime, ...params }),
|
|
58
|
-
codexPluginsManagementIo: {
|
|
59
|
-
readConfig: () => {
|
|
60
|
-
const current = (api.runtime.config?.current?.() ?? {}) as AutoBotConfig;
|
|
61
|
-
const plugins = (current as Record<string, unknown>).plugins;
|
|
62
|
-
if (!plugins || typeof plugins !== "object") {
|
|
63
|
-
return Promise.resolve({});
|
|
64
|
-
}
|
|
65
|
-
const entries = (plugins as Record<string, unknown>).entries;
|
|
66
|
-
if (!entries || typeof entries !== "object") {
|
|
67
|
-
return Promise.resolve({});
|
|
68
|
-
}
|
|
69
|
-
const codexEntry = (entries as Record<string, unknown>).codex;
|
|
70
|
-
if (!codexEntry || typeof codexEntry !== "object") {
|
|
71
|
-
return Promise.resolve({});
|
|
72
|
-
}
|
|
73
|
-
const config = (codexEntry as Record<string, unknown>).config;
|
|
74
|
-
if (!config || typeof config !== "object") {
|
|
75
|
-
return Promise.resolve({});
|
|
76
|
-
}
|
|
77
|
-
const codexPlugins = (config as Record<string, unknown>).codexPlugins;
|
|
78
|
-
if (!codexPlugins || typeof codexPlugins !== "object") {
|
|
79
|
-
return Promise.resolve({});
|
|
80
|
-
}
|
|
81
|
-
const declared = (codexPlugins as Record<string, unknown>).plugins;
|
|
82
|
-
if (!declared || typeof declared !== "object") {
|
|
83
|
-
return Promise.resolve({
|
|
84
|
-
enabled: (codexPlugins as Record<string, unknown>).enabled === true,
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
return Promise.resolve({
|
|
88
|
-
enabled: (codexPlugins as Record<string, unknown>).enabled === true,
|
|
89
|
-
plugins: declared as Record<string, never>,
|
|
90
|
-
});
|
|
91
|
-
},
|
|
92
|
-
mutate: async (update) => {
|
|
93
|
-
await mutateConfigFile({
|
|
94
|
-
mutate: (draft) => {
|
|
95
|
-
const root = draft as Record<string, unknown>;
|
|
96
|
-
root.plugins = (root.plugins ?? {}) as Record<string, unknown>;
|
|
97
|
-
const pluginsBlock = root.plugins as Record<string, unknown>;
|
|
98
|
-
pluginsBlock.entries = (pluginsBlock.entries ?? {}) as Record<string, unknown>;
|
|
99
|
-
const entries = pluginsBlock.entries as Record<string, unknown>;
|
|
100
|
-
entries.codex = (entries.codex ?? {}) as Record<string, unknown>;
|
|
101
|
-
const codexEntry = entries.codex as Record<string, unknown>;
|
|
102
|
-
codexEntry.config = (codexEntry.config ?? {}) as Record<string, unknown>;
|
|
103
|
-
const config = codexEntry.config as Record<string, unknown>;
|
|
104
|
-
config.codexPlugins = (config.codexPlugins ?? {}) as Record<string, unknown>;
|
|
105
|
-
const codexPlugins = config.codexPlugins as Record<string, unknown>;
|
|
106
|
-
codexPlugins.plugins = (codexPlugins.plugins ?? {}) as Record<string, unknown>;
|
|
107
|
-
update(codexPlugins as CodexPluginsConfigBlock);
|
|
108
|
-
},
|
|
109
|
-
});
|
|
110
|
-
},
|
|
111
|
-
},
|
|
112
|
-
},
|
|
113
|
-
}),
|
|
114
|
-
);
|
|
115
|
-
api.on("inbound_claim", (event, ctx) =>
|
|
116
|
-
handleCodexConversationInboundClaim(event, ctx, {
|
|
117
|
-
pluginConfig: resolveCurrentPluginConfig(),
|
|
118
|
-
resumeCodexCliSessionOnNode: (params) =>
|
|
119
|
-
resumeCodexCliSessionOnNode({ runtime: api.runtime, ...params }),
|
|
120
|
-
}),
|
|
121
|
-
);
|
|
122
|
-
api.onConversationBindingResolved?.(handleCodexConversationBindingResolved);
|
|
123
|
-
},
|
|
124
|
-
});
|