@zhixuan92/multi-model-agent-core 0.4.0 → 1.0.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.
Files changed (112) hide show
  1. package/dist/config/load.js +9 -9
  2. package/dist/config/load.js.map +1 -1
  3. package/dist/config/schema.d.ts +168 -275
  4. package/dist/config/schema.d.ts.map +1 -1
  5. package/dist/config/schema.js +30 -39
  6. package/dist/config/schema.js.map +1 -1
  7. package/dist/cost/cost-meter.d.ts +13 -0
  8. package/dist/cost/cost-meter.d.ts.map +1 -0
  9. package/dist/cost/cost-meter.js +20 -0
  10. package/dist/cost/cost-meter.js.map +1 -0
  11. package/dist/delegate-with-escalation.d.ts +1 -28
  12. package/dist/delegate-with-escalation.d.ts.map +1 -1
  13. package/dist/delegate-with-escalation.js +9 -89
  14. package/dist/delegate-with-escalation.js.map +1 -1
  15. package/dist/error-codes.d.ts +4 -0
  16. package/dist/error-codes.d.ts.map +1 -0
  17. package/dist/error-codes.js +16 -0
  18. package/dist/error-codes.js.map +1 -0
  19. package/dist/index.d.ts +5 -5
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +4 -5
  22. package/dist/index.js.map +1 -1
  23. package/dist/model-profiles.json +10 -5
  24. package/dist/provider.d.ts +2 -2
  25. package/dist/provider.d.ts.map +1 -1
  26. package/dist/provider.js +10 -13
  27. package/dist/provider.js.map +1 -1
  28. package/dist/readiness/normalization-budget.d.ts +2 -0
  29. package/dist/readiness/normalization-budget.d.ts.map +1 -0
  30. package/dist/readiness/normalization-budget.js +9 -0
  31. package/dist/readiness/normalization-budget.js.map +1 -0
  32. package/dist/readiness/normalize-brief.d.ts +17 -0
  33. package/dist/readiness/normalize-brief.d.ts.map +1 -0
  34. package/dist/readiness/normalize-brief.js +124 -0
  35. package/dist/readiness/normalize-brief.js.map +1 -0
  36. package/dist/readiness/readiness.d.ts +16 -0
  37. package/dist/readiness/readiness.d.ts.map +1 -0
  38. package/dist/readiness/readiness.js +160 -0
  39. package/dist/readiness/readiness.js.map +1 -0
  40. package/dist/reporting/structured-report.d.ts +18 -0
  41. package/dist/reporting/structured-report.d.ts.map +1 -0
  42. package/dist/reporting/structured-report.js +100 -0
  43. package/dist/reporting/structured-report.js.map +1 -0
  44. package/dist/review/aggregate-result.d.ts +3 -0
  45. package/dist/review/aggregate-result.d.ts.map +1 -0
  46. package/dist/review/aggregate-result.js +31 -0
  47. package/dist/review/aggregate-result.js.map +1 -0
  48. package/dist/review/quality-reviewer.d.ts +13 -0
  49. package/dist/review/quality-reviewer.d.ts.map +1 -0
  50. package/dist/review/quality-reviewer.js +39 -0
  51. package/dist/review/quality-reviewer.js.map +1 -0
  52. package/dist/review/reviewer-prompt.d.ts +10 -0
  53. package/dist/review/reviewer-prompt.d.ts.map +1 -0
  54. package/dist/review/reviewer-prompt.js +58 -0
  55. package/dist/review/reviewer-prompt.js.map +1 -0
  56. package/dist/review/spec-reviewer.d.ts +13 -0
  57. package/dist/review/spec-reviewer.d.ts.map +1 -0
  58. package/dist/review/spec-reviewer.js +37 -0
  59. package/dist/review/spec-reviewer.js.map +1 -0
  60. package/dist/routing/model-profiles.d.ts +5 -0
  61. package/dist/routing/model-profiles.d.ts.map +1 -1
  62. package/dist/routing/model-profiles.js +5 -0
  63. package/dist/routing/model-profiles.js.map +1 -1
  64. package/dist/routing/resolve-agent.d.ts +8 -0
  65. package/dist/routing/resolve-agent.d.ts.map +1 -0
  66. package/dist/routing/resolve-agent.js +45 -0
  67. package/dist/routing/resolve-agent.js.map +1 -0
  68. package/dist/run-tasks.d.ts +0 -23
  69. package/dist/run-tasks.d.ts.map +1 -1
  70. package/dist/run-tasks.js +241 -72
  71. package/dist/run-tasks.js.map +1 -1
  72. package/dist/runners/claude-runner.d.ts.map +1 -1
  73. package/dist/runners/claude-runner.js +67 -24
  74. package/dist/runners/claude-runner.js.map +1 -1
  75. package/dist/runners/codex-runner.d.ts.map +1 -1
  76. package/dist/runners/codex-runner.js +68 -21
  77. package/dist/runners/codex-runner.js.map +1 -1
  78. package/dist/runners/openai-runner.d.ts.map +1 -1
  79. package/dist/runners/openai-runner.js +139 -20
  80. package/dist/runners/openai-runner.js.map +1 -1
  81. package/dist/runners/prevention.d.ts +2 -0
  82. package/dist/runners/prevention.d.ts.map +1 -1
  83. package/dist/runners/prevention.js +12 -0
  84. package/dist/runners/prevention.js.map +1 -1
  85. package/dist/runners/supervision.d.ts +1 -5
  86. package/dist/runners/supervision.d.ts.map +1 -1
  87. package/dist/runners/supervision.js +0 -68
  88. package/dist/runners/supervision.js.map +1 -1
  89. package/dist/tools/call-cache.d.ts +16 -0
  90. package/dist/tools/call-cache.d.ts.map +1 -0
  91. package/dist/tools/call-cache.js +28 -0
  92. package/dist/tools/call-cache.js.map +1 -0
  93. package/dist/types.d.ts +78 -30
  94. package/dist/types.d.ts.map +1 -1
  95. package/dist/types.js.map +1 -1
  96. package/package.json +48 -16
  97. package/dist/routing/capabilities.d.ts +0 -3
  98. package/dist/routing/capabilities.d.ts.map +0 -1
  99. package/dist/routing/capabilities.js +0 -26
  100. package/dist/routing/capabilities.js.map +0 -1
  101. package/dist/routing/get-provider-eligibility.d.ts +0 -8
  102. package/dist/routing/get-provider-eligibility.d.ts.map +0 -1
  103. package/dist/routing/get-provider-eligibility.js +0 -53
  104. package/dist/routing/get-provider-eligibility.js.map +0 -1
  105. package/dist/routing/resolve-task-capabilities.d.ts +0 -7
  106. package/dist/routing/resolve-task-capabilities.d.ts.map +0 -1
  107. package/dist/routing/resolve-task-capabilities.js +0 -19
  108. package/dist/routing/resolve-task-capabilities.js.map +0 -1
  109. package/dist/routing/select-provider-for-task.d.ts +0 -18
  110. package/dist/routing/select-provider-for-task.d.ts.map +0 -1
  111. package/dist/routing/select-provider-for-task.js +0 -50
  112. package/dist/routing/select-provider-for-task.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewer-prompt.js","sourceRoot":"","sources":["../../src/review/reviewer-prompt.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,qBAAqB,CACnC,MAA2B,EAC3B,UAAkC,EAClC,YAAoC,EACpC,WAAqB;IAErB,OAAO;QACL,+FAA+F;QAC/F,EAAE;QACF,sCAAsC;QACtC,MAAM,CAAC,gBAAgB;QACvB,UAAU,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACnC,mBAAmB,MAAM,CAAC,aAAa,EAAE;QACzC,EAAE;QACF,kCAAkC;QAClC,YAAY,UAAU,CAAC,OAAO,IAAI,KAAK,EAAE;QACzC,kBAAkB,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC5F,oBAAoB,UAAU,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAClG,eAAe,UAAU,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;QACpE,eAAe,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;QAC3D,EAAE;QACF,yBAAyB;QACzB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CACtD,OAAO,IAAI,aAAa,OAAO,UAAU,CAAC;QAC5C,EAAE;QACF,kBAAkB;QAClB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QACtB,EAAE;QACF,cAAc;QACd,kGAAkG;QAClG,0DAA0D;QAC1D,uDAAuD;QACvD,oGAAoG;KACrG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,MAA2B,EAC3B,UAAkC,EAClC,YAAoC,EACpC,WAAqB;IAErB,OAAO;QACL,qGAAqG;QACrG,EAAE;QACF,qBAAqB;QACrB,MAAM,CAAC,gBAAgB;QACvB,EAAE;QACF,kCAAkC;QAClC,YAAY,UAAU,CAAC,OAAO,IAAI,KAAK,EAAE;QACzC,kBAAkB,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC5F,EAAE;QACF,yBAAyB;QACzB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CACtD,OAAO,IAAI,aAAa,OAAO,UAAU,CAAC;QAC5C,EAAE;QACF,kBAAkB;QAClB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;QACtB,EAAE;QACF,cAAc;QACd,qFAAqF;QACrF,wDAAwD;QACxD,uBAAuB;QACvB,0BAA0B;QAC1B,sBAAsB;QACtB,4BAA4B;QAC5B,2BAA2B;QAC3B,8DAA8D;KAC/D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Provider } from '../types.js';
