@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.
- package/dist/adapters/llm-provider-bridge.js +2 -2
- package/dist/adapters/llm-provider-bridge.js.map +1 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +48 -37
- package/dist/agent.js.map +1 -1
- package/dist/builder.d.ts +19 -0
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +29 -3
- package/dist/builder.js.map +1 -1
- package/dist/classifier/llm-classifier.d.ts.map +1 -1
- package/dist/classifier/llm-classifier.js +1 -0
- package/dist/classifier/llm-classifier.js.map +1 -1
- package/dist/coordinator/dag/abort-error-strategy.d.ts +7 -0
- package/dist/coordinator/dag/abort-error-strategy.d.ts.map +1 -0
- package/dist/coordinator/dag/abort-error-strategy.js +8 -0
- package/dist/coordinator/dag/abort-error-strategy.js.map +1 -0
- package/dist/coordinator/dag/compose-node-task.d.ts +8 -0
- package/dist/coordinator/dag/compose-node-task.d.ts.map +1 -0
- package/dist/coordinator/dag/compose-node-task.js +41 -0
- package/dist/coordinator/dag/compose-node-task.js.map +1 -0
- package/dist/coordinator/dag/dag-plan-interpreter.d.ts +9 -0
- package/dist/coordinator/dag/dag-plan-interpreter.d.ts.map +1 -0
- package/dist/coordinator/dag/dag-plan-interpreter.js +236 -0
- package/dist/coordinator/dag/dag-plan-interpreter.js.map +1 -0
- package/dist/coordinator/dag/index.d.ts +5 -0
- package/dist/coordinator/dag/index.d.ts.map +1 -0
- package/dist/coordinator/dag/index.js +5 -0
- package/dist/coordinator/dag/index.js.map +1 -0
- package/dist/coordinator/dag/llm-dag-planner.d.ts +24 -0
- package/dist/coordinator/dag/llm-dag-planner.d.ts.map +1 -0
- package/dist/coordinator/dag/llm-dag-planner.js +161 -0
- package/dist/coordinator/dag/llm-dag-planner.js.map +1 -0
- package/dist/coordinator/dag/llm-finalizer.d.ts +21 -0
- package/dist/coordinator/dag/llm-finalizer.d.ts.map +1 -0
- package/dist/coordinator/dag/llm-finalizer.js +77 -0
- package/dist/coordinator/dag/llm-finalizer.js.map +1 -0
- package/dist/coordinator/dag/llm-review-strategy.d.ts +17 -0
- package/dist/coordinator/dag/llm-review-strategy.d.ts.map +1 -0
- package/dist/coordinator/dag/llm-review-strategy.js +149 -0
- package/dist/coordinator/dag/llm-review-strategy.js.map +1 -0
- package/dist/coordinator/dag/noop-review-strategy.d.ts +8 -0
- package/dist/coordinator/dag/noop-review-strategy.d.ts.map +1 -0
- package/dist/coordinator/dag/noop-review-strategy.js +11 -0
- package/dist/coordinator/dag/noop-review-strategy.js.map +1 -0
- package/dist/coordinator/dag/passthrough-finalizer.d.ts +11 -0
- package/dist/coordinator/dag/passthrough-finalizer.d.ts.map +1 -0
- package/dist/coordinator/dag/passthrough-finalizer.js +13 -0
- package/dist/coordinator/dag/passthrough-finalizer.js.map +1 -0
- package/dist/coordinator/dag/render-ancestor-context.d.ts +8 -0
- package/dist/coordinator/dag/render-ancestor-context.d.ts.map +1 -0
- package/dist/coordinator/dag/render-ancestor-context.js +27 -0
- package/dist/coordinator/dag/render-ancestor-context.js.map +1 -0
- package/dist/coordinator/dag/replan-error-strategy.d.ts +15 -0
- package/dist/coordinator/dag/replan-error-strategy.d.ts.map +1 -0
- package/dist/coordinator/dag/replan-error-strategy.js +32 -0
- package/dist/coordinator/dag/replan-error-strategy.js.map +1 -0
- package/dist/coordinator/dag/reviewer-error-strategy.d.ts +15 -0
- package/dist/coordinator/dag/reviewer-error-strategy.d.ts.map +1 -0
- package/dist/coordinator/dag/reviewer-error-strategy.js +38 -0
- package/dist/coordinator/dag/reviewer-error-strategy.js.map +1 -0
- package/dist/coordinator/dag/splice-sub-plan.d.ts +12 -0
- package/dist/coordinator/dag/splice-sub-plan.d.ts.map +1 -0
- package/dist/coordinator/dag/splice-sub-plan.js +41 -0
- package/dist/coordinator/dag/splice-sub-plan.js.map +1 -0
- package/dist/coordinator/dag/subagent-state-oracle.d.ts +19 -0
- package/dist/coordinator/dag/subagent-state-oracle.d.ts.map +1 -0
- package/dist/coordinator/dag/subagent-state-oracle.js +31 -0
- package/dist/coordinator/dag/subagent-state-oracle.js.map +1 -0
- package/dist/coordinator/dag/template-finalizer.d.ts +11 -0
- package/dist/coordinator/dag/template-finalizer.d.ts.map +1 -0
- package/dist/coordinator/dag/template-finalizer.js +17 -0
- package/dist/coordinator/dag/template-finalizer.js.map +1 -0
- package/dist/coordinator/dispatch/subagent.d.ts.map +1 -1
- package/dist/coordinator/dispatch/subagent.js +6 -12
- package/dist/coordinator/dispatch/subagent.js.map +1 -1
- package/dist/coordinator/index.d.ts +6 -0
- package/dist/coordinator/index.d.ts.map +1 -1
- package/dist/coordinator/index.js +6 -0
- package/dist/coordinator/index.js.map +1 -1
- package/dist/coordinator/planning/one-shot.d.ts.map +1 -1
- package/dist/coordinator/planning/one-shot.js +14 -7
- package/dist/coordinator/planning/one-shot.js.map +1 -1
- package/dist/coordinator/stepper/cyclic-react-executor.d.ts +42 -0
- package/dist/coordinator/stepper/cyclic-react-executor.d.ts.map +1 -0
- package/dist/coordinator/stepper/cyclic-react-executor.js +272 -0
- package/dist/coordinator/stepper/cyclic-react-executor.js.map +1 -0
- package/dist/coordinator/stepper/index.d.ts +10 -0
- package/dist/coordinator/stepper/index.d.ts.map +1 -0
- package/dist/coordinator/stepper/index.js +10 -0
- package/dist/coordinator/stepper/index.js.map +1 -0
- package/dist/coordinator/stepper/llm-stepper-planner.d.ts +27 -0
- package/dist/coordinator/stepper/llm-stepper-planner.d.ts.map +1 -0
- package/dist/coordinator/stepper/llm-stepper-planner.js +86 -0
- package/dist/coordinator/stepper/llm-stepper-planner.js.map +1 -0
- package/dist/coordinator/stepper/llm-task-formalizer.d.ts +22 -0
- package/dist/coordinator/stepper/llm-task-formalizer.d.ts.map +1 -0
- package/dist/coordinator/stepper/llm-task-formalizer.js +73 -0
- package/dist/coordinator/stepper/llm-task-formalizer.js.map +1 -0
- package/dist/coordinator/stepper/logging-llm.d.ts +30 -0
- package/dist/coordinator/stepper/logging-llm.d.ts.map +1 -0
- package/dist/coordinator/stepper/logging-llm.js +73 -0
- package/dist/coordinator/stepper/logging-llm.js.map +1 -0
- package/dist/coordinator/stepper/need-resolver.d.ts +18 -0
- package/dist/coordinator/stepper/need-resolver.d.ts.map +1 -0
- package/dist/coordinator/stepper/need-resolver.js +42 -0
- package/dist/coordinator/stepper/need-resolver.js.map +1 -0
- package/dist/coordinator/stepper/root-finalizer.d.ts +17 -0
- package/dist/coordinator/stepper/root-finalizer.d.ts.map +1 -0
- package/dist/coordinator/stepper/root-finalizer.js +53 -0
- package/dist/coordinator/stepper/root-finalizer.js.map +1 -0
- package/dist/coordinator/stepper/static-planner.d.ts +23 -0
- package/dist/coordinator/stepper/static-planner.d.ts.map +1 -0
- package/dist/coordinator/stepper/static-planner.js +25 -0
- package/dist/coordinator/stepper/static-planner.js.map +1 -0
- package/dist/coordinator/stepper/stepper-interpreter.d.ts +6 -0
- package/dist/coordinator/stepper/stepper-interpreter.d.ts.map +1 -0
- package/dist/coordinator/stepper/stepper-interpreter.js +130 -0
- package/dist/coordinator/stepper/stepper-interpreter.js.map +1 -0
- package/dist/coordinator/stepper/stepper.d.ts +36 -0
- package/dist/coordinator/stepper/stepper.d.ts.map +1 -0
- package/dist/coordinator/stepper/stepper.js +49 -0
- package/dist/coordinator/stepper/stepper.js.map +1 -0
- package/dist/index.d.ts +10 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/logger/default-request-logger.d.ts +18 -6
- package/dist/logger/default-request-logger.d.ts.map +1 -1
- package/dist/logger/default-request-logger.js +25 -4
- package/dist/logger/default-request-logger.js.map +1 -1
- package/dist/logger/noop-request-logger.d.ts +10 -5
- package/dist/logger/noop-request-logger.d.ts.map +1 -1
- package/dist/logger/noop-request-logger.js +5 -3
- package/dist/logger/noop-request-logger.js.map +1 -1
- package/dist/logger/session-request-logger.d.ts +50 -0
- package/dist/logger/session-request-logger.d.ts.map +1 -0
- package/dist/logger/session-request-logger.js +161 -0
- package/dist/logger/session-request-logger.js.map +1 -0
- package/dist/pipeline/context.d.ts +8 -3
- package/dist/pipeline/context.d.ts.map +1 -1
- package/dist/pipeline/default-pipeline.d.ts +35 -4
- package/dist/pipeline/default-pipeline.d.ts.map +1 -1
- package/dist/pipeline/default-pipeline.js +49 -7
- package/dist/pipeline/default-pipeline.js.map +1 -1
- package/dist/pipeline/handlers/coordinator.d.ts +0 -3
- package/dist/pipeline/handlers/coordinator.d.ts.map +1 -1
- package/dist/pipeline/handlers/coordinator.js +33 -22
- package/dist/pipeline/handlers/coordinator.js.map +1 -1
- package/dist/pipeline/handlers/dag-coordinator.d.ts +47 -0
- package/dist/pipeline/handlers/dag-coordinator.d.ts.map +1 -0
- package/dist/pipeline/handlers/dag-coordinator.js +369 -0
- package/dist/pipeline/handlers/dag-coordinator.js.map +1 -0
- package/dist/pipeline/handlers/index.d.ts +14 -0
- package/dist/pipeline/handlers/index.d.ts.map +1 -1
- package/dist/pipeline/handlers/index.js +8 -1
- package/dist/pipeline/handlers/index.js.map +1 -1
- package/dist/pipeline/handlers/rag-query.d.ts.map +1 -1
- package/dist/pipeline/handlers/rag-query.js +1 -0
- package/dist/pipeline/handlers/rag-query.js.map +1 -1
- package/dist/pipeline/handlers/subagent.d.ts.map +1 -1
- package/dist/pipeline/handlers/subagent.js +0 -2
- package/dist/pipeline/handlers/subagent.js.map +1 -1
- package/dist/pipeline/handlers/summarize.d.ts.map +1 -1
- package/dist/pipeline/handlers/summarize.js +5 -0
- package/dist/pipeline/handlers/summarize.js.map +1 -1
- package/dist/pipeline/handlers/tool-loop.d.ts.map +1 -1
- package/dist/pipeline/handlers/tool-loop.js +17 -0
- package/dist/pipeline/handlers/tool-loop.js.map +1 -1
- package/dist/pipeline/handlers/translate.d.ts.map +1 -1
- package/dist/pipeline/handlers/translate.js +1 -0
- package/dist/pipeline/handlers/translate.js.map +1 -1
- package/dist/pipeline/index.d.ts +2 -1
- package/dist/pipeline/index.d.ts.map +1 -1
- package/dist/pipeline/index.js +1 -1
- package/dist/pipeline/index.js.map +1 -1
- package/dist/rag/knowledge-rag.d.ts +74 -0
- package/dist/rag/knowledge-rag.d.ts.map +1 -0
- package/dist/rag/knowledge-rag.js +116 -0
- package/dist/rag/knowledge-rag.js.map +1 -0
- package/dist/session/session-graph-factory.d.ts +66 -0
- package/dist/session/session-graph-factory.d.ts.map +1 -0
- package/dist/session/session-graph-factory.js +63 -0
- package/dist/session/session-graph-factory.js.map +1 -0
- package/dist/session/session-graph.d.ts +54 -0
- package/dist/session/session-graph.d.ts.map +1 -0
- package/dist/session/session-graph.js +76 -0
- package/dist/session/session-graph.js.map +1 -0
- package/dist/session/session-registry.d.ts +96 -0
- package/dist/session/session-registry.d.ts.map +1 -0
- package/dist/session/session-registry.js +297 -0
- package/dist/session/session-registry.js.map +1 -0
- package/dist/subagent/direct-llm-subagent.d.ts.map +1 -1
- package/dist/subagent/direct-llm-subagent.js +0 -2
- package/dist/subagent/direct-llm-subagent.js.map +1 -1
- package/dist/subagent/smart-agent-subagent.d.ts.map +1 -1
- package/dist/subagent/smart-agent-subagent.js +3 -3
- package/dist/subagent/smart-agent-subagent.js.map +1 -1
- 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;
|
|
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 —
|
|
74
|
-
//
|
|
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
|
|
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:
|
|
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}': ${
|
|
91
|
-
epicFailTrace:
|
|
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":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;GAQG;AACH,MAAM,OAAO,gBAAgB;IAGE;IAFpB,IAAI,GAAG,UAAU,CAAC;IAE3B,YAA6B,cAAwC;QAAxC,mBAAc,GAAd,cAAc,CAA0B;IAAG,CAAC;IAEzE,KAAK,CAAC,QAAQ,CACZ,IAAc,EACd,GAAwB;QAExB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7B,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,CAAC;gBACb,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,2BAA2B,IAAI,CAAC,EAAE,8CAA8C;aACxF,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,CAAC;gBACb,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,4BAA4B,SAAS,kCAC1C,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MACzC,GAAG;aACJ,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEpC,
|
|
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;
|
|
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
|
|
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
|
-
//
|
|
52
|
-
// An empty
|
|
53
|
-
//
|
|
54
|
-
|
|
55
|
-
|
|
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":"AASA;;;GAGG;AACH,MAAM,OAAO,eAAe;IAGG;IAFpB,IAAI,GAAG,UAAU,CAAC;IAE3B,YAA6B,UAAgB;QAAhB,eAAU,GAAV,UAAU,CAAM;IAAG,CAAC;IAEjD,KAAK,CAAC,gBAAgB,CAAC,GAAwB;QAC7C,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;aAC5C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,WAAW,IAAI,kBAAkB,EAAE,CAAC;aACvE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY;YACjC,CAAC,CAAC,uCAAuC,GAAG,CAAC,YAAY,IAAI;YAC7D,CAAC,CAAC,EAAE,CAAC;QAEP,MAAM,YAAY,GAAG
|
|
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"}
|