@blaxel/core 0.2.49-dev.214 → 0.2.49-dev1

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 (247) hide show
  1. package/dist/agents/index.d.ts +15 -0
  2. package/dist/agents/index.js +109 -0
  3. package/dist/authentication/apikey.d.ts +10 -0
  4. package/dist/authentication/apikey.js +24 -0
  5. package/dist/authentication/clientcredentials.d.ts +17 -0
  6. package/dist/authentication/clientcredentials.js +85 -0
  7. package/dist/authentication/credentials.d.ts +6 -0
  8. package/dist/authentication/credentials.js +17 -0
  9. package/dist/authentication/deviceMode.d.ts +15 -0
  10. package/dist/authentication/deviceMode.js +70 -0
  11. package/dist/authentication/index.d.ts +3 -0
  12. package/dist/authentication/index.js +62 -0
  13. package/dist/authentication/types.d.ts +9 -0
  14. package/dist/authentication/types.js +2 -0
  15. package/dist/cache/index.d.ts +1 -0
  16. package/dist/cache/index.js +26 -0
  17. package/dist/cjs/.tsbuildinfo +1 -1
  18. package/dist/cjs/agents/index.js +2 -2
  19. package/dist/cjs/authentication/clientcredentials.js +1 -4
  20. package/dist/cjs/client/responseInterceptor.js +53 -0
  21. package/dist/cjs/client/sdk.gen.js +143 -3
  22. package/dist/cjs/common/autoload.js +7 -0
  23. package/dist/cjs/common/env.js +3 -0
  24. package/dist/cjs/common/internal.js +0 -40
  25. package/dist/cjs/common/settings.js +2 -5
  26. package/dist/cjs/common/version.js +6 -0
  27. package/dist/cjs/common/webhook.js +101 -0
  28. package/dist/cjs/jobs/executions.js +119 -0
  29. package/dist/cjs/jobs/jobs.js +2 -2
  30. package/dist/cjs/jobs/start.js +1 -32
  31. package/dist/cjs/sandbox/action.js +2 -1
  32. package/dist/cjs/sandbox/index.js +1 -0
  33. package/dist/cjs/sandbox/interpreter.js +400 -0
  34. package/dist/cjs/sandbox/sandbox.js +10 -67
  35. package/dist/cjs/tools/mcpTool.js +2 -6
  36. package/dist/cjs/types/client/responseInterceptor.d.ts +12 -0
  37. package/dist/cjs/types/client/sdk.gen.d.ts +41 -1
  38. package/dist/cjs/types/client/types.gen.d.ts +599 -16
  39. package/dist/cjs/types/common/internal.d.ts +0 -2
  40. package/dist/cjs/types/common/settings.d.ts +0 -1
  41. package/dist/cjs/types/common/version.d.ts +2 -0
  42. package/dist/cjs/types/common/webhook.d.ts +89 -0
  43. package/dist/cjs/types/jobs/executions.d.ts +42 -0
  44. package/dist/cjs/types/sandbox/client/sdk.gen.d.ts +1 -1
  45. package/dist/cjs/types/sandbox/index.d.ts +1 -0
  46. package/dist/cjs/types/sandbox/interpreter.d.ts +71 -0
  47. package/dist/cjs/types/sandbox/sandbox.d.ts +6 -12
  48. package/dist/cjs/types/sandbox/types.d.ts +0 -3
  49. package/dist/cjs-browser/.tsbuildinfo +1 -1
  50. package/dist/cjs-browser/agents/index.js +2 -2
  51. package/dist/cjs-browser/authentication/clientcredentials.js +1 -4
  52. package/dist/cjs-browser/client/responseInterceptor.js +53 -0
  53. package/dist/cjs-browser/client/sdk.gen.js +143 -3
  54. package/dist/cjs-browser/common/autoload.js +7 -0
  55. package/dist/cjs-browser/common/env.js +3 -0
  56. package/dist/cjs-browser/common/internal.js +0 -40
  57. package/dist/cjs-browser/common/settings.js +2 -5
  58. package/dist/cjs-browser/common/version.js +6 -0
  59. package/dist/cjs-browser/common/webhook.js +101 -0
  60. package/dist/cjs-browser/jobs/executions.js +119 -0
  61. package/dist/cjs-browser/jobs/jobs.js +2 -2
  62. package/dist/cjs-browser/jobs/start.js +1 -32
  63. package/dist/cjs-browser/sandbox/action.js +2 -1
  64. package/dist/cjs-browser/sandbox/index.js +1 -0
  65. package/dist/cjs-browser/sandbox/interpreter.js +400 -0
  66. package/dist/cjs-browser/sandbox/sandbox.js +10 -67
  67. package/dist/cjs-browser/tools/mcpTool.js +2 -6
  68. package/dist/cjs-browser/types/client/responseInterceptor.d.ts +12 -0
  69. package/dist/cjs-browser/types/client/sdk.gen.d.ts +41 -1
  70. package/dist/cjs-browser/types/client/types.gen.d.ts +599 -16
  71. package/dist/cjs-browser/types/common/internal.d.ts +0 -2
  72. package/dist/cjs-browser/types/common/settings.d.ts +0 -1
  73. package/dist/cjs-browser/types/common/version.d.ts +2 -0
  74. package/dist/cjs-browser/types/common/webhook.d.ts +89 -0
  75. package/dist/cjs-browser/types/jobs/executions.d.ts +42 -0
  76. package/dist/cjs-browser/types/sandbox/client/sdk.gen.d.ts +1 -1
  77. package/dist/cjs-browser/types/sandbox/index.d.ts +1 -0
  78. package/dist/cjs-browser/types/sandbox/interpreter.d.ts +71 -0
  79. package/dist/cjs-browser/types/sandbox/sandbox.d.ts +6 -12
  80. package/dist/cjs-browser/types/sandbox/types.d.ts +0 -3
  81. package/dist/client/authentication.d.ts +25 -0
  82. package/dist/client/authentication.js +15 -0
  83. package/dist/client/client.d.ts +2 -0
  84. package/dist/client/client.gen.d.ts +12 -0
  85. package/dist/client/client.gen.js +8 -0
  86. package/dist/{cjs/sandbox/websocket/index.js → client/client.js} +1 -1
  87. package/dist/client/index.d.ts +2 -0
  88. package/dist/client/index.js +19 -0
  89. package/dist/client/interceptors.d.ts +3 -0
  90. package/dist/client/interceptors.js +17 -0
  91. package/dist/client/sdk.gen.d.ts +499 -0
  92. package/dist/client/sdk.gen.js +1751 -0
  93. package/dist/client/types.gen.d.ts +4546 -0
  94. package/dist/client/types.gen.js +4 -0
  95. package/dist/common/autoload.d.ts +3 -0
  96. package/dist/common/autoload.js +27 -0
  97. package/dist/common/env.d.ts +5 -0
  98. package/dist/common/env.js +42 -0
  99. package/dist/common/errors.d.ts +1 -0
  100. package/dist/common/errors.js +17 -0
  101. package/dist/common/internal.d.ts +4 -0
  102. package/dist/common/internal.js +188 -0
  103. package/dist/common/internal.test.d.ts +1 -0
  104. package/dist/common/internal.test.js +39 -0
  105. package/dist/common/logger.d.ts +25 -0
  106. package/dist/common/logger.js +69 -0
  107. package/dist/common/node.d.ts +5 -0
  108. package/dist/common/node.js +26 -0
  109. package/dist/common/settings.d.ts +31 -0
  110. package/dist/common/settings.js +170 -0
  111. package/dist/esm/.tsbuildinfo +1 -1
  112. package/dist/esm/agents/index.js +3 -3
  113. package/dist/esm/authentication/clientcredentials.js +1 -4
  114. package/dist/esm/client/responseInterceptor.js +49 -0
  115. package/dist/esm/client/sdk.gen.js +132 -0
  116. package/dist/esm/common/autoload.js +7 -0
  117. package/dist/esm/common/env.js +3 -0
  118. package/dist/esm/common/internal.js +0 -38
  119. package/dist/esm/common/settings.js +2 -5
  120. package/dist/esm/common/version.js +3 -0
  121. package/dist/esm/common/webhook.js +97 -0
  122. package/dist/esm/jobs/executions.js +114 -0
  123. package/dist/esm/jobs/jobs.js +3 -3
  124. package/dist/esm/jobs/start.js +1 -32
  125. package/dist/esm/sandbox/action.js +3 -2
  126. package/dist/esm/sandbox/index.js +1 -0
  127. package/dist/esm/sandbox/interpreter.js +396 -0
  128. package/dist/esm/sandbox/sandbox.js +10 -67
  129. package/dist/esm/tools/mcpTool.js +3 -7
  130. package/dist/esm-browser/.tsbuildinfo +1 -1
  131. package/dist/esm-browser/agents/index.js +3 -3
  132. package/dist/esm-browser/authentication/clientcredentials.js +1 -4
  133. package/dist/esm-browser/client/responseInterceptor.js +49 -0
  134. package/dist/esm-browser/client/sdk.gen.js +132 -0
  135. package/dist/esm-browser/common/autoload.js +7 -0
  136. package/dist/esm-browser/common/env.js +3 -0
  137. package/dist/esm-browser/common/internal.js +0 -38
  138. package/dist/esm-browser/common/settings.js +2 -5
  139. package/dist/esm-browser/common/version.js +3 -0
  140. package/dist/esm-browser/common/webhook.js +97 -0
  141. package/dist/esm-browser/jobs/executions.js +114 -0
  142. package/dist/esm-browser/jobs/jobs.js +3 -3
  143. package/dist/esm-browser/jobs/start.js +1 -32
  144. package/dist/esm-browser/sandbox/action.js +3 -2
  145. package/dist/esm-browser/sandbox/index.js +1 -0
  146. package/dist/esm-browser/sandbox/interpreter.js +396 -0
  147. package/dist/esm-browser/sandbox/sandbox.js +10 -67
  148. package/dist/esm-browser/tools/mcpTool.js +3 -7
  149. package/dist/index.browser.test.d.ts +1 -0
  150. package/dist/index.browser.test.js +45 -0
  151. package/dist/index.d.ts +17 -0
  152. package/dist/index.js +33 -0
  153. package/dist/jobs/index.d.ts +3 -0
  154. package/dist/jobs/index.js +19 -0
  155. package/dist/jobs/jobs.d.ts +13 -0
  156. package/dist/jobs/jobs.js +90 -0
  157. package/dist/jobs/start.d.ts +1 -0
  158. package/dist/jobs/start.js +66 -0
  159. package/dist/jobs/types.d.ts +3 -0
  160. package/dist/jobs/types.js +2 -0
  161. package/dist/mcp/client.d.ts +28 -0
  162. package/dist/mcp/client.js +247 -0
  163. package/dist/{cjs-browser/types/sandbox/websocket → mcp}/index.d.ts +1 -0
  164. package/dist/{cjs-browser/sandbox/websocket → mcp}/index.js +1 -0
  165. package/dist/mcp/server.d.ts +24 -0
  166. package/dist/mcp/server.js +213 -0
  167. package/dist/models/index.d.ts +8 -0
  168. package/dist/models/index.js +31 -0
  169. package/dist/sandbox/action.d.ts +19 -0
  170. package/dist/sandbox/action.js +84 -0
  171. package/dist/sandbox/client/client.gen.d.ts +12 -0
  172. package/dist/sandbox/client/client.gen.js +6 -0
  173. package/dist/sandbox/client/index.d.ts +2 -0
  174. package/dist/sandbox/client/index.js +19 -0
  175. package/dist/sandbox/client/sdk.gen.d.ts +101 -0
  176. package/dist/sandbox/client/sdk.gen.js +289 -0
  177. package/dist/sandbox/client/types.gen.d.ts +578 -0
  178. package/dist/sandbox/client/types.gen.js +3 -0
  179. package/dist/{cjs/types/sandbox/filesystem/filesystem-ws.d.ts → sandbox/filesystem/filesystem.d.ts} +6 -18
  180. package/dist/sandbox/filesystem/filesystem.js +276 -0
  181. package/dist/sandbox/filesystem/index.d.ts +2 -0
  182. package/dist/sandbox/filesystem/index.js +18 -0
  183. package/dist/sandbox/filesystem/types.d.ts +15 -0
  184. package/dist/sandbox/filesystem/types.js +2 -0
  185. package/dist/sandbox/index.d.ts +4 -0
  186. package/dist/sandbox/index.js +36 -0
  187. package/dist/sandbox/network/index.d.ts +1 -0
  188. package/dist/sandbox/network/index.js +17 -0
  189. package/dist/sandbox/network/network.d.ts +5 -0
  190. package/dist/sandbox/network/network.js +10 -0
  191. package/dist/sandbox/preview.d.ts +37 -0
  192. package/dist/sandbox/preview.js +148 -0
  193. package/dist/sandbox/process/index.d.ts +1 -0
  194. package/dist/sandbox/process/index.js +17 -0
  195. package/dist/sandbox/process/process.d.ts +24 -0
  196. package/dist/sandbox/process/process.js +189 -0
  197. package/dist/sandbox/sandbox.d.ts +33 -0
  198. package/dist/sandbox/sandbox.js +178 -0
  199. package/dist/sandbox/session.d.ts +27 -0
  200. package/dist/sandbox/session.js +123 -0
  201. package/dist/sandbox/types.d.ts +51 -0
  202. package/dist/sandbox/types.js +81 -0
  203. package/dist/telemetry/telemetry.d.ts +62 -0
  204. package/dist/telemetry/telemetry.js +80 -0
  205. package/dist/tools/index.d.ts +11 -0
  206. package/dist/tools/index.js +52 -0
  207. package/dist/tools/mcpTool.d.ts +28 -0
  208. package/dist/tools/mcpTool.js +218 -0
  209. package/dist/tools/types.d.ts +8 -0
  210. package/dist/tools/types.js +2 -0
  211. package/dist/tools/zodSchema.d.ts +9 -0
  212. package/dist/tools/zodSchema.js +50 -0
  213. package/dist/volume/index.d.ts +23 -0
  214. package/dist/volume/index.js +113 -0
  215. package/package.json +2 -2
  216. package/dist/cjs/sandbox/codegen/codegen-ws.js +0 -30
  217. package/dist/cjs/sandbox/filesystem/filesystem-ws.js +0 -106
  218. package/dist/cjs/sandbox/network/network-ws.js +0 -12
  219. package/dist/cjs/sandbox/process/process-ws.js +0 -139
  220. package/dist/cjs/sandbox/websocket/client.js +0 -269
  221. package/dist/cjs/types/sandbox/codegen/codegen-ws.d.ts +0 -10
  222. package/dist/cjs/types/sandbox/network/network-ws.d.ts +0 -7
  223. package/dist/cjs/types/sandbox/process/process-ws.d.ts +0 -27
  224. package/dist/cjs/types/sandbox/websocket/client.d.ts +0 -48
  225. package/dist/cjs/types/sandbox/websocket/index.d.ts +0 -1
  226. package/dist/cjs-browser/sandbox/codegen/codegen-ws.js +0 -30
  227. package/dist/cjs-browser/sandbox/filesystem/filesystem-ws.js +0 -106
  228. package/dist/cjs-browser/sandbox/network/network-ws.js +0 -12
  229. package/dist/cjs-browser/sandbox/process/process-ws.js +0 -139
  230. package/dist/cjs-browser/sandbox/websocket/client.js +0 -269
  231. package/dist/cjs-browser/types/sandbox/codegen/codegen-ws.d.ts +0 -10
  232. package/dist/cjs-browser/types/sandbox/filesystem/filesystem-ws.d.ts +0 -35
  233. package/dist/cjs-browser/types/sandbox/network/network-ws.d.ts +0 -7
  234. package/dist/cjs-browser/types/sandbox/process/process-ws.d.ts +0 -27
  235. package/dist/cjs-browser/types/sandbox/websocket/client.d.ts +0 -48
  236. package/dist/esm/sandbox/codegen/codegen-ws.js +0 -26
  237. package/dist/esm/sandbox/filesystem/filesystem-ws.js +0 -102
  238. package/dist/esm/sandbox/network/network-ws.js +0 -8
  239. package/dist/esm/sandbox/process/process-ws.js +0 -135
  240. package/dist/esm/sandbox/websocket/client.js +0 -265
  241. package/dist/esm/sandbox/websocket/index.js +0 -1
  242. package/dist/esm-browser/sandbox/codegen/codegen-ws.js +0 -26
  243. package/dist/esm-browser/sandbox/filesystem/filesystem-ws.js +0 -102
  244. package/dist/esm-browser/sandbox/network/network-ws.js +0 -8
  245. package/dist/esm-browser/sandbox/process/process-ws.js +0 -135
  246. package/dist/esm-browser/sandbox/websocket/client.js +0 -265
  247. package/dist/esm-browser/sandbox/websocket/index.js +0 -1
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Options for creating a span
3
+ */
4
+ export interface BlaxelSpanOptions {
5
+ /** Key-value attributes to attach to the span */
6
+ attributes?: Record<string, string | number | boolean>;
7
+ /** Parent span context, if any */
8
+ parentContext?: unknown;
9
+ /** Whether this is a root span */
10
+ isRoot?: boolean;
11
+ }
12
+ /**
13
+ * Represents a telemetry span
14
+ */
15
+ export interface BlaxelSpan {
16
+ /** Add an attribute to the span */
17
+ setAttribute(key: string, value: string | number | boolean): void;
18
+ /** Add multiple attributes to the span */
19
+ setAttributes(attributes: Record<string, string | number | boolean>): void;
20
+ /** Record an error on the span */
21
+ recordException(error: Error): void;
22
+ /** Set the status of the span */
23
+ setStatus(status: 'ok' | 'error', message?: string): void;
24
+ /** End the span */
25
+ end(): void;
26
+ /** Get the span context (for passing to child spans) */
27
+ getContext(): unknown;
28
+ }
29
+ /**
30
+ * Provider interface for telemetry functionality
31
+ */
32
+ export interface BlaxelTelemetryProvider {
33
+ /** Create a new span */
34
+ startSpan(name: string, options?: BlaxelSpanOptions): BlaxelSpan;
35
+ /** Flush the telemetry provider */
36
+ flush(): Promise<void>;
37
+ }
38
+ /**
39
+ * Registry for managing the global telemetry provider
40
+ */
41
+ declare class TelemetryRegistry {
42
+ private static instance;
43
+ private provider;
44
+ private constructor();
45
+ static getInstance(): TelemetryRegistry;
46
+ /**
47
+ * Register a telemetry provider implementation
48
+ */
49
+ registerProvider(provider: BlaxelTelemetryProvider): void;
50
+ /**
51
+ * Get the current telemetry provider
52
+ */
53
+ getProvider(): BlaxelTelemetryProvider;
54
+ }
55
+ export declare const telemetryRegistry: TelemetryRegistry;
56
+ /**
57
+ * Create a span with the registered provider
58
+ */
59
+ export declare function startSpan(name: string, options?: BlaxelSpanOptions): BlaxelSpan;
60
+ export declare function withSpan<T>(name: string, fn: () => Promise<T>, options?: BlaxelSpanOptions): Promise<T>;
61
+ export declare function flush(): Promise<void>;
62
+ export {};
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ // @blaxel/core/src/telemetry/interface.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.telemetryRegistry = void 0;
5
+ exports.startSpan = startSpan;
6
+ exports.withSpan = withSpan;
7
+ exports.flush = flush;
8
+ /**
9
+ * No-operation implementation of Span
10
+ */
11
+ class NoopSpan {
12
+ setAttribute() { }
13
+ setAttributes() { }
14
+ recordException() { }
15
+ setStatus() { }
16
+ end() { }
17
+ getContext() { return null; }
18
+ }
19
+ /**
20
+ * No-operation implementation of TelemetryProvider
21
+ */
22
+ class NoopTelemetryProvider {
23
+ startSpan() {
24
+ return new NoopSpan();
25
+ }
26
+ flush() {
27
+ return Promise.resolve();
28
+ }
29
+ }
30
+ /**
31
+ * Registry for managing the global telemetry provider
32
+ */
33
+ class TelemetryRegistry {
34
+ static instance;
35
+ provider = new NoopTelemetryProvider();
36
+ constructor() { }
37
+ static getInstance() {
38
+ if (!TelemetryRegistry.instance) {
39
+ TelemetryRegistry.instance = new TelemetryRegistry();
40
+ }
41
+ return TelemetryRegistry.instance;
42
+ }
43
+ /**
44
+ * Register a telemetry provider implementation
45
+ */
46
+ registerProvider(provider) {
47
+ this.provider = provider;
48
+ }
49
+ /**
50
+ * Get the current telemetry provider
51
+ */
52
+ getProvider() {
53
+ return this.provider;
54
+ }
55
+ }
56
+ // Export singleton instance
57
+ exports.telemetryRegistry = TelemetryRegistry.getInstance();
58
+ // Convenience functions that delegate to the provider
59
+ /**
60
+ * Create a span with the registered provider
61
+ */
62
+ function startSpan(name, options) {
63
+ return exports.telemetryRegistry.getProvider().startSpan(name, options);
64
+ }
65
+ async function withSpan(name, fn, options) {
66
+ const span = startSpan(name, options);
67
+ try {
68
+ const result = await fn();
69
+ span.end();
70
+ return result;
71
+ }
72
+ catch (error) {
73
+ span.recordException(error);
74
+ span.end();
75
+ throw error;
76
+ }
77
+ }
78
+ async function flush() {
79
+ await exports.telemetryRegistry.getProvider().flush();
80
+ }
@@ -0,0 +1,11 @@
1
+ import { Function } from "../client/client.js";
2
+ import { ToolOptions } from "./mcpTool.js";
3
+ import { Tool } from "./types.js";
4
+ export declare const getTool: (name: string, options?: number | ToolOptions) => Promise<Tool[]>;
5
+ export declare class BLTools {
6
+ toolNames: string[];
7
+ constructor(toolNames: string[]);
8
+ }
9
+ export declare const blTools: (names: string[]) => BLTools;
10
+ export declare const blTool: (name: string) => BLTools;
11
+ export declare const getToolMetadata: (tool: string) => Promise<Function | null>;
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getToolMetadata = exports.blTool = exports.blTools = exports.BLTools = exports.getTool = void 0;
4
+ const index_js_1 = require("../cache/index.js");
5
+ const client_js_1 = require("../client/client.js");
6
+ const internal_js_1 = require("../common/internal.js");
7
+ const mcpTool_js_1 = require("./mcpTool.js");
8
+ const getTool = async (name, options) => {
9
+ return await (0, mcpTool_js_1.getMcpTool)(name, options);
10
+ };
11
+ exports.getTool = getTool;
12
+ class BLTools {
13
+ toolNames;
14
+ constructor(toolNames) {
15
+ this.toolNames = toolNames;
16
+ }
17
+ }
18
+ exports.BLTools = BLTools;
19
+ const blTools = (names) => {
20
+ return new BLTools(names);
21
+ };
22
+ exports.blTools = blTools;
23
+ const blTool = (name) => {
24
+ return new BLTools([name]);
25
+ };
26
+ exports.blTool = blTool;
27
+ const getToolMetadata = async (tool) => {
28
+ const forcedUrl = (0, internal_js_1.getForcedUrl)('function', tool);
29
+ if (forcedUrl) {
30
+ return {
31
+ metadata: {
32
+ name: tool,
33
+ },
34
+ spec: {
35
+ runtime: {
36
+ type: "mcp",
37
+ },
38
+ },
39
+ };
40
+ }
41
+ const cacheData = await (0, index_js_1.findFromCache)("Function", tool);
42
+ if (cacheData) {
43
+ return cacheData;
44
+ }
45
+ const { data } = await (0, client_js_1.getFunction)({
46
+ path: {
47
+ functionName: tool,
48
+ },
49
+ });
50
+ return data || null;
51
+ };
52
+ exports.getToolMetadata = getToolMetadata;
@@ -0,0 +1,28 @@
1
+ import { Tool } from "./types.js";
2
+ export type ToolOptions = {
3
+ ms?: number;
4
+ meta?: Record<string, unknown> | undefined;
5
+ };
6
+ export declare class McpTool {
7
+ private name;
8
+ private type;
9
+ private pluralType;
10
+ private client;
11
+ private transport?;
12
+ private timer?;
13
+ private ms;
14
+ private meta;
15
+ private startPromise?;
16
+ constructor(name: string, options?: ToolOptions | number);
17
+ get fallbackUrl(): import("url").URL | null;
18
+ get externalUrl(): import("url").URL;
19
+ get internalUrl(): import("url").URL;
20
+ get forcedUrl(): import("url").URL | null;
21
+ get url(): import("url").URL;
22
+ start(): Promise<void>;
23
+ close(now?: boolean): Promise<void>;
24
+ stopCloseTimer(): void;
25
+ listTools(): Promise<Tool[]>;
26
+ call(toolName: string, args: Record<string, unknown> | undefined): Promise<unknown>;
27
+ }
28
+ export declare const getMcpTool: (name: string, options?: ToolOptions | number) => Promise<Tool[]>;
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getMcpTool = exports.McpTool = void 0;
4
+ const index_js_1 = require("@modelcontextprotocol/sdk/client/index.js");
5
+ const env_js_1 = require("../common/env.js");
6
+ const internal_js_1 = require("../common/internal.js");
7
+ const logger_js_1 = require("../common/logger.js");
8
+ const settings_js_1 = require("../common/settings.js");
9
+ const index_js_2 = require("../index.js");
10
+ const client_js_1 = require("../mcp/client.js");
11
+ const telemetry_js_1 = require("../telemetry/telemetry.js");
12
+ const zodSchema_js_1 = require("./zodSchema.js");
13
+ const McpToolCache = new Map();
14
+ class McpTool {
15
+ name;
16
+ type;
17
+ pluralType;
18
+ client;
19
+ transport;
20
+ timer;
21
+ ms;
22
+ meta;
23
+ startPromise;
24
+ constructor(name, options = { ms: 5000 }) {
25
+ this.name = name;
26
+ this.type = "function";
27
+ this.pluralType = "functions";
28
+ if (name.startsWith("sandbox/") || name.startsWith("sandboxes/")) {
29
+ this.name = name.split("/")[1];
30
+ this.type = "sandbox";
31
+ this.pluralType = "sandboxes";
32
+ }
33
+ if (env_js_1.env.BL_CLOUD) {
34
+ this.ms = 0;
35
+ }
36
+ else {
37
+ this.ms = typeof options === "number" ? options : options.ms || 5000;
38
+ }
39
+ this.meta = (typeof options === "object" && options.meta) || undefined;
40
+ this.client = new index_js_1.Client({
41
+ name: this.name,
42
+ version: "1.0.0",
43
+ }, {
44
+ capabilities: {
45
+ tools: {},
46
+ },
47
+ });
48
+ }
49
+ get fallbackUrl() {
50
+ if (this.externalUrl != this.url) {
51
+ return this.externalUrl;
52
+ }
53
+ return null;
54
+ }
55
+ get externalUrl() {
56
+ return new URL(`${settings_js_1.settings.runUrl}/${settings_js_1.settings.workspace}/${this.pluralType}/${this.name}`);
57
+ }
58
+ get internalUrl() {
59
+ const hash = (0, internal_js_1.getGlobalUniqueHash)(settings_js_1.settings.workspace, this.type, this.name);
60
+ return new URL(`${settings_js_1.settings.runInternalProtocol}://bl-${settings_js_1.settings.env}-${hash}.${settings_js_1.settings.runInternalHostname}`);
61
+ }
62
+ get forcedUrl() {
63
+ return (0, internal_js_1.getForcedUrl)(this.type, this.name);
64
+ }
65
+ get url() {
66
+ if (this.forcedUrl)
67
+ return this.forcedUrl;
68
+ if (settings_js_1.settings.runInternalHostname)
69
+ return this.internalUrl;
70
+ return this.externalUrl;
71
+ }
72
+ async start() {
73
+ logger_js_1.logger.debug(`MCP:${this.name}:start`);
74
+ this.stopCloseTimer();
75
+ this.startPromise = this.startPromise || (async () => {
76
+ await (0, index_js_2.authenticate)();
77
+ try {
78
+ logger_js_1.logger.debug(`MCP:${this.name}:Connecting::${this.url.toString()}`);
79
+ this.transport = new client_js_1.BlaxelMcpClientTransport(this.url.toString(), settings_js_1.settings.headers, { retry: { max: 0 } });
80
+ await this.client.connect(this.transport);
81
+ logger_js_1.logger.debug(`MCP:${this.name}:Connected`);
82
+ }
83
+ catch (err) {
84
+ if (err instanceof Error) {
85
+ logger_js_1.logger.error(`MCP ${this.name} connection failed: ${err.message}`, {
86
+ error: err.message,
87
+ stack: err.stack,
88
+ mcpName: this.name,
89
+ url: this.url
90
+ });
91
+ }
92
+ if (!this.fallbackUrl) {
93
+ throw err;
94
+ }
95
+ logger_js_1.logger.debug(`MCP:${this.name}:Connecting to fallback`);
96
+ this.transport = new client_js_1.BlaxelMcpClientTransport(this.fallbackUrl.toString(), settings_js_1.settings.headers);
97
+ await this.client.connect(this.transport);
98
+ logger_js_1.logger.debug(`MCP:${this.name}:Connected to fallback`);
99
+ }
100
+ })();
101
+ return await this.startPromise;
102
+ }
103
+ async close(now = false) {
104
+ logger_js_1.logger.debug(`MCP:${this.name}:Close in ${now ? 0 : this.ms}ms`);
105
+ if (now || !this.ms) {
106
+ if (this.timer) {
107
+ clearTimeout(this.timer);
108
+ }
109
+ delete this.startPromise;
110
+ return this.client.close();
111
+ }
112
+ this.timer = setTimeout(() => {
113
+ logger_js_1.logger.debug(`MCP:${this.name}:CloseTimer`);
114
+ delete this.startPromise;
115
+ this.client.close().catch((err) => {
116
+ if (err instanceof Error) {
117
+ logger_js_1.logger.error(`MCP ${this.name} close failed: ${err.message}`, {
118
+ error: err.message,
119
+ stack: err.stack,
120
+ mcpName: this.name
121
+ });
122
+ }
123
+ });
124
+ }, now ? 0 : this.ms);
125
+ }
126
+ stopCloseTimer() {
127
+ logger_js_1.logger.debug(`MCP:${this.name}:StopCloseTimer`);
128
+ if (this.timer) {
129
+ clearTimeout(this.timer);
130
+ this.timer = undefined;
131
+ }
132
+ }
133
+ async listTools() {
134
+ const span = (0, telemetry_js_1.startSpan)(this.name, {
135
+ attributes: {
136
+ "span.type": "tool.list",
137
+ },
138
+ });
139
+ try {
140
+ logger_js_1.logger.debug(`MCP:${this.name}:Listing tools`);
141
+ await this.start();
142
+ const { tools } = (await this.client.listTools());
143
+ await this.close();
144
+ const result = tools.map((tool) => {
145
+ return {
146
+ name: tool.name,
147
+ description: tool.description,
148
+ inputSchema: (0, zodSchema_js_1.schemaToZodSchema)(tool.inputSchema),
149
+ originalSchema: tool.inputSchema,
150
+ call: (input) => {
151
+ return this.call(tool.name, input);
152
+ },
153
+ };
154
+ });
155
+ span.setAttribute("tool.list.result", JSON.stringify(result));
156
+ return result;
157
+ }
158
+ catch (err) {
159
+ span.setStatus("error");
160
+ span.recordException(err);
161
+ throw err;
162
+ }
163
+ finally {
164
+ span.end();
165
+ }
166
+ }
167
+ async call(toolName, args) {
168
+ const span = (0, telemetry_js_1.startSpan)(this.name + "." + toolName, {
169
+ attributes: {
170
+ "span.type": "tool.call",
171
+ "tool.name": toolName,
172
+ "tool.args": JSON.stringify(args),
173
+ },
174
+ });
175
+ try {
176
+ logger_js_1.logger.debug(`MCP:${this.name}:Tool calling`, toolName, JSON.stringify(args));
177
+ logger_js_1.logger.debug(`MCP:${this.name}:Tool calling:start`);
178
+ await this.start();
179
+ logger_js_1.logger.debug(`MCP:${this.name}:Tool calling:start2`);
180
+ const result = await this.client.callTool({
181
+ name: toolName,
182
+ arguments: args,
183
+ _meta: this.meta
184
+ });
185
+ logger_js_1.logger.debug(`MCP:${this.name}:Tool calling:result`);
186
+ await this.close();
187
+ logger_js_1.logger.debug(`MCP:${this.name}:Tool result`, toolName, JSON.stringify(args));
188
+ span.setAttribute("tool.call.result", JSON.stringify(result));
189
+ return result;
190
+ }
191
+ catch (err) {
192
+ if (err instanceof Error) {
193
+ logger_js_1.logger.error(`MCP tool call failed: ${err.message}`, {
194
+ error: err.message,
195
+ stack: err.stack,
196
+ mcpName: this.name,
197
+ toolName,
198
+ args: JSON.stringify(args)
199
+ });
200
+ }
201
+ throw err;
202
+ }
203
+ finally {
204
+ span.end();
205
+ }
206
+ }
207
+ }
208
+ exports.McpTool = McpTool;
209
+ const getMcpTool = async (name, options) => {
210
+ let tool = McpToolCache.get(name);
211
+ if (!tool) {
212
+ logger_js_1.logger.debug(`MCP:${name}:Creating new tool`);
213
+ tool = new McpTool(name, options);
214
+ McpToolCache.set(name, tool);
215
+ }
216
+ return await tool.listTools();
217
+ };
218
+ exports.getMcpTool = getMcpTool;
@@ -0,0 +1,8 @@
1
+ import z from "zod";
2
+ export type Tool = {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: z.ZodObject<any>;
6
+ originalSchema: object;
7
+ call(input: unknown): Promise<unknown>;
8
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import z from "zod";
2
+ import { FunctionSchema } from "../client/index.js";
3
+ /**
4
+ * Converts an array of `FunctionSchema` objects into a Zod schema for validation.
5
+ *
6
+ * @param {FunctionSchema} parameters - The parameters to convert.
7
+ * @returns {z.ZodObject<any>} A Zod object schema representing the parameters.
8
+ */
9
+ export declare const schemaToZodSchema: (schema: FunctionSchema) => z.ZodObject<any>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.schemaToZodSchema = void 0;
7
+ const zod_1 = __importDefault(require("zod"));
8
+ /**
9
+ * Converts an array of `FunctionSchema` objects into a Zod schema for validation.
10
+ *
11
+ * @param {FunctionSchema} parameters - The parameters to convert.
12
+ * @returns {z.ZodObject<any>} A Zod object schema representing the parameters.
13
+ */
14
+ const schemaToZodSchema = (schema) => {
15
+ const shape = {};
16
+ if (schema.properties) {
17
+ Object.entries(schema.properties).forEach(([key, param]) => {
18
+ let zodType;
19
+ switch (param.type) {
20
+ case "boolean":
21
+ zodType = zod_1.default.boolean();
22
+ break;
23
+ case "number":
24
+ case "integer":
25
+ zodType = zod_1.default.number();
26
+ break;
27
+ case "null":
28
+ zodType = zod_1.default.null();
29
+ break;
30
+ case "array":
31
+ zodType = zod_1.default.array((0, exports.schemaToZodSchema)(param.items || {}));
32
+ break;
33
+ case "object":
34
+ zodType = (0, exports.schemaToZodSchema)(param);
35
+ break;
36
+ default:
37
+ zodType = zod_1.default.string();
38
+ }
39
+ if (param.description) {
40
+ zodType = zodType.describe(param.description);
41
+ }
42
+ shape[key] =
43
+ param.required || schema.required?.includes(key)
44
+ ? zodType
45
+ : zodType.optional();
46
+ });
47
+ }
48
+ return zod_1.default.object(shape);
49
+ };
50
+ exports.schemaToZodSchema = schemaToZodSchema;
@@ -0,0 +1,23 @@
1
+ import { Volume } from "../client/index.js";
2
+ export interface VolumeCreateConfiguration {
3
+ name?: string;
4
+ displayName?: string;
5
+ size?: number;
6
+ region?: string;
7
+ }
8
+ export declare class VolumeInstance {
9
+ private volume;
10
+ constructor(volume: Volume);
11
+ get metadata(): import("../client/types.gen.js").Metadata | undefined;
12
+ get spec(): import("../client/types.gen.js").VolumeSpec | undefined;
13
+ get status(): string | undefined;
14
+ get name(): string | undefined;
15
+ get displayName(): string | undefined;
16
+ get size(): number | undefined;
17
+ get region(): string | undefined;
18
+ static create(config: VolumeCreateConfiguration | Volume): Promise<VolumeInstance>;
19
+ static get(volumeName: string): Promise<VolumeInstance>;
20
+ static list(): Promise<VolumeInstance[]>;
21
+ static delete(volumeName: string): Promise<Volume>;
22
+ static createIfNotExists(config: VolumeCreateConfiguration | Volume): Promise<VolumeInstance>;
23
+ }
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VolumeInstance = void 0;
4
+ const uuid_1 = require("uuid");
5
+ const index_js_1 = require("../client/index.js");
6
+ class VolumeInstance {
7
+ volume;
8
+ constructor(volume) {
9
+ this.volume = volume;
10
+ }
11
+ get metadata() {
12
+ return this.volume.metadata;
13
+ }
14
+ get spec() {
15
+ return this.volume.spec;
16
+ }
17
+ get status() {
18
+ return this.volume.status;
19
+ }
20
+ get name() {
21
+ return this.volume.metadata?.name;
22
+ }
23
+ get displayName() {
24
+ return this.volume.metadata?.displayName;
25
+ }
26
+ get size() {
27
+ return this.volume.spec?.size;
28
+ }
29
+ get region() {
30
+ return this.volume.spec?.region;
31
+ }
32
+ static async create(config) {
33
+ const defaultName = `volume-${(0, uuid_1.v4)().replace(/-/g, '').substring(0, 8)}`;
34
+ const defaultSize = 1024; // 1GB in MB
35
+ let volume;
36
+ // Handle VolumeCreateConfiguration or simple config object
37
+ if ('spec' in config && 'metadata' in config) {
38
+ // It's already a Volume object
39
+ volume = config;
40
+ }
41
+ else {
42
+ // It's a VolumeCreateConfiguration
43
+ const volumeConfig = config;
44
+ volume = {
45
+ metadata: {
46
+ name: volumeConfig.name || defaultName,
47
+ displayName: volumeConfig.displayName || volumeConfig.name || defaultName
48
+ },
49
+ spec: {
50
+ size: volumeConfig.size || defaultSize,
51
+ region: volumeConfig.region
52
+ }
53
+ };
54
+ }
55
+ // Ensure required fields have defaults
56
+ if (!volume.metadata) {
57
+ volume.metadata = { name: defaultName };
58
+ }
59
+ if (!volume.metadata.name) {
60
+ volume.metadata.name = defaultName;
61
+ }
62
+ if (!volume.spec) {
63
+ volume.spec = { size: defaultSize };
64
+ }
65
+ if (!volume.spec.size) {
66
+ volume.spec.size = defaultSize;
67
+ }
68
+ const { data } = await (0, index_js_1.createVolume)({
69
+ body: volume,
70
+ throwOnError: true,
71
+ });
72
+ return new VolumeInstance(data);
73
+ }
74
+ static async get(volumeName) {
75
+ const { data } = await (0, index_js_1.getVolume)({
76
+ path: {
77
+ volumeName,
78
+ },
79
+ throwOnError: true,
80
+ });
81
+ return new VolumeInstance(data);
82
+ }
83
+ static async list() {
84
+ const { data } = await (0, index_js_1.listVolumes)({ throwOnError: true });
85
+ return data.map((volume) => new VolumeInstance(volume));
86
+ }
87
+ static async delete(volumeName) {
88
+ const { data } = await (0, index_js_1.deleteVolume)({
89
+ path: {
90
+ volumeName,
91
+ },
92
+ throwOnError: true,
93
+ });
94
+ return data;
95
+ }
96
+ static async createIfNotExists(config) {
97
+ try {
98
+ return await VolumeInstance.create(config);
99
+ }
100
+ catch (e) {
101
+ if (typeof e === "object" && e !== null && "code" in e && (e.code === 409 || e.code === 'VOLUME_ALREADY_EXISTS')) {
102
+ const name = 'name' in config ? config.name : config.metadata?.name;
103
+ if (!name) {
104
+ throw new Error("Volume name is required");
105
+ }
106
+ const volumeInstance = await VolumeInstance.get(name);
107
+ return volumeInstance;
108
+ }
109
+ throw e;
110
+ }
111
+ }
112
+ }
113
+ exports.VolumeInstance = VolumeInstance;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blaxel/core",
3
- "version": "0.2.49-dev.214",
3
+ "version": "0.2.49-dev1",
4
4
  "description": "Blaxel Core SDK for TypeScript",
5
5
  "license": "MIT",
6
6
  "author": "Blaxel, INC (https://blaxel.ai)",
@@ -74,7 +74,7 @@
74
74
  "vite": "^5.2.0",
75
75
  "vitest": "^1.5.0"
76
76
  },
77
- "commit": "3cd25c395e498b34304684d4d76a906f2cef14a9",
77
+ "commit": "3523e3d6b67057292fade1b12e304be6456fd2bc",
78
78
  "scripts": {
79
79
  "lint": "eslint src/",
80
80
  "dev": "tsc --watch",