@tonk/cli 0.2.4 → 0.2.6

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 (35) hide show
  1. package/dist/commands/worker/commands.d.ts +42 -0
  2. package/dist/commands/worker/commands.d.ts.map +1 -0
  3. package/dist/commands/worker/commands.js +580 -0
  4. package/dist/commands/worker/commands.js.map +1 -0
  5. package/dist/commands/worker/index.d.ts +7 -0
  6. package/dist/commands/worker/index.d.ts.map +1 -0
  7. package/dist/commands/worker/index.js +28 -0
  8. package/dist/commands/worker/index.js.map +1 -0
  9. package/dist/commands/worker/utils/config.d.ts +26 -0
  10. package/dist/commands/worker/utils/config.d.ts.map +1 -0
  11. package/dist/commands/worker/utils/config.js +197 -0
  12. package/dist/commands/worker/utils/config.js.map +1 -0
  13. package/dist/commands/worker/utils/display.d.ts +6 -0
  14. package/dist/commands/worker/utils/display.d.ts.map +1 -0
  15. package/dist/commands/worker/utils/display.js +32 -0
  16. package/dist/commands/worker/utils/display.js.map +1 -0
  17. package/dist/commands/worker/utils/finder.d.ts +12 -0
  18. package/dist/commands/worker/utils/finder.d.ts.map +1 -0
  19. package/dist/commands/worker/utils/finder.js +60 -0
  20. package/dist/commands/worker/utils/finder.js.map +1 -0
  21. package/dist/lib/workerManager.d.ts +60 -0
  22. package/dist/lib/workerManager.d.ts.map +1 -0
  23. package/dist/lib/workerManager.js +426 -0
  24. package/dist/lib/workerManager.js.map +1 -0
  25. package/dist/tonk.js +2 -0
  26. package/dist/tonk.js.map +1 -1
  27. package/dist/types/worker.d.ts +102 -0
  28. package/dist/types/worker.d.ts.map +1 -0
  29. package/dist/types/worker.js +7 -0
  30. package/dist/types/worker.js.map +1 -0
  31. package/dist/types/workerConfig.d.ts +164 -0
  32. package/dist/types/workerConfig.d.ts.map +1 -0
  33. package/dist/types/workerConfig.js +80 -0
  34. package/dist/types/workerConfig.js.map +1 -0
  35. package/package.json +3 -2
