@mcp-abap-adt/llm-agent-libs 16.2.0 → 18.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 (198) hide show
  1. package/dist/adapters/llm-provider-bridge.js +2 -2
  2. package/dist/adapters/llm-provider-bridge.js.map +1 -1
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +48 -37
  5. package/dist/agent.js.map +1 -1
  6. package/dist/builder.d.ts +19 -0
  7. package/dist/builder.d.ts.map +1 -1
  8. package/dist/builder.js +29 -3
  9. package/dist/builder.js.map +1 -1
  10. package/dist/classifier/llm-classifier.d.ts.map +1 -1
  11. package/dist/classifier/llm-classifier.js +1 -0
  12. package/dist/classifier/llm-classifier.js.map +1 -1
  13. package/dist/coordinator/dag/abort-error-strategy.d.ts +7 -0
  14. package/dist/coordinator/dag/abort-error-strategy.d.ts.map +1 -0
  15. package/dist/coordinator/dag/abort-error-strategy.js +8 -0
  16. package/dist/coordinator/dag/abort-error-strategy.js.map +1 -0
  17. package/dist/coordinator/dag/compose-node-task.d.ts +8 -0
  18. package/dist/coordinator/dag/compose-node-task.d.ts.map +1 -0
  19. package/dist/coordinator/dag/compose-node-task.js +41 -0
  20. package/dist/coordinator/dag/compose-node-task.js.map +1 -0
  21. package/dist/coordinator/dag/dag-plan-interpreter.d.ts +9 -0
  22. package/dist/coordinator/dag/dag-plan-interpreter.d.ts.map +1 -0
  23. package/dist/coordinator/dag/dag-plan-interpreter.js +236 -0
  24. package/dist/coordinator/dag/dag-plan-interpreter.js.map +1 -0
  25. package/dist/coordinator/dag/index.d.ts +5 -0
  26. package/dist/coordinator/dag/index.d.ts.map +1 -0
  27. package/dist/coordinator/dag/index.js +5 -0
  28. package/dist/coordinator/dag/index.js.map +1 -0
  29. package/dist/coordinator/dag/llm-dag-planner.d.ts +24 -0
  30. package/dist/coordinator/dag/llm-dag-planner.d.ts.map +1 -0
  31. package/dist/coordinator/dag/llm-dag-planner.js +161 -0
  32. package/dist/coordinator/dag/llm-dag-planner.js.map +1 -0
  33. package/dist/coordinator/dag/llm-finalizer.d.ts +21 -0
  34. package/dist/coordinator/dag/llm-finalizer.d.ts.map +1 -0
  35. package/dist/coordinator/dag/llm-finalizer.js +77 -0
  36. package/dist/coordinator/dag/llm-finalizer.js.map +1 -0
  37. package/dist/coordinator/dag/llm-review-strategy.d.ts +17 -0
  38. package/dist/coordinator/dag/llm-review-strategy.d.ts.map +1 -0
  39. package/dist/coordinator/dag/llm-review-strategy.js +149 -0
  40. package/dist/coordinator/dag/llm-review-strategy.js.map +1 -0
  41. package/dist/coordinator/dag/noop-review-strategy.d.ts +8 -0
  42. package/dist/coordinator/dag/noop-review-strategy.d.ts.map +1 -0
  43. package/dist/coordinator/dag/noop-review-strategy.js +11 -0
  44. package/dist/coordinator/dag/noop-review-strategy.js.map +1 -0
  45. package/dist/coordinator/dag/passthrough-finalizer.d.ts +11 -0
  46. package/dist/coordinator/dag/passthrough-finalizer.d.ts.map +1 -0
  47. package/dist/coordinator/dag/passthrough-finalizer.js +13 -0
  48. package/dist/coordinator/dag/passthrough-finalizer.js.map +1 -0
  49. package/dist/coordinator/dag/render-ancestor-context.d.ts +8 -0
  50. package/dist/coordinator/dag/render-ancestor-context.d.ts.map +1 -0
  51. package/dist/coordinator/dag/render-ancestor-context.js +27 -0
  52. package/dist/coordinator/dag/render-ancestor-context.js.map +1 -0
  53. package/dist/coordinator/dag/replan-error-strategy.d.ts +15 -0
  54. package/dist/coordinator/dag/replan-error-strategy.d.ts.map +1 -0
  55. package/dist/coordinator/dag/replan-error-strategy.js +32 -0
  56. package/dist/coordinator/dag/replan-error-strategy.js.map +1 -0
  57. package/dist/coordinator/dag/reviewer-error-strategy.d.ts +15 -0
  58. package/dist/coordinator/dag/reviewer-error-strategy.d.ts.map +1 -0
  59. package/dist/coordinator/dag/reviewer-error-strategy.js +38 -0
  60. package/dist/coordinator/dag/reviewer-error-strategy.js.map +1 -0
  61. package/dist/coordinator/dag/splice-sub-plan.d.ts +12 -0
  62. package/dist/coordinator/dag/splice-sub-plan.d.ts.map +1 -0
  63. package/dist/coordinator/dag/splice-sub-plan.js +41 -0
  64. package/dist/coordinator/dag/splice-sub-plan.js.map +1 -0
  65. package/dist/coordinator/dag/subagent-state-oracle.d.ts +19 -0
  66. package/dist/coordinator/dag/subagent-state-oracle.d.ts.map +1 -0
  67. package/dist/coordinator/dag/subagent-state-oracle.js +31 -0
  68. package/dist/coordinator/dag/subagent-state-oracle.js.map +1 -0
  69. package/dist/coordinator/dag/template-finalizer.d.ts +11 -0
  70. package/dist/coordinator/dag/template-finalizer.d.ts.map +1 -0
  71. package/dist/coordinator/dag/template-finalizer.js +17 -0
  72. package/dist/coordinator/dag/template-finalizer.js.map +1 -0
  73. package/dist/coordinator/dispatch/subagent.d.ts.map +1 -1
  74. package/dist/coordinator/dispatch/subagent.js +6 -12
  75. package/dist/coordinator/dispatch/subagent.js.map +1 -1
  76. package/dist/coordinator/index.d.ts +6 -0
  77. package/dist/coordinator/index.d.ts.map +1 -1
  78. package/dist/coordinator/index.js +6 -0
  79. package/dist/coordinator/index.js.map +1 -1
  80. package/dist/coordinator/planning/one-shot.d.ts.map +1 -1
  81. package/dist/coordinator/planning/one-shot.js +14 -7
  82. package/dist/coordinator/planning/one-shot.js.map +1 -1
  83. package/dist/coordinator/stepper/cyclic-react-executor.d.ts +42 -0
  84. package/dist/coordinator/stepper/cyclic-react-executor.d.ts.map +1 -0
  85. package/dist/coordinator/stepper/cyclic-react-executor.js +272 -0
  86. package/dist/coordinator/stepper/cyclic-react-executor.js.map +1 -0
  87. package/dist/coordinator/stepper/index.d.ts +10 -0
  88. package/dist/coordinator/stepper/index.d.ts.map +1 -0
  89. package/dist/coordinator/stepper/index.js +10 -0
  90. package/dist/coordinator/stepper/index.js.map +1 -0
  91. package/dist/coordinator/stepper/llm-stepper-planner.d.ts +27 -0
  92. package/dist/coordinator/stepper/llm-stepper-planner.d.ts.map +1 -0
  93. package/dist/coordinator/stepper/llm-stepper-planner.js +86 -0
  94. package/dist/coordinator/stepper/llm-stepper-planner.js.map +1 -0
  95. package/dist/coordinator/stepper/llm-task-formalizer.d.ts +22 -0
  96. package/dist/coordinator/stepper/llm-task-formalizer.d.ts.map +1 -0
  97. package/dist/coordinator/stepper/llm-task-formalizer.js +73 -0
  98. package/dist/coordinator/stepper/llm-task-formalizer.js.map +1 -0
  99. package/dist/coordinator/stepper/logging-llm.d.ts +30 -0
  100. package/dist/coordinator/stepper/logging-llm.d.ts.map +1 -0
  101. package/dist/coordinator/stepper/logging-llm.js +73 -0
  102. package/dist/coordinator/stepper/logging-llm.js.map +1 -0
  103. package/dist/coordinator/stepper/need-resolver.d.ts +18 -0
  104. package/dist/coordinator/stepper/need-resolver.d.ts.map +1 -0
  105. package/dist/coordinator/stepper/need-resolver.js +42 -0
  106. package/dist/coordinator/stepper/need-resolver.js.map +1 -0
  107. package/dist/coordinator/stepper/root-finalizer.d.ts +17 -0
  108. package/dist/coordinator/stepper/root-finalizer.d.ts.map +1 -0
  109. package/dist/coordinator/stepper/root-finalizer.js +53 -0
  110. package/dist/coordinator/stepper/root-finalizer.js.map +1 -0
  111. package/dist/coordinator/stepper/static-planner.d.ts +23 -0
  112. package/dist/coordinator/stepper/static-planner.d.ts.map +1 -0
  113. package/dist/coordinator/stepper/static-planner.js +25 -0
  114. package/dist/coordinator/stepper/static-planner.js.map +1 -0
  115. package/dist/coordinator/stepper/stepper-interpreter.d.ts +6 -0
  116. package/dist/coordinator/stepper/stepper-interpreter.d.ts.map +1 -0
  117. package/dist/coordinator/stepper/stepper-interpreter.js +130 -0
  118. package/dist/coordinator/stepper/stepper-interpreter.js.map +1 -0
  119. package/dist/coordinator/stepper/stepper.d.ts +36 -0
  120. package/dist/coordinator/stepper/stepper.d.ts.map +1 -0
  121. package/dist/coordinator/stepper/stepper.js +49 -0
  122. package/dist/coordinator/stepper/stepper.js.map +1 -0
  123. package/dist/index.d.ts +10 -2
  124. package/dist/index.d.ts.map +1 -1
  125. package/dist/index.js +10 -1
  126. package/dist/index.js.map +1 -1
  127. package/dist/logger/default-request-logger.d.ts +18 -6
  128. package/dist/logger/default-request-logger.d.ts.map +1 -1
  129. package/dist/logger/default-request-logger.js +25 -4
  130. package/dist/logger/default-request-logger.js.map +1 -1
  131. package/dist/logger/noop-request-logger.d.ts +10 -5
  132. package/dist/logger/noop-request-logger.d.ts.map +1 -1
  133. package/dist/logger/noop-request-logger.js +5 -3
  134. package/dist/logger/noop-request-logger.js.map +1 -1
  135. package/dist/logger/session-request-logger.d.ts +50 -0
  136. package/dist/logger/session-request-logger.d.ts.map +1 -0
  137. package/dist/logger/session-request-logger.js +161 -0
  138. package/dist/logger/session-request-logger.js.map +1 -0
  139. package/dist/pipeline/context.d.ts +8 -3
  140. package/dist/pipeline/context.d.ts.map +1 -1
  141. package/dist/pipeline/default-pipeline.d.ts +35 -4
  142. package/dist/pipeline/default-pipeline.d.ts.map +1 -1
  143. package/dist/pipeline/default-pipeline.js +49 -7
  144. package/dist/pipeline/default-pipeline.js.map +1 -1
  145. package/dist/pipeline/handlers/coordinator.d.ts +0 -3
  146. package/dist/pipeline/handlers/coordinator.d.ts.map +1 -1
  147. package/dist/pipeline/handlers/coordinator.js +33 -22
  148. package/dist/pipeline/handlers/coordinator.js.map +1 -1
  149. package/dist/pipeline/handlers/dag-coordinator.d.ts +47 -0
  150. package/dist/pipeline/handlers/dag-coordinator.d.ts.map +1 -0
  151. package/dist/pipeline/handlers/dag-coordinator.js +369 -0
  152. package/dist/pipeline/handlers/dag-coordinator.js.map +1 -0
  153. package/dist/pipeline/handlers/index.d.ts +14 -0
  154. package/dist/pipeline/handlers/index.d.ts.map +1 -1
  155. package/dist/pipeline/handlers/index.js +8 -1
  156. package/dist/pipeline/handlers/index.js.map +1 -1
  157. package/dist/pipeline/handlers/rag-query.d.ts.map +1 -1
  158. package/dist/pipeline/handlers/rag-query.js +1 -0
  159. package/dist/pipeline/handlers/rag-query.js.map +1 -1
  160. package/dist/pipeline/handlers/subagent.d.ts.map +1 -1
  161. package/dist/pipeline/handlers/subagent.js +0 -2
  162. package/dist/pipeline/handlers/subagent.js.map +1 -1
  163. package/dist/pipeline/handlers/summarize.d.ts.map +1 -1
  164. package/dist/pipeline/handlers/summarize.js +5 -0
  165. package/dist/pipeline/handlers/summarize.js.map +1 -1
  166. package/dist/pipeline/handlers/tool-loop.d.ts.map +1 -1
  167. package/dist/pipeline/handlers/tool-loop.js +17 -0
  168. package/dist/pipeline/handlers/tool-loop.js.map +1 -1
  169. package/dist/pipeline/handlers/translate.d.ts.map +1 -1
  170. package/dist/pipeline/handlers/translate.js +1 -0
  171. package/dist/pipeline/handlers/translate.js.map +1 -1
  172. package/dist/pipeline/index.d.ts +2 -1
  173. package/dist/pipeline/index.d.ts.map +1 -1
  174. package/dist/pipeline/index.js +1 -1
  175. package/dist/pipeline/index.js.map +1 -1
  176. package/dist/rag/knowledge-rag.d.ts +74 -0
  177. package/dist/rag/knowledge-rag.d.ts.map +1 -0
  178. package/dist/rag/knowledge-rag.js +116 -0
  179. package/dist/rag/knowledge-rag.js.map +1 -0
  180. package/dist/session/session-graph-factory.d.ts +66 -0
  181. package/dist/session/session-graph-factory.d.ts.map +1 -0
  182. package/dist/session/session-graph-factory.js +63 -0
  183. package/dist/session/session-graph-factory.js.map +1 -0
  184. package/dist/session/session-graph.d.ts +54 -0
  185. package/dist/session/session-graph.d.ts.map +1 -0
  186. package/dist/session/session-graph.js +76 -0
  187. package/dist/session/session-graph.js.map +1 -0
  188. package/dist/session/session-registry.d.ts +96 -0
  189. package/dist/session/session-registry.d.ts.map +1 -0
  190. package/dist/session/session-registry.js +297 -0
  191. package/dist/session/session-registry.js.map +1 -0
  192. package/dist/subagent/direct-llm-subagent.d.ts.map +1 -1
  193. package/dist/subagent/direct-llm-subagent.js +0 -2
  194. package/dist/subagent/direct-llm-subagent.js.map +1 -1
  195. package/dist/subagent/smart-agent-subagent.d.ts.map +1 -1
  196. package/dist/subagent/smart-agent-subagent.js +3 -3
  197. package/dist/subagent/smart-agent-subagent.js.map +1 -1
  198. package/package.json +14 -14
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replan-error-strategy.d.ts","sourceRoot":"","sources":["../../../src/coordinator/dag/replan-error-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,QAAQ,EAEb,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,cAAc;IAGtD,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,QAAQ,CAAC,UAAU;IAHrB,QAAQ,CAAC,IAAI,YAAY;gBAEN,OAAO,EAAE,QAAQ,EACzB,UAAU,SAAI;IAGnB,aAAa,CACjB,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,aAAa,CAAC;CAe1B"}
@@ -0,0 +1,32 @@
1
+ import { NeedsDecompositionError, } from '@mcp-abap-adt/llm-agent';
2
+ /**
3
+ * Replans a node ONLY for NeedsDecompositionError (the explicit "decompose me"
4
+ * signal). Any other error → abort (a transient MCP/LLM failure is not fixed by
5
+ * decomposition). Stateless: holds the maxReplans ceiling but never counts — the
6
+ * interpreter owns the per-run counter and passes `remainingReplans`.
7
+ */
8
+ export class ReplanErrorStrategy {
9
+ planner;
10
+ maxReplans;
11
+ name = 'replan';
12
+ constructor(planner, maxReplans = 4) {
13
+ this.planner = planner;
14
+ this.maxReplans = maxReplans;
15
+ }
16
+ async onNodeFailure(_node, error, ctx) {
17
+ if (!(error instanceof NeedsDecompositionError)) {
18
+ return { action: 'abort' };
19
+ }
20
+ if (ctx.remainingReplans <= 0) {
21
+ return { action: 'abort' };
22
+ }
23
+ const { plan: subPlan } = await this.planner.plan({
24
+ prompt: `${ctx.task}\n\nThis task needs decomposition: ${error.reason}`,
25
+ agents: ctx.agents,
26
+ sessionId: ctx.sessionId,
27
+ signal: ctx.signal,
28
+ });
29
+ return { action: 'replan', subPlan };
30
+ }
31
+ }
32
+ //# sourceMappingURL=replan-error-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replan-error-strategy.js","sourceRoot":"","sources":["../../../src/coordinator/dag/replan-error-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,uBAAuB,GAExB,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG;AACH,MAAM,OAAO,mBAAmB;IAGX;IACR;IAHF,IAAI,GAAG,QAAQ,CAAC;IACzB,YACmB,OAAiB,EACzB,aAAa,CAAC;QADN,YAAO,GAAP,OAAO,CAAU;QACzB,eAAU,GAAV,UAAU,CAAI;IACtB,CAAC;IAEJ,KAAK,CAAC,aAAa,CACjB,KAAe,EACf,KAAc,EACd,GAAiB;QAEjB,IAAI,CAAC,CAAC,KAAK,YAAY,uBAAuB,CAAC,EAAE,CAAC;YAChD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD,IAAI,GAAG,CAAC,gBAAgB,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAChD,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,sCAAsC,KAAK,CAAC,MAAM,EAAE;YACvE,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import type { ErrorContext, ErrorReaction, IErrorStrategy, IReviewStrategy, PlanNode } from '@mcp-abap-adt/llm-agent';
2
+ /**
3
+ * Error strategy that delegates recovery to the reviewer: on a node failure it
4
+ * asks the reviewer to replan the REMAINING objective against current state
5
+ * (`reviewExecutionFailure`), returning a `revise` reaction (whole-remainder
6
+ * swap) or `abort`. Stateless — the interpreter owns the per-run budget.
7
+ */
8
+ export declare class ReviewerErrorStrategy implements IErrorStrategy {
9
+ private readonly reviewer;
10
+ readonly maxReplans: number;
11
+ readonly name = "reviewer";
12
+ constructor(reviewer: IReviewStrategy, maxReplans?: number);
13
+ onNodeFailure(node: PlanNode, error: unknown, ctx: ErrorContext): Promise<ErrorReaction>;
14
+ }
15
+ //# sourceMappingURL=reviewer-error-strategy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewer-error-strategy.d.ts","sourceRoot":"","sources":["../../../src/coordinator/dag/reviewer-error-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,cAAc,EACd,eAAe,EACf,QAAQ,EACT,MAAM,yBAAyB,CAAC;AAEjC;;;;;GAKG;AACH,qBAAa,qBAAsB,YAAW,cAAc;IAGxD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,QAAQ,CAAC,UAAU;IAHrB,QAAQ,CAAC,IAAI,cAAc;gBAER,QAAQ,EAAE,eAAe,EACjC,UAAU,SAAI;IAGnB,aAAa,CACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,aAAa,CAAC;CAwB1B"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Error strategy that delegates recovery to the reviewer: on a node failure it
3
+ * asks the reviewer to replan the REMAINING objective against current state
4
+ * (`reviewExecutionFailure`), returning a `revise` reaction (whole-remainder
5
+ * swap) or `abort`. Stateless — the interpreter owns the per-run budget.
6
+ */
7
+ export class ReviewerErrorStrategy {
8
+ reviewer;
9
+ maxReplans;
10
+ name = 'reviewer';
11
+ constructor(reviewer, maxReplans = 4) {
12
+ this.reviewer = reviewer;
13
+ this.maxReplans = maxReplans;
14
+ }
15
+ async onNodeFailure(node, error, ctx) {
16
+ if (ctx.remainingReplans <= 0 ||
17
+ !this.reviewer.reviewExecutionFailure ||
18
+ !ctx.plan ||
19
+ !ctx.completedResults) {
20
+ return { action: 'abort' };
21
+ }
22
+ const decision = await this.reviewer.reviewExecutionFailure({
23
+ objective: ctx.plan.objective,
24
+ plan: ctx.plan,
25
+ trace: ctx.completedResults,
26
+ failedNodeId: node.id,
27
+ error: error instanceof Error ? error.message : String(error),
28
+ agents: ctx.agents,
29
+ sessionId: ctx.sessionId,
30
+ signal: ctx.signal,
31
+ });
32
+ if (decision.action === 'revise') {
33
+ return { action: 'revise', revisedPlan: decision.revisedPlan };
34
+ }
35
+ return { action: 'abort' };
36
+ }
37
+ }
38
+ //# sourceMappingURL=reviewer-error-strategy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewer-error-strategy.js","sourceRoot":"","sources":["../../../src/coordinator/dag/reviewer-error-strategy.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,MAAM,OAAO,qBAAqB;IAGb;IACR;IAHF,IAAI,GAAG,UAAU,CAAC;IAC3B,YACmB,QAAyB,EACjC,aAAa,CAAC;QADN,aAAQ,GAAR,QAAQ,CAAiB;QACjC,eAAU,GAAV,UAAU,CAAI;IACtB,CAAC;IAEJ,KAAK,CAAC,aAAa,CACjB,IAAc,EACd,KAAc,EACd,GAAiB;QAEjB,IACE,GAAG,CAAC,gBAAgB,IAAI,CAAC;YACzB,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB;YACrC,CAAC,GAAG,CAAC,IAAI;YACT,CAAC,GAAG,CAAC,gBAAgB,EACrB,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC7B,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC1D,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS;YAC7B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,gBAAgB;YAC3B,YAAY,EAAE,IAAI,CAAC,EAAE;YACrB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YAC7D,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACjC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;QACjE,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { DagPlan } from '@mcp-abap-adt/llm-agent';
2
+ /**
3
+ * Replace node `nodeId` in `plan` with the nodes of `subPlan`, flat (no nesting):
4
+ * - sub-plan node ids are namespaced `${nodeId}:${id}` (collision-safe);
5
+ * - sub-plan ROOT nodes (no intra-sub deps) inherit the replaced node's
6
+ * `dependsOn` AND `needsInput`;
7
+ * - consumers that depended on `nodeId` now depend on the sub-plan's TERMINAL
8
+ * nodes (sub nodes nothing else in the sub-plan depends on).
9
+ * Returns a new DagPlan (no mutation of the input).
10
+ */
11
+ export declare function spliceSubPlan(plan: DagPlan, nodeId: string, subPlan: DagPlan): DagPlan;
12
+ //# sourceMappingURL=splice-sub-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splice-sub-plan.d.ts","sourceRoot":"","sources":["../../../src/coordinator/dag/splice-sub-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAY,MAAM,yBAAyB,CAAC;AAEjE;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,OAAO,GACf,OAAO,CAkCT"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Replace node `nodeId` in `plan` with the nodes of `subPlan`, flat (no nesting):
3
+ * - sub-plan node ids are namespaced `${nodeId}:${id}` (collision-safe);
4
+ * - sub-plan ROOT nodes (no intra-sub deps) inherit the replaced node's
5
+ * `dependsOn` AND `needsInput`;
6
+ * - consumers that depended on `nodeId` now depend on the sub-plan's TERMINAL
7
+ * nodes (sub nodes nothing else in the sub-plan depends on).
8
+ * Returns a new DagPlan (no mutation of the input).
9
+ */
10
+ export function spliceSubPlan(plan, nodeId, subPlan) {
11
+ const replaced = plan.nodes.find((n) => n.id === nodeId);
12
+ if (!replaced)
13
+ return plan;
14
+ const ns = (id) => `${nodeId}:${id}`;
15
+ const subDependedOn = new Set(subPlan.nodes.flatMap((n) => n.dependsOn ?? []));
16
+ const terminals = subPlan.nodes
17
+ .filter((n) => !subDependedOn.has(n.id))
18
+ .map((n) => ns(n.id));
19
+ const inheritedDeps = replaced.dependsOn ?? [];
20
+ const splicedSubNodes = subPlan.nodes.map((n) => {
21
+ const intra = (n.dependsOn ?? []).map(ns);
22
+ const isRoot = (n.dependsOn ?? []).length === 0;
23
+ return {
24
+ ...n,
25
+ id: ns(n.id),
26
+ dependsOn: isRoot ? inheritedDeps : intra,
27
+ needsInput: isRoot ? (replaced.needsInput ?? n.needsInput) : n.needsInput,
28
+ };
29
+ });
30
+ const rest = plan.nodes
31
+ .filter((n) => n.id !== nodeId)
32
+ .map((n) => {
33
+ const deps = n.dependsOn ?? [];
34
+ if (!deps.includes(nodeId))
35
+ return n;
36
+ const rewired = deps.filter((d) => d !== nodeId).concat(terminals);
37
+ return { ...n, dependsOn: rewired };
38
+ });
39
+ return { ...plan, nodes: [...rest, ...splicedSubNodes] };
40
+ }
41
+ //# sourceMappingURL=splice-sub-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splice-sub-plan.js","sourceRoot":"","sources":["../../../src/coordinator/dag/splice-sub-plan.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAa,EACb,MAAc,EACd,OAAgB;IAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,EAAE,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,EAAE,EAAE,CAAC;IAE7C,MAAM,aAAa,GAAG,IAAI,GAAG,CAC3B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAChD,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxB,MAAM,aAAa,GAAG,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;IAE/C,MAAM,eAAe,GAAe,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1D,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;QAChD,OAAO;YACL,GAAG,CAAC;YACJ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACZ,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK;YACzC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU;SAC1E,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnE,OAAO,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IACtC,CAAC,CAAC,CAAC;IAEL,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { IStateOracle, ISubAgent, StateOracleInput, StateOracleResult } from '@mcp-abap-adt/llm-agent';
2
+ /**
3
+ * Adapter wrapping a raw ISubAgent as an IStateOracle. The wrapped
4
+ * subagent runs a full pipeline whose LLM activity is logged by its
5
+ * own handlers under their own component labels (`tool-loop`,
6
+ * `classifier`, …) via the SHARED session requestLogger keyed on the
7
+ * forwarded traceId. To avoid double-counting, this adapter
8
+ * intentionally returns `usage: undefined`; the handler's
9
+ * `logRoleUsage('oracle', …)` is therefore a no-op for subagent-backed
10
+ * oracles. A pure-LLM IStateOracle implementation that bypasses
11
+ * pipeline logging would populate `usage` normally.
12
+ */
13
+ export declare class SubAgentStateOracle implements IStateOracle {
14
+ private readonly inner;
15
+ constructor(inner: ISubAgent);
16
+ get name(): string;
17
+ query(input: StateOracleInput): Promise<StateOracleResult>;
18
+ }
19
+ //# sourceMappingURL=subagent-state-oracle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-state-oracle.d.ts","sourceRoot":"","sources":["../../../src/coordinator/dag/subagent-state-oracle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;;;;GAUG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IAC1C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,SAAS;IAE7C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,KAAK,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAUjE"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Adapter wrapping a raw ISubAgent as an IStateOracle. The wrapped
3
+ * subagent runs a full pipeline whose LLM activity is logged by its
4
+ * own handlers under their own component labels (`tool-loop`,
5
+ * `classifier`, …) via the SHARED session requestLogger keyed on the
6
+ * forwarded traceId. To avoid double-counting, this adapter
7
+ * intentionally returns `usage: undefined`; the handler's
8
+ * `logRoleUsage('oracle', …)` is therefore a no-op for subagent-backed
9
+ * oracles. A pure-LLM IStateOracle implementation that bypasses
10
+ * pipeline logging would populate `usage` normally.
11
+ */
12
+ export class SubAgentStateOracle {
13
+ inner;
14
+ constructor(inner) {
15
+ this.inner = inner;
16
+ }
17
+ get name() {
18
+ return this.inner.name;
19
+ }
20
+ async query(input) {
21
+ const res = await this.inner.run({
22
+ task: input.query,
23
+ sessionId: input.sessionId,
24
+ signal: input.signal,
25
+ trace: input.trace,
26
+ sessionLogger: input.sessionLogger,
27
+ });
28
+ return { answer: res.output, usage: undefined };
29
+ }
30
+ }
31
+ //# sourceMappingURL=subagent-state-oracle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subagent-state-oracle.js","sourceRoot":"","sources":["../../../src/coordinator/dag/subagent-state-oracle.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;GAUG;AACH,MAAM,OAAO,mBAAmB;IACD;IAA7B,YAA6B,KAAgB;QAAhB,UAAK,GAAL,KAAK,CAAW;IAAG,CAAC;IAEjD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,KAAuB;QACjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YAC/B,IAAI,EAAE,KAAK,CAAC,KAAK;YACjB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,aAAa,EAAE,KAAK,CAAC,aAAa;SACnC,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAClD,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import type { FinalizerInput, FinalizerResult, IFinalizer } from '@mcp-abap-adt/llm-agent';
2
+ /**
3
+ * Deterministic markdown join over the execution trace. No LLM. Useful
4
+ * when the plan is already shaped per-section and the answer is just
5
+ * the concatenation of the section outputs.
6
+ */
7
+ export declare class TemplateFinalizer implements IFinalizer {
8
+ readonly name = "template";
9
+ finalize(input: FinalizerInput): Promise<FinalizerResult>;
10
+ }
11
+ //# sourceMappingURL=template-finalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-finalizer.d.ts","sourceRoot":"","sources":["../../../src/coordinator/dag/template-finalizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,UAAU,EACX,MAAM,yBAAyB,CAAC;AAEjC;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,UAAU;IAClD,QAAQ,CAAC,IAAI,cAAc;IAErB,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;CAQhE"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Deterministic markdown join over the execution trace. No LLM. Useful
3
+ * when the plan is already shaped per-section and the answer is just
4
+ * the concatenation of the section outputs.
5
+ */
6
+ export class TemplateFinalizer {
7
+ name = 'template';
8
+ async finalize(input) {
9
+ let out = '';
10
+ for (const t of input.executionTrace) {
11
+ out += `# Node ${t.nodeId} — ${t.goal}\n${t.output}\n\n`;
12
+ }
13
+ input.onPartial?.({ kind: 'content', delta: out });
14
+ return { output: out };
15
+ }
16
+ }
17
+ //# sourceMappingURL=template-finalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-finalizer.js","sourceRoot":"","sources":["../../../src/coordinator/dag/template-finalizer.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IACnB,IAAI,GAAG,UAAU,CAAC;IAE3B,KAAK,CAAC,QAAQ,CAAC,KAAqB;QAClC,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACrC,GAAG,IAAI,UAAU,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,MAAM,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../../src/coordinator/dispatch/subagent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,QAAQ,EACR,UAAU,EACX,MAAM,yBAAyB,CAAC;AAGjC;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,YAAW,iBAAiB;IAG5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAF5C,QAAQ,CAAC,IAAI,cAAc;gBAEE,cAAc,CAAC,EAAE,uBAAuB,YAAA;IAE/D,QAAQ,CACZ,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,UAAU,CAAC;CA0GvB"}
1
+ {"version":3,"file":"subagent.d.ts","sourceRoot":"","sources":["../../../src/coordinator/dispatch/subagent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,QAAQ,EACR,UAAU,EACX,MAAM,yBAAyB,CAAC;AAGjC;;;;;;;;GAQG;AACH,qBAAa,gBAAiB,YAAW,iBAAiB;IAG5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAF5C,QAAQ,CAAC,IAAI,cAAc;gBAEE,cAAc,CAAC,EAAE,uBAAuB,YAAA;IAE/D,QAAQ,CACZ,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,mBAAmB,GACvB,OAAO,CAAC,UAAU,CAAC;CAkGvB"}
@@ -36,14 +36,12 @@ export class SubAgentDispatch {
36
36
  };
37
37
  }
