taskflow-core 0.1.0

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.
Files changed (115) hide show
  1. package/dist/agents/analyst.md +30 -0
  2. package/dist/agents/critic.md +31 -0
  3. package/dist/agents/doc-writer.md +43 -0
  4. package/dist/agents/executor-code.md +36 -0
  5. package/dist/agents/executor-fast.md +26 -0
  6. package/dist/agents/executor-ui.md +35 -0
  7. package/dist/agents/executor.md +29 -0
  8. package/dist/agents/final-arbiter.md +29 -0
  9. package/dist/agents/plan-arbiter.md +35 -0
  10. package/dist/agents/planner.md +30 -0
  11. package/dist/agents/recover.md +28 -0
  12. package/dist/agents/reviewer.md +37 -0
  13. package/dist/agents/risk-reviewer.md +37 -0
  14. package/dist/agents/scout.md +51 -0
  15. package/dist/agents/security-reviewer.md +39 -0
  16. package/dist/agents/test-engineer.md +31 -0
  17. package/dist/agents/verifier.md +29 -0
  18. package/dist/agents/visual-explorer.md +32 -0
  19. package/dist/agents.d.ts +55 -0
  20. package/dist/agents.d.ts.map +1 -0
  21. package/dist/agents.js +265 -0
  22. package/dist/agents.js.map +1 -0
  23. package/dist/cache.d.ts +57 -0
  24. package/dist/cache.d.ts.map +1 -0
  25. package/dist/cache.js +256 -0
  26. package/dist/cache.js.map +1 -0
  27. package/dist/compile.d.ts +37 -0
  28. package/dist/compile.d.ts.map +1 -0
  29. package/dist/compile.js +324 -0
  30. package/dist/compile.js.map +1 -0
  31. package/dist/context-store.d.ts +142 -0
  32. package/dist/context-store.d.ts.map +1 -0
  33. package/dist/context-store.js +383 -0
  34. package/dist/context-store.js.map +1 -0
  35. package/dist/detached-runner.d.ts +12 -0
  36. package/dist/detached-runner.d.ts.map +1 -0
  37. package/dist/detached-runner.js +68 -0
  38. package/dist/detached-runner.js.map +1 -0
  39. package/dist/flowir/hash.d.ts +51 -0
  40. package/dist/flowir/hash.d.ts.map +1 -0
  41. package/dist/flowir/hash.js +90 -0
  42. package/dist/flowir/hash.js.map +1 -0
  43. package/dist/flowir/index.d.ts +43 -0
  44. package/dist/flowir/index.d.ts.map +1 -0
  45. package/dist/flowir/index.js +62 -0
  46. package/dist/flowir/index.js.map +1 -0
  47. package/dist/flowir/meta.d.ts +103 -0
  48. package/dist/flowir/meta.d.ts.map +1 -0
  49. package/dist/flowir/meta.js +19 -0
  50. package/dist/flowir/meta.js.map +1 -0
  51. package/dist/flowir/phasefp.d.ts +55 -0
  52. package/dist/flowir/phasefp.d.ts.map +1 -0
  53. package/dist/flowir/phasefp.js +123 -0
  54. package/dist/flowir/phasefp.js.map +1 -0
  55. package/dist/flowir/translate.d.ts +37 -0
  56. package/dist/flowir/translate.d.ts.map +1 -0
  57. package/dist/flowir/translate.js +137 -0
  58. package/dist/flowir/translate.js.map +1 -0
  59. package/dist/frontmatter.d.ts +21 -0
  60. package/dist/frontmatter.d.ts.map +1 -0
  61. package/dist/frontmatter.js +107 -0
  62. package/dist/frontmatter.js.map +1 -0
  63. package/dist/host/runner-types.d.ts +98 -0
  64. package/dist/host/runner-types.d.ts.map +1 -0
  65. package/dist/host/runner-types.js +21 -0
  66. package/dist/host/runner-types.js.map +1 -0
  67. package/dist/index.d.ts +26 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +30 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/interpolate.d.ts +52 -0
  72. package/dist/interpolate.d.ts.map +1 -0
  73. package/dist/interpolate.js +418 -0
  74. package/dist/interpolate.js.map +1 -0
  75. package/dist/paths.d.ts +23 -0
  76. package/dist/paths.d.ts.map +1 -0
  77. package/dist/paths.js +43 -0
  78. package/dist/paths.js.map +1 -0
  79. package/dist/runner-core.d.ts +49 -0
  80. package/dist/runner-core.d.ts.map +1 -0
  81. package/dist/runner-core.js +208 -0
  82. package/dist/runner-core.js.map +1 -0
  83. package/dist/runtime.d.ts +234 -0
  84. package/dist/runtime.d.ts.map +1 -0
  85. package/dist/runtime.js +2284 -0
  86. package/dist/runtime.js.map +1 -0
  87. package/dist/schema.d.ts +257 -0
  88. package/dist/schema.d.ts.map +1 -0
  89. package/dist/schema.js +795 -0
  90. package/dist/schema.js.map +1 -0
  91. package/dist/stale.d.ts +72 -0
  92. package/dist/stale.d.ts.map +1 -0
  93. package/dist/stale.js +179 -0
  94. package/dist/stale.js.map +1 -0
  95. package/dist/store.d.ts +237 -0
  96. package/dist/store.d.ts.map +1 -0
  97. package/dist/store.js +761 -0
  98. package/dist/store.js.map +1 -0
  99. package/dist/typebox-helpers.d.ts +15 -0
  100. package/dist/typebox-helpers.d.ts.map +1 -0
  101. package/dist/typebox-helpers.js +19 -0
  102. package/dist/typebox-helpers.js.map +1 -0
  103. package/dist/usage.d.ts +21 -0
  104. package/dist/usage.d.ts.map +1 -0
  105. package/dist/usage.js +33 -0
  106. package/dist/usage.js.map +1 -0
  107. package/dist/verify.d.ts +38 -0
  108. package/dist/verify.d.ts.map +1 -0
  109. package/dist/verify.js +324 -0
  110. package/dist/verify.js.map +1 -0
  111. package/dist/workspace.d.ts +64 -0
  112. package/dist/workspace.d.ts.map +1 -0
  113. package/dist/workspace.js +178 -0
  114. package/dist/workspace.js.map +1 -0
  115. package/package.json +40 -0
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Per-phase workspace isolation ("worktree isolation", STRATEGY H2).
3
+ *
4
+ * By default a phase's `cwd` is a literal path (or inherited from the run).
5
+ * Three reserved keywords ask the runtime to ALLOCATE an isolated working
6
+ * directory for the phase's subagent(s) and tear it down afterwards:
7
+ *
8
+ * - `"temp"` — an ephemeral dir under the OS tmpdir; removed when the
9
+ * phase finishes (success or failure). For scratch work that
10
+ * must not touch the main tree.
11
+ * - `"dedicated"` — a persistent dir under the run's own state directory
12
+ * (`<runs>/ws/<runId>/<phaseId>`); kept after the phase so
13
+ * its artifacts survive for inspection / downstream reuse.
14
+ * Idempotent across resume (same path for the same phase).
15
+ * - `"worktree"` — a real `git worktree` on a throwaway branch, rooted at the
16
+ * run's git repo; removed (`git worktree remove --force`)
17
+ * when the phase finishes. For changes you want to diff /
18
+ * commit / discard in isolation. Falls back to a `temp` dir
19
+ * (fail-open) when the base dir is not a git work tree.
20
+ *
21
+ * Invariants honoured (AGENTS.md "Critical invariants"):
22
+ * - Fail-open: any allocation/teardown error degrades gracefully and never
23
+ * sinks the phase (a failed allocation falls back to the base cwd).
24
+ * - No new deps: OS tmpdir via `fs.mkdtemp`, git via `child_process` (already
25
+ * a peer of the runner). No third-party libraries.
26
+ * - Resume-safe: `dedicated` is deterministic per (runId, phaseId) so a resume
27
+ * reuses the same dir; `temp`/`worktree` are re-allocated cleanly.
28
+ * - Path containment: `dedicated` dirs are contained under the run dir;
29
+ * sanitized phase ids prevent traversal.
30
+ */
31
+ import { spawnSync } from "node:child_process";
32
+ import fs from "node:fs";
33
+ import os from "node:os";
34
+ import path from "node:path";
35
+ /** The reserved `cwd` keywords that trigger workspace allocation. */
36
+ export const WORKSPACE_KEYWORDS = ["temp", "dedicated", "worktree"];
37
+ export function isWorkspaceKeyword(cwd) {
38
+ return cwd === "temp" || cwd === "dedicated" || cwd === "worktree";
39
+ }
40
+ /** A no-op workspace: the phase runs in `baseCwd` and nothing is torn down. */
41
+ function inherited(baseCwd, note) {
42
+ return { dir: baseCwd, kind: "inherited", note, teardown() { } };
43
+ }
44
+ /** Sanitize a phase id for use as a path segment (mirrors safeFlowDirName). */
45
+ function safeSegment(id) {
46
+ const cleaned = id.replace(/[^A-Za-z0-9._-]/g, "_").replace(/^\.+/, "_");
47
+ return cleaned.slice(0, 100) || "phase";
48
+ }
49
+ /**
50
+ * Best-effort recursive delete, restricted to dirs we ourselves allocate
51
+ * (under the OS tmpdir or a run's `ws/` tree). The containment check is
52
+ * defense-in-depth: every `dir` passed here is already constructed by this
53
+ * module, but guarding ensures a future caller can't turn `rmrf` into an
54
+ * arbitrary-path delete.
55
+ */
56
+ function rmrf(dir, allowedRoots) {
57
+ try {
58
+ const resolved = path.resolve(dir);
59
+ const roots = [path.resolve(os.tmpdir()), ...(allowedRoots ?? []).map((r) => path.resolve(r))];
60
+ const contained = roots.some((root) => resolved === root || resolved.startsWith(root + path.sep));
61
+ if (!contained)
62
+ return; // refuse to delete outside our own allocation roots
63
+ fs.rmSync(resolved, { recursive: true, force: true });
64
+ }
65
+ catch {
66
+ /* fail-open: best-effort cleanup */
67
+ }
68
+ }
69
+ /** Is `dir` inside a git work tree? (cheap, no network, fail-closed to false) */
70
+ function isGitRepo(dir) {
71
+ try {
72
+ const r = spawnSync("git", ["-C", dir, "rev-parse", "--is-inside-work-tree"], {
73
+ encoding: "utf-8",
74
+ timeout: 5000,
75
+ });
76
+ return r.status === 0 && String(r.stdout).trim() === "true";
77
+ }
78
+ catch {
79
+ return false;
80
+ }
81
+ }
82
+ /** The absolute toplevel of the git work tree containing `dir`, or undefined. */
83
+ function gitToplevel(dir) {
84
+ try {
85
+ const r = spawnSync("git", ["-C", dir, "rev-parse", "--show-toplevel"], {
86
+ encoding: "utf-8",
87
+ timeout: 5000,
88
+ });
89
+ if (r.status === 0)
90
+ return String(r.stdout).trim() || undefined;
91
+ }
92
+ catch {
93
+ /* fall through */
94
+ }
95
+ return undefined;
96
+ }
97
+ /**
98
+ * Allocate an isolated workspace for a phase. Always returns a usable handle:
99
+ * on any failure it falls back to the base cwd (fail-open) with a `note`.
100
+ */
101
+ export function allocateWorkspace(kind, opts) {
102
+ const { baseCwd, runId, phaseId, runsRoot } = opts;
103
+ const seg = safeSegment(phaseId);
104
+ if (kind === "temp") {
105
+ try {
106
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), `pi-tf-ws-${seg}-`));
107
+ return { dir, kind: "temp", teardown: () => rmrf(dir) };
108
+ }
109
+ catch (e) {
110
+ return inherited(baseCwd, `temp workspace alloc failed: ${errMsg(e)}`);
111
+ }
112
+ }
113
+ if (kind === "dedicated") {
114
+ try {
115
+ // Deterministic per (runId, phaseId) → resume reuses the same dir.
116
+ const dir = path.join(runsRoot, "ws", safeSegment(runId), seg);
117
+ fs.mkdirSync(dir, { recursive: true });
118
+ // Persistent by design: teardown is a no-op (kept for inspection).
119
+ return { dir, kind: "dedicated", teardown() { } };
120
+ }
121
+ catch (e) {
122
+ return inherited(baseCwd, `dedicated workspace alloc failed: ${errMsg(e)}`);
123
+ }
124
+ }
125
+ // kind === "worktree"
126
+ if (!isGitRepo(baseCwd)) {
127
+ // Fail-open: not a git repo → degrade to an ephemeral temp dir so the
128
+ // phase still gets isolation (just without git semantics).
129
+ const fb = allocateWorkspace("temp", opts);
130
+ return { ...fb, note: "worktree requested but base cwd is not a git work tree; used a temp dir instead" };
131
+ }
132
+ const top = gitToplevel(baseCwd) ?? baseCwd;
133
+ const branch = `tf/${safeSegment(runId)}/${seg}-${Date.now().toString(36)}`;
134
+ let dir;
135
+ try {
136
+ dir = fs.mkdtempSync(path.join(os.tmpdir(), `pi-tf-wt-${seg}-`));
137
+ }
138
+ catch (e) {
139
+ const fb = allocateWorkspace("temp", opts);
140
+ return { ...fb, note: `worktree temp path alloc failed: ${errMsg(e)}` };
141
+ }
142
+ // `git worktree add -b <branch> <dir>` creates the dir's contents itself, so
143
+ // remove the empty mkdtemp dir first and let git recreate it.
144
+ rmrf(dir);
145
+ const add = spawnSync("git", ["-C", top, "worktree", "add", "-b", branch, dir, "HEAD"], {
146
+ encoding: "utf-8",
147
+ timeout: 60000,
148
+ });
149
+ if (add.status !== 0) {
150
+ rmrf(dir);
151
+ const fb = allocateWorkspace("temp", opts);
152
+ return {
153
+ ...fb,
154
+ note: `git worktree add failed (${String(add.stderr).trim().slice(0, 200)}); used a temp dir instead`,
155
+ };
156
+ }
157
+ const teardown = () => {
158
+ // Remove the worktree, then delete its throwaway branch. Both best-effort.
159
+ try {
160
+ spawnSync("git", ["-C", top, "worktree", "remove", "--force", dir], { timeout: 30000 });
161
+ }
162
+ catch {
163
+ /* fall through to rmrf */
164
+ }
165
+ rmrf(dir);
166
+ try {
167
+ spawnSync("git", ["-C", top, "branch", "-D", branch], { timeout: 10000 });
168
+ }
169
+ catch {
170
+ /* fail-open: leftover branch is harmless */
171
+ }
172
+ };
173
+ return { dir, kind: "worktree", branch, teardown };
174
+ }
175
+ function errMsg(e) {
176
+ return e instanceof Error ? e.message : String(e);
177
+ }
178
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "taskflow-core",
3
+ "version": "0.1.0",
4
+ "description": "Host-neutral engine for declarative, verifiable task-DAG orchestration — the runtime, DSL, cache, and verification shared by pi-taskflow and codex-taskflow.",
5
+ "keywords": ["taskflow", "dag", "orchestration", "subagents", "workflow"],
6
+ "license": "MIT",
7
+ "author": "heggria <bshengtao@gmail.com>",
8
+ "homepage": "https://github.com/heggria/pi-taskflow#readme",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/heggria/pi-taskflow.git",
12
+ "directory": "packages/taskflow-core"
13
+ },
14
+ "type": "module",
15
+ "main": "./dist/index.js",
16
+ "types": "./dist/index.d.ts",
17
+ "exports": {
18
+ ".": {
19
+ "development": "./src/index.ts",
20
+ "types": "./dist/index.d.ts",
21
+ "default": "./dist/index.js"
22
+ },
23
+ "./*": {
24
+ "development": "./src/*.ts",
25
+ "types": "./dist/*.d.ts",
26
+ "default": "./dist/*.js"
27
+ }
28
+ },
29
+ "files": ["dist"],
30
+ "scripts": {
31
+ "build": "tsc -p tsconfig.build.json && node ../../scripts/copy-agents.mjs",
32
+ "prepublishOnly": "npm run build"
33
+ },
34
+ "publishConfig": {
35
+ "access": "public"
36
+ },
37
+ "peerDependencies": {
38
+ "typebox": "*"
39
+ }
40
+ }