You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Foreground taskflow runs silently executed no phase (issue #3, broadest
impact — found during the regression sweep). The same default-runner change
that broke detached runs also broke runFlow (every foreground run) and both recomputeTaskflow paths in pi-taskflow/src/index.ts: they constructed RuntimeDeps without a runTask, so every phase hit the noRunnerInjected
stub. Pre-refactor this worked only because the engine's default runTask
was runAgentTask (same package). Fixed by explicitly injecting piSubagentRunner.runTask at all three call sites. Added a structural
regression test that scans the production source and fails if any executeTaskflow/recomputeTaskflow deps omits runTask.
Detached (background) runs crashed on launch (issue #3). The detached
runner specifier resolved to dist/detached-runner.js.js (double .js) under
taskflow-core's "./*" export rewrite, so the spawned child died at import
with Cannot find module. Now resolved with a suffix-less specifier
(taskflow-core/detached-runner) → dist/detached-runner.js. The stale --experimental-strip-types flag (the runner ships compiled) is dropped.
Detached runs could never execute any phase (issue #3, deeper). The
detached-runner called executeTaskflow with no runTask (see the default
above), so every detached phase failed with "No subagent runner injected" even
after the module loaded. Fixed: the host serializes a runnerModule/ runnerExport (resolved from its own package, works under both workspaces and
npm installs) into the detached context file, and the detached-runner
dynamically imports it and injects runTask.
A crashed detached runner no longer leaves the run stuck at running
forever (issue #3, secondary). The host now pipes stderr and attaches exit/error handlers that, when the child dies before reaching a terminal
state, persist status: "failed" with the captured stderr recorded in a
pollable synthetic phase (__detach__). Race-safe: guarded by pid + status so
a genuine terminal state the runner persisted is never clobbered.