@db-lyon/flowkit 0.10.0 → 0.11.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/README.md +37 -0
- package/dist/config/index.d.ts +2 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.d.ts +377 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +60 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/flow/runner.d.ts +14 -1
- package/dist/flow/runner.d.ts.map +1 -1
- package/dist/flow/runner.js +72 -2
- package/dist/flow/runner.js.map +1 -1
- package/dist/index.d.ts +10 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/task/agent-prompt-task.d.ts +26 -7
- package/dist/task/agent-prompt-task.d.ts.map +1 -1
- package/dist/task/agent-prompt-task.js +53 -19
- package/dist/task/agent-prompt-task.js.map +1 -1
- package/dist/task/agent-task.d.ts +98 -0
- package/dist/task/agent-task.d.ts.map +1 -0
- package/dist/task/agent-task.js +254 -0
- package/dist/task/agent-task.js.map +1 -0
- package/dist/task/base-task.d.ts +25 -0
- package/dist/task/base-task.d.ts.map +1 -1
- package/dist/task/base-task.js.map +1 -1
- package/dist/task/concurrency.d.ts +9 -0
- package/dist/task/concurrency.d.ts.map +1 -0
- package/dist/task/concurrency.js +24 -0
- package/dist/task/concurrency.js.map +1 -0
- package/dist/task/index.d.ts +11 -1
- package/dist/task/index.d.ts.map +1 -1
- package/dist/task/index.js +6 -0
- package/dist/task/index.js.map +1 -1
- package/dist/task/json-schema.d.ts +37 -0
- package/dist/task/json-schema.d.ts.map +1 -0
- package/dist/task/json-schema.js +223 -0
- package/dist/task/json-schema.js.map +1 -0
- package/dist/task/llm-provider.d.ts +81 -8
- package/dist/task/llm-provider.d.ts.map +1 -1
- package/dist/task/llm-provider.js +9 -3
- package/dist/task/llm-provider.js.map +1 -1
- package/dist/task/llm-runner.d.ts +72 -0
- package/dist/task/llm-runner.d.ts.map +1 -0
- package/dist/task/llm-runner.js +213 -0
- package/dist/task/llm-runner.js.map +1 -0
- package/dist/task/redact.d.ts +22 -0
- package/dist/task/redact.d.ts.map +1 -0
- package/dist/task/redact.js +47 -0
- package/dist/task/redact.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { BaseTask } from './base-task.js';
|
|
2
|
+
import { runCompletion, pickRunOptions, coerceStructured, StructuredOutputError, } from './llm-runner.js';
|
|
3
|
+
import { validateJson, formatErrors } from './json-schema.js';
|
|
4
|
+
import { preview, truncate } from './redact.js';
|
|
5
|
+
import { mapLimit } from './concurrency.js';
|
|
6
|
+
/**
|
|
7
|
+
* Agentic, multi-turn LLM task with tool calling.
|
|
8
|
+
*
|
|
9
|
+
* The model is given a set of tools (each backed by a flowkit task or a host
|
|
10
|
+
* `ctx.agentTools` handler) and loops: it requests tool calls, the agent runs
|
|
11
|
+
* them, feeds the results back, and repeats until the model produces a final
|
|
12
|
+
* answer or `maxIterations` is reached.
|
|
13
|
+
*
|
|
14
|
+
* Tools form a strict allowlist — only declared tools are callable, and the
|
|
15
|
+
* model's arguments are validated against each tool's `parameters` schema
|
|
16
|
+
* before the tool runs. The provider must be on the context as `ctx.llm`.
|
|
17
|
+
*
|
|
18
|
+
* Output shape (`result.data`):
|
|
19
|
+
* - `text` — the final answer text
|
|
20
|
+
* - `parsed` — final structured value when `schema` was provided
|
|
21
|
+
* - `iterations` — number of model turns taken
|
|
22
|
+
* - `toolCalls` — record of every tool call (name, args, ok, result)
|
|
23
|
+
* - `usage` — aggregated token usage across all turns, if reported
|
|
24
|
+
* - `finishReason` — final stop reason
|
|
25
|
+
*/
|
|
26
|
+
export class AgentTask extends BaseTask {
|
|
27
|
+
get taskName() {
|
|
28
|
+
return 'agent';
|
|
29
|
+
}
|
|
30
|
+
validate() {
|
|
31
|
+
if (!this.options?.prompt || typeof this.options.prompt !== 'string') {
|
|
32
|
+
throw new Error('agent requires a `prompt` string option');
|
|
33
|
+
}
|
|
34
|
+
for (const spec of this.options.tools ?? []) {
|
|
35
|
+
if (!spec.task && !spec.flow && !spec.agent && !spec.name) {
|
|
36
|
+
throw new Error('agent tool must reference a `task`, `flow`, or `agent`, or declare a `name`');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async execute() {
|
|
41
|
+
const provider = this.ctx.llm;
|
|
42
|
+
if (!provider || typeof provider.complete !== 'function') {
|
|
43
|
+
return {
|
|
44
|
+
success: false,
|
|
45
|
+
error: new Error('agent: no LLM provider configured. Attach one to ctx.llm before running.'),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const { prompt, system, model, maxTokens, temperature, tools = [], maxIterations = 8, tokenBudget = 0, maxConcurrency = 4, schema, } = this.options;
|
|
49
|
+
const runOpts = pickRunOptions(this.options);
|
|
50
|
+
const specsByName = new Map();
|
|
51
|
+
const toolDefs = [];
|
|
52
|
+
for (const spec of tools) {
|
|
53
|
+
const name = (spec.name ?? spec.task ?? spec.flow ?? spec.agent);
|
|
54
|
+
specsByName.set(name, spec);
|
|
55
|
+
toolDefs.push({
|
|
56
|
+
name,
|
|
57
|
+
description: spec.description,
|
|
58
|
+
parameters: spec.parameters ?? { type: 'object', properties: {} },
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
const messages = [{ role: 'user', content: prompt }];
|
|
62
|
+
const toolCallLog = [];
|
|
63
|
+
const usage = { inputTokens: 0, outputTokens: 0 };
|
|
64
|
+
let finishReason;
|
|
65
|
+
this.logger.debug({ model, tools: toolDefs.map((t) => t.name), prompt: preview(prompt) }, 'agent: starting loop');
|
|
66
|
+
try {
|
|
67
|
+
for (let iteration = 1; iteration <= maxIterations; iteration++) {
|
|
68
|
+
if (tokenBudget > 0 && usage.inputTokens + usage.outputTokens >= tokenBudget) {
|
|
69
|
+
return {
|
|
70
|
+
success: false,
|
|
71
|
+
error: new Error(`agent exceeded token budget (${tokenBudget})`),
|
|
72
|
+
data: { iterations: iteration - 1, toolCalls: toolCallLog, usage, finishReason },
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
const response = await runCompletion(provider, {
|
|
76
|
+
system,
|
|
77
|
+
messages,
|
|
78
|
+
model,
|
|
79
|
+
maxTokens,
|
|
80
|
+
temperature,
|
|
81
|
+
tools: toolDefs.length > 0 ? toolDefs : undefined,
|
|
82
|
+
toolChoice: toolDefs.length > 0 ? 'auto' : undefined,
|
|
83
|
+
}, runOpts, this.logger);
|
|
84
|
+
accumulateUsage(usage, response);
|
|
85
|
+
finishReason = response.finishReason;
|
|
86
|
+
const calls = response.toolCalls ?? [];
|
|
87
|
+
if (calls.length === 0) {
|
|
88
|
+
// Final answer. Apply structured output if a schema was requested.
|
|
89
|
+
const data = {
|
|
90
|
+
text: response.text,
|
|
91
|
+
iterations: iteration,
|
|
92
|
+
toolCalls: toolCallLog,
|
|
93
|
+
finishReason,
|
|
94
|
+
};
|
|
95
|
+
if (usage.inputTokens || usage.outputTokens)
|
|
96
|
+
data.usage = usage;
|
|
97
|
+
if (schema) {
|
|
98
|
+
// If the final answer already conforms, take it as-is; only spend a
|
|
99
|
+
// round-trip on the structured pass when it doesn't.
|
|
100
|
+
const direct = coerceStructured(response, schema);
|
|
101
|
+
if (!direct.errors) {
|
|
102
|
+
data.parsed = direct.parsed;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
const structured = await this.finalizeStructured(provider, messages, response, schema, runOpts);
|
|
106
|
+
accumulateUsage(usage, structured);
|
|
107
|
+
data.text = structured.text;
|
|
108
|
+
data.parsed = structured.parsed;
|
|
109
|
+
if (usage.inputTokens || usage.outputTokens)
|
|
110
|
+
data.usage = usage;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return { success: true, data };
|
|
114
|
+
}
|
|
115
|
+
// Record the assistant's tool-call turn, then run the calls. Multiple
|
|
116
|
+
// calls in one turn (e.g. parallel sub-agents) run concurrently under
|
|
117
|
+
// maxConcurrency; results are reassembled in call order so the
|
|
118
|
+
// conversation the model sees is deterministic.
|
|
119
|
+
messages.push({ role: 'assistant', content: response.text, toolCalls: calls });
|
|
120
|
+
const records = await mapLimit(calls, maxConcurrency, (call) => this.runTool(specsByName, call.name, call.arguments));
|
|
121
|
+
for (let i = 0; i < calls.length; i++) {
|
|
122
|
+
const call = calls[i];
|
|
123
|
+
const record = records[i];
|
|
124
|
+
toolCallLog.push(record);
|
|
125
|
+
messages.push({
|
|
126
|
+
role: 'tool',
|
|
127
|
+
toolCallId: call.id,
|
|
128
|
+
name: call.name,
|
|
129
|
+
content: record.result,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Loop fell through — the model kept asking for tools.
|
|
134
|
+
return {
|
|
135
|
+
success: false,
|
|
136
|
+
error: new Error(`agent exceeded maxIterations (${maxIterations}) without a final answer`),
|
|
137
|
+
data: { iterations: maxIterations, toolCalls: toolCallLog, usage, finishReason },
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
if (err instanceof StructuredOutputError) {
|
|
142
|
+
return {
|
|
143
|
+
success: false,
|
|
144
|
+
error: err,
|
|
145
|
+
data: { text: err.rawText, validationErrors: err.validationErrors, toolCalls: toolCallLog },
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
error: err instanceof Error ? err : new Error(String(err)),
|
|
151
|
+
data: { toolCalls: toolCallLog },
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Dispatch one tool call. Enforces the allowlist and the argument schema
|
|
157
|
+
* before executing; any rejection becomes a result string fed back to the
|
|
158
|
+
* model so it can correct itself rather than aborting the run.
|
|
159
|
+
*/
|
|
160
|
+
async runTool(specsByName, name, args) {
|
|
161
|
+
const cap = this.options.maxToolResultChars ?? 8000;
|
|
162
|
+
const fail = (result) => ({ name, arguments: args, ok: false, result });
|
|
163
|
+
const spec = specsByName.get(name);
|
|
164
|
+
if (!spec) {
|
|
165
|
+
return fail(`Error: unknown tool "${name}". It is not in the allowed tool list.`);
|
|
166
|
+
}
|
|
167
|
+
if (spec.parameters) {
|
|
168
|
+
const check = validateJson(args, spec.parameters);
|
|
169
|
+
if (!check.valid) {
|
|
170
|
+
return fail(`Error: invalid arguments — ${formatErrors(check.errors)}`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
this.logger.debug({ tool: name, args }, 'agent: invoking tool');
|
|
174
|
+
try {
|
|
175
|
+
let result;
|
|
176
|
+
if (spec.task) {
|
|
177
|
+
// Layer the model's arguments over the task's configured defaults, and
|
|
178
|
+
// resolve via its class_path, so a task behaves the same as a tool as it
|
|
179
|
+
// does as a flow step. Falls back to the task name when run outside a
|
|
180
|
+
// FlowRunner (no taskDefinitions on the context).
|
|
181
|
+
const def = this.ctx.taskDefinitions?.[spec.task];
|
|
182
|
+
const classPath = def?.class_path ?? spec.task;
|
|
183
|
+
result = await this.call(classPath, { ...(def?.options ?? {}), ...args });
|
|
184
|
+
}
|
|
185
|
+
else if (spec.flow) {
|
|
186
|
+
if (!this.ctx.runFlow) {
|
|
187
|
+
return fail(`Error: flow tools require a FlowRunner context (ctx.runFlow missing).`);
|
|
188
|
+
}
|
|
189
|
+
result = await this.ctx.runFlow(spec.flow, args);
|
|
190
|
+
}
|
|
191
|
+
else if (spec.agent) {
|
|
192
|
+
if (!this.ctx.runAgent) {
|
|
193
|
+
return fail(`Error: agent tools require a FlowRunner context (ctx.runAgent missing).`);
|
|
194
|
+
}
|
|
195
|
+
const myDepth = this.ctx.__agentDepth ?? 0;
|
|
196
|
+
const maxDepth = this.options.maxAgentDepth ?? 6;
|
|
197
|
+
if (myDepth >= maxDepth) {
|
|
198
|
+
return fail(`Error: max agent depth (${maxDepth}) reached; refusing to nest deeper.`);
|
|
199
|
+
}
|
|
200
|
+
result = await this.ctx.runAgent(spec.agent, args, myDepth + 1);
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
const handler = this.ctx.agentTools?.[name];
|
|
204
|
+
if (typeof handler !== 'function') {
|
|
205
|
+
return fail(`Error: tool "${name}" has no task/flow/agent and no ctx.agentTools handler.`);
|
|
206
|
+
}
|
|
207
|
+
return { name, arguments: args, ok: true, result: truncate(serializeToolResult(await handler(args)), cap) };
|
|
208
|
+
}
|
|
209
|
+
if (!result.success) {
|
|
210
|
+
return fail(`Error: ${result.error?.message ?? 'tool invocation failed'}`);
|
|
211
|
+
}
|
|
212
|
+
return { name, arguments: args, ok: true, result: truncate(serializeToolResult(result.data ?? {}), cap) };
|
|
213
|
+
}
|
|
214
|
+
catch (err) {
|
|
215
|
+
return fail(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Render the agent's final answer as schema-conforming JSON. Delegates to the
|
|
220
|
+
* runner so validation + repair behave exactly as in the single-shot task.
|
|
221
|
+
*/
|
|
222
|
+
async finalizeStructured(provider, messages, last, schema, runOpts) {
|
|
223
|
+
return runCompletion(provider, {
|
|
224
|
+
system: this.options.system,
|
|
225
|
+
messages: [
|
|
226
|
+
...messages,
|
|
227
|
+
{ role: 'assistant', content: last.text },
|
|
228
|
+
{
|
|
229
|
+
role: 'user',
|
|
230
|
+
content: 'Return your final answer as JSON conforming to the required schema.',
|
|
231
|
+
},
|
|
232
|
+
],
|
|
233
|
+
model: this.options.model,
|
|
234
|
+
maxTokens: this.options.maxTokens,
|
|
235
|
+
temperature: this.options.temperature,
|
|
236
|
+
schema,
|
|
237
|
+
}, runOpts, this.logger);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function serializeToolResult(value) {
|
|
241
|
+
if (typeof value === 'string')
|
|
242
|
+
return value;
|
|
243
|
+
try {
|
|
244
|
+
return JSON.stringify(value);
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
return String(value);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
function accumulateUsage(acc, resp) {
|
|
251
|
+
acc.inputTokens += resp.usage?.inputTokens ?? 0;
|
|
252
|
+
acc.outputTokens += resp.usage?.outputTokens ?? 0;
|
|
253
|
+
}
|
|
254
|
+
//# sourceMappingURL=agent-task.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-task.js","sourceRoot":"","sources":["../../src/task/agent-task.ts"],"names":[],"mappings":"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"}
|
package/dist/task/base-task.d.ts
CHANGED
|
@@ -1,8 +1,33 @@
|
|
|
1
1
|
import type { Logger } from '../logger.js';
|
|
2
2
|
import type { TaskRegistry } from './registry.js';
|
|
3
|
+
import type { LLMProvider, LLMToolHandler } from './llm-provider.js';
|
|
4
|
+
import type { TaskDefinition } from '../config/schema.js';
|
|
3
5
|
export interface TaskContext {
|
|
4
6
|
logger?: Logger;
|
|
5
7
|
registry?: TaskRegistry;
|
|
8
|
+
/** LLM provider consumed by `AgentPromptTask` / `AgentTask`. */
|
|
9
|
+
llm?: LLMProvider;
|
|
10
|
+
/** Programmatic agent tools, keyed by the name exposed to the model. */
|
|
11
|
+
agentTools?: Record<string, LLMToolHandler>;
|
|
12
|
+
/**
|
|
13
|
+
* Configured task definitions, supplied by `FlowRunner`, so that tasks used
|
|
14
|
+
* as agent tools inherit their configured `class_path` and `options` defaults.
|
|
15
|
+
*/
|
|
16
|
+
taskDefinitions?: Record<string, TaskDefinition>;
|
|
17
|
+
/**
|
|
18
|
+
* Run a configured flow as an agent tool. Wired by `FlowRunner`; absent when
|
|
19
|
+
* a task runs outside one. Returns a task-shaped result whose `data.steps`
|
|
20
|
+
* maps each step name to its output.
|
|
21
|
+
*/
|
|
22
|
+
runFlow?: (flowName: string, params?: Record<string, unknown>) => Promise<TaskResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Run a configured agent as an agent tool (the sub-agent fan-out path). Wired
|
|
25
|
+
* by `FlowRunner`. `depth` carries the caller's depth + 1 for recursion
|
|
26
|
+
* bounding; `AgentTask` passes it through.
|
|
27
|
+
*/
|
|
28
|
+
runAgent?: (agentName: string, input: Record<string, unknown>, depth: number) => Promise<TaskResult>;
|
|
29
|
+
/** Current agent-recursion depth, threaded by `FlowRunner.runAgent`. */
|
|
30
|
+
__agentDepth?: number;
|
|
6
31
|
[key: string]: unknown;
|
|
7
32
|
}
|
|
8
33
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-task.d.ts","sourceRoot":"","sources":["../../src/task/base-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"base-task.d.ts","sourceRoot":"","sources":["../../src/task/base-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,gEAAgE;IAChE,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC5C;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACjD;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACtF;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CACT,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,MAAM,KACV,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,8BAAsB,QAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAI1D,SAAS,CAAC,GAAG,EAAE,WAAW;IAC1B,SAAS,CAAC,OAAO,EAAE,KAAK;IAJ1B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAGb,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,KAAK;IAM1B,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC;IAEhC,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC;IAEvC,gEAAgE;IAChE,SAAS,CAAC,QAAQ,IAAI,IAAI;IAE1B;;;;OAIG;cACa,OAAO,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EACnD,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,CAAC,CAAC;IAWb;;;OAGG;cACa,IAAI,CAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,UAAU,CAAC;IAKtB;;;OAGG;IACG,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;CA2BjC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-task.js","sourceRoot":"","sources":["../../src/task/base-task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"base-task.js","sourceRoot":"","sources":["../../src/task/base-task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAwD1C,MAAM,OAAgB,QAAQ;IAIhB;IACA;IAJF,MAAM,CAAS;IAEzB,YACY,GAAgB,EAChB,OAAc;QADd,QAAG,GAAH,GAAG,CAAa;QAChB,YAAO,GAAP,OAAO,CAAO;QAExB,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,IAAI,UAAU,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IAMD,gEAAgE;IACtD,QAAQ,KAAU,CAAC;IAE7B;;;;OAIG;IACO,KAAK,CAAC,OAAO,CACrB,QAAgB,EAChB,OAAiC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,wBAAwB,QAAQ,8BAA8B;gBAC5D,6DAA6D,CAChE,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,EAAE,CAAe,CAAC;IAC1E,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,IAAI,CAClB,QAAgB,EAChB,OAAiC;QAEjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG;QACP,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,kBAAkB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEhF,IAAI,CAAC;YACH,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAEzC,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,EACtD,mBAAmB,IAAI,CAAC,QAAQ,EAAE,CACnC,CAAC;YAEF,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,gBAAgB,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;YAExE,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChE,QAAQ;aACT,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded-concurrency map. Runs `fn` over `items` with at most `limit` calls in
|
|
3
|
+
* flight at once, preserving input order in the result array. This is the one
|
|
4
|
+
* concurrency primitive the agent runtime uses — a single turn's tool calls
|
|
5
|
+
* (including parallel sub-agents) fan out through here, never through ad-hoc
|
|
6
|
+
* `Promise.all`, so the in-flight cap is enforced in exactly one place.
|
|
7
|
+
*/
|
|
8
|
+
export declare function mapLimit<T, R>(items: readonly T[], limit: number, fn: (item: T, index: number) => Promise<R>): Promise<R[]>;
|
|
9
|
+
//# sourceMappingURL=concurrency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../src/task/concurrency.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,CAAC,EAAE,CAAC,EACjC,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,CAAC,EAAE,CAAC,CAgBd"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded-concurrency map. Runs `fn` over `items` with at most `limit` calls in
|
|
3
|
+
* flight at once, preserving input order in the result array. This is the one
|
|
4
|
+
* concurrency primitive the agent runtime uses — a single turn's tool calls
|
|
5
|
+
* (including parallel sub-agents) fan out through here, never through ad-hoc
|
|
6
|
+
* `Promise.all`, so the in-flight cap is enforced in exactly one place.
|
|
7
|
+
*/
|
|
8
|
+
export async function mapLimit(items, limit, fn) {
|
|
9
|
+
const bound = Math.max(1, Math.floor(limit));
|
|
10
|
+
const results = new Array(items.length);
|
|
11
|
+
let next = 0;
|
|
12
|
+
const worker = async () => {
|
|
13
|
+
while (true) {
|
|
14
|
+
const i = next++;
|
|
15
|
+
if (i >= items.length)
|
|
16
|
+
return;
|
|
17
|
+
results[i] = await fn(items[i], i);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
const workers = Array.from({ length: Math.min(bound, items.length) }, worker);
|
|
21
|
+
await Promise.all(workers);
|
|
22
|
+
return results;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=concurrency.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../../src/task/concurrency.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,KAAmB,EACnB,KAAa,EACb,EAA0C;IAE1C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,IAAI,KAAK,CAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,KAAK,IAAmB,EAAE;QACvC,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM;gBAAE,OAAO;YAC9B,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC9E,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/task/index.d.ts
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
export { BaseTask } from './base-task.js';
|
|
2
|
-
export type { TaskContext, TaskResult } from './base-task.js';
|
|
2
|
+
export type { TaskContext, TaskResult, RollbackRecord } from './base-task.js';
|
|
3
3
|
export { ShellTask } from './shell-task.js';
|
|
4
4
|
export type { ShellTaskOptions } from './shell-task.js';
|
|
5
5
|
export { TaskRegistry } from './registry.js';
|
|
6
6
|
export type { TaskConstructor } from './registry.js';
|
|
7
|
+
export { AgentPromptTask } from './agent-prompt-task.js';
|
|
8
|
+
export type { AgentPromptOptions } from './agent-prompt-task.js';
|
|
9
|
+
export { AgentTask } from './agent-task.js';
|
|
10
|
+
export type { AgentTaskOptions, AgentToolSpec } from './agent-task.js';
|
|
11
|
+
export { runCompletion, pickRunOptions, LLMTimeoutError, StructuredOutputError, } from './llm-runner.js';
|
|
12
|
+
export type { LLMRunOptions, LLMRunResult, AgentRunFields } from './llm-runner.js';
|
|
13
|
+
export { validateJson, formatErrors } from './json-schema.js';
|
|
14
|
+
export type { ValidationError, ValidationResult } from './json-schema.js';
|
|
15
|
+
export { redact, truncate, preview } from './redact.js';
|
|
16
|
+
export type { LLMProvider, LLMCompletionRequest, LLMCompletionResponse, LLMMessage, LLMRole, LLMToolCall, LLMToolDefinition, LLMToolChoice, LLMToolHandler, } from './llm-provider.js';
|
|
7
17
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/task/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9D,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,qBAAqB,EACrB,UAAU,EACV,OAAO,EACP,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,MAAM,mBAAmB,CAAC"}
|
package/dist/task/index.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
export { BaseTask } from './base-task.js';
|
|
2
2
|
export { ShellTask } from './shell-task.js';
|
|
3
3
|
export { TaskRegistry } from './registry.js';
|
|
4
|
+
// Agent / LLM
|
|
5
|
+
export { AgentPromptTask } from './agent-prompt-task.js';
|
|
6
|
+
export { AgentTask } from './agent-task.js';
|
|
7
|
+
export { runCompletion, pickRunOptions, LLMTimeoutError, StructuredOutputError, } from './llm-runner.js';
|
|
8
|
+
export { validateJson, formatErrors } from './json-schema.js';
|
|
9
|
+
export { redact, truncate, preview } from './redact.js';
|
|
4
10
|
//# sourceMappingURL=index.js.map
|
package/dist/task/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/task/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,cAAc;AACd,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EACL,aAAa,EACb,cAAc,EACd,eAAe,EACf,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compact, dependency-free JSON Schema validator.
|
|
3
|
+
*
|
|
4
|
+
* Flowkit keeps its runtime dependencies to two (js-yaml, zod), so rather than
|
|
5
|
+
* pull in a full validator we implement the subset that LLM structured-output
|
|
6
|
+
* schemas actually use. The goal is not spec completeness — it is a precise,
|
|
7
|
+
* human-readable verdict that drives the structured-output repair loop in
|
|
8
|
+
* llm-runner (the error strings are fed back to the model).
|
|
9
|
+
*
|
|
10
|
+
* Supported keywords:
|
|
11
|
+
* type (single or array), enum, const,
|
|
12
|
+
* object: properties, required, additionalProperties (bool or schema),
|
|
13
|
+
* array: items, minItems, maxItems,
|
|
14
|
+
* string: minLength, maxLength, pattern,
|
|
15
|
+
* number: minimum, maximum, exclusiveMinimum, exclusiveMaximum,
|
|
16
|
+
* composition: anyOf, oneOf, allOf, not,
|
|
17
|
+
* nullable (OpenAPI-style — treated as "type may also be null").
|
|
18
|
+
*
|
|
19
|
+
* Anything unrecognized is ignored (treated as "no constraint"), so an
|
|
20
|
+
* over-rich schema validates leniently rather than throwing.
|
|
21
|
+
*/
|
|
22
|
+
export interface ValidationError {
|
|
23
|
+
/** JSON-path-ish pointer to the offending value, e.g. `/items/0/name`. */
|
|
24
|
+
path: string;
|
|
25
|
+
message: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ValidationResult {
|
|
28
|
+
valid: boolean;
|
|
29
|
+
errors: ValidationError[];
|
|
30
|
+
}
|
|
31
|
+
type Schema = Record<string, unknown>;
|
|
32
|
+
/** Validate a value against a JSON Schema. Always returns; never throws. */
|
|
33
|
+
export declare function validateJson(value: unknown, schema: Schema): ValidationResult;
|
|
34
|
+
/** One-line, model-friendly summary of validation errors for the repair loop. */
|
|
35
|
+
export declare function formatErrors(errors: ValidationError[]): string;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=json-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-schema.d.ts","sourceRoot":"","sources":["../../src/task/json-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,eAAe;IAC9B,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,KAAK,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAqMtC,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAQ7E;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAE9D"}
|