@backendkit-labs/orchestrator-agent 0.1.1
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/AGENT.md +69 -0
- package/dist/config.d.ts +342 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +88 -0
- package/dist/config.js.map +1 -0
- package/dist/executor.d.ts +99 -0
- package/dist/executor.d.ts.map +1 -0
- package/dist/executor.js +274 -0
- package/dist/executor.js.map +1 -0
- package/dist/planner.d.ts +21 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +78 -0
- package/dist/planner.js.map +1 -0
- package/dist/profile.d.ts +4 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +36 -0
- package/dist/profile.js.map +1 -0
- package/dist/provider.d.ts +13 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +116 -0
- package/dist/provider.js.map +1 -0
- package/dist/run-store.d.ts +47 -0
- package/dist/run-store.d.ts.map +1 -0
- package/dist/run-store.js +28 -0
- package/dist/run-store.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +466 -0
- package/dist/server.js.map +1 -0
- package/dist/static-flow.d.ts +110 -0
- package/dist/static-flow.d.ts.map +1 -0
- package/dist/static-flow.js +82 -0
- package/dist/static-flow.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
import * as yaml from 'yaml';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
// ── Schema ────────────────────────────────────────────────────────────────────
|
|
6
|
+
const FlowStepSchema = z.object({
|
|
7
|
+
id: z.string(),
|
|
8
|
+
agent: z.string(),
|
|
9
|
+
task: z.string(),
|
|
10
|
+
depends_on: z.array(z.string()).default([]),
|
|
11
|
+
gate: z.boolean().optional(),
|
|
12
|
+
gate_criteria: z.array(z.string()).optional(),
|
|
13
|
+
});
|
|
14
|
+
const StaticFlowSchema = z.object({
|
|
15
|
+
version: z.number().default(1),
|
|
16
|
+
id: z.string(),
|
|
17
|
+
name: z.string(),
|
|
18
|
+
description: z.string().optional(),
|
|
19
|
+
steps: z.array(FlowStepSchema).min(1),
|
|
20
|
+
});
|
|
21
|
+
// ── Flow config entry (in orchestrator.yaml) ──────────────────────────────────
|
|
22
|
+
export const FlowEntrySchema = z.object({
|
|
23
|
+
id: z.string(),
|
|
24
|
+
file: z.string(), // path relative to orchestrator.yaml
|
|
25
|
+
trigger: z.string().optional(), // regex to match task descriptions
|
|
26
|
+
});
|
|
27
|
+
// ── Loader ────────────────────────────────────────────────────────────────────
|
|
28
|
+
export function loadFlow(flowPath) {
|
|
29
|
+
const resolved = path.resolve(flowPath);
|
|
30
|
+
if (!fs.existsSync(resolved)) {
|
|
31
|
+
throw new Error(`Flow file not found: ${resolved}`);
|
|
32
|
+
}
|
|
33
|
+
const raw = yaml.parse(fs.readFileSync(resolved, 'utf-8'));
|
|
34
|
+
const result = StaticFlowSchema.safeParse(raw);
|
|
35
|
+
if (!result.success) {
|
|
36
|
+
const issues = result.error.issues.map(i => ` ${i.path.join('.')}: ${i.message}`).join('\n');
|
|
37
|
+
throw new Error(`Invalid flow file ${path.basename(flowPath)}:\n${issues}`);
|
|
38
|
+
}
|
|
39
|
+
return result.data;
|
|
40
|
+
}
|
|
41
|
+
// ── Router ────────────────────────────────────────────────────────────────────
|
|
42
|
+
/**
|
|
43
|
+
* Find the first flow whose trigger regex matches the task description.
|
|
44
|
+
* Returns null if no flow matches → fall back to TaskPlanner.
|
|
45
|
+
*/
|
|
46
|
+
export function matchFlow(entries, configDir, task) {
|
|
47
|
+
for (const entry of entries) {
|
|
48
|
+
if (!entry.trigger)
|
|
49
|
+
continue;
|
|
50
|
+
const regex = new RegExp(entry.trigger, 'i');
|
|
51
|
+
if (regex.test(task)) {
|
|
52
|
+
const flowPath = path.resolve(configDir, entry.file);
|
|
53
|
+
const flow = loadFlow(flowPath);
|
|
54
|
+
return { entry, flow };
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
// ── Converter ─────────────────────────────────────────────────────────────────
|
|
60
|
+
/**
|
|
61
|
+
* Convert a static flow definition to a TaskPlan, interpolating
|
|
62
|
+
* {{payload.key}} placeholders with values from the provided payload.
|
|
63
|
+
*/
|
|
64
|
+
export function flowToTaskPlan(flow, payload = {}) {
|
|
65
|
+
const subtasks = flow.steps.map(step => ({
|
|
66
|
+
id: step.id,
|
|
67
|
+
agent_id: step.agent,
|
|
68
|
+
task: interpolate(step.task, payload),
|
|
69
|
+
depends_on: step.depends_on,
|
|
70
|
+
gate: step.gate,
|
|
71
|
+
gate_criteria: step.gate_criteria?.map(c => interpolate(c, payload)),
|
|
72
|
+
}));
|
|
73
|
+
return {
|
|
74
|
+
summary: interpolate(flow.name, payload),
|
|
75
|
+
subtasks,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// ── Helpers ───────────────────────────────────────────────────────────────────
|
|
79
|
+
function interpolate(template, payload) {
|
|
80
|
+
return template.replace(/\{\{payload\.(\w+)\}\}/g, (_, key) => payload[key] ?? `{{payload.${key}}}`);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=static-flow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static-flow.js","sourceRoot":"","sources":["../src/static-flow.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@backendkit-labs/orchestrator-agent",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Config-driven orchestration agent — decomposes tasks and coordinates specialist agents via shared vault and configurable LLM providers.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/server.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"orchestrator-agent": "./dist/server.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist/",
|
|
12
|
+
"AGENT.md"
|
|
13
|
+
],
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+https://github.com/BackendKit-labs/backendkit-agents.git",
|
|
17
|
+
"directory": "packages/orchestrator-agent"
|
|
18
|
+
},
|
|
19
|
+
"publishConfig": { "access": "public" },
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"engines": { "node": ">=20.0.0" },
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "tsc --noCheck",
|
|
24
|
+
"start": "node dist/server.js",
|
|
25
|
+
"typecheck": "tsc --noEmit",
|
|
26
|
+
"prepublishOnly": "npm run build"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@backendkit-labs/agent-core": "^0.22.2",
|
|
30
|
+
"@backendkit-labs/agent-enterprise": "^0.3.6",
|
|
31
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
32
|
+
"openai": "^4.0.0",
|
|
33
|
+
"yaml": "^2.4.0",
|
|
34
|
+
"zod": "^3.25.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"@types/node": "^20.17.12",
|
|
38
|
+
"typescript": "^5.7.3"
|
|
39
|
+
}
|
|
40
|
+
}
|