@tagma/sdk 0.6.4 → 0.6.6
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 +74 -6
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +194 -21
- package/dist/engine.js.map +1 -1
- package/dist/pipeline-runner.d.ts.map +1 -1
- package/dist/pipeline-runner.js +3 -0
- package/dist/pipeline-runner.js.map +1 -1
- package/dist/ports.d.ts +118 -0
- package/dist/ports.d.ts.map +1 -0
- package/dist/ports.js +365 -0
- package/dist/ports.js.map +1 -0
- package/dist/prompt-doc.d.ts +35 -1
- package/dist/prompt-doc.d.ts.map +1 -1
- package/dist/prompt-doc.js +110 -0
- package/dist/prompt-doc.js.map +1 -1
- package/dist/runner.d.ts +17 -0
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +171 -8
- package/dist/runner.js.map +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +8 -0
- package/dist/schema.js.map +1 -1
- package/dist/sdk.d.ts +3 -1
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +5 -1
- package/dist/sdk.js.map +1 -1
- package/dist/validate-raw.d.ts.map +1 -1
- package/dist/validate-raw.js +141 -0
- package/dist/validate-raw.js.map +1 -1
- package/package.json +2 -7
- package/src/dag.test.ts +56 -0
- package/src/engine-ports.test.ts +404 -0
- package/src/engine.ts +231 -24
- package/src/pipeline-runner.ts +3 -0
- package/src/ports.test.ts +301 -0
- package/src/ports.ts +442 -0
- package/src/prompt-doc.test.ts +174 -0
- package/src/prompt-doc.ts +121 -1
- package/src/runner.test.ts +142 -0
- package/src/runner.ts +198 -8
- package/src/schema-ports.test.ts +236 -0
- package/src/schema.ts +8 -0
- package/src/sdk.ts +14 -0
- package/src/validate-raw-ports.test.ts +198 -0
- package/src/validate-raw.ts +155 -1
- package/dist/plugin-registry.test.d.ts +0 -2
- package/dist/plugin-registry.test.d.ts.map +0 -1
- package/dist/plugin-registry.test.js +0 -188
- package/dist/plugin-registry.test.js.map +0 -1
- package/dist/schema.test.d.ts +0 -2
- package/dist/schema.test.d.ts.map +0 -1
- package/dist/schema.test.js +0 -94
- package/dist/schema.test.js.map +0 -1
- package/dist/task-ref.test.d.ts +0 -2
- package/dist/task-ref.test.d.ts.map +0 -1
- package/dist/task-ref.test.js +0 -364
- package/dist/task-ref.test.js.map +0 -1
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test';
|
|
2
|
-
import { PluginRegistry, defaultRegistry } from './registry';
|
|
3
|
-
import { bootstrapBuiltins } from './bootstrap';
|
|
4
|
-
import { runPipeline } from './engine';
|
|
5
|
-
import { mkdtempSync, rmSync } from 'node:fs';
|
|
6
|
-
import { tmpdir } from 'node:os';
|
|
7
|
-
import { join } from 'node:path';
|
|
8
|
-
function makeDriver(name, marker) {
|
|
9
|
-
return {
|
|
10
|
-
name,
|
|
11
|
-
capabilities: { sessionResume: false, systemPrompt: false, outputFormat: false },
|
|
12
|
-
async buildCommand() {
|
|
13
|
-
marker.push(`buildCommand:${name}`);
|
|
14
|
-
return { args: ['echo', 'noop'] };
|
|
15
|
-
},
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
function makeTrigger(name, marker) {
|
|
19
|
-
return {
|
|
20
|
-
name,
|
|
21
|
-
async watch() {
|
|
22
|
-
marker.push(`watch:${name}`);
|
|
23
|
-
},
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
describe('PluginRegistry — instance isolation', () => {
|
|
27
|
-
test('two registries do not share drivers registered under the same type', () => {
|
|
28
|
-
const regA = new PluginRegistry();
|
|
29
|
-
const regB = new PluginRegistry();
|
|
30
|
-
const markerA = [];
|
|
31
|
-
const markerB = [];
|
|
32
|
-
regA.registerPlugin('drivers', 'mock', makeDriver('mockA', markerA));
|
|
33
|
-
regB.registerPlugin('drivers', 'mock', makeDriver('mockB', markerB));
|
|
34
|
-
expect(regA.getHandler('drivers', 'mock').name).toBe('mockA');
|
|
35
|
-
expect(regB.getHandler('drivers', 'mock').name).toBe('mockB');
|
|
36
|
-
expect(regA.hasHandler('drivers', 'mock')).toBe(true);
|
|
37
|
-
expect(regB.hasHandler('drivers', 'mock')).toBe(true);
|
|
38
|
-
expect(regA.hasHandler('triggers', 'mock')).toBe(false);
|
|
39
|
-
});
|
|
40
|
-
test('unregistering in one registry does not affect the other', () => {
|
|
41
|
-
const regA = new PluginRegistry();
|
|
42
|
-
const regB = new PluginRegistry();
|
|
43
|
-
regA.registerPlugin('drivers', 'mock', makeDriver('mockA', []));
|
|
44
|
-
regB.registerPlugin('drivers', 'mock', makeDriver('mockB', []));
|
|
45
|
-
expect(regA.unregisterPlugin('drivers', 'mock')).toBe(true);
|
|
46
|
-
expect(regA.hasHandler('drivers', 'mock')).toBe(false);
|
|
47
|
-
expect(regB.hasHandler('drivers', 'mock')).toBe(true);
|
|
48
|
-
});
|
|
49
|
-
test('listRegistered is scoped per instance', () => {
|
|
50
|
-
const regA = new PluginRegistry();
|
|
51
|
-
const regB = new PluginRegistry();
|
|
52
|
-
regA.registerPlugin('triggers', 'a-only', makeTrigger('a-only', []));
|
|
53
|
-
regB.registerPlugin('triggers', 'b-only', makeTrigger('b-only', []));
|
|
54
|
-
expect(regA.listRegistered('triggers')).toEqual(['a-only']);
|
|
55
|
-
expect(regB.listRegistered('triggers')).toEqual(['b-only']);
|
|
56
|
-
});
|
|
57
|
-
test('registering the same instance twice returns unchanged', () => {
|
|
58
|
-
const reg = new PluginRegistry();
|
|
59
|
-
const driver = makeDriver('same', []);
|
|
60
|
-
expect(reg.registerPlugin('drivers', 'mock', driver)).toBe('registered');
|
|
61
|
-
expect(reg.registerPlugin('drivers', 'mock', driver)).toBe('unchanged');
|
|
62
|
-
});
|
|
63
|
-
test('replacing with a different handler returns replaced', () => {
|
|
64
|
-
const reg = new PluginRegistry();
|
|
65
|
-
expect(reg.registerPlugin('drivers', 'mock', makeDriver('one', []))).toBe('registered');
|
|
66
|
-
expect(reg.registerPlugin('drivers', 'mock', makeDriver('two', []))).toBe('replaced');
|
|
67
|
-
expect(reg.getHandler('drivers', 'mock').name).toBe('two');
|
|
68
|
-
});
|
|
69
|
-
test('bootstrapBuiltins(target) populates a specific instance without touching the default', () => {
|
|
70
|
-
const fresh = new PluginRegistry();
|
|
71
|
-
expect(fresh.hasHandler('drivers', 'opencode')).toBe(false);
|
|
72
|
-
bootstrapBuiltins(fresh);
|
|
73
|
-
expect(fresh.hasHandler('drivers', 'opencode')).toBe(true);
|
|
74
|
-
expect(fresh.hasHandler('triggers', 'file')).toBe(true);
|
|
75
|
-
expect(fresh.hasHandler('triggers', 'manual')).toBe(true);
|
|
76
|
-
expect(fresh.hasHandler('completions', 'exit_code')).toBe(true);
|
|
77
|
-
expect(fresh.hasHandler('middlewares', 'static_context')).toBe(true);
|
|
78
|
-
// Default registry's state is independent of `fresh` — if the default
|
|
79
|
-
// happens to have opencode (because another test bootstrapped it), that
|
|
80
|
-
// is fine; the guarantee is that `fresh.unregister` does not leak.
|
|
81
|
-
fresh.unregisterPlugin('drivers', 'opencode');
|
|
82
|
-
expect(fresh.hasHandler('drivers', 'opencode')).toBe(false);
|
|
83
|
-
});
|
|
84
|
-
});
|
|
85
|
-
describe('PluginRegistry — validation', () => {
|
|
86
|
-
test('rejects unknown category', () => {
|
|
87
|
-
const reg = new PluginRegistry();
|
|
88
|
-
expect(() => reg.registerPlugin('nope', 'x', makeDriver('x', []))).toThrow(/Unknown plugin category/);
|
|
89
|
-
});
|
|
90
|
-
test('rejects driver missing buildCommand', () => {
|
|
91
|
-
const reg = new PluginRegistry();
|
|
92
|
-
expect(() => reg.registerPlugin('drivers', 'broken',
|
|
93
|
-
// deliberately bad: no buildCommand
|
|
94
|
-
{ name: 'broken', capabilities: { sessionResume: false, systemPrompt: false, outputFormat: false } })).toThrow(/must export buildCommand/);
|
|
95
|
-
});
|
|
96
|
-
test('rejects handler with missing name', () => {
|
|
97
|
-
const reg = new PluginRegistry();
|
|
98
|
-
expect(() => reg.registerPlugin('drivers', 'x',
|
|
99
|
-
// deliberately bad: no name
|
|
100
|
-
{ capabilities: { sessionResume: false, systemPrompt: false, outputFormat: false }, buildCommand: async () => ({ args: [] }) })).toThrow(/non-empty "name"/);
|
|
101
|
-
});
|
|
102
|
-
});
|
|
103
|
-
describe('runPipeline — options.registry isolation', () => {
|
|
104
|
-
test('concurrent runs with different registries see their own drivers', async () => {
|
|
105
|
-
const regA = new PluginRegistry();
|
|
106
|
-
const regB = new PluginRegistry();
|
|
107
|
-
const seenA = [];
|
|
108
|
-
const seenB = [];
|
|
109
|
-
bootstrapBuiltins(regA);
|
|
110
|
-
bootstrapBuiltins(regB);
|
|
111
|
-
regA.registerPlugin('drivers', 'mock', makeDriver('mockA', seenA));
|
|
112
|
-
regB.registerPlugin('drivers', 'mock', makeDriver('mockB', seenB));
|
|
113
|
-
// Command-only pipeline exercises the preflight path (which uses the
|
|
114
|
-
// registry) plus the run-loop path without requiring a real driver
|
|
115
|
-
// invocation. We verify isolation by asserting that preflight with a
|
|
116
|
-
// registry missing `mock` rejects, while the matching registry accepts.
|
|
117
|
-
const config = {
|
|
118
|
-
name: 'isolation-test',
|
|
119
|
-
tracks: [
|
|
120
|
-
{
|
|
121
|
-
id: 't',
|
|
122
|
-
name: 'T',
|
|
123
|
-
tasks: [{ id: 'only', name: 'only', command: 'echo hi' }],
|
|
124
|
-
},
|
|
125
|
-
],
|
|
126
|
-
};
|
|
127
|
-
const tmpA = mkdtempSync(join(tmpdir(), 'tagma-regA-'));
|
|
128
|
-
const tmpB = mkdtempSync(join(tmpdir(), 'tagma-regB-'));
|
|
129
|
-
try {
|
|
130
|
-
const [resA, resB] = await Promise.all([
|
|
131
|
-
runPipeline(config, tmpA, { registry: regA, skipPluginLoading: true }),
|
|
132
|
-
runPipeline(config, tmpB, { registry: regB, skipPluginLoading: true }),
|
|
133
|
-
]);
|
|
134
|
-
expect(resA.success).toBe(true);
|
|
135
|
-
expect(resB.success).toBe(true);
|
|
136
|
-
expect(resA.runId).not.toBe(resB.runId);
|
|
137
|
-
}
|
|
138
|
-
finally {
|
|
139
|
-
rmSync(tmpA, { recursive: true, force: true });
|
|
140
|
-
rmSync(tmpB, { recursive: true, force: true });
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
test('preflight fails when referenced driver is missing from the passed registry', async () => {
|
|
144
|
-
const regNoOpencode = new PluginRegistry();
|
|
145
|
-
// Deliberately do NOT bootstrap builtins — opencode is not registered.
|
|
146
|
-
const config = {
|
|
147
|
-
name: 'preflight-miss',
|
|
148
|
-
tracks: [
|
|
149
|
-
{
|
|
150
|
-
id: 't',
|
|
151
|
-
name: 'T',
|
|
152
|
-
tasks: [{ id: 'x', name: 'x', prompt: 'hello' }],
|
|
153
|
-
},
|
|
154
|
-
],
|
|
155
|
-
};
|
|
156
|
-
const tmp = mkdtempSync(join(tmpdir(), 'tagma-miss-'));
|
|
157
|
-
try {
|
|
158
|
-
await expect(runPipeline(config, tmp, { registry: regNoOpencode, skipPluginLoading: true })).rejects.toThrow(/driver "opencode" not registered/);
|
|
159
|
-
}
|
|
160
|
-
finally {
|
|
161
|
-
rmSync(tmp, { recursive: true, force: true });
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
test('omitting options.registry falls back to defaultRegistry', async () => {
|
|
165
|
-
// bootstrapBuiltins into default happens in most host callers; do it
|
|
166
|
-
// explicitly here so the test is independent of module-load order.
|
|
167
|
-
bootstrapBuiltins(defaultRegistry);
|
|
168
|
-
const config = {
|
|
169
|
-
name: 'default-fallback',
|
|
170
|
-
tracks: [
|
|
171
|
-
{
|
|
172
|
-
id: 't',
|
|
173
|
-
name: 'T',
|
|
174
|
-
tasks: [{ id: 'only', name: 'only', command: 'echo hi' }],
|
|
175
|
-
},
|
|
176
|
-
],
|
|
177
|
-
};
|
|
178
|
-
const tmp = mkdtempSync(join(tmpdir(), 'tagma-default-'));
|
|
179
|
-
try {
|
|
180
|
-
const res = await runPipeline(config, tmp, { skipPluginLoading: true });
|
|
181
|
-
expect(res.success).toBe(true);
|
|
182
|
-
}
|
|
183
|
-
finally {
|
|
184
|
-
rmSync(tmp, { recursive: true, force: true });
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
//# sourceMappingURL=plugin-registry.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-registry.test.js","sourceRoot":"","sources":["../src/plugin-registry.test.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.test.d.ts","sourceRoot":"","sources":["../src/schema.test.ts"],"names":[],"mappings":""}
|
package/dist/schema.test.js
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test';
|
|
2
|
-
import yaml from 'js-yaml';
|
|
3
|
-
import { deresolvePipeline, serializePipeline } from './schema';
|
|
4
|
-
function parsePipelineYaml(content) {
|
|
5
|
-
const doc = yaml.load(content);
|
|
6
|
-
return doc.pipeline;
|
|
7
|
-
}
|
|
8
|
-
describe('completion default serialization', () => {
|
|
9
|
-
test('serializePipeline omits default exit_code completions from raw configs', () => {
|
|
10
|
-
const raw = {
|
|
11
|
-
name: 'Serialize Defaults',
|
|
12
|
-
tracks: [
|
|
13
|
-
{
|
|
14
|
-
id: 'track_a',
|
|
15
|
-
name: 'Track A',
|
|
16
|
-
tasks: [
|
|
17
|
-
{ id: 'task_1', prompt: 'hello', completion: { type: 'exit_code' } },
|
|
18
|
-
{ id: 'task_2', prompt: 'world', completion: { type: 'exit_code', expect: 0 } },
|
|
19
|
-
{ id: 'task_3', prompt: 'keep me', completion: { type: 'exit_code', expect: 2 } },
|
|
20
|
-
],
|
|
21
|
-
},
|
|
22
|
-
],
|
|
23
|
-
};
|
|
24
|
-
const parsed = parsePipelineYaml(serializePipeline(raw));
|
|
25
|
-
expect(parsed.tracks[0].tasks[0].completion).toBeUndefined();
|
|
26
|
-
expect(parsed.tracks[0].tasks[1].completion).toBeUndefined();
|
|
27
|
-
expect(parsed.tracks[0].tasks[2].completion).toEqual({ type: 'exit_code', expect: 2 });
|
|
28
|
-
});
|
|
29
|
-
test('serializePipeline preserves non-default completion plugins', () => {
|
|
30
|
-
const raw = {
|
|
31
|
-
name: 'Serialize Explicit',
|
|
32
|
-
tracks: [
|
|
33
|
-
{
|
|
34
|
-
id: 'track_a',
|
|
35
|
-
name: 'Track A',
|
|
36
|
-
tasks: [
|
|
37
|
-
{
|
|
38
|
-
id: 'task_1',
|
|
39
|
-
prompt: 'check file',
|
|
40
|
-
completion: { type: 'file_exists', path: './out.txt' },
|
|
41
|
-
},
|
|
42
|
-
],
|
|
43
|
-
},
|
|
44
|
-
],
|
|
45
|
-
};
|
|
46
|
-
const parsed = parsePipelineYaml(serializePipeline(raw));
|
|
47
|
-
expect(parsed.tracks[0].tasks[0].completion).toEqual({
|
|
48
|
-
type: 'file_exists',
|
|
49
|
-
path: './out.txt',
|
|
50
|
-
});
|
|
51
|
-
});
|
|
52
|
-
test('deresolvePipeline also omits the default exit_code completion', () => {
|
|
53
|
-
const resolved = {
|
|
54
|
-
name: 'Deresolve Defaults',
|
|
55
|
-
tracks: [
|
|
56
|
-
{
|
|
57
|
-
id: 'track_a',
|
|
58
|
-
name: 'Track A',
|
|
59
|
-
driver: 'opencode',
|
|
60
|
-
permissions: { read: true, write: false, execute: false },
|
|
61
|
-
on_failure: 'skip_downstream',
|
|
62
|
-
cwd: 'D:/workspace',
|
|
63
|
-
tasks: [
|
|
64
|
-
{
|
|
65
|
-
id: 'task_1',
|
|
66
|
-
name: 'Task 1',
|
|
67
|
-
prompt: 'hello',
|
|
68
|
-
driver: 'opencode',
|
|
69
|
-
permissions: { read: true, write: false, execute: false },
|
|
70
|
-
cwd: 'D:/workspace',
|
|
71
|
-
completion: { type: 'exit_code', expect: 0 },
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
id: 'task_2',
|
|
75
|
-
name: 'Task 2',
|
|
76
|
-
prompt: 'custom',
|
|
77
|
-
driver: 'opencode',
|
|
78
|
-
permissions: { read: true, write: false, execute: false },
|
|
79
|
-
cwd: 'D:/workspace',
|
|
80
|
-
completion: { type: 'output_check', check: 'test -f ./done.txt' },
|
|
81
|
-
},
|
|
82
|
-
],
|
|
83
|
-
},
|
|
84
|
-
],
|
|
85
|
-
};
|
|
86
|
-
const raw = deresolvePipeline(resolved, 'D:/workspace');
|
|
87
|
-
expect(raw.tracks[0].tasks[0].completion).toBeUndefined();
|
|
88
|
-
expect(raw.tracks[0].tasks[1].completion).toEqual({
|
|
89
|
-
type: 'output_check',
|
|
90
|
-
check: 'test -f ./done.txt',
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
//# sourceMappingURL=schema.test.js.map
|
package/dist/schema.test.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../src/schema.test.ts"],"names":[],"mappings":"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"}
|
package/dist/task-ref.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-ref.test.d.ts","sourceRoot":"","sources":["../src/task-ref.test.ts"],"names":[],"mappings":""}
|