@nodetool-ai/agents 0.7.0-rc.11

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 (281) hide show
  1. package/dist/agent-executor.d.ts +62 -0
  2. package/dist/agent-executor.d.ts.map +1 -0
  3. package/dist/agent-executor.js +324 -0
  4. package/dist/agent-executor.js.map +1 -0
  5. package/dist/agent-step-executor.d.ts +28 -0
  6. package/dist/agent-step-executor.d.ts.map +1 -0
  7. package/dist/agent-step-executor.js +99 -0
  8. package/dist/agent-step-executor.js.map +1 -0
  9. package/dist/agent-workflow-runner.d.ts +31 -0
  10. package/dist/agent-workflow-runner.d.ts.map +1 -0
  11. package/dist/agent-workflow-runner.js +124 -0
  12. package/dist/agent-workflow-runner.js.map +1 -0
  13. package/dist/agent.d.ts +115 -0
  14. package/dist/agent.d.ts.map +1 -0
  15. package/dist/agent.js +587 -0
  16. package/dist/agent.js.map +1 -0
  17. package/dist/base-agent.d.ts +42 -0
  18. package/dist/base-agent.d.ts.map +1 -0
  19. package/dist/base-agent.js +29 -0
  20. package/dist/base-agent.js.map +1 -0
  21. package/dist/constants.d.ts +8 -0
  22. package/dist/constants.d.ts.map +1 -0
  23. package/dist/constants.js +8 -0
  24. package/dist/constants.js.map +1 -0
  25. package/dist/graph-builder.d.ts +49 -0
  26. package/dist/graph-builder.d.ts.map +1 -0
  27. package/dist/graph-builder.js +206 -0
  28. package/dist/graph-builder.js.map +1 -0
  29. package/dist/graph-planner.d.ts +56 -0
  30. package/dist/graph-planner.d.ts.map +1 -0
  31. package/dist/graph-planner.js +311 -0
  32. package/dist/graph-planner.js.map +1 -0
  33. package/dist/index.d.ts +79 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +81 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/js-sandbox.d.ts +84 -0
  38. package/dist/js-sandbox.d.ts.map +1 -0
  39. package/dist/js-sandbox.js +654 -0
  40. package/dist/js-sandbox.js.map +1 -0
  41. package/dist/multi-mode-agent.d.ts +86 -0
  42. package/dist/multi-mode-agent.d.ts.map +1 -0
  43. package/dist/multi-mode-agent.js +476 -0
  44. package/dist/multi-mode-agent.js.map +1 -0
  45. package/dist/output-format.d.ts +10 -0
  46. package/dist/output-format.d.ts.map +1 -0
  47. package/dist/output-format.js +17 -0
  48. package/dist/output-format.js.map +1 -0
  49. package/dist/parallel-task-executor.d.ts +87 -0
  50. package/dist/parallel-task-executor.d.ts.map +1 -0
  51. package/dist/parallel-task-executor.js +332 -0
  52. package/dist/parallel-task-executor.js.map +1 -0
  53. package/dist/prompts/graph-planner-prompt.d.ts +48 -0
  54. package/dist/prompts/graph-planner-prompt.d.ts.map +1 -0
  55. package/dist/prompts/graph-planner-prompt.js +180 -0
  56. package/dist/prompts/graph-planner-prompt.js.map +1 -0
  57. package/dist/reject-agentic-provider.d.ts +21 -0
  58. package/dist/reject-agentic-provider.d.ts.map +1 -0
  59. package/dist/reject-agentic-provider.js +32 -0
  60. package/dist/reject-agentic-provider.js.map +1 -0
  61. package/dist/simple-agent.d.ts +29 -0
  62. package/dist/simple-agent.d.ts.map +1 -0
  63. package/dist/simple-agent.js +54 -0
  64. package/dist/simple-agent.js.map +1 -0
  65. package/dist/step-executor.d.ts +162 -0
  66. package/dist/step-executor.d.ts.map +1 -0
  67. package/dist/step-executor.js +1114 -0
  68. package/dist/step-executor.js.map +1 -0
  69. package/dist/sub-agent-planner.d.ts +33 -0
  70. package/dist/sub-agent-planner.d.ts.map +1 -0
  71. package/dist/sub-agent-planner.js +203 -0
  72. package/dist/sub-agent-planner.js.map +1 -0
  73. package/dist/task-executor.d.ts +89 -0
  74. package/dist/task-executor.d.ts.map +1 -0
  75. package/dist/task-executor.js +359 -0
  76. package/dist/task-executor.js.map +1 -0
  77. package/dist/task-planner.d.ts +44 -0
  78. package/dist/task-planner.d.ts.map +1 -0
  79. package/dist/task-planner.js +532 -0
  80. package/dist/task-planner.js.map +1 -0
  81. package/dist/team/db-task-board.d.ts +54 -0
  82. package/dist/team/db-task-board.d.ts.map +1 -0
  83. package/dist/team/db-task-board.js +361 -0
  84. package/dist/team/db-task-board.js.map +1 -0
  85. package/dist/team/edge-message-bus.d.ts +51 -0
  86. package/dist/team/edge-message-bus.d.ts.map +1 -0
  87. package/dist/team/edge-message-bus.js +169 -0
  88. package/dist/team/edge-message-bus.js.map +1 -0
  89. package/dist/team/edge-task-board.d.ts +77 -0
  90. package/dist/team/edge-task-board.d.ts.map +1 -0
  91. package/dist/team/edge-task-board.js +140 -0
  92. package/dist/team/edge-task-board.js.map +1 -0
  93. package/dist/team/index.d.ts +16 -0
  94. package/dist/team/index.d.ts.map +1 -0
  95. package/dist/team/index.js +17 -0
  96. package/dist/team/index.js.map +1 -0
  97. package/dist/team/message-bus.d.ts +58 -0
  98. package/dist/team/message-bus.d.ts.map +1 -0
  99. package/dist/team/message-bus.js +151 -0
  100. package/dist/team/message-bus.js.map +1 -0
  101. package/dist/team/task-board.d.ts +106 -0
  102. package/dist/team/task-board.d.ts.map +1 -0
  103. package/dist/team/task-board.js +370 -0
  104. package/dist/team/task-board.js.map +1 -0
  105. package/dist/team/team-executor.d.ts +72 -0
  106. package/dist/team/team-executor.d.ts.map +1 -0
  107. package/dist/team/team-executor.js +466 -0
  108. package/dist/team/team-executor.js.map +1 -0
  109. package/dist/team/team-tools.d.ts +252 -0
  110. package/dist/team/team-tools.d.ts.map +1 -0
  111. package/dist/team/team-tools.js +412 -0
  112. package/dist/team/team-tools.js.map +1 -0
  113. package/dist/team/types.d.ts +198 -0
  114. package/dist/team/types.d.ts.map +1 -0
  115. package/dist/team/types.js +8 -0
  116. package/dist/team/types.js.map +1 -0
  117. package/dist/tools/add-edge-tool.d.ts +18 -0
  118. package/dist/tools/add-edge-tool.d.ts.map +1 -0
  119. package/dist/tools/add-edge-tool.js +92 -0
  120. package/dist/tools/add-edge-tool.js.map +1 -0
  121. package/dist/tools/add-node-tool.d.ts +22 -0
  122. package/dist/tools/add-node-tool.d.ts.map +1 -0
  123. package/dist/tools/add-node-tool.js +128 -0
  124. package/dist/tools/add-node-tool.js.map +1 -0
  125. package/dist/tools/asset-tools.d.ts +58 -0
  126. package/dist/tools/asset-tools.d.ts.map +1 -0
  127. package/dist/tools/asset-tools.js +191 -0
  128. package/dist/tools/asset-tools.js.map +1 -0
  129. package/dist/tools/base-tool.d.ts +25 -0
  130. package/dist/tools/base-tool.d.ts.map +1 -0
  131. package/dist/tools/base-tool.js +24 -0
  132. package/dist/tools/base-tool.js.map +1 -0
  133. package/dist/tools/browser-tools.d.ts +32 -0
  134. package/dist/tools/browser-tools.d.ts.map +1 -0
  135. package/dist/tools/browser-tools.js +208 -0
  136. package/dist/tools/browser-tools.js.map +1 -0
  137. package/dist/tools/calculator-tool.d.ts +24 -0
  138. package/dist/tools/calculator-tool.d.ts.map +1 -0
  139. package/dist/tools/calculator-tool.js +64 -0
  140. package/dist/tools/calculator-tool.js.map +1 -0
  141. package/dist/tools/claude-code-tools.d.ts +96 -0
  142. package/dist/tools/claude-code-tools.d.ts.map +1 -0
  143. package/dist/tools/claude-code-tools.js +463 -0
  144. package/dist/tools/claude-code-tools.js.map +1 -0
  145. package/dist/tools/code-tools.d.ts +26 -0
  146. package/dist/tools/code-tools.d.ts.map +1 -0
  147. package/dist/tools/code-tools.js +82 -0
  148. package/dist/tools/code-tools.js.map +1 -0
  149. package/dist/tools/control-tool.d.ts +47 -0
  150. package/dist/tools/control-tool.d.ts.map +1 -0
  151. package/dist/tools/control-tool.js +101 -0
  152. package/dist/tools/control-tool.js.map +1 -0
  153. package/dist/tools/create-plan-tool.d.ts +29 -0
  154. package/dist/tools/create-plan-tool.d.ts.map +1 -0
  155. package/dist/tools/create-plan-tool.js +355 -0
  156. package/dist/tools/create-plan-tool.js.map +1 -0
  157. package/dist/tools/create-task-tool.d.ts +28 -0
  158. package/dist/tools/create-task-tool.d.ts.map +1 -0
  159. package/dist/tools/create-task-tool.js +254 -0
  160. package/dist/tools/create-task-tool.js.map +1 -0
  161. package/dist/tools/dataseo-tools.d.ts +38 -0
  162. package/dist/tools/dataseo-tools.d.ts.map +1 -0
  163. package/dist/tools/dataseo-tools.js +329 -0
  164. package/dist/tools/dataseo-tools.js.map +1 -0
  165. package/dist/tools/email-tools.d.ts +76 -0
  166. package/dist/tools/email-tools.d.ts.map +1 -0
  167. package/dist/tools/email-tools.js +259 -0
  168. package/dist/tools/email-tools.js.map +1 -0
  169. package/dist/tools/filesystem-tools.d.ts +77 -0
  170. package/dist/tools/filesystem-tools.d.ts.map +1 -0
  171. package/dist/tools/filesystem-tools.js +334 -0
  172. package/dist/tools/filesystem-tools.js.map +1 -0
  173. package/dist/tools/find-model-tool.d.ts +25 -0
  174. package/dist/tools/find-model-tool.d.ts.map +1 -0
  175. package/dist/tools/find-model-tool.js +236 -0
  176. package/dist/tools/find-model-tool.js.map +1 -0
  177. package/dist/tools/finish-graph-tool.d.ts +23 -0
  178. package/dist/tools/finish-graph-tool.d.ts.map +1 -0
  179. package/dist/tools/finish-graph-tool.js +46 -0
  180. package/dist/tools/finish-graph-tool.js.map +1 -0
  181. package/dist/tools/finish-step-tool.d.ts +16 -0
  182. package/dist/tools/finish-step-tool.d.ts.map +1 -0
  183. package/dist/tools/finish-step-tool.js +68 -0
  184. package/dist/tools/finish-step-tool.js.map +1 -0
  185. package/dist/tools/google-tools.d.ts +44 -0
  186. package/dist/tools/google-tools.d.ts.map +1 -0
  187. package/dist/tools/google-tools.js +176 -0
  188. package/dist/tools/google-tools.js.map +1 -0
  189. package/dist/tools/http-tools.d.ts +56 -0
  190. package/dist/tools/http-tools.d.ts.map +1 -0
  191. package/dist/tools/http-tools.js +180 -0
  192. package/dist/tools/http-tools.js.map +1 -0
  193. package/dist/tools/js-code-tool.d.ts +30 -0
  194. package/dist/tools/js-code-tool.d.ts.map +1 -0
  195. package/dist/tools/js-code-tool.js +98 -0
  196. package/dist/tools/js-code-tool.js.map +1 -0
  197. package/dist/tools/local-get-node-info-tool.d.ts +19 -0
  198. package/dist/tools/local-get-node-info-tool.d.ts.map +1 -0
  199. package/dist/tools/local-get-node-info-tool.js +75 -0
  200. package/dist/tools/local-get-node-info-tool.js.map +1 -0
  201. package/dist/tools/local-list-nodes-tool.d.ts +19 -0
  202. package/dist/tools/local-list-nodes-tool.d.ts.map +1 -0
  203. package/dist/tools/local-list-nodes-tool.js +69 -0
  204. package/dist/tools/local-list-nodes-tool.js.map +1 -0
  205. package/dist/tools/local-search-nodes-tool.d.ts +21 -0
  206. package/dist/tools/local-search-nodes-tool.d.ts.map +1 -0
  207. package/dist/tools/local-search-nodes-tool.js +111 -0
  208. package/dist/tools/local-search-nodes-tool.js.map +1 -0
  209. package/dist/tools/math-tools.d.ts +156 -0
  210. package/dist/tools/math-tools.d.ts.map +1 -0
  211. package/dist/tools/math-tools.js +422 -0
  212. package/dist/tools/math-tools.js.map +1 -0
  213. package/dist/tools/mcp-tools.d.ts +413 -0
  214. package/dist/tools/mcp-tools.d.ts.map +1 -0
  215. package/dist/tools/mcp-tools.js +618 -0
  216. package/dist/tools/mcp-tools.js.map +1 -0
  217. package/dist/tools/media-tools.d.ts +277 -0
  218. package/dist/tools/media-tools.d.ts.map +1 -0
  219. package/dist/tools/media-tools.js +682 -0
  220. package/dist/tools/media-tools.js.map +1 -0
  221. package/dist/tools/model-tools.d.ts +25 -0
  222. package/dist/tools/model-tools.d.ts.map +1 -0
  223. package/dist/tools/model-tools.js +48 -0
  224. package/dist/tools/model-tools.js.map +1 -0
  225. package/dist/tools/openai-tools.d.ts +73 -0
  226. package/dist/tools/openai-tools.d.ts.map +1 -0
  227. package/dist/tools/openai-tools.js +193 -0
  228. package/dist/tools/openai-tools.js.map +1 -0
  229. package/dist/tools/pdf-tools.d.ts +152 -0
  230. package/dist/tools/pdf-tools.d.ts.map +1 -0
  231. package/dist/tools/pdf-tools.js +339 -0
  232. package/dist/tools/pdf-tools.js.map +1 -0
  233. package/dist/tools/plan-builder-tools.d.ts +72 -0
  234. package/dist/tools/plan-builder-tools.d.ts.map +1 -0
  235. package/dist/tools/plan-builder-tools.js +438 -0
  236. package/dist/tools/plan-builder-tools.js.map +1 -0
  237. package/dist/tools/search-tools.d.ts +39 -0
  238. package/dist/tools/search-tools.d.ts.map +1 -0
  239. package/dist/tools/search-tools.js +218 -0
  240. package/dist/tools/search-tools.js.map +1 -0
  241. package/dist/tools/serp-providers/dataforseo-provider.d.ts +14 -0
  242. package/dist/tools/serp-providers/dataforseo-provider.d.ts.map +1 -0
  243. package/dist/tools/serp-providers/dataforseo-provider.js +114 -0
  244. package/dist/tools/serp-providers/dataforseo-provider.js.map +1 -0
  245. package/dist/tools/serp-providers/index.d.ts +35 -0
  246. package/dist/tools/serp-providers/index.d.ts.map +1 -0
  247. package/dist/tools/serp-providers/index.js +14 -0
  248. package/dist/tools/serp-providers/index.js.map +1 -0
  249. package/dist/tools/serp-providers/serpapi-provider.d.ts +18 -0
  250. package/dist/tools/serp-providers/serpapi-provider.d.ts.map +1 -0
  251. package/dist/tools/serp-providers/serpapi-provider.js +66 -0
  252. package/dist/tools/serp-providers/serpapi-provider.js.map +1 -0
  253. package/dist/tools/tool-registry.d.ts +9 -0
  254. package/dist/tools/tool-registry.d.ts.map +1 -0
  255. package/dist/tools/tool-registry.js +17 -0
  256. package/dist/tools/tool-registry.js.map +1 -0
  257. package/dist/tools/vector-tools.d.ts +224 -0
  258. package/dist/tools/vector-tools.d.ts.map +1 -0
  259. package/dist/tools/vector-tools.js +582 -0
  260. package/dist/tools/vector-tools.js.map +1 -0
  261. package/dist/tools/workspace-tools.d.ts +58 -0
  262. package/dist/tools/workspace-tools.d.ts.map +1 -0
  263. package/dist/tools/workspace-tools.js +152 -0
  264. package/dist/tools/workspace-tools.js.map +1 -0
  265. package/dist/types.d.ts +65 -0
  266. package/dist/types.d.ts.map +1 -0
  267. package/dist/types.js +5 -0
  268. package/dist/types.js.map +1 -0
  269. package/dist/utils/json-parser.d.ts +15 -0
  270. package/dist/utils/json-parser.d.ts.map +1 -0
  271. package/dist/utils/json-parser.js +78 -0
  272. package/dist/utils/json-parser.js.map +1 -0
  273. package/dist/utils/remove-base64-images.d.ts +12 -0
  274. package/dist/utils/remove-base64-images.d.ts.map +1 -0
  275. package/dist/utils/remove-base64-images.js +20 -0
  276. package/dist/utils/remove-base64-images.js.map +1 -0
  277. package/dist/utils/wrap-generators-parallel.d.ts +11 -0
  278. package/dist/utils/wrap-generators-parallel.d.ts.map +1 -0
  279. package/dist/utils/wrap-generators-parallel.js +38 -0
  280. package/dist/utils/wrap-generators-parallel.js.map +1 -0
  281. package/package.json +65 -0
