tywrap 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +319 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +263 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config/index.d.ts +41 -0
  8. package/dist/config/index.d.ts.map +1 -0
  9. package/dist/config/index.js +234 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/core/analyzer.d.ts +63 -0
  12. package/dist/core/analyzer.d.ts.map +1 -0
  13. package/dist/core/analyzer.js +676 -0
  14. package/dist/core/analyzer.js.map +1 -0
  15. package/dist/core/discovery.d.ts +85 -0
  16. package/dist/core/discovery.d.ts.map +1 -0
  17. package/dist/core/discovery.js +344 -0
  18. package/dist/core/discovery.js.map +1 -0
  19. package/dist/core/generator.d.ts +37 -0
  20. package/dist/core/generator.d.ts.map +1 -0
  21. package/dist/core/generator.js +368 -0
  22. package/dist/core/generator.js.map +1 -0
  23. package/dist/core/mapper.d.ts +40 -0
  24. package/dist/core/mapper.d.ts.map +1 -0
  25. package/dist/core/mapper.js +401 -0
  26. package/dist/core/mapper.js.map +1 -0
  27. package/dist/core/validation.d.ts +79 -0
  28. package/dist/core/validation.d.ts.map +1 -0
  29. package/dist/core/validation.js +486 -0
  30. package/dist/core/validation.js.map +1 -0
  31. package/dist/index.d.ts +26 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +29 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/runtime/base.d.ts +12 -0
  36. package/dist/runtime/base.d.ts.map +1 -0
  37. package/dist/runtime/base.js +6 -0
  38. package/dist/runtime/base.js.map +1 -0
  39. package/dist/runtime/errors.d.ts +17 -0
  40. package/dist/runtime/errors.d.ts.map +1 -0
  41. package/dist/runtime/errors.js +21 -0
  42. package/dist/runtime/errors.js.map +1 -0
  43. package/dist/runtime/http.d.ts +22 -0
  44. package/dist/runtime/http.d.ts.map +1 -0
  45. package/dist/runtime/http.js +79 -0
  46. package/dist/runtime/http.js.map +1 -0
  47. package/dist/runtime/index.d.ts +8 -0
  48. package/dist/runtime/index.d.ts.map +1 -0
  49. package/dist/runtime/index.js +17 -0
  50. package/dist/runtime/index.js.map +1 -0
  51. package/dist/runtime/node.d.ts +48 -0
  52. package/dist/runtime/node.d.ts.map +1 -0
  53. package/dist/runtime/node.js +328 -0
  54. package/dist/runtime/node.js.map +1 -0
  55. package/dist/runtime/optimized-node.d.ts +131 -0
  56. package/dist/runtime/optimized-node.d.ts.map +1 -0
  57. package/dist/runtime/optimized-node.js +622 -0
  58. package/dist/runtime/optimized-node.js.map +1 -0
  59. package/dist/runtime/protocol.d.ts +3 -0
  60. package/dist/runtime/protocol.d.ts.map +1 -0
  61. package/dist/runtime/protocol.js +3 -0
  62. package/dist/runtime/protocol.js.map +1 -0
  63. package/dist/runtime/pyodide.d.ts +27 -0
  64. package/dist/runtime/pyodide.d.ts.map +1 -0
  65. package/dist/runtime/pyodide.js +191 -0
  66. package/dist/runtime/pyodide.js.map +1 -0
  67. package/dist/tools/python_suite.js +173 -0
  68. package/dist/tools/python_suite.js.map +1 -0
  69. package/dist/types/index.d.ts +299 -0
  70. package/dist/types/index.d.ts.map +1 -0
  71. package/dist/types/index.js +5 -0
  72. package/dist/types/index.js.map +1 -0
  73. package/dist/tywrap.d.ts +29 -0
  74. package/dist/tywrap.d.ts.map +1 -0
  75. package/dist/tywrap.js +589 -0
  76. package/dist/tywrap.js.map +1 -0
  77. package/dist/utils/bundle-optimizer.d.ts +182 -0
  78. package/dist/utils/bundle-optimizer.d.ts.map +1 -0
  79. package/dist/utils/bundle-optimizer.js +680 -0
  80. package/dist/utils/bundle-optimizer.js.map +1 -0
  81. package/dist/utils/cache.d.ts +149 -0
  82. package/dist/utils/cache.d.ts.map +1 -0
  83. package/dist/utils/cache.js +492 -0
  84. package/dist/utils/cache.js.map +1 -0
  85. package/dist/utils/codec.d.ts +94 -0
  86. package/dist/utils/codec.d.ts.map +1 -0
  87. package/dist/utils/codec.js +150 -0
  88. package/dist/utils/codec.js.map +1 -0
  89. package/dist/utils/logger.d.ts +42 -0
  90. package/dist/utils/logger.d.ts.map +1 -0
  91. package/dist/utils/logger.js +140 -0
  92. package/dist/utils/logger.js.map +1 -0
  93. package/dist/utils/memory-profiler.d.ts +123 -0
  94. package/dist/utils/memory-profiler.d.ts.map +1 -0
  95. package/dist/utils/memory-profiler.js +426 -0
  96. package/dist/utils/memory-profiler.js.map +1 -0
  97. package/dist/utils/parallel-processor.d.ts +146 -0
  98. package/dist/utils/parallel-processor.d.ts.map +1 -0
  99. package/dist/utils/parallel-processor.js +636 -0
  100. package/dist/utils/parallel-processor.js.map +1 -0
  101. package/dist/utils/python.d.ts +8 -0
  102. package/dist/utils/python.d.ts.map +1 -0
  103. package/dist/utils/python.js +56 -0
  104. package/dist/utils/python.js.map +1 -0
  105. package/dist/utils/runtime.d.ts +153 -0
  106. package/dist/utils/runtime.d.ts.map +1 -0
  107. package/dist/utils/runtime.js +519 -0
  108. package/dist/utils/runtime.js.map +1 -0
  109. package/package.json +136 -0
  110. package/runtime/python_bridge.py +476 -0
  111. package/src/cli.ts +331 -0
  112. package/src/config/index.ts +289 -0
  113. package/src/core/analyzer.ts +788 -0
  114. package/src/core/discovery.ts +415 -0
  115. package/src/core/generator.ts +447 -0
  116. package/src/core/mapper.ts +504 -0
  117. package/src/core/validation.ts +693 -0
  118. package/src/index.ts +83 -0
  119. package/src/runtime/base.ts +32 -0
  120. package/src/runtime/errors.ts +19 -0
  121. package/src/runtime/http.ts +132 -0
  122. package/src/runtime/index.ts +24 -0
  123. package/src/runtime/node.ts +431 -0
  124. package/src/runtime/optimized-node.ts +838 -0
  125. package/src/runtime/protocol.ts +2 -0
  126. package/src/runtime/pyodide.ts +228 -0
  127. package/src/types/global.d.ts +60 -0
  128. package/src/types/index.ts +410 -0
  129. package/src/tywrap.ts +669 -0
  130. package/src/utils/bundle-optimizer.ts +876 -0
  131. package/src/utils/cache.ts +634 -0
  132. package/src/utils/codec.ts +275 -0
  133. package/src/utils/logger.ts +201 -0
  134. package/src/utils/memory-profiler.ts +582 -0
  135. package/src/utils/parallel-processor.ts +879 -0
  136. package/src/utils/python.ts +79 -0
  137. package/src/utils/runtime.ts +616 -0
