@cogitator-ai/wasm-tools 0.3.7 → 0.4.1

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 (46) hide show
  1. package/README.md +77 -0
  2. package/dist/__tests__/file-watcher.test.d.ts +2 -0
  3. package/dist/__tests__/file-watcher.test.d.ts.map +1 -0
  4. package/dist/__tests__/file-watcher.test.js +99 -0
  5. package/dist/__tests__/file-watcher.test.js.map +1 -0
  6. package/dist/__tests__/wasm-loader.test.d.ts +2 -0
  7. package/dist/__tests__/wasm-loader.test.d.ts.map +1 -0
  8. package/dist/__tests__/wasm-loader.test.js +69 -0
  9. package/dist/__tests__/wasm-loader.test.js.map +1 -0
  10. package/dist/__tests__/wasm-tool-manager.test.d.ts +2 -0
  11. package/dist/__tests__/wasm-tool-manager.test.d.ts.map +1 -0
  12. package/dist/__tests__/wasm-tool-manager.test.js +171 -0
  13. package/dist/__tests__/wasm-tool-manager.test.js.map +1 -0
  14. package/dist/index.d.ts +1 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +1 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/manager/file-watcher.d.ts +12 -0
  19. package/dist/manager/file-watcher.d.ts.map +1 -0
  20. package/dist/manager/file-watcher.js +59 -0
  21. package/dist/manager/file-watcher.js.map +1 -0
  22. package/dist/manager/index.d.ts +5 -0
  23. package/dist/manager/index.d.ts.map +1 -0
  24. package/dist/manager/index.js +4 -0
  25. package/dist/manager/index.js.map +1 -0
  26. package/dist/manager/types.d.ts +40 -0
  27. package/dist/manager/types.d.ts.map +1 -0
  28. package/dist/manager/types.js +2 -0
  29. package/dist/manager/types.js.map +1 -0
  30. package/dist/manager/wasm-loader.d.ts +8 -0
  31. package/dist/manager/wasm-loader.d.ts.map +1 -0
  32. package/dist/manager/wasm-loader.js +27 -0
  33. package/dist/manager/wasm-loader.js.map +1 -0
  34. package/dist/manager/wasm-tool-manager.d.ts +26 -0
  35. package/dist/manager/wasm-tool-manager.d.ts.map +1 -0
  36. package/dist/manager/wasm-tool-manager.js +154 -0
  37. package/dist/manager/wasm-tool-manager.js.map +1 -0
  38. package/dist/plugins/base64.d.ts.map +1 -1
  39. package/dist/plugins/base64.js +1 -2
  40. package/dist/plugins/base64.js.map +1 -1
  41. package/dist/temp/base64.js +1 -2
  42. package/dist/wasm/base64.wasm +0 -0
  43. package/dist/wasm/calc.wasm +0 -0
  44. package/dist/wasm/hash.wasm +0 -0
  45. package/dist/wasm/json.wasm +0 -0
  46. package/package.json +9 -4
package/README.md CHANGED
@@ -8,6 +8,7 @@ WASM-based tools for Cogitator agents. Secure, sandboxed tool execution using We
8
8
  - 🔒 **Memory-safe execution** in isolated Extism sandbox
9
9
  - 📦 **~20x lower memory footprint** compared to containers
10
10
  - 🛠️ **Custom tool framework** - create your own WASM tools
11
+ - 🔄 **Hot-reload support** - update WASM modules without restart
11
12
 
12
13
  ## Installation
13
14
 
@@ -75,6 +76,41 @@ const agent = new Agent({
75
76
  });
76
77
  ```
77
78
 
79
+ ### Hot-Reload with WasmToolManager
80
+
81
+ Watch WASM files and automatically reload on changes:
82
+
83
+ ```typescript
84
+ import { WasmToolManager } from '@cogitator-ai/wasm-tools';
85
+ import { Cogitator, Agent } from '@cogitator-ai/core';
86
+
87
+ const manager = new WasmToolManager({ debounceMs: 200 });
88
+
89
+ // Watch directory for WASM plugins
90
+ await manager.watch('./plugins/*.wasm', {
91
+ onLoad: (name) => console.log(`✓ Loaded: ${name}`),
92
+ onReload: (name) => console.log(`↻ Reloaded: ${name}`),
93
+ onUnload: (name) => console.log(`✗ Unloaded: ${name}`),
94
+ onError: (name, _, err) => console.error(`Error ${name}: ${err.message}`),
95
+ });
96
+
97
+ // Or load a single module
98
+ const calcTool = await manager.load('./plugins/calc.wasm');
99
+
100
+ // Get all tools for agent
101
+ const agent = new Agent({
102
+ name: 'wasm-agent',
103
+ tools: manager.getTools(),
104
+ });
105
+
106
+ // Tools automatically use the latest plugin version after reload
107
+ const cogitator = new Cogitator({ llm: { defaultProvider: 'openai' } });
108
+ await cogitator.run(agent, 'Calculate 2 + 2');
109
+
110
+ // Cleanup when done
111
+ await manager.close();
112
+ ```
113
+
78
114
  ## API Reference
79
115
 
80
116
  ### defineWasmTool(config)
@@ -151,6 +187,47 @@ const calcPath = getWasmPath('calc'); // Path to calc.wasm
151
187
  const jsonPath = getWasmPath('json'); // Path to json.wasm
152
188
  ```
153
189
 
