@vertesia/tools-sdk 0.80.0-dev.20251121 → 0.81.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 (61) hide show
  1. package/README.md +122 -0
  2. package/lib/cjs/InteractionCollection.js +118 -0
  3. package/lib/cjs/InteractionCollection.js.map +1 -1
  4. package/lib/cjs/SkillCollection.js +318 -0
  5. package/lib/cjs/SkillCollection.js.map +1 -0
  6. package/lib/cjs/ToolCollection.js +98 -0
  7. package/lib/cjs/ToolCollection.js.map +1 -1
  8. package/lib/cjs/copy-assets.js +84 -0
  9. package/lib/cjs/copy-assets.js.map +1 -0
  10. package/lib/cjs/index.js +6 -1
  11. package/lib/cjs/index.js.map +1 -1
  12. package/lib/cjs/server.js +327 -0
  13. package/lib/cjs/server.js.map +1 -0
  14. package/lib/cjs/site/styles.js +621 -0
  15. package/lib/cjs/site/styles.js.map +1 -0
  16. package/lib/cjs/site/templates.js +932 -0
  17. package/lib/cjs/site/templates.js.map +1 -0
  18. package/lib/esm/InteractionCollection.js +83 -0
  19. package/lib/esm/InteractionCollection.js.map +1 -1
  20. package/lib/esm/SkillCollection.js +311 -0
  21. package/lib/esm/SkillCollection.js.map +1 -0
  22. package/lib/esm/ToolCollection.js +64 -0
  23. package/lib/esm/ToolCollection.js.map +1 -1
  24. package/lib/esm/copy-assets.js +81 -0
  25. package/lib/esm/copy-assets.js.map +1 -0
  26. package/lib/esm/index.js +4 -0
  27. package/lib/esm/index.js.map +1 -1
  28. package/lib/esm/server.js +323 -0
  29. package/lib/esm/server.js.map +1 -0
  30. package/lib/esm/site/styles.js +618 -0
  31. package/lib/esm/site/styles.js.map +1 -0
  32. package/lib/esm/site/templates.js +920 -0
  33. package/lib/esm/site/templates.js.map +1 -0
  34. package/lib/types/InteractionCollection.d.ts +29 -0
  35. package/lib/types/InteractionCollection.d.ts.map +1 -1
  36. package/lib/types/SkillCollection.d.ts +111 -0
  37. package/lib/types/SkillCollection.d.ts.map +1 -0
  38. package/lib/types/ToolCollection.d.ts +18 -0
  39. package/lib/types/ToolCollection.d.ts.map +1 -1
  40. package/lib/types/copy-assets.d.ts +14 -0
  41. package/lib/types/copy-assets.d.ts.map +1 -0
  42. package/lib/types/index.d.ts +4 -0
  43. package/lib/types/index.d.ts.map +1 -1
  44. package/lib/types/server.d.ts +72 -0
  45. package/lib/types/server.d.ts.map +1 -0
  46. package/lib/types/site/styles.d.ts +5 -0
  47. package/lib/types/site/styles.d.ts.map +1 -0
  48. package/lib/types/site/templates.d.ts +54 -0
  49. package/lib/types/site/templates.d.ts.map +1 -0
  50. package/lib/types/types.d.ts +152 -0
  51. package/lib/types/types.d.ts.map +1 -1
  52. package/package.json +18 -5
  53. package/src/InteractionCollection.ts +90 -0
  54. package/src/SkillCollection.ts +389 -0
  55. package/src/ToolCollection.ts +68 -0
  56. package/src/copy-assets.ts +104 -0
  57. package/src/index.ts +4 -0
  58. package/src/server.ts +444 -0
  59. package/src/site/styles.ts +617 -0
  60. package/src/site/templates.ts +956 -0
  61. package/src/types.ts +162 -0
@@ -1,6 +1,43 @@
1
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
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.ToolCollection = void 0;
37
+ exports.loadToolsFromDirectory = loadToolsFromDirectory;
38
+ const fs_1 = require("fs");
39
+ const path_1 = require("path");
40
+ const url_1 = require("url");
4
41
  const http_exception_1 = require("hono/http-exception");
