@renseiai/agentfactory 0.8.8 → 0.8.9

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 (178) hide show
  1. package/dist/src/config/index.d.ts +1 -1
  2. package/dist/src/config/index.d.ts.map +1 -1
  3. package/dist/src/config/index.js +1 -1
  4. package/dist/src/config/repository-config.d.ts +23 -0
  5. package/dist/src/config/repository-config.d.ts.map +1 -1
  6. package/dist/src/config/repository-config.js +27 -0
  7. package/dist/src/config/repository-config.test.js +140 -1
  8. package/dist/src/governor/decision-engine.d.ts +3 -0
  9. package/dist/src/governor/decision-engine.d.ts.map +1 -1
  10. package/dist/src/governor/decision-engine.js +11 -0
  11. package/dist/src/governor/decision-engine.test.js +33 -0
  12. package/dist/src/governor/governor-types.d.ts +1 -1
  13. package/dist/src/governor/governor-types.d.ts.map +1 -1
  14. package/dist/src/governor/governor.d.ts +17 -1
  15. package/dist/src/governor/governor.d.ts.map +1 -1
  16. package/dist/src/governor/governor.js +112 -1
  17. package/dist/src/governor/governor.test.js +155 -0
  18. package/dist/src/index.d.ts +1 -0
  19. package/dist/src/index.d.ts.map +1 -1
  20. package/dist/src/index.js +1 -0
  21. package/dist/src/orchestrator/issue-tracker-client.d.ts +4 -0
  22. package/dist/src/orchestrator/issue-tracker-client.d.ts.map +1 -1
  23. package/dist/src/orchestrator/orchestrator.d.ts.map +1 -1
  24. package/dist/src/orchestrator/orchestrator.js +24 -0
  25. package/dist/src/orchestrator/parse-work-result.d.ts.map +1 -1
  26. package/dist/src/orchestrator/parse-work-result.js +6 -0
  27. package/dist/src/orchestrator/parse-work-result.test.js +19 -0
  28. package/dist/src/providers/index.d.ts +64 -1
  29. package/dist/src/providers/index.d.ts.map +1 -1
  30. package/dist/src/providers/index.js +132 -1
  31. package/dist/src/providers/index.test.js +340 -2
  32. package/dist/src/routing/index.d.ts +7 -0
  33. package/dist/src/routing/index.d.ts.map +1 -0
  34. package/dist/src/routing/index.js +6 -0
  35. package/dist/src/routing/observation-recorder.d.ts +19 -0
  36. package/dist/src/routing/observation-recorder.d.ts.map +1 -0
  37. package/dist/src/routing/observation-recorder.js +73 -0
  38. package/dist/src/routing/observation-recorder.test.d.ts +2 -0
  39. package/dist/src/routing/observation-recorder.test.d.ts.map +1 -0
  40. package/dist/src/routing/observation-recorder.test.js +322 -0
  41. package/dist/src/routing/observation-store.d.ts +40 -0
  42. package/dist/src/routing/observation-store.d.ts.map +1 -0
  43. package/dist/src/routing/observation-store.js +1 -0
  44. package/dist/src/routing/observation-store.test.d.ts +2 -0
  45. package/dist/src/routing/observation-store.test.d.ts.map +1 -0
  46. package/dist/src/routing/observation-store.test.js +138 -0
  47. package/dist/src/routing/posterior-store.d.ts +12 -0
  48. package/dist/src/routing/posterior-store.d.ts.map +1 -0
  49. package/dist/src/routing/posterior-store.js +13 -0
  50. package/dist/src/routing/posterior-store.test.d.ts +2 -0
  51. package/dist/src/routing/posterior-store.test.d.ts.map +1 -0
  52. package/dist/src/routing/posterior-store.test.js +37 -0
  53. package/dist/src/routing/reward.d.ts +16 -0
  54. package/dist/src/routing/reward.d.ts.map +1 -0
  55. package/dist/src/routing/reward.js +29 -0
  56. package/dist/src/routing/reward.test.d.ts +2 -0
  57. package/dist/src/routing/reward.test.d.ts.map +1 -0
  58. package/dist/src/routing/reward.test.js +210 -0
  59. package/dist/src/routing/routing-engine.d.ts +20 -0
  60. package/dist/src/routing/routing-engine.d.ts.map +1 -0
  61. package/dist/src/routing/routing-engine.js +113 -0
  62. package/dist/src/routing/routing-engine.test.d.ts +2 -0
  63. package/dist/src/routing/routing-engine.test.d.ts.map +1 -0
  64. package/dist/src/routing/routing-engine.test.js +310 -0
  65. package/dist/src/routing/types.d.ts +157 -0
  66. package/dist/src/routing/types.d.ts.map +1 -0
  67. package/dist/src/routing/types.js +68 -0
  68. package/dist/src/routing/types.test.d.ts +2 -0
  69. package/dist/src/routing/types.test.d.ts.map +1 -0
  70. package/dist/src/routing/types.test.js +184 -0
  71. package/dist/src/templates/types.d.ts +3 -0
  72. package/dist/src/templates/types.d.ts.map +1 -1
  73. package/dist/src/templates/types.js +2 -0
  74. package/dist/src/workflow/agent-cancellation.d.ts +37 -0
  75. package/dist/src/workflow/agent-cancellation.d.ts.map +1 -0
  76. package/dist/src/workflow/agent-cancellation.js +41 -0
  77. package/dist/src/workflow/agent-cancellation.test.d.ts +2 -0
  78. package/dist/src/workflow/agent-cancellation.test.d.ts.map +1 -0
  79. package/dist/src/workflow/agent-cancellation.test.js +86 -0
  80. package/dist/src/workflow/concurrency-semaphore.d.ts +21 -0
  81. package/dist/src/workflow/concurrency-semaphore.d.ts.map +1 -0
  82. package/dist/src/workflow/concurrency-semaphore.js +46 -0
  83. package/dist/src/workflow/concurrency-semaphore.test.d.ts +2 -0
  84. package/dist/src/workflow/concurrency-semaphore.test.d.ts.map +1 -0
  85. package/dist/src/workflow/concurrency-semaphore.test.js +183 -0
  86. package/dist/src/workflow/gate-state.d.ts +115 -0
  87. package/dist/src/workflow/gate-state.d.ts.map +1 -0
  88. package/dist/src/workflow/gate-state.js +185 -0
  89. package/dist/src/workflow/gate-state.test.d.ts +2 -0
  90. package/dist/src/workflow/gate-state.test.d.ts.map +1 -0
  91. package/dist/src/workflow/gate-state.test.js +251 -0
  92. package/dist/src/workflow/gates/gate-evaluator.d.ts +119 -0
  93. package/dist/src/workflow/gates/gate-evaluator.d.ts.map +1 -0
  94. package/dist/src/workflow/gates/gate-evaluator.js +243 -0
  95. package/dist/src/workflow/gates/gate-evaluator.test.d.ts +2 -0
  96. package/dist/src/workflow/gates/gate-evaluator.test.d.ts.map +1 -0
  97. package/dist/src/workflow/gates/gate-evaluator.test.js +240 -0
  98. package/dist/src/workflow/gates/signal-gate.d.ts +114 -0
  99. package/dist/src/workflow/gates/signal-gate.d.ts.map +1 -0
  100. package/dist/src/workflow/gates/signal-gate.js +216 -0
  101. package/dist/src/workflow/gates/signal-gate.test.d.ts +2 -0
  102. package/dist/src/workflow/gates/signal-gate.test.d.ts.map +1 -0
  103. package/dist/src/workflow/gates/signal-gate.test.js +199 -0
  104. package/dist/src/workflow/gates/timeout-engine.d.ts +96 -0
  105. package/dist/src/workflow/gates/timeout-engine.d.ts.map +1 -0
  106. package/dist/src/workflow/gates/timeout-engine.js +162 -0
  107. package/dist/src/workflow/gates/timeout-engine.test.d.ts +2 -0
  108. package/dist/src/workflow/gates/timeout-engine.test.d.ts.map +1 -0
  109. package/dist/src/workflow/gates/timeout-engine.test.js +186 -0
  110. package/dist/src/workflow/gates/timer-gate.d.ts +125 -0
  111. package/dist/src/workflow/gates/timer-gate.d.ts.map +1 -0
  112. package/dist/src/workflow/gates/timer-gate.js +381 -0
  113. package/dist/src/workflow/gates/timer-gate.test.d.ts +2 -0
  114. package/dist/src/workflow/gates/timer-gate.test.d.ts.map +1 -0
  115. package/dist/src/workflow/gates/timer-gate.test.js +211 -0
  116. package/dist/src/workflow/gates/webhook-gate.d.ts +132 -0
  117. package/dist/src/workflow/gates/webhook-gate.d.ts.map +1 -0
  118. package/dist/src/workflow/gates/webhook-gate.js +216 -0
  119. package/dist/src/workflow/gates/webhook-gate.test.d.ts +2 -0
  120. package/dist/src/workflow/gates/webhook-gate.test.d.ts.map +1 -0
  121. package/dist/src/workflow/gates/webhook-gate.test.js +182 -0
  122. package/dist/src/workflow/index.d.ts +23 -2
  123. package/dist/src/workflow/index.d.ts.map +1 -1
  124. package/dist/src/workflow/index.js +15 -1
  125. package/dist/src/workflow/parallelism-executor.d.ts +25 -0
  126. package/dist/src/workflow/parallelism-executor.d.ts.map +1 -0
  127. package/dist/src/workflow/parallelism-executor.js +53 -0
  128. package/dist/src/workflow/parallelism-executor.test.d.ts +2 -0
  129. package/dist/src/workflow/parallelism-executor.test.d.ts.map +1 -0
  130. package/dist/src/workflow/parallelism-executor.test.js +191 -0
  131. package/dist/src/workflow/parallelism-types.d.ts +80 -0
  132. package/dist/src/workflow/parallelism-types.d.ts.map +1 -0
  133. package/dist/src/workflow/parallelism-types.js +8 -0
  134. package/dist/src/workflow/phase-context-injector.d.ts +29 -0
  135. package/dist/src/workflow/phase-context-injector.d.ts.map +1 -0
  136. package/dist/src/workflow/phase-context-injector.js +43 -0
  137. package/dist/src/workflow/phase-context-injector.test.d.ts +2 -0
  138. package/dist/src/workflow/phase-context-injector.test.d.ts.map +1 -0
  139. package/dist/src/workflow/phase-context-injector.test.js +123 -0
  140. package/dist/src/workflow/phase-output-collector.d.ts +39 -0
  141. package/dist/src/workflow/phase-output-collector.d.ts.map +1 -0
  142. package/dist/src/workflow/phase-output-collector.js +141 -0
  143. package/dist/src/workflow/phase-output-collector.test.d.ts +2 -0
  144. package/dist/src/workflow/phase-output-collector.test.d.ts.map +1 -0
  145. package/dist/src/workflow/phase-output-collector.test.js +179 -0
  146. package/dist/src/workflow/strategies/fan-in-strategy.d.ts +21 -0
  147. package/dist/src/workflow/strategies/fan-in-strategy.d.ts.map +1 -0
  148. package/dist/src/workflow/strategies/fan-in-strategy.js +92 -0
  149. package/dist/src/workflow/strategies/fan-in-strategy.test.d.ts +2 -0
  150. package/dist/src/workflow/strategies/fan-in-strategy.test.d.ts.map +1 -0
  151. package/dist/src/workflow/strategies/fan-in-strategy.test.js +182 -0
  152. package/dist/src/workflow/strategies/fan-out-strategy.d.ts +16 -0
  153. package/dist/src/workflow/strategies/fan-out-strategy.d.ts.map +1 -0
  154. package/dist/src/workflow/strategies/fan-out-strategy.js +47 -0
  155. package/dist/src/workflow/strategies/fan-out-strategy.test.d.ts +2 -0
  156. package/dist/src/workflow/strategies/fan-out-strategy.test.d.ts.map +1 -0
  157. package/dist/src/workflow/strategies/fan-out-strategy.test.js +97 -0
  158. package/dist/src/workflow/strategies/index.d.ts +4 -0
  159. package/dist/src/workflow/strategies/index.d.ts.map +1 -0
  160. package/dist/src/workflow/strategies/index.js +3 -0
  161. package/dist/src/workflow/strategies/race-strategy.d.ts +19 -0
  162. package/dist/src/workflow/strategies/race-strategy.d.ts.map +1 -0
  163. package/dist/src/workflow/strategies/race-strategy.js +92 -0
  164. package/dist/src/workflow/strategies/race-strategy.test.d.ts +2 -0
  165. package/dist/src/workflow/strategies/race-strategy.test.d.ts.map +1 -0
  166. package/dist/src/workflow/strategies/race-strategy.test.js +318 -0
  167. package/dist/src/workflow/transition-engine.d.ts.map +1 -1
  168. package/dist/src/workflow/transition-engine.js +12 -0
  169. package/dist/src/workflow/transition-engine.test.js +92 -0
  170. package/dist/src/workflow/workflow-registry.d.ts +5 -1
  171. package/dist/src/workflow/workflow-registry.d.ts.map +1 -1
  172. package/dist/src/workflow/workflow-registry.js +8 -0
  173. package/dist/src/workflow/workflow-registry.test.js +54 -0
  174. package/dist/src/workflow/workflow-types.d.ts +151 -6
  175. package/dist/src/workflow/workflow-types.d.ts.map +1 -1
  176. package/dist/src/workflow/workflow-types.js +71 -1
  177. package/dist/src/workflow/workflow-types.test.js +293 -2
  178. package/package.json +2 -2
