@flomatai/core 0.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 +92 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +137 -0
- package/dist/agent.js.map +1 -0
- package/dist/cli-utils.d.ts +41 -0
- package/dist/cli-utils.d.ts.map +1 -0
- package/dist/cli-utils.js +64 -0
- package/dist/cli-utils.js.map +1 -0
- package/dist/errors.d.ts +52 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +105 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/llm-provider.d.ts +29 -0
- package/dist/llm-provider.d.ts.map +1 -0
- package/dist/llm-provider.js +44 -0
- package/dist/llm-provider.js.map +1 -0
- package/dist/logger.d.ts +32 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +75 -0
- package/dist/logger.js.map +1 -0
- package/dist/mock-llm.d.ts +70 -0
- package/dist/mock-llm.d.ts.map +1 -0
- package/dist/mock-llm.js +385 -0
- package/dist/mock-llm.js.map +1 -0
- package/dist/orchestrator-helpers.d.ts +20 -0
- package/dist/orchestrator-helpers.d.ts.map +1 -0
- package/dist/orchestrator-helpers.js +38 -0
- package/dist/orchestrator-helpers.js.map +1 -0
- package/dist/orchestrator.d.ts +124 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +349 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/pipeline-registry.d.ts +120 -0
- package/dist/pipeline-registry.d.ts.map +1 -0
- package/dist/pipeline-registry.js +171 -0
- package/dist/pipeline-registry.js.map +1 -0
- package/dist/pipeline.d.ts +122 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +152 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/skill.d.ts +112 -0
- package/dist/skill.d.ts.map +1 -0
- package/dist/skill.js +12 -0
- package/dist/skill.js.map +1 -0
- package/dist/skills/io-skill.d.ts +49 -0
- package/dist/skills/io-skill.d.ts.map +1 -0
- package/dist/skills/io-skill.js +103 -0
- package/dist/skills/io-skill.js.map +1 -0
- package/dist/skills/llm-skill.d.ts +64 -0
- package/dist/skills/llm-skill.d.ts.map +1 -0
- package/dist/skills/llm-skill.js +112 -0
- package/dist/skills/llm-skill.js.map +1 -0
- package/dist/skills/transform-skill.d.ts +27 -0
- package/dist/skills/transform-skill.d.ts.map +1 -0
- package/dist/skills/transform-skill.js +32 -0
- package/dist/skills/transform-skill.js.map +1 -0
- package/dist/state/file-store.d.ts +25 -0
- package/dist/state/file-store.d.ts.map +1 -0
- package/dist/state/file-store.js +92 -0
- package/dist/state/file-store.js.map +1 -0
- package/dist/state/memory-store.d.ts +24 -0
- package/dist/state/memory-store.d.ts.map +1 -0
- package/dist/state/memory-store.js +65 -0
- package/dist/state/memory-store.js.map +1 -0
- package/dist/state/types.d.ts +40 -0
- package/dist/state/types.d.ts.map +1 -0
- package/dist/state/types.js +8 -0
- package/dist/state/types.js.map +1 -0
- package/dist/strategies/custom.d.ts +12 -0
- package/dist/strategies/custom.d.ts.map +1 -0
- package/dist/strategies/custom.js +14 -0
- package/dist/strategies/custom.js.map +1 -0
- package/dist/strategies/plan-and-execute.d.ts +27 -0
- package/dist/strategies/plan-and-execute.d.ts.map +1 -0
- package/dist/strategies/plan-and-execute.js +195 -0
- package/dist/strategies/plan-and-execute.js.map +1 -0
- package/dist/strategies/react.d.ts +27 -0
- package/dist/strategies/react.d.ts.map +1 -0
- package/dist/strategies/react.js +172 -0
- package/dist/strategies/react.js.map +1 -0
- package/dist/strategies/router.d.ts +11 -0
- package/dist/strategies/router.d.ts.map +1 -0
- package/dist/strategies/router.js +70 -0
- package/dist/strategies/router.js.map +1 -0
- package/dist/strategies/sequential.d.ts +12 -0
- package/dist/strategies/sequential.d.ts.map +1 -0
- package/dist/strategies/sequential.js +39 -0
- package/dist/strategies/sequential.js.map +1 -0
- package/dist/strategies/types.d.ts +62 -0
- package/dist/strategies/types.d.ts.map +1 -0
- package/dist/strategies/types.js +5 -0
- package/dist/strategies/types.js.map +1 -0
- package/dist/types.d.ts +83 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +28 -0
- package/src/agent.ts +243 -0
- package/src/cli-utils.ts +73 -0
- package/src/errors.ts +146 -0
- package/src/index.ts +124 -0
- package/src/llm-provider.ts +88 -0
- package/src/logger.ts +97 -0
- package/src/mock-llm.ts +433 -0
- package/src/orchestrator-helpers.ts +40 -0
- package/src/orchestrator.ts +522 -0
- package/src/pipeline-registry.ts +253 -0
- package/src/pipeline.ts +265 -0
- package/src/skill.ts +127 -0
- package/src/skills/io-skill.ts +133 -0
- package/src/skills/llm-skill.ts +207 -0
- package/src/skills/transform-skill.ts +61 -0
- package/src/state/file-store.ts +119 -0
- package/src/state/memory-store.ts +82 -0
- package/src/state/types.ts +53 -0
- package/src/strategies/custom.ts +24 -0
- package/src/strategies/plan-and-execute.ts +268 -0
- package/src/strategies/react.ts +239 -0
- package/src/strategies/router.ts +101 -0
- package/src/strategies/sequential.ts +55 -0
- package/src/strategies/types.ts +97 -0
- package/src/types.ts +102 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline Registry — discover, load, and manage pipelines from various sources.
|
|
3
|
+
*
|
|
4
|
+
* This module provides:
|
|
5
|
+
* - PipelineSource: define where a pipeline comes from (npm, local path, git)
|
|
6
|
+
* - PipelineRegistry: local registry that maps names to sources
|
|
7
|
+
* - loadPipeline(): resolve a source to a BuiltPipeline
|
|
8
|
+
*/
|
|
9
|
+
import type { BuiltPipeline } from './pipeline.js';
|
|
10
|
+
import type { ZodSchema } from 'zod';
|
|
11
|
+
/**
|
|
12
|
+
* Metadata for a pipeline package.
|
|
13
|
+
* Exported from the pipeline's main file.
|
|
14
|
+
*/
|
|
15
|
+
export interface PipelinePackageMeta {
|
|
16
|
+
/** Unique name (e.g., 'content-generation') */
|
|
17
|
+
name: string;
|
|
18
|
+
/** Human-readable description */
|
|
19
|
+
description: string;
|
|
20
|
+
/** Semantic version */
|
|
21
|
+
version?: string;
|
|
22
|
+
/** Tags for discovery */
|
|
23
|
+
tags?: string[];
|
|
24
|
+
/** Author information */
|
|
25
|
+
author?: string;
|
|
26
|
+
/** Input schema (for display/documentation) */
|
|
27
|
+
inputSchema?: ZodSchema;
|
|
28
|
+
/** Output schema (for display/documentation) */
|
|
29
|
+
outputSchema?: ZodSchema;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Full pipeline export from a pipeline package.
|
|
33
|
+
*/
|
|
34
|
+
export interface PipelinePackageExports {
|
|
35
|
+
/** The built pipeline */
|
|
36
|
+
pipeline: BuiltPipeline;
|
|
37
|
+
/** Optional metadata */
|
|
38
|
+
metadata?: PipelinePackageMeta;
|
|
39
|
+
/** Optional config schema for runtime validation */
|
|
40
|
+
configSchema?: ZodSchema;
|
|
41
|
+
/** Optional orchestrator override */
|
|
42
|
+
orchestrator?: unknown;
|
|
43
|
+
}
|
|
44
|
+
/** Where a pipeline is loaded from */
|
|
45
|
+
export type PipelineSource = {
|
|
46
|
+
type: 'npm';
|
|
47
|
+
package: string;
|
|
48
|
+
export?: string;
|
|
49
|
+
} | {
|
|
50
|
+
type: 'path';
|
|
51
|
+
path: string;
|
|
52
|
+
} | {
|
|
53
|
+
type: 'git';
|
|
54
|
+
url: string;
|
|
55
|
+
ref?: string;
|
|
56
|
+
};
|
|
57
|
+
/** Registered pipeline in the local registry */
|
|
58
|
+
export interface RegisteredPipeline {
|
|
59
|
+
/** Local name (e.g., 'my-pipeline') */
|
|
60
|
+
name: string;
|
|
61
|
+
/** Source where the pipeline is loaded from */
|
|
62
|
+
source: PipelineSource;
|
|
63
|
+
/** Optional version constraint (for npm) */
|
|
64
|
+
version?: string;
|
|
65
|
+
/** When this was registered */
|
|
66
|
+
registeredAt: Date;
|
|
67
|
+
/** Cached loaded exports */
|
|
68
|
+
exports?: PipelinePackageExports;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Local pipeline registry.
|
|
72
|
+
* Maps friendly names to pipeline sources.
|
|
73
|
+
*/
|
|
74
|
+
export declare class PipelineRegistry {
|
|
75
|
+
private readonly pipelines;
|
|
76
|
+
private readonly pipelineDirs;
|
|
77
|
+
constructor(pipelineDirs?: string[]);
|
|
78
|
+
/**
|
|
79
|
+
* Register a pipeline from an npm package.
|
|
80
|
+
*/
|
|
81
|
+
register(name: string, packageName: string, options?: {
|
|
82
|
+
version?: string;
|
|
83
|
+
}): void;
|
|
84
|
+
/**
|
|
85
|
+
* Register a pipeline from a local path.
|
|
86
|
+
*/
|
|
87
|
+
registerPath(name: string, path: string): void;
|
|
88
|
+
/**
|
|
89
|
+
* Register a pipeline from a git repository.
|
|
90
|
+
*/
|
|
91
|
+
registerGit(name: string, url: string, ref?: string): void;
|
|
92
|
+
/**
|
|
93
|
+
* Get a registered pipeline by name.
|
|
94
|
+
*/
|
|
95
|
+
get(name: string): RegisteredPipeline | undefined;
|
|
96
|
+
/**
|
|
97
|
+
* List all registered pipelines.
|
|
98
|
+
*/
|
|
99
|
+
list(): RegisteredPipeline[];
|
|
100
|
+
/**
|
|
101
|
+
* Remove a pipeline from the registry.
|
|
102
|
+
*/
|
|
103
|
+
unregister(name: string): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Clear all registrations.
|
|
106
|
+
*/
|
|
107
|
+
clear(): void;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Load a pipeline from a source.
|
|
111
|
+
*/
|
|
112
|
+
export declare function loadPipeline(source: PipelineSource): Promise<PipelinePackageExports>;
|
|
113
|
+
/**
|
|
114
|
+
* Create a registry from a config object.
|
|
115
|
+
*/
|
|
116
|
+
export declare function createRegistryFromConfig(config: Record<string, string | {
|
|
117
|
+
package: string;
|
|
118
|
+
version?: string;
|
|
119
|
+
}>): PipelineRegistry;
|
|
120
|
+
//# sourceMappingURL=pipeline-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-registry.d.ts","sourceRoot":"","sources":["../src/pipeline-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline Registry — discover, load, and manage pipelines from various sources.
|
|
3
|
+
*
|
|
4
|
+
* This module provides:
|
|
5
|
+
* - PipelineSource: define where a pipeline comes from (npm, local path, git)
|
|
6
|
+
* - PipelineRegistry: local registry that maps names to sources
|
|
7
|
+
* - loadPipeline(): resolve a source to a BuiltPipeline
|
|
8
|
+
*/
|
|
9
|
+
import { resolve } from 'path';
|
|
10
|
+
import { existsSync } from 'fs';
|
|
11
|
+
import { readFile } from 'fs/promises';
|
|
12
|
+
// ── Pipeline Registry ────────────────────────────────────────────────────────
|
|
13
|
+
/**
|
|
14
|
+
* Local pipeline registry.
|
|
15
|
+
* Maps friendly names to pipeline sources.
|
|
16
|
+
*/
|
|
17
|
+
export class PipelineRegistry {
|
|
18
|
+
pipelines = new Map();
|
|
19
|
+
pipelineDirs = [];
|
|
20
|
+
constructor(pipelineDirs = []) {
|
|
21
|
+
this.pipelineDirs = pipelineDirs;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Register a pipeline from an npm package.
|
|
25
|
+
*/
|
|
26
|
+
register(name, packageName, options) {
|
|
27
|
+
this.pipelines.set(name, {
|
|
28
|
+
name,
|
|
29
|
+
source: { type: 'npm', package: packageName },
|
|
30
|
+
version: options?.version,
|
|
31
|
+
registeredAt: new Date(),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Register a pipeline from a local path.
|
|
36
|
+
*/
|
|
37
|
+
registerPath(name, path) {
|
|
38
|
+
this.pipelines.set(name, {
|
|
39
|
+
name,
|
|
40
|
+
source: { type: 'path', path: resolve(path) },
|
|
41
|
+
registeredAt: new Date(),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Register a pipeline from a git repository.
|
|
46
|
+
*/
|
|
47
|
+
registerGit(name, url, ref) {
|
|
48
|
+
this.pipelines.set(name, {
|
|
49
|
+
name,
|
|
50
|
+
source: { type: 'git', url, ref },
|
|
51
|
+
registeredAt: new Date(),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get a registered pipeline by name.
|
|
56
|
+
*/
|
|
57
|
+
get(name) {
|
|
58
|
+
return this.pipelines.get(name);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* List all registered pipelines.
|
|
62
|
+
*/
|
|
63
|
+
list() {
|
|
64
|
+
return Array.from(this.pipelines.values());
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Remove a pipeline from the registry.
|
|
68
|
+
*/
|
|
69
|
+
unregister(name) {
|
|
70
|
+
return this.pipelines.delete(name);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Clear all registrations.
|
|
74
|
+
*/
|
|
75
|
+
clear() {
|
|
76
|
+
this.pipelines.clear();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// ── Pipeline Loader ─────────────────────────────────────────────────────────
|
|
80
|
+
/**
|
|
81
|
+
* Load a pipeline from a source.
|
|
82
|
+
*/
|
|
83
|
+
export async function loadPipeline(source) {
|
|
84
|
+
switch (source.type) {
|
|
85
|
+
case 'path':
|
|
86
|
+
return loadFromPath(source.path);
|
|
87
|
+
case 'npm':
|
|
88
|
+
return loadFromNpm(source.package, source.export);
|
|
89
|
+
case 'git':
|
|
90
|
+
// TODO: Implement git loading (clone + package.json lookup)
|
|
91
|
+
throw new Error('Git pipeline loading not yet implemented');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Load a pipeline from a local path.
|
|
96
|
+
*/
|
|
97
|
+
async function loadFromPath(absolutePath) {
|
|
98
|
+
// Check if it's a directory (pipeline package) or a file
|
|
99
|
+
const dirExists = existsSync(absolutePath);
|
|
100
|
+
const fileExists = existsSync(absolutePath + '.ts') || existsSync(absolutePath + '.js');
|
|
101
|
+
if (dirExists) {
|
|
102
|
+
// It's a directory — look for pipeline.ts or package.json
|
|
103
|
+
const pkgPath = resolve(absolutePath, 'package.json');
|
|
104
|
+
if (existsSync(pkgPath)) {
|
|
105
|
+
const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));
|
|
106
|
+
const mainFile = resolve(absolutePath, pkg.main || pkg.exports?.['.'] || 'index.js');
|
|
107
|
+
return import(mainFile);
|
|
108
|
+
}
|
|
109
|
+
const pipelinePath = resolve(absolutePath, 'pipeline.ts');
|
|
110
|
+
if (existsSync(pipelinePath)) {
|
|
111
|
+
return import(pipelinePath);
|
|
112
|
+
}
|
|
113
|
+
throw new Error(`No pipeline.ts or package.json found in ${absolutePath}`);
|
|
114
|
+
}
|
|
115
|
+
if (fileExists) {
|
|
116
|
+
// Direct file import
|
|
117
|
+
const ext = existsSync(absolutePath + '.ts') ? '.ts' : '.js';
|
|
118
|
+
return import(absolutePath + ext);
|
|
119
|
+
}
|
|
120
|
+
throw new Error(`Pipeline not found at ${absolutePath}`);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Load a pipeline from an npm package.
|
|
124
|
+
* Note: This requires the package to be installed in node_modules.
|
|
125
|
+
*/
|
|
126
|
+
async function loadFromNpm(packageName, exportPath) {
|
|
127
|
+
try {
|
|
128
|
+
const resolved = exportPath
|
|
129
|
+
? await import(`${packageName}/${exportPath}`)
|
|
130
|
+
: await import(packageName);
|
|
131
|
+
if (!resolved.pipeline) {
|
|
132
|
+
throw new Error(`Package ${packageName} does not export a 'pipeline'`);
|
|
133
|
+
}
|
|
134
|
+
return resolved;
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
if (err instanceof Error && err.message.includes('package')) {
|
|
138
|
+
throw new Error(`Pipeline package not found: ${packageName}. Did you install it?`);
|
|
139
|
+
}
|
|
140
|
+
throw err;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// ── Registry Resolution ────────────────────────────────────────────────────────
|
|
144
|
+
/**
|
|
145
|
+
* Create a registry from a config object.
|
|
146
|
+
*/
|
|
147
|
+
export function createRegistryFromConfig(config) {
|
|
148
|
+
const registry = new PipelineRegistry();
|
|
149
|
+
for (const [name, source] of Object.entries(config)) {
|
|
150
|
+
if (typeof source === 'string') {
|
|
151
|
+
// Short form: 'my-pipeline': './path' or 'my-pipeline': '@org/pkg'
|
|
152
|
+
if (source.startsWith('./') || source.startsWith('/')) {
|
|
153
|
+
registry.registerPath(name, source);
|
|
154
|
+
}
|
|
155
|
+
else if (source.startsWith('git+') || source.startsWith('https://')) {
|
|
156
|
+
const url = source.startsWith('git+') ? source : `git+${source}`;
|
|
157
|
+
registry.registerGit(name, url);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// Assume npm package
|
|
161
|
+
registry.register(name, source);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
// Long form: 'my-pipeline': { package: '@org/pkg', version: '1.0.0' }
|
|
166
|
+
registry.register(name, source.package, { version: source.version });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
return registry;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=pipeline-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline-registry.js","sourceRoot":"","sources":["../src/pipeline-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline DSL — fluent builder for defining execution graphs.
|
|
3
|
+
*
|
|
4
|
+
* A Pipeline is a directed sequence of Steps. Each Step is a Skill, Agent,
|
|
5
|
+
* or another Pipeline. Built pipelines are immutable value objects executed
|
|
6
|
+
* by the Orchestrator.
|
|
7
|
+
*/
|
|
8
|
+
import type { ZodSchema } from 'zod';
|
|
9
|
+
import type { Skill } from './skill.js';
|
|
10
|
+
export type StepKind = 'skill' | 'map' | 'filter' | 'reduce' | 'branch' | 'parallel';
|
|
11
|
+
/** A single resolved step in the pipeline graph. */
|
|
12
|
+
export interface PipelineStep {
|
|
13
|
+
name: string;
|
|
14
|
+
kind: StepKind;
|
|
15
|
+
/** For 'skill' steps: the skill to run. */
|
|
16
|
+
skill?: Skill;
|
|
17
|
+
/** For 'map' | 'filter' | 'reduce': source field path (e.g. 'parse.services'). */
|
|
18
|
+
sourceField?: string;
|
|
19
|
+
/** For 'map': the sub-pipeline to run for each item. */
|
|
20
|
+
subPipeline?: BuiltPipeline;
|
|
21
|
+
/** For 'filter': predicate function. */
|
|
22
|
+
predicate?: (item: unknown, index: number) => boolean;
|
|
23
|
+
/** For 'reduce': reducer function. */
|
|
24
|
+
reducer?: (acc: unknown, item: unknown, index: number) => unknown;
|
|
25
|
+
/** For 'reduce': initial accumulator. */
|
|
26
|
+
initialValue?: unknown;
|
|
27
|
+
/** For 'parallel': array of sub-pipelines to run concurrently. */
|
|
28
|
+
branches?: BuiltPipeline[];
|
|
29
|
+
/** Concurrency limit for 'map' steps (default 1 = sequential). */
|
|
30
|
+
concurrency?: number;
|
|
31
|
+
/** How to handle item errors in 'map' steps. */
|
|
32
|
+
onItemError?: 'fail' | 'skip' | 'retry';
|
|
33
|
+
/** Max retries for items in 'map' with onItemError='retry'. */
|
|
34
|
+
maxItemRetries?: number;
|
|
35
|
+
/**
|
|
36
|
+
* Custom input mapper. Receives the current pipeline context and
|
|
37
|
+
* returns the input for this step. Default: pass entire previous output.
|
|
38
|
+
*/
|
|
39
|
+
inputMapper?: (ctx: StepInputContext) => unknown;
|
|
40
|
+
/** Skip this step if this returns true. */
|
|
41
|
+
skipIf?: (ctx: StepInputContext) => boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface StepInputContext {
|
|
44
|
+
/** The overall pipeline input. */
|
|
45
|
+
pipelineInput: unknown;
|
|
46
|
+
/** Outputs from all previously completed steps, keyed by step name. */
|
|
47
|
+
stepOutputs: Record<string, unknown>;
|
|
48
|
+
/** The output of the immediately preceding step. */
|
|
49
|
+
previousOutput: unknown;
|
|
50
|
+
}
|
|
51
|
+
export interface BuiltPipeline {
|
|
52
|
+
name: string;
|
|
53
|
+
steps: PipelineStep[];
|
|
54
|
+
inputSchema?: ZodSchema;
|
|
55
|
+
outputSchema?: ZodSchema;
|
|
56
|
+
/** Whether to save step checkpoints for resume capability. */
|
|
57
|
+
checkpointing?: boolean;
|
|
58
|
+
}
|
|
59
|
+
export declare class PipelineBuilder {
|
|
60
|
+
private readonly _name;
|
|
61
|
+
private _steps;
|
|
62
|
+
private _inputSchema?;
|
|
63
|
+
private _outputSchema?;
|
|
64
|
+
private _checkpointing;
|
|
65
|
+
constructor(name: string);
|
|
66
|
+
/** Declare the input schema for validation and documentation. */
|
|
67
|
+
input(schema: ZodSchema): this;
|
|
68
|
+
/** Declare the output schema for validation and documentation. */
|
|
69
|
+
output(schema: ZodSchema): this;
|
|
70
|
+
/** Enable checkpoint saving for resume capability. */
|
|
71
|
+
withCheckpointing(): this;
|
|
72
|
+
/**
|
|
73
|
+
* Add a skill step.
|
|
74
|
+
*
|
|
75
|
+
* @param name Step name (must be unique within the pipeline).
|
|
76
|
+
* @param skill The skill to execute.
|
|
77
|
+
* @param options Optional input mapper and skip condition.
|
|
78
|
+
*/
|
|
79
|
+
step(name: string, skill: Skill, options?: {
|
|
80
|
+
input?: (ctx: StepInputContext) => unknown;
|
|
81
|
+
skipIf?: (ctx: StepInputContext) => boolean;
|
|
82
|
+
}): this;
|
|
83
|
+
/**
|
|
84
|
+
* Map over an array field, running a sub-pipeline for each item.
|
|
85
|
+
*
|
|
86
|
+
* @param sourceField Dot-path to the array in step outputs (e.g. 'parse.services').
|
|
87
|
+
* Use '*' to use the entire previous step output as array.
|
|
88
|
+
* @param subPipeline Sub-pipeline (built or builder) to run per item.
|
|
89
|
+
* @param options Concurrency and error handling options.
|
|
90
|
+
*/
|
|
91
|
+
mapOver(sourceField: string, subPipeline: BuiltPipeline | PipelineBuilder, options?: {
|
|
92
|
+
concurrency?: number;
|
|
93
|
+
onItemError?: 'fail' | 'skip' | 'retry';
|
|
94
|
+
maxItemRetries?: number;
|
|
95
|
+
name?: string;
|
|
96
|
+
}): this;
|
|
97
|
+
/**
|
|
98
|
+
* Filter an array field, keeping only items where predicate returns true.
|
|
99
|
+
*/
|
|
100
|
+
filter(sourceField: string, predicate: (item: unknown, index: number) => boolean, name?: string): this;
|
|
101
|
+
/**
|
|
102
|
+
* Reduce an array field to a single value.
|
|
103
|
+
*/
|
|
104
|
+
reduce(sourceField: string, reducer: (acc: unknown, item: unknown, index: number) => unknown, initialValue: unknown, name?: string): this;
|
|
105
|
+
/**
|
|
106
|
+
* Run multiple sub-pipelines in parallel, collecting all results.
|
|
107
|
+
*/
|
|
108
|
+
parallel(branches: Array<BuiltPipeline | PipelineBuilder>, name?: string): this;
|
|
109
|
+
/**
|
|
110
|
+
* Conditionally branch: run one of several sub-pipelines based on a condition.
|
|
111
|
+
*/
|
|
112
|
+
branch(name: string, condition: (ctx: StepInputContext) => string, // returns branch name
|
|
113
|
+
branches: Record<string, BuiltPipeline | PipelineBuilder>): this;
|
|
114
|
+
/** Finalize and return the immutable pipeline definition. */
|
|
115
|
+
build(): BuiltPipeline;
|
|
116
|
+
}
|
|
117
|
+
export declare const Pipeline: {
|
|
118
|
+
/** Create a new pipeline builder. */
|
|
119
|
+
create: (name: string) => PipelineBuilder;
|
|
120
|
+
};
|
|
121
|
+
export declare function resolvePath(stepOutputs: Record<string, unknown>, path: string): unknown;
|
|
122
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/pipeline.js
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pipeline DSL — fluent builder for defining execution graphs.
|
|
3
|
+
*
|
|
4
|
+
* A Pipeline is a directed sequence of Steps. Each Step is a Skill, Agent,
|
|
5
|
+
* or another Pipeline. Built pipelines are immutable value objects executed
|
|
6
|
+
* by the Orchestrator.
|
|
7
|
+
*/
|
|
8
|
+
// ── Pipeline Builder ──────────────────────────────────────────────────────────
|
|
9
|
+
export class PipelineBuilder {
|
|
10
|
+
_name;
|
|
11
|
+
_steps = [];
|
|
12
|
+
_inputSchema;
|
|
13
|
+
_outputSchema;
|
|
14
|
+
_checkpointing = false;
|
|
15
|
+
constructor(name) {
|
|
16
|
+
this._name = name;
|
|
17
|
+
}
|
|
18
|
+
/** Declare the input schema for validation and documentation. */
|
|
19
|
+
input(schema) {
|
|
20
|
+
this._inputSchema = schema;
|
|
21
|
+
return this;
|
|
22
|
+
}
|
|
23
|
+
/** Declare the output schema for validation and documentation. */
|
|
24
|
+
output(schema) {
|
|
25
|
+
this._outputSchema = schema;
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
/** Enable checkpoint saving for resume capability. */
|
|
29
|
+
withCheckpointing() {
|
|
30
|
+
this._checkpointing = true;
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Add a skill step.
|
|
35
|
+
*
|
|
36
|
+
* @param name Step name (must be unique within the pipeline).
|
|
37
|
+
* @param skill The skill to execute.
|
|
38
|
+
* @param options Optional input mapper and skip condition.
|
|
39
|
+
*/
|
|
40
|
+
step(name, skill, options) {
|
|
41
|
+
this._steps.push({
|
|
42
|
+
name,
|
|
43
|
+
kind: 'skill',
|
|
44
|
+
skill,
|
|
45
|
+
inputMapper: options?.input,
|
|
46
|
+
skipIf: options?.skipIf,
|
|
47
|
+
});
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Map over an array field, running a sub-pipeline for each item.
|
|
52
|
+
*
|
|
53
|
+
* @param sourceField Dot-path to the array in step outputs (e.g. 'parse.services').
|
|
54
|
+
* Use '*' to use the entire previous step output as array.
|
|
55
|
+
* @param subPipeline Sub-pipeline (built or builder) to run per item.
|
|
56
|
+
* @param options Concurrency and error handling options.
|
|
57
|
+
*/
|
|
58
|
+
mapOver(sourceField, subPipeline, options) {
|
|
59
|
+
const built = subPipeline instanceof PipelineBuilder ? subPipeline.build() : subPipeline;
|
|
60
|
+
this._steps.push({
|
|
61
|
+
name: options?.name ?? `map:${sourceField}`,
|
|
62
|
+
kind: 'map',
|
|
63
|
+
sourceField,
|
|
64
|
+
subPipeline: built,
|
|
65
|
+
concurrency: options?.concurrency ?? 1,
|
|
66
|
+
onItemError: options?.onItemError ?? 'fail',
|
|
67
|
+
maxItemRetries: options?.maxItemRetries ?? 0,
|
|
68
|
+
});
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Filter an array field, keeping only items where predicate returns true.
|
|
73
|
+
*/
|
|
74
|
+
filter(sourceField, predicate, name) {
|
|
75
|
+
this._steps.push({
|
|
76
|
+
name: name ?? `filter:${sourceField}`,
|
|
77
|
+
kind: 'filter',
|
|
78
|
+
sourceField,
|
|
79
|
+
predicate,
|
|
80
|
+
});
|
|
81
|
+
return this;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Reduce an array field to a single value.
|
|
85
|
+
*/
|
|
86
|
+
reduce(sourceField, reducer, initialValue, name) {
|
|
87
|
+
this._steps.push({
|
|
88
|
+
name: name ?? `reduce:${sourceField}`,
|
|
89
|
+
kind: 'reduce',
|
|
90
|
+
sourceField,
|
|
91
|
+
reducer,
|
|
92
|
+
initialValue,
|
|
93
|
+
});
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Run multiple sub-pipelines in parallel, collecting all results.
|
|
98
|
+
*/
|
|
99
|
+
parallel(branches, name) {
|
|
100
|
+
this._steps.push({
|
|
101
|
+
name: name ?? 'parallel',
|
|
102
|
+
kind: 'parallel',
|
|
103
|
+
branches: branches.map((b) => b instanceof PipelineBuilder ? b.build() : b),
|
|
104
|
+
});
|
|
105
|
+
return this;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Conditionally branch: run one of several sub-pipelines based on a condition.
|
|
109
|
+
*/
|
|
110
|
+
branch(name, condition, // returns branch name
|
|
111
|
+
branches) {
|
|
112
|
+
// Implemented as a 'branch' step; orchestrator resolves at runtime
|
|
113
|
+
this._steps.push({
|
|
114
|
+
name,
|
|
115
|
+
kind: 'branch',
|
|
116
|
+
// Store condition and branches in inputMapper/predicate slots
|
|
117
|
+
// (Orchestrator handles branch resolution specially)
|
|
118
|
+
inputMapper: condition,
|
|
119
|
+
branches: Object.values(branches).map((b) => b instanceof PipelineBuilder ? b.build() : b),
|
|
120
|
+
});
|
|
121
|
+
return this;
|
|
122
|
+
}
|
|
123
|
+
/** Finalize and return the immutable pipeline definition. */
|
|
124
|
+
build() {
|
|
125
|
+
return {
|
|
126
|
+
name: this._name,
|
|
127
|
+
steps: [...this._steps],
|
|
128
|
+
inputSchema: this._inputSchema,
|
|
129
|
+
outputSchema: this._outputSchema,
|
|
130
|
+
checkpointing: this._checkpointing,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// ── Public Factory ────────────────────────────────────────────────────────────
|
|
135
|
+
export const Pipeline = {
|
|
136
|
+
/** Create a new pipeline builder. */
|
|
137
|
+
create: (name) => new PipelineBuilder(name),
|
|
138
|
+
};
|
|
139
|
+
// ── Utility: resolve a dot-path from step outputs ─────────────────────────────
|
|
140
|
+
export function resolvePath(stepOutputs, path) {
|
|
141
|
+
if (path === '*')
|
|
142
|
+
return stepOutputs;
|
|
143
|
+
const parts = path.split('.');
|
|
144
|
+
let current = stepOutputs;
|
|
145
|
+
for (const part of parts) {
|
|
146
|
+
if (current === null || current === undefined)
|
|
147
|
+
return undefined;
|
|
148
|
+
current = current[part];
|
|
149
|
+
}
|
|
150
|
+
return current;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../src/pipeline.ts"],"names":[],"mappings":"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"}
|