@tagma/sdk 0.7.3 → 0.7.5
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 +85 -57
- package/dist/approval.d.ts +2 -12
- package/dist/approval.d.ts.map +1 -1
- package/dist/approval.js +1 -90
- package/dist/approval.js.map +1 -1
- package/dist/bootstrap.d.ts +1 -1
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/completions/file-exists.js +1 -1
- package/dist/completions/file-exists.js.map +1 -1
- package/dist/completions/output-check.d.ts.map +1 -1
- package/dist/completions/output-check.js +17 -4
- package/dist/completions/output-check.js.map +1 -1
- package/dist/config.d.ts +4 -4
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/dataflow.d.ts +3 -0
- package/dist/dataflow.d.ts.map +1 -0
- package/dist/dataflow.js +2 -0
- package/dist/dataflow.js.map +1 -0
- package/dist/drivers/opencode.d.ts.map +1 -1
- package/dist/drivers/opencode.js +23 -71
- package/dist/drivers/opencode.js.map +1 -1
- package/dist/engine.d.ts +5 -56
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +7 -297
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +4 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -4
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +2 -60
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +1 -153
- package/dist/logger.js.map +1 -1
- package/dist/middlewares/static-context.d.ts.map +1 -1
- package/dist/middlewares/static-context.js +1 -2
- package/dist/middlewares/static-context.js.map +1 -1
- package/dist/pipeline-runner.d.ts.map +1 -1
- package/dist/pipeline-runner.js +2 -2
- package/dist/pipeline-runner.js.map +1 -1
- package/dist/plugins.d.ts +2 -2
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +1 -1
- package/dist/plugins.js.map +1 -1
- package/dist/runner.d.ts +1 -35
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +1 -610
- package/dist/runner.js.map +1 -1
- package/dist/runtime/adapters/stdin-approval.d.ts +2 -0
- package/dist/runtime/adapters/stdin-approval.d.ts.map +1 -0
- package/dist/runtime/adapters/stdin-approval.js +2 -0
- package/dist/runtime/adapters/stdin-approval.js.map +1 -0
- package/dist/runtime/adapters/websocket-approval.d.ts +2 -0
- package/dist/runtime/adapters/websocket-approval.d.ts.map +1 -0
- package/dist/runtime/adapters/websocket-approval.js +2 -0
- package/dist/runtime/adapters/websocket-approval.js.map +1 -0
- package/dist/runtime/bun-process-runner.d.ts +2 -0
- package/dist/runtime/bun-process-runner.d.ts.map +1 -0
- package/dist/runtime/bun-process-runner.js +2 -0
- package/dist/runtime/bun-process-runner.js.map +1 -0
- package/dist/runtime.d.ts +2 -8
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +1 -7
- package/dist/runtime.js.map +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +3 -4
- package/dist/schema.js.map +1 -1
- package/dist/tagma.d.ts +3 -4
- package/dist/tagma.d.ts.map +1 -1
- package/dist/tagma.js +2 -3
- package/dist/tagma.js.map +1 -1
- package/dist/triggers/file.d.ts.map +1 -1
- package/dist/triggers/file.js +74 -108
- package/dist/triggers/file.js.map +1 -1
- package/dist/triggers/manual.d.ts.map +1 -1
- package/dist/triggers/manual.js +1 -2
- package/dist/triggers/manual.js.map +1 -1
- package/dist/types.d.ts +1 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -12
- package/dist/types.js.map +1 -1
- package/dist/utils-api.d.ts +1 -1
- package/dist/utils-api.d.ts.map +1 -1
- package/dist/utils-api.js +1 -1
- package/dist/utils-api.js.map +1 -1
- package/dist/validate-raw.d.ts.map +1 -1
- package/dist/validate-raw.js +5 -12
- package/dist/validate-raw.js.map +1 -1
- package/package.json +20 -22
- package/dist/adapters/stdin-approval.d.ts +0 -6
- package/dist/adapters/stdin-approval.d.ts.map +0 -1
- package/dist/adapters/stdin-approval.js +0 -90
- package/dist/adapters/stdin-approval.js.map +0 -1
- package/dist/adapters/websocket-approval.d.ts +0 -28
- package/dist/adapters/websocket-approval.d.ts.map +0 -1
- package/dist/adapters/websocket-approval.js +0 -147
- package/dist/adapters/websocket-approval.js.map +0 -1
- package/dist/core/dataflow.d.ts +0 -23
- package/dist/core/dataflow.d.ts.map +0 -1
- package/dist/core/dataflow.js +0 -99
- package/dist/core/dataflow.js.map +0 -1
- package/dist/core/log-prune.d.ts +0 -16
- package/dist/core/log-prune.d.ts.map +0 -1
- package/dist/core/log-prune.js +0 -34
- package/dist/core/log-prune.js.map +0 -1
- package/dist/core/preflight.d.ts +0 -13
- package/dist/core/preflight.d.ts.map +0 -1
- package/dist/core/preflight.js +0 -61
- package/dist/core/preflight.js.map +0 -1
- package/dist/core/run-context.d.ts +0 -55
- package/dist/core/run-context.d.ts.map +0 -1
- package/dist/core/run-context.js +0 -158
- package/dist/core/run-context.js.map +0 -1
- package/dist/core/run-state.d.ts +0 -25
- package/dist/core/run-state.d.ts.map +0 -1
- package/dist/core/run-state.js +0 -93
- package/dist/core/run-state.js.map +0 -1
- package/dist/core/scheduler.d.ts +0 -13
- package/dist/core/scheduler.d.ts.map +0 -1
- package/dist/core/scheduler.js +0 -35
- package/dist/core/scheduler.js.map +0 -1
- package/dist/core/task-executor.d.ts +0 -13
- package/dist/core/task-executor.d.ts.map +0 -1
- package/dist/core/task-executor.js +0 -601
- package/dist/core/task-executor.js.map +0 -1
- package/dist/core/trigger-errors.d.ts +0 -9
- package/dist/core/trigger-errors.d.ts.map +0 -1
- package/dist/core/trigger-errors.js +0 -15
- package/dist/core/trigger-errors.js.map +0 -1
- package/dist/dag.d.ts +0 -45
- package/dist/dag.d.ts.map +0 -1
- package/dist/dag.js +0 -177
- package/dist/dag.js.map +0 -1
- package/dist/hooks.d.ts +0 -73
- package/dist/hooks.d.ts.map +0 -1
- package/dist/hooks.js +0 -106
- package/dist/hooks.js.map +0 -1
- package/dist/pipeline-definition.d.ts +0 -3
- package/dist/pipeline-definition.d.ts.map +0 -1
- package/dist/pipeline-definition.js +0 -4
- package/dist/pipeline-definition.js.map +0 -1
- package/dist/ports.d.ts +0 -196
- package/dist/ports.d.ts.map +0 -1
- package/dist/ports.js +0 -688
- package/dist/ports.js.map +0 -1
- package/dist/prompt-doc.d.ts +0 -70
- package/dist/prompt-doc.d.ts.map +0 -1
- package/dist/prompt-doc.js +0 -154
- package/dist/prompt-doc.js.map +0 -1
- package/dist/registry.d.ts +0 -67
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -293
- package/dist/registry.js.map +0 -1
- package/dist/task-ref.d.ts +0 -55
- package/dist/task-ref.d.ts.map +0 -1
- package/dist/task-ref.js +0 -103
- package/dist/task-ref.js.map +0 -1
- package/dist/utils.d.ts +0 -13
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -177
- package/dist/utils.js.map +0 -1
- package/src/adapters/stdin-approval.ts +0 -106
- package/src/adapters/websocket-approval.ts +0 -224
- package/src/approval.ts +0 -131
- package/src/bootstrap.ts +0 -55
- package/src/completions/exit-code.ts +0 -34
- package/src/completions/file-exists.ts +0 -66
- package/src/completions/output-check.test.ts +0 -50
- package/src/completions/output-check.ts +0 -92
- package/src/config-ops.test.ts +0 -70
- package/src/config-ops.ts +0 -328
- package/src/config.ts +0 -26
- package/src/core/dataflow.test.ts +0 -166
- package/src/core/dataflow.ts +0 -161
- package/src/core/log-prune.test.ts +0 -58
- package/src/core/log-prune.ts +0 -43
- package/src/core/preflight.test.ts +0 -49
- package/src/core/preflight.ts +0 -89
- package/src/core/run-context.test.ts +0 -256
- package/src/core/run-context.ts +0 -211
- package/src/core/run-state.test.ts +0 -98
- package/src/core/run-state.ts +0 -122
- package/src/core/scheduler.test.ts +0 -83
- package/src/core/scheduler.ts +0 -42
- package/src/core/task-executor.ts +0 -743
- package/src/core/trigger-errors.ts +0 -15
- package/src/dag.test.ts +0 -56
- package/src/dag.ts +0 -245
- package/src/drivers/opencode.ts +0 -410
- package/src/engine-ports-mixed.test.ts +0 -156
- package/src/engine-ports.test.ts +0 -166
- package/src/engine-task-type.test.ts +0 -56
- package/src/engine.ts +0 -458
- package/src/hooks.ts +0 -193
- package/src/index.ts +0 -33
- package/src/logger.ts +0 -182
- package/src/middlewares/static-context.ts +0 -49
- package/src/pipeline-definition.ts +0 -5
- package/src/pipeline-runner.test.ts +0 -91
- package/src/pipeline-runner.ts +0 -194
- package/src/plugin-registry.test.ts +0 -382
- package/src/plugins.ts +0 -21
- package/src/ports.test.ts +0 -678
- package/src/ports.ts +0 -925
- package/src/prompt-doc.test.ts +0 -174
- package/src/prompt-doc.ts +0 -169
- package/src/registry.ts +0 -353
- package/src/runner.test.ts +0 -142
- package/src/runner.ts +0 -666
- package/src/runtime.ts +0 -20
- package/src/schema-ports.test.ts +0 -172
- package/src/schema.test.ts +0 -213
- package/src/schema.ts +0 -379
- package/src/tagma.test.ts +0 -155
- package/src/tagma.ts +0 -62
- package/src/task-ref.test.ts +0 -401
- package/src/task-ref.ts +0 -121
- package/src/triggers/file.ts +0 -164
- package/src/triggers/manual.ts +0 -86
- package/src/types.ts +0 -18
- package/src/utils-api.ts +0 -8
- package/src/utils.test.ts +0 -28
- package/src/utils.ts +0 -203
- package/src/validate-raw-plugin-types.test.ts +0 -60
- package/src/validate-raw-ports.test.ts +0 -136
- package/src/validate-raw.ts +0 -852
- package/src/yaml-compiler.test.ts +0 -108
- package/src/yaml-compiler.ts +0 -110
- package/src/yaml.ts +0 -11
package/src/runner.test.ts
DELETED
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { test, expect } from 'bun:test';
|
|
2
|
-
import { mkdtempSync, readFileSync, rmSync, statSync } from 'node:fs';
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { runSpawn } from './runner';
|
|
6
|
-
|
|
7
|
-
// Portable output producer — node is guaranteed in the bun dev env. Using a
|
|
8
|
-
// known runtime avoids shell-quoting differences between platforms.
|
|
9
|
-
function nodeArg(script: string): string[] {
|
|
10
|
-
return ['node', '-e', script];
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
test('runSpawn: small output is returned whole, persisted byte-identical', async () => {
|
|
14
|
-
const tmp = mkdtempSync(join(tmpdir(), 'tagma-runner-small-'));
|
|
15
|
-
const stdoutPath = join(tmp, 'out');
|
|
16
|
-
const stderrPath = join(tmp, 'err');
|
|
17
|
-
try {
|
|
18
|
-
const result = await runSpawn(
|
|
19
|
-
{ args: nodeArg('process.stdout.write("hello world"); process.stderr.write("oops")') },
|
|
20
|
-
null,
|
|
21
|
-
{ stdoutPath, stderrPath },
|
|
22
|
-
);
|
|
23
|
-
expect(result.exitCode).toBe(0);
|
|
24
|
-
expect(result.stdout).toBe('hello world');
|
|
25
|
-
expect(result.stderr).toBe('oops');
|
|
26
|
-
expect(result.stdoutBytes).toBe(11);
|
|
27
|
-
expect(result.stderrBytes).toBe(4);
|
|
28
|
-
expect(result.stdoutPath).toBe(stdoutPath);
|
|
29
|
-
expect(result.stderrPath).toBe(stderrPath);
|
|
30
|
-
expect(readFileSync(stdoutPath, 'utf8')).toBe('hello world');
|
|
31
|
-
expect(readFileSync(stderrPath, 'utf8')).toBe('oops');
|
|
32
|
-
} finally {
|
|
33
|
-
rmSync(tmp, { recursive: true, force: true });
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
test('runSpawn: oversized output — bounded tail in memory, full bytes on disk', async () => {
|
|
38
|
-
const tmp = mkdtempSync(join(tmpdir(), 'tagma-runner-big-'));
|
|
39
|
-
const stdoutPath = join(tmp, 'out');
|
|
40
|
-
try {
|
|
41
|
-
// Produce 3 MB of output against a 512 KB cap. The child writes in one
|
|
42
|
-
// shot; the runner should slice the single chunk's tail rather than
|
|
43
|
-
// evicting (the "pathological one-chunk-over-cap" branch).
|
|
44
|
-
const cap = 512 * 1024;
|
|
45
|
-
const totalBytes = 3 * 1024 * 1024;
|
|
46
|
-
const result = await runSpawn(
|
|
47
|
-
{
|
|
48
|
-
args: nodeArg(
|
|
49
|
-
`process.stdout.write("a".repeat(${totalBytes}))`,
|
|
50
|
-
),
|
|
51
|
-
},
|
|
52
|
-
null,
|
|
53
|
-
{ stdoutPath, maxStdoutTailBytes: cap },
|
|
54
|
-
);
|
|
55
|
-
expect(result.exitCode).toBe(0);
|
|
56
|
-
// Total bytes reported match reality
|
|
57
|
-
expect(result.stdoutBytes).toBe(totalBytes);
|
|
58
|
-
// In-memory tail bounded above (tail + truncation marker header is a
|
|
59
|
-
// couple hundred bytes at most; give it slack). No lower bound — chunk
|
|
60
|
-
// boundaries are platform-dependent so the exact retained size varies.
|
|
61
|
-
expect(result.stdout.length).toBeLessThan(cap + 1024);
|
|
62
|
-
// Truncation breadcrumb present and points at the full output
|
|
63
|
-
expect(result.stdout).toContain('truncated from head');
|
|
64
|
-
expect(result.stdout).toContain(stdoutPath);
|
|
65
|
-
// The tail ends with the trailing bytes the child wrote ('a')
|
|
66
|
-
expect(result.stdout.endsWith('a')).toBe(true);
|
|
67
|
-
// Disk copy is byte-exact and full-length
|
|
68
|
-
const onDiskBytes = statSync(stdoutPath).size;
|
|
69
|
-
expect(onDiskBytes).toBe(totalBytes);
|
|
70
|
-
} finally {
|
|
71
|
-
rmSync(tmp, { recursive: true, force: true });
|
|
72
|
-
}
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
test('runSpawn: chunked output — tail eviction keeps retained <= cap', async () => {
|
|
76
|
-
const tmp = mkdtempSync(join(tmpdir(), 'tagma-runner-chunked-'));
|
|
77
|
-
const stdoutPath = join(tmp, 'out');
|
|
78
|
-
try {
|
|
79
|
-
// Emit 8 chunks × 64 KB with sync drains between them, so the runner
|
|
80
|
-
// receives them as distinct chunks rather than one blob. Cap at 128 KB
|
|
81
|
-
// forces eviction of older chunks.
|
|
82
|
-
const cap = 128 * 1024;
|
|
83
|
-
const chunkSize = 64 * 1024;
|
|
84
|
-
const nChunks = 8;
|
|
85
|
-
const script = `
|
|
86
|
-
const chunk = 'b'.repeat(${chunkSize});
|
|
87
|
-
(async () => {
|
|
88
|
-
for (let i = 0; i < ${nChunks}; i++) {
|
|
89
|
-
process.stdout.write(chunk);
|
|
90
|
-
await new Promise(r => setImmediate(r));
|
|
91
|
-
}
|
|
92
|
-
})();
|
|
93
|
-
`;
|
|
94
|
-
const result = await runSpawn(
|
|
95
|
-
{ args: nodeArg(script) },
|
|
96
|
-
null,
|
|
97
|
-
{ stdoutPath, maxStdoutTailBytes: cap },
|
|
98
|
-
);
|
|
99
|
-
expect(result.exitCode).toBe(0);
|
|
100
|
-
expect(result.stdoutBytes).toBe(nChunks * chunkSize);
|
|
101
|
-
// Retained tail should be strictly bounded by cap (eviction case, no
|
|
102
|
-
// single-chunk slice). Allow small overhead for the truncation marker.
|
|
103
|
-
expect(result.stdout.length).toBeLessThan(cap + 1024);
|
|
104
|
-
expect(result.stdout).toContain('truncated from head');
|
|
105
|
-
// Full stream on disk
|
|
106
|
-
expect(statSync(stdoutPath).size).toBe(nChunks * chunkSize);
|
|
107
|
-
} finally {
|
|
108
|
-
rmSync(tmp, { recursive: true, force: true });
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
test('runSpawn: no path configured — memory-only tail, returns null paths', async () => {
|
|
113
|
-
const result = await runSpawn(
|
|
114
|
-
{ args: nodeArg('process.stdout.write("inline only")') },
|
|
115
|
-
null,
|
|
116
|
-
{},
|
|
117
|
-
);
|
|
118
|
-
expect(result.exitCode).toBe(0);
|
|
119
|
-
expect(result.stdout).toBe('inline only');
|
|
120
|
-
expect(result.stdoutPath).toBeNull();
|
|
121
|
-
expect(result.stderrPath).toBeNull();
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
test('runSpawn: pre-spawn failure (bad executable) — no paths leak on disk', async () => {
|
|
125
|
-
const tmp = mkdtempSync(join(tmpdir(), 'tagma-runner-bad-'));
|
|
126
|
-
const stdoutPath = join(tmp, 'out');
|
|
127
|
-
try {
|
|
128
|
-
const result = await runSpawn(
|
|
129
|
-
{ args: ['this-command-definitely-does-not-exist-xyz123'] },
|
|
130
|
-
null,
|
|
131
|
-
{ stdoutPath },
|
|
132
|
-
);
|
|
133
|
-
expect(result.exitCode).toBe(-1);
|
|
134
|
-
expect(result.failureKind).toBe('spawn_error');
|
|
135
|
-
// On pre-spawn failure the runner never opened the file, so stdoutPath
|
|
136
|
-
// is null (not the unopened path). Callers can rely on this to decide
|
|
137
|
-
// whether a disk file exists to read.
|
|
138
|
-
expect(result.stdoutPath).toBeNull();
|
|
139
|
-
} finally {
|
|
140
|
-
rmSync(tmp, { recursive: true, force: true });
|
|
141
|
-
}
|
|
142
|
-
});
|