@vertesia/tools-sdk 1.3.0 → 1.4.0-dev.20260615.042549Z

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 (271) hide show
  1. package/lib/{types/ActivityCollection.d.ts → ActivityCollection.d.ts} +7 -7
  2. package/lib/ActivityCollection.d.ts.map +1 -0
  3. package/lib/{esm/ActivityCollection.js → ActivityCollection.js} +6 -6
  4. package/lib/ActivityCollection.js.map +1 -0
  5. package/lib/{types/ContentTypesCollection.d.ts → ContentTypesCollection.d.ts} +2 -2
  6. package/lib/ContentTypesCollection.d.ts.map +1 -0
  7. package/lib/{esm/ContentTypesCollection.js → ContentTypesCollection.js} +3 -3
  8. package/lib/ContentTypesCollection.js.map +1 -0
  9. package/lib/{types/InteractionCollection.d.ts → InteractionCollection.d.ts} +2 -2
  10. package/lib/InteractionCollection.d.ts.map +1 -0
  11. package/lib/{esm/InteractionCollection.js → InteractionCollection.js} +3 -3
  12. package/lib/InteractionCollection.js.map +1 -0
  13. package/lib/{types/RenderingTemplateCollection.d.ts → RenderingTemplateCollection.d.ts} +1 -1
  14. package/lib/RenderingTemplateCollection.d.ts.map +1 -0
  15. package/lib/{esm/RenderingTemplateCollection.js → RenderingTemplateCollection.js} +3 -3
  16. package/lib/RenderingTemplateCollection.js.map +1 -0
  17. package/lib/{types/SkillCollection.d.ts → SkillCollection.d.ts} +5 -5
  18. package/lib/SkillCollection.d.ts.map +1 -0
  19. package/lib/{esm/SkillCollection.js → SkillCollection.js} +68 -51
  20. package/lib/SkillCollection.js.map +1 -0
  21. package/lib/{types/ToolCollection.d.ts → ToolCollection.d.ts} +10 -10
  22. package/lib/ToolCollection.d.ts.map +1 -0
  23. package/lib/{esm/ToolCollection.js → ToolCollection.js} +21 -18
  24. package/lib/ToolCollection.js.map +1 -0
  25. package/lib/ToolRegistry.d.ts +22 -0
  26. package/lib/ToolRegistry.d.ts.map +1 -0
  27. package/lib/{esm/ToolRegistry.js → ToolRegistry.js} +6 -36
  28. package/lib/ToolRegistry.js.map +1 -0
  29. package/lib/{types/auth.d.ts → auth.d.ts} +5 -5
  30. package/lib/auth.d.ts.map +1 -0
  31. package/lib/{esm/auth.js → auth.js} +23 -17
  32. package/lib/auth.js.map +1 -0
  33. package/lib/build/validate.d.ts.map +1 -0
  34. package/lib/build/validate.js.map +1 -0
  35. package/lib/copy-assets.d.ts.map +1 -0
  36. package/lib/{esm/copy-assets.js → copy-assets.js} +4 -7
  37. package/lib/copy-assets.js.map +1 -0
  38. package/lib/index.d.ts +16 -0
  39. package/lib/index.d.ts.map +1 -0
  40. package/lib/index.js +15 -0
  41. package/lib/index.js.map +1 -0
  42. package/lib/server/activities.d.ts +4 -0
  43. package/lib/server/activities.d.ts.map +1 -0
  44. package/lib/{esm/server → server}/activities.js +12 -9
  45. package/lib/server/activities.js.map +1 -0
  46. package/lib/server/app-package.d.ts +12 -0
  47. package/lib/server/app-package.d.ts.map +1 -0
  48. package/lib/server/app-package.js +197 -0
  49. package/lib/server/app-package.js.map +1 -0
  50. package/lib/server/content-types.d.ts +4 -0
  51. package/lib/server/content-types.d.ts.map +1 -0
  52. package/lib/server/content-types.js +100 -0
  53. package/lib/server/content-types.js.map +1 -0
  54. package/lib/server/dashboards.d.ts +4 -0
  55. package/lib/server/dashboards.d.ts.map +1 -0
  56. package/lib/server/dashboards.js +25 -0
  57. package/lib/server/dashboards.js.map +1 -0
  58. package/lib/server/interactions.d.ts +4 -0
  59. package/lib/server/interactions.d.ts.map +1 -0
  60. package/lib/{esm/server → server}/interactions.js +16 -16
  61. package/lib/server/interactions.js.map +1 -0
  62. package/lib/server/mcp.d.ts +4 -0
  63. package/lib/server/mcp.d.ts.map +1 -0
  64. package/lib/{esm/server → server}/mcp.js +5 -4
  65. package/lib/server/mcp.js.map +1 -0
  66. package/lib/server/processes.d.ts +4 -0
  67. package/lib/server/processes.d.ts.map +1 -0
  68. package/lib/server/processes.js +26 -0
  69. package/lib/server/processes.js.map +1 -0
  70. package/lib/server/site.d.ts +4 -0
  71. package/lib/server/site.d.ts.map +1 -0
  72. package/lib/{esm/server → server}/site.js +4 -2
  73. package/lib/server/site.js.map +1 -0
  74. package/lib/server/skills.d.ts +4 -0
  75. package/lib/server/skills.d.ts.map +1 -0
  76. package/lib/{esm/server → server}/skills.js +14 -12
  77. package/lib/server/skills.js.map +1 -0
  78. package/lib/server/templates.d.ts +4 -0
  79. package/lib/server/templates.d.ts.map +1 -0
  80. package/lib/{esm/server → server}/templates.js +10 -10
  81. package/lib/server/templates.js.map +1 -0
  82. package/lib/server/tools.d.ts +4 -0
  83. package/lib/server/tools.d.ts.map +1 -0
  84. package/lib/{esm/server → server}/tools.js +7 -9
  85. package/lib/server/tools.js.map +1 -0
  86. package/lib/{types/server → server}/types.d.ts +21 -16
  87. package/lib/server/types.d.ts.map +1 -0
  88. package/lib/{cjs → server}/types.js.map +1 -1
  89. package/lib/server/widgets.d.ts +4 -0
  90. package/lib/server/widgets.d.ts.map +1 -0
  91. package/lib/server/widgets.js.map +1 -0
  92. package/lib/{types/server.d.ts → server.d.ts} +3 -3
  93. package/lib/server.d.ts.map +1 -0
  94. package/lib/{esm/server.js → server.js} +28 -22
  95. package/lib/server.js.map +1 -0
  96. package/lib/site/styles.d.ts.map +1 -0
  97. package/lib/{esm/site → site}/styles.js.map +1 -1
  98. package/lib/{types/site → site}/templates.d.ts +9 -9
  99. package/lib/site/templates.d.ts.map +1 -0
  100. package/lib/{esm/site → site}/templates.js +152 -98
  101. package/lib/site/templates.js.map +1 -0
  102. package/lib/{types/types.d.ts → types.d.ts} +29 -16
  103. package/lib/types.d.ts.map +1 -0
  104. package/lib/types.js.map +1 -0
  105. package/lib/utils.d.ts.map +1 -0
  106. package/lib/{esm/utils.js → utils.js} +11 -5
  107. package/lib/utils.js.map +1 -0
  108. package/package.json +20 -22
  109. package/src/ActivityCollection.test.ts +60 -59
  110. package/src/ActivityCollection.ts +27 -20
  111. package/src/ContentTypesCollection.ts +6 -9
  112. package/src/InteractionCollection.ts +6 -8
  113. package/src/RenderingTemplateCollection.ts +49 -51
  114. package/src/SkillCollection.ts +91 -72
  115. package/src/ToolCollection.ts +52 -43
  116. package/src/ToolRegistry.ts +20 -50
  117. package/src/auth.ts +35 -27
  118. package/src/copy-assets.ts +5 -12
  119. package/src/index.ts +15 -15
  120. package/src/server/activities.test.ts +70 -67
  121. package/src/server/activities.ts +17 -13
  122. package/src/server/app-package.test.ts +140 -0
  123. package/src/server/app-package.ts +115 -52
  124. package/src/server/content-types.test.ts +64 -0
  125. package/src/server/content-types.ts +53 -25
  126. package/src/server/dashboards.ts +31 -0
  127. package/src/server/interactions.ts +29 -28
  128. package/src/server/mcp.ts +16 -16
  129. package/src/server/processes.ts +35 -0
  130. package/src/server/site.ts +7 -15
  131. package/src/server/skills.ts +19 -18
  132. package/src/server/templates.ts +82 -80
  133. package/src/server/tools.ts +12 -16
  134. package/src/server/types.ts +29 -20
  135. package/src/server/widgets.ts +5 -9
  136. package/src/server.ts +55 -47
  137. package/src/site/styles.ts +1 -1
  138. package/src/site/templates.ts +259 -157
  139. package/src/types.ts +55 -31
  140. package/src/utils.ts +11 -6
  141. package/lib/cjs/ActivityCollection.js +0 -93
  142. package/lib/cjs/ActivityCollection.js.map +0 -1
  143. package/lib/cjs/ContentTypesCollection.js +0 -43
  144. package/lib/cjs/ContentTypesCollection.js.map +0 -1
  145. package/lib/cjs/InteractionCollection.js +0 -43
  146. package/lib/cjs/InteractionCollection.js.map +0 -1
  147. package/lib/cjs/RenderingTemplateCollection.js +0 -43
  148. package/lib/cjs/RenderingTemplateCollection.js.map +0 -1
  149. package/lib/cjs/SkillCollection.js +0 -384
  150. package/lib/cjs/SkillCollection.js.map +0 -1
  151. package/lib/cjs/ToolCollection.js +0 -221
  152. package/lib/cjs/ToolCollection.js.map +0 -1
  153. package/lib/cjs/ToolRegistry.js +0 -95
  154. package/lib/cjs/ToolRegistry.js.map +0 -1
  155. package/lib/cjs/auth.js +0 -131
  156. package/lib/cjs/auth.js.map +0 -1
  157. package/lib/cjs/build/validate.js +0 -7
  158. package/lib/cjs/build/validate.js.map +0 -1
  159. package/lib/cjs/copy-assets.js +0 -84
  160. package/lib/cjs/copy-assets.js.map +0 -1
  161. package/lib/cjs/index.js +0 -34
  162. package/lib/cjs/index.js.map +0 -1
  163. package/lib/cjs/package.json +0 -3
  164. package/lib/cjs/server/activities.js +0 -103
  165. package/lib/cjs/server/activities.js.map +0 -1
  166. package/lib/cjs/server/app-package.js +0 -154
  167. package/lib/cjs/server/app-package.js.map +0 -1
  168. package/lib/cjs/server/content-types.js +0 -73
  169. package/lib/cjs/server/content-types.js.map +0 -1
  170. package/lib/cjs/server/interactions.js +0 -101
  171. package/lib/cjs/server/interactions.js.map +0 -1
  172. package/lib/cjs/server/mcp.js +0 -45
  173. package/lib/cjs/server/mcp.js.map +0 -1
  174. package/lib/cjs/server/site.js +0 -48
  175. package/lib/cjs/server/site.js.map +0 -1
  176. package/lib/cjs/server/skills.js +0 -124
  177. package/lib/cjs/server/skills.js.map +0 -1
  178. package/lib/cjs/server/templates.js +0 -67
  179. package/lib/cjs/server/templates.js.map +0 -1
  180. package/lib/cjs/server/tools.js +0 -87
  181. package/lib/cjs/server/tools.js.map +0 -1
  182. package/lib/cjs/server/types.js +0 -3
  183. package/lib/cjs/server/types.js.map +0 -1
  184. package/lib/cjs/server/widgets.js +0 -27
  185. package/lib/cjs/server/widgets.js.map +0 -1
  186. package/lib/cjs/server.js +0 -142
  187. package/lib/cjs/server.js.map +0 -1
  188. package/lib/cjs/site/styles.js +0 -692
  189. package/lib/cjs/site/styles.js.map +0 -1
  190. package/lib/cjs/site/templates.js +0 -1320
  191. package/lib/cjs/site/templates.js.map +0 -1
  192. package/lib/cjs/types.js +0 -3
  193. package/lib/cjs/utils.js +0 -44
  194. package/lib/cjs/utils.js.map +0 -1
  195. package/lib/esm/ActivityCollection.js.map +0 -1
  196. package/lib/esm/ContentTypesCollection.js.map +0 -1
  197. package/lib/esm/InteractionCollection.js.map +0 -1
  198. package/lib/esm/RenderingTemplateCollection.js.map +0 -1
  199. package/lib/esm/SkillCollection.js.map +0 -1
  200. package/lib/esm/ToolCollection.js.map +0 -1
  201. package/lib/esm/ToolRegistry.js.map +0 -1
  202. package/lib/esm/auth.js.map +0 -1
  203. package/lib/esm/build/validate.js.map +0 -1
  204. package/lib/esm/copy-assets.js.map +0 -1
  205. package/lib/esm/index.js +0 -14
  206. package/lib/esm/index.js.map +0 -1
  207. package/lib/esm/server/activities.js.map +0 -1
  208. package/lib/esm/server/app-package.js +0 -151
  209. package/lib/esm/server/app-package.js.map +0 -1
  210. package/lib/esm/server/content-types.js +0 -70
  211. package/lib/esm/server/content-types.js.map +0 -1
  212. package/lib/esm/server/interactions.js.map +0 -1
  213. package/lib/esm/server/mcp.js.map +0 -1
  214. package/lib/esm/server/site.js.map +0 -1
  215. package/lib/esm/server/skills.js.map +0 -1
  216. package/lib/esm/server/templates.js.map +0 -1
  217. package/lib/esm/server/tools.js.map +0 -1
  218. package/lib/esm/server/types.js.map +0 -1
  219. package/lib/esm/server/widgets.js.map +0 -1
  220. package/lib/esm/server.js.map +0 -1
  221. package/lib/esm/site/templates.js.map +0 -1
  222. package/lib/esm/types.js.map +0 -1
  223. package/lib/esm/utils.js.map +0 -1
  224. package/lib/types/ActivityCollection.d.ts.map +0 -1
  225. package/lib/types/ContentTypesCollection.d.ts.map +0 -1
  226. package/lib/types/InteractionCollection.d.ts.map +0 -1
  227. package/lib/types/RenderingTemplateCollection.d.ts.map +0 -1
  228. package/lib/types/SkillCollection.d.ts.map +0 -1
  229. package/lib/types/ToolCollection.d.ts.map +0 -1
  230. package/lib/types/ToolRegistry.d.ts +0 -22
  231. package/lib/types/ToolRegistry.d.ts.map +0 -1
  232. package/lib/types/auth.d.ts.map +0 -1
  233. package/lib/types/build/validate.d.ts.map +0 -1
  234. package/lib/types/copy-assets.d.ts.map +0 -1
  235. package/lib/types/index.d.ts +0 -14
  236. package/lib/types/index.d.ts.map +0 -1
  237. package/lib/types/server/activities.d.ts +0 -4
  238. package/lib/types/server/activities.d.ts.map +0 -1
  239. package/lib/types/server/app-package.d.ts +0 -4
  240. package/lib/types/server/app-package.d.ts.map +0 -1
  241. package/lib/types/server/content-types.d.ts +0 -4
  242. package/lib/types/server/content-types.d.ts.map +0 -1
  243. package/lib/types/server/interactions.d.ts +0 -4
  244. package/lib/types/server/interactions.d.ts.map +0 -1
  245. package/lib/types/server/mcp.d.ts +0 -4
  246. package/lib/types/server/mcp.d.ts.map +0 -1
  247. package/lib/types/server/site.d.ts +0 -4
  248. package/lib/types/server/site.d.ts.map +0 -1
  249. package/lib/types/server/skills.d.ts +0 -4
  250. package/lib/types/server/skills.d.ts.map +0 -1
  251. package/lib/types/server/templates.d.ts +0 -4
  252. package/lib/types/server/templates.d.ts.map +0 -1
  253. package/lib/types/server/tools.d.ts +0 -4
  254. package/lib/types/server/tools.d.ts.map +0 -1
  255. package/lib/types/server/types.d.ts.map +0 -1
  256. package/lib/types/server/widgets.d.ts +0 -4
  257. package/lib/types/server/widgets.d.ts.map +0 -1
  258. package/lib/types/server.d.ts.map +0 -1
  259. package/lib/types/site/styles.d.ts.map +0 -1
  260. package/lib/types/site/templates.d.ts.map +0 -1
  261. package/lib/types/types.d.ts.map +0 -1
  262. package/lib/types/utils.d.ts.map +0 -1
  263. /package/lib/{types/build → build}/validate.d.ts +0 -0
  264. /package/lib/{esm/build → build}/validate.js +0 -0
  265. /package/lib/{types/copy-assets.d.ts → copy-assets.d.ts} +0 -0
  266. /package/lib/{esm/server → server}/types.js +0 -0
  267. /package/lib/{esm/server → server}/widgets.js +0 -0
  268. /package/lib/{types/site → site}/styles.d.ts +0 -0
  269. /package/lib/{esm/site → site}/styles.js +0 -0
  270. /package/lib/{esm/types.js → types.js} +0 -0
  271. /package/lib/{types/utils.d.ts → utils.d.ts} +0 -0
