@mcp-abap-adt/llm-agent-libs 18.0.1 → 18.1.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/agent.d.ts.map +1 -1
- package/dist/agent.js +5 -2
- package/dist/agent.js.map +1 -1
- package/dist/builder.d.ts +7 -0
- package/dist/builder.d.ts.map +1 -1
- package/dist/builder.js +20 -3
- package/dist/builder.js.map +1 -1
- package/dist/coordinator/dispatch/self.d.ts +5 -0
- package/dist/coordinator/dispatch/self.d.ts.map +1 -1
- package/dist/coordinator/dispatch/self.js +80 -0
- package/dist/coordinator/dispatch/self.js.map +1 -1
- package/dist/coordinator/stepper/cyclic-react-executor.d.ts +22 -0
- package/dist/coordinator/stepper/cyclic-react-executor.d.ts.map +1 -1
- package/dist/coordinator/stepper/cyclic-react-executor.js +132 -13
- package/dist/coordinator/stepper/cyclic-react-executor.js.map +1 -1
- package/dist/coordinator/stepper/index.d.ts +1 -0
- package/dist/coordinator/stepper/index.d.ts.map +1 -1
- package/dist/coordinator/stepper/index.js +1 -0
- package/dist/coordinator/stepper/index.js.map +1 -1
- package/dist/coordinator/stepper/llm-evaluator.d.ts +29 -0
- package/dist/coordinator/stepper/llm-evaluator.d.ts.map +1 -0
- package/dist/coordinator/stepper/llm-evaluator.js +94 -0
- package/dist/coordinator/stepper/llm-evaluator.js.map +1 -0
- package/dist/coordinator/stepper/llm-stepper-planner.d.ts +1 -1
- package/dist/coordinator/stepper/llm-stepper-planner.d.ts.map +1 -1
- package/dist/coordinator/stepper/llm-stepper-planner.js +28 -8
- package/dist/coordinator/stepper/llm-stepper-planner.js.map +1 -1
- package/dist/coordinator/stepper/need-resolver.d.ts +1 -0
- package/dist/coordinator/stepper/need-resolver.d.ts.map +1 -1
- package/dist/coordinator/stepper/need-resolver.js +12 -4
- package/dist/coordinator/stepper/need-resolver.js.map +1 -1
- package/dist/coordinator/stepper/stepper-interpreter.d.ts.map +1 -1
- package/dist/coordinator/stepper/stepper-interpreter.js +61 -4
- package/dist/coordinator/stepper/stepper-interpreter.js.map +1 -1
- package/dist/coordinator/stepper/stepper.d.ts +8 -1
- package/dist/coordinator/stepper/stepper.d.ts.map +1 -1
- package/dist/coordinator/stepper/stepper.js +78 -18
- package/dist/coordinator/stepper/stepper.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/logger/default-request-logger.d.ts.map +1 -1
- package/dist/logger/default-request-logger.js +1 -0
- package/dist/logger/default-request-logger.js.map +1 -1
- package/dist/pipeline/handlers/coordinator.d.ts.map +1 -1
- package/dist/pipeline/handlers/coordinator.js +26 -0
- package/dist/pipeline/handlers/coordinator.js.map +1 -1
- package/dist/pipeline/handlers/dag-coordinator.d.ts.map +1 -1
- package/dist/pipeline/handlers/dag-coordinator.js +13 -4
- package/dist/pipeline/handlers/dag-coordinator.js.map +1 -1
- package/dist/pipeline/handlers/tool-loop.d.ts.map +1 -1
- package/dist/pipeline/handlers/tool-loop.js +9 -2
- package/dist/pipeline/handlers/tool-loop.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 +4 -0
- package/dist/pipeline/index.js.map +1 -1
- package/dist/rag/knowledge-rag.d.ts +15 -0
- package/dist/rag/knowledge-rag.d.ts.map +1 -1
- package/dist/rag/knowledge-rag.js +47 -0
- package/dist/rag/knowledge-rag.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { composeTask } from './compose-task.js';
|
|
2
|
+
/** Bound on the self-dispatch tool-loop — enough for a read→observe→answer
|
|
3
|
+
* cycle without runaway. */
|
|
4
|
+
const MAX_TOOL_ITERATIONS = 6;
|
|
2
5
|
export class SelfDispatch {
|
|
3
6
|
llm;
|
|
4
7
|
systemPrompt;
|
|
@@ -17,6 +20,22 @@ export class SelfDispatch {
|
|
|
17
20
|
const userMsg = `${composeTask(step, ctx)}\n\nResults so far:\n${priorBlock}`;
|
|
18
21
|
const started = Date.now();
|
|
19
22
|
try {
|
|
23
|
+
// #157: when the coordinator threaded the per-request RAG-selected tools
|
|
24
|
+
// and a tool executor, run a bounded tool-loop so a self-dispatched step
|
|
25
|
+
// can actually CALL MCP (read a table, list a package, …) instead of a
|
|
26
|
+
// single toolless chat that hallucinates the result. No tools / no
|
|
27
|
+
// executor → the legacy single-chat behaviour (below).
|
|
28
|
+
const tools = (ctx.selectedTools ?? []);
|
|
29
|
+
if (tools.length > 0 && typeof ctx.callTool === 'function') {
|
|
30
|
+
const r = await this.runToolLoop(sys, userMsg, tools, ctx);
|
|
31
|
+
return {
|
|
32
|
+
stepId: step.id,
|
|
33
|
+
output: r.content,
|
|
34
|
+
usage: r.usage,
|
|
35
|
+
durationMs: Date.now() - started,
|
|
36
|
+
ok: true,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
20
39
|
const res = await this.llm.chat([
|
|
21
40
|
{ role: 'system', content: sys },
|
|
22
41
|
{ role: 'user', content: userMsg },
|
|
@@ -41,5 +60,66 @@ export class SelfDispatch {
|
|
|
41
60
|
};
|
|
42
61
|
}
|
|
43
62
|
}
|
|
63
|
+
/** Bounded ReAct loop: chat with tools → execute any tool calls via
|
|
64
|
+
* `ctx.callTool` → feed results back → repeat until the model answers with no
|
|
65
|
+
* tool call (or the cap is hit). Mirrors the wire shape providers expect
|
|
66
|
+
* (assistant `tool_calls` followed by matching `tool` messages). */
|
|
67
|
+
async runToolLoop(sys, userMsg, tools, ctx) {
|
|
68
|
+
const callTool = ctx.callTool;
|
|
69
|
+
const messages = [
|
|
70
|
+
{ role: 'system', content: sys },
|
|
71
|
+
{ role: 'user', content: userMsg },
|
|
72
|
+
];
|
|
73
|
+
let usage;
|
|
74
|
+
const add = (u) => {
|
|
75
|
+
if (!u)
|
|
76
|
+
return;
|
|
77
|
+
usage = usage
|
|
78
|
+
? {
|
|
79
|
+
promptTokens: usage.promptTokens + u.promptTokens,
|
|
80
|
+
completionTokens: usage.completionTokens + u.completionTokens,
|
|
81
|
+
totalTokens: usage.totalTokens + u.totalTokens,
|
|
82
|
+
}
|
|
83
|
+
: { ...u };
|
|
84
|
+
};
|
|
85
|
+
for (let iter = 0; iter < MAX_TOOL_ITERATIONS; iter++) {
|
|
86
|
+
const res = await this.llm.chat(messages, tools, {
|
|
87
|
+
signal: ctx.signal,
|
|
88
|
+
sessionId: ctx.sessionId,
|
|
89
|
+
});
|
|
90
|
+
if (!res.ok)
|
|
91
|
+
throw res.error;
|
|
92
|
+
add(res.value.usage);
|
|
93
|
+
const toolCalls = res.value.toolCalls ?? [];
|
|
94
|
+
if (toolCalls.length === 0)
|
|
95
|
+
return { content: res.value.content, usage };
|
|
96
|
+
messages.push({
|
|
97
|
+
role: 'assistant',
|
|
98
|
+
content: res.value.content || null,
|
|
99
|
+
tool_calls: toolCalls.map((tc) => ({
|
|
100
|
+
id: tc.id,
|
|
101
|
+
type: 'function',
|
|
102
|
+
function: {
|
|
103
|
+
name: tc.name,
|
|
104
|
+
arguments: JSON.stringify(tc.arguments ?? {}),
|
|
105
|
+
},
|
|
106
|
+
})),
|
|
107
|
+
});
|
|
108
|
+
for (const tc of toolCalls) {
|
|
109
|
+
const out = await callTool(tc.name, tc.arguments ?? {}, ctx.signal);
|
|
110
|
+
messages.push({ role: 'tool', content: out, tool_call_id: tc.id });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
// Iteration cap hit: one final tool-free turn so we answer from what was
|
|
114
|
+
// gathered instead of returning empty.
|
|
115
|
+
const final = await this.llm.chat(messages, [], {
|
|
116
|
+
signal: ctx.signal,
|
|
117
|
+
sessionId: ctx.sessionId,
|
|
118
|
+
});
|
|
119
|
+
if (!final.ok)
|
|
120
|
+
throw final.error;
|
|
121
|
+
add(final.value.usage);
|
|
122
|
+
return { content: final.value.content, usage };
|
|
123
|
+
}
|
|
44
124
|
}
|
|
45
125
|
//# sourceMappingURL=self.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self.js","sourceRoot":"","sources":["../../../src/coordinator/dispatch/self.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"self.js","sourceRoot":"","sources":["../../../src/coordinator/dispatch/self.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,28 @@ export interface CyclicReActExecutorDeps {
|
|
|
22
22
|
* EXECUTOR_SYSTEM, keeps the default prompt agnostic.
|
|
23
23
|
*/
|
|
24
24
|
systemPrompt?: string;
|
|
25
|
+
/**
|
|
26
|
+
* How many CONSECUTIVE unmet-need iterations whose tool re-query surfaces NO
|
|
27
|
+
* new tool are tolerated before the executor escalates to the consumer
|
|
28
|
+
* (18.1): analyze answer → find tools → add (preserving existing) → retry; if
|
|
29
|
+
* after this many rounds nothing new helps, the capability is genuinely
|
|
30
|
+
* unavailable → throw ClarifySignal (exit, ask the consumer) instead of
|
|
31
|
+
* returning a silent partial. Default 2 (clamped to ≥ 1).
|
|
32
|
+
*/
|
|
33
|
+
maxNoProgressNeeds?: number;
|
|
34
|
+
/**
|
|
35
|
+
* Guard 2b — explicit "no capability" error instead of silent hallucination.
|
|
36
|
+
* When the executor starts with NO tools (empty `input.tools`), the toolsRag
|
|
37
|
+
* seed + needs search return NOTHING, and there are no external tools, the
|
|
38
|
+
* tool subsystem yielded zero capability. A model handed an empty toolset for
|
|
39
|
+
* a task that needs tools will fabricate an answer (observed live: a DAG
|
|
40
|
+
* worker that hit a dead MCP proxy got 0 tools and invented a review from the
|
|
41
|
+
* program name, promptTokens=1224 vs 507650 with a live proxy). By default the
|
|
42
|
+
* executor REFUSES to run toolless and throws ClarifySignal so the consumer
|
|
43
|
+
* learns the capability is missing. Set `true` only for genuinely tool-free
|
|
44
|
+
* reasoning steps. Default false.
|
|
45
|
+
*/
|
|
46
|
+
allowToolless?: boolean;
|
|
25
47
|
}
|
|
26
48
|
/**
|
|
27
49
|
* Task-agnostic tool-use protocol for the executor. It says NOTHING about the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cyclic-react-executor.d.ts","sourceRoot":"","sources":["../../../src/coordinator/stepper/cyclic-react-executor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"cyclic-react-executor.d.ts","sourceRoot":"","sources":["../../../src/coordinator/stepper/cyclic-react-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,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;IACtB;;;;;;;OAOG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;;;;;OAWG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;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;CA2XpC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { renderTaskSpec, } from '@mcp-abap-adt/llm-agent';
|
|
1
|
+
import { artifactIdentityKey, ClarifySignal, renderTaskSpec, } from '@mcp-abap-adt/llm-agent';
|
|
2
2
|
/**
|
|
3
3
|
* Task-agnostic tool-use protocol for the executor. It says NOTHING about the
|
|
4
4
|
* task type or any specific tool/MCP — only how to behave when a needed
|
|
@@ -73,6 +73,12 @@ export class CyclicReActExecutor {
|
|
|
73
73
|
];
|
|
74
74
|
const tools = [...input.tools];
|
|
75
75
|
let usage = ZERO;
|
|
76
|
+
// Phase 2 identity dedup: remember every (tool, canonical-args) fetched THIS
|
|
77
|
+
// run. A repeat call short-circuits — no MCP round-trip and, crucially, no
|
|
78
|
+
// re-injection of the (often large) payload into the context. The model is
|
|
79
|
+
// told it already has the data instead. Cuts the redundant include re-reads
|
|
80
|
+
// seen live (gi≈34 calls for 6 includes) + the context bloat they cause.
|
|
81
|
+
const fetched = new Set();
|
|
76
82
|
// Counts consecutive unmet-need iterations whose tool re-query surfaced NO
|
|
77
83
|
// new tool. One such "nudge" is allowed (the tool may already be present and
|
|
78
84
|
// the model just needs prompting); a second consecutive no-progress need
|
|
@@ -89,16 +95,33 @@ export class CyclicReActExecutor {
|
|
|
89
95
|
// program" task, so the model would fall back to the wrong tool. This is the
|
|
90
96
|
// contextual-RAG-then-tool-search ordering.
|
|
91
97
|
if (tools.length === 0) {
|
|
92
|
-
//
|
|
93
|
-
// (
|
|
94
|
-
//
|
|
98
|
+
// TWO ADDITIVE single-intent searches, UNIONed — never one mixed query.
|
|
99
|
+
// (1) PROMPT search: the overall intent (taskSpec) + guidance + node prompt
|
|
100
|
+
// → the main-task tools (e.g. GetProgram for the program shell).
|
|
101
|
+
// (2) NEEDS search: each Evaluator gap ("read the include bodies") queried
|
|
102
|
+
// SEPARATELY → the specific tool for that gap (GetInclude /
|
|
103
|
+
// GetIncludesList). Kept separate because a single mixed query DILUTES
|
|
104
|
+
// and DEMOTES the prompt-driven tools (measured: GetProgram #8 → #18
|
|
105
|
+
// when needs are mixed in). Single-intent queries each match their tool
|
|
106
|
+
// cleanly; the union covers both intents without lexical collision.
|
|
95
107
|
const seedQuery = `${taskAnchor ? `${renderTaskSpec(taskSpec)}\n` : ''}${factsPrefix}${prompt}`;
|
|
96
108
|
const seeded = await toolsRag.query(seedQuery, 10);
|
|
97
109
|
for (const t of seeded)
|
|
98
110
|
tools.push(t);
|
|
111
|
+
let needSeeded = 0;
|
|
112
|
+
if (input.evaluatorNeeds && input.evaluatorNeeds.length > 0) {
|
|
113
|
+
const have = new Set(tools.map((t) => t.name));
|
|
114
|
+
const byNeeds = await toolsRag.query(input.evaluatorNeeds.join('; '), 10);
|
|
115
|
+
for (const t of byNeeds)
|
|
116
|
+
if (!have.has(t.name)) {
|
|
117
|
+
tools.push(t);
|
|
118
|
+
needSeeded++;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
99
121
|
input.sessionLogger?.logStep('executor_tool_seed', {
|
|
100
122
|
source: ref,
|
|
101
123
|
seededCount: seeded.length,
|
|
124
|
+
needSeededCount: needSeeded,
|
|
102
125
|
});
|
|
103
126
|
}
|
|
104
127
|
// Issue #167: MERGE client-provided external tools (consumer-executed, e.g.
|
|
@@ -111,6 +134,35 @@ export class CyclicReActExecutor {
|
|
|
111
134
|
if (!have.has(t.name))
|
|
112
135
|
tools.push(t);
|
|
113
136
|
}
|
|
137
|
+
// Guard 2b — explicit "no capability" error, never a silent hallucination.
|
|
138
|
+
// The trigger is precise: the Evaluator established a NEED for this step
|
|
139
|
+
// (evaluatorNeeds non-empty → it judged the input needs-work and named the
|
|
140
|
+
// missing data/capability), yet every seeding path (input tools, prompt
|
|
141
|
+
// search, the needs search itself, external tools) left the toolset EMPTY.
|
|
142
|
+
// So a need exists and NO tool in RAG can satisfy it — calling the LLM now
|
|
143
|
+
// would fabricate the missing data (the live DAG-on-dead-proxy failure:
|
|
144
|
+
// 0 tools → invented review, promptTokens=1224 vs 507650 with a live proxy).
|
|
145
|
+
// We surface the gap to the consumer instead of returning invented content.
|
|
146
|
+
// NOTE the condition is gated on evaluatorNeeds — a step with NO established
|
|
147
|
+
// need is allowed to answer tool-free (legitimate reasoning); only an UNMET
|
|
148
|
+
// established need is an error. Opt out entirely with deps.allowToolless.
|
|
149
|
+
if (tools.length === 0 &&
|
|
150
|
+
!this.deps.allowToolless &&
|
|
151
|
+
(input.evaluatorNeeds?.length ?? 0) > 0) {
|
|
152
|
+
input.sessionLogger?.logStep('executor_no_tools', {
|
|
153
|
+
source: ref,
|
|
154
|
+
reason: 'evaluator established a need but the toolset is empty',
|
|
155
|
+
evaluatorNeeds: input.evaluatorNeeds ?? [],
|
|
156
|
+
});
|
|
157
|
+
throw new ClarifySignal(`I cannot complete this task: it requires ${(input.evaluatorNeeds ?? []).join('; ')}, but no tool is available to provide that (the tool subsystem returned an empty set — the MCP connection may be down, or no tool matches). I am stopping rather than inventing an answer.`);
|
|
158
|
+
}
|
|
159
|
+
// Guard 1 — groundedness/hallucination detector (token-based). Track whether
|
|
160
|
+
// the model ever actually called a tool and the size of the context the final
|
|
161
|
+
// answer was produced from. An answer emitted with ZERO tool calls, no seeded
|
|
162
|
+
// facts, and a tiny prompt — while tools WERE offered — is the hallucination
|
|
163
|
+
// signature (answered from the model's prior, not from retrieved data).
|
|
164
|
+
let toolCallsMade = 0;
|
|
165
|
+
let lastPromptTokens = 0;
|
|
114
166
|
for (let iter = 0; iter < maxIterations; iter++) {
|
|
115
167
|
// Gate BEFORE any further work (review R2-F1/R6-F1). The ledger is the
|
|
116
168
|
// SHARED run-wide counter (not a local snapshot). If it is exhausted we
|
|
@@ -144,6 +196,8 @@ export class CyclicReActExecutor {
|
|
|
144
196
|
};
|
|
145
197
|
const v = res.value;
|
|
146
198
|
usage = add(usage, v.usage);
|
|
199
|
+
if (v.usage)
|
|
200
|
+
lastPromptTokens = v.usage.promptTokens;
|
|
147
201
|
if (v.usage) {
|
|
148
202
|
budget.tokens.spend(v.usage); // decrement the shared ledger immediately
|
|
149
203
|
onProgress?.({
|
|
@@ -155,6 +209,7 @@ export class CyclicReActExecutor {
|
|
|
155
209
|
}
|
|
156
210
|
const toolCalls = v.toolCalls ?? [];
|
|
157
211
|
if (toolCalls.length > 0) {
|
|
212
|
+
toolCallsMade += toolCalls.length;
|
|
158
213
|
// Relay the assistant turn WITH its tool_calls, then one tool message
|
|
159
214
|
// per call carrying the matching tool_call_id. Anthropic/SAP AI SDK (and
|
|
160
215
|
// the DeepSeek/OpenAI protocol) reject a `tool` message that does not
|
|
@@ -174,6 +229,53 @@ export class CyclicReActExecutor {
|
|
|
174
229
|
});
|
|
175
230
|
for (const tc of toolCalls) {
|
|
176
231
|
const toolName = tc.name;
|
|
232
|
+
const identityKey = artifactIdentityKey(toolName, tc.arguments ?? {});
|
|
233
|
+
// Already fetched THIS run → do NOT re-call MCP and do NOT re-inject the
|
|
234
|
+
// payload; reply with a short note so the model stops re-requesting it
|
|
235
|
+
// (the full result is already earlier in this conversation + the store).
|
|
236
|
+
if (fetched.has(identityKey)) {
|
|
237
|
+
input.sessionLogger?.logStep('executor_fetch_dedup', {
|
|
238
|
+
source: ref,
|
|
239
|
+
scope: 'in-loop',
|
|
240
|
+
tool: toolName,
|
|
241
|
+
identityKey,
|
|
242
|
+
});
|
|
243
|
+
messages.push({
|
|
244
|
+
role: 'tool',
|
|
245
|
+
content: `(Already retrieved ${toolName} with these exact arguments earlier in this run — reuse the prior result above; do not fetch it again.)`,
|
|
246
|
+
tool_call_id: tc.id,
|
|
247
|
+
});
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
// CROSS-step dedup: another step already fetched this exact artefact
|
|
251
|
+
// into the shared session store. Inject the STORED content (it is NOT
|
|
252
|
+
// in this executor's history) instead of re-calling the tool. No
|
|
253
|
+
// mcp-call, no duplicate write.
|
|
254
|
+
if (knowledgeRag.hasArtifact && knowledgeRag.getArtifact) {
|
|
255
|
+
let priorContent;
|
|
256
|
+
try {
|
|
257
|
+
if (await knowledgeRag.hasArtifact(identityKey))
|
|
258
|
+
priorContent = await knowledgeRag.getArtifact(identityKey);
|
|
259
|
+
}
|
|
260
|
+
catch {
|
|
261
|
+
// store unavailable → fall through to a live fetch
|
|
262
|
+
}
|
|
263
|
+
if (priorContent !== undefined) {
|
|
264
|
+
fetched.add(identityKey);
|
|
265
|
+
input.sessionLogger?.logStep('executor_fetch_dedup', {
|
|
266
|
+
source: ref,
|
|
267
|
+
scope: 'cross-step',
|
|
268
|
+
tool: toolName,
|
|
269
|
+
identityKey,
|
|
270
|
+
});
|
|
271
|
+
messages.push({
|
|
272
|
+
role: 'tool',
|
|
273
|
+
content: priorContent,
|
|
274
|
+
tool_call_id: tc.id,
|
|
275
|
+
});
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
177
279
|
onProgress?.({
|
|
178
280
|
kind: 'mcp-call',
|
|
179
281
|
source: ref,
|
|
@@ -181,6 +283,7 @@ export class CyclicReActExecutor {
|
|
|
181
283
|
args: tc.arguments,
|
|
182
284
|
});
|
|
183
285
|
const result = await callMcp(toolName, tc.arguments, signal);
|
|
286
|
+
fetched.add(identityKey);
|
|
184
287
|
onProgress?.({
|
|
185
288
|
kind: 'mcp-result',
|
|
186
289
|
source: ref,
|
|
@@ -198,6 +301,7 @@ export class CyclicReActExecutor {
|
|
|
198
301
|
task: prompt,
|
|
199
302
|
artifactType: 'mcp-result',
|
|
200
303
|
toolName,
|
|
304
|
+
identityKey,
|
|
201
305
|
createdAt: nowIso(),
|
|
202
306
|
},
|
|
203
307
|
});
|
|
@@ -229,15 +333,13 @@ export class CyclicReActExecutor {
|
|
|
229
333
|
added++;
|
|
230
334
|
}
|
|
231
335
|
if (added === 0) {
|
|
232
|
-
// Re-query surfaced nothing new. Allow
|
|
233
|
-
// present);
|
|
234
|
-
//
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
usage,
|
|
240
|
-
};
|
|
336
|
+
// Re-query surfaced nothing new. Allow a few nudges (the tool may
|
|
337
|
+
// already be present); once the cap is hit the capability is genuinely
|
|
338
|
+
// unavailable → escalate to the CONSUMER (18.1) rather than returning a
|
|
339
|
+
// silent partial: analyze → find tools → add → retry exhausted, so ask.
|
|
340
|
+
const cap = Math.max(1, this.deps.maxNoProgressNeeds ?? 2);
|
|
341
|
+
if (++noProgressNeeds >= cap) {
|
|
342
|
+
throw new ClarifySignal(`I could not complete the task: I still need to ${need.queryToolsRag}, and no available tool provides that capability.`);
|
|
241
343
|
}
|
|
242
344
|
}
|
|
243
345
|
else {
|
|
@@ -250,6 +352,23 @@ export class CyclicReActExecutor {
|
|
|
250
352
|
});
|
|
251
353
|
continue;
|
|
252
354
|
}
|
|
355
|
+
// Guard 1 — flag a likely hallucination BEFORE accepting the answer. The
|
|
356
|
+
// model produced a final answer without ever calling a tool, with no seeded
|
|
357
|
+
// facts to ground it, while tools WERE on offer — and the answer-producing
|
|
358
|
+
// call ingested only a small prompt (no retrieved data). That is content
|
|
359
|
+
// generated from the model's prior, not from this session's sources. We do
|
|
360
|
+
// not hard-fail (a legitimately tool-free answer is possible) but we emit a
|
|
361
|
+
// structured, token-backed signal so the coordinator/consumer can audit it.
|
|
362
|
+
if (toolCallsMade === 0 && factsPrefix === '' && tools.length > 0) {
|
|
363
|
+
input.sessionLogger?.logStep('hallucination_suspected', {
|
|
364
|
+
source: ref,
|
|
365
|
+
reason: 'final answer produced with no tool calls and no grounding facts',
|
|
366
|
+
toolsOffered: tools.length,
|
|
367
|
+
toolCallsMade,
|
|
368
|
+
finalPromptTokens: lastPromptTokens,
|
|
369
|
+
answerChars: (v.content ?? '').length,
|
|
370
|
+
});
|
|
371
|
+
}
|
|
253
372
|
// Clean final answer → write + return ok.
|
|
254
373
|
await knowledgeRag.write({
|
|
255
374
|
content: v.content ?? '',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cyclic-react-executor.js","sourceRoot":"","sources":["../../../src/coordinator/stepper/cyclic-react-executor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cyclic-react-executor.js","sourceRoot":"","sources":["../../../src/coordinator/stepper/cyclic-react-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { CyclicReActExecutor } from './cyclic-react-executor.js';
|
|
2
|
+
export { EVALUATOR_SYSTEM, LlmEvaluator, parseVerdict, } from './llm-evaluator.js';
|
|
2
3
|
export { LlmStepperPlanner, STEPPER_PLANNER_SYSTEM, } from './llm-stepper-planner.js';
|
|
3
4
|
export { LlmTaskFormalizer, parseTaskSpec, TASK_FORMALIZER_SYSTEM, } from './llm-task-formalizer.js';
|
|
4
5
|
export { LoggingLlm } from './logging-llm.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/coordinator/stepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/coordinator/stepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { CyclicReActExecutor } from './cyclic-react-executor.js';
|
|
2
|
+
export { EVALUATOR_SYSTEM, LlmEvaluator, parseVerdict, } from './llm-evaluator.js';
|
|
2
3
|
export { LlmStepperPlanner, STEPPER_PLANNER_SYSTEM, } from './llm-stepper-planner.js';
|
|
3
4
|
export { LlmTaskFormalizer, parseTaskSpec, TASK_FORMALIZER_SYSTEM, } from './llm-task-formalizer.js';
|
|
4
5
|
export { LoggingLlm } from './logging-llm.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/coordinator/stepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAoB,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/coordinator/stepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAoB,MAAM,cAAc,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { EvaluatorVerdict, IEvaluator, IKnowledgeRagHandle, ILlm, ITaskSpec, IToolsRagHandle, RunIdentity } from '@mcp-abap-adt/llm-agent';
|
|
2
|
+
/**
|
|
3
|
+
* Task-agnostic Evaluator prompt. It judges the INPUT (the sub-prompt) against
|
|
4
|
+
* the RAG context — NOT how to do the task. "What completeness means" comes from
|
|
5
|
+
* the Known facts (the consumer's RAG skills); the prompt names no tools or
|
|
6
|
+
* domain rules. The three routes ARE the recursion control: executable =
|
|
7
|
+
* terminal, needs-work = recurse with gaps, needs-consumer = ask the human.
|
|
8
|
+
*/
|
|
9
|
+
export declare const EVALUATOR_SYSTEM = "You assess whether a TASK can be executed as stated, using ONLY the provided context. Do NOT perform the task. Decide ONE route:\n- \"executable\": the task can be carried out unambiguously with what is already known (see \"Known facts\") or with a single available tool call. Nothing essential is missing.\n- \"needs-work\": something essential is missing BUT it can be obtained by the agent \u2014 fetched via an available tool, or produced by decomposing/gathering first. List each missing item.\n- \"needs-consumer\": something essential is missing that ONLY the human/consumer can resolve (a decision, or knowledge external to the system that no available tool can obtain). List the question(s).\nUse \"Known facts\" to decide what \"complete\" means for this domain \u2014 e.g. if a review needs the COMPLETE artifact (all parts/sub-parts) and the facts show only a part is present, that is \"needs-work\" (fetch the rest). If an available tool could obtain the missing data, the route is \"needs-work\", NEVER \"needs-consumer\".\nRespond with ONLY JSON: {\"route\":\"executable|needs-work|needs-consumer\",\"missing\":[\"...\"],\"reason\":\"<one line>\"}";
|
|
10
|
+
export declare class LlmEvaluator implements IEvaluator {
|
|
11
|
+
private readonly llm;
|
|
12
|
+
readonly name = "llm-evaluator";
|
|
13
|
+
readonly model?: string;
|
|
14
|
+
private readonly systemPrompt;
|
|
15
|
+
constructor(llm: ILlm, systemPrompt?: string);
|
|
16
|
+
evaluate(input: {
|
|
17
|
+
prompt: string;
|
|
18
|
+
knowledgeRag: IKnowledgeRagHandle;
|
|
19
|
+
toolsRag: IToolsRagHandle;
|
|
20
|
+
taskSpec?: ITaskSpec;
|
|
21
|
+
identity: RunIdentity;
|
|
22
|
+
signal?: AbortSignal;
|
|
23
|
+
}): Promise<EvaluatorVerdict>;
|
|
24
|
+
}
|
|
25
|
+
/** Parse the JSON verdict; tolerate code fences and stray prose around it.
|
|
26
|
+
* Defaults to a safe `needs-work` if the route is missing/unknown (never
|
|
27
|
+
* silently treat an unparseable answer as executable). */
|
|
28
|
+
export declare function parseVerdict(raw: string): EvaluatorVerdict;
|
|
29
|
+
//# sourceMappingURL=llm-evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-evaluator.d.ts","sourceRoot":"","sources":["../../../src/coordinator/stepper/llm-evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gBAAgB,EAChB,UAAU,EACV,mBAAmB,EACnB,IAAI,EACJ,SAAS,EACT,eAAe,EACf,WAAW,EACZ,MAAM,yBAAyB,CAAC;AAGjC;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,+oCAKoF,CAAC;AAQlH,qBAAa,YAAa,YAAW,UAAU;IAM3C,OAAO,CAAC,QAAQ,CAAC,GAAG;IALtB,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGnB,GAAG,EAAE,IAAI,EAC1B,YAAY,GAAE,MAAyB;IAMnC,QAAQ,CAAC,KAAK,EAAE;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,mBAAmB,CAAC;QAClC,QAAQ,EAAE,eAAe,CAAC;QAC1B,QAAQ,CAAC,EAAE,SAAS,CAAC;QACrB,QAAQ,EAAE,WAAW,CAAC;QACtB,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA+C9B;AAED;;2DAE2D;AAC3D,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAc1D"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { renderTaskSpec } from '@mcp-abap-adt/llm-agent';
|
|
2
|
+
/**
|
|
3
|
+
* Task-agnostic Evaluator prompt. It judges the INPUT (the sub-prompt) against
|
|
4
|
+
* the RAG context — NOT how to do the task. "What completeness means" comes from
|
|
5
|
+
* the Known facts (the consumer's RAG skills); the prompt names no tools or
|
|
6
|
+
* domain rules. The three routes ARE the recursion control: executable =
|
|
7
|
+
* terminal, needs-work = recurse with gaps, needs-consumer = ask the human.
|
|
8
|
+
*/
|
|
9
|
+
export const EVALUATOR_SYSTEM = `You assess whether a TASK can be executed as stated, using ONLY the provided context. Do NOT perform the task. Decide ONE route:
|
|
10
|
+
- "executable": the task can be carried out unambiguously with what is already known (see "Known facts") or with a single available tool call. Nothing essential is missing.
|
|
11
|
+
- "needs-work": something essential is missing BUT it can be obtained by the agent — fetched via an available tool, or produced by decomposing/gathering first. List each missing item.
|
|
12
|
+
- "needs-consumer": something essential is missing that ONLY the human/consumer can resolve (a decision, or knowledge external to the system that no available tool can obtain). List the question(s).
|
|
13
|
+
Use "Known facts" to decide what "complete" means for this domain — e.g. if a review needs the COMPLETE artifact (all parts/sub-parts) and the facts show only a part is present, that is "needs-work" (fetch the rest). If an available tool could obtain the missing data, the route is "needs-work", NEVER "needs-consumer".
|
|
14
|
+
Respond with ONLY JSON: {"route":"executable|needs-work|needs-consumer","missing":["..."],"reason":"<one line>"}`;
|
|
15
|
+
const ROUTES = new Set([
|
|
16
|
+
'executable',
|
|
17
|
+
'needs-work',
|
|
18
|
+
'needs-consumer',
|
|
19
|
+
]);
|
|
20
|
+
export class LlmEvaluator {
|
|
21
|
+
llm;
|
|
22
|
+
name = 'llm-evaluator';
|
|
23
|
+
model;
|
|
24
|
+
systemPrompt;
|
|
25
|
+
constructor(llm, systemPrompt = EVALUATOR_SYSTEM) {
|
|
26
|
+
this.llm = llm;
|
|
27
|
+
this.model = llm.model;
|
|
28
|
+
this.systemPrompt = systemPrompt;
|
|
29
|
+
}
|
|
30
|
+
async evaluate(input) {
|
|
31
|
+
const facts = await input.knowledgeRag.query(input.prompt, { k: 8 });
|
|
32
|
+
const factBlock = facts.length
|
|
33
|
+
? `Known facts (already in the knowledge store):\n${facts
|
|
34
|
+
.map((f) => `- [${f.metadata.artifactType}] ${truncate(f.content, 400)}`)
|
|
35
|
+
.join('\n')}\n\n`
|
|
36
|
+
: 'Known facts: (none yet)\n\n';
|
|
37
|
+
let toolsBlock = '';
|
|
38
|
+
try {
|
|
39
|
+
const tools = await input.toolsRag.query(input.prompt, 15);
|
|
40
|
+
if (tools.length > 0) {
|
|
41
|
+
toolsBlock =
|
|
42
|
+
`Available tools (the agent can call these to obtain data):\n` +
|
|
43
|
+
tools
|
|
44
|
+
.map((t) => `- ${t.name}: ${truncate(t.description ?? '', 200)}`)
|
|
45
|
+
.join('\n') +
|
|
46
|
+
'\n\n';
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// toolsRag unavailable — omit gracefully (fewer obtainable options known)
|
|
51
|
+
}
|
|
52
|
+
const taskBlock = input.taskSpec
|
|
53
|
+
? `${renderTaskSpec(input.taskSpec)}\n\n`
|
|
54
|
+
: '';
|
|
55
|
+
const user = `${taskBlock}${factBlock}${toolsBlock}Task: ${input.prompt}`;
|
|
56
|
+
const res = await this.llm.chat([
|
|
57
|
+
{ role: 'system', content: this.systemPrompt },
|
|
58
|
+
{ role: 'user', content: user },
|
|
59
|
+
], [], { signal: input.signal });
|
|
60
|
+
if (res.ok === false)
|
|
61
|
+
throw new Error(`evaluator: ${res.error?.message ?? 'llm error'}`);
|
|
62
|
+
return parseVerdict(res.value.content);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/** Parse the JSON verdict; tolerate code fences and stray prose around it.
|
|
66
|
+
* Defaults to a safe `needs-work` if the route is missing/unknown (never
|
|
67
|
+
* silently treat an unparseable answer as executable). */
|
|
68
|
+
export function parseVerdict(raw) {
|
|
69
|
+
const json = extractJson(raw);
|
|
70
|
+
const route = json && typeof json.route === 'string' && ROUTES.has(json.route)
|
|
71
|
+
? json.route
|
|
72
|
+
: 'needs-work';
|
|
73
|
+
const missing = Array.isArray(json?.missing)
|
|
74
|
+
? (json?.missing).filter((m) => typeof m === 'string')
|
|
75
|
+
: [];
|
|
76
|
+
const reason = json && typeof json.reason === 'string' ? json.reason : undefined;
|
|
77
|
+
return { route, missing, ...(reason ? { reason } : {}) };
|
|
78
|
+
}
|
|
79
|
+
function extractJson(s) {
|
|
80
|
+
const start = s.indexOf('{');
|
|
81
|
+
const end = s.lastIndexOf('}');
|
|
82
|
+
if (start === -1 || end === -1 || end < start)
|
|
83
|
+
return undefined;
|
|
84
|
+
try {
|
|
85
|
+
return JSON.parse(s.slice(start, end + 1));
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function truncate(s, n) {
|
|
92
|
+
return s.length > n ? `${s.slice(0, n)}…` : s;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=llm-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-evaluator.js","sourceRoot":"","sources":["../../../src/coordinator/stepper/llm-evaluator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DagPlan, IKnowledgeRagHandle, ILlm, IStepperPlanner, ITaskSpec, IToolsRagHandle, RunIdentity } from '@mcp-abap-adt/llm-agent';
|
|
2
|
-
export declare const STEPPER_PLANNER_SYSTEM = "You are a planner in a recursive Stepper hierarchy. Decompose the task into a SHALLOW DAG of steps.\
|
|
2
|
+
export declare const STEPPER_PLANNER_SYSTEM = "You are a planner in a recursive Stepper hierarchy. Decompose the task into a SHALLOW DAG of steps.\nRAG-FIRST: the \"Known facts\" section lists what is already in the shared knowledge store. If a fact you need is already there, DO NOT add a step to re-fetch it \u2014 use it. Only add a step to obtain information that is genuinely missing.\nFETCHING IS THE EXECUTOR'S JOB \u2014 plan WORK, not granular fetches. A worker reads whatever its step needs (program source, includes, tables, metadata) at EXECUTION time via the available tools; do NOT decompose a task into many tiny fetch steps. Emit a separate \"gather\" step ONLY when its result must be SHARED by MULTIPLE later steps \u2014 and then emit ONE gather step they all \"dependsOn\" (fetched once, threaded to them), NEVER several fetch steps. (Use needInfo ONLY for a fact no listed tool can obtain \u2014 see below.)\nDECOMPOSE TO CONCRETE LEAVES: if a task is achievable by ONE tool call, emit a single-step plan whose goal is that concrete leaf call \u2014 do NOT re-emit the parent's task verbatim (that causes infinite recursion). Each node spawns a fresh worker that does NOT share your context; over-decomposition multiplies cost.\nDELEGATION: if an \"Available workers\" section is listed below, you MAY set a node's \"agent\" to one of those worker names to delegate a SUB-GOAL to that recursive worker (it will plan and execute the sub-goal itself). Omit \"agent\" for a concrete leaf you want executed directly. Only delegate when the sub-goal is a distinct unit of work that benefits from its own planning \u2014 otherwise emit a direct leaf.\nDEPENDENCIES \u2014 DATAFLOW + ORDERING. A step receives another step's output ONLY if that step is in its \"dependsOn\"; steps WITHOUT dependsOn run in PARALLEL and do NOT see each other's data. THEREFORE: NEVER place in parallel two steps that depend on, build on, or read the SAME data \u2014 that is the most common planning error. If step B uses, refines, or overlaps step A, set B.\"dependsOn\" = [A] so they run sequentially and A's output flows into B. Emit parallel (no-dependsOn) steps ONLY for GENUINELY INDEPENDENT, DISJOINT work. Prose like \"using step 1\" is NOT enough \u2014 encode it as dependsOn. When unsure whether two steps are independent, CHAIN them (sequential is safe; wrong parallelism re-fetches and races).\nONE READ PER ARTEFACT \u2014 discovery (list/shell to find what exists) and reading the bodies are SEQUENTIAL: the read step \"dependsOn\" the discovery; never two parallel steps that both fetch the same object.\nEach node: {\"id\",\"goal\",\"agent\"(optional worker name),\"dependsOn\"(ids of steps whose OUTPUT this step needs)}.\nRespond with ONLY one of:\n{\"objective\":\"...\",\"nodes\":[...]}\n{\"needInfo\":\"<query>\"} \u2014 ONLY for a fact that NO listed tool can obtain (e.g. a human decision, or knowledge external to the system). If a listed tool below could get it, plan a step instead.\n{\"clarify\":\"<question>\"} \u2014 you need a human decision before planning";
|
|
3
3
|
export declare class LlmStepperPlanner implements IStepperPlanner {
|
|
4
4
|
private readonly llm;
|
|
5
5
|
readonly name = "llm-stepper";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-stepper-planner.d.ts","sourceRoot":"","sources":["../../../src/coordinator/stepper/llm-stepper-planner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,mBAAmB,EACnB,IAAI,EACJ,eAAe,EACf,SAAS,EACT,eAAe,EACf,WAAW,EACZ,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-stepper-planner.d.ts","sourceRoot":"","sources":["../../../src/coordinator/stepper/llm-stepper-planner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,mBAAmB,EACnB,IAAI,EACJ,eAAe,EACf,SAAS,EACT,eAAe,EACf,WAAW,EACZ,MAAM,yBAAyB,CAAC;AAUjC,eAAO,MAAM,sBAAsB,o+FAWmC,CAAC;AAYvE,qBAAa,iBAAkB,YAAW,eAAe;IAUrD,OAAO,CAAC,QAAQ,CAAC,GAAG;IATtB,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAyB;IACrD;;4EAEwE;IACxE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAGnB,GAAG,EAAE,IAAI,EAC1B,WAAW,GAAE,SAAS,GAAG,UAAsB,EAC/C,YAAY,GAAE,MAA+B;IAOzC,IAAI,CAAC,KAAK,EAAE;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,mBAAmB,CAAC;QAClC,QAAQ,EAAE,eAAe,CAAC;QAC1B,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,EAAE,WAAW,CAAC;QACtB,MAAM,CAAC,EAAE,aAAa,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/D,QAAQ,CAAC,EAAE,SAAS,CAAC;QACrB,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GAAG,OAAO,CAAC,OAAO,CAAC;CA2ErB"}
|