@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
package/dist/agent.js ADDED
@@ -0,0 +1,587 @@
1
+ /**
2
+ * Agent -- orchestrates AI-driven task execution using LLMs and Tools.
3
+ *
4
+ * Port of src/nodetool/agents/agent.py (simplified for TypeScript).
5
+ *
6
+ * The Agent class takes a complex objective, decomposes it into a step-by-step
7
+ * plan using TaskPlanner, then executes that plan via TaskExecutor.
8
+ * Supports loading skills from the filesystem.
9
+ */
10
+ import * as fs from "node:fs/promises";
11
+ import * as path from "node:path";
12
+ import * as os from "node:os";
13
+ import { createLogger } from "@nodetool-ai/config";
14
+ import { withAgentSpanGen } from "@nodetool-ai/runtime";
15
+ const log = createLogger("nodetool.agents.agent");
16
+ import { TaskUpdateEvent } from "@nodetool-ai/protocol";
17
+ import { BaseAgent } from "./base-agent.js";
18
+ import { TaskPlanner } from "./task-planner.js";
19
+ import { TaskExecutor } from "./task-executor.js";
20
+ import { ParallelTaskExecutor } from "./parallel-task-executor.js";
21
+ import { rejectAgenticProvider } from "./reject-agentic-provider.js";
22
+ import { outputFormatDirective } from "./output-format.js";
23
+ const INVALID_SKILL_NAME_RE = /[^a-z0-9-]/;
24
+ const XML_TAG_RE = /<[^>]+>/;
25
+ const SKILL_RESERVED_TERMS = ["anthropic", "claude"];
26
+ const SKILL_WORD_RE = /[a-z0-9]+/g;
27
+ /**
28
+ * Parse minimal YAML frontmatter (key: value pairs).
29
+ */
30
+ export function parseFrontmatter(frontmatter) {
31
+ const parsed = {};
32
+ for (const rawLine of frontmatter.split("\n")) {
33
+ const line = rawLine.trim();
34
+ if (!line || line.startsWith("#"))
35
+ continue;
36
+ const colonIdx = line.indexOf(":");
37
+ if (colonIdx === -1)
38
+ continue;
39
+ const key = line.slice(0, colonIdx).trim();
40
+ let value = line.slice(colonIdx + 1).trim();
41
+ // Strip surrounding quotes
42
+ if ((value.startsWith('"') && value.endsWith('"')) ||
43
+ (value.startsWith("'") && value.endsWith("'"))) {
44
+ value = value.slice(1, -1);
45
+ }
46
+ parsed[key] = value;
47
+ }
48
+ return parsed;
49
+ }
50
+ function isValidSkillName(name) {
51
+ if (!name || name.length > 64)
52
+ return false;
53
+ if (INVALID_SKILL_NAME_RE.test(name))
54
+ return false;
55
+ const lowered = name.toLowerCase();
56
+ return !SKILL_RESERVED_TERMS.some((term) => lowered.includes(term));
57
+ }
58
+ function isValidSkillDescription(description) {
59
+ if (!description || description.length > 1024)
60
+ return false;
61
+ return !XML_TAG_RE.test(description);
62
+ }
63
+ /**
64
+ * Load a single skill from a SKILL.md file.
65
+ * Returns null if the file is invalid or cannot be read.
66
+ */
67
+ async function loadSkillFromFile(skillFile) {
68
+ let content;
69
+ try {
70
+ content = await fs.readFile(skillFile, "utf-8");
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ if (!content.startsWith("---"))
76
+ return null;
77
+ const parts = content.split("---", 3);
78
+ if (parts.length < 3)
79
+ return null;
80
+ const metadata = parseFrontmatter(parts[1]);
81
+ const name = (metadata["name"] ?? "").trim();
82
+ const description = (metadata["description"] ?? "").trim();
83
+ const instructions = parts[2].trim();
84
+ if (!isValidSkillName(name))
85
+ return null;
86
+ if (!isValidSkillDescription(description))
87
+ return null;
88
+ if (!instructions)
89
+ return null;
90
+ return { name, description, instructions, path: skillFile };
91
+ }
92
+ /**
93
+ * Recursively find all SKILL.md files under a directory.
94
+ */
95
+ async function findSkillFiles(dir) {
96
+ const results = [];
97
+ let entries;
98
+ try {
99
+ entries = await fs.readdir(dir, { withFileTypes: true });
100
+ }
101
+ catch {
102
+ return results;
103
+ }
104
+ for (const entry of entries) {
105
+ const fullPath = path.join(dir, entry.name);
106
+ if (entry.isDirectory()) {
107
+ results.push(...(await findSkillFiles(fullPath)));
108
+ }
109
+ else if (entry.name === "SKILL.md") {
110
+ results.push(fullPath);
111
+ }
112
+ }
113
+ return results;
114
+ }
115
+ /**
116
+ * Load all valid skills from a directory (recursively searches for SKILL.md files).
117
+ */
118
+ export async function loadSkillsFromDirectory(dir) {
119
+ const skillFiles = await findSkillFiles(dir);
120
+ const skills = [];
121
+ for (const file of skillFiles) {
122
+ const skill = await loadSkillFromFile(file);
123
+ if (skill)
124
+ skills.push(skill);
125
+ }
126
+ return skills;
127
+ }
128
+ // ---------------------------------------------------------------------------
129
+ // Dedupe helper
130
+ // ---------------------------------------------------------------------------
131
+ function dedupePreserveOrder(items) {
132
+ const seen = new Set();
133
+ const result = [];
134
+ for (const item of items) {
135
+ if (!seen.has(item)) {
136
+ seen.add(item);
137
+ result.push(item);
138
+ }
139
+ }
140
+ return result;
141
+ }
142
+ export class Agent extends BaseAgent {
143
+ description;
144
+ planningModel;
145
+ reasoningModel;
146
+ maxSteps;
147
+ maxStepIterations;
148
+ outputSchema;
149
+ outputFormat;
150
+ workspace;
151
+ requestedSkills;
152
+ skillDirs;
153
+ initialTask;
154
+ /** The multi-task plan, set after planning. */
155
+ taskPlan = null;
156
+ constructor(opts) {
157
+ rejectAgenticProvider(opts.provider, "Agent");
158
+ super({
159
+ name: opts.name,
160
+ objective: opts.objective,
161
+ provider: opts.provider,
162
+ model: opts.model,
163
+ tools: opts.tools,
164
+ inputs: opts.inputs,
165
+ systemPrompt: opts.systemPrompt,
166
+ maxTokenLimit: opts.maxTokenLimit
167
+ });
168
+ this.description = opts.description ?? "";
169
+ this.planningModel = opts.planningModel ?? opts.model;
170
+ this.reasoningModel = opts.reasoningModel ?? opts.model;
171
+ this.maxSteps = opts.maxSteps ?? 10;
172
+ this.maxStepIterations = opts.maxStepIterations ?? 15;
173
+ this.outputFormat = opts.outputFormat ?? "structured";
174
+ // Non-structured formats imply a string result; outputSchema is ignored.
175
+ this.outputSchema =
176
+ this.outputFormat === "structured" ? opts.outputSchema : undefined;
177
+ this.workspace = opts.workspace;
178
+ this.requestedSkills = opts.skills;
179
+ this.skillDirs = opts.skillDirs ?? [];
180
+ this.initialTask = opts.task;
181
+ if (opts.task) {
182
+ this.task = opts.task;
183
+ }
184
+ }
185
+ /**
186
+ * Resolve skill directories from constructor args + environment + defaults.
187
+ */
188
+ resolveSkillDirs() {
189
+ const resolved = [];
190
+ // Explicit dirs from constructor
191
+ for (const d of this.skillDirs) {
192
+ resolved.push(d.startsWith("~") ? d.replace("~", os.homedir()) : d);
193
+ }
194
+ // Environment variable
195
+ const envDirs = process.env["NODETOOL_AGENT_SKILL_DIRS"];
196
+ if (envDirs) {
197
+ for (const d of envDirs.split(path.delimiter)) {
198
+ const trimmed = d.trim();
199
+ if (trimmed) {
200
+ resolved.push(trimmed.startsWith("~")
201
+ ? trimmed.replace("~", os.homedir())
202
+ : trimmed);
203
+ }
204
+ }
205
+ }
206
+ // Default locations
207
+ resolved.push(path.join(process.cwd(), ".claude", "skills"), path.join(os.homedir(), ".claude", "skills"), path.join(os.homedir(), ".codex", "skills"));
208
+ return dedupePreserveOrder(resolved);
209
+ }
210
+ /**
211
+ * Discover all valid skills from resolved directories.
212
+ */
213
+ async discoverSkills() {
214
+ const discovered = new Map();
215
+ const dirs = this.resolveSkillDirs();
216
+ for (const dir of dirs) {
217
+ try {
218
+ await fs.access(dir);
219
+ }
220
+ catch {
221
+ continue; // directory doesn't exist
222
+ }
223
+ const skills = await loadSkillsFromDirectory(dir);
224
+ for (const skill of skills) {
225
+ if (!discovered.has(skill.name)) {
226
+ discovered.set(skill.name, skill);
227
+ }
228
+ }
229
+ }
230
+ return discovered;
231
+ }
232
+ /**
233
+ * Resolve active skills: explicit names first, then auto-match by objective words.
234
+ */
235
+ resolveActiveSkills(available, requested) {
236
+ // Merge explicit names from constructor + environment
237
+ const envRequested = process.env["NODETOOL_AGENT_SKILLS"] ?? "";
238
+ const envNames = envRequested
239
+ .split(",")
240
+ .map((s) => s.trim())
241
+ .filter(Boolean);
242
+ const explicitNames = dedupePreserveOrder([
243
+ ...(requested ?? []),
244
+ ...envNames
245
+ ]);
246
+ if (explicitNames.length > 0) {
247
+ const active = [];
248
+ for (const name of explicitNames) {
249
+ const skill = available.get(name);
250
+ if (skill)
251
+ active.push(skill);
252
+ }
253
+ return active;
254
+ }
255
+ // Auto-select: check if disabled
256
+ const autoEnabled = !["0", "false", "no", "off"].includes((process.env["NODETOOL_AGENT_AUTO_SKILLS"] ?? "1").toLowerCase());
257
+ if (!autoEnabled)
258
+ return [];
259
+ // Match objective words against skill description words
260
+ const objectiveWords = new Set((this.objective.toLowerCase().match(SKILL_WORD_RE) ?? []).filter((w) => w.length >= 4));
261
+ const active = [];
262
+ for (const skill of available.values()) {
263
+ const descWords = new Set((skill.description.toLowerCase().match(SKILL_WORD_RE) ?? []).filter((w) => w.length >= 4));
264
+ for (const w of descWords) {
265
+ if (objectiveWords.has(w)) {
266
+ active.push(skill);
267
+ break;
268
+ }
269
+ }
270
+ }
271
+ return active;
272
+ }
273
+ /**
274
+ * Build system prompt segment from active skills.
275
+ */
276
+ buildSkillSystemPrompt(skills) {
277
+ if (skills.length === 0)
278
+ return null;
279
+ const sections = [
280
+ "# Agent Skills",
281
+ "Use these Skill instructions when relevant to the objective:"
282
+ ];
283
+ for (const skill of skills) {
284
+ sections.push(`\n## ${skill.name}\n${skill.instructions}`);
285
+ }
286
+ return sections.join("\n");
287
+ }
288
+ /**
289
+ * Build effective objective enriched with skill summaries.
290
+ */
291
+ buildEffectiveObjective(skills) {
292
+ if (skills.length === 0)
293
+ return this.objective;
294
+ const summaries = skills
295
+ .map((s) => `- ${s.name}: ${s.description}`)
296
+ .join("\n");
297
+ return `${this.objective}\n\nRelevant Skills:\n${summaries}`;
298
+ }
299
+ /**
300
+ * Merge user system prompt with skill system prompt.
301
+ */
302
+ mergeSystemPrompt(skillPrompt) {
303
+ const parts = [];
304
+ if (this.systemPrompt)
305
+ parts.push(this.systemPrompt);
306
+ if (skillPrompt)
307
+ parts.push(skillPrompt);
308
+ const formatDirective = outputFormatDirective(this.outputFormat);
309
+ if (formatDirective)
310
+ parts.push(formatDirective);
311
+ if (parts.length === 0)
312
+ return undefined;
313
+ return parts.join("\n\n");
314
+ }
315
+ async *execute(context) {
316
+ yield* withAgentSpanGen("execute", {
317
+ objective: this.objective,
318
+ provider: this.provider.provider,
319
+ model: this.model,
320
+ toolsCount: this.tools.length,
321
+ extra: { "agent.name": this.name }
322
+ }, () => this._executeImpl(context));
323
+ }
324
+ async *_executeImpl(context) {
325
+ log.info("Agent started", {
326
+ name: this.name,
327
+ objective: this.objective.slice(0, 80)
328
+ });
329
+ // Discover and resolve skills
330
+ const availableSkills = await this.discoverSkills();
331
+ const activeSkills = this.resolveActiveSkills(availableSkills, this.requestedSkills);
332
+ const skillSystemPrompt = this.buildSkillSystemPrompt(activeSkills);
333
+ const effectiveObjective = this.buildEffectiveObjective(activeSkills);
334
+ const mergedSystemPrompt = this.mergeSystemPrompt(skillSystemPrompt);
335
+ // Ensure workspace directory exists
336
+ const workspacePath = this.workspace ??
337
+ path.join(os.homedir(), "nodetool_workspace", Date.now().toString());
338
+ await fs.mkdir(workspacePath, { recursive: true });
339
+ // If a pre-defined task is given, fall back to single-task execution
340
+ if (this.initialTask) {
341
+ yield* this.executeSingleTask(context, this.initialTask, mergedSystemPrompt);
342
+ return;
343
+ }
344
+ // Plan: use TaskPlanner to decompose the objective into parallel tasks
345
+ log.info("Planning phase started", { name: this.name });
346
+ yield {
347
+ type: "log_update",
348
+ node_id: "agent_planner",
349
+ node_name: this.name,
350
+ content: `Planning parallel tasks for objective: ${this.objective.slice(0, 100)}...`,
351
+ severity: "info"
352
+ };
353
+ const planner = new TaskPlanner({
354
+ provider: this.provider,
355
+ model: this.planningModel,
356
+ reasoningModel: this.reasoningModel,
357
+ tools: this.tools,
358
+ systemPrompt: mergedSystemPrompt,
359
+ outputSchema: this.outputSchema,
360
+ inputs: this.inputs
361
+ });
362
+ const planGen = planner.planMultiTask(effectiveObjective, context);
363
+ let planResult = await planGen.next();
364
+ while (!planResult.done) {
365
+ yield planResult.value;
366
+ planResult = await planGen.next();
367
+ }
368
+ const taskPlan = planResult.value;
369
+ if (!taskPlan) {
370
+ log.error("Agent failed", {
371
+ name: this.name,
372
+ error: "TaskPlanner failed to create a multi-task plan."
373
+ });
374
+ throw new Error("TaskPlanner failed to create a task plan.");
375
+ }
376
+ this.taskPlan = taskPlan;
377
+ // Set the first task as `this.task` for backward compatibility
378
+ if (taskPlan.tasks.length > 0) {
379
+ this.task = taskPlan.tasks[0];
380
+ }
381
+ log.info("Planning complete", {
382
+ name: this.name,
383
+ tasks: taskPlan.tasks.length,
384
+ totalSteps: taskPlan.tasks.reduce((sum, t) => sum + t.steps.length, 0)
385
+ });
386
+ // Apply output schema to the last step of the last task if specified
387
+ if (this.outputSchema && taskPlan.tasks.length > 0) {
388
+ const lastTask = taskPlan.tasks[taskPlan.tasks.length - 1];
389
+ if (lastTask.steps.length > 0) {
390
+ lastTask.steps[lastTask.steps.length - 1].outputSchema =
391
+ JSON.stringify(this.outputSchema);
392
+ }
393
+ }
394
+ const totalSteps = taskPlan.tasks.reduce((sum, t) => sum + t.steps.length, 0);
395
+ const independentTasks = taskPlan.tasks.filter((t) => !t.dependsOn || t.dependsOn.length === 0).length;
396
+ yield {
397
+ type: "log_update",
398
+ node_id: "agent_executor",
399
+ node_name: this.name,
400
+ content: `Starting parallel execution: ${taskPlan.tasks.length} tasks (${independentTasks} parallelizable), ${totalSteps} total steps...`,
401
+ severity: "info"
402
+ };
403
+ // Execute: run ParallelTaskExecutor over the planned tasks
404
+ const executor = new ParallelTaskExecutor({
405
+ provider: this.provider,
406
+ model: this.model,
407
+ context,
408
+ tools: [...this.tools],
409
+ taskPlan,
410
+ systemPrompt: mergedSystemPrompt,
411
+ inputs: this.inputs,
412
+ maxStepIterations: this.maxStepIterations,
413
+ maxTokenLimit: this.maxTokenLimit
414
+ });
415
+ for await (const item of executor.execute()) {
416
+ if (item.type === "step_result") {
417
+ const stepResult = item;
418
+ if (stepResult.is_task_result) {
419
+ log.info("Captured task result", {
420
+ objective: this.objective.slice(0, 50)
421
+ });
422
+ // Note: do NOT overwrite this.results here for multi-task plans —
423
+ // only the last is_task_result would survive, losing all others.
424
+ }
425
+ }
426
+ yield item;
427
+ }
428
+ // After execution, synthesize a final response so the user gets one
429
+ // coherent, readable answer regardless of what the planner/executor
430
+ // produced. Skip when there is a single task — its result (string or
431
+ // structured) already represents the final answer for that objective.
432
+ const allResults = executor.getAllResults();
433
+ const taskCount = Object.keys(allResults).length;
434
+ if (taskCount === 0) {
435
+ this.results = executor.getFinalResult();
436
+ }
437
+ else if (taskCount === 1) {
438
+ const singleResult = Object.values(allResults)[0];
439
+ const isEmptyString = typeof singleResult === "string" && singleResult.trim().length === 0;
440
+ if (singleResult == null || isEmptyString) {
441
+ yield* this.synthesizeFinalResponse(context, allResults, taskPlan);
442
+ }
443
+ else if (this.outputFormat === "structured" &&
444
+ this.outputSchema &&
445
+ typeof singleResult === "string") {
446
+ this.results = { markdown: singleResult };
447
+ }
448
+ else {
449
+ this.results = singleResult;
450
+ }
451
+ }
452
+ else {
453
+ yield* this.synthesizeFinalResponse(context, allResults, taskPlan);
454
+ }
455
+ log.info("Agent completed", { name: this.name });
456
+ }
457
+ /**
458
+ * Run a final LLM call that synthesizes all task results into one coherent
459
+ * response for the user. Streams chunks as ProcessingMessage so the UI sees
460
+ * the answer being composed in real time. Sets `this.results` to the
461
+ * synthesized string (or wraps in the outputSchema shape).
462
+ */
463
+ async *synthesizeFinalResponse(_context, allResults, taskPlan) {
464
+ const titleById = new Map(taskPlan.tasks.map((t) => [t.id, t.title]));
465
+ const sections = [];
466
+ for (const [taskId, result] of Object.entries(allResults)) {
467
+ const title = titleById.get(taskId) ?? taskId;
468
+ const body = typeof result === "string"
469
+ ? result
470
+ : (() => {
471
+ try {
472
+ return JSON.stringify(result, null, 2);
473
+ }
474
+ catch {
475
+ return String(result);
476
+ }
477
+ })();
478
+ sections.push(`## ${title} (${taskId})\n${body}`);
479
+ }
480
+ const formatHint = this.outputFormat === "structured"
481
+ ? "Respond in well-formatted markdown."
482
+ : outputFormatDirective(this.outputFormat) ??
483
+ "Respond in well-formatted markdown.";
484
+ const systemPrompt = (this.systemPrompt ? this.systemPrompt + "\n\n" : "") +
485
+ "You are finishing a multi-task job. Combine the results from every task below into a single coherent response for the user.\n\n" +
486
+ "## Rules\n" +
487
+ "- Preserve every concrete artifact (image URLs, file paths, tables, key facts) — never drop or paraphrase them away.\n" +
488
+ "- Do not mention the task IDs or internal task structure to the user.\n" +
489
+ "- Do not reveal chain-of-thought or internal deliberation.\n" +
490
+ formatHint;
491
+ const userPrompt = `Original request:\n${this.objective}\n\nTask results:\n${sections.join("\n\n")}\n\nProduce the final answer now.`;
492
+ const messages = [
493
+ { role: "system", content: systemPrompt },
494
+ { role: "user", content: userPrompt }
495
+ ];
496
+ log.info("Synthesizing final response", {
497
+ taskCount: Object.keys(allResults).length
498
+ });
499
+ let content = "";
500
+ try {
501
+ for await (const item of this.provider.generateMessagesTraced({
502
+ messages,
503
+ model: this.model
504
+ })) {
505
+ if ("type" in item && item.type === "chunk") {
506
+ const chunk = item;
507
+ const text = chunk.content ?? "";
508
+ if (!text)
509
+ continue;
510
+ content += text;
511
+ yield {
512
+ type: "chunk",
513
+ node_id: "agent_synthesizer",
514
+ content: text,
515
+ done: false
516
+ };
517
+ }
518
+ }
519
+ }
520
+ catch (err) {
521
+ log.warn("Synthesis LLM call failed, falling back to joined results", {
522
+ error: err instanceof Error ? err.message : String(err)
523
+ });
524
+ content = sections.join("\n\n");
525
+ }
526
+ if (!content) {
527
+ content = sections.join("\n\n");
528
+ }
529
+ this.results =
530
+ this.outputFormat === "structured" && this.outputSchema
531
+ ? { markdown: content }
532
+ : content;
533
+ }
534
+ /**
535
+ * Execute a single pre-defined task (legacy path for backward compatibility).
536
+ */
537
+ async *executeSingleTask(context, task, systemPrompt) {
538
+ this.task = task;
539
+ // Apply output schema to the last step if specified
540
+ if (this.outputSchema && task.steps.length > 0) {
541
+ task.steps[task.steps.length - 1].outputSchema = JSON.stringify(this.outputSchema);
542
+ }
543
+ log.info("Executing single task", { name: this.name, title: task.title });
544
+ yield {
545
+ type: "log_update",
546
+ node_id: "agent_executor",
547
+ node_name: this.name,
548
+ content: `Starting execution of ${task.steps.length} steps...`,
549
+ severity: "info"
550
+ };
551
+ const executor = new TaskExecutor({
552
+ provider: this.provider,
553
+ model: this.model,
554
+ context,
555
+ tools: [...this.tools],
556
+ task,
557
+ systemPrompt,
558
+ inputs: this.inputs,
559
+ maxSteps: this.maxSteps,
560
+ maxStepIterations: this.maxStepIterations,
561
+ maxTokenLimit: this.maxTokenLimit,
562
+ parallelExecution: true
563
+ });
564
+ for await (const item of executor.executeTasks()) {
565
+ if (item.type === "step_result") {
566
+ const stepResult = item;
567
+ if (stepResult.is_task_result) {
568
+ log.info("Setting final results", {
569
+ objective: this.objective.slice(0, 50)
570
+ });
571
+ this.results = stepResult.result;
572
+ yield {
573
+ type: "task_update",
574
+ event: TaskUpdateEvent.TaskCompleted,
575
+ task: task
576
+ };
577
+ }
578
+ }
579
+ yield item;
580
+ }
581
+ log.info("Agent completed", { name: this.name });
582
+ }
583
+ getResults() {
584
+ return this.results;
585
+ }
586
+ }
587
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,GAAG,GAAG,YAAY,CAAC,uBAAuB,CAAC,CAAC;AASlD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAGnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAEL,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAa5B,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAC3C,MAAM,UAAU,GAAG,SAAS,CAAC;AAC7B,MAAM,oBAAoB,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACrD,MAAM,aAAa,GAAG,YAAY,CAAC;AAEnC;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,QAAQ,KAAK,CAAC,CAAC;YAAE,SAAS;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,2BAA2B;QAC3B,IACE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC9C,CAAC;YACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACnC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,uBAAuB,CAAC,WAAmB;IAClD,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,IAAI;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,iBAAiB,CAC9B,SAAiB;IAEjB,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAErC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,GAAW;IACvC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,OAAmC,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAW;IAEX,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,SAAS,mBAAmB,CAAC,KAAe;IAC1C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAqCD,MAAM,OAAO,KAAM,SAAQ,SAAS;IACjB,WAAW,CAAS;IACpB,aAAa,CAAS;IACtB,cAAc,CAAS;IACvB,QAAQ,CAAS;IACjB,iBAAiB,CAAS;IAC1B,YAAY,CAA2B;IACvC,YAAY,CAAoB;IAChC,SAAS,CAAU;IACnB,eAAe,CAAY;IAC3B,SAAS,CAAW;IACpB,WAAW,CAAQ;IACpC,+CAA+C;IAC/C,QAAQ,GAAoB,IAAI,CAAC;IAEjC,YAAY,IAAkB;QAC5B,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC;YACJ,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;QACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC;QACtD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC;QACxD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,EAAE,CAAC;QACtD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC;QACtD,yEAAyE;QACzE,IAAI,CAAC,YAAY;YACf,IAAI,CAAC,YAAY,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC;QAC7B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,iCAAiC;QACjC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACzB,IAAI,OAAO,EAAE,CAAC;oBACZ,QAAQ,CAAC,IAAI,CACX,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;wBACrB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;wBACpC,CAAC,CAAC,OAAO,CACZ,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,EAC5C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAC5C,CAAC;QAEF,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc;QAC1B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAsB,CAAC;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAErC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,CAAC,0BAA0B;YACtC,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC;YAClD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBAChC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACK,mBAAmB,CACzB,SAAkC,EAClC,SAA+B;QAE/B,sDAAsD;QACtD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,YAAY;aAC1B,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAC;QACnB,MAAM,aAAa,GAAG,mBAAmB,CAAC;YACxC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;YACpB,GAAG,QAAQ;SACZ,CAAC,CAAC;QAEH,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAiB,EAAE,CAAC;YAChC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClC,IAAI,KAAK;oBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,iCAAiC;QACjC,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CACvD,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CACjE,CAAC;QACF,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAE5B,wDAAwD;QACxD,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAC9D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CACrB,CACF,CAAC;QAEF,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CACjE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CACrB,CACF,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;gBAC1B,IAAI,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC1B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACnB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,MAAoB;QACjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,MAAM,QAAQ,GAAG;YACf,gBAAgB;YAChB,8DAA8D;SAC/D,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QAC7D,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,MAAoB;QAClD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAM;aACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;aAC3C,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,GAAG,IAAI,CAAC,SAAS,yBAAyB,SAAS,EAAE,CAAC;IAC/D,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,WAA0B;QAClD,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,YAAY;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,eAAe,GAAG,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjE,IAAI,eAAe;YAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACjD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACzC,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,CAAC,OAAO,CACZ,OAA0B;QAE1B,KAAK,CAAC,CAAC,gBAAgB,CACrB,SAAS,EACT;YACE,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,QAAQ;YAChC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YAC7B,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,IAAI,EAAE;SACnC,EACD,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CACjC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,CAAC,YAAY,CACzB,OAA0B;QAE1B,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACvC,CAAC,CAAC;QAEH,8BAA8B;QAC9B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAC3C,eAAe,EACf,IAAI,CAAC,eAAe,CACrB,CAAC;QACF,MAAM,iBAAiB,GAAG,IAAI,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;QACpE,MAAM,kBAAkB,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;QACtE,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;QAErE,oCAAoC;QACpC,MAAM,aAAa,GACjB,IAAI,CAAC,SAAS;YACd,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvE,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEnD,qEAAqE;QACrE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,KAAK,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAC3B,OAAO,EACP,IAAI,CAAC,WAAW,EAChB,kBAAkB,CACnB,CAAC;YACF,OAAO;QACT,CAAC;QAED,uEAAuE;QACvE,GAAG,CAAC,IAAI,CAAC,wBAAwB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM;YACJ,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,eAAe;YACxB,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,OAAO,EAAE,0CAA0C,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK;YACpF,QAAQ,EAAE,MAAM;SACG,CAAC;QAEtB,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC;YAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,aAAa;YACzB,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,kBAAkB;YAChC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;QACnE,IAAI,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACxB,MAAM,UAAU,CAAC,KAAK,CAAC;YACvB,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACpC,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC;QAElC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE;gBACxB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,iDAAiD;aACzD,CAAC,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,+DAA+D;QAC/D,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE;YAC5B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;YAC5B,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;SACvE,CAAC,CAAC;QAEH,qEAAqE;QACrE,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC3D,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,YAAY;oBACpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAChC,CAAC,CACF,CAAC;QACF,MAAM,gBAAgB,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAC5C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAChD,CAAC,MAAM,CAAC;QAET,MAAM;YACJ,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,OAAO,EAAE,gCAAgC,QAAQ,CAAC,KAAK,CAAC,MAAM,WAAW,gBAAgB,qBAAqB,UAAU,iBAAiB;YACzI,QAAQ,EAAE,MAAM;SACG,CAAC;QAEtB,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC;YACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO;YACP,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACtB,QAAQ;YACR,YAAY,EAAE,kBAAkB;YAChC,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;YAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAChC,MAAM,UAAU,GAAG,IAAkB,CAAC;gBACtC,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;oBAC9B,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE;wBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;qBACvC,CAAC,CAAC;oBACH,kEAAkE;oBAClE,iEAAiE;gBACnE,CAAC;YACH,CAAC;YACD,MAAM,IAAI,CAAC;QACb,CAAC;QAED,oEAAoE;QACpE,oEAAoE;QACpE,qEAAqE;QACrE,sEAAsE;QACtE,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC;QAEjD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;QAC3C,CAAC;aAAM,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,aAAa,GACjB,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;YACvE,IAAI,YAAY,IAAI,IAAI,IAAI,aAAa,EAAE,CAAC;gBAC1C,KAAK,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;YACrE,CAAC;iBAAM,IACL,IAAI,CAAC,YAAY,KAAK,YAAY;gBAClC,IAAI,CAAC,YAAY;gBACjB,OAAO,YAAY,KAAK,QAAQ,EAChC,CAAC;gBACD,IAAI,CAAC,OAAO,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;YAC5C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;YAC9B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrE,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,CAAC,uBAAuB,CACpC,QAA2B,EAC3B,UAAmC,EACnC,QAAkB;QAElB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtE,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;YAC9C,MAAM,IAAI,GACR,OAAO,MAAM,KAAK,QAAQ;gBACxB,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,CAAC,GAAG,EAAE;oBACJ,IAAI,CAAC;wBACH,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;oBACzC,CAAC;oBAAC,MAAM,CAAC;wBACP,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC;YACX,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,UAAU,GACd,IAAI,CAAC,YAAY,KAAK,YAAY;YAChC,CAAC,CAAC,qCAAqC;YACvC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC;gBACxC,qCAAqC,CAAC;QAE5C,MAAM,YAAY,GAChB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,iIAAiI;YACjI,YAAY;YACZ,wHAAwH;YACxH,yEAAyE;YACzE,8DAA8D;YAC9D,UAAU,CAAC;QAEb,MAAM,UAAU,GAAG,sBAAsB,IAAI,CAAC,SAAS,sBAAsB,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,mCAAmC,CAAC;QAEtI,MAAM,QAAQ,GAAc;YAC1B,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;YACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;SACtC,CAAC;QAEF,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE;YACtC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM;SAC1C,CAAC,CAAC;QAEH,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC;gBAC5D,QAAQ;gBACR,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC,EAAE,CAAC;gBACH,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC5C,MAAM,KAAK,GAAG,IAA4B,CAAC;oBAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;oBACjC,IAAI,CAAC,IAAI;wBAAE,SAAS;oBACpB,OAAO,IAAI,IAAI,CAAC;oBAChB,MAAM;wBACJ,IAAI,EAAE,OAAO;wBACb,OAAO,EAAE,mBAAmB;wBAC5B,OAAO,EAAE,IAAI;wBACb,IAAI,EAAE,KAAK;qBACI,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,2DAA2D,EAAE;gBACpE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;aACxD,CAAC,CAAC;YACH,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;QAED,IAAI,CAAC,OAAO;YACV,IAAI,CAAC,YAAY,KAAK,YAAY,IAAI,IAAI,CAAC,YAAY;gBACrD,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE;gBACvB,CAAC,CAAC,OAAO,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,CAAC,iBAAiB,CAC9B,OAA0B,EAC1B,IAAU,EACV,YAAgC;QAEhC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,oDAAoD;QACpD,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAC7D,IAAI,CAAC,YAAY,CAClB,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAE1E,MAAM;YACJ,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,gBAAgB;YACzB,SAAS,EAAE,IAAI,CAAC,IAAI;YACpB,OAAO,EAAE,yBAAyB,IAAI,CAAC,KAAK,CAAC,MAAM,WAAW;YAC9D,QAAQ,EAAE,MAAM;SACG,CAAC;QAEtB,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC;YAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO;YACP,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACtB,IAAI;YACJ,YAAY;YACZ,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,iBAAiB,EAAE,IAAI;SACxB,CAAC,CAAC;QAEH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;YACjD,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAChC,MAAM,UAAU,GAAG,IAAkB,CAAC;gBACtC,IAAI,UAAU,CAAC,cAAc,EAAE,CAAC;oBAC9B,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE;wBAChC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;qBACvC,CAAC,CAAC;oBACH,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC;oBACjC,MAAM;wBACJ,IAAI,EAAE,aAAa;wBACnB,KAAK,EAAE,eAAe,CAAC,aAAa;wBACpC,IAAI,EAAE,IAAqC;qBACvB,CAAC;gBACzB,CAAC;YACH,CAAC;YACD,MAAM,IAAI,CAAC;QACb,CAAC;QAED,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Abstract base class for all agents.
3
+ *
4
+ * Port of src/nodetool/agents/base_agent.py
5
+ */
6
+ import type { BaseProvider } from "@nodetool-ai/runtime";
7
+ import type { ProcessingContext } from "@nodetool-ai/runtime";
8
+ import type { ProcessingMessage } from "@nodetool-ai/protocol";
9
+ import type { Tool } from "./tools/base-tool.js";
10
+ import type { Task } from "./types.js";
11
+ export declare abstract class BaseAgent {
12
+ readonly name: string;
13
+ readonly objective: string;
14
+ readonly provider: BaseProvider;
15
+ readonly model: string;
16
+ readonly tools: Tool[];
17
+ readonly inputs: Record<string, unknown>;
18
+ readonly systemPrompt: string;
19
+ readonly maxTokenLimit: number;
20
+ results: unknown;
21
+ task: Task | null;
22
+ constructor(opts: {
23
+ name: string;
24
+ objective: string;
25
+ provider: BaseProvider;
26
+ model: string;
27
+ tools?: Tool[];
28
+ inputs?: Record<string, unknown>;
29
+ systemPrompt?: string;
30
+ maxTokenLimit?: number;
31
+ });
32
+ /**
33
+ * Execute the agent's objective.
34
+ * Subclasses must implement this to define planning and execution logic.
35
+ */
36
+ abstract execute(context: ProcessingContext): AsyncGenerator<ProcessingMessage>;
37
+ /**
38
+ * Retrieve the results of the agent's execution.
39
+ */
40
+ abstract getResults(): unknown;
41
+ }
42
+ //# sourceMappingURL=base-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-agent.d.ts","sourceRoot":"","sources":["../src/base-agent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,8BAAsB,SAAS;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAQ;IACxB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAQ;gBAEb,IAAI,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,YAAY,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB;IAWD;;;OAGG;IACH,QAAQ,CAAC,OAAO,CACd,OAAO,EAAE,iBAAiB,GACzB,cAAc,CAAC,iBAAiB,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,UAAU,IAAI,OAAO;CAC/B"}