agent-skill-evals 0.1.0 → 0.1.1

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 (40) hide show
  1. package/README.md +14 -145
  2. package/dist/agent/index.d.mts +2 -3
  3. package/dist/agent/index.mjs +1 -1
  4. package/dist/agent-B15R7Xlr.mjs +2105 -0
  5. package/dist/agent-B15R7Xlr.mjs.map +1 -0
  6. package/dist/assertions/index.d.mts +6 -0
  7. package/dist/assertions/index.d.mts.map +1 -1
  8. package/dist/assertions/index.mjs +164 -449
  9. package/dist/assertions/index.mjs.map +1 -1
  10. package/dist/catalog-9Wh-AfRv.mjs +409 -0
  11. package/dist/catalog-9Wh-AfRv.mjs.map +1 -0
  12. package/dist/cli/init.d.mts +22 -0
  13. package/dist/cli/init.d.mts.map +1 -0
  14. package/dist/cli/init.mjs +369 -0
  15. package/dist/cli/init.mjs.map +1 -0
  16. package/dist/index-D9lGL0Qg.d.mts +381 -0
  17. package/dist/index-D9lGL0Qg.d.mts.map +1 -0
  18. package/dist/presets-DwfDWckA.mjs +80 -0
  19. package/dist/presets-DwfDWckA.mjs.map +1 -0
  20. package/dist/test-generator/index.d.mts +945 -0
  21. package/dist/test-generator/index.d.mts.map +1 -0
  22. package/dist/test-generator/index.mjs +2 -0
  23. package/dist/test-pack-Cu1WOssl.mjs +215 -0
  24. package/dist/test-pack-Cu1WOssl.mjs.map +1 -0
  25. package/package.json +16 -9
  26. package/schema/test-pack.schema.json +871 -0
  27. package/dist/agent-CM7fIL_C.mjs +0 -1525
  28. package/dist/agent-CM7fIL_C.mjs.map +0 -1
  29. package/dist/assertion-entries-CfmNt-fp.d.mts +0 -9
  30. package/dist/assertion-entries-CfmNt-fp.d.mts.map +0 -1
  31. package/dist/index-4l7TCFny.d.mts +0 -90
  32. package/dist/index-4l7TCFny.d.mts.map +0 -1
  33. package/dist/internal-services-5-mRgNls.mjs +0 -226
  34. package/dist/internal-services-5-mRgNls.mjs.map +0 -1
  35. package/dist/internal-services-DbsekQ_K.d.mts +0 -76
  36. package/dist/internal-services-DbsekQ_K.d.mts.map +0 -1
  37. package/dist/skill-checks/index.d.mts +0 -113
  38. package/dist/skill-checks/index.d.mts.map +0 -1
  39. package/dist/skill-checks/index.mjs +0 -408
  40. package/dist/skill-checks/index.mjs.map +0 -1