2
+ import type { ParsedStructuredReport } from '../reporting/structured-report.js';
3
+ export interface SpecReviewResult {
4
+ status: 'approved' | 'changes_required' | 'not_run';
5
+ report?: ParsedStructuredReport;
6
+ findings: string[];
7
+ }
8
+ export declare function runSpecReview(reviewerProvider: Provider, packet: {
9
+ normalizedPrompt: string;
10
+ scope: string[];
11
+ doneCondition: string;
12
+ }, implReport: ParsedStructuredReport, fileContents: Record<string, string>, toolCallLog: string[]): Promise<SpecReviewResult>;
13
+ //# sourceMappingURL=spec-reviewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-reviewer.d.ts","sourceRoot":"","sources":["../../src/review/spec-reviewer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAGhF,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,UAAU,GAAG,kBAAkB,GAAG,SAAS,CAAC;IACpD,MAAM,CAAC,EAAE,sBAAsB,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,aAAa,CACjC,gBAAgB,EAAE,QAAQ,EAC1B,MAAM,EAAE;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,EAC5E,UAAU,EAAE,sBAAsB,EAClC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACpC,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,gBAAgB,CAAC,CA0C3B"}
@@ -0,0 +1,37 @@
1
+ import { delegateWithEscalation } from '../delegate-with-escalation.js';
2
+ import { buildSpecReviewPrompt } from './reviewer-prompt.js';
3
+ import { parseStructuredReport } from '../reporting/structured-report.js';
4
+ export async function runSpecReview(reviewerProvider, packet, implReport, fileContents, toolCallLog) {
5
+ const prompt = buildSpecReviewPrompt(packet, implReport, fileContents, toolCallLog);
6
+ let result;
7
+ try {
8
+ const reviewerSlot = reviewerProvider.name === 'standard' ? 'standard' : 'complex';
9
+ result = await delegateWithEscalation({
10
+ prompt,
11
+ agentType: reviewerSlot,
12
+ briefQualityPolicy: 'off',
13
+ maxTurns: 20,
14
+ timeoutMs: 120_000,
15
+ }, [reviewerProvider], { explicitlyPinned: true });
16
+ }
17
+ catch {
18
+ return { status: 'not_run', findings: [] };
19
+ }
20
+ if (result.status !== 'ok') {
21
+ return { status: 'not_run', findings: [] };
22
+ }
23
+ const report = parseStructuredReport(result.output);
24
+ if (!report.summary) {
25
+ return { status: 'not_run', findings: [] };
26
+ }
27
+ const summaryLower = report.summary.toLowerCase();
28
+ if (summaryLower.includes('changes_required')) {
29
+ return {
30
+ status: 'changes_required',
31
+ report,
32
+ findings: [...(report.deviationsFromBrief ?? []), ...(report.unresolved ?? [])],
33
+ };
34
+ }
35
+ return { status: 'approved', report, findings: [] };
36
+ }
37
+ //# sourceMappingURL=spec-reviewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-reviewer.js","sourceRoot":"","sources":["../../src/review/spec-reviewer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAQ1E,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,gBAA0B,EAC1B,MAA4E,EAC5E,UAAkC,EAClC,YAAoC,EACpC,WAAqB;IAErB,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAEpF,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,YAAY,GAChB,gBAAgB,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QAChE,MAAM,GAAG,MAAM,sBAAsB,CACnC;YACE,MAAM;YACN,SAAS,EAAE,YAAY;YACvB,kBAAkB,EAAE,KAAK;YACzB,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,OAAO;SACnB,EACD,CAAC,gBAAgB,CAAC,EAClB,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAC3B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC7C,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IAElD,IAAI,YAAY,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC9C,OAAO;YACL,MAAM,EAAE,kBAAkB;YAC1B,MAAM;YACN,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,mBAAmB,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;SAChF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACtD,CAAC"}
@@ -22,8 +22,13 @@ export declare const modelProfileSchema: z.ZodObject<{
22
22
  rateSource: z.ZodOptional<z.ZodString>;
23
23
  rateLookupDate: z.ZodOptional<z.ZodString>;
24
24
  inputTokenSoftLimit: z.ZodNumber;
25
+ capabilities: z.ZodDefault<z.ZodArray<z.ZodEnum<{
26
+ web_search: "web_search";
27
+ web_fetch: "web_fetch";
28
+ }>>>;
25
29
  }, z.core.$strip>;
