@polpo-ai/core 0.15.36 → 0.15.38

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 (79) hide show
  1. package/README.md +102 -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.d.ts +2 -0
  11. package/dist/__tests__/runtime-plan.test.d.ts.map +1 -0
  12. package/dist/__tests__/runtime-plan.test.js +358 -0
  13. package/dist/__tests__/runtime-plan.test.js.map +1 -0
  14. package/dist/__tests__/task-runner-model-profiles.test.d.ts +2 -0
  15. package/dist/__tests__/task-runner-model-profiles.test.d.ts.map +1 -0
  16. package/dist/__tests__/task-runner-model-profiles.test.js +84 -0
  17. package/dist/__tests__/task-runner-model-profiles.test.js.map +1 -0
  18. package/dist/adapter.d.ts +8 -1
  19. package/dist/adapter.d.ts.map +1 -1
  20. package/dist/assessment-orchestrator.d.ts +1 -0
  21. package/dist/assessment-orchestrator.d.ts.map +1 -1
  22. package/dist/assessment-orchestrator.js +11 -4
  23. package/dist/assessment-orchestrator.js.map +1 -1
  24. package/dist/escalation-manager.d.ts.map +1 -1
  25. package/dist/escalation-manager.js +6 -1
  26. package/dist/escalation-manager.js.map +1 -1
  27. package/dist/events.d.ts +2 -0
  28. package/dist/events.d.ts.map +1 -1
  29. package/dist/index.d.ts +5 -0
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +4 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/loop/types.d.ts +3 -3
  34. package/dist/loop/types.d.ts.map +1 -1
  35. package/dist/mission-executor.d.ts.map +1 -1
  36. package/dist/mission-executor.js +2 -2
  37. package/dist/mission-executor.js.map +1 -1
  38. package/dist/model-profiles.d.ts +39 -0
  39. package/dist/model-profiles.d.ts.map +1 -0
  40. package/dist/model-profiles.js +181 -0
  41. package/dist/model-profiles.js.map +1 -0
  42. package/dist/model-router.d.ts +98 -0
  43. package/dist/model-router.d.ts.map +1 -0
  44. package/dist/model-router.js +358 -0
  45. package/dist/model-router.js.map +1 -0
  46. package/dist/runtime-plan/events.d.ts +5 -0
  47. package/dist/runtime-plan/events.d.ts.map +1 -0
  48. package/dist/runtime-plan/events.js +10 -0
  49. package/dist/runtime-plan/events.js.map +1 -0
  50. package/dist/runtime-plan/index.d.ts +5 -0
  51. package/dist/runtime-plan/index.d.ts.map +1 -0
  52. package/dist/runtime-plan/index.js +4 -0
  53. package/dist/runtime-plan/index.js.map +1 -0
  54. package/dist/runtime-plan/planner.d.ts +10 -0
  55. package/dist/runtime-plan/planner.d.ts.map +1 -0
  56. package/dist/runtime-plan/planner.js +322 -0
  57. package/dist/runtime-plan/planner.js.map +1 -0
  58. package/dist/runtime-plan/settings.d.ts +18 -0
  59. package/dist/runtime-plan/settings.d.ts.map +1 -0
  60. package/dist/runtime-plan/settings.js +63 -0
  61. package/dist/runtime-plan/settings.js.map +1 -0
  62. package/dist/runtime-plan/types.d.ts +112 -0
  63. package/dist/runtime-plan/types.d.ts.map +1 -0
  64. package/dist/runtime-plan/types.js +2 -0
  65. package/dist/runtime-plan/types.js.map +1 -0
  66. package/dist/schemas.d.ts +79 -19
  67. package/dist/schemas.d.ts.map +1 -1
  68. package/dist/schemas.js +16 -2
  69. package/dist/schemas.js.map +1 -1
  70. package/dist/task-runner.d.ts.map +1 -1
  71. package/dist/task-runner.js +5 -2
  72. package/dist/task-runner.js.map +1 -1
  73. package/dist/types/agent.d.ts +5 -3
  74. package/dist/types/agent.d.ts.map +1 -1
  75. package/dist/types/agent.js.map +1 -1
  76. package/dist/types/config.d.ts +24 -3
  77. package/dist/types/config.d.ts.map +1 -1
  78. package/dist/types/config.js.map +1 -1
  79. package/package.json +13 -1