190
+ ### WasmToolManager
191
+
192
+ Manage WASM tools with hot-reload support.
193
+
194
+ ```typescript
195
+ interface WasmToolManagerOptions {
196
+ debounceMs?: number; // File change debounce delay (default: 100ms)
197
+ useWasi?: boolean; // Enable WASI for all modules
198
+ }
199
+
200
+ interface WasmToolCallbacks {
201
+ onLoad?: (name: string, path: string) => void;
202
+ onReload?: (name: string, path: string) => void;
203
+ onUnload?: (name: string, path: string) => void;
204
+ onError?: (name: string, path: string, error: Error) => void;
205
+ }
206
+
207
+ class WasmToolManager {
208
+ constructor(options?: WasmToolManagerOptions);
209
+
210
+ // Watch a glob pattern for WASM files
211
+ watch(pattern: string, callbacks?: WasmToolCallbacks): Promise<void>;
212
+
213
+ // Load a single WASM module
214
+ load(wasmPath: string): Promise<Tool>;
215
+
216
+ // Get all loaded tools
217
+ getTools(): Tool[];
218
+
219
+ // Get a tool by module name
220
+ getTool(name: string): Tool | undefined;
221
+
222
+ // Get module metadata
223
+ getModule(name: string): LoadedModule | undefined;
224
+ getModules(): LoadedModule[];
225
+
226
+ // Close watcher and all plugins
227
+ close(): Promise<void>;
228
+ }
229
+ ```
230
+
154
231
  ### Legacy Exports
155
232
 