@@ -1,384 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SkillCollection = void 0;
4
- exports.parseSkillFile = parseSkillFile;
5
- exports.loadSkillFromFile = loadSkillFromFile;
6
- exports.loadSkillsFromDirectory = loadSkillsFromDirectory;
7
- const fs_1 = require("fs");
8
- const http_exception_1 = require("hono/http-exception");
9
- const path_1 = require("path");
10
- const utils_js_1 = require("./utils.js");
11
- /**
12
- * Implements a skills collection endpoint.
13
- * Skills provide contextual instructions to agents.
14
- * They can be static (markdown) or dynamic (JST templates).
15
- */
16
- class SkillCollection {
17
- /**
18
- * A kebab case collection name
19
- */
20
- name;
21
- /**
22
- * Optional title for UI display
23
- */
24
- title;
25
- /**
26
- * Optional icon for UI display
27
- */
28
- icon;
29
- /**
30
- * A short description
31
- */
32
- description;
33
- /**
34
- * The skills in this collection
35
- */
36
- skills;
37
- constructor({ name, title, icon, description, skills }) {
38
- this.name = name;
39
- this.title = title || (0, utils_js_1.kebabCaseToTitle)(name);
40
- this.icon = icon;
41
- this.description = description;
42
- this.skills = new Map(skills.map(s => [s.name, s]));
43
- }
44
- [Symbol.iterator]() {
45
- return this.skills.values();
46
- }
47
- map(callback) {
48
- return Array.from(this.skills.values()).map(callback);
49
- }
50
- /**
51
- * Get a skill by name
52
- */
53
- getSkill(name) {
54
- return this.skills.get(name);
55
- }
56
- /**
57
- * Get all skill definitions
58
- */
59
- getSkillDefinitions() {
60
- return Array.from(this.skills.values());
61
- }
62
- /**
63
- * Get skills exposed as tool definitions.
64
- * This allows skills to appear alongside regular tools.
65
- * When called, they return rendered instructions.
66
- * Includes related_tools for dynamic tool discovery.
67
- */
68
- getToolDefinitions(filterContext) {
69
- const defaultSchema = {
70
- type: 'object',
71
- properties: {
72
- context: {
73
- type: "string",
74
- description: "Additional context or specific requirements for this task"
75
- }
76
- }
77
- };
78
- let skills = Array.from(this.skills.values());
79
- if (filterContext) {
80
- skills = skills.filter(skill => {
81
- return skill.isEnabled ? skill.isEnabled(filterContext) : true;
82
- });
83
- }
84
- return skills.map(skill => {
85
- // Build description with related tools info if available
86
- let description = `[Skill] ${skill.description}. Returns contextual instructions for this task.`;
87
- if (skill.related_tools && skill.related_tools.length > 0) {
88
- description += ` Unlocks tools: ${skill.related_tools.join(', ')}.`;
89
- }
90
- return {
91
- url: `skills/${this.name}`,
92
- name: `learn_${skill.name}`,
93
- description,
94
- input_schema: skill.input_schema || defaultSchema,
95
- related_tools: skill.related_tools,
96
- category: this.name,
97
- };
98
- });
99
- }
100
- /**
101
- * Get as a tool collection definition (for listing alongside tools)
102
- */
103
- getAsToolCollection(baseUrl) {
104
- return {
105
- title: this.title || this.name,
106
- description: this.description || `Skills: ${this.name}`,
107
- src: `${baseUrl}/api/skills/${this.name}`,
108
- tools: this.getToolDefinitions()
109
- };
110
- }
111
- getWidgets() {
112
- const out = [];
113
- for (const skill of this.skills.values()) {
114
- if (skill.widgets) {
115
- for (const widget of skill.widgets) {
116
- out.push({
117
- name: widget,
118
- skill: skill.name,
119
- });
120
- }
121
- }
122
- }
123
- return Array.from(out);
124
- }
125
- /**
126
- * Execute a skill - accepts standard tool execution payload.
127
- * Returns rendered instructions in tool result format.
128
- *
129
- * @param ctx - Hono context
130
- * @param preParsedPayload - Optional pre-parsed payload (used when routing from root endpoint)
131
- */
132
- async execute(ctx, preParsedPayload) {
133
- const toolCtx = ctx;
134
- let payload = preParsedPayload;
135
- try {
136
- if (!payload) {
137
- // Check if body was already parsed and validated by middleware
138
- if (toolCtx.payload) {
139
- payload = toolCtx.payload;
140
- }
141
- else {
142
- throw new http_exception_1.HTTPException(400, {
143
- message: 'Invalid or missing skill execution payload. Expected { tool_use: { id, tool_name, tool_input? }, metadata? }'
144
- });
145
- }
146
- }
147
- const toolName = payload.tool_use.tool_name;
148
- // Extract skill name from tool name (remove "learn_" prefix if present)
149
- const skillName = toolName.startsWith('learn_')
150
- ? toolName.replace('learn_', '')
151
- : toolName;
152
- const skill = this.skills.get(skillName);
153
- if (!skill) {
154
- console.warn("[SkillCollection] Skill not found", {
155
- collection: this.name,
156
- requestedSkill: skillName,
157
- toolName,
158
- availableSkills: Array.from(this.skills.keys()),
159
- });
160
- throw new http_exception_1.HTTPException(404, {
161
- message: `Skill not found: ${skillName}`
162
- });
163
- }
164
- const data = payload.tool_use.tool_input || {};
165
- const result = await this.renderSkill(skill, data);
166
- // TODO: If skill.execution is set, run via Daytona
167
- // Return in tool result format
168
- return ctx.json({
169
- tool_use_id: payload.tool_use.id,
170
- is_error: false,
171
- content: result.instructions,
172
- meta: {
173
- skill_name: skill.name,
174
- content_type: skill.content_type,
175
- execution: skill.execution,
176
- }
177
- });
178
- }
179
- catch (err) {
180
- const status = err.status || 500;
181
- const toolName = payload?.tool_use?.tool_name;
182
- const toolUseId = payload?.tool_use?.id;
183
- if (status >= 500) {
184
- console.error("[SkillCollection] Skill execution failed", {
185
- collection: this.name,
186
- skill: toolName,
187
- toolUseId,
188
- error: err.message,
189
- status,
190
- toolInput: payload?.tool_use?.tool_input,
191
- stack: err.stack,
192
- });
193
- }
194
- return ctx.json({
195
- tool_use_id: toolUseId || "unknown",
196
- is_error: true,
197
- content: err.message || "Error executing skill",
198
- }, status);
199
- }
200
- }
201
- /**
202
- * Render skill instructions (static or dynamic)
203
- */
204
- async renderSkill(skill, _data) {
205
- const instructions = skill.instructions;
206
- if (skill.content_type === 'jst') {
207
- // JST templates are not currently supported
208
- throw new http_exception_1.HTTPException(501, {
209
- message: `JST templates are not currently supported. Use 'md' content type instead.`
210
- });
211
- }
212
- return {
213
- name: skill.name,
214
- instructions,
215
- };
216
- }
217
- }
218
- exports.SkillCollection = SkillCollection;
219
- /**
220
- * Parse a SKILL.md or SKILL.jst file content into a SkillDefinition.
221
- *
222
- * Format:
223
- * ```
224
- * ---
225
- * name: skill-name
226
- * description: Short description
227
- * keywords: [keyword1, keyword2]
228
- * tools: [tool1, tool2]
229
- * language: python
230
- * packages: [numpy, pandas]
231
- * ---
232
- *
233
- * # Instructions
234
- *
235
- * Your markdown/jst content here...
236
- * ```
237
- */
238
- function parseSkillFile(content, contentType) {
239
- // Parse YAML frontmatter
240
- const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
241
- if (!frontmatterMatch) {
242
- throw new Error("Invalid skill file: missing YAML frontmatter");
243
- }
244
- const [, yamlContent, body] = frontmatterMatch;
245
- const frontmatter = parseYamlFrontmatter(yamlContent);
246
- const instructions = body.trim();
247
- if (!frontmatter.name) {
248
- throw new Error("Skill file missing required 'name' field");
249
- }
250
- if (!frontmatter.description) {
251
- throw new Error("Skill file missing required 'description' field");
252
- }
253
- const skill = {
254
- name: frontmatter.name,
255
- title: frontmatter.title,
256
- description: frontmatter.description,
257
- instructions,
258
- content_type: contentType,
259
- widgets: frontmatter.widgets || undefined,
260
- scripts: frontmatter.scripts || undefined,
261
- };
262
- // Build context triggers
263
- if (frontmatter.keywords || frontmatter.tools || frontmatter.data_patterns) {
264
- skill.context_triggers = {
265
- keywords: frontmatter.keywords,
266
- tool_names: frontmatter.tools,
267
- data_patterns: frontmatter.data_patterns,
268
- };
269
- }
270
- // Build execution config
271
- if (frontmatter.language) {
272
- skill.execution = {
273
- language: frontmatter.language,
274
- packages: frontmatter.packages,
275
- system_packages: frontmatter.system_packages,
276
- };
277
- // Extract code template from instructions if present
278
- const codeBlockMatch = instructions.match(/```(?:python|javascript|typescript|js|ts|py)\n([\s\S]*?)```/);
279
- if (codeBlockMatch) {
280
- skill.execution.template = codeBlockMatch[1].trim();
281
- }
282
- }
283
- // Related tools from frontmatter
284
- if (frontmatter.tools) {
285
- skill.related_tools = frontmatter.tools;
286
- }
287
- return skill;
288
- }
289
- /**
290
- * Simple YAML frontmatter parser (handles basic key: value and arrays)
291
- */
292
- function parseYamlFrontmatter(yaml) {
293
- const result = {};
294
- const lines = yaml.split('\n');
295
- for (const line of lines) {
296
- const trimmed = line.trim();
297
- if (!trimmed || trimmed.startsWith('#'))
298
- continue;
299
- const colonIndex = trimmed.indexOf(':');
300
- if (colonIndex === -1)
301
- continue;
302
- const key = trimmed.slice(0, colonIndex).trim();
303
- let value = trimmed.slice(colonIndex + 1).trim();
304
- // Handle array syntax: [item1, item2]
305
- if (value.startsWith('[') && value.endsWith(']')) {
306
- const items = value.slice(1, -1).split(',').map(s => s.trim());
307
- result[key] = items.filter(s => s.length > 0);
308
- }
309
- else {
310
- // Remove quotes if present
311
- if ((value.startsWith('"') && value.endsWith('"')) ||
312
- (value.startsWith("'") && value.endsWith("'"))) {
313
- value = value.slice(1, -1);
314
- }
315
- result[key] = value;
316
- }
317
- }
318
- return result;
319
- }
320
- /**
321
- * Helper to load skill from file path (for Node.js usage)
322
- */
323
- async function loadSkillFromFile(filePath, fs) {
324
- const content = await fs.readFile(filePath, 'utf-8');
325
- const contentType = filePath.endsWith('.jst') ? 'jst' : 'md';
326
- return parseSkillFile(content, contentType);
327
- }
328
- /**
329
- * Load all skills from a directory.
330
- * Scans for subdirectories containing SKILL.md files.
331
- *
332
- * Directory structure:
333
- * ```
334
- * skills/
335
- * nagare/
336
- * fund-onboarding/
337
- * SKILL.md
338
- * monte-carlo/
339
- * SKILL.md
340
- * ```
341
- *
342
- * @param dirPath - Path to the skills collection directory
343
- * @returns Array of parsed skill definitions
344
- */
345
- function loadSkillsFromDirectory(dirPath) {
346
- const skills = [];
347
- let entries;
348
- try {
349
- entries = (0, fs_1.readdirSync)(dirPath);
350
- }
351
- catch {
352
- console.warn(`Could not read skills directory: ${dirPath}`);
353
- return skills;
354
- }
355
- for (const entry of entries) {
356
- const entryPath = (0, path_1.join)(dirPath, entry);
357
- try {
358
- const stat = (0, fs_1.statSync)(entryPath);
359
- if (!stat.isDirectory())
360
- continue;
361
- // Look for SKILL.md or SKILL.jst
362
- const mdPath = (0, path_1.join)(entryPath, "SKILL.md");
363
- const jstPath = (0, path_1.join)(entryPath, "SKILL.jst");
364
- let content;
365
- let contentType = 'md';
366
- if ((0, fs_1.existsSync)(mdPath)) {
367
- content = (0, fs_1.readFileSync)(mdPath, "utf-8");
368
- contentType = 'md';
369
- }
370
- else if ((0, fs_1.existsSync)(jstPath)) {
371
- content = (0, fs_1.readFileSync)(jstPath, "utf-8");
372
- contentType = 'jst';
373
- }
374
- if (content) {
375
- skills.push(parseSkillFile(content, contentType));
376
- }
377
- }
378
- catch (err) {
379
- console.warn(`Error loading skill from ${entryPath}:`, err);
380
- }
381
- }
382
- return skills;
383
- }
384
- //# sourceMappingURL=SkillCollection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SkillCollection.js","sourceRoot":"","sources":["../../src/SkillCollection.ts"],"names":[],"mappings":"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"}
@@ -1,221 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ToolCollection = void 0;
37
- exports.loadToolsFromDirectory = loadToolsFromDirectory;
38
- const fs_1 = require("fs");
39
- const http_exception_1 = require("hono/http-exception");
40
- const path_1 = require("path");
41
- const url_1 = require("url");
42
- const auth_js_1 = require("./auth.js");
43
- const ToolRegistry_js_1 = require("./ToolRegistry.js");
44
- const utils_js_1 = require("./utils.js");
45
- /**
46
- * Implements a tools collection endpoint
47
- */
48
- class ToolCollection {
49
- /**
50
- * A kebab case collection name. Must only contains alphanumeric and dash characters,
51
- * The name can be used to generate the path where the collection is exposed.
52
- * Example: my-collection
53
- */
54
- name;
55
- /**
56
- * Optional title for UI display.
57
- * If not provided the title will be generated form the kebab case name by replacing - with spaces and upper casing first letter in words.
58
- */
59
- title;
60
- /**
61
- * Optional icon for UI display
62
- */
63
- icon;
64
- /**
65
- * A short description
66
- */
67
- description;
68
- /**
69
- * The tool registry
70
- */
71
- tools;
72
- constructor({ name, title, icon, description, tools }) {
73
- this.name = name;
74
- this.title = title || (0, utils_js_1.kebabCaseToTitle)(name);
75
- this.icon = icon;
76
- this.description = description;
77
- // we add the collection name info
78
- this.tools = new ToolRegistry_js_1.ToolRegistry(name, tools);
79
- }
80
- [Symbol.iterator]() {
81
- let index = 0;
82
- const tools = this.tools.getTools();
83
- return {
84
- next() {
85
- if (index < tools.length) {
86
- return { value: tools[index++], done: false };
87
- }
88
- else {
89
- return { done: true, value: undefined };
90
- }
91
- }
92
- };
93
- }
94
- map(callback) {
95
- return this.tools.getTools().map(callback);
96
- }
97
- async execute(ctx, preParsedPayload) {
98
- let payload = preParsedPayload;
99
- try {
100
- if (!payload) {
101
- payload = await readPayload(ctx);
102
- }
103
- const toolName = payload.tool_use?.tool_name;
104
- const toolUseId = payload.tool_use?.id;
105
- const endpointOverrides = payload.metadata?.endpoints;
106
- const runId = payload.metadata?.run_id;
107
- console.log(`[ToolCollection] Tool call received: ${toolName}`, {
108
- collection: this.name,
109
- toolUseId,
110
- runId,
111
- hasEndpointOverrides: !!endpointOverrides,
112
- });
113
- const session = await (0, auth_js_1.authorize)(ctx, endpointOverrides, { toolName, toolUseId, runId });
114
- const r = await this.tools.runTool(payload, session);
115
- return ctx.json({
116
- ...r,
117
- tool_use_id: payload.tool_use.id
118
- });
119
- }
120
- catch (err) { // HTTPException ?
121
- const status = err.status || 500;
122
- const toolName = payload?.tool_use?.tool_name;
123
- const toolUseId = payload?.tool_use?.id;
124
- console.error("[ToolCollection] Tool execution failed", {
125
- collection: this.name,
126
- tool: toolName,
127
- toolUseId,
128
- error: err.message,
129
- status,
130
- stack: err.stack,
131
- });
132
- return ctx.json({
133
- tool_use_id: toolUseId || "undefined",
134
- error: err.message || "Error executing tool",
135
- status
136
- }, status);
137
- }
138
- }
139
- /**
140
- * Get tool definitions with optional filtering.
141
- * @param options - context for filtering
142
- * @returns Filtered tool definitions
143
- */
144
- getToolDefinitions(context) {
145
- return this.tools.getDefinitions(context);
146
- }
147
- }
148
- exports.ToolCollection = ToolCollection;
149
- function readPayload(ctx) {
150
- const toolCtx = ctx;
151
- // Check if body was already parsed and validated by middleware
152
- if (toolCtx.payload) {
153
- return toolCtx.payload;
154
- }
155
- // If no payload, middleware couldn't parse/validate - return error
156
- throw new http_exception_1.HTTPException(400, {
157
- message: 'Invalid or missing tool execution payload. Expected { tool_use: { id, tool_name, tool_input? }, metadata? }'
158
- });
159
- }
160
- /**
161
- * Load all tools from a directory.
162
- * Scans for .js files and imports tools that match naming convention.
163
- *
164
- * Directory structure:
165
- * ```
166
- * collection/
167
- * tools/
168
- * SearchFundsTool.js # exports SearchFundsTool
169
- * GetFundDetailsTool.js # exports GetFundDetailsTool
170
- * ```
171
- *
172
- * Naming convention: File should export a Tool with name matching *Tool pattern.
173
- *
174
- * @param toolsDir - Path to the tools directory (e.g., /path/to/collection/tools)
175
- * @returns Promise resolving to array of Tool objects
176
- */
177
- async function loadToolsFromDirectory(toolsDir) {
178
- const tools = [];
179
- if (!(0, fs_1.existsSync)(toolsDir)) {
180
- console.warn(`Tools directory not found: ${toolsDir}`);
181
- return tools;
182
- }
183
- let entries;
184
- try {
185
- entries = (0, fs_1.readdirSync)(toolsDir);
186
- }
187
- catch {
188
- console.warn(`Could not read tools directory: ${toolsDir}`);
189
- return tools;
190
- }
191
- for (const entry of entries) {
192
- // Only process .js and .ts files that end with Tool
193
- if (!entry.endsWith('Tool.js') && !entry.endsWith('Tool.ts'))
194
- continue;
195
- if (entry.endsWith('.d.ts'))
196
- continue;
197
- const entryPath = (0, path_1.join)(toolsDir, entry);
198
- try {
199
- const stat = (0, fs_1.statSync)(entryPath);
200
- if (!stat.isFile())
201
- continue;
202
- // Dynamic import - need file:// URL for ESM
203
- const fileUrl = (0, url_1.pathToFileURL)(entryPath).href;
204
- const module = await Promise.resolve(`${fileUrl}`).then(s => __importStar(require(s)));
205
- // Find exported Tool (named export matching filename or any Tool export)
206
- const baseName = entry.replace(/\.(js|ts)$/, '');
207
- const tool = module[baseName] || module.default;
208
- if (tool && typeof tool.name === 'string' && typeof tool.run === 'function') {
209
- tools.push(tool);
210
- }
211
- else {
212
- console.warn(`No valid Tool export found in ${entry}`);
213
- }
214
- }
215
- catch (err) {
216
- console.warn(`Error loading tool from ${entry}:`, err);
217
- }
218
- }
219
- return tools;
220
- }
221
- //# sourceMappingURL=ToolCollection.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ToolCollection.js","sourceRoot":"","sources":["../../src/ToolCollection.ts"],"names":[],"mappings":"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"}