@@ -0,0 +1,622 @@
1
+ /**
2
+ * Optimized Node.js Runtime Bridge with Connection Pooling and Memory Management
3
+ * High-performance Python subprocess management for production workloads
4
+ */
5
+ import { delimiter, isAbsolute, join, resolve } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { EventEmitter } from 'events';
8
+ import { globalCache } from '../utils/cache.js';
9
+ import { decodeValueAsync } from '../utils/codec.js';
10
+ import { getDefaultPythonPath } from '../utils/python.js';
11
+ import { getVenvBinDir, getVenvPythonExe } from '../utils/runtime.js';
12
+ import { RuntimeBridge } from './base.js';
13
+ import { BridgeExecutionError, BridgeProtocolError } from './errors.js';
14
+ import { TYWRAP_PROTOCOL } from './protocol.js';
15
+ import { getComponentLogger } from '../utils/logger.js';
16
+ const log = getComponentLogger('OptimizedBridge');
17
+ function resolveDefaultScriptPath() {
18
+ try {
19
+ return fileURLToPath(new URL('../../runtime/python_bridge.py', import.meta.url));
20
+ }
21
+ catch {
22
+ return 'runtime/python_bridge.py';
23
+ }
24
+ }
25
+ function resolveVirtualEnv(virtualEnv, cwd) {
26
+ const venvPath = resolve(cwd, virtualEnv);
27
+ const binDir = join(venvPath, getVenvBinDir());
28
+ const pythonPath = join(binDir, getVenvPythonExe());
29
+ return { venvPath, binDir, pythonPath };
30
+ }
31
+ export class OptimizedNodeBridge extends RuntimeBridge {
32
+ processPool = [];
33
+ roundRobinIndex = 0;
34
+ nextId = 1;
35
+ cleanupTimer;
36
+ options;
37
+ emitter = new EventEmitter();
38
+ disposed = false;
39
+ // Performance monitoring
40
+ stats = {
41
+ totalRequests: 0,
42
+ totalTime: 0,
43
+ cacheHits: 0,
44
+ poolHits: 0,
45
+ poolMisses: 0,
46
+ processSpawns: 0,
47
+ processDeaths: 0,
48
+ memoryPeak: 0,
49
+ averageTime: 0,
50
+ cacheHitRate: 0,
51
+ };
52
+ constructor(options = {}) {
53
+ super();
54
+ const cwd = options.cwd ?? process.cwd();
55
+ const virtualEnv = options.virtualEnv ? resolve(cwd, options.virtualEnv) : '';
56
+ const venv = virtualEnv ? resolveVirtualEnv(virtualEnv, cwd) : undefined;
57
+ const scriptPath = options.scriptPath ?? resolveDefaultScriptPath();
58
+ const resolvedScriptPath = isAbsolute(scriptPath) ? scriptPath : resolve(cwd, scriptPath);
59
+ this.options = {
60
+ minProcesses: options.minProcesses ?? 2,
61
+ maxProcesses: options.maxProcesses ?? 8,
62
+ maxIdleTime: options.maxIdleTime ?? 300000, // 5 minutes
63
+ maxRequestsPerProcess: options.maxRequestsPerProcess ?? 1000,
64
+ pythonPath: options.pythonPath ?? venv?.pythonPath ?? getDefaultPythonPath(),
65
+ scriptPath: resolvedScriptPath,
66
+ virtualEnv,
67
+ cwd,
68
+ timeoutMs: options.timeoutMs ?? 30000,
69
+ enableJsonFallback: options.enableJsonFallback ?? false,
70
+ env: options.env ?? {},
71
+ warmupCommands: options.warmupCommands ?? [],
72
+ };
73
+ // Start with minimum processes
74
+ this.startCleanupScheduler();
75
+ }
76
+ async init() {
77
+ if (this.disposed) {
78
+ throw new Error('Bridge has been disposed');
79
+ }
80
+ // Ensure minimum processes are available
81
+ while (this.processPool.length < this.options.minProcesses) {
82
+ await this.spawnProcess();
83
+ }
84
+ // Warm up processes if configured
85
+ if (this.options.warmupCommands.length > 0) {
86
+ await this.warmupProcesses();
87
+ }
88
+ }
89
+ async call(module, functionName, args, kwargs) {
90
+ const startTime = performance.now();
91
+ // Try cache first for pure functions
92
+ const cacheKey = globalCache.generateKey('runtime_call', module, functionName, args, kwargs);
93
+ const cached = await globalCache.get(cacheKey);
94
+ if (cached !== null) {
95
+ this.stats.cacheHits++;
96
+ // Runtime cache HIT for ${module}.${functionName}
97
+ return cached;
98
+ }
99
+ try {
100
+ const result = await this.executeRequest({
101
+ method: 'call',
102
+ params: { module, functionName, args, kwargs },
103
+ });
104
+ const duration = performance.now() - startTime;
105
+ // Cache result for pure functions (simple heuristic)
106
+ if (this.isPureFunctionCandidate(functionName, args)) {
107
+ await globalCache.set(cacheKey, result, {
108
+ computeTime: duration,
109
+ dependencies: [module],
110
+ });
111
+ }
112
+ this.updateStats(duration);
113
+ return result;
114
+ }
115
+ catch (error) {
116
+ this.updateStats(performance.now() - startTime, true);
117
+ throw error;
118
+ }
119
+ }
120
+ async instantiate(module, className, args, kwargs) {
121
+ const startTime = performance.now();
122
+ try {
123
+ const result = await this.executeRequest({
124
+ method: 'instantiate',
125
+ params: { module, className, args, kwargs },
126
+ });
127
+ this.updateStats(performance.now() - startTime);
128
+ return result;
129
+ }
130
+ catch (error) {
131
+ this.updateStats(performance.now() - startTime, true);
132
+ throw error;
133
+ }
134
+ }
135
+ async callMethod(handle, methodName, args, kwargs) {
136
+ const startTime = performance.now();
137
+ try {
138
+ const result = await this.executeRequest({
139
+ method: 'call_method',
140
+ params: { handle, methodName, args, kwargs },
141
+ });
142
+ this.updateStats(performance.now() - startTime);
143
+ return result;
144
+ }
145
+ catch (error) {
146
+ this.updateStats(performance.now() - startTime, true);
147
+ throw error;
148
+ }
149
+ }
150
+ async disposeInstance(handle) {
151
+ await this.executeRequest({
152
+ method: 'dispose_instance',
153
+ params: { handle },
154
+ });
155
+ }
156
+ /**
157
+ * Execute request with intelligent process selection
158
+ */
159
+ async executeRequest(payload) {
160
+ let worker = this.selectOptimalWorker();
161
+ // Spawn new process if none available and under limit
162
+ if (!worker && this.processPool.length < this.options.maxProcesses) {
163
+ try {
164
+ worker = await this.spawnProcess();
165
+ this.stats.poolMisses++;
166
+ }
167
+ catch (error) {
168
+ throw new Error(`Failed to spawn worker process: ${error}`);
169
+ }
170
+ }
171
+ // Wait for worker if all are busy
172
+ worker ??= await this.waitForAvailableWorker();
173
+ this.stats.poolHits++;
174
+ return this.sendToWorker(worker, payload);
175
+ }
176
+ /**
177
+ * Select optimal worker based on load and performance
178
+ */
179
+ selectOptimalWorker() {
180
+ const availableWorkers = this.processPool.filter(w => !w.busy && w.process.connected);
181
+ if (availableWorkers.length === 0) {
182
+ return null;
183
+ }
184
+ // Simple round-robin for now, could be enhanced with load-based selection
185
+ const worker = availableWorkers[this.roundRobinIndex % availableWorkers.length];
186
+ this.roundRobinIndex = (this.roundRobinIndex + 1) % availableWorkers.length;
187
+ return worker ?? null;
188
+ }
189
+ /**
190
+ * Wait for any worker to become available
191
+ */
192
+ async waitForAvailableWorker(timeoutMs = 5000) {
193
+ return new Promise((resolvePromise, reject) => {
194
+ const timeout = setTimeout(() => {
195
+ reject(new Error('Timeout waiting for available worker'));
196
+ }, timeoutMs);
197
+ const checkWorker = () => {
198
+ const worker = this.selectOptimalWorker();
199
+ if (worker) {
200
+ clearTimeout(timeout);
201
+ resolvePromise(worker);
202
+ }
203
+ else {
204
+ // Check again in 10ms
205
+ setTimeout(checkWorker, 10);
206
+ }
207
+ };
208
+ checkWorker();
209
+ });
210
+ }
211
+ /**
212
+ * Send request to specific worker
213
+ */
214
+ async sendToWorker(worker, payload) {
215
+ const id = this.nextId++;
216
+ const message = { id, protocol: TYWRAP_PROTOCOL, ...payload };
217
+ const text = `${JSON.stringify(message)}\n`;
218
+ worker.busy = true;
219
+ worker.requestCount++;
220
+ worker.lastUsed = Date.now();
221
+ return new Promise((resolvePromise, reject) => {
222
+ const startTime = performance.now();
223
+ const timer = setTimeout(() => {
224
+ worker.pendingRequests.delete(id);
225
+ worker.busy = false;
226
+ reject(new Error(`Request ${id} timed out after ${this.options.timeoutMs}ms`));
227
+ }, this.options.timeoutMs);
228
+ worker.pendingRequests.set(id, {
229
+ resolve: (value) => {
230
+ const duration = performance.now() - startTime;
231
+ worker.stats.totalTime += duration;
232
+ worker.stats.totalRequests++;
233
+ worker.stats.averageTime = worker.stats.totalTime / worker.stats.totalRequests;
234
+ worker.busy = false;
235
+ resolvePromise(value);
236
+ },
237
+ reject: (error) => {
238
+ worker.stats.errorCount++;
239
+ worker.busy = false;
240
+ reject(error);
241
+ },
242
+ timer,
243
+ startTime,
244
+ });
245
+ if (!worker.process.stdin?.writable) {
246
+ worker.pendingRequests.delete(id);
247
+ worker.busy = false;
248
+ clearTimeout(timer);
249
+ reject(new Error('Worker process stdin not writable'));
250
+ return;
251
+ }
252
+ try {
253
+ worker.process.stdin.write(text);
254
+ }
255
+ catch (error) {
256
+ worker.pendingRequests.delete(id);
257
+ worker.busy = false;
258
+ clearTimeout(timer);
259
+ reject(error);
260
+ }
261
+ });
262
+ }
263
+ /**
264
+ * Spawn new worker process with optimizations
265
+ */
266
+ async spawnProcess() {
267
+ const { spawn } = await import('child_process');
268
+ const workerId = `worker_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
269
+ const env = {
270
+ ...process.env,
271
+ ...this.options.env,
272
+ PYTHONUNBUFFERED: '1', // Ensure immediate output
273
+ PYTHONDONTWRITEBYTECODE: '1', // Skip .pyc files for faster startup
274
+ };
275
+ if (!env.PYTHONUTF8) {
276
+ env.PYTHONUTF8 = '1';
277
+ }
278
+ if (!env.PYTHONIOENCODING) {
279
+ env.PYTHONIOENCODING = 'UTF-8';
280
+ }
281
+ if (this.options.virtualEnv) {
282
+ const venv = resolveVirtualEnv(this.options.virtualEnv, this.options.cwd);
283
+ env.VIRTUAL_ENV = venv.venvPath;
284
+ env.PATH = `${venv.binDir}${delimiter}${env.PATH ?? ''}`;
285
+ }
286
+ if (this.options.enableJsonFallback && !env.TYWRAP_CODEC_FALLBACK) {
287
+ env.TYWRAP_CODEC_FALLBACK = 'json';
288
+ }
289
+ const childProcess = spawn(this.options.pythonPath, [this.options.scriptPath], {
290
+ cwd: this.options.cwd,
291
+ stdio: ['pipe', 'pipe', 'pipe'],
292
+ env,
293
+ });
294
+ const worker = {
295
+ process: childProcess,
296
+ id: workerId,
297
+ requestCount: 0,
298
+ lastUsed: Date.now(),
299
+ busy: false,
300
+ buffer: '',
301
+ pendingRequests: new Map(),
302
+ stats: {
303
+ totalRequests: 0,
304
+ totalTime: 0,
305
+ averageTime: 0,
306
+ errorCount: 0,
307
+ },
308
+ };
309
+ // Setup process event handlers
310
+ this.setupProcessHandlers(worker);
311
+ this.processPool.push(worker);
312
+ this.stats.processSpawns++;
313
+ // Spawned Python worker process ${workerId} (pool size: ${this.processPool.length})
314
+ return worker;
315
+ }
316
+ /**
317
+ * Setup event handlers for worker process
318
+ */
319
+ setupProcessHandlers(worker) {
320
+ const childProcess = worker.process;
321
+ // Handle stdout data with efficient buffering
322
+ childProcess.stdout?.on('data', (chunk) => {
323
+ worker.buffer += chunk.toString();
324
+ let idx;
325
+ while ((idx = worker.buffer.indexOf('\n')) !== -1) {
326
+ const line = worker.buffer.slice(0, idx).trim();
327
+ worker.buffer = worker.buffer.slice(idx + 1);
328
+ if (!line) {
329
+ continue;
330
+ }
331
+ this.handleWorkerResponse(worker, line).catch(error => {
332
+ log.error('Error handling worker response', { workerId: worker.id, error: String(error) });
333
+ });
334
+ }
335
+ });
336
+ // Handle stderr for debugging
337
+ childProcess.stderr?.on('data', (chunk) => {
338
+ const errorText = chunk.toString().trim();
339
+ if (errorText) {
340
+ log.warn('Worker stderr', { workerId: worker.id, output: errorText });
341
+ }
342
+ });
343
+ // Handle process exit
344
+ childProcess.on('exit', code => {
345
+ log.warn('Worker exited', { workerId: worker.id, code });
346
+ this.handleWorkerExit(worker, code);
347
+ });
348
+ // Handle process errors
349
+ childProcess.on('error', error => {
350
+ log.error('Worker error', { workerId: worker.id, error: String(error) });
351
+ this.handleWorkerExit(worker, -1);
352
+ });
353
+ }
354
+ /**
355
+ * Handle response from worker process
356
+ */
357
+ async handleWorkerResponse(worker, line) {
358
+ try {
359
+ const msg = JSON.parse(line);
360
+ if (msg.protocol !== TYWRAP_PROTOCOL) {
361
+ this.handleProtocolError(worker, line, new BridgeProtocolError(`Invalid protocol. Expected ${TYWRAP_PROTOCOL} but received ${String(msg.protocol)}`));
362
+ return;
363
+ }
364
+ if (typeof msg.id !== 'number') {
365
+ this.handleProtocolError(worker, line, new BridgeProtocolError('Invalid response id'));
366
+ return;
367
+ }
368
+ const pending = worker.pendingRequests.get(msg.id);
369
+ if (!pending) {
370
+ this.handleProtocolError(worker, line, new BridgeProtocolError(`Unexpected response id ${msg.id}`));
371
+ return;
372
+ }
373
+ worker.pendingRequests.delete(msg.id);
374
+ if (pending.timer) {
375
+ clearTimeout(pending.timer);
376
+ }
377
+ if (msg.error) {
378
+ pending.reject(this.errorFrom(msg.error));
379
+ }
380
+ else {
381
+ try {
382
+ const decoded = await decodeValueAsync(msg.result);
383
+ pending.resolve(decoded);
384
+ }
385
+ catch (decodeError) {
386
+ pending.reject(new BridgeProtocolError(`Failed to decode response: ${decodeError}`));
387
+ }
388
+ }
389
+ }
390
+ catch (parseError) {
391
+ this.handleProtocolError(worker, line, parseError);
392
+ }
393
+ }
394
+ /**
395
+ * Handle worker process exit
396
+ */
397
+ handleWorkerExit(worker, code) {
398
+ // Reject all pending requests
399
+ for (const [, pending] of worker.pendingRequests) {
400
+ if (pending.timer) {
401
+ clearTimeout(pending.timer);
402
+ }
403
+ pending.reject(new Error(`Worker process exited with code ${code}`));
404
+ }
405
+ worker.pendingRequests.clear();
406
+ // Remove from pool
407
+ const index = this.processPool.indexOf(worker);
408
+ if (index >= 0) {
409
+ this.processPool.splice(index, 1);
410
+ this.stats.processDeaths++;
411
+ }
412
+ // Spawn replacement if needed and not disposing
413
+ if (!this.disposed && this.processPool.length < this.options.minProcesses) {
414
+ this.spawnProcess().catch(error => {
415
+ log.error('Failed to spawn replacement worker', { error: String(error) });
416
+ });
417
+ }
418
+ }
419
+ /**
420
+ * Warm up processes with configured commands
421
+ */
422
+ async warmupProcesses() {
423
+ const warmupPromises = this.processPool.map(async (worker) => {
424
+ for (const cmd of this.options.warmupCommands) {
425
+ try {
426
+ await this.sendToWorker(worker, {
427
+ method: cmd.method,
428
+ params: cmd.params,
429
+ });
430
+ }
431
+ catch (error) {
432
+ log.warn('Warmup command failed', { workerId: worker.id, error: String(error) });
433
+ }
434
+ }
435
+ });
436
+ await Promise.all(warmupPromises);
437
+ // Warmed up ${this.processPool.length} worker processes
438
+ }
439
+ /**
440
+ * Heuristic to determine if function result should be cached
441
+ */
442
+ isPureFunctionCandidate(functionName, args) {
443
+ // Simple heuristics - could be made more sophisticated
444
+ const pureFunctionPatterns = [
445
+ /^(get|fetch|read|load|find|search|query|select)_/i,
446
+ /^(compute|calculate|process|transform|convert)_/i,
447
+ /^(encode|decode|serialize|deserialize)_/i,
448
+ ];
449
+ const impureFunctionPatterns = [
450
+ /^(set|save|write|update|insert|delete|create|modify)_/i,
451
+ /^(send|post|put|patch)_/i,
452
+ /random|uuid|timestamp|now|current/i,
453
+ ];
454
+ // Don't cache if function name suggests mutation
455
+ if (impureFunctionPatterns.some(pattern => pattern.test(functionName))) {
456
+ return false;
457
+ }
458
+ // Cache if function name suggests pure computation
459
+ if (pureFunctionPatterns.some(pattern => pattern.test(functionName))) {
460
+ return true;
461
+ }
462
+ // Don't cache if args contain mutable objects (very basic check)
463
+ const hasComplexArgs = args.some(arg => arg !== null && typeof arg === 'object' && !(arg instanceof Date));
464
+ return !hasComplexArgs && args.length <= 3; // Cache simple calls with few args
465
+ }
466
+ /**
467
+ * Update performance statistics
468
+ */
469
+ updateStats(duration, _error = false) {
470
+ this.stats.totalRequests++;
471
+ this.stats.totalTime += duration;
472
+ const currentMemory = process.memoryUsage().heapUsed;
473
+ if (currentMemory > this.stats.memoryPeak) {
474
+ this.stats.memoryPeak = currentMemory;
475
+ }
476
+ }
477
+ /**
478
+ * Get performance statistics
479
+ */
480
+ getStats() {
481
+ const avgTime = this.stats.totalRequests > 0 ? this.stats.totalTime / this.stats.totalRequests : 0;
482
+ const hitRate = this.stats.totalRequests > 0 ? this.stats.cacheHits / this.stats.totalRequests : 0;
483
+ return {
484
+ ...this.stats,
485
+ averageTime: avgTime,
486
+ cacheHitRate: hitRate,
487
+ poolSize: this.processPool.length,
488
+ busyWorkers: this.processPool.filter(w => w.busy).length,
489
+ memoryUsage: process.memoryUsage(),
490
+ workerStats: this.processPool.map(w => ({
491
+ id: w.id,
492
+ requestCount: w.requestCount,
493
+ averageTime: w.stats.averageTime,
494
+ errorCount: w.stats.errorCount,
495
+ busy: w.busy,
496
+ pendingRequests: w.pendingRequests.size,
497
+ })),
498
+ };
499
+ }
500
+ /**
501
+ * Cleanup idle processes
502
+ */
503
+ async cleanup() {
504
+ const now = Date.now();
505
+ const idleWorkers = this.processPool.filter(w => !w.busy &&
506
+ now - w.lastUsed > this.options.maxIdleTime &&
507
+ this.processPool.length > this.options.minProcesses);
508
+ for (const worker of idleWorkers) {
509
+ await this.terminateWorker(worker);
510
+ }
511
+ // Restart workers that have handled too many requests
512
+ const overusedWorkers = this.processPool.filter(w => !w.busy && w.requestCount >= this.options.maxRequestsPerProcess);
513
+ for (const worker of overusedWorkers) {
514
+ await this.terminateWorker(worker);
515
+ if (this.processPool.length < this.options.minProcesses) {
516
+ await this.spawnProcess();
517
+ }
518
+ }
519
+ }
520
+ /**
521
+ * Gracefully terminate a worker
522
+ */
523
+ async terminateWorker(worker) {
524
+ const index = this.processPool.indexOf(worker);
525
+ if (index >= 0) {
526
+ this.processPool.splice(index, 1);
527
+ }
528
+ // Reject pending requests
529
+ for (const [, pending] of worker.pendingRequests) {
530
+ if (pending.timer) {
531
+ clearTimeout(pending.timer);
532
+ }
533
+ pending.reject(new Error('Worker process terminated'));
534
+ }
535
+ // Graceful termination
536
+ try {
537
+ if (worker.process.connected) {
538
+ worker.process.kill('SIGTERM');
539
+ // Force kill if not terminated in 5 seconds
540
+ setTimeout(() => {
541
+ if (!worker.process.killed) {
542
+ worker.process.kill('SIGKILL');
543
+ }
544
+ }, 5000);
545
+ }
546
+ }
547
+ catch (error) {
548
+ log.warn('Error terminating worker', { workerId: worker.id, error: String(error) });
549
+ }
550
+ // Terminated worker ${worker.id}
551
+ }
552
+ /**
553
+ * Start cleanup scheduler
554
+ */
555
+ startCleanupScheduler() {
556
+ this.cleanupTimer = setInterval(async () => {
557
+ try {
558
+ await this.cleanup();
559
+ }
560
+ catch (error) {
561
+ log.error('Cleanup error', { error: String(error) });
562
+ }
563
+ }, 60000); // Cleanup every minute
564
+ }
565
+ /**
566
+ * Dispose all resources
567
+ */
568
+ async dispose() {
569
+ if (this.disposed) {
570
+ return;
571
+ }
572
+ this.disposed = true;
573
+ if (this.cleanupTimer) {
574
+ clearInterval(this.cleanupTimer);
575
+ this.cleanupTimer = undefined;
576
+ }
577
+ // Terminate all workers
578
+ const terminationPromises = this.processPool.map(worker => this.terminateWorker(worker));
579
+ await Promise.all(terminationPromises);
580
+ this.processPool.length = 0;
581
+ this.emitter.removeAllListeners();
582
+ // Disposed optimized Node.js bridge
583
+ }
584
+ errorFrom(err) {
585
+ const e = new BridgeExecutionError(`${err.type}: ${err.message}`);
586
+ e.traceback = err.traceback;
587
+ return e;
588
+ }
589
+ handleProtocolError(worker, line, error) {
590
+ const snippet = line.length > 500 ? `${line.slice(0, 500)}…` : line;
591
+ const detail = error instanceof Error ? error.message : String(error);
592
+ const hint = 'Ensure your Python code does not print to stdout and that the bridge outputs only JSON lines.';
593
+ const msg = `Protocol error from Python bridge. ${detail}\n${hint}\nOffending line: ${snippet}`;
594
+ const bridgeError = new BridgeProtocolError(msg);
595
+ for (const [, pending] of worker.pendingRequests) {
596
+ if (pending.timer) {
597
+ clearTimeout(pending.timer);
598
+ }
599
+ pending.reject(bridgeError);
600
+ }
601
+ worker.pendingRequests.clear();
602
+ try {
603
+ if (worker.process.connected) {
604
+ worker.process.kill('SIGTERM');
605
+ }
606
+ }
607
+ catch (killError) {
608
+ log.warn('Error terminating worker after protocol error', { workerId: worker.id, error: String(killError) });
609
+ }
610
+ const index = this.processPool.indexOf(worker);
611
+ if (index >= 0) {
612
+ this.processPool.splice(index, 1);
613
+ this.stats.processDeaths++;
614
+ }
615
+ if (!this.disposed && this.processPool.length < this.options.minProcesses) {
616
+ this.spawnProcess().catch(spawnError => {
617
+ log.error('Failed to spawn replacement worker after protocol error', { error: String(spawnError) });
618
+ });
619
+ }
620
+ }
621
+ }
622
+ //# sourceMappingURL=optimized-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"optimized-node.js","sourceRoot":"","sources":["../../src/runtime/optimized-node.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const TYWRAP_PROTOCOL = "tywrap/1";
2
+ export declare const TYWRAP_PROTOCOL_VERSION = 1;
3
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/runtime/protocol.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,aAAa,CAAC;AAC1C,eAAO,MAAM,uBAAuB,IAAI,CAAC"}
@@ -0,0 +1,3 @@
1
+ export const TYWRAP_PROTOCOL = 'tywrap/1';
2
+ export const TYWRAP_PROTOCOL_VERSION = 1;
3
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../src/runtime/protocol.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CAAC;AAC1C,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC"}