@@ -0,0 +1,426 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import envPaths from 'env-paths';
4
+ import http from 'node:http';
5
+ import https from 'node:https';
6
+ import { exec } from 'node:child_process';
7
+ import { promisify } from 'node:util';
8
+ /**
9
+ * Implementation of the WorkerManager interface
10
+ */
11
+ export class TonkWorkerManager {
12
+ workersPath;
13
+ constructor() {
14
+ // Create paths for Tonk daemon home
15
+ const paths = envPaths('tonk', { suffix: '' });
16
+ const tonkHome = paths.data;
17
+ this.workersPath = path.join(tonkHome, 'workers');
18
+ // Ensure workers directory exists
19
+ if (!fs.existsSync(this.workersPath)) {
20
+ fs.mkdirSync(this.workersPath, { recursive: true });
21
+ }
22
+ }
23
+ /**
24
+ * Register a new worker
25
+ */
26
+ async register(options) {
27
+ // Generate a unique ID for the worker
28
+ const workerId = this.generateWorkerId(options.name);
29
+ // Parse environment variables
30
+ const env = {};
31
+ if (options.env && Array.isArray(options.env)) {
32
+ options.env.forEach((envVar) => {
33
+ const [key, value] = envVar.split('=');
34
+ if (key && value) {
35
+ env[key] = value;
36
+ }
37
+ });
38
+ }
39
+ let workerConfig = {
40
+ ...(options.config && typeof options.config === 'object'
41
+ ? options.config
42
+ : {}),
43
+ type: options.type || 'custom',
44
+ };
45
+ // Create worker object
46
+ const worker = {
47
+ id: workerId,
48
+ name: options.name,
49
+ description: options.description || '',
50
+ endpoint: options.endpoint,
51
+ protocol: options.protocol || 'http',
52
+ status: {
53
+ active: false,
54
+ lastSeen: null,
55
+ },
56
+ env,
57
+ config: workerConfig,
58
+ createdAt: Date.now(),
59
+ updatedAt: Date.now(),
60
+ };
61
+ // Save worker to file
62
+ const workerFilePath = path.join(this.workersPath, `${workerId}.json`);
63
+ fs.writeFileSync(workerFilePath, JSON.stringify(worker, null, 2));
64
+ return worker;
65
+ }
66
+ /**
67
+ * Register a worker from a YAML configuration file
68
+ */
69
+ async registerFromYamlConfig(yamlConfig) {
70
+ // Generate a unique ID for the worker
71
+ const workerId = this.generateWorkerId(yamlConfig.name);
72
+ // Create worker object from YAML config
73
+ const worker = {
74
+ id: workerId,
75
+ name: yamlConfig.name,
76
+ description: yamlConfig.description || '',
77
+ endpoint: yamlConfig.endpoint,
78
+ protocol: yamlConfig.protocol || 'http',
79
+ status: {
80
+ active: false,
81
+ lastSeen: null,
82
+ },
83
+ env: yamlConfig.process?.env || {},
84
+ config: {
85
+ type: yamlConfig.type || 'custom',
86
+ version: yamlConfig.version,
87
+ healthCheck: yamlConfig.healthCheck,
88
+ process: yamlConfig.process,
89
+ ...yamlConfig.config,
90
+ },
91
+ createdAt: Date.now(),
92
+ updatedAt: Date.now(),
93
+ };
94
+ // Save worker to file
95
+ const workerFilePath = path.join(this.workersPath, `${workerId}.json`);
96
+ fs.writeFileSync(workerFilePath, JSON.stringify(worker, null, 2));
97
+ return worker;
98
+ }
99
+ /**
100
+ * Get a worker by ID
101
+ */
102
+ async get(id) {
103
+ const workerFilePath = path.join(this.workersPath, `${id}.json`);
104
+ if (!fs.existsSync(workerFilePath)) {
105
+ return null;
106
+ }
107
+ const fileContent = fs.readFileSync(workerFilePath, 'utf-8');
108
+ return JSON.parse(fileContent);
109
+ }
110
+ /**
111
+ * Find a worker by name or ID
112
+ * If the identifier matches an ID exactly, returns that worker
113
+ * Otherwise, searches for a worker with a matching name
114
+ */
115
+ async findByNameOrId(identifier) {
116
+ // First try to get by ID (exact match)
117
+ const workerById = await this.get(identifier);
118
+ if (workerById) {
119
+ return workerById;
120
+ }
121
+ // If not found by ID, try to find by name
122
+ const workers = await this.list();
123
+ const matchingWorker = workers.find(worker => worker.name.toLowerCase() === identifier.toLowerCase());
124
+ return matchingWorker || null;
125
+ }
126
+ /**
127
+ * List all registered workers
128
+ */
129
+ async list() {
130
+ const workerFiles = fs
131
+ .readdirSync(this.workersPath)
132
+ .filter(file => file.endsWith('.json'));
133
+ if (workerFiles.length === 0) {
134
+ return [];
135
+ }
136
+ return workerFiles.map(file => {
137
+ const filePath = path.join(this.workersPath, file);
138
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
139
+ return JSON.parse(fileContent);
140
+ });
141
+ }
142
+ /**
143
+ * Update a worker
144
+ */
145
+ async update(id, updates) {
146
+ const worker = await this.get(id);
147
+ if (!worker) {
148
+ throw new Error(`Worker with ID '${id}' not found.`);
149
+ }
150
+ // Update worker properties
151
+ const updatedWorker = {
152
+ ...worker,
153
+ ...updates,
154
+ updatedAt: Date.now(),
155
+ };
156
+ // Save updated worker
157
+ const workerFilePath = path.join(this.workersPath, `${id}.json`);
158
+ fs.writeFileSync(workerFilePath, JSON.stringify(updatedWorker, null, 2));
159
+ return updatedWorker;
160
+ }
161
+ /**
162
+ * Remove a worker
163
+ */
164
+ async remove(id) {
165
+ const workerFilePath = path.join(this.workersPath, `${id}.json`);
166
+ if (!fs.existsSync(workerFilePath)) {
167
+ return false;
168
+ }
169
+ // Get worker details before removing
170
+ const worker = await this.get(id);
171
+ if (!worker) {
172
+ return false;
173
+ }
174
+ // Try to stop and delete from PM2 if it's running
175
+ const execAsync = promisify(exec);
176
+ try {
177
+ // Check if worker is running in PM2
178
+ const { stdout } = await execAsync('pm2 list');
179
+ if (stdout.includes(`${worker.id}`)) {
180
+ // Stop the worker with PM2 first
181
+ await execAsync(`pm2 stop ${worker.id}`);
182
+ // Then delete it from PM2
183
+ await execAsync(`pm2 delete ${worker.id}`);
184
+ console.log(`Worker '${worker.name}' stopped and removed from PM2.`);
185
+ }
186
+ }
187
+ catch (error) {
188
+ console.error(`Error stopping worker in PM2:`, error);
189
+ // Continue with removal even if PM2 operations fail
190
+ }
191
+ // Remove worker file
192
+ fs.unlinkSync(workerFilePath);
193
+ return true;
194
+ }
195
+ /**
196
+ * Start a worker
197
+ * @param id Worker ID to start
198
+ */
199
+ async start(id) {
200
+ const worker = await this.get(id);
201
+ if (!worker) {
202
+ throw new Error(`Worker with ID '${id}' not found.`);
203
+ }
204
+ const execAsync = promisify(exec);
205
+ try {
206
+ // Check if worker is already running in PM2
207
+ const { stdout } = await execAsync('pm2 list');
208
+ if (stdout.includes(`${worker.id}`)) {
209
+ console.log(`Worker '${worker.name}' is already running. Restarting...`);
210
+ await execAsync(`pm2 restart ${worker.id}`);
211
+ }
212
+ else {
213
+ // Prepare environment variables
214
+ const envVars = Object.entries(worker.env)
215
+ .map(([key, value]) => `${key}=${value}`)
216
+ .join(' ');
217
+ // Ensure log directory exists
218
+ const logDir = envPaths('tonk', { suffix: '' }).log;
219
+ if (!fs.existsSync(logDir)) {
220
+ fs.mkdirSync(logDir, { recursive: true });
221
+ }
222
+ // Add log configuration
223
+ const logConfig = `--log ${path.join(logDir, `${worker.id}.log`)}`;
224
+ const errorLogConfig = `--error ${path.join(logDir, `${worker.id}-error.log`)}`;
225
+ // Handle different worker types
226
+ if (worker.config.type === 'npm') {
227
+ // For npm-based workers, we need to find the entry point
228
+ const packageName = worker.name;
229
+ try {
230
+ // Get the package's bin entry point
231
+ const { stdout: binInfo } = await execAsync(`npm bin -g`);
232
+ const binPath = binInfo.trim();
233
+ const executablePath = path.join(binPath, packageName);
234
+ // Check if the executable exists
235
+ if (fs.existsSync(executablePath)) {
236
+ // Start the npm package with PM2
237
+ const startCmd = `${envVars} pm2 start ${executablePath} --name ${worker.id} ${logConfig} ${errorLogConfig}`;
238
+ await execAsync(startCmd);
239
+ }
240
+ else {
241
+ // Try to find the main entry point
242
+ const { stdout: packageInfo } = await execAsync(`npm list -g ${packageName} --json`);
243
+ const packageData = JSON.parse(packageInfo);
244
+ if (packageData.dependencies &&
245
+ packageData.dependencies[packageName]) {
246
+ const packagePath = packageData.dependencies[packageName].path;
247
+ const packageJsonPath = path.join(packagePath, 'package.json');
248
+ if (fs.existsSync(packageJsonPath)) {
249
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
250
+ const mainScript = packageJson.main || 'index.js';
251
+ const scriptPath = path.join(packagePath, mainScript);
252
+ // Start the npm package with PM2
253
+ const startCmd = `cd ${packagePath} && ${envVars} pm2 start ${scriptPath} --name ${worker.id} ${logConfig} ${errorLogConfig}`;
254
+ await execAsync(startCmd);
255
+ }
256
+ else {
257
+ throw new Error(`Could not find package.json for ${packageName}`);
258
+ }
259
+ }
260
+ else {
261
+ throw new Error(`Could not find installed package ${packageName}`);
262
+ }
263
+ }
264
+ }
265
+ catch (error) {
266
+ console.error(`Error starting npm worker:`, error);
267
+ throw error;
268
+ }
269
+ }
270
+ else {
271
+ // For traditional workers with process configuration
272
+ if (!worker.config.process || !worker.config.process.file) {
273
+ throw new Error(`Worker '${worker.name}' does not have a valid process configuration.`);
274
+ }
275
+ // Start the worker with PM2
276
+ const cwd = worker.config.process.cwd || '.';
277
+ const instances = worker.config.process.instances || 1;
278
+ const watch = worker.config.process.watch ? '--watch' : '';
279
+ const maxMemory = worker.config.process.max_memory_restart
280
+ ? `--max-memory-restart ${worker.config.process.max_memory_restart}`
281
+ : '';
282
+ // Prepare the command to start the worker
283
+ let startCmd = '';
284
+ // Ensure we have a valid file path
285
+ if (!worker.config.process.file ||
286
+ worker.config.process.file.trim() === '') {
287
+ throw new Error(`Worker '${worker.name}' has an empty file path.`);
288
+ }
289
+ const filePath = worker.config.process.file;
290
+ const args = worker.config.process.args || '';
291
+ // Check if the file path is relative or absolute
292
+ const absoluteFilePath = path.join(cwd, filePath);
293
+ // Make the file executable if it exists
294
+ if (fs.existsSync(absoluteFilePath)) {
295
+ // First make the file executable, then start it with PM2
296
+ startCmd = `cd ${cwd} && chmod +x "${filePath}" && ${envVars} pm2 start "./${filePath} ${args ? args : ''}" --name ${worker.id} --instances ${instances} ${watch} ${maxMemory} ${logConfig} ${errorLogConfig}`;
297
+ }
298
+ await execAsync(startCmd);
299
+ }
300
+ }
301
+ // Update worker status
302
+ await this.update(id, {
303
+ status: {
304
+ active: true,
305
+ lastSeen: Date.now(),
306
+ },
307
+ });
308
+ return true;
309
+ }
310
+ catch (error) {
311
+ console.error(`Error starting worker '${worker.name}':`, error);
312
+ // Log detailed error information
313
+ if (error instanceof Error) {
314
+ console.error(`Error message: ${error.message}`);
315
+ console.error(`Stack trace: ${error.stack}`);
316
+ }
317
+ return false;
318
+ }
319
+ }
320
+ /**
321
+ * Stop a worker
322
+ */
323
+ async stop(id) {
324
+ const worker = await this.get(id);
325
+ if (!worker) {
326
+ throw new Error(`Worker with ID '${id}' not found.`);
327
+ }
328
+ const execAsync = promisify(exec);
329
+ try {
330
+ console.log(`Stopping worker '${worker.name}'...`);
331
+ // Check if worker is running in PM2
332
+ const { stdout } = await execAsync('pm2 list');
333
+ if (stdout.includes(`${worker.id}`)) {
334
+ // Stop the worker with PM2
335
+ await execAsync(`pm2 stop ${worker.id}`);
336
+ }
337
+ else {
338
+ console.log(`Worker '${worker.name}' is not running.`);
339
+ }
340
+ // Update worker status
341
+ await this.update(id, {
342
+ status: {
343
+ active: false,
344
+ lastSeen: worker.status.lastSeen,
345
+ },
346
+ });
347
+ return true;
348
+ }
349
+ catch (error) {
350
+ console.error(`Error stopping worker:`, error);
351
+ return false;
352
+ }
353
+ }
354
+ /**
355
+ * Check worker health
356
+ */
357
+ async checkHealth(id) {
358
+ const worker = await this.get(id);
359
+ if (!worker) {
360
+ throw new Error(`Worker with ID '${id}' not found.`);
361
+ }
362
+ // If no health check configured, just ping the endpoint
363
+ const healthCheckEndpoint = worker.config.healthCheck?.endpoint || worker.endpoint;
364
+ const healthCheckTimeout = worker.config.healthCheck?.timeout || 5000;
365
+ try {
366
+ // Perform health check based on protocol
367
+ if (worker.protocol === 'http' || worker.protocol === 'https') {
368
+ const isHealthy = await this.httpHealthCheck(healthCheckEndpoint, worker.protocol, healthCheckTimeout);
369
+ // Update worker status
370
+ await this.update(id, {
371
+ status: {
372
+ active: isHealthy,
373
+ lastSeen: isHealthy ? Date.now() : worker.status.lastSeen,
374
+ },
375
+ });
376
+ return isHealthy;
377
+ }
378
+ // For other protocols, we'll need to implement specific health checks
379
+ // For now, just return false for unsupported protocols
380
+ console.log(`Health check for protocol '${worker.protocol}' not implemented.`);
381
+ return false;
382
+ }
383
+ catch (error) {
384
+ console.error(`Error checking worker health:`, error);
385
+ // Update worker status to inactive
386
+ await this.update(id, {
387
+ status: {
388
+ active: false,
389
+ lastSeen: worker.status.lastSeen,
390
+ },
391
+ });
392
+ return false;
393
+ }
394
+ }
395
+ /**
396
+ * Generate a worker ID
397
+ */
398
+ generateWorkerId(name) {
399
+ const normalizedName = name.toLowerCase().replace(/[^a-z0-9]/g, '-');
400
+ const timestamp = Date.now().toString(36);
401
+ return `${normalizedName}-${timestamp}`;
402
+ }
403
+ /**
404
+ * Perform HTTP health check
405
+ */
406
+ httpHealthCheck(endpoint, protocol, timeout) {
407
+ return new Promise(resolve => {
408
+ const client = protocol === 'https' ? https : http;
409
+ const req = client.get(endpoint, res => {
410
+ // Consider 2xx status codes as healthy
411
+ const isHealthy = res.statusCode !== undefined &&
412
+ res.statusCode >= 200 &&
413
+ res.statusCode < 300;
414
+ resolve(isHealthy);
415
+ });
416
+ req.on('error', () => {
417
+ resolve(false);
418
+ });
419
+ req.setTimeout(timeout, () => {
420
+ req.destroy();
421
+ resolve(false);
422
+ });
423
+ });
424
+ }
425
+ }
426
+ //# sourceMappingURL=workerManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workerManager.js","sourceRoot":"","sources":["../../src/lib/workerManager.ts"],"names":[],"mappings":"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"}
package/dist/tonk.js CHANGED
@@ -7,6 +7,7 @@ import { startCommand } from './commands/start.js';
7
7
  import { killCommand } from './commands/kill.js';