@@ -512,3 +512,158 @@ describe('WorkflowGovernor.scanOnce — PRIORITY override sorting', () => {
512
512
  expect(dispatchWork.mock.calls[2][0]).toEqual(expect.objectContaining({ id: 'c' }));
513
513
  });
514
514
  });
515
+ // ---------------------------------------------------------------------------
516
+ // Parallel group dispatch
517
+ // ---------------------------------------------------------------------------
518
+ describe('WorkflowGovernor.scanOnce — parallel group dispatch', () => {
519
+ function makeWorkflowWithParallelism() {
520
+ return {
521
+ apiVersion: 'v1.1',
522
+ kind: 'WorkflowDefinition',
523
+ metadata: { name: 'test-parallel' },
524
+ phases: [
525
+ { name: 'development', template: 'development' },
526
+ { name: 'qa', template: 'qa' },
527
+ ],
528
+ transitions: [
529
+ { from: 'Backlog', to: 'development' },
530
+ { from: 'Finished', to: 'qa' },
531
+ ],
532
+ parallelism: [
533
+ {
534
+ name: 'dev-parallel',
535
+ phases: ['development'],
536
+ strategy: 'fan-out',
537
+ },
538
+ ],
539
+ };
540
+ }
541
+ it('handles trigger-parallel-group by dispatching sub-issues', async () => {
542
+ const parentIssue = makeIssue({
543
+ id: 'parent-1',
544
+ identifier: 'SUP-100',
545
+ status: 'Backlog',
546
+ });
547
+ const subIssues = [
548
+ makeIssue({ id: 'sub-1', identifier: 'SUP-101', status: 'Backlog', parentId: 'parent-1' }),
549
+ makeIssue({ id: 'sub-2', identifier: 'SUP-102', status: 'Backlog', parentId: 'parent-1' }),
550
+ ];
551
+ const dispatchWork = vi.fn().mockResolvedValue(undefined);
552
+ const getSubIssues = vi.fn().mockResolvedValue(subIssues);
553
+ const deps = makeMockDeps({
554
+ listIssues: vi.fn().mockResolvedValue([parentIssue]),
555
+ isParentIssue: vi.fn().mockResolvedValue(true),
556
+ dispatchWork,
557
+ getSubIssues,
558
+ });
559
+ const governor = new WorkflowGovernor(makeConfig({
560
+ workflow: { workflow: makeWorkflowWithParallelism(), useBuiltinDefault: false },
561
+ }), deps);
562
+ const results = await governor.scanOnce();
563
+ expect(results[0].actionsDispatched).toBe(1);
564
+ expect(getSubIssues).toHaveBeenCalledWith('parent-1');
565
+ // dispatchWork is called for each sub-issue via the ParallelismExecutor,
566
+ // plus once more to advance the parent to the next phase (trigger-qa)
567
+ expect(dispatchWork).toHaveBeenCalledTimes(3);
568
+ expect(dispatchWork).toHaveBeenCalledWith(expect.objectContaining({ id: 'sub-1' }), 'trigger-development');
569
+ expect(dispatchWork).toHaveBeenCalledWith(expect.objectContaining({ id: 'sub-2' }), 'trigger-development');
570
+ // Parent advanced to QA after parallel group completion
571
+ expect(dispatchWork).toHaveBeenCalledWith(expect.objectContaining({ id: 'parent-1' }), 'trigger-qa');
572
+ });
573
+ it('handles missing getSubIssues gracefully', async () => {
574
+ const parentIssue = makeIssue({
575
+ id: 'parent-1',
576
+ identifier: 'SUP-100',
577
+ status: 'Backlog',
578
+ });
579
+ const dispatchWork = vi.fn().mockResolvedValue(undefined);
580
+ const deps = makeMockDeps({
581
+ listIssues: vi.fn().mockResolvedValue([parentIssue]),
582
+ isParentIssue: vi.fn().mockResolvedValue(true),
583
+ dispatchWork,
584
+ // getSubIssues intentionally not provided
585
+ });
586
+ const governor = new WorkflowGovernor(makeConfig({
587
+ workflow: { workflow: makeWorkflowWithParallelism(), useBuiltinDefault: false },
588
+ }), deps);
589
+ const results = await governor.scanOnce();
590
+ // The action is counted as dispatched (the parallel group handler ran),
591
+ // but dispatchWork is NOT called for sub-issues since getSubIssues is missing
592
+ expect(results[0].actionsDispatched).toBe(1);
593
+ expect(dispatchWork).not.toHaveBeenCalled();
594
+ });
595
+ it('fan-in group completing advances parent to next phase', async () => {
596
+ const fanInWorkflow = {
597
+ apiVersion: 'v1.1',
598
+ kind: 'WorkflowDefinition',
599
+ metadata: { name: 'test-fan-in' },
600
+ phases: [
601
+ { name: 'development', template: 'development' },
602
+ { name: 'qa', template: 'qa' },
603
+ ],
604
+ transitions: [
605
+ { from: 'Backlog', to: 'development' },
606
+ { from: 'Finished', to: 'qa' },
607
+ ],
608
+ parallelism: [
609
+ {
610
+ name: 'dev-fan-in',
611
+ phases: ['development'],
612
+ strategy: 'fan-in',
613
+ waitForAll: true,
614
+ },
615
+ ],
616
+ };
617
+ const parentIssue = makeIssue({
618
+ id: 'parent-1',
619
+ identifier: 'SUP-200',
620
+ status: 'Backlog',
621
+ });
622
+ const subIssues = [
623
+ makeIssue({ id: 'sub-1', identifier: 'SUP-201', status: 'Backlog', parentId: 'parent-1' }),
624
+ makeIssue({ id: 'sub-2', identifier: 'SUP-202', status: 'Backlog', parentId: 'parent-1' }),
625
+ makeIssue({ id: 'sub-3', identifier: 'SUP-203', status: 'Backlog', parentId: 'parent-1' }),
626
+ ];
627
+ const dispatchWork = vi.fn().mockResolvedValue(undefined);
628
+ const getSubIssues = vi.fn().mockResolvedValue(subIssues);
629
+ const deps = makeMockDeps({
630
+ listIssues: vi.fn().mockResolvedValue([parentIssue]),
631
+ isParentIssue: vi.fn().mockResolvedValue(true),
632
+ dispatchWork,
633
+ getSubIssues,
634
+ });
635
+ const governor = new WorkflowGovernor(makeConfig({
636
+ workflow: { workflow: fanInWorkflow, useBuiltinDefault: false },
637
+ }), deps);
638
+ const results = await governor.scanOnce();
639
+ expect(results[0].actionsDispatched).toBe(1);
640
+ // All 3 sub-issues dispatched + 1 parent advancement to QA
641
+ expect(dispatchWork).toHaveBeenCalledTimes(4);
642
+ // Sub-issues dispatched for development
643
+ expect(dispatchWork).toHaveBeenCalledWith(expect.objectContaining({ id: 'sub-1' }), 'trigger-development');
644
+ expect(dispatchWork).toHaveBeenCalledWith(expect.objectContaining({ id: 'sub-2' }), 'trigger-development');
645
+ expect(dispatchWork).toHaveBeenCalledWith(expect.objectContaining({ id: 'sub-3' }), 'trigger-development');
646
+ // Parent advanced to QA after all fan-in tasks completed
647
+ expect(dispatchWork).toHaveBeenCalledWith(expect.objectContaining({ id: 'parent-1' }), 'trigger-qa');
648
+ });
649
+ it('non-parent issues with parallelism groups dispatch normally', async () => {
650
+ const issue = makeIssue({
651
+ id: 'issue-1',
652
+ identifier: 'SUP-100',
653
+ status: 'Backlog',
654
+ });
655
+ const dispatchWork = vi.fn().mockResolvedValue(undefined);
656
+ const deps = makeMockDeps({
657
+ listIssues: vi.fn().mockResolvedValue([issue]),
658
+ isParentIssue: vi.fn().mockResolvedValue(false),
659
+ dispatchWork,
660
+ });
661
+ const governor = new WorkflowGovernor(makeConfig({
662
+ workflow: { workflow: makeWorkflowWithParallelism(), useBuiltinDefault: false },
663
+ }), deps);
664
+ const results = await governor.scanOnce();
665
+ expect(results[0].actionsDispatched).toBe(1);
666
+ // Normal dispatch, not parallel
667
+ expect(dispatchWork).toHaveBeenCalledWith(expect.objectContaining({ id: 'issue-1' }), 'trigger-development');
668
+ });
669
+ });
@@ -9,4 +9,5 @@ export * from './config/index.js';
9
9
  export * from './manifest/index.js';
