agentx-sdk 0.1.0

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 (318) hide show
  1. package/README.md +561 -0
  2. package/dist/agent.d.ts +105 -0
  3. package/dist/agent.d.ts.map +1 -0
  4. package/dist/agent.js +690 -0
  5. package/dist/agent.js.map +1 -0
  6. package/dist/config/config.d.ts +346 -0
  7. package/dist/config/config.d.ts.map +1 -0
  8. package/dist/config/config.js +93 -0
  9. package/dist/config/config.js.map +1 -0
  10. package/dist/contracts/entities/agent-event.d.ts +97 -0
  11. package/dist/contracts/entities/agent-event.d.ts.map +1 -0
  12. package/dist/contracts/entities/agent-event.js +2 -0
  13. package/dist/contracts/entities/agent-event.js.map +1 -0
  14. package/dist/contracts/entities/agent-skill.d.ts +59 -0
  15. package/dist/contracts/entities/agent-skill.d.ts.map +1 -0
  16. package/dist/contracts/entities/agent-skill.js +2 -0
  17. package/dist/contracts/entities/agent-skill.js.map +1 -0
  18. package/dist/contracts/entities/agent-tool.d.ts +42 -0
  19. package/dist/contracts/entities/agent-tool.d.ts.map +1 -0
  20. package/dist/contracts/entities/agent-tool.js +2 -0
  21. package/dist/contracts/entities/agent-tool.js.map +1 -0
  22. package/dist/contracts/entities/chat-message.d.ts +13 -0
  23. package/dist/contracts/entities/chat-message.d.ts.map +1 -0
  24. package/dist/contracts/entities/chat-message.js +2 -0
  25. package/dist/contracts/entities/chat-message.js.map +1 -0
  26. package/dist/contracts/entities/content-part.d.ts +16 -0
  27. package/dist/contracts/entities/content-part.d.ts.map +1 -0
  28. package/dist/contracts/entities/content-part.js +2 -0
  29. package/dist/contracts/entities/content-part.js.map +1 -0
  30. package/dist/contracts/entities/execution-context.d.ts +9 -0
  31. package/dist/contracts/entities/execution-context.d.ts.map +1 -0
  32. package/dist/contracts/entities/execution-context.js +2 -0
  33. package/dist/contracts/entities/execution-context.js.map +1 -0
  34. package/dist/contracts/entities/index.d.ts +11 -0
  35. package/dist/contracts/entities/index.d.ts.map +1 -0
  36. package/dist/contracts/entities/index.js +2 -0
  37. package/dist/contracts/entities/index.js.map +1 -0
  38. package/dist/contracts/entities/knowledge.d.ts +21 -0
  39. package/dist/contracts/entities/knowledge.d.ts.map +1 -0
  40. package/dist/contracts/entities/knowledge.js +2 -0
  41. package/dist/contracts/entities/knowledge.js.map +1 -0
  42. package/dist/contracts/entities/stores.d.ts +18 -0
  43. package/dist/contracts/entities/stores.d.ts.map +1 -0
  44. package/dist/contracts/entities/stores.js +2 -0
  45. package/dist/contracts/entities/stores.js.map +1 -0
  46. package/dist/contracts/entities/token-usage.d.ts +7 -0
  47. package/dist/contracts/entities/token-usage.d.ts.map +1 -0
  48. package/dist/contracts/entities/token-usage.js +2 -0
  49. package/dist/contracts/entities/token-usage.js.map +1 -0
  50. package/dist/contracts/entities/tool-call.d.ts +16 -0
  51. package/dist/contracts/entities/tool-call.d.ts.map +1 -0
  52. package/dist/contracts/entities/tool-call.js +2 -0
  53. package/dist/contracts/entities/tool-call.js.map +1 -0
  54. package/dist/contracts/enums/index.d.ts +21 -0
  55. package/dist/contracts/enums/index.d.ts.map +1 -0
  56. package/dist/contracts/enums/index.js +8 -0
  57. package/dist/contracts/enums/index.js.map +1 -0
  58. package/dist/contracts/index.d.ts +3 -0
  59. package/dist/contracts/index.d.ts.map +1 -0
  60. package/dist/contracts/index.js +3 -0
  61. package/dist/contracts/index.js.map +1 -0
  62. package/dist/core/compaction/autocompact.d.ts +18 -0
  63. package/dist/core/compaction/autocompact.d.ts.map +1 -0
  64. package/dist/core/compaction/autocompact.js +68 -0
  65. package/dist/core/compaction/autocompact.js.map +1 -0
  66. package/dist/core/compaction/microcompact.d.ts +20 -0
  67. package/dist/core/compaction/microcompact.d.ts.map +1 -0
  68. package/dist/core/compaction/microcompact.js +38 -0
  69. package/dist/core/compaction/microcompact.js.map +1 -0
  70. package/dist/core/compaction/snip-compact.d.ts +22 -0
  71. package/dist/core/compaction/snip-compact.d.ts.map +1 -0
  72. package/dist/core/compaction/snip-compact.js +61 -0
  73. package/dist/core/compaction/snip-compact.js.map +1 -0
  74. package/dist/core/compaction/tool-result-budget.d.ts +24 -0
  75. package/dist/core/compaction/tool-result-budget.d.ts.map +1 -0
  76. package/dist/core/compaction/tool-result-budget.js +67 -0
  77. package/dist/core/compaction/tool-result-budget.js.map +1 -0
  78. package/dist/core/context-analysis.d.ts +24 -0
  79. package/dist/core/context-analysis.d.ts.map +1 -0
  80. package/dist/core/context-analysis.js +37 -0
  81. package/dist/core/context-analysis.js.map +1 -0
  82. package/dist/core/context-builder.d.ts +25 -0
  83. package/dist/core/context-builder.d.ts.map +1 -0
  84. package/dist/core/context-builder.js +108 -0
  85. package/dist/core/context-builder.js.map +1 -0
  86. package/dist/core/conversation-manager.d.ts +19 -0
  87. package/dist/core/conversation-manager.d.ts.map +1 -0
  88. package/dist/core/conversation-manager.js +62 -0
  89. package/dist/core/conversation-manager.js.map +1 -0
  90. package/dist/core/execution-context.d.ts +6 -0
  91. package/dist/core/execution-context.d.ts.map +1 -0
  92. package/dist/core/execution-context.js +14 -0
  93. package/dist/core/execution-context.js.map +1 -0
  94. package/dist/core/loop-deps.d.ts +15 -0
  95. package/dist/core/loop-deps.d.ts.map +1 -0
  96. package/dist/core/loop-deps.js +8 -0
  97. package/dist/core/loop-deps.js.map +1 -0
  98. package/dist/core/loop-types.d.ts +34 -0
  99. package/dist/core/loop-types.d.ts.map +1 -0
  100. package/dist/core/loop-types.js +15 -0
  101. package/dist/core/loop-types.js.map +1 -0
  102. package/dist/core/message-normalize.d.ts +18 -0
  103. package/dist/core/message-normalize.d.ts.map +1 -0
  104. package/dist/core/message-normalize.js +69 -0
  105. package/dist/core/message-normalize.js.map +1 -0
  106. package/dist/core/prompt-builders.d.ts +36 -0
  107. package/dist/core/prompt-builders.d.ts.map +1 -0
  108. package/dist/core/prompt-builders.js +89 -0
  109. package/dist/core/prompt-builders.js.map +1 -0
  110. package/dist/core/prompt-cache.d.ts +25 -0
  111. package/dist/core/prompt-cache.d.ts.map +1 -0
  112. package/dist/core/prompt-cache.js +34 -0
  113. package/dist/core/prompt-cache.js.map +1 -0
  114. package/dist/core/react-loop.d.ts +43 -0
  115. package/dist/core/react-loop.d.ts.map +1 -0
  116. package/dist/core/react-loop.js +403 -0
  117. package/dist/core/react-loop.js.map +1 -0
  118. package/dist/core/stop-hooks.d.ts +18 -0
  119. package/dist/core/stop-hooks.d.ts.map +1 -0
  120. package/dist/core/stop-hooks.js +18 -0
  121. package/dist/core/stop-hooks.js.map +1 -0
  122. package/dist/core/stream-emitter.d.ts +24 -0
  123. package/dist/core/stream-emitter.d.ts.map +1 -0
  124. package/dist/core/stream-emitter.js +65 -0
  125. package/dist/core/stream-emitter.js.map +1 -0
  126. package/dist/core/streaming-tool-executor.d.ts +54 -0
  127. package/dist/core/streaming-tool-executor.d.ts.map +1 -0
  128. package/dist/core/streaming-tool-executor.js +164 -0
  129. package/dist/core/streaming-tool-executor.js.map +1 -0
  130. package/dist/core/turn-end-hooks.d.ts +39 -0
  131. package/dist/core/turn-end-hooks.d.ts.map +1 -0
  132. package/dist/core/turn-end-hooks.js +36 -0
  133. package/dist/core/turn-end-hooks.js.map +1 -0
  134. package/dist/index.d.ts +39 -0
  135. package/dist/index.d.ts.map +1 -0
  136. package/dist/index.js +45 -0
  137. package/dist/index.js.map +1 -0
  138. package/dist/knowledge/chunking.d.ts +9 -0
  139. package/dist/knowledge/chunking.d.ts.map +1 -0
  140. package/dist/knowledge/chunking.js +49 -0
  141. package/dist/knowledge/chunking.js.map +1 -0
  142. package/dist/knowledge/embedding-service.d.ts +16 -0
  143. package/dist/knowledge/embedding-service.d.ts.map +1 -0
  144. package/dist/knowledge/embedding-service.js +43 -0
  145. package/dist/knowledge/embedding-service.js.map +1 -0
  146. package/dist/knowledge/knowledge-manager.d.ts +33 -0
  147. package/dist/knowledge/knowledge-manager.d.ts.map +1 -0
  148. package/dist/knowledge/knowledge-manager.js +62 -0
  149. package/dist/knowledge/knowledge-manager.js.map +1 -0
  150. package/dist/knowledge/sqlite-vector-store.d.ts +16 -0
  151. package/dist/knowledge/sqlite-vector-store.d.ts.map +1 -0
  152. package/dist/knowledge/sqlite-vector-store.js +56 -0
  153. package/dist/knowledge/sqlite-vector-store.js.map +1 -0
  154. package/dist/knowledge/vector-store.d.ts +2 -0
  155. package/dist/knowledge/vector-store.d.ts.map +1 -0
  156. package/dist/knowledge/vector-store.js +2 -0
  157. package/dist/knowledge/vector-store.js.map +1 -0
  158. package/dist/llm/errors.d.ts +15 -0
  159. package/dist/llm/errors.d.ts.map +1 -0
  160. package/dist/llm/errors.js +39 -0
  161. package/dist/llm/errors.js.map +1 -0
  162. package/dist/llm/message-types.d.ts +80 -0
  163. package/dist/llm/message-types.d.ts.map +1 -0
  164. package/dist/llm/message-types.js +2 -0
  165. package/dist/llm/message-types.js.map +1 -0
  166. package/dist/llm/openrouter-client.d.ts +18 -0
  167. package/dist/llm/openrouter-client.d.ts.map +1 -0
  168. package/dist/llm/openrouter-client.js +215 -0
  169. package/dist/llm/openrouter-client.js.map +1 -0
  170. package/dist/llm/reasoning.d.ts +10 -0
  171. package/dist/llm/reasoning.d.ts.map +1 -0
  172. package/dist/llm/reasoning.js +18 -0
  173. package/dist/llm/reasoning.js.map +1 -0
  174. package/dist/memory/file-memory-system.d.ts +98 -0
  175. package/dist/memory/file-memory-system.d.ts.map +1 -0
  176. package/dist/memory/file-memory-system.js +310 -0
  177. package/dist/memory/file-memory-system.js.map +1 -0
  178. package/dist/memory/memory-age.d.ts +22 -0
  179. package/dist/memory/memory-age.d.ts.map +1 -0
  180. package/dist/memory/memory-age.js +44 -0
  181. package/dist/memory/memory-age.js.map +1 -0
  182. package/dist/memory/memory-extractor.d.ts +56 -0
  183. package/dist/memory/memory-extractor.d.ts.map +1 -0
  184. package/dist/memory/memory-extractor.js +91 -0
  185. package/dist/memory/memory-extractor.js.map +1 -0
  186. package/dist/memory/memory-paths.d.ts +45 -0
  187. package/dist/memory/memory-paths.d.ts.map +1 -0
  188. package/dist/memory/memory-paths.js +121 -0
  189. package/dist/memory/memory-paths.js.map +1 -0
  190. package/dist/memory/memory-prompts.d.ts +41 -0
  191. package/dist/memory/memory-prompts.d.ts.map +1 -0
  192. package/dist/memory/memory-prompts.js +279 -0
  193. package/dist/memory/memory-prompts.js.map +1 -0
  194. package/dist/memory/memory-relevance.d.ts +16 -0
  195. package/dist/memory/memory-relevance.d.ts.map +1 -0
  196. package/dist/memory/memory-relevance.js +46 -0
  197. package/dist/memory/memory-relevance.js.map +1 -0
  198. package/dist/memory/memory-scanner.d.ts +22 -0
  199. package/dist/memory/memory-scanner.d.ts.map +1 -0
  200. package/dist/memory/memory-scanner.js +99 -0
  201. package/dist/memory/memory-scanner.js.map +1 -0
  202. package/dist/memory/memory-tools.d.ts +16 -0
  203. package/dist/memory/memory-tools.d.ts.map +1 -0
  204. package/dist/memory/memory-tools.js +196 -0
  205. package/dist/memory/memory-tools.js.map +1 -0
  206. package/dist/memory/memory-types.d.ts +47 -0
  207. package/dist/memory/memory-types.d.ts.map +1 -0
  208. package/dist/memory/memory-types.js +24 -0
  209. package/dist/memory/memory-types.js.map +1 -0
  210. package/dist/skills/skill-args.d.ts +23 -0
  211. package/dist/skills/skill-args.d.ts.map +1 -0
  212. package/dist/skills/skill-args.js +77 -0
  213. package/dist/skills/skill-args.js.map +1 -0
  214. package/dist/skills/skill-glob.d.ts +24 -0
  215. package/dist/skills/skill-glob.d.ts.map +1 -0
  216. package/dist/skills/skill-glob.js +60 -0
  217. package/dist/skills/skill-glob.js.map +1 -0
  218. package/dist/skills/skill-loader.d.ts +49 -0
  219. package/dist/skills/skill-loader.d.ts.map +1 -0
  220. package/dist/skills/skill-loader.js +197 -0
  221. package/dist/skills/skill-loader.js.map +1 -0
  222. package/dist/skills/skill-manager.d.ts +83 -0
  223. package/dist/skills/skill-manager.d.ts.map +1 -0
  224. package/dist/skills/skill-manager.js +338 -0
  225. package/dist/skills/skill-manager.js.map +1 -0
  226. package/dist/storage/sqlite-conversation-store.d.ts +15 -0
  227. package/dist/storage/sqlite-conversation-store.d.ts.map +1 -0
  228. package/dist/storage/sqlite-conversation-store.js +45 -0
  229. package/dist/storage/sqlite-conversation-store.js.map +1 -0
  230. package/dist/storage/sqlite-database.d.ts +14 -0
  231. package/dist/storage/sqlite-database.d.ts.map +1 -0
  232. package/dist/storage/sqlite-database.js +95 -0
  233. package/dist/storage/sqlite-database.js.map +1 -0
  234. package/dist/tools/builtin/ask-user.d.ts +7 -0
  235. package/dist/tools/builtin/ask-user.d.ts.map +1 -0
  236. package/dist/tools/builtin/ask-user.js +23 -0
  237. package/dist/tools/builtin/ask-user.js.map +1 -0
  238. package/dist/tools/builtin/bash.d.ts +3 -0
  239. package/dist/tools/builtin/bash.d.ts.map +1 -0
  240. package/dist/tools/builtin/bash.js +54 -0
  241. package/dist/tools/builtin/bash.js.map +1 -0
  242. package/dist/tools/builtin/file-edit.d.ts +3 -0
  243. package/dist/tools/builtin/file-edit.d.ts.map +1 -0
  244. package/dist/tools/builtin/file-edit.js +50 -0
  245. package/dist/tools/builtin/file-edit.js.map +1 -0
  246. package/dist/tools/builtin/file-read.d.ts +3 -0
  247. package/dist/tools/builtin/file-read.d.ts.map +1 -0
  248. package/dist/tools/builtin/file-read.js +47 -0
  249. package/dist/tools/builtin/file-read.js.map +1 -0
  250. package/dist/tools/builtin/file-write.d.ts +3 -0
  251. package/dist/tools/builtin/file-write.d.ts.map +1 -0
  252. package/dist/tools/builtin/file-write.js +29 -0
  253. package/dist/tools/builtin/file-write.js.map +1 -0
  254. package/dist/tools/builtin/glob.d.ts +3 -0
  255. package/dist/tools/builtin/glob.d.ts.map +1 -0
  256. package/dist/tools/builtin/glob.js +67 -0
  257. package/dist/tools/builtin/glob.js.map +1 -0
  258. package/dist/tools/builtin/grep.d.ts +3 -0
  259. package/dist/tools/builtin/grep.d.ts.map +1 -0
  260. package/dist/tools/builtin/grep.js +94 -0
  261. package/dist/tools/builtin/grep.js.map +1 -0
  262. package/dist/tools/builtin/index.d.ts +49 -0
  263. package/dist/tools/builtin/index.d.ts.map +1 -0
  264. package/dist/tools/builtin/index.js +65 -0
  265. package/dist/tools/builtin/index.js.map +1 -0
  266. package/dist/tools/builtin/web-fetch.d.ts +3 -0
  267. package/dist/tools/builtin/web-fetch.d.ts.map +1 -0
  268. package/dist/tools/builtin/web-fetch.js +56 -0
  269. package/dist/tools/builtin/web-fetch.js.map +1 -0
  270. package/dist/tools/json-schema-to-zod.d.ts +30 -0
  271. package/dist/tools/json-schema-to-zod.d.ts.map +1 -0
  272. package/dist/tools/json-schema-to-zod.js +123 -0
  273. package/dist/tools/json-schema-to-zod.js.map +1 -0
  274. package/dist/tools/mcp-adapter.d.ts +80 -0
  275. package/dist/tools/mcp-adapter.d.ts.map +1 -0
  276. package/dist/tools/mcp-adapter.js +326 -0
  277. package/dist/tools/mcp-adapter.js.map +1 -0
  278. package/dist/tools/skill-tool.d.ts +41 -0
  279. package/dist/tools/skill-tool.d.ts.map +1 -0
  280. package/dist/tools/skill-tool.js +149 -0
  281. package/dist/tools/skill-tool.js.map +1 -0
  282. package/dist/tools/sql/index.d.ts +4 -0
  283. package/dist/tools/sql/index.d.ts.map +1 -0
  284. package/dist/tools/sql/index.js +2 -0
  285. package/dist/tools/sql/index.js.map +1 -0
  286. package/dist/tools/sql/sql-query-def.d.ts +22 -0
  287. package/dist/tools/sql/sql-query-def.d.ts.map +1 -0
  288. package/dist/tools/sql/sql-query-def.js +2 -0
  289. package/dist/tools/sql/sql-query-def.js.map +1 -0
  290. package/dist/tools/sql/sql-tool-factory.d.ts +28 -0
  291. package/dist/tools/sql/sql-tool-factory.d.ts.map +1 -0
  292. package/dist/tools/sql/sql-tool-factory.js +136 -0
  293. package/dist/tools/sql/sql-tool-factory.js.map +1 -0
  294. package/dist/tools/tool-executor.d.ts +67 -0
  295. package/dist/tools/tool-executor.d.ts.map +1 -0
  296. package/dist/tools/tool-executor.js +232 -0
  297. package/dist/tools/tool-executor.js.map +1 -0
  298. package/dist/utils/cache.d.ts +22 -0
  299. package/dist/utils/cache.d.ts.map +1 -0
  300. package/dist/utils/cache.js +61 -0
  301. package/dist/utils/cache.js.map +1 -0
  302. package/dist/utils/logger.d.ts +15 -0
  303. package/dist/utils/logger.d.ts.map +1 -0
  304. package/dist/utils/logger.js +46 -0
  305. package/dist/utils/logger.js.map +1 -0
  306. package/dist/utils/model-context.d.ts +14 -0
  307. package/dist/utils/model-context.d.ts.map +1 -0
  308. package/dist/utils/model-context.js +52 -0
  309. package/dist/utils/model-context.js.map +1 -0
  310. package/dist/utils/retry.d.ts +13 -0
  311. package/dist/utils/retry.d.ts.map +1 -0
  312. package/dist/utils/retry.js +41 -0
  313. package/dist/utils/retry.js.map +1 -0
  314. package/dist/utils/token-counter.d.ts +6 -0
  315. package/dist/utils/token-counter.d.ts.map +1 -0
  316. package/dist/utils/token-counter.js +19 -0
  317. package/dist/utils/token-counter.js.map +1 -0
  318. package/package.json +43 -0
