@sentry/warden 0.8.0 → 0.10.0
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/README.md +4 -0
- package/conductor.json +8 -0
- package/dist/cli/fix.d.ts +3 -1
- package/dist/cli/fix.d.ts.map +1 -1
- package/dist/cli/fix.js +91 -59
- package/dist/cli/fix.js.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +37 -9
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/output/formatters.d.ts.map +1 -1
- package/dist/cli/output/formatters.js +3 -8
- package/dist/cli/output/formatters.js.map +1 -1
- package/dist/cli/output/ink-runner.d.ts +6 -17
- package/dist/cli/output/ink-runner.d.ts.map +1 -1
- package/dist/cli/output/ink-runner.js +124 -115
- package/dist/cli/output/ink-runner.js.map +1 -1
- package/dist/cli/output/jsonl.d.ts +7 -1
- package/dist/cli/output/jsonl.d.ts.map +1 -1
- package/dist/cli/output/jsonl.js +4 -1
- package/dist/cli/output/jsonl.js.map +1 -1
- package/dist/cli/output/reporter.d.ts +7 -3
- package/dist/cli/output/reporter.d.ts.map +1 -1
- package/dist/cli/output/reporter.js +15 -1
- package/dist/cli/output/reporter.js.map +1 -1
- package/dist/cli/output/tasks.d.ts +10 -1
- package/dist/cli/output/tasks.d.ts.map +1 -1
- package/dist/cli/output/tasks.js +127 -28
- package/dist/cli/output/tasks.js.map +1 -1
- package/dist/cli/terminal.d.ts +7 -1
- package/dist/cli/terminal.d.ts.map +1 -1
- package/dist/cli/terminal.js +31 -9
- package/dist/cli/terminal.js.map +1 -1
- package/dist/config/schema.d.ts +0 -1
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +1 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/evals/index.d.ts +22 -0
- package/dist/evals/index.d.ts.map +1 -0
- package/dist/evals/index.js +92 -0
- package/dist/evals/index.js.map +1 -0
- package/dist/evals/judge.d.ts +12 -0
- package/dist/evals/judge.d.ts.map +1 -0
- package/dist/evals/judge.js +171 -0
- package/dist/evals/judge.js.map +1 -0
- package/dist/evals/runner.d.ts +18 -0
- package/dist/evals/runner.d.ts.map +1 -0
- package/dist/evals/runner.js +133 -0
- package/dist/evals/runner.js.map +1 -0
- package/dist/{examples → evals}/setup.d.ts.map +1 -1
- package/dist/evals/setup.js.map +1 -0
- package/dist/evals/types.d.ts +166 -0
- package/dist/evals/types.d.ts.map +1 -0
- package/dist/evals/types.js +134 -0
- package/dist/evals/types.js.map +1 -0
- package/dist/output/dedup.d.ts.map +1 -1
- package/dist/output/dedup.js +29 -57
- package/dist/output/dedup.js.map +1 -1
- package/dist/output/github-checks.d.ts.map +1 -1
- package/dist/output/github-checks.js +38 -10
- package/dist/output/github-checks.js.map +1 -1
- package/dist/output/renderer.d.ts.map +1 -1
- package/dist/output/renderer.js +16 -1
- package/dist/output/renderer.js.map +1 -1
- package/dist/output/stale.d.ts +1 -0
- package/dist/output/stale.d.ts.map +1 -1
- package/dist/output/stale.js +14 -8
- package/dist/output/stale.js.map +1 -1
- package/dist/sdk/analyze.d.ts +11 -0
- package/dist/sdk/analyze.d.ts.map +1 -1
- package/dist/sdk/analyze.js +185 -27
- package/dist/sdk/analyze.js.map +1 -1
- package/dist/sdk/extract.d.ts +55 -1
- package/dist/sdk/extract.d.ts.map +1 -1
- package/dist/sdk/extract.js +222 -32
- package/dist/sdk/extract.js.map +1 -1
- package/dist/sdk/haiku.d.ts +20 -0
- package/dist/sdk/haiku.d.ts.map +1 -1
- package/dist/sdk/haiku.js +159 -77
- package/dist/sdk/haiku.js.map +1 -1
- package/dist/sdk/model-pricing.json +6 -12
- package/dist/sdk/pricing.d.ts +5 -0
- package/dist/sdk/pricing.d.ts.map +1 -1
- package/dist/sdk/pricing.js +11 -2
- package/dist/sdk/pricing.js.map +1 -1
- package/dist/sdk/prompt.d.ts.map +1 -1
- package/dist/sdk/prompt.js +4 -1
- package/dist/sdk/prompt.js.map +1 -1
- package/dist/sdk/runner.d.ts +2 -2
- package/dist/sdk/runner.d.ts.map +1 -1
- package/dist/sdk/runner.js +1 -1
- package/dist/sdk/runner.js.map +1 -1
- package/dist/sdk/types.d.ts +9 -3
- package/dist/sdk/types.d.ts.map +1 -1
- package/dist/sdk/types.js +1 -1
- package/dist/sdk/types.js.map +1 -1
- package/dist/sdk/usage.d.ts +5 -0
- package/dist/sdk/usage.d.ts.map +1 -1
- package/dist/sdk/usage.js +11 -3
- package/dist/sdk/usage.js.map +1 -1
- package/dist/sentry.d.ts +15 -0
- package/dist/sentry.d.ts.map +1 -1
- package/dist/sentry.js +40 -1
- package/dist/sentry.js.map +1 -1
- package/dist/triggers/matcher.d.ts +2 -2
- package/dist/triggers/matcher.d.ts.map +1 -1
- package/dist/triggers/matcher.js +10 -8
- package/dist/triggers/matcher.js.map +1 -1
- package/dist/types/index.d.ts +19 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +25 -0
- package/dist/types/index.js.map +1 -1
- package/dist/utils/async.d.ts +14 -0
- package/dist/utils/async.d.ts.map +1 -1
- package/dist/utils/async.js +33 -0
- package/dist/utils/async.js.map +1 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/evals/README.md +154 -0
- package/evals/bug-detection.yaml +56 -0
- package/evals/fixtures/ignores-style-issues/utils.ts +48 -0
- package/evals/fixtures/missing-await/cache.ts +45 -0
- package/evals/fixtures/null-property-access/handler.ts +36 -0
- package/evals/fixtures/off-by-one/paginator.ts +38 -0
- package/evals/fixtures/sql-injection/api.ts +59 -0
- package/evals/fixtures/stale-closure/counter.tsx +33 -0
- package/evals/fixtures/wrong-comparison/validator.ts +52 -0
- package/evals/fixtures/xss-reflected/server.ts +55 -0
- package/evals/precision.yaml +15 -0
- package/evals/security-scanning.yaml +24 -0
- package/evals/skills/bug-detection.md +33 -0
- package/evals/skills/precision.md +18 -0
- package/evals/skills/security-scanning.md +32 -0
- package/package.json +4 -2
- package/plugins/warden/skills/warden/references/config-schema.md +4 -2
- package/plugins/warden/skills/warden/references/configuration.md +2 -2
- package/dist/examples/index.d.ts +0 -50
- package/dist/examples/index.d.ts.map +0 -1
- package/dist/examples/index.js +0 -104
- package/dist/examples/index.js.map +0 -1
- package/dist/examples/setup.js.map +0 -1
- /package/dist/{examples → evals}/setup.d.ts +0 -0
- /package/dist/{examples → evals}/setup.js +0 -0
package/dist/sdk/haiku.js
CHANGED
|
@@ -1,9 +1,33 @@
|
|
|
1
1
|
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
import { Sentry } from '../sentry.js';
|
|
2
3
|
import { apiUsageToStats } from './pricing.js';
|
|
3
4
|
import { aggregateUsage, emptyUsage } from './usage.js';
|
|
4
|
-
const HAIKU_MODEL = 'claude-haiku-4-5';
|
|
5
|
+
export const HAIKU_MODEL = 'claude-haiku-4-5';
|
|
5
6
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
6
7
|
const DEFAULT_MAX_TOKENS = 4096;
|
|
8
|
+
/**
|
|
9
|
+
* Set standard gen_ai response attributes on a Sentry span.
|
|
10
|
+
*
|
|
11
|
+
* Follows the same token accounting as analyze.ts: gen_ai.usage.input_tokens
|
|
12
|
+
* is the total (non-cached + cache_read + cache_creation), with cache fields
|
|
13
|
+
* as subsets.
|
|
14
|
+
*/
|
|
15
|
+
export function setGenAiResponseAttrs(span, usage, stopReason, responseText) {
|
|
16
|
+
const cacheRead = usage.cache_read_input_tokens ?? 0;
|
|
17
|
+
const cacheWrite = usage.cache_creation_input_tokens ?? 0;
|
|
18
|
+
const totalInput = usage.input_tokens + cacheRead + cacheWrite;
|
|
19
|
+
span.setAttribute('gen_ai.usage.input_tokens', totalInput);
|
|
20
|
+
span.setAttribute('gen_ai.usage.output_tokens', usage.output_tokens);
|
|
21
|
+
span.setAttribute('gen_ai.usage.input_tokens.cached', cacheRead);
|
|
22
|
+
span.setAttribute('gen_ai.usage.input_tokens.cache_write', cacheWrite);
|
|
23
|
+
span.setAttribute('gen_ai.usage.total_tokens', totalInput + usage.output_tokens);
|
|
24
|
+
if (stopReason) {
|
|
25
|
+
span.setAttribute('gen_ai.response.finish_reasons', [stopReason]);
|
|
26
|
+
}
|
|
27
|
+
if (responseText !== undefined) {
|
|
28
|
+
span.setAttribute('gen_ai.response.text', JSON.stringify([responseText]));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
7
31
|
/**
|
|
8
32
|
* Strip markdown code fences from text.
|
|
9
33
|
*/
|
|
@@ -77,44 +101,58 @@ function inferPrefill(schema) {
|
|
|
77
101
|
*/
|
|
78
102
|
export async function callHaiku(options) {
|
|
79
103
|
const { apiKey, prompt, schema, maxTokens = DEFAULT_MAX_TOKENS, timeout = DEFAULT_TIMEOUT_MS } = options;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
const content = response.content[0];
|
|
96
|
-
if (!content || content.type !== 'text') {
|
|
97
|
-
return { success: false, error: 'Empty response from model', usage };
|
|
98
|
-
}
|
|
99
|
-
let fullText = content.text;
|
|
104
|
+
return Sentry.startSpan({
|
|
105
|
+
op: 'gen_ai.chat',
|
|
106
|
+
name: `chat ${HAIKU_MODEL}`,
|
|
107
|
+
attributes: {
|
|
108
|
+
'gen_ai.operation.name': 'chat',
|
|
109
|
+
'gen_ai.provider.name': 'anthropic',
|
|
110
|
+
'gen_ai.request.model': HAIKU_MODEL,
|
|
111
|
+
'gen_ai.request.max_tokens': maxTokens,
|
|
112
|
+
},
|
|
113
|
+
}, async (span) => {
|
|
114
|
+
const client = new Anthropic({ apiKey, timeout });
|
|
115
|
+
const prefill = inferPrefill(schema);
|
|
116
|
+
const messages = [
|
|
117
|
+
{ role: 'user', content: prompt },
|
|
118
|
+
];
|
|
100
119
|
if (prefill) {
|
|
101
|
-
|
|
120
|
+
messages.push({ role: 'assistant', content: prefill });
|
|
102
121
|
}
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
122
|
+
span.setAttribute('gen_ai.request.messages', JSON.stringify(messages));
|
|
123
|
+
try {
|
|
124
|
+
const response = await client.messages.create({
|
|
125
|
+
model: HAIKU_MODEL,
|
|
126
|
+
max_tokens: maxTokens,
|
|
127
|
+
messages,
|
|
128
|
+
});
|
|
129
|
+
const usage = apiUsageToStats(HAIKU_MODEL, response.usage);
|
|
130
|
+
const content = response.content[0];
|
|
131
|
+
if (!content || content.type !== 'text') {
|
|
132
|
+
setGenAiResponseAttrs(span, response.usage, response.stop_reason);
|
|
133
|
+
return { success: false, error: 'Empty response from model', usage };
|
|
134
|
+
}
|
|
135
|
+
let fullText = content.text;
|
|
136
|
+
if (prefill) {
|
|
137
|
+
fullText = prefill + fullText;
|
|
138
|
+
}
|
|
139
|
+
setGenAiResponseAttrs(span, response.usage, response.stop_reason, fullText);
|
|
140
|
+
const jsonStr = extractJson(fullText);
|
|
141
|
+
if (!jsonStr) {
|
|
142
|
+
return { success: false, error: 'No JSON found in response', usage };
|
|
143
|
+
}
|
|
144
|
+
const parsed = JSON.parse(jsonStr);
|
|
145
|
+
const validated = schema.safeParse(parsed);
|
|
146
|
+
if (!validated.success) {
|
|
147
|
+
return { success: false, error: `Validation failed: ${validated.error.message}`, usage };
|
|
148
|
+
}
|
|
149
|
+
return { success: true, data: validated.data, usage };
|
|
106
150
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return { success: false, error: `Validation failed: ${validated.error.message}`, usage };
|
|
151
|
+
catch (error) {
|
|
152
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
153
|
+
return { success: false, error: message, usage: emptyUsage() };
|
|
111
154
|
}
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
catch (error) {
|
|
115
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
116
|
-
return { success: false, error: message, usage: emptyUsage() };
|
|
117
|
-
}
|
|
155
|
+
});
|
|
118
156
|
}
|
|
119
157
|
/**
|
|
120
158
|
* Multi-turn Haiku call with tool use loop.
|
|
@@ -123,55 +161,98 @@ export async function callHaiku(options) {
|
|
|
123
161
|
*/
|
|
124
162
|
export async function callHaikuWithTools(options) {
|
|
125
163
|
const { apiKey, prompt, schema, tools, executeTool, maxTokens = DEFAULT_MAX_TOKENS, maxIterations = 5, timeout = DEFAULT_TIMEOUT_MS, } = options;
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
164
|
+
return Sentry.startSpan({
|
|
165
|
+
op: 'gen_ai.chat',
|
|
166
|
+
name: `chat ${HAIKU_MODEL}`,
|
|
167
|
+
attributes: {
|
|
168
|
+
'gen_ai.operation.name': 'chat',
|
|
169
|
+
'gen_ai.provider.name': 'anthropic',
|
|
170
|
+
'gen_ai.request.model': HAIKU_MODEL,
|
|
171
|
+
'gen_ai.request.max_tokens': maxTokens,
|
|
172
|
+
},
|
|
173
|
+
}, async (span) => {
|
|
174
|
+
const client = new Anthropic({ apiKey, timeout });
|
|
175
|
+
// No prefill for tool-use loops: prefill biases the model to output JSON
|
|
176
|
+
// immediately instead of calling tools to gather information first.
|
|
177
|
+
const messages = [
|
|
178
|
+
{ role: 'user', content: prompt },
|
|
179
|
+
];
|
|
180
|
+
span.setAttribute('gen_ai.request.messages', JSON.stringify(messages));
|
|
181
|
+
const usages = [];
|
|
182
|
+
// Accumulate raw API usage across iterations so setGenAiResponseAttrs
|
|
183
|
+
// can compute totals consistently (input_tokens + cache subsets).
|
|
184
|
+
const cumulativeUsage = {
|
|
185
|
+
input_tokens: 0,
|
|
186
|
+
output_tokens: 0,
|
|
187
|
+
cache_read_input_tokens: 0,
|
|
188
|
+
cache_creation_input_tokens: 0,
|
|
189
|
+
};
|
|
190
|
+
function setFinalSpanAttrs(stopReason, responseText) {
|
|
191
|
+
setGenAiResponseAttrs(span, cumulativeUsage, stopReason, responseText);
|
|
142
192
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
return { success: false, error: message, usage: usages.length > 0 ? aggregateUsage(usages) : emptyUsage() };
|
|
193
|
+
function currentUsage() {
|
|
194
|
+
return usages.length > 0 ? aggregateUsage(usages) : emptyUsage();
|
|
146
195
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
196
|
+
for (let iteration = 0; iteration < maxIterations; iteration++) {
|
|
197
|
+
let response;
|
|
198
|
+
try {
|
|
199
|
+
response = await client.messages.create({
|
|
200
|
+
model: HAIKU_MODEL,
|
|
201
|
+
max_tokens: maxTokens,
|
|
202
|
+
messages,
|
|
203
|
+
tools,
|
|
204
|
+
});
|
|
153
205
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
206
|
+
catch (error) {
|
|
207
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
208
|
+
return { success: false, error: message, usage: currentUsage() };
|
|
209
|
+
}
|
|
210
|
+
usages.push(apiUsageToStats(HAIKU_MODEL, response.usage));
|
|
211
|
+
cumulativeUsage.input_tokens += response.usage.input_tokens;
|
|
212
|
+
cumulativeUsage.output_tokens += response.usage.output_tokens;
|
|
213
|
+
cumulativeUsage.cache_read_input_tokens += response.usage.cache_read_input_tokens ?? 0;
|
|
214
|
+
cumulativeUsage.cache_creation_input_tokens += response.usage.cache_creation_input_tokens ?? 0;
|
|
215
|
+
// Handle tool use
|
|
216
|
+
if (response.stop_reason === 'tool_use') {
|
|
217
|
+
const toolUseBlocks = response.content.filter((b) => b.type === 'tool_use');
|
|
218
|
+
if (toolUseBlocks.length === 0) {
|
|
219
|
+
return { success: false, error: 'Tool use indicated but no tool calls found', usage: aggregateUsage(usages) };
|
|
159
220
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
221
|
+
const toolResults = [];
|
|
222
|
+
for (const block of toolUseBlocks) {
|
|
223
|
+
await Sentry.startSpan({
|
|
224
|
+
op: 'gen_ai.execute_tool',
|
|
225
|
+
name: `execute_tool ${block.name}`,
|
|
226
|
+
attributes: {
|
|
227
|
+
'gen_ai.operation.name': 'execute_tool',
|
|
228
|
+
'gen_ai.tool.name': block.name,
|
|
229
|
+
},
|
|
230
|
+
}, async () => {
|
|
231
|
+
try {
|
|
232
|
+
const result = await executeTool(block.name, block.input);
|
|
233
|
+
toolResults.push({ type: 'tool_result', tool_use_id: block.id, content: result });
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
const errMsg = error instanceof Error ? error.message : String(error);
|
|
237
|
+
toolResults.push({ type: 'tool_result', tool_use_id: block.id, content: errMsg, is_error: true });
|
|
238
|
+
}
|
|
239
|
+
});
|
|
163
240
|
}
|
|
241
|
+
messages.push({ role: 'assistant', content: response.content });
|
|
242
|
+
messages.push({ role: 'user', content: toolResults });
|
|
243
|
+
continue;
|
|
244
|
+
}
|
|
245
|
+
// Final response - extract text and set span attributes
|
|
246
|
+
if (response.stop_reason !== 'end_turn' && response.stop_reason !== 'max_tokens') {
|
|
247
|
+
setFinalSpanAttrs(response.stop_reason);
|
|
248
|
+
return { success: false, error: `Unexpected stop reason: ${response.stop_reason}`, usage: aggregateUsage(usages) };
|
|
164
249
|
}
|
|
165
|
-
messages.push({ role: 'assistant', content: response.content });
|
|
166
|
-
messages.push({ role: 'user', content: toolResults });
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
// Final response - extract JSON verdict
|
|
170
|
-
if (response.stop_reason === 'end_turn' || response.stop_reason === 'max_tokens') {
|
|
171
250
|
const textBlock = response.content.find((b) => b.type === 'text');
|
|
172
251
|
if (!textBlock) {
|
|
252
|
+
setFinalSpanAttrs(response.stop_reason);
|
|
173
253
|
return { success: false, error: 'No text in final response', usage: aggregateUsage(usages) };
|
|
174
254
|
}
|
|
255
|
+
setFinalSpanAttrs(response.stop_reason, textBlock.text);
|
|
175
256
|
const jsonStr = extractJson(textBlock.text);
|
|
176
257
|
if (!jsonStr) {
|
|
177
258
|
return { success: false, error: 'No JSON found in response', usage: aggregateUsage(usages) };
|
|
@@ -183,8 +264,9 @@ export async function callHaikuWithTools(options) {
|
|
|
183
264
|
}
|
|
184
265
|
return { success: true, data: validated.data, usage: aggregateUsage(usages) };
|
|
185
266
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
267
|
+
// Max iterations exceeded - still record usage on span
|
|
268
|
+
setFinalSpanAttrs();
|
|
269
|
+
return { success: false, error: 'Max tool iterations exceeded', usage: aggregateUsage(usages) };
|
|
270
|
+
});
|
|
189
271
|
}
|
|
190
272
|
//# sourceMappingURL=haiku.js.map
|
package/dist/sdk/haiku.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"haiku.js","sourceRoot":"","sources":["../../src/sdk/haiku.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"haiku.js","sourceRoot":"","sources":["../../src/sdk/haiku.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,18 +47,6 @@
|
|
|
47
47
|
"cacheReadPerMTok": 0.1,
|
|
48
48
|
"cacheWritePerMTok": 1.25
|
|
49
49
|
},
|
|
50
|
-
"claude-instant-1": {
|
|
51
|
-
"inputPerMTok": 1.63,
|
|
52
|
-
"outputPerMTok": 55.1,
|
|
53
|
-
"cacheReadPerMTok": 0,
|
|
54
|
-
"cacheWritePerMTok": 0
|
|
55
|
-
},
|
|
56
|
-
"claude-instant-1.2": {
|
|
57
|
-
"inputPerMTok": 1.63,
|
|
58
|
-
"outputPerMTok": 5.51,
|
|
59
|
-
"cacheReadPerMTok": 0,
|
|
60
|
-
"cacheWritePerMTok": 0
|
|
61
|
-
},
|
|
62
50
|
"claude-opus-4-0": {
|
|
63
51
|
"inputPerMTok": 15,
|
|
64
52
|
"outputPerMTok": 75,
|
|
@@ -95,6 +83,12 @@
|
|
|
95
83
|
"cacheReadPerMTok": 0.3,
|
|
96
84
|
"cacheWritePerMTok": 3.75
|
|
97
85
|
},
|
|
86
|
+
"claude-sonnet-4-6": {
|
|
87
|
+
"inputPerMTok": 3,
|
|
88
|
+
"outputPerMTok": 15,
|
|
89
|
+
"cacheReadPerMTok": 0.3,
|
|
90
|
+
"cacheWritePerMTok": 3.75
|
|
91
|
+
},
|
|
98
92
|
"claude-v1": {
|
|
99
93
|
"inputPerMTok": 8,
|
|
100
94
|
"outputPerMTok": 24,
|
package/dist/sdk/pricing.d.ts
CHANGED
|
@@ -11,6 +11,11 @@ interface ApiUsage {
|
|
|
11
11
|
/**
|
|
12
12
|
* Convert Anthropic API usage to our UsageStats format.
|
|
13
13
|
* Calculates cost from token counts using model pricing.
|
|
14
|
+
*
|
|
15
|
+
* The Anthropic API reports `input_tokens` as only the non-cached portion.
|
|
16
|
+
* We normalize so that `inputTokens` is the *total* input tokens
|
|
17
|
+
* (non-cached + cache_read + cache_creation), with the cache fields
|
|
18
|
+
* being subsets of that total.
|
|
14
19
|
*/
|
|
15
20
|
export declare function apiUsageToStats(model: string, usage: ApiUsage): UsageStats;
|
|
16
21
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/sdk/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA+BpD;;GAEG;AACH,UAAU,QAAQ;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,2BAA2B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../src/sdk/pricing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA+BpD;;GAEG;AACH,UAAU,QAAQ;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,2BAA2B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,UAAU,CA6B1E"}
|
package/dist/sdk/pricing.js
CHANGED
|
@@ -15,17 +15,26 @@ const MODEL_PRICING = Object.fromEntries(Object.entries(rawPricing).map(([id, p]
|
|
|
15
15
|
/**
|
|
16
16
|
* Convert Anthropic API usage to our UsageStats format.
|
|
17
17
|
* Calculates cost from token counts using model pricing.
|
|
18
|
+
*
|
|
19
|
+
* The Anthropic API reports `input_tokens` as only the non-cached portion.
|
|
20
|
+
* We normalize so that `inputTokens` is the *total* input tokens
|
|
21
|
+
* (non-cached + cache_read + cache_creation), with the cache fields
|
|
22
|
+
* being subsets of that total.
|
|
18
23
|
*/
|
|
19
24
|
export function apiUsageToStats(model, usage) {
|
|
20
25
|
const pricing = MODEL_PRICING[model];
|
|
21
|
-
const inputTokens = usage.input_tokens;
|
|
22
26
|
const outputTokens = usage.output_tokens;
|
|
23
27
|
const cacheReadInputTokens = usage.cache_read_input_tokens ?? 0;
|
|
24
28
|
const cacheCreationInputTokens = usage.cache_creation_input_tokens ?? 0;
|
|
29
|
+
// inputTokens is the total: raw API input_tokens + cache subsets.
|
|
30
|
+
const inputTokens = usage.input_tokens + cacheReadInputTokens + cacheCreationInputTokens;
|
|
31
|
+
// Cost: deduct cache subsets from total to get the non-cached portion,
|
|
32
|
+
// then charge each category at its respective rate.
|
|
25
33
|
let costUSD = 0;
|
|
26
34
|
if (pricing) {
|
|
35
|
+
const freshInputTokens = inputTokens - cacheReadInputTokens - cacheCreationInputTokens;
|
|
27
36
|
costUSD =
|
|
28
|
-
|
|
37
|
+
freshInputTokens * pricing.inputPerToken +
|
|
29
38
|
outputTokens * pricing.outputPerToken +
|
|
30
39
|
cacheReadInputTokens * pricing.cacheReadPerToken +
|
|
31
40
|
cacheCreationInputTokens * pricing.cacheCreationPerToken;
|
package/dist/sdk/pricing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/sdk/pricing.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,sBAAsB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAcpE;;;GAGG;AACH,MAAM,aAAa,GAAiC,MAAM,CAAC,WAAW,CACpE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1C,EAAE;IACF;QACE,aAAa,EAAE,CAAC,CAAC,YAAY,GAAG,SAAS;QACzC,cAAc,EAAE,CAAC,CAAC,aAAa,GAAG,SAAS;QAC3C,iBAAiB,EAAE,CAAC,CAAC,gBAAgB,GAAG,SAAS;QACjD,qBAAqB,EAAE,CAAC,CAAC,iBAAiB,GAAG,SAAS;KACvD;CACF,CAAC,CACH,CAAC;AAYF
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/sdk/pricing.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,sBAAsB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAcpE;;;GAGG;AACH,MAAM,aAAa,GAAiC,MAAM,CAAC,WAAW,CACpE,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;IAC1C,EAAE;IACF;QACE,aAAa,EAAE,CAAC,CAAC,YAAY,GAAG,SAAS;QACzC,cAAc,EAAE,CAAC,CAAC,aAAa,GAAG,SAAS;QAC3C,iBAAiB,EAAE,CAAC,CAAC,gBAAgB,GAAG,SAAS;QACjD,qBAAqB,EAAE,CAAC,CAAC,iBAAiB,GAAG,SAAS;KACvD;CACF,CAAC,CACH,CAAC;AAYF;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,KAAe;IAC5D,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IAErC,MAAM,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC;IACzC,MAAM,oBAAoB,GAAG,KAAK,CAAC,uBAAuB,IAAI,CAAC,CAAC;IAChE,MAAM,wBAAwB,GAAG,KAAK,CAAC,2BAA2B,IAAI,CAAC,CAAC;IAExE,kEAAkE;IAClE,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,GAAG,oBAAoB,GAAG,wBAAwB,CAAC;IAEzF,uEAAuE;IACvE,oDAAoD;IACpD,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,gBAAgB,GAAG,WAAW,GAAG,oBAAoB,GAAG,wBAAwB,CAAC;QACvF,OAAO;YACL,gBAAgB,GAAG,OAAO,CAAC,aAAa;gBACxC,YAAY,GAAG,OAAO,CAAC,cAAc;gBACrC,oBAAoB,GAAG,OAAO,CAAC,iBAAiB;gBAChD,wBAAwB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,WAAW;QACX,YAAY;QACZ,oBAAoB;QACpB,wBAAwB;QACxB,OAAO;KACR,CAAC;AACJ,CAAC"}
|
package/dist/sdk/prompt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/sdk/prompt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/E;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/sdk/prompt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/E;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,wCAAwC;IACxC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA6EpE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,eAAe,EACxB,SAAS,CAAC,EAAE,eAAe,GAC1B,MAAM,CAkCR"}
|
package/dist/sdk/prompt.js
CHANGED
|
@@ -17,6 +17,8 @@ You are a code analysis agent for Warden. You evaluate code changes against spec
|
|
|
17
17
|
You have access to these tools to gather context:
|
|
18
18
|
- **Read**: Check related files to understand context
|
|
19
19
|
- **Grep**: Search for patterns to trace data flow or find related code
|
|
20
|
+
|
|
21
|
+
Use these tools to gather context that helps you evaluate changes within the hunk. All findings must still reference lines within the hunk being analyzed.
|
|
20
22
|
</tools>`,
|
|
21
23
|
`<skill_instructions>
|
|
22
24
|
The following defines the ONLY criteria you should evaluate. Do not report findings outside this scope:
|
|
@@ -55,12 +57,13 @@ Requirements:
|
|
|
55
57
|
- Return ONLY valid JSON starting with {"findings":
|
|
56
58
|
- "findings" array can be empty if no issues found
|
|
57
59
|
- "location.path" is auto-filled from context - just provide startLine (and optionally endLine). Omit location entirely for general findings not about a specific line.
|
|
60
|
+
- "location.startLine" MUST be within the hunk line range (shown in the "## Hunk" header). If the issue originates in surrounding code, anchor to the nearest changed line in the hunk and note the actual location in the description.
|
|
58
61
|
- "confidence" reflects how certain you are this is a real issue given the codebase context
|
|
59
62
|
- "suggestedFix" is optional - only include when you can provide a complete, correct fix **to the file being analyzed**. Omit suggestedFix if:
|
|
60
63
|
- The fix would be incomplete or you're uncertain about the correct solution
|
|
61
64
|
- The fix requires changes to a different file or a new file (describe the fix in the description field instead)
|
|
62
65
|
- Keep descriptions SHORT (1-2 sentences max) - avoid lengthy explanations
|
|
63
|
-
-
|
|
66
|
+
- Focus your analysis on the code changes in the hunk. Surrounding context and tool results are for understanding only -- all findings must reference lines within the hunk range.
|
|
64
67
|
</output_format>`,
|
|
65
68
|
];
|
|
66
69
|
const { rootDir } = skill;
|
package/dist/sdk/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/sdk/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,qBAAqB,EAAwB,MAAM,kBAAkB,CAAC;AAkB/E;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAsB;IAC1D,MAAM,QAAQ,GAAG;QACf;;QAEI;QAEJ
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/sdk/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,qBAAqB,EAAwB,MAAM,kBAAkB,CAAC;AAkB/E;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAsB;IAC1D,MAAM,QAAQ,GAAG;QACf;;QAEI;QAEJ;;;;;;SAMK;QAEL;;;EAGF,KAAK,CAAC,MAAM;sBACQ;QAElB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuCa;KACd,CAAC;IAEF,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC1B,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CACtE,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAC/B,CAAC;QACF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5D,QAAQ,CAAC,IAAI,CAAC;4BACQ,OAAO;0BACT,OAAO;mBACd,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAsB,EACtB,OAAwB,EACxB,SAA2B;IAE3B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,QAAQ,CAAC,IAAI,CAAC,8CAA8C,KAAK,CAAC,IAAI,mBAAmB,CAAC,CAAC;IAE3F,yDAAyD;IACzD,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;QACrB,IAAI,SAAS,GAAG,uCAAuC,SAAS,CAAC,KAAK,EAAE,CAAC;QACzE,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;YACnB,+DAA+D;YAC/D,MAAM,aAAa,GAAG,IAAI,CAAC;YAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,aAAa;gBAChD,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,KAAK;gBAChD,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC;YACnB,SAAS,IAAI,yBAAyB,IAAI,EAAE,CAAC;QAC/C,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAED,kEAAkE;IAClE,MAAM,UAAU,GAAG,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvF,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,QAAQ,CAAC,IAAI,CAAC;;EAEhB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;IAE9C,QAAQ,CAAC,IAAI,CACX,8QAA8Q,CAC/Q,CAAC;IAEF,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
package/dist/sdk/runner.d.ts
CHANGED
|
@@ -18,8 +18,8 @@ export { apiUsageToStats } from './pricing.js';
|
|
|
18
18
|
export { buildHunkSystemPrompt, buildHunkUserPrompt } from './prompt.js';
|
|
19
19
|
export type { PRPromptContext } from './prompt.js';
|
|
20
20
|
export { buildHunkSystemPrompt as buildSystemPrompt } from './prompt.js';
|
|
21
|
-
export { extractFindingsJson, extractBalancedJson, extractFindingsWithLLM, truncateForLLMFallback, deduplicateFindings, validateFindings, generateShortId, } from './extract.js';
|
|
22
|
-
export type { ExtractFindingsResult } from './extract.js';
|
|
21
|
+
export { extractFindingsJson, extractBalancedJson, extractFindingsWithLLM, truncateForLLMFallback, deduplicateFindings, mergeGroupLocations, applyMergeGroups, mergeCrossLocationFindings, validateFindings, generateShortId, } from './extract.js';
|
|
22
|
+
export type { ExtractFindingsResult, MergeResult } from './extract.js';
|
|
23
23
|
export { prepareFiles } from './prepare.js';
|
|
24
24
|
export { analyzeFile, runSkill, generateSummary } from './analyze.js';
|
|
25
25
|
export type { AuxiliaryUsageEntry, SkillRunnerCallbacks, SkillRunnerOptions, PreparedFile, PrepareFilesOptions, PrepareFilesResult, FileAnalysisCallbacks, FileAnalysisResult, } from './types.js';
|
package/dist/sdk/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/sdk/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAGjJ,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG1G,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/sdk/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAGjJ,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGjD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG1G,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACzE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,OAAO,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGzE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGvE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAGtE,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
|
package/dist/sdk/runner.js
CHANGED
|
@@ -24,7 +24,7 @@ export { buildHunkSystemPrompt, buildHunkUserPrompt } from './prompt.js';
|
|
|
24
24
|
// Legacy export for backwards compatibility
|
|
25
25
|
export { buildHunkSystemPrompt as buildSystemPrompt } from './prompt.js';
|
|
26
26
|
// Re-export extraction utilities
|
|
27
|
-
export { extractFindingsJson, extractBalancedJson, extractFindingsWithLLM, truncateForLLMFallback, deduplicateFindings, validateFindings, generateShortId, } from './extract.js';
|
|
27
|
+
export { extractFindingsJson, extractBalancedJson, extractFindingsWithLLM, truncateForLLMFallback, deduplicateFindings, mergeGroupLocations, applyMergeGroups, mergeCrossLocationFindings, validateFindings, generateShortId, } from './extract.js';
|
|
28
28
|
// Re-export file preparation
|
|
29
29
|
export { prepareFiles } from './prepare.js';
|
|
30
30
|
// Re-export analysis functions
|
package/dist/sdk/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/sdk/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,wCAAwC;AACxC,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAEjJ,4BAA4B;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,4BAA4B;AAC5B,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE1G,8BAA8B;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,gDAAgD;AAChD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEzE,4CAA4C;AAC5C,OAAO,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEzE,iCAAiC;AACjC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,6BAA6B;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,+BAA+B;AAC/B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/sdk/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,wCAAwC;AACxC,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAEjJ,4BAA4B;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD,4BAA4B;AAC5B,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE1G,8BAA8B;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,gDAAgD;AAChD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEzE,4CAA4C;AAC5C,OAAO,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEzE,iCAAiC;AACjC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,6BAA6B;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,+BAA+B;AAC/B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/sdk/types.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export interface AuxiliaryUsageEntry {
|
|
|
6
6
|
agent: string;
|
|
7
7
|
usage: UsageStats;
|
|
8
8
|
}
|
|
9
|
-
/** Default concurrency for file-level parallel processing */
|
|
9
|
+
/** Default concurrency for file-level parallel processing (standalone SDK usage only) */
|
|
10
10
|
export declare const DEFAULT_FILE_CONCURRENCY = 5;
|
|
11
11
|
/** Threshold in characters above which to warn about large prompts (~25k tokens) */
|
|
12
12
|
export declare const LARGE_PROMPT_THRESHOLD_CHARS = 100000;
|
|
@@ -33,7 +33,7 @@ export interface SkillRunnerCallbacks {
|
|
|
33
33
|
skillStartTime?: number;
|
|
34
34
|
onFileStart?: (file: string, index: number, total: number) => void;
|
|
35
35
|
onHunkStart?: (file: string, hunkNum: number, totalHunks: number, lineRange: string) => void;
|
|
36
|
-
onHunkComplete?: (file: string, hunkNum: number, findings: Finding[]) => void;
|
|
36
|
+
onHunkComplete?: (file: string, hunkNum: number, findings: Finding[], usage: UsageStats) => void;
|
|
37
37
|
onFileComplete?: (file: string, index: number, total: number) => void;
|
|
38
38
|
/** Called when a prompt exceeds the large prompt threshold */
|
|
39
39
|
onLargePrompt?: (file: string, lineRange: string, chars: number, estimatedTokens: number) => void;
|
|
@@ -45,6 +45,8 @@ export interface SkillRunnerCallbacks {
|
|
|
45
45
|
onExtractionFailure?: (file: string, lineRange: string, error: string, preview: string) => void;
|
|
46
46
|
/** Called with extraction result details (debug mode) */
|
|
47
47
|
onExtractionResult?: (file: string, lineRange: string, findingsCount: number, method: 'regex' | 'llm' | 'none') => void;
|
|
48
|
+
/** Called when hunk analysis fails (SDK error, API error, abort) */
|
|
49
|
+
onHunkFailed?: (file: string, lineRange: string, error: string) => void;
|
|
48
50
|
}
|
|
49
51
|
export interface SkillRunnerOptions {
|
|
50
52
|
apiKey?: string;
|
|
@@ -101,7 +103,7 @@ export interface PrepareFilesResult {
|
|
|
101
103
|
export interface FileAnalysisCallbacks {
|
|
102
104
|
skillStartTime?: number;
|
|
103
105
|
onHunkStart?: (hunkNum: number, totalHunks: number, lineRange: string) => void;
|
|
104
|
-
onHunkComplete?: (hunkNum: number, findings: Finding[]) => void;
|
|
106
|
+
onHunkComplete?: (hunkNum: number, findings: Finding[], usage: UsageStats) => void;
|
|
105
107
|
/** Called when a prompt exceeds the large prompt threshold */
|
|
106
108
|
onLargePrompt?: (lineRange: string, chars: number, estimatedTokens: number) => void;
|
|
107
109
|
/** Called with prompt size info in debug mode */
|
|
@@ -112,6 +114,8 @@ export interface FileAnalysisCallbacks {
|
|
|
112
114
|
onExtractionFailure?: (lineRange: string, error: string, preview: string) => void;
|
|
113
115
|
/** Called with extraction result details (debug mode) */
|
|
114
116
|
onExtractionResult?: (lineRange: string, findingsCount: number, method: 'regex' | 'llm' | 'none') => void;
|
|
117
|
+
/** Called when hunk analysis fails (SDK error, API error, abort) */
|
|
118
|
+
onHunkFailed?: (lineRange: string, error: string) => void;
|
|
115
119
|
}
|
|
116
120
|
/**
|
|
117
121
|
* Result from analyzing a single file.
|
|
@@ -138,5 +142,7 @@ export interface HunkAnalysisCallbacks {
|
|
|
138
142
|
onExtractionFailure?: (lineRange: string, error: string, preview: string) => void;
|
|
139
143
|
/** Called with extraction result details (debug mode) */
|
|
140
144
|
onExtractionResult?: (lineRange: string, findingsCount: number, method: 'regex' | 'llm' | 'none') => void;
|
|
145
|
+
/** Called when hunk analysis fails (SDK error, API error, abort) */
|
|
146
|
+
onHunkFailed?: (lineRange: string, error: string) => void;
|
|
141
147
|
}
|
|
142
148
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/sdk/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,wFAAwF;AACxF,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,UAAU,CAAC;CACnB;AAED,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/types.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Default concurrency for file-level parallel processing */
|
|
1
|
+
/** Default concurrency for file-level parallel processing (standalone SDK usage only) */
|
|
2
2
|
export const DEFAULT_FILE_CONCURRENCY = 5;
|
|
3
3
|
/** Threshold in characters above which to warn about large prompts (~25k tokens) */
|
|
4
4
|
export const LARGE_PROMPT_THRESHOLD_CHARS = 100000;
|
package/dist/sdk/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAUA,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAUA,yFAAyF;AACzF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C,oFAAoF;AACpF,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAC"}
|
package/dist/sdk/usage.d.ts
CHANGED
|
@@ -3,6 +3,11 @@ import type { UsageStats, AuxiliaryUsageMap } from '../types/index.js';
|
|
|
3
3
|
import type { AuxiliaryUsageEntry } from './types.js';
|
|
4
4
|
/**
|
|
5
5
|
* Extract usage stats from an SDK result message.
|
|
6
|
+
*
|
|
7
|
+
* The Anthropic API reports `input_tokens` as only the non-cached portion.
|
|
8
|
+
* We normalize so that `inputTokens` is the *total* input tokens
|
|
9
|
+
* (non-cached + cache_read + cache_creation), with the cache fields
|
|
10
|
+
* being subsets of that total.
|
|
6
11
|
*/
|
|
7
12
|
export declare function extractUsage(result: SDKResultMessage): UsageStats;
|
|
8
13
|
/**
|
package/dist/sdk/usage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/sdk/usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/sdk/usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAWjE;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,UAAU,CAQvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAW/D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,mBAAmB,EAAE,GAC7B,iBAAiB,GAAG,SAAS,CAoB/B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,EAAE,iBAAiB,GAAG,SAAS,EAChC,CAAC,EAAE,iBAAiB,GAAG,SAAS,GAC/B,iBAAiB,GAAG,SAAS,CAa/B;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD"}
|