156
233
  For direct sandbox usage:
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=file-watcher.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-watcher.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/file-watcher.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,99 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { FileWatcher } from '../manager/file-watcher.js';
3
+ vi.mock('chokidar', () => {
4
+ const mockWatcher = {
5
+ on: vi.fn().mockReturnThis(),
6
+ close: vi.fn().mockResolvedValue(undefined),
7
+ };
8
+ return {
9
+ default: {
10
+ watch: vi.fn().mockReturnValue(mockWatcher),
11
+ },
12
+ };
13
+ });
14
+ describe('FileWatcher', () => {
15
+ let watcher;
16
+ let chokidarMock;
17
+ beforeEach(async () => {
18
+ vi.useFakeTimers();
19
+ chokidarMock = await import('chokidar');
20
+ watcher = new FileWatcher(100);
21
+ });
22
+ afterEach(async () => {
23
+ await watcher.close();
24
+ vi.useRealTimers();
25
+ vi.clearAllMocks();
26
+ });
27
+ it('creates a watcher with chokidar', () => {
28
+ const callbacks = {
29
+ onAdd: vi.fn(),
30
+ onChange: vi.fn(),
31
+ onUnlink: vi.fn(),
32
+ };
33
+ watcher.watch('./test/*.wasm', callbacks);
34
+ expect(chokidarMock.default.watch).toHaveBeenCalledWith('./test/*.wasm', expect.objectContaining({
35
+ persistent: true,
36
+ ignoreInitial: false,
37
+ }));
38
+ });
39
+ it('throws if watch is called twice without close', () => {
40
+ const callbacks = {
41
+ onAdd: vi.fn(),
42
+ onChange: vi.fn(),
43
+ onUnlink: vi.fn(),
44
+ };
45
+ watcher.watch('./test/*.wasm', callbacks);
46
+ expect(() => watcher.watch('./other/*.wasm', callbacks)).toThrow('Watcher already started');
47
+ });
48
+ it('debounces add events', async () => {
49
+ const onAdd = vi.fn();
50
+ const callbacks = { onAdd, onChange: vi.fn(), onUnlink: vi.fn() };
51
+ watcher.watch('./test/*.wasm', callbacks);
52
+ const mockWatcher = chokidarMock.default.watch.mock.results[0]
53
+ .value;
54
+ const addHandler = mockWatcher.on.mock.calls.find((c) => c[0] === 'add')?.[1];
55
+ addHandler('/path/test.wasm');
56
+ addHandler('/path/test.wasm');
57
+ addHandler('/path/test.wasm');
58
+ expect(onAdd).not.toHaveBeenCalled();
59
+ vi.advanceTimersByTime(100);
60
+ expect(onAdd).toHaveBeenCalledTimes(1);
61
+ expect(onAdd).toHaveBeenCalledWith('/path/test.wasm');
62
+ });
63
+ it('debounces change events', async () => {
64
+ const onChange = vi.fn();
65
+ const callbacks = { onAdd: vi.fn(), onChange, onUnlink: vi.fn() };
66
+ watcher.watch('./test/*.wasm', callbacks);
67
+ const mockWatcher = chokidarMock.default.watch.mock.results[0]
68
+ .value;
69
+ const changeHandler = mockWatcher.on.mock.calls.find((c) => c[0] === 'change')?.[1];
70
+ changeHandler('/path/test.wasm');
71
+ vi.advanceTimersByTime(50);
72
+ changeHandler('/path/test.wasm');
73
+ vi.advanceTimersByTime(50);
74
+ changeHandler('/path/test.wasm');
75
+ expect(onChange).not.toHaveBeenCalled();
76
+ vi.advanceTimersByTime(100);
77
+ expect(onChange).toHaveBeenCalledTimes(1);
78
+ });
79
+ it('calls onUnlink immediately without debounce', () => {
80
+ const onUnlink = vi.fn();
81
+ const callbacks = { onAdd: vi.fn(), onChange: vi.fn(), onUnlink };
82
+ watcher.watch('./test/*.wasm', callbacks);
83
+ const mockWatcher = chokidarMock.default.watch.mock.results[0]
84
+ .value;
85
+ const unlinkHandler = mockWatcher.on.mock.calls.find((c) => c[0] === 'unlink')?.[1];
86
+ unlinkHandler('/path/test.wasm');
87
+ expect(onUnlink).toHaveBeenCalledTimes(1);
88
+ expect(onUnlink).toHaveBeenCalledWith('/path/test.wasm');
89
+ });
90
+ it('closes chokidar watcher on close()', async () => {
91
+ const callbacks = { onAdd: vi.fn(), onChange: vi.fn(), onUnlink: vi.fn() };
92
+ watcher.watch('./test/*.wasm', callbacks);
93
+ const mockWatcher = chokidarMock.default.watch.mock.results[0]
94
+ .value;
95
+ await watcher.close();
96
+ expect(mockWatcher.close).toHaveBeenCalled();
97
+ });
98
+ });
99
+ //# sourceMappingURL=file-watcher.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-watcher.test.js","sourceRoot":"","sources":["../../src/__tests__/file-watcher.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wasm-loader.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-loader.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/wasm-loader.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { WasmLoader } from '../manager/wasm-loader.js';
3
+ import * as fs from 'node:fs/promises';
4
+ vi.mock('node:fs/promises', () => ({
5
+ readFile: vi.fn().mockResolvedValue(new Uint8Array([0, 97, 115, 109])),
6
+ }));
7
+ vi.mock('@extism/extism', () => ({
8
+ default: vi.fn().mockImplementation((source, _options) => {
9
+ return Promise.resolve({
10
+ call: vi.fn().mockResolvedValue({
11
+ text: () => JSON.stringify({ result: 'mock' }),
12
+ bytes: () => new Uint8Array(),
13
+ }),
14
+ close: vi.fn().mockResolvedValue(undefined),
15
+ source,
16
+ });
17
+ }),
18
+ }));
19
+ describe('WasmLoader', () => {
20
+ let loader;
21
+ beforeEach(() => {
22
+ loader = new WasmLoader();
23
+ vi.clearAllMocks();
24
+ });
25
+ afterEach(() => {
26
+ vi.resetModules();
27
+ });
28
+ it('throws if not initialized', async () => {
29
+ await expect(loader.load('./test.wasm', false)).rejects.toThrow('WasmLoader not initialized');
30
+ });
31
+ it('initializes extism on first call', async () => {
32
+ await loader.initialize();
33
+ await loader.initialize();
34
+ const extism = await import('@extism/extism');
35
+ expect(extism.default).toBeDefined();
36
+ });
37
+ it('loads a local WASM file', async () => {
38
+ await loader.initialize();
39
+ const plugin = await loader.load('./test.wasm', false);
40
+ expect(fs.readFile).toHaveBeenCalled();
41
+ expect(plugin).toBeDefined();
42
+ expect(plugin.call).toBeDefined();
43
+ });
44
+ it('loads from URL without reading file', async () => {
45
+ await loader.initialize();
46
+ const plugin = await loader.load('https://example.com/test.wasm', false);
47
+ expect(fs.readFile).not.toHaveBeenCalled();
48
+ expect(plugin).toBeDefined();
49
+ expect(plugin.source).toEqual({
50
+ url: 'https://example.com/test.wasm',
51
+ });
52
+ });
53
+ it('resolves relative paths to absolute', async () => {
54
+ await loader.initialize();
55
+ await loader.load('./plugins/test.wasm', false);
56
+ const readFileMock = fs.readFile;
57
+ const calledPath = readFileMock.mock.calls[0][0];
58
+ expect(calledPath).toMatch(/\/plugins\/test\.wasm$/);
59
+ expect(calledPath.startsWith('/')).toBe(true);
60
+ });
61
+ it('passes useWasi option to extism', async () => {
62
+ await loader.initialize();
63
+ await loader.load('./test.wasm', true);
64
+ const extism = await import('@extism/extism');
65
+ const createPlugin = extism.default;
66
+ expect(createPlugin).toHaveBeenCalledWith(expect.any(Object), expect.objectContaining({ useWasi: true }));
67
+ });
68
+ });
69
+ //# sourceMappingURL=wasm-loader.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-loader.test.js","sourceRoot":"","sources":["../../src/__tests__/wasm-loader.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wasm-tool-manager.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-tool-manager.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/wasm-tool-manager.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,171 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { WasmToolManager } from '../manager/wasm-tool-manager.js';
3
+ vi.mock('../manager/wasm-loader.js', () => ({
4
+ WasmLoader: vi.fn().mockImplementation(() => ({
5
+ initialize: vi.fn().mockResolvedValue(undefined),
6
+ load: vi.fn().mockImplementation((path) => {
7
+ return Promise.resolve({
8
+ call: vi.fn().mockResolvedValue({
9
+ text: () => JSON.stringify({ result: `executed-${path}` }),
10
+ bytes: () => new Uint8Array(),
11
+ }),
12
+ close: vi.fn().mockResolvedValue(undefined),
13
+ });
14
+ }),
15
+ })),
16
+ }));
17
+ vi.mock('../manager/file-watcher.js', () => ({
18
+ FileWatcher: vi.fn().mockImplementation(() => {
19
+ const instance = {
20
+ watch: vi.fn(),
21
+ close: vi.fn().mockResolvedValue(undefined),
22
+ _callbacks: null,
23
+ };
24
+ instance.watch = vi.fn().mockImplementation((_pattern, callbacks) => {
25
+ instance._callbacks = callbacks;
26
+ });
27
+ return instance;
28
+ }),
29
+ }));
30
+ describe('WasmToolManager', () => {
31
+ let manager;
32
+ beforeEach(() => {
33
+ manager = new WasmToolManager({ debounceMs: 50 });
34
+ vi.clearAllMocks();
35
+ });
36
+ afterEach(async () => {
37
+ await manager.close();
38
+ });
39
+ describe('load()', () => {
40
+ it('loads a single WASM module', async () => {
41
+ const tool = await manager.load('./calc.wasm');
42
+ expect(tool.name).toBe('calc');
43
+ expect(tool.description).toBe('WASM tool: calc');
44
+ expect(tool.execute).toBeDefined();
45
+ });
46
+ it('returns the same tool for same path', async () => {
47
+ const tool1 = await manager.load('./calc.wasm');
48
+ const tool2 = await manager.load('./calc.wasm');
49
+ expect(tool1.name).toBe(tool2.name);
50
+ });
51
+ it('loads multiple different modules', async () => {
52
+ const calc = await manager.load('./calc.wasm');
53
+ const hash = await manager.load('./hash.wasm');
54
+ expect(calc.name).toBe('calc');
55
+ expect(hash.name).toBe('hash');
56
+ expect(manager.getTools()).toHaveLength(2);
57
+ });
58
+ });
59
+ describe('getTools()', () => {
60
+ it('returns empty array when no modules loaded', () => {
61
+ expect(manager.getTools()).toEqual([]);
62
+ });
63
+ it('returns all loaded tools', async () => {
64
+ await manager.load('./calc.wasm');
65
+ await manager.load('./hash.wasm');
66
+ const tools = manager.getTools();
67
+ expect(tools).toHaveLength(2);
68
+ expect(tools.map((t) => t.name).sort()).toEqual(['calc', 'hash']);
69
+ });
70
+ });
71
+ describe('getTool()', () => {
72
+ it('returns undefined for non-existent tool', () => {
73
+ expect(manager.getTool('nonexistent')).toBeUndefined();
74
+ });
75
+ it('returns the tool by name', async () => {
76
+ await manager.load('./calc.wasm');
77
+ const tool = manager.getTool('calc');
78
+ expect(tool?.name).toBe('calc');
79
+ });
80
+ });
81
+ describe('getModule()', () => {
82
+ it('returns module info with metadata', async () => {
83
+ await manager.load('./calc.wasm');
84
+ const mod = manager.getModule('calc');
85
+ expect(mod).toBeDefined();
86
+ expect(mod?.name).toBe('calc');
87
+ expect(mod?.path).toBe('./calc.wasm');
88
+ expect(mod?.loadedAt).toBeInstanceOf(Date);
89
+ expect(mod?.plugin).toBeDefined();
90
+ expect(mod?.tool).toBeDefined();
91
+ });
92
+ });
93
+ describe('watch()', () => {
94
+ it('starts watching for WASM files', async () => {
95
+ const callbacks = {
96
+ onLoad: vi.fn(),
97
+ onReload: vi.fn(),
98
+ onError: vi.fn(),
99
+ };
100
+ await manager.watch('./plugins/*.wasm', callbacks);
101
+ const { FileWatcher } = await import('../manager/file-watcher.js');
102
+ const watcherInstance = FileWatcher.mock.results[0].value;
103
+ expect(watcherInstance.watch).toHaveBeenCalledWith('./plugins/*.wasm', expect.any(Object));
104
+ });
105
+ it('throws if watch called twice', async () => {
106
+ await manager.watch('./plugins/*.wasm');
107
+ await expect(manager.watch('./other/*.wasm')).rejects.toThrow('Already watching');
108
+ });
109
+ it('calls onLoad when file is added', async () => {
110
+ const onLoad = vi.fn();
111
+ await manager.watch('./plugins/*.wasm', { onLoad });
112
+ const { FileWatcher } = await import('../manager/file-watcher.js');
113
+ const watcherInstance = FileWatcher.mock.results[0].value;
114
+ watcherInstance._callbacks?.onAdd('./plugins/calc.wasm');
115
+ await vi.waitFor(() => {
116
+ expect(onLoad).toHaveBeenCalledWith('calc', './plugins/calc.wasm');
117
+ });
118
+ });
119
+ it('calls onReload when file changes', async () => {
120
+ const onReload = vi.fn();
121
+ await manager.watch('./plugins/*.wasm', { onReload });
122
+ const { FileWatcher } = await import('../manager/file-watcher.js');
123
+ const watcherInstance = FileWatcher.mock.results[0].value;
124
+ watcherInstance._callbacks?.onAdd('./plugins/calc.wasm');
125
+ await vi.waitFor(() => {
126
+ expect(manager.getTool('calc')).toBeDefined();
127
+ });
128
+ watcherInstance._callbacks?.onChange('./plugins/calc.wasm');
129
+ await vi.waitFor(() => {
130
+ expect(onReload).toHaveBeenCalledWith('calc', './plugins/calc.wasm');
131
+ });
132
+ });
133
+ it('calls onUnload when file is deleted', async () => {
134
+ const onUnload = vi.fn();
135
+ await manager.watch('./plugins/*.wasm', { onUnload });
136
+ const { FileWatcher } = await import('../manager/file-watcher.js');
137
+ const watcherInstance = FileWatcher.mock.results[0].value;
138
+ await watcherInstance._callbacks?.onAdd('./plugins/calc.wasm');
139
+ await watcherInstance._callbacks?.onUnlink('./plugins/calc.wasm');
140
+ expect(onUnload).toHaveBeenCalledWith('calc', './plugins/calc.wasm');
141
+ expect(manager.getTool('calc')).toBeUndefined();
142
+ });
143
+ });
144
+ describe('tool execution', () => {
145
+ it('executes the tool and returns result', async () => {
146
+ const tool = await manager.load('./calc.wasm');
147
+ const result = await tool.execute({ expression: '2+2' }, { agentId: 'test', runId: 'run', signal: new AbortController().signal });
148
+ expect(result).toEqual({ result: 'executed-./calc.wasm' });
149
+ });
150
+ it('tool.toJSON() returns valid schema', async () => {
151
+ const tool = await manager.load('./calc.wasm');
152
+ const schema = tool.toJSON();
153
+ expect(schema.name).toBe('calc');
154
+ expect(schema.description).toBe('WASM tool: calc');
155
+ expect(schema.parameters.type).toBe('object');
156
+ });
157
+ });
158
+ describe('close()', () => {
159
+ it('closes watcher and all plugins', async () => {
160
+ await manager.load('./calc.wasm');
161
+ await manager.load('./hash.wasm');
162
+ await manager.watch('./plugins/*.wasm');
163
+ const { FileWatcher } = await import('../manager/file-watcher.js');
164
+ const watcherInstance = FileWatcher.mock.results[0].value;
165
+ await manager.close();
166
+ expect(watcherInstance.close).toHaveBeenCalled();
167
+ expect(manager.getTools()).toHaveLength(0);
168
+ });
169
+ });
170
+ });
171
+ //# sourceMappingURL=wasm-tool-manager.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-tool-manager.test.js","sourceRoot":"","sources":["../../src/__tests__/wasm-tool-manager.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -209,4 +209,5 @@ export type CalcToolInput = z.infer<typeof calcToolSchema>;
209
209
  export type JsonToolInput = z.infer<typeof jsonToolSchema>;
