@posthog/agent 2.3.465 → 2.3.466
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/adapters/codex/models.d.ts +5 -1
- package/dist/adapters/codex/models.js +35 -1
- package/dist/adapters/codex/models.js.map +1 -1
- package/dist/adapters/reasoning-effort.js.map +1 -1
- package/dist/agent.js +50 -1
- package/dist/agent.js.map +1 -1
- package/dist/posthog-api.js +1 -1
- package/dist/posthog-api.js.map +1 -1
- package/dist/server/agent-server.js +50 -1
- package/dist/server/agent-server.js.map +1 -1
- package/dist/server/bin.cjs +48 -1
- package/dist/server/bin.cjs.map +1 -1
- package/package.json +1 -1
- package/src/adapters/codex/codex-agent.ts +16 -0
- package/src/adapters/codex/models.ts +50 -0
|
@@ -1,7 +1,11 @@
|
|
|
1
|
+
import { SessionConfigOption } from '@agentclientprotocol/sdk';
|
|
2
|
+
|
|
1
3
|
interface ReasoningEffortOption {
|
|
2
4
|
value: string;
|
|
3
5
|
name: string;
|
|
4
6
|
}
|
|
5
7
|
declare function getReasoningEffortOptions(_modelId: string): ReasoningEffortOption[];
|
|
8
|
+
declare function formatCodexModelName(value: string): string;
|
|
9
|
+
declare function normalizeCodexConfigOptions(configOptions: SessionConfigOption[] | null | undefined): SessionConfigOption[] | null | undefined;
|
|
6
10
|
|
|
7
|
-
export { getReasoningEffortOptions };
|
|
11
|
+
export { formatCodexModelName, getReasoningEffortOptions, normalizeCodexConfigOptions };
|
|
@@ -7,7 +7,41 @@ var CODEX_REASONING_EFFORT_OPTIONS = [
|
|
|
7
7
|
function getReasoningEffortOptions(_modelId) {
|
|
8
8
|
return CODEX_REASONING_EFFORT_OPTIONS;
|
|
9
9
|
}
|
|
10
|
+
var CODEX_ACRONYMS = {
|
|
11
|
+
gpt: "GPT"
|
|
12
|
+
};
|
|
13
|
+
function formatCodexModelName(value) {
|
|
14
|
+
const normalized = value.replace(/(\d)-(\d)/g, "$1.$2");
|
|
15
|
+
return normalized.split("-").map((part) => {
|
|
16
|
+
const lower = part.toLowerCase();
|
|
17
|
+
if (CODEX_ACRONYMS[lower]) return CODEX_ACRONYMS[lower];
|
|
18
|
+
if (/^[0-9.]+$/.test(part)) return part;
|
|
19
|
+
return part.charAt(0).toUpperCase() + part.slice(1).toLowerCase();
|
|
20
|
+
}).join("-");
|
|
21
|
+
}
|
|
22
|
+
function normalizeCodexConfigOptions(configOptions) {
|
|
23
|
+
if (!configOptions) return configOptions;
|
|
24
|
+
const formatOption = (opt) => ({
|
|
25
|
+
...opt,
|
|
26
|
+
name: formatCodexModelName(opt.value)
|
|
27
|
+
});
|
|
28
|
+
return configOptions.map((option) => {
|
|
29
|
+
if (option.category !== "model" || option.type !== "select") return option;
|
|
30
|
+
const options = option.options;
|
|
31
|
+
if (options.length === 0) return option;
|
|
32
|
+
const isGroup = "group" in options[0];
|
|
33
|
+
return {
|
|
34
|
+
...option,
|
|
35
|
+
options: isGroup ? options.map((group) => ({
|
|
36
|
+
...group,
|
|
37
|
+
options: group.options.map(formatOption)
|
|
38
|
+
})) : options.map(formatOption)
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
}
|
|
10
42
|
export {
|
|
11
|
-
|
|
43
|
+
formatCodexModelName,
|
|
44
|
+
getReasoningEffortOptions,
|
|
45
|
+
normalizeCodexConfigOptions
|
|
12
46
|
};
|
|
13
47
|
//# sourceMappingURL=models.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/adapters/codex/models.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../src/adapters/codex/models.ts"],"sourcesContent":["import type {\n SessionConfigOption,\n SessionConfigSelectGroup,\n SessionConfigSelectOption,\n} from \"@agentclientprotocol/sdk\";\n\ninterface ReasoningEffortOption {\n value: string;\n name: string;\n}\n\nconst CODEX_REASONING_EFFORT_OPTIONS: ReasoningEffortOption[] = [\n { value: \"low\", name: \"Low\" },\n { value: \"medium\", name: \"Medium\" },\n { value: \"high\", name: \"High\" },\n];\n\nexport function getReasoningEffortOptions(\n _modelId: string,\n): ReasoningEffortOption[] {\n return CODEX_REASONING_EFFORT_OPTIONS;\n}\n\nconst CODEX_ACRONYMS: Record<string, string> = {\n gpt: \"GPT\",\n};\n\nexport function formatCodexModelName(value: string): string {\n const normalized = value.replace(/(\\d)-(\\d)/g, \"$1.$2\");\n return normalized\n .split(\"-\")\n .map((part) => {\n const lower = part.toLowerCase();\n if (CODEX_ACRONYMS[lower]) return CODEX_ACRONYMS[lower];\n if (/^[0-9.]+$/.test(part)) return part;\n return part.charAt(0).toUpperCase() + part.slice(1).toLowerCase();\n })\n .join(\"-\");\n}\n\nexport function normalizeCodexConfigOptions(\n configOptions: SessionConfigOption[] | null | undefined,\n): SessionConfigOption[] | null | undefined {\n if (!configOptions) return configOptions;\n const formatOption = (\n opt: SessionConfigSelectOption,\n ): SessionConfigSelectOption => ({\n ...opt,\n name: formatCodexModelName(opt.value),\n });\n return configOptions.map((option) => {\n if (option.category !== \"model\" || option.type !== \"select\") return option;\n const options = option.options;\n if (options.length === 0) return option;\n const isGroup = \"group\" in options[0];\n return {\n ...option,\n options: isGroup\n ? (options as SessionConfigSelectGroup[]).map((group) => ({\n ...group,\n options: group.options.map(formatOption),\n }))\n : (options as SessionConfigSelectOption[]).map(formatOption),\n } as SessionConfigOption;\n });\n}\n"],"mappings":";AAWA,IAAM,iCAA0D;AAAA,EAC9D,EAAE,OAAO,OAAO,MAAM,MAAM;AAAA,EAC5B,EAAE,OAAO,UAAU,MAAM,SAAS;AAAA,EAClC,EAAE,OAAO,QAAQ,MAAM,OAAO;AAChC;AAEO,SAAS,0BACd,UACyB;AACzB,SAAO;AACT;AAEA,IAAM,iBAAyC;AAAA,EAC7C,KAAK;AACP;AAEO,SAAS,qBAAqB,OAAuB;AAC1D,QAAM,aAAa,MAAM,QAAQ,cAAc,OAAO;AACtD,SAAO,WACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS;AACb,UAAM,QAAQ,KAAK,YAAY;AAC/B,QAAI,eAAe,KAAK,EAAG,QAAO,eAAe,KAAK;AACtD,QAAI,YAAY,KAAK,IAAI,EAAG,QAAO;AACnC,WAAO,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,EAAE,YAAY;AAAA,EAClE,CAAC,EACA,KAAK,GAAG;AACb;AAEO,SAAS,4BACd,eAC0C;AAC1C,MAAI,CAAC,cAAe,QAAO;AAC3B,QAAM,eAAe,CACnB,SAC+B;AAAA,IAC/B,GAAG;AAAA,IACH,MAAM,qBAAqB,IAAI,KAAK;AAAA,EACtC;AACA,SAAO,cAAc,IAAI,CAAC,WAAW;AACnC,QAAI,OAAO,aAAa,WAAW,OAAO,SAAS,SAAU,QAAO;AACpE,UAAM,UAAU,OAAO;AACvB,QAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,UAAM,UAAU,WAAW,QAAQ,CAAC;AACpC,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS,UACJ,QAAuC,IAAI,CAAC,WAAW;AAAA,QACtD,GAAG;AAAA,QACH,SAAS,MAAM,QAAQ,IAAI,YAAY;AAAA,MACzC,EAAE,IACD,QAAwC,IAAI,YAAY;AAAA,IAC/D;AAAA,EACF,CAAC;AACH;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/adapters/claude/session/models.ts","../../src/adapters/codex/models.ts","../../src/adapters/reasoning-effort.ts"],"sourcesContent":["export const DEFAULT_MODEL = \"opus\";\n\nconst GATEWAY_TO_SDK_MODEL: Record<string, string> = {\n \"claude-opus-4-5\": \"opus\",\n \"claude-opus-4-6\": \"opus\",\n \"claude-opus-4-7\": \"opus\",\n \"claude-sonnet-4-5\": \"sonnet\",\n \"claude-sonnet-4-6\": \"sonnet\",\n \"claude-haiku-4-5\": \"haiku\",\n};\n\nexport function toSdkModelId(modelId: string): string {\n return GATEWAY_TO_SDK_MODEL[modelId] ?? modelId;\n}\n\nconst MODELS_WITH_1M_CONTEXT = new Set([\n \"claude-opus-4-6\",\n \"claude-opus-4-7\",\n \"claude-sonnet-4-6\",\n]);\n\nexport function supports1MContext(modelId: string): boolean {\n return MODELS_WITH_1M_CONTEXT.has(modelId);\n}\n\nconst MODELS_WITH_EFFORT = new Set([\n \"claude-opus-4-5\",\n \"claude-opus-4-6\",\n \"claude-opus-4-7\",\n \"claude-sonnet-4-6\",\n]);\n\nconst MODELS_WITH_XHIGH_EFFORT = new Set([\n \"claude-opus-4-6\",\n \"claude-opus-4-7\",\n]);\n\nexport function supportsEffort(modelId: string): boolean {\n return MODELS_WITH_EFFORT.has(modelId);\n}\n\nexport function supportsXhighEffort(modelId: string): boolean {\n return MODELS_WITH_XHIGH_EFFORT.has(modelId);\n}\n\nconst MODELS_TO_EXCLUDE_MCP_TOOLS = new Set([\"claude-haiku-4-5\"]);\n\nexport function supportsMcpInjection(modelId: string): boolean {\n return !MODELS_TO_EXCLUDE_MCP_TOOLS.has(modelId);\n}\n\ninterface EffortOption {\n value: string;\n name: string;\n}\n\nexport function getEffortOptions(modelId: string): EffortOption[] | null {\n if (!supportsEffort(modelId)) return null;\n\n const options: EffortOption[] = [\n { value: \"low\", name: \"Low\" },\n { value: \"medium\", name: \"Medium\" },\n { value: \"high\", name: \"High\" },\n ];\n\n if (supportsXhighEffort(modelId)) {\n options.push(\n { value: \"xhigh\", name: \"Extra High\" },\n { value: \"max\", name: \"Max\" },\n );\n }\n\n return options;\n}\n\n// Model alias resolution — lets callers use human-friendly aliases like\n// \"opus\" or \"sonnet\" instead of full model IDs like \"claude-opus-4-6\".\n\nconst MODEL_CONTEXT_HINT_PATTERN = /\\[(\\d+m)\\]$/i;\n\nfunction tokenizeModelPreference(model: string): {\n tokens: string[];\n contextHint?: string;\n} {\n const lower = model.trim().toLowerCase();\n const contextHint = lower\n .match(MODEL_CONTEXT_HINT_PATTERN)?.[1]\n ?.toLowerCase();\n\n const normalized = lower.replace(MODEL_CONTEXT_HINT_PATTERN, \" $1 \");\n const rawTokens = normalized.split(/[^a-z0-9]+/).filter(Boolean);\n const tokens = rawTokens\n .map((token) => {\n if (token === \"opusplan\") return \"opus\";\n if (token === \"best\" || token === \"default\") return \"\";\n return token;\n })\n .filter((token) => token && token !== \"claude\")\n .filter((token) => /[a-z]/.test(token) || token.endsWith(\"m\"));\n\n return { tokens, contextHint };\n}\n\ninterface ModelOption {\n value: string;\n name?: string;\n description?: string;\n}\n\nfunction scoreModelMatch(\n model: ModelOption,\n tokens: string[],\n contextHint?: string,\n): number {\n const haystack = `${model.value} ${model.name ?? \"\"}`.toLowerCase();\n let score = 0;\n for (const token of tokens) {\n if (haystack.includes(token)) {\n score += token === contextHint ? 3 : 1;\n }\n }\n return score;\n}\n\nexport function resolveModelPreference(\n preference: string,\n options: ModelOption[],\n): string | null {\n const trimmed = preference.trim();\n if (!trimmed) return null;\n\n const lower = trimmed.toLowerCase();\n\n // Exact match on value or display name\n const directMatch = options.find(\n (o) =>\n o.value === trimmed ||\n o.value.toLowerCase() === lower ||\n (o.name && o.name.toLowerCase() === lower),\n );\n if (directMatch) return directMatch.value;\n\n // Substring match\n const includesMatch = options.find((o) => {\n const value = o.value.toLowerCase();\n const display = (o.name ?? \"\").toLowerCase();\n return (\n value.includes(lower) || display.includes(lower) || lower.includes(value)\n );\n });\n if (includesMatch) return includesMatch.value;\n\n // Tokenized matching for aliases like \"opus[1m]\"\n const { tokens, contextHint } = tokenizeModelPreference(trimmed);\n if (tokens.length === 0) return null;\n\n let bestMatch: ModelOption | null = null;\n let bestScore = 0;\n for (const model of options) {\n const score = scoreModelMatch(model, tokens, contextHint);\n if (0 < score && (!bestMatch || bestScore < score)) {\n bestMatch = model;\n bestScore = score;\n }\n }\n\n return bestMatch?.value ?? null;\n}\n","
|
|
1
|
+
{"version":3,"sources":["../../src/adapters/claude/session/models.ts","../../src/adapters/codex/models.ts","../../src/adapters/reasoning-effort.ts"],"sourcesContent":["export const DEFAULT_MODEL = \"opus\";\n\nconst GATEWAY_TO_SDK_MODEL: Record<string, string> = {\n \"claude-opus-4-5\": \"opus\",\n \"claude-opus-4-6\": \"opus\",\n \"claude-opus-4-7\": \"opus\",\n \"claude-sonnet-4-5\": \"sonnet\",\n \"claude-sonnet-4-6\": \"sonnet\",\n \"claude-haiku-4-5\": \"haiku\",\n};\n\nexport function toSdkModelId(modelId: string): string {\n return GATEWAY_TO_SDK_MODEL[modelId] ?? modelId;\n}\n\nconst MODELS_WITH_1M_CONTEXT = new Set([\n \"claude-opus-4-6\",\n \"claude-opus-4-7\",\n \"claude-sonnet-4-6\",\n]);\n\nexport function supports1MContext(modelId: string): boolean {\n return MODELS_WITH_1M_CONTEXT.has(modelId);\n}\n\nconst MODELS_WITH_EFFORT = new Set([\n \"claude-opus-4-5\",\n \"claude-opus-4-6\",\n \"claude-opus-4-7\",\n \"claude-sonnet-4-6\",\n]);\n\nconst MODELS_WITH_XHIGH_EFFORT = new Set([\n \"claude-opus-4-6\",\n \"claude-opus-4-7\",\n]);\n\nexport function supportsEffort(modelId: string): boolean {\n return MODELS_WITH_EFFORT.has(modelId);\n}\n\nexport function supportsXhighEffort(modelId: string): boolean {\n return MODELS_WITH_XHIGH_EFFORT.has(modelId);\n}\n\nconst MODELS_TO_EXCLUDE_MCP_TOOLS = new Set([\"claude-haiku-4-5\"]);\n\nexport function supportsMcpInjection(modelId: string): boolean {\n return !MODELS_TO_EXCLUDE_MCP_TOOLS.has(modelId);\n}\n\ninterface EffortOption {\n value: string;\n name: string;\n}\n\nexport function getEffortOptions(modelId: string): EffortOption[] | null {\n if (!supportsEffort(modelId)) return null;\n\n const options: EffortOption[] = [\n { value: \"low\", name: \"Low\" },\n { value: \"medium\", name: \"Medium\" },\n { value: \"high\", name: \"High\" },\n ];\n\n if (supportsXhighEffort(modelId)) {\n options.push(\n { value: \"xhigh\", name: \"Extra High\" },\n { value: \"max\", name: \"Max\" },\n );\n }\n\n return options;\n}\n\n// Model alias resolution — lets callers use human-friendly aliases like\n// \"opus\" or \"sonnet\" instead of full model IDs like \"claude-opus-4-6\".\n\nconst MODEL_CONTEXT_HINT_PATTERN = /\\[(\\d+m)\\]$/i;\n\nfunction tokenizeModelPreference(model: string): {\n tokens: string[];\n contextHint?: string;\n} {\n const lower = model.trim().toLowerCase();\n const contextHint = lower\n .match(MODEL_CONTEXT_HINT_PATTERN)?.[1]\n ?.toLowerCase();\n\n const normalized = lower.replace(MODEL_CONTEXT_HINT_PATTERN, \" $1 \");\n const rawTokens = normalized.split(/[^a-z0-9]+/).filter(Boolean);\n const tokens = rawTokens\n .map((token) => {\n if (token === \"opusplan\") return \"opus\";\n if (token === \"best\" || token === \"default\") return \"\";\n return token;\n })\n .filter((token) => token && token !== \"claude\")\n .filter((token) => /[a-z]/.test(token) || token.endsWith(\"m\"));\n\n return { tokens, contextHint };\n}\n\ninterface ModelOption {\n value: string;\n name?: string;\n description?: string;\n}\n\nfunction scoreModelMatch(\n model: ModelOption,\n tokens: string[],\n contextHint?: string,\n): number {\n const haystack = `${model.value} ${model.name ?? \"\"}`.toLowerCase();\n let score = 0;\n for (const token of tokens) {\n if (haystack.includes(token)) {\n score += token === contextHint ? 3 : 1;\n }\n }\n return score;\n}\n\nexport function resolveModelPreference(\n preference: string,\n options: ModelOption[],\n): string | null {\n const trimmed = preference.trim();\n if (!trimmed) return null;\n\n const lower = trimmed.toLowerCase();\n\n // Exact match on value or display name\n const directMatch = options.find(\n (o) =>\n o.value === trimmed ||\n o.value.toLowerCase() === lower ||\n (o.name && o.name.toLowerCase() === lower),\n );\n if (directMatch) return directMatch.value;\n\n // Substring match\n const includesMatch = options.find((o) => {\n const value = o.value.toLowerCase();\n const display = (o.name ?? \"\").toLowerCase();\n return (\n value.includes(lower) || display.includes(lower) || lower.includes(value)\n );\n });\n if (includesMatch) return includesMatch.value;\n\n // Tokenized matching for aliases like \"opus[1m]\"\n const { tokens, contextHint } = tokenizeModelPreference(trimmed);\n if (tokens.length === 0) return null;\n\n let bestMatch: ModelOption | null = null;\n let bestScore = 0;\n for (const model of options) {\n const score = scoreModelMatch(model, tokens, contextHint);\n if (0 < score && (!bestMatch || bestScore < score)) {\n bestMatch = model;\n bestScore = score;\n }\n }\n\n return bestMatch?.value ?? null;\n}\n","import type {\n SessionConfigOption,\n SessionConfigSelectGroup,\n SessionConfigSelectOption,\n} from \"@agentclientprotocol/sdk\";\n\ninterface ReasoningEffortOption {\n value: string;\n name: string;\n}\n\nconst CODEX_REASONING_EFFORT_OPTIONS: ReasoningEffortOption[] = [\n { value: \"low\", name: \"Low\" },\n { value: \"medium\", name: \"Medium\" },\n { value: \"high\", name: \"High\" },\n];\n\nexport function getReasoningEffortOptions(\n _modelId: string,\n): ReasoningEffortOption[] {\n return CODEX_REASONING_EFFORT_OPTIONS;\n}\n\nconst CODEX_ACRONYMS: Record<string, string> = {\n gpt: \"GPT\",\n};\n\nexport function formatCodexModelName(value: string): string {\n const normalized = value.replace(/(\\d)-(\\d)/g, \"$1.$2\");\n return normalized\n .split(\"-\")\n .map((part) => {\n const lower = part.toLowerCase();\n if (CODEX_ACRONYMS[lower]) return CODEX_ACRONYMS[lower];\n if (/^[0-9.]+$/.test(part)) return part;\n return part.charAt(0).toUpperCase() + part.slice(1).toLowerCase();\n })\n .join(\"-\");\n}\n\nexport function normalizeCodexConfigOptions(\n configOptions: SessionConfigOption[] | null | undefined,\n): SessionConfigOption[] | null | undefined {\n if (!configOptions) return configOptions;\n const formatOption = (\n opt: SessionConfigSelectOption,\n ): SessionConfigSelectOption => ({\n ...opt,\n name: formatCodexModelName(opt.value),\n });\n return configOptions.map((option) => {\n if (option.category !== \"model\" || option.type !== \"select\") return option;\n const options = option.options;\n if (options.length === 0) return option;\n const isGroup = \"group\" in options[0];\n return {\n ...option,\n options: isGroup\n ? (options as SessionConfigSelectGroup[]).map((group) => ({\n ...group,\n options: group.options.map(formatOption),\n }))\n : (options as SessionConfigSelectOption[]).map(formatOption),\n } as SessionConfigOption;\n });\n}\n","import { getEffortOptions as getClaudeEffortOptions } from \"./claude/session/models\";\nimport { getReasoningEffortOptions as getCodexReasoningEffortOptions } from \"./codex/models\";\n\nexport type RuntimeAdapter = \"claude\" | \"codex\";\n\nexport type SupportedReasoningEffort =\n | \"low\"\n | \"medium\"\n | \"high\"\n | \"xhigh\"\n | \"max\";\n\nexport interface ReasoningEffortOption {\n value: SupportedReasoningEffort;\n name: string;\n}\n\nexport function getReasoningEffortOptions(\n adapter: RuntimeAdapter,\n modelId: string,\n): ReasoningEffortOption[] | null {\n const options =\n adapter === \"codex\"\n ? getCodexReasoningEffortOptions(modelId)\n : getClaudeEffortOptions(modelId);\n\n return options as ReasoningEffortOption[] | null;\n}\n\nexport function isSupportedReasoningEffort(\n adapter: RuntimeAdapter,\n modelId: string,\n value: string,\n): value is SupportedReasoningEffort {\n return (\n getReasoningEffortOptions(adapter, modelId)?.some(\n (option) => option.value === value,\n ) ?? false\n );\n}\n"],"mappings":";AAyBA,IAAM,qBAAqB,oBAAI,IAAI;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,2BAA2B,oBAAI,IAAI;AAAA,EACvC;AAAA,EACA;AACF,CAAC;AAEM,SAAS,eAAe,SAA0B;AACvD,SAAO,mBAAmB,IAAI,OAAO;AACvC;AAEO,SAAS,oBAAoB,SAA0B;AAC5D,SAAO,yBAAyB,IAAI,OAAO;AAC7C;AAaO,SAAS,iBAAiB,SAAwC;AACvE,MAAI,CAAC,eAAe,OAAO,EAAG,QAAO;AAErC,QAAM,UAA0B;AAAA,IAC9B,EAAE,OAAO,OAAO,MAAM,MAAM;AAAA,IAC5B,EAAE,OAAO,UAAU,MAAM,SAAS;AAAA,IAClC,EAAE,OAAO,QAAQ,MAAM,OAAO;AAAA,EAChC;AAEA,MAAI,oBAAoB,OAAO,GAAG;AAChC,YAAQ;AAAA,MACN,EAAE,OAAO,SAAS,MAAM,aAAa;AAAA,MACrC,EAAE,OAAO,OAAO,MAAM,MAAM;AAAA,IAC9B;AAAA,EACF;AAEA,SAAO;AACT;;;AC9DA,IAAM,iCAA0D;AAAA,EAC9D,EAAE,OAAO,OAAO,MAAM,MAAM;AAAA,EAC5B,EAAE,OAAO,UAAU,MAAM,SAAS;AAAA,EAClC,EAAE,OAAO,QAAQ,MAAM,OAAO;AAChC;AAEO,SAAS,0BACd,UACyB;AACzB,SAAO;AACT;;;ACJO,SAASA,2BACd,SACA,SACgC;AAChC,QAAM,UACJ,YAAY,UACR,0BAA+B,OAAO,IACtC,iBAAuB,OAAO;AAEpC,SAAO;AACT;AAEO,SAAS,2BACd,SACA,SACA,OACmC;AACnC,SACEA,2BAA0B,SAAS,OAAO,GAAG;AAAA,IAC3C,CAAC,WAAW,OAAO,UAAU;AAAA,EAC/B,KAAK;AAET;","names":["getReasoningEffortOptions"]}
|
package/dist/agent.js
CHANGED
|
@@ -4030,7 +4030,7 @@ import { v7 as uuidv7 } from "uuid";
|
|
|
4030
4030
|
// package.json
|
|
4031
4031
|
var package_default = {
|
|
4032
4032
|
name: "@posthog/agent",
|
|
4033
|
-
version: "2.3.
|
|
4033
|
+
version: "2.3.466",
|
|
4034
4034
|
repository: "https://github.com/PostHog/code",
|
|
4035
4035
|
description: "TypeScript agent framework wrapping Claude Agent SDK with Git-based task execution for PostHog",
|
|
4036
4036
|
exports: {
|
|
@@ -17686,6 +17686,40 @@ function createCodexClient(upstreamClient, logger, sessionState, callbacks) {
|
|
|
17686
17686
|
};
|
|
17687
17687
|
}
|
|
17688
17688
|
|
|
17689
|
+
// src/adapters/codex/models.ts
|
|
17690
|
+
var CODEX_ACRONYMS = {
|
|
17691
|
+
gpt: "GPT"
|
|
17692
|
+
};
|
|
17693
|
+
function formatCodexModelName(value) {
|
|
17694
|
+
const normalized = value.replace(/(\d)-(\d)/g, "$1.$2");
|
|
17695
|
+
return normalized.split("-").map((part) => {
|
|
17696
|
+
const lower = part.toLowerCase();
|
|
17697
|
+
if (CODEX_ACRONYMS[lower]) return CODEX_ACRONYMS[lower];
|
|
17698
|
+
if (/^[0-9.]+$/.test(part)) return part;
|
|
17699
|
+
return part.charAt(0).toUpperCase() + part.slice(1).toLowerCase();
|
|
17700
|
+
}).join("-");
|
|
17701
|
+
}
|
|
17702
|
+
function normalizeCodexConfigOptions(configOptions) {
|
|
17703
|
+
if (!configOptions) return configOptions;
|
|
17704
|
+
const formatOption = (opt) => ({
|
|
17705
|
+
...opt,
|
|
17706
|
+
name: formatCodexModelName(opt.value)
|
|
17707
|
+
});
|
|
17708
|
+
return configOptions.map((option) => {
|
|
17709
|
+
if (option.category !== "model" || option.type !== "select") return option;
|
|
17710
|
+
const options = option.options;
|
|
17711
|
+
if (options.length === 0) return option;
|
|
17712
|
+
const isGroup = "group" in options[0];
|
|
17713
|
+
return {
|
|
17714
|
+
...option,
|
|
17715
|
+
options: isGroup ? options.map((group) => ({
|
|
17716
|
+
...group,
|
|
17717
|
+
options: group.options.map(formatOption)
|
|
17718
|
+
})) : options.map(formatOption)
|
|
17719
|
+
};
|
|
17720
|
+
});
|
|
17721
|
+
}
|
|
17722
|
+
|
|
17689
17723
|
// src/adapters/codex/session-state.ts
|
|
17690
17724
|
function createSessionState(sessionId, cwd, opts) {
|
|
17691
17725
|
return {
|
|
@@ -18018,6 +18052,9 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
18018
18052
|
const meta = params._meta;
|
|
18019
18053
|
const requestedPermissionMode = toCodexPermissionMode(meta?.permissionMode);
|
|
18020
18054
|
const response = await this.codexConnection.newSession(params);
|
|
18055
|
+
response.configOptions = normalizeCodexConfigOptions(
|
|
18056
|
+
response.configOptions
|
|
18057
|
+
);
|
|
18021
18058
|
this.sessionState = createSessionState(response.sessionId, params.cwd, {
|
|
18022
18059
|
taskRunId: meta?.taskRunId,
|
|
18023
18060
|
taskId: meta?.taskId ?? meta?.persistence?.taskId,
|
|
@@ -18047,6 +18084,9 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
18047
18084
|
}
|
|
18048
18085
|
async loadSession(params) {
|
|
18049
18086
|
const response = await this.codexConnection.loadSession(params);
|
|
18087
|
+
response.configOptions = normalizeCodexConfigOptions(
|
|
18088
|
+
response.configOptions
|
|
18089
|
+
);
|
|
18050
18090
|
const meta = params._meta;
|
|
18051
18091
|
const currentPermissionMode = getCurrentPermissionMode(
|
|
18052
18092
|
response.modes?.currentModeId,
|
|
@@ -18075,6 +18115,9 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
18075
18115
|
cwd: params.cwd,
|
|
18076
18116
|
mcpServers: params.mcpServers ?? []
|
|
18077
18117
|
});
|
|
18118
|
+
loadResponse.configOptions = normalizeCodexConfigOptions(
|
|
18119
|
+
loadResponse.configOptions
|
|
18120
|
+
);
|
|
18078
18121
|
const meta = params._meta;
|
|
18079
18122
|
const currentPermissionMode = getCurrentPermissionMode(
|
|
18080
18123
|
loadResponse.modes?.currentModeId,
|
|
@@ -18107,6 +18150,9 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
18107
18150
|
mcpServers: params.mcpServers ?? [],
|
|
18108
18151
|
_meta: params._meta
|
|
18109
18152
|
});
|
|
18153
|
+
newResponse.configOptions = normalizeCodexConfigOptions(
|
|
18154
|
+
newResponse.configOptions
|
|
18155
|
+
);
|
|
18110
18156
|
const meta = params._meta;
|
|
18111
18157
|
const requestedPermissionMode = toCodexPermissionMode(meta?.permissionMode);
|
|
18112
18158
|
this.sessionState = createSessionState(newResponse.sessionId, params.cwd, {
|
|
@@ -18314,6 +18360,9 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
18314
18360
|
async setSessionConfigOption(params) {
|
|
18315
18361
|
const response = await this.codexConnection.setSessionConfigOption(params);
|
|
18316
18362
|
if (response.configOptions) {
|
|
18363
|
+
response.configOptions = normalizeCodexConfigOptions(
|
|
18364
|
+
response.configOptions
|
|
18365
|
+
);
|
|
18317
18366
|
this.sessionState.configOptions = response.configOptions;
|
|
18318
18367
|
}
|
|
18319
18368
|
if (params.configId === "mode" && typeof params.value === "string") {
|