@@ -0,0 +1,381 @@
1
+ import { z } from "zod";
2
+
3
+ //#region src/evidence-schema.d.ts
4
+ declare const CommandEventSchema: z.ZodObject<{
5
+ command: z.ZodString;
6
+ args: z.ZodDefault<z.ZodArray<z.ZodString>>;
7
+ exitCode: z.ZodNumber;
8
+ signal: z.ZodOptional<z.ZodString>;
9
+ stdout: z.ZodOptional<z.ZodString>;
10
+ stderr: z.ZodOptional<z.ZodString>;
11
+ startedAt: z.ZodNumber;
12
+ durationMs: z.ZodNumber;
13
+ turn: z.ZodOptional<z.ZodNumber>;
14
+ }, z.core.$strip>;
15
+ declare const FileEventSchema: z.ZodObject<{
16
+ path: z.ZodString;
17
+ op: z.ZodEnum<{
18
+ create: "create";
19
+ modify: "modify";
20
+ delete: "delete";
21
+ }>;
22
+ }, z.core.$strip>;
23
+ declare const ToolCallEventSchema: z.ZodObject<{
24
+ tool: z.ZodString;
25
+ provider: z.ZodOptional<z.ZodString>;
26
+ server: z.ZodOptional<z.ZodString>;
27
+ args: z.ZodOptional<z.ZodUnknown>;
28
+ result: z.ZodOptional<z.ZodUnknown>;
29
+ startedAt: z.ZodNumber;
30
+ durationMs: z.ZodNumber;
31
+ turn: z.ZodOptional<z.ZodNumber>;
32
+ }, z.core.$strip>;
33
+ declare const SkillLoadEventSchema: z.ZodObject<{
34
+ skill: z.ZodString;
35
+ delivery: z.ZodEnum<{
36
+ mcp: "mcp";
37
+ native: "native";
38
+ explicit: "explicit";
39
+ }>;
40
+ provider: z.ZodOptional<z.ZodString>;
41
+ server: z.ZodOptional<z.ZodString>;
42
+ source: z.ZodOptional<z.ZodString>;
43
+ startedAt: z.ZodNumber;
44
+ }, z.core.$strip>;
45
+ declare const SkillAvailableEventSchema: z.ZodObject<{
46
+ skill: z.ZodString;
47
+ path: z.ZodString;
48
+ role: z.ZodEnum<{
49
+ "under-test": "under-test";
50
+ supporting: "supporting";
51
+ distractor: "distractor";
52
+ }>;
53
+ }, z.core.$strip>;
54
+ declare const UsageSchema: z.ZodObject<{
55
+ inputTokens: z.ZodOptional<z.ZodNumber>;
56
+ outputTokens: z.ZodOptional<z.ZodNumber>;
57
+ totalTokens: z.ZodOptional<z.ZodNumber>;
58
+ cacheReadTokens: z.ZodOptional<z.ZodNumber>;
59
+ cacheWriteTokens: z.ZodOptional<z.ZodNumber>;
60
+ }, z.core.$strip>;
61
+ declare const RuntimeIdentitySchema: z.ZodObject<{
62
+ adapter: z.ZodOptional<z.ZodString>;
63
+ preset: z.ZodOptional<z.ZodString>;
64
+ command: z.ZodOptional<z.ZodString>;
65
+ cliVersion: z.ZodOptional<z.ZodString>;
66
+ model: z.ZodOptional<z.ZodString>;
67
+ continuation: z.ZodOptional<z.ZodEnum<{
68
+ "transcript-replay": "transcript-replay";
69
+ "native-session": "native-session";
70
+ }>>;
71
+ }, z.core.$strip>;
72
+ declare const TurnRecordSchema: z.ZodObject<{
73
+ turn: z.ZodNumber;
74
+ role: z.ZodEnum<{
75
+ user: "user";
76
+ agent: "agent";
77
+ }>;
78
+ text: z.ZodString;
79
+ startedAt: z.ZodNumber;
80
+ durationMs: z.ZodNumber;
81
+ usage: z.ZodOptional<z.ZodObject<{
82
+ inputTokens: z.ZodOptional<z.ZodNumber>;
83
+ outputTokens: z.ZodOptional<z.ZodNumber>;
84
+ totalTokens: z.ZodOptional<z.ZodNumber>;
85
+ cacheReadTokens: z.ZodOptional<z.ZodNumber>;
86
+ cacheWriteTokens: z.ZodOptional<z.ZodNumber>;
87
+ }, z.core.$strip>>;
88
+ }, z.core.$strip>;
89
+ declare const EvidenceSnapshotSchema: z.ZodObject<{
90
+ schemaVersion: z.ZodLiteral<"agent-skill-evals.evidence.v2">;
91
+ output: z.ZodDefault<z.ZodString>;
92
+ run: z.ZodObject<{
93
+ runDir: z.ZodString;
94
+ worldPath: z.ZodString;
95
+ fixture: z.ZodOptional<z.ZodString>;
96
+ durationMs: z.ZodOptional<z.ZodNumber>;
97
+ }, z.core.$strip>;
98
+ commands: z.ZodDefault<z.ZodArray<z.ZodObject<{
99
+ command: z.ZodString;
100
+ args: z.ZodDefault<z.ZodArray<z.ZodString>>;
101
+ exitCode: z.ZodNumber;
102
+ signal: z.ZodOptional<z.ZodString>;
103
+ stdout: z.ZodOptional<z.ZodString>;
104
+ stderr: z.ZodOptional<z.ZodString>;
105
+ startedAt: z.ZodNumber;
106
+ durationMs: z.ZodNumber;
107
+ turn: z.ZodOptional<z.ZodNumber>;
108
+ }, z.core.$strip>>>;
109
+ filesWritten: z.ZodDefault<z.ZodArray<z.ZodObject<{
110
+ path: z.ZodString;
111
+ op: z.ZodEnum<{
112
+ create: "create";
113
+ modify: "modify";
114
+ delete: "delete";
115
+ }>;
116
+ }, z.core.$strip>>>;
117
+ toolCalls: z.ZodDefault<z.ZodArray<z.ZodObject<{
118
+ tool: z.ZodString;
119
+ provider: z.ZodOptional<z.ZodString>;
120
+ server: z.ZodOptional<z.ZodString>;
121
+ args: z.ZodOptional<z.ZodUnknown>;
122
+ result: z.ZodOptional<z.ZodUnknown>;
123
+ startedAt: z.ZodNumber;
124
+ durationMs: z.ZodNumber;
125
+ turn: z.ZodOptional<z.ZodNumber>;
126
+ }, z.core.$strip>>>;
127
+ skillsLoaded: z.ZodDefault<z.ZodArray<z.ZodObject<{
128
+ skill: z.ZodString;
129
+ delivery: z.ZodEnum<{
130
+ mcp: "mcp";
131
+ native: "native";
132
+ explicit: "explicit";
133
+ }>;
134
+ provider: z.ZodOptional<z.ZodString>;
135
+ server: z.ZodOptional<z.ZodString>;
136
+ source: z.ZodOptional<z.ZodString>;
137
+ startedAt: z.ZodNumber;
138
+ }, z.core.$strip>>>;
139
+ skillsAvailable: z.ZodDefault<z.ZodArray<z.ZodObject<{
140
+ skill: z.ZodString;
141
+ path: z.ZodString;
142
+ role: z.ZodEnum<{
143
+ "under-test": "under-test";
144
+ supporting: "supporting";
145
+ distractor: "distractor";
146
+ }>;
147
+ }, z.core.$strip>>>;
148
+ usage: z.ZodDefault<z.ZodObject<{
149
+ inputTokens: z.ZodOptional<z.ZodNumber>;
150
+ outputTokens: z.ZodOptional<z.ZodNumber>;
151
+ totalTokens: z.ZodOptional<z.ZodNumber>;
152
+ cacheReadTokens: z.ZodOptional<z.ZodNumber>;
153
+ cacheWriteTokens: z.ZodOptional<z.ZodNumber>;
154
+ }, z.core.$strip>>;
155
+ turns: z.ZodOptional<z.ZodArray<z.ZodObject<{
156
+ turn: z.ZodNumber;
157
+ role: z.ZodEnum<{
158
+ user: "user";
159
+ agent: "agent";
160
+ }>;
161
+ text: z.ZodString;
162
+ startedAt: z.ZodNumber;
163
+ durationMs: z.ZodNumber;
164
+ usage: z.ZodOptional<z.ZodObject<{
165
+ inputTokens: z.ZodOptional<z.ZodNumber>;
166
+ outputTokens: z.ZodOptional<z.ZodNumber>;
167
+ totalTokens: z.ZodOptional<z.ZodNumber>;
168
+ cacheReadTokens: z.ZodOptional<z.ZodNumber>;
169
+ cacheWriteTokens: z.ZodOptional<z.ZodNumber>;
170
+ }, z.core.$strip>>;
171
+ }, z.core.$strip>>>;
172
+ runtime: z.ZodOptional<z.ZodObject<{
173
+ adapter: z.ZodOptional<z.ZodString>;
174
+ preset: z.ZodOptional<z.ZodString>;
175
+ command: z.ZodOptional<z.ZodString>;
176
+ cliVersion: z.ZodOptional<z.ZodString>;
177
+ model: z.ZodOptional<z.ZodString>;
178
+ continuation: z.ZodOptional<z.ZodEnum<{
179
+ "transcript-replay": "transcript-replay";
180
+ "native-session": "native-session";
181
+ }>>;
182
+ }, z.core.$strip>>;
183
+ warnings: z.ZodOptional<z.ZodArray<z.ZodString>>;
184
+ extensions: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
185
+ }, z.core.$strip>;
186
+ type CommandEvent = z.infer<typeof CommandEventSchema>;
187
+ type FileEvent = z.infer<typeof FileEventSchema>;
188
+ type ToolCallEvent = z.infer<typeof ToolCallEventSchema>;
189
+ type SkillLoadEvent = z.infer<typeof SkillLoadEventSchema>;
190
+ type SkillAvailableEvent = z.infer<typeof SkillAvailableEventSchema>;
191
+ type Usage = z.infer<typeof UsageSchema>;
192
+ type RuntimeIdentity = z.infer<typeof RuntimeIdentitySchema>;
193
+ type TurnRecord = z.infer<typeof TurnRecordSchema>;
194
+ type EvidenceSnapshot = z.infer<typeof EvidenceSnapshotSchema>;
195
+ //#endregion
196
+ //#region src/internal-types.d.ts
197
+ interface AgentSkillEvalsAssertionResult {
198
+ pass: boolean;
199
+ score: number;
200
+ reason: string;
201
+ componentResults?: AgentSkillEvalsAssertionResult[];
202
+ evidence?: unknown;
203
+ }
204
+ interface WorldHandle {
205
+ readonly path: string;
206
+ listFiles(glob: string): Promise<string[]>;
207
+ readFile(relativePath: string): Promise<string | null>;
208
+ exec(command: string, args?: readonly string[], opts?: {
209
+ timeoutMs?: number;
210
+ env?: Record<string, string>;
211
+ }): Promise<{
212
+ exitCode: number;
213
+ stdout: string;
214
+ stderr: string;
215
+ }>;
216
+ }
217
+ interface EvidenceHandle {
218
+ output(): string;
219
+ commands(): readonly CommandEvent[];
220
+ filesWritten(): readonly FileEvent[];
221
+ toolCalls(): readonly ToolCallEvent[];
222
+ skillsLoaded(): readonly SkillLoadEvent[];
223
+ skillsAvailable(): readonly SkillAvailableEvent[];
224
+ usage(): Usage;
225
+ turns?(): readonly TurnRecord[];
226
+ runtime?(): RuntimeIdentity;
227
+ warnings?(): readonly string[];
228
+ }
229
+ //#endregion
230
+ //#region src/agent/provider-config.d.ts
231
+ declare const SkillEvidenceConfigSchema: z.ZodObject<{
232
+ mcpResource: z.ZodOptional<z.ZodObject<{
233
+ uriArgPaths: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
234
+ uriPatterns: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
235
+ }, z.core.$strip>>;
236
+ mcpTool: z.ZodOptional<z.ZodObject<{
237
+ toolPatterns: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
238
+ }, z.core.$strip>>;
239
+ nativeArgs: z.ZodOptional<z.ZodObject<{
240
+ whenArgs: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
241
+ whenAnyArgs: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
242
+ skillPathFlags: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
243
+ provider: z.ZodOptional<z.ZodString>;
244
+ source: z.ZodOptional<z.ZodString>;
245
+ }, z.core.$strip>>;
246
+ }, z.core.$strip>;
247
+ declare const ProviderConfigSchema: z.ZodObject<{
248
+ preset: z.ZodOptional<z.ZodString>;
249
+ adapter: z.ZodOptional<z.ZodString>;
250
+ command: z.ZodOptional<z.ZodString>;
251
+ args: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
252
+ extraArgs: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
253
+ model: z.ZodOptional<z.ZodString>;
254
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
255
+ baseDir: z.ZodOptional<z.ZodString>;
256
+ skillEvidence: z.ZodOptional<z.ZodObject<{
257
+ mcpResource: z.ZodOptional<z.ZodObject<{
258
+ uriArgPaths: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
259
+ uriPatterns: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
260
+ }, z.core.$strip>>;
261
+ mcpTool: z.ZodOptional<z.ZodObject<{
262
+ toolPatterns: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
263
+ }, z.core.$strip>>;
264
+ nativeArgs: z.ZodOptional<z.ZodObject<{
265
+ whenArgs: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
266
+ whenAnyArgs: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
267
+ skillPathFlags: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
268
+ provider: z.ZodOptional<z.ZodString>;
269
+ source: z.ZodOptional<z.ZodString>;
270
+ }, z.core.$strip>>;
271
+ }, z.core.$strip>>;
272
+ simulatedUser: z.ZodOptional<z.ZodObject<{
273
+ preset: z.ZodOptional<z.ZodString>;
274
+ adapter: z.ZodOptional<z.ZodString>;
275
+ command: z.ZodOptional<z.ZodString>;
276
+ args: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
277
+ extraArgs: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodString>, z.ZodTransform<readonly string[], string[]>>>;
278
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
279
+ }, z.core.$strip>>;
280
+ }, z.core.$strip>;
281
+ type SkillEvidenceConfig = z.infer<typeof SkillEvidenceConfigSchema>;
282
+ type ProviderConfig = z.infer<typeof ProviderConfigSchema>;
283
+ //#endregion
284
+ //#region src/agent/evidence.d.ts
285
+ declare class EvidenceCollector {
286
+ private readonly skillEvidenceConfig;
287
+ private currentTurn?;
288
+ /** Usage from completed turns; the live snapshot.usage covers only the current turn. */
289
+ private completedTurnsUsage;
290
+ private snapshot;
291
+ constructor(skillEvidenceConfig?: SkillEvidenceConfig);
292
+ addCommand(e: CommandEvent): void;
293
+ addFileWrite(e: FileEvent): void;
294
+ addToolCall(e: ToolCallEvent): void;
295
+ private withTurn;
296
+ /**
297
+ * Start an agent turn in a multi-turn run. Adapters overwrite usage per
298
+ * CLI invocation (setUsage), so each turn's usage is scoped: the previous
299
+ * turn's counts move into the completed-turns total first.
300
+ */
301
+ beginAgentTurn(turn: number): void;
302
+ endAgentTurn(record: {
303
+ text: string;
304
+ startedAt: number;
305
+ durationMs: number;
306
+ }): void;
307
+ addUserTurn(turn: number, text: string, startedAt: number): void;
308
+ private addTurnRecord;
309
+ addSkillLoad(e: SkillLoadEvent): void;
310
+ addSkillAvailable(e: SkillAvailableEvent): void;
311
+ setUsage(u: Usage): void;
312
+ /** Merge non-empty runtime identity fields; later observations win. */
313
+ mergeRuntime(identity: RuntimeIdentity): void;
314
+ addWarning(warning: string): void;
315
+ addUsage(u: Usage): void;
316
+ setOutput(output: string): void;
317
+ setRun(run: EvidenceSnapshot["run"]): void;
318
+ toSnapshot(): EvidenceSnapshot;
319
+ static fromSnapshot(snapshot: EvidenceSnapshot): EvidenceCollector;
320
+ }
321
+ declare function evidenceFromSnapshot(s: EvidenceSnapshot): EvidenceHandle;
322
+ //#endregion
323
+ //#region src/agent/world.d.ts
324
+ declare function makeWorldHandle(worldPath: string, recordCommand?: (event: CommandEvent) => void): WorldHandle;
325
+ //#endregion
326
+ //#region src/agent/metadata.d.ts
327
+ interface AgentSkillEvalsProviderMetadata {
328
+ runDir: string;
329
+ worldPath: string;
330
+ evidencePath: string;
331
+ fixture?: string;
332
+ skill?: string;
333
+ kind?: string;
334
+ preconditionResults: AgentSkillEvalsAssertionResult[];
335
+ preconditionsPassed: boolean;
336
+ durationMs: number;
337
+ runtime?: RuntimeIdentity;
338
+ warnings?: string[];
339
+ mockEnv?: Record<string, string>;
340
+ }
341
+ //#endregion
342
+ //#region src/agent/index.d.ts
343
+ interface PromptfooContext {
344
+ vars?: Record<string, unknown>;
345
+ test?: {
346
+ vars?: Record<string, unknown>;
347
+ metadata?: Record<string, unknown>;
348
+ };
349
+ }
350
+ interface ProviderResponse {
351
+ output: string;
352
+ metadata?: Record<string, unknown>;
353
+ cost?: number;
354
+ tokenUsage?: {
355
+ total?: number;
356
+ prompt?: number;
357
+ completion?: number;
358
+ cached?: number;
359
+ };
360
+ error?: string;
361
+ }
362
+ interface PreparedRun {
363
+ runDir: string;
364
+ worldPath: string;
365
+ world: ReturnType<typeof makeWorldHandle>;
366
+ evidenceCollector: EvidenceCollector;
367
+ }
368
+ declare class AgentSkillEvalsProvider {
369
+ config: ProviderConfig;
370
+ private readonly configError?;
371
+ private authHome?;
372
+ id: () => string;
373
+ constructor(options?: {
374
+ config?: ProviderConfig;
375
+ id?: string;
376
+ });
377
+ callApi(prompt: string, context?: PromptfooContext): Promise<ProviderResponse>;
378
+ }
379
+ //#endregion
380
+ export { evidenceFromSnapshot as a, EvidenceCollector as i, PreparedRun as n, EvidenceSnapshot as o, AgentSkillEvalsProviderMetadata as r, AgentSkillEvalsProvider as t };
381
+ //# sourceMappingURL=index-D9lGL0Qg.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-D9lGL0Qg.d.mts","names":[],"sources":["../src/evidence-schema.ts","../src/internal-types.ts","../src/agent/provider-config.ts","../src/agent/evidence.ts","../src/agent/world.ts","../src/agent/metadata.ts","../src/agent/index.ts"],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ //#region src/agent/presets.ts
2
+ const AGENT_PRESETS = {
3
+ codex: {
4
+ adapter: "codex-json",
5
+ command: "codex",
6
+ args: [
7
+ "--ask-for-approval",
8
+ "never",
9
+ "exec",
10
+ "--json",
11
+ "--sandbox",
12
+ "workspace-write",
13
+ "--skip-git-repo-check",
14
+ "--ephemeral",
15
+ "--ignore-user-config",
16
+ "--ignore-rules",
17
+ "-"
18
+ ],
19
+ testedAgainst: "Codex CLI 0.13x (exec --json)"
20
+ },
21
+ "claude-code": {
22
+ adapter: "claude-code-json",
23
+ command: "claude",
24
+ args: [
25
+ "-p",
26
+ "--permission-mode",
27
+ "bypassPermissions",
28
+ "--output-format",
29
+ "stream-json",
30
+ "--verbose",
31
+ "--no-session-persistence"
32
+ ],
33
+ testedAgainst: "Claude Code CLI 2.x (-p --output-format stream-json)"
34
+ },
35
+ pi: {
36
+ adapter: "pi-json",
37
+ command: "pi",
38
+ args: ["--mode", "json"],
39
+ testedAgainst: "Pi CLI (--mode json)"
40
+ }
41
+ };
42
+ const PRESET_IDS = Object.keys(AGENT_PRESETS);
43
+ /**
44
+ * Merge a preset with explicit config. Explicit `adapter`/`command`/`args`
45
+ * always win over the preset. `extraArgs` appends to whichever args list was
46
+ * chosen; when that list ends with a lone `-` (prompt-on-stdin marker, e.g.
47
+ * Codex), the extra args are inserted before it so the marker stays last.
48
+ */
49
+ function resolveInvocation(input) {
50
+ const preset = input.preset ? AGENT_PRESETS[input.preset] : void 0;
51
+ if (input.preset && !preset) return { error: `unknown preset "${input.preset}". Supported presets: ${PRESET_IDS.join(", ")}. Use adapter/command/args directly for a custom agent.` };
52
+ const args = input.args ?? preset?.args;
53
+ const merged = {
54
+ ...input.adapter ?? preset?.adapter ? { adapter: input.adapter ?? preset?.adapter } : {},
55
+ ...input.command ?? preset?.command ? { command: input.command ?? preset?.command } : {},
56
+ ...args ? { args } : {},
57
+ ...input.preset ? { preset: input.preset } : {}
58
+ };
59
+ if (input.extraArgs && input.extraArgs.length > 0) {
60
+ const base = [...merged.args ?? []];
61
+ if (base.length > 0 && base[base.length - 1] === "-") merged.args = [
62
+ ...base.slice(0, -1),
63
+ ...input.extraArgs,
64
+ "-"
65
+ ];
66
+ else merged.args = [...base, ...input.extraArgs];
67
+ }
68
+ return merged;
69
+ }
70
+ /** The note shown when a spawn fails and the config came from a preset. */
71
+ function presetStalenessHint(presetId) {
72
+ if (!presetId) return "";
73
+ const preset = AGENT_PRESETS[presetId];
74
+ if (!preset) return "";
75
+ return ` The "${presetId}" preset was tested against ${preset.testedAgainst}; if the CLI updated recently its flags may have changed.`;
76
+ }
77
+ //#endregion
78
+ export { resolveInvocation as i, PRESET_IDS as n, presetStalenessHint as r, AGENT_PRESETS as t };
79
+
80
+ //# sourceMappingURL=presets-DwfDWckA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets-DwfDWckA.mjs","names":[],"sources":["../src/agent/presets.ts"],"sourcesContent":["/**\n * Agent presets: known-good CLI invocations per supported agent.\n *\n * A preset owns the harness wiring (adapter, command, flags) so test authors\n * write `preset: codex` instead of hand-typing flag lists that drift as the\n * CLIs change. Every field stays overridable in provider config, and\n * `extraArgs` appends run-specific flags without re-declaring the base list.\n */\n\nexport interface AgentPreset {\n /** Adapter id registered in the adapter catalog. */\n adapter: string;\n /** Executable name or path. */\n command: string;\n /** Known-good argument list for noninteractive eval runs. */\n args: readonly string[];\n /**\n * Human-readable note about the CLI version range this preset was written\n * against. Surfaced in stale-flag error messages, never enforced.\n */\n testedAgainst: string;\n}\n\nexport const AGENT_PRESETS: Readonly<Record<string, AgentPreset>> = {\n codex: {\n adapter: \"codex-json\",\n command: \"codex\",\n args: [\n \"--ask-for-approval\",\n \"never\",\n \"exec\",\n \"--json\",\n \"--sandbox\",\n \"workspace-write\",\n \"--skip-git-repo-check\",\n \"--ephemeral\",\n \"--ignore-user-config\",\n \"--ignore-rules\",\n \"-\",\n ],\n testedAgainst: \"Codex CLI 0.13x (exec --json)\",\n },\n \"claude-code\": {\n adapter: \"claude-code-json\",\n command: \"claude\",\n args: [\n \"-p\",\n \"--permission-mode\",\n \"bypassPermissions\",\n \"--output-format\",\n \"stream-json\",\n \"--verbose\",\n \"--no-session-persistence\",\n ],\n testedAgainst: \"Claude Code CLI 2.x (-p --output-format stream-json)\",\n },\n pi: {\n adapter: \"pi-json\",\n command: \"pi\",\n args: [\"--mode\", \"json\"],\n testedAgainst: \"Pi CLI (--mode json)\",\n },\n};\n\nexport const PRESET_IDS = Object.keys(AGENT_PRESETS);\n\nexport interface ResolvedInvocation {\n adapter?: string;\n command?: string;\n args?: readonly string[];\n preset?: string;\n}\n\nexport interface PresetInput {\n preset?: string;\n adapter?: string;\n command?: string;\n args?: readonly string[];\n extraArgs?: readonly string[];\n}\n\n/**\n * Merge a preset with explicit config. Explicit `adapter`/`command`/`args`\n * always win over the preset. `extraArgs` appends to whichever args list was\n * chosen; when that list ends with a lone `-` (prompt-on-stdin marker, e.g.\n * Codex), the extra args are inserted before it so the marker stays last.\n */\nexport function resolveInvocation(\n input: PresetInput,\n): ResolvedInvocation | { error: string } {\n const preset = input.preset ? AGENT_PRESETS[input.preset] : undefined;\n if (input.preset && !preset) {\n return {\n error:\n `unknown preset \"${input.preset}\". Supported presets: ${PRESET_IDS.join(\", \")}. ` +\n \"Use adapter/command/args directly for a custom agent.\",\n };\n }\n\n const args = input.args ?? preset?.args;\n const merged: ResolvedInvocation = {\n ...(input.adapter ?? preset?.adapter\n ? { adapter: input.adapter ?? preset?.adapter }\n : {}),\n ...(input.command ?? preset?.command\n ? { command: input.command ?? preset?.command }\n : {}),\n ...(args ? { args } : {}),\n ...(input.preset ? { preset: input.preset } : {}),\n };\n\n if (input.extraArgs && input.extraArgs.length > 0) {\n const base = [...(merged.args ?? [])];\n if (base.length > 0 && base[base.length - 1] === \"-\") {\n merged.args = [...base.slice(0, -1), ...input.extraArgs, \"-\"];\n } else {\n merged.args = [...base, ...input.extraArgs];\n }\n }\n\n return merged;\n}\n\n/** The note shown when a spawn fails and the config came from a preset. */\nexport function presetStalenessHint(presetId: string | undefined): string {\n if (!presetId) return \"\";\n const preset = AGENT_PRESETS[presetId];\n if (!preset) return \"\";\n return ` The \"${presetId}\" preset was tested against ${preset.testedAgainst}; if the CLI updated recently its flags may have changed.`;\n}\n"],"mappings":";AAuBA,MAAa,gBAAuD;CAClE,OAAO;EACL,SAAS;EACT,SAAS;EACT,MAAM;GACJ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,eAAe;EAChB;CACD,eAAe;EACb,SAAS;EACT,SAAS;EACT,MAAM;GACJ;GACA;GACA;GACA;GACA;GACA;GACA;GACD;EACD,eAAe;EAChB;CACD,IAAI;EACF,SAAS;EACT,SAAS;EACT,MAAM,CAAC,UAAU,OAAO;EACxB,eAAe;EAChB;CACF;AAED,MAAa,aAAa,OAAO,KAAK,cAAc;;;;;;;AAuBpD,SAAgB,kBACd,OACwC;CACxC,MAAM,SAAS,MAAM,SAAS,cAAc,MAAM,UAAU,KAAA;AAC5D,KAAI,MAAM,UAAU,CAAC,OACnB,QAAO,EACL,OACE,mBAAmB,MAAM,OAAO,wBAAwB,WAAW,KAAK,KAAK,CAAC,0DAEjF;CAGH,MAAM,OAAO,MAAM,QAAQ,QAAQ;CACnC,MAAM,SAA6B;EACjC,GAAI,MAAM,WAAW,QAAQ,UACzB,EAAE,SAAS,MAAM,WAAW,QAAQ,SAAS,GAC7C,EAAE;EACN,GAAI,MAAM,WAAW,QAAQ,UACzB,EAAE,SAAS,MAAM,WAAW,QAAQ,SAAS,GAC7C,EAAE;EACN,GAAI,OAAO,EAAE,MAAM,GAAG,EAAE;EACxB,GAAI,MAAM,SAAS,EAAE,QAAQ,MAAM,QAAQ,GAAG,EAAE;EACjD;AAED,KAAI,MAAM,aAAa,MAAM,UAAU,SAAS,GAAG;EACjD,MAAM,OAAO,CAAC,GAAI,OAAO,QAAQ,EAAE,CAAE;AACrC,MAAI,KAAK,SAAS,KAAK,KAAK,KAAK,SAAS,OAAO,IAC/C,QAAO,OAAO;GAAC,GAAG,KAAK,MAAM,GAAG,GAAG;GAAE,GAAG,MAAM;GAAW;GAAI;MAE7D,QAAO,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,UAAU;;AAI/C,QAAO;;;AAIT,SAAgB,oBAAoB,UAAsC;AACxE,KAAI,CAAC,SAAU,QAAO;CACtB,MAAM,SAAS,cAAc;AAC7B,KAAI,CAAC,OAAQ,QAAO;AACpB,QAAO,SAAS,SAAS,8BAA8B,OAAO,cAAc"}