@@ -0,0 +1,358 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { createRuntimePlan, createRuntimePlanResolvedEvent, normalizeRuntimePlan, } from "../runtime-plan/index.js";
3
+ const fixedFactory = {
4
+ createId: () => "plan-fixed",
5
+ now: () => new Date("2026-07-28T10:00:00.000Z"),
6
+ };
7
+ describe("createRuntimePlan", () => {
8
+ it("resolves deterministic safe defaults", () => {
9
+ const plan = createRuntimePlan({
10
+ surface: "agent",
11
+ source: "request",
12
+ model: {
13
+ selection: " openai/gpt-5 ",
14
+ source: "agent",
15
+ },
16
+ }, fixedFactory);
17
+ expect(plan).toEqual({
18
+ id: "plan-fixed",
19
+ surface: "agent",
20
+ source: "request",
21
+ execution: {
22
+ mode: "direct",
23
+ source: "default",
24
+ },
25
+ model: {
26
+ selection: "openai/gpt-5",
27
+ source: "agent",
28
+ },
29
+ sandbox: {
30
+ isolation: "reuse",
31
+ source: "default",
32
+ },
33
+ tools: {
34
+ exposure: "direct",
35
+ allowed: [],
36
+ },
37
+ guardrails: [],
38
+ context: {},
39
+ audit: {
40
+ resolvedAt: "2026-07-28T10:00:00.000Z",
41
+ planner: "runtime-default",
42
+ reasons: [],
43
+ warnings: [],
44
+ policyIds: [],
45
+ fallbackUsed: false,
46
+ },
47
+ });
48
+ });
49
+ it("normalizes explicit decisions without sharing mutable input", () => {
50
+ const guardrail = {
51
+ id: "decision-1",
52
+ policyId: "secrets",
53
+ policyVersion: "1",
54
+ phase: "input",
55
+ action: "audit",
56
+ risk: "low",
57
+ reason: "Potential secret shape",
58
+ latencyMs: 2,
59
+ fallbackUsed: false,
60
+ };
61
+ const input = {
62
+ surface: "channel",
63
+ source: "channel",
64
+ execution: {
65
+ mode: "loop",
66
+ loop: " support ",
67
+ source: "request",
68
+ },
69
+ model: {
70
+ selection: {
71
+ primary: " openai/gpt-5 ",
72
+ fallbacks: ["anthropic/claude", "anthropic/claude", " google/gemini "],
73
+ },
74
+ profile: " balanced ",
75
+ source: "router",
76
+ },
77
+ sandbox: {
78
+ isolation: "fresh",
79
+ source: "request",
80
+ },
81
+ tools: {
82
+ exposure: "router",
83
+ allowed: ["bash", " read ", "", "bash"],
84
+ },
85
+ guardrails: [guardrail],
86
+ context: {
87
+ policy: "bounded",
88
+ maxTokens: 8_000,
89
+ sources: ["history", "memory"],
90
+ },
91
+ audit: {
92
+ planner: "host-planner",
93
+ reasons: ["explicit request"],
94
+ warnings: ["classifier skipped"],
95
+ policyIds: ["policy-1", "policy-1"],
96
+ confidence: 0.98,
97
+ latencyMs: {
98
+ modelRouter: 12,
99
+ executionRouter: 0,
100
+ },
101
+ fallbackUsed: true,
102
+ },
103
+ };
104
+ const plan = createRuntimePlan(input, fixedFactory);
105
+ expect(plan.execution).toEqual({
106
+ mode: "loop",
107
+ loop: "support",
108
+ source: "request",
109
+ });
110
+ expect(plan.model).toEqual({
111
+ selection: {
112
+ primary: "openai/gpt-5",
113
+ fallbacks: ["anthropic/claude", "google/gemini"],
114
+ },
115
+ profile: "balanced",
116
+ source: "router",
117
+ });
118
+ expect(plan.tools.allowed).toEqual(["bash", "read"]);
119
+ expect(plan.guardrails).toEqual([guardrail]);
120
+ expect(plan.context).toEqual(input.context);
121
+ expect(plan.audit).toMatchObject({
122
+ planner: "host-planner",
123
+ reasons: ["explicit request"],
124
+ warnings: ["classifier skipped"],
125
+ policyIds: ["policy-1"],
126
+ confidence: 0.98,
127
+ latencyMs: {
128
+ modelRouter: 12,
129
+ executionRouter: 0,
130
+ },
131
+ fallbackUsed: true,
132
+ });
133
+ input.tools.allowed.push("write");
134
+ input.context.sources.push("brain");
135
+ input.audit.latencyMs.modelRouter = 999;
136
+ expect(plan.tools.allowed).toEqual(["bash", "read"]);
137
+ expect(plan.context.sources).toEqual(["history", "memory"]);
138
+ expect(plan.audit.latencyMs?.modelRouter).toBe(12);
139
+ });
140
+ it("freezes the complete plan and its event envelope", () => {
141
+ const plan = createRuntimePlan({
142
+ surface: "task",
143
+ source: "task",
144
+ model: { selection: "openai/gpt-5", source: "default" },
145
+ tools: { allowed: ["bash"] },
146
+ context: { sources: ["task"] },
147
+ }, fixedFactory);
148
+ const event = createRuntimePlanResolvedEvent(plan);
149
+ expect(Object.isFrozen(plan)).toBe(true);
150
+ expect(Object.isFrozen(plan.model)).toBe(true);
151
+ expect(Object.isFrozen(plan.tools.allowed)).toBe(true);
152
+ expect(Object.isFrozen(plan.context.sources)).toBe(true);
153
+ expect(Object.isFrozen(event)).toBe(true);
154
+ expect(event).toEqual({
155
+ type: "runtime.plan.resolved",
156
+ plan,
157
+ });
158
+ });
159
+ it("drops unknown sensitive input instead of retaining it in the audit contract", () => {
160
+ const plan = createRuntimePlan({
161
+ surface: "webhook",
162
+ source: "request",
163
+ model: { selection: "openai/gpt-5", source: "request" },
164
+ prompt: "private system prompt",
165
+ messages: [{ role: "user", content: "private message" }],
166
+ credentials: { apiKey: "sk-secret" },
167
+ headers: { authorization: "Bearer secret" },
168
+ }, fixedFactory);
169
+ const serialized = JSON.stringify(plan);
170
+ expect(serialized).not.toContain("private system prompt");
171
+ expect(serialized).not.toContain("private message");
172
+ expect(serialized).not.toContain("sk-secret");
173
+ expect(serialized).not.toContain("Bearer secret");
174
+ });
175
+ it("normalizes untrusted host output and strips unknown fields", () => {
176
+ const original = createRuntimePlan({
177
+ surface: "channel",
178
+ source: "channel",
179
+ model: { selection: "openai/gpt-5", source: "agent" },
180
+ }, fixedFactory);
181
+ const normalized = normalizeRuntimePlan({
182
+ ...original,
183
+ credentials: { apiKey: "secret" },
184
+ prompt: "private prompt",
185
+ audit: {
186
+ ...original.audit,
187
+ rawClassifierOutput: "private classifier response",
188
+ },
189
+ });
190
+ expect(normalized).toEqual(original);
191
+ expect(normalized).not.toBe(original);
192
+ const serialized = JSON.stringify(normalized);
193
+ expect(serialized).not.toContain("secret");
194
+ expect(serialized).not.toContain("private prompt");
195
+ expect(serialized).not.toContain("private classifier response");
196
+ });
197
+ it("rejects malformed plans returned by an untyped host", () => {
198
+ expect(() => normalizeRuntimePlan({ id: "plan-1" })).toThrow("Runtime plan execution must be an object");
199
+ expect(() => normalizeRuntimePlan({
200
+ id: "plan-1",
201
+ surface: "agent",
202
+ source: "request",
203
+ execution: { mode: "direct", source: "default" },
204
+ model: { selection: "openai/gpt-5", source: "default" },
205
+ sandbox: { isolation: "reuse", source: "default" },
206
+ tools: { exposure: "direct", allowed: [] },
207
+ guardrails: [],
208
+ context: {},
209
+ audit: {
210
+ resolvedAt: "not-a-date",
211
+ planner: "host",
212
+ reasons: [],
213
+ warnings: [],
214
+ policyIds: [],
215
+ fallbackUsed: false,
216
+ },
217
+ })).toThrow("valid date");
218
+ });
219
+ it.each([
220
+ {
221
+ name: "unknown surface",
222
+ input: {
223
+ surface: "chat",
224
+ source: "request",
225
+ model: { selection: "openai/gpt-5", source: "default" },
226
+ },
227
+ error: "Runtime plan surface",
228
+ },
229
+ {
230
+ name: "loop execution without a loop",
231
+ input: {
232
+ surface: "agent",
233
+ source: "request",
234
+ execution: { mode: "loop", source: "request" },
235
+ model: { selection: "openai/gpt-5", source: "default" },
236
+ },
237
+ error: "loop name",
238
+ },
239
+ {
240
+ name: "direct execution carrying a loop",
241
+ input: {
242
+ surface: "agent",
243
+ source: "request",
244
+ execution: { mode: "direct", loop: "unexpected", source: "request" },
245
+ model: { selection: "openai/gpt-5", source: "default" },
246
+ },
247
+ error: "Direct runtime plans",
248
+ },
249
+ {
250
+ name: "invalid confidence",
251
+ input: {
252
+ surface: "agent",
253
+ source: "request",
254
+ model: { selection: "openai/gpt-5", source: "default" },
255
+ audit: { confidence: 2 },
256
+ },
257
+ error: "confidence",
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
+ },
269
+ {
270
+ name: "non-serializable context",
271
+ input: {
272
+ surface: "agent",
273
+ source: "request",
274
+ model: { selection: "openai/gpt-5", source: "default" },
275
+ context: { transform: () => "unsafe" },
276
+ },
277
+ error: "JSON-serializable",
278
+ },
279
+ {
280
+ name: "invalid model fallback",
281
+ input: {
282
+ surface: "agent",
283
+ source: "request",
284
+ model: {
285
+ selection: { primary: "openai/gpt-5", fallbacks: [42] },
286
+ source: "default",
287
+ },
288
+ },
289
+ error: "model strings",
290
+ },
291
+ {
292
+ name: "non-string tool grant",
293
+ input: {
294
+ surface: "agent",
295
+ source: "request",
296
+ model: { selection: "openai/gpt-5", source: "default" },
297
+ tools: { allowed: ["bash", 42] },
298
+ },
299
+ error: "only strings",
300
+ },
301
+ {
302
+ name: "negative guardrail latency",
303
+ input: {
304
+ surface: "agent",
305
+ source: "request",
306
+ model: { selection: "openai/gpt-5", source: "default" },
307
+ guardrails: [{
308
+ id: "decision-1",
309
+ policyId: "policy-1",
310
+ phase: "input",
311
+ action: "audit",
312
+ risk: "low",
313
+ reason: "test",
314
+ latencyMs: -1,
315
+ }],
316
+ },
317
+ error: "non-negative finite number",
318
+ },
319
+ ])("rejects $name", ({ input, error }) => {
320
+ expect(() => createRuntimePlan(input, fixedFactory)).toThrow(error);
321
+ });
322
+ it("rejects cyclic and prototype-polluting context", () => {
323
+ const cyclic = {};
324
+ cyclic.self = cyclic;
325
+ const polluted = JSON.parse('{"__proto__":{"admin":true}}');
326
+ expect(() => createRuntimePlan({
327
+ surface: "agent",
328
+ source: "request",
329
+ model: { selection: "openai/gpt-5", source: "default" },
330
+ context: cyclic,
331
+ }, fixedFactory)).toThrow("cyclic value");
332
+ expect(() => createRuntimePlan({
333
+ surface: "agent",
334
+ source: "request",
335
+ model: { selection: "openai/gpt-5", source: "default" },
336
+ context: polluted,
337
+ }, fixedFactory)).toThrow("__proto__ is not allowed");
338
+ });
339
+ it("rejects invalid factory output before emitting a plan", () => {
340
+ expect(() => createRuntimePlan({
341
+ surface: "agent",
342
+ source: "request",
343
+ model: { selection: "openai/gpt-5", source: "default" },
344
+ }, {
345
+ createId: () => " ",
346
+ now: () => new Date("invalid"),
347
+ })).toThrow("Runtime plan id");
348
+ expect(() => createRuntimePlan({
349
+ surface: "agent",
350
+ source: "request",
351
+ model: { selection: "openai/gpt-5", source: "default" },
352
+ }, {
353
+ createId: () => "plan-valid",
354
+ now: () => new Date("invalid"),
355
+ })).toThrow("valid date");
356
+ });
357
+ });
358
+ //# sourceMappingURL=runtime-plan.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-plan.test.js","sourceRoot":"","sources":["../../src/__tests__/runtime-plan.test.ts"],"names":[],"mappings":"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"}
@@ -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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-runner-model-profiles.test.js","sourceRoot":"","sources":["../../src/__tests__/task-runner-model-profiles.test.ts"],"names":[],"mappings":"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"}
package/dist/adapter.d.ts CHANGED
@@ -1,10 +1,11 @@
1
- import type { AgentActivity, TaskResult, TaskOutcome, ReasoningLevel, AgentConfig } from "@polpo-ai/core/types";
1
+ import type { AgentActivity, AgentConfig, ModelAllowlistEntry, ModelProfileRegistry, ReasoningLevel, TaskOutcome, TaskResult } from "@polpo-ai/core/types";
2
2
  import type { VaultStore } from "@polpo-ai/core/vault-store";