@@ -0,0 +1,149 @@
1
+ /**
2
+ * SkillTool — allows the LLM to invoke skills as tool calls mid-loop.
3
+ *
4
+ * Ported from old_src/tools/SkillTool/SkillTool.ts with adaptations for SDK context.
5
+ *
6
+ * Key behaviors from old_src:
7
+ * - Skill lookup by exact name, alias, and triggerPrefix
8
+ * - Validates modelInvocable flag (disableModelInvocation equivalent)
9
+ * - Dynamic prompt resolution via resolveInstructions()
10
+ * - Registers skill-scoped tools in ToolExecutor when skill activates
11
+ * - Returns resolved prompt as tagged block for the model
12
+ * - Tracks invocation for session (survives compaction via invoked set)
13
+ *
14
+ * Differences from old_src:
15
+ * - No permission system (SDK has no interactive UI to ask user)
16
+ * - No fork mode (SDK uses inline execution only)
17
+ * - No contextModifier (SDK doesn't support mid-loop model/effort override)
18
+ * - No remote skill loading (CLI-specific feature)
19
+ */
20
+ import { z } from 'zod';
21
+ export const SKILL_TOOL_NAME = 'Skill';
22
+ const SkillToolParameters = z.object({
23
+ skill: z.string().describe('The skill name. E.g., "commit", "review-pr", or "translate"'),
24
+ args: z.string().optional().describe('Optional arguments for the skill'),
25
+ });
26
+ /**
27
+ * Build the system prompt section that teaches the model how to use the Skill tool.
28
+ * Ported from old_src/tools/SkillTool/prompt.ts getPrompt().
29
+ */
30
+ export function buildSkillToolPrompt(listing) {
31
+ return [
32
+ 'You have access to a Skill tool that activates specialized behaviors.',
33
+ '',
34
+ 'How to invoke:',
35
+ '- Use the Skill tool with the skill name and optional arguments',
36
+ '- Examples:',
37
+ ' - `skill: "review"` — invoke the review skill',
38
+ ' - `skill: "translate", args: "pt Hello world"` — invoke with arguments',
39
+ ' - `skill: "commit", args: "-m \'Fix bug\'"` — invoke with arguments',
40
+ '',
41
+ 'Important:',
42
+ '- When a skill matches the user\'s request, invoke it BEFORE generating other responses',
43
+ '- Do not mention a skill without actually calling the Skill tool',
44
+ '- Do not invoke a skill that is already active in the current context',
45
+ '- If a <skill> tag already appears in the conversation, the skill is ALREADY loaded — follow its instructions directly instead of calling the Skill tool again',
46
+ '',
47
+ listing,
48
+ ].join('\n');
49
+ }
50
+ /**
51
+ * Find a skill by name, alias, or triggerPrefix.
52
+ * Normalized: strips leading "/" for compatibility.
53
+ */
54
+ function findSkill(skillManager, skillName) {
55
+ const allSkills = skillManager.listAllSkills();
56
+ // 1. Exact name match
57
+ const byName = allSkills.find(s => s.name === skillName);
58
+ if (byName)
59
+ return byName;
60
+ // 2. Normalized name (strip leading /)
61
+ const normalized = skillName.startsWith('/') ? skillName.slice(1) : skillName;
62
+ const byNormalized = allSkills.find(s => s.name === normalized
63
+ || s.aliases?.some(a => {
64
+ const clean = a.startsWith('/') ? a.slice(1) : a;
65
+ return clean === normalized;
66
+ }));
67
+ if (byNormalized)
68
+ return byNormalized;
69
+ // 3. triggerPrefix match
70
+ const withSlash = skillName.startsWith('/') ? skillName : `/${skillName}`;
71
+ return allSkills.find(s => s.triggerPrefix === withSlash);
72
+ }
73
+ /**
74
+ * Create the Skill tool that the model can invoke during the react loop.
75
+ *
76
+ * @param skillManager — manages skill registry and resolution
77
+ * @param toolExecutor — used to register skill-scoped tools mid-loop
78
+ * @param getContext — returns current execution context (threadId, traceId)
79
+ */
80
+ export function createSkillTool(skillManager, toolExecutor, getContext) {
81
+ // Track tools registered by skills during this session (for cleanup)
82
+ const registeredSkillTools = new Set();
83
+ return {
84
+ name: SKILL_TOOL_NAME,
85
+ description: 'Execute a skill by name. Use this when you want to activate a skill\'s specialized behavior. Pass the skill name and optional arguments.',
86
+ parameters: SkillToolParameters,
87
+ isConcurrencySafe: false,
88
+ execute: async (rawArgs) => {
89
+ const { skill: skillName, args = '' } = rawArgs;
90
+ const ctx = getContext();
91
+ // --- Find skill ---
92
+ const skill = findSkill(skillManager, skillName);
93
+ if (!skill) {
94
+ const available = skillManager.listSkills().map(s => s.name).join(', ');
95
+ return {
96
+ content: `Skill "${skillName}" not found. Available skills: ${available || 'none'}`,
97
+ isError: true,
98
+ };
99
+ }
100
+ // --- Validate ---
101
+ if (skill.isEnabled && !skill.isEnabled()) {
102
+ return {
103
+ content: `Skill "${skill.name}" is currently disabled.`,
104
+ isError: true,
105
+ };
106
+ }
107
+ if (skill.modelInvocable === false) {
108
+ return {
109
+ content: `Skill "${skill.name}" cannot be invoked by the model. It must be invoked directly by the user.`,
110
+ isError: true,
111
+ };
112
+ }
113
+ // --- Resolve instructions ---
114
+ const resolved = await skillManager.resolveInstructions(skill, args, {
115
+ threadId: ctx.threadId,
116
+ traceId: ctx.traceId,
117
+ skillDir: skill.skillDir,
118
+ });
119
+ // --- Register skill-scoped tools ---
120
+ if (skill.tools?.length) {
121
+ for (const tool of skill.tools) {
122
+ if (!registeredSkillTools.has(tool.name)) {
123
+ toolExecutor.register(tool);
124
+ registeredSkillTools.add(tool.name);
125
+ }
126
+ }
127
+ }
128
+ // --- Track invocation ---
129
+ skillManager.markInvoked(skill.name);
130
+ // --- Build result ---
131
+ const parts = [
132
+ `<skill name="${skill.name}">`,
133
+ resolved,
134
+ '</skill>',
135
+ ];
136
+ // Append metadata hints for the model
137
+ if (skill.tools?.length) {
138
+ const toolNames = skill.tools.map(t => t.name).join(', ');
139
+ parts.push('', `This skill provides tools: ${toolNames}. Use them as needed.`);
140
+ }
141
+ if (skill.model) {
142
+ parts.push('', `[Note: This skill recommends model "${skill.model}" but the current model will be used.]`);
143
+ }
144
+ parts.push('', `Follow the instructions above from the "${skill.name}" skill.`);
145
+ return parts.join('\n');
146
+ },
147
+ };
148
+ }
149
+ //# sourceMappingURL=skill-tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-tool.js","sourceRoot":"","sources":["../../src/tools/skill-tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { createSqlTools } from './sql-tool-factory.js';
2
+ export type { SqlToolFactoryOptions, SqlQueryRunner } from './sql-tool-factory.js';
3
+ export type { SqlQueryDef } from './sql-query-def.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/sql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACnF,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createSqlTools } from './sql-tool-factory.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/sql/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { ZodObject, ZodRawShape } from 'zod';
2
+ /**
3
+ * Declarative definition of a SQL query exposed as an agent tool.
4
+ *
5
+ * Each definition maps to a named, searchable query that the LLM can
6
+ * discover via `search_queries` and execute via `run_query`.
7
+ */
8
+ export interface SqlQueryDef {
9
+ /** Unique identifier — use domain-prefixed snake_case (e.g. sales_revenue_by_month). */
10
+ name: string;
11
+ /** Human-readable description — the LLM uses this to decide which query to pick. */
12
+ description: string;
13
+ /** Parametrized SQL ($1, $2, …). Parameter order must match the Zod schema key order. */
14
+ sql: string;
15
+ /** Zod schema for query parameters. Key order determines $1, $2, … mapping. */
16
+ parameters: ZodObject<ZodRawShape>;
17
+ /** Tags for search filtering (e.g. ['sales', 'finance']). */
18
+ tags?: string[];
19
+ /** Per-query timeout in milliseconds. Default: 30 000. */
20
+ timeoutMs?: number;
21
+ }
22
+ //# sourceMappingURL=sql-query-def.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-query-def.d.ts","sourceRoot":"","sources":["../../../src/tools/sql/sql-query-def.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAElD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,wFAAwF;IACxF,IAAI,EAAE,MAAM,CAAC;IAEb,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IAEpB,yFAAyF;IACzF,GAAG,EAAE,MAAM,CAAC;IAEZ,+EAA+E;IAC/E,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAEnC,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sql-query-def.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-query-def.js","sourceRoot":"","sources":["../../../src/tools/sql/sql-query-def.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import type { AgentTool } from '../../contracts/entities/agent-tool.js';
2
+ import type { SqlQueryDef } from './sql-query-def.js';
3
+ /** Minimal interface for a Postgres-compatible query runner (e.g. pg.Pool). */
4
+ export interface SqlQueryRunner {
5
+ query(sql: string, values?: unknown[]): Promise<{
6
+ rows: Record<string, unknown>[];
7
+ }>;
8
+ }
9
+ export interface SqlToolFactoryOptions {
10
+ /** Connection pool or client that implements `query()`. */
11
+ pool: SqlQueryRunner;
12
+ /** Catalog of query definitions. */
13
+ queries: SqlQueryDef[];
14
+ /** Max characters for query results before truncation. Default: 8000. */
15
+ maxResultChars?: number;
16
+ /** Default per-query timeout in ms. Default: 30 000. */
17
+ defaultTimeoutMs?: number;
18
+ /** Prefix for tool names. Default: '' (empty). */
19
+ toolNamePrefix?: string;
20
+ }
21
+ /**
22
+ * Creates two meta-tools (`search_queries` + `run_query`) from a catalog of SQL queries.
23
+ *
24
+ * This keeps the LLM context small (2 tool definitions instead of N) while still
25
+ * giving the agent access to all queries via a search→execute workflow.
26
+ */
27
+ export declare function createSqlTools(options: SqlToolFactoryOptions): AgentTool[];
28
+ //# sourceMappingURL=sql-tool-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-tool-factory.d.ts","sourceRoot":"","sources":["../../../src/tools/sql/sql-tool-factory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAiBtD,+EAA+E;AAC/E,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAAE,CAAC,CAAC;CACtF;AAED,MAAM,WAAW,qBAAqB;IACpC,2DAA2D;IAC3D,IAAI,EAAE,cAAc,CAAC;IAErB,oCAAoC;IACpC,OAAO,EAAE,WAAW,EAAE,CAAC;IAEvB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,SAAS,EAAE,CAwI1E"}
@@ -0,0 +1,136 @@
1
+ import { z } from 'zod';
2
+ /** Unwrap Zod wrappers (nullable, optional, default) to get the base type name. */
3
+ function unwrapZodType(schema) {
4
+ if (schema instanceof z.ZodNullable || schema instanceof z.ZodOptional) {
5
+ return unwrapZodType(schema.unwrap());
6
+ }
7
+ if (schema instanceof z.ZodDefault) {
8
+ return unwrapZodType(schema.removeDefault());
9
+ }
10
+ if (schema instanceof z.ZodString)
11
+ return 'string';
12
+ if (schema instanceof z.ZodNumber)
13
+ return 'number';
14
+ if (schema instanceof z.ZodBoolean)
15
+ return 'boolean';
16
+ if (schema instanceof z.ZodEnum)
17
+ return 'enum';
18
+ return 'unknown';
19
+ }
20
+ /**
21
+ * Creates two meta-tools (`search_queries` + `run_query`) from a catalog of SQL queries.
22
+ *
23
+ * This keeps the LLM context small (2 tool definitions instead of N) while still
24
+ * giving the agent access to all queries via a search→execute workflow.
25
+ */
26
+ export function createSqlTools(options) {
27
+ const { pool, queries, maxResultChars = 8_000, defaultTimeoutMs = 30_000, toolNamePrefix = '', } = options;
28
+ const queryMap = new Map();
29
+ for (const q of queries) {
30
+ queryMap.set(q.name, q);
31
+ }
32
+ const searchTool = {
33
+ name: `${toolNamePrefix}search_queries`,
34
+ description: 'Search available SQL queries by keyword. Returns matching query names, descriptions, and parameter info. Use this before run_query to find the right query.',
35
+ parameters: z.object({
36
+ keyword: z
37
+ .string()
38
+ .describe('Search term to match against query names, descriptions, and tags'),
39
+ }),
40
+ isConcurrencySafe: true,
41
+ isReadOnly: true,
42
+ maxResultChars,
43
+ async execute(rawArgs) {
44
+ const { keyword } = rawArgs;
45
+ const lower = keyword.toLowerCase();
46
+ const matches = queries.filter((q) => {
47
+ const haystack = `${q.name} ${q.description} ${(q.tags ?? []).join(' ')}`.toLowerCase();
48
+ return lower.split(/\s+/).every((term) => haystack.includes(term));
49
+ });
50
+ if (matches.length === 0) {
51
+ return `No queries found matching "${keyword}". Try a broader term.`;
52
+ }
53
+ const results = matches.map((q) => {
54
+ const shape = q.parameters.shape;
55
+ const params = {};
56
+ for (const [key, schema] of Object.entries(shape)) {
57
+ const s = schema;
58
+ params[key] = {
59
+ type: unwrapZodType(s),
60
+ nullable: s.isNullable(),
61
+ description: s.description ?? '',
62
+ };
63
+ }
64
+ return {
65
+ name: q.name,
66
+ description: q.description,
67
+ parameters: params,
68
+ tags: q.tags ?? [],
69
+ };
70
+ });
71
+ return JSON.stringify(results, null, 2);
72
+ },
73
+ };
74
+ // Build inline catalog for run_query description so the LLM knows all queries upfront
75
+ const catalog = queries.map((q) => {
76
+ const shape = q.parameters.shape;
77
+ const paramList = Object.entries(shape)
78
+ .map(([key, schema]) => {
79
+ const s = schema;
80
+ const nullable = s.isNullable() ? ', nullable' : '';
81
+ return `${key} (${unwrapZodType(s)}${nullable}): ${s.description ?? ''}`;
82
+ })
83
+ .join('; ');
84
+ return `- ${q.name}: ${q.description} Params: { ${paramList} }`;
85
+ }).join('\n');
86
+ const runTool = {
87
+ name: `${toolNamePrefix}run_query`,
88
+ description: `Execute a SQL query by name. Pass params as key-value pairs. Use null for optional/nullable params you don't need.\n\nAvailable queries:\n${catalog}`,
89
+ parameters: z.object({
90
+ query_name: z.string().describe('Name of the query to execute'),
91
+ params: z
92
+ .record(z.unknown())
93
+ .describe('Parameters as key-value pairs. Use null for nullable params you want to skip'),
94
+ }),
95
+ isConcurrencySafe: true,
96
+ isReadOnly: true,
97
+ maxResultChars,
98
+ timeoutMs: defaultTimeoutMs,
99
+ async execute(rawArgs) {
100
+ const { query_name, params } = rawArgs;
101
+ const def = queryMap.get(query_name);
102
+ if (!def) {
103
+ return {
104
+ content: `Query "${query_name}" not found. Use search_queries to find available queries.`,
105
+ isError: true,
106
+ };
107
+ }
108
+ // Validate params against the query's Zod schema
109
+ const parsed = def.parameters.safeParse(params);
110
+ if (!parsed.success) {
111
+ const errors = parsed.error.issues.map((i) => `${i.path.join('.')}: ${i.message}`);
112
+ return {
113
+ content: `Invalid parameters:\n${errors.join('\n')}`,
114
+ isError: true,
115
+ };
116
+ }
117
+ // Map values in schema key order to match $1, $2, ... in SQL
118
+ const schemaKeys = Object.keys(def.parameters.shape);
119
+ const data = parsed.data;
120
+ const values = schemaKeys.map((key) => data[key] ?? null);
121
+ try {
122
+ const result = await pool.query(def.sql, values);
123
+ if (result.rows.length === 0) {
124
+ return 'Query returned 0 rows.';
125
+ }
126
+ return JSON.stringify(result.rows, null, 2);
127
+ }
128
+ catch (err) {
129
+ const message = err instanceof Error ? err.message : String(err);
130
+ return { content: `Query execution failed: ${message}`, isError: true };
131
+ }
132
+ },
133
+ };
134
+ return [searchTool, runTool];
135
+ }
136
+ //# sourceMappingURL=sql-tool-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-tool-factory.js","sourceRoot":"","sources":["../../../src/tools/sql/sql-tool-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import type { AgentTool, ToolProgressCallback } from '../contracts/entities/agent-tool.js';
2
+ import type { AgentToolResult } from '../contracts/entities/tool-call.js';
3
+ import type { ToolDefinition } from '../llm/message-types.js';
4
+ export interface ToolCallRequest {
5
+ name: string;
6
+ args: unknown;
7
+ }
8
+ export interface ToolHooks {
9
+ beforeToolCall?: (name: string, args: unknown) => void | Promise<void>;
10
+ afterToolCall?: (name: string, args: unknown, result: AgentToolResult) => void | Promise<void>;
11
+ onToolProgress?: (name: string, toolCallId: string, data: Record<string, unknown>) => void;
12
+ }
13
+ export interface ExecuteOptions {
14
+ signal?: AbortSignal;
15
+ toolCallId?: string;
16
+ threadId?: string;
17
+ onProgress?: ToolProgressCallback;
18
+ }
19
+ /**
20
+ * Registers tools, validates args via Zod, converts to JSON Schema,
21
+ * and executes tools with full pipeline:
22
+ *
23
+ * 1. Tool lookup
24
+ * 2. Zod schema validation
25
+ * 3. Semantic validation (tool.validate)
26
+ * 4. Before hook
27
+ * 5. Per-tool timeout wrapping
28
+ * 6. Retry for transient failures
29
+ * 7. Execute with progress callback
30
+ * 8. Result truncation (tool.maxResultChars)
31
+ * 9. Result mapping (tool.mapResult)
32
+ * 10. After hook
33
+ */
34
+ export declare class ToolExecutor {
35
+ private readonly tools;
36
+ private readonly hooks;
37
+ constructor(hooks?: ToolHooks);
38
+ register(tool: AgentTool): void;
39
+ unregister(name: string): boolean;
40
+ listTools(): AgentTool[];
41
+ getToolDefinitions(): ToolDefinition[];
42
+ execute(name: string, args: unknown, signalOrOptions?: AbortSignal | ExecuteOptions): Promise<AgentToolResult>;
43
+ executeParallel(calls: ToolCallRequest[], signal?: AbortSignal): Promise<AgentToolResult[]>;
44
+ /**
45
+ * Executes tool calls respecting concurrency safety:
46
+ * - Consecutive concurrency-safe tools run in parallel
47
+ * - Non-safe tools run serially (one at a time)
48
+ * - Results are returned in the original call order
49
+ */
50
+ executePartitioned(calls: Array<{
51
+ id: string;
52
+ name: string;
53
+ args: unknown;
54
+ }>, signal?: AbortSignal): Promise<Array<{
55
+ id: string;
56
+ result: AgentToolResult;
57
+ }>>;
58
+ /**
59
+ * Build an AbortSignal combining parent signal + per-tool timeout.
60
+ */
61
+ private buildSignal;
62
+ /**
63
+ * Execute with retry support using the existing retry utility.
64
+ */
65
+ private executeWithRetry;
66
+ }
67
+ //# sourceMappingURL=tool-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-executor.d.ts","sourceRoot":"","sources":["../../src/tools/tool-executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/F,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC5F;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC;AAMD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;gBAEtB,KAAK,GAAE,SAAc;IAIjC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAI/B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIjC,SAAS,IAAI,SAAS,EAAE;IAIxB,kBAAkB,IAAI,cAAc,EAAE;IAWhC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAkF9G,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAIjG;;;;;OAKG;IACG,kBAAkB,CACtB,KAAK,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC,EACzD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,eAAe,CAAA;KAAE,CAAC,CAAC;IAqD1D;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;YACW,gBAAgB;CAgC/B"}