38
38
  const task = composeTask(step, ctx);
39
- const childLayer = (ctx.layer ?? 0) + 1;
40
39
  let context;
41
40
  if (this.contextBuilder) {
42
41
  const built = await this.contextBuilder.build({
43
42
  task,
44
43
  step,
45
44
  agent: sub,
46
- layer: childLayer,
47
45
  inputText: ctx.inputText,
48
46
  sessionId: ctx.sessionId,
49
47
  signal: ctx.signal,
@@ -68,27 +66,23 @@ export class SubAgentDispatch {
68
66
  context,
69
67
  sessionId: ctx.sessionId,
70
68
  signal: ctx.signal,
71
- layer: childLayer,
72
69
  });
73
- // Epicfail propagation: do NOT retry, do NOT transform — preserve trace
74
- // by attaching this layer's frame and passing it upward in StepResult.
70
+ // Epicfail propagation: do NOT retry, do NOT transform — surface the
71
+ // flat trace upward in StepResult unchanged (or build one if absent).
75
72
  if (res.errorClass === 'epicfail') {
76
- const childTrace = res.epicFailTrace;
77
- const wrappedTrace = {
78
- layer: ctx.layer ?? 0,
73
+ const trace = res.epicFailTrace ?? {
79
74
  stepId: step.id,
80
75
  agentName,
81
76
  attempts: [],
82
- originalError: childTrace?.originalError ?? `epicfail from '${agentName}'`,
83
- childTrace,
77
+ originalError: `epicfail from '${agentName}'`,
84
78
  };
85
79
  return {
86
80
  stepId: step.id,
87
81
  output: '',
88
82
  durationMs: Date.now() - started,
89
83
  ok: false,
90
- error: `epicfail from '${agentName}': ${childTrace?.originalError ?? 'unknown'}`,
91
- epicFailTrace: wrappedTrace,
84
+ error: `epicfail from '${agentName}': ${trace.originalError}`,
85
+ epicFailTrace: trace,
92
86
  };
93
87
  }
94
88
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../../src/coordinator/dispatch/subagent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subagent.js","sourceRoot":"","sources":["../../../src/coordinator/dispatch/subagent.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,11 @@
1
1
  export { AutoActivation } from './activation/auto.js';
2
2
  export { ExplicitActivation } from './activation/explicit.js';
3
+ export { AbortErrorStrategy } from './dag/abort-error-strategy.js';
4
+ export { DagPlanInterpreter } from './dag/dag-plan-interpreter.js';
5
+ export { LlmDagPlanner } from './dag/llm-dag-planner.js';
6
+ export { LlmReviewStrategy } from './dag/llm-review-strategy.js';
7
+ export { NoopReviewStrategy } from './dag/noop-review-strategy.js';
8
+ export { ReplanErrorStrategy } from './dag/replan-error-strategy.js';
3
9
  export { HybridDispatch } from './dispatch/hybrid.js';
4
10
  export { SelfDispatch } from './dispatch/self.js';
5
11
  export { SubAgentDispatch } from './dispatch/subagent.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,5 +1,11 @@
1
1
  export { AutoActivation } from './activation/auto.js';
2
2
  export { ExplicitActivation } from './activation/explicit.js';
3
+ export { AbortErrorStrategy } from './dag/abort-error-strategy.js';
4
+ export { DagPlanInterpreter } from './dag/dag-plan-interpreter.js';
5
+ export { LlmDagPlanner } from './dag/llm-dag-planner.js';
6
+ export { LlmReviewStrategy } from './dag/llm-review-strategy.js';
7
+ export { NoopReviewStrategy } from './dag/noop-review-strategy.js';
8
+ export { ReplanErrorStrategy } from './dag/replan-error-strategy.js';
3
9
  export { HybridDispatch } from './dispatch/hybrid.js';
4
10
  export { SelfDispatch } from './dispatch/self.js';
5
11
  export { SubAgentDispatch } from './dispatch/subagent.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/coordinator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"one-shot.d.ts","sourceRoot":"","sources":["../../../src/coordinator/planning/one-shot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,IAAI,EACJ,iBAAiB,EACjB,IAAI,EACJ,QAAQ,EACR,UAAU,EACX,MAAM,yBAAyB,CAAC;AAEjC;;;GAGG;AACH,qBAAa,eAAgB,YAAW,iBAAiB;IAG3C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,QAAQ,CAAC,IAAI,cAAc;gBAEE,UAAU,EAAE,IAAI;IAEvC,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2F/D,YAAY,CAAC,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,GAAG,OAAO;IAInE,WAAW,CACf,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
1
+ {"version":3,"file":"one-shot.d.ts","sourceRoot":"","sources":["../../../src/coordinator/planning/one-shot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,IAAI,EACJ,iBAAiB,EACjB,IAAI,EACJ,QAAQ,EACR,UAAU,EACX,MAAM,yBAAyB,CAAC;AAEjC;;;GAGG;AACH,qBAAa,eAAgB,YAAW,iBAAiB;IAG3C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAFvC,QAAQ,CAAC,IAAI,cAAc;gBAEE,UAAU,EAAE,IAAI;IAEvC,gBAAgB,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkG/D,YAAY,CAAC,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,UAAU,GAAG,OAAO;IAInE,WAAW,CACf,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,IAAI,CAAC;CAOjB"}
@@ -24,6 +24,7 @@ review, etc.).
24
24
  Emit a plan-level "objective" (the shared purpose) so all steps stay aligned.
25
25
  For each step, choose the best agent from the list (or omit "agent" if no specialist fits).
26
26
  If the request is too ambiguous to plan, respond with ONLY {"clarification":"<your question>"}.
27
+ If the request needs no decomposition (it can be answered directly without breaking it into steps), return an empty steps array: {"steps":[]}.
27
28
  Otherwise respond with ONLY a JSON object of shape:
28
29
  {"objective":"...","steps":[{"id":"step-1","goal":"...","agent":"optional-name","needsInput":false}],"rationale":"..."}
29
30
 
@@ -37,9 +38,12 @@ ${agentsBlock || '(none — use self-dispatch)'}${skillBlock}`;
37
38
  throw response.error;
38
39
  const jsonText = extractJson(response.value.content);
39
40
  const parsed = JSON.parse(jsonText);
41
+ // A clarification must stand alone. Combined with any steps array (incl. [])
42
+ // it is ambiguous mixed output → fail loud, keeping a clean three-way union:
43
+ // {clarification} | {steps:[...]} | {steps:[]} (answer-directly).
40
44
  if (parsed.clarification) {
41
- if ((parsed.steps?.length ?? 0) > 0) {
42
- throw new Error(`Planner returned both a clarification and steps (ambiguous): ${jsonText.slice(0, 200)}`);
45
+ if (Array.isArray(parsed.steps)) {
46
+ throw new Error(`Planner returned both a clarification and a steps array (ambiguous): ${jsonText.slice(0, 200)}`);
43
47
  }
44
48
  return {
45
49
  steps: [],
@@ -48,11 +52,14 @@ ${agentsBlock || '(none — use self-dispatch)'}${skillBlock}`;
48
52
  source: 'planner-llm',
49
53
  };
50
54
  }
51
- // Without a clarification, a usable plan must carry at least one valid step.
52
- // An empty/malformed plan must fail loud (→ COORDINATOR_PLAN_FAILED) rather
53
- // than silently produce blank coordinator output.
54
- if (!Array.isArray(parsed.steps) || parsed.steps.length === 0) {
55
- throw new Error(`Planner returned neither steps nor a clarification: ${jsonText.slice(0, 200)}`);
55
+ // A missing / non-array `steps` is malformed → fail loud
56
+ // (→ COORDINATOR_PLAN_FAILED). An explicit empty array `steps: []` is the
57
+ // answer-directly signal and is allowed through (the for-loop below is a
58
+ // no-op for it). The empty plan is consumed by the CoordinatorHandler
59
+ // answer-directly branch (#155 Task 2), which self-dispatches the original
60
+ // request; this planner only produces the signal.
61
+ if (!Array.isArray(parsed.steps)) {
62
+ throw new Error(`Planner returned no steps array and no clarification: ${jsonText.slice(0, 200)}`);
56
63
  }
57
64
  for (const s of parsed.steps) {
58
65
  if (typeof s.goal !== 'string' || s.goal.trim() === '') {
@@ -1 +1 @@
1
- {"version":3,"file":"one-shot.js","sourceRoot":"","sources":["../../../src/coordinator/planning/one-shot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"one-shot.js","sourceRoot":"","sources":["../../../src/coordinator/planning/one-shot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { type IExecutor, type INeedResolver, type LlmComponent } from '@mcp-abap-adt/llm-agent';
2
+ export interface CyclicReActExecutorDeps {
3
+ llm: import('@mcp-abap-adt/llm-agent').ILlm;
4
+ /** Invoke an MCP tool by name with args; returns the textual result. */
5
+ callMcp: (name: string, args: unknown, signal?: AbortSignal) => Promise<string>;
6
+ component: LlmComponent;
7
+ maxIterations: number;
8
+ /**
9
+ * Always-on unmet-need analyzer. Injected here (NOT only via execute input)
10
+ * so the context-augmenting loop is STRUCTURALLY always-on: the executor is
11
+ * built once and shared by every Stepper mode, so a resolver on its deps can
12
+ * never be left undefined by a forgotten thread-through (the bug this fixes).
13
+ * `execute` input may still override it (tests / per-call tuning).
14
+ */
15
+ needResolver?: INeedResolver;
16
+ /**
17
+ * Optional system-prompt override for the executor. Defaults to the
18
+ * task-agnostic EXECUTOR_SYSTEM. A consumer can override it via
19
+ * `coordinator.flow.executor.systemPrompt` (yaml) or the builder — e.g. to
20
+ * inject domain prerequisites for a cheap executor that lacks a smart planner
21
+ * above it (cyclic mode). Threading it here, not hard-coding domain text in
22
+ * EXECUTOR_SYSTEM, keeps the default prompt agnostic.
23
+ */
24
+ systemPrompt?: string;
25
+ }
26
+ /**
27
+ * Task-agnostic tool-use protocol for the executor. It says NOTHING about the
28
+ * task type or any specific tool/MCP — only how to behave when a needed
29
+ * capability is missing or a tool fails. This is what makes the always-on
30
+ * unmet-need detection (INeedResolver) effective: the model is told to VOICE the
31
+ * gap instead of guessing or silently finishing, so a no-tool-call "I need X"
32
+ * utterance is produced, which the tool-definer then turns into a toolsRag
33
+ * re-query. Keep it generic — the runtime is MCP- and task-agnostic.
34
+ */
35
+ export declare const EXECUTOR_SYSTEM = "You complete the task by calling the available tools. If you need a capability the available tools do not provide, or a tool call fails or returns an error / empty / \"not found\" result, do NOT guess, fabricate, or give a final answer prematurely. Instead, state in ONE sentence the capability you still need (e.g. \"I need a tool to <do X>\"). Produce your final answer only once you actually have the data the task requires.";
36
+ export declare class CyclicReActExecutor implements IExecutor {
37
+ private readonly deps;
38
+ readonly name = "cyclic-react";
39
+ constructor(deps: CyclicReActExecutorDeps);
40
+ execute(input: Parameters<IExecutor['execute']>[0]): ReturnType<IExecutor['execute']>;
41
+ }
42
+ //# sourceMappingURL=cyclic-react-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cyclic-react-executor.d.ts","sourceRoot":"","sources":["../../../src/coordinator/stepper/cyclic-react-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,YAAY,EAKlB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,OAAO,yBAAyB,EAAE,IAAI,CAAC;IAC5C,wEAAwE;IACxE,OAAO,EAAE,CACP,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,SAAS,EAAE,YAAY,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;GAQG;AASH,eAAO,MAAM,eAAe,gbAA4a,CAAC;AAYzc,qBAAa,mBAAoB,YAAW,SAAS;IAEvC,OAAO,CAAC,QAAQ,CAAC,IAAI;IADjC,QAAQ,CAAC,IAAI,kBAAkB;gBACF,IAAI,EAAE,uBAAuB;IAEpD,OAAO,CACX,KAAK,EAAE,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GACzC,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;CA+OpC"}