10
10
  export * from './tools/index.js';
11
11
  export * from './workflow/index.js';
12
+ export * from './routing/index.js';
12
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,kBAAkB,CAAA;AAChC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA"}
package/dist/src/index.js CHANGED
@@ -9,3 +9,4 @@ export * from './config/index.js';
9
9
  export * from './manifest/index.js';
10
10
  export * from './tools/index.js';
11
11
  export * from './workflow/index.js';
12
+ export * from './routing/index.js';
@@ -20,6 +20,8 @@ export interface IssueTrackerIssue {
20
20
  labels: string[];
21
21
  teamName?: string;
22
22
  projectName?: string;
23
+ /** Parent issue ID, if this issue is a sub-issue. Used to filter child issues from backlog scans. */
24
+ parentId?: string;
23
25
  }
24
26
  /**
25
27
  * Configuration for creating an issue tracker session.
@@ -70,6 +72,8 @@ export interface IssueTrackerClient {
70
72
  getIssue(idOrIdentifier: string): Promise<IssueTrackerIssue>;
71
73
  /** Check whether an issue has sub-issues (is a parent) */
72
74
  isParentIssue(issueId: string): Promise<boolean>;
75
+ /** Check whether an issue is a sub-issue (has a parent) */
76
+ isChildIssue(issueId: string): Promise<boolean>;
73
77
  /** Create a comment on an issue */
