@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.
Files changed (33) hide show
  1. package/dist/adapters/claude/permissions/permission-options.js +12 -2
  2. package/dist/adapters/claude/permissions/permission-options.js.map +1 -1
  3. package/dist/adapters/claude/session/jsonl-hydration.js.map +1 -1
  4. package/dist/agent.js +239 -70
  5. package/dist/agent.js.map +1 -1
  6. package/dist/claude-cli/cli.js +4002 -2916
  7. package/dist/claude-cli/vendor/audio-capture/arm64-darwin/audio-capture.node +0 -0
  8. package/dist/claude-cli/vendor/audio-capture/arm64-linux/audio-capture.node +0 -0
  9. package/dist/claude-cli/vendor/audio-capture/arm64-win32/audio-capture.node +0 -0
  10. package/dist/claude-cli/vendor/audio-capture/x64-darwin/audio-capture.node +0 -0
  11. package/dist/claude-cli/vendor/audio-capture/x64-linux/audio-capture.node +0 -0
  12. package/dist/claude-cli/vendor/audio-capture/x64-win32/audio-capture.node +0 -0
  13. package/dist/claude-cli/vendor/tree-sitter-bash/arm64-darwin/tree-sitter-bash.node +0 -0
  14. package/dist/claude-cli/vendor/tree-sitter-bash/arm64-linux/tree-sitter-bash.node +0 -0
  15. package/dist/claude-cli/vendor/tree-sitter-bash/arm64-win32/tree-sitter-bash.node +0 -0
  16. package/dist/claude-cli/vendor/tree-sitter-bash/x64-darwin/tree-sitter-bash.node +0 -0
  17. package/dist/claude-cli/vendor/tree-sitter-bash/x64-linux/tree-sitter-bash.node +0 -0
  18. package/dist/claude-cli/vendor/tree-sitter-bash/x64-win32/tree-sitter-bash.node +0 -0
  19. package/dist/posthog-api.js +3 -3
  20. package/dist/posthog-api.js.map +1 -1
  21. package/dist/server/agent-server.js +239 -70
  22. package/dist/server/agent-server.js.map +1 -1
  23. package/dist/server/bin.cjs +239 -70
  24. package/dist/server/bin.cjs.map +1 -1
  25. package/package.json +3 -3
  26. package/src/adapters/base-acp-agent.ts +11 -2
  27. package/src/adapters/claude/UPSTREAM.md +3 -4
  28. package/src/adapters/claude/claude-agent.ts +217 -35
  29. package/src/adapters/claude/conversion/sdk-to-acp.ts +2 -25
  30. package/src/adapters/claude/permissions/permission-handlers.ts +5 -7
  31. package/src/adapters/claude/permissions/permission-options.ts +17 -2
  32. package/src/adapters/claude/session/models.ts +94 -4
  33. 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
  };