taskflow-core 0.1.6 → 0.1.8
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 +10 -8
- package/dist/agents.js.map +1 -1
- package/dist/cache.d.ts.map +1 -1
- package/dist/compile.js.map +1 -1
- package/dist/context-store.js.map +1 -1
- package/dist/deterministic.d.ts +33 -0
- package/dist/deterministic.d.ts.map +1 -0
- package/dist/deterministic.js +56 -0
- package/dist/deterministic.js.map +1 -0
- package/dist/flowir/translate.d.ts.map +1 -1
- package/dist/flowir/translate.js +25 -7
- package/dist/flowir/translate.js.map +1 -1
- package/dist/frontmatter.d.ts.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/interpolate.d.ts +18 -0
- package/dist/interpolate.d.ts.map +1 -1
- package/dist/interpolate.js +45 -0
- package/dist/interpolate.js.map +1 -1
- package/dist/library/search.d.ts +3 -2
- package/dist/library/search.d.ts.map +1 -1
- package/dist/library/search.js +2 -1
- package/dist/library/search.js.map +1 -1
- package/dist/peek.js.map +1 -1
- package/dist/reflexion.js.map +1 -1
- package/dist/replay.d.ts +75 -0
- package/dist/replay.d.ts.map +1 -0
- package/dist/replay.js +25 -0
- package/dist/replay.js.map +1 -0
- package/dist/runtime.d.ts +8 -11
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +170 -43
- package/dist/runtime.js.map +1 -1
- package/dist/schema.d.ts +10 -10
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +18 -0
- package/dist/schema.js.map +1 -1
- package/dist/scorers.d.ts +11 -3
- package/dist/scorers.d.ts.map +1 -1
- package/dist/scorers.js +38 -7
- package/dist/scorers.js.map +1 -1
- package/dist/store.d.ts +57 -9
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +165 -83
- package/dist/store.js.map +1 -1
- package/dist/trace.d.ts +150 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +191 -0
- package/dist/trace.js.map +1 -0
- package/dist/workspace.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/trace.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic-replay trace — the foundation.
|
|
3
|
+
*
|
|
4
|
+
* Every run may emit an **append-only event trace** (`runs/<flow>/<runId>.trace.jsonl`)
|
|
5
|
+
* recording what each subagent call received and produced, plus the runtime's
|
|
6
|
+
* own decisions (gate verdicts, when-guard results, budget hits, cache hits,
|
|
7
|
+
* "this phase cannot be replayed" markers). A future `replay` action consumes
|
|
8
|
+
* this trace to re-evaluate a recorded run against changed decision knobs
|
|
9
|
+
* (thresholds, budget, model route) **without calling the model** — zero tokens.
|
|
10
|
+
*
|
|
11
|
+
* This module is deliberately **host-agnostic and side-effect-light**: it owns
|
|
12
|
+
* only the data shape, a JSONL reader/writer with partial-line tolerance, and a
|
|
13
|
+
* fail-open file-backed sink. The runtime emits events via `RuntimeDeps.trace`;
|
|
14
|
+
* if no sink is injected, nothing happens (the host-agnostic invariant is
|
|
15
|
+
* preserved — runs with no trace sink behave identically to today).
|
|
16
|
+
*
|
|
17
|
+
* **0.1.7 scope**: trace *emission* + read-only `trace` inspection only. The
|
|
18
|
+
* `replay` action (which consumes these events) lands in 0.2.0 — but the schema
|
|
19
|
+
* here is already complete enough that a 0.2.0 replay won't need a breaking
|
|
20
|
+
* migration. See `replay.ts` for the `ReplayDecision` type stub.
|
|
21
|
+
*/
|
|
22
|
+
import { openSync, readFileSync, renameSync, unlinkSync, writeFileSync, closeSync, existsSync, statSync } from "node:fs";
|
|
23
|
+
import { join } from "node:path";
|
|
24
|
+
/** A sink that drops everything. The default when no sink is injected. */
|
|
25
|
+
export const NoopTraceSink = {
|
|
26
|
+
emit() { },
|
|
27
|
+
flush() { },
|
|
28
|
+
};
|
|
29
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
30
|
+
// File-backed sink (buffered per phase, flushed at phase-end)
|
|
31
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
32
|
+
/**
|
|
33
|
+
* Append-only JSONL trace, buffered per phase. Events for a phase accumulate in
|
|
34
|
+
* memory (lock-free) and are written in one locked append at `flush(phaseId)`,
|
|
35
|
+
* so a 30-item `map` fan-out never serialises 30 completions through the file
|
|
36
|
+
* lock. Crash-safety is therefore at the phase boundary, not the sub-call —
|
|
37
|
+
* sufficient for replay, which only needs completed phases.
|
|
38
|
+
*
|
|
39
|
+
* Each flush appends one line per event (`JSON.stringify` + `\n`) to a temp
|
|
40
|
+
* file then renames atomically onto the trace path's *appended* content. To
|
|
41
|
+
* keep appends atomic without read-modify-write races, flush holds an
|
|
42
|
+
* exclusive lock file (`<runId>.trace.lock`) via `O_CREAT|O_EXCL` (the same
|
|
43
|
+
* discipline as `store.ts`'s `withLock`).
|
|
44
|
+
*/
|
|
45
|
+
export class FileTraceSink {
|
|
46
|
+
buffer = new Map();
|
|
47
|
+
tracePath;
|
|
48
|
+
lockPath;
|
|
49
|
+
dirOk;
|
|
50
|
+
constructor(tracePath) {
|
|
51
|
+
this.tracePath = tracePath;
|
|
52
|
+
this.lockPath = `${tracePath}.lock`;
|
|
53
|
+
// Probe writability of the parent dir once; if unwritable, degrade to
|
|
54
|
+
// no-op silently (fail-open — trace is best-effort, never run-breaking).
|
|
55
|
+
try {
|
|
56
|
+
const dir = join(tracePath, "..");
|
|
57
|
+
this.dirOk = existsSync(dir);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
this.dirOk = false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
emit(event) {
|
|
64
|
+
try {
|
|
65
|
+
const arr = this.buffer.get(event.phaseId) ?? [];
|
|
66
|
+
arr.push(event);
|
|
67
|
+
this.buffer.set(event.phaseId, arr);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
/* fail-open */
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
flush(phaseId) {
|
|
74
|
+
const events = this.buffer.get(phaseId);
|
|
75
|
+
this.buffer.delete(phaseId);
|
|
76
|
+
if (!events || events.length === 0 || !this.dirOk)
|
|
77
|
+
return;
|
|
78
|
+
// Serialize + append under an exclusive lock. Best-effort: any error is
|
|
79
|
+
// swallowed (trace is never run-breaking).
|
|
80
|
+
try {
|
|
81
|
+
withExclusiveLock(this.lockPath, () => {
|
|
82
|
+
const chunk = events.map((e) => JSON.stringify(e)).join("\n") + "\n";
|
|
83
|
+
appendAtomic(this.tracePath, chunk);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
/* fail-open */
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/** Atomic append: read current (if any) + write combined to temp + rename. */
|
|
92
|
+
function appendAtomic(path, chunk) {
|
|
93
|
+
let existing = "";
|
|
94
|
+
try {
|
|
95
|
+
existing = readFileSync(path, "utf8");
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
existing = "";
|
|
99
|
+
}
|
|
100
|
+
const tmp = `${path}.tmp-${process.pid}-${Date.now()}`;
|
|
101
|
+
writeFileSync(tmp, existing + chunk, "utf8");
|
|
102
|
+
renameSync(tmp, path);
|
|
103
|
+
}
|
|
104
|
+
/** Hold an exclusive lock for the duration of `fn` via `O_CREAT|O_EXCL`. */
|
|
105
|
+
function withExclusiveLock(lockPath, fn) {
|
|
106
|
+
let fd;
|
|
107
|
+
const staleMs = 60_000; // steal a lock older than 60s (a crashed writer)
|
|
108
|
+
for (let i = 0; i < 200; i++) {
|
|
109
|
+
try {
|
|
110
|
+
fd = openSync(lockPath, "wx");
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
// Lock exists — steal if stale.
|
|
115
|
+
try {
|
|
116
|
+
const st = statSync(lockPath);
|
|
117
|
+
if (Date.now() - st.mtimeMs > staleMs) {
|
|
118
|
+
const stolen = `${lockPath}.steal-${process.pid}-${Date.now()}`;
|
|
119
|
+
renameSync(lockPath, stolen);
|
|
120
|
+
try {
|
|
121
|
+
unlinkSync(stolen);
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
/* ignore */
|
|
125
|
+
}
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
/* ignore stat failure */
|
|
131
|
+
}
|
|
132
|
+
Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 5);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (fd === undefined) {
|
|
136
|
+
// Could not acquire — run unlocked (fail-open; worst case a partial
|
|
137
|
+
// interleaving that JSONL-line-parsing tolerates on read).
|
|
138
|
+
fn();
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
fn();
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
try {
|
|
146
|
+
closeSync(fd);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
/* ignore */
|
|
150
|
+
}
|
|
151
|
+
try {
|
|
152
|
+
unlinkSync(lockPath);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
/* ignore */
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
160
|
+
// Reader (partial-line tolerant)
|
|
161
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
162
|
+
/**
|
|
163
|
+
* Read + parse a trace JSONL. Skips blank lines and any trailing partial line
|
|
164
|
+
* (a crash mid-flush can leave a truncated final record). Returns events in
|
|
165
|
+
* file (append) order. Best-effort: a missing file → empty array.
|
|
166
|
+
*/
|
|
167
|
+
export function readTrace(tracePath) {
|
|
168
|
+
let text;
|
|
169
|
+
try {
|
|
170
|
+
text = readFileSync(tracePath, "utf8");
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
const out = [];
|
|
176
|
+
const lines = text.split("\n");
|
|
177
|
+
for (const line of lines) {
|
|
178
|
+
const trimmed = line.trim();
|
|
179
|
+
if (!trimmed)
|
|
180
|
+
continue;
|
|
181
|
+
try {
|
|
182
|
+
out.push(JSON.parse(trimmed));
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
// Partial / corrupt line — skip (fail-open). A truncated final record
|
|
186
|
+
// from a crashed flush is the expected case.
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return out;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"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"}
|
package/dist/workspace.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAOH,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAOH,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,YAAI,MAAM,EAAE,WAAW,EAAE,UAAU,CAAU,CAAC;AAC7E,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,IAAI,aAAa,CAEhF;AAED,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACzB,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;IACZ,4EAA4E;IAC5E,IAAI,EAAE,aAAa,GAAG,WAAW,CAAC;IAClC,0EAA0E;IAC1E,QAAQ,IAAI,IAAI,CAAC;IACjB,oEAAoE;IACpE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AA2DD,UAAU,SAAS;IAClB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,GAAG,SAAS,CAuEjF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "taskflow-core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "Host-neutral engine for declarative, verifiable task-DAG orchestration — the runtime, DSL, cache, and verification shared by pi-taskflow, codex-taskflow, claude-taskflow, and opencode-taskflow.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"taskflow",
|