@@ -0,0 +1,359 @@
1
+ /**
2
+ * TaskExecutor -- orchestrates execution of a complete Task plan.
3
+ *
4
+ * Port of src/nodetool/agents/task_executor.py
5
+ *
6
+ * Iteratively finds steps whose dependencies are satisfied, runs
7
+ * StepExecutor for each, and collects results until all steps complete
8
+ * or the safety limit is reached.
9
+ *
10
+ * Process-mode steps automatically fan out over list inputs produced by
11
+ * a preceding discover step. Each item is rendered into the step's
12
+ * `perItemInstructions` template and executed as an ephemeral step.
13
+ * Results are aggregated into a list that downstream aggregate steps consume.
14
+ */
15
+ import { createHash } from "node:crypto";
16
+ import { createLogger } from "@nodetool-ai/config";
17
+ const log = createLogger("nodetool.agents.task-executor");
18
+ import { StepExecutor } from "./step-executor.js";
19
+ import { DEFAULT_TOKEN_LIMIT } from "./constants.js";
20
+ const DEFAULT_MAX_STEPS = 50;
21
+ const DEFAULT_MAX_STEP_ITERATIONS = 10;
22
+ export class TaskExecutor {
23
+ provider;
24
+ model;
25
+ tools;
26
+ task;
27
+ context;
28
+ inputs;
29
+ systemPrompt;
30
+ maxSteps;
31
+ maxStepIterations;
32
+ maxTokenLimit;
33
+ finalStepId;
34
+ parallelExecution;
35
+ _finishStepId;
36
+ constructor(opts) {
37
+ this.provider = opts.provider;
38
+ this.model = opts.model;
39
+ this.tools = opts.tools;
40
+ this.task = opts.task;
41
+ this.context = opts.context;
42
+ this.inputs = opts.inputs ?? {};
43
+ this.systemPrompt = opts.systemPrompt;
44
+ this.maxSteps = opts.maxSteps ?? DEFAULT_MAX_STEPS;
45
+ this.maxStepIterations =
46
+ opts.maxStepIterations ?? DEFAULT_MAX_STEP_ITERATIONS;
47
+ this.maxTokenLimit = opts.maxTokenLimit ?? DEFAULT_TOKEN_LIMIT;
48
+ this.finalStepId = opts.finalStepId;
49
+ this.parallelExecution = opts.parallelExecution ?? false;
50
+ }
51
+ /**
52
+ * Execute all steps in the task plan, respecting dependency order.
53
+ * Supports both sequential and parallel execution modes.
54
+ */
55
+ async *executeTasks() {
56
+ // Seed inputs into context
57
+ for (const [key, value] of Object.entries(this.inputs)) {
58
+ this.context.set(key, value);
59
+ }
60
+ // Auto-detect finish step (last step) like Python does
61
+ this._finishStepId =
62
+ this.finalStepId ??
63
+ (this.task.steps.length > 0
64
+ ? this.task.steps[this.task.steps.length - 1].id
65
+ : undefined);
66
+ log.info("Task execution started", {
67
+ title: this.task.title,
68
+ steps: this.task.steps.length
69
+ });
70
+ let stepsTaken = 0;
71
+ while (!this.allTasksComplete() && stepsTaken < this.maxSteps) {
72
+ stepsTaken++;
73
+ let executableSteps = this.getExecutableSteps();
74
+ executableSteps = this.maybeDeferFinishStep(executableSteps);
75
+ if (executableSteps.length === 0) {
76
+ if (!this.allTasksComplete()) {
77
+ yield {
78
+ type: "chunk",
79
+ content: "\nNo executable steps but not all complete. Possible dependency issues.\n",
80
+ done: false
81
+ };
82
+ }
83
+ break;
84
+ }
85
+ log.debug("Dispatching steps", {
86
+ stepIds: executableSteps.map((s) => s.id)
87
+ });
88
+ // Separate process-mode steps from normal steps
89
+ const processSteps = executableSteps.filter((s) => s.mode === "process");
90
+ const normalSteps = executableSteps.filter((s) => s.mode !== "process");
91
+ // Handle process-mode steps with fan-out
92
+ for (const pStep of processSteps) {
93
+ yield* this.handleProcessStep(pStep);
94
+ }
95
+ // Create step executors for normal steps
96
+ const stepGenerators = normalSteps.map((step) => {
97
+ const executor = new StepExecutor({
98
+ task: this.task,
99
+ step,
100
+ context: this.context,
101
+ provider: this.provider,
102
+ model: this.model,
103
+ tools: [...this.tools],
104
+ systemPrompt: this.systemPrompt,
105
+ maxTokenLimit: this.maxTokenLimit,
106
+ maxIterations: this.maxStepIterations,
107
+ useFinishTask: this.isFinishStep(step)
108
+ });
109
+ return executor.execute();
110
+ });
111
+ if (this.parallelExecution && stepGenerators.length > 1) {
112
+ // Execute all steps concurrently, merging yielded messages
113
+ yield* mergeAsyncGenerators(stepGenerators);
114
+ }
115
+ else {
116
+ // Execute steps sequentially
117
+ for (const generator of stepGenerators) {
118
+ for await (const message of generator) {
119
+ yield message;
120
+ }
121
+ }
122
+ }
123
+ }
124
+ }
125
+ /**
126
+ * Produce a short deterministic hash for a value (used in ephemeral step IDs).
127
+ */
128
+ shortHash(value) {
129
+ const data = JSON.stringify(value, (_key, val) => {
130
+ if (val != null && typeof val === "object" && !Array.isArray(val)) {
131
+ const sorted = {};
132
+ for (const k of Object.keys(val).sort()) {
133
+ sorted[k] = val[k];
134
+ }
135
+ return sorted;
136
+ }
137
+ return val;
138
+ });
139
+ return createHash("sha1").update(data).digest("hex").slice(0, 12);
140
+ }
141
+ /**
142
+ * Handle a process-mode step by fanning out over list inputs.
143
+ * Creates ephemeral steps for each item in the discover step's result
144
+ * and aggregates the outputs into a list stored in context.
145
+ */
146
+ async *handleProcessStep(step) {
147
+ const discoverStepId = step.dependsOn[0];
148
+ if (!discoverStepId) {
149
+ log.warn("Process step has no dependencies, skipping fan-out", {
150
+ stepId: step.id
151
+ });
152
+ step.completed = true;
153
+ return;
154
+ }
155
+ let discoverResult = this.context.get(discoverStepId);
156
+ if (discoverResult === undefined || discoverResult === null) {
157
+ log.warn("Discover step result is null/undefined, skipping fan-out", {
158
+ stepId: step.id
159
+ });
160
+ step.completed = true;
161
+ this.context.set(step.id, []);
162
+ step.endTime = Date.now();
163
+ return;
164
+ }
165
+ if (!Array.isArray(discoverResult)) {
166
+ log.warn("Discover step result is not an array, wrapping as single-item list", {
167
+ stepId: step.id,
168
+ resultType: typeof discoverResult
169
+ });
170
+ discoverResult = [discoverResult];
171
+ }
172
+ const items = discoverResult;
173
+ const template = step.perItemInstructions ?? step.instructions;
174
+ const perItemSchema = step.perItemSchema;
175
+ log.info("Fan-out processing", {
176
+ stepId: step.id,
177
+ itemCount: items.length
178
+ });
179
+ // Create ephemeral steps for each item
180
+ const ephemeralSteps = items.map((item) => {
181
+ let instructions = template;
182
+ if (typeof item === "object" && item !== null) {
183
+ for (const [key, value] of Object.entries(item)) {
184
+ const escapedKey = key.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
185
+ const strValue = String(value);
186
+ instructions = instructions.replace(new RegExp(`\\{${escapedKey}\\}`, "g"), () => strValue);
187
+ }
188
+ }
189
+ else {
190
+ const strItem = String(item);
191
+ instructions = instructions.replace(/\{item\}/g, () => strItem);
192
+ }
193
+ const hash = this.shortHash(item);
194
+ return {
195
+ id: `${step.id}_item_${hash}`,
196
+ instructions,
197
+ completed: false,
198
+ dependsOn: [],
199
+ logs: [],
200
+ outputSchema: perItemSchema ?? step.outputSchema
201
+ };
202
+ });
203
+ // Create step executors for each ephemeral step
204
+ const generators = ephemeralSteps.map((ephStep) => {
205
+ const executor = new StepExecutor({
206
+ task: this.task,
207
+ step: ephStep,
208
+ context: this.context,
209
+ provider: this.provider,
210
+ model: this.model,
211
+ tools: [...this.tools],
212
+ systemPrompt: this.systemPrompt,
213
+ maxTokenLimit: this.maxTokenLimit,
214
+ maxIterations: this.maxStepIterations,
215
+ useFinishTask: false
216
+ });
217
+ return executor.execute();
218
+ });
219
+ // Execute and collect results
220
+ const results = [];
221
+ if (this.parallelExecution && generators.length > 1) {
222
+ for await (const msg of mergeAsyncGenerators(generators)) {
223
+ if (msg.type === "step_result") {
224
+ results.push(msg.result);
225
+ }
226
+ yield msg;
227
+ }
228
+ }
229
+ else {
230
+ for (const gen of generators) {
231
+ for await (const msg of gen) {
232
+ if (msg.type === "step_result") {
233
+ results.push(msg.result);
234
+ }
235
+ yield msg;
236
+ }
237
+ }
238
+ }
239
+ // Store aggregated results and mark complete
240
+ this.context.set(step.id, results);
241
+ step.completed = true;
242
+ step.endTime = Date.now();
243
+ log.info("Fan-out complete", {
244
+ stepId: step.id,
245
+ resultCount: results.length
246
+ });
247
+ }
248
+ /**
249
+ * Check if all steps in the task are completed.
250
+ */
251
+ allTasksComplete() {
252
+ return this.task.steps.every((step) => step.completed);
253
+ }
254
+ /**
255
+ * Find steps whose dependencies are all satisfied (completed).
256
+ */
257
+ getExecutableSteps() {
258
+ const completedIds = new Set(this.task.steps.filter((s) => s.completed).map((s) => s.id));
259
+ // Also count inputs as satisfied dependencies
260
+ for (const key of Object.keys(this.inputs)) {
261
+ completedIds.add(key);
262
+ }
263
+ return this.task.steps.filter((step) => !step.completed &&
264
+ !this.isStepRunning(step) &&
265
+ step.dependsOn.every((dep) => completedIds.has(dep)));
266
+ }
267
+ /**
268
+ * Check if a step is currently running (started but not finished).
269
+ * Mirrors Python's Step.is_running().
270
+ */
271
+ isStepRunning(step) {
272
+ return step.startTime != null && step.endTime == null;
273
+ }
274
+ /**
275
+ * Check if a step is the designated finish/aggregation step.
276
+ */
277
+ isFinishStep(step) {
278
+ if (this._finishStepId) {
279
+ return step.id === this._finishStepId;
280
+ }
281
+ return (this.task.steps.length > 0 &&
282
+ step === this.task.steps[this.task.steps.length - 1]);
283
+ }
284
+ /**
285
+ * Defer the finish step until all other steps are complete.
286
+ * This ensures the final aggregation step runs last.
287
+ */
288
+ maybeDeferFinishStep(executableSteps) {
289
+ if (!this._finishStepId)
290
+ return executableSteps;
291
+ const finishReady = executableSteps.some((s) => s.id === this._finishStepId);
292
+ if (!finishReady)
293
+ return executableSteps;
294
+ const otherPending = this.task.steps.some((s) => !s.completed && s.id !== this._finishStepId);
295
+ if (!otherPending)
296
+ return executableSteps;
297
+ return executableSteps.filter((s) => s.id !== this._finishStepId);
298
+ }
299
+ }
300
+ // ---------------------------------------------------------------------------
301
+ // Async generator merge utility (TS equivalent of wrap_generators_parallel)
302
+ // ---------------------------------------------------------------------------
303
+ async function* mergeAsyncGenerators(generators) {
304
+ // Channel: a queue of resolved values with a promise-based pull mechanism
305
+ const queue = [];
306
+ let activeCount = generators.length;
307
+ let resolve = null;
308
+ let firstError = undefined;
309
+ function notify() {
310
+ if (resolve) {
311
+ const r = resolve;
312
+ resolve = null;
313
+ r();
314
+ }
315
+ }
316
+ // Start a consumer task for each generator
317
+ const tasks = generators.map(async (gen) => {
318
+ try {
319
+ for await (const item of gen) {
320
+ queue.push(item);
321
+ notify();
322
+ }
323
+ }
324
+ catch (e) {
325
+ if (firstError === undefined)
326
+ firstError = e;
327
+ }
328
+ finally {
329
+ activeCount--;
330
+ notify();
331
+ }
332
+ });
333
+ // Yield items as they arrive
334
+ while (activeCount > 0 || queue.length > 0) {
335
+ if (queue.length > 0) {
336
+ yield queue.shift();
337
+ }
338
+ else if (activeCount > 0) {
339
+ // Set resolve BEFORE checking queue again to avoid race condition
340
+ // where an item is pushed between the check and the await.
341
+ const waitPromise = new Promise((r) => {
342
+ resolve = r;
343
+ });
344
+ // Re-check after setting resolve — item may have arrived between
345
+ // the outer check and setting resolve.
346
+ if (queue.length > 0) {
347
+ resolve = null;
348
+ continue;
349
+ }
350
+ await waitPromise;
351
+ }
352
+ }
353
+ // Wait for all producer promises to settle
354
+ await Promise.allSettled(tasks);
355
+ if (firstError !== undefined) {
356
+ throw firstError;
357
+ }
358
+ }
359
+ //# sourceMappingURL=task-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-executor.js","sourceRoot":"","sources":["../src/task-executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * TaskPlanner -- decomposes an objective into a Task or TaskPlan via tool calls.
3
+ *
4
+ * planMultiTask() builds the plan incrementally: the LLM calls add_task one
5
+ * task at a time, with per-task validation. Progress is yielded as task_update
6
+ * events (TaskPlanned) so clients can watch the plan take shape in real time.
7
+ *
8
+ * plan() (single-task) keeps the original one-shot create_task tool.
9
+ */
10
+ import type { BaseProvider, ProcessingContext } from "@nodetool-ai/runtime";
11
+ import { type ProcessingMessage } from "@nodetool-ai/protocol";
12
+ import type { Task, TaskPlan } from "./types.js";
13
+ import type { Tool } from "./tools/base-tool.js";
14
+ export interface TaskPlannerOptions {
15
+ provider: BaseProvider;
16
+ model: string;
17
+ reasoningModel?: string;
18
+ tools?: Tool[];
19
+ systemPrompt?: string;
20
+ outputSchema?: Record<string, unknown>;
21
+ inputs?: Record<string, unknown>;
22
+ maxRetries?: number;
23
+ threadId?: string;
24
+ }
25
+ export declare class TaskPlanner {
26
+ private provider;
27
+ private model;
28
+ readonly reasoningModel: string;
29
+ private tools;
30
+ private systemPrompt;
31
+ private outputSchema;
32
+ private inputs;
33
+ private maxRetries;
34
+ private threadId?;
35
+ constructor(opts: TaskPlannerOptions);
36
+ plan(objective: string, context: ProcessingContext): AsyncGenerator<ProcessingMessage, Task | null>;
37
+ private _planImpl;
38
+ planMultiTask(objective: string, context: ProcessingContext): AsyncGenerator<ProcessingMessage, TaskPlan | null>;
39
+ private _planMultiTaskImpl;
40
+ private callSingleTaskTool;
41
+ private taskPlannedEvent;
42
+ private formatToolsInfo;
43
+ }
44
+ //# sourceMappingURL=task-planner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-planner.d.ts","sourceRoot":"","sources":["../src/task-planner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EAGlB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAEL,KAAK,iBAAiB,EAKvB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAQ,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AA2GjD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAe;IAC/B,OAAO,CAAC,KAAK,CAAS;IACtB,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAsC;IAC1D,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,IAAI,EAAE,kBAAkB;IAgB7B,IAAI,CACT,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,cAAc,CAAC,iBAAiB,EAAE,IAAI,GAAG,IAAI,CAAC;YAclC,SAAS;IAyGjB,aAAa,CAClB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,cAAc,CAAC,iBAAiB,EAAE,QAAQ,GAAG,IAAI,CAAC;YActC,kBAAkB;YA6OlB,kBAAkB;IAmFjC,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,eAAe;CA0BxB"}