@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,438 @@
1
+ /**
2
+ * Incremental plan construction tools shared via a PlanBuilder state object.
3
+ *
4
+ * The LLM calls add_task repeatedly, optionally remove_task to correct a
5
+ * mistake, and finally finish_plan to commit. Each add_task validates the
6
+ * task in isolation and against previously added tasks so failures are
7
+ * caught at the moment they're introduced, pointing to one task rather
8
+ * than the whole plan.
9
+ */
10
+ import { Tool } from "./base-tool.js";
11
+ import { randomUUID } from "node:crypto";
12
+ // ---------------------------------------------------------------------------
13
+ // Shared state
14
+ // ---------------------------------------------------------------------------
15
+ export class PlanBuilder {
16
+ tasks = [];
17
+ inputKeys;
18
+ committedPlan = null;
19
+ constructor(inputs) {
20
+ this.inputKeys = new Set(Object.keys(inputs ?? {}));
21
+ }
22
+ get currentTasks() {
23
+ return this.tasks;
24
+ }
25
+ get taskCount() {
26
+ return this.tasks.length;
27
+ }
28
+ get plan() {
29
+ return this.committedPlan;
30
+ }
31
+ hasTask(id) {
32
+ return this.tasks.some((t) => t.id === id);
33
+ }
34
+ allStepIds() {
35
+ const ids = new Set();
36
+ for (const t of this.tasks) {
37
+ for (const s of t.steps)
38
+ ids.add(s.id);
39
+ }
40
+ return ids;
41
+ }
42
+ addTask(params) {
43
+ const task = this.buildTask(params);
44
+ const errors = this.validateNewTask(task);
45
+ if (errors.length > 0)
46
+ return { ok: false, errors };
47
+ applySchemaOverrides(task.steps);
48
+ this.tasks.push(task);
49
+ return { ok: true, task };
50
+ }
51
+ removeTask(id) {
52
+ const idx = this.tasks.findIndex((t) => t.id === id);
53
+ if (idx === -1) {
54
+ return { ok: false, error: `Task '${id}' is not in the plan.` };
55
+ }
56
+ this.tasks.splice(idx, 1);
57
+ return { ok: true };
58
+ }
59
+ finish(title) {
60
+ const errors = this.validateFullPlan();
61
+ if (errors.length > 0)
62
+ return { ok: false, errors };
63
+ this.committedPlan = { title, tasks: [...this.tasks] };
64
+ return { ok: true, plan: this.committedPlan };
65
+ }
66
+ buildTask(data) {
67
+ const taskId = typeof data["id"] === "string" && data["id"].length > 0
68
+ ? data["id"]
69
+ : randomUUID();
70
+ const taskTitle = typeof data["title"] === "string" ? data["title"] : "Untitled Task";
71
+ const taskDependsOn = Array.isArray(data["depends_on"])
72
+ ? data["depends_on"]
73
+ : Array.isArray(data["dependsOn"])
74
+ ? data["dependsOn"]
75
+ : [];
76
+ const rawSteps = Array.isArray(data["steps"]) ? data["steps"] : [];
77
+ const steps = rawSteps.map((s) => {
78
+ const raw = s;
79
+ return {
80
+ id: typeof raw["id"] === "string" ? raw["id"] : randomUUID(),
81
+ instructions: typeof raw["instructions"] === "string" ? raw["instructions"] : "",
82
+ completed: false,
83
+ dependsOn: Array.isArray(raw["depends_on"])
84
+ ? raw["depends_on"]
85
+ : Array.isArray(raw["dependsOn"])
86
+ ? raw["dependsOn"]
87
+ : [],
88
+ outputSchema: typeof raw["output_schema"] === "string"
89
+ ? raw["output_schema"]
90
+ : typeof raw["outputSchema"] === "string"
91
+ ? raw["outputSchema"]
92
+ : undefined,
93
+ tools: Array.isArray(raw["tools"])
94
+ ? raw["tools"]
95
+ : undefined,
96
+ logs: []
97
+ };
98
+ });
99
+ return {
100
+ id: taskId,
101
+ title: taskTitle,
102
+ dependsOn: taskDependsOn,
103
+ completed: false,
104
+ steps
105
+ };
106
+ }
107
+ validateNewTask(task) {
108
+ const errors = [];
109
+ if (this.hasTask(task.id)) {
110
+ errors.push(`Task ID '${task.id}' was already added. Use a different ID or call remove_task first.`);
111
+ }
112
+ if (task.steps.length === 0) {
113
+ errors.push(`Task '${task.id}' must contain at least one step.`);
114
+ }
115
+ const stepIds = new Set(task.steps.map((s) => s.id));
116
+ const seenStepIds = new Set();
117
+ for (const step of task.steps) {
118
+ if (seenStepIds.has(step.id)) {
119
+ errors.push(`Task '${task.id}': duplicate step ID '${step.id}' within this task.`);
120
+ }
121
+ seenStepIds.add(step.id);
122
+ }
123
+ const globalStepIds = this.allStepIds();
124
+ for (const step of task.steps) {
125
+ if (globalStepIds.has(step.id)) {
126
+ errors.push(`Task '${task.id}': step ID '${step.id}' collides with a step ID in a previously added task. Step IDs must be globally unique — prefix with the task ID (e.g. '${task.id}_${step.id}').`);
127
+ }
128
+ }
129
+ for (const step of task.steps) {
130
+ for (const dep of step.dependsOn) {
131
+ if (!stepIds.has(dep) && !this.inputKeys.has(dep)) {
132
+ errors.push(`Task '${task.id}': step '${step.id}' depends on '${dep}' which does not exist in this task or as an input key.`);
133
+ }
134
+ }
135
+ }
136
+ if (!checkStepCycles(task)) {
137
+ errors.push(`Task '${task.id}': circular dependency detected among its steps.`);
138
+ }
139
+ const existingTaskIds = new Set(this.tasks.map((t) => t.id));
140
+ for (const dep of task.dependsOn ?? []) {
141
+ if (!existingTaskIds.has(dep)) {
142
+ errors.push(`Task '${task.id}' depends on task '${dep}' which has not been added yet. Add dependency tasks before their dependents, or call remove_task to correct order.`);
143
+ }
144
+ }
145
+ errors.push(...validateTaskSemantics(task));
146
+ return errors;
147
+ }
148
+ validateFullPlan() {
149
+ const errors = [];
150
+ if (this.tasks.length === 0) {
151
+ errors.push("Plan must contain at least one task.");
152
+ return errors;
153
+ }
154
+ if (!checkTaskCycles(this.tasks)) {
155
+ errors.push("Circular dependency detected among tasks.");
156
+ }
157
+ return errors;
158
+ }
159
+ }
160
+ // ---------------------------------------------------------------------------
161
+ // Validation helpers
162
+ // ---------------------------------------------------------------------------
163
+ function checkStepCycles(task) {
164
+ const stepIds = new Set(task.steps.map((s) => s.id));
165
+ const visited = new Set();
166
+ const inStack = new Set();
167
+ const stepMap = new Map(task.steps.map((s) => [s.id, s]));
168
+ const hasCycle = (id) => {
169
+ if (inStack.has(id))
170
+ return true;
171
+ if (visited.has(id))
172
+ return false;
173
+ visited.add(id);
174
+ inStack.add(id);
175
+ const step = stepMap.get(id);
176
+ if (step) {
177
+ for (const dep of step.dependsOn) {
178
+ if (stepIds.has(dep) && hasCycle(dep))
179
+ return true;
180
+ }
181
+ }
182
+ inStack.delete(id);
183
+ return false;
184
+ };
185
+ for (const step of task.steps) {
186
+ if (hasCycle(step.id))
187
+ return false;
188
+ }
189
+ return true;
190
+ }
191
+ function checkTaskCycles(tasks) {
192
+ const taskIds = new Set(tasks.map((t) => t.id));
193
+ const visited = new Set();
194
+ const inStack = new Set();
195
+ const taskMap = new Map(tasks.map((t) => [t.id, t]));
196
+ const hasCycle = (id) => {
197
+ if (inStack.has(id))
198
+ return true;
199
+ if (visited.has(id))
200
+ return false;
201
+ visited.add(id);
202
+ inStack.add(id);
203
+ const task = taskMap.get(id);
204
+ if (task) {
205
+ for (const dep of task.dependsOn ?? []) {
206
+ if (taskIds.has(dep) && hasCycle(dep))
207
+ return true;
208
+ }
209
+ }
210
+ inStack.delete(id);
211
+ return false;
212
+ };
213
+ for (const task of tasks) {
214
+ if (hasCycle(task.id))
215
+ return false;
216
+ }
217
+ return true;
218
+ }
219
+ const LOOPING_PHRASES = [
220
+ "for each",
221
+ "for every",
222
+ "iterate over",
223
+ "loop over",
224
+ "for all"
225
+ ];
226
+ const AGGREGATOR_PATTERNS = [
227
+ "aggregate",
228
+ "compile",
229
+ "combine",
230
+ "merge",
231
+ "final",
232
+ "report"
233
+ ];
234
+ const EXTRACTOR_PATTERNS = [
235
+ "extract",
236
+ "fetch",
237
+ "scrape",
238
+ "crawl",
239
+ "parse",
240
+ "process"
241
+ ];
242
+ function validateTaskSemantics(task) {
243
+ const errors = [];
244
+ const aggregatorIds = new Set();
245
+ for (const step of task.steps) {
246
+ const sid = step.id.toLowerCase();
247
+ if (AGGREGATOR_PATTERNS.some((p) => sid.includes(p))) {
248
+ aggregatorIds.add(step.id);
249
+ }
250
+ }
251
+ for (const step of task.steps) {
252
+ if (aggregatorIds.has(step.id))
253
+ continue;
254
+ const content = step.instructions.toLowerCase();
255
+ for (const phrase of LOOPING_PHRASES) {
256
+ if (content.includes(phrase)) {
257
+ errors.push(`Task '${task.id}': step '${step.id}' contains looping phrase '${phrase}'. Emit one step per item (fan-out) instead.`);
258
+ break;
259
+ }
260
+ }
261
+ }
262
+ const extractorIds = [];
263
+ for (const step of task.steps) {
264
+ const sid = step.id.toLowerCase();
265
+ if (EXTRACTOR_PATTERNS.some((p) => sid.includes(p))) {
266
+ extractorIds.push(step.id);
267
+ }
268
+ }
269
+ if (aggregatorIds.size > 0 && extractorIds.length > 0) {
270
+ for (const aggId of aggregatorIds) {
271
+ const agg = task.steps.find((s) => s.id === aggId);
272
+ if (!agg)
273
+ continue;
274
+ const declared = new Set(agg.dependsOn);
275
+ const missing = extractorIds.filter((eid) => !declared.has(eid));
276
+ if (missing.length > 0) {
277
+ errors.push(`Task '${task.id}': aggregator '${aggId}' must depend on all extractor steps. Missing: ${missing.join(", ")}`);
278
+ }
279
+ }
280
+ }
281
+ return errors;
282
+ }
283
+ function applySchemaOverrides(steps) {
284
+ for (const step of steps) {
285
+ if (!step.outputSchema)
286
+ continue;
287
+ try {
288
+ const parsed = typeof step.outputSchema === "string"
289
+ ? JSON.parse(step.outputSchema)
290
+ : step.outputSchema;
291
+ if (typeof parsed === "object" && parsed !== null) {
292
+ if (!("type" in parsed)) {
293
+ parsed["type"] = "object";
294
+ step.outputSchema = JSON.stringify(parsed);
295
+ }
296
+ }
297
+ }
298
+ catch {
299
+ step.outputSchema = undefined;
300
+ }
301
+ }
302
+ }
303
+ // ---------------------------------------------------------------------------
304
+ // Tools
305
+ // ---------------------------------------------------------------------------
306
+ const ADD_TASK_INPUT_SCHEMA = {
307
+ type: "object",
308
+ properties: {
309
+ id: {
310
+ type: "string",
311
+ description: "Unique task identifier (snake_case). Globally unique across the plan."
312
+ },
313
+ title: { type: "string", description: "Task title" },
314
+ depends_on: {
315
+ type: "array",
316
+ items: { type: "string" },
317
+ description: "Task IDs this task depends on ([] for independent). Dependencies must be added before their dependents."
318
+ },
319
+ steps: {
320
+ type: "array",
321
+ description: "Steps within this task, forming an internal DAG.",
322
+ items: {
323
+ type: "object",
324
+ properties: {
325
+ id: {
326
+ type: "string",
327
+ description: "Step ID, globally unique across the plan. Prefix with task id (e.g. 'research_nlp_s1')."
328
+ },
329
+ instructions: { type: "string" },
330
+ depends_on: {
331
+ type: "array",
332
+ items: { type: "string" }
333
+ },
334
+ output_schema: { type: "string" },
335
+ tools: { type: "array", items: { type: "string" } }
336
+ },
337
+ required: ["id", "instructions", "depends_on"]
338
+ }
339
+ }
340
+ },
341
+ required: ["id", "title", "depends_on", "steps"]
342
+ };
343
+ export class AddTaskTool extends Tool {
344
+ builder;
345
+ name = "add_task";
346
+ description = "Add one task to the plan being built. Validated immediately. " +
347
+ "On validation failure the task is NOT added and errors are returned; " +
348
+ "call add_task again with a corrected task.";
349
+ inputSchema = ADD_TASK_INPUT_SCHEMA;
350
+ constructor(builder) {
351
+ super();
352
+ this.builder = builder;
353
+ }
354
+ async process(_context, params) {
355
+ const result = this.builder.addTask(params);
356
+ if (!result.ok) {
357
+ return { status: "validation_failed", errors: result.errors };
358
+ }
359
+ return {
360
+ status: "task_added",
361
+ id: result.task.id,
362
+ title: result.task.title,
363
+ steps: result.task.steps.length,
364
+ tasksSoFar: this.builder.taskCount
365
+ };
366
+ }
367
+ userMessage(params) {
368
+ const title = typeof params["title"] === "string" ? params["title"] : "task";
369
+ return `Adding task: ${title}`;
370
+ }
371
+ }
372
+ const REMOVE_TASK_INPUT_SCHEMA = {
373
+ type: "object",
374
+ properties: {
375
+ id: { type: "string", description: "Task ID to remove." }
376
+ },
377
+ required: ["id"]
378
+ };
379
+ export class RemoveTaskTool extends Tool {
380
+ builder;
381
+ name = "remove_task";
382
+ description = "Remove a previously added task. Use to correct mistakes " +
383
+ "(e.g. when finish_plan reports a cross-task cycle).";
384
+ inputSchema = REMOVE_TASK_INPUT_SCHEMA;
385
+ constructor(builder) {
386
+ super();
387
+ this.builder = builder;
388
+ }
389
+ async process(_context, params) {
390
+ const id = typeof params["id"] === "string" ? params["id"] : "";
391
+ const result = this.builder.removeTask(id);
392
+ if (!result.ok) {
393
+ return { status: "error", error: result.error };
394
+ }
395
+ return { status: "task_removed", id, tasksSoFar: this.builder.taskCount };
396
+ }
397
+ userMessage(params) {
398
+ const id = typeof params["id"] === "string" ? params["id"] : "";
399
+ return `Removing task: ${id}`;
400
+ }
401
+ }
402
+ const FINISH_PLAN_INPUT_SCHEMA = {
403
+ type: "object",
404
+ properties: {
405
+ title: { type: "string", description: "Overall plan title." }
406
+ },
407
+ required: ["title"]
408
+ };
409
+ export class FinishPlanTool extends Tool {
410
+ builder;
411
+ name = "finish_plan";
412
+ description = "Commit the plan after all tasks have been added. Runs full-plan " +
413
+ "validation. On validation failure, call add_task or remove_task and then " +
414
+ "call finish_plan again.";
415
+ inputSchema = FINISH_PLAN_INPUT_SCHEMA;
416
+ constructor(builder) {
417
+ super();
418
+ this.builder = builder;
419
+ }
420
+ async process(_context, params) {
421
+ const title = typeof params["title"] === "string" ? params["title"] : "Untitled Plan";
422
+ const result = this.builder.finish(title);
423
+ if (!result.ok) {
424
+ return { status: "validation_failed", errors: result.errors };
425
+ }
426
+ return {
427
+ status: "plan_finished",
428
+ title: result.plan.title,
429
+ tasks: result.plan.tasks.length,
430
+ totalSteps: result.plan.tasks.reduce((sum, t) => sum + t.steps.length, 0)
431
+ };
432
+ }
433
+ userMessage(params) {
434
+ const title = typeof params["title"] === "string" ? params["title"] : "plan";
435
+ return `Finalizing plan: ${title}`;
436
+ }
437
+ }
438
+ //# sourceMappingURL=plan-builder-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-builder-tools.js","sourceRoot":"","sources":["../../src/tools/plan-builder-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Web search tools using the SerpAPI service.
3
+ *
4
+ * Port of src/nodetool/agents/tools/serp_tools.py (GoogleSearchTool,
5
+ * GoogleNewsTool, GoogleImagesTool).
6
+ *
7
+ * Internally delegates to the SerpApiProvider abstraction when available.
8
+ */
9
+ import type { ProcessingContext } from "@nodetool-ai/runtime";
10
+ import { Tool } from "./base-tool.js";
11
+ import type { SerpProvider } from "./serp-providers/index.js";
12
+ export declare class GoogleSearchTool extends Tool {
13
+ readonly name = "google_search";
14
+ readonly description = "Search Google to retrieve organic search results via SerpAPI.";
15
+ readonly inputSchema: Record<string, unknown>;
16
+ private _provider?;
17
+ constructor(provider?: SerpProvider);
18
+ process(context: ProcessingContext, params: Record<string, unknown>): Promise<unknown>;
19
+ userMessage(params: Record<string, unknown>): string;
20
+ }
21
+ export declare class GoogleNewsTool extends Tool {
22
+ readonly name = "google_news";
23
+ readonly description = "Search Google News to retrieve live news articles via SerpAPI.";
24
+ readonly inputSchema: Record<string, unknown>;
25
+ private _provider?;
26
+ constructor(provider?: SerpProvider);
27
+ process(context: ProcessingContext, params: Record<string, unknown>): Promise<unknown>;
28
+ userMessage(params: Record<string, unknown>): string;
29
+ }
30
+ export declare class GoogleImagesTool extends Tool {
31
+ readonly name = "google_images";
32
+ readonly description = "Search Google Images to retrieve image results via SerpAPI.";
33
+ readonly inputSchema: Record<string, unknown>;
34
+ private _provider?;
35
+ constructor(provider?: SerpProvider);
36
+ process(context: ProcessingContext, params: Record<string, unknown>): Promise<unknown>;
37
+ userMessage(params: Record<string, unknown>): string;
38
+ }
39
+ //# sourceMappingURL=search-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-tools.d.ts","sourceRoot":"","sources":["../../src/tools/search-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AA0D9D,qBAAa,gBAAiB,SAAQ,IAAI;IACxC,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,WAAW,mEAC8C;IAClE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc3C;IAEF,OAAO,CAAC,SAAS,CAAC,CAAe;gBAErB,QAAQ,CAAC,EAAE,YAAY;IAK7B,OAAO,CACX,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC;IAyCnB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;CAKrD;AAMD,qBAAa,cAAe,SAAQ,IAAI;IACtC,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,WAAW,oEAC+C;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc3C;IAEF,OAAO,CAAC,SAAS,CAAC,CAAe;gBAErB,QAAQ,CAAC,EAAE,YAAY;IAK7B,OAAO,CACX,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC;IA6BnB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;CAKrD;AAMD,qBAAa,gBAAiB,SAAQ,IAAI;IACxC,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,WAAW,iEAC4C;IAChE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAc3C;IAEF,OAAO,CAAC,SAAS,CAAC,CAAe;gBAErB,QAAQ,CAAC,EAAE,YAAY;IAK7B,OAAO,CACX,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC;IA4BnB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;CAKrD"}