8
8
  import { pushCommand } from './commands/push.js';
9
9
  import { proxyCommand } from './commands/proxy.js';
10
+ import { workerCommand } from './commands/worker/index.js';
10
11
  import { createServer } from '@tonk/server';
11
12
  import chalk from 'chalk';
12
13
  import envPaths from 'env-paths';
@@ -31,6 +32,7 @@ program.addCommand(psCommand);
31
32
  program.addCommand(lsCommand);
32
33
  program.addCommand(killCommand);
33
34
  program.addCommand(proxyCommand);
35
+ program.addCommand(workerCommand);
34
36
  const startServer = async () => {
35
37
  try {
36
38
  // Create paths for Tonk daemon home
package/dist/tonk.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tonk.js","sourceRoot":"","sources":["../src/tonk.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tonk.js","sourceRoot":"","sources":["../src/tonk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Worker specification for Tonk
3
+ *
4
+ * This file defines the standard format for worker definitions in Tonk.
5
+ */
6
+ /**
7
+ * Worker status information
8
+ */
9
+ export interface WorkerStatus {
10
+ /** Whether the worker is currently active */
11
+ active: boolean;
12
+ /** Timestamp of when the worker was last seen (null if never) */
13
+ lastSeen: number | null;
14
+ }
15
+ /**
16
+ * Worker health check configuration
17
+ */
18
+ export interface WorkerHealthCheck {
19
+ /** Endpoint to ping for health check */
20
+ endpoint: string;
21
+ /** Method to use for health check (GET, POST, etc.) */
22
+ method: string;
23
+ /** Interval in milliseconds between health checks */
24
+ interval: number;
25
+ /** Timeout in milliseconds for health check */
26
+ timeout: number;
27
+ }
28
+ /**
29
+ * Worker definition
30
+ */
31
+ export interface Worker {
32
+ /** Unique identifier for the worker */
33
+ id: string;
34
+ /** Human-readable name of the worker */
35
+ name: string;
36
+ /** Description of the worker's purpose */
37
+ description: string;
38
+ /** Endpoint URL/path where the worker can be reached */
39
+ endpoint: string;
40
+ /** Protocol used by the worker (http, ws, tcp, etc.) */
41
+ protocol: string;
42
+ /** Current status of the worker */
43
+ status: WorkerStatus;
44
+ /** Environment variables required by the worker */
45
+ env: Record<string, string>;
46
+ /** Additional configuration options for the worker */
47
+ config: {
48
+ /** Optional health check configuration */
49
+ healthCheck?: WorkerHealthCheck;
50
+ /** Optional worker type (e.g., "obsidian", "rag", "custom") */
51
+ type?: string;
52
+ /** Optional worker version */
53
+ version?: string;
54
+ /** Any other configuration options */
55
+ [key: string]: any;
56
+ };
57
+ /** Timestamp of when the worker was created */
58
+ createdAt: number;
59
+ /** Timestamp of when the worker was last updated */
60
+ updatedAt: number;
61
+ }
62
+ /**
63
+ * Worker registration options
64
+ */
65
+ export interface WorkerRegistrationOptions {
66
+ /** Name of the worker */
67
+ name: string;
68
+ /** Description of the worker */
69
+ description?: string;
70
+ /** Endpoint URL/path of the worker */
71
+ endpoint: string;
72
+ /** Protocol used by the worker */
73
+ protocol?: string;
74
+ /** Environment variables in KEY=VALUE format */
75
+ env?: string[];
76
+ /** Path to configuration file */
77
+ config?: string;
78
+ /** Worker type */
79
+ type?: string;
80
+ }
81
+ /**
82
+ * Worker manager interface
83
+ */
84
+ export interface WorkerManager {
85
+ /** Register a new worker */
86
+ register(options: WorkerRegistrationOptions): Promise<Worker>;
87
+ /** Get a worker by ID */
88
+ get(id: string): Promise<Worker | null>;
89
+ /** List all registered workers */
90
+ list(): Promise<Worker[]>;
91
+ /** Update a worker */
92
+ update(id: string, updates: Partial<Worker>): Promise<Worker>;
93
+ /** Remove a worker */
94
+ remove(id: string): Promise<boolean>;
95
+ /** Start a worker */
96
+ start(id: string): Promise<boolean>;
97
+ /** Stop a worker */
98
+ stop(id: string): Promise<boolean>;
99
+ /** Check worker health */
100
+ checkHealth(id: string): Promise<boolean>;
101
+ }
102
+ //# sourceMappingURL=worker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/types/worker.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,MAAM,EAAE,OAAO,CAAC;IAChB,iEAAiE;IACjE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,mCAAmC;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,mDAAmD;IACnD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,sDAAsD;IACtD,MAAM,EAAE;QACN,0CAA0C;QAC1C,WAAW,CAAC,EAAE,iBAAiB,CAAC;QAChC,+DAA+D;QAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,8BAA8B;QAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,sCAAsC;QACtC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;IACF,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,iCAAiC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,yBAAyB;IACzB,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC,kCAAkC;IAClC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1B,sBAAsB;IACtB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9D,sBAAsB;IACtB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,qBAAqB;IACrB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,oBAAoB;IACpB,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,0BAA0B;IAC1B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3C"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Worker specification for Tonk
3
+ *
4
+ * This file defines the standard format for worker definitions in Tonk.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/types/worker.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}