3
3
  import type { MemoryStore } from "@polpo-ai/core/memory-store";
4
4
  import type { FileSystem } from "@polpo-ai/core/filesystem";
5
5
  import type { Shell } from "@polpo-ai/core/shell";
6
6
  import type { LoopResumeState } from "@polpo-ai/core/loop-run-store";
7
7
  import type { ModelSelection } from "./model-policy.js";
8
+ import type { RuntimePlan } from "./runtime-plan/index.js";
8
9
  import type { RuntimeSandboxOptions } from "./runtime-sandbox.js";
9
10
  /**
10
11
  * Handle returned by the engine after spawning an agent.
@@ -51,6 +52,10 @@ export interface SpawnContext {
51
52
  emailAllowedDomains?: string[];
52
53
  /** Global reasoning level from settings — used as fallback when agent doesn't specify one. */
53
54
  reasoning?: ReasoningLevel;
55
+ /** Project model profiles available to this runtime host. */
56
+ modelProfiles?: ModelProfileRegistry;
57
+ /** Project model allowlist enforced after profile expansion. */
58
+ modelAllowlist?: Record<string, ModelAllowlistEntry>;
54
59
  /** Vault store — for resolving agent credentials at runtime. */
55
60
  vaultStore?: VaultStore;
56
61
  /** Memory store — for agent-scoped memory_* tools. */