26
30
  export type ModelProfile = z.infer<typeof modelProfileSchema>;
27
31
  export declare function findModelProfile(modelId: string): ModelProfile;
32
+ export declare function findModelCapabilities(modelId: string): ('web_search' | 'web_fetch')[];
28
33
  export declare function getEffectiveCostTier(config: ProviderConfig): CostTier;
29
34
  //# sourceMappingURL=model-profiles.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-profiles.d.ts","sourceRoot":"","sources":["../../src/routing/model-profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAQ,MAAM,aAAa,CAAC;AAMlE,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;iBAe7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAoB9D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAQ9D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAErE"}
1
+ {"version":3,"file":"model-profiles.d.ts","sourceRoot":"","sources":["../../src/routing/model-profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAM5D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgB7B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAqB9D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAQ9D;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,EAAE,CAErF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAErE"}
@@ -17,6 +17,7 @@ export const modelProfileSchema = z.object({
17
17
  /** Per-model-family default for the watchdog input-token soft limit.
18
18
  * See spec A.1.4. */
19
19
  inputTokenSoftLimit: z.number().int().positive(),
20
+ capabilities: z.array(z.enum(['web_search', 'web_fetch'])).default([]),
20
21
  });
21
22
  const DEFAULT_PROFILE = {
22
23
  prefix: '',
@@ -25,6 +26,7 @@ const DEFAULT_PROFILE = {
25
26
  bestFor: 'general tasks (unprofiled model — defaults applied)',
26
27
  supportsEffort: false,
27
28
  inputTokenSoftLimit: 100_000,
29
+ capabilities: [],
28
30
  };
29
31
  // Validate and sort once at module load — longest prefix wins
30
32
  const PROFILE_ENTRIES = (() => {
@@ -43,6 +45,9 @@ export function findModelProfile(modelId) {
43
45
  }
44
46
  return { ...DEFAULT_PROFILE };
45
47
  }
48
+ export function findModelCapabilities(modelId) {
49
+ return findModelProfile(modelId).capabilities ?? [];
50
+ }
46
51
  export function getEffectiveCostTier(config) {
47
52
  return config.costTier ?? findModelProfile(config.model).defaultCost;
48
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"model-profiles.js","sourceRoot":"","sources":["../../src/routing/model-profiles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model-profiles.js","sourceRoot":"","sources":["../../src/routing/model-profiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { AgentType, AgentCapability, MultiModelConfig, Provider } from '../types.js';
2
+ export interface ResolvedAgent {
3
+ slot: AgentType;
4
+ provider: Provider;
5
+ capabilityOverride: boolean;
6
+ }
7
+ export declare function resolveAgent(agentType: AgentType, requiredCapabilities: AgentCapability[], config: MultiModelConfig): ResolvedAgent;
8
+ //# sourceMappingURL=resolve-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-agent.d.ts","sourceRoot":"","sources":["../../src/routing/resolve-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAe,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvG,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAoBD,wBAAgB,YAAY,CAC1B,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,eAAe,EAAE,EACvC,MAAM,EAAE,gBAAgB,GACvB,aAAa,CAmCf"}
@@ -0,0 +1,45 @@
1
+ import { findModelCapabilities } from './model-profiles.js';
2
+ import { createProvider } from '../provider.js';
3
+ function resolveCapabilities(agent) {
4
+ return agent.capabilities ?? findModelCapabilities(agent.model) ?? [];
5
+ }
6
+ function hasAllCapabilities(agent, required) {
7
+ if (required.length === 0)
8
+ return true;
9
+ const available = resolveCapabilities(agent) ?? [];
10
+ return required.every((cap) => available.includes(cap));
11
+ }
12
+ const OTHER_SLOT = {
13
+ standard: 'complex',
14
+ complex: 'standard',
15
+ };
16
+ export function resolveAgent(agentType, requiredCapabilities, config) {
17
+ const agents = config.agents;
18
+ if (!agents) {
19
+ throw new Error('capability_missing: config must have agents defined');
20
+ }
21
+ const declared = agents[agentType];
22
+ if (!declared) {
23
+ throw new Error(`capability_missing: agent "${agentType}" not found in config`);
24
+ }
25
+ if (hasAllCapabilities(declared, requiredCapabilities)) {
26
+ return {
27
+ slot: agentType,
28
+ provider: createProvider(agentType, config),
29
+ capabilityOverride: false,
30
+ };
31
+ }
32
+ const otherSlot = OTHER_SLOT[agentType];
33
+ const other = agents[otherSlot];
34
+ if (other && hasAllCapabilities(other, requiredCapabilities)) {
35
+ return {
36
+ slot: otherSlot,
37
+ provider: createProvider(otherSlot, config),
38
+ capabilityOverride: true,
39
+ };
40
+ }
41
+ const missing = requiredCapabilities.filter((cap) => !resolveCapabilities(declared).includes(cap) &&
42
+ (other ? resolveCapabilities(other).includes(cap) : true));
43
+ throw new Error(`capability_missing: neither standard nor complex agent has: ${missing.join(', ')}`);
44
+ }
45
+ //# sourceMappingURL=resolve-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-agent.js","sourceRoot":"","sources":["../../src/routing/resolve-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAQhD,SAAS,mBAAmB,CAAC,KAAkB;IAC7C,OAAO,KAAK,CAAC,YAAY,IAAI,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACxE,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAkB,EAClB,QAA2B;IAE3B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACnD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,GAAiC;IAC/C,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,UAAU;CACpB,CAAC;AAEF,MAAM,UAAU,YAAY,CAC1B,SAAoB,EACpB,oBAAuC,EACvC,MAAwB;IAExB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,8BAA8B,SAAS,uBAAuB,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,kBAAkB,CAAC,QAAQ,EAAE,oBAAoB,CAAC,EAAE,CAAC;QACvD,OAAO;YACL,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC;YAC3C,kBAAkB,EAAE,KAAK;SAC1B,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,KAAK,IAAI,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,CAAC,EAAE,CAAC;QAC7D,OAAO;YACL,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC;YAC3C,kBAAkB,EAAE,IAAI;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,EAAE,CACN,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC5C,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAC5D,CAAC;IACF,MAAM,IAAI,KAAK,CACb,+DAA+D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpF,CAAC;AACJ,CAAC"}
@@ -1,31 +1,8 @@
1
1
  import type { RunResult, TaskSpec, MultiModelConfig, ProgressEvent, RunTasksRuntime } from './types.js';
2
- /**
3
- * Per-task progress sink. `runTasks` invokes this for every
4
- * `ProgressEvent` emitted while working on task at `taskIndex`. The caller
5
- * (today: the MCP cli bridge) is responsible for disambiguating which task
6
- * emitted which event — this is the cheapest contract: the orchestrator
7
- * already knows each task's position in the input array, so the caller
8
- * doesn't have to wrap N closures.
9
- */
10
2
  export type RunTasksProgressCallback = (taskIndex: number, event: ProgressEvent) => void;
11
3
  export interface RunTasksOptions {
12
- /** Optional progress sink. See `RunTasksProgressCallback`. When omitted,
13
- * no progress events are produced — backward-compatible with callers
14
- * that predate Task 8. */
15
4
  onProgress?: RunTasksProgressCallback;
16
- /** Runtime dependencies the orchestrator needs at dispatch time. Today
17
- * this is just the context-block store used to expand
18
- * `TaskSpec.contextBlockIds`. Kept as a nested field so existing callers
19
- * that only pass `onProgress` don't break. */
20
5
  runtime?: RunTasksRuntime;
21
6
  }
22
- /**
23
- * Run tasks concurrently. Each RunResult corresponds to the matching TaskSpec
24
- * at the same index. One task failing does not affect others.
25
- *
26
- * When `options.onProgress` is supplied, it is called with `(taskIndex, event)`
27
- * for every progress event emitted by that task's provider run or the
28
- * escalation orchestrator. See `ProgressEvent` for variants.
29
- */
30
7
  export declare function runTasks(tasks: TaskSpec[], config: MultiModelConfig, options?: RunTasksOptions): Promise<RunResult[]>;
31
8
  //# sourceMappingURL=run-tasks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-tasks.d.ts","sourceRoot":"","sources":["../src/run-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,eAAe,EAChB,MAAM,YAAY,CAAC;AAOpB;;;;;;;GAOG;AACH,MAAM,MAAM,wBAAwB,GAAG,CACrC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,aAAa,KACjB,IAAI,CAAC;AAEV,MAAM,WAAW,eAAe;IAC9B;;+BAE2B;IAC3B,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC;;;mDAG+C;IAC/C,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAoDD;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,QAAQ,EAAE,EACjB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,SAAS,EAAE,CAAC,CA4EtB"}
1
+ {"version":3,"file":"run-tasks.d.ts","sourceRoot":"","sources":["../src/run-tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,eAAe,EAIhB,MAAM,YAAY,CAAC;AAepB,MAAM,MAAM,wBAAwB,GAAG,CACrC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,aAAa,KACjB,IAAI,CAAC;AAEV,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,wBAAwB,CAAC;IACtC,OAAO,CAAC,EAAE,eAAe,CAAC;CAC3B;AAmRD,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,QAAQ,EAAE,EACjB,MAAM,EAAE,gBAAgB,EACxB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,SAAS,EAAE,CAAC,CAyGtB"}
package/dist/run-tasks.js CHANGED
@@ -1,8 +1,14 @@
1
1
  import { createProvider } from './provider.js';
2
- import { getProviderEligibility } from './routing/get-provider-eligibility.js';
3
- import { selectProviderForTask } from './routing/select-provider-for-task.js';
4
- import { buildEscalationChain, delegateWithEscalation } from './delegate-with-escalation.js';
2
+ import { resolveAgent } from './routing/resolve-agent.js';
3
+ import { delegateWithEscalation } from './delegate-with-escalation.js';
5
4
  import { expandContextBlocks } from './context/expand-context-blocks.js';
5
+ import { evaluateReadiness } from './readiness/readiness.js';
6
+ import { normalizeBrief } from './readiness/normalize-brief.js';
7
+ import { runSpecReview } from './review/spec-reviewer.js';
8
+ import { runQualityReview } from './review/quality-reviewer.js';
9
+ import { aggregateResult } from './review/aggregate-result.js';
10
+ import { parseStructuredReport } from './reporting/structured-report.js';
11
+ import fs from 'fs/promises';
6
12
  function errorResult(error) {
7
13
  return {
8
14
  output: `Sub-agent error: ${error}`,
@@ -12,51 +18,183 @@ function errorResult(error) {
12
18
  filesRead: [],
13
19
  filesWritten: [],
14
20
  toolCalls: [],
15
- // Orchestrator-level error wrapper (e.g. "no eligible provider",
16
- // contextBlockIds expansion failure) — pure diagnostic, no salvage.
17
21
  outputIsDiagnostic: true,
18
22
  escalationLog: [],
19
23
  error,
20
24
  };
21
25
  }
22
- async function executeTask(resolved, config, onProgress) {
26
+ async function executeTask(resolved, onProgress) {
23
27
  try {
24
- if (resolved.pinned) {
25
- // Explicit pin: chain of length 1, no escalation.
26
- return await delegateWithEscalation(resolved.task, [resolved.provider], { explicitlyPinned: true, onProgress });
27
- }
28
- // Auto-routed: walk all eligible providers cheapest-first.
29
- const chain = buildEscalationChain(resolved.task, config);
30
- if (chain.length === 0) {
31
- // Defensive: selectProviderForTask succeeded earlier so eligibility
32
- // existed at resolution time. If the chain is somehow empty now we
33
- // surface a structured error rather than throwing.
34
- return errorResult('No eligible provider found for task at dispatch time.');
35
- }
36
- return await delegateWithEscalation(resolved.task, chain, { onProgress });
28
+ return await delegateWithEscalation(resolved.task, [resolved.resolved.provider], { explicitlyPinned: true, onProgress });
37
29
  }
38
30
  catch (err) {
39
31
  return errorResult(err instanceof Error ? err.message : String(err));
40
32
  }
41
33
  }
42
- /**
43
- * Run tasks concurrently. Each RunResult corresponds to the matching TaskSpec
44
- * at the same index. One task failing does not affect others.
45
- *
46
- * When `options.onProgress` is supplied, it is called with `(taskIndex, event)`
47
- * for every progress event emitted by that task's provider run or the
48
- * escalation orchestrator. See `ProgressEvent` for variants.
49
- */
34
+ function extractWorkerStatus(report) {
35
+ if (!report || !report.summary)
36
+ return 'done';
37
+ const s = report.summary.toLowerCase();
38
+ if (s.includes('needs_context'))
39
+ return 'needs_context';
40
+ if (s.includes('blocked'))
41
+ return 'blocked';
42
+ if (s.includes('done_with_concerns') || s.includes('concerns'))
43
+ return 'done_with_concerns';
44
+ return 'done';
45
+ }
46
+ async function readImplementerFileContents(filesWritten, cwd) {
47
+ const contents = {};
48
+ const basePath = cwd ?? process.cwd();
49
+ for (const filePath of filesWritten) {
50
+ try {
51
+ const resolved = filePath.startsWith('/') ? filePath : `${basePath}/${filePath}`;
52
+ const content = await fs.readFile(resolved, 'utf-8');
53
+ contents[filePath] = content.length > 50_000
54
+ ? content.slice(0, 50_000) + '\n[truncated at 50KB]'
55
+ : content;
56
+ }
57
+ catch {
58
+ contents[filePath] = '[file not readable]';
59
+ }
60
+ }
61
+ return contents;
62
+ }
63
+ function buildFallbackImplReport(result) {
64
+ const parsed = parseStructuredReport(result.output);
65
+ if (parsed.summary) {
66
+ return parsed;
67
+ }
68
+ return {
69
+ summary: result.output.substring(0, 200),
70
+ filesChanged: result.filesWritten.map(f => ({ path: f, summary: 'updated' })),
71
+ normalizationDecisions: [],
72
+ validationsRun: [],
73
+ deviationsFromBrief: [],
74
+ unresolved: [],
75
+ };
76
+ }
77
+ async function executeReviewedLifecycle(task, resolved, config, normResult, onProgress) {
78
+ const reviewPolicy = task.reviewPolicy ?? 'full';
79
+ const maxRounds = task.maxReviewRounds ?? 2;
80
+ const otherSlot = resolved.slot === 'standard' ? 'complex' : 'standard';
81
+ const implResult = await delegateWithEscalation(task, [resolved.provider], { explicitlyPinned: true, onProgress });
82
+ const implReport = implResult.status === 'ok' ? parseStructuredReport(implResult.output) : undefined;
83
+ const workerStatus = extractWorkerStatus(implReport);
84
+ if (workerStatus === 'needs_context' || workerStatus === 'blocked') {
85
+ return {
86
+ ...implResult,
87
+ workerStatus,
88
+ specReviewStatus: 'not_run',
89
+ qualityReviewStatus: 'not_run',
90
+ agents: {
91
+ normalizer: normResult && !normResult.skipped ? resolved.slot : 'skipped',
92
+ implementer: resolved.slot,
93
+ specReviewer: 'not_run',
94
+ qualityReviewer: 'not_run',
95
+ },
96
+ };
97
+ }
98
+ if (reviewPolicy === 'off') {
99
+ return {
100
+ ...implResult,
101
+ workerStatus,
102
+ specReviewStatus: 'not_run',
103
+ qualityReviewStatus: 'not_run',
104
+ agents: {
105
+ normalizer: normResult && !normResult.skipped ? resolved.slot : 'skipped',
106
+ implementer: resolved.slot,
107
+ specReviewer: 'not_run',
108
+ qualityReviewer: 'not_run',
109
+ },
110
+ implementationReport: implReport,
111
+ };
112
+ }
113
+ let otherProvider;
114
+ try {
115
+ otherProvider = createProvider(otherSlot, config);
116
+ }
117
+ catch {
118
+ return {
119
+ ...implResult,
120
+ workerStatus,
121
+ specReviewStatus: 'not_run',
122
+ qualityReviewStatus: 'not_run',
123
+ agents: {
124
+ normalizer: normResult && !normResult.skipped ? resolved.slot : 'skipped',
125
+ implementer: resolved.slot,
126
+ specReviewer: 'not_run',
127
+ qualityReviewer: 'not_run',
128
+ },
129
+ };
130
+ }
131
+ const packet = {
132
+ normalizedPrompt: normResult?.normalizedPrompt ?? task.prompt,
133
+ scope: normResult?.writeSet ?? [],
134
+ doneCondition: 'tsc passes',
135
+ };
136
+ let fileContents = await readImplementerFileContents(implResult.filesWritten, task.cwd);
137
+ const effectiveImplReport = implReport ?? buildFallbackImplReport(implResult);
138
+ let specResult = await runSpecReview(otherProvider, packet, effectiveImplReport, fileContents, implResult.toolCalls);
139
+ let finalImplResult = implResult;
140
+ let finalImplReport = effectiveImplReport;
141
+ let specStatus = specResult.status;
142
+ let specReport = specResult.report;
143
+ if (specStatus === 'changes_required' && maxRounds > 0) {
144
+ for (let round = 0; round < maxRounds; round++) {
145
+ const reworkPrompt = `${task.prompt}\n\n## Spec Review Feedback (round ${round + 1}):\n${specResult.findings.map(f => `- ${f}`).join('\n')}`;
146
+ const reworkResult = await delegateWithEscalation({ ...task, prompt: reworkPrompt }, [resolved.provider], { explicitlyPinned: true, onProgress });
147
+ finalImplResult = reworkResult;
148
+ const reworkReport = parseStructuredReport(reworkResult.output);
149
+ finalImplReport = reworkReport.summary ? reworkReport : buildFallbackImplReport(reworkResult);
150
+ const reworkContents = await readImplementerFileContents(reworkResult.filesWritten, task.cwd);
151
+ fileContents = reworkContents;
152
+ specResult = await runSpecReview(otherProvider, packet, finalImplReport, reworkContents, reworkResult.toolCalls);
153
+ specStatus = specResult.status;
154
+ specReport = specResult.report;
155
+ if (specStatus === 'approved')
156
+ break;
157
+ }
158
+ }
159
+ let qualityResult = { status: 'not_run', report: undefined, findings: [] };
160
+ if (reviewPolicy === 'full') {
161
+ qualityResult = await runQualityReview(otherProvider, packet, specReport ?? finalImplReport, fileContents, finalImplResult.toolCalls, finalImplResult.filesWritten);
162
+ if (qualityResult.status === 'changes_required' && maxRounds > 0) {
163
+ for (let round = 0; round < maxRounds; round++) {
164
+ const reworkPrompt = `${task.prompt}\n\n## Quality Review Feedback (round ${round + 1}):\n${qualityResult.findings.map(f => `- ${f}`).join('\n')}`;
165
+ const reworkResult = await delegateWithEscalation({ ...task, prompt: reworkPrompt }, [resolved.provider], { explicitlyPinned: true, onProgress });
166
+ finalImplResult = reworkResult;
167
+ const reworkReport = parseStructuredReport(reworkResult.output);
168
+ finalImplReport = reworkReport.summary ? reworkReport : buildFallbackImplReport(reworkResult);
169
+ const reworkContents = await readImplementerFileContents(reworkResult.filesWritten, task.cwd);
170
+ qualityResult = await runQualityReview(otherProvider, packet, finalImplReport, reworkContents, reworkResult.toolCalls, reworkResult.filesWritten);
171
+ if (qualityResult.status === 'approved')
172
+ break;
173
+ }
174
+ }
175
+ }
176
+ const finalReport = specReport ?? finalImplReport;
177
+ const aggregated = aggregateResult(finalReport, specReport, qualityResult.report, specStatus, qualityResult.status);
178
+ return {
179
+ ...finalImplResult,
180
+ workerStatus,
181
+ specReviewStatus: specStatus,
182
+ qualityReviewStatus: qualityResult.status,
183
+ structuredReport: aggregated,
184
+ implementationReport: finalImplReport,
185
+ specReviewReport: specReport,
186
+ qualityReviewReport: qualityResult.report,
187
+ agents: {
188
+ normalizer: normResult && !normResult.skipped ? resolved.slot : 'skipped',
189
+ implementer: resolved.slot,
190
+ specReviewer: otherSlot,
191
+ qualityReviewer: reviewPolicy === 'full' ? otherSlot : 'not_run',
192
+ },
193
+ };
194
+ }
50
195
  export async function runTasks(tasks, config, options = {}) {
51
196
  if (tasks.length === 0)
52
197
  return [];
53
- // Expand context blocks up-front so the rest of the pipeline sees a
54
- // self-contained prompt. `expandContextBlocks` is a no-op for tasks
55
- // without `contextBlockIds` and for calls that omit `runtime`, so
56
- // existing callers are unaffected. A missing block id throws
57
- // `ContextBlockNotFoundError` synchronously — we convert it to an
58
- // error-result for the specific task so the rest of the batch still
59
- // runs.
60
198
  const expandedTasks = tasks.map((task) => {
61
199
  try {
62
200
  return expandContextBlocks(task, options.runtime?.contextBlockStore);
@@ -65,59 +203,90 @@ export async function runTasks(tasks, config, options = {}) {
65
203
  return { error: err instanceof Error ? err.message : String(err) };
66
204
  }
67
205
  });
68
- const resolved = expandedTasks.map((entry, idx) => {
69
- if ('error' in entry) {
70
- return { task: tasks[idx], error: entry.error };
71
- }
206
+ const readinessResults = expandedTasks.map((entry) => {
207
+ if ('error' in entry)
208
+ return undefined;
72
209
  const task = entry;
73
- // If provider specified, validate and use it
74
- if (task.provider) {
75
- const eligibility = getProviderEligibility(task, config);
76
- const report = eligibility.find((e) => e.name === task.provider);
77
- if (!report) {
78
- // Provider explicitly named but not in config — fail fast with error result
79
- return {
80
- task,
81
- error: `Provider "${task.provider}" not found in config.`,
82
- };
83
- }
84
- if (!report.eligible) {
85
- const reasons = report.reasons.map((r) => r.message).join('; ');
86
- return {
87
- task,
88
- error: `Provider "${task.provider}" is ineligible: ${reasons}`,
89
- };
90
- }
210
+ return evaluateReadiness(task, task.briefQualityPolicy ?? 'warn');
211
+ });
212
+ const refusedResults = expandedTasks.map((entry, idx) => {
213
+ if ('error' in entry)
214
+ return undefined;
215
+ const readiness = readinessResults[idx];
216
+ if (!readiness)
217
+ return undefined;
218
+ if (readiness.action === 'refuse') {
91
219
  return {
92
- task,
93
- pinned: true,
94
- provider: createProvider(task.provider, config),
220
+ output: `Brief too vague: missing ${readiness.missingPillars.join(', ')}`,
221
+ status: 'brief_too_vague',
222
+ usage: { inputTokens: 0, outputTokens: 0, totalTokens: 0, costUSD: null },
223
+ turns: 0,
224
+ filesRead: [],
225
+ filesWritten: [],
226
+ toolCalls: [],
227
+ outputIsDiagnostic: true,
228
+ escalationLog: [],
229
+ errorCode: 'brief_too_vague',
230
+ briefQualityWarnings: readiness.briefQualityWarnings,
231
+ retryable: false,
95
232
  };
96
233
  }
97
- // Auto-routing — selectProviderForTask is still used here so the "no
98
- // eligible provider" error path stays identical to pre-escalation
99
- // behavior. The actual chain is constructed inside executeTask.
100
- const selected = selectProviderForTask(task, config);
101
- if (!selected) {
102
- const available = Object.keys(config.providers);
234
+ return undefined;
235
+ });
236
+ const normalizationResults = await Promise.all(expandedTasks.map(async (entry, idx) => {
237
+ if ('error' in entry)
238
+ return undefined;
239
+ const readiness = readinessResults[idx];
240
+ if (!readiness || readiness.action !== 'normalize')
241
+ return undefined;
242
+ return await normalizeBrief(entry, config);
243
+ }));
244
+ const effectiveTasks = expandedTasks.map((entry, idx) => {
245
+ if ('error' in entry)
246
+ return entry;
247
+ const norm = normalizationResults[idx];
248
+ if (norm && !norm.skipped) {
249
+ return { ...entry, prompt: norm.normalizedPrompt };
250
+ }
251
+ return entry;
252
+ });
253
+ const resolved = effectiveTasks.map((entry, idx) => {
254
+ if ('error' in entry) {
255
+ return { task: tasks[idx], error: entry.error, errorCode: 'context_block_not_found' };
256
+ }
257
+ const task = entry;
258
+ const agentType = task.agentType ?? 'standard';
259
+ try {
260
+ const resolved_agent = resolveAgent(agentType, (task.requiredCapabilities ?? []), config);
261
+ return { task, resolved: resolved_agent };
262
+ }
263
+ catch (err) {
103
264
  return {
104
265
  task,
105
- error: `No eligible provider found for task (required tier: ${task.tier}, capabilities: ${task.requiredCapabilities.join(', ') || 'none'}). Available providers: ${available.join(', ') || 'none'}.`,
266
+ error: err instanceof Error ? err.message : String(err),
267
+ errorCode: 'capability_missing',
106
268
  };
107
269
  }
108
- return { task, pinned: false };
109
270
  });
110
271
  return Promise.all(resolved.map((r, index) => {
111
272
  if ('error' in r) {
112
- return Promise.resolve(errorResult(r.error));
273
+ return Promise.resolve({ ...errorResult(r.error), errorCode: r.errorCode });
113
274
  }
114
- // Bind the task index into a per-task sink so the caller can
115
- // disambiguate which task an event belongs to without threading
116
- // extra fields through the orchestrator.
275
+ const refused = refusedResults[index];
276
+ if (refused) {
277
+ return Promise.resolve(refused);
278
+ }
279
+ const normResult = normalizationResults[index];
117
280
  const taskProgress = options.onProgress
118
281
  ? (event) => options.onProgress(index, event)
119
282
  : undefined;
120
- return executeTask(r, config, taskProgress);
283
+ const readiness = readinessResults[index];
284
+ return executeReviewedLifecycle(r.task, r.resolved, config, normResult, taskProgress).then((result) => {
285
+ if (readiness && readiness.briefQualityWarnings.length > 0) {
286
+ return { ...result, briefQualityWarnings: readiness.briefQualityWarnings };
287
+ }
288
+ return result;
289
+ });
121
290
  }));
122
291
  }
123
292
  //# sourceMappingURL=run-tasks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run-tasks.js","sourceRoot":"","sources":["../src/run-tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-tasks.js","sourceRoot":"","sources":["../src/run-tasks.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"claude-runner.d.ts","sourceRoot":"","sources":["../../src/runners/claude-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,cAAc,EAEpB,MAAM,aAAa,CAAC;AAsGrB,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACxE,OAAO,CAAC,SAAS,CAAC,CA0kBpB"}
1
+ {"version":3,"file":"claude-runner.d.ts","sourceRoot":"","sources":["../../src/runners/claude-runner.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,cAAc,EAEpB,MAAM,aAAa,CAAC;AAwGrB,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GACxE,OAAO,CAAC,SAAS,CAAC,CA8nBpB"}