@xenosystem/acp-agent 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/LICENSE +202 -0
- package/NOTICE +9 -0
- package/README.md +22 -0
- package/dist/acpAgentServer.d.ts +43 -0
- package/dist/acpAgentServer.d.ts.map +1 -0
- package/dist/acpAgentServer.js +450 -0
- package/dist/acpAgentServer.js.map +1 -0
- package/dist/adapters/adapterContractVersion.d.ts +24 -0
- package/dist/adapters/adapterContractVersion.d.ts.map +1 -0
- package/dist/adapters/adapterContractVersion.js +29 -0
- package/dist/adapters/adapterContractVersion.js.map +1 -0
- package/dist/adapters/adapterDiagnostics.d.ts +19 -0
- package/dist/adapters/adapterDiagnostics.d.ts.map +1 -0
- package/dist/adapters/adapterDiagnostics.js +18 -0
- package/dist/adapters/adapterDiagnostics.js.map +1 -0
- package/dist/adapters/adapterErrors.d.ts +19 -0
- package/dist/adapters/adapterErrors.d.ts.map +1 -0
- package/dist/adapters/adapterErrors.js +23 -0
- package/dist/adapters/adapterErrors.js.map +1 -0
- package/dist/adapters/adapterEventMapper.d.ts +22 -0
- package/dist/adapters/adapterEventMapper.d.ts.map +1 -0
- package/dist/adapters/adapterEventMapper.js +70 -0
- package/dist/adapters/adapterEventMapper.js.map +1 -0
- package/dist/adapters/adapterEventParser.d.ts +16 -0
- package/dist/adapters/adapterEventParser.d.ts.map +1 -0
- package/dist/adapters/adapterEventParser.js +95 -0
- package/dist/adapters/adapterEventParser.js.map +1 -0
- package/dist/adapters/adapterEventProtocol.d.ts +85 -0
- package/dist/adapters/adapterEventProtocol.d.ts.map +1 -0
- package/dist/adapters/adapterEventProtocol.js +74 -0
- package/dist/adapters/adapterEventProtocol.js.map +1 -0
- package/dist/adapters/adapterFailureTaxonomy.d.ts +19 -0
- package/dist/adapters/adapterFailureTaxonomy.d.ts.map +1 -0
- package/dist/adapters/adapterFailureTaxonomy.js +62 -0
- package/dist/adapters/adapterFailureTaxonomy.js.map +1 -0
- package/dist/adapters/adapterHarnessTypes.d.ts +103 -0
- package/dist/adapters/adapterHarnessTypes.d.ts.map +1 -0
- package/dist/adapters/adapterHarnessTypes.js +15 -0
- package/dist/adapters/adapterHarnessTypes.js.map +1 -0
- package/dist/adapters/adapterProcessHarness.d.ts +23 -0
- package/dist/adapters/adapterProcessHarness.d.ts.map +1 -0
- package/dist/adapters/adapterProcessHarness.js +235 -0
- package/dist/adapters/adapterProcessHarness.js.map +1 -0
- package/dist/adapters/providerContractTypes.d.ts +64 -0
- package/dist/adapters/providerContractTypes.d.ts.map +1 -0
- package/dist/adapters/providerContractTypes.js +79 -0
- package/dist/adapters/providerContractTypes.js.map +1 -0
- package/dist/adapters/testAdapterProvider.d.ts +19 -0
- package/dist/adapters/testAdapterProvider.d.ts.map +1 -0
- package/dist/adapters/testAdapterProvider.js +95 -0
- package/dist/adapters/testAdapterProvider.js.map +1 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1059 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/providerApprovalStore.d.ts +39 -0
- package/dist/config/providerApprovalStore.d.ts.map +1 -0
- package/dist/config/providerApprovalStore.js +87 -0
- package/dist/config/providerApprovalStore.js.map +1 -0
- package/dist/config/providerApprovalTypes.d.ts +30 -0
- package/dist/config/providerApprovalTypes.d.ts.map +1 -0
- package/dist/config/providerApprovalTypes.js +11 -0
- package/dist/config/providerApprovalTypes.js.map +1 -0
- package/dist/config/providerPolicyConfig.d.ts +31 -0
- package/dist/config/providerPolicyConfig.d.ts.map +1 -0
- package/dist/config/providerPolicyConfig.js +111 -0
- package/dist/config/providerPolicyConfig.js.map +1 -0
- package/dist/config/providerPolicyDiagnostics.d.ts +49 -0
- package/dist/config/providerPolicyDiagnostics.d.ts.map +1 -0
- package/dist/config/providerPolicyDiagnostics.js +76 -0
- package/dist/config/providerPolicyDiagnostics.js.map +1 -0
- package/dist/config/providerPolicyHash.d.ts +14 -0
- package/dist/config/providerPolicyHash.d.ts.map +1 -0
- package/dist/config/providerPolicyHash.js +65 -0
- package/dist/config/providerPolicyHash.js.map +1 -0
- package/dist/config/providerPolicySchema.d.ts +32 -0
- package/dist/config/providerPolicySchema.d.ts.map +1 -0
- package/dist/config/providerPolicySchema.js +130 -0
- package/dist/config/providerPolicySchema.js.map +1 -0
- package/dist/config/providerRunnability.d.ts +36 -0
- package/dist/config/providerRunnability.d.ts.map +1 -0
- package/dist/config/providerRunnability.js +72 -0
- package/dist/config/providerRunnability.js.map +1 -0
- package/dist/errors.d.ts +31 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +45 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +83 -0
- package/dist/index.js.map +1 -0
- package/dist/process/providerProcessAudit.d.ts +14 -0
- package/dist/process/providerProcessAudit.d.ts.map +1 -0
- package/dist/process/providerProcessAudit.js +27 -0
- package/dist/process/providerProcessAudit.js.map +1 -0
- package/dist/process/providerProcessDiagnostics.d.ts +30 -0
- package/dist/process/providerProcessDiagnostics.d.ts.map +1 -0
- package/dist/process/providerProcessDiagnostics.js +51 -0
- package/dist/process/providerProcessDiagnostics.js.map +1 -0
- package/dist/process/providerProcessEnvironment.d.ts +29 -0
- package/dist/process/providerProcessEnvironment.d.ts.map +1 -0
- package/dist/process/providerProcessEnvironment.js +37 -0
- package/dist/process/providerProcessEnvironment.js.map +1 -0
- package/dist/process/providerProcessErrors.d.ts +21 -0
- package/dist/process/providerProcessErrors.d.ts.map +1 -0
- package/dist/process/providerProcessErrors.js +25 -0
- package/dist/process/providerProcessErrors.js.map +1 -0
- package/dist/process/providerProcessOutput.d.ts +24 -0
- package/dist/process/providerProcessOutput.d.ts.map +1 -0
- package/dist/process/providerProcessOutput.js +52 -0
- package/dist/process/providerProcessOutput.js.map +1 -0
- package/dist/process/providerProcessSupervisor.d.ts +40 -0
- package/dist/process/providerProcessSupervisor.d.ts.map +1 -0
- package/dist/process/providerProcessSupervisor.js +305 -0
- package/dist/process/providerProcessSupervisor.js.map +1 -0
- package/dist/process/providerProcessTypes.d.ts +114 -0
- package/dist/process/providerProcessTypes.d.ts.map +1 -0
- package/dist/process/providerProcessTypes.js +30 -0
- package/dist/process/providerProcessTypes.js.map +1 -0
- package/dist/process/providerProcessValidation.d.ts +26 -0
- package/dist/process/providerProcessValidation.d.ts.map +1 -0
- package/dist/process/providerProcessValidation.js +112 -0
- package/dist/process/providerProcessValidation.js.map +1 -0
- package/dist/process/providerProcessWorkspace.d.ts +38 -0
- package/dist/process/providerProcessWorkspace.d.ts.map +1 -0
- package/dist/process/providerProcessWorkspace.js +86 -0
- package/dist/process/providerProcessWorkspace.js.map +1 -0
- package/dist/providers/claudeLocalProvider.d.ts +68 -0
- package/dist/providers/claudeLocalProvider.d.ts.map +1 -0
- package/dist/providers/claudeLocalProvider.js +217 -0
- package/dist/providers/claudeLocalProvider.js.map +1 -0
- package/dist/providers/claudeStreamJsonParser.d.ts +39 -0
- package/dist/providers/claudeStreamJsonParser.d.ts.map +1 -0
- package/dist/providers/claudeStreamJsonParser.js +180 -0
- package/dist/providers/claudeStreamJsonParser.js.map +1 -0
- package/dist/providers/codexExecJsonParser.d.ts +38 -0
- package/dist/providers/codexExecJsonParser.d.ts.map +1 -0
- package/dist/providers/codexExecJsonParser.js +245 -0
- package/dist/providers/codexExecJsonParser.js.map +1 -0
- package/dist/providers/codexLocalProvider.d.ts +46 -0
- package/dist/providers/codexLocalProvider.d.ts.map +1 -0
- package/dist/providers/codexLocalProvider.js +430 -0
- package/dist/providers/codexLocalProvider.js.map +1 -0
- package/dist/providers/codexModelCatalog.d.ts +13 -0
- package/dist/providers/codexModelCatalog.d.ts.map +1 -0
- package/dist/providers/codexModelCatalog.js +133 -0
- package/dist/providers/codexModelCatalog.js.map +1 -0
- package/dist/providers/fixtureProvider.d.ts +14 -0
- package/dist/providers/fixtureProvider.d.ts.map +1 -0
- package/dist/providers/fixtureProvider.js +160 -0
- package/dist/providers/fixtureProvider.js.map +1 -0
- package/dist/providers/providerDiscovery.d.ts +24 -0
- package/dist/providers/providerDiscovery.d.ts.map +1 -0
- package/dist/providers/providerDiscovery.js +128 -0
- package/dist/providers/providerDiscovery.js.map +1 -0
- package/dist/providers/providerErrors.d.ts +64 -0
- package/dist/providers/providerErrors.d.ts.map +1 -0
- package/dist/providers/providerErrors.js +101 -0
- package/dist/providers/providerErrors.js.map +1 -0
- package/dist/providers/providerEvents.d.ts +63 -0
- package/dist/providers/providerEvents.d.ts.map +1 -0
- package/dist/providers/providerEvents.js +86 -0
- package/dist/providers/providerEvents.js.map +1 -0
- package/dist/providers/providerRegistry.d.ts +31 -0
- package/dist/providers/providerRegistry.d.ts.map +1 -0
- package/dist/providers/providerRegistry.js +234 -0
- package/dist/providers/providerRegistry.js.map +1 -0
- package/dist/providers/providerSafety.d.ts +17 -0
- package/dist/providers/providerSafety.d.ts.map +1 -0
- package/dist/providers/providerSafety.js +36 -0
- package/dist/providers/providerSafety.js.map +1 -0
- package/dist/providers/providerTypes.d.ts +212 -0
- package/dist/providers/providerTypes.d.ts.map +1 -0
- package/dist/providers/providerTypes.js +15 -0
- package/dist/providers/providerTypes.js.map +1 -0
- package/dist/providers/xenoLocalProvider.d.ts +35 -0
- package/dist/providers/xenoLocalProvider.d.ts.map +1 -0
- package/dist/providers/xenoLocalProvider.js +159 -0
- package/dist/providers/xenoLocalProvider.js.map +1 -0
- package/dist/sandbox/providerSandbox.d.ts +35 -0
- package/dist/sandbox/providerSandbox.d.ts.map +1 -0
- package/dist/sandbox/providerSandbox.js +93 -0
- package/dist/sandbox/providerSandbox.js.map +1 -0
- package/dist/sandbox/providerSandboxAudit.d.ts +12 -0
- package/dist/sandbox/providerSandboxAudit.d.ts.map +1 -0
- package/dist/sandbox/providerSandboxAudit.js +25 -0
- package/dist/sandbox/providerSandboxAudit.js.map +1 -0
- package/dist/sandbox/providerSandboxDiagnostics.d.ts +13 -0
- package/dist/sandbox/providerSandboxDiagnostics.d.ts.map +1 -0
- package/dist/sandbox/providerSandboxDiagnostics.js +28 -0
- package/dist/sandbox/providerSandboxDiagnostics.js.map +1 -0
- package/dist/sandbox/providerSandboxTypes.d.ts +138 -0
- package/dist/sandbox/providerSandboxTypes.d.ts.map +1 -0
- package/dist/sandbox/providerSandboxTypes.js +17 -0
- package/dist/sandbox/providerSandboxTypes.js.map +1 -0
- package/dist/sandbox/sandboxCancellation.d.ts +6 -0
- package/dist/sandbox/sandboxCancellation.d.ts.map +1 -0
- package/dist/sandbox/sandboxCancellation.js +24 -0
- package/dist/sandbox/sandboxCancellation.js.map +1 -0
- package/dist/sandbox/sandboxErrors.d.ts +17 -0
- package/dist/sandbox/sandboxErrors.d.ts.map +1 -0
- package/dist/sandbox/sandboxErrors.js +21 -0
- package/dist/sandbox/sandboxErrors.js.map +1 -0
- package/dist/sandbox/sandboxFilesystem.d.ts +14 -0
- package/dist/sandbox/sandboxFilesystem.d.ts.map +1 -0
- package/dist/sandbox/sandboxFilesystem.js +51 -0
- package/dist/sandbox/sandboxFilesystem.js.map +1 -0
- package/dist/sandbox/sandboxNetwork.d.ts +14 -0
- package/dist/sandbox/sandboxNetwork.d.ts.map +1 -0
- package/dist/sandbox/sandboxNetwork.js +60 -0
- package/dist/sandbox/sandboxNetwork.js.map +1 -0
- package/dist/sandbox/sandboxSecrets.d.ts +17 -0
- package/dist/sandbox/sandboxSecrets.d.ts.map +1 -0
- package/dist/sandbox/sandboxSecrets.js +61 -0
- package/dist/sandbox/sandboxSecrets.js.map +1 -0
- package/dist/sandbox/sandboxTerminal.d.ts +14 -0
- package/dist/sandbox/sandboxTerminal.d.ts.map +1 -0
- package/dist/sandbox/sandboxTerminal.js +32 -0
- package/dist/sandbox/sandboxTerminal.js.map +1 -0
- package/dist/security/authPolicy.d.ts +31 -0
- package/dist/security/authPolicy.d.ts.map +1 -0
- package/dist/security/authPolicy.js +72 -0
- package/dist/security/authPolicy.js.map +1 -0
- package/dist/security/capabilityGate.d.ts +16 -0
- package/dist/security/capabilityGate.d.ts.map +1 -0
- package/dist/security/capabilityGate.js +101 -0
- package/dist/security/capabilityGate.js.map +1 -0
- package/dist/security/egressPolicy.d.ts +31 -0
- package/dist/security/egressPolicy.d.ts.map +1 -0
- package/dist/security/egressPolicy.js +120 -0
- package/dist/security/egressPolicy.js.map +1 -0
- package/dist/security/redaction.d.ts +16 -0
- package/dist/security/redaction.d.ts.map +1 -0
- package/dist/security/redaction.js +65 -0
- package/dist/security/redaction.js.map +1 -0
- package/dist/security/secretBinding.d.ts +34 -0
- package/dist/security/secretBinding.d.ts.map +1 -0
- package/dist/security/secretBinding.js +66 -0
- package/dist/security/secretBinding.js.map +1 -0
- package/dist/security/secretStore.d.ts +37 -0
- package/dist/security/secretStore.d.ts.map +1 -0
- package/dist/security/secretStore.js +55 -0
- package/dist/security/secretStore.js.map +1 -0
- package/dist/security/securityDiagnostics.d.ts +39 -0
- package/dist/security/securityDiagnostics.d.ts.map +1 -0
- package/dist/security/securityDiagnostics.js +36 -0
- package/dist/security/securityDiagnostics.js.map +1 -0
- package/dist/security/securityTypes.d.ts +77 -0
- package/dist/security/securityTypes.d.ts.map +1 -0
- package/dist/security/securityTypes.js +17 -0
- package/dist/security/securityTypes.js.map +1 -0
- package/dist/sessionStore.d.ts +33 -0
- package/dist/sessionStore.d.ts.map +1 -0
- package/dist/sessionStore.js +42 -0
- package/dist/sessionStore.js.map +1 -0
- package/dist/stdioJsonRpc.d.ts +43 -0
- package/dist/stdioJsonRpc.d.ts.map +1 -0
- package/dist/stdioJsonRpc.js +219 -0
- package/dist/stdioJsonRpc.js.map +1 -0
- package/dist/types.d.ts +78 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +12 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +7 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +7 -0
- package/dist/version.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `codex-local` - XENO-authored adapter around a REAL local third-party Codex CLI (XACP-035).
|
|
3
|
+
*
|
|
4
|
+
* It wraps the installed Codex CLI using `codex exec --json` and routes its native JSONL output
|
|
5
|
+
* through the same path as other adapters:
|
|
6
|
+
* runnability gate (policy + manual approval) -> sandbox context -> minimal process supervisor
|
|
7
|
+
* (shell:false, clean env allowlist, isolated cwd, timeout) -> `parseCodexExecJson` ->
|
|
8
|
+
* `ProviderEvent` -> ACP `session/update`.
|
|
9
|
+
*
|
|
10
|
+
* Scope:
|
|
11
|
+
* - XENO-authored local adapter for the installed Codex CLI; not official OpenAI/Codex ACP.
|
|
12
|
+
* - `trustClass: third-party`; approval-gated.
|
|
13
|
+
* - Relies on the Codex CLI's own local auth; this adapter never reads/stores/logs secrets.
|
|
14
|
+
* - Codex runs with `--sandbox read-only` and a supervisor temp cwd, so filesystem authority is
|
|
15
|
+
* declared as workspace-scoped read, not write. Terminal authority is none.
|
|
16
|
+
*/
|
|
17
|
+
import { runAdapterPrompt } from "../adapters/adapterProcessHarness.js";
|
|
18
|
+
import { parseCodexExecJson } from "./codexExecJsonParser.js";
|
|
19
|
+
import { ProviderConfigurationError, ProviderProtocolError } from "./providerErrors.js";
|
|
20
|
+
import { isTerminalEvent } from "./providerEvents.js";
|
|
21
|
+
import { isAbsolute } from "node:path";
|
|
22
|
+
export const CODEX_LOCAL_ID = "codex-local";
|
|
23
|
+
/** npm-installed Codex is a .cmd shim on Windows; the supervisor routes .cmd via cmd.exe /c. */
|
|
24
|
+
export const CODEX_LOCAL_DEFAULT_EXECUTABLE = process.platform === "win32" ? "codex.cmd" : "codex";
|
|
25
|
+
export const CODEX_LOCAL_CAPABILITIES = {
|
|
26
|
+
streamsText: true,
|
|
27
|
+
emitsPlan: false,
|
|
28
|
+
emitsToolCalls: true,
|
|
29
|
+
emitsUsage: true,
|
|
30
|
+
supportsCancel: true,
|
|
31
|
+
supportsMultipleSessions: true,
|
|
32
|
+
requiresAuth: true,
|
|
33
|
+
usesNetwork: true,
|
|
34
|
+
canReadFiles: true,
|
|
35
|
+
canWriteFiles: false,
|
|
36
|
+
canRunTerminal: false,
|
|
37
|
+
};
|
|
38
|
+
/** Minimal non-secret env keys the Codex CLI may need to find its own local auth/session. */
|
|
39
|
+
export const CODEX_LOCAL_ENV_ALLOWLIST_KEYS = [
|
|
40
|
+
"PATH",
|
|
41
|
+
"Path",
|
|
42
|
+
"HOME",
|
|
43
|
+
"USERPROFILE",
|
|
44
|
+
"APPDATA",
|
|
45
|
+
"LOCALAPPDATA",
|
|
46
|
+
"SystemRoot",
|
|
47
|
+
"windir",
|
|
48
|
+
"TEMP",
|
|
49
|
+
"TMP",
|
|
50
|
+
"ComSpec",
|
|
51
|
+
"PATHEXT",
|
|
52
|
+
"CODEX_HOME",
|
|
53
|
+
];
|
|
54
|
+
const CODEX_HOST_REQUEST_INSTRUCTIONS = [
|
|
55
|
+
"XENO ACP host request bridge:",
|
|
56
|
+
"- If the latest user explicitly asks you to choose, select, browse for, or trigger a project/workspace folder picker, and no folder path is already provided, do not say you cannot.",
|
|
57
|
+
"- Before the directive, write one brief natural-language acknowledgement in your own words. XENO ACP does not supply the acknowledgement wording.",
|
|
58
|
+
'- Then output exactly this directive on its own line and stop: <xeno_host_request>{"method":"choose_directory","title":"Choose workspace folder"}</xeno_host_request>',
|
|
59
|
+
"- Use this directive only for a real folder-picker request. Do not wrap it in markdown or code fences.",
|
|
60
|
+
'- If a choose_directory result selected a path and the user asked to assign that folder to the conversation, briefly acknowledge the selected folder in your own words, then output this second directive with the exact returned path and stop: <xeno_host_request>{"method":"choose_workspace_placement","directory":"ABSOLUTE_PATH","title":"Choose where to keep this conversation"}</xeno_host_request>',
|
|
61
|
+
"- Directory selection and workspace placement are distinct host requests. Never claim the folder is fully assigned before the workspace-placement result returns.",
|
|
62
|
+
"- Workspace placement changes only where the conversation is organized. An inbox choice keeps the selected folder assigned to the conversation while the conversation remains in Inbox.",
|
|
63
|
+
"- After the final <xeno_host_result> block is provided, respond naturally based on its structured status and do not repeat either host request.",
|
|
64
|
+
].join("\n");
|
|
65
|
+
/** Secret-bearing env keys that must never be forwarded to nested Codex. */
|
|
66
|
+
export const CODEX_LOCAL_ENV_BLOCKLIST_KEYS = [
|
|
67
|
+
"OPENAI_API_KEY",
|
|
68
|
+
"CODEX_API_KEY",
|
|
69
|
+
"*_API_KEY",
|
|
70
|
+
"*_TOKEN",
|
|
71
|
+
"*_SECRET",
|
|
72
|
+
];
|
|
73
|
+
const CODEX_LOCAL_MODEL_DISCOVERY = {
|
|
74
|
+
status: "default_only",
|
|
75
|
+
source: "none",
|
|
76
|
+
defaultModelId: null,
|
|
77
|
+
allowCustomModel: true,
|
|
78
|
+
models: [],
|
|
79
|
+
safeMessage: "Codex CLI accepts --model; run providers models to ask the installed CLI for its current catalog.",
|
|
80
|
+
};
|
|
81
|
+
export function renderCodexPromptText(prompt, systemPrompt) {
|
|
82
|
+
const promptText = prompt
|
|
83
|
+
.map((b) => (b && b.type === "text" && typeof b.text === "string" ? b.text : ""))
|
|
84
|
+
.filter((s) => s.length > 0)
|
|
85
|
+
.join("\n\n")
|
|
86
|
+
.trim();
|
|
87
|
+
const systemText = systemPrompt?.trim();
|
|
88
|
+
const userTurn = `${CODEX_HOST_REQUEST_INSTRUCTIONS}\n\nLatest user message:\n${promptText}\n\nRespond directly to the latest user message. If it is a greeting or casual follow-up, answer naturally and briefly instead of asking for a workspace task.`;
|
|
89
|
+
return systemText ? `<xeno_system_context>\n${systemText}\n</xeno_system_context>\n\n${userTurn}`.trim() : userTurn;
|
|
90
|
+
}
|
|
91
|
+
export function codexLocalCommand(promptText, opts = {}) {
|
|
92
|
+
const model = parseCodexModelSelection(opts.model);
|
|
93
|
+
const args = [
|
|
94
|
+
...(opts.argsPrefix ?? []),
|
|
95
|
+
"--ask-for-approval",
|
|
96
|
+
"never",
|
|
97
|
+
"--sandbox",
|
|
98
|
+
"read-only",
|
|
99
|
+
"--cd",
|
|
100
|
+
".",
|
|
101
|
+
"exec",
|
|
102
|
+
"--json",
|
|
103
|
+
...(model?.id ? ["--model", model.id] : []),
|
|
104
|
+
...(model?.reasoningEffort ? ["-c", `model_reasoning_effort="${model.reasoningEffort}"`] : []),
|
|
105
|
+
"--skip-git-repo-check",
|
|
106
|
+
"--ignore-rules",
|
|
107
|
+
"--ignore-user-config",
|
|
108
|
+
"--color",
|
|
109
|
+
"never",
|
|
110
|
+
"-",
|
|
111
|
+
];
|
|
112
|
+
return { executable: opts.executable ?? CODEX_LOCAL_DEFAULT_EXECUTABLE, args, stdin: promptText };
|
|
113
|
+
}
|
|
114
|
+
function parseCodexModelSelection(model) {
|
|
115
|
+
if (!model)
|
|
116
|
+
return undefined;
|
|
117
|
+
const match = model.match(/^(.*)-(low|medium|high|xhigh)$/);
|
|
118
|
+
return match && match[1] && match[2] ? { id: match[1], reasoningEffort: match[2] } : { id: model };
|
|
119
|
+
}
|
|
120
|
+
class CodexLocalRuntime {
|
|
121
|
+
definition;
|
|
122
|
+
options;
|
|
123
|
+
sessionSeq = 0;
|
|
124
|
+
promptCount = 0;
|
|
125
|
+
constructor(definition, config) {
|
|
126
|
+
this.definition = definition;
|
|
127
|
+
this.options = (config?.options ?? {});
|
|
128
|
+
}
|
|
129
|
+
initialize() { }
|
|
130
|
+
createSession() {
|
|
131
|
+
this.sessionSeq += 1;
|
|
132
|
+
return { sessionId: `${CODEX_LOCAL_ID}-session-${this.sessionSeq}`, createdAt: `s${this.sessionSeq}` };
|
|
133
|
+
}
|
|
134
|
+
cancel() { }
|
|
135
|
+
dispose() { }
|
|
136
|
+
diagnostics() {
|
|
137
|
+
return { provider: this.definition.id, sessionsCreated: this.sessionSeq, promptsRun: this.promptCount };
|
|
138
|
+
}
|
|
139
|
+
async prompt(request, ctx) {
|
|
140
|
+
this.promptCount += 1;
|
|
141
|
+
if (!this.options.runnability) {
|
|
142
|
+
throw new ProviderConfigurationError({
|
|
143
|
+
safeMessage: "codex-local requires runnability inputs (policy + approval) at runtime",
|
|
144
|
+
providerId: this.definition.id,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
const promptText = renderCodexPromptText(request.prompt, request.systemPrompt) || "Reply concisely.";
|
|
148
|
+
const first = await this.runCodexAdapter(request, ctx, promptText, 1);
|
|
149
|
+
if (!first.hostRequest || first.harness.result.disposition !== "completed") {
|
|
150
|
+
emitProviderEvents(ctx, first.harness.events);
|
|
151
|
+
return first.harness.result;
|
|
152
|
+
}
|
|
153
|
+
emitProviderEvents(ctx, first.harness.events.filter((event) => !isTerminalEvent(event.kind)));
|
|
154
|
+
if (first.hostRequest.method !== "choose_directory") {
|
|
155
|
+
const error = new ProviderProtocolError({
|
|
156
|
+
providerId: this.definition.id,
|
|
157
|
+
safeMessage: "codex-local requested workspace placement before selecting a directory",
|
|
158
|
+
});
|
|
159
|
+
ctx.emit({
|
|
160
|
+
eventId: `${request.requestId}-host-protocol-error`,
|
|
161
|
+
providerId: this.definition.id,
|
|
162
|
+
sessionId: request.sessionId,
|
|
163
|
+
requestId: request.requestId,
|
|
164
|
+
timestamp: new Date().toISOString(),
|
|
165
|
+
kind: "diagnostic",
|
|
166
|
+
payload: { message: error.safeMessage },
|
|
167
|
+
});
|
|
168
|
+
return { disposition: "failed", error };
|
|
169
|
+
}
|
|
170
|
+
return this.handleChooseDirectoryRequest(request, ctx, promptText, first.hostRequest, [first.harness.result]);
|
|
171
|
+
}
|
|
172
|
+
async runCodexAdapter(request, ctx, promptText, runIndex) {
|
|
173
|
+
const runnability = this.options.runnability;
|
|
174
|
+
if (!runnability) {
|
|
175
|
+
throw new ProviderConfigurationError({
|
|
176
|
+
safeMessage: "codex-local requires runnability inputs (policy + approval) at runtime",
|
|
177
|
+
providerId: this.definition.id,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
let hostRequest;
|
|
181
|
+
const command = codexLocalCommand(promptText, {
|
|
182
|
+
...(this.options.executable ? { executable: this.options.executable } : {}),
|
|
183
|
+
...(request.model ? { model: request.model } : {}),
|
|
184
|
+
...(this.options.argsPrefix ? { argsPrefix: this.options.argsPrefix } : {}),
|
|
185
|
+
});
|
|
186
|
+
const harness = await runAdapterPrompt({
|
|
187
|
+
definition: this.definition,
|
|
188
|
+
runnability,
|
|
189
|
+
request,
|
|
190
|
+
adapter: command,
|
|
191
|
+
parseStdout: (stdout, parseCtx) => {
|
|
192
|
+
const parsed = parseCodexExecJson(stdout, parseCtx);
|
|
193
|
+
if (parsed.hostRequest)
|
|
194
|
+
hostRequest = parsed.hostRequest;
|
|
195
|
+
parsed.events = parsed.events.map((event, index) => ({
|
|
196
|
+
...event,
|
|
197
|
+
eventId: `${request.requestId}-run-${runIndex}-evt-${index + 1}`,
|
|
198
|
+
}));
|
|
199
|
+
return parsed;
|
|
200
|
+
},
|
|
201
|
+
signal: ctx.signal,
|
|
202
|
+
...(this.options.envAllowlist ? { envAllowlist: this.options.envAllowlist } : {}),
|
|
203
|
+
...(request.cwd || this.options.cwd ? { cwd: request.cwd || this.options.cwd } : {}),
|
|
204
|
+
timeoutMs: this.options.timeoutMs ?? 120_000,
|
|
205
|
+
stdoutLimitBytes: 256 * 1024,
|
|
206
|
+
stderrLimitBytes: 64 * 1024,
|
|
207
|
+
});
|
|
208
|
+
return { harness, ...(hostRequest ? { hostRequest } : {}) };
|
|
209
|
+
}
|
|
210
|
+
async handleChooseDirectoryRequest(request, ctx, originalPromptText, hostRequest, priorResults) {
|
|
211
|
+
let hostSeq = 0;
|
|
212
|
+
const toolCallId = `${request.requestId}-choose-directory`;
|
|
213
|
+
const emitHostEvent = (kind, payload) => {
|
|
214
|
+
hostSeq += 1;
|
|
215
|
+
ctx.emit({
|
|
216
|
+
eventId: `${request.requestId}-host-${hostSeq}`,
|
|
217
|
+
providerId: this.definition.id,
|
|
218
|
+
sessionId: request.sessionId,
|
|
219
|
+
requestId: request.requestId,
|
|
220
|
+
timestamp: new Date().toISOString(),
|
|
221
|
+
kind,
|
|
222
|
+
payload,
|
|
223
|
+
});
|
|
224
|
+
};
|
|
225
|
+
emitHostEvent("tool_started", {
|
|
226
|
+
toolCallId,
|
|
227
|
+
title: hostRequest.title ?? "Choose workspace folder",
|
|
228
|
+
kind: "read",
|
|
229
|
+
});
|
|
230
|
+
let selected;
|
|
231
|
+
if (!ctx.host) {
|
|
232
|
+
selected = { error: "host_unavailable" };
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
try {
|
|
236
|
+
selected = await ctx.host.chooseDirectory({
|
|
237
|
+
title: hostRequest.title ?? "Choose workspace folder",
|
|
238
|
+
toolCallId,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
selected = { error: "host_request_failed" };
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
const hostResult = normalizeChooseDirectoryHostResult(selected, Boolean(ctx.host));
|
|
246
|
+
const toolOutcome = hostResult.status === "selected"
|
|
247
|
+
? "succeeded"
|
|
248
|
+
: hostResult.status === "cancelled"
|
|
249
|
+
? "cancelled"
|
|
250
|
+
: "failed";
|
|
251
|
+
emitHostEvent(hostResult.status === "selected" ? "tool_completed" : "tool_failed", {
|
|
252
|
+
toolCallId,
|
|
253
|
+
outcome: toolOutcome,
|
|
254
|
+
});
|
|
255
|
+
const continuationPrompt = renderCodexHostResultPrompt(originalPromptText, hostResult);
|
|
256
|
+
const second = await this.runCodexAdapter(request, ctx, continuationPrompt, 2);
|
|
257
|
+
if (second.hostRequest && second.harness.result.disposition === "completed") {
|
|
258
|
+
emitProviderEvents(ctx, second.harness.events.filter((event) => !isTerminalEvent(event.kind)));
|
|
259
|
+
if (hostResult.status === "selected"
|
|
260
|
+
&& second.hostRequest.method === "choose_workspace_placement"
|
|
261
|
+
&& second.hostRequest.directory === hostResult.path) {
|
|
262
|
+
return this.handleWorkspacePlacementRequest(request, ctx, continuationPrompt, second.hostRequest, emitHostEvent, [...priorResults, second.harness.result]);
|
|
263
|
+
}
|
|
264
|
+
const error = new ProviderProtocolError({
|
|
265
|
+
providerId: this.definition.id,
|
|
266
|
+
safeMessage: "codex-local emitted an invalid host-request sequence after directory selection",
|
|
267
|
+
});
|
|
268
|
+
emitHostEvent("diagnostic", {
|
|
269
|
+
message: "codex-local must request workspace placement only after a selected directory, using the exact returned path.",
|
|
270
|
+
});
|
|
271
|
+
emitHostEvent("failed", { disposition: "failed", message: error.safeMessage });
|
|
272
|
+
return { disposition: "failed", error };
|
|
273
|
+
}
|
|
274
|
+
emitProviderEvents(ctx, second.harness.events);
|
|
275
|
+
return combineProviderUsage(second.harness.result, priorResults);
|
|
276
|
+
}
|
|
277
|
+
async handleWorkspacePlacementRequest(request, ctx, originalPromptText, hostRequest, emitHostEvent, priorResults) {
|
|
278
|
+
const toolCallId = `${request.requestId}-choose-workspace-placement`;
|
|
279
|
+
emitHostEvent("tool_started", {
|
|
280
|
+
toolCallId,
|
|
281
|
+
title: hostRequest.title ?? "Choose workspace placement",
|
|
282
|
+
kind: "read",
|
|
283
|
+
});
|
|
284
|
+
let selected;
|
|
285
|
+
if (!ctx.host) {
|
|
286
|
+
selected = { error: "host_unavailable", directory: hostRequest.directory };
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
try {
|
|
290
|
+
selected = await ctx.host.chooseWorkspacePlacement({
|
|
291
|
+
directory: hostRequest.directory,
|
|
292
|
+
title: hostRequest.title ?? "Choose where to keep this conversation",
|
|
293
|
+
toolCallId,
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
selected = { error: "host_request_failed", directory: hostRequest.directory };
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
const hostResult = normalizeChooseWorkspacePlacementHostResult(selected, Boolean(ctx.host), hostRequest.directory);
|
|
301
|
+
const toolOutcome = hostResult.status === "selected"
|
|
302
|
+
? "succeeded"
|
|
303
|
+
: hostResult.status === "cancelled"
|
|
304
|
+
? "cancelled"
|
|
305
|
+
: "failed";
|
|
306
|
+
emitHostEvent(hostResult.status === "selected" ? "tool_completed" : "tool_failed", {
|
|
307
|
+
toolCallId,
|
|
308
|
+
outcome: toolOutcome,
|
|
309
|
+
});
|
|
310
|
+
const continuationPrompt = renderCodexWorkspacePlacementResultPrompt(originalPromptText, hostResult);
|
|
311
|
+
const third = await this.runCodexAdapter(request, ctx, continuationPrompt, 3);
|
|
312
|
+
if (third.hostRequest && third.harness.result.disposition === "completed") {
|
|
313
|
+
emitProviderEvents(ctx, third.harness.events.filter((event) => !isTerminalEvent(event.kind)));
|
|
314
|
+
const error = new ProviderProtocolError({
|
|
315
|
+
providerId: this.definition.id,
|
|
316
|
+
safeMessage: "codex-local repeated a host request after workspace placement completed",
|
|
317
|
+
});
|
|
318
|
+
emitHostEvent("diagnostic", {
|
|
319
|
+
message: "codex-local emitted a third host request; the two-step host workflow is bounded and recursion was suppressed.",
|
|
320
|
+
});
|
|
321
|
+
emitHostEvent("failed", { disposition: "failed", message: error.safeMessage });
|
|
322
|
+
return { disposition: "failed", error };
|
|
323
|
+
}
|
|
324
|
+
emitProviderEvents(ctx, third.harness.events);
|
|
325
|
+
return combineProviderUsage(third.harness.result, priorResults);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
function renderCodexHostResultPrompt(originalPromptText, result) {
|
|
329
|
+
return `${originalPromptText}\n\n<xeno_host_result>\n${JSON.stringify(result)}\n</xeno_host_result>\n\nThe XENO ACP host returned the structured folder-picker outcome above. If a path was selected and the latest user asked to assign that folder to this conversation, first acknowledge the selected folder in your own words, then emit one choose_workspace_placement host directive using the exact path. Otherwise respond naturally to the outcome. Do not request the folder again in this turn.`;
|
|
330
|
+
}
|
|
331
|
+
function renderCodexWorkspacePlacementResultPrompt(originalPromptText, result) {
|
|
332
|
+
return `${originalPromptText}\n\n<xeno_host_result>\n${JSON.stringify(result)}\n</xeno_host_result>\n\nThe XENO ACP host returned the final workspace-placement outcome above. Directory assignment and conversation placement are separate facts. For a selected result, explicitly confirm that the directory is assigned. If choice is inbox, say the conversation remains in Inbox without implying that assignment failed and without contrasting the facts with "but". Give a concise final confirmation and do not emit another host request.`;
|
|
333
|
+
}
|
|
334
|
+
function normalizeChooseDirectoryHostResult(result, hostAvailable) {
|
|
335
|
+
const path = result.path?.trim();
|
|
336
|
+
if (path && isAbsolute(path) && !result.cancelled && !result.timedOut && !result.error) {
|
|
337
|
+
return { method: "choose_directory", status: "selected", path };
|
|
338
|
+
}
|
|
339
|
+
if (!hostAvailable)
|
|
340
|
+
return { method: "choose_directory", status: "unavailable" };
|
|
341
|
+
if (result.cancelled)
|
|
342
|
+
return { method: "choose_directory", status: "cancelled" };
|
|
343
|
+
if (result.timedOut)
|
|
344
|
+
return { method: "choose_directory", status: "timed_out" };
|
|
345
|
+
return { method: "choose_directory", status: "failed" };
|
|
346
|
+
}
|
|
347
|
+
function normalizeChooseWorkspacePlacementHostResult(result, hostAvailable, requestedDirectory) {
|
|
348
|
+
if (result.choice && !result.cancelled && !result.timedOut && !result.error) {
|
|
349
|
+
return {
|
|
350
|
+
method: "choose_workspace_placement",
|
|
351
|
+
status: "selected",
|
|
352
|
+
choice: result.choice,
|
|
353
|
+
directory: result.directory ?? requestedDirectory,
|
|
354
|
+
...(result.workspaceName ? { workspaceName: result.workspaceName } : {}),
|
|
355
|
+
...(result.result ? { result: result.result } : {}),
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
if (!hostAvailable) {
|
|
359
|
+
return { method: "choose_workspace_placement", status: "unavailable", directory: requestedDirectory };
|
|
360
|
+
}
|
|
361
|
+
if (result.cancelled) {
|
|
362
|
+
return { method: "choose_workspace_placement", status: "cancelled", directory: requestedDirectory };
|
|
363
|
+
}
|
|
364
|
+
if (result.timedOut) {
|
|
365
|
+
return { method: "choose_workspace_placement", status: "timed_out", directory: requestedDirectory };
|
|
366
|
+
}
|
|
367
|
+
return { method: "choose_workspace_placement", status: "failed", directory: requestedDirectory };
|
|
368
|
+
}
|
|
369
|
+
function emitProviderEvents(ctx, events) {
|
|
370
|
+
for (const event of events)
|
|
371
|
+
ctx.emit(event);
|
|
372
|
+
}
|
|
373
|
+
function combineProviderUsage(result, priorResults) {
|
|
374
|
+
const usages = [...priorResults, result]
|
|
375
|
+
.map((entry) => entry.usage)
|
|
376
|
+
.filter((usage) => Boolean(usage));
|
|
377
|
+
if (!usages.length)
|
|
378
|
+
return result;
|
|
379
|
+
const inputTokens = usages.reduce((total, usage) => total + (usage.inputTokens ?? 0), 0);
|
|
380
|
+
const outputTokens = usages.reduce((total, usage) => total + (usage.outputTokens ?? 0), 0);
|
|
381
|
+
const totalTokens = usages.reduce((total, usage) => total + (usage.totalTokens ?? (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0)), 0);
|
|
382
|
+
return {
|
|
383
|
+
...result,
|
|
384
|
+
usage: {
|
|
385
|
+
...(usages.some((usage) => usage.inputTokens !== undefined) ? { inputTokens } : {}),
|
|
386
|
+
...(usages.some((usage) => usage.outputTokens !== undefined) ? { outputTokens } : {}),
|
|
387
|
+
totalTokens,
|
|
388
|
+
},
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
export function createCodexLocalDefinition() {
|
|
392
|
+
const definition = {
|
|
393
|
+
id: CODEX_LOCAL_ID,
|
|
394
|
+
displayName: "Codex CLI",
|
|
395
|
+
description: "XENO-authored local adapter for the installed Codex CLI (codex exec --json). Third-party, approval-gated; relies on the CLI's own local auth; no secret loading, no fs-write, no terminal.",
|
|
396
|
+
kind: "local-adapter",
|
|
397
|
+
trustClass: "third-party",
|
|
398
|
+
authRequirement: "required",
|
|
399
|
+
networkRequirement: "required",
|
|
400
|
+
ioAuthority: { filesystem: "workspace-scoped", terminal: "none" },
|
|
401
|
+
capabilities: CODEX_LOCAL_CAPABILITIES,
|
|
402
|
+
enabled: true,
|
|
403
|
+
metadata: {
|
|
404
|
+
acpEntrypoint: "adapter",
|
|
405
|
+
installedLocally: true,
|
|
406
|
+
displayAlias: "Codex CLI",
|
|
407
|
+
localReadiness: "codex-cli 0.140.0 observed locally; live smoke passed with codex exec --json",
|
|
408
|
+
versionReadiness: {
|
|
409
|
+
status: "not_checked",
|
|
410
|
+
cliName: "codex",
|
|
411
|
+
installedVersion: null,
|
|
412
|
+
minimumKnownGoodVersion: "0.140.0",
|
|
413
|
+
versionCommand: ["codex", "--version"],
|
|
414
|
+
safeUpgradeHint: "Run `codex update` outside xeno-acp when the operator chooses to upgrade.",
|
|
415
|
+
},
|
|
416
|
+
streaming: {
|
|
417
|
+
mode: "buffered",
|
|
418
|
+
safeMessage: "codex-local currently buffers Codex JSONL output through the minimal supervisor before ACP updates are emitted.",
|
|
419
|
+
},
|
|
420
|
+
setupHints: ["Install/authenticate Codex CLI.", "Review policy.", "Approve provider.", "Run providers test.", "Certify from Hub if needed."],
|
|
421
|
+
note: "XACP-035 XENO-authored adapter around the installed Codex CLI; not official OpenAI/Codex ACP.",
|
|
422
|
+
},
|
|
423
|
+
modelDiscovery: CODEX_LOCAL_MODEL_DISCOVERY,
|
|
424
|
+
createRuntime(config) {
|
|
425
|
+
return new CodexLocalRuntime(definition, config);
|
|
426
|
+
},
|
|
427
|
+
};
|
|
428
|
+
return definition;
|
|
429
|
+
}
|
|
430
|
+
//# sourceMappingURL=codexLocalProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codexLocalProvider.js","sourceRoot":"","sources":["../../src/providers/codexLocalProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ProviderProcessSupervisor } from "../process/providerProcessSupervisor.js";
|
|
2
|
+
import type { ProviderModelDiscovery } from "./providerTypes.js";
|
|
3
|
+
export interface CodexModelCatalogOptions {
|
|
4
|
+
executable: string;
|
|
5
|
+
cwd: string;
|
|
6
|
+
envAllowlist: Record<string, string>;
|
|
7
|
+
platformBasics?: Record<string, string>;
|
|
8
|
+
supervisor?: ProviderProcessSupervisor;
|
|
9
|
+
timeoutMs?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function discoverCodexCliModels(opts: CodexModelCatalogOptions): Promise<ProviderModelDiscovery>;
|
|
12
|
+
export declare function parseCodexModelCatalog(stdout: string): ProviderModelDiscovery;
|
|
13
|
+
//# sourceMappingURL=codexModelCatalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codexModelCatalog.d.ts","sourceRoot":"","sources":["../../src/providers/codexModelCatalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AAG1H,OAAO,KAAK,EAAuB,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAOtF,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAsB5G;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,CAyD7E"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { createProviderProcessSupervisor } from "../process/providerProcessSupervisor.js";
|
|
2
|
+
import { isSafeProviderModelId } from "./providerDiscovery.js";
|
|
3
|
+
const CODEX_MODEL_CATALOG_STDOUT_LIMIT_BYTES = 8 * 1024 * 1024;
|
|
4
|
+
const CODEX_MODEL_CATALOG_STDERR_LIMIT_BYTES = 64 * 1024;
|
|
5
|
+
const CODEX_MODEL_CATALOG_TIMEOUT_MS = 10_000;
|
|
6
|
+
const CODEX_MODEL_CATALOG_MAX_MODELS = 200;
|
|
7
|
+
export async function discoverCodexCliModels(opts) {
|
|
8
|
+
const supervisor = opts.supervisor ?? createProviderProcessSupervisor(opts.platformBasics ? { platformBasics: opts.platformBasics } : {});
|
|
9
|
+
try {
|
|
10
|
+
const handle = supervisor.start({
|
|
11
|
+
providerId: "codex-local",
|
|
12
|
+
executable: opts.executable,
|
|
13
|
+
args: ["debug", "models"],
|
|
14
|
+
cwd: opts.cwd,
|
|
15
|
+
envAllowlist: opts.envAllowlist,
|
|
16
|
+
timeoutMs: opts.timeoutMs ?? CODEX_MODEL_CATALOG_TIMEOUT_MS,
|
|
17
|
+
stdoutLimitBytes: CODEX_MODEL_CATALOG_STDOUT_LIMIT_BYTES,
|
|
18
|
+
stderrLimitBytes: CODEX_MODEL_CATALOG_STDERR_LIMIT_BYTES,
|
|
19
|
+
killTree: true,
|
|
20
|
+
platformMode: "minimal",
|
|
21
|
+
});
|
|
22
|
+
return discoveryFromCodexProcessResult(await handle.wait());
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return unavailableCodexCatalog();
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function parseCodexModelCatalog(stdout) {
|
|
29
|
+
let parsed;
|
|
30
|
+
try {
|
|
31
|
+
parsed = JSON.parse(stdout);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return unavailableCodexCatalog();
|
|
35
|
+
}
|
|
36
|
+
const candidates = Array.isArray(parsed)
|
|
37
|
+
? parsed
|
|
38
|
+
: isObject(parsed) && Array.isArray(parsed.models)
|
|
39
|
+
? parsed.models
|
|
40
|
+
: [];
|
|
41
|
+
const seen = new Set();
|
|
42
|
+
const models = [];
|
|
43
|
+
for (const candidate of candidates) {
|
|
44
|
+
if (models.length >= CODEX_MODEL_CATALOG_MAX_MODELS)
|
|
45
|
+
break;
|
|
46
|
+
if (!isObject(candidate))
|
|
47
|
+
continue;
|
|
48
|
+
const visibility = stringField(candidate, "visibility");
|
|
49
|
+
if (visibility && visibility !== "list")
|
|
50
|
+
continue;
|
|
51
|
+
const id = stringField(candidate, "slug") ?? stringField(candidate, "id") ?? stringField(candidate, "name");
|
|
52
|
+
if (!id || !isSafeProviderModelId(id) || seen.has(id))
|
|
53
|
+
continue;
|
|
54
|
+
const label = safeLabel(stringField(candidate, "display_name") ?? stringField(candidate, "displayName") ?? id, id);
|
|
55
|
+
const isDefault = boolField(candidate, "default") || boolField(candidate, "is_default") || boolField(candidate, "isDefault");
|
|
56
|
+
seen.add(id);
|
|
57
|
+
models.push({
|
|
58
|
+
id,
|
|
59
|
+
label,
|
|
60
|
+
default: isDefault,
|
|
61
|
+
available: boolField(candidate, "available", true),
|
|
62
|
+
reason: null,
|
|
63
|
+
});
|
|
64
|
+
for (const effort of reasoningEfforts(candidate)) {
|
|
65
|
+
const effortId = `${id}-${effort}`;
|
|
66
|
+
if (models.length >= CODEX_MODEL_CATALOG_MAX_MODELS || seen.has(effortId))
|
|
67
|
+
break;
|
|
68
|
+
seen.add(effortId);
|
|
69
|
+
models.push({
|
|
70
|
+
id: effortId,
|
|
71
|
+
label: `${label} ${effortLabel(effort)}`,
|
|
72
|
+
default: isDefault && effort === stringField(candidate, "default_reasoning_level"),
|
|
73
|
+
available: boolField(candidate, "available", true),
|
|
74
|
+
reason: null,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (!models.length)
|
|
79
|
+
return unavailableCodexCatalog("Codex CLI returned no listable models; use CLI default or enter a Codex model id.");
|
|
80
|
+
const defaultModelId = models.find((model) => model.default)?.id ?? null;
|
|
81
|
+
return {
|
|
82
|
+
status: "available",
|
|
83
|
+
source: "provider_cli",
|
|
84
|
+
defaultModelId,
|
|
85
|
+
allowCustomModel: true,
|
|
86
|
+
models,
|
|
87
|
+
safeMessage: "Codex CLI model catalog from `codex debug models`.",
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
function discoveryFromCodexProcessResult(result) {
|
|
91
|
+
if (result.status !== "completed" || result.exitCode !== 0 || result.stdoutTruncated) {
|
|
92
|
+
return unavailableCodexCatalog();
|
|
93
|
+
}
|
|
94
|
+
return parseCodexModelCatalog(result.stdout);
|
|
95
|
+
}
|
|
96
|
+
function unavailableCodexCatalog(safeMessage = "Codex CLI model catalog is unavailable; use CLI default or enter a Codex model id.") {
|
|
97
|
+
return {
|
|
98
|
+
status: "unavailable",
|
|
99
|
+
source: "provider_cli",
|
|
100
|
+
defaultModelId: null,
|
|
101
|
+
allowCustomModel: true,
|
|
102
|
+
models: [],
|
|
103
|
+
safeMessage,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
function isObject(value) {
|
|
107
|
+
return typeof value === "object" && value !== null;
|
|
108
|
+
}
|
|
109
|
+
function stringField(obj, key) {
|
|
110
|
+
const value = obj[key];
|
|
111
|
+
return typeof value === "string" && value.trim() ? value.trim() : undefined;
|
|
112
|
+
}
|
|
113
|
+
function boolField(obj, key, fallback = false) {
|
|
114
|
+
const value = obj[key];
|
|
115
|
+
return typeof value === "boolean" ? value : fallback;
|
|
116
|
+
}
|
|
117
|
+
function safeLabel(value, fallback) {
|
|
118
|
+
const label = value.replace(/[\u0000-\u001f\u007f]/g, " ").replace(/\s+/g, " ").trim().slice(0, 80);
|
|
119
|
+
return label || fallback;
|
|
120
|
+
}
|
|
121
|
+
function reasoningEfforts(obj) {
|
|
122
|
+
const levels = obj.supported_reasoning_levels;
|
|
123
|
+
if (!Array.isArray(levels))
|
|
124
|
+
return [];
|
|
125
|
+
const allowed = new Set(["low", "medium", "high", "xhigh"]);
|
|
126
|
+
return levels
|
|
127
|
+
.map((entry) => isObject(entry) ? stringField(entry, "effort") : undefined)
|
|
128
|
+
.filter((effort) => Boolean(effort && allowed.has(effort)));
|
|
129
|
+
}
|
|
130
|
+
function effortLabel(effort) {
|
|
131
|
+
return effort === "xhigh" ? "XHigh" : effort.charAt(0).toUpperCase() + effort.slice(1);
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=codexModelCatalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codexModelCatalog.js","sourceRoot":"","sources":["../../src/providers/codexModelCatalog.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic fixture provider (XACP-005 — refactored onto the provider contract).
|
|
3
|
+
*
|
|
4
|
+
* Emits normalized `ProviderEvent`s which the ACP server maps to the SAME ACP `session/update`
|
|
5
|
+
* sequence the certified fixture endpoint has always produced (plan → 2× message → tool_call
|
|
6
|
+
* → in_progress → completed → usage → end_turn). Zero I/O authority: no model, network,
|
|
7
|
+
* filesystem mutation, terminal execution, provider CLI, or secrets.
|
|
8
|
+
*/
|
|
9
|
+
import type { ProviderCapabilitySet, ProviderDefinition } from "./providerTypes.js";
|
|
10
|
+
export declare const FIXTURE_FINAL_TEXT = "XENO ACP fixture endpoint completed the requested task.";
|
|
11
|
+
/** Conservative capability declaration — the fixture does nothing risky. */
|
|
12
|
+
export declare const FIXTURE_CAPABILITIES: ProviderCapabilitySet;
|
|
13
|
+
export declare function createFixtureProviderDefinition(): ProviderDefinition;
|
|
14
|
+
//# sourceMappingURL=fixtureProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixtureProvider.d.ts","sourceRoot":"","sources":["../../src/providers/fixtureProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EACV,qBAAqB,EACrB,kBAAkB,EAOnB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,kBAAkB,4DAA4D,CAAC;AAE5F,4EAA4E;AAC5E,eAAO,MAAM,oBAAoB,EAAE,qBAYlC,CAAC;AAqHF,wBAAgB,+BAA+B,IAAI,kBAAkB,CA0BpE"}
|