210
210
  export type HashToolInput = z.infer<typeof hashToolSchema>;
211
211
  export type Base64ToolInput = z.infer<typeof base64ToolSchema>;
212
+ export * from './manager/index.js';
212
213
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,CAAC,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAe,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAO1F;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO,GAAG,OAAO;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAuB/F;AAuBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,eAAO,MAAM,cAAc;;;;;;EAEzB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;EAGzB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;EAGzB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAY3F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAY3F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAW3F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAW/F;AAED,eAAO,MAAM,cAAc,EAAE,aAK5B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAK5B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAK5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,aAK9B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,CAAC,EAAE,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAe,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAO1F;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,OAAO,GAAG,OAAO;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAuB/F;AAuBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,eAAO,MAAM,cAAc;;;;;;EAEzB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;EAGzB,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;EAGzB,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAY3F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAY3F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAW3F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAW/F;AAED,eAAO,MAAM,cAAc,EAAE,aAK5B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAK5B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,aAK5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,aAK9B,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC3D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAC3D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE/D,cAAc,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -266,4 +266,5 @@ export const base64ToolConfig = {
266
266
  wasmFunction: 'base64',
267
267
  timeout: 5000,
268
268
  };
269
+ export * from './manager/index.js';
269
270
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { FileWatcherCallbacks } from './types.js';
2
+ export declare class FileWatcher {
3
+ private watcher;
4
+ private debounceTimers;
5
+ private debounceMs;
6
+ constructor(debounceMs?: number);
7
+ watch(pattern: string, callbacks: FileWatcherCallbacks): void;
8
+ private debounce;
9
+ private clearDebounce;
10
+ close(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=file-watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-watcher.d.ts","sourceRoot":"","sources":["../../src/manager/file-watcher.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIvD,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,cAAc,CAAqC;IAC3D,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,GAAE,MAA4B;IAIpD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,oBAAoB,GAAG,IAAI;IA4B7D,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,aAAa;IAQf,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAW7B"}
@@ -0,0 +1,59 @@
1
+ import chokidar from 'chokidar';
2
+ const DEFAULT_DEBOUNCE_MS = 100;
3
+ export class FileWatcher {
4
+ watcher = null;
5
+ debounceTimers = new Map();
6
+ debounceMs;
7
+ constructor(debounceMs = DEFAULT_DEBOUNCE_MS) {
8
+ this.debounceMs = debounceMs;
9
+ }
10
+ watch(pattern, callbacks) {
11
+ if (this.watcher) {
12
+ throw new Error('Watcher already started. Call close() first.');
13
+ }
14
+ this.watcher = chokidar.watch(pattern, {
15
+ persistent: true,
16
+ ignoreInitial: false,
17
+ awaitWriteFinish: {
18
+ stabilityThreshold: 100,
19
+ pollInterval: 50,
20
+ },
21
+ });
22
+ this.watcher.on('add', (path) => {
23
+ this.debounce(path, () => callbacks.onAdd(path));
24
+ });
25
+ this.watcher.on('change', (path) => {
26
+ this.debounce(path, () => callbacks.onChange(path));
27
+ });
28
+ this.watcher.on('unlink', (path) => {
29
+ this.clearDebounce(path);
30
+ callbacks.onUnlink(path);
31
+ });
32
+ }
33
+ debounce(path, fn) {
34
+ this.clearDebounce(path);
35
+ const timer = setTimeout(() => {
36
+ this.debounceTimers.delete(path);
37
+ fn();
38
+ }, this.debounceMs);
39
+ this.debounceTimers.set(path, timer);
40
+ }
41
+ clearDebounce(path) {
42
+ const existing = this.debounceTimers.get(path);
43
+ if (existing) {
44
+ clearTimeout(existing);
45
+ this.debounceTimers.delete(path);
46
+ }
47
+ }
48
+ async close() {
49
+ for (const timer of this.debounceTimers.values()) {
50
+ clearTimeout(timer);
51
+ }
52
+ this.debounceTimers.clear();
53
+ if (this.watcher) {
54
+ await this.watcher.close();
55
+ this.watcher = null;
56
+ }
57
+ }
58
+ }
59
+ //# sourceMappingURL=file-watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-watcher.js","sourceRoot":"","sources":["../../src/manager/file-watcher.ts"],"names":[],"mappings":"AAAA,OAAO,QAA4B,MAAM,UAAU,CAAC;AAGpD,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC,MAAM,OAAO,WAAW;IACd,OAAO,GAAqB,IAAI,CAAC;IACjC,cAAc,GAAG,IAAI,GAAG,EAA0B,CAAC;IACnD,UAAU,CAAS;IAE3B,YAAY,aAAqB,mBAAmB;QAClD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,SAA+B;QACpD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE;YACrC,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,KAAK;YACpB,gBAAgB,EAAE;gBAChB,kBAAkB,EAAE,GAAG;gBACvB,YAAY,EAAE,EAAE;aACjB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;YACjC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACzB,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CAAC,IAAY,EAAE,EAAc;QAC3C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACjC,EAAE,EAAE,CAAC;QACP,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACpB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACb,YAAY,CAAC,QAAQ,CAAC,CAAC;YACvB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { WasmToolManager } from './wasm-tool-manager.js';
2
+ export { WasmLoader } from './wasm-loader.js';
3
+ export { FileWatcher } from './file-watcher.js';
4
+ export type { WasmToolManagerOptions, WasmToolCallbacks, LoadedModule, ExtismPlugin, PluginOutput, WasmSource, CreatePluginFn, FileWatcherCallbacks, } from './types.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/manager/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EACV,sBAAsB,EACtB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { WasmToolManager } from './wasm-tool-manager.js';
2
+ export { WasmLoader } from './wasm-loader.js';
3
+ export { FileWatcher } from './file-watcher.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/manager/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { Tool } from '@cogitator-ai/types';
2
+ export interface ExtismPlugin {
3
+ call(functionName: string, input: string | Uint8Array): Promise<PluginOutput>;
4
+ close?(): Promise<void>;
5
+ }
6
+ export interface PluginOutput {
7
+ text(): string;
8
+ bytes(): Uint8Array;
9
+ }
10
+ export type WasmSource = {
11
+ wasm: Uint8Array;
12
+ } | {
13
+ url: string;
14
+ };
15
+ export type CreatePluginFn = (source: WasmSource, options: {
16
+ useWasi: boolean;
17
+ }) => Promise<ExtismPlugin>;
18
+ export interface WasmToolManagerOptions {
19
+ debounceMs?: number;
20
+ useWasi?: boolean;
21
+ }
22
+ export interface WasmToolCallbacks {
23
+ onLoad?: (name: string, path: string) => void;
24
+ onReload?: (name: string, path: string) => void;
25
+ onUnload?: (name: string, path: string) => void;
26
+ onError?: (name: string, path: string, error: Error) => void;
27
+ }
28
+ export interface LoadedModule {
29
+ name: string;
30
+ path: string;
31
+ plugin: ExtismPlugin;
32
+ tool: Tool<unknown, unknown>;
33
+ loadedAt: Date;
34
+ }
35
+ export interface FileWatcherCallbacks {
36
+ onAdd: (path: string) => void;
37
+ onChange: (path: string) => void;
38
+ onUnlink: (path: string) => void;
39
+ }
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/manager/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9E,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,MAAM,CAAC;IACf,KAAK,IAAI,UAAU,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,MAAM,MAAM,cAAc,GAAG,CAC3B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,KAC1B,OAAO,CAAC,YAAY,CAAC,CAAC;AAE3B,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAC9D;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7B,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/manager/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { ExtismPlugin } from './types.js';
2
+ export declare class WasmLoader {
3
+ private createPlugin?;
4
+ initialize(): Promise<void>;
5
+ load(wasmPath: string, useWasi: boolean): Promise<ExtismPlugin>;
6
+ private loadSource;
7
+ }
8
+ //# sourceMappingURL=wasm-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-loader.d.ts","sourceRoot":"","sources":["../../src/manager/wasm-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAkB,YAAY,EAAc,MAAM,YAAY,CAAC;AAE3E,qBAAa,UAAU;IACrB,OAAO,CAAC,YAAY,CAAC,CAAiB;IAEhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;YASvD,UAAU;CASzB"}
@@ -0,0 +1,27 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { isAbsolute, resolve } from 'node:path';
3
+ export class WasmLoader {
4
+ createPlugin;
5
+ async initialize() {
6
+ if (this.createPlugin)
7
+ return;
8
+ const extism = await import('@extism/extism');
9
+ this.createPlugin = extism.default;
10
+ }
11
+ async load(wasmPath, useWasi) {
12
+ if (!this.createPlugin) {
13
+ throw new Error('WasmLoader not initialized. Call initialize() first.');
14
+ }
15
+ const source = await this.loadSource(wasmPath);
16
+ return this.createPlugin(source, { useWasi });
17
+ }
18
+ async loadSource(wasmPath) {
19
+ if (wasmPath.startsWith('http://') || wasmPath.startsWith('https://')) {
20
+ return { url: wasmPath };
21
+ }
22
+ const absolutePath = isAbsolute(wasmPath) ? wasmPath : resolve(process.cwd(), wasmPath);
23
+ const wasm = await readFile(absolutePath);
24
+ return { wasm };
25
+ }
26
+ }
27
+ //# sourceMappingURL=wasm-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-loader.js","sourceRoot":"","sources":["../../src/manager/wasm-loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGhD,MAAM,OAAO,UAAU;IACb,YAAY,CAAkB;IAEtC,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO;QAC9B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,OAAoC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,OAAgB;QAC3C,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAAgB;QACvC,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACtE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;QAC3B,CAAC;QAED,MAAM,YAAY,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QACxF,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,CAAC;IAClB,CAAC;CACF"}
@@ -0,0 +1,26 @@
1
+ import type { Tool } from '@cogitator-ai/types';
2
+ import type { LoadedModule, WasmToolCallbacks, WasmToolManagerOptions } from './types.js';
3
+ export declare class WasmToolManager {
4
+ private loader;
5
+ private watcher;
6
+ private modules;
7
+ private initialized;
8
+ private callbacks;
9
+ private options;
10
+ constructor(options?: WasmToolManagerOptions);
11
+ watch(pattern: string, callbacks?: WasmToolCallbacks): Promise<void>;
12
+ load(wasmPath: string): Promise<Tool<unknown, unknown>>;
13
+ getTools(): Tool<unknown, unknown>[];
14
+ getTool(name: string): Tool<unknown, unknown> | undefined;
15
+ getModule(name: string): LoadedModule | undefined;
16
+ getModules(): LoadedModule[];
17
+ close(): Promise<void>;
18
+ private ensureInitialized;
19
+ private handleAdd;
20
+ private handleReload;
21
+ private handleUnlink;
22
+ private loadModule;
23
+ private createProxyTool;
24
+ private getModuleName;
25
+ }
26
+ //# sourceMappingURL=wasm-tool-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-tool-manager.d.ts","sourceRoot":"","sources":["../../src/manager/wasm-tool-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAA2B,MAAM,qBAAqB,CAAC;AAIzE,OAAO,KAAK,EAEV,YAAY,EACZ,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAIpB,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,OAAO,CAAmC;gBAEtC,OAAO,GAAE,sBAA2B;IAO1C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBpE,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAK7D,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE;IAIpC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS;IAIzD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIjD,UAAU,IAAI,YAAY,EAAE;IAItB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAYd,iBAAiB;YAOjB,SAAS;YAUT,YAAY;YAcZ,YAAY;YAUZ,UAAU;IAgBxB,OAAO,CAAC,eAAe;IAyCvB,OAAO,CAAC,aAAa;CAGtB"}
@@ -0,0 +1,154 @@
1
+ import { basename } from 'node:path';
2
+ import { z } from 'zod';
3
+ import { zodToJsonSchema } from 'zod-to-json-schema';
4
+ import { FileWatcher } from './file-watcher.js';
5
+ import { WasmLoader } from './wasm-loader.js';
6
+ const DEFAULT_DEBOUNCE_MS = 100;
7
+ export class WasmToolManager {
8
+ loader = new WasmLoader();
9
+ watcher = null;
10
+ modules = new Map();
11
+ initialized = false;
12
+ callbacks = {};
13
+ options;
14
+ constructor(options = {}) {
15
+ this.options = {
16
+ debounceMs: options.debounceMs ?? DEFAULT_DEBOUNCE_MS,
17
+ useWasi: options.useWasi ?? false,
18
+ };
19
+ }
20
+ async watch(pattern, callbacks) {
21
+ await this.ensureInitialized();
22
+ if (this.watcher) {
23
+ throw new Error('Already watching. Call close() first.');
24
+ }
25
+ this.callbacks = callbacks ?? {};
26
+ this.watcher = new FileWatcher(this.options.debounceMs);
27
+ this.watcher.watch(pattern, {
28
+ onAdd: (path) => void this.handleAdd(path),
29
+ onChange: (path) => void this.handleReload(path),
30
+ onUnlink: (path) => void this.handleUnlink(path),
31
+ });
32
+ }
33
+ async load(wasmPath) {
34
+ await this.ensureInitialized();
35
+ return this.loadModule(wasmPath);
36
+ }
37
+ getTools() {
38
+ return Array.from(this.modules.values()).map((m) => m.tool);
39
+ }
40
+ getTool(name) {
41
+ return this.modules.get(name)?.tool;
42
+ }
43
+ getModule(name) {
44
+ return this.modules.get(name);
45
+ }
46
+ getModules() {
47
+ return Array.from(this.modules.values());
48
+ }
49
+ async close() {
50
+ if (this.watcher) {
51
+ await this.watcher.close();
52
+ this.watcher = null;
53
+ }
54
+ for (const mod of this.modules.values()) {
55
+ await mod.plugin.close?.();
56
+ }
57
+ this.modules.clear();
58
+ }
59
+ async ensureInitialized() {
60
+ if (!this.initialized) {
61
+ await this.loader.initialize();
62
+ this.initialized = true;
63
+ }
64
+ }
65
+ async handleAdd(wasmPath) {
66
+ const name = this.getModuleName(wasmPath);
67
+ try {
68
+ await this.loadModule(wasmPath);
69
+ this.callbacks.onLoad?.(name, wasmPath);
70
+ }
71
+ catch (error) {
72
+ this.callbacks.onError?.(name, wasmPath, error);
73
+ }
74
+ }
75
+ async handleReload(wasmPath) {
76
+ const name = this.getModuleName(wasmPath);
77
+ try {
78
+ const existing = this.modules.get(name);
79
+ if (existing) {
80
+ await existing.plugin.close?.();
81
+ }
82
+ await this.loadModule(wasmPath);
83
+ this.callbacks.onReload?.(name, wasmPath);
84
+ }
85
+ catch (error) {
86
+ this.callbacks.onError?.(name, wasmPath, error);
87
+ }
88
+ }
89
+ async handleUnlink(wasmPath) {
90
+ const name = this.getModuleName(wasmPath);
91
+ const existing = this.modules.get(name);
92
+ if (existing) {
93
+ await existing.plugin.close?.();
94
+ this.modules.delete(name);
95
+ this.callbacks.onUnload?.(name, wasmPath);
96
+ }
97
+ }
98
+ async loadModule(wasmPath) {
99
+ const name = this.getModuleName(wasmPath);
100
+ const plugin = await this.loader.load(wasmPath, this.options.useWasi);
101
+ const tool = this.createProxyTool(name, plugin);
102
+ this.modules.set(name, {
103
+ name,
104
+ path: wasmPath,
105
+ plugin,
106
+ tool,
107
+ loadedAt: new Date(),
108
+ });
109
+ return tool;
110
+ }
111
+ createProxyTool(name, _plugin) {
112
+ const parameters = z.record(z.unknown());
113
+ const tool = {
114
+ name,
115
+ description: `WASM tool: ${name}`,
116
+ parameters,
117
+ execute: async (params, _context) => {
118
+ const mod = this.modules.get(name);
119
+ if (!mod) {
120
+ throw new Error(`Module ${name} not loaded`);
121
+ }
122
+ const input = JSON.stringify(params);
123
+ const output = await mod.plugin.call('run', input);
124
+ try {
125
+ return JSON.parse(output.text());
126
+ }
127
+ catch {
128
+ return output.text();
129
+ }
130
+ },
131
+ toJSON: () => {
132
+ const jsonSchema = zodToJsonSchema(parameters, {
133
+ target: 'openApi3',
134
+ $refStrategy: 'none',
135
+ });
136
+ const schema = jsonSchema;
137
+ return {
138
+ name,
139
+ description: `WASM tool: ${name}`,
140
+ parameters: {
141
+ type: 'object',
142
+ properties: (schema.properties ?? {}),
143
+ required: schema.required,
144
+ },
145
+ };
146
+ },
147
+ };
148
+ return tool;
149
+ }
150
+ getModuleName(wasmPath) {
151
+ return basename(wasmPath, '.wasm');
152
+ }
153
+ }
154
+ //# sourceMappingURL=wasm-tool-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wasm-tool-manager.js","sourceRoot":"","sources":["../../src/manager/wasm-tool-manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../src/plugins/base64.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAqFH,wBAAgB,MAAM,IAAI,MAAM,CA6B/B"}
1
+ {"version":3,"file":"base64.d.ts","sourceRoot":"","sources":["../../src/plugins/base64.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoFH,wBAAgB,MAAM,IAAI,MAAM,CA6B/B"}
@@ -49,8 +49,7 @@ function decodeBase64(input, urlSafe) {
49
49
  let result = '';
50
50
  let buffer = 0;
51
51
  let bits = 0;
52
- for (let i = 0; i < normalized.length; i++) {
53
- const char = normalized[i];
52
+ for (const char of normalized) {
54
53
  const value = lookup[char];
55
54
  if (value === undefined) {
56
55
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/plugins/base64.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../../src/plugins/base64.ts"],"names":[],"mappings":"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"}
@@ -59,8 +59,7 @@ function decodeBase64(input, urlSafe) {
59
59
  let result = "";
60
60
  let buffer = 0;
61
61
  let bits = 0;
62
- for (let i = 0; i < normalized.length; i++) {
63
- const char = normalized[i];
62
+ for (const char of normalized) {
64
63
  const value = lookup[char];
65
64
  if (value === void 0) {
66
65
  continue;
Binary file
Binary file
Binary file
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cogitator-ai/wasm-tools",
3
- "version": "0.3.7",
3
+ "version": "0.4.1",
4
4
  "description": "WASM-based tools for Cogitator agents",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -16,14 +16,17 @@
16
16
  "dist"
17
17
  ],
18
18
  "dependencies": {
19
+ "chokidar": "^5.0.0",
19
20
  "zod": "^3.22.0",
20
21
  "zod-to-json-schema": "^3.22.0",
21
- "@cogitator-ai/types": "0.16.0"
22
+ "@cogitator-ai/types": "0.17.0"
22
23
  },
23
24
  "devDependencies": {
25
+ "@extism/extism": "^1.0.3",
24
26
  "@extism/js-pdk": "^1.0.0",
25
27
  "esbuild": "^0.27.2",
26
- "typescript": "^5.3.0"
28
+ "typescript": "^5.3.0",
29
+ "vitest": "^3.1.3"
27
30
  },
28
31
  "repository": {
29
32
  "type": "git",
@@ -39,6 +42,8 @@
39
42
  "build:wasm": "node scripts/build-wasm.js",
40
43
  "dev": "tsc --watch",
41
44
  "clean": "rm -rf dist",
42
- "typecheck": "tsc --noEmit"
45
+ "typecheck": "tsc --noEmit",
46
+ "test": "vitest run",
47
+ "test:watch": "vitest"
43
48
  }
44
49
  }