5
42
  const auth_js_1 = require("./auth.js");
6
43
  const ToolRegistry_js_1 = require("./ToolRegistry.js");
@@ -91,4 +128,65 @@ async function readPayload(ctx) {
91
128
  });
92
129
  }
93
130
  }
131
+ /**
132
+ * Load all tools from a directory.
133
+ * Scans for .js files and imports tools that match naming convention.
134
+ *
135
+ * Directory structure:
136
+ * ```
137
+ * collection/
138
+ * tools/
139
+ * SearchFundsTool.js # exports SearchFundsTool
140
+ * GetFundDetailsTool.js # exports GetFundDetailsTool
141
+ * ```
142
+ *
143
+ * Naming convention: File should export a Tool with name matching *Tool pattern.
144
+ *
145
+ * @param toolsDir - Path to the tools directory (e.g., /path/to/collection/tools)
146
+ * @returns Promise resolving to array of Tool objects
147
+ */
148
+ async function loadToolsFromDirectory(toolsDir) {
149
+ const tools = [];
150
+ if (!(0, fs_1.existsSync)(toolsDir)) {
151
+ console.warn(`Tools directory not found: ${toolsDir}`);
152
+ return tools;
153
+ }
154
+ let entries;
155
+ try {
156
+ entries = (0, fs_1.readdirSync)(toolsDir);
157
+ }
158
+ catch {
159
+ console.warn(`Could not read tools directory: ${toolsDir}`);
160
+ return tools;
161
+ }
162
+ for (const entry of entries) {
163
+ // Only process .js and .ts files that end with Tool
164
+ if (!entry.endsWith('Tool.js') && !entry.endsWith('Tool.ts'))
165
+ continue;
166
+ if (entry.endsWith('.d.ts'))
167
+ continue;
168
+ const entryPath = (0, path_1.join)(toolsDir, entry);
169
+ try {
170
+ const stat = (0, fs_1.statSync)(entryPath);
171
+ if (!stat.isFile())
172
+ continue;
173
+ // Dynamic import - need file:// URL for ESM
174
+ const fileUrl = (0, url_1.pathToFileURL)(entryPath).href;
175
+ const module = await Promise.resolve(`${fileUrl}`).then(s => __importStar(require(s)));
176
+ // Find exported Tool (named export matching filename or any Tool export)
177
+ const baseName = entry.replace(/\.(js|ts)$/, '');
178
+ const tool = module[baseName] || module.default;
179
+ if (tool && typeof tool.name === 'string' && typeof tool.run === 'function') {
180
+ tools.push(tool);
181
+ }
182
+ else {
183
+ console.warn(`No valid Tool export found in ${entry}`);
184
+ }
185
+ }
186
+ catch (err) {
187
+ console.warn(`Error loading tool from ${entry}:`, err);
188
+ }
189
+ }
190
+ return tools;
191
+ }
94
192
  //# sourceMappingURL=ToolCollection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolCollection.js","sourceRoot":"","sources":["../../src/ToolCollection.ts"],"names":[],"mappings":";;;AACA,wDAAoD;AACpD,uCAAsC;AACtC,uDAAiD;AAEjD,yCAA8C;AAS9C;;GAEG;AACH,MAAa,cAAc;IAEvB;;;;OAIG;IACH,IAAI,CAAS;IACb;;;OAGG;IACH,KAAK,CAAU;IACf;;OAEG;IACH,IAAI,CAAU;IACd;;OAEG;IACH,WAAW,CAAU;IACrB;;OAEG;IACH,KAAK,CAAe;IAEpB,YAAY,EACR,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EACd;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,IAAA,2BAAgB,EAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,8BAAY,CAAC,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACb,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEpC,OAAO;YACH,IAAI;gBACA,IAAI,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;oBACvB,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBAClD,CAAC;qBAAM,CAAC;oBACJ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;gBAC5C,CAAC;YACL,CAAC;SACJ,CAAC;IACN,CAAC;IAED,GAAG,CAAI,QAA+C;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAY;QACtB,IAAI,OAA8C,CAAC;QACnD,IAAI,CAAC;YACD,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAS,EAAC,GAAG,CAAC,CAAC;YACrC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACrD,OAAO,GAAG,CAAC,IAAI,CAAC;gBACZ,GAAG,CAAC;gBACJ,WAAW,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;aACH,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC,CAAC,kBAAkB;YACnC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;YACjC,OAAO,GAAG,CAAC,IAAI,CAAC;gBACZ,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,IAAI,WAAW;gBAChD,KAAK,EAAE,GAAG,CAAC,OAAO,IAAI,sBAAsB;gBAC5C,MAAM;aAC4B,EAAE,MAAM,CAAC,CAAA;QACnD,CAAC;IACL,CAAC;IAED,kBAAkB;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;CAEJ;AA/ED,wCA+EC;AAGD,KAAK,UAAU,WAAW,CAAC,GAAY;IACnC,IAAI,CAAC;QACD,OAAO,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,EAA+B,CAAC;IAC7D,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAChB,MAAM,IAAI,8BAAa,CAAC,GAAG,EAAE;YACzB,OAAO,EAAE,4CAA4C,GAAG,GAAG,CAAC,OAAO;SACtE,CAAC,CAAC;IACP,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"ToolCollection.js","sourceRoot":"","sources":["../../src/ToolCollection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.copyRuntimeAssets = copyRuntimeAssets;
