@posthog/agent 2.3.67 → 2.3.73
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/claude/permissions/permission-options.js +12 -2
- package/dist/adapters/claude/permissions/permission-options.js.map +1 -1
- package/dist/adapters/claude/session/jsonl-hydration.js.map +1 -1
- package/dist/agent.js +239 -70
- package/dist/agent.js.map +1 -1
- package/dist/claude-cli/cli.js +4002 -2916
- package/dist/claude-cli/vendor/audio-capture/arm64-darwin/audio-capture.node +0 -0
- package/dist/claude-cli/vendor/audio-capture/arm64-linux/audio-capture.node +0 -0
- package/dist/claude-cli/vendor/audio-capture/arm64-win32/audio-capture.node +0 -0
- package/dist/claude-cli/vendor/audio-capture/x64-darwin/audio-capture.node +0 -0
- package/dist/claude-cli/vendor/audio-capture/x64-linux/audio-capture.node +0 -0
- package/dist/claude-cli/vendor/audio-capture/x64-win32/audio-capture.node +0 -0
- package/dist/claude-cli/vendor/tree-sitter-bash/arm64-darwin/tree-sitter-bash.node +0 -0
- package/dist/claude-cli/vendor/tree-sitter-bash/arm64-linux/tree-sitter-bash.node +0 -0
- package/dist/claude-cli/vendor/tree-sitter-bash/arm64-win32/tree-sitter-bash.node +0 -0
- package/dist/claude-cli/vendor/tree-sitter-bash/x64-darwin/tree-sitter-bash.node +0 -0
- package/dist/claude-cli/vendor/tree-sitter-bash/x64-linux/tree-sitter-bash.node +0 -0
- package/dist/claude-cli/vendor/tree-sitter-bash/x64-win32/tree-sitter-bash.node +0 -0
- package/dist/posthog-api.js +3 -3
- package/dist/posthog-api.js.map +1 -1
- package/dist/server/agent-server.js +239 -70
- package/dist/server/agent-server.js.map +1 -1
- package/dist/server/bin.cjs +239 -70
- package/dist/server/bin.cjs.map +1 -1
- package/package.json +3 -3
- package/src/adapters/base-acp-agent.ts +11 -2
- package/src/adapters/claude/UPSTREAM.md +3 -4
- package/src/adapters/claude/claude-agent.ts +217 -35
- package/src/adapters/claude/conversion/sdk-to-acp.ts +2 -25
- package/src/adapters/claude/permissions/permission-handlers.ts +5 -7
- package/src/adapters/claude/permissions/permission-options.ts +17 -2
- package/src/adapters/claude/session/models.ts +94 -4
- package/src/adapters/claude/types.ts +3 -0
|
@@ -21,10 +21,6 @@ export function supports1MContext(modelId: string): boolean {
|
|
|
21
21
|
return MODELS_WITH_1M_CONTEXT.has(modelId);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
export function getDefaultContextWindow(modelId: string): number {
|
|
25
|
-
return supports1MContext(modelId) ? 1_000_000 : 200_000;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
24
|
const MODELS_WITH_EFFORT = new Set([
|
|
29
25
|
"claude-opus-4-5",
|
|
30
26
|
"claude-opus-4-6",
|
|
@@ -61,3 +57,97 @@ export function getEffortOptions(modelId: string): EffortOption[] | null {
|
|
|
61
57
|
|
|
62
58
|
return options;
|
|
63
59
|
}
|
|
60
|
+
|
|
61
|
+
// Model alias resolution — lets callers use human-friendly aliases like
|
|
62
|
+
// "opus" or "sonnet" instead of full model IDs like "claude-opus-4-6".
|
|
63
|
+
|
|
64
|
+
const MODEL_CONTEXT_HINT_PATTERN = /\[(\d+m)\]$/i;
|
|
65
|
+
|
|
66
|
+
function tokenizeModelPreference(model: string): {
|
|
67
|
+
tokens: string[];
|
|
68
|
+
contextHint?: string;
|
|
69
|
+
} {
|
|
70
|
+
const lower = model.trim().toLowerCase();
|
|
71
|
+
const contextHint = lower
|
|
72
|
+
.match(MODEL_CONTEXT_HINT_PATTERN)?.[1]
|
|
73
|
+
?.toLowerCase();
|
|
74
|
+
|
|
75
|
+
const normalized = lower.replace(MODEL_CONTEXT_HINT_PATTERN, " $1 ");
|
|
76
|
+
const rawTokens = normalized.split(/[^a-z0-9]+/).filter(Boolean);
|
|
77
|
+
const tokens = rawTokens
|
|
78
|
+
.map((token) => {
|
|
79
|
+
if (token === "opusplan") return "opus";
|
|
80
|
+
if (token === "best" || token === "default") return "";
|
|
81
|
+
return token;
|
|
82
|
+
})
|
|
83
|
+
.filter((token) => token && token !== "claude")
|
|
84
|
+
.filter((token) => /[a-z]/.test(token) || token.endsWith("m"));
|
|
85
|
+
|
|
86
|
+
return { tokens, contextHint };
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
interface ModelOption {
|
|
90
|
+
value: string;
|
|
91
|
+
name?: string;
|
|
92
|
+
description?: string;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function scoreModelMatch(
|
|
96
|
+
model: ModelOption,
|
|
97
|
+
tokens: string[],
|
|
98
|
+
contextHint?: string,
|
|
99
|
+
): number {
|
|
100
|
+
const haystack = `${model.value} ${model.name ?? ""}`.toLowerCase();
|
|
101
|
+
let score = 0;
|
|
102
|
+
for (const token of tokens) {
|
|
103
|
+
if (haystack.includes(token)) {
|
|
104
|
+
score += token === contextHint ? 3 : 1;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return score;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export function resolveModelPreference(
|
|
111
|
+
preference: string,
|
|
112
|
+
options: ModelOption[],
|
|
113
|
+
): string | null {
|
|
114
|
+
const trimmed = preference.trim();
|
|
115
|
+
if (!trimmed) return null;
|
|
116
|
+
|
|
117
|
+
const lower = trimmed.toLowerCase();
|
|
118
|
+
|
|
119
|
+
// Exact match on value or display name
|
|
120
|
+
const directMatch = options.find(
|
|
121
|
+
(o) =>
|
|
122
|
+
o.value === trimmed ||
|
|
123
|
+
o.value.toLowerCase() === lower ||
|
|
124
|
+
(o.name && o.name.toLowerCase() === lower),
|
|
125
|
+
);
|
|
126
|
+
if (directMatch) return directMatch.value;
|
|
127
|
+
|
|
128
|
+
// Substring match
|
|
129
|
+
const includesMatch = options.find((o) => {
|
|
130
|
+
const value = o.value.toLowerCase();
|
|
131
|
+
const display = (o.name ?? "").toLowerCase();
|
|
132
|
+
return (
|
|
133
|
+
value.includes(lower) || display.includes(lower) || lower.includes(value)
|
|
134
|
+
);
|
|
135
|
+
});
|
|
136
|
+
if (includesMatch) return includesMatch.value;
|
|
137
|
+
|
|
138
|
+
// Tokenized matching for aliases like "opus[1m]"
|
|
139
|
+
const { tokens, contextHint } = tokenizeModelPreference(trimmed);
|
|
140
|
+
if (tokens.length === 0) return null;
|
|
141
|
+
|
|
142
|
+
let bestMatch: ModelOption | null = null;
|
|
143
|
+
let bestScore = 0;
|
|
144
|
+
for (const model of options) {
|
|
145
|
+
const score = scoreModelMatch(model, tokens, contextHint);
|
|
146
|
+
if (0 < score && (!bestMatch || bestScore < score)) {
|
|
147
|
+
bestMatch = model;
|
|
148
|
+
bestScore = score;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return bestMatch?.value ?? null;
|
|
153
|
+
}
|
|
@@ -57,6 +57,8 @@ export type Session = BaseSession & {
|
|
|
57
57
|
contextUsed?: number;
|
|
58
58
|
/** Context window size in tokens */
|
|
59
59
|
contextSize?: number;
|
|
60
|
+
/** Persists across prompt() calls so SDK-reported values survive turn boundaries */
|
|
61
|
+
lastContextWindowSize?: number;
|
|
60
62
|
promptRunning: boolean;
|
|
61
63
|
pendingMessages: Map<string, PendingMessage>;
|
|
62
64
|
nextPendingOrder: number;
|
|
@@ -104,6 +106,7 @@ export type NewSessionMeta = {
|
|
|
104
106
|
sessionId?: string;
|
|
105
107
|
permissionMode?: string;
|
|
106
108
|
persistence?: { taskId?: string; runId?: string; logUrl?: string };
|
|
109
|
+
additionalRoots?: string[];
|
|
107
110
|
claudeCode?: {
|
|
108
111
|
options?: Options;
|
|
109
112
|
};
|