@posthog/agent 2.3.465 → 2.3.474
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 +52 -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 +52 -1
- package/dist/server/agent-server.js.map +1 -1
- package/dist/server/bin.cjs +50 -1
- package/dist/server/bin.cjs.map +1 -1
- package/package.json +3 -3
- package/src/adapters/claude/session/instructions.ts +2 -0
- 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.474",
|
|
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: {
|
|
@@ -10993,6 +10993,8 @@ var BRANCH_NAMING = `
|
|
|
10993
10993
|
# Branch Naming
|
|
10994
10994
|
|
|
10995
10995
|
When working in a detached HEAD state, create a descriptive branch name based on the work being done before committing. Do this automatically without asking the user.
|
|
10996
|
+
|
|
10997
|
+
When creating a new branch, prefix it with \`posthog-code/\` (e.g. \`posthog-code/fix-login-redirect\`).
|
|
10996
10998
|
`;
|
|
10997
10999
|
var PLAN_MODE = `
|
|
10998
11000
|
# Plan Mode
|
|
@@ -17686,6 +17688,40 @@ function createCodexClient(upstreamClient, logger, sessionState, callbacks) {
|
|
|
17686
17688
|
};
|
|
17687
17689
|
}
|
|
17688
17690
|
|
|
17691
|
+
// src/adapters/codex/models.ts
|
|
17692
|
+
var CODEX_ACRONYMS = {
|
|
17693
|
+
gpt: "GPT"
|
|
17694
|
+
};
|
|
17695
|
+
function formatCodexModelName(value) {
|
|
17696
|
+
const normalized = value.replace(/(\d)-(\d)/g, "$1.$2");
|
|
17697
|
+
return normalized.split("-").map((part) => {
|
|
17698
|
+
const lower = part.toLowerCase();
|
|
17699
|
+
if (CODEX_ACRONYMS[lower]) return CODEX_ACRONYMS[lower];
|
|
17700
|
+
if (/^[0-9.]+$/.test(part)) return part;
|
|
17701
|
+
return part.charAt(0).toUpperCase() + part.slice(1).toLowerCase();
|
|
17702
|
+
}).join("-");
|
|
17703
|
+
}
|
|
17704
|
+
function normalizeCodexConfigOptions(configOptions) {
|
|
17705
|
+
if (!configOptions) return configOptions;
|
|
17706
|
+
const formatOption = (opt) => ({
|
|
17707
|
+
...opt,
|
|
17708
|
+
name: formatCodexModelName(opt.value)
|
|
17709
|
+
});
|
|
17710
|
+
return configOptions.map((option) => {
|
|
17711
|
+
if (option.category !== "model" || option.type !== "select") return option;
|
|
17712
|
+
const options = option.options;
|
|
17713
|
+
if (options.length === 0) return option;
|
|
17714
|
+
const isGroup = "group" in options[0];
|
|
17715
|
+
return {
|
|
17716
|
+
...option,
|
|
17717
|
+
options: isGroup ? options.map((group) => ({
|
|
17718
|
+
...group,
|
|
17719
|
+
options: group.options.map(formatOption)
|
|
17720
|
+
})) : options.map(formatOption)
|
|
17721
|
+
};
|
|
17722
|
+
});
|
|
17723
|
+
}
|
|
17724
|
+
|
|
17689
17725
|
// src/adapters/codex/session-state.ts
|
|
17690
17726
|
function createSessionState(sessionId, cwd, opts) {
|
|
17691
17727
|
return {
|
|
@@ -18018,6 +18054,9 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
18018
18054
|
const meta = params._meta;
|
|
18019
18055
|
const requestedPermissionMode = toCodexPermissionMode(meta?.permissionMode);
|
|
18020
18056
|
const response = await this.codexConnection.newSession(params);
|
|
18057
|
+
response.configOptions = normalizeCodexConfigOptions(
|
|
18058
|
+
response.configOptions
|
|
18059
|
+
);
|
|
18021
18060
|
this.sessionState = createSessionState(response.sessionId, params.cwd, {
|
|
18022
18061
|
taskRunId: meta?.taskRunId,
|
|
18023
18062
|
taskId: meta?.taskId ?? meta?.persistence?.taskId,
|
|
@@ -18047,6 +18086,9 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
18047
18086
|
}
|
|
18048
18087
|
async loadSession(params) {
|
|
18049
18088
|
const response = await this.codexConnection.loadSession(params);
|
|
18089
|
+
response.configOptions = normalizeCodexConfigOptions(
|
|
18090
|
+
response.configOptions
|
|
18091
|
+
);
|
|
18050
18092
|
const meta = params._meta;
|
|
18051
18093
|
const currentPermissionMode = getCurrentPermissionMode(
|
|
18052
18094
|
response.modes?.currentModeId,
|
|
@@ -18075,6 +18117,9 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
18075
18117
|
cwd: params.cwd,
|
|
18076
18118
|
mcpServers: params.mcpServers ?? []
|
|
18077
18119
|
});
|
|
18120
|
+
loadResponse.configOptions = normalizeCodexConfigOptions(
|
|
18121
|
+
loadResponse.configOptions
|
|
18122
|
+
);
|
|
18078
18123
|
const meta = params._meta;
|
|
18079
18124
|
const currentPermissionMode = getCurrentPermissionMode(
|
|
18080
18125
|
loadResponse.modes?.currentModeId,
|
|
@@ -18107,6 +18152,9 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
18107
18152
|
mcpServers: params.mcpServers ?? [],
|
|
18108
18153
|
_meta: params._meta
|
|
18109
18154
|
});
|
|
18155
|
+
newResponse.configOptions = normalizeCodexConfigOptions(
|
|
18156
|
+
newResponse.configOptions
|
|
18157
|
+
);
|
|
18110
18158
|
const meta = params._meta;
|
|
18111
18159
|
const requestedPermissionMode = toCodexPermissionMode(meta?.permissionMode);
|
|
18112
18160
|
this.sessionState = createSessionState(newResponse.sessionId, params.cwd, {
|
|
@@ -18314,6 +18362,9 @@ var CodexAcpAgent = class extends BaseAcpAgent {
|
|
|
18314
18362
|
async setSessionConfigOption(params) {
|
|
18315
18363
|
const response = await this.codexConnection.setSessionConfigOption(params);
|
|
18316
18364
|
if (response.configOptions) {
|
|
18365
|
+
response.configOptions = normalizeCodexConfigOptions(
|
|
18366
|
+
response.configOptions
|
|
18367
|
+
);
|
|
18317
18368
|
this.sessionState.configOptions = response.configOptions;
|
|
18318
18369
|
}
|
|
18319
18370
|
if (params.configId === "mode" && typeof params.value === "string") {
|