5
+ /**
6
+ * Copy runtime assets (skill files, prompt files, scripts) to dist folder
7
+ * These files are read from disk at runtime and need to be deployed with the app
8
+ *
9
+ * Usage:
10
+ * npx tools-sdk-copy-assets [srcDir] [distDir]
11
+ *
12
+ * Or import and call directly:
13
+ * import { copyRuntimeAssets } from '@vertesia/tools-sdk';
14
+ * copyRuntimeAssets('./src', './dist');
15
+ */
16
+ const fs_1 = require("fs");
17
+ const path_1 = require("path");
18
+ /**
19
+ * Recursively copy files matching a filter
20
+ */
21
+ function copyFilesRecursive(src, dest, fileFilter) {
22
+ if (!(0, fs_1.existsSync)(src))
23
+ return;
24
+ const entries = (0, fs_1.readdirSync)(src);
25
+ for (const entry of entries) {
26
+ const srcPath = (0, path_1.join)(src, entry);
27
+ const destPath = (0, path_1.join)(dest, entry);
28
+ const stat = (0, fs_1.statSync)(srcPath);
29
+ if (stat.isDirectory()) {
30
+ // Recurse into directories
31
+ copyFilesRecursive(srcPath, destPath, fileFilter);
32
+ }
33
+ else if (fileFilter(entry)) {
34
+ // Copy matching files
35
+ (0, fs_1.mkdirSync)((0, path_1.dirname)(destPath), { recursive: true });
36
+ (0, fs_1.copyFileSync)(srcPath, destPath);
37
+ }
38
+ }
39
+ }
40
+ /**
41
+ * Copy runtime assets (skills, interactions) from src to dist
42
+ */
43
+ function copyRuntimeAssets(options = {}) {
44
+ const { srcDir = './src', distDir = './dist', verbose = true } = options;
45
+ if (verbose) {
46
+ console.log('Copying runtime assets to dist...');
47
+ }
48
+ // Copy skill files (SKILL.md, SKILL.jst, *.py)
49
+ const skillsSrc = (0, path_1.join)(srcDir, 'skills');
50
+ const skillsDest = (0, path_1.join)(distDir, 'skills');
51
+ if ((0, fs_1.existsSync)(skillsSrc)) {
52
+ copyFilesRecursive(skillsSrc, skillsDest, (filename) => {
53
+ return filename === 'SKILL.md' ||
54
+ filename === 'SKILL.jst' ||
55
+ filename.endsWith('.py');
56
+ });
57
+ if (verbose) {
58
+ console.log(' ✓ Skills assets (SKILL.md, SKILL.jst, *.py)');
59
+ }
60
+ }
61
+ // Copy interaction prompt files (prompt.jst, prompt.md)
62
+ const interactionsSrc = (0, path_1.join)(srcDir, 'interactions');
63
+ const interactionsDest = (0, path_1.join)(distDir, 'interactions');
64
+ if ((0, fs_1.existsSync)(interactionsSrc)) {
65
+ copyFilesRecursive(interactionsSrc, interactionsDest, (filename) => {
66
+ return filename === 'prompt.jst' ||
67
+ filename === 'prompt.md';
68
+ });
69
+ if (verbose) {
70
+ console.log(' ✓ Interaction assets (prompt.jst, prompt.md)');
71
+ }
72
+ }
73
+ if (verbose) {
74
+ console.log('Runtime assets copied successfully!');
75
+ }
76
+ }
77
+ // CLI entry point
78
+ if (typeof process !== 'undefined' && process.argv[1]?.includes('copy-assets')) {
79
+ const args = process.argv.slice(2);
80
+ const srcDir = args[0] || './src';
81
+ const distDir = args[1] || './dist';
82
+ copyRuntimeAssets({ srcDir, distDir });
83
+ }
84
+ //# sourceMappingURL=copy-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-assets.js","sourceRoot":"","sources":["../../src/copy-assets.ts"],"names":[],"mappings":"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"}
package/lib/cjs/index.js CHANGED
@@ -14,12 +14,17 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.AuthSession = exports.authorize = void 0;
17
+ exports.copyRuntimeAssets = exports.AuthSession = exports.authorize = void 0;
18
18
  var auth_js_1 = require("./auth.js");