@@ -117,6 +122,8 @@ export interface SpawnContext {
117
122
  * takes no dependency on `ai`.
118
123
  */
119
124
  export interface ChatSessionInjection {
125
+ /** Frozen, secret-free planning decision for this invocation. */
126
+ runtimePlan?: RuntimePlan;
120
127
  /** Resolved agent config (for the RunnerConfig the driver builds). */
121
128
  agent: AgentConfig;
122
129
  /** Optional session title (first user text). */
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAChH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAElE;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,QAAQ,EAAE,aAAa,CAAC;IACxB,4DAA4D;IAC5D,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC1B,0CAA0C;IAC1C,OAAO,IAAI,OAAO,CAAC;IACnB,6BAA6B;IAC7B,IAAI,IAAI,IAAI,CAAC;IACb;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACxD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC;CAC1B;AAED,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B,gFAAgF;IAChF,QAAQ,EAAE,MAAM,CAAC;IACjB,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,8FAA8F;IAC9F,SAAS,CAAC,EAAE,cAAc,CAAC;IAC3B,gEAAgE;IAChE,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,sDAAsD;IACtD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,qFAAqF;IACrF,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,gFAAgF;IAChF,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,+EAA+E;IAC/E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;;;;;;OAOG;IACH,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAA;KAAE,KAAK,IAAI,CAAC;IACzE;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACxD;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,sEAAsE;IACtE,KAAK,EAAE,WAAW,CAAC;IACnB,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qFAAqF;IACrF,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,qFAAqF;IACrF,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,qFAAqF;IACrF,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;QAC/C,KAAK,EAAE;YAAE,OAAO,EAAE,OAAO,CAAC;YAAC,aAAa,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACxE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;KAC3D,CAAC,CAAC;IACH,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,QAAQ,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iDAAiD;IACjD,YAAY,EAAE,OAAO,EAAE,CAAC;IACxB,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,sFAAsF;IACtF,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3E,+EAA+E;IAC/E,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,+DAA+D;IAC/D,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,0DAA0D;IAC1D,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,mFAAmF;IACnF,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,2DAA2D;IAC3D,cAAc,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
@@ -48,6 +48,7 @@ export declare class AssessmentOrchestrator {
48
48
  private ctx;
49
49
  private ports;
50
50
  constructor(ctx: OrchestratorContext, ports?: AssessmentPorts);
51
+ private orchestratorModel;
51
52
  /**
52
53
  * Build a rich ReviewContext from all available data sources:
53
54
  * - RunStore activity (files, tool counts)
@@ -1 +1 @@
1
- {"version":3,"file":"assessment-orchestrator.d.ts","sourceRoot":"","sources":["../src/assessment-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAoD,WAAW,EAAE,MAAM,YAAY,CAAC;AAUlH;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,iFAAiF;IACjF,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC1F,kDAAkD;IAClD,QAAQ,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IAC1C,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjG,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,KAAK,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3H;AAED;;;GAGG;AACH,qBAAa,sBAAsB;IAGrB,OAAO,CAAC,GAAG;IAFvB,OAAO,CAAC,KAAK,CAAkB;gBAEX,GAAG,EAAE,mBAAmB,EAAE,KAAK,CAAC,EAAE,eAAe;IAIrE;;;;;;OAMG;YACW,kBAAkB;IAmChC;;;;OAIG;YACW,gBAAgB;IA2B9B,wEAAwE;IACxE,OAAO,CAAC,aAAa;IAKrB,uEAAuE;IACvE,OAAO,CAAC,oBAAoB;IAKtB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCrE;;OAEG;YACW,sBAAsB;IAwBpC;;OAEG;YACW,eAAe;IAyC7B;;;OAGG;YACW,oBAAoB;IAkDlC;;;OAGG;YACW,sBAAsB;IA8BpC;;OAEG;YACW,mBAAmB;IAgCjC;;OAEG;YACW,iBAAiB;IA+F/B;;;;;OAKG;YACW,0BAA0B;IA+GxC;;0EAEsE;IACtE,OAAO,CAAC,cAAc;IAoBtB;;;;;OAKG;YACW,iBAAiB;IAmG/B,mFAAmF;IACnF,OAAO,CAAC,SAAS;IAoBjB;;;OAGG;YACW,UAAU;IAsDxB,kEAAkE;IAC5D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAsGlF"}
1
+ {"version":3,"file":"assessment-orchestrator.d.ts","sourceRoot":"","sources":["../src/assessment-orchestrator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAErE,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAoD,WAAW,EAAE,MAAM,YAAY,CAAC;AAWlH;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACvC,iFAAiF;IACjF,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC1F,kDAAkD;IAClD,QAAQ,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;IAC1C,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC;;;;OAIG;IACH,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjG,sFAAsF;IACtF,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,KAAK,OAAO,CAAC;QAAE,UAAU,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3H;AAED;;;GAGG;AACH,qBAAa,sBAAsB;IAGrB,OAAO,CAAC,GAAG;IAFvB,OAAO,CAAC,KAAK,CAAkB;gBAEX,GAAG,EAAE,mBAAmB,EAAE,KAAK,CAAC,EAAE,eAAe;IAIrE,OAAO,CAAC,iBAAiB;IAOzB;;;;;;OAMG;YACW,kBAAkB;IAmChC;;;;OAIG;YACW,gBAAgB;IA2B9B,wEAAwE;IACxE,OAAO,CAAC,aAAa;IAKrB,uEAAuE;IACvE,OAAO,CAAC,oBAAoB;IAKtB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCrE;;OAEG;YACW,sBAAsB;IAwBpC;;OAEG;YACW,eAAe;IAyC7B;;;OAGG;YACW,oBAAoB;IAkDlC;;;OAGG;YACW,sBAAsB;IA8BpC;;OAEG;YACW,mBAAmB;IAgCjC;;OAEG;YACW,iBAAiB;IA+F/B;;;;;OAKG;YACW,0BAA0B;IA+GxC;;0EAEsE;IACtE,OAAO,CAAC,cAAc;IAoBtB;;;;;OAKG;YACW,iBAAiB;IAmG/B,mFAAmF;IACnF,OAAO,CAAC,SAAS;IAoBjB;;;OAGG;YACW,UAAU;IAsDxB,kEAAkE;IAC5D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAsGlF"}
@@ -10,6 +10,7 @@ import { resolveMissionStore, resolveMissionForTask } from "./mission-store.js";
10
10
  import { setAssessment } from "./types.js";
11
11
  import { buildFixPrompt, buildRetryPrompt, buildSideEffectFixPrompt, buildSideEffectRetryPrompt, buildJudgePrompt } from "./assessment-prompts.js";
12
12
  import { looksLikeQuestion, classifyAsQuestion } from "./question-detector.js";
13
+ import { resolveConfiguredModelSelection } from "./model-profiles.js";
13
14
  /**
14
15
  * Handles the full assessment pipeline: result collection → question detection →
15
16
  * assessment → auto-correction → judge → fix/retry/fail.
@@ -21,6 +22,12 @@ export class AssessmentOrchestrator {
21
22
  this.ctx = ctx;
22
23
  this.ports = ports ?? {};
23
24
  }
25
+ orchestratorModel() {
26
+ const selection = this.ctx.config.settings.orchestratorModel;
27
+ return selection
28
+ ? resolveConfiguredModelSelection(selection, this.ctx.config.settings).selection
29
+ : undefined;
30
+ }
24
31
  /**
25
32
  * Build a rich ReviewContext from all available data sources:
26
33
  * - RunStore activity (files, tool counts)
@@ -147,7 +154,7 @@ export class AssessmentOrchestrator {
147
154
  ? (stdout, model) => this.ports.classifyAsQuestion(stdout, model)
148
155
  : (stdout, model) => classifyAsQuestion(stdout, queryLLM, model);
149
156
  try {
150
- const classification = await classify(result.stdout, this.ctx.config.settings.orchestratorModel);
157
+ const classification = await classify(result.stdout, this.orchestratorModel());
151
158
  if (classification.isQuestion) {
152
159
  await this.resolveAndRerun(taskId, task, result, classification.question);
153
160
  }
@@ -167,7 +174,7 @@ export class AssessmentOrchestrator {
167
174
  this.ctx.emitter.emit("task:question", { taskId, question });
168
175
  // Use the generateAnswer port if provided, otherwise build the answer inline via queryLLM
169
176
  const answerPromise = this.ports.generateAnswer
170
- ? this.ports.generateAnswer(task, question, this.ctx.config.settings.orchestratorModel)
177
+ ? this.ports.generateAnswer(task, question, this.orchestratorModel())
171
178
  : this.generateAnswerInline(task, question);
172
179
  try {
173
180
  const answer = await answerPromise;
@@ -231,7 +238,7 @@ export class AssessmentOrchestrator {
231
238
  }
232
239
  parts.push(``, `## Agent's Question`, question, ``, `Answer the question directly and concisely. Provide specific, actionable information.`, `If you're unsure, give your best guidance based on available context.`, `Do NOT ask follow-up questions. Just answer.`);
233
240
  const prompt = parts.join("\n");
234
- return (await this.ctx.queryLLM(prompt, this.ctx.config.settings.orchestratorModel)).text;
241
+ return (await this.ctx.queryLLM(prompt, this.orchestratorModel())).text;
235
242
  }
236
243
  /**
237
244
  * Run assessment with retry when all LLM reviewers fail.
@@ -547,7 +554,7 @@ export class AssessmentOrchestrator {
547
554
  const prompt = buildJudgePrompt(task, result, assessment, failedChecks, activity);
548
555
  let response;
549
556
  try {
550
- response = (await this.ctx.queryLLM(prompt, this.ctx.config.settings.orchestratorModel)).text;
557
+ response = (await this.ctx.queryLLM(prompt, this.orchestratorModel())).text;
551
558
  }
552
559
  catch { /* LLM query failed */
553
560
  return false;