@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,370 @@
1
+ /**
2
+ * TaskBoard — Shared task pool with atomic claiming, dependency DAG,
3
+ * and skill-based matching.
4
+ *
5
+ * Follows the A2A task lifecycle: open → claimed → working → done/failed.
6
+ * Agents pull tasks (claim-based) rather than being assigned (push-based).
7
+ */
8
+ import { randomUUID } from "node:crypto";
9
+ export class TaskBoard {
10
+ tasks = new Map();
11
+ listeners = [];
12
+ /** Lock set for atomic claiming — taskId currently being claimed. */
13
+ claimLocks = new Set();
14
+ /**
15
+ * Create a new task on the board.
16
+ */
17
+ create(opts) {
18
+ const now = Date.now();
19
+ const task = {
20
+ id: randomUUID(),
21
+ title: opts.title,
22
+ description: opts.description,
23
+ status: "open",
24
+ createdBy: opts.createdBy,
25
+ dependsOn: opts.dependsOn ?? [],
26
+ requiredSkills: opts.requiredSkills ?? [],
27
+ priority: opts.priority ?? 5,
28
+ artifacts: [],
29
+ parentTaskId: opts.parentTaskId,
30
+ createdAt: now,
31
+ updatedAt: now
32
+ };
33
+ // Validate dependencies exist
34
+ for (const depId of task.dependsOn) {
35
+ if (!this.tasks.has(depId)) {
36
+ throw new Error(`Dependency task ${depId} not found`);
37
+ }
38
+ }
39
+ // Cycle detection
40
+ if (task.dependsOn.length > 0) {
41
+ this.tasks.set(task.id, task); // temporarily add
42
+ if (this.hasCycle()) {
43
+ this.tasks.delete(task.id);
44
+ throw new Error(`Adding task ${task.id} would create a dependency cycle`);
45
+ }
46
+ }
47
+ else {
48
+ this.tasks.set(task.id, task);
49
+ }
50
+ this.emit({ type: "task_created", task: { ...task }, timestamp: now });
51
+ return { ...task };
52
+ }
53
+ /**
54
+ * Atomically claim an open task. Returns true if successful.
55
+ * Fails if task is not open, dependencies aren't met, or another agent claimed it first.
56
+ */
57
+ claim(taskId, agentId) {
58
+ // Atomic lock check
59
+ if (this.claimLocks.has(taskId))
60
+ return false;
61
+ this.claimLocks.add(taskId);
62
+ try {
63
+ const task = this.tasks.get(taskId);
64
+ if (!task || task.status !== "open")
65
+ return false;
66
+ // Check all dependencies are done
67
+ if (!this.dependenciesMet(taskId))
68
+ return false;
69
+ task.status = "claimed";
70
+ task.claimedBy = agentId;
71
+ task.updatedAt = Date.now();
72
+ this.emit({
73
+ type: "task_claimed",
74
+ taskId,
75
+ agentId,
76
+ timestamp: task.updatedAt
77
+ });
78
+ return true;
79
+ }
80
+ finally {
81
+ this.claimLocks.delete(taskId);
82
+ }
83
+ }
84
+ /**
85
+ * Mark a claimed task as actively being worked on.
86
+ */
87
+ startWork(taskId, agentId) {
88
+ const task = this.tasks.get(taskId);
89
+ if (!task || task.claimedBy !== agentId || task.status !== "claimed") {
90
+ return false;
91
+ }
92
+ task.status = "working";
93
+ task.updatedAt = Date.now();
94
+ this.emit({
95
+ type: "task_working",
96
+ taskId,
97
+ agentId,
98
+ timestamp: task.updatedAt
99
+ });
100
+ return true;
101
+ }
102
+ /**
103
+ * Complete a task with optional result and artifacts.
104
+ */
105
+ complete(taskId, opts) {
106
+ const task = this.tasks.get(taskId);
107
+ if (!task || (task.status !== "working" && task.status !== "claimed")) {
108
+ return false;
109
+ }
110
+ task.status = "done";
111
+ task.result = opts?.result;
112
+ if (opts?.artifacts) {
113
+ task.artifacts.push(...opts.artifacts);
114
+ }
115
+ task.updatedAt = Date.now();
116
+ this.emit({
117
+ type: "task_completed",
118
+ taskId,
119
+ artifacts: task.artifacts,
120
+ timestamp: task.updatedAt
121
+ });
122
+ return true;
123
+ }
124
+ /**
125
+ * Mark a task as failed.
126
+ */
127
+ fail(taskId, reason) {
128
+ const task = this.tasks.get(taskId);
129
+ if (!task || task.status === "done" || task.status === "failed") {
130
+ return false;
131
+ }
132
+ task.status = "failed";
133
+ task.failureReason = reason;
134
+ task.updatedAt = Date.now();
135
+ this.emit({
136
+ type: "task_failed",
137
+ taskId,
138
+ reason,
139
+ timestamp: task.updatedAt
140
+ });
141
+ return true;
142
+ }
143
+ /**
144
+ * Mark a task as blocked (waiting on external input or another agent).
145
+ */
146
+ block(taskId) {
147
+ const task = this.tasks.get(taskId);
148
+ if (!task || task.status === "done" || task.status === "failed") {
149
+ return false;
150
+ }
151
+ task.status = "blocked";
152
+ task.updatedAt = Date.now();
153
+ return true;
154
+ }
155
+ /**
156
+ * Unblock a task back to open (so it can be reclaimed).
157
+ */
158
+ unblock(taskId) {
159
+ const task = this.tasks.get(taskId);
160
+ if (!task || task.status !== "blocked")
161
+ return false;
162
+ task.status = "open";
163
+ task.claimedBy = undefined;
164
+ task.updatedAt = Date.now();
165
+ return true;
166
+ }
167
+ /**
168
+ * Decompose a task into subtasks. Parent task is marked blocked
169
+ * until all subtasks complete.
170
+ */
171
+ decompose(parentTaskId, subtasks) {
172
+ const parent = this.tasks.get(parentTaskId);
173
+ if (!parent)
174
+ throw new Error(`Parent task ${parentTaskId} not found`);
175
+ const created = [];
176
+ for (const sub of subtasks) {
177
+ created.push(this.create({
178
+ ...sub,
179
+ parentTaskId,
180
+ dependsOn: sub.dependsOn ?? []
181
+ }));
182
+ }
183
+ // Block parent until subtasks are done
184
+ parent.status = "blocked";
185
+ parent.updatedAt = Date.now();
186
+ return created;
187
+ }
188
+ /**
189
+ * Get tasks available for an agent to claim.
190
+ * Filters by: open status, dependencies met, skill match.
191
+ * Sorted by priority (lower number = higher priority).
192
+ */
193
+ getAvailable(agent) {
194
+ const available = [];
195
+ for (const task of this.tasks.values()) {
196
+ if (task.status !== "open")
197
+ continue;
198
+ if (!this.dependenciesMet(task.id))
199
+ continue;
200
+ // Skill matching: task requires skills the agent has
201
+ if (agent && task.requiredSkills.length > 0) {
202
+ const hasAllSkills = task.requiredSkills.every((s) => agent.skills.includes(s));
203
+ if (!hasAllSkills)
204
+ continue;
205
+ }
206
+ available.push({ ...task });
207
+ }
208
+ return available.sort((a, b) => a.priority - b.priority);
209
+ }
210
+ /**
211
+ * Get a single task by ID.
212
+ */
213
+ get(taskId) {
214
+ const task = this.tasks.get(taskId);
215
+ return task ? { ...task } : undefined;
216
+ }
217
+ /**
218
+ * Get full board snapshot.
219
+ */
220
+ getSnapshot() {
221
+ return [...this.tasks.values()].map((t) => ({ ...t }));
222
+ }
223
+ /**
224
+ * Get subtasks of a parent task.
225
+ */
226
+ getSubtasks(parentTaskId) {
227
+ return [...this.tasks.values()]
228
+ .filter((t) => t.parentTaskId === parentTaskId)
229
+ .map((t) => ({ ...t }));
230
+ }
231
+ /**
232
+ * Check if all tasks are in terminal states (done/failed).
233
+ */
234
+ isComplete() {
235
+ if (this.tasks.size === 0)
236
+ return false;
237
+ for (const task of this.tasks.values()) {
238
+ if (task.status !== "done" && task.status !== "failed")
239
+ return false;
240
+ }
241
+ return true;
242
+ }
243
+ /**
244
+ * Check if there's a deadlock (no progress possible).
245
+ * Deadlock = tasks exist that aren't done/failed, but none are claimable or in-progress.
246
+ */
247
+ detectDeadlock() {
248
+ const active = [];
249
+ const stuck = [];
250
+ for (const task of this.tasks.values()) {
251
+ if (task.status === "done" || task.status === "failed")
252
+ continue;
253
+ if (task.status === "claimed" || task.status === "working") {
254
+ active.push(task.id);
255
+ }
256
+ else if (task.status === "open" && !this.dependenciesMet(task.id)) {
257
+ stuck.push(task.id);
258
+ }
259
+ else if (task.status === "blocked") {
260
+ stuck.push(task.id);
261
+ }
262
+ }
263
+ // Deadlock: stuck tasks exist but no one is working
264
+ if (stuck.length > 0 && active.length === 0) {
265
+ // Also check if any open tasks have met dependencies
266
+ const claimable = [...this.tasks.values()].filter((t) => t.status === "open" && this.dependenciesMet(t.id));
267
+ if (claimable.length === 0)
268
+ return stuck;
269
+ }
270
+ return null;
271
+ }
272
+ /**
273
+ * Auto-complete parent tasks when all subtasks are done.
274
+ */
275
+ resolveParents() {
276
+ for (const task of this.tasks.values()) {
277
+ if (task.status !== "blocked")
278
+ continue;
279
+ const subtasks = this.getSubtasks(task.id);
280
+ if (subtasks.length === 0)
281
+ continue;
282
+ const allFinished = subtasks.every((s) => s.status === "done" || s.status === "failed");
283
+ if (allFinished) {
284
+ const anyFailed = subtasks.some((s) => s.status === "failed");
285
+ task.status = anyFailed ? "failed" : "done";
286
+ task.result = subtasks.map((s) => s.result);
287
+ task.artifacts = subtasks.flatMap((s) => s.artifacts);
288
+ task.updatedAt = Date.now();
289
+ if (anyFailed) {
290
+ const failedNames = subtasks
291
+ .filter((s) => s.status === "failed")
292
+ .map((s) => s.title)
293
+ .join(", ");
294
+ this.emit({
295
+ type: "task_failed",
296
+ taskId: task.id,
297
+ reason: `Subtask(s) failed: ${failedNames}`,
298
+ timestamp: task.updatedAt
299
+ });
300
+ }
301
+ else {
302
+ this.emit({
303
+ type: "task_completed",
304
+ taskId: task.id,
305
+ artifacts: task.artifacts,
306
+ timestamp: task.updatedAt
307
+ });
308
+ }
309
+ }
310
+ }
311
+ }
312
+ /**
313
+ * Subscribe to board events.
314
+ */
315
+ onEvent(handler) {
316
+ this.listeners.push(handler);
317
+ return () => {
318
+ const idx = this.listeners.indexOf(handler);
319
+ if (idx >= 0)
320
+ this.listeners.splice(idx, 1);
321
+ };
322
+ }
323
+ // ─── Internal ───
324
+ dependenciesMet(taskId) {
325
+ const task = this.tasks.get(taskId);
326
+ if (!task)
327
+ return false;
328
+ return task.dependsOn.every((depId) => {
329
+ const dep = this.tasks.get(depId);
330
+ return dep?.status === "done";
331
+ });
332
+ }
333
+ hasCycle() {
334
+ const visited = new Set();
335
+ const stack = new Set();
336
+ const dfs = (id) => {
337
+ if (stack.has(id))
338
+ return true;
339
+ if (visited.has(id))
340
+ return false;
341
+ visited.add(id);
342
+ stack.add(id);
343
+ const task = this.tasks.get(id);
344
+ if (task) {
345
+ for (const depId of task.dependsOn) {
346
+ if (dfs(depId))
347
+ return true;
348
+ }
349
+ }
350
+ stack.delete(id);
351
+ return false;
352
+ };
353
+ for (const id of this.tasks.keys()) {
354
+ if (dfs(id))
355
+ return true;
356
+ }
357
+ return false;
358
+ }
359
+ emit(event) {
360
+ for (const listener of this.listeners) {
361
+ try {
362
+ listener(event);
363
+ }
364
+ catch {
365
+ // Don't let listener errors break the board
366
+ }
367
+ }
368
+ }
369
+ }
370
+ //# sourceMappingURL=task-board.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-board.js","sourceRoot":"","sources":["../../src/team/task-board.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * TeamExecutor — Orchestrates a team of agents collaborating via
3
+ * a shared TaskBoard and MessageBus.
4
+ *
5
+ * Strategies:
6
+ * - coordinator: First agent decomposes the objective, others execute tasks.
7
+ * - autonomous: All agents see the objective and self-organize.
8
+ * - hybrid: Coordinator creates initial plan, agents can create subtasks.
9
+ */
10
+ import type { ProcessingContext } from "@nodetool-ai/runtime";
11
+ import { Tool } from "../tools/base-tool.js";
12
+ import type { IMessageBus, ITaskBoard, TeamConfig, TeamEvent } from "./types.js";
13
+ export interface TeamExecutorOptions {
14
+ config: TeamConfig;
15
+ context: ProcessingContext;
16
+ /** Extra tools available to all agents (search, code, etc.). */
17
+ sharedTools?: Tool[];
18
+ /** Pre-populated task board (optional). Defaults to in-memory TaskBoard. */
19
+ taskBoard?: ITaskBoard;
20
+ /** Pre-populated message bus (optional). Defaults to in-memory MessageBus. */
21
+ messageBus?: IMessageBus;
22
+ }
23
+ export declare class TeamExecutor {
24
+ private config;
25
+ private context;
26
+ private board;
27
+ private bus;
28
+ private sharedTools;
29
+ private agents;
30
+ private events;
31
+ private maxIterations;
32
+ private maxConcurrency;
33
+ private totalIterations;
34
+ private _result;
35
+ constructor(opts: TeamExecutorOptions);
36
+ get taskBoard(): ITaskBoard;
37
+ get messageBus(): IMessageBus;
38
+ getResult(): unknown;
39
+ getEvents(): TeamEvent[];
40
+ /**
41
+ * Main execution loop. Yields TeamEvents as the team works.
42
+ */
43
+ execute(): AsyncGenerator<TeamEvent>;
44
+ /**
45
+ * Coordinator phase: first agent decomposes the objective into tasks.
46
+ */
47
+ private runCoordinatorPhase;
48
+ /**
49
+ * Main work loop: agents check for tasks, claim them, execute, complete.
50
+ */
51
+ private runWorkLoop;
52
+ /**
53
+ * Single agent work cycle: check messages, check board, work on task.
54
+ */
55
+ private runAgentWorkCycle;
56
+ /**
57
+ * Run a single LLM iteration for an agent (may involve tool calls).
58
+ */
59
+ private runAgentIteration;
60
+ /**
61
+ * Agentic provider: single call with onToolCall handles the full loop.
62
+ */
63
+ private runAgenticIteration;
64
+ /**
65
+ * Standard provider: request-response loop with explicit tool execution.
66
+ */
67
+ private runStandardIteration;
68
+ private getWorkableAgents;
69
+ private buildSystemPrompt;
70
+ private getStrategyInstructions;
71
+ }
72
+ //# sourceMappingURL=team-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-executor.d.ts","sourceRoot":"","sources":["../../src/team/team-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAEV,iBAAiB,EAGlB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAI7C,OAAO,KAAK,EAEV,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EAEV,MAAM,YAAY,CAAC;AAQpB,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,gEAAgE;IAChE,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC;IACrB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAYD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,OAAO,CAAiB;gBAEpB,IAAI,EAAE,mBAAmB;IAUrC,IAAI,SAAS,IAAI,UAAU,CAE1B;IAED,IAAI,UAAU,IAAI,WAAW,CAE5B;IAED,SAAS,IAAI,OAAO;IAIpB,SAAS,IAAI,SAAS,EAAE;IAIxB;;OAEG;IACI,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC;IAkF3C;;OAEG;YACY,mBAAmB;IAkBlC;;OAEG;YACY,WAAW;IA+C1B;;OAEG;YACY,iBAAiB;IA8DhC;;OAEG;YACY,iBAAiB;IA+BhC;;OAEG;YACY,mBAAmB;IA8ClC;;OAEG;YACY,oBAAoB;IA+DnC,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,iBAAiB;IA2CzB,OAAO,CAAC,uBAAuB;CAmDhC"}