19
19
  Object.defineProperty(exports, "authorize", { enumerable: true, get: function () { return auth_js_1.authorize; } });
20
20
  Object.defineProperty(exports, "AuthSession", { enumerable: true, get: function () { return auth_js_1.AuthSession; } });
21
21
  __exportStar(require("./InteractionCollection.js"), exports);
22
+ __exportStar(require("./SkillCollection.js"), exports);
22
23
  __exportStar(require("./ToolCollection.js"), exports);
23
24
  __exportStar(require("./ToolRegistry.js"), exports);
24
25
  __exportStar(require("./types.js"), exports);
26
+ __exportStar(require("./server.js"), exports);
27
+ __exportStar(require("./site/templates.js"), exports);
28
+ var copy_assets_js_1 = require("./copy-assets.js");
29
+ Object.defineProperty(exports, "copyRuntimeAssets", { enumerable: true, get: function () { return copy_assets_js_1.copyRuntimeAssets; } });
25
30
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qCAAmD;AAA1C,oGAAA,SAAS,OAAA;AAAE,sGAAA,WAAW,OAAA;AAC/B,6DAA2C;AAC3C,sDAAoC;AACpC,oDAAkC;AAClC,6CAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,qCAAmD;AAA1C,oGAAA,SAAS,OAAA;AAAE,sGAAA,WAAW,OAAA;AAC/B,6DAA2C;AAC3C,uDAAqC;AACrC,sDAAoC;AACpC,oDAAkC;AAClC,6CAA2B;AAC3B,8CAA4B;AAC5B,sDAAoC;AACpC,mDAAqD;AAA5C,mHAAA,iBAAiB,OAAA"}
@@ -0,0 +1,327 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createToolServer = createToolServer;
4
+ exports.createDevServer = createDevServer;
5
+ const hono_1 = require("hono");
6
+ const cors_1 = require("hono/cors");
7
+ const http_exception_1 = require("hono/http-exception");
8
+ const auth_js_1 = require("./auth.js");
9
+ const templates_js_1 = require("./site/templates.js");
10
+ /**
11
+ * Create a Hono server for tools, interactions, and skills.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import { createToolServer, ToolCollection, SkillCollection } from "@vertesia/tools-sdk";
16
+ *
17
+ * const server = createToolServer({
18
+ * tools: [myToolCollection],
19
+ * skills: [mySkillCollection],
20
+ * });
21
+ *
22
+ * export default server;
23
+ * ```
24
+ */
25
+ function createToolServer(config) {
26
+ const { title = 'Tools Server', prefix = '/api', tools = [], interactions = [], skills = [], mcpProviders = [], disableHtml = false, } = config;
27
+ const app = new hono_1.Hono();
28
+ // Add CORS middleware globally
29
+ app.use('*', (0, cors_1.cors)({ origin: '*', allowMethods: ['GET', 'POST', 'OPTIONS'] }));
30
+ // HTML pages (unless disabled)
31
+ if (!disableHtml) {
32
+ // Index page
33
+ app.get('/', (c) => {
34
+ return c.html((0, templates_js_1.indexPage)(tools, skills, interactions, mcpProviders, title));
35
+ });
36
+ // Tool collection pages
37
+ for (const coll of tools) {
38
+ app.get(`/tools/${coll.name}`, (c) => {
39
+ return c.html((0, templates_js_1.toolCollectionPage)(coll));
40
+ });
41
+ }
42
+ // Skill collection pages
43
+ for (const coll of skills) {
44
+ app.get(`/skills/${coll.name}`, (c) => {
45
+ return c.html((0, templates_js_1.skillCollectionPage)(coll));
46
+ });
47
+ }
48
+ // Interaction collection pages
49
+ for (const coll of interactions) {
50
+ app.get(`/interactions/${coll.name}`, (c) => {
51
+ return c.html((0, templates_js_1.interactionCollectionPage)(coll));
52
+ });
53
+ }
54
+ }
55
+ // Add base API route
56
+ app.get(prefix, (c) => {
57
+ // Skills are exposed as tools, so include them in the tools list
58
+ const allToolEndpoints = [
59
+ ...tools.map(col => `${prefix}/tools/${col.name}`),
60
+ ...skills.map(col => `${prefix}/skills/${col.name}`),
61
+ ];
62
+ return c.json({
63
+ message: 'Vertesia Tools API',
64
+ version: '1.0.0',
65
+ endpoints: {
66
+ tools: allToolEndpoints,
67
+ interactions: interactions.map(col => `${prefix}/interactions/${col.name}`),
68
+ mcp: mcpProviders.map(p => `${prefix}/mcp/${p.name}`),
69
+ }
70
+ });
71
+ });
72
+ // ================== Aggregate Endpoints ==================
73
+ // These must be registered BEFORE collection-specific routes
74
+ // GET /api/skills - Returns all skills from all collections
75
+ app.get(`${prefix}/skills`, (c) => {
76
+ const url = new URL(c.req.url);
77
+ const allSkills = [];
78
+ for (const coll of skills) {
79
+ allSkills.push(...coll.getToolDefinitions());
80
+ }
81
+ return c.json({
82
+ src: `${url.origin}${url.pathname}`,
83
+ title: 'All Skills',
84
+ description: 'All available skills across all collections',
85
+ tools: allSkills,
86
+ collections: skills.map(s => ({
87
+ name: s.name,
88
+ title: s.title,
89
+ description: s.description,
90
+ })),
91
+ });
92
+ });
93
+ // GET /api/tools - Returns all tools from all collections
94
+ app.get(`${prefix}/tools`, (c) => {
95
+ const url = new URL(c.req.url);
96
+ const allTools = [];
97
+ for (const coll of tools) {
98
+ allTools.push(...coll.getToolDefinitions());
99
+ }
100
+ return c.json({
101
+ src: `${url.origin}${url.pathname}`,
102
+ title: 'All Tools',
103
+ description: 'All available tools across all collections',
104
+ tools: allTools,
105
+ collections: tools.map(t => ({
106
+ name: t.name,
107
+ title: t.title,
108
+ description: t.description,
109
+ })),
110
+ });
111
+ });
112
+ // GET /api/interactions - Returns all interactions from all collections
113
+ app.get(`${prefix}/interactions`, (c) => {
114
+ const allInteractions = [];
115
+ for (const coll of interactions) {
116
+ for (const inter of coll.interactions) {
117
+ allInteractions.push({
118
+ type: "app",
119
+ id: inter.name,
120
+ name: inter.name,
121
+ title: inter.title || inter.name,
122
+ description: inter.description,
123
+ tags: inter.tags || [],
124
+ });
125
+ }
126
+ }
127
+ return c.json({
128
+ title: 'All Interactions',
129
+ description: 'All available interactions across all collections',
130
+ interactions: allInteractions,
131
+ collections: interactions.map(i => ({
132
+ name: i.name,
133
+ title: i.title,
134
+ description: i.description,
135
+ })),
136
+ });
137
+ });
138
+ // Create tool collection endpoints
139
+ for (const coll of tools) {
140
+ app.route(`${prefix}/tools/${coll.name}`, createToolEndpoints(coll));
141
+ // Also expose at root for backwards compatibility
142
+ app.route(`${prefix}/${coll.name}`, createToolEndpoints(coll));
143
+ }
144
+ // Create interaction collection endpoints
145
+ for (const coll of interactions) {
146
+ app.route(`${prefix}/interactions/${coll.name}`, createInteractionEndpoints(coll));
147
+ }
148
+ // Create skill collection endpoints (exposed as tools)
149
+ for (const coll of skills) {
150
+ app.route(`${prefix}/skills/${coll.name}`, createSkillEndpoints(coll));
151
+ }
152
+ // Create MCP provider endpoints
153
+ if (mcpProviders.length > 0) {
154
+ app.route(`${prefix}/mcp`, createMCPEndpoints(mcpProviders));
155
+ }
156
+ // Global error handler
157
+ app.onError((err, c) => {
158
+ if (err instanceof http_exception_1.HTTPException) {
159
+ return c.json({ error: err.message }, err.status);
160
+ }
161
+ console.error('Uncaught Error:', err);
162
+ return c.json({ error: 'Internal Server Error' }, 500);
163
+ });
164
+ return app;
165
+ }
166
+ // ================== Tool Endpoints ==================
167
+ function createToolEndpoints(coll) {
168
+ const endpoint = new hono_1.Hono();
169
+ endpoint.post('/', (c) => {
170
+ return coll.execute(c);
171
+ });
172
+ endpoint.get('/', (c) => {
173
+ const importSourceUrl = c.req.query('import') != null;
174
+ const url = new URL(c.req.url);
175
+ return c.json({
176
+ src: importSourceUrl
177
+ ? `${url.origin}/libs/vertesia-tools-${coll.name}.js`
178
+ : `${url.origin}${url.pathname}`,
179
+ title: coll.title || coll.name,
180
+ description: coll.description || '',
181
+ tools: coll.getToolDefinitions()
182
+ });
183
+ });
184
+ return endpoint;
185
+ }
186
+ // ================== Interaction Endpoints ==================
187
+ function createInteractionEndpoints(coll) {
188
+ const endpoint = new hono_1.Hono();
189
+ endpoint.get('/', (c) => {
190
+ return c.json(coll.interactions.map(inter => ({
191
+ type: "app",
192
+ id: inter.name,
193
+ name: inter.name,
194
+ title: inter.title || inter.name,
195
+ description: inter.description,
196
+ tags: inter.tags || [],
197
+ })));
198
+ });
199
+ endpoint.get('/:name', async (c) => {
200
+ await (0, auth_js_1.authorize)(c);
201
+ const name = c.req.param('name');
202
+ const inter = coll.getInteractionByName(name);
203
+ if (!inter) {
204
+ throw new http_exception_1.HTTPException(404, {
205
+ message: "No interaction found with name: " + name
206
+ });
207
+ }
208
+ return c.json(inter);
209
+ });
210
+ return endpoint;
211
+ }
212
+ // ================== Skill Endpoints ==================
213
+ function createSkillEndpoints(coll) {
214
+ const endpoint = new hono_1.Hono();
215
+ // List skills as tool definitions (tool collection format)
216
+ // This allows skills to be used exactly like tools
217
+ endpoint.get('/', (c) => {
218
+ const url = new URL(c.req.url);
219
+ return c.json({
220
+ src: `${url.origin}${url.pathname}`,
221
+ title: coll.title || coll.name,
222
+ description: coll.description || '',
223
+ tools: coll.getToolDefinitions()
224
+ });
225
+ });
226
+ // Get scripts for a specific skill
227
+ // Returns all scripts bundled with the skill
228
+ endpoint.get('/:name/scripts', (c) => {
229
+ const name = c.req.param('name');
230
+ const skillName = name.startsWith('skill_') ? name.slice(6) : name;
231
+ const skill = coll.getSkill(skillName);
232
+ if (!skill) {
233
+ throw new http_exception_1.HTTPException(404, {
234
+ message: `Skill not found: ${skillName}`
235
+ });
236
+ }
237
+ return c.json({
238
+ skill_name: skill.name,
239
+ scripts: skill.scripts || []
240
+ });
241
+ });
242
+ // Get a specific script file
243
+ endpoint.get('/:name/scripts/:filename', (c) => {
244
+ const name = c.req.param('name');
245
+ const filename = c.req.param('filename');
246
+ const skillName = name.startsWith('skill_') ? name.slice(6) : name;
247
+ const skill = coll.getSkill(skillName);
248
+ if (!skill) {
249
+ throw new http_exception_1.HTTPException(404, {
250
+ message: `Skill not found: ${skillName}`
251
+ });
252
+ }
253
+ const script = skill.scripts?.find(s => s.name === filename);
254
+ if (!script) {
255
+ throw new http_exception_1.HTTPException(404, {
256
+ message: `Script not found: ${filename}`
257
+ });
258
+ }
259
+ // Return as plain text with appropriate content type
260
+ const contentType = filename.endsWith('.py') ? 'text/x-python'
261
+ : filename.endsWith('.sh') ? 'text/x-shellscript'
262
+ : filename.endsWith('.js') ? 'text/javascript'
263
+ : 'text/plain';
264
+ return c.text(script.content, 200, { 'Content-Type': contentType });
265
+ });
266
+ // Get a specific skill by name
267
+ endpoint.get('/:name', (c) => {
268
+ const name = c.req.param('name');
269
+ // Handle both "skill_name" and "name" formats
270
+ const skillName = name.startsWith('skill_') ? name.slice(6) : name;
271
+ const skill = coll.getSkill(skillName);
272
+ if (!skill) {
273
+ throw new http_exception_1.HTTPException(404, {
274
+ message: `Skill not found: ${skillName}`
275
+ });
276
+ }
277
+ return c.json(skill);
278
+ });
279
+ // Execute skill (standard tool execution format)
280
+ endpoint.post('/', (c) => {
281
+ return coll.execute(c);
282
+ });
283
+ return endpoint;
284
+ }
285
+ // ================== MCP Endpoints ==================
286
+ function createMCPEndpoints(providers) {
287
+ const endpoint = new hono_1.Hono();
288
+ for (const p of providers) {
289
+ endpoint.post(`/${p.name}`, async (c) => {
290
+ const session = await (0, auth_js_1.authorize)(c);
291
+ const config = await readJsonBody(c);
292
+ const info = await p.createMCPConnection(session, config);
293
+ return c.json(info);
294
+ });
295
+ endpoint.get(`/${p.name}`, (c) => c.json({
296
+ name: p.name,
297
+ description: p.description,
298
+ }));
299
+ }
300
+ return endpoint;
301
+ }
302
+ async function readJsonBody(ctx) {
303
+ try {
304
+ const text = await ctx.req.text();
305
+ const jsonContent = text?.trim() || '';
306
+ if (!jsonContent)
307
+ return {};
308
+ return JSON.parse(jsonContent);
309
+ }
310
+ catch (err) {
311
+ throw new http_exception_1.HTTPException(400, {
312
+ message: "Failed to parse JSON body: " + err.message
313
+ });
314
+ }
315
+ }
316
+ // ================== Server Utilities ==================
317
+ /**
318
+ * Simple development server with static file handling
319
+ */
320
+ function createDevServer(config) {
321
+ const app = createToolServer(config);
322
+ if (config.staticHandler) {
323
+ app.use('*', config.staticHandler);
324
+ }
325
+ return app;
326
+ }
327
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}