@polpo-ai/core 0.15.37 → 0.15.39

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 (63) hide show
  1. package/README.md +76 -0
  2. package/dist/__tests__/model-profiles.test.d.ts +2 -0
  3. package/dist/__tests__/model-profiles.test.d.ts.map +1 -0
  4. package/dist/__tests__/model-profiles.test.js +221 -0
  5. package/dist/__tests__/model-profiles.test.js.map +1 -0
  6. package/dist/__tests__/model-router.test.d.ts +2 -0
  7. package/dist/__tests__/model-router.test.d.ts.map +1 -0
  8. package/dist/__tests__/model-router.test.js +458 -0
  9. package/dist/__tests__/model-router.test.js.map +1 -0
  10. package/dist/__tests__/runtime-plan.test.js +20 -0
  11. package/dist/__tests__/runtime-plan.test.js.map +1 -1
  12. package/dist/__tests__/task-runner-model-profiles.test.d.ts +2 -0
  13. package/dist/__tests__/task-runner-model-profiles.test.d.ts.map +1 -0
  14. package/dist/__tests__/task-runner-model-profiles.test.js +84 -0
  15. package/dist/__tests__/task-runner-model-profiles.test.js.map +1 -0
  16. package/dist/adapter.d.ts +5 -1
  17. package/dist/adapter.d.ts.map +1 -1
  18. package/dist/assessment-orchestrator.d.ts +1 -0
  19. package/dist/assessment-orchestrator.d.ts.map +1 -1
  20. package/dist/assessment-orchestrator.js +11 -4
  21. package/dist/assessment-orchestrator.js.map +1 -1
  22. package/dist/escalation-manager.d.ts.map +1 -1
  23. package/dist/escalation-manager.js +6 -1
  24. package/dist/escalation-manager.js.map +1 -1
  25. package/dist/index.d.ts +4 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +2 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/loop/hooks.d.ts +2 -0
  30. package/dist/loop/hooks.d.ts.map +1 -1
  31. package/dist/loop/hooks.js.map +1 -1
  32. package/dist/loop/types.d.ts +3 -3
  33. package/dist/loop/types.d.ts.map +1 -1
  34. package/dist/mission-executor.d.ts.map +1 -1
  35. package/dist/mission-executor.js +2 -2
  36. package/dist/mission-executor.js.map +1 -1
  37. package/dist/model-profiles.d.ts +39 -0
  38. package/dist/model-profiles.d.ts.map +1 -0
  39. package/dist/model-profiles.js +181 -0
  40. package/dist/model-profiles.js.map +1 -0
  41. package/dist/model-router.d.ts +98 -0
  42. package/dist/model-router.d.ts.map +1 -0
  43. package/dist/model-router.js +358 -0
  44. package/dist/model-router.js.map +1 -0
  45. package/dist/runtime-plan/planner.d.ts.map +1 -1
  46. package/dist/runtime-plan/planner.js +31 -0
  47. package/dist/runtime-plan/planner.js.map +1 -1
  48. package/dist/runtime-plan/types.d.ts +3 -0
  49. package/dist/runtime-plan/types.d.ts.map +1 -1
  50. package/dist/schemas.d.ts +79 -19
  51. package/dist/schemas.d.ts.map +1 -1
  52. package/dist/schemas.js +16 -2
  53. package/dist/schemas.js.map +1 -1
  54. package/dist/task-runner.d.ts.map +1 -1
  55. package/dist/task-runner.js +5 -2
  56. package/dist/task-runner.js.map +1 -1
  57. package/dist/types/agent.d.ts +5 -3
  58. package/dist/types/agent.d.ts.map +1 -1
  59. package/dist/types/agent.js.map +1 -1
  60. package/dist/types/config.d.ts +24 -3
  61. package/dist/types/config.d.ts.map +1 -1
  62. package/dist/types/config.js.map +1 -1
  63. package/package.json +9 -1
