@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,198 @@
1
+ /**
2
+ * Core type definitions for the multi-agent team system.
3
+ *
4
+ * Inspired by the A2A (Agent-to-Agent) protocol task lifecycle
5
+ * and blackboard architecture patterns.
6
+ */
7
+ export interface AgentIdentity {
8
+ /** Unique ID within the team. */
9
+ id: string;
10
+ /** Human-readable name, e.g. "researcher", "writer". */
11
+ name: string;
12
+ /** Freeform role description injected into LLM system prompt. */
13
+ role: string;
14
+ /** Skill tags for task matching, e.g. ["web_search", "code_generation"]. */
15
+ skills: string[];
16
+ /** LLM provider key. */
17
+ provider: string;
18
+ /** Model identifier. */
19
+ model: string;
20
+ /** Tool names this agent can use (beyond team tools). */
21
+ tools: string[];
22
+ }
23
+ export type MessageType = "request" | "response" | "info" | "handoff";
24
+ export interface AgentMessage {
25
+ id: string;
26
+ from: string;
27
+ to: string | "all";
28
+ type: MessageType;
29
+ subject: string;
30
+ body: string;
31
+ replyTo?: string;
32
+ taskId?: string;
33
+ timestamp: number;
34
+ }
35
+ export type TaskStatus = "open" | "claimed" | "working" | "blocked" | "done" | "failed";
36
+ export interface BoardTask {
37
+ id: string;
38
+ title: string;
39
+ description: string;
40
+ status: TaskStatus;
41
+ createdBy: string;
42
+ claimedBy?: string;
43
+ dependsOn: string[];
44
+ requiredSkills: string[];
45
+ priority: number;
46
+ artifacts: unknown[];
47
+ parentTaskId?: string;
48
+ result?: unknown;
49
+ failureReason?: string;
50
+ createdAt: number;
51
+ updatedAt: number;
52
+ }
53
+ export type TeamEvent = {
54
+ type: "agent_started";
55
+ agentId: string;
56
+ timestamp: number;
57
+ } | {
58
+ type: "agent_idle";
59
+ agentId: string;
60
+ timestamp: number;
61
+ } | {
62
+ type: "agent_finished";
63
+ agentId: string;
64
+ timestamp: number;
65
+ } | {
66
+ type: "task_created";
67
+ task: BoardTask;
68
+ timestamp: number;
69
+ } | {
70
+ type: "task_claimed";
71
+ taskId: string;
72
+ agentId: string;
73
+ timestamp: number;
74
+ } | {
75
+ type: "task_working";
76
+ taskId: string;
77
+ agentId: string;
78
+ timestamp: number;
79
+ } | {
80
+ type: "task_completed";
81
+ taskId: string;
82
+ artifacts: unknown[];
83
+ timestamp: number;
84
+ } | {
85
+ type: "task_failed";
86
+ taskId: string;
87
+ reason: string;
88
+ timestamp: number;
89
+ } | {
90
+ type: "message_sent";
91
+ message: AgentMessage;
92
+ timestamp: number;
93
+ } | {
94
+ type: "chunk";
95
+ agentId: string;
96
+ content: string;
97
+ timestamp: number;
98
+ } | {
99
+ type: "team_complete";
100
+ result: unknown;
101
+ timestamp: number;
102
+ } | {
103
+ type: "deadlock_detected";
104
+ blockingTasks: string[];
105
+ timestamp: number;
106
+ };
107
+ export interface IMessageBus {
108
+ /** Register an agent so it has an inbox. */
109
+ register(agentId: string): void;
110
+ /** Send a message to a specific agent or broadcast to all. */
111
+ send(opts: {
112
+ from: string;
113
+ to: string | "all";
114
+ type: MessageType;
115
+ subject: string;
116
+ body: string;
117
+ replyTo?: string;
118
+ taskId?: string;
119
+ }): AgentMessage;
120
+ /** Pull and drain pending messages for an agent. */
121
+ receive(agentId: string): AgentMessage[];
122
+ /** Peek at pending messages without consuming. */
123
+ peek(agentId: string): AgentMessage[];
124
+ /** Subscribe to real-time message delivery. Returns unsubscribe fn. */
125
+ subscribe(agentId: string, handler: (msg: AgentMessage) => void): () => void;
126
+ /** Get the conversation thread from a message ID. */
127
+ getThread(messageId: string): AgentMessage[];
128
+ /** Get full message history. */
129
+ getHistory(): AgentMessage[];
130
+ /** Count of pending messages for an agent. */
131
+ pendingCount(agentId: string): number;
132
+ }
133
+ export interface ITaskBoard {
134
+ /** Create a new task on the board. */
135
+ create(opts: {
136
+ title: string;
137
+ description: string;
138
+ createdBy: string;
139
+ dependsOn?: string[];
140
+ requiredSkills?: string[];
141
+ priority?: number;
142
+ parentTaskId?: string;
143
+ }): BoardTask;
144
+ /** Atomically claim an open task. */
145
+ claim(taskId: string, agentId: string): boolean;
146
+ /** Mark a claimed task as actively being worked on. */
147
+ startWork(taskId: string, agentId: string): boolean;
148
+ /** Complete a task with optional result and artifacts. */
149
+ complete(taskId: string, opts?: {
150
+ result?: unknown;
151
+ artifacts?: unknown[];
152
+ }): boolean;
153
+ /** Mark a task as failed. */
154
+ fail(taskId: string, reason: string): boolean;
155
+ /** Block a task. */
156
+ block(taskId: string): boolean;
157
+ /** Unblock a task back to open. */
158
+ unblock(taskId: string): boolean;
159
+ /** Decompose a task into subtasks. Parent becomes blocked. */
160
+ decompose(parentTaskId: string, subtasks: Array<{
161
+ title: string;
162
+ description: string;
163
+ createdBy: string;
164
+ requiredSkills?: string[];
165
+ priority?: number;
166
+ dependsOn?: string[];
167
+ }>): BoardTask[];
168
+ /** Get tasks available for an agent to claim. */
169
+ getAvailable(agent?: AgentIdentity): BoardTask[];
170
+ /** Get a single task by ID. */
171
+ get(taskId: string): BoardTask | undefined;
172
+ /** Full board snapshot. */
173
+ getSnapshot(): BoardTask[];
174
+ /** Get subtasks of a parent. */
175
+ getSubtasks(parentTaskId: string): BoardTask[];
176
+ /** Check if all tasks are terminal. */
177
+ isComplete(): boolean;
178
+ /** Detect deadlock. Returns stuck task IDs or null. */
179
+ detectDeadlock(): string[] | null;
180
+ /** Auto-complete parent tasks when all subtasks done. */
181
+ resolveParents(): void;
182
+ /** Subscribe to board events. Returns unsubscribe fn. */
183
+ onEvent(handler: (event: TeamEvent) => void): () => void;
184
+ }
185
+ export type TeamStrategy = "coordinator" | "autonomous" | "hybrid";
186
+ export interface TeamConfig {
187
+ /** Overall objective for the team. */
188
+ objective: string;
189
+ /** Team members. First agent is coordinator when strategy is "coordinator". */
190
+ agents: AgentIdentity[];
191
+ /** Execution strategy. */
192
+ strategy: TeamStrategy;
193
+ /** Maximum total iterations across all agents before forced completion. */
194
+ maxIterations?: number;
195
+ /** Maximum concurrent agents running simultaneously. */
196
+ maxConcurrency?: number;
197
+ }
198
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/team/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Core type definitions for the multi-agent team system.
3
+ *
4
+ * Inspired by the A2A (Agent-to-Agent) protocol task lifecycle
5
+ * and blackboard architecture patterns.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/team/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * AddEdgeTool -- planner tool that connects two nodes in the graph.
3
+ */
4
+ import type { ProcessingContext } from "@nodetool-ai/runtime";
5
+ import type { NodeRegistry } from "@nodetool-ai/node-sdk";
6
+ import { Tool } from "./base-tool.js";
7
+ import { type GraphBuilder } from "../graph-builder.js";
8
+ export declare class AddEdgeTool extends Tool {
9
+ private readonly builder;
10
+ private readonly registry;
11
+ readonly name = "add_edge";
12
+ readonly description = "Connect two nodes by creating an edge from a source output to a target input.";
13
+ readonly inputSchema: Record<string, unknown>;
14
+ constructor(builder: GraphBuilder, registry: NodeRegistry);
15
+ process(_context: ProcessingContext, params: Record<string, unknown>): Promise<unknown>;
16
+ userMessage(params: Record<string, unknown>): string;
17
+ }
18
+ //# sourceMappingURL=add-edge-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-edge-tool.d.ts","sourceRoot":"","sources":["../../src/tools/add-edge-tool.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAyB9E,qBAAa,WAAY,SAAQ,IAAI;IAOjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAP3B,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,WAAW,mFAC8D;IAClF,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAyB;gBAGnD,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,YAAY;IAKnC,OAAO,CACX,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC;IAkEnB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;CAGrD"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * AddEdgeTool -- planner tool that connects two nodes in the graph.
3
+ */
4
+ import { Tool } from "./base-tool.js";
5
+ import { AGENT_STEP_NODE_TYPE } from "../graph-builder.js";
6
+ const ADD_EDGE_INPUT_SCHEMA = {
7
+ type: "object",
8
+ properties: {
9
+ source: {
10
+ type: "string",
11
+ description: "ID of the source node"
12
+ },
13
+ source_handle: {
14
+ type: "string",
15
+ description: "Output slot name on the source node"
16
+ },
17
+ target: {
18
+ type: "string",
19
+ description: "ID of the target node"
20
+ },
21
+ target_handle: {
22
+ type: "string",
23
+ description: "Input property name on the target node"
24
+ }
25
+ },
26
+ required: ["source", "source_handle", "target", "target_handle"]
27
+ };
28
+ export class AddEdgeTool extends Tool {
29
+ builder;
30
+ registry;
31
+ name = "add_edge";
32
+ description = "Connect two nodes by creating an edge from a source output to a target input.";
33
+ inputSchema = ADD_EDGE_INPUT_SCHEMA;
34
+ constructor(builder, registry) {
35
+ super();
36
+ this.builder = builder;
37
+ this.registry = registry;
38
+ }
39
+ async process(_context, params) {
40
+ const source = params["source"];
41
+ const sourceHandle = params["source_handle"];
42
+ const target = params["target"];
43
+ const targetHandle = params["target_handle"];
44
+ if (!source || !sourceHandle || !target || !targetHandle) {
45
+ return {
46
+ status: "error",
47
+ errors: [
48
+ "All fields required: source, source_handle, target, target_handle"
49
+ ]
50
+ };
51
+ }
52
+ // Validate handles against registry metadata for deterministic nodes
53
+ const validationErrors = [];
54
+ const sourceNode = this.builder.getNode(source);
55
+ if (sourceNode && sourceNode.type !== AGENT_STEP_NODE_TYPE) {
56
+ const meta = this.registry.getMetadata(sourceNode.type);
57
+ if (meta) {
58
+ const outputNames = meta.outputs.map((o) => o.name);
59
+ if (outputNames.length > 0 && !outputNames.includes(sourceHandle)) {
60
+ validationErrors.push(`Source node '${source}' (${sourceNode.type}) has no output '${sourceHandle}'. Available: ${outputNames.join(", ")}`);
61
+ }
62
+ }
63
+ }
64
+ const targetNode = this.builder.getNode(target);
65
+ if (targetNode && targetNode.type !== AGENT_STEP_NODE_TYPE) {
66
+ const meta = this.registry.getMetadata(targetNode.type);
67
+ if (meta) {
68
+ const inputNames = meta.properties.map((p) => p.name);
69
+ if (inputNames.length > 0 && !inputNames.includes(targetHandle)) {
70
+ validationErrors.push(`Target node '${target}' (${targetNode.type}) has no input '${targetHandle}'. Available: ${inputNames.join(", ")}`);
71
+ }
72
+ }
73
+ }
74
+ if (validationErrors.length > 0) {
75
+ return { status: "error", errors: validationErrors };
76
+ }
77
+ const errors = this.builder.addEdge(source, sourceHandle, target, targetHandle);
78
+ if (errors.length > 0) {
79
+ return { status: "error", errors };
80
+ }
81
+ return {
82
+ status: "edge_added",
83
+ from: `${source}.${sourceHandle}`,
84
+ to: `${target}.${targetHandle}`,
85
+ total_edges: this.builder.edgeCount
86
+ };
87
+ }
88
+ userMessage(params) {
89
+ return `Connecting ${params["source"]}.${params["source_handle"]} → ${params["target"]}.${params["target_handle"]}`;
90
+ }
91
+ }
92
+ //# sourceMappingURL=add-edge-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-edge-tool.js","sourceRoot":"","sources":["../../src/tools/add-edge-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * AddNodeTool -- planner tool that adds a node to the graph being built.
3
+ *
4
+ * The LLM calls this to add either:
5
+ * - A deterministic workflow node (type from NodeRegistry)
6
+ * - An agent step node (type: "nodetool.agents.AgentStep")
7
+ */
8
+ import type { ProcessingContext } from "@nodetool-ai/runtime";
9
+ import type { NodeRegistry } from "@nodetool-ai/node-sdk";
10
+ import { Tool } from "./base-tool.js";
11
+ import { type GraphBuilder } from "../graph-builder.js";
12
+ export declare class AddNodeTool extends Tool {
13
+ private readonly builder;
14
+ private readonly registry;
15
+ readonly name = "add_node";
16
+ readonly description: string;
17
+ readonly inputSchema: Record<string, unknown>;
18
+ constructor(builder: GraphBuilder, registry: NodeRegistry);
19
+ process(_context: ProcessingContext, params: Record<string, unknown>): Promise<unknown>;
20
+ userMessage(params: Record<string, unknown>): string;
21
+ }
22
+ //# sourceMappingURL=add-node-tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-node-tool.d.ts","sourceRoot":"","sources":["../../src/tools/add-node-tool.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAwB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAiC9E,qBAAa,WAAY,SAAQ,IAAI;IASjC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAT3B,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,WAAW,SAGmF;IACvG,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAyB;gBAGnD,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,YAAY;IAKnC,OAAO,CACX,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC;IAmFnB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;CAKrD"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * AddNodeTool -- planner tool that adds a node to the graph being built.
3
+ *
4
+ * The LLM calls this to add either:
5
+ * - A deterministic workflow node (type from NodeRegistry)
6
+ * - An agent step node (type: "nodetool.agents.AgentStep")
7
+ */
8
+ import { Tool } from "./base-tool.js";
9
+ import { AGENT_STEP_NODE_TYPE } from "../graph-builder.js";
10
+ import { createLogger } from "@nodetool-ai/config";
11
+ const log = createLogger("nodetool.agents.add-node-tool");
12
+ const ADD_NODE_INPUT_SCHEMA = {
13
+ type: "object",
14
+ properties: {
15
+ id: {
16
+ type: "string",
17
+ description: "Unique identifier for this node (snake_case recommended)"
18
+ },
19
+ type: {
20
+ type: "string",
21
+ description: 'Fully-qualified node type from registry, or "nodetool.agents.AgentStep" for LLM-driven steps'
22
+ },
23
+ node_properties: {
24
+ type: "object",
25
+ description: 'Configuration values for the node. Example: {"value": "Hello World"} for a String constant, ' +
26
+ '{"delimiter": " "} for a Split node. Use get_node_info to see available properties. ' +
27
+ "Pass {} if no configuration is needed (e.g. the node only receives input via edges)."
28
+ },
29
+ name: {
30
+ type: "string",
31
+ description: "Optional human-readable name for the node"
32
+ }
33
+ },
34
+ required: ["id", "type"],
35
+ additionalProperties: true
36
+ };
37
+ export class AddNodeTool extends Tool {
38
+ builder;
39
+ registry;
40
+ name = "add_node";
41
+ description = "Add a node to the workflow graph. Set node configuration either via node_properties object " +
42
+ "or as direct parameters (e.g. value: \"Hello World\" for a String constant). " +
43
+ 'Use a registry node type for deterministic work, or "nodetool.agents.AgentStep" for LLM reasoning.';
44
+ inputSchema = ADD_NODE_INPUT_SCHEMA;
45
+ constructor(builder, registry) {
46
+ super();
47
+ this.builder = builder;
48
+ this.registry = registry;
49
+ }
50
+ async process(_context, params) {
51
+ const id = params["id"];
52
+ const type = params["type"];
53
+ const name = params["name"];
54
+ // Accept properties from node_properties, properties, or any extra params
55
+ const knownKeys = new Set(["id", "type", "name", "node_properties", "properties"]);
56
+ const extraProps = {};
57
+ for (const [k, v] of Object.entries(params)) {
58
+ if (!knownKeys.has(k)) {
59
+ extraProps[k] = v;
60
+ }
61
+ }
62
+ const properties = params["node_properties"] ??
63
+ params["properties"] ??
64
+ (Object.keys(extraProps).length > 0 ? extraProps : {});
65
+ log.debug("add_node", { id, type, properties });
66
+ if (!id || typeof id !== "string") {
67
+ return { status: "error", errors: ["id must be a non-empty string."] };
68
+ }
69
+ if (!type || typeof type !== "string") {
70
+ return { status: "error", errors: ["type must be a non-empty string."] };
71
+ }
72
+ // Validate node type
73
+ const isAgentStep = type === AGENT_STEP_NODE_TYPE;
74
+ if (!isAgentStep && !this.registry.has(type)) {
75
+ // Check loaded metadata for Python-only nodes
76
+ const meta = this.registry.getMetadata(type);
77
+ if (!meta) {
78
+ return {
79
+ status: "error",
80
+ errors: [
81
+ `Unknown node type: '${type}'. Use search_nodes to find available types.`
82
+ ]
83
+ };
84
+ }
85
+ }
86
+ // Validate agent step properties
87
+ if (isAgentStep) {
88
+ const instructions = properties["instructions"];
89
+ if (!instructions || typeof instructions !== "string") {
90
+ return {
91
+ status: "error",
92
+ errors: [
93
+ 'AgentStep nodes require an "instructions" property (non-empty string).'
94
+ ]
95
+ };
96
+ }
97
+ }
98
+ const errors = this.builder.addNode(id, type, properties, name);
99
+ if (errors.length > 0) {
100
+ return { status: "error", errors };
101
+ }
102
+ // Include set properties in response and warn if none were set
103
+ const propsSet = Object.keys(properties);
104
+ const meta = !isAgentStep ? this.registry.getMetadata(type) : null;
105
+ const configurableProps = meta?.properties
106
+ ?.filter((p) => p.name !== "text" && p.name !== "input") // skip edge-connected inputs
107
+ ?.map((p) => `${p.name} (default: ${JSON.stringify(p.default)})`) ?? [];
108
+ const result = {
109
+ status: "node_added",
110
+ id,
111
+ type,
112
+ properties_set: propsSet,
113
+ total_nodes: this.builder.nodeCount
114
+ };
115
+ if (propsSet.length === 0 && configurableProps.length > 0) {
116
+ result["warning"] =
117
+ `No node_properties were set. This node has configurable properties: [${configurableProps.join(", ")}]. ` +
118
+ `If any need non-default values, remove this node and re-add with node_properties set.`;
119
+ }
120
+ return result;
121
+ }
122
+ userMessage(params) {
123
+ const id = params["id"] ?? "?";
124
+ const type = params["type"] ?? "?";
125
+ return `Adding node: ${id} (${type})`;
126
+ }
127
+ }
128
+ //# sourceMappingURL=add-node-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-node-tool.js","sourceRoot":"","sources":["../../src/tools/add-node-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Asset management tools for the agent system.
3
+ *
4
+ * Port of src/nodetool/agents/tools/asset_tools.py
5
+ *
6
+ * Provides:
7
+ * - SaveAssetTool: Save text or binary (base64) content as an asset.
8
+ * Prefers `context.createAsset` (DB + storage, returns asset:// URI) and
9
+ * falls back to the lower-level storage adapter for plain text/key-value.
10
+ * - ReadAssetTool: Read content from a stored asset file.
11
+ */
12
+ import type { ProcessingContext } from "@nodetool-ai/runtime";
13
+ import { Tool } from "./base-tool.js";
14
+ export declare class SaveAssetTool extends Tool {
15
+ readonly name = "save_asset";
16
+ readonly description = "Save content as an asset. Use this for any artifact you want to surface in the chat (text reports, JSON, manifests, images, audio). Pass `content_base64` for binary data and `content` for text. Returns an asset_id and asset:// URI you can reference in later steps.";
17
+ readonly inputSchema: {
18
+ type: "object";
19
+ properties: {
20
+ name: {
21
+ type: "string";
22
+ description: string;
23
+ };
24
+ content: {
25
+ type: "string";
26
+ description: string;
27
+ };
28
+ content_base64: {
29
+ type: "string";
30
+ description: string;
31
+ };
32
+ content_type: {
33
+ type: "string";
34
+ description: string;
35
+ };
36
+ };
37
+ required: string[];
38
+ };
39
+ process(context: ProcessingContext, params: Record<string, unknown>): Promise<unknown>;
40
+ userMessage(params: Record<string, unknown>): string;
41
+ }
42
+ export declare class ReadAssetTool extends Tool {
43
+ readonly name = "read_asset";
44
+ readonly description = "Read an asset file";
45
+ readonly inputSchema: {
46
+ type: "object";
47
+ properties: {
48
+ name: {
49
+ type: "string";
50
+ description: string;
51
+ };
52
+ };
53
+ required: string[];
54
+ };
55
+ process(context: ProcessingContext, params: Record<string, unknown>): Promise<unknown>;
56
+ userMessage(params: Record<string, unknown>): string;
57
+ }
58
+ //# sourceMappingURL=asset-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-tools.d.ts","sourceRoot":"","sources":["../../src/tools/asset-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,qBAAa,aAAc,SAAQ,IAAI;IACrC,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,8QACyP;IAC7Q,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;kBAwBI,MAAM,EAAE;MAC9B;IAEI,OAAO,CACX,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC;IA+EnB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;CAQrD;AAED,qBAAa,aAAc,SAAQ,IAAI;IACrC,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,wBAAwB;IAC5C,QAAQ,CAAC,WAAW;;;;;;;;kBAQI,MAAM,EAAE;MAC9B;IAEI,OAAO,CACX,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC;IA0DnB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;CAQrD"}