74
78
  createComment(issueId: string, body: string): Promise<{
75
79
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"issue-tracker-client.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/issue-tracker-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issue-tracker-client.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/issue-tracker-client.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -1062,6 +1062,11 @@ export class AgentOrchestrator {
1062
1062
  for (const issue of allIssues) {
1063
1063
  if (results.length >= maxIssues)
1064
1064
  break;
1065
+ // Skip sub-issues — coordinators manage their lifecycle, not the backlog scanner
1066
+ if (issue.parentId) {
1067
+ console.log(`[orchestrator] Skipping sub-issue ${issue.identifier} — managed by parent coordinator`);
1068
+ continue;
1069
+ }
1065
1070
  // Filter by allowedProjects from .agentfactory/config.yaml
1066
1071
  if (this.allowedProjects && this.allowedProjects.length > 0) {
1067
1072
  if (!issue.projectName || !this.allowedProjects.includes(issue.projectName)) {
@@ -2968,6 +2973,25 @@ ORCHESTRATOR_INSTALL=1 exec pnpm add "$@"
2968
2973
  throw new Error(`Issue ${identifier} is in terminal status '${currentStatus}' — skipping ${workType ?? 'auto'} work. ` +
2969
2974
  `The issue was likely accepted/canceled after being queued.`);
2970
2975
  }
2976
+ // Guard: skip sub-issues that should be managed by a coordinator, not spawned independently.
2977
+ // Only applies when no explicit work type is provided (i.e., orchestrator auto-pickup).
2978
+ // Coordinators spawning sub-agents always pass an explicit work type, so they bypass this check.
2979
+ if (!workType) {
2980
+ try {
2981
+ const isChild = await this.client.isChildIssue(issueId);
2982
+ if (isChild) {
2983
+ throw new Error(`Issue ${identifier} is a sub-issue managed by a parent coordinator — skipping independent pickup. ` +
2984
+ `Sub-issues should only be processed by their parent's coordination agent.`);
2985
+ }
2986
+ }
2987
+ catch (err) {
2988
+ // Re-throw our own guard error; swallow API errors so we don't block on transient failures
2989
+ if (err instanceof Error && err.message.includes('managed by a parent coordinator')) {
2990
+ throw err;
2991
+ }
2992
+ console.warn(`Failed to check child status for ${identifier}:`, err);
2993
+ }
2994
+ }
2971
2995
  // Defense in depth: re-validate git remote before spawning (guards against long-running instances)
2972
2996
  if (this.config.repository) {
2973
2997
  validateGitRemote(this.config.repository, this.gitRoot);
@@ -1 +1 @@
1
- {"version":3,"file":"parse-work-result.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/parse-work-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAuGjD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,QAAQ,EAAE,aAAa,GACtB,eAAe,CAyCjB"}
1
+ {"version":3,"file":"parse-work-result.d.ts","sourceRoot":"","sources":["../../../src/orchestrator/parse-work-result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AA6GjD;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,QAAQ,EAAE,aAAa,GACtB,eAAe,CAyCjB"}
@@ -91,6 +91,12 @@ const COORDINATION_FAIL_PATTERNS = [
91
91
  // Explicit result labels
92
92
  /\bCoordination\s+(?:Result|Status|Verdict):\s*\*{0,2}Fail(?:ed)?\*{0,2}/i,
93
93
  /\bCoordination\s+Failed/i,
94
+ // Early-exit detection — agent reported progress instead of completing coordination
95
+ /\bI'll wait\b.*\bcomplete\b/i,
96
+ /\bagents?\s+(?:are|is)\s+(?:actively\s+)?(?:working|running|in\s+progress)\b/i,
97
+ /\bwork\s+is\s+in\s+progress\b/i,
98
+ /\bwait(?:ing)?\s+for\s+(?:them|sub-?\s*agents?|sub-?\s*issues?)\s+to\s+(?:complete|finish)\b/i,
99
+ /\bbefore\s+proceeding\s+to\s+(?:Layer|Wave|Phase)\s+\d/i,
94
100
  ];
95
101
  /**
96
102
  * Parse the agent's result message to determine whether the work passed or failed.
@@ -192,6 +192,25 @@ describe('parseWorkResult', () => {
192
192
  it('checks fail patterns before pass patterns', () => {
193
193
  expect(parseWorkResult('All 8/8 sub-issues completed.\n### Must Fix Before Merge\n1. Bad code', 'coordination')).toBe('failed');
194
194
  });
195
+ // Early-exit detection — agent reported progress instead of completing
196
+ it('detects "I\'ll wait for them to complete" as early-exit fail', () => {
197
+ expect(parseWorkResult("Both agents are progressing well. I'll wait for them to complete before proceeding.", 'coordination')).toBe('failed');
198
+ });
199
+ it('detects "agents are actively working" as early-exit fail', () => {
200
+ expect(parseWorkResult('SUP-1552 agent has read the existing patterns. Agents are actively working on their sub-issues.', 'coordination')).toBe('failed');
201
+ });
202
+ it('detects "waiting for sub-agents to finish" as early-exit fail', () => {
203
+ expect(parseWorkResult('Spawned 2 agents. Waiting for sub-agents to finish their work.', 'coordination')).toBe('failed');
204
+ });
205
+ it('detects "before proceeding to Layer 2" as early-exit fail', () => {
206
+ expect(parseWorkResult('Wave 1 agents spawned. Will check results before proceeding to Layer 2.', 'coordination')).toBe('failed');
207
+ });
208
+ it('detects "work is in progress" as early-exit fail', () => {
209
+ expect(parseWorkResult('Work is in progress on 3 sub-issues. Status will be updated.', 'coordination')).toBe('failed');
210
+ });
211
+ it('early-exit patterns also apply to inflight-coordination', () => {
212
+ expect(parseWorkResult("Agents are actively running. I'll wait for them to complete.", 'inflight-coordination')).toBe('failed');
213
+ });
195
214
  });
196
215
  // QA coordination with real agent output formats
197
216
  describe('QA coordination real-world patterns', () => {
@@ -4,7 +4,7 @@
4
4
  * Creates provider instances based on name.
5
5
  * Supports provider selection via env vars, config, labels, and mentions.
6
6
  *
7
- * Resolution order (highest → lowest):
7
+ * Sync resolution order (highest → lowest):
8
8
  * 1. Issue label override (provider:codex)
9
9
  * 2. Mention context override ("use codex", "@codex")
10
10
  * 3. Config providers.byWorkType
@@ -14,6 +14,18 @@
14
14
  * 7. Config providers.default
15
15
  * 8. Env var AGENT_PROVIDER
16
16
  * 9. Hardcoded 'claude'
17
+ *
18
+ * Async resolution order (with MAB routing):
19
+ * 1. Issue label override (provider:codex) — explicit human override
20
+ * 2. Mention context override ("use codex") — explicit human override
21
+ * 3. Config providers.byWorkType — static config
22
+ * 4. Config providers.byProject — static config
23
+ * 5. MAB-based intelligent routing — learned routing (feature-flagged)
24
+ * 6. Env var AGENT_PROVIDER_{WORKTYPE} — static fallback
25
+ * 7. Env var AGENT_PROVIDER_{PROJECT} — static fallback
26
+ * 8. Config providers.default — static fallback
27
+ * 9. Env var AGENT_PROVIDER — static fallback
28
+ * 10. Hardcoded 'claude' — ultimate fallback
17
29
  */
18
30
  export type { AgentProviderName, AgentProvider, AgentSpawnConfig, AgentHandle, AgentEvent } from './types.js';
19
31
  export type { AgentInitEvent, AgentSystemEvent, AgentAssistantTextEvent, AgentToolUseEvent, AgentToolResultEvent, AgentToolProgressEvent, AgentResultEvent, AgentErrorEvent, AgentCostData, } from './types.js';
@@ -23,6 +35,8 @@ export { AmpProvider, createAmpProvider } from './amp-provider.js';
23
35
  export { SpringAiProvider, createSpringAiProvider } from './spring-ai-provider.js';
24
36
  export { A2aProvider, createA2aProvider } from './a2a-provider.js';
25
37
  import type { AgentProvider, AgentProviderName } from './types.js';
38
+ import type { PosteriorStore } from '../routing/posterior-store.js';
39
+ import type { RoutingConfig } from '../routing/types.js';
26
40
  /** Provider configuration from .agentfactory/config.yaml */
27
41
  export interface ProvidersConfig {
28
42
  /** Default provider for all agents */
@@ -50,6 +64,20 @@ export interface ProviderResolutionResult {
50
64
  name: AgentProviderName;
51
65
  source: string;
52
66
  }
67
+ /** Context for MAB-based routing in async provider resolution */
68
+ export interface RoutingContext {
69
+ /** Posterior store instance (from server) for reading MAB posteriors */
70
+ posteriorStore?: PosteriorStore;
71
+ /** Routing configuration (from repo config) */
72
+ routingConfig?: RoutingConfig;
73
+ /** Providers to consider for MAB selection (defaults to all valid providers) */
74
+ availableProviders?: AgentProviderName[];
75
+ }
76
+ /** Extended resolution context for async provider resolution with MAB routing */
77
+ export interface AsyncProviderResolutionContext extends ProviderResolutionContext {
78
+ /** Optional routing context for MAB-based intelligent routing */
79
+ routingContext?: RoutingContext;
80
+ }
53
81
  export declare const PROVIDER_ALIASES: Record<string, AgentProviderName>;
54
82
  /**
55
83
  * Create a provider instance by name.
@@ -96,5 +124,40 @@ export declare function resolveProviderWithSource(context?: ProviderResolutionCo
96
124
  * @returns The resolved provider name
97
125
  */
98
126
  export declare function resolveProviderName(options?: ProviderResolutionContext): AgentProviderName;
127
+ /**
128
+ * Async version of resolveProviderWithSource() that includes MAB-based
129
+ * intelligent routing as tier 5 in the cascade.
130
+ *
131
+ * Resolution order (highest → lowest):
132
+ * 1. Issue label override (provider:codex) — explicit human override
133
+ * 2. Mention context override ("use codex") — explicit human override
134
+ * 3. Config providers.byWorkType — static config
135
+ * 4. Config providers.byProject — static config
136
+ * 5. MAB-based intelligent routing — learned routing (feature-flagged)
137
+ * 6. Env var AGENT_PROVIDER_{WORKTYPE} — static fallback
138
+ * 7. Env var AGENT_PROVIDER_{PROJECT} — static fallback
139
+ * 8. Config providers.default — static fallback
140
+ * 9. Env var AGENT_PROVIDER — static fallback
141
+ * 10. Hardcoded 'claude' — ultimate fallback
142
+ *
143
+ * MAB routing (tier 5) only activates when:
144
+ * - routingContext.posteriorStore is provided
145
+ * - routingContext.routingConfig?.enabled is true
146
+ * - context.workType is defined
147
+ *
148
+ * If selectProvider() throws or returns low confidence, falls through silently.
149
+ *
150
+ * @param context - Full resolution context including optional routing context
151
+ * @returns The resolved provider name and its source
152
+ */
153
+ export declare function resolveProviderWithSourceAsync(context?: AsyncProviderResolutionContext): Promise<ProviderResolutionResult>;
154
+ /**
155
+ * Async version of resolveProviderName() that includes MAB-based
156
+ * intelligent routing.
157
+ *
158
+ * @param options - Resolution context including optional routing context
159
+ * @returns The resolved provider name
160
+ */
161
+ export declare function resolveProviderNameAsync(options?: AsyncProviderResolutionContext): Promise<AgentProviderName>;
99
162
  export declare function isValidProviderName(name: string): name is AgentProviderName;
100
163
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC7G,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAClF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAWlE,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,sCAAsC;IACtC,OAAO,CAAC,EAAE,iBAAiB,CAAA;IAC3B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC9C,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;CAC9C;AAED,uEAAuE;AACvE,MAAM,WAAW,yBAAyB;IACxC,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,wFAAwF;IACxF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,qEAAqE;IACrE,eAAe,CAAC,EAAE,eAAe,CAAA;CAClC;AAED,4DAA4D;AAC5D,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,iBAAiB,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;CACf;AAMD,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAK9D,CAAA;AAMD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,GAAG,aAAa,CAkBrE;AAMD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,GAAG,IAAI,CAWpF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CA6BjF;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,wBAAwB,CAgEvG;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,yBAAyB,GAAG,iBAAiB,CAE1F;AAQD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,iBAAiB,CAE3E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * Creates provider instances based on name.
5
5
  * Supports provider selection via env vars, config, labels, and mentions.
6
6
  *
7
- * Resolution order (highest → lowest):
7
+ * Sync resolution order (highest → lowest):
8
8
  * 1. Issue label override (provider:codex)
9
9
  * 2. Mention context override ("use codex", "@codex")
10
10
  * 3. Config providers.byWorkType
@@ -14,6 +14,18 @@
14
14
  * 7. Config providers.default
15
15
  * 8. Env var AGENT_PROVIDER
16
16
  * 9. Hardcoded 'claude'
17
+ *
18
+ * Async resolution order (with MAB routing):
19
+ * 1. Issue label override (provider:codex) — explicit human override
20
+ * 2. Mention context override ("use codex") — explicit human override
21
+ * 3. Config providers.byWorkType — static config
22
+ * 4. Config providers.byProject — static config
23
+ * 5. MAB-based intelligent routing — learned routing (feature-flagged)
24
+ * 6. Env var AGENT_PROVIDER_{WORKTYPE} — static fallback
25
+ * 7. Env var AGENT_PROVIDER_{PROJECT} — static fallback
26
+ * 8. Config providers.default — static fallback
27
+ * 9. Env var AGENT_PROVIDER — static fallback
28
+ * 10. Hardcoded 'claude' — ultimate fallback
17
29
  */
18
30
  export { ClaudeProvider, createClaudeProvider } from './claude-provider.js';
19
31
  export { CodexProvider, createCodexProvider } from './codex-provider.js';
@@ -25,6 +37,7 @@ import { CodexProvider } from './codex-provider.js';
25
37
  import { AmpProvider } from './amp-provider.js';
26
38
  import { SpringAiProvider } from './spring-ai-provider.js';
27
39
  import { A2aProvider } from './a2a-provider.js';
40
+ import { logger } from '../logger.js';
28
41
  // ---------------------------------------------------------------------------
29
42
  // Aliases — friendly names that map to real provider names
30
43
  // ---------------------------------------------------------------------------
@@ -200,6 +213,124 @@ export function resolveProviderName(options) {
200
213
  return resolveProviderWithSource(options).name;
201
214
  }
202
215
  // ---------------------------------------------------------------------------
216
+ // Async provider resolution (with MAB routing)
217
+ // ---------------------------------------------------------------------------
218
+ /**
219
+ * Async version of resolveProviderWithSource() that includes MAB-based
220
+ * intelligent routing as tier 5 in the cascade.
221
+ *
222
+ * Resolution order (highest → lowest):
223
+ * 1. Issue label override (provider:codex) — explicit human override
224
+ * 2. Mention context override ("use codex") — explicit human override
225
+ * 3. Config providers.byWorkType — static config
226
+ * 4. Config providers.byProject — static config
227
+ * 5. MAB-based intelligent routing — learned routing (feature-flagged)
228
+ * 6. Env var AGENT_PROVIDER_{WORKTYPE} — static fallback
229
+ * 7. Env var AGENT_PROVIDER_{PROJECT} — static fallback
230
+ * 8. Config providers.default — static fallback
231
+ * 9. Env var AGENT_PROVIDER — static fallback
232
+ * 10. Hardcoded 'claude' — ultimate fallback
233
+ *
234
+ * MAB routing (tier 5) only activates when:
235
+ * - routingContext.posteriorStore is provided
236
+ * - routingContext.routingConfig?.enabled is true
237
+ * - context.workType is defined
238
+ *
239
+ * If selectProvider() throws or returns low confidence, falls through silently.
240
+ *
241
+ * @param context - Full resolution context including optional routing context
242
+ * @returns The resolved provider name and its source
243
+ */
244
+ export async function resolveProviderWithSourceAsync(context) {
245
+ // 1. Issue label override
246
+ if (context?.labels?.length) {
247
+ const fromLabel = extractProviderFromLabels(context.labels);
248
+ if (fromLabel) {
249
+ return { name: fromLabel, source: `label provider:${fromLabel}` };
250
+ }
251
+ }
252
+ // 2. Mention context override
253
+ if (context?.mentionContext) {
254
+ const fromMention = extractProviderFromMention(context.mentionContext);
255
+ if (fromMention) {
256
+ return { name: fromMention, source: `mention "${context.mentionContext.substring(0, 30)}"` };
257
+ }
258
+ }
259
+ // 3. Config byWorkType
260
+ if (context?.workType && context?.configProviders?.byWorkType) {
261
+ const configWorkType = context.configProviders.byWorkType[context.workType];
262
+ if (configWorkType && isValidProviderName(configWorkType)) {
263
+ return { name: configWorkType, source: `config providers.byWorkType.${context.workType}` };
264
+ }
265
+ }
266
+ // 4. Config byProject
267
+ if (context?.project && context?.configProviders?.byProject) {
268
+ const configProject = context.configProviders.byProject[context.project];
269
+ if (configProject && isValidProviderName(configProject)) {
270
+ return { name: configProject, source: `config providers.byProject.${context.project}` };
271
+ }
272
+ }
273
+ // 5. MAB-based intelligent routing (feature-flagged)
274
+ if (context?.routingContext?.posteriorStore &&
275
+ context?.routingContext?.routingConfig?.enabled &&
276
+ context?.workType) {
277
+ try {
278
+ const { selectProvider } = await import('../routing/routing-engine.js');
279
+ const availableProviders = context.routingContext.availableProviders ?? VALID_PROVIDER_NAMES;
280
+ const decision = await selectProvider(context.routingContext.posteriorStore, context.workType, availableProviders, context.routingContext.routingConfig);
281
+ // Only use MAB decision if confidence exceeds a meaningful threshold
282
+ // and it's not purely exploratory due to uncertainty
283
+ if (decision.confidence > 0 && decision.explorationReason !== 'uncertainty') {
284
+ return { name: decision.selectedProvider, source: 'mab-routing' };
285
+ }
286
+ // Low confidence or uncertainty-driven exploration — fall through to static fallbacks
287
+ }
288
+ catch (err) {
289
+ logger.warn('MAB routing failed, falling through to static fallbacks', {
290
+ error: err instanceof Error ? err.message : String(err),
291
+ workType: context.workType,
292
+ });
293
+ }
294
+ }
295
+ // 6. Env var AGENT_PROVIDER_{WORKTYPE}
296
+ if (context?.workType) {
297
+ const workTypeKey = `AGENT_PROVIDER_${context.workType.toUpperCase().replace(/-/g, '_')}`;
298
+ const workTypeProvider = process.env[workTypeKey];
299
+ if (workTypeProvider && isValidProviderName(workTypeProvider)) {
300
+ return { name: workTypeProvider, source: `env ${workTypeKey}` };
301
+ }
302
+ }
303
+ // 7. Env var AGENT_PROVIDER_{PROJECT}
304
+ if (context?.project) {
305
+ const projectKey = `AGENT_PROVIDER_${context.project.toUpperCase()}`;
306
+ const projectProvider = process.env[projectKey];
307
+ if (projectProvider && isValidProviderName(projectProvider)) {
308
+ return { name: projectProvider, source: `env ${projectKey}` };
309
+ }
310
+ }
311
+ // 8. Config providers.default
312
+ if (context?.configProviders?.default && isValidProviderName(context.configProviders.default)) {
313
+ return { name: context.configProviders.default, source: 'config providers.default' };
314
+ }
315
+ // 9. Env var AGENT_PROVIDER
316
+ const globalProvider = process.env.AGENT_PROVIDER;
317
+ if (globalProvider && isValidProviderName(globalProvider)) {
318
+ return { name: globalProvider, source: 'env AGENT_PROVIDER' };
319
+ }
320
+ // 10. Hardcoded fallback
321
+ return { name: 'claude', source: 'default' };
322
+ }
323
+ /**
324
+ * Async version of resolveProviderName() that includes MAB-based
325
+ * intelligent routing.
326
+ *
327
+ * @param options - Resolution context including optional routing context
328
+ * @returns The resolved provider name
329
+ */
330
+ export async function resolveProviderNameAsync(options) {
331
+ return (await resolveProviderWithSourceAsync(options)).name;
332
+ }
333
+ // ---------------------------------------------------------------------------
203
334
  // Internal helpers
204
335
  // ---------------------------------------------------------------------------
205
336
  const VALID_PROVIDER_NAMES = ['claude', 'codex', 'amp', 'spring-ai', 'a2a'];