@@ -0,0 +1,458 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { ModelRouteCancelledError, modelRouteRuntimePlanFields, resolveModelRoute, } from "../model-router.js";
3
+ const profiles = {
4
+ fast: "openai/gpt-4o-mini",
5
+ balanced: {
6
+ primary: "anthropic/claude-sonnet-4",
7
+ fallbacks: [{ profile: "fast" }],
8
+ },
9
+ reasoning: "openai/gpt-5",
10
+ };
11
+ function input(overrides = {}) {
12
+ return {
13
+ surface: "agent",
14
+ source: "request",
15
+ input: "Compare the evidence carefully and explain the conclusion.",
16
+ profiles,
17
+ config: {
18
+ mode: "auto",
19
+ fallbackProfile: "balanced",
20
+ allowedProfiles: ["fast", "balanced", "reasoning"],
21
+ minConfidence: 0.7,
22
+ timeoutMs: 50,
23
+ },
24
+ ...overrides,
25
+ };
26
+ }
27
+ function classifier(value) {
28
+ return {
29
+ classify: vi.fn(async () => value),
30
+ };
31
+ }
32
+ describe("resolveModelRoute", () => {
33
+ it("selects an allowed profile and resolves its concrete model policy", async () => {
34
+ const classify = classifier({
35
+ profile: "reasoning",
36
+ confidence: 0.92,
37
+ reason: "The request requires careful multi-step reasoning.",
38
+ labels: ["reasoning", "analysis"],
39
+ });
40
+ const result = await resolveModelRoute(input(), { classifier: classify });
41
+ expect(result).toEqual({
42
+ status: "routed",
43
+ source: "router",
44
+ profile: "reasoning",
45
+ selection: "openai/gpt-5",
46
+ confidence: 0.92,
47
+ reason: "The request requires careful multi-step reasoning.",
48
+ labels: ["reasoning", "analysis"],
49
+ latencyMs: expect.any(Number),
50
+ fallbackUsed: false,
51
+ });
52
+ expect(Object.isFrozen(result)).toBe(true);
53
+ expect(Object.isFrozen(result.labels)).toBe(true);
54
+ expect(classify.classify).toHaveBeenCalledWith({
55
+ version: 1,
56
+ surface: "agent",
57
+ source: "request",
58
+ input: "Compare the evidence carefully and explain the conclusion.",
59
+ profiles: ["fast", "balanced", "reasoning"],
60
+ labels: [],
61
+ }, {
62
+ signal: expect.any(AbortSignal),
63
+ });
64
+ });
65
+ it("maps the route into auditable Runtime Plan fields without raw classifier output", async () => {
66
+ const route = await resolveModelRoute(input(), {
67
+ classifier: classifier({
68
+ profile: "reasoning",
69
+ confidence: 0.92,
70
+ reason: "The request requires careful multi-step reasoning.",
71
+ labels: ["reasoning"],
72
+ }),
73
+ });
74
+ expect(modelRouteRuntimePlanFields(route)).toEqual({
75
+ model: {
76
+ selection: "openai/gpt-5",
77
+ profile: "reasoning",
78
+ source: "router",
79
+ },
80
+ audit: {
81
+ reasons: ["The request requires careful multi-step reasoning."],
82
+ warnings: [],
83
+ confidence: 0.92,
84
+ fallbackUsed: false,
85
+ latencyMs: {
86
+ modelRouter: route.latencyMs,
87
+ },
88
+ },
89
+ });
90
+ });
91
+ it("gives an explicit allowed profile precedence without invoking the classifier", async () => {
92
+ const classify = classifier({
93
+ profile: "reasoning",
94
+ confidence: 1,
95
+ reason: "Should not run",
96
+ labels: [],
97
+ });
98
+ const result = await resolveModelRoute(input({
99
+ explicitProfile: "fast",
100
+ }), { classifier: classify });
101
+ expect(result).toMatchObject({
102
+ status: "explicit",
103
+ source: "request",
104
+ profile: "fast",
105
+ selection: "openai/gpt-4o-mini",
106
+ confidence: 1,
107
+ fallbackUsed: false,
108
+ });
109
+ expect(classify.classify).not.toHaveBeenCalled();
110
+ });
111
+ it("cannot use an explicit or classified profile outside the allowlist", async () => {
112
+ await expect(resolveModelRoute(input({
113
+ explicitProfile: "reasoning",
114
+ config: {
115
+ mode: "auto",
116
+ fallbackProfile: "balanced",
117
+ allowedProfiles: ["fast", "balanced"],
118
+ },
119
+ }), {
120
+ classifier: classifier({
121
+ profile: "fast",
122
+ confidence: 1,
123
+ reason: "Allowed",
124
+ labels: [],
125
+ }),
126
+ })).rejects.toMatchObject({ code: "DISALLOWED_PROFILE" });
127
+ const result = await resolveModelRoute(input({
128
+ config: {
129
+ mode: "auto",
130
+ fallbackProfile: "balanced",
131
+ allowedProfiles: ["fast", "balanced"],
132
+ },
133
+ }), {
134
+ classifier: classifier({
135
+ profile: "reasoning",
136
+ confidence: 1,
137
+ reason: "Attempted widening",
138
+ labels: [],
139
+ }),
140
+ });
141
+ expect(result).toMatchObject({
142
+ status: "fallback",
143
+ source: "router",
144
+ profile: "balanced",
145
+ fallbackUsed: true,
146
+ reason: "Model router returned an invalid decision",
147
+ });
148
+ });
149
+ it.each([
150
+ {
151
+ name: "a raw model id",
152
+ output: {
153
+ profile: "openai/gpt-5",
154
+ confidence: 0.9,
155
+ reason: "Raw model",
156
+ labels: [],
157
+ },
158
+ },
159
+ {
160
+ name: "extra fields",
161
+ output: {
162
+ profile: "reasoning",
163
+ confidence: 0.9,
164
+ reason: "Unexpected field",
165
+ labels: [],
166
+ model: "openai/gpt-5",
167
+ },
168
+ },
169
+ {
170
+ name: "an invalid confidence",
171
+ output: {
172
+ profile: "reasoning",
173
+ confidence: 4,
174
+ reason: "Invalid confidence",
175
+ labels: [],
176
+ },
177
+ },
178
+ {
179
+ name: "an empty reason",
180
+ output: {
181
+ profile: "reasoning",
182
+ confidence: 0.9,
183
+ reason: " ",
184
+ labels: [],
185
+ },
186
+ },
187
+ {
188
+ name: "invalid JSON",
189
+ output: "{\"profile\":\"reasoning\"",
190
+ },
191
+ ])("falls back for $name", async ({ output }) => {
192
+ const result = await resolveModelRoute(input(), {
193
+ classifier: classifier(output),
194
+ });
195
+ expect(result).toMatchObject({
196
+ status: "fallback",
197
+ source: "router",
198
+ profile: "balanced",
199
+ selection: {
200
+ primary: "anthropic/claude-sonnet-4",
201
+ fallbacks: ["openai/gpt-4o-mini"],
202
+ },
203
+ reason: "Model router returned an invalid decision",
204
+ fallbackUsed: true,
205
+ });
206
+ });
207
+ it("accepts strict JSON text but still validates the selected profile", async () => {
208
+ const result = await resolveModelRoute(input(), {
209
+ classifier: classifier(JSON.stringify({
210
+ profile: "fast",
211
+ confidence: 0.88,
212
+ reason: "A short latency-sensitive request.",
213
+ labels: ["latency"],
214
+ })),
215
+ });
216
+ expect(result).toMatchObject({
217
+ status: "routed",
218
+ profile: "fast",
219
+ selection: "openai/gpt-4o-mini",
220
+ confidence: 0.88,
221
+ fallbackUsed: false,
222
+ });
223
+ });
224
+ it("falls back deterministically below the confidence threshold", async () => {
225
+ const result = await resolveModelRoute(input(), {
226
+ classifier: classifier({
227
+ profile: "reasoning",
228
+ confidence: 0.69,
229
+ reason: "Uncertain",
230
+ labels: ["reasoning"],
231
+ }),
232
+ });
233
+ expect(result).toMatchObject({
234
+ status: "fallback",
235
+ source: "router",
236
+ profile: "balanced",
237
+ confidence: 0.69,
238
+ reason: "Model router confidence was below 0.7",
239
+ fallbackUsed: true,
240
+ });
241
+ });
242
+ it("falls back on timeout, aborts the classifier, and ignores a late result", async () => {
243
+ let signal;
244
+ let resolveLate;
245
+ const classify = vi.fn((_input, options) => {
246
+ signal = options.signal;
247
+ return new Promise((resolve) => {
248
+ resolveLate = resolve;
249
+ });
250
+ });
251
+ const result = await resolveModelRoute(input({
252
+ config: {
253
+ mode: "auto",
254
+ fallbackProfile: "balanced",
255
+ allowedProfiles: ["fast", "balanced", "reasoning"],
256
+ timeoutMs: 5,
257
+ },
258
+ }), { classifier: { classify } });
259
+ expect(signal?.aborted).toBe(true);
260
+ expect(result).toMatchObject({
261
+ status: "fallback",
262
+ profile: "balanced",
263
+ reason: "Model router timed out after 5ms",
264
+ fallbackUsed: true,
265
+ });
266
+ resolveLate?.({
267
+ profile: "reasoning",
268
+ confidence: 1,
269
+ reason: "Too late",
270
+ labels: [],
271
+ });
272
+ await Promise.resolve();
273
+ expect(result.profile).toBe("balanced");
274
+ });
275
+ it("propagates caller cancellation and never converts it into execution fallback", async () => {
276
+ const abort = new AbortController();
277
+ let classifierSignal;
278
+ const classify = vi.fn((_input, options) => {
279
+ classifierSignal = options.signal;
280
+ return new Promise(() => { });
281
+ });
282
+ const pending = resolveModelRoute(input(), {
283
+ classifier: { classify },
284
+ signal: abort.signal,
285
+ });
286
+ abort.abort("client disconnected");
287
+ await expect(pending).rejects.toBeInstanceOf(ModelRouteCancelledError);
288
+ expect(classifierSignal?.aborted).toBe(true);
289
+ });
290
+ it("does not start classification when the caller signal is already aborted", async () => {
291
+ const abort = new AbortController();
292
+ abort.abort();
293
+ const classify = classifier({
294
+ profile: "fast",
295
+ confidence: 1,
296
+ reason: "Should not run",
297
+ labels: [],
298
+ });
299
+ await expect(resolveModelRoute(input(), {
300
+ classifier: classify,
301
+ signal: abort.signal,
302
+ })).rejects.toBeInstanceOf(ModelRouteCancelledError);
303
+ expect(classify.classify).not.toHaveBeenCalled();
304
+ });
305
+ it("clears the deadline after a successful decision", async () => {
306
+ let classifierSignal;
307
+ const result = await resolveModelRoute(input({
308
+ config: {
309
+ mode: "auto",
310
+ fallbackProfile: "balanced",
311
+ allowedProfiles: ["fast", "balanced"],
312
+ timeoutMs: 5,
313
+ },
314
+ }), {
315
+ classifier: {
316
+ classify: async (_classifierInput, options) => {
317
+ classifierSignal = options.signal;
318
+ return {
319
+ profile: "fast",
320
+ confidence: 1,
321
+ reason: "Fast route",
322
+ labels: [],
323
+ };
324
+ },
325
+ },
326
+ });
327
+ await new Promise((resolve) => setTimeout(resolve, 10));
328
+ expect(result.status).toBe("routed");
329
+ expect(classifierSignal?.aborted).toBe(false);
330
+ });
331
+ it("does not invoke the classifier when disabled, deterministic, or input is empty", async () => {
332
+ const classify = classifier({
333
+ profile: "reasoning",
334
+ confidence: 1,
335
+ reason: "Should not run",
336
+ labels: [],
337
+ });
338
+ const disabled = await resolveModelRoute(input({
339
+ config: {
340
+ mode: "off",
341
+ fallbackProfile: "balanced",
342
+ allowedProfiles: ["fast", "balanced"],
343
+ },
344
+ }), { classifier: classify });
345
+ const deterministic = await resolveModelRoute(input({
346
+ config: {
347
+ mode: "auto",
348
+ fallbackProfile: "fast",
349
+ allowedProfiles: ["fast"],
350
+ },
351
+ }), { classifier: classify });
352
+ const empty = await resolveModelRoute(input({ input: " " }), {
353
+ classifier: classify,
354
+ });
355
+ expect(disabled).toMatchObject({
356
+ status: "disabled",
357
+ source: "agent",
358
+ profile: "balanced",
359
+ fallbackUsed: false,
360
+ });
361
+ expect(deterministic).toMatchObject({
362
+ status: "skipped",
363
+ profile: "fast",
364
+ reason: "Only one model profile is allowed",
365
+ fallbackUsed: false,
366
+ });
367
+ expect(empty).toMatchObject({
368
+ status: "skipped",
369
+ profile: "balanced",
370
+ reason: "Model router input was empty",
371
+ fallbackUsed: false,
372
+ });
373
+ expect(classify.classify).not.toHaveBeenCalled();
374
+ });
375
+ it("bounds compact classifier input and never forwards profile definitions", async () => {
376
+ const classify = classifier({
377
+ profile: "balanced",
378
+ confidence: 0.9,
379
+ reason: "Balanced route",
380
+ labels: [],
381
+ });
382
+ const secret = "sk-super-secret";
383
+ const history = "previous private history";
384
+ await resolveModelRoute(input({
385
+ input: `current request ${"x".repeat(10_000)}`,
386
+ labels: ["channel", "channel", "x".repeat(200)],
387
+ profiles: {
388
+ ...profiles,
389
+ private: `${secret}/${history}`,
390
+ },
391
+ config: {
392
+ mode: "auto",
393
+ fallbackProfile: "balanced",
394
+ allowedProfiles: ["fast", "balanced", "reasoning"],
395
+ maxInputChars: 128,
396
+ },
397
+ }), { classifier: classify });
398
+ const classifierInput = vi.mocked(classify.classify).mock.calls[0]?.[0];
399
+ expect(classifierInput.input).toHaveLength(128);
400
+ expect(classifierInput.profiles).toEqual(["fast", "balanced", "reasoning"]);
401
+ expect(classifierInput.labels).toEqual(["channel", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"]);
402
+ const serialized = JSON.stringify(classifierInput);
403
+ expect(serialized).not.toContain(secret);
404
+ expect(serialized).not.toContain(history);
405
+ expect(serialized).not.toContain("openai/gpt");
406
+ expect(serialized).not.toContain("anthropic/claude");
407
+ });
408
+ it("falls back on classifier failure without leaking its error into audit text", async () => {
409
+ const result = await resolveModelRoute(input(), {
410
+ classifier: {
411
+ classify: async () => {
412
+ throw new Error("Bearer sk-private-provider-error");
413
+ },
414
+ },
415
+ });
416
+ expect(result).toMatchObject({
417
+ status: "fallback",
418
+ profile: "balanced",
419
+ reason: "Model router classifier failed",
420
+ fallbackUsed: true,
421
+ });
422
+ expect(JSON.stringify(result)).not.toContain("sk-private-provider-error");
423
+ });
424
+ it("rejects invalid configuration before invoking a classifier", async () => {
425
+ const classify = classifier({
426
+ profile: "fast",
427
+ confidence: 1,
428
+ reason: "Should not run",
429
+ labels: [],
430
+ });
431
+ await expect(resolveModelRoute(input({
432
+ config: {
433
+ mode: "auto",
434
+ fallbackProfile: "missing",
435
+ allowedProfiles: ["fast", "balanced"],
436
+ },
437
+ }), { classifier: classify })).rejects.toMatchObject({
438
+ code: "DISALLOWED_PROFILE",
439
+ });
440
+ await expect(resolveModelRoute(input({
441
+ config: {
442
+ mode: "auto",
443
+ fallbackProfile: "balanced",
444
+ allowedProfiles: ["fast", "balanced"],
445
+ timeoutMs: -1,
446
+ },
447
+ }), { classifier: classify })).rejects.toThrow("timeoutMs");
448
+ await expect(resolveModelRoute(input({
449
+ config: {
450
+ mode: "future",
451
+ fallbackProfile: "balanced",
452
+ allowedProfiles: ["fast", "balanced"],
453
+ },
454
+ }), { classifier: classify })).rejects.toThrow("mode");
455
+ expect(classify.classify).not.toHaveBeenCalled();
456
+ });
457
+ });
458
+ //# sourceMappingURL=model-router.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-router.test.js","sourceRoot":"","sources":["../../src/__tests__/model-router.test.ts"],"names":[],"mappings":"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"}
@@ -94,6 +94,10 @@ describe("createRuntimePlan", () => {
94
94
  warnings: ["classifier skipped"],
95
95
  policyIds: ["policy-1", "policy-1"],
96
96
  confidence: 0.98,
97
+ latencyMs: {
98
+ modelRouter: 12,
99
+ executionRouter: 0,
100
+ },
97
101
  fallbackUsed: true,
98
102
  },
99
103
  };
@@ -120,12 +124,18 @@ describe("createRuntimePlan", () => {
120
124
  warnings: ["classifier skipped"],
121
125
  policyIds: ["policy-1"],
122
126
  confidence: 0.98,
127
+ latencyMs: {
128
+ modelRouter: 12,
129
+ executionRouter: 0,
130
+ },
123
131
  fallbackUsed: true,
124
132
  });
125
133
  input.tools.allowed.push("write");
126
134
  input.context.sources.push("brain");
135
+ input.audit.latencyMs.modelRouter = 999;
127
136
  expect(plan.tools.allowed).toEqual(["bash", "read"]);
128
137
  expect(plan.context.sources).toEqual(["history", "memory"]);
138
+ expect(plan.audit.latencyMs?.modelRouter).toBe(12);
129
139
  });
