taskflow-core 0.1.8 → 0.2.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/README.md +248 -808
- package/dist/agents.d.ts +12 -0
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +29 -1
- package/dist/agents.js.map +1 -1
- package/dist/cwd-bridge.d.ts +61 -0
- package/dist/cwd-bridge.d.ts.map +1 -0
- package/dist/cwd-bridge.js +136 -0
- package/dist/cwd-bridge.js.map +1 -0
- package/dist/detached-runner.js +31 -5
- package/dist/detached-runner.js.map +1 -1
- package/dist/deterministic.d.ts +8 -0
- package/dist/deterministic.d.ts.map +1 -1
- package/dist/deterministic.js +23 -1
- package/dist/deterministic.js.map +1 -1
- package/dist/exec/driver.d.ts +48 -0
- package/dist/exec/driver.d.ts.map +1 -0
- package/dist/exec/driver.js +410 -0
- package/dist/exec/driver.js.map +1 -0
- package/dist/exec/events.d.ts +76 -0
- package/dist/exec/events.d.ts.map +1 -0
- package/dist/exec/events.js +108 -0
- package/dist/exec/events.js.map +1 -0
- package/dist/exec/fold.d.ts +45 -0
- package/dist/exec/fold.d.ts.map +1 -0
- package/dist/exec/fold.js +122 -0
- package/dist/exec/fold.js.map +1 -0
- package/dist/exec/index.d.ts +17 -0
- package/dist/exec/index.d.ts.map +1 -0
- package/dist/exec/index.js +17 -0
- package/dist/exec/index.js.map +1 -0
- package/dist/exec/kernel-policy.d.ts +35 -0
- package/dist/exec/kernel-policy.d.ts.map +1 -0
- package/dist/exec/kernel-policy.js +184 -0
- package/dist/exec/kernel-policy.js.map +1 -0
- package/dist/exec/step-kinds.d.ts +41 -0
- package/dist/exec/step-kinds.d.ts.map +1 -0
- package/dist/exec/step-kinds.js +599 -0
- package/dist/exec/step-kinds.js.map +1 -0
- package/dist/exec/step.d.ts +94 -0
- package/dist/exec/step.d.ts.map +1 -0
- package/dist/exec/step.js +454 -0
- package/dist/exec/step.js.map +1 -0
- package/dist/flowir/canonical-hash.d.ts +101 -0
- package/dist/flowir/canonical-hash.d.ts.map +1 -0
- package/dist/flowir/canonical-hash.js +219 -0
- package/dist/flowir/canonical-hash.js.map +1 -0
- package/dist/flowir/compile.d.ts +49 -0
- package/dist/flowir/compile.d.ts.map +1 -0
- package/dist/flowir/compile.js +232 -0
- package/dist/flowir/compile.js.map +1 -0
- package/dist/flowir/cond.d.ts +76 -0
- package/dist/flowir/cond.d.ts.map +1 -0
- package/dist/flowir/cond.js +214 -0
- package/dist/flowir/cond.js.map +1 -0
- package/dist/flowir/index.d.ts +20 -23
- package/dist/flowir/index.d.ts.map +1 -1
- package/dist/flowir/index.js +47 -35
- package/dist/flowir/index.js.map +1 -1
- package/dist/flowir/meta.d.ts +4 -4
- package/dist/flowir/meta.d.ts.map +1 -1
- package/dist/flowir/phasefp.d.ts.map +1 -1
- package/dist/flowir/phasefp.js +13 -1
- package/dist/flowir/phasefp.js.map +1 -1
- package/dist/flowir/schema.d.ts +260 -0
- package/dist/flowir/schema.d.ts.map +1 -0
- package/dist/flowir/schema.js +234 -0
- package/dist/flowir/schema.js.map +1 -0
- package/dist/flowir/translate.d.ts.map +1 -1
- package/dist/flowir/translate.js +3 -0
- package/dist/flowir/translate.js.map +1 -1
- package/dist/host/runner-types.d.ts +19 -0
- package/dist/host/runner-types.d.ts.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/interpolate.d.ts +4 -0
- package/dist/interpolate.d.ts.map +1 -1
- package/dist/interpolate.js +14 -0
- package/dist/interpolate.js.map +1 -1
- package/dist/rates.d.ts +121 -0
- package/dist/rates.d.ts.map +1 -0
- package/dist/rates.js +187 -0
- package/dist/rates.js.map +1 -0
- package/dist/replay.d.ts +43 -50
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +629 -19
- package/dist/replay.js.map +1 -1
- package/dist/resources/authority.d.ts +35 -0
- package/dist/resources/authority.d.ts.map +1 -0
- package/dist/resources/authority.js +67 -0
- package/dist/resources/authority.js.map +1 -0
- package/dist/resources/backend.d.ts +302 -0
- package/dist/resources/backend.d.ts.map +1 -0
- package/dist/resources/backend.js +16 -0
- package/dist/resources/backend.js.map +1 -0
- package/dist/resources/baseline.d.ts +116 -0
- package/dist/resources/baseline.d.ts.map +1 -0
- package/dist/resources/baseline.js +447 -0
- package/dist/resources/baseline.js.map +1 -0
- package/dist/resources/canonical-json.d.ts +7 -0
- package/dist/resources/canonical-json.d.ts.map +1 -0
- package/dist/resources/canonical-json.js +75 -0
- package/dist/resources/canonical-json.js.map +1 -0
- package/dist/resources/errors.d.ts +23 -0
- package/dist/resources/errors.d.ts.map +1 -0
- package/dist/resources/errors.js +89 -0
- package/dist/resources/errors.js.map +1 -0
- package/dist/resources/execution.d.ts +90 -0
- package/dist/resources/execution.d.ts.map +1 -0
- package/dist/resources/execution.js +581 -0
- package/dist/resources/execution.js.map +1 -0
- package/dist/resources/index.d.ts +15 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +15 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/journal.d.ts +138 -0
- package/dist/resources/journal.d.ts.map +1 -0
- package/dist/resources/journal.js +438 -0
- package/dist/resources/journal.js.map +1 -0
- package/dist/resources/leases.d.ts +51 -0
- package/dist/resources/leases.d.ts.map +1 -0
- package/dist/resources/leases.js +354 -0
- package/dist/resources/leases.js.map +1 -0
- package/dist/resources/permits.d.ts +52 -0
- package/dist/resources/permits.d.ts.map +1 -0
- package/dist/resources/permits.js +240 -0
- package/dist/resources/permits.js.map +1 -0
- package/dist/resources/persistence.d.ts +63 -0
- package/dist/resources/persistence.d.ts.map +1 -0
- package/dist/resources/persistence.js +522 -0
- package/dist/resources/persistence.js.map +1 -0
- package/dist/resources/registry.d.ts +56 -0
- package/dist/resources/registry.d.ts.map +1 -0
- package/dist/resources/registry.js +139 -0
- package/dist/resources/registry.js.map +1 -0
- package/dist/resources/resolve.d.ts +49 -0
- package/dist/resources/resolve.d.ts.map +1 -0
- package/dist/resources/resolve.js +309 -0
- package/dist/resources/resolve.js.map +1 -0
- package/dist/resources/sandbox.d.ts +72 -0
- package/dist/resources/sandbox.d.ts.map +1 -0
- package/dist/resources/sandbox.js +952 -0
- package/dist/resources/sandbox.js.map +1 -0
- package/dist/resources/schema.d.ts +195 -0
- package/dist/resources/schema.d.ts.map +1 -0
- package/dist/resources/schema.js +231 -0
- package/dist/resources/schema.js.map +1 -0
- package/dist/resources/types.d.ts +36 -0
- package/dist/resources/types.d.ts.map +1 -0
- package/dist/resources/types.js +75 -0
- package/dist/resources/types.js.map +1 -0
- package/dist/runner-core.d.ts +53 -0
- package/dist/runner-core.d.ts.map +1 -1
- package/dist/runner-core.js +521 -53
- package/dist/runner-core.js.map +1 -1
- package/dist/runtime/phases/approval.d.ts +23 -0
- package/dist/runtime/phases/approval.d.ts.map +1 -0
- package/dist/runtime/phases/approval.js +38 -0
- package/dist/runtime/phases/approval.js.map +1 -0
- package/dist/runtime/phases/expand.d.ts +29 -0
- package/dist/runtime/phases/expand.d.ts.map +1 -0
- package/dist/runtime/phases/expand.js +126 -0
- package/dist/runtime/phases/expand.js.map +1 -0
- package/dist/runtime/phases/parallel.d.ts +26 -0
- package/dist/runtime/phases/parallel.d.ts.map +1 -0
- package/dist/runtime/phases/parallel.js +15 -0
- package/dist/runtime/phases/parallel.js.map +1 -0
- package/dist/runtime/phases/race.d.ts +31 -0
- package/dist/runtime/phases/race.d.ts.map +1 -0
- package/dist/runtime/phases/race.js +220 -0
- package/dist/runtime/phases/race.js.map +1 -0
- package/dist/runtime/phases/script.d.ts +38 -0
- package/dist/runtime/phases/script.d.ts.map +1 -0
- package/dist/runtime/phases/script.js +177 -0
- package/dist/runtime/phases/script.js.map +1 -0
- package/dist/runtime.d.ts +68 -16
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +1091 -337
- package/dist/runtime.js.map +1 -1
- package/dist/schema.d.ts +104 -9
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +249 -32
- package/dist/schema.js.map +1 -1
- package/dist/store.d.ts +13 -0
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js.map +1 -1
- package/dist/trace.d.ts +7 -1
- package/dist/trace.d.ts.map +1 -1
- package/dist/trace.js +33 -26
- package/dist/trace.js.map +1 -1
- package/package.json +7 -5
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
export function normalizeCanonicalPrefix(prefix) {
|
|
3
|
+
if (typeof prefix !== "string" || prefix.length === 0 || !path.isAbsolute(prefix)) {
|
|
4
|
+
throw new Error(`canonicalPrefix must be a non-empty absolute path: ${JSON.stringify(prefix)}`);
|
|
5
|
+
}
|
|
6
|
+
return path.normalize(prefix);
|
|
7
|
+
}
|
|
8
|
+
export function normalizeLeaseKey(key) {
|
|
9
|
+
if (typeof key.resourceDomainId !== "string" || key.resourceDomainId.trim().length === 0) {
|
|
10
|
+
throw new Error("resourceDomainId must be a non-empty string");
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
resourceDomainId: key.resourceDomainId,
|
|
14
|
+
canonicalPrefix: normalizeCanonicalPrefix(key.canonicalPrefix),
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function canonicalPrefixContains(parent, child) {
|
|
18
|
+
const rel = path.relative(parent, child);
|
|
19
|
+
return rel === "" || (rel !== ".." && !rel.startsWith(`..${path.sep}`) && !path.isAbsolute(rel));
|
|
20
|
+
}
|
|
21
|
+
export function canonicalLeaseKeysOverlap(a, b) {
|
|
22
|
+
if (a.resourceDomainId !== b.resourceDomainId)
|
|
23
|
+
return false;
|
|
24
|
+
return canonicalPrefixContains(a.canonicalPrefix, b.canonicalPrefix) ||
|
|
25
|
+
canonicalPrefixContains(b.canonicalPrefix, a.canonicalPrefix);
|
|
26
|
+
}
|
|
27
|
+
export function compareLeaseKeys(a, b) {
|
|
28
|
+
return a.resourceDomainId.localeCompare(b.resourceDomainId) ||
|
|
29
|
+
a.canonicalPrefix.localeCompare(b.canonicalPrefix);
|
|
30
|
+
}
|
|
31
|
+
export function sameExecutionOwner(a, b) {
|
|
32
|
+
return a.runId === b.runId &&
|
|
33
|
+
a.phaseId === b.phaseId &&
|
|
34
|
+
a.attemptId === b.attemptId &&
|
|
35
|
+
a.unitId === b.unitId &&
|
|
36
|
+
a.ancestry.length === b.ancestry.length &&
|
|
37
|
+
a.ancestry.every((value, index) => value === b.ancestry[index]);
|
|
38
|
+
}
|
|
39
|
+
export function cloneExecutionOwner(owner) {
|
|
40
|
+
return {
|
|
41
|
+
runId: owner.runId,
|
|
42
|
+
phaseId: owner.phaseId,
|
|
43
|
+
attemptId: owner.attemptId,
|
|
44
|
+
unitId: owner.unitId,
|
|
45
|
+
ancestry: [...owner.ancestry],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** Reduce same-domain writable scopes to a deterministic minimal prefix cover. */
|
|
49
|
+
export function minimalCanonicalScopeCover(scopes) {
|
|
50
|
+
const sorted = scopes.map(normalizeLeaseKey).sort(compareLeaseKeys);
|
|
51
|
+
const result = [];
|
|
52
|
+
for (const scope of sorted) {
|
|
53
|
+
if (result.some((existing) => existing.resourceDomainId === scope.resourceDomainId &&
|
|
54
|
+
canonicalPrefixContains(existing.canonicalPrefix, scope.canonicalPrefix))) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
for (let i = result.length - 1; i >= 0; i--) {
|
|
58
|
+
const existing = result[i];
|
|
59
|
+
if (existing.resourceDomainId === scope.resourceDomainId &&
|
|
60
|
+
canonicalPrefixContains(scope.canonicalPrefix, existing.canonicalPrefix)) {
|
|
61
|
+
result.splice(i, 1);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
result.push(scope);
|
|
65
|
+
result.sort(compareLeaseKeys);
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
export function sameCanonicalScopes(a, b) {
|
|
70
|
+
const aa = minimalCanonicalScopeCover(a);
|
|
71
|
+
const bb = minimalCanonicalScopeCover(b);
|
|
72
|
+
return aa.length === bb.length && aa.every((scope, index) => scope.resourceDomainId === bb[index].resourceDomainId &&
|
|
73
|
+
scope.canonicalPrefix === bb[index].canonicalPrefix);
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/resources/types.ts"],"names":[],"mappings":"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"}
|
package/dist/runner-core.d.ts
CHANGED
|
@@ -11,12 +11,17 @@
|
|
|
11
11
|
* failure semantics, retry heuristics, and usage folding are identical across
|
|
12
12
|
* hosts.
|
|
13
13
|
*/
|
|
14
|
+
import { type ChildProcess } from "node:child_process";
|
|
14
15
|
import { type UsageStats } from "./usage.ts";
|
|
15
16
|
import type { AgentConfig } from "./agents.ts";
|
|
16
17
|
import type { CoreMessage, LiveUpdate, RunResult } from "./host/runner-types.ts";
|
|
17
18
|
export type { CoreMessage, LiveUpdate, RunOptions, RunResult, SubagentRunner } from "./host/runner-types.ts";
|
|
18
19
|
export declare function isFailed(r: RunResult): boolean;
|
|
19
20
|
export declare function isTransientError(r: RunResult): boolean;
|
|
21
|
+
/** Wait for a retry backoff, but release immediately when the run is aborted.
|
|
22
|
+
* Resolves (rather than rejects) on abort so callers can leave their retry loop
|
|
23
|
+
* through the normal `signal.aborted` branch and preserve paused semantics. */
|
|
24
|
+
export declare function abortableDelay(ms: number, signal?: AbortSignal): Promise<void>;
|
|
20
25
|
/** Placeholder written to a failed phase's `output` so downstream interpolation
|
|
21
26
|
* can detect "upstream failed" without being polluted by raw HTML/JSON. */
|
|
22
27
|
export declare const TRANSPORT_ERROR_PLACEHOLDER = "(upstream error: subagent failed; see error)";
|
|
@@ -35,9 +40,14 @@ export interface EventAccumulator {
|
|
|
35
40
|
messages: CoreMessage[];
|
|
36
41
|
usage: UsageStats;
|
|
37
42
|
model?: string;
|
|
43
|
+
/** Last non-empty assistant text, mirrored for the shared process supervisor. */
|
|
44
|
+
finalText: string;
|
|
38
45
|
stopReason?: string;
|
|
39
46
|
errorMessage?: string;
|
|
40
47
|
lastActivity: string;
|
|
48
|
+
/** Shared-supervisor aliases populated from Pi's message lifecycle. */
|
|
49
|
+
fatalError?: string;
|
|
50
|
+
terminalSeen?: boolean;
|
|
41
51
|
/** Set when message cap was hit — output gets a truncation notice. */
|
|
42
52
|
truncated?: boolean;
|
|
43
53
|
}
|
|
@@ -56,8 +66,29 @@ export declare function mapWithConcurrencyLimit<TIn, TOut>(items: TIn[], concurr
|
|
|
56
66
|
* numeric STRING (e.g. "1234"), and `number += string` silently corrupts to
|
|
57
67
|
* string concatenation / NaN. This guard keeps usage accounting honest. */
|
|
58
68
|
export declare function num(v: unknown): number;
|
|
69
|
+
/** Register a detached process group with the host-wide supervisor. Script
|
|
70
|
+
* phases and agent runners share this registry so external host termination
|
|
71
|
+
* cannot leave either kind of child mutating the workspace. */
|
|
72
|
+
export declare function registerProcessTree(pid: number): void;
|
|
73
|
+
/** Remove a process group after its stdio has closed and all descendants have
|
|
74
|
+
* been synchronously reaped. */
|
|
75
|
+
export declare function unregisterProcessTree(pid: number): void;
|
|
76
|
+
/** Signal the whole process tree rooted at a spawned subagent. POSIX children
|
|
77
|
+
* are process-group leaders (`detached:true` at spawn), so a negative pid
|
|
78
|
+
* reaches every descendant in the group. Windows has no equivalent signal;
|
|
79
|
+
* taskkill /T /F is the platform-supported tree termination primitive. */
|
|
80
|
+
export declare function killProcessTree(pid: number, signal: NodeJS.Signals, direct?: ChildProcess): void;
|
|
59
81
|
/** Same idle window every host runner uses: a child silent this long is wedged. */
|
|
60
82
|
export declare const DEFAULT_IDLE_TIMEOUT_MS: number;
|
|
83
|
+
/** After a phase timeout aborts its runner, allow process-backed hosts enough
|
|
84
|
+
* time to execute their SIGTERM to SIGKILL escalation. A custom runner that
|
|
85
|
+
* ignores AbortSignal entirely is still bounded by this grace window. */
|
|
86
|
+
export declare const PHASE_TIMEOUT_ABORT_GRACE_MS = 5500;
|
|
87
|
+
/** Maximum NDJSON line size retained while waiting for a newline. A hostile or
|
|
88
|
+
* broken host can otherwise stream an unterminated line until the orchestrator
|
|
89
|
+
* runs out of memory. Host events are expected to be compact; 1 MiB still
|
|
90
|
+
* leaves ample room for a large final answer while providing a hard bound. */
|
|
91
|
+
export declare const MAX_STDOUT_LINE_BYTES: number;
|
|
61
92
|
/** The base accumulator contract the shared process runner reads/writes. Each
|
|
62
93
|
* host's accumulator (Codex/Claude/OpenCode) satisfies this structurally and
|
|
63
94
|
* may carry extra fields (e.g. claude's `sawResult`) its own foldLine uses. */
|
|
@@ -69,6 +100,19 @@ export interface SubagentAccumulator {
|
|
|
69
100
|
lastActivity: string;
|
|
70
101
|
/** Set by the host foldLine when the stream reported a fatal error event. */
|
|
71
102
|
fatalError?: string;
|
|
103
|
+
/** Set by hosts whose protocol has an authoritative terminal event. */
|
|
104
|
+
terminalSeen?: boolean;
|
|
105
|
+
/** Optional host-native terminal reason, used by completion policies. */
|
|
106
|
+
stopReason?: string;
|
|
107
|
+
}
|
|
108
|
+
export type CompletionEventClassification = "ignore" | "activity" | "terminal-candidate" | "fatal";
|
|
109
|
+
/** Optional host protocol layered over ordinary process exit. A terminal event
|
|
110
|
+
* is only a candidate: the shared supervisor waits a grace period, revokes the
|
|
111
|
+
* candidate on later activity, and commits only after canCommitTerminal passes. */
|
|
112
|
+
export interface CompletionPolicy<TAcc extends SubagentAccumulator> {
|
|
113
|
+
terminalGraceMs: number;
|
|
114
|
+
classifyEvent(acc: TAcc, event: unknown): CompletionEventClassification;
|
|
115
|
+
canCommitTerminal(acc: TAcc): boolean;
|
|
72
116
|
}
|
|
73
117
|
/** Standard "unknown agent" RunResult — identical across every host runner. */
|
|
74
118
|
export declare function unknownAgentResult(agentName: string, task: string, agents: AgentConfig[]): RunResult;
|
|
@@ -85,11 +129,20 @@ export interface RunSubagentProcessOptions<TAcc extends SubagentAccumulator> {
|
|
|
85
129
|
cwd: string;
|
|
86
130
|
/** Execution knobs (forwarded from the phase's RunOptions). */
|
|
87
131
|
idleTimeoutMs?: number;
|
|
132
|
+
/** @internal SIGTERM-to-SIGKILL grace. Defaults to 5s; injectable for
|
|
133
|
+
* deterministic supervisor tests. */
|
|
134
|
+
terminationGraceMs?: number;
|
|
88
135
|
signal?: AbortSignal;
|
|
89
136
|
onLive?: (live: LiveUpdate) => void;
|
|
90
137
|
/** Per-host event folding: the host's accumulator + its line parser. */
|
|
91
138
|
acc: TAcc;
|
|
92
139
|
foldLine: (acc: TAcc, line: string) => LiveUpdate | null;
|
|
140
|
+
completionPolicy?: CompletionPolicy<TAcc>;
|
|
141
|
+
/** Synchronous notification at the terminal-reap linearization point. */
|
|
142
|
+
onTerminalCommit?: () => void;
|
|
143
|
+
/** Fail closed when the CLI exits zero before its authoritative terminal event. */
|
|
144
|
+
requireTerminalEvent?: boolean;
|
|
145
|
+
terminalEventLabel?: string;
|
|
93
146
|
}
|
|
94
147
|
/** Spawn an isolated subagent process, fold its event stream, and classify the
|
|
95
148
|
* outcome into a RunResult. The whole tail (fatalError, signal-kill remap,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner-core.d.ts","sourceRoot":"","sources":["../src/runner-core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"runner-core.d.ts","sourceRoot":"","sources":["../src/runner-core.ts"],"names":[],"mappings":"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"}
|