130
140
  it("freezes the complete plan and its event envelope", () => {
131
141
  const plan = createRuntimePlan({
@@ -246,6 +256,16 @@ describe("createRuntimePlan", () => {
246
256
  },
247
257
  error: "confidence",
248
258
  },
259
+ {
260
+ name: "negative router latency",
261
+ input: {
262
+ surface: "agent",
263
+ source: "request",
264
+ model: { selection: "openai/gpt-5", source: "default" },
265
+ audit: { latencyMs: { modelRouter: -1 } },
266
+ },
267
+ error: "audit latencyMs",
268
+ },
249
269
  {
250
270
  name: "non-serializable context",
251
271
  input: {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-plan.test.js","sourceRoot":"","sources":["../../src/__tests__/runtime-plan.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime-plan.test.js","sourceRoot":"","sources":["../../src/__tests__/runtime-plan.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,8BAA8B,EAC9B,oBAAoB,GAErB,MAAM,0BAA0B,CAAC;AAElC,MAAM,YAAY,GAAG;IACnB,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY;IAC5B,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,0BAA0B,CAAC;CAChD,CAAC;AAEF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,iBAAiB,CAC5B;YACE,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE;gBACL,SAAS,EAAE,kBAAkB;gBAC7B,MAAM,EAAE,OAAO;aAChB;SACF,EACD,YAAY,CACb,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACnB,EAAE,EAAE,YAAY;YAChB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,MAAM,EAAE,SAAS;aAClB;YACD,KAAK,EAAE;gBACL,SAAS,EAAE,cAAc;gBACzB,MAAM,EAAE,OAAO;aAChB;YACD,OAAO,EAAE;gBACP,SAAS,EAAE,OAAO;gBAClB,MAAM,EAAE,SAAS;aAClB;YACD,KAAK,EAAE;gBACL,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,EAAE;aACZ;YACD,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL,UAAU,EAAE,0BAA0B;gBACtC,OAAO,EAAE,iBAAiB;gBAC1B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,EAAE;gBACb,YAAY,EAAE,KAAK;aACpB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,SAAS,GAAiC;YAC9C,EAAE,EAAE,YAAY;YAChB,QAAQ,EAAE,SAAS;YACnB,aAAa,EAAE,GAAG;YAClB,KAAK,EAAE,OAAO;YACd,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,wBAAwB;YAChC,SAAS,EAAE,CAAC;YACZ,YAAY,EAAE,KAAK;SACpB,CAAC;QACF,MAAM,KAAK,GAAG;YACZ,OAAO,EAAE,SAAkB;YAC3B,MAAM,EAAE,SAAkB;YAC1B,SAAS,EAAE;gBACT,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,SAAkB;aAC3B;YACD,KAAK,EAAE;gBACL,SAAS,EAAE;oBACT,OAAO,EAAE,gBAAgB;oBACzB,SAAS,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;iBACvE;gBACD,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,QAAiB;aAC1B;YACD,OAAO,EAAE;gBACP,SAAS,EAAE,OAAgB;gBAC3B,MAAM,EAAE,SAAkB;aAC3B;YACD,KAAK,EAAE;gBACL,QAAQ,EAAE,QAAiB;gBAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,CAAC;aACxC;YACD,UAAU,EAAE,CAAC,SAAS,CAAC;YACvB,OAAO,EAAE;gBACP,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;aAC/B;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,cAAc;gBACvB,OAAO,EAAE,CAAC,kBAAkB,CAAC;gBAC7B,QAAQ,EAAE,CAAC,oBAAoB,CAAC;gBAChC,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;gBACnC,UAAU,EAAE,IAAI;gBAChB,SAAS,EAAE;oBACT,WAAW,EAAE,EAAE;oBACf,eAAe,EAAE,CAAC;iBACnB;gBACD,YAAY,EAAE,IAAI;aACnB;SACF,CAAC;QAEF,MAAM,IAAI,GAAG,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAEpD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC;YAC7B,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS;SAClB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACzB,SAAS,EAAE;gBACT,OAAO,EAAE,cAAc;gBACvB,SAAS,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC;aACjD;YACD,OAAO,EAAE,UAAU;YACnB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC;YAC/B,OAAO,EAAE,cAAc;YACvB,OAAO,EAAE,CAAC,kBAAkB,CAAC;YAC7B,QAAQ,EAAE,CAAC,oBAAoB,CAAC;YAChC,SAAS,EAAE,CAAC,UAAU,CAAC;YACvB,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE;gBACT,WAAW,EAAE,EAAE;gBACf,eAAe,EAAE,CAAC;aACnB;YACD,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;QAEH,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,GAAG,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAG,iBAAiB,CAC5B;YACE,OAAO,EAAE,MAAM;YACf,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;YACvD,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE;YAC5B,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE;SAC/B,EACD,YAAY,CACb,CAAC;QACF,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,CAAC,CAAC;QAEnD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;YACpB,IAAI,EAAE,uBAAuB;YAC7B,IAAI;SACL,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,IAAI,GAAG,iBAAiB,CAC5B;YACE,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;YACvD,MAAM,EAAE,uBAAuB;YAC/B,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;YACxD,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE;YACpC,OAAO,EAAE,EAAE,aAAa,EAAE,eAAe,EAAE;SACrC,EACR,YAAY,CACb,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QAC1D,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QACpD,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,QAAQ,GAAG,iBAAiB,CAChC;YACE,OAAO,EAAE,SAAS;YAClB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE;SACtD,EACD,YAAY,CACb,CAAC;QACF,MAAM,UAAU,GAAG,oBAAoB,CAAC;YACtC,GAAG,QAAQ;YACX,WAAW,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;YACjC,MAAM,EAAE,gBAAgB;YACxB,KAAK,EAAE;gBACL,GAAG,QAAQ,CAAC,KAAK;gBACjB,mBAAmB,EAAE,6BAA6B;aACnD;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACnD,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,OAAO,CAC1D,0CAA0C,CAC3C,CAAC;QACF,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC;YAChC,EAAE,EAAE,QAAQ;YACZ,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE;YAChD,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;YACvD,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE;YAClD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE;YAC1C,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,EAAE;YACX,KAAK,EAAE;gBACL,UAAU,EAAE,YAAY;gBACxB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,EAAE;gBACZ,SAAS,EAAE,EAAE;gBACb,YAAY,EAAE,KAAK;aACpB;SACF,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACN;YACE,IAAI,EAAE,iBAAiB;YACvB,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM;gBACf,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;aACxD;YACD,KAAK,EAAE,sBAAsB;SAC9B;QACD;YACE,IAAI,EAAE,+BAA+B;YACrC,KAAK,EAAE;gBACL,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE;gBAC9C,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;aACxD;YACD,KAAK,EAAE,WAAW;SACnB;QACD;YACE,IAAI,EAAE,kCAAkC;YACxC,KAAK,EAAE;gBACL,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,SAAS;gBACjB,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE;gBACpE,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;aACxD;YACD,KAAK,EAAE,sBAAsB;SAC9B;QACD;YACE,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE;gBACL,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;gBACvD,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;aACzB;YACD,KAAK,EAAE,YAAY;SACpB;QACD;YACE,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE;gBACL,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;gBACvD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;aAC1C;YACD,KAAK,EAAE,iBAAiB;SACzB;QACD;YACE,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE;gBACL,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;gBACvD,OAAO,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE;aACvC;YACD,KAAK,EAAE,mBAAmB;SAC3B;QACD;YACE,IAAI,EAAE,wBAAwB;YAC9B,KAAK,EAAE;gBACL,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE;oBACL,SAAS,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE;oBACvD,MAAM,EAAE,SAAS;iBAClB;aACF;YACD,KAAK,EAAE,eAAe;SACvB;QACD;YACE,IAAI,EAAE,uBAAuB;YAC7B,KAAK,EAAE;gBACL,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;gBACvD,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;aACjC;YACD,KAAK,EAAE,cAAc;SACtB;QACD;YACE,IAAI,EAAE,4BAA4B;YAClC,KAAK,EAAE;gBACL,OAAO,EAAE,OAAO;gBAChB,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;gBACvD,UAAU,EAAE,CAAC;wBACX,EAAE,EAAE,YAAY;wBAChB,QAAQ,EAAE,UAAU;wBACpB,KAAK,EAAE,OAAO;wBACd,MAAM,EAAE,OAAO;wBACf,IAAI,EAAE,KAAK;wBACX,MAAM,EAAE,MAAM;wBACd,SAAS,EAAE,CAAC,CAAC;qBACd,CAAC;aACH;YACD,KAAK,EAAE,4BAA4B;SACpC;KACF,CAAC,CAAC,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;QACvC,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAY,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAE5D,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAC5B;YACE,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;YACvD,OAAO,EAAE,MAAa;SACvB,EACD,YAAY,CACb,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAC5B;YACE,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;YACvD,OAAO,EAAE,QAAQ;SAClB,EACD,YAAY,CACb,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAC5B;YACE,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;SACxD,EACD;YACE,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG;YACnB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;SAC/B,CACF,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAC5B;YACE,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE;SACxD,EACD;YACE,QAAQ,EAAE,GAAG,EAAE,CAAC,YAAY;YAC5B,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;SAC/B,CACF,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=task-runner-model-profiles.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-runner-model-profiles.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/task-runner-model-profiles.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { HookRegistry } from "../hooks.js";
3
+ import { TaskRunner } from "../task-runner.js";
4
+ describe("TaskRunner model profiles", () => {
5
+ it("passes the project profile registry and explicit agent selection to the runner", async () => {
6
+ const task = {
7
+ id: "task-1",
8
+ title: "Use a model profile",
9
+ description: "Run with the configured profile.",
10
+ assignTo: "profiled-agent",
11
+ dependsOn: [],
12
+ status: "pending",
13
+ expectations: [],
14
+ metrics: [],
15
+ retries: 0,
16
+ maxRetries: 0,
17
+ createdAt: "2026-07-28T00:00:00.000Z",
18
+ updatedAt: "2026-07-28T00:00:00.000Z",
19
+ };
20
+ const modelProfiles = {
21
+ fast: "openai/gpt-4o-mini",
22
+ };
23
+ const modelAllowlist = {
24
+ "openai/gpt-4o-mini": {},
25
+ };
26
+ const agent = {
27
+ name: "profiled-agent",
28
+ model: { profile: "fast" },
29
+ allowedModelProfiles: ["fast"],
30
+ };
31
+ let spawnedConfig;
32
+ const ctx = {
33
+ emitter: { emit: vi.fn() },
34
+ taskStore: {
35
+ transition: vi.fn(),
36
+ updateTask: vi.fn(),
37
+ },
38
+ runStore: {
39
+ upsertRun: vi.fn(),
40
+ getRun: vi.fn().mockResolvedValue({ status: "running" }),
41
+ updateSpawnInfo: vi.fn(),
42
+ },
43
+ memoryStore: {
44
+ get: vi.fn().mockResolvedValue(""),
45
+ },
46
+ agentStore: {
47
+ getAgent: vi.fn().mockResolvedValue(agent),
48
+ },
49
+ hooks: new HookRegistry(),
50
+ config: {
51
+ version: "1",
52
+ project: "profile-test",
53
+ teams: [],
54
+ tasks: [],
55
+ settings: {
56
+ maxRetries: 0,
57
+ workDir: ".",
58
+ logLevel: "quiet",
59
+ modelProfiles,
60
+ modelAllowlist,
61
+ },
62
+ },
63
+ spawner: {
64
+ spawn: vi.fn(async (config) => {
65
+ spawnedConfig = config;
66
+ return { pid: 123, configPath: "memory://task-1" };
67
+ }),
68
+ isAlive: vi.fn(),
69
+ kill: vi.fn(),
70
+ },
71
+ workDir: "/tmp/profile-test",
72
+ agentWorkDir: "/tmp/profile-test",
73
+ polpoDir: "/tmp/profile-test/.polpo",
74
+ assessFn: vi.fn(),
75
+ };
76
+ await new TaskRunner(ctx).spawnForTask(task);
77
+ expect(spawnedConfig).toBeDefined();
78
+ expect(spawnedConfig?.agent.model).toEqual({ profile: "fast" });
79
+ expect(spawnedConfig?.agent.allowedModelProfiles).toEqual(["fast"]);
80
+ expect(spawnedConfig?.modelProfiles).toBe(modelProfiles);
81
+ expect(spawnedConfig?.modelAllowlist).toBe(modelAllowlist);
82
+ });
83
+ });
84
+ //# sourceMappingURL